PTY und Prozess-Supervision Plan
1. Problem und Ziel
Wir brauchen einen zuverlässigen Lifecycle für lang laufende Befehlsausführung über:
execVordergrund-RunsexecHintergrund-RunsprocessFolgeaktionen (poll,log,send-keys,paste,submit,kill,remove)- CLI-Agent-Runner-Subprozesse
Das Ziel ist nicht nur PTY-Unterstützung. Das Ziel ist vorhersagbares Ownership, Abbruch, Timeout und Cleanup ohne unsichere Prozess-Matching-Heuristiken.
2. Scope und Grenzen
- Implementierung intern in
src/process/supervisorhalten. - Kein neues Paket dafür erstellen.
- Aktuelle Verhaltenskompatibilität wo praktikabel beibehalten.
- Scope nicht auf Terminal-Replay oder tmux-artige Session-Persistenz erweitern.
3. In diesem Branch implementiert
Supervisor-Baseline bereits vorhanden
- Supervisor-Modul ist unter
src/process/supervisor/*eingerichtet. - Exec-Runtime und CLI-Runner sind bereits über Supervisor-Spawn und -Wait geroutet.
- Registry-Finalisierung ist idempotent.
Dieser Durchgang abgeschlossen
- Expliziter PTY-Befehlsvertrag
SpawnInputist jetzt eine diskriminierte Union insrc/process/supervisor/types.ts.- PTY-Runs erfordern
ptyCommandstatt der generischenargv-Wiederverwendung. - Supervisor rekonstruiert PTY-Befehlsstrings nicht mehr aus argv-Joins in
src/process/supervisor/supervisor.ts. - Exec-Runtime übergibt
ptyCommandjetzt direkt insrc/agents/bash-tools.exec-runtime.ts.
- Prozessschicht-Typentkopplung
- Supervisor-Typen importieren nicht mehr
SessionStdinaus Agents. - Prozesslokaler Stdin-Vertrag lebt in
src/process/supervisor/types.ts(ManagedRunStdin). - Adapter hängen nur noch von Prozessebenen-Typen ab:
src/process/supervisor/adapters/child.tssrc/process/supervisor/adapters/pty.ts
- Prozess-Tool-Lifecycle-Ownership-Verbesserung
src/agents/bash-tools.process.tsfordert Abbruch jetzt zuerst über den Supervisor an.process kill/removenutzt jetzt Prozesstree-Fallback-Terminierung wenn Supervisor-Lookup fehlt.removebehält deterministisches Remove-Verhalten bei, indem laufende Session-Einträge sofort nach Terminierungsanforderung entfernt werden.
- Single-Source-Watchdog-Defaults
- Gemeinsame Defaults in
src/agents/cli-watchdog-defaults.tshinzugefügt. src/agents/cli-backends.tskonsumiert die gemeinsamen Defaults.src/agents/cli-runner/reliability.tskonsumiert dieselben gemeinsamen Defaults.
- Toter-Helper-Cleanup
- Ungenutzten
killSession-Helper-Pfad aussrc/agents/bash-tools.shared.tsentfernt.
- Direkte Supervisor-Pfad-Tests hinzugefügt
src/agents/bash-tools.process.supervisor.test.tshinzugefügt für Kill- und Remove-Routing über Supervisor-Abbruch.
- Zuverlässigkeitslücken-Fixes abgeschlossen
src/agents/bash-tools.process.tsfällt jetzt auf echte OS-Level-Prozess-Terminierung zurück wenn Supervisor-Lookup fehlt.src/process/supervisor/adapters/child.tsnutzt jetzt Prozesstree-Terminierungssemantik für Standard-Cancel/Timeout-Kill-Pfade.- Gemeinsames Prozesstree-Utility in
src/process/kill-tree.tshinzugefügt.
- PTY-Vertrag-Randfälle-Coverage hinzugefügt
src/process/supervisor/supervisor.pty-command.test.tsfür wörtliche PTY-Befehlsweiterleitung und Leer-Befehl-Ablehnung hinzugefügt.src/process/supervisor/adapters/child.test.tsfür Prozesstree-Kill-Verhalten bei Child-Adapter-Abbruch hinzugefügt.
4. Verbleibende Lücken und Entscheidungen
Zuverlässigkeitsstatus
Die zwei erforderlichen Zuverlässigkeitslücken für diesen Durchgang sind jetzt geschlossen:
process kill/removehat jetzt einen echten OS-Terminierungs-Fallback wenn Supervisor-Lookup fehlt.- Child-Cancel/Timeout nutzt jetzt Prozesstree-Kill-Semantik für den Standard-Kill-Pfad.
- Regressionstests wurden für beide Verhaltensweisen hinzugefügt.
Dauerhaftigkeit und Start-Abgleich
Restart-Verhalten ist jetzt explizit als reiner In-Memory-Lifecycle definiert.
reconcileOrphans()bleibt insrc/process/supervisor/supervisor.tsbewusst ein No-op.- Aktive Runs werden nach Prozess-Neustart nicht wiederhergestellt.
- Diese Grenze ist für diesen Implementierungsdurchgang beabsichtigt, um partielle Persistenzrisiken zu vermeiden.
Wartbarkeits-Follow-ups
runExecProcessinsrc/agents/bash-tools.exec-runtime.tsbehandelt noch mehrere Verantwortlichkeiten und kann in einem Follow-up in fokussierte Helper aufgeteilt werden.
5. Implementierungsplan
Der Implementierungsdurchgang für erforderliche Zuverlässigkeits- und Vertragspunkte ist abgeschlossen.
Abgeschlossen:
process kill/removeFallback-reale-Terminierung- Prozesstree-Abbruch für Child-Adapter-Standard-Kill-Pfad
- Regressionstests für Fallback-Kill und Child-Adapter-Kill-Pfad
- PTY-Befehl-Randfälle-Tests unter explizitem
ptyCommand - Explizite In-Memory-Restart-Grenze mit
reconcileOrphans()No-op by Design
Optionaler Follow-up:
runExecProcessin fokussierte Helper aufteilen ohne Verhaltensdrift
6. Dateiübersicht
Prozess-Supervisor
src/process/supervisor/types.tsaktualisiert mit diskriminiertem Spawn-Input und prozesslokalem Stdin-Vertrag.src/process/supervisor/supervisor.tsaktualisiert für explizitesptyCommand.src/process/supervisor/adapters/child.tsundsrc/process/supervisor/adapters/pty.tsvon Agent-Typen entkoppelt.src/process/supervisor/registry.tsidempotentes Finalize unverändert beibehalten.
Exec- und Prozess-Integration
src/agents/bash-tools.exec-runtime.tsaktualisiert für explizite PTY-Befehlsübergabe und Fallback-Pfad.src/agents/bash-tools.process.tsaktualisiert für Abbruch über Supervisor mit echtem Prozesstree-Fallback-Terminierung.src/agents/bash-tools.shared.tsdirekten Kill-Helper-Pfad entfernt.
CLI-Zuverlässigkeit
src/agents/cli-watchdog-defaults.tsals gemeinsame Baseline hinzugefügt.src/agents/cli-backends.tsundsrc/agents/cli-runner/reliability.tskonsumieren jetzt dieselben Defaults.
7. Validierungslauf in diesem Durchgang
Unit-Tests:
pnpm vitest src/process/supervisor/registry.test.tspnpm vitest src/process/supervisor/supervisor.test.tspnpm vitest src/process/supervisor/supervisor.pty-command.test.tspnpm vitest src/process/supervisor/adapters/child.test.tspnpm vitest src/agents/cli-backends.test.tspnpm vitest src/agents/bash-tools.exec.pty-cleanup.test.tspnpm vitest src/agents/bash-tools.process.poll-timeout.test.tspnpm vitest src/agents/bash-tools.process.supervisor.test.tspnpm vitest src/process/exec.test.ts
E2E-Ziele:
pnpm vitest src/agents/cli-runner.test.tspnpm vitest run src/agents/bash-tools.exec.pty-fallback.test.ts src/agents/bash-tools.exec.background-abort.test.ts src/agents/bash-tools.process.send-keys.test.ts
Typecheck-Hinweis:
pnpm build(undpnpm checkfür vollständiges Lint/Docs-Gate) in diesem Repo verwenden. Ältere Hinweise, diepnpm tsgoerwähnen, sind veraltet.
8. Betriebsgarantien beibehalten
- Exec-Env-Härtungsverhalten ist unverändert.
- Approval- und Allowlist-Flow ist unverändert.
- Output-Sanitization und Output-Caps sind unverändert.
- PTY-Adapter garantiert weiterhin Wait-Settlement bei erzwungenem Kill und Listener-Disposal.
9. Definition of Done
- Supervisor ist Lifecycle-Owner für verwaltete Runs.
- PTY-Spawn nutzt expliziten Befehlsvertrag ohne argv-Rekonstruktion.
- Prozessschicht hat keine Typabhängigkeit von der Agent-Schicht für Supervisor-Stdin-Verträge.
- Watchdog-Defaults sind Single Source.
- Gezielte Unit- und E2E-Tests bleiben grün.
- Restart-Dauerhaftigkeitsgrenze ist explizit dokumentiert oder vollständig implementiert.
10. Zusammenfassung
Der Branch hat jetzt eine kohärente und sicherere Supervision-Form:
- Expliziter PTY-Vertrag
- Sauberere Prozess-Schichtung
- Supervisor-gesteuerter Abbruchpfad für Prozessoperationen
- Echte Fallback-Terminierung wenn Supervisor-Lookup fehlt
- Prozesstree-Abbruch für Child-Run-Standard-Kill-Pfade
- Vereinheitlichte Watchdog-Defaults
- Explizite In-Memory-Restart-Grenze (kein Orphan-Abgleich über Restart in diesem Durchgang)