@deepseek-ai/dsh-web-app 0.2.1-alpha.2 → 0.2.1-alpha.3

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
@@ -21,11 +21,11 @@
21
21
  en: e3cac911f080d8ef
22
22
  zh: 60749e9f5c39c1bc
23
23
  /deepseek-ai-dsh-web-app/use-this-package/configuration:
24
- en: 2b09528c8fc8d370
25
- zh: 7b374ebda8841172
24
+ en: b1787804544f2587
25
+ zh: ce09d2c248ffd999
26
26
  /deepseek-ai-dsh-web-app/use-this-package/listening-trust-and-public-deployments:
27
- en: 177400de33509826
28
- zh: dd88bc096accffc8
27
+ en: e6ddea1d2fc40501
28
+ zh: ff08b6fa3fc24136
29
29
  /deepseek-ai-dsh-web-app/use-this-package/running-over-ssh:
30
30
  en: df205a26b6d49168
31
31
  zh: e46ed7cf9e06248a
@@ -33,38 +33,38 @@
33
33
  en: ccd6fc264b51e44b
34
34
  zh: 3265c68477a89ec9
35
35
  /deepseek-ai-dsh-web-app/understand-the-implementation:
36
- en: 2ea88398028ebff8
37
- zh: 0e589c297aeb9d43
36
+ en: 323742a00cfe67b2
37
+ zh: eff5245a82fc16e7
38
38
  /deepseek-ai-dsh-web-app/understand-the-implementation/patch-semantics:
39
39
  en: 8a2554b3d17daa1f
40
40
  zh: 66f18946791cabb6
41
41
  /deepseek-ai-dsh-web-app/understand-the-implementation/advertised-application-url:
42
- en: ca977d2b2bcf72c5
43
- zh: 2b81b377c133c1a8
42
+ en: 0b22e03e28d41420
43
+ zh: fd45a97dd4336c25
44
44
  /deepseek-ai-dsh-web-app/understand-the-implementation/readiness:
45
45
  en: 973128fd346869df
46
46
  zh: 54e6792f9f82a192
47
47
  /deepseek-ai-dsh-web-app/understand-the-implementation/source-map:
48
- en: d4c7f39a9fd90683
49
- zh: ac2dbf75b2ceb255
48
+ en: 58800b6f2142c34f
49
+ zh: 10bf512b16db1cb8
50
50
  /deepseek-ai-dsh-web-app/further-exploration:
51
51
  en: f81694f7424e2988
52
52
  zh: 6643f9227039e228
53
53
  /deepseek-ai-dsh-web-app/model-experience:
54
54
  en: 215e7ba838619b7b
55
55
  zh: a311da3843709f90
56
- /deepseek-ai-dsh-web-app/model-experience/harness-source-and-web-surface-context:
57
- en: e6febc53efe0f51d
58
- zh: 9177816a8678d65d
59
- /deepseek-ai-dsh-web-app/model-experience/harness-source-and-web-surface-context/what-the-model-sees:
60
- en: 583592075e04687d
61
- zh: 9defddfd77bab0f7
62
- /deepseek-ai-dsh-web-app/model-experience/harness-source-and-web-surface-context/token-effect:
63
- en: 908fc84d6849a830
64
- zh: 56fe5e418bab60ba
65
- /deepseek-ai-dsh-web-app/model-experience/harness-source-and-web-surface-context/kv-cache-effect:
66
- en: 1d7d87f54b20b563
67
- zh: d150a51615d278e8
56
+ /deepseek-ai-dsh-web-app/model-experience/web-runtime-variable:
57
+ en: 623bf8a0bf05599d
58
+ zh: 398ded2e7b20c1ea
59
+ /deepseek-ai-dsh-web-app/model-experience/web-runtime-variable/what-the-model-sees:
60
+ en: ebaddc153ad7a835
61
+ zh: 21aa60f73d14f26c
62
+ /deepseek-ai-dsh-web-app/model-experience/web-runtime-variable/token-effect:
63
+ en: 449fbfa3986f98f0
64
+ zh: a7d66333594ab2dd
65
+ /deepseek-ai-dsh-web-app/model-experience/web-runtime-variable/kv-cache-effect:
66
+ en: 37542a8b81a744f5
67
+ zh: c0048aaadecae296
68
68
  /deepseek-ai-dsh-web-app/known-limitations-and-deferred-work:
69
69
  en: 635c1336e2f4e821
70
70
  zh: caabdecb02e2df14
package/README.md CHANGED
@@ -46,13 +46,15 @@ Saved model selections override the composition default. The settings card accep
46
46
 
47
47
  ### Configuration
48
48
 
49
+ The `minimal` agent preset uses a persistent shell, the `read_image` tool, and a fixed persona, with automatic history compaction and the idle-session `/compact` command. It shares the Host token meter and owns an isolated compaction backend. [Compaction configuration and retention](../../compaction/compaction-basic/README.md#use-this-package) follow the existing backend. Image reads reuse the Host filesystem and attachment store and require an image-capable model; text read, write, and edit tools remain excluded.
50
+
49
51
  `--host` and `--port` configure the listener; `--tls-cert` and `--tls-key` make it serve HTTPS; `--public-url` names the advertised public HTTP(S) root the GUI is reached at behind a prefix-stripping proxy, and `--trusted-host` adds further accepted authorities. All are described under [Listening, trust, and public deployments](#public-deployments), and the `tls` field those flags set is documented with the [carrier's config](../../../docs/subsystems/web-server.md#config):
50
52
 
51
53
  | Field | Default | Meaning |
52
54
  |---|---|---|
53
55
  | `openBrowser` | `true` | Open the default browser after startup; SSH launches suppress it |
54
56
  | `printUrl` | `true` | Print the `dsh web:` URL line at startup |
55
- | `surfaceContext` | `true` | Give the agent GUI-orientation context and expose `DSH_WEB_URL` to its shell commands |
57
+ | `surfaceContext` | `true` | Expose `DSH_WEB_URL` to the agent's shell commands |
56
58
  | `publicUrl` | Unset | Advertised HTTP(S) application root; otherwise announce the bind-address URL |
57
59
 
58
60
  The generated [configuration catalog](../../../docs/config-catalog.md#deepseek-aidsh-web-app) lists this runtime plugin's accepted fields and their JSDoc. The shipped composition inserts the `schedule` service row and the `ui-schedule` task page row, while the clock reading and the four reminder tools belong to the `standard`, `cordis`, and `ptc` presets. The `tool-subagent` and `tool-subagent-fork` rows in those presets deny the four tools, so a delegated child's scope never lists them.
@@ -74,7 +76,7 @@ dsh --profile web --no-open --host "$(hostname -i | awk '{print $1}')" --public-
74
76
 
75
77
  Without `--public-url`, mapped IPv6 loopback binds such as `::ffff:127.0.0.1` advertise their IPv4 form, `127.0.0.1`, so the browser recognizes a local, trustworthy origin. The listener keeps the configured bind address. A dotted-quad IPv6 tail names the address's own low 32 bits, exactly as `listen` reads it, so `::0.0.0.1` is IPv6 loopback and advertises `[::1]`, while `::127.0.0.1` is a non-loopback address, not IPv4 loopback.
76
78
 
77
- `--public-url` advertises the HTTP(S) root browsers use — the printed and opened startup URL, `DSH_WEB_URL`, and the web-surface orientation. Advertisement grants no trust: the browser-visible authority must also be named with `--trusted-host`. The flag configures no listener, routing, or cookie scope, because the proxy owns the external leg: [Publish the Web UI behind a reverse proxy](../../../docs/user/guide/public-deployments.md) lists what such a deployment must provide.
79
+ `--public-url` advertises the HTTP(S) root browsers use — the printed and opened startup URL, `DSH_WEB_URL`, and the Web GUI URL in the agent's runtime context. Advertisement grants no trust: the browser-visible authority must also be named with `--trusted-host`. The flag configures no listener, routing, or cookie scope, because the proxy owns the external leg: [Publish the Web UI behind a reverse proxy](../../../docs/user/guide/public-deployments.md) lists what such a deployment must provide.
78
80
 
79
81
  Neither the advertised URL nor the browser-trust fence protects the port itself, so restrict the port to the trusted proxy or network.
80
82
 
@@ -96,7 +98,7 @@ Each browser session selects a shipped preset (`standard` by default). The Agent
96
98
  <details>
97
99
  <summary>Implementation internals — click to expand</summary>
98
100
 
99
- The bundle is one patch layer of five files plus one runtime glue plugin: `cordis.patch.yml` carries the host rows and the preset registry, and each `presets/<id>.patch.yml` inserts one shipped preset declaration, applied in the order `dsh.bundle.patch` lists them. The storage stack and projection cache come from `dsh-base`; the web overlay's workspace and message-feedback rows consume that shared `storageDomain` service. The patch restates the surface-specific values the base deliberately omits, inserts the web-only host rows and browser roster, then moves the agent plane behind presets. The glue plugin owns dist serving, the advertised application URL, the plain-HTTP exposure warning, prompt sections, the bash variable, and the readiness announcements. The `office-to-pdf` row mounts one lazy [Office conversion provider](../../document/office-to-pdf/README.md) for Host consumers, including Desktop compositions using this bundle. The conversion service's Remote methods authorize preview reads, while Document Preview owns the Office viewer and Client cache.
101
+ The bundle is one patch layer of five files plus one runtime glue plugin: `cordis.patch.yml` carries the host rows and the preset registry, and each `presets/<id>.patch.yml` inserts one shipped preset declaration, applied in the order `dsh.bundle.patch` lists them. The storage stack and projection cache come from `dsh-base`; the web overlay's workspace and message-feedback rows consume that shared `storageDomain` service. The patch restates the surface-specific values the base deliberately omits, inserts the web-only host rows and browser roster, then moves the agent plane behind presets. The glue plugin owns dist serving, the advertised application URL, the plain-HTTP exposure warning, the bash variable, and the readiness announcements. The `office-to-pdf` row mounts one lazy [Office conversion provider](../../document/office-to-pdf/README.md) for Host consumers, including Desktop compositions using this bundle. The conversion service's Remote methods authorize preview reads, while Document Preview owns the Office viewer and Client cache.
100
102
 
101
103
  ### Patch semantics
102
104
 
@@ -104,7 +106,7 @@ A patch replaces the targeted row's whole `config`, so each web row restates eve
104
106
 
105
107
  ### Advertised application URL
106
108
 
107
- Startup display and browser handoff receive the advertised root with its launch token; the web-surface prompt and `DSH_WEB_URL` receive it clean. The root itself is defined under [Listening, trust, and public deployments](#public-deployments).
109
+ Startup display and browser handoff receive the advertised root with its launch token; the agent's runtime context and `DSH_WEB_URL` receive it clean. The root itself is defined under [Listening, trust, and public deployments](#public-deployments).
108
110
 
109
111
  ### Readiness
110
112
 
@@ -114,12 +116,12 @@ The URL line and browser handoff are readiness signals: supervisors RPC as soon
114
116
 
115
117
  | File | Role |
116
118
  |---|---|
117
- | [`src/index.ts`](src/index.ts) | The `web-app` glue plugin: dist resolution, advertised application URL, prompt sections, bash variable, URL line, browser handoff |
119
+ | [`src/index.ts`](src/index.ts) | The `web-app` glue plugin: dist resolution, advertised application URL, bash variable, URL line, browser handoff |
118
120
  | [`src/public-url.ts`](src/public-url.ts) | Advertised-root validation and trailing-slash normalization; a leaf module for local imports, not package API |
119
121
  | [`src/startup.ts`](src/startup.ts) | The `web-startup` provider: `--host`, `--port`, `--tls-cert`, `--tls-key`, `--public-url`, `--trusted-host`, `--no-open`, `--help` |
120
122
  | [`cordis.patch.yml`](cordis.patch.yml) | The web patch: restated base values, web host rows, browser roster, preset registry |
121
123
  | [`presets/`](presets) | One `@deepseek-ai/dsh-agent-preset` declaration per shipped preset (`standard`, `ptc`, `minimal`, `cordis`), each its own patch file |
122
- | [`tests/web-app.spec.ts`](tests/web-app.spec.ts) | Dist index anchoring, advertised-URL publication and warnings, prompt sections, readiness publication |
124
+ | [`tests/web-app.spec.ts`](tests/web-app.spec.ts) | Dist index anchoring, advertised-URL publication and warnings, bash variable, readiness publication |
123
125
  | [`tests/startup.spec.ts`](tests/startup.spec.ts) | Command-line parsing over a real Loader tree |
124
126
  | [`tests/public-url.spec.ts`](tests/public-url.spec.ts) | Advertised-root parsing and normalization |
125
127
  | [`tests/browser-open.spec.ts`](tests/browser-open.spec.ts) | Default-browser handoff after the page is reachable |
@@ -144,19 +146,19 @@ Read these pages when you want to go deeper into the shared core, the browser re
144
146
  <a id="model-experience"></a>
145
147
  ## Model Experience
146
148
 
147
- ### Harness-source and Web-surface context
149
+ ### Web runtime variable
148
150
 
149
151
  #### What the model sees
150
152
 
151
- 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 (first-party order 10100, after reusable instructions) orients the model to the GUI: the advertised application URL (defined under Listening, trust, and public deployments above), 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.
153
+ When `surfaceContext` is true, `DSH_WEB_URL` appears in the managed bash environment with its description, resolved per invocation as the advertised application URL defined under Listening, trust, and public deployments above. When it is false, the variable is not registered. The GUI orientation, the implementation checkout, and the current GUI URL come from the [`dsh-harness-dev-context`](../../context/harness-dev-context/README.md) row this bundle mounts.
152
154
 
153
155
  #### Token effect
154
156
 
155
- One source line and one prompt paragraph per session plus two managed-environment variable lines; constant per process.
157
+ Two managed-environment variable lines; constant per process.
156
158
 
157
159
  #### KV Cache effect
158
160
 
159
- Source and Web sections follow first-party reusable instructions. Different checkout paths or application URLs leave that preceding prefix unchanged when tools and configuration match; provider cache reuse is not guaranteed.
161
+ None; the plugin contributes no system-prompt text.
160
162
 
161
163
  ## Known Limitations and Deferred Work
162
164
 
package/README.zh.md CHANGED
@@ -46,13 +46,15 @@ dsh --profile web --no-open --port 8080
46
46
 
47
47
  ### 配置
48
48
 
49
+ `minimal` agent preset 使用持久 Shell、`read_image` 工具和固定 persona,支持自动历史压缩以及会话空闲时的 `/compact` 命令。它复用 Host token meter,并拥有隔离的压缩后端。[压缩配置与保留策略](../../compaction/compaction-basic/README.zh.md#use-this-package) 沿用现有后端。图片读取复用 Host 文件系统和附件存储,要求模型支持图片输入;不加载文本读取、写入和编辑工具。
50
+
49
51
  `--host` 与 `--port` 配置监听器;`--tls-cert` 与 `--tls-key` 让它直接提供 HTTPS;`--public-url` 指定 GUI 在剥离前缀的代理之后对外公告的公开 HTTP(S) 根,`--trusted-host` 则添加更多被接受的 authority。这些都在[监听、信任与公开部署](#public-deployments)中说明,而这些 flag 设置的 `tls` 字段记录在[载体的配置](../../../docs/subsystems/web-server.zh.md#config)中:
50
52
 
51
53
  | 字段 | 默认值 | 含义 |
52
54
  |---|---|---|
53
55
  | `openBrowser` | `true` | 启动后用默认浏览器打开;SSH 启动会抑制它 |
54
56
  | `printUrl` | `true` | 启动时打印 `dsh web:` URL 行 |
55
- | `surfaceContext` | `true` | 给 agent 提供 GUI 定位上下文,并把 `DSH_WEB_URL` 暴露给其 shell 命令 |
57
+ | `surfaceContext` | `true` | 把 `DSH_WEB_URL` 暴露给 agent 的 shell 命令 |
56
58
  | `publicUrl` | 未设置 | 对外公告的 HTTP(S) 应用根;否则公告绑定地址 URL |
57
59
 
58
60
  生成的[配置目录](../../../docs/config-catalog.zh.md#deepseek-aidsh-web-app)列出了本运行时插件接受的字段及其 JSDoc。随发行版交付的组合插入 `schedule` 服务行与 `ui-schedule` 任务页面行,时钟读数与四个提醒工具则属于 `standard`、`cordis` 与 `ptc` 三个 preset。这三个 preset 的 `tool-subagent` 与 `tool-subagent-fork` 两行都 deny 这四个工具,因此被委派子 agent 的作用域不会列出它们。
@@ -74,7 +76,7 @@ dsh --profile web --no-open --host "$(hostname -i | awk '{print $1}')" --public-
74
76
 
75
77
  未设置 `--public-url` 时,`::ffff:127.0.0.1` 这样的 mapped IPv6 回环绑定会公告其 IPv4 形式 `127.0.0.1`,让浏览器将其识别为本地可信来源。监听器仍使用配置的绑定地址。点分四段式的 IPv6 尾部表示该地址自身的低 32 位,与 `listen` 的读法完全一致:`::0.0.0.1` 属于 IPv6 回环并公告 `[::1]`,而 `::127.0.0.1` 是非回环地址,并非 IPv4 回环。
76
78
 
77
- `--public-url` 公告浏览器使用的 HTTP(S) 根——打印与打开的启动 URL、`DSH_WEB_URL` 与 web 表层定位。公告不授予任何信任:浏览器可见的 authority 还必须用 `--trusted-host` 点名。该 flag 不配置监听器、路由或 cookie 作用域,因为外部链路归代理所有:[在反向代理之后发布 Web UI](../../../docs/user/guide/public-deployments.zh.md)列出了这样的部署必须提供什么。
79
+ `--public-url` 公告浏览器使用的 HTTP(S) 根——打印与打开的启动 URL、`DSH_WEB_URL`,以及 agent 运行时上下文中的 Web GUI URL。公告不授予任何信任:浏览器可见的 authority 还必须用 `--trusted-host` 点名。该 flag 不配置监听器、路由或 cookie 作用域,因为外部链路归代理所有:[在反向代理之后发布 Web UI](../../../docs/user/guide/public-deployments.zh.md)列出了这样的部署必须提供什么。
78
80
 
79
81
  无论是公告 URL 还是浏览器信任栅栏都不保护端口本身,因此请把端口限制在可信代理或网络内。
80
82
 
@@ -96,7 +98,7 @@ dsh --profile web --no-open --host "$(hostname -i | awk '{print $1}')" --public-
96
98
  <details>
97
99
  <summary>实现细节——点击展开</summary>
98
100
 
99
- 此 bundle 由一层五个文件的补丁和一个运行时胶水插件组成:`cordis.patch.yml` 承载宿主行和 preset 注册表,每个 `presets/<id>.patch.yml` 插入一条随发行版交付的 preset 声明,按 `dsh.bundle.patch` 列出的顺序应用。存储栈与投影缓存来自 `dsh-base`;Web 叠加层的工作区和消息反馈条目消费共享的 `storageDomain` 服务。补丁重述 base 有意省略的界面专用值,插入 Web 专用宿主条目和浏览器插件列表,再将 Agent 层移到预设后面。胶水插件负责 dist 服务、公告应用 URL、明文 HTTP 暴露警告、提示词段落、bash 变量和就绪通知。`office-to-pdf` 条目为宿主消费者挂载一个延迟创建引擎的 [Office 转换提供方](../../document/office-to-pdf/README.zh.md),使用此 bundle 的 Desktop 组合也共享该提供方。 转换服务的 Remote 方法负责预览读取授权,Document Preview 负责 Office 查看器和客户端缓存。
101
+ 此 bundle 由一层五个文件的补丁和一个运行时胶水插件组成:`cordis.patch.yml` 承载宿主行和 preset 注册表,每个 `presets/<id>.patch.yml` 插入一条随发行版交付的 preset 声明,按 `dsh.bundle.patch` 列出的顺序应用。存储栈与投影缓存来自 `dsh-base`;Web 叠加层的工作区和消息反馈条目消费共享的 `storageDomain` 服务。补丁重述 base 有意省略的界面专用值,插入 Web 专用宿主条目和浏览器插件列表,再将 Agent 层移到预设后面。胶水插件负责 dist 服务、公告应用 URL、明文 HTTP 暴露警告、bash 变量和就绪通知。`office-to-pdf` 条目为宿主消费者挂载一个延迟创建引擎的 [Office 转换提供方](../../document/office-to-pdf/README.zh.md),使用此 bundle 的 Desktop 组合也共享该提供方。 转换服务的 Remote 方法负责预览读取授权,Document Preview 负责 Office 查看器和客户端缓存。
100
102
 
101
103
  ### patch 语义
102
104
 
@@ -104,7 +106,7 @@ patch 会替换目标行的整个 `config`,因此每个 Web 行都重述自己
104
106
 
105
107
  ### 公告应用 URL
106
108
 
107
- 启动显示与浏览器交接接收附带启动 token 的公告根;web 表层提示词与 `DSH_WEB_URL` 接收不含凭据的形式。根本身由[监听、信任与公开部署](#public-deployments)定义。
109
+ 启动显示与浏览器交接接收附带启动 token 的公告根;agent 的运行时上下文与 `DSH_WEB_URL` 接收不含凭据的形式。根本身由[监听、信任与公开部署](#public-deployments)定义。
108
110
 
109
111
  ### 就绪宣告
110
112
 
@@ -114,12 +116,12 @@ URL 行与浏览器交接都是就绪信号:监督方一观察到该行就发
114
116
 
115
117
  | 文件 | 职责 |
116
118
  |---|---|
117
- | [`src/index.ts`](src/index.ts) | `web-app` 粘合插件:dist 解析、公告应用 URL、提示词段落、bash 变量、URL 行、浏览器交接 |
119
+ | [`src/index.ts`](src/index.ts) | `web-app` 粘合插件:dist 解析、公告应用 URL、bash 变量、URL 行、浏览器交接 |
118
120
  | [`src/public-url.ts`](src/public-url.ts) | 公告根的校验与尾斜杠归一化;供本地导入的叶子模块,不属于包 API |
119
121
  | [`src/startup.ts`](src/startup.ts) | `web-startup` 提供方:`--host`、`--port`、`--tls-cert`、`--tls-key`、`--public-url`、`--trusted-host`、`--no-open`、`--help` |
120
122
  | [`cordis.patch.yml`](cordis.patch.yml) | Web patch:重述的基础值、Web 宿主行、浏览器名录、preset 注册表 |
121
123
  | [`presets/`](presets) | 每个随发行版交付的 preset(`standard`、`ptc`、`minimal`、`cordis`)各一条 `@deepseek-ai/dsh-agent-preset` 声明,各自一个补丁文件 |
122
- | [`tests/web-app.spec.ts`](tests/web-app.spec.ts) | dist index 锚定、公告 URL 发布与警告、提示词段落、就绪宣告发布 |
124
+ | [`tests/web-app.spec.ts`](tests/web-app.spec.ts) | dist index 锚定、公告 URL 发布与警告、bash 变量、就绪宣告发布 |
123
125
  | [`tests/startup.spec.ts`](tests/startup.spec.ts) | 在真实 Loader 树上的命令行解析 |
124
126
  | [`tests/public-url.spec.ts`](tests/public-url.spec.ts) | 公告根的解析与归一化 |
125
127
  | [`tests/browser-open.spec.ts`](tests/browser-open.spec.ts) | 页面可达后的默认浏览器交接 |
@@ -144,19 +146,19 @@ URL 行与浏览器交接都是就绪信号:监督方一观察到该行就发
144
146
  <a id="model-experience"></a>
145
147
  ## 模型体验
146
148
 
147
- ### Harness 源码与 Web 表层上下文
149
+ ### Web 运行时变量
148
150
 
149
151
  #### 模型看到什么
150
152
 
151
- 当 `surfaceContext` 为 true 时,`harness:source` 段落标明磁盘上的 Harness 实现,但不会声称它就是工作目录;全局段落 `app:web-surface`(first-party 顺序 10100,位于可复用指令之后)则向模型说明 GUI:公告应用 URL(定义见上文「监听、信任与公开部署」)、「this page」指代什么、更新约定(重载接收端始终开启;无刷新重载还需要 `pnpm run dev:web` watcher),以及不要启动替代服务器的指令。`DSH_WEB_URL` 还会连同描述出现在受管 bash 环境中,每次调用时从运行中的服务器解析。当它为 false 时,这两个段落和该变量都不会注册。
153
+ 当 `surfaceContext` 为 true 时,`DSH_WEB_URL` 连同描述出现在受管 bash 环境中,每次调用时解析为上文「监听、信任与公开部署」定义的公告应用 URL。为 false 时不注册该变量。GUI 定位、实现 checkout 与当前 GUI URL 由本 bundle 挂载的 [`dsh-harness-dev-context`](../../context/harness-dev-context/README.zh.md) 行提供。
152
154
 
153
155
  #### Token 影响
154
156
 
155
- 每个会话一行源码说明和一段提示词,外加两行受管环境变量;每个进程内保持恒定。
157
+ 两行受管环境变量;每个进程内保持恒定。
156
158
 
157
159
  #### KV Cache 影响
158
160
 
159
- 源码与 Web 段落位于第一方可复用指令之后。工具与配置一致时,不同 checkout 路径或应用 URL 不会改变前置前缀;不保证提供方复用缓存。
161
+ 无;该插件不贡献系统提示词文本。
160
162
 
161
163
  ## 已知限制与延期工作
162
164
 
package/cordis.patch.yml CHANGED
@@ -189,14 +189,11 @@
189
189
 
190
190
  # Web glue owned by this bundle: resolves the built frontend dist (an
191
191
  # assembly fact of dsh-web-app, never user config), mounts the
192
- # frontend-static fallback owner, registers the web-surface prompt
193
- # section and the bash runtime variable, prints the URL line, and opens the
194
- # canonical URL after the full Loader tree settles and the required-
195
- # entry audit passes. Invocation-only values come from the webStartup
196
- # provider; the advertised application URL is this row's `publicUrl`,
197
- # otherwise the bind-address URL. A complete agent-preset persona
198
- # suppresses the prompt section for that agent while retaining the
199
- # host-owned shell variable.
192
+ # frontend-static fallback owner, registers the bash runtime variable,
193
+ # prints the URL line, and opens the canonical URL after the full Loader
194
+ # tree settles and the required-entry audit passes. Invocation-only values
195
+ # come from the webStartup provider; the advertised application URL is
196
+ # this row's `publicUrl`, otherwise the bind-address URL.
200
197
  - id: web-runtime
201
198
  name: '@deepseek-ai/dsh-web-app'
202
199
  inject: [webStartup]
@@ -206,6 +203,14 @@
206
203
  publicUrl: !!js ctx.webStartup.publicUrl
207
204
  surfaceContext: true
208
205
 
206
+ # Model context for an agent that inspects or extends the harness serving
207
+ # this GUI: value-free prompt sections plus the current checkout and GUI
208
+ # URL as optional runtime context. A complete agent-preset persona replaces
209
+ # the sections, and a persona that suppresses optional runtime context
210
+ # also drops the two value lines.
211
+ - id: harness-dev-context
212
+ name: '@deepseek-ai/dsh-harness-dev-context'
213
+
209
214
  # The client-plugin reload chain, always mounted: it is idle until a
210
215
  # rebuild watcher (pnpm run dev:web) actually rewrites client bundles. It
211
216
  # is a row rather than a child of web-runtime because its node half is a
@@ -378,6 +383,10 @@
378
383
  - id: ui-reference
379
384
  name: '@deepseek-ai/dsh-client-ui-reference'
380
385
 
386
+ # Display masking for recognized credentials in sent user text; remove
387
+ # this entry to draw credentials as written.
388
+ - id: ui-secret-mask
389
+ name: '@deepseek-ai/dsh-client-ui-secret-mask'
381
390
 
382
391
  # Background jobs: the session-header roster with on-demand streaming
383
392
  # record panels over the session job-output service.
package/lib/index.js CHANGED
@@ -1,13 +1,11 @@
1
1
  import { t as parsePublicUrl } from "./public-url-D_dMK-yI.js";
2
2
  import { createRequire } from "node:module";
3
3
  import { spawn } from "node:child_process";
4
- import { isIP } from "node:net";
5
4
  import { dirname, join } from "node:path";
6
- import { fileURLToPath } from "node:url";
7
5
  import z from "@deepseek-ai/schemastery";
8
- import { addHarnessSourceSection, auditStartupEntries } from "@deepseek-ai/dsh-app-boot";
6
+ import { auditStartupEntries } from "@deepseek-ai/dsh-app-boot";
9
7
  import * as FrontendStatic from "@deepseek-ai/dsh-host-frontend-static";
10
- import { isLoopbackHost, normalizeBindAddress } from "@deepseek-ai/dsh-host-webserver";
8
+ import { bindUrlHost, isLoopbackHost } from "@deepseek-ai/dsh-host-webserver";
11
9
  import { launchEnvironmentOf, launchedThroughSsh } from "@deepseek-ai/dsh-launch-environment";
12
10
  import { scrubbedParentEnv } from "@deepseek-ai/dsh-subprocess";
13
11
  //#region lib/types/index.js
@@ -17,17 +15,15 @@ import { scrubbedParentEnv } from "@deepseek-ai/dsh-subprocess";
17
15
  * manifest field). The plugin owns the browser-surface glue: it resolves
18
16
  * the built frontend dist (workspace knowledge of this bundle, never user
19
17
  * config), mounts the `frontend-static` fallback owner over it, registers the
20
- * harness-source and web-surface prompt sections, the bash-visible web runtime
21
- * variable, the process-token URL line, and the default-browser handoff. An
22
- * advertised `publicUrl` replaces the published bind-address URL. Non-loopback
18
+ * bash-visible web runtime variable, the process-token URL line, and the
19
+ * default-browser handoff, and provides the `webApp` service. An advertised
20
+ * `publicUrl` replaces the published bind-address URL. Non-loopback
23
21
  * HTTP binds trigger an exposure warning. App command-line values arrive
24
22
  * through the `webStartup` service expressions in the bundle patch.
25
23
  * @module @deepseek-ai/dsh-web-app
26
24
  */
27
25
  /** Stable Cordis plugin name. */
28
26
  const name = "web-app";
29
- /** This dsh installation's root, from either this package's source or built entry. */
30
- const SOURCE_ROOT = fileURLToPath(new URL("../../../..", import.meta.url));
31
27
  const ANNOUNCED_ROOTS = /* @__PURE__ */ new WeakSet();
32
28
  /** Services required before the web runtime can mount. */
33
29
  const inject = ["webServer"];
@@ -69,47 +65,6 @@ try {
69
65
  }
70
66
  `;
71
67
  /**
72
- * Local root URL of the active Web server, using the browser-compatible form
73
- * of its bind address and brackets for IPv6 literals. Non-loopback binds such
74
- * as a container's Pod address advertise that address.
75
- * @throws when the runtime resolves without a bound webServer, or when the bind
76
- * address has no URL form (see {@link advertisedBindHost}).
77
- */
78
- function localWebUrl(ctx) {
79
- const webServer = ctx.get("webServer");
80
- const port = webServer?.port;
81
- if (webServer === void 0 || port === void 0) throw new Error("web-app: webServer service missing while resolving Web runtime");
82
- const host = advertisedBindHost(webServer.host);
83
- return `${webServer.protocol}//${isIP(host) === 6 ? `[${host}]` : host}:${String(port)}`;
84
- }
85
- /**
86
- * Bind address in a URL. Loopback addresses use their canonical address text,
87
- * so browsers treat them as local, trustworthy origins: a genuinely mapped
88
- * literal such as `::ffff:127.0.0.1` reads as `127.0.0.1`, and a dotted-quad
89
- * tail reads as the address it names, so `::0.0.0.1` reads as `::1` rather
90
- * than as `0.0.0.1`. Interface zone IDs cannot appear in a URL; only a
91
- * redundant loopback zone can be dropped.
92
- * @param host - webserver bind address.
93
- * @returns the zone-free URL host.
94
- * @throws when a non-loopback zone requires an explicit public URL.
95
- */
96
- function advertisedBindHost(host) {
97
- const zoneAt = host.indexOf("%");
98
- const bare = zoneAt === -1 ? host : host.slice(0, zoneAt);
99
- if (isLoopbackHost(bare)) return normalizeBindAddress(bare);
100
- if (zoneAt === -1) return host;
101
- throw new Error(`web-app: bind address ${JSON.stringify(host)} carries an interface zone id, which no URL can express; pass --public-url with the root browsers actually reach it through`);
102
- }
103
- /** Resolve the advertised root: this plugin's canonical `publicUrl`, or the bind-address URL (loopback when bound to loopback). */
104
- function appRootUrl(ctx, publicUrl) {
105
- if (publicUrl !== void 0) return publicUrl;
106
- return localWebUrl(ctx);
107
- }
108
- /** Model-visible orientation and acceptance boundary for sessions created through `dsh web`. */
109
- function webSurfacePrompt(webUrl) {
110
- 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.`;
111
- }
112
- /**
113
68
  * Dist location is workspace knowledge of this bundle: anchored on the
114
69
  * frontend package manifest, not configured. Existence is a request-time
115
70
  * concern — the fallback owner reads files per request, so a composition
@@ -176,39 +131,32 @@ const internals = {
176
131
  openBrowser
177
132
  };
178
133
  /**
179
- * Mount the Web runtime: dist serving, surface prompt, the bash runtime
180
- * variable, the URL line, and the default-browser handoff.
134
+ * Mount the Web runtime: dist serving, the bash runtime variable, the URL
135
+ * line, and the default-browser handoff.
181
136
  * @param ctx - plugin context carrying the webServer service.
182
137
  * @param config - validated {@link Config}.
183
138
  */
184
139
  function apply(ctx, config) {
185
140
  const publicUrl = config.publicUrl ?? void 0;
186
141
  const boundHost = ctx.webServer.host;
187
- if (publicUrl === void 0) advertisedBindHost(boundHost);
142
+ if (publicUrl === void 0 && bindUrlHost(boundHost) === void 0) throw new Error(`web-app: bind address ${JSON.stringify(boundHost)} carries an interface zone id, which no URL can express; pass --public-url with the root browsers actually reach it through`);
188
143
  if (ctx.webServer.protocol === "http:" && !isLoopbackHost(boundHost)) console.warn(`dsh web: listening on ${boundHost} over plain HTTP; restrict this port to a trusted proxy or network`);
189
144
  const handoffBrowser = config.openBrowser && !launchedThroughSsh(launchEnvironmentOf(ctx));
145
+ /** The advertised root: the canonical `publicUrl`, or the listener's own origin. */
146
+ const appRootUrl = () => publicUrl ?? ctx.webServer.getOrigin();
147
+ ctx.provide("webApp", { getAdvertisedUrl: appRootUrl });
190
148
  ctx.plugin(FrontendStatic, { distIndex: internals.resolveDistIndex() });
191
- if (config.surfaceContext) {
192
- ctx.inject(["systemPrompt"], (promptCtx) => {
193
- addHarnessSourceSection(promptCtx, SOURCE_ROOT);
194
- promptCtx.systemPrompt.section({
195
- name: "app:web-surface",
196
- order: promptCtx.systemPrompt.getSectionOrder("WEB_SURFACE"),
197
- text: () => webSurfacePrompt(appRootUrl(promptCtx, publicUrl))
198
- });
199
- });
200
- ctx.inject(["shellEnv"], (runtimeCtx) => {
201
- runtimeCtx.shellEnv.register({
202
- name: "web-runtime",
203
- variables: { [DSH_WEB_URL]: { description: "Advertised URL of the DeepSeek Harness Web GUI serving this session." } },
204
- resolve: () => ({ [DSH_WEB_URL]: appRootUrl(runtimeCtx, publicUrl) })
205
- });
149
+ if (config.surfaceContext) ctx.inject(["shellEnv"], (runtimeCtx) => {
150
+ runtimeCtx.shellEnv.register({
151
+ name: "web-runtime",
152
+ variables: { [DSH_WEB_URL]: { description: "Advertised URL of the DeepSeek Harness Web GUI serving this session." } },
153
+ resolve: () => ({ [DSH_WEB_URL]: appRootUrl() })
206
154
  });
207
- }
155
+ });
208
156
  if (config.printUrl || handoffBrowser) ctx.inject(["connection"], (connectionCtx) => {
209
157
  const announceReady = () => {
210
158
  if (ANNOUNCED_ROOTS.has(connectionCtx.root)) return;
211
- const webUrl = appRootUrl(connectionCtx, publicUrl);
159
+ const webUrl = appRootUrl();
212
160
  const authenticatedUrl = connectionCtx.connection.authenticatedUrl(webUrl);
213
161
  ANNOUNCED_ROOTS.add(connectionCtx.root);
214
162
  if (config.printUrl) console.log(`dsh web: ${authenticatedUrl}`);
package/lib/startup.js CHANGED
@@ -22,7 +22,7 @@ const WEB_STARTUP_SERVICE = "webStartup";
22
22
  * @returns a fresh program, so one process can parse more than once (tests).
23
23
  */
24
24
  function webCommand() {
25
- return new Command().name("dsh --profile web").description("Serve the DeepSeek Harness browser UI.").helpOption("-h, --help", "show this help").option("--host <host>", "bind address: one concrete IPv4 or IPv6 literal of a local interface; wildcard addresses are rejected").option("--no-open", "do not open the Web UI in the default browser").option("--port <port>", "listen port; pass 0 to let the OS pick a free one").option("--public-url <url>", "advertise this HTTP(S) root in the printed, opened, web-surface, and DSH_WEB_URL forms; grants no trust").option("--trusted-host <authority...>", "extra authority the /api browser-trust fence accepts (host or host:port; repeatable)").option("--tls-cert <file>", "PEM server certificate chain; requires --tls-key").option("--tls-key <file>", "unencrypted PEM private key; requires --tls-cert").addHelpText("after", `
25
+ return new Command().name("dsh --profile web").description("Serve the DeepSeek Harness browser UI.").helpOption("-h, --help", "show this help").option("--host <host>", "bind address: one concrete IPv4 or IPv6 literal of a local interface; wildcard addresses are rejected").option("--no-open", "do not open the Web UI in the default browser").option("--port <port>", "listen port; pass 0 to let the OS pick a free one").option("--public-url <url>", "advertise this HTTP(S) root in the printed, opened, runtime-context, and DSH_WEB_URL forms; grants no trust").option("--trusted-host <authority...>", "extra authority the /api browser-trust fence accepts (host or host:port; repeatable)").option("--tls-cert <file>", "PEM server certificate chain; requires --tls-key").option("--tls-key <file>", "unencrypted PEM private key; requires --tls-cert").addHelpText("after", `
26
26
  Examples:
27
27
  dsh --profile web serve on the composed host and port
28
28
  dsh --profile web --no-open serve without opening a browser
@@ -4,15 +4,29 @@
4
4
  * manifest field). The plugin owns the browser-surface glue: it resolves
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
- * harness-source and web-surface prompt sections, the bash-visible web runtime
8
- * variable, the process-token URL line, and the default-browser handoff. An
9
- * advertised `publicUrl` replaces the published bind-address URL. Non-loopback
7
+ * bash-visible web runtime variable, the process-token URL line, and the
8
+ * default-browser handoff, and provides the `webApp` service. An advertised
9
+ * `publicUrl` replaces the published bind-address URL. Non-loopback
10
10
  * HTTP binds trigger an exposure warning. App command-line values arrive
11
11
  * through the `webStartup` service expressions in the bundle patch.
12
12
  * @module @deepseek-ai/dsh-web-app
13
13
  */
14
14
  import type { Context } from '@deepseek-ai/cordis';
15
15
  import z from '@deepseek-ai/schemastery';
16
+ /** The Web GUI this process serves, provided by the `web-runtime` row. */
17
+ export interface WebApp {
18
+ /**
19
+ * The URL this GUI advertises, also used for `DSH_WEB_URL` and the startup URL line.
20
+ * @returns the configured `publicUrl`, otherwise the listener origin.
21
+ */
22
+ getAdvertisedUrl(): string;
23
+ }
24
+ declare module '@deepseek-ai/cordis' {
25
+ interface Context {
26
+ /** The Web GUI this process serves; absent when no Web runtime is mounted. */
27
+ webApp: WebApp;
28
+ }
29
+ }
16
30
  /** Stable Cordis plugin name. */
17
31
  export declare const name = "web-app";
18
32
  /** Services required before the web runtime can mount. */
@@ -24,16 +38,14 @@ export interface Config {
24
38
  /** Print the URL line on activation; a non-interactive layer can turn it off. */
25
39
  printUrl: boolean;
26
40
  /**
27
- * Register the model-visible surface context (the `app:web-surface` prompt
28
- * section and the `DSH_WEB_URL` bash variable). A one-shot non-interactive
29
- * layer can turn it off when its user is not in the GUI, so the
30
- * orientation text would be false.
41
+ * Register the `DSH_WEB_URL` bash variable naming this GUI. A one-shot
42
+ * non-interactive layer can turn it off when its user is not in the GUI.
31
43
  */
32
44
  surfaceContext: boolean;
33
45
  /**
34
46
  * Canonical HTTP(S) root to advertise in the printed and opened URL,
35
- * `DSH_WEB_URL`, and the web-surface orientation, e.g.
36
- * `https://app.example/ui/`, normalized to end in `/`. Configures no routing
47
+ * `DSH_WEB_URL`, and `webApp.getAdvertisedUrl()`, which supplies the Web GUI
48
+ * URL in agent runtime context, e.g. `https://app.example/ui/`, normalized to end in `/`. Configures no routing
37
49
  * or authentication; see [public deployments](../README.md#public-deployments).
38
50
  * Absent or YAML `null` advertises the bind-address URL.
39
51
  */
@@ -46,8 +58,8 @@ export declare const internals: {
46
58
  openBrowser: (url: string) => Promise<void>;
47
59
  };
48
60
  /**
49
- * Mount the Web runtime: dist serving, surface prompt, the bash runtime
50
- * variable, the URL line, and the default-browser handoff.
61
+ * Mount the Web runtime: dist serving, the bash runtime variable, the URL
62
+ * line, and the default-browser handoff.
51
63
  * @param ctx - plugin context carrying the webServer service.
52
64
  * @param config - validated {@link Config}.
53
65
  */
package/locale/en.json ADDED
@@ -0,0 +1,5 @@
1
+ {
2
+ "meta": {
3
+ "title": "web-app"
4
+ }
5
+ }
@@ -0,0 +1,5 @@
1
+ {
2
+ "meta": {
3
+ "title": "web-app/startup"
4
+ }
5
+ }
@@ -0,0 +1,5 @@
1
+ {
2
+ "meta": {
3
+ "title": "Web 启动配置"
4
+ }
5
+ }
package/locale/zh.json ADDED
@@ -0,0 +1,6 @@
1
+ {
2
+ "meta": {
3
+ "title": "Web 应用运行支持",
4
+ "description": "提供前端页面资源,并连接 Web 应用所需的运行配置。"
5
+ }
6
+ }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@deepseek-ai/dsh-web-app",
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.2.1-alpha.2",
3
+ "description": "The dsh browser-surface bundle: the web patch layer over dsh-base plus the runtime glue plugin (frontend dist serving, bash runtime variables, URL line)",
4
+ "version": "0.2.1-alpha.3",
5
5
  "publishConfig": {
6
6
  "access": "public"
7
7
  },
@@ -25,9 +25,13 @@
25
25
  "./cordis.patch.yml": "./cordis.patch.yml",
26
26
  "./presets/*.patch.yml": "./presets/*.patch.yml",
27
27
  "./src/*": "./src/*",
28
- "./package.json": "./package.json"
28
+ "./package.json": "./package.json",
29
+ "./startup/locale/*.json": "./locale/startup/*.json",
30
+ "./locale/*.json": "./locale/*.json"
29
31
  },
30
32
  "files": [
33
+ "locale/*.json",
34
+ "locale/startup/*.json",
31
35
  "lib/index.js",
32
36
  "lib/startup.js",
33
37
  "cordis.patch.yml",
@@ -51,156 +55,156 @@
51
55
  }
52
56
  },
53
57
  "dependencies": {
54
- "@deepseek-ai/dsh-agent-instructions": "0.2.1-alpha.2",
55
- "@deepseek-ai/dsh-agent-preset": "0.2.1-alpha.2",
56
- "@deepseek-ai/dsh-agent-preset-registry": "0.2.1-alpha.2",
57
- "@deepseek-ai/dsh-agent-tool-presentation": "0.2.1-alpha.2",
58
- "@deepseek-ai/dsh-api-job-controller": "0.2.1-alpha.2",
59
- "@deepseek-ai/dsh-api-remotes": "0.2.1-alpha.2",
60
- "@deepseek-ai/dsh-api-session-controller": "0.2.1-alpha.2",
61
- "@deepseek-ai/dsh-api-settings-controller": "0.2.1-alpha.2",
62
- "@deepseek-ai/dsh-api-terminal-controller": "0.2.1-alpha.2",
63
- "@deepseek-ai/dsh-api-workspace-controller": "0.2.1-alpha.2",
64
- "@deepseek-ai/dsh-api-workspace-files": "0.2.1-alpha.2",
65
- "@deepseek-ai/dsh-app-boot": "0.2.1-alpha.2",
66
- "@deepseek-ai/dsh-client-connection": "0.2.1-alpha.2",
67
- "@deepseek-ai/dsh-client-file-upload": "0.2.1-alpha.2",
68
- "@deepseek-ai/dsh-client-hmr": "0.2.1-alpha.2",
69
- "@deepseek-ai/dsh-client-locale": "0.2.1-alpha.2",
70
- "@deepseek-ai/dsh-client-modules": "0.2.1-alpha.2",
71
- "@deepseek-ai/dsh-client-resources": "0.2.1-alpha.2",
72
- "@deepseek-ai/dsh-client-ui-agent-preset": "0.2.1-alpha.2",
73
- "@deepseek-ai/dsh-client-ui-approval": "0.2.1-alpha.2",
74
- "@deepseek-ai/dsh-client-ui-attachment": "0.2.1-alpha.2",
75
- "@deepseek-ai/dsh-client-ui-brand-official": "0.2.1-alpha.2",
76
- "@deepseek-ai/dsh-client-ui-chat": "0.2.1-alpha.2",
77
- "@deepseek-ai/dsh-client-ui-commands": "0.2.1-alpha.2",
78
- "@deepseek-ai/dsh-client-ui-conversation": "0.2.1-alpha.2",
79
- "@deepseek-ai/dsh-client-ui-cordis": "0.2.1-alpha.2",
80
- "@deepseek-ai/dsh-client-ui-deliverables": "0.2.1-alpha.2",
81
- "@deepseek-ai/dsh-client-ui-directory-picker-browse": "0.2.1-alpha.2",
82
- "@deepseek-ai/dsh-client-ui-directory-picker-native": "0.2.1-alpha.2",
83
- "@deepseek-ai/dsh-client-ui-goal": "0.2.1-alpha.2",
84
- "@deepseek-ai/dsh-client-ui-input-trigger": "0.2.1-alpha.2",
85
- "@deepseek-ai/dsh-client-ui-jobs": "0.2.1-alpha.2",
86
- "@deepseek-ai/dsh-client-ui-layout": "0.2.1-alpha.2",
87
- "@deepseek-ai/dsh-client-ui-message-feedback": "0.2.1-alpha.2",
88
- "@deepseek-ai/dsh-client-ui-model-selection": "0.2.1-alpha.2",
89
- "@deepseek-ai/dsh-client-ui-open-in-app": "0.2.1-alpha.2",
90
- "@deepseek-ai/dsh-client-ui-permission-presets": "0.2.1-alpha.2",
91
- "@deepseek-ai/dsh-client-ui-plan": "0.2.1-alpha.2",
92
- "@deepseek-ai/dsh-client-ui-plugin-manager": "0.2.1-alpha.2",
93
- "@deepseek-ai/dsh-client-ui-reference": "0.2.1-alpha.2",
94
- "@deepseek-ai/dsh-client-ui-renderer": "0.2.1-alpha.2",
95
- "@deepseek-ai/dsh-client-ui-session": "0.2.1-alpha.2",
96
- "@deepseek-ai/dsh-client-ui-schedule": "0.2.1-alpha.2",
97
- "@deepseek-ai/dsh-client-ui-settings": "0.2.1-alpha.2",
98
- "@deepseek-ai/dsh-client-ui-settings-general": "0.2.1-alpha.2",
99
- "@deepseek-ai/dsh-client-ui-settings-models": "0.2.1-alpha.2",
100
- "@deepseek-ai/dsh-client-ui-settings-plugin-inventory": "0.2.1-alpha.2",
101
- "@deepseek-ai/dsh-client-ui-settings-plugins": "0.2.1-alpha.2",
102
- "@deepseek-ai/dsh-client-ui-settings-shell": "0.2.1-alpha.2",
103
- "@deepseek-ai/dsh-client-ui-settings-agent-loop": "0.2.1-alpha.2",
104
- "@deepseek-ai/dsh-client-ui-settings-subagent": "0.2.1-alpha.2",
105
- "@deepseek-ai/dsh-client-ui-settings-web-search": "0.2.1-alpha.2",
106
- "@deepseek-ai/dsh-client-ui-sidebar": "0.2.1-alpha.2",
107
- "@deepseek-ai/dsh-client-ui-sidebar-browser": "0.2.1-alpha.2",
108
- "@deepseek-ai/dsh-client-ui-sidebar-documentpreview": "0.2.1-alpha.2",
109
- "@deepseek-ai/dsh-client-ui-sidebar-files": "0.2.1-alpha.2",
110
- "@deepseek-ai/dsh-client-ui-sidebar-right": "0.2.1-alpha.2",
111
- "@deepseek-ai/dsh-client-ui-sidebar-terminal": "0.2.1-alpha.2",
112
- "@deepseek-ai/dsh-client-ui-skill": "0.2.1-alpha.2",
113
- "@deepseek-ai/dsh-client-ui-subagent": "0.2.1-alpha.2",
114
- "@deepseek-ai/dsh-client-ui-theme": "0.2.1-alpha.2",
115
- "@deepseek-ai/dsh-client-ui-tool": "0.2.1-alpha.2",
116
- "@deepseek-ai/dsh-client-ui-trajectory": "0.2.1-alpha.2",
117
- "@deepseek-ai/dsh-client-ui-user-questions": "0.2.1-alpha.2",
118
- "@deepseek-ai/dsh-client-ui-workflow-run": "0.2.1-alpha.2",
119
- "@deepseek-ai/dsh-client-ui-workspace": "0.2.1-alpha.2",
120
- "@deepseek-ai/dsh-cmdline": "0.2.1-alpha.2",
121
- "@deepseek-ai/dsh-command-compact": "0.2.1-alpha.2",
122
- "@deepseek-ai/dsh-command-goal": "0.2.1-alpha.2",
123
- "@deepseek-ai/dsh-compaction-basic": "0.2.1-alpha.2",
124
- "@deepseek-ai/dsh-compaction-tool-result-pruner": "0.2.1-alpha.2",
125
- "@deepseek-ai/dsh-cordis-client-runner": "0.2.1-alpha.2",
126
- "@deepseek-ai/dsh-cordis-host-runner": "0.2.1-alpha.2",
127
- "@deepseek-ai/dsh-file-reference": "0.2.1-alpha.2",
128
- "@deepseek-ai/dsh-file-reference-local": "0.2.1-alpha.2",
129
- "@deepseek-ai/dsh-host-directory-picker-auto": "0.2.1-alpha.2",
130
- "@deepseek-ai/dsh-host-directory-picker-browse": "0.2.1-alpha.2",
131
- "@deepseek-ai/dsh-host-directory-picker-native": "0.2.1-alpha.2",
132
- "@deepseek-ai/dsh-host-frontend-static": "0.2.1-alpha.2",
133
- "@deepseek-ai/dsh-host-open-in-app": "0.2.1-alpha.2",
134
- "@deepseek-ai/dsh-host-plugin-inventory": "0.2.1-alpha.2",
135
- "@deepseek-ai/dsh-host-webserver": "0.2.1-alpha.2",
136
- "@deepseek-ai/dsh-launch-environment": "0.2.1-alpha.2",
137
- "@deepseek-ai/dsh-message-feedback": "0.2.1-alpha.2",
138
- "@deepseek-ai/dsh-office-to-pdf": "0.2.1-alpha.2",
139
- "@deepseek-ai/dsh-persona": "0.2.1-alpha.2",
140
- "@deepseek-ai/dsh-plan-mode": "0.2.1-alpha.2",
141
- "@deepseek-ai/dsh-plugin-manager": "0.2.1-alpha.2",
142
- "@deepseek-ai/dsh-schedule": "0.2.1-alpha.2",
143
- "@deepseek-ai/dsh-session-log-export": "0.2.1-alpha.2",
144
- "@deepseek-ai/dsh-session-reference": "0.2.1-alpha.2",
145
- "@deepseek-ai/dsh-session-stats": "0.2.1-alpha.2",
146
- "@deepseek-ai/dsh-session-turn-outline": "0.2.1-alpha.2",
147
- "@deepseek-ai/dsh-skill-filesystem": "0.2.1-alpha.2",
148
- "@deepseek-ai/dsh-subprocess": "0.2.1-alpha.2",
149
- "@deepseek-ai/dsh-terminal": "0.2.1-alpha.2",
150
- "@deepseek-ai/dsh-terminal-bash": "0.2.1-alpha.2",
151
- "@deepseek-ai/dsh-time-context": "0.2.1-alpha.2",
152
- "@deepseek-ai/dsh-tool-ask-user": "0.2.1-alpha.2",
153
- "@deepseek-ai/dsh-tool-bash": "0.2.1-alpha.2",
154
- "@deepseek-ai/dsh-tool-bash-persistent": "0.2.1-alpha.2",
155
- "@deepseek-ai/dsh-tool-cordis": "0.2.1-alpha.2",
156
- "@deepseek-ai/dsh-tool-fs": "0.2.1-alpha.2",
157
- "@deepseek-ai/dsh-tool-fs-search": "0.2.1-alpha.2",
158
- "@deepseek-ai/dsh-tool-goal": "0.2.1-alpha.2",
159
- "@deepseek-ai/dsh-tool-jobs": "0.2.1-alpha.2",
160
- "@deepseek-ai/dsh-tool-present": "0.2.1-alpha.2",
161
- "@deepseek-ai/dsh-tool-pwsh": "0.2.1-alpha.2",
162
- "@deepseek-ai/dsh-tool-pwsh-persistent": "0.2.1-alpha.2",
163
- "@deepseek-ai/dsh-tool-schedule": "0.2.1-alpha.2",
164
- "@deepseek-ai/dsh-tool-skill": "0.2.1-alpha.2",
165
- "@deepseek-ai/dsh-tool-subagent": "0.2.1-alpha.2",
166
- "@deepseek-ai/dsh-tool-subagent-control": "0.2.1-alpha.2",
167
- "@deepseek-ai/dsh-tool-todo": "0.2.1-alpha.2",
168
- "@deepseek-ai/dsh-tool-web": "0.2.1-alpha.2",
169
- "@deepseek-ai/dsh-tool-workflow": "0.2.1-alpha.2",
170
- "@deepseek-ai/dsh-web-frontend": "0.2.1-alpha.2",
171
- "@deepseek-ai/dsh-workflow-ptc": "0.2.1-alpha.2",
172
- "@deepseek-ai/dsh-workspace": "0.2.1-alpha.2",
173
- "@deepseek-ai/dsh-workspace-changes": "0.2.1-alpha.2",
174
- "@deepseek-ai/schemastery": "~3.18.5-alpha.1",
58
+ "@deepseek-ai/dsh-agent-instructions": "0.2.1-alpha.3",
59
+ "@deepseek-ai/dsh-agent-preset": "0.2.1-alpha.3",
60
+ "@deepseek-ai/dsh-agent-preset-registry": "0.2.1-alpha.3",
61
+ "@deepseek-ai/dsh-agent-tool-presentation": "0.2.1-alpha.3",
62
+ "@deepseek-ai/dsh-api-job-controller": "0.2.1-alpha.3",
63
+ "@deepseek-ai/dsh-api-remotes": "0.2.1-alpha.3",
64
+ "@deepseek-ai/dsh-api-session-controller": "0.2.1-alpha.3",
65
+ "@deepseek-ai/dsh-api-settings-controller": "0.2.1-alpha.3",
66
+ "@deepseek-ai/dsh-api-terminal-controller": "0.2.1-alpha.3",
67
+ "@deepseek-ai/dsh-api-workspace-controller": "0.2.1-alpha.3",
68
+ "@deepseek-ai/dsh-api-workspace-files": "0.2.1-alpha.3",
69
+ "@deepseek-ai/dsh-app-boot": "0.2.1-alpha.3",
70
+ "@deepseek-ai/dsh-client-connection": "0.2.1-alpha.3",
71
+ "@deepseek-ai/dsh-client-file-upload": "0.2.1-alpha.3",
72
+ "@deepseek-ai/dsh-client-hmr": "0.2.1-alpha.3",
73
+ "@deepseek-ai/dsh-client-locale": "0.2.1-alpha.3",
74
+ "@deepseek-ai/dsh-client-modules": "0.2.1-alpha.3",
75
+ "@deepseek-ai/dsh-client-resources": "0.2.1-alpha.3",
76
+ "@deepseek-ai/dsh-client-ui-agent-preset": "0.2.1-alpha.3",
77
+ "@deepseek-ai/dsh-client-ui-approval": "0.2.1-alpha.3",
78
+ "@deepseek-ai/dsh-client-ui-attachment": "0.2.1-alpha.3",
79
+ "@deepseek-ai/dsh-client-ui-brand-official": "0.2.1-alpha.3",
80
+ "@deepseek-ai/dsh-client-ui-chat": "0.2.1-alpha.3",
81
+ "@deepseek-ai/dsh-client-ui-commands": "0.2.1-alpha.3",
82
+ "@deepseek-ai/dsh-client-ui-conversation": "0.2.1-alpha.3",
83
+ "@deepseek-ai/dsh-client-ui-cordis": "0.2.1-alpha.3",
84
+ "@deepseek-ai/dsh-client-ui-deliverables": "0.2.1-alpha.3",
85
+ "@deepseek-ai/dsh-client-ui-directory-picker-browse": "0.2.1-alpha.3",
86
+ "@deepseek-ai/dsh-client-ui-directory-picker-native": "0.2.1-alpha.3",
87
+ "@deepseek-ai/dsh-client-ui-goal": "0.2.1-alpha.3",
88
+ "@deepseek-ai/dsh-client-ui-input-trigger": "0.2.1-alpha.3",
89
+ "@deepseek-ai/dsh-client-ui-jobs": "0.2.1-alpha.3",
90
+ "@deepseek-ai/dsh-client-ui-layout": "0.2.1-alpha.3",
91
+ "@deepseek-ai/dsh-client-ui-message-feedback": "0.2.1-alpha.3",
92
+ "@deepseek-ai/dsh-client-ui-model-selection": "0.2.1-alpha.3",
93
+ "@deepseek-ai/dsh-client-ui-open-in-app": "0.2.1-alpha.3",
94
+ "@deepseek-ai/dsh-client-ui-permission-presets": "0.2.1-alpha.3",
95
+ "@deepseek-ai/dsh-client-ui-plan": "0.2.1-alpha.3",
96
+ "@deepseek-ai/dsh-client-ui-plugin-manager": "0.2.1-alpha.3",
97
+ "@deepseek-ai/dsh-client-ui-reference": "0.2.1-alpha.3",
98
+ "@deepseek-ai/dsh-client-ui-renderer": "0.2.1-alpha.3",
99
+ "@deepseek-ai/dsh-client-ui-secret-mask": "0.2.1-alpha.3",
100
+ "@deepseek-ai/dsh-client-ui-session": "0.2.1-alpha.3",
101
+ "@deepseek-ai/dsh-client-ui-schedule": "0.2.1-alpha.3",
102
+ "@deepseek-ai/dsh-client-ui-settings": "0.2.1-alpha.3",
103
+ "@deepseek-ai/dsh-client-ui-settings-general": "0.2.1-alpha.3",
104
+ "@deepseek-ai/dsh-client-ui-settings-models": "0.2.1-alpha.3",
105
+ "@deepseek-ai/dsh-client-ui-settings-plugin-inventory": "0.2.1-alpha.3",
106
+ "@deepseek-ai/dsh-client-ui-settings-plugins": "0.2.1-alpha.3",
107
+ "@deepseek-ai/dsh-client-ui-settings-shell": "0.2.1-alpha.3",
108
+ "@deepseek-ai/dsh-client-ui-settings-agent-loop": "0.2.1-alpha.3",
109
+ "@deepseek-ai/dsh-client-ui-settings-subagent": "0.2.1-alpha.3",
110
+ "@deepseek-ai/dsh-client-ui-settings-web-search": "0.2.1-alpha.3",
111
+ "@deepseek-ai/dsh-client-ui-sidebar": "0.2.1-alpha.3",
112
+ "@deepseek-ai/dsh-client-ui-sidebar-browser": "0.2.1-alpha.3",
113
+ "@deepseek-ai/dsh-client-ui-sidebar-documentpreview": "0.2.1-alpha.3",
114
+ "@deepseek-ai/dsh-client-ui-sidebar-files": "0.2.1-alpha.3",
115
+ "@deepseek-ai/dsh-client-ui-sidebar-right": "0.2.1-alpha.3",
116
+ "@deepseek-ai/dsh-client-ui-sidebar-terminal": "0.2.1-alpha.3",
117
+ "@deepseek-ai/dsh-client-ui-skill": "0.2.1-alpha.3",
118
+ "@deepseek-ai/dsh-client-ui-subagent": "0.2.1-alpha.3",
119
+ "@deepseek-ai/dsh-client-ui-theme": "0.2.1-alpha.3",
120
+ "@deepseek-ai/dsh-client-ui-tool": "0.2.1-alpha.3",
121
+ "@deepseek-ai/dsh-client-ui-trajectory": "0.2.1-alpha.3",
122
+ "@deepseek-ai/dsh-client-ui-user-questions": "0.2.1-alpha.3",
123
+ "@deepseek-ai/dsh-client-ui-workflow-run": "0.2.1-alpha.3",
124
+ "@deepseek-ai/dsh-client-ui-workspace": "0.2.1-alpha.3",
125
+ "@deepseek-ai/dsh-cmdline": "0.2.1-alpha.3",
126
+ "@deepseek-ai/dsh-command-compact": "0.2.1-alpha.3",
127
+ "@deepseek-ai/dsh-command-goal": "0.2.1-alpha.3",
128
+ "@deepseek-ai/dsh-compaction-basic": "0.2.1-alpha.3",
129
+ "@deepseek-ai/dsh-compaction-tool-result-pruner": "0.2.1-alpha.3",
130
+ "@deepseek-ai/dsh-cordis-client-runner": "0.2.1-alpha.3",
131
+ "@deepseek-ai/dsh-cordis-host-runner": "0.2.1-alpha.3",
132
+ "@deepseek-ai/dsh-file-reference": "0.2.1-alpha.3",
133
+ "@deepseek-ai/dsh-file-reference-local": "0.2.1-alpha.3",
134
+ "@deepseek-ai/dsh-host-directory-picker-auto": "0.2.1-alpha.3",
135
+ "@deepseek-ai/dsh-host-directory-picker-browse": "0.2.1-alpha.3",
136
+ "@deepseek-ai/dsh-host-directory-picker-native": "0.2.1-alpha.3",
137
+ "@deepseek-ai/dsh-host-frontend-static": "0.2.1-alpha.3",
138
+ "@deepseek-ai/dsh-host-open-in-app": "0.2.1-alpha.3",
139
+ "@deepseek-ai/dsh-host-plugin-inventory": "0.2.1-alpha.3",
140
+ "@deepseek-ai/dsh-host-webserver": "0.2.1-alpha.3",
141
+ "@deepseek-ai/dsh-launch-environment": "0.2.1-alpha.3",
142
+ "@deepseek-ai/dsh-message-feedback": "0.2.1-alpha.3",
143
+ "@deepseek-ai/dsh-office-to-pdf": "0.2.1-alpha.3",
144
+ "@deepseek-ai/dsh-persona": "0.2.1-alpha.3",
145
+ "@deepseek-ai/dsh-plan-mode": "0.2.1-alpha.3",
146
+ "@deepseek-ai/dsh-plugin-manager": "0.2.1-alpha.3",
147
+ "@deepseek-ai/dsh-schedule": "0.2.1-alpha.3",
148
+ "@deepseek-ai/dsh-session-log-export": "0.2.1-alpha.3",
149
+ "@deepseek-ai/dsh-session-reference": "0.2.1-alpha.3",
150
+ "@deepseek-ai/dsh-session-stats": "0.2.1-alpha.3",
151
+ "@deepseek-ai/dsh-session-turn-outline": "0.2.1-alpha.3",
152
+ "@deepseek-ai/dsh-skill-filesystem": "0.2.1-alpha.3",
153
+ "@deepseek-ai/dsh-subprocess": "0.2.1-alpha.3",
154
+ "@deepseek-ai/dsh-terminal": "0.2.1-alpha.3",
155
+ "@deepseek-ai/dsh-terminal-bash": "0.2.1-alpha.3",
156
+ "@deepseek-ai/dsh-time-context": "0.2.1-alpha.3",
157
+ "@deepseek-ai/dsh-tool-ask-user": "0.2.1-alpha.3",
158
+ "@deepseek-ai/dsh-tool-bash": "0.2.1-alpha.3",
159
+ "@deepseek-ai/dsh-tool-bash-persistent": "0.2.1-alpha.3",
160
+ "@deepseek-ai/dsh-tool-cordis": "0.2.1-alpha.3",
161
+ "@deepseek-ai/dsh-tool-fs": "0.2.1-alpha.3",
162
+ "@deepseek-ai/dsh-tool-fs-search": "0.2.1-alpha.3",
163
+ "@deepseek-ai/dsh-tool-goal": "0.2.1-alpha.3",
164
+ "@deepseek-ai/dsh-tool-jobs": "0.2.1-alpha.3",
165
+ "@deepseek-ai/dsh-tool-present": "0.2.1-alpha.3",
166
+ "@deepseek-ai/dsh-tool-pwsh": "0.2.1-alpha.3",
167
+ "@deepseek-ai/dsh-tool-pwsh-persistent": "0.2.1-alpha.3",
168
+ "@deepseek-ai/dsh-tool-schedule": "0.2.1-alpha.3",
169
+ "@deepseek-ai/dsh-tool-skill": "0.2.1-alpha.3",
170
+ "@deepseek-ai/dsh-tool-subagent": "0.2.1-alpha.3",
171
+ "@deepseek-ai/dsh-tool-subagent-control": "0.2.1-alpha.3",
172
+ "@deepseek-ai/dsh-tool-todo": "0.2.1-alpha.3",
173
+ "@deepseek-ai/dsh-tool-web": "0.2.1-alpha.3",
174
+ "@deepseek-ai/dsh-tool-workflow": "0.2.1-alpha.3",
175
+ "@deepseek-ai/dsh-web-frontend": "0.2.1-alpha.3",
176
+ "@deepseek-ai/dsh-workflow-ptc": "0.2.1-alpha.3",
177
+ "@deepseek-ai/dsh-workspace": "0.2.1-alpha.3",
178
+ "@deepseek-ai/dsh-workspace-changes": "0.2.1-alpha.3",
179
+ "@deepseek-ai/schemastery": "~3.18.5-alpha.2",
175
180
  "commander": "^15.0.0",
176
181
  "open": "^11.0.2",
177
- "@deepseek-ai/dsh-api-account-controller": "0.2.1-alpha.2",
178
- "@deepseek-ai/dsh-client-ui-settings-account": "0.2.1-alpha.2",
179
- "@deepseek-ai/dsh-client-shortcuts": "0.2.1-alpha.2",
180
- "@deepseek-ai/dsh-client-ui-shortcuts": "0.2.1-alpha.2",
181
- "@deepseek-ai/dsh-client-product-analytics": "0.2.1-alpha.2",
182
- "@deepseek-ai/dsh-host-product-telemetry-otel": "0.2.1-alpha.2",
183
- "@deepseek-ai/dsh-client-ui-settings-session-log": "0.2.1-alpha.2"
182
+ "@deepseek-ai/dsh-api-account-controller": "0.2.1-alpha.3",
183
+ "@deepseek-ai/dsh-client-ui-settings-account": "0.2.1-alpha.3",
184
+ "@deepseek-ai/dsh-client-shortcuts": "0.2.1-alpha.3",
185
+ "@deepseek-ai/dsh-client-ui-shortcuts": "0.2.1-alpha.3",
186
+ "@deepseek-ai/dsh-client-product-analytics": "0.2.1-alpha.3",
187
+ "@deepseek-ai/dsh-host-product-telemetry-otel": "0.2.1-alpha.3",
188
+ "@deepseek-ai/dsh-client-ui-settings-session-log": "0.2.1-alpha.3",
189
+ "@deepseek-ai/dsh-harness-dev-context": "0.2.1-alpha.3"
184
190
  },
185
191
  "peerDependencies": {
186
- "@deepseek-ai/cordis": "~4.0.5-alpha.1",
187
- "@deepseek-ai/cordis-plugin-loader": "~1.0.6-alpha.1",
188
- "@deepseek-ai/dsh-shell-env": "0.2.1-alpha.2",
189
- "@deepseek-ai/dsh-system-prompt": "0.2.1-alpha.2"
192
+ "@deepseek-ai/cordis": "~4.0.5-alpha.2",
193
+ "@deepseek-ai/cordis-plugin-loader": "~1.0.6-alpha.2",
194
+ "@deepseek-ai/dsh-shell-env": "0.2.1-alpha.3"
190
195
  },
191
196
  "devDependencies": {
192
- "@deepseek-ai/cordis": "~4.0.5-alpha.1",
193
- "@deepseek-ai/cordis-plugin-include": "~1.0.10-alpha.1",
194
- "@deepseek-ai/cordis-plugin-loader": "~1.0.6-alpha.1",
195
- "@deepseek-ai/dsh-fs": "0.2.1-alpha.2",
196
- "@deepseek-ai/dsh-fs-local": "0.2.1-alpha.2",
197
- "@deepseek-ai/dsh-sandbox-policy": "0.2.1-alpha.2",
198
- "@deepseek-ai/dsh-session": "0.2.1-alpha.2",
199
- "@deepseek-ai/dsh-session-projection": "0.2.1-alpha.2",
200
- "@deepseek-ai/dsh-shell-env": "0.2.1-alpha.2",
201
- "@deepseek-ai/dsh-system-prompt": "0.2.1-alpha.2",
202
- "@deepseek-ai/dsh-typert-registry": "0.2.1-alpha.2",
197
+ "@deepseek-ai/cordis": "~4.0.5-alpha.2",
198
+ "@deepseek-ai/cordis-plugin-include": "~1.0.10-alpha.2",
199
+ "@deepseek-ai/cordis-plugin-loader": "~1.0.6-alpha.2",
200
+ "@deepseek-ai/dsh-fs": "0.2.1-alpha.3",
201
+ "@deepseek-ai/dsh-fs-local": "0.2.1-alpha.3",
202
+ "@deepseek-ai/dsh-sandbox-policy": "0.2.1-alpha.3",
203
+ "@deepseek-ai/dsh-session": "0.2.1-alpha.3",
204
+ "@deepseek-ai/dsh-session-projection": "0.2.1-alpha.3",
205
+ "@deepseek-ai/dsh-shell-env": "0.2.1-alpha.3",
206
+ "@deepseek-ai/dsh-typert-registry": "0.2.1-alpha.3",
203
207
  "@deepseek-ai/libreoffice-kit": "^0.1.5",
204
- "@deepseek-ai/dsh-otel": "0.2.1-alpha.2"
208
+ "@deepseek-ai/dsh-otel": "0.2.1-alpha.3"
205
209
  }
206
210
  }
@@ -51,7 +51,7 @@
51
51
  name: '@deepseek-ai/dsh-plan-mode'
52
52
  config:
53
53
  section: |
54
- You are in plan mode. Stay in plan mode until exit_plan_mode succeeds or the user switches the session mode. Imperative language to implement changes means plan the implementation, not execute it. A user's conversational agreement — including an answer confirming something you asked — approves nothing and does not end plan mode; fold the confirmed decision into the plan and submit it through exit_plan_mode.
54
+ You are in plan mode. Stay in plan mode until the user approves your plan through exit_plan_mode or switches the session mode. Imperative language to implement changes means plan the implementation, not execute it. A user's conversational agreement — including an answer confirming something you asked — approves nothing and does not end plan mode; fold the confirmed decision into the plan and submit it through exit_plan_mode.
55
55
 
56
56
  Explore first. Use non-mutating reads, searches, static analysis, and checks to ground the plan in the actual repository. Do not edit or write files, change configuration, run formatters or code generation that rewrites tracked files, commit, or otherwise carry out the plan. Prefer existing functions and patterns over new machinery.
57
57
 
@@ -95,23 +95,11 @@
95
95
  provider: spawn
96
96
  toolName: subagent
97
97
  modelSelectionSettings: true
98
- toolFilter:
99
- deny:
100
- - schedule_create
101
- - schedule_delete
102
- - schedule_list
103
- - schedule_update
104
98
  - id: tool-subagent-fork
105
99
  name: '@deepseek-ai/dsh-tool-subagent'
106
100
  config:
107
101
  provider: fork
108
102
  toolName: subagent_fork
109
- toolFilter:
110
- deny:
111
- - schedule_create
112
- - schedule_delete
113
- - schedule_list
114
- - schedule_update
115
103
  - id: workflow-ptc
116
104
  name: '@deepseek-ai/dsh-workflow-ptc'
117
105
  config:
@@ -14,6 +14,23 @@
14
14
  prefix: You are a helpful software engineer assistant.
15
15
  complete: true
16
16
  includeRuntimeContext: false
17
+ - id: tool-fs
18
+ name: '@deepseek-ai/dsh-tool-fs'
19
+ config:
20
+ read: false
21
+ readImage: true
22
+ write: false
23
+ edit: false
24
+ - id: compaction
25
+ name: cordis:group
26
+ group: true
27
+ isolate:
28
+ compaction: true
29
+ config:
30
+ - id: compaction-basic
31
+ name: '@deepseek-ai/dsh-compaction-basic'
32
+ - id: command-compact
33
+ name: '@deepseek-ai/dsh-command-compact'
17
34
  - id: persistent-shell
18
35
  name: cordis:group
19
36
  group: true
@@ -52,7 +52,7 @@
52
52
  name: '@deepseek-ai/dsh-plan-mode'
53
53
  config:
54
54
  section: |
55
- You are in plan mode. Stay in plan mode until exit_plan_mode succeeds or the user switches the session mode. Imperative language to implement changes means plan the implementation, not execute it. A user's conversational agreement — including an answer confirming something you asked — approves nothing and does not end plan mode; fold the confirmed decision into the plan and submit it through exit_plan_mode.
55
+ You are in plan mode. Stay in plan mode until the user approves your plan through exit_plan_mode or switches the session mode. Imperative language to implement changes means plan the implementation, not execute it. A user's conversational agreement — including an answer confirming something you asked — approves nothing and does not end plan mode; fold the confirmed decision into the plan and submit it through exit_plan_mode.
56
56
 
57
57
  Explore first. Use non-mutating reads, searches, static analysis, and checks to ground the plan in the actual repository. Do not edit or write files, change configuration, run formatters or code generation that rewrites tracked files, commit, or otherwise carry out the plan. Prefer existing functions and patterns over new machinery.
58
58
 
@@ -96,23 +96,11 @@
96
96
  provider: spawn
97
97
  toolName: subagent
98
98
  modelSelectionSettings: true
99
- toolFilter:
100
- deny:
101
- - schedule_create
102
- - schedule_delete
103
- - schedule_list
104
- - schedule_update
105
99
  - id: tool-subagent-fork
106
100
  name: '@deepseek-ai/dsh-tool-subagent'
107
101
  config:
108
102
  provider: fork
109
103
  toolName: subagent_fork
110
- toolFilter:
111
- deny:
112
- - schedule_create
113
- - schedule_delete
114
- - schedule_list
115
- - schedule_update
116
104
  - id: workflow-ptc
117
105
  name: '@deepseek-ai/dsh-workflow-ptc'
118
106
  disabled: true
@@ -52,7 +52,7 @@
52
52
  name: '@deepseek-ai/dsh-plan-mode'
53
53
  config:
54
54
  section: |
55
- You are in plan mode. Stay in plan mode until exit_plan_mode succeeds or the user switches the session mode. Imperative language to implement changes means plan the implementation, not execute it. A user's conversational agreement — including an answer confirming something you asked — approves nothing and does not end plan mode; fold the confirmed decision into the plan and submit it through exit_plan_mode.
55
+ You are in plan mode. Stay in plan mode until the user approves your plan through exit_plan_mode or switches the session mode. Imperative language to implement changes means plan the implementation, not execute it. A user's conversational agreement — including an answer confirming something you asked — approves nothing and does not end plan mode; fold the confirmed decision into the plan and submit it through exit_plan_mode.
56
56
 
57
57
  Explore first. Use non-mutating reads, searches, static analysis, and checks to ground the plan in the actual repository. Do not edit or write files, change configuration, run formatters or code generation that rewrites tracked files, commit, or otherwise carry out the plan. Prefer existing functions and patterns over new machinery.
58
58
 
@@ -96,23 +96,11 @@
96
96
  provider: spawn
97
97
  toolName: subagent
98
98
  modelSelectionSettings: true
99
- toolFilter:
100
- deny:
101
- - schedule_create
102
- - schedule_delete
103
- - schedule_list
104
- - schedule_update
105
99
  - id: tool-subagent-fork
106
100
  name: '@deepseek-ai/dsh-tool-subagent'
107
101
  config:
108
102
  provider: fork
109
103
  toolName: subagent_fork
110
- toolFilter:
111
- deny:
112
- - schedule_create
113
- - schedule_delete
114
- - schedule_list
115
- - schedule_update
116
104
  - id: workflow-ptc
117
105
  name: '@deepseek-ai/dsh-workflow-ptc'
118
106
  config: