web.cordis.yml 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181
  1. # `dsh web` — the browser surface, as a patch list over `base.cordis.yml`.
  2. # The launcher includes the base and applies this file, then any `--config`
  3. # overlay, then AppCLIEntry's profile-json and CLI-flag patches, as sibling patch
  4. # lists at ONE include level: patches never cross an include boundary, so
  5. # stacking overlays as nested includes would silently stop reaching base rows.
  6. #
  7. # A patch replaces the targeted row's whole `config`, so each row below restates
  8. # every key it owns. `--dev` appends the dsh-client-hmr row in code
  9. # (AppCLIEntry).
  10. # ── surface-specific values the base deliberately omits ─────────────────────
  11. - id: system-prompt
  12. config:
  13. persona: >-
  14. You are a coding agent powered by the {{model}} model. Your working directory is {{cwd}}.
  15. # TODO: Re-enable shared HMR for Web after its reload lifecycle is tested.
  16. - id: hmr
  17. disabled: true
  18. # Web content search runs on an ephemeral in-memory index. The service
  19. # activates at boot, while first-search defers the node:sqlite import and
  20. # in-memory handle so Node 22 startup stays quiet until content search
  21. # actually uses SQLite. That search then reconciles this boot's sources.
  22. - id: session-query-sqlite
  23. config:
  24. path: ':memory:'
  25. openAt: first-search
  26. - id: tools
  27. config:
  28. # TEMPORARY workaround: DSH_TOOLS_MODE (native|code|both) opts a whole dsh
  29. # process into Code Mode while per-session tool-mode selection is being
  30. # designed; unset keeps the schema default (native). Remove the env seam
  31. # once the web UI owns the choice per session.
  32. mode: !!js process.env.DSH_TOOLS_MODE
  33. - id: llm-deepseek
  34. config:
  35. apiKey: !!js process.env.DEEPSEEK_API_KEY
  36. baseURL: !!js process.env.DEEPSEEK_BASE_URL
  37. # ── web-only host rows, the transport layer, and the browser roster ─────────
  38. # `dshClient` rows are the browser roster the modules node half scans into
  39. # window.__DSH_BOOT__; the modules row is simultaneously a host row.
  40. - insert:
  41. - id: session-projection
  42. name: '@deepseek-ai/dsh-session-projection'
  43. - id: code-runtime
  44. name: '@deepseek-ai/dsh-code-runtime-worker'
  45. - id: storage
  46. name: '@deepseek-ai/dsh-storage'
  47. - id: storage-json
  48. name: '@deepseek-ai/dsh-storage-json'
  49. config:
  50. root: !!js dshHomePath('storages')
  51. - id: storage-domain
  52. name: '@deepseek-ai/dsh-storage-domain'
  53. config:
  54. backend: json
  55. - id: workspace
  56. name: '@deepseek-ai/dsh-workspace'
  57. - id: session-projection-cache
  58. name: '@deepseek-ai/dsh-session-projection-cache'
  59. config:
  60. writeEveryEvents: 200
  61. writeIntervalMs: 5000
  62. # Resolve bind host, SSH launch, and display once at boot, then mount the
  63. # matching dual-face directory picker. Mount -native or -browse directly in
  64. # an overlay to pin the interaction.
  65. - id: directory-picker
  66. name: '@deepseek-ai/dsh-host-directory-picker-auto'
  67. # The API gateway: the transport-agnostic dispatch face every client shape
  68. # shares. provider/model are the host default routing — the profile json's
  69. # mapping target (user config overrides these engineering defaults).
  70. - id: api-gateway
  71. name: '@deepseek-ai/dsh-host-apiproxy'
  72. config:
  73. provider: deepseek-official
  74. model: deepseek-v4-flash
  75. # ── layer 2: transport/service ──────────────────────────────────────────────
  76. # Plain route-registration carrier. distIndex is an assembly fact, not user
  77. # config — AppCLIEntry resolves the frontend dist and patches it in; host and
  78. # port arrive as CLI-flag patches over these defaults.
  79. - id: webserver
  80. name: '@deepseek-ai/dsh-host-webserver'
  81. config:
  82. host: 127.0.0.1
  83. port: 3080
  84. # ── browser plugin roster (dshClient rows; node halves are layer-2 hosts) ──
  85. # Dual-face: node half scans this very tree for dshClient rows, composes
  86. # window.__DSH_BOOT__, serves /plugins/<id>/client.js; browser half is the
  87. # module table the shell kernel constructs before cordis exists (§4.7 —
  88. # adopted as a plugin entry by the kernel, never fetched).
  89. - id: modules
  90. name: '@deepseek-ai/dsh-client-modules'
  91. # Owns both ends of the web transport: node half binds the gateway to the
  92. # webserver under /api; browser half is the fetch/SSE client.
  93. - id: connection
  94. name: '@deepseek-ai/dsh-client-connection'
  95. - id: client-runtime
  96. name: '@deepseek-ai/dsh-client-runtime'
  97. - id: ui-theme
  98. name: '@deepseek-ai/dsh-client-ui-theme'
  99. - id: locale
  100. name: '@deepseek-ai/dsh-client-locale'
  101. - id: ui-layout
  102. name: '@deepseek-ai/dsh-client-ui-layout'
  103. - id: ui-sidebar
  104. name: '@deepseek-ai/dsh-client-ui-sidebar'
  105. - id: ui-settings
  106. name: '@deepseek-ai/dsh-client-ui-settings'
  107. - id: ui-settings-general
  108. name: '@deepseek-ai/dsh-client-ui-settings-general'
  109. - id: ui-models
  110. name: '@deepseek-ai/dsh-client-ui-models'
  111. - id: ui-conversation
  112. name: '@deepseek-ai/dsh-client-ui-conversation'
  113. - id: ui-workspace
  114. name: '@deepseek-ai/dsh-client-ui-workspace'
  115. # Input triggers: the '/' | '@' pipeline (ui-slash), the command surface over
  116. # it (ui-command), and the two reference sources (ui-skill / ui-subagent).
  117. - id: ui-slash
  118. name: '@deepseek-ai/dsh-client-ui-slash'
  119. - id: ui-command
  120. name: '@deepseek-ai/dsh-client-ui-command'
  121. - id: ui-skill
  122. name: '@deepseek-ai/dsh-client-ui-skill'
  123. - id: ui-subagent
  124. name: '@deepseek-ai/dsh-client-ui-subagent'
  125. # Goal surface: GoalBar in the input dock over the goal session projection.
  126. - id: ui-goal
  127. name: '@deepseek-ai/dsh-client-ui-goal'
  128. # Model selection: the /model popupSelect + composer seat over session.models.
  129. - id: ui-model
  130. name: '@deepseek-ai/dsh-client-ui-model'
  131. - id: ui-permission
  132. name: '@deepseek-ai/dsh-client-ui-permission'
  133. # Plan control: the composer plan seat over the plan projection + /plan channel.
  134. - id: ui-plan
  135. name: '@deepseek-ai/dsh-client-ui-plan'
  136. - id: ui-question
  137. name: '@deepseek-ai/dsh-client-ui-question'
  138. - id: ui-trajectory
  139. name: '@deepseek-ai/dsh-client-ui-trajectory'