Alle wesentlichen Änderungen an CodeBox werden hier dokumentiert. Format basiert auf Keep a Changelog.
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.
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)