cordis.patch.yml 9.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317
  1. # The dsh-web-app bundle patch: the browser surface over the dsh-base layer.
  2. # Applied after dsh-base's insert; rows here override base rows by id, with
  3. # the profile's own cordis.patch.yml and any --patch overlays still to come.
  4. #
  5. # A patch replaces the targeted row's whole `config`, so each row below
  6. # restates every key it owns. The `dsh web` launcher alias turns --host/--port/
  7. # --dev/--workspace-root/--trusted-host into further patches over these rows
  8. # (`--dev` inserts the dsh-client-hmr row).
  9. # ── surface-specific values the base deliberately omits ─────────────────────
  10. - id: system-prompt
  11. config:
  12. persona: >-
  13. You are a coding agent powered by the {{model}} model. Your working directory is {{cwd}}.
  14. # TODO: Re-enable shared HMR for Web after its reload lifecycle is tested.
  15. - id: hmr
  16. disabled: true
  17. # Web content search runs on an ephemeral in-memory index. The service
  18. # activates at boot, while first-search defers the node:sqlite import and
  19. # in-memory handle so Node 22 startup stays quiet until content search
  20. # actually uses SQLite. That search then reconciles this boot's sources.
  21. - id: session-query-sqlite
  22. config:
  23. path: ':memory:'
  24. openAt: first-search
  25. - id: tools
  26. config:
  27. # TEMPORARY workaround: DSH_TOOLS_MODE (native|code|both) opts a whole dsh
  28. # process into Code Mode while per-session tool-mode selection is being
  29. # designed; unset keeps the schema default (native). Remove the env seam
  30. # once the web UI owns the choice per session.
  31. mode: !!js process.env.DSH_TOOLS_MODE
  32. - id: llm-deepseek
  33. config:
  34. apiKey: !!js process.env.DEEPSEEK_API_KEY
  35. baseURL: !!js process.env.DEEPSEEK_BASE_URL
  36. # ── web-only host rows, the transport layer, and the browser roster ─────────
  37. # `dshClient` rows are the browser roster the modules node half scans into
  38. # window.__DSH_BOOT__; the modules row is simultaneously a host row.
  39. - insert:
  40. - id: session-projection
  41. name: '@deepseek-ai/dsh-session-projection'
  42. - id: code-runtime
  43. name: '@deepseek-ai/dsh-code-runtime-worker'
  44. - id: storage
  45. name: '@deepseek-ai/dsh-storage'
  46. - id: storage-json
  47. name: '@deepseek-ai/dsh-storage-json'
  48. config:
  49. root: !!js dshHomePath('storages')
  50. - id: storage-domain
  51. name: '@deepseek-ai/dsh-storage-domain'
  52. config:
  53. backend: json
  54. - id: workspace
  55. name: '@deepseek-ai/dsh-workspace'
  56. - id: session-projection-cache
  57. name: '@deepseek-ai/dsh-session-projection-cache'
  58. config:
  59. writeEveryEvents: 200
  60. writeIntervalMs: 5000
  61. # Resolve bind host, SSH launch, and display once at boot, then mount the
  62. # matching dual-face directory picker. Mount -native or -browse directly in
  63. # an overlay to pin the interaction.
  64. - id: directory-picker
  65. name: '@deepseek-ai/dsh-host-directory-picker-auto'
  66. # The API gateway: the transport-agnostic dispatch face every client shape
  67. # shares. provider/model are the host default routing — the profile json's
  68. # mapping target (user config overrides these engineering defaults).
  69. - id: api-gateway
  70. name: '@deepseek-ai/dsh-host-apiproxy'
  71. config:
  72. provider: deepseek-official
  73. model: deepseek-v4-flash
  74. # ── layer 2: transport/service ──────────────────────────────────────────────
  75. # Plain route-registration carrier; host and port arrive as `dsh web`
  76. # flag patches over these defaults. The dist is served by the web-runtime
  77. # row below through the fallback seat.
  78. - id: webserver
  79. name: '@deepseek-ai/dsh-host-webserver'
  80. config:
  81. host: 127.0.0.1
  82. port: 3080
  83. # Web glue owned by this bundle: resolves the built frontend dist (an
  84. # assembly fact of dsh-web-app, never user config), mounts the
  85. # frontend-static fallback owner, registers the web-surface prompt
  86. # section and bash runtime variables, and prints the URL line. `dsh web`
  87. # patches mode/lanAddresses over these defaults.
  88. - id: web-runtime
  89. name: '@deepseek-ai/dsh-web-app'
  90. config:
  91. mode: production
  92. printUrl: true
  93. # ── browser plugin roster (dshClient rows; node halves are layer-2 hosts) ──
  94. # Dual-face: node half scans this very tree for dshClient rows, composes
  95. # window.__DSH_BOOT__, serves /plugins/<id>/client.js; browser half is the
  96. # module table the shell kernel constructs before cordis exists (§4.7 —
  97. # adopted as a plugin entry by the kernel, never fetched).
  98. - id: modules
  99. name: '@deepseek-ai/dsh-client-modules'
  100. # Owns both ends of the web transport: node half binds the gateway to the
  101. # webserver under /api; browser half is the fetch/SSE client.
  102. - id: connection
  103. name: '@deepseek-ai/dsh-client-connection'
  104. - id: client-runtime
  105. name: '@deepseek-ai/dsh-client-runtime'
  106. - id: ui-theme
  107. name: '@deepseek-ai/dsh-client-ui-theme'
  108. - id: locale
  109. name: '@deepseek-ai/dsh-client-locale'
  110. - id: ui-layout
  111. name: '@deepseek-ai/dsh-client-ui-layout'
  112. - id: ui-sidebar
  113. name: '@deepseek-ai/dsh-client-ui-sidebar'
  114. - id: ui-settings
  115. name: '@deepseek-ai/dsh-client-ui-settings'
  116. - id: ui-settings-general
  117. name: '@deepseek-ai/dsh-client-ui-settings-general'
  118. - id: ui-models
  119. name: '@deepseek-ai/dsh-client-ui-models'
  120. - id: ui-conversation
  121. name: '@deepseek-ai/dsh-client-ui-conversation'
  122. - id: ui-workspace
  123. name: '@deepseek-ai/dsh-client-ui-workspace'
  124. # Input triggers: the '/' | '@' pipeline (ui-slash), the command surface over
  125. # it (ui-command), and the two reference sources (ui-skill / ui-subagent).
  126. - id: ui-slash
  127. name: '@deepseek-ai/dsh-client-ui-slash'
  128. - id: ui-command
  129. name: '@deepseek-ai/dsh-client-ui-command'
  130. - id: ui-skill
  131. name: '@deepseek-ai/dsh-client-ui-skill'
  132. - id: ui-subagent
  133. name: '@deepseek-ai/dsh-client-ui-subagent'
  134. # Goal surface: GoalBar in the input dock over the goal session projection.
  135. - id: ui-goal
  136. name: '@deepseek-ai/dsh-client-ui-goal'
  137. # Model selection: the /model popupSelect + composer seat over session.models.
  138. - id: ui-model
  139. name: '@deepseek-ai/dsh-client-ui-model'
  140. - id: ui-permission
  141. name: '@deepseek-ai/dsh-client-ui-permission'
  142. # The agent-preset row in General settings: the default preset for
  143. # sessions created later. Absent a roster it renders nothing.
  144. - id: ui-agent-preset
  145. name: '@deepseek-ai/dsh-client-ui-agent-preset'
  146. # Plan control: the composer plan seat over the plan projection + /plan channel.
  147. - id: ui-plan
  148. name: '@deepseek-ai/dsh-client-ui-plan'
  149. - id: ui-question
  150. name: '@deepseek-ai/dsh-client-ui-question'
  151. - id: ui-trajectory
  152. name: '@deepseek-ai/dsh-client-ui-trajectory'
  153. # ── the agent plane moves behind agent presets ─────────────────────────────
  154. #
  155. # Every row below composes what ONE agent contributes to the host registries:
  156. # its tools, its prompt sections, its delegation backends. The base keeps them
  157. # for the TUI, which is single-session and composes its agent process-wide; the
  158. # Web surface disables them here and lets each session mount a preset instead.
  159. #
  160. # Disabling rather than deleting is deliberate: the base is shared, and a row
  161. # absent from a surface overlay would silently reappear the day someone reorders
  162. # the composition.
  163. - id: bash-env
  164. disabled: true
  165. - id: tool-bash
  166. disabled: true
  167. - id: tool-tasks
  168. disabled: true
  169. - id: tasks
  170. disabled: true
  171. - id: tool-fs
  172. disabled: true
  173. - id: tool-fs-search
  174. disabled: true
  175. - id: tool-str-replace-editor
  176. disabled: true
  177. - id: skill
  178. disabled: true
  179. - id: skill-local
  180. disabled: true
  181. - id: tool-skill
  182. disabled: true
  183. - id: goal
  184. disabled: true
  185. - id: goal-session
  186. disabled: true
  187. - id: command-goal
  188. disabled: true
  189. - id: tool-goal
  190. disabled: true
  191. - id: plan-mode
  192. disabled: true
  193. - id: token-meter
  194. disabled: true
  195. - id: compact-basic
  196. disabled: true
  197. - id: command-compact
  198. disabled: true
  199. - id: tool-result-prune
  200. disabled: true
  201. # The subagent registry and its backends STAY in the host plane. `subagents` is
  202. # a process singleton with a cross-session query surface (`listChildren`,
  203. # `followup`) that the host api-proxy serves to the browser, and a provider
  204. # registers under a globally unique name, so a per-session copy would both
  205. # starve that host row and collide on the second session. What a preset
  206. # chooses is which delegation TOOLS its agent sees, below.
  207. - id: tool-subagent-control
  208. disabled: true
  209. - id: tool-subagent-list-agents
  210. disabled: true
  211. - id: tool-subagent
  212. disabled: true
  213. - id: tool-subagent-fork
  214. disabled: true
  215. - id: tool-subagent-report
  216. disabled: true
  217. - id: workflow-workerthread
  218. disabled: true
  219. - id: tool-workflow
  220. disabled: true
  221. - id: tool-ralph
  222. disabled: true
  223. - id: workspace-context
  224. disabled: true
  225. - id: tool-todo
  226. disabled: true
  227. - id: tool-web
  228. disabled: true
  229. # The preset roster. `config/agent-presets/` ships with the deployment and is
  230. # read-only (its entries carry `system` trust);
  231. # `$DSH_HOME/.agent-presets` is where a person — or an agent — authors their own, and
  232. # carries the same trust as shell access because a preset IS a composition.
  233. # `roots` is an assembly fact, not user config: the shipped preset directory
  234. # ships beside this file, so AppCLIEntry resolves it and patches it in — the
  235. # same treatment `distIndex` gets on the webserver row.
  236. - insert:
  237. - id: agent-presets
  238. name: '@deepseek-ai/dsh-agent-presets'
  239. config:
  240. default: standard