@deepseek-ai/dsh-web-app 0.0.1-rc.1 → 0.0.1-rc.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.i18n.yaml CHANGED
@@ -2,5 +2,5 @@
2
2
  # side as of the last confirmed-consistent state. Both languages carry equal authority;
3
3
  # after editing either side, bring the other along and re-record with:
4
4
  # pnpm run verify-translation-pairing --write packages/bundle/web-app/README.md
5
- README.md: b6fa225f5e0a0a079605a4fb9064b79287ab21cd
6
- README.zh.md: 68af959719b9bd146eddd143aa9d98400e65fa68
5
+ README.md: 3f7fbe7bbbeba2ee753ab2dfa8c945e798dd6a02
6
+ README.zh.md: 357ca9946ed7fef1bf4c691c6666156bb293b5e0
package/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  English | [中文](README.zh.md)
4
4
 
5
- The dsh browser-surface bundle. [`cordis.patch.yml`](cordis.patch.yml) rides over [`dsh-base`](../base/README.md): it sets the coding persona, inserts the Web host rows (webserver, API gateway, workspace, projection cache, storage) and the browser plugin roster, and mounts this package's `web-runtime` glue plugin (config `{mode, printUrl, surfaceContext, trustedHosts}`). That plugin resolves the built frontend dist through `@deepseek-ai/dsh-frontend`'s exports, enables the optional HMR row before client-module discovery so the first development graph contains its reload receiver, samples bind-dependent LAN trust once, provides it as `webRuntime` to the browser-trust fence and client roster, mounts the [`frontend-static`](../../host/frontend-static/README.md) fallback owner, registers the harness-source and web-surface prompt sections plus the bash-visible `DSH_WEB_URL`/`DSH_WEB_MODE` runtime variables when `surfaceContext` is true, and prints the `dsh web:` URL line when `printUrl` is true, after its Loader tree settles so a sibling failure cannot announce a dead app. This bundle also owns the app command line: the ordinary `web-startup` provider ([`src/startup.ts`](src/startup.ts)) injects `ctx.cmdlineArgs` ([`dsh-cmdline`](../../boot/cmdline/README.md)), parses `--host`, `--port`, `--dev`, repeatable `--trusted-host`, and the app's `--help`, then provides `webStartup`. Flag-configured rows inject that service and read it directly from lazy config, so nothing binds a port before argument resolution and `dsh --profile web --help` starts no server. [`dsh-headless`](../headless/README.md) is a sibling surface over the same base and does not mount this bundle.
5
+ The dsh browser-surface bundle. [`cordis.patch.yml`](cordis.patch.yml) rides over [`dsh-base`](../base/README.md): it sets the coding persona, inserts the Web host rows (webserver, API gateway, workspace, projection cache, storage) and the browser plugin roster, the always-on client-plugin reload chain ([`dsh-client-hmr`](../../client/hmr/README.md), idle until a rebuild watcher rewrites client bundles), and mounts this package's `web-runtime` glue plugin (config `{printUrl, surfaceContext, trustedHosts}`). That plugin resolves the built frontend dist through `@deepseek-ai/dsh-web-frontend`'s exports, samples bind-dependent LAN trust once, provides it as `webRuntime` to the browser-trust fence and client roster, mounts the [`frontend-static`](../../host/frontend-static/README.md) fallback owner, registers the harness-source and web-surface prompt sections plus the bash-visible `DSH_WEB_URL` runtime variable when `surfaceContext` is true, and prints the `dsh web:` URL line when `printUrl` is true, after its Loader tree settles so a sibling failure cannot announce a dead app. This bundle also owns the app command line: the ordinary `web-startup` provider ([`src/startup.ts`](src/startup.ts)) injects `ctx.cmdlineArgs` ([`dsh-cmdline`](../../boot/cmdline/README.md)), parses `--host`, `--port`, repeatable `--trusted-host`, and the app's `--help`, then provides `webStartup`. Flag-configured rows inject that service and read it directly from lazy config, so nothing binds a port before argument resolution and `dsh --profile web --help` starts no server. [`dsh-headless`](../headless/README.md) is a sibling surface over the same base and does not mount this bundle.
6
6
 
7
7
  ## Model Experience
8
8
 
@@ -10,7 +10,7 @@ The dsh browser-surface bundle. [`cordis.patch.yml`](cordis.patch.yml) rides ove
10
10
 
11
11
  #### What the model sees
12
12
 
13
- When `surfaceContext` is true, the `harness:source` section identifies the on-disk Harness implementation without claiming it is the working directory, and the `app:web-surface` global section (order −98) orients the model to the GUI: the canonical local URL, the "this page" referent, the HMR/rebuild update contract for the active mode, and the instruction not to start replacement servers. `DSH_WEB_URL` and `DSH_WEB_MODE` additionally appear in the managed bash environment with their descriptions, resolved per invocation from the live server. When it is false, neither section nor the variables are registered.
13
+ When `surfaceContext` is true, the `harness:source` section identifies the on-disk Harness implementation without claiming it is the working directory, and the `app:web-surface` global section (order −98) orients the model to the GUI: the canonical local URL, the "this page" referent, the update contract (the reload receiver is always on; no-refresh reloads additionally need the `pnpm run dev:web` watcher), and the instruction not to start replacement servers. `DSH_WEB_URL` additionally appears in the managed bash environment with its description, resolved per invocation from the live server. When it is false, neither section nor the variable is registered.
14
14
 
15
15
  #### Token effect
16
16
 
@@ -18,7 +18,7 @@ One source line and one prompt paragraph per session plus two managed-environmen
18
18
 
19
19
  #### KV Cache effect
20
20
 
21
- The prompt section sits near the system prompt's head and is stable for the life of the process (port and mode are boot facts), so it does not invalidate the cache across turns.
21
+ The prompt section sits near the system prompt's head and is stable for the life of the process (the port is a boot fact), so it does not invalidate the cache across turns.
22
22
 
23
23
  ## Known Limitations and Deferred Work
24
24
 
package/README.zh.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  [English](README.md) | 中文
4
4
 
5
- dsh 浏览器表层组合包。[`cordis.patch.yml`](cordis.patch.yml) 叠加在 [`dsh-base`](../base/README.md) 之上:设置 coding persona,插入 Web 宿主行(webserver、API 网关、workspace、投影缓存、存储)与浏览器插件名录,并挂载本包的 `web-runtime` 粘合插件(配置为 `{mode, printUrl, surfaceContext, trustedHosts}`)。该插件通过 `@deepseek-ai/dsh-frontend` 的 exports 解析已构建的前端 dist,在客户端模块发现前启用可选的 HMR 行,确保首份开发模式图中包含它的重载接收端,只采样一次依赖 bind 的 LAN 信任信息并将其作为 `webRuntime` 提供给浏览器信任栅栏和客户端名录,挂载 [`frontend-static`](../../host/frontend-static/README.md) 回退席位所有者,在 `surfaceContext` 为 true 时注册 Harness 源码与 Web 表层提示词段落,以及 bash 可见的 `DSH_WEB_URL`/`DSH_WEB_MODE` 运行时变量,并在 `printUrl` 为 true 时等自身的 Loader 配置树结算后再打印 `dsh web:` URL 行,避免兄弟行失败时公告一个已失效的应用。本组合包还持有应用命令行:普通 `web-startup` 提供方([`src/startup.ts`](src/startup.ts))注入 `ctx.cmdlineArgs`([`dsh-cmdline`](../../boot/cmdline/README.md)),解析 `--host`、`--port`、`--dev`、可重复的 `--trusted-host` 以及应用自己的 `--help`,再提供 `webStartup`。由 flag 配置的行会注入该服务,并在惰性配置中直接读取它,因此参数解析完成前不会有任何东西绑定端口,`dsh --profile web --help` 也不会启动服务器。[`dsh-headless`](../headless/README.md) 是同一 base 之上的同级表层,不挂载本组合包。
5
+ dsh 浏览器表层组合包。[`cordis.patch.yml`](cordis.patch.yml) 叠加在 [`dsh-base`](../base/README.md) 之上:设置 coding persona,插入 Web 宿主行(webserver、API 网关、workspace、投影缓存、存储)、浏览器插件名录与始终挂载的客户端插件重载链([`dsh-client-hmr`](../../client/hmr/README.md),在重建 watcher 改写客户端 bundle 之前保持空闲),并挂载本包的 `web-runtime` 粘合插件(配置为 `{printUrl, surfaceContext, trustedHosts}`)。该插件通过 `@deepseek-ai/dsh-web-frontend` 的 exports 解析已构建的前端 dist,只采样一次依赖 bind 的 LAN 信任信息并将其作为 `webRuntime` 提供给浏览器信任栅栏和客户端名录,挂载 [`frontend-static`](../../host/frontend-static/README.md) 回退席位所有者,在 `surfaceContext` 为 true 时注册 Harness 源码与 Web 表层提示词段落,以及 bash 可见的 `DSH_WEB_URL` 运行时变量,并在 `printUrl` 为 true 时等自身的 Loader 配置树结算后再打印 `dsh web:` URL 行,避免兄弟行失败时公告一个已失效的应用。本组合包还持有应用命令行:普通 `web-startup` 提供方([`src/startup.ts`](src/startup.ts))注入 `ctx.cmdlineArgs`([`dsh-cmdline`](../../boot/cmdline/README.md)),解析 `--host`、`--port`、可重复的 `--trusted-host` 以及应用自己的 `--help`,再提供 `webStartup`。由 flag 配置的行会注入该服务,并在惰性配置中直接读取它,因此参数解析完成前不会有任何东西绑定端口,`dsh --profile web --help` 也不会启动服务器。[`dsh-headless`](../headless/README.md) 是同一 base 之上的同级表层,不挂载本组合包。
6
6
 
7
7
  ## 模型体验
8
8
 
@@ -10,7 +10,7 @@ dsh 浏览器表层组合包。[`cordis.patch.yml`](cordis.patch.yml) 叠加在
10
10
 
11
11
  #### 模型看到的内容
12
12
 
13
- 当 `surfaceContext` 为 true 时,`harness:source` 段落标明磁盘上的 Harness 实现,但不会声称它就是工作目录;全局段落 `app:web-surface`(顺序 −98)则向模型说明 GUI:规范的本地 URL、「this page」指代什么、当前模式下 HMR(热模块替换)/重建的更新约定,以及不要启动替代服务器的指令。`DSH_WEB_URL` 与 `DSH_WEB_MODE` 还会连同各自描述出现在受管 bash 环境中,每次调用时从运行中的服务器解析。当它为 false 时,这两个段落和这些变量都不会注册。
13
+ 当 `surfaceContext` 为 true 时,`harness:source` 段落标明磁盘上的 Harness 实现,但不会声称它就是工作目录;全局段落 `app:web-surface`(顺序 −98)则向模型说明 GUI:规范的本地 URL、「this page」指代什么、更新约定(重载接收端始终开启;无刷新重载还需要 `pnpm run dev:web` watcher),以及不要启动替代服务器的指令。`DSH_WEB_URL` 还会连同描述出现在受管 bash 环境中,每次调用时从运行中的服务器解析。当它为 false 时,这两个段落和该变量都不会注册。
14
14
 
15
15
  #### Token 影响
16
16
 
@@ -18,7 +18,7 @@ dsh 浏览器表层组合包。[`cordis.patch.yml`](cordis.patch.yml) 叠加在
18
18
 
19
19
  #### KV Cache 影响
20
20
 
21
- 该提示词段落位于系统提示词靠前位置,且在进程整个生命周期内稳定(端口与模式是启动期事实),因此不会使跨轮次缓存失效。
21
+ 该提示词段落位于系统提示词靠前位置,且在进程整个生命周期内稳定(端口是启动期事实),因此不会使跨轮次缓存失效。
22
22
 
23
23
  ## 已知限制与延期工作
24
24
 
package/cordis.patch.yml CHANGED
@@ -8,8 +8,8 @@
8
8
  # The web-startup plugin injects `cmdlineArgs` and provides `webStartup` as an
9
9
  # ordinary Cordis service. Rows configured from flags inject that service, so
10
10
  # Loader resolves their expressions only after it exists. The web runtime then
11
- # provides bind-dependent `webRuntime` values to the trust fence and client
12
- # roster. `dsh --profile web --help` provides neither service, so no server binds.
11
+ # provides bind-dependent `webRuntime` values to the trust fence.
12
+ # `dsh --profile web --help` provides neither service, so no server binds.
13
13
 
14
14
  # ── surface-specific values the base deliberately omits ─────────────────────
15
15
 
@@ -34,7 +34,7 @@
34
34
  - id: tools
35
35
  config:
36
36
  # TEMPORARY workaround: DSH_TOOLS_MODE (native|code|both) opts a whole dsh
37
- # process into Code Mode while per-session tool-mode selection is being
37
+ # process into Code Mode while per-session tool-presentation selection is being
38
38
  # designed; unset keeps the schema default (native). Remove the env seam
39
39
  # once the web UI owns the choice per session.
40
40
  mode: !!js process.env.DSH_TOOLS_MODE
@@ -45,7 +45,7 @@
45
45
  # window.__DSH_BOOT__; the modules row is simultaneously a host row.
46
46
  - insert:
47
47
  - id: code-runtime
48
- name: '@deepseek-ai/dsh-code-runtime-worker'
48
+ name: '@deepseek-ai/dsh-code-runtime-worker-thread'
49
49
 
50
50
  - id: storage
51
51
  name: '@deepseek-ai/dsh-storage'
@@ -60,6 +60,15 @@
60
60
  config:
61
61
  backend: json
62
62
 
63
+ - id: message-feedback
64
+ name: '@deepseek-ai/dsh-message-feedback'
65
+ config:
66
+ maxNoteBytes: 8192
67
+
68
+ # Browser Session export: `/export` command plus the shared download dialog.
69
+ - id: session-log-download
70
+ name: '@deepseek-ai/dsh-session-log-export'
71
+
63
72
  - id: workspace
64
73
  name: '@deepseek-ai/dsh-workspace'
65
74
 
@@ -69,17 +78,29 @@
69
78
  writeEveryEvents: 200
70
79
  writeIntervalMs: 5000
71
80
 
81
+ # Whole-log turn/step counts for the chat stats strip (the sessionStats
82
+ # projection key); the projection registry itself is a base-layer row.
83
+ - id: session-stats
84
+ name: '@deepseek-ai/dsh-session-stats'
85
+
72
86
  # Resolve bind host, SSH launch, and display once at boot, then mount the
73
87
  # matching dual-face directory picker. Mount -native or -browse directly in
74
88
  # an overlay to pin the interaction.
75
89
  - id: directory-picker
76
90
  name: '@deepseek-ai/dsh-host-directory-picker-auto'
77
91
 
92
+ # Read-only projection of current Loader entries for trusted client RPCs.
93
+ - id: plugin-inventory
94
+ name: '@deepseek-ai/dsh-host-plugin-inventory'
95
+
78
96
  # The API gateway: the transport-agnostic dispatch face every client shape
79
97
  # shares. The base layer's agent-default-model service owns the default model.
80
98
  - id: api-gateway
81
99
  name: '@deepseek-ai/dsh-host-apiproxy'
82
100
 
101
+ - id: cordis-host-runner
102
+ name: '@deepseek-ai/dsh-cordis-host-runner'
103
+
83
104
  # Ordinary provider for the parsed Web flags. Its plugin-level injection
84
105
  # waits for cmdlineArgs; no launcher metadata or special row kind is needed.
85
106
  - id: web-startup
@@ -100,39 +121,34 @@
100
121
  # Web glue owned by this bundle: resolves the built frontend dist (an
101
122
  # assembly fact of dsh-web-app, never user config), mounts the
102
123
  # frontend-static fallback owner, registers the web-surface prompt
103
- # section and bash runtime variables, and prints the URL line. The webStartup
104
- # provider supplies invocation-only values; after the server binds, this row
105
- # samples LAN trust once and provides `webRuntime`. A complete agent-preset
106
- # persona suppresses the prompt section for that agent while retaining
107
- # these host-owned shell variables.
124
+ # section and the bash runtime variable, and prints the URL line. The
125
+ # webStartup provider supplies invocation-only values; after the server
126
+ # binds, this row samples LAN trust once and provides `webRuntime`. A
127
+ # complete agent-preset persona suppresses the prompt section for that
128
+ # agent while retaining the host-owned shell variable.
108
129
  - id: web-runtime
109
130
  name: '@deepseek-ai/dsh-web-app'
110
131
  inject: [webStartup]
111
132
  config:
112
- mode: !!js ctx.webStartup.mode
113
133
  printUrl: true
114
134
  surfaceContext: true
115
135
  trustedHosts: !!js ctx.webStartup.trustedHosts
116
136
 
117
- # The client-plugin reload chain: a dev-only row this bundle ships off,
118
- # which the runtime row turns on before client discovery. It is a row rather
119
- # than a child of web-runtime because its node half is a client-side package,
120
- # which a host-side bundle cannot import.
137
+ # The client-plugin reload chain, always mounted: it is idle until a
138
+ # rebuild watcher (pnpm run dev:web) actually rewrites client bundles. It
139
+ # is a row rather than a child of web-runtime because its node half is a
140
+ # client-side package, which a host-side bundle cannot import.
121
141
  - id: client-hmr
122
142
  name: '@deepseek-ai/dsh-client-hmr'
123
- inject: [webStartup]
124
- disabled: true
125
143
 
126
144
  # ── browser plugin roster (dsh.client rows; node halves are layer-2 hosts) ──
127
145
 
128
- # Dual-face: this waits for the runtime row to decide whether HMR belongs
129
- # in the first graph. The node half then scans this tree, composes
130
- # window.__DSH_BOOT__, and serves /plugins/<id>/client.js; the browser half
131
- # is the module table the shell kernel constructs before cordis exists
132
- # (adopted as a plugin entry by the kernel, never fetched).
146
+ # Dual-face: the node half scans this tree, composes window.__DSH_BOOT__,
147
+ # and serves /plugins/<id>/client.js; the browser half is the module table
148
+ # the shell kernel constructs before cordis exists (adopted as a plugin
149
+ # entry by the kernel, never fetched).
133
150
  - id: modules
134
151
  name: '@deepseek-ai/dsh-client-modules'
135
- inject: [webRuntime]
136
152
 
137
153
  # Owns both ends of the web transport: node half binds the gateway to the
138
154
  # webserver under /api; browser half is the fetch/SSE client.
@@ -151,6 +167,9 @@
151
167
  - id: client-runtime
152
168
  name: '@deepseek-ai/dsh-client-runtime'
153
169
 
170
+ - id: cordis-client-runner
171
+ name: '@deepseek-ai/dsh-cordis-client-runner'
172
+
154
173
  - id: ui-theme
155
174
  name: '@deepseek-ai/dsh-client-ui-theme'
156
175
 
@@ -169,8 +188,11 @@
169
188
  - id: ui-settings-general
170
189
  name: '@deepseek-ai/dsh-client-ui-settings-general'
171
190
 
172
- - id: ui-models
173
- name: '@deepseek-ai/dsh-client-ui-models'
191
+ - id: ui-settings-models
192
+ name: '@deepseek-ai/dsh-client-ui-settings-models'
193
+
194
+ - id: ui-settings-plugin-inventory
195
+ name: '@deepseek-ai/dsh-client-ui-settings-plugin-inventory'
174
196
 
175
197
  - id: ui-conversation
176
198
  name: '@deepseek-ai/dsh-client-ui-conversation'
@@ -179,6 +201,14 @@
179
201
  - id: ui-tool
180
202
  name: '@deepseek-ai/dsh-client-ui-tool'
181
203
 
204
+ - id: ui-cordis
205
+ name: '@deepseek-ai/dsh-client-ui-cordis'
206
+
207
+ # Durable workflow lifecycle as an independent Chat node after the
208
+ # existing generic workflow tool row.
209
+ - id: ui-workflow-run
210
+ name: '@deepseek-ai/dsh-client-ui-workflow-run'
211
+
182
212
  # Turn tail: the produced-files row under each closing assistant message.
183
213
  # Remove this entry to turn the surface off; the tail hole renders empty.
184
214
  - id: ui-deliverables
@@ -188,13 +218,13 @@
188
218
  - id: ui-workspace
189
219
  name: '@deepseek-ai/dsh-client-ui-workspace'
190
220
 
191
- # Input triggers: the '/' | '@' pipeline (ui-slash), the command surface over
192
- # it (ui-command), and the two reference sources (ui-skill / ui-subagent).
193
- - id: ui-slash
194
- name: '@deepseek-ai/dsh-client-ui-slash'
221
+ # Input triggers: the '/' | '@' pipeline (ui-input-trigger), the command surface over
222
+ # it (ui-commands), and the two reference sources (ui-skill / ui-subagent).
223
+ - id: ui-input-trigger
224
+ name: '@deepseek-ai/dsh-client-ui-input-trigger'
195
225
 
196
- - id: ui-command
197
- name: '@deepseek-ai/dsh-client-ui-command'
226
+ - id: ui-commands
227
+ name: '@deepseek-ai/dsh-client-ui-commands'
198
228
 
199
229
  - id: ui-skill
200
230
  name: '@deepseek-ai/dsh-client-ui-skill'
@@ -202,28 +232,42 @@
202
232
  - id: ui-subagent
203
233
  name: '@deepseek-ai/dsh-client-ui-subagent'
204
234
 
235
+ # Background jobs: the session-header list over the jobsBySession mirror.
236
+ - id: ui-jobs
237
+ name: '@deepseek-ai/dsh-client-ui-jobs'
238
+
205
239
  # Goal surface: GoalBar in the input dock over the goal session projection.
206
240
  - id: ui-goal
207
241
  name: '@deepseek-ai/dsh-client-ui-goal'
208
242
 
243
+ # Per-message feedback: Like/Dislike plus an optional note in the
244
+ # assistant-message action strip, over the messageFeedback Remote.
245
+ - id: ui-message-feedback
246
+ name: '@deepseek-ai/dsh-client-ui-message-feedback'
247
+
209
248
  # Model selection: the /model popupSelect + composer seat over session.models.
210
- - id: ui-model
211
- name: '@deepseek-ai/dsh-client-ui-model'
249
+ - id: ui-model-selection
250
+ name: '@deepseek-ai/dsh-client-ui-model-selection'
212
251
 
213
252
  - id: ui-permission
214
- name: '@deepseek-ai/dsh-client-ui-permission'
253
+ name: '@deepseek-ai/dsh-client-ui-permission-presets'
215
254
 
216
255
  # The agent-preset row in General settings: the default preset for
217
256
  # sessions created later. Absent a roster it renders nothing.
218
257
  - id: ui-agent-preset
219
258
  name: '@deepseek-ai/dsh-client-ui-agent-preset'
220
259
 
260
+ # Plugin configuration: the host-plane sections a user owns, as expandable
261
+ # cards. A namespace this deployment does not expose renders nothing.
262
+ - id: ui-settings-plugins
263
+ name: '@deepseek-ai/dsh-client-ui-settings-plugins'
264
+
221
265
  # Plan control: the composer plan seat over the plan projection + /plan channel.
222
266
  - id: ui-plan
223
267
  name: '@deepseek-ai/dsh-client-ui-plan'
224
268
 
225
- - id: ui-question
226
- name: '@deepseek-ai/dsh-client-ui-question'
269
+ - id: ui-user-questions
270
+ name: '@deepseek-ai/dsh-client-ui-user-questions'
227
271
 
228
272
  - id: ui-trajectory
229
273
  name: '@deepseek-ai/dsh-client-ui-trajectory'
@@ -239,7 +283,7 @@
239
283
  # absent from a surface overlay would silently reappear the day someone reorders
240
284
  # the composition.
241
285
 
242
- # `bash-env` STAYS in the host plane: `apps/cli/src/web.ts` injects it to
286
+ # `shell-env` STAYS in the host plane: `apps/cli/src/web.ts` injects it to
243
287
  # publish `DSH_WEB_URL`/`DSH_WEB_MODE`, and a host row that injects a service is
244
288
  # the criterion for host-plane ownership — injection resolves before any session
245
289
  # exists, so there is no agent to key by. Behind a preset realm those variables
@@ -248,17 +292,20 @@
248
292
  - id: tool-bash
249
293
  disabled: true
250
294
 
251
- # The background-task REGISTRY stays on the host plane; only the model-facing
252
- # `task_*` controls move. Its producers — `tool-bash` here, `tool-pty` and a
295
+ - id: tool-pwsh
296
+ disabled: true
297
+
298
+ # The background-job REGISTRY stays on the host plane; only the model-facing
299
+ # `job_*` controls move. Its producers — `tool-bash` here, `tool-terminal` and a
253
300
  # non-continuable `tool-subagent` elsewhere — are preset rows that resolve it
254
301
  # with `ctx.get`, and an entry-local realm around the registry is invisible to
255
302
  # every sibling row outside that realm, so `run_in_background` answered
256
- # "background tasks unavailable" while the controls sat in the catalog. That is
303
+ # "background jobs unavailable" while the controls sat in the catalog. That is
257
304
  # the `goals` criterion read from inside the preset: a Service a row outside its
258
305
  # realm READS belongs to the plane both can see. The registry is keyed by owning
259
306
  # agent, so one host instance serves every session exactly as before presets.
260
307
 
261
- - id: tool-tasks
308
+ - id: tool-jobs
262
309
  disabled: true
263
310
 
264
311
  - id: tool-fs
@@ -272,14 +319,14 @@
272
319
 
273
320
  # The `skill` REGISTRY stays in the host plane. It is host+per-scope layered
274
321
  # (the tools-registry shape): deployment-level providers — repository plugins,
275
- # a host skill-local row — register into its global layer, while a preset's
276
- # `skill-local` registers into that preset's layer, and each agent reads the
322
+ # a host skill-filesystem row — register into its global layer, while a preset's
323
+ # `skill-filesystem` registers into that preset's layer, and each agent reads the
277
324
  # merged catalog its scope chain selects. Only the per-agent rows move behind
278
- # presets: the base host `skill-local` row is disabled here (presets own local
325
+ # presets: the base host `skill-filesystem` row is disabled here (presets own local
279
326
  # discovery), and `tool-skill` is what a preset mounts to give its agent the
280
327
  # catalog and loader at all.
281
328
 
282
- - id: skill-local
329
+ - id: skill-filesystem
283
330
  disabled: true
284
331
 
285
332
  - id: tool-skill
@@ -290,7 +337,7 @@
290
337
  # domain as Remote endpoints, and a Remote method picks its receiver Service
291
338
  # from a generated descriptor — it resolves `goals` on the host, so a
292
339
  # per-session realm would answer `service-unavailable` for every browser call.
293
- # That is the `bash-env` criterion read from the other side: injection is not
340
+ # That is the `shell-env` criterion read from the other side: injection is not
294
341
  # the only host relationship a Service can have. The registry is keyed by
295
342
  # session, so one host instance serves every session exactly as before presets.
296
343
 
@@ -300,16 +347,20 @@
300
347
  - id: plan-mode
301
348
  disabled: true
302
349
 
303
- - id: token-meter
304
- disabled: true
350
+ # The token METER stays on the host plane; only the compaction backend that
351
+ # reads it moves. It owns the context-meter projection units, and that table is
352
+ # process-wide, so preset ownership would make the meter a function of which
353
+ # presets happen to be mounted rather than a per-session fact. Same criterion as
354
+ # `tasks` and `goals`; the reasoning has one home in
355
+ # `.agents/notes/implemented/architecture/2026-08-10-host-plane-ownership-after-presets.md`.
305
356
 
306
- - id: compact-basic
357
+ - id: compaction-basic
307
358
  disabled: true
308
359
 
309
360
  - id: command-compact
310
361
  disabled: true
311
362
 
312
- - id: tool-result-prune
363
+ - id: tool-result-pruner
313
364
  disabled: true
314
365
 
315
366
  # The subagent registry and its backends STAY in the host plane. `subagents` is
@@ -337,7 +388,7 @@
337
388
  # scope-aware — one copy per mounted preset means every child gets `report`
338
389
  # registered once per live session, which throws on the second.
339
390
 
340
- - id: workflow-workerthread
391
+ - id: workflow-worker-thread
341
392
  disabled: true
342
393
 
343
394
  - id: tool-workflow
@@ -346,7 +397,7 @@
346
397
  - id: tool-ralph
347
398
  disabled: true
348
399
 
349
- - id: workspace-context
400
+ - id: agent-instructions
350
401
  disabled: true
351
402
 
352
403
  - id: tool-todo
@@ -356,12 +407,15 @@
356
407
  disabled: true
357
408
 
358
409
  # The preset roster. `config/agent-presets/` ships with the deployment and is
359
- # read-only (its entries carry `system` trust);
360
- # `$DSH_HOME/.agent-presets` is where a person — or an agent — authors their own, and
361
- # carries the same trust as shell access because a preset IS a composition.
362
- # `roots` is an assembly fact, not user config: the shipped preset directory
363
- # ships beside this file, so AppCLIEntry resolves it and patches it in — the
364
- # same treatment `distIndex` gets on the webserver row.
410
+ # read-only (its entries carry `system` trust); `$DSH_HOME/.agent-presets` is
411
+ # where a person — or an agent — authors their own, and carries the same trust
412
+ # as shell access because a preset IS a composition.
413
+ #
414
+ # Only the SHIPPED root is an assembly fact: it sits beside the installed app's
415
+ # own config, so `apps/cli`'s `composeProfile` resolves and patches it in — the
416
+ # same treatment `distIndex` gets on the webserver row. The writable root is
417
+ # `dsh-agent-presets`' own default (`includeUserRoot`), so a composition that
418
+ # never reaches that patch still finds a person's presets.
365
419
  - insert:
366
420
  - id: agent-presets
367
421
  name: '@deepseek-ai/dsh-agent-presets'
package/lib/index.js CHANGED
@@ -3,8 +3,7 @@ import { networkInterfaces } from "node:os";
3
3
  import { fileURLToPath } from "node:url";
4
4
  import z from "@deepseek-ai/schemastery";
5
5
  import { addHarnessSourceSection } from "@deepseek-ai/dsh-app-boot";
6
- import { enableRow } from "@deepseek-ai/dsh-cmdline";
7
- import * as FrontendStatic from "@deepseek-ai/dsh-frontend-static";
6
+ import * as FrontendStatic from "@deepseek-ai/dsh-host-frontend-static";
8
7
  //#region lib/types/index.js
9
8
  /**
10
9
  * @deepseek-ai/dsh-web-app — the browser-surface bundle's runtime glue plugin
@@ -13,7 +12,7 @@ import * as FrontendStatic from "@deepseek-ai/dsh-frontend-static";
13
12
  * the built frontend dist (workspace knowledge of this bundle, never user
14
13
  * config), mounts the `frontend-static` fallback owner over it, registers the
15
14
  * harness-source and web-surface prompt sections, the bash-visible web runtime
16
- * variables, and the URL line. App command-line values arrive through the
15
+ * variable, and the URL line. App command-line values arrive through the
17
16
  * `webStartup` service expressions in the bundle patch.
18
17
  * @module @deepseek-ai/dsh-web-app
19
18
  */
@@ -21,21 +20,17 @@ import * as FrontendStatic from "@deepseek-ai/dsh-frontend-static";
21
20
  const name = "web-app";
22
21
  /** This dsh installation's root, from either this package's source or built entry. */
23
22
  const SOURCE_ROOT = fileURLToPath(new URL("../../../..", import.meta.url));
24
- const HMR_ROW_ID = "client-hmr";
25
23
  /** Runtime service that releases Web rows after bind-dependent values resolve. */
26
24
  const WEB_RUNTIME_SERVICE = "webRuntime";
27
25
  /** Services required before the web runtime can mount. */
28
- const inject = ["httpServer"];
26
+ const inject = ["webServer"];
29
27
  const Config = z.object({
30
- mode: z.union([z.const("production"), z.const("development")]).default("production"),
31
28
  printUrl: z.boolean().default(true),
32
29
  surfaceContext: z.boolean().default(true),
33
30
  trustedHosts: z.array(String).default([])
34
31
  });
35
32
  /** Environment variable naming the canonical local URL of this Web GUI. */
36
33
  const DSH_WEB_URL = "DSH_WEB_URL";
37
- /** Environment variable naming the Web runtime mode. */
38
- const DSH_WEB_MODE = "DSH_WEB_MODE";
39
34
  const LOOPBACK_HOST = "127.0.0.1";
40
35
  /** The webserver schema's all-interfaces bind literal. */
41
36
  const ALL_INTERFACES_HOST = "0.0.0.0";
@@ -57,21 +52,20 @@ function resolveLanTrust(bindHost, extra) {
57
52
  };
58
53
  }
59
54
  /** Model-visible orientation and acceptance boundary for sessions created through `dsh web`. */
60
- function webSurfacePrompt(webUrl, mode) {
61
- const updateContract = mode === "development" ? "This Web process was launched with `dsh web --dev`, so its client-plugin HMR receiver is active. No-refresh updates occur only when `pnpm run dev:web` is also running from this same checkout to rebuild client-plugin bundles; verify that watcher before promising automatic updates. Client-plugin changes then reload automatically, while apps/web shell and other plain-package changes still require a rebuild and page refresh. " : "This Web process was launched without `--dev`, so HMR is inactive: rebuild the affected Web artifacts and verify this existing URL after a page refresh. If the user wants no-refresh client-plugin updates, explain that this GUI must be restarted with `dsh web --dev` and `pnpm run dev:web` must also run from this same checkout; do not present either command alone as sufficient. ";
62
- return `You are interacting with the user through the DeepSeek Harness Web GUI at ${webUrl}. When the user refers to "this page", "this GUI", or "this app" without naming another target, they mean this GUI. The browser provides no implicit DOM, route, or screenshot context. ` + updateContract + "Starting another server does not update this GUI. The apps/web Vite entry builds the shell but is not a standalone application because only dsh web injects window.__DSH_BOOT__. Do not start a replacement server unless the user asks; if one is needed, use a managed background task and verify its exact URL.";
55
+ function webSurfacePrompt(webUrl) {
56
+ return `You are interacting with the user through the DeepSeek Harness Web GUI at ${webUrl}. When the user refers to "this page", "this GUI", or "this app" without naming another target, they mean this GUI. The browser provides no implicit DOM, route, or screenshot context. The client-plugin HMR receiver is active, but client-plugin changes reload without a refresh only while \`pnpm run dev:web\` is also running from this same checkout to rebuild their bundles; verify that watcher before promising automatic updates. Every other change — the apps/web shell and plain packages — requires rebuilding the affected Web artifacts and verifying this existing URL after a page refresh. Starting another server does not update this GUI. The apps/web Vite entry builds the shell but is not a standalone application because only dsh web injects window.__DSH_BOOT__. Do not start a replacement server unless the user asks; if one is needed, use a managed background job and verify its exact URL.`;
63
57
  }
64
58
  /** Resolve the canonical loopback URL from the active Web server. */
65
59
  function localWebUrl(ctx) {
66
- const port = ctx.get("httpServer")?.port;
67
- if (port === void 0) throw new Error("web-app: httpServer service missing while resolving Web runtime");
60
+ const port = ctx.get("webServer")?.port;
61
+ if (port === void 0) throw new Error("web-app: webServer service missing while resolving Web runtime");
68
62
  return `http://${LOOPBACK_HOST}:${String(port)}`;
69
63
  }
70
64
  /** Dist location is workspace knowledge of this bundle: resolved through the frontend package exports, not configured. */
71
65
  function resolveDistIndex() {
72
66
  const require = createRequire(import.meta.url);
73
67
  try {
74
- return require.resolve("@deepseek-ai/dsh-frontend/dist/index.html");
68
+ return require.resolve("@deepseek-ai/dsh-web-frontend/dist/index.html");
75
69
  } catch {
76
70
  /* v8 ignore next 2 -- reachable only on a checkout without a built dist; the test tree builds it */
77
71
  throw new Error("web-app: frontend dist not built; run pnpm run build from the repository root first");
@@ -80,15 +74,13 @@ function resolveDistIndex() {
80
74
  /** Test hook: hosts with no built frontend dist substitute the resolver; production never touches this. */
81
75
  const internals = { resolveDistIndex };
82
76
  /**
83
- * Mount the Web runtime: dist serving, surface prompt, bash runtime
84
- * variables, and the URL line.
85
- * @param ctx - plugin context carrying the httpServer service.
77
+ * Mount the Web runtime: dist serving, surface prompt, the bash runtime
78
+ * variable, and the URL line.
79
+ * @param ctx - plugin context carrying the webServer service.
86
80
  * @param config - validated {@link Config}.
87
- * @returns nothing once the invocation's client roster and runtime contributions are registered.
88
81
  */
89
- async function apply(ctx, config) {
90
- if (config.mode === "development") await enableRow(ctx, HMR_ROW_ID);
91
- const runtime = resolveLanTrust(ctx.httpServer.host, config.trustedHosts);
82
+ function apply(ctx, config) {
83
+ const runtime = resolveLanTrust(ctx.webServer.host, config.trustedHosts);
92
84
  ctx.provide(WEB_RUNTIME_SERVICE, runtime);
93
85
  ctx.plugin(FrontendStatic, { distIndex: internals.resolveDistIndex() });
94
86
  if (config.surfaceContext) {
@@ -97,33 +89,27 @@ async function apply(ctx, config) {
97
89
  promptCtx.systemPrompt.section({
98
90
  name: "app:web-surface",
99
91
  order: -98,
100
- text: () => webSurfacePrompt(localWebUrl(promptCtx), config.mode)
92
+ text: () => webSurfacePrompt(localWebUrl(promptCtx))
101
93
  });
102
94
  });
103
- ctx.inject(["bashEnv"], (runtimeCtx) => {
104
- runtimeCtx.bashEnv.register({
95
+ ctx.inject(["shellEnv"], (runtimeCtx) => {
96
+ runtimeCtx.shellEnv.register({
105
97
  name: "web-runtime",
106
- variables: {
107
- [DSH_WEB_URL]: { description: "Canonical local URL of the DeepSeek Harness Web GUI serving this session." },
108
- [DSH_WEB_MODE]: { description: "Web runtime mode: production, or development when the client-plugin HMR receiver is active." }
109
- },
110
- resolve: () => ({
111
- [DSH_WEB_URL]: localWebUrl(runtimeCtx),
112
- [DSH_WEB_MODE]: config.mode
113
- })
98
+ variables: { [DSH_WEB_URL]: { description: "Canonical local URL of the DeepSeek Harness Web GUI serving this session." } },
99
+ resolve: () => ({ [DSH_WEB_URL]: localWebUrl(runtimeCtx) })
114
100
  });
115
101
  });
116
102
  }
117
103
  if (config.printUrl) {
118
104
  const printUrl = () => {
119
105
  const lanCandidate = runtime.lanAddresses[0];
120
- const port = ctx.httpServer.port;
106
+ const port = ctx.webServer.port;
121
107
  console.log(`dsh web: ${localWebUrl(ctx)}${lanCandidate === void 0 ? "" : ` (LAN: http://${lanCandidate}:${String(port)})`}`);
122
108
  };
123
109
  const settled = ctx.get("loader")?.await();
124
110
  if (settled === void 0) printUrl();
125
111
  else settled.then(() => {
126
- if (ctx.get("httpServer") !== void 0) printUrl();
112
+ if (ctx.get("webServer") !== void 0) printUrl();
127
113
  }, () => {});
128
114
  }
129
115
  }
package/lib/startup.js CHANGED
@@ -1,9 +1,9 @@
1
- import { parseCmdline } from "@deepseek-ai/dsh-cmdline";
2
1
  import { Command } from "commander";
2
+ import { parseCmdline } from "@deepseek-ai/dsh-cmdline";
3
3
  //#region lib/types/startup.js
4
4
  /**
5
5
  * The web app's command-line provider: it parses the `dsh --profile web` flag
6
- * family (`--host`, `--port`, `--dev`, `--trusted-host`) and its `--help`
6
+ * family (`--host`, `--port`, `--trusted-host`) and its `--help`
7
7
  * text, then provides the immutable values as {@link WEB_STARTUP_SERVICE}.
8
8
  * Ordinary rows inject that service before reading it from lazy config.
9
9
  * @module @deepseek-ai/dsh-web-app/startup
@@ -19,37 +19,32 @@ const WEB_STARTUP_SERVICE = "webStartup";
19
19
  * @returns a fresh program, so one process can parse more than once (tests).
20
20
  */
21
21
  function webCommand() {
22
- return new Command().name("dsh --profile web").description("Serve the DeepSeek Harness browser UI.").helpOption("-h, --help", "show this help").option("--host <host>", "bind host; pass 0.0.0.0 to reach it from another machine").option("--port <port>", "listen port; pass 0 to let the OS pick a free one").option("--dev", "mount the client-plugin HMR receiver (run pnpm run dev:web separately to rebuild bundles)").option("--trusted-host <authority...>", "extra authority the /api browser-trust fence accepts (host or host:port; repeatable)").addHelpText("after", `
22
+ return new Command().name("dsh --profile web").description("Serve the DeepSeek Harness browser UI.").helpOption("-h, --help", "show this help").option("--host <host>", "bind host; pass 0.0.0.0 to reach it from another machine").option("--port <port>", "listen port; pass 0 to let the OS pick a free one").option("--trusted-host <authority...>", "extra authority the /api browser-trust fence accepts (host or host:port; repeatable)").addHelpText("after", `
23
23
  Examples:
24
24
  dsh --profile web serve on the composed host and port
25
25
  dsh --profile web --port 8080 serve on another port
26
26
  dsh --profile web --host 0.0.0.0 reach it from another machine on the LAN
27
- dsh --profile web --dev mount the client-plugin HMR receiver
28
27
  `);
29
28
  }
30
29
  /**
31
- * Turn the parsed flags into the value injected rows read.
32
- * @param program - the parsed web command.
33
- * @returns this invocation's immutable Web options.
34
- */
35
- function planWebStartup(program) {
36
- const options = program.opts();
37
- if (options.port !== void 0 && !/^\d+$/.test(options.port)) program.error(`error: --port must be a number, got ${JSON.stringify(options.port)}`);
38
- return {
39
- ...options.host !== void 0 && { host: options.host },
40
- ...options.port !== void 0 && { port: Number(options.port) },
41
- mode: options.dev === true ? "development" : "production",
42
- trustedHosts: options.trustedHost ?? []
43
- };
44
- }
45
- /**
46
- * Parse and provide the Web invocation as an ordinary Cordis service.
30
+ * Parse and provide the Web invocation as an ordinary Cordis service. The
31
+ * command's action publishes the flags this invocation named; a non-numeric
32
+ * `--port` is a usage error, so on rejection (and on `--help`) nothing is
33
+ * provided.
47
34
  * @param ctx - plugin context carrying the command line.
48
- * @returns nothing once values are provided, or when the command requested exit.
49
35
  */
50
36
  function apply(ctx) {
51
- const values = parseCmdline(ctx, webCommand(), planWebStartup);
52
- if (values !== void 0) ctx.provide(WEB_STARTUP_SERVICE, values);
37
+ const program = webCommand();
38
+ program.action(() => {
39
+ const options = program.opts();
40
+ if (options.port !== void 0 && !/^\d+$/.test(options.port)) program.error(`error: --port must be a number, got ${JSON.stringify(options.port)}`);
41
+ ctx.provide(WEB_STARTUP_SERVICE, {
42
+ ...options.host !== void 0 && { host: options.host },
43
+ ...options.port !== void 0 && { port: Number(options.port) },
44
+ trustedHosts: options.trustedHost ?? []
45
+ });
46
+ });
47
+ parseCmdline(ctx, program);
53
48
  }
54
49
  //#endregion
55
50
  export { WEB_STARTUP_SERVICE, apply, inject, name };
@@ -5,7 +5,7 @@
5
5
  * the built frontend dist (workspace knowledge of this bundle, never user
6
6
  * config), mounts the `frontend-static` fallback owner over it, registers the
7
7
  * harness-source and web-surface prompt sections, the bash-visible web runtime
8
- * variables, and the URL line. App command-line values arrive through the
8
+ * variable, and the URL line. App command-line values arrive through the
9
9
  * `webStartup` service expressions in the bundle patch.
10
10
  * @module @deepseek-ai/dsh-web-app
11
11
  */
@@ -15,18 +15,14 @@ import z from '@deepseek-ai/schemastery';
15
15
  export declare const name = "web-app";
16
16
  /** Services required before the web runtime can mount. */
17
17
  export declare const inject: string[];
18
- /** Web runtime mode: production, or development when the client-plugin HMR receiver is active. */
19
- export type WebMode = 'production' | 'development';
20
18
  /** Plugin config: composed deployment settings plus per-invocation command-line values. */
21
19
  export interface Config {
22
- /** Whether this process mounted the client-plugin HMR receiver (`dsh web --dev`). */
23
- mode: WebMode;
24
20
  /** Print the URL line on activation; a non-interactive layer can turn it off. */
25
21
  printUrl: boolean;
26
22
  /**
27
23
  * Register the model-visible surface context (the `app:web-surface` prompt
28
- * section and the `DSH_WEB_URL`/`DSH_WEB_MODE` bash variables). A one-shot
29
- * non-interactive layer can turn it off when its user is not in the GUI, so the
24
+ * section and the `DSH_WEB_URL` bash variable). A one-shot non-interactive
25
+ * layer can turn it off when its user is not in the GUI, so the
30
26
  * orientation text would be false.
31
27
  */
32
28
  surfaceContext: boolean;
@@ -57,11 +53,10 @@ export declare const internals: {
57
53
  resolveDistIndex: () => string;
58
54
  };
59
55
  /**
60
- * Mount the Web runtime: dist serving, surface prompt, bash runtime
61
- * variables, and the URL line.
62
- * @param ctx - plugin context carrying the httpServer service.
56
+ * Mount the Web runtime: dist serving, surface prompt, the bash runtime
57
+ * variable, and the URL line.
58
+ * @param ctx - plugin context carrying the webServer service.
63
59
  * @param config - validated {@link Config}.
64
- * @returns nothing once the invocation's client roster and runtime contributions are registered.
65
60
  */
66
- export declare function apply(ctx: Context, config: Config): Promise<void>;
61
+ export declare function apply(ctx: Context, config: Config): void;
67
62
  //# sourceMappingURL=index.d.ts.map
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * The web app's command-line provider: it parses the `dsh --profile web` flag
3
- * family (`--host`, `--port`, `--dev`, `--trusted-host`) and its `--help`
3
+ * family (`--host`, `--port`, `--trusted-host`) and its `--help`
4
4
  * text, then provides the immutable values as {@link WEB_STARTUP_SERVICE}.
5
5
  * Ordinary rows inject that service before reading it from lazy config.
6
6
  * @module @deepseek-ai/dsh-web-app/startup
@@ -18,15 +18,15 @@ export interface WebStartupValues {
18
18
  host?: string;
19
19
  /** `--port`, absent when the invocation did not name one. */
20
20
  port?: number;
21
- /** Web runtime mode; `--dev` selects development, which also mounts the client-plugin reload chain. */
22
- mode: 'production' | 'development';
23
21
  /** Explicit `--trusted-host` authorities, in argument order. */
24
22
  trustedHosts: string[];
25
23
  }
26
24
  /**
27
- * Parse and provide the Web invocation as an ordinary Cordis service.
25
+ * Parse and provide the Web invocation as an ordinary Cordis service. The
26
+ * command's action publishes the flags this invocation named; a non-numeric
27
+ * `--port` is a usage error, so on rejection (and on `--help`) nothing is
28
+ * provided.
28
29
  * @param ctx - plugin context carrying the command line.
29
- * @returns nothing once values are provided, or when the command requested exit.
30
30
  */
31
31
  export declare function apply(ctx: Context): void;
32
32
  //# sourceMappingURL=startup.d.ts.map
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@deepseek-ai/dsh-web-app",
3
3
  "description": "The dsh browser-surface bundle: the web patch layer over dsh-base plus the runtime glue plugin (frontend dist serving, web-surface prompt, bash runtime variables, URL line)",
4
- "version": "0.0.1-rc.1",
4
+ "version": "0.0.1-rc.5",
5
5
  "publishConfig": {
6
6
  "access": "restricted"
7
7
  },
@@ -45,63 +45,77 @@
45
45
  },
46
46
  "dependencies": {
47
47
  "commander": "^15.0.0",
48
- "@deepseek-ai/dsh-app-boot": "^0.0.1-rc.1",
49
- "@deepseek-ai/dsh-client-connection": "^0.0.1-rc.1",
50
- "@deepseek-ai/dsh-agent-presets": "^0.0.1-rc.1",
51
- "@deepseek-ai/dsh-client-hmr": "^0.0.1-rc.1",
52
- "@deepseek-ai/dsh-client-locale": "^0.0.1-rc.1",
53
- "@deepseek-ai/dsh-client-modules": "^0.0.1-rc.1",
54
- "@deepseek-ai/dsh-api-remotes": "^0.0.1-rc.1",
55
- "@deepseek-ai/dsh-client-runtime": "^0.0.1-rc.1",
56
- "@deepseek-ai/dsh-client-ui-agent-preset": "^0.0.1-rc.1",
57
- "@deepseek-ai/dsh-client-ui-command": "^0.0.1-rc.1",
58
- "@deepseek-ai/dsh-client-ui-conversation": "^0.0.1-rc.1",
59
- "@deepseek-ai/dsh-client-ui-deliverables": "^0.0.1-rc.1",
60
- "@deepseek-ai/dsh-client-ui-goal": "^0.0.1-rc.1",
61
- "@deepseek-ai/dsh-client-ui-model": "^0.0.1-rc.1",
62
- "@deepseek-ai/dsh-client-ui-models": "^0.0.1-rc.1",
63
- "@deepseek-ai/dsh-client-ui-layout": "^0.0.1-rc.1",
64
- "@deepseek-ai/dsh-client-ui-permission": "^0.0.1-rc.1",
65
- "@deepseek-ai/dsh-client-ui-plan": "^0.0.1-rc.1",
66
- "@deepseek-ai/dsh-client-ui-question": "^0.0.1-rc.1",
67
- "@deepseek-ai/dsh-client-ui-settings": "^0.0.1-rc.1",
68
- "@deepseek-ai/dsh-client-ui-sidebar": "^0.0.1-rc.1",
69
- "@deepseek-ai/dsh-client-ui-skill": "^0.0.1-rc.1",
70
- "@deepseek-ai/dsh-client-ui-settings-general": "^0.0.1-rc.1",
71
- "@deepseek-ai/dsh-client-ui-subagent": "^0.0.1-rc.1",
72
- "@deepseek-ai/dsh-client-ui-slash": "^0.0.1-rc.1",
73
- "@deepseek-ai/dsh-client-ui-theme": "^0.0.1-rc.1",
74
- "@deepseek-ai/dsh-client-ui-tool": "^0.0.1-rc.1",
75
- "@deepseek-ai/dsh-client-ui-trajectory": "^0.0.1-rc.1",
76
- "@deepseek-ai/dsh-client-ui-workspace": "^0.0.1-rc.1",
77
- "@deepseek-ai/dsh-cmdline": "^0.0.1-rc.1",
78
- "@deepseek-ai/dsh-code-runtime-worker": "^0.0.1-rc.1",
79
- "@deepseek-ai/dsh-frontend": "^0.0.1-rc.1",
80
- "@deepseek-ai/dsh-frontend-static": "^0.0.1-rc.1",
81
- "@deepseek-ai/dsh-host-apiproxy": "^0.0.1-rc.1",
82
- "@deepseek-ai/dsh-host-directory-picker-auto": "^0.0.1-rc.1",
83
- "@deepseek-ai/dsh-host-directory-picker-browse": "^0.0.1-rc.1",
84
- "@deepseek-ai/dsh-host-directory-picker-native": "^0.0.1-rc.1",
85
- "@deepseek-ai/dsh-host-webserver": "^0.0.1-rc.1",
86
- "@deepseek-ai/dsh-session-projection-cache": "^0.0.1-rc.1",
87
- "@deepseek-ai/dsh-storage": "^0.0.1-rc.1",
88
- "@deepseek-ai/dsh-storage-domain": "^0.0.1-rc.1",
89
- "@deepseek-ai/dsh-storage-json": "^0.0.1-rc.1",
90
- "@deepseek-ai/dsh-workspace": "^0.0.1-rc.1",
91
- "@deepseek-ai/schemastery": "^3.18.1-rc.1"
48
+ "@deepseek-ai/dsh-app-boot": "^0.0.1-rc.5",
49
+ "@deepseek-ai/dsh-client-connection": "^0.0.1-rc.5",
50
+ "@deepseek-ai/dsh-client-hmr": "^0.0.1-rc.5",
51
+ "@deepseek-ai/dsh-client-locale": "^0.0.1-rc.5",
52
+ "@deepseek-ai/dsh-agent-presets": "^0.0.1-rc.5",
53
+ "@deepseek-ai/dsh-api-remotes": "^0.0.1-rc.5",
54
+ "@deepseek-ai/dsh-client-modules": "^0.0.1-rc.5",
55
+ "@deepseek-ai/dsh-client-runtime": "^0.0.1-rc.5",
56
+ "@deepseek-ai/dsh-client-ui-agent-preset": "^0.0.1-rc.5",
57
+ "@deepseek-ai/dsh-client-ui-commands": "^0.0.1-rc.5",
58
+ "@deepseek-ai/dsh-client-ui-deliverables": "^0.0.1-rc.5",
59
+ "@deepseek-ai/dsh-client-ui-directory-picker-browse": "^0.0.1-rc.5",
60
+ "@deepseek-ai/dsh-client-ui-directory-picker-native": "^0.0.1-rc.5",
61
+ "@deepseek-ai/dsh-client-ui-conversation": "^0.0.1-rc.5",
62
+ "@deepseek-ai/dsh-client-ui-cordis": "^0.0.1-rc.5",
63
+ "@deepseek-ai/dsh-client-ui-goal": "^0.0.1-rc.5",
64
+ "@deepseek-ai/dsh-client-ui-layout": "^0.0.1-rc.5",
65
+ "@deepseek-ai/dsh-client-ui-model-selection": "^0.0.1-rc.5",
66
+ "@deepseek-ai/dsh-client-ui-settings-models": "^0.0.1-rc.5",
67
+ "@deepseek-ai/dsh-client-ui-settings-plugin-inventory": "^0.0.1-rc.5",
68
+ "@deepseek-ai/dsh-client-ui-permission-presets": "^0.0.1-rc.5",
69
+ "@deepseek-ai/dsh-client-ui-message-feedback": "^0.0.1-rc.5",
70
+ "@deepseek-ai/dsh-client-ui-plan": "^0.0.1-rc.5",
71
+ "@deepseek-ai/dsh-client-ui-settings-plugins": "^0.0.1-rc.5",
72
+ "@deepseek-ai/dsh-client-ui-user-questions": "^0.0.1-rc.5",
73
+ "@deepseek-ai/dsh-client-ui-settings": "^0.0.1-rc.5",
74
+ "@deepseek-ai/dsh-client-ui-settings-general": "^0.0.1-rc.5",
75
+ "@deepseek-ai/dsh-client-ui-sidebar": "^0.0.1-rc.5",
76
+ "@deepseek-ai/dsh-client-ui-skill": "^0.0.1-rc.5",
77
+ "@deepseek-ai/dsh-client-ui-input-trigger": "^0.0.1-rc.5",
78
+ "@deepseek-ai/dsh-client-ui-subagent": "^0.0.1-rc.5",
79
+ "@deepseek-ai/dsh-client-ui-theme": "^0.0.1-rc.5",
80
+ "@deepseek-ai/dsh-client-ui-tool": "^0.0.1-rc.5",
81
+ "@deepseek-ai/dsh-client-ui-workflow-run": "^0.0.1-rc.5",
82
+ "@deepseek-ai/dsh-client-ui-trajectory": "^0.0.1-rc.5",
83
+ "@deepseek-ai/dsh-client-ui-jobs": "^0.0.1-rc.5",
84
+ "@deepseek-ai/dsh-cmdline": "^0.0.1-rc.5",
85
+ "@deepseek-ai/dsh-code-runtime-worker-thread": "^0.0.1-rc.5",
86
+ "@deepseek-ai/dsh-client-ui-workspace": "^0.0.1-rc.5",
87
+ "@deepseek-ai/dsh-cordis-host-runner": "^0.0.1-rc.5",
88
+ "@deepseek-ai/dsh-web-frontend": "^0.0.1-rc.5",
89
+ "@deepseek-ai/dsh-host-frontend-static": "^0.0.1-rc.5",
90
+ "@deepseek-ai/dsh-host-apiproxy": "^0.0.1-rc.5",
91
+ "@deepseek-ai/dsh-cordis-client-runner": "^0.0.1-rc.5",
92
+ "@deepseek-ai/dsh-host-directory-picker-auto": "^0.0.1-rc.5",
93
+ "@deepseek-ai/dsh-host-directory-picker-browse": "^0.0.1-rc.5",
94
+ "@deepseek-ai/dsh-host-directory-picker-native": "^0.0.1-rc.5",
95
+ "@deepseek-ai/dsh-host-plugin-inventory": "^0.0.1-rc.5",
96
+ "@deepseek-ai/dsh-message-feedback": "^0.0.1-rc.5",
97
+ "@deepseek-ai/dsh-session-projection-cache": "^0.0.1-rc.5",
98
+ "@deepseek-ai/dsh-host-webserver": "^0.0.1-rc.5",
99
+ "@deepseek-ai/dsh-session-stats": "^0.0.1-rc.5",
100
+ "@deepseek-ai/dsh-storage-domain": "^0.0.1-rc.5",
101
+ "@deepseek-ai/dsh-session-log-export": "^0.0.1-rc.5",
102
+ "@deepseek-ai/dsh-storage": "^0.0.1-rc.5",
103
+ "@deepseek-ai/dsh-storage-json": "^0.0.1-rc.5",
104
+ "@deepseek-ai/dsh-workspace": "^0.0.1-rc.5",
105
+ "@deepseek-ai/schemastery": "^3.18.1-rc.4"
92
106
  },
93
107
  "peerDependencies": {
94
- "@deepseek-ai/dsh-bash-env": "^0.0.1-rc.1",
95
- "@deepseek-ai/dsh-invariants": "^0.0.1-rc.1",
96
- "@deepseek-ai/dsh-system-prompt": "^0.0.1-rc.1",
97
- "@deepseek-ai/cordis": "^4.0.1-rc.1",
98
- "@deepseek-ai/cordis-plugin-loader": "^1.0.1-rc.1"
108
+ "@deepseek-ai/dsh-shell-env": "^0.0.1-rc.5",
109
+ "@deepseek-ai/dsh-system-prompt": "^0.0.1-rc.5",
110
+ "@deepseek-ai/cordis": "^4.0.1-rc.4",
111
+ "@deepseek-ai/dsh-invariants": "^0.0.1-rc.5",
112
+ "@deepseek-ai/cordis-plugin-loader": "^1.0.2-rc.4"
99
113
  },
100
114
  "devDependencies": {
101
- "@deepseek-ai/cordis-plugin-loader": "^1.0.1-rc.1",
102
- "@deepseek-ai/dsh-bash-env": "^0.0.1-rc.1",
103
- "@deepseek-ai/dsh-invariants": "^0.0.1-rc.1",
104
- "@deepseek-ai/dsh-system-prompt": "^0.0.1-rc.1",
105
- "@deepseek-ai/cordis": "^4.0.1-rc.1"
115
+ "@deepseek-ai/cordis-plugin-loader": "^1.0.2-rc.4",
116
+ "@deepseek-ai/dsh-shell-env": "^0.0.1-rc.5",
117
+ "@deepseek-ai/dsh-invariants": "^0.0.1-rc.5",
118
+ "@deepseek-ai/dsh-system-prompt": "^0.0.1-rc.5",
119
+ "@deepseek-ai/cordis": "^4.0.1-rc.4"
106
120
  }
107
121
  }