cordis.yml 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. # The acp-agent plugin tree: the ACP server. Also the snapshot RECORD config
  2. # (the dsh-acp-agent bin selects it for DSH_SNAPSHOT=record): a real llm-deepseek
  3. # run whose persisted log the snapshot harness harvests. The swappable DeepSeek
  4. # adapter, local bash/filesystem executors, the ACP server app
  5. # (@deepseek-ai/dsh-acp-agent), and the optional model-facing fs/subagent/todo
  6. # tools loaded below.
  7. #
  8. # CRITICAL: this tree loads NO stdout logger and NO hmr — stdout is reserved for
  9. # the ACP JSON-RPC protocol (see packages/ui/acp). That guarantee is now a
  10. # property of @deepseek-ai/dsh-acp-agent (it contains no logger entry), not a
  11. # leaf convention: there is no logger here to get wrong.
  12. #
  13. # Requires DEEPSEEK_API_KEY (and optionally DEEPSEEK_BASE_URL) — the
  14. # dsh-acp-agent bin loads the gitignored repo-root .env first (on STDERR only).
  15. # The DeepSeek adapter.
  16. - id: llm-deepseek
  17. name: '@deepseek-ai/dsh-llm-deepseek'
  18. config:
  19. apiKey: !!js process.env.DEEPSEEK_API_KEY
  20. baseURL: !!js process.env.DEEPSEEK_BASE_URL
  21. models:
  22. - deepseek-v4-flash
  23. - deepseek-v4-pro
  24. # Local bash executor for agent-core's tool-bash schema.
  25. # FIXME(config-comments): keep this executor note from implying bash is the
  26. # whole tool set; filesystem, subagent, and todo_write are loaded below.
  27. - id: bash
  28. name: '@deepseek-ai/dsh-bash-local'
  29. config:
  30. timeoutMs: 60000
  31. # The ACP server app: the agent-core spine + JSONL persistence + the ACP bridge.
  32. # Persistence root: $DSH_SNAPSHOT_SESSIONS_ROOT when the snapshot harness sets it
  33. # (so it can harvest / isolate the log), else ./.sessions for the demo.
  34. - id: acp-agent
  35. name: '@deepseek-ai/dsh-acp-agent'
  36. config:
  37. model: deepseek-v4-flash
  38. persistenceRoot: !!js process.env.DSH_SNAPSHOT_SESSIONS_ROOT ?? './.sessions'
  39. systemPrompt: |
  40. You are a coding assistant driven over the Agent Client Protocol.
  41. Your tools are read/write/edit for file operations, bash (plus
  42. bash_output/bash_kill for background tasks), and subagent. Use read to
  43. inspect UTF-8 text files, write to create or replace files, and edit for
  44. targeted literal replacements. Use bash for shell commands, tests,
  45. searches, and operations that are not ordinary file reads or edits. Each
  46. bash call runs in a fresh shell — pass workdir instead of cd. Check the
  47. [exit code: N] marker; verify your work. Keep answers brief and factual.
  48. Use the subagent tool to delegate a focused, self-contained subtask to
  49. a fresh child agent (it works in its own context and returns only its
  50. final result) — give it a complete, standalone instruction. Use
  51. subagent_fork instead when the subtask needs THIS conversation's
  52. context: the child inherits the log so far.
  53. For multi-step work, use the todo_write tool to track a task list:
  54. send the WHOLE list each call (it replaces the previous one), keep at
  55. most one task in_progress (exactly one while work remains), and mark a
  56. task completed as soon as it is done. Skip it for trivial single-step
  57. tasks.
  58. # The subagent seam + both in-process backends + two model-facing tools, as leaf
  59. # entries after the app (which provides ctx.agents/ctx.tools). spawn (a fresh
  60. # child) and fork (a child seeded with the parent's completed-turn prefix) are
  61. # both reachable by the model: dsh-tool-subagent is loaded once per backend with
  62. # a distinct toolName (subagent → spawn, subagent_fork → fork), so a multi-child
  63. # scenario can exercise both transports.
  64. - id: subagent
  65. name: '@deepseek-ai/dsh-subagent'
  66. - id: subagent-spawn
  67. name: '@deepseek-ai/dsh-subagent-spawn'
  68. config:
  69. providerName: spawn
  70. - id: subagent-fork
  71. name: '@deepseek-ai/dsh-subagent-fork'
  72. config:
  73. providerName: fork
  74. - id: tool-subagent
  75. name: '@deepseek-ai/dsh-tool-subagent'
  76. config:
  77. provider: spawn
  78. toolName: subagent
  79. - id: tool-subagent-fork
  80. name: '@deepseek-ai/dsh-tool-subagent'
  81. config:
  82. provider: fork
  83. toolName: subagent_fork
  84. # The model-facing todo_write tool: whole-list task tracking written to the
  85. # session log (todo/write), surfaced to the ACP client as a `plan` update.
  86. - id: tool-todo
  87. name: '@deepseek-ai/dsh-tool-todo'
  88. # Filesystem capability stack: local provider, read-before-write/edit policy
  89. # gate, then the model-facing read/write/edit tools. Relative filesystem paths
  90. # resolve from the server launch cwd; the documented Zed setup launches this
  91. # demo from the harness checkout with `pnpm --dir`.
  92. - id: fs-local
  93. name: '@deepseek-ai/dsh-fs-local'
  94. config:
  95. cwd: !!js process.cwd()
  96. - id: fs-policy
  97. name: '@deepseek-ai/dsh-fs-policy'
  98. - id: tool-fs
  99. name: '@deepseek-ai/dsh-tool-fs'
  100. # The Claude Code hook bridge. `configPath` is PROCESS-LEVEL: it is read ONCE at
  101. # load and the relative `./hooks.json` resolves against the ACP server's launch
  102. # cwd, NOT each `session/new.cwd`. So a single `hooks.json` next to where the
  103. # server starts applies to every session; a project-local, per-session hooks.json
  104. # is NOT discovered (per-session config resolution is a TODO — see the bridge
  105. # README). With no file present the parse fails-soft and the bridge registers
  106. # nothing (a silent no-op). Hooks THEMSELVES run in the session cwd (the bridge
  107. # passes it as the workdir); only WHERE the config is read from is process-level.
  108. # stdout is the ACP JSON-RPC channel — the bridge's warnings go through ctx.logger
  109. # (no exporter here), never to stdout.
  110. - id: hooks-claude
  111. name: '@deepseek-ai/dsh-hooks-claude'
  112. config:
  113. configPath: ./hooks.json
  114. # The Codex hook bridge, loaded alongside the Claude one. It reads its OWN config
  115. # file (`./codex-hooks.json`, Codex's snake_case five-event dialect) — the two
  116. # bridges cannot share one file, so each owns a distinct path. Same process-level
  117. # read-once semantics and same fails-soft-when-absent contract: a launch cwd with
  118. # no `codex-hooks.json` registers nothing (a silent no-op through ctx.logger, never
  119. # stdout). The example ships both bridges so a scenario can exercise EITHER dialect
  120. # end-to-end by seeding the matching file in its workspace/.
  121. - id: hooks-codex
  122. name: '@deepseek-ai/dsh-hooks-codex'
  123. config:
  124. configPath: ./codex-hooks.json