Two functional gaps in the search tools change: - Enforce rawOutputMaxBytes on UNTRUNCATED inline stdout too. The cap was only checked on the truncated->raw-spill path, so an executor retaining more inline than the search cap (or a deployment lowering the cap below the bash retention) could smuggle an over-cap parse through, contradicting the documented SEARCH_RAW_OUTPUT_OVERFLOW contract. Covered by a new over-cap-inline test. - Load @deepseek-ai/dsh-timeout-policy in the coding-agent tree. The search tools declare timeoutMs but nothing in the demo enforced it, so the advertised 30s budget silently degraded to the bash executor's 60s backstop. The keyless smoke boots the amended tree.
80 lines
4.0 KiB
Markdown
80 lines
4.0 KiB
Markdown
<!-- Generated by scripts/gen-doc-graphs.ts - do not edit by hand.
|
|
Run `pnpm run gen-doc-graphs` to regenerate. -->
|
|
|
|
# Coding Agent App Composition
|
|
|
|
The coding REPL demo adds the real DeepSeek adapter, filesystem tools, todo_write, compaction, and both subagent transports on top of the stdio app package.
|
|
|
|
```mermaid
|
|
flowchart LR
|
|
cfg["examples/coding-agent<br/>cordis.yml"]
|
|
plugin_coding_hmr["hmr<br/>@cordisjs/plugin-hmr"]
|
|
cfg --> plugin_coding_hmr
|
|
plugin_coding_llm_deepseek["llm-deepseek<br/>@deepseek-ai/dsh-llm-deepseek"]
|
|
cfg --> plugin_coding_llm_deepseek
|
|
plugin_coding_bash["bash<br/>@deepseek-ai/dsh-bash-local"]
|
|
cfg --> plugin_coding_bash
|
|
plugin_coding_stdio_agent["stdio-agent<br/>@deepseek-ai/dsh-stdio-agent"]
|
|
cfg --> plugin_coding_stdio_agent
|
|
plugin_coding_stdio_agent --> bundle_agent_core["@deepseek-ai/dsh-agent-core"]
|
|
plugin_coding_stdio_agent --> bundle_jsonl["@deepseek-ai/dsh-session-persistence-jsonl"]
|
|
plugin_coding_stdio_agent --> frontdoor_stdio["readline UI<br/>console logger<br/>pre-created main agent"]
|
|
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_coding_compact_basic["compact-basic<br/>@deepseek-ai/dsh-compact-basic"]
|
|
cfg --> plugin_coding_compact_basic
|
|
plugin_coding_subagent["subagent<br/>@deepseek-ai/dsh-subagent"]
|
|
cfg --> plugin_coding_subagent
|
|
plugin_coding_subagent_spawn["subagent-spawn<br/>@deepseek-ai/dsh-subagent-spawn"]
|
|
cfg --> plugin_coding_subagent_spawn
|
|
plugin_coding_subagent_fork["subagent-fork<br/>@deepseek-ai/dsh-subagent-fork"]
|
|
cfg --> plugin_coding_subagent_fork
|
|
plugin_coding_tool_subagent["tool-subagent<br/>@deepseek-ai/dsh-tool-subagent"]
|
|
cfg --> plugin_coding_tool_subagent
|
|
plugin_coding_tool_subagent_fork["tool-subagent-fork<br/>@deepseek-ai/dsh-tool-subagent"]
|
|
cfg --> plugin_coding_tool_subagent_fork
|
|
plugin_coding_tool_todo["tool-todo<br/>@deepseek-ai/dsh-tool-todo"]
|
|
cfg --> plugin_coding_tool_todo
|
|
plugin_coding_fs_local["fs-local<br/>@deepseek-ai/dsh-fs-local"]
|
|
cfg --> plugin_coding_fs_local
|
|
plugin_coding_fs_policy["fs-policy<br/>@deepseek-ai/dsh-fs-policy"]
|
|
cfg --> plugin_coding_fs_policy
|
|
plugin_coding_tool_fs["tool-fs<br/>@deepseek-ai/dsh-tool-fs"]
|
|
cfg --> plugin_coding_tool_fs
|
|
plugin_coding_tool_fs_search["tool-fs-search<br/>@deepseek-ai/dsh-tool-fs-search"]
|
|
cfg --> plugin_coding_tool_fs_search
|
|
plugin_coding_timeout_policy["timeout-policy<br/>@deepseek-ai/dsh-timeout-policy"]
|
|
cfg --> plugin_coding_timeout_policy
|
|
plugin_coding_spill_local["spill-local<br/>@deepseek-ai/dsh-spill-local"]
|
|
cfg --> plugin_coding_spill_local
|
|
plugin_coding_spill_policy["spill-policy<br/>@deepseek-ai/dsh-spill-policy"]
|
|
cfg --> plugin_coding_spill_policy
|
|
```
|
|
|
|
| Plugin id | Package / module |
|
|
| --- | --- |
|
|
| `hmr` | `@cordisjs/plugin-hmr` |
|
|
| `llm-deepseek` | `@deepseek-ai/dsh-llm-deepseek` |
|
|
| `bash` | `@deepseek-ai/dsh-bash-local` |
|
|
| `stdio-agent` | `@deepseek-ai/dsh-stdio-agent` |
|
|
| `compact-basic` | `@deepseek-ai/dsh-compact-basic` |
|
|
| `subagent` | `@deepseek-ai/dsh-subagent` |
|
|
| `subagent-spawn` | `@deepseek-ai/dsh-subagent-spawn` |
|
|
| `subagent-fork` | `@deepseek-ai/dsh-subagent-fork` |
|
|
| `tool-subagent` | `@deepseek-ai/dsh-tool-subagent` |
|
|
| `tool-subagent-fork` | `@deepseek-ai/dsh-tool-subagent` |
|
|
| `tool-todo` | `@deepseek-ai/dsh-tool-todo` |
|
|
| `fs-local` | `@deepseek-ai/dsh-fs-local` |
|
|
| `fs-policy` | `@deepseek-ai/dsh-fs-policy` |
|
|
| `tool-fs` | `@deepseek-ai/dsh-tool-fs` |
|
|
| `tool-fs-search` | `@deepseek-ai/dsh-tool-fs-search` |
|
|
| `timeout-policy` | `@deepseek-ai/dsh-timeout-policy` |
|
|
| `spill-local` | `@deepseek-ai/dsh-spill-local` |
|
|
| `spill-policy` | `@deepseek-ai/dsh-spill-policy` |
|
|
|
|
Source config: [`examples/coding-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.
|