- Documented the actual local CLI contract in
API_STATUS.mdand corrected outdated REST/OpenAPI claims in both READMEs. CodeBox currently supports startup-file handoff only; no REST, OpenAPI, token, or remote-control surface exists.
Alle wesentlichen Änderungen an CodeBox werden hier dokumentiert.
core/editor.py:- Visueller Breakpoint-Indikator im Zeilennummern-Gutter (
LineNumberArea): Antialiased roter Kreis (#e51400) mit dynamischer Skalierung und zentrierter Ausrichtung. - Breakpoint-Management auf
CodeEditor:toggle_breakpoint(line),has_breakpoint(line),get_breakpoints(),set_breakpoints(lines),clear_breakpoints(). - Signal
breakpointsChangedinformiert externe Listener über modifizierte Breakpoint-Mengen. - Interaktives Umschalten von Breakpoints per Mausklick in die Gutter-Fläche links neben den Zeilennummern mit Zeiger-Cursor (
PointingHandCursor).
- Visueller Breakpoint-Indikator im Zeilennummern-Gutter (
ui/main_window.py:- Menüpunkt Ausführen -> Breakpoint umschalten (
F9) und Ausführen -> Alle Breakpoints löschen (Ctrl+Shift+F9) mit Statusleistenmeldungen und Tastenkürzeln. - Submenü Datei -> Zuletzt geöffnete Dateien mit persistenter Nachverfolgung (
recent_filesin Config-Settings), automatischer Bereinigung nicht mehr existierender Pfade, De-Duplizierung und Aktion "Verlauf leeren". - Automatisches Erfassen geöffneter und gespeicherter Dateien in
open_pathundsave_file. - Robuste C++-Objekt-Lebenszyklus-Absicherung (
isValid-Check & MainWindow-Parenting) gegen Shiboken-Wrapper-Invalidierung bei Menübaum-Traversierung.
- Menüpunkt Ausführen -> Breakpoint umschalten (
ui/shortcuts_dialog.py:- Registrierung von
F9(Breakpoint umschalten) undCtrl+Shift+F9(Alle Breakpoints löschen) in der Tastenkürzel-Übersicht unter Ausführen.
- Registrierung von
ui/command_palette.py:- Schnellauswahl-Aktionen für Breakpoint-Umschaltung und -Bereinigung in den Quick Actions der Befehlspalette.
tests/test_breakpoints_and_recent_files.py:- 5 neue automatisierte Tests zur Überprüfung von Editor-Breakpoint-Logik, Gutter-Breiten, MainWindow-Menüaktionen und persistenter Recent-Files-Verwaltung.
core/todo_scanner.py:- Neue Aufgaben-Scanner-Engine zur automatischen Erkennung standardisierter Kommentar-Tags (
TODO,FIXME,BUG,HACK,XXX,NOTE) über den gesamten Arbeitsbereich. - Datenklasse
TodoItemmit Quellcodepfad, relativer Projektposition, Ordnerzugehörigkeit, 1-basierten Zeilen- und Spaltenkoordinaten, Tag-Typ, optionaler Autorenangabe (TODO(autor):) und Bereinigung schließender Kommentarzeichen (*/,-->). - Robuste reguläre Ausdruckserkennung für diverse Sprachkommentarstile (
#,//,/*,<!--,--,%,@,;,*,- [ ],- [x]) sowie zeilenbasierte Fallbacks unter Ausschluss von Programmvariablen. - Asynchroner Hintergrund-Worker
TodoScanWorker(QThread) für Multi-Root-Arbeitsbereiche mit blockierungsfreier Verarbeitung, Abbruch-Unterstützung, Fortschrittsmeldung und automatischem Ausschluss von VCS- und Cache-Verzeichnissen (.git,node_modules,__pycache__etc.). TodoScannerManagermit Caching, synchronem Einzelfile-Rescan (rescan_file) bei Speichervorgängen und Signalübermittlung (scanStarted,scanProgress,scanFinished,todosUpdated).
- Neue Aufgaben-Scanner-Engine zur automatischen Erkennung standardisierter Kommentar-Tags (
ui/todo_panel.py:- Neues
TodoPanelals persistenter Bestandteil der linken Seitenleiste (sidebar_tabs, Tab 1: "Aufgaben"). - Dynamische Filterung nach Suchtext (Echtzeit über Text, Dateipfad, Autor, Tag) und Tag-Auswahl (
Alle Tags,TODO,FIXME,BUG,HACK,XXX,NOTE). - Flexible Umschaltung der Baumansicht: Gruppierung nach Datei oder Gruppierung nach Tag / Priorität mit farbigen Badges (
BUG/FIXMEin Rot,HACK/XXXin Gold,TODOin Blau,NOTEin Grün). - Tastaturfreundliche Bedienung via Return/Enter sowie Doppelklick zum direkten Anspringen der Quellcodezeile im Editor (
todoActivated). - Kontextmenü: "Zur Fundstelle springen", "Dateipfad kopieren", "Aufgabentext kopieren", "Ganze Zeile kopieren".
- Vollständige Barrierefreiheit mit
accessibleNameundaccessibleDescriptionauf allen UI-Elementen.
- Neues
ui/main_window.py:- Integration der linken Seitenleiste
sidebar_tabsmit Reitern "Projekt" und "Aufgaben" inklusive dynamischer Badge-Zähler (z. B.Aufgaben (7)). - Neues Menüelement Ansicht -> Aufgaben & TODOs mit Tastenkürzel
Ctrl+Alt+T. - Dedizierte Toggle- und Show-Methoden
_toggle_todo_panel()undshow_todo_panel(). - Automatischer Rescan des Arbeitsbereichs bei Änderungen von Projektordnern (
workspace.foldersChanged) und synchroner Rescan geänderter Dateien direkt nach dem Speichern (_after_tab_saved). - Sprungmethode
_on_todo_activatedöffnet die Zieldatei, fokussiert den Editor und markiert die Fundstelle zentriert.
- Integration der linken Seitenleiste
ui/command_palette.py&ui/shortcuts_dialog.py:- Registrierung von
Ctrl+Alt+Tin der interaktiven Befehlspalette und im Tastenkürzel-Dialog unter Ansicht.
- Registrierung von
tests/test_todo_scanner.py:- 6 neue Unittests und Integrationstests für Regex-Erkennung, Dateiscans, Grenzfälle (Binär- und Übergrößendateien), Cache-/Manager-Logik, Panel-UI-Filter/Tastaturbedienung und MainWindow-Integration.
features/lsp_client.py:- LSP-Funktionen erweitert um
request_definition(uri, line, col, callback)(textDocument/definition) undrequest_references(uri, line, col, include_declaration, callback)(textDocument/references). - Client-Capabilities um
definition: {}undreferences: {}erweitert. - Sicheres URL- und Pfadparsing mit
lsp_uri_to_path(robuste Behandlung von Windows-Laufwerksbuchstabenfile:///C:/...und Sonderzeichen/Leerzeichen viaunquote). - Robuste Normalisierung mit
parse_lsp_locations(result)für alle LSP-Formate (Location,Location[]undLocationLink[]) mit 1-basierter Koordinatenumrechnung.
- LSP-Funktionen erweitert um
core/symbol_search.py:- Neues Kernmodul für semantische und textuelle Definition- & Referenz-Erkennung mit Heuristik-Fallback.
- Sprachspezifische Regex-Muster für Python (
def,class,async def), JS/TS (function,class,const/let/var =), Rust (fn,struct,enum,impl), Go (func,type), C/C++ (struct,class, Funktionssignaturen). - Deterministischer Wortgrenzen-Scanner
find_references_fallbackohne versehentliche Teilworttreffer. - Respektiert Dateigrößen-Limits (2 MB) und
IGNORED_DIRS(.git,__pycache__,.venv,node_modulesetc.).
ui/references_panel.py:- Neues Panel
ReferencesPanelals permanenter Tab im unteren Bereich (bottom_tabs, Tab-Index 3). - Gruppierte Baumansicht nach Datei mit Badge-Anzahl pro Datei und Zeilennummern.
- Interaktives Navigieren per Doppelklick oder Return/Enter-Taste mit Signal
referenceActivated. - Schaltfläche "Leeren" und barrierefreie Accessible-Descriptions.
- Neues Panel
core/editor.py:- Editor-Signale
definitionRequested(int, int, str)undreferencesRequested(int, int, str). - Methoden
get_symbol_at_cursor(),request_goto_definition(),request_find_references(). - Dynamisches Kontextmenü: "Zur Definition von '' springen\tF12", "Referenzen für '' suchen\tShift+F12", "In Dateien suchen...\tCtrl+Shift+F" und "Zeilenkommentar umschalten\tCtrl+/".
- Editor-Signale
ui/main_window.py:- Aktionen Zur Definition springen (
F12) und Alle Referenzen suchen (Shift+F12) im Menü Bearbeiten. - Zentrale Signalweiterleitung in
_connect_cursor(tab)für alle bestehenden, neuen und geteilten Tabs. - Automatischer Wechsel zwischen aktiver LSP-Anfrage und schnellem Regex-Fallback bei inaktivem Server oder leeren Ergebnissen.
- Präzise In-Tab-Navigation
_jump_to_position_in_tabfür dasselbe Dokument undopen_path_atfür externe Projektdateien.
- Aktionen Zur Definition springen (
ui/command_palette.py&ui/shortcuts_dialog.py:- Schnellaktionen und Tastenkürzel für F12 und Shift+F12 registriert und dokumentiert.
tests/test_lsp_definition_references.py:- 16 neue automatisierte Unittests für URI-Parsing, Location-Normalisierung, LSP-Request-Formate, Regex-Fallbacks, Referenzen-Panel und MainWindow-Integration.
core/file_search.py: Neues Kernmodul für schnelle datei- und projektübergreifende Textsuche:- Datenklassen
SearchMatch(mit exakten 1-basierten Zeilen- und Spaltenangaben, Trefferlänge und Zeilenvorschau),FileSearchResultundSearchOptions. - Robuster Regex-Compiler
compile_search_regexmit Unterstützung für Groß-/Kleinschreibung, Wortgrenzen (\b) und benutzerdefinierte Regex-Muster inklusive detaillierter Syntaxfehler-Rückmeldungen. - Leistungsfähiges Glob-Filtersystem
matches_glob_patternsfür Include- und Exclude-Filter (z. B.*.py,*.ts,dist/*). - Asynchroner Multi-Root
SearchWorker(QThread) mit blockierungsfreier Verarbeitung, Abbruch-Unterstützung (cancel()), Fortschrittsmeldung (searchProgress), inkrementeller Trefferübermittlung (fileCompleted) und präziser Zeitmessung. - Automatische Null-Byte-Erkennung (
is_binary_file) zum sicheren Überspringen von Binärdateien und robuste Kodierungs-Fallbacks (UTF-8 -> CP1252 -> Latin-1).
- Datenklassen
ui/find_in_files_dialog.py: Moderner, nicht-modaler Suchdialog (FindInFilesDialog):- Tastenkürzel
Ctrl+Shift+F(sowie Alt-Mnemonics für Schalter:Alt+KGroß-/Kleinschreibung,Alt+GGanzes Wort,Alt+RRegulärer Ausdruck,Alt+SSuchfeld). - Flexible Suchbereichsauswahl über alle Arbeitsbereichs-Ordner oder gezielt für einzelne Unterordner.
- Glob-Filter für Dateitypen (Einschließen / Ausschließen).
- Interaktiver Trefferbaum (
QTreeWidget) mit Dateigruppierung, Trefferanzahl-Badges, farblich hervorgehobenen Zeilennummern und Kontextzeilenvorschau. - Direktsprung in den Editor per Enter oder Doppelklick mit Cursorfokussierung, Zentrierung und Hervorhebung des exakten Treffers.
- Vollständige Barrierefreiheit (Accessible Names, Accessible Descriptions und Statusleiste mit Fortschrittsanzeige).
- Tastenkürzel
ui/main_window.py:- Menü Bearbeiten um In Dateien suchen... (
Ctrl+Shift+F) erweitert. - Methoden
show_find_in_files(übernimmt automatisch aktuellen markierten Text aus dem Editor) undopen_path_atfür punktgenaues Öffnen und Hervorheben.
- Menü Bearbeiten um In Dateien suchen... (
features/project_view.py:- Ordner-Kontextmenü erweitert um In diesem Ordner suchen... zur direkten Fokussierung der Suche auf ein Verzeichnis.
- Signal
findInFilesRequestedangebunden.
ui/command_palette.py&ui/shortcuts_dialog.py:- In Dateien suchen (Projektweite Textsuche) (
Ctrl+Shift+F) in die Befehlspalette (Ctrl+Shift+P) und die Tastenkürzelübersicht aufgenommen.
- In Dateien suchen (Projektweite Textsuche) (
core/workspace.py: Neues Kernmodul für Multi-Root-Arbeitsbereiche:- Datenklasse
WorkspaceFolder(path,name,to_dict,from_dict) mit portabler relativer Pfadberechnung. WorkspaceManager(QObject) mit SignalenfoldersChanged,activeFolderChanged(object),workspaceLoaded(str).- Methoden
add_folder,remove_folder,set_active_folder,set_single_folder,clear,find_folder_for_file. - Datei-Format
.codebox-workspace(JSON) mit Metadaten, Schema-Version und relativer Pfadauflösung für geräteübergreifende Portabilität (OneDrive/Multi-Device). - Methode
collect_all_fileszum schnellen Ordner-übergreifenden Durchsuchen mit Filterregeln.
- Datenklasse
features/project_view.py:- Dynamischer Arbeitsbereich-Umschalter (
workspace_widgetmitworkspace_combo,btn_add_root,btn_remove_root), der sich bei mehreren geöffneten Ordnern automatisch einblendet und bei Einzelordnern für ein aufgeräumtes Design unsichtbar bleibt. - Nahtloser Wechsel des aktiven Ordners und Aktualisierung von Git-Branch und Dateibaum.
- Kontextmenü-Aktionen im Dateibaum für Verzeichnisse: "Ordner zum Arbeitsbereich hinzufügen" und "Ordner aus Arbeitsbereich entfernen".
- Dynamischer Arbeitsbereich-Umschalter (
ui/main_window.py:- Menü Datei erweitert um:
- Ordner öffnen... (
Ctrl+Shift+O): Öffnet einen Ordner als einzelnen Arbeitsbereich. - Ordner zum Arbeitsbereich hinzufügen...: Fügt einen weiteren Ordner hinzu.
- Arbeitsbereich öffnen...: Lädt eine
.codebox-workspaceKonfiguration. - Arbeitsbereich speichern unter...: Speichert den aktuellen Arbeitsbereich inklusive aller Ordner.
- Arbeitsbereich schließen: Schließt alle Ordner des aktuellen Arbeitsbereichs.
- Ordner öffnen... (
- Intelligente Dateizuordnung (
_on_file_changed): Erkennt automatisch, welchem Arbeitsbereichs-Ordner eine geöffnete Datei angehört, und wechselt den aktiven Ordner, ohne andere Arbeitsbereichs-Ordner zu verwerfen. - Automatische Synchronisation des integrierten Terminals auf den jeweils aktiven Arbeitsbereichs-Ordner.
- Menü Datei erweitert um:
ui/command_palette.py:- Quick-Open (
Ctrl+P) durchsucht im Multi-Root-Modus alle Projektordner des Arbeitsbereichs gleichzeitig mit prägnanten Ordner-Badges (z. B.[backend] api/routes.py). - Neue Arbeitsbereichs-Aktionen stehen direkt über die Befehlspalette (
Ctrl+Shift+P) zur Verfügung.
- Quick-Open (
config/__init__.py:- Standardeinstellung
"recent_workspaces": []hinzugefügt.
- Standardeinstellung
ui/shortcuts_dialog.py:- Shortcuts-Übersicht um die neuen Arbeitsbereichs-Aktionen und
Ctrl+Shift+Oergänzt.
- Shortcuts-Übersicht um die neuen Arbeitsbereichs-Aktionen und
- Testsuite:
tests/test_workspace.py: 5 Unit-Tests fürWorkspaceManagerundWorkspaceFolder.tests/test_multi_root_workspace.py: 4 Integrations-Tests für UI, Lifecycle, Dateizuordnung und Quick-Open Suche.- 248 Tests bestanden, 1 übersprungen, 100% grün.
core/vim_mode.py: Neues Kernmodul mit vollständiger Vim-Zustandsmaschine (VimEngine,VimMode):- 4 Betriebsmodi:
NORMAL,INSERT,VISUAL(zeichenweise Markierung) undVISUAL_LINE(zeilenweise Markierung). - Terminal-authentischer Blockcursor im Normal- und Visual-Modus via adaptiver Fontmetrik (
QFontMetrics.horizontalAdvance). - Bewegungstasten:
h,j,k,l, Wortsprüngew,b,e, Zeilenbegrenzungen0,^,$, Dokumentensprüngegg,G,<N>Gsowie Halbseiten-ScrollenCtrl+D,Ctrl+U. - Ziffernpuffer & Zähler-Multiplikation (
3w,5j,2dd). - Umfassende Lösch- und Änderungsbefehle:
x,X,dd,dw,de,d$/D,d0,cw,cc/S,C,s,r<char>. - Kopieren & Einfügen (Yank/Put):
yy,Y,yw,y$,p,Pmit nativer Unterscheidung zwischen zeilen- und zeichenbasiertem Einfügen sowie Synchronisation mit dem System-Clipboard. - Weitere Aktionen: Fallwechsel (
~), Zeilen verbinden (J), Ein-/Ausrücken (>>,<<), Undo (u), Redo (Ctrl+R). - Bereichsoperationen im Visual- und Visual-Line-Modus (
d,x,y,c,>,<,~,u,U).
- 4 Betriebsmodi:
core/editor.py:vim_engineInstanz inCodeEditor.- Methoden
set_vim_mode_enabled(bool)undis_vim_mode_enabled() -> bool. - Key-Event Routing im Editor fängt Tastenanschläge bei aktivem Vim-Modus modal ab.
ui/main_window.py:- Menü Bearbeiten -> Vim-Modus (
Ctrl+Alt+V) mit checkbarem Zustand. - Statusleisten-Widget (
vim_label) mit Anzeige von-- NORMAL --,-- INSERT --,-- VISUAL --,-- VISUAL_LINE --und aktuellem Befehlspuffer (z. B.[3d]). - Propagierung des Vim-Zustands auf alle geöffneten Tabs beider Split-Ansichten.
- Automatische Registrierung in der Schnellauswahl / Befehlspalette (
Ctrl+Shift+P).
- Menü Bearbeiten -> Vim-Modus (
config/__init__.py:"vim_mode": FalseinDEFAULT_SETTINGSaufgenommen.
ui/settings_dialog.py:- Checkbox zur globalen Aktivierung/Deaktivierung des Vim-Modus.
ui/shortcuts_dialog.py:- Neue Dokumentations-Kategorie Vim-Modus mit vollständiger Tabelle aller Tastenbelegungen sowie Ergänzung unter Bearbeiten.
tests/test_vim_mode.py:- 27 automatisierte Unit Tests für Zustände, Navigation, Operatoren, Visual Mode, Zwischenablage, Editor- und UI-Integration (Gesamt: 239 passed, 1 skipped).
features/git_integration.py: Erweiterung derGitRepo-Klasse um vollständige Git-Staging-, Reset-, Verwerfen- und Commit-Funktionen:_run_git_result()für detaillierte Subprocess-Ergebnisse mit Rückgabewert, stdout und stderr.stage_file(filepath)undstage_all()(git add).unstage_file(filepath)undunstage_all()(git restore --staged/git reset HEAD).discard_file_changes(filepath)zum sicheren Verwerfen von Änderungen im Arbeitsbaum oder Löschen ungetrackter Dateien.commit(message)zum Erstellen von Commits mit Validierung leerer Nachrichten und Rückgabe von Ausgaben.
ui/git_commit_dialog.py: Neuer nativer DialogGitCommitDialog:- Zweispaltige Ansicht für bereitgestellte Änderungen (Staged) und ungestagte Arbeitsbaum-Änderungen.
- Status-Badges (
[M],[A],[?],[D]) mit WCAG-konformer Farbcodierung. - Direktaktionen: "Stagen", "Alle stagen", "Aus Staging entfernen", "Alle unstagen", "Verwerfen...", "Diff anzeigen".
- Doppelklick-Unterstützung: Doppelklick auf ein Staged-Element hebt das Staging auf; Doppelklick auf ein Unstaged-Element stellt es bereit.
- Großzügiges Eingabefeld für Commit-Nachrichten mit Zeichen- und Zeilenzähler sowie Shortcut
Ctrl+Enterzur sofortigen Ausführung. - Vollständig barrierefrei mit
AccessibleName,AccessibleDescriptionund Tastaturnavigation.
features/project_view.py:- Neuer Header-Button "Commit..." (aktiviert, wenn das geöffnete Projekt ein Git-Repository ist).
- Kontextmenü-Erweiterung um "Datei stagen", "Staging aufheben", "Änderungen verwerfen..." und "Git-Commit Dialog...".
- Signal
commitRequested(Path)zur Entkopplung und Status-Synchronisation nach Git-Aktionen.
ui/main_window.py:- Menüeintrag Ansicht -> Git-Commit Dialog... mit Tastenkürzel
Ctrl+Alt+C. - Signalverbindung
project_view.commitRequested.connect(self.show_git_commit). - Methode
show_git_commit()zur dialoggestützten Ausführung.
- Menüeintrag Ansicht -> Git-Commit Dialog... mit Tastenkürzel
ui/shortcuts_dialog.py:- Aufnahme von
Git-Commit Dialog(Ctrl+Alt+C) in die Tastaturkürzel-Referenz.
- Aufnahme von
tests/test_git_staging_and_commit.py:- 3 automatisierte Integrations- und GUI-Tests mit vollständiger Testabdeckung auf Basis temporärer Git-Repositories.
ui/command_palette.py: Neues Modul für eine zentrierte, tastaturgesteuerte Befehlspalette und Schnellauswahl:- Quick-Open Modus (
Ctrl+P): Schnelles Suchen und Öffnen von Dateien im aktuellen Projekt mit intelligenter Pfad- und Dateinamengewichtung (Scoring), Ignorieren von VCS- und Build-Ordnern (.git,node_modules,__pycache__etc.), Dateityp-Badges und Vorschau. - Befehlspalette (
Ctrl+Shift+P/ führendes>): Vollständige Übersicht aller registrierten Menü- und Schnellaktionen der IDE mit Kategorie, Shortcuts und Tastaturnavigation. - Nahtloser Moduswechsel bei Eingabe oder Löschen des Präfix
>. - Tastaturnavigation (
Pfeil Runter,Pfeil Rauf,Enterzur Ausführung/Öffnen,Esczum Abbrechen). - Volle Barrierefreiheit mit
AccessibleNameundAccessibleDescription.
- Quick-Open Modus (
ui/main_window.py:- Integration von
act_quick_open(Ctrl+P) im Menü Datei. - Integration von
act_palette(Ctrl+Shift+P) im Menü Bearbeiten. - Methoden
show_quick_open()undshow_command_palette().
- Integration von
ui/shortcuts_dialog.py:- Tastaturkürzel-Tabelle um
Ctrl+PundCtrl+Shift+Pergänzt.
- Tastaturkürzel-Tabelle um
tests/test_command_palette.py:- 9 automatisierte Tests für Dateisuche, Befehlsindexierung, Moduswechsel, Tastaturnavigation und Ausführung.
tests/test_assets_and_icons.py:- 5 automatisierte Vertragstests für das Windows- und Multiplattform-Icon-Asset-Set (
CodeBox.ico,DesktopIcon.ico,assets/,mobile_icons/,store_assets/).
- 5 automatisierte Vertragstests für das Windows- und Multiplattform-Icon-Asset-Set (
- Versionsangleichung auf 0.1.7 in
pyproject.toml,version.py,README.md,README_de.mdundCHANGELOG.md.
core/multi_cursor.py: Neues Modul für Multi-Cursor- und Spaltenauswahl-Verwaltung:MultiCursorManager: Verwaltet sekundäre Cursoren (secondary_cursors), synchrone Eingaben, Cursor-Merging und Selektionen.- Methoden
add_cursor_at,toggle_cursor_at,add_cursor_above(Ctrl+Alt+Up),add_cursor_below(Ctrl+Alt+Down). select_all_occurrences(Ctrl+Shift+L): Markiert alle Vorkommen des aktuellen Worts oder der Auswahl mit synchronen Cursorn.add_next_occurrence(Ctrl+Alt+L): Fügt das nächste Vorkommen sukzessive zur Mehrfachauswahl hinzu.column_select_between_cursors: Rechteckige Spaltenauswahl über mehrere Zeilen viaAlt+Shift+Drag.- Synchrone Textmanipulation:
insert_text,delete_backspace,delete_forward,unindent_cursors, Auto-Pairing & Bracket-Wrapping (insert_pair_or_wrap). - Multi-Cursor Zwischenablage:
copy_selection,cut_selectionund zeilenweisespaste_text. - Atomares Undo/Redo: Alle Änderungen über mehrere Cursoren hinweg werden in einem einzigen
beginEditBlock()/endEditBlock()gekapselt. - Visuelles Rendering:
get_extra_selections()mit#264f78und 2px scharfe Vektor-Carets inpaint_extra_carets().
core/editor.py:- Integration von
MultiCursorManager. paintEvent: Rendert sekundäre Carets im Viewport.mousePressEvent/mouseMoveEvent/mouseReleaseEvent:Alt+Klickzum Setzen/Entfernen von Cursorn undAlt+Shift+Ziehenfür Spaltenauswahl.keyPressEvent: Tastatur-Shortcuts und synchrone Multi-Cursor-Tastendeligation.highlightCurrentLine: Dynamische Einbindung sekundärer Selektionen.
- Integration von
ui/main_window.py:- Untermenü Mehrfachauswahl & Multi-Cursor im Menü Bearbeiten.
- Statusleistenanzeige: Anzeige von
(X Cursor)bei aktiven Mehrfachcursorn.
ui/shortcuts_dialog.py: 6 neue Tastenkürzel für Multi-Cursor dokumentiert.tests/test_multi_cursor.py: 15 automatisierte Tests für Cursor-Erstellung, Spaltenauswahl, parallele Eingabe, Löschen, Navigation, Merging, Copy/Paste, Undo/Redo und UI-Aktionen (195 passed, 1 skipped).
core/editor.py:focusReceived = Signal(): Emittiert bei Fokuswechsel (focusInEvent) für präzises Tracking des aktiven Editors zwischen Split-Panes.
core/tabs.py:EditorTab: Unterstützung für geteilte Dokumente (shared_doc) und Factory-Methodecreate_clone().TabWidget: Methodenclone_tab()undmove_tab_from()für nahtlose Tab-Übertragung zwischen Split-Bereichen; SignaletabFocusedundtabCountChanged. Sicheres Schließen von Klonen ohne redundante Speicher-Dialoge.
ui/main_window.py:- Splitter-Struktur:
editor_splitter(QSplitter) fasst primäres (tab_widget) und geteiltes (split_tab_widget) TabWidget zusammen. - Dynamische Aufteilung: Horizontale (
split_editor_right,Ctrl+\) und vertikale (split_editor_down,Ctrl+Shift+\) Teilung mit synchroner Echtzeit-Bearbeitung des gemeinsamenQTextDocument. - Fokus & Navigation:
focus_other_split(F6) undmove_tab_to_other_split(Ctrl+Alt+M). - Auto-Unsplit & Safe Unsplit (
unsplit_editor,Ctrl+Alt+W): Automatisches Einklappen beim Schließen des letzten Split-Tabs; sichere Überführung exklusiver Dokumente in den Primärbereich. - Statusleiste, Suche (
FindReplaceDialog), Aktionen (Undo/Redo, Ausführen, LSP/Linter) und Beenden-Prüfung (closeEvent) nahtlos an den aktiven Split-Pane gekoppelt.
- Splitter-Struktur:
ui/shortcuts_dialog.py: Neue Tastenkürzel in der Kategorie Ansicht dokumentiert.tests/test_split_editor.py: 9 automatisierte Tests für horizontales/vertikales Teilen, synchrone Dokumentbearbeitung, Fokus-Wechsel, Tab-Verschiebung, Auto-Unsplit und Dialog-Anbindung (180 passed, 1 skipped).
core/folding.py: Neues Modul für Faltungserkennung und Block-Sichtbarkeitsverwaltung:FoldRegion: Datenklasse für Start-/Endzeile, Typ (Funktion/Klasse/Block), Name und hierarchische Signatur für persistente Faltungszustände über Zeilenverschiebungen hinweg.FoldDetector: Präzise Erkennung für Python (Funktionen,async def, Klassen über Einrückungs- und Scope-Tracking) und geschweifte Klammern ({ ... }für JS, TS, C++, Rust, Go, Java, JSON) unter Ausschluss von String-Literalen und Kommentaren.FoldingManager: Verwaltung des aktiven Faltungszustands und native Kopplung anQTextBlock.setVisible(bool)mitQTextDocument.markContentsDirty(0, count).- Cursorsicherheit: Verhindert unsichtbare Cursors durch automatische Neupositionierung auf die Kopfzeile beim Einklappen.
core/editor.py:LineNumberArea: Um Faltungsspalte (FOLD_AREA_WIDTH = 14) erweitert; High-DPI Vektor-Rendering für▼(ausgeklappt) und▶(eingeklappt); Klick zum Umschalten und dynamischer Hover-Cursor (PointingHandCursor).- Methoden
toggle_fold,toggle_fold_at_cursor,fold_all,unfold_all,is_line_foldable,is_line_folded. _schedule_fold_update: Entprellte (debounced) Hintergrund-Aktualisierung bei Text- und Provideränderungen.
core/tabs.py: Setztfile_pathEigenschaft auf Editor und aktualisiert Faltung beim Laden.ui/main_window.py: Untermenü Code-Faltung im Menü Ansicht verankert:- Faltung umschalten (
Ctrl+Shift+[) - Alles einklappen (
Ctrl+Alt+[) - Alles ausklappen (
Ctrl+Alt+])
- Faltung umschalten (
ui/shortcuts_dialog.py: Shortcuts in der Kategorie Ansicht dokumentiert.tests/test_code_folding.py: 10 neue automatisierte Tests für Python- und Brace-Erkennung, Gutter-Klick, Visibility, Cursor-Schutz und MainWindow-Aktionen.
ui/diff_viewer.py: Neuer nativer Git Diff-Viewer (DiffViewerDialog) für CodeBox:- Unified Diff-Modus: Einspaltige Ansicht mit WCAG-konformer Syntaxhervorhebung (
DiffHighlighter) für Einfügungen (+), Löschungen (-), Hunk-Header (@@) und Git-Metadaten. - Side-by-Side Diff-Modus: Zweispaltige Ansicht mit
QSplitter, synchronisiertem Scrollen (valueChanged-Kopplung) und Linienpräfix-Highlighter (SideBySideHighlighter) über zeilenbasiertecompute_side_by_side()-Ausrichtung. - Dateiauswahl & Status: Dropdown-Auswahl aller geänderten Dateien oder des Gesamtrepositories mit Git-Status-Badges (
[M],[S],[U],[D]). - Staging-Umschaltung: Sofortiges Umschalten zwischen Arbeitsbaum-Änderungen und gestageten Commits (
--cached). - Chunk-Navigation: Tastaturnavigation von Chunk zu Chunk via
Alt+UpundAlt+Down. - Editor-Integration: Direktsprung in den Haupteditor über den Button Im Editor öffnen oder Doppelklick.
- Vollständige Barrierefreiheit: WCAG AA/AAA-Farbkontraste,
accessibleName,accessibleDescriptionund Tastaturfokus-Verwaltung.
- Unified Diff-Modus: Einspaltige Ansicht mit WCAG-konformer Syntaxhervorhebung (
ui/main_window.py: Menüaktion Git-Diff anzeigen... im Menü Ansicht mit ShortcutCtrl+Alt+Dverankert undshow_diff()implementiert; Signalanbindung anProjectView.diffRequested.features/project_view.py: Kontextmenü um Git-Diff anzeigen erweitert; emittiertdiffRequested(Path).ui/shortcuts_dialog.py: Neuer ShortcutCtrl+Alt+Din der Ansicht-Kategorie registriert.features/git_integration.py:_run_git(): Behoben:result.stdout.strip()entfernte das führende Leerzeichen von Zeilen im FormatM <datei>ingit status --porcelain, wodurch der erste Buchstabe des Dateinamens abgeschnitten wurde (rstrip("\r\n")stattstrip()).get_diff(): Fallback für ungetrackte Dateien viadifflib.unified_diffintegriert.get_file_content_at_head()undget_file_content_in_index()für präzisen Dateiinhalt-Abgleich hinzugefügt.
tests/test_diff_viewer.py: 13 neue automatisierte Tests für Diff-Highlighting, Side-by-Side-Berechnung, Dialog-Initialisierung, Dateiauswahl, Staging-Toggle, Chunk-Navigation, Barrierefreiheit und Editor-Sprung (161 passed, 1 skipped).
core/highlighter.py: Multi-Line Docstrings & Block-Comments über Blockgrenzen hinweg via QtQSyntaxHighlighter-Zustandsautomat (previousBlockState(),setCurrentBlockState()) implementiert. Vollständige Unterstützung für Python Docstrings ("""..."""und'''...'''), C/C++/Java/Rust/Go/JavaScript Block-Kommentare (/* ... */) und deklarative Plugin-Begrenzer ohne Zustandslecks bei Einzeilern.core/editor.py:- Intelligente Block-Einrückung (
indent_selection) und -Ausrückung (unindent_selection) mit TastenkürzelnTabundShift+Tab/Backtabfür Einzelzeilen und mehrzeilige Selektionen. - Zeilenkommentar-Umschaltung (
toggle_comment) mitCtrl+/undCtrl+#(erkennt Provider-spezifische Tokens wie#und//und kommentiert konsistent ein/aus). - Zeilen-Duplizierung (
duplicate_line_or_selection) viaCtrl+Dund Zeilenverschiebung nach oben/unten (move_line_up,move_line_down) viaAlt+Up/Alt+Down. - Minimap-Performanceoptimierung: Caching von Dokumentzeilen (
_cached_lines) und maximaler Zeichenlänge (_cached_max_chars) mit ereignisgesteuerter Invalidierung (contentsChanged,textChanged,blockCountChanged). Verhindert redundante Iterationen über zehntausende Textblöcke pro Frame.
- Intelligente Block-Einrückung (
ui/main_window.py:_goto_line: Fehler behoben, bei dem die Cursorposition immer unkonditioniert an Zeile 1 sprang; navigiert nun präzise zum Zielblockdocument().findBlockByNumber(line - 1).- Aktionen
Zeilenkommentar umschalten(Ctrl+/),Einrücken(Tab) undAusrücken(Shift+Tab) im Menü Bearbeiten verankert.
ui/shortcuts_dialog.py: Tastenkürzel-Übersicht um die neuen Editor-Aktionen für Kommentar-Umschaltung, Duplizieren und Zeilenverschiebung erweitert.tests/: 4 neue Testmodule ergänzt (164 Tests passed in 19.5s, 100% Abdeckung):tests/test_multiline_highlighter.py: Multi-Line Docstrings und Block-Kommentare über Blockgrenzen.tests/test_block_indent_and_comment.py: Block-Einrückung, Dedentation, Kommentar-Umschaltung und Tastenkürzel.tests/test_minimap_performance.py: Minimap-Zeilen-Caching, Invalidierung und Render-Effizienz.tests/test_goto_line_navigation.py: Zeilensprung-Navigation und Menü-Delegation.
README.md&README_de.md: Umfassende Überarbeitung des Projektauftritts und der Auffindbarkeit (Pfad B):- Zweisprachige interaktive Mermaid-Diagramme (
flowchart TDfür Schichtenarchitektur aus UI, Core/Tabs, ProjectTree, LSP/Diagnostics und Runtime/Plugins sowiesequenceDiagrammit autonomer Nummerierung für den End-to-End Workflow-Lebenszyklus von Editor-Öffnung über asynchrones Linting/LSP-Abfrage bis Terminal-Ausführung). - Strukturierte zweisprachige Schnellnavigation mit 15 Sprungmarken in beiden README-Dateien.
- Detaillierte Tabelle der Kernfähigkeiten und Sicherheits-/Datenschutz-Laufzeitinvarianten (100% Offline / Zero-Egress, Non-Elevation User Mode, Universal Highlighting, Declarative Plugins, Non-Blocking LSP & Linters, Speicherverlust-Schutz).
- Shields.io Badges harmonisiert und erweitert (CI-Status, Tests 120 passed | 100%, Python 3.10-3.13, Plattformen Windows/Linux/macOS, Datenschutz Zero-Egress, zweisprachige Sicherheitsrichtlinie, dev-bricks Ökosystem, open-bricks Dachverband, Version 0.1.2, LSP-Ready, llms.txt).
- Geschwister-Ökosystem-Matrix mit 9 Partner-Repositories über
dev-bricks,ellmos-ai,doc-bricks,file-bricksundopen-bricksverankert.
- Zweisprachige interaktive Mermaid-Diagramme (
SECURITY.md: Zweisprachige Sicherheitsrichtlinie (Englisch / Deutsch) mit verbindlichen Garantien für Local-First & Zero-Egress (100% Offline, keine Telemetrie), unprivilegiertem User-Mode (Non-Elevation), Subprozess-Sicherheit, direkten Sicherheitskontaktadressen (security@ellmos.ai,lukas@open-bricks.org,support@lukasgeiger.com), Supported Versions Matrix (0.1.x) und vertraulichem GitHub Advisories Melde-Link..github/workflows/ci.yml: Neuer Multi-OS GitHub Actions CI-Workflow fürubuntu-latest,windows-latest,macos-latestüber die Python-Matrix['3.10', '3.11', '3.12', '3.13']mit Concurrency-Steuerung (cancel-in-progress: true),actions/checkout@v4,actions/setup-python@v5, Linting-Gate (ruff check .) und vollständiger Pytest-Ausführung..github/workflows/linux-platform-smoke.yml: Action-Tags auf kanonisches@v4und@v5korrigiert und Concurrency-Steuerung ergänzt.pyproject.toml: PEP 621 Classifiers (Python 3.13, OS Independent, POSIX Linux, MacOS, Microsoft Windows, Desktop Environment, Utilities) und vollständige URLs (Changelog,Security,Parent Org,Umbrella Ecosystem) ergänzt.llms.txt: Last-checked Zeitstempel auf2026-08-24, Version0.1.2, erweiterte Modulreferenzen, Navigation und Teststand synchronisiert.tests/test_metadata.py: Metadaten- und Vertragstestsuite um 6 neue Contract-Tests erweitert (Bilingual Parity, Mermaid Syntax, Sibling Ecosystem, Security & Zero-Egress Invariants, CI Workflow Integrity, PEP 621 Classifiers & URLs).
features/terminal.py: Verzeichniswechsel viaset_working_dir()für PowerShell korrigiert (PowerShell unterstützt keinen/d-Schalter von cmd.exe;cdführte zuvor zuPositionalParameterNotFound-Fehlern und verweigerte das Wechseln des Arbeitsordners). Output-Dekodierung in_on_stdoutund_on_stderrauf dynamisches_output_encoding()(cp1252 für cmd unter Windows, sonst utf-8) umgestellt. Signalverwaltung umerrorOccurredund sauberes Exception-Handling erweitert.core/output.py:OutputPanelmiterrorOccurred-Signalbehandlung (_on_error) gegen hängende Stop-Buttons und unterdrückte Fehlermeldungen bei nicht auffindbaren Compilern/Programmen (FailedToStart,Crashed) abgesichert.waitForFinished(1000)nachkill()undcloseEventfür zuverlässige Prozessbereinigung ergänzt.tests/test_terminal_encoding.py&tests/test_output_panel.py: 6 neue Regressionstests für PowerShell-Verzeichniswechsel, Output-Encoding, Signal-Entkopplung, Fehlerausgabe und Prozessbeendigung ergänzt (115 passed, 1 skipped).
-
ui/main_window.py: StatusTips auf allen Menü- und Toolbar-Aktionen (Neu,Öffnen,Speichern,Beenden,Rückgängig,Wiederherstellen,Suchen,Gehe zu Zeile,Plugins,Einstellungen,Ausführen,Stoppen,Projektbaum,Terminal,Tastenkürzel,Über);setToolTip(),setWhatsThis(),setAccessibleName()undsetAccessibleDescription()für Hauptleiste, Sprach-Auswahl (lang_combo), Statusleisten-Widgets (pos_label,lang_label,enc_label) und Reiter im unteren Bedienpanel (bottom_tabs). -
core/tabs.py:TabWidgetmitaccessibleName/accessibleDescriptionversehen und dynamische Tab-Tooltips mit absolutem Dateipfad beim Öffnen, Neuanlegen, Speichern und Drag-and-Drop-Umsortieren implementiert. -
ui/settings_dialog.py: Tooltips undaccessibleName/accessibleDescriptionfür alle Einstellungsfelder (font_combo,font_size_spin,tab_size_spin,theme_combo,auto_save_cb,minimap_cb) integriert. -
ui/shortcuts_dialog.py&ui/plugins_dialog.py: Barrierefreie Beschriftungen, Tooltips und Beschreibungen für Filter-Eingabefelder, Tabellen, Detailboxen und Aktions-Buttons ergänzt. -
tests/test_ui_ux_accessibility.py: Neue automatisierte UX- und Accessibility-Vertragstestsuite mit 6 Tests für Toolbar, Tabs, Statusbar, Einstellungen, Shortcuts, Plugins und Panels (109 passed, 1 skipped). -
core/highlighter.py: Regex-Mustererstellung inUniversalHighlighter(_keyword_pattern) gehärtet, sodass Keywords und Builtins mit Satzzeichen/Metazeichen (z.B. Rubysdefined?oder C++-Symbole) mitre.escape()maskiert und mit sicheren Wortgrenzen gematcht werden. Verhindert Fehl-Highlighting von Variablennamen (define) und unvollständiges Keyword-Highlighting. -
languages/declarative.py: Parsing voncomment_styleinDeclarativeLanguageProvider.from_dicterweitert, sodass Einzelstring- (#), 1-Element-Listen (["--"]), 3-Element-Flachlisten (["--", "--[[", "--]]"]) und Dictionary-Formate deterministisch ausgewertet werden. -
features/plugin_manager.py:discover_and_load_all()bereinigt gelöschte Plugin-Dateien beim Re-Scan;_load_python_plugin()registriert Provider ausPluginInfo-Rückgaben vonsetup()ab. -
languages/__init__.py: Null- und Whitespace-Sicherheit fürget_provider_for_extension,get_provider_by_nameundis_provider_registered. -
ui/plugins_dialog.py: Abbruch-Verhalten bei Vorlagenerstellung korrigiert; Detailanzeige gegen leere Provider-Felder abgesichert. -
tests/test_plugin_system.py: 4 neue Testsuiten für Keyword-Escaping, Kommentarstil-Variationen, Provider-Lookups und Plugin-Dateibereinigung (103 passed, 1 skipped).
tests/test_metadata.py: Automatisierte Metadaten-, Manifest- und Plugin-Integritätstestsuite ergänzt (Version-Paritätpyproject.toml,version.py,CHANGELOG.md, Required-Fields, Core-Docs, Plugin-JSON-Validierung).version.py: Version und__version__auf0.1.2synchronisiert.pyproject.toml: Version auf0.1.2aktualisiert.README.md&README_de.md: Shields.io Badges umdev-bricksEcosystem- undopen-bricksUmbrella-Zugehörigkeit sowie aktualisierten Teststatus (99 passed, 1 skipped) erweitert.llms.txt: Last-checked Zeitstempel auf2026-08-16und Teststand synchronisiert.
features/plugin_manager.py: Neuer Plugin-Manager für automatische Entdeckung und Verwaltung von benutzerdefinierten und projektweiten Sprach-Plugins (plugins/,~/.codebox/plugins/).languages/declarative.py:DeclarativeLanguageProviderermöglicht das Definieren vollständiger Sprachunterstützung (Keywords, Builtins, Snippets, Run-/Debug-Commands, Comment-Styles, Auto-Close-Paare und Indent-Trigger) über schlanke JSON-Dateien ohne Python-Code.languages/__init__.py: Dynamische Provider-Registrierung (register_provider,unregister_provider,reset_providers) mit Listener-Pattern (add_provider_listener,remove_provider_listener) für reaktive Toolbar- und Editor-Aktualisierung.ui/plugins_dialog.py: Neuer interaktiver Plugin- & Sprachverwaltungs-Dialog (Ctrl+Shift+P/ Menü Bearbeiten & Hilfe) mit Tabellenansicht, Detailinspektion, Template-Generator und Schnellumschaltung.ui/shortcuts_dialog.py: Neuer interaktiver Shortcuts-Dialog (F1/ Menü Hilfe) mit Such- und Filterleiste über alle Tastenkombinationen.plugins/lua_plugin.json&plugins/ruby_plugin.json: Beispielhafte deklarative Sprach-Plugins für Lua und Ruby integriert.tests/test_plugin_system.py: Umfassende Testsuite mit 8 neuen Unit-Tests für Provider-Registrierung, Declarative-Parsing, Plugin-Manager-Laden/Entladen, Dialog-UI und Window-Events.- Testsuite auf 99 bestandene Tests ausgebaut (100% grün).
tests/test_lsp_runtime.pyverifiziert die optionale Python-LSP-Integration mit Diagnostics, Completion und Hover gegenpython-lsp-server[all].features/linter.pyerkennt optionale Ruff-/flake8-/ESLint-Installationen, normalisiert deren Befunde und führt sie nach dem Speichern außerhalb des UI-Threads aus.ui/problems_panel.pyzeigt LSP- und Linter-Befunde gemeinsam an und springt per Doppelklick zur betroffenen Datei-/Zeilenposition.
- TASKPLAN-Bündel
deep/easy, Task #1288:build_exe.batmit PyInstaller 6.21.0 erfolgreich ausgeführt (Exit 0). Die erzeugteC:\_Local_DEV\codex_build\codebox\dist\CodeBox.exebesitzt einen gültigenMZ-Header, enthält Icon sowie Dark-/Light-Theme und blieb im 12-Sekunden-Start-Smoke responsiv. Verifikation: 80 Tests bestanden, 1 optionaler LSP-Runtime-Test ohne Opt-in übersprungen; keine Blocker.
pyproject.toml: Version auf0.1.1angehoben.llms.txt: Last-checked Datum auf2026-07-27aktualisiert und 78/78 bestandene Pytest-Tests verifiziert.README.md&README_de.md: Badges, GFM-Alerts (> [!NOTE]), Mermaid-Architektur und Suchbegriffe abgeglichen.MARKETING-LOG.txt: Empfehlungen für visuellen Screencast / Demo-GIF und GitHub Releases Staging ergänzt.
llms.txt: Timestamp auf 2026-07-27 aktualisiert und Teststatus (78 bestanden, 1 übersprungen) verifiziert.AUFGABEN.txt: TW-CB-01 (Status- und Dokumentationsquellen synchronisieren) als erledigt dokumentiert.CHECKED-REGISTRY.md&CHECKS-LOG.txt: Projektwartung und Testsuite-Bestätigung eingetragen.
README.md&README_de.md: Mermaid Systemarchitektur- & Komponenten-Diagramm in Englisch und Deutsch integriert.llms.txt: Header Timestamp auf 2026-07-26 und Search Phrases erweitert.
pyproject.tomlmit PEP 621 Metadaten, Pytest-Konfiguration (pythonpath = ".") und optionalen Abhängigkeiten (lsp,remote,test) angelegt.llms.txtLast-checked Timestamp auf 2026-07-25 aktualisiert.README.md&README_de.mdum KI-/LLM-Integrationshinweis (> [!NOTE]) und erweiterte Badges ergänzt.
features/project_view.py: Git-Status-Indikatoren (M / S / SM / U / D / R) werden jetzt rechts neben dem Dateinamen im Projektbaum angezeigt. Neue Hilfsfunktionstatus_for_path()(Qt-frei, direkt testbar) sucht perPath.as_posix()-Normalisierung auch auf Windows mit Backslash-Pfaden korrekt im Porcelain-Status-Dict. NeuerGitStatusDelegate(QStyledItemDelegate) zeichnet farbige Badges;_load_git_status()befüllt den Cache beiset_root()und_refresh(). 10 neue Regressionstests intests/test_git_project_view_status.py.
core/editor.py: Behoben: (1) Bracket-Matching am Dokumentende (EOF) filterte Cursortyp beipos == len(text)aus, wodurch schließende Klammern am Dateiende nicht hervorgehoben wurden. (2)insert_completion()ersetzte bei case-insensitiver Auto-Completion oder Wort-Ersetzung bisher nur Suffix-Texte statt das Präfix-Wort exakt zu ersetzen. 2 neue Regressionstests intests/test_editor_auto_close.py.features/git_integration.py:GitRepo.get_status()entpackt jetzt von Git zitiere Pfade (z. B. bei Dateinamen mit Leerzeichen oder Sonderzeichen) und umbenannte Pfade ("old.py" -> "new.py") viaparse_porcelain_path(). Zudem werden C-Style Escape-Sequenzen unescaped underrors="replace"bei Subprocess-Output genutzt. Git-Status-Badges inProjectViewfunktionieren dadurch auch bei Pfaden mit Leerzeichen oder Sonderzeichen. 3 neue Regressionstests intests/test_git_status_parsing.py.features/remote_editor.py: SSH/SFTP-Verbindungen laden bekannte Hostkeys und lehnen unbekannte Hostkeys jetzt ab, statt sie automatisch zu akzeptieren.features/terminal.py(B-012):_start_shell()trennte die Signale (readyReadStandardOutput,readyReadStandardError,finished) des altenQProcess-Objekts nicht, bevor es durch ein neues ersetzt wurde. Beim Shell-Neustart konnte der alte Prozess nachkill()noch_on_finishedoder_on_stdoutauslösen und so einen spuriösen „Shell beendet"-Eintrag in den neuen Terminal-Output schreiben. Fix: Signale werden jetzt analog zu B-004 (core/output.py) getrennt;kill()wird nur noch beistate() != NotRunningaufgerufen. 3 Regressionstests intests/test_terminal_encoding.pyergänzt.features/project_view.py: Die kompakte Sidebar im Projektbaum verlässt sich für Filterfeld und Dateibaum nicht mehr nur auf Placeholder und Position.Ordner...,Aktualisieren, das Filterfeld und der Dateibaum exponieren jetzt sprechende Accessible Names, Descriptions und Tooltips; Regressionstest intests/test_project_view.pyergänzt.ui/main_window.py(B-011): ProjectView blieb beim Öffnen einer Datei aus einem anderen Ordner auf dem ersten Root hängen. Der Projektbaum folgt jetzt auch bei späteren Dateiwechseln dem aktuellen Dateiverzeichnis; neuer Regressionstest intests/test_project_view.py.features/lsp_client.py(B-009): Zweitesprocess.wait()nachkill()intry/excepteingebettet —subprocess.TimeoutExpiredwurde bisher nicht gefangen, sodass_reader_thread.join()übersprungen werden konnte. Streams werden jetzt imfinally-Block zuverlässig geschlossen.core/editor.py(B-010): Auto-Close wrappte bei aktiver Textmarkierung nicht mehr die Auswahl, sondern verwarf sie. Jetzt wirdselectedText()mit dem Bracket-/Quote-Paar umschlossen;U+2029-Absatztrenner werden vor dem Einfügen zu\nnormalisiert. 3 Regressionstests hinzugefügt.ui/main_window.py(B-008):closeEventverwendete veralteteQMessageBox.Yes/No-Kurznamen stattQMessageBox.StandardButton.Yes/No(PySide6-6.x-Deprecation-Hygiene).
welcome.ymlhinzugefügt: Begrüßungsnachricht bei erstem Issue oder Pull Request.stale.ymlhinzugefügt: Issues und PRs werden nach 30 Tagen als stale markiert und nach 37 Tagen automatisch geschlossen.
THIRD_PARTY_LICENSES.txtergänzt die direkte Runtime-Lizenzinventur fürPySide6und das transitive Qt-for-Python-Wheel-Set; ein Guard-Test schützt das Inventar gegen Dependency-Drift.README.mdals klaren englischen Einstieg mit Start-Here-Tabelle, Screenshot-Alt-Text und Suchabgrenzung neu strukturiert;README_de.mdals deutsche Einstiegsseite ergänzt.llms.txtauf den Marketing-Check vom 2026-06-25 mit zusätzlichen Suchphrasen und externen Discovery-Notizen aktualisiert..gitignoreschützt interne Lock- und Aufgabenvarianten (LOCK*.txt,AUFGABEN.md,TODO.txt,DONE.txt,ERLEDIGT.txt) vor versehentlichem Tracking.llms.txtim Root-Verzeichnis hinzugefügt, um Entdeckung und Indexierung durch KI-Crawler zu verbessern.AUFGABEN.txtunddist/Struktur bereinigt (redundanteCodeBox_new.exeentfernt).
build_exe.bat:DIST_DIRzeigt jetzt aufC:\_Local_DEV\codex_build\codebox\diststatt auf%CD%\dist(OneDrive). Verhindert, dass OneDrive-Sync die EXE beim Rebuild sperrt; konsistent mit dem bereits lokalenWORK_DIR. (DEV-Loop Run 46, 2026-06-16)start.bat: UnterstütztCODEBOX_LOCAL_DIST-Umgebungsvariable als erstes EXE-Suchziel vor dem relativendist\-Pfad. Ermöglicht lokales Build-Verzeichnis ohne Hardcode im Skript. (DEV-Loop Run 46, 2026-06-16)- Nach dem Build:
set CODEBOX_LOCAL_DIST=C:\_Local_DEV\codex_build\codebox\distin der Shell setzen (oder dauerhaft in den Systemvariablen), damitstart.batdie lokal gebaute EXE findet.build_exe.batgibt diesen Hinweis jetzt automatisch nach erfolgreichem Build aus. - EXE aktualisiert 2026-06-01 (OneDrive-Lock aufgelöst nach Beenden alter Prozesse); enthält Startup-/CLI-Bug-Fix (
--open-Argument + offener Bootstrap-Tab). 13/13 Tests grün, Smoke OK. - EXE neu gebaut 2026-06-01 (PyInstaller,
CodeBox.spec→ lokales Build-Verzeichnis); 11/12 Tests grün (1 skipped), Smoke-Test bestanden. Vorherige EXE: 2026-05-28.
- macOS-Source-Smoke für offscreen App-Start, Dateiöffnung, Terminalpfad,
Projektbaum-
open -R(Finder) und lokale Python-Run-Commands. CI-Jobmacos-smokeinlinux-platform-smoke.ymlergänzt. - Linux-Source-Smoke für offscreen App-Start, Dateiöffnung, Terminalpfad,
Projektbaum-
xdg-openund lokale Python-Run-Commands. - Regressionstest für Startup-Dateiübergabe per
--openund positionalem Pfad. - README-Discoverability für GitHub/Web-Suche geschärft: englischer SEO-Einstieg, CodeBox-Namenskollision erklärt, Quickstart und präzisere Suchbegriffe ergänzt.
- Headless-Smoke-Test für MainWindow-Instanziierung
- Optionale LSP-Runtime-Tests für
python-lsp-server[all]: Diagnostics bei Syntaxfehlern und Completion überpylsp. __all__-Exports in allen Modul-__init__.py- LSP-Diagnostics und LSP-Completion sind jetzt im Editor verdrahtet: Diagnostics laufen thread-sicher über Qt-Signale, Completion-Anfragen werden beim Tippen an den aktiven LSP-Client geschickt.
python main.py --open <datei>und nackte Dateipfade öffnen jetzt die Datei direkt beim Start und entfernen den leeren Bootstrap-Tab.QApplicationfehlte im Import vonui/main_window.py(wurde in Theme-Lambda verwendet)- Diverse ungenutzte Imports entfernt (core, features, languages, ui)
- Fenstertitel liest die Version jetzt aus
version.pystatt aus einem Hardcode - Theme-Wechsel setzt Palette und QSS gemeinsam; Light-Mode bleibt nicht mehr auf Dark-Basis hängen
- Python-LSP-Erkennung startet
pylspjetzt auch überpython -m pylsp, wenn das Script nicht aufPATHliegt, das Modul aber installiert ist. - Die Anzeige verfügbarer LSP-Server nutzt jetzt dieselbe Fallback-Prüfung wie
der Serverstart; installierte
pylsp-Module werden daher auch ohnepylsp.exeaufPATHkorrekt erkannt. - LSP-Subprocess-Pipes werden beim Stoppen geschlossen; der Runtime-Test läuft dadurch ohne ResourceWarnings.
close_tab()bricht jetzt ab, wenn das Speichern eines modifizierten Tabs fehlschlägt, statt den Tab trotzdem zu schließen.run_current()startet kein Programm mehr, wenn das automatische Speichern vor dem Ausführen fehlschlägt.- Tab-Reordering hält die interne Index-Map jetzt synchron;
current_tab(),close_tab()und die offenen-Datei-Prüfungen bleiben nach Drag-and-drop korrekt.
- Deutschsprachige Doku sowie Python-Kommentare, Docstrings und naheliegende UI-Texte
verwenden jetzt echte Umlaute statt
ae/oe/ue - Windows-Build nutzt jetzt die vorhandene PyInstaller-Spec mit lokalem
Arbeitsverzeichnis außerhalb von OneDrive;
start.batstartet bevorzugtdist\CodeBox.exeund fällt erst danach auf Release-EXE oder Python zurück. - README präzisiert die lokale Privacy-Abgrenzung;
.gitignoreschützt zusätzliche Credential-, SSH- und SQLite-Artefakte. .gitignoredeckt interne Diagnose-/Skill-Dateien, Test-Caches und lokale Windows-Build-Artefakte inklusive PyInstaller-Spec-Dateien ab.- README beschreibt die optionale
paramiko-Abhängigkeit für Remote Editing.
- REST-API und CLI-Steuerbarkeit (2026-04-04): ATI-Template für
Fernsteuerung durch Claude/LLM-Agenten. CLI:
codebox --open <file>,--run,--close,--list-tabs,--get-content. - Theme-Manager (
features/theme_manager.py) mit Theme-Menü - Remote-Editor-Basis (
features/remote_editor.py) - Git-Integration (
features/git_integration.py): Status, Branch, Diff über subprocess zum git-CLI - Tastenkürzel für Ansicht:
Ctrl+B(Projektbaum),Ctrl+`(Terminal) - CWD-Sync: Terminal und ProjectView folgen der aktuell geöffneten Datei
- CloseEvent: räumt Terminal-Prozesse beim Beenden auf
- Migration PyQt5 -> PySide6 (2026-03-15): 8 Dateien,
QRegExp->QRegularExpression,QAction->QtGui, scoped Enums fürQPalette/QProcess/QTextCursor. Policy-Konform (LGPL). - Terminal und Project-View im MainWindow integriert (2026-03-08): Terminal als Tab im unteren Panel (neben Ausgabe), Project-View als linke Sidebar mit horizontalem Splitter.
- LSP-Client Race Conditions (2026-03-14):
threading.Lock()für_request_idund_pending-Dict-Zugriffe - Terminal
setTextColor()fehlerhaft: Farbe ging an Dokument statt Cursor-Format. Fix:QTextCharFormat+cursor.setCharFormat() - LSP-Subprocess wurde bei
read_loop-Abbruch nicht beendet:self.stop()nachbreakin_read_loop closeEventprüfte nur ersten unsaved Tab: Sammelt jetzt alle ungespeicherten Tabs und zeigt vollständige Liste- Explorer-Pfad mit Leerzeichen/&:
f"/select,{path}"als ein Argument QCompleter.insert_completionEdge Case: Guardif extra <= 0: return
- Core-Refactoring aus PythonBox v8 extrahiert:
core/editor.py,core/tabs.py,core/output.py,core/highlighter.py - UI-Schicht:
ui/main_window.pymit Menü, Toolbar, Statusbar, Suchen und Gehe-zu-Zeile - LanguageProvider ABC (
languages/base.py) mit abstrakten Methoden für Keywords, Builtins, Snippets, Run-Commands - 7 Language-Provider: Python, JavaScript, TypeScript, C++, Rust, Go, Java
- Auto-Discovery für Extension-zu-Provider-Mapping (
languages/__init__.py) - UniversalHighlighter (provider-basiert)
- LSP-Client (
features/lsp_client.py): JSON-RPC über stdio,LSPClient+LSPManager, Support für pylsp, typescript-language-server, rust-analyzer, gopls, clangd - Integriertes Terminal (
features/terminal.py) mit Shell-Auswahl, History und farbiger stdout/stderr-Trennung - Project-View (
features/project_view.py) mitQFileSystemModel, Filter-Proxy, Textfilter und Kontextmenü - Statusbar-Sprachauswahl mit Dropdown, manueller Auswahl und automatischer Erkennung bei Dateieröffnung
- Dark-Theme als Standard (Fusion + eigenes Stylesheet)