mirror of
https://github.com/deepseek-ai/deepseek-harness
synced 2026-08-15 21:04:50 +00:00
Plan mode's stage 2 (RFC 2026-07-07-plan-mode). The exit tool: one required plan argument (the durable log artifact), execute re-checks the folded mode, then conducts the review over the user-interaction seam — one single-select question (Approve / Keep planning) with free text open — so an approval appends mode/set back to default in-turn and every other outcome (keep-planning feedback verbatim, aborted, no provider) returns the corrective isError with the mode unchanged. presentCall is a generic card titled by the plan's first heading carrying the plan markdown; over ACP the review rides the ask_user elicitation flow, in the terminal the stdio prompt queue — no approval-seam dependency. The ACP bridge maps the picker 1:1 onto ctx.modes (opportunistic, a type-only peer edge): session/new + session/load advertise availableModes/currentModeId, session/set_mode validates through set() and echoes an optimistic current_mode_update (the pending mode IS the selection; the logged mode/set lands at the boundary and, matching, is not re-sent), and a session/event listener re-notifies on each logged flip that differs from the last sent — the tool-driven exit updates the picker. The feature matrix rows move from 'not modeled' to the picker-to-modes / knobs-to-config-options division, with the ACP v2 removal direction recorded as a mechanical-migration risk. The snapshot harness gains the setMode/setModeExpectError ops and a scripted elicitationAnswers FIFO (cancel on exhaustion; a stray choice string reaches the agent verbatim as a non-consenting custom answer, so a scenario bug fails safe). The suite factory's header-pin requirement now applies only to model-turn scenarios — a protocol-only suite has no header content to anchor. examples/plan-acp-agent is the live composition; its keyless modes-advertise scenario pins the wire surface (advertisement, both set_mode round-trips, unknown-id rejection). The recorded plan-mode approve/reject arc awaits a with-key recording session; its texts are pinned at the unit tier meanwhile. examples/AGENTS.md ceiling 653 → 680: the new example's required smoke row does not fit the old budget.
47 lines
2.2 KiB
Markdown
47 lines
2.2 KiB
Markdown
<!-- Generated by scripts/gen-doc-graphs.ts - do not edit by hand.
|
|
Run `pnpm run gen-doc-graphs` to regenerate. -->
|
|
|
|
# Plan-Mode ACP Agent App Composition
|
|
|
|
The plan-mode demo composes session modes onto the ACP server: the editor mode picker drives plan mode, and the model exits through the user-reviewed exit_plan_mode tool.
|
|
|
|
```mermaid
|
|
flowchart LR
|
|
cfg["examples/plan-acp-agent<br/>cordis.yml"]
|
|
plugin_plan-acp_llm_deepseek["llm-deepseek<br/>@deepseek-ai/dsh-llm-deepseek"]
|
|
cfg --> plugin_plan-acp_llm_deepseek
|
|
plugin_plan-acp_acp_agent["acp-agent<br/>@deepseek-ai/dsh-acp-agent"]
|
|
cfg --> plugin_plan-acp_acp_agent
|
|
plugin_plan-acp_acp_agent --> bundle_agent_core["@deepseek-ai/dsh-agent-core"]
|
|
plugin_plan-acp_acp_agent --> bundle_jsonl["@deepseek-ai/dsh-session-persistence-jsonl"]
|
|
plugin_plan-acp_acp_agent --> frontdoor_acp["@deepseek-ai/dsh-acp<br/>JSON-RPC stdio bridge<br/>sessions created by client"]
|
|
bundle_agent_core --> spine_llm["ctx.llm"]
|
|
bundle_agent_core --> spine_sessions["ctx.sessions"]
|
|
bundle_agent_core --> spine_tools["ctx.tools + tool-bash"]
|
|
bundle_agent_core --> spine_loop["ctx.agents + ctx.agentLoop"]
|
|
plugin_plan-acp_mode["mode<br/>@deepseek-ai/dsh-mode"]
|
|
cfg --> plugin_plan-acp_mode
|
|
plugin_plan-acp_fs_local["fs-local<br/>@deepseek-ai/dsh-fs-local"]
|
|
cfg --> plugin_plan-acp_fs_local
|
|
plugin_plan-acp_fs_policy["fs-policy<br/>@deepseek-ai/dsh-fs-policy"]
|
|
cfg --> plugin_plan-acp_fs_policy
|
|
plugin_plan-acp_tool_fs["tool-fs<br/>@deepseek-ai/dsh-tool-fs"]
|
|
cfg --> plugin_plan-acp_tool_fs
|
|
plugin_plan-acp_tool_todo["tool-todo<br/>@deepseek-ai/dsh-tool-todo"]
|
|
cfg --> plugin_plan-acp_tool_todo
|
|
```
|
|
|
|
| Plugin id | Package / module |
|
|
| --- | --- |
|
|
| `llm-deepseek` | `@deepseek-ai/dsh-llm-deepseek` |
|
|
| `acp-agent` | `@deepseek-ai/dsh-acp-agent` |
|
|
| `mode` | `@deepseek-ai/dsh-mode` |
|
|
| `fs-local` | `@deepseek-ai/dsh-fs-local` |
|
|
| `fs-policy` | `@deepseek-ai/dsh-fs-policy` |
|
|
| `tool-fs` | `@deepseek-ai/dsh-tool-fs` |
|
|
| `tool-todo` | `@deepseek-ai/dsh-tool-todo` |
|
|
|
|
Source config: [`examples/plan-acp-agent/cordis.yml`](cordis.yml).
|
|
|
|
Maintenance mode: hybrid: the leaf plugin list is parsed from its `cordis.yml`; app package expansion is curated from package source.
|