cordis.yml 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273
  1. # dsh web — the full web-shape composition: host runtime (layer 1), the
  2. # transport/service layer (layer 2), and the browser plugin roster (dshClient
  3. # rows the modules node half scans into window.__DSH_BOOT__). Row order
  4. # carries no load semantics (activation is service-availability driven); the
  5. # grouping below is for readers. `--dev` appends the dsh-client-hmr row in
  6. # code (AppCLIEntry) — prod and dev differ by exactly that one row.
  7. # AppCLIEntry patches this tree before boot: profile json + CLI flags +
  8. # distIndex land as config patches over the rows below (yaml = engineering
  9. # defaults, json = user config, user wins per field).
  10. # ── layer 1: runtime ────────────────────────────────────────────────────────
  11. - id: timer
  12. name: '@cordisjs/plugin-timer'
  13. - id: llm
  14. name: '@deepseek-ai/dsh-llm'
  15. - id: session
  16. name: '@deepseek-ai/dsh-session'
  17. - id: session-title
  18. name: '@deepseek-ai/dsh-session-title'
  19. config:
  20. fallbackMaxWords: 5
  21. fallbackMaxBytes: 40
  22. maxTitleBytes: 80
  23. # Model-made titles on the first-message cadence (the web sidebar renders
  24. # session/title). Same values as the TUI composition.
  25. - id: session-title-llm
  26. name: '@deepseek-ai/dsh-session-title-first-message-llm'
  27. config:
  28. targetWords: 5
  29. targetCjkCharacters: 10
  30. maxInputBytes: 4096
  31. maxOutputTokens: 64
  32. timeoutMs: 60000
  33. - id: system-prompt
  34. name: '@deepseek-ai/dsh-system-prompt'
  35. config:
  36. persona: ''
  37. - id: tools
  38. name: '@deepseek-ai/dsh-tools'
  39. config:
  40. # TEMPORARY workaround: DSH_TOOLS_MODE (native|code|both) opts a whole dsh
  41. # process into Code Mode while per-session tool-mode selection is being
  42. # designed; unset keeps the schema default (native). Remove the env seam
  43. # once the web UI owns the choice per session.
  44. mode: !!js process.env.DSH_TOOLS_MODE
  45. # Code Mode substrate for the row above. Mounted unconditionally because
  46. # Loader metadata is static (no conditional rows): a native-mode boot only
  47. # registers the service — a worker thread spawns per run_code execution.
  48. - id: code-runtime
  49. name: '@deepseek-ai/dsh-code-runtime-worker'
  50. - id: user-interaction
  51. name: '@deepseek-ai/dsh-user-interaction'
  52. - id: agent
  53. name: '@deepseek-ai/dsh-agent'
  54. - id: tasks
  55. name: '@deepseek-ai/dsh-tasks-local'
  56. - id: agent-loop
  57. name: '@deepseek-ai/dsh-agent-loop'
  58. config:
  59. agents: []
  60. # The native DeepSeek adapter; reads the key/base-url the boot's layered
  61. # .env loading (cwd then $DSH_HOME) left in the environment.
  62. - id: llm-deepseek
  63. name: '@deepseek-ai/dsh-llm-deepseek'
  64. config:
  65. apiKey: !!js process.env.DEEPSEEK_API_KEY
  66. baseURL: !!js process.env.DEEPSEEK_BASE_URL
  67. # Transient-failure recovery around the loop's model calls (same policy as
  68. # the TUI's agent-spine composition; defaults: 2 retries, 500ms→10s backoff).
  69. - id: llm-retry
  70. name: '@deepseek-ai/dsh-llm-retry'
  71. - id: session-persistence-jsonl
  72. name: '@deepseek-ai/dsh-session-persistence-jsonl'
  73. config:
  74. root: './.sessions'
  75. - id: storage
  76. name: '@deepseek-ai/dsh-storage'
  77. - id: storage-json
  78. name: '@deepseek-ai/dsh-storage-json'
  79. config:
  80. root: './.storages'
  81. - id: storage-domain
  82. name: '@deepseek-ai/dsh-storage-domain'
  83. config:
  84. backend: json
  85. - id: workspace
  86. name: '@deepseek-ai/dsh-workspace'
  87. # Managed child-process groups for the bash executor (spawn/kill/output plumbing).
  88. - id: subprocess
  89. name: '@deepseek-ai/dsh-subprocess-local'
  90. - id: bash-local
  91. name: '@deepseek-ai/dsh-bash-local'
  92. - id: tool-bash
  93. name: '@deepseek-ai/dsh-tool-bash'
  94. - id: tool-todo
  95. name: '@deepseek-ai/dsh-tool-todo'
  96. - id: tool-tasks
  97. name: '@deepseek-ai/dsh-tool-tasks'
  98. # fs cwd stays the package default (process.cwd()) — the same value the
  99. # gateway injects into session.cwd, so paths and sessions agree.
  100. - id: fs-local
  101. name: '@deepseek-ai/dsh-fs-local'
  102. - id: fs-policy
  103. name: '@deepseek-ai/dsh-fs-policy'
  104. - id: tool-fs
  105. name: '@deepseek-ai/dsh-tool-fs'
  106. - id: tool-fs-search
  107. name: '@deepseek-ai/dsh-tool-fs-search'
  108. - id: workspace-context
  109. name: '@deepseek-ai/dsh-workspace-context'
  110. config:
  111. maxBytes: 65536
  112. - id: skill
  113. name: '@deepseek-ai/dsh-skill'
  114. - id: skill-local
  115. name: '@deepseek-ai/dsh-skill-local'
  116. - id: tool-skill
  117. name: '@deepseek-ai/dsh-tool-skill'
  118. # token-meter rejects unknown config keys — keep this row bare.
  119. - id: token-meter
  120. name: '@deepseek-ai/dsh-token-meter'
  121. - id: compact-basic
  122. name: '@deepseek-ai/dsh-compact-basic'
  123. - id: subagent
  124. name: '@deepseek-ai/dsh-subagent'
  125. - id: subagent-spawn
  126. name: '@deepseek-ai/dsh-subagent-spawn'
  127. config:
  128. providerName: spawn
  129. - id: subagent-fork
  130. name: '@deepseek-ai/dsh-subagent-fork'
  131. config:
  132. providerName: fork
  133. - id: tool-subagent
  134. name: '@deepseek-ai/dsh-tool-subagent'
  135. config:
  136. provider: spawn
  137. toolName: subagent
  138. - id: tool-subagent-fork
  139. name: '@deepseek-ai/dsh-tool-subagent'
  140. config:
  141. provider: fork
  142. toolName: subagent_fork
  143. - id: workflow-workerthread
  144. name: '@deepseek-ai/dsh-workflow-workerthread'
  145. config:
  146. provider: spawn
  147. - id: tool-workflow
  148. name: '@deepseek-ai/dsh-tool-workflow'
  149. - id: timeout-policy
  150. name: '@deepseek-ai/dsh-timeout-policy'
  151. - id: spill-local
  152. name: '@deepseek-ai/dsh-spill-local'
  153. # Omitting maxInlineBytes makes the whole policy a silent no-op — always
  154. # state it explicitly.
  155. - id: spill-policy
  156. name: '@deepseek-ai/dsh-spill-policy'
  157. config:
  158. maxInlineBytes: 50000
  159. # The API gateway: the transport-agnostic dispatch face every client shape
  160. # shares. provider/model are the host default routing — the profile json's
  161. # mapping target (user config overrides these engineering defaults).
  162. - id: api-gateway
  163. name: '@deepseek-ai/dsh-host-apiproxy'
  164. config:
  165. provider: deepseek
  166. model: deepseek-v4-flash
  167. # ── layer 2: transport/service ──────────────────────────────────────────────
  168. # Plain route-registration carrier. distIndex is an assembly fact, not user
  169. # config — AppCLIEntry resolves the frontend dist and patches it in; host and
  170. # port arrive as CLI-flag patches over these defaults.
  171. - id: webserver
  172. name: '@deepseek-ai/dsh-host-webserver'
  173. config:
  174. host: 127.0.0.1
  175. port: 3080
  176. # ── browser plugin roster (dshClient rows; node halves are layer-2 hosts) ──
  177. # Dual-face: node half scans this very tree for dshClient rows, composes
  178. # window.__DSH_BOOT__, serves /plugins/<id>/client.js; browser half is the
  179. # module table the shell kernel constructs before cordis exists (§4.7 —
  180. # adopted as a plugin entry by the kernel, never fetched).
  181. - id: modules
  182. name: '@deepseek-ai/dsh-client-modules'
  183. # Owns both ends of the web transport: node half binds the gateway to the
  184. # webserver under /api; browser half is the fetch/SSE client.
  185. - id: connection
  186. name: '@deepseek-ai/dsh-client-connection'
  187. - id: client-runtime
  188. name: '@deepseek-ai/dsh-client-runtime'
  189. - id: ui-theme
  190. name: '@deepseek-ai/dsh-client-ui-theme'
  191. - id: locale
  192. name: '@deepseek-ai/dsh-client-locale'
  193. - id: ui-layout
  194. name: '@deepseek-ai/dsh-client-ui-layout'
  195. - id: ui-sidebar
  196. name: '@deepseek-ai/dsh-client-ui-sidebar'
  197. - id: ui-settings
  198. name: '@deepseek-ai/dsh-client-ui-settings'
  199. - id: ui-settings-general
  200. name: '@deepseek-ai/dsh-client-ui-settings-general'
  201. - id: ui-models
  202. name: '@deepseek-ai/dsh-client-ui-models'
  203. - id: ui-conversation
  204. name: '@deepseek-ai/dsh-client-ui-conversation'
  205. - id: ui-workspace
  206. name: '@deepseek-ai/dsh-client-ui-workspace'
  207. - id: ui-question
  208. name: '@deepseek-ai/dsh-client-ui-question'
  209. - id: ui-trajectory
  210. name: '@deepseek-ai/dsh-client-ui-trajectory'