@deepseek-ai/dsh-web-app 0.0.1-rc.2 → 0.1.0-rc.2
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/LICENSE +17 -24
- package/README.i18n.yaml +2 -2
- package/README.md +1 -1
- package/README.zh.md +1 -1
- package/cordis.patch.yml +82 -45
- package/lib/index.js +12 -12
- package/lib/startup.js +17 -20
- package/lib/types/index.d.ts +1 -1
- package/lib/types/startup.d.ts +4 -2
- package/package.json +70 -60
package/LICENSE
CHANGED
|
@@ -1,28 +1,21 @@
|
|
|
1
|
-
|
|
1
|
+
MIT License
|
|
2
2
|
|
|
3
|
-
Copyright (c) 2026
|
|
3
|
+
Copyright (c) 2026 DeepSeek
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
7
11
|
|
|
8
|
-
|
|
9
|
-
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
10
14
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
20
|
-
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
21
|
-
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
22
|
-
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
|
23
|
-
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
24
|
-
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
|
25
|
-
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
|
26
|
-
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
|
27
|
-
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
28
|
-
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
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:
|
|
6
|
-
README.zh.md:
|
|
5
|
+
README.md: 90d1566b5a7a25f6a827079c4a8ab776e05cc7a3
|
|
6
|
+
README.zh.md: b7156bcab66b53964bb2f0e1c87d9e9a806e3f75
|
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, 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-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
|
|
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`. It rejects `--host 0.0.0.0` before publishing that service because the CLI intentionally does not support all-interfaces binding yet. Flag-configured rows inject the 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
|
|
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、投影缓存、存储)、浏览器插件名录与始终挂载的客户端插件重载链([`dsh-client-hmr`](../../client/hmr/README.md),在重建 watcher 改写客户端 bundle 之前保持空闲),并挂载本包的 `web-runtime` 粘合插件(配置为 `{printUrl, surfaceContext, trustedHosts}`)。该插件通过 `@deepseek-ai/dsh-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
|
|
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`。它会在发布该服务前拒绝 `--host 0.0.0.0`,因为 CLI 目前有意不支持绑定所有网络接口。由 flag 配置的行会注入该服务,并在惰性配置中直接读取它,因此参数解析完成前不会有任何东西绑定端口,`dsh --profile web --help` 也不会启动服务器。[`dsh-headless`](../headless/README.md) 是同一 base 之上的同级表层,不挂载本组合包。
|
|
6
6
|
|
|
7
7
|
## 模型体验
|
|
8
8
|
|
package/cordis.patch.yml
CHANGED
|
@@ -22,19 +22,20 @@
|
|
|
22
22
|
- id: hmr
|
|
23
23
|
disabled: true
|
|
24
24
|
|
|
25
|
-
#
|
|
26
|
-
#
|
|
27
|
-
#
|
|
28
|
-
#
|
|
25
|
+
# Full-text session search is opt-in (the base row's `openAt: never`). This
|
|
26
|
+
# restatement keeps the Web values on one ephemeral in-memory index; a
|
|
27
|
+
# deployment enabling content search overrides `openAt` to `first-search` in a
|
|
28
|
+
# later patch layer, which defers the node:sqlite import and in-memory handle
|
|
29
|
+
# to the first search so Node 22 startup stays quiet.
|
|
29
30
|
- id: session-query-sqlite
|
|
30
31
|
config:
|
|
31
32
|
path: ':memory:'
|
|
32
|
-
openAt:
|
|
33
|
+
openAt: never
|
|
33
34
|
|
|
34
35
|
- id: tools
|
|
35
36
|
config:
|
|
36
37
|
# TEMPORARY workaround: DSH_TOOLS_MODE (native|code|both) opts a whole dsh
|
|
37
|
-
# process into Code Mode while per-session tool-
|
|
38
|
+
# process into Code Mode while per-session tool-presentation selection is being
|
|
38
39
|
# designed; unset keeps the schema default (native). Remove the env seam
|
|
39
40
|
# once the web UI owns the choice per session.
|
|
40
41
|
mode: !!js process.env.DSH_TOOLS_MODE
|
|
@@ -45,7 +46,7 @@
|
|
|
45
46
|
# window.__DSH_BOOT__; the modules row is simultaneously a host row.
|
|
46
47
|
- insert:
|
|
47
48
|
- id: code-runtime
|
|
48
|
-
name: '@deepseek-ai/dsh-code-runtime-worker'
|
|
49
|
+
name: '@deepseek-ai/dsh-code-runtime-worker-thread'
|
|
49
50
|
|
|
50
51
|
- id: storage
|
|
51
52
|
name: '@deepseek-ai/dsh-storage'
|
|
@@ -65,6 +66,10 @@
|
|
|
65
66
|
config:
|
|
66
67
|
maxNoteBytes: 8192
|
|
67
68
|
|
|
69
|
+
# Browser Session export: `/export` command plus the shared download dialog.
|
|
70
|
+
- id: session-log-download
|
|
71
|
+
name: '@deepseek-ai/dsh-session-log-export'
|
|
72
|
+
|
|
68
73
|
- id: workspace
|
|
69
74
|
name: '@deepseek-ai/dsh-workspace'
|
|
70
75
|
|
|
@@ -74,17 +79,29 @@
|
|
|
74
79
|
writeEveryEvents: 200
|
|
75
80
|
writeIntervalMs: 5000
|
|
76
81
|
|
|
82
|
+
# Whole-log turn/step counts for the chat stats strip (the sessionStats
|
|
83
|
+
# projection key); the projection registry itself is a base-layer row.
|
|
84
|
+
- id: session-stats
|
|
85
|
+
name: '@deepseek-ai/dsh-session-stats'
|
|
86
|
+
|
|
77
87
|
# Resolve bind host, SSH launch, and display once at boot, then mount the
|
|
78
88
|
# matching dual-face directory picker. Mount -native or -browse directly in
|
|
79
89
|
# an overlay to pin the interaction.
|
|
80
90
|
- id: directory-picker
|
|
81
91
|
name: '@deepseek-ai/dsh-host-directory-picker-auto'
|
|
82
92
|
|
|
93
|
+
# Read-only projection of current Loader entries for trusted client RPCs.
|
|
94
|
+
- id: plugin-inventory
|
|
95
|
+
name: '@deepseek-ai/dsh-host-plugin-inventory'
|
|
96
|
+
|
|
83
97
|
# The API gateway: the transport-agnostic dispatch face every client shape
|
|
84
98
|
# shares. The base layer's agent-default-model service owns the default model.
|
|
85
99
|
- id: api-gateway
|
|
86
100
|
name: '@deepseek-ai/dsh-host-apiproxy'
|
|
87
101
|
|
|
102
|
+
- id: cordis-host-runner
|
|
103
|
+
name: '@deepseek-ai/dsh-cordis-host-runner'
|
|
104
|
+
|
|
88
105
|
# Ordinary provider for the parsed Web flags. Its plugin-level injection
|
|
89
106
|
# waits for cmdlineArgs; no launcher metadata or special row kind is needed.
|
|
90
107
|
- id: web-startup
|
|
@@ -151,6 +168,9 @@
|
|
|
151
168
|
- id: client-runtime
|
|
152
169
|
name: '@deepseek-ai/dsh-client-runtime'
|
|
153
170
|
|
|
171
|
+
- id: cordis-client-runner
|
|
172
|
+
name: '@deepseek-ai/dsh-cordis-client-runner'
|
|
173
|
+
|
|
154
174
|
- id: ui-theme
|
|
155
175
|
name: '@deepseek-ai/dsh-client-ui-theme'
|
|
156
176
|
|
|
@@ -169,8 +189,11 @@
|
|
|
169
189
|
- id: ui-settings-general
|
|
170
190
|
name: '@deepseek-ai/dsh-client-ui-settings-general'
|
|
171
191
|
|
|
172
|
-
- id: ui-models
|
|
173
|
-
name: '@deepseek-ai/dsh-client-ui-models'
|
|
192
|
+
- id: ui-settings-models
|
|
193
|
+
name: '@deepseek-ai/dsh-client-ui-settings-models'
|
|
194
|
+
|
|
195
|
+
- id: ui-settings-plugin-inventory
|
|
196
|
+
name: '@deepseek-ai/dsh-client-ui-settings-plugin-inventory'
|
|
174
197
|
|
|
175
198
|
- id: ui-conversation
|
|
176
199
|
name: '@deepseek-ai/dsh-client-ui-conversation'
|
|
@@ -179,6 +202,9 @@
|
|
|
179
202
|
- id: ui-tool
|
|
180
203
|
name: '@deepseek-ai/dsh-client-ui-tool'
|
|
181
204
|
|
|
205
|
+
- id: ui-cordis
|
|
206
|
+
name: '@deepseek-ai/dsh-client-ui-cordis'
|
|
207
|
+
|
|
182
208
|
# Durable workflow lifecycle as an independent Chat node after the
|
|
183
209
|
# existing generic workflow tool row.
|
|
184
210
|
- id: ui-workflow-run
|
|
@@ -193,13 +219,13 @@
|
|
|
193
219
|
- id: ui-workspace
|
|
194
220
|
name: '@deepseek-ai/dsh-client-ui-workspace'
|
|
195
221
|
|
|
196
|
-
# Input triggers: the '/' | '@' pipeline (ui-
|
|
197
|
-
# it (ui-
|
|
198
|
-
- id: ui-
|
|
199
|
-
name: '@deepseek-ai/dsh-client-ui-
|
|
222
|
+
# Input triggers: the '/' | '@' pipeline (ui-input-trigger), the command surface over
|
|
223
|
+
# it (ui-commands), and the two reference sources (ui-skill / ui-subagent).
|
|
224
|
+
- id: ui-input-trigger
|
|
225
|
+
name: '@deepseek-ai/dsh-client-ui-input-trigger'
|
|
200
226
|
|
|
201
|
-
- id: ui-
|
|
202
|
-
name: '@deepseek-ai/dsh-client-ui-
|
|
227
|
+
- id: ui-commands
|
|
228
|
+
name: '@deepseek-ai/dsh-client-ui-commands'
|
|
203
229
|
|
|
204
230
|
- id: ui-skill
|
|
205
231
|
name: '@deepseek-ai/dsh-client-ui-skill'
|
|
@@ -207,20 +233,25 @@
|
|
|
207
233
|
- id: ui-subagent
|
|
208
234
|
name: '@deepseek-ai/dsh-client-ui-subagent'
|
|
209
235
|
|
|
210
|
-
# Background
|
|
211
|
-
- id: ui-
|
|
212
|
-
name: '@deepseek-ai/dsh-client-ui-
|
|
236
|
+
# Background jobs: the session-header list over the jobsBySession mirror.
|
|
237
|
+
- id: ui-jobs
|
|
238
|
+
name: '@deepseek-ai/dsh-client-ui-jobs'
|
|
213
239
|
|
|
214
240
|
# Goal surface: GoalBar in the input dock over the goal session projection.
|
|
215
241
|
- id: ui-goal
|
|
216
242
|
name: '@deepseek-ai/dsh-client-ui-goal'
|
|
217
243
|
|
|
244
|
+
# Per-message feedback: Like/Dislike plus an optional note in the
|
|
245
|
+
# assistant-message action strip, over the messageFeedback Remote.
|
|
246
|
+
- id: ui-message-feedback
|
|
247
|
+
name: '@deepseek-ai/dsh-client-ui-message-feedback'
|
|
248
|
+
|
|
218
249
|
# Model selection: the /model popupSelect + composer seat over session.models.
|
|
219
|
-
- id: ui-model
|
|
220
|
-
name: '@deepseek-ai/dsh-client-ui-model'
|
|
250
|
+
- id: ui-model-selection
|
|
251
|
+
name: '@deepseek-ai/dsh-client-ui-model-selection'
|
|
221
252
|
|
|
222
253
|
- id: ui-permission
|
|
223
|
-
name: '@deepseek-ai/dsh-client-ui-permission'
|
|
254
|
+
name: '@deepseek-ai/dsh-client-ui-permission-presets'
|
|
224
255
|
|
|
225
256
|
# The agent-preset row in General settings: the default preset for
|
|
226
257
|
# sessions created later. Absent a roster it renders nothing.
|
|
@@ -229,15 +260,15 @@
|
|
|
229
260
|
|
|
230
261
|
# Plugin configuration: the host-plane sections a user owns, as expandable
|
|
231
262
|
# cards. A namespace this deployment does not expose renders nothing.
|
|
232
|
-
- id: ui-
|
|
233
|
-
name: '@deepseek-ai/dsh-client-ui-
|
|
263
|
+
- id: ui-settings-plugins
|
|
264
|
+
name: '@deepseek-ai/dsh-client-ui-settings-plugins'
|
|
234
265
|
|
|
235
266
|
# Plan control: the composer plan seat over the plan projection + /plan channel.
|
|
236
267
|
- id: ui-plan
|
|
237
268
|
name: '@deepseek-ai/dsh-client-ui-plan'
|
|
238
269
|
|
|
239
|
-
- id: ui-
|
|
240
|
-
name: '@deepseek-ai/dsh-client-ui-
|
|
270
|
+
- id: ui-user-questions
|
|
271
|
+
name: '@deepseek-ai/dsh-client-ui-user-questions'
|
|
241
272
|
|
|
242
273
|
- id: ui-trajectory
|
|
243
274
|
name: '@deepseek-ai/dsh-client-ui-trajectory'
|
|
@@ -253,7 +284,7 @@
|
|
|
253
284
|
# absent from a surface overlay would silently reappear the day someone reorders
|
|
254
285
|
# the composition.
|
|
255
286
|
|
|
256
|
-
# `
|
|
287
|
+
# `shell-env` STAYS in the host plane: `apps/cli/src/web.ts` injects it to
|
|
257
288
|
# publish `DSH_WEB_URL`/`DSH_WEB_MODE`, and a host row that injects a service is
|
|
258
289
|
# the criterion for host-plane ownership — injection resolves before any session
|
|
259
290
|
# exists, so there is no agent to key by. Behind a preset realm those variables
|
|
@@ -262,17 +293,20 @@
|
|
|
262
293
|
- id: tool-bash
|
|
263
294
|
disabled: true
|
|
264
295
|
|
|
265
|
-
|
|
266
|
-
|
|
296
|
+
- id: tool-pwsh
|
|
297
|
+
disabled: true
|
|
298
|
+
|
|
299
|
+
# The background-job REGISTRY stays on the host plane; only the model-facing
|
|
300
|
+
# `job_*` controls move. Its producers — `tool-bash` here, `tool-terminal` and a
|
|
267
301
|
# non-continuable `tool-subagent` elsewhere — are preset rows that resolve it
|
|
268
302
|
# with `ctx.get`, and an entry-local realm around the registry is invisible to
|
|
269
303
|
# every sibling row outside that realm, so `run_in_background` answered
|
|
270
|
-
# "background
|
|
304
|
+
# "background jobs unavailable" while the controls sat in the catalog. That is
|
|
271
305
|
# the `goals` criterion read from inside the preset: a Service a row outside its
|
|
272
306
|
# realm READS belongs to the plane both can see. The registry is keyed by owning
|
|
273
307
|
# agent, so one host instance serves every session exactly as before presets.
|
|
274
308
|
|
|
275
|
-
- id: tool-
|
|
309
|
+
- id: tool-jobs
|
|
276
310
|
disabled: true
|
|
277
311
|
|
|
278
312
|
- id: tool-fs
|
|
@@ -286,14 +320,14 @@
|
|
|
286
320
|
|
|
287
321
|
# The `skill` REGISTRY stays in the host plane. It is host+per-scope layered
|
|
288
322
|
# (the tools-registry shape): deployment-level providers — repository plugins,
|
|
289
|
-
# a host skill-
|
|
290
|
-
# `skill-
|
|
323
|
+
# a host skill-filesystem row — register into its global layer, while a preset's
|
|
324
|
+
# `skill-filesystem` registers into that preset's layer, and each agent reads the
|
|
291
325
|
# merged catalog its scope chain selects. Only the per-agent rows move behind
|
|
292
|
-
# presets: the base host `skill-
|
|
326
|
+
# presets: the base host `skill-filesystem` row is disabled here (presets own local
|
|
293
327
|
# discovery), and `tool-skill` is what a preset mounts to give its agent the
|
|
294
328
|
# catalog and loader at all.
|
|
295
329
|
|
|
296
|
-
- id: skill-
|
|
330
|
+
- id: skill-filesystem
|
|
297
331
|
disabled: true
|
|
298
332
|
|
|
299
333
|
- id: tool-skill
|
|
@@ -304,7 +338,7 @@
|
|
|
304
338
|
# domain as Remote endpoints, and a Remote method picks its receiver Service
|
|
305
339
|
# from a generated descriptor — it resolves `goals` on the host, so a
|
|
306
340
|
# per-session realm would answer `service-unavailable` for every browser call.
|
|
307
|
-
# That is the `
|
|
341
|
+
# That is the `shell-env` criterion read from the other side: injection is not
|
|
308
342
|
# the only host relationship a Service can have. The registry is keyed by
|
|
309
343
|
# session, so one host instance serves every session exactly as before presets.
|
|
310
344
|
|
|
@@ -321,13 +355,13 @@
|
|
|
321
355
|
# `tasks` and `goals`; the reasoning has one home in
|
|
322
356
|
# `.agents/notes/implemented/architecture/2026-08-10-host-plane-ownership-after-presets.md`.
|
|
323
357
|
|
|
324
|
-
- id:
|
|
358
|
+
- id: compaction-basic
|
|
325
359
|
disabled: true
|
|
326
360
|
|
|
327
361
|
- id: command-compact
|
|
328
362
|
disabled: true
|
|
329
363
|
|
|
330
|
-
- id: tool-result-
|
|
364
|
+
- id: tool-result-pruner
|
|
331
365
|
disabled: true
|
|
332
366
|
|
|
333
367
|
# The subagent registry and its backends STAY in the host plane. `subagents` is
|
|
@@ -355,7 +389,7 @@
|
|
|
355
389
|
# scope-aware — one copy per mounted preset means every child gets `report`
|
|
356
390
|
# registered once per live session, which throws on the second.
|
|
357
391
|
|
|
358
|
-
- id: workflow-
|
|
392
|
+
- id: workflow-worker-thread
|
|
359
393
|
disabled: true
|
|
360
394
|
|
|
361
395
|
- id: tool-workflow
|
|
@@ -364,7 +398,7 @@
|
|
|
364
398
|
- id: tool-ralph
|
|
365
399
|
disabled: true
|
|
366
400
|
|
|
367
|
-
- id:
|
|
401
|
+
- id: agent-instructions
|
|
368
402
|
disabled: true
|
|
369
403
|
|
|
370
404
|
- id: tool-todo
|
|
@@ -374,12 +408,15 @@
|
|
|
374
408
|
disabled: true
|
|
375
409
|
|
|
376
410
|
# The preset roster. `config/agent-presets/` ships with the deployment and is
|
|
377
|
-
# read-only (its entries carry `system` trust);
|
|
378
|
-
#
|
|
379
|
-
#
|
|
380
|
-
#
|
|
381
|
-
#
|
|
382
|
-
#
|
|
411
|
+
# read-only (its entries carry `system` trust); `$DSH_HOME/.agent-presets` is
|
|
412
|
+
# where a person — or an agent — authors their own, and carries the same trust
|
|
413
|
+
# as shell access because a preset IS a composition.
|
|
414
|
+
#
|
|
415
|
+
# Only the SHIPPED root is an assembly fact: it sits beside the installed app's
|
|
416
|
+
# own config, so `apps/cli`'s `composeProfile` resolves and patches it in — the
|
|
417
|
+
# same treatment `distIndex` gets on the webserver row. The writable root is
|
|
418
|
+
# `dsh-agent-presets`' own default (`includeUserRoot`), so a composition that
|
|
419
|
+
# never reaches that patch still finds a person's presets.
|
|
383
420
|
- insert:
|
|
384
421
|
- id: agent-presets
|
|
385
422
|
name: '@deepseek-ai/dsh-agent-presets'
|
package/lib/index.js
CHANGED
|
@@ -3,7 +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 * as FrontendStatic from "@deepseek-ai/dsh-frontend-static";
|
|
6
|
+
import * as FrontendStatic from "@deepseek-ai/dsh-host-frontend-static";
|
|
7
7
|
//#region lib/types/index.js
|
|
8
8
|
/**
|
|
9
9
|
* @deepseek-ai/dsh-web-app — the browser-surface bundle's runtime glue plugin
|
|
@@ -23,7 +23,7 @@ const SOURCE_ROOT = fileURLToPath(new URL("../../../..", import.meta.url));
|
|
|
23
23
|
/** Runtime service that releases Web rows after bind-dependent values resolve. */
|
|
24
24
|
const WEB_RUNTIME_SERVICE = "webRuntime";
|
|
25
25
|
/** Services required before the web runtime can mount. */
|
|
26
|
-
const inject = ["
|
|
26
|
+
const inject = ["webServer"];
|
|
27
27
|
const Config = z.object({
|
|
28
28
|
printUrl: z.boolean().default(true),
|
|
29
29
|
surfaceContext: z.boolean().default(true),
|
|
@@ -53,19 +53,19 @@ function resolveLanTrust(bindHost, extra) {
|
|
|
53
53
|
}
|
|
54
54
|
/** Model-visible orientation and acceptance boundary for sessions created through `dsh web`. */
|
|
55
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
|
|
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.`;
|
|
57
57
|
}
|
|
58
58
|
/** Resolve the canonical loopback URL from the active Web server. */
|
|
59
59
|
function localWebUrl(ctx) {
|
|
60
|
-
const port = ctx.get("
|
|
61
|
-
if (port === void 0) throw new Error("web-app:
|
|
60
|
+
const port = ctx.get("webServer")?.port;
|
|
61
|
+
if (port === void 0) throw new Error("web-app: webServer service missing while resolving Web runtime");
|
|
62
62
|
return `http://${LOOPBACK_HOST}:${String(port)}`;
|
|
63
63
|
}
|
|
64
64
|
/** Dist location is workspace knowledge of this bundle: resolved through the frontend package exports, not configured. */
|
|
65
65
|
function resolveDistIndex() {
|
|
66
66
|
const require = createRequire(import.meta.url);
|
|
67
67
|
try {
|
|
68
|
-
return require.resolve("@deepseek-ai/dsh-frontend/dist/index.html");
|
|
68
|
+
return require.resolve("@deepseek-ai/dsh-web-frontend/dist/index.html");
|
|
69
69
|
} catch {
|
|
70
70
|
/* v8 ignore next 2 -- reachable only on a checkout without a built dist; the test tree builds it */
|
|
71
71
|
throw new Error("web-app: frontend dist not built; run pnpm run build from the repository root first");
|
|
@@ -76,11 +76,11 @@ const internals = { resolveDistIndex };
|
|
|
76
76
|
/**
|
|
77
77
|
* Mount the Web runtime: dist serving, surface prompt, the bash runtime
|
|
78
78
|
* variable, and the URL line.
|
|
79
|
-
* @param ctx - plugin context carrying the
|
|
79
|
+
* @param ctx - plugin context carrying the webServer service.
|
|
80
80
|
* @param config - validated {@link Config}.
|
|
81
81
|
*/
|
|
82
82
|
function apply(ctx, config) {
|
|
83
|
-
const runtime = resolveLanTrust(ctx.
|
|
83
|
+
const runtime = resolveLanTrust(ctx.webServer.host, config.trustedHosts);
|
|
84
84
|
ctx.provide(WEB_RUNTIME_SERVICE, runtime);
|
|
85
85
|
ctx.plugin(FrontendStatic, { distIndex: internals.resolveDistIndex() });
|
|
86
86
|
if (config.surfaceContext) {
|
|
@@ -92,8 +92,8 @@ function apply(ctx, config) {
|
|
|
92
92
|
text: () => webSurfacePrompt(localWebUrl(promptCtx))
|
|
93
93
|
});
|
|
94
94
|
});
|
|
95
|
-
ctx.inject(["
|
|
96
|
-
runtimeCtx.
|
|
95
|
+
ctx.inject(["shellEnv"], (runtimeCtx) => {
|
|
96
|
+
runtimeCtx.shellEnv.register({
|
|
97
97
|
name: "web-runtime",
|
|
98
98
|
variables: { [DSH_WEB_URL]: { description: "Canonical local URL of the DeepSeek Harness Web GUI serving this session." } },
|
|
99
99
|
resolve: () => ({ [DSH_WEB_URL]: localWebUrl(runtimeCtx) })
|
|
@@ -103,13 +103,13 @@ function apply(ctx, config) {
|
|
|
103
103
|
if (config.printUrl) {
|
|
104
104
|
const printUrl = () => {
|
|
105
105
|
const lanCandidate = runtime.lanAddresses[0];
|
|
106
|
-
const port = ctx.
|
|
106
|
+
const port = ctx.webServer.port;
|
|
107
107
|
console.log(`dsh web: ${localWebUrl(ctx)}${lanCandidate === void 0 ? "" : ` (LAN: http://${lanCandidate}:${String(port)})`}`);
|
|
108
108
|
};
|
|
109
109
|
const settled = ctx.get("loader")?.await();
|
|
110
110
|
if (settled === void 0) printUrl();
|
|
111
111
|
else settled.then(() => {
|
|
112
|
-
if (ctx.get("
|
|
112
|
+
if (ctx.get("webServer") !== void 0) printUrl();
|
|
113
113
|
}, () => {});
|
|
114
114
|
}
|
|
115
115
|
}
|
package/lib/startup.js
CHANGED
|
@@ -19,35 +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
|
|
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").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
|
-
dsh --profile web --host 0.0.0.0 reach it from another machine on the LAN
|
|
27
26
|
`);
|
|
28
27
|
}
|
|
29
28
|
/**
|
|
30
|
-
*
|
|
31
|
-
*
|
|
32
|
-
*
|
|
33
|
-
|
|
34
|
-
function planWebStartup(program) {
|
|
35
|
-
const options = program.opts();
|
|
36
|
-
if (options.port !== void 0 && !/^\d+$/.test(options.port)) program.error(`error: --port must be a number, got ${JSON.stringify(options.port)}`);
|
|
37
|
-
return {
|
|
38
|
-
...options.host !== void 0 && { host: options.host },
|
|
39
|
-
...options.port !== void 0 && { port: Number(options.port) },
|
|
40
|
-
trustedHosts: options.trustedHost ?? []
|
|
41
|
-
};
|
|
42
|
-
}
|
|
43
|
-
/**
|
|
44
|
-
* Parse and provide the Web invocation as an ordinary Cordis service.
|
|
29
|
+
* Parse and provide the Web invocation as an ordinary Cordis service. The
|
|
30
|
+
* command's action publishes the flags this invocation named; `--host 0.0.0.0`
|
|
31
|
+
* or a non-numeric `--port` is a usage error, so on rejection (and on `--help`)
|
|
32
|
+
* nothing is provided.
|
|
45
33
|
* @param ctx - plugin context carrying the command line.
|
|
46
|
-
* @returns nothing once values are provided, or when the command requested exit.
|
|
47
34
|
*/
|
|
48
35
|
function apply(ctx) {
|
|
49
|
-
const
|
|
50
|
-
|
|
36
|
+
const program = webCommand();
|
|
37
|
+
program.action(() => {
|
|
38
|
+
const options = program.opts();
|
|
39
|
+
if (options.host === "0.0.0.0") program.error("error: --host 0.0.0.0 is intentionally not supported yet for safety: it would expose remote code execution to the network; use 127.0.0.1 instead");
|
|
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);
|
|
51
48
|
}
|
|
52
49
|
//#endregion
|
|
53
50
|
export { WEB_STARTUP_SERVICE, apply, inject, name };
|
package/lib/types/index.d.ts
CHANGED
|
@@ -55,7 +55,7 @@ export declare const internals: {
|
|
|
55
55
|
/**
|
|
56
56
|
* Mount the Web runtime: dist serving, surface prompt, the bash runtime
|
|
57
57
|
* variable, and the URL line.
|
|
58
|
-
* @param ctx - plugin context carrying the
|
|
58
|
+
* @param ctx - plugin context carrying the webServer service.
|
|
59
59
|
* @param config - validated {@link Config}.
|
|
60
60
|
*/
|
|
61
61
|
export declare function apply(ctx: Context, config: Config): void;
|
package/lib/types/startup.d.ts
CHANGED
|
@@ -22,9 +22,11 @@ export interface WebStartupValues {
|
|
|
22
22
|
trustedHosts: string[];
|
|
23
23
|
}
|
|
24
24
|
/**
|
|
25
|
-
* 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; `--host 0.0.0.0`
|
|
27
|
+
* or a non-numeric `--port` is a usage error, so on rejection (and on `--help`)
|
|
28
|
+
* nothing is provided.
|
|
26
29
|
* @param ctx - plugin context carrying the command line.
|
|
27
|
-
* @returns nothing once values are provided, or when the command requested exit.
|
|
28
30
|
*/
|
|
29
31
|
export declare function apply(ctx: Context): void;
|
|
30
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
|
|
4
|
+
"version": "0.1.0-rc.2",
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"access": "restricted"
|
|
7
7
|
},
|
|
@@ -37,7 +37,7 @@
|
|
|
37
37
|
"cordis.patch.yml",
|
|
38
38
|
"lib/types/**/*.d.ts"
|
|
39
39
|
],
|
|
40
|
-
"license": "
|
|
40
|
+
"license": "MIT",
|
|
41
41
|
"dsh": {
|
|
42
42
|
"bundle": {
|
|
43
43
|
"patch": "./cordis.patch.yml"
|
|
@@ -45,67 +45,77 @@
|
|
|
45
45
|
},
|
|
46
46
|
"dependencies": {
|
|
47
47
|
"commander": "^15.0.0",
|
|
48
|
-
"@deepseek-ai/dsh-
|
|
49
|
-
"@deepseek-ai/dsh-
|
|
50
|
-
"@deepseek-ai/dsh-
|
|
51
|
-
"@deepseek-ai/dsh-client-hmr": "^0.0
|
|
52
|
-
"@deepseek-ai/dsh-client-locale": "^0.0
|
|
53
|
-
"@deepseek-ai/dsh-client-modules": "^0.0
|
|
54
|
-
"@deepseek-ai/dsh-client-runtime": "^0.0
|
|
55
|
-
"@deepseek-ai/dsh-client-ui-agent-preset": "^0.0
|
|
56
|
-
"@deepseek-ai/dsh-client-ui-
|
|
57
|
-
"@deepseek-ai/dsh-client-ui-
|
|
58
|
-
"@deepseek-ai/dsh-client-ui-
|
|
59
|
-
"@deepseek-ai/dsh-client-ui-
|
|
60
|
-
"@deepseek-ai/dsh-client-
|
|
61
|
-
"@deepseek-ai/dsh-client-ui-
|
|
62
|
-
"@deepseek-ai/dsh-client-ui-
|
|
63
|
-
"@deepseek-ai/dsh-client-ui-
|
|
64
|
-
"@deepseek-ai/dsh-
|
|
65
|
-
"@deepseek-ai/dsh-client-ui-
|
|
66
|
-
"@deepseek-ai/dsh-client-ui-plugin-
|
|
67
|
-
"@deepseek-ai/dsh-client-ui-
|
|
68
|
-
"@deepseek-ai/dsh-client-ui-
|
|
69
|
-
"@deepseek-ai/dsh-client-ui-settings-
|
|
70
|
-
"@deepseek-ai/dsh-client-ui-
|
|
71
|
-
"@deepseek-ai/dsh-client-ui-
|
|
72
|
-
"@deepseek-ai/dsh-client-ui-
|
|
73
|
-
"@deepseek-ai/dsh-client-ui-
|
|
74
|
-
"@deepseek-ai/dsh-client-ui-
|
|
75
|
-
"@deepseek-ai/dsh-client-ui-
|
|
76
|
-
"@deepseek-ai/dsh-client-ui-
|
|
77
|
-
"@deepseek-ai/dsh-client-ui-
|
|
78
|
-
"@deepseek-ai/dsh-client-ui-
|
|
79
|
-
"@deepseek-ai/dsh-client-ui-
|
|
80
|
-
"@deepseek-ai/dsh-
|
|
81
|
-
"@deepseek-ai/dsh-
|
|
82
|
-
"@deepseek-ai/dsh-
|
|
83
|
-
"@deepseek-ai/dsh-
|
|
84
|
-
"@deepseek-ai/dsh-
|
|
85
|
-
"@deepseek-ai/dsh-
|
|
86
|
-
"@deepseek-ai/dsh-host-
|
|
87
|
-
"@deepseek-ai/dsh-
|
|
88
|
-
"@deepseek-ai/dsh-
|
|
89
|
-
"@deepseek-ai/dsh-
|
|
90
|
-
"@deepseek-ai/dsh-
|
|
91
|
-
"@deepseek-ai/dsh-
|
|
92
|
-
"@deepseek-ai/dsh-
|
|
93
|
-
"@deepseek-ai/dsh-
|
|
94
|
-
"@deepseek-ai/
|
|
95
|
-
"@deepseek-ai/dsh-
|
|
48
|
+
"@deepseek-ai/dsh-api-remotes": "^0.1.0-rc.2",
|
|
49
|
+
"@deepseek-ai/dsh-app-boot": "^0.1.0-rc.2",
|
|
50
|
+
"@deepseek-ai/dsh-client-connection": "^0.1.0-rc.2",
|
|
51
|
+
"@deepseek-ai/dsh-client-hmr": "^0.1.0-rc.2",
|
|
52
|
+
"@deepseek-ai/dsh-client-locale": "^0.1.0-rc.2",
|
|
53
|
+
"@deepseek-ai/dsh-client-modules": "^0.1.0-rc.2",
|
|
54
|
+
"@deepseek-ai/dsh-client-runtime": "^0.1.0-rc.2",
|
|
55
|
+
"@deepseek-ai/dsh-client-ui-agent-preset": "^0.1.0-rc.2",
|
|
56
|
+
"@deepseek-ai/dsh-client-ui-commands": "^0.1.0-rc.2",
|
|
57
|
+
"@deepseek-ai/dsh-client-ui-cordis": "^0.1.0-rc.2",
|
|
58
|
+
"@deepseek-ai/dsh-client-ui-conversation": "^0.1.0-rc.2",
|
|
59
|
+
"@deepseek-ai/dsh-client-ui-deliverables": "^0.1.0-rc.2",
|
|
60
|
+
"@deepseek-ai/dsh-client-ui-directory-picker-native": "^0.1.0-rc.2",
|
|
61
|
+
"@deepseek-ai/dsh-client-ui-message-feedback": "^0.1.0-rc.2",
|
|
62
|
+
"@deepseek-ai/dsh-client-ui-goal": "^0.1.0-rc.2",
|
|
63
|
+
"@deepseek-ai/dsh-client-ui-layout": "^0.1.0-rc.2",
|
|
64
|
+
"@deepseek-ai/dsh-agent-presets": "^0.1.0-rc.2",
|
|
65
|
+
"@deepseek-ai/dsh-client-ui-settings-models": "^0.1.0-rc.2",
|
|
66
|
+
"@deepseek-ai/dsh-client-ui-settings-plugin-inventory": "^0.1.0-rc.2",
|
|
67
|
+
"@deepseek-ai/dsh-client-ui-permission-presets": "^0.1.0-rc.2",
|
|
68
|
+
"@deepseek-ai/dsh-client-ui-plan": "^0.1.0-rc.2",
|
|
69
|
+
"@deepseek-ai/dsh-client-ui-settings-plugins": "^0.1.0-rc.2",
|
|
70
|
+
"@deepseek-ai/dsh-client-ui-directory-picker-browse": "^0.1.0-rc.2",
|
|
71
|
+
"@deepseek-ai/dsh-client-ui-user-questions": "^0.1.0-rc.2",
|
|
72
|
+
"@deepseek-ai/dsh-client-ui-settings": "^0.1.0-rc.2",
|
|
73
|
+
"@deepseek-ai/dsh-client-ui-settings-general": "^0.1.0-rc.2",
|
|
74
|
+
"@deepseek-ai/dsh-client-ui-sidebar": "^0.1.0-rc.2",
|
|
75
|
+
"@deepseek-ai/dsh-client-ui-skill": "^0.1.0-rc.2",
|
|
76
|
+
"@deepseek-ai/dsh-client-ui-input-trigger": "^0.1.0-rc.2",
|
|
77
|
+
"@deepseek-ai/dsh-client-ui-subagent": "^0.1.0-rc.2",
|
|
78
|
+
"@deepseek-ai/dsh-client-ui-jobs": "^0.1.0-rc.2",
|
|
79
|
+
"@deepseek-ai/dsh-client-ui-theme": "^0.1.0-rc.2",
|
|
80
|
+
"@deepseek-ai/dsh-client-ui-workflow-run": "^0.1.0-rc.2",
|
|
81
|
+
"@deepseek-ai/dsh-client-ui-trajectory": "^0.1.0-rc.2",
|
|
82
|
+
"@deepseek-ai/dsh-client-ui-workspace": "^0.1.0-rc.2",
|
|
83
|
+
"@deepseek-ai/dsh-cmdline": "^0.1.0-rc.2",
|
|
84
|
+
"@deepseek-ai/dsh-code-runtime-worker-thread": "^0.1.0-rc.2",
|
|
85
|
+
"@deepseek-ai/dsh-cordis-client-runner": "^0.1.0-rc.2",
|
|
86
|
+
"@deepseek-ai/dsh-cordis-host-runner": "^0.1.0-rc.2",
|
|
87
|
+
"@deepseek-ai/dsh-client-ui-tool": "^0.1.0-rc.2",
|
|
88
|
+
"@deepseek-ai/dsh-web-frontend": "^0.1.0-rc.2",
|
|
89
|
+
"@deepseek-ai/dsh-host-frontend-static": "^0.1.0-rc.2",
|
|
90
|
+
"@deepseek-ai/dsh-host-apiproxy": "^0.1.0-rc.2",
|
|
91
|
+
"@deepseek-ai/dsh-host-directory-picker-auto": "^0.1.0-rc.2",
|
|
92
|
+
"@deepseek-ai/dsh-host-directory-picker-browse": "^0.1.0-rc.2",
|
|
93
|
+
"@deepseek-ai/dsh-host-directory-picker-native": "^0.1.0-rc.2",
|
|
94
|
+
"@deepseek-ai/dsh-host-plugin-inventory": "^0.1.0-rc.2",
|
|
95
|
+
"@deepseek-ai/dsh-host-webserver": "^0.1.0-rc.2",
|
|
96
|
+
"@deepseek-ai/dsh-message-feedback": "^0.1.0-rc.2",
|
|
97
|
+
"@deepseek-ai/dsh-session-projection-cache": "^0.1.0-rc.2",
|
|
98
|
+
"@deepseek-ai/dsh-session-stats": "^0.1.0-rc.2",
|
|
99
|
+
"@deepseek-ai/dsh-session-log-export": "^0.1.0-rc.2",
|
|
100
|
+
"@deepseek-ai/dsh-storage-domain": "^0.1.0-rc.2",
|
|
101
|
+
"@deepseek-ai/dsh-storage-json": "^0.1.0-rc.2",
|
|
102
|
+
"@deepseek-ai/dsh-workspace": "^0.1.0-rc.2",
|
|
103
|
+
"@deepseek-ai/dsh-client-ui-model-selection": "^0.1.0-rc.2",
|
|
104
|
+
"@deepseek-ai/schemastery": "^3.18.1",
|
|
105
|
+
"@deepseek-ai/dsh-storage": "^0.1.0-rc.2"
|
|
96
106
|
},
|
|
97
107
|
"peerDependencies": {
|
|
98
|
-
"@deepseek-ai/cordis-plugin-loader": "^1.0.
|
|
99
|
-
"@deepseek-ai/dsh-
|
|
100
|
-
"@deepseek-ai/dsh-invariants": "^0.0
|
|
101
|
-
"@deepseek-ai/dsh-system-prompt": "^0.0
|
|
102
|
-
"@deepseek-ai/cordis": "^4.0.1
|
|
108
|
+
"@deepseek-ai/cordis-plugin-loader": "^1.0.2",
|
|
109
|
+
"@deepseek-ai/dsh-shell-env": "^0.1.0-rc.2",
|
|
110
|
+
"@deepseek-ai/dsh-invariants": "^0.1.0-rc.2",
|
|
111
|
+
"@deepseek-ai/dsh-system-prompt": "^0.1.0-rc.2",
|
|
112
|
+
"@deepseek-ai/cordis": "^4.0.1"
|
|
103
113
|
},
|
|
104
114
|
"devDependencies": {
|
|
105
|
-
"@deepseek-ai/cordis-plugin-loader": "^1.0.
|
|
106
|
-
"@deepseek-ai/dsh-
|
|
107
|
-
"@deepseek-ai/
|
|
108
|
-
"@deepseek-ai/
|
|
109
|
-
"@deepseek-ai/dsh-
|
|
115
|
+
"@deepseek-ai/cordis-plugin-loader": "^1.0.2",
|
|
116
|
+
"@deepseek-ai/dsh-invariants": "^0.1.0-rc.2",
|
|
117
|
+
"@deepseek-ai/dsh-system-prompt": "^0.1.0-rc.2",
|
|
118
|
+
"@deepseek-ai/cordis": "^4.0.1",
|
|
119
|
+
"@deepseek-ai/dsh-shell-env": "^0.1.0-rc.2"
|
|
110
120
|
}
|
|
111
121
|
}
|