Files
OpenResearch/ui
Daniel Kim a72c4cdc2b feat(codex): native plan mode as a selectable permission mode (v0.1.66) (#98)
* feat(codex): native plan mode as a selectable permission mode

Codex ≥ 0.144 supports plan mode as an app-server collaboration mode.
Advertise Plan + Auto + Bypass for codex and wire the full flow:

- initialize sends capabilities.experimentalApi (unlocks collaborationMode)
- conditional per-turn collaborationMode mask: plan on plan turns; default
  on a non-plan turn only when the thread may be sticky-planned (DB
  prev_permission_mode threaded via TurnCtx + in-memory last-sent tracking);
  otherwise no mask (a mask always injects a template)
- render streamed plan items (item/plan/delta + completed plan item) and
  synthesize an end-turn plan card / PlanStrip
- requestUserInput -> question card, answerable inline or via composer;
  per-kind server-request settle shapes (approval/userInput/other)
- resume_from_prompt: plan (send-message), permission/question (inline reply)
- store: keep 'plan' off the codex retire-list; reuse claude.rs
  synthesize_resume / should_synthesize_plan via harness re-export
- UI: PlanStrip agentLabel; ChatPanel pendingQuestion gate includes codex

Legacy exec path (< 0.144) keeps Plan->read-only, with an updated agent note.

* fix(chat): keep prompt-resume scaffolding out of the transcript

Plan/permission card resumes send synthesized text the user never typed
("Implement the plan.", "The user approved that action. Continue.").
Persisting it as a user message misattributes it in the UI. Split the
transcript text from the harness text in send_message (the slash-skills
precedent): plan/permission resumes now record only the user's own note
— nothing at all when there isn't one; the resolved card tells the rest.
Question resumes still record the answer, which the user did choose.

* chore: bump version to 0.1.66
2026-07-19 20:22:35 -07:00
..
2026-07-06 20:05:41 -07:00
2026-07-06 20:05:41 -07:00
2026-07-06 20:05:41 -07:00