3.6 KiB
3.6 KiB
ConPTY Planning Sessions — Design (2026-07-24)
Task: 5d627df8 — interaktive Planning-Session über embedded ConPTY statt externem wt-Fenster.
Problem
Planning-Sessions (StartPlanningSession/ResumePlanningSession) öffnen heute ein externes
Windows-Terminal (WindowsTerminalLauncher → wt.exe). Seit ConPTY existiert (embedded
claude-TUI im UI-Prozess, Command Center), soll die interaktive Planning-Session denselben
Weg nutzen: konsistente UX, keine externen Fenster.
Approved decisions (Brainstorm 2026-07-24)
- Env-Isolation: Prozess-global akzeptiert (Sessions werden sequenziell per Klick geöffnet;
jedes claude-Child snapshottet Env beim Spawn). Keine Änderung an
PtyTerminalSession. - wt-Launcher: Code bleibt; nur das Routing für Planning wird auf ConPTY umgestellt
(kein Rip-out von
LaunchPlanningStart/ResumeAsync). - Planning-Kachel im Command Center (Mission Control), wie andere ConPTY-Sessions. Finalize/Discard/Queue-Plan bleiben unverändert auf den bestehenden Buttons.
Change map
Worker
WindowsTerminalLauncher: Planning-Start-Args in einen bare BuilderBuildPlanningStartArgs(PlanningSessionStartContext) -> IReadOnlyList<string>herausziehen (analogBuildResumeArgs);BuildPlanningStartCommandnutzt ihn weiter (wt unverändert). Resume-ArgsBuildPlanningResumeArgs(sessionId) = ["--permission-mode","plan","--resume",id](bisher inline inLaunchPlanningResumeAsync).InteractiveLaunchSpecService:BuildPlanningStart(PlanningSessionStartContext) -> LaunchSpecundBuildPlanningResume(PlanningSessionResumeContext) -> LaunchSpec— resolve claude, Args aus (1), EnvMAX_THINKING_TOKENS=20000+CLAUDEDO_PLANNING_TOKEN=<token>(+MCP_TOOL_TIMEOUTwie interaktiv), Cwd = ctx.WorkingDir. Nimmt den Kontext (keine Manager-Kopplung).- Hub:
GetPlanningStartLaunchSpec(taskId) -> LaunchSpec(ruft_planning.StartAsync, broadcastetTaskUpdated, baut Spec; bei Fehler discard+rethrow wie heute),GetPlanningResumeLaunchSpec(taskId) -> LaunchSpec(ruft_planning.ResumeAsync).
UI
IWorkerClient/WorkerClient:GetPlanningStartLaunchSpecAsync/GetPlanningResumeLaunchSpecAsync(mirrorGetInteractiveLaunchSpecAsync).MissionControlViewModel:OpenPlanningConPtySessionAsync(taskId, resume)— dedupt nach TaskId, holt die Planning-Spec, bautTerminalLaunchDescriptor→ConPtyPaneViewModel(Titel „ (Planning)").TasksIslandViewModel:OpenPlanningSessionAsync/ResumePlanningSessionAsync(Resume-Zweig derUnfinishedPlanningModal) öffnen die Planning-ConPTY-Kachel via neuem EventOpenPlanningConPtyRequested(taskId, resume), stattStartPlanningSessionAsync/wt.IslandsShellViewModelverdrahtet das Event →OpenMissionControl()+MissionControl.OpenPlanningConPtySessionAsync.
#12 (Nebenbefund)
MCP-Permission-Prompt trotz --allowedTools "mcp__claudedo__*": im interaktiven ConPTY vom
User bestätigbar (kein Blocker wie headless). Beim Testen prüfen, ob der Glob den Prompt in
der aktuellen CLI unterdrückt; falls nicht, allowedTools/--permission-mode-Kombi nachziehen.
Out of scope
- Entfernen des wt-Codes /
ResumeTaskInTerminal. - Per-Child-Env-Isolation in
PtyTerminalSession. - Änderungen an Finalize/Discard/Queue-Plan-Lifecycle.
Verification
- Build Worker + App (
-c Release), Worker.Tests + Ui.Tests grün. - Visual (User): Planning-Start öffnet Command-Center-Kachel mit claude-TUI im Plan-Modus; create_child_task erzeugt Draft-Kinder live; Resume greift die Session; kein wt-Fenster.