@stardustlc/dsh-suite 0.1.9 → 0.2.0

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.en.md CHANGED
@@ -10,7 +10,7 @@ Bundles five product lines — office flow (with dream-based memory), media stud
10
10
 
11
11
  ## Compatibility
12
12
 
13
- Verified against official `@deepseek-ai/dsh@0.1.5-rc.1` and Node `24.16.0` on 2026-09-11: 18 components plus separately installed Modlens register 97 host tools and 34 skills. All component tool schemas and both PTC SDK generators pass; Minimal PTC mounts in a real agent and exposes `run_code` to the model. Isolated Web startup, token authentication (303/401/200) and process shutdown pass. Requires Node 22.19 or later within 22.x, or 24 or later. The scripts below reproduce these checks; offline tests do not establish live external-service readiness.
13
+ Version 0.2.0 requires Harness 0.1.7 or later; the current tested baseline is official-source **0.1.7-alpha.2**, with a local `Symbol.for` tool-scheduler fix. All 18 plugins register 96 tools and 34 skills; the Minimal PTC preset mounts in a real agent and appears in the mode picker. Settings migration, restart persistence, offline contracts and Web authentication are checked. Live external-service workflows need separate verification. Use suite 0.1.10 on Harness 0.1.5/0.1.6.
14
14
 
15
15
  ## Install / Uninstall
16
16
 
@@ -91,7 +91,7 @@ node scripts/smoke-harness.mjs --harness-root C:/path/to/deepseek-harness --inst
91
91
 
92
92
  Use `--install-tarballs` before release to test installation. The report must contain `{ "ok": true, "packages": [{ "name", "version", "tarball", "integrity" }] }` for the suite and all 18 components, with `sha512-...` integrity values. Only the temporary profile redirects those versions to local tarballs. The official CLI installs the suite; verification requires transitive component dependencies, no duplicate profile layers, successful startup, the complete registry and PTC mounting. Dependency installation can contact npm; this mode is not an offline test.
93
93
 
94
- Contracts use the selected Harness's real `ToolRuntime` and `SkillRegistry`: required service declarations, all parameter/output schemas, skill registrations and collisions, both PTC SDKs, and the execution/rendering of 16 health fixtures plus `ppt_themes`. The preset is materialized in an isolated home and its Harness module references are resolved. Startup verification also mounts it in a real agent, requiring `run_code` as the model entry point and retention of plugin tools and the shell. Only these read-only output samples are executed; other business workflows rely on the component unit tests and mocked dependencies.
94
+ Contracts use the selected Harness's real `ToolRuntime` and `SkillRegistry`: required service declarations, all parameter/output schemas, skill registrations and collisions, both PTC SDKs, and the execution/rendering of 16 health fixtures plus `ppt_themes`. Legacy-host checks cover the retired directory format. On 0.1.7, startup verification checks declarative preset registration and module resolution. Startup verification also mounts it in a real agent, requiring `run_code` as the model entry point and retention of plugin tools and the shell. Only these read-only output samples are executed; other business workflows rely on the component unit tests and mocked dependencies.
95
95
 
96
96
  HyperFrames and Remotion also undergo a real registry regression: remove one registered skill and require unhealthy status, then restore the matching registration and require healthy status. The startup smoke check executes both health tools and requires all bundled skills to be active.
97
97
 
package/README.md CHANGED
@@ -10,7 +10,7 @@
10
10
 
11
11
  ## 兼容性
12
12
 
13
- 已在官方 `@deepseek-ai/dsh@0.1.5-rc.1`、Node `24.16.0` 上验证(2026-09-11):18 个组件与额外安装的 Modlens 同载,宿主共注册 97 个工具、34 个技能。全部组件工具 schema 与两种 PTC SDK 生成检查通过;极简 PTC 已在真实 agent 中挂载,模型入口为 `run_code`。隔离 Web 启动、token 鉴权(303/401/200)与进程退出通过。Node 要求为 22.19 及以上的 22.x,或 24 及以上。下方脚本可重复验收;离线检查不代表外部服务业务已实测。
13
+ 0.2.0 需要 Harness 0.1.7 及以上,当前实测基线为官方源码构建的 **0.1.7-alpha.2**(含本地工具调度器 `Symbol.for` 修复)。18 个组件共同注册 96 个工具、34 个技能;极简 PTC 可在模式列表选择,并已在真实 Agent 挂载。配置迁移、重启持久化、离线契约和 Web 鉴权已验证。外部服务业务需单独验证;Harness 0.1.5/0.1.6 请使用套件 0.1.10。
14
14
 
15
15
  ## 安装
16
16
 
@@ -107,7 +107,7 @@ node scripts/smoke-harness.mjs --harness-root C:/path/to/deepseek-harness --inst
107
107
 
108
108
  发布前使用 `--install-tarballs` 验证真实安装:报告格式为 `{ "ok": true, "packages": [{ "name", "version", "tarball", "integrity" }] }`,须包含套件和 18 个组件,`integrity` 为 `sha512-...`。验证器只在临时 profile 中将指定版本映射到本地 tarball,经官方 CLI 安装套件,要求组件为传递依赖且不重复启用 profile 层,再检查实际启动、完整目录和 PTC 挂载。开发依赖可能访问 npm;这个安装模式不属于离线测试。
109
109
 
110
- 契约检查使用指定 Harness 的真实 `ToolRuntime` 和 `SkillRegistry`:逐个校验服务注入声明、全部工具参数与输出 schema、技能注册和重名冲突,生成两种 PTC SDK,再通过宿主执行链运行 16 个 health 与 `ppt_themes` 输出样例。minimal-ptc 会物化到隔离目录,并校验预设引用的 Harness 模块可解析;启动验收还会创建真实 agent 挂载预设,确认模型入口为 `run_code` 且保留插件工具与 Shell。这里只覆盖这些只读样例的返回值;发信、合成、渲染等业务流程由组件测试中的模拟依赖验证。
110
+ 契约检查使用指定 Harness 的真实 `ToolRuntime` 和 `SkillRegistry`:逐个校验服务注入声明、全部工具参数与输出 schema、技能注册和重名冲突,生成两种 PTC SDK,再通过宿主执行链运行 16 个 health 与 `ppt_themes` 输出样例。旧宿主兼容测试会校验旧目录预设;0.1.7 启动验收检查声明式预设注册与模块解析,启动验收还会创建真实 agent 挂载预设,确认模型入口为 `run_code` 且保留插件工具与 Shell。这里只覆盖这些只读样例的返回值;发信、合成、渲染等业务流程由组件测试中的模拟依赖验证。
111
111
 
112
112
  HyperFrames 与 Remotion 另有真实注册表回归:卸载一个已注册技能,确认 health 报告异常,再恢复相同注册并确认 health 恢复正常。启动验收也会执行这两个 health,要求全部随包技能实际生效。
113
113
 
package/package.json CHANGED
@@ -1,17 +1,21 @@
1
1
  {
2
2
  "name": "@stardustlc/dsh-suite",
3
- "version": "0.1.9",
3
+ "version": "0.2.0",
4
4
  "description": "DSH 插件全家桶:18 个组件覆盖邮件、日历、媒体创作、开发运维、消息通知与极简 PTC,一条命令安装。",
5
5
  "type": "module",
6
6
  "dsh": {
7
7
  "bundle": {
8
- "patch": "./cordis.patch.yml"
8
+ "patch": [
9
+ "./cordis.patch.yml",
10
+ "./ptc-minimal.patch.yml"
11
+ ]
9
12
  }
10
13
  },
11
14
  "files": [
12
15
  "cordis.patch.yml",
13
16
  "README.md",
14
- "README.en.md"
17
+ "README.en.md",
18
+ "ptc-minimal.patch.yml"
15
19
  ],
16
20
  "scripts": {
17
21
  "test": "node --test \"test/*.test.mjs\"",
@@ -37,19 +41,19 @@
37
41
  "dependencies": {
38
42
  "@stardustlc/dsh-docker": "0.3.3",
39
43
  "@stardustlc/dsh-dream": "0.3.3",
40
- "dsh-calendar": "0.8.1",
44
+ "dsh-calendar": "0.8.4",
41
45
  "dsh-cite": "0.3.3",
42
46
  "dsh-code-security": "0.3.3",
43
47
  "dsh-codex-port": "0.2.2",
44
48
  "dsh-dingtalk": "0.2.1",
45
- "dsh-email": "0.13.1",
49
+ "dsh-email": "0.14.0",
46
50
  "dsh-ffmpeg": "0.4.3",
47
51
  "dsh-flakefinder": "0.3.3",
48
52
  "dsh-hyperframes": "0.3.2",
49
- "dsh-minimal-ptc": "0.4.7",
50
- "dsh-ppt": "0.4.3",
53
+ "dsh-minimal-ptc": "0.5.0",
54
+ "dsh-ppt": "0.4.4",
51
55
  "dsh-remotion": "0.3.2",
52
- "dsh-rss": "0.3.2",
56
+ "dsh-rss": "0.4.0",
53
57
  "dsh-slack": "0.3.1",
54
58
  "dsh-sql": "0.4.3",
55
59
  "dsh-voice": "0.3.4"
@@ -0,0 +1,307 @@
1
+ # Harness 0.1.7 declarative preset; generated from the bundled agent composition.
2
+ - insert:
3
+ - id: preset-ptc-minimal
4
+ name: "@deepseek-ai/dsh-agent-preset"
5
+ config:
6
+ id: ptc-minimal
7
+ name: 极简 PTC 模式
8
+ description: 简洁提示词、完整插件工具与 PTC 编排;Windows 支持 Git Bash 和持久 PowerShell。
9
+ order: 4
10
+ plugins:
11
+ # The `ptc-minimal` agent preset: the `ptc` (PTC 模式) capabilities with the
12
+ # `minimal` (极简模式) prompt.
13
+ #
14
+ # Everything in `ptc` is here unchanged — full standard capabilities plus the
15
+ # PTC tool presentation (`tool-presentation` with `mode: ptc`), where the
16
+ # model composes a TypeScript program against a generated SDK and `run_code`
17
+ # executes it. What differs is the persona row, taken verbatim from `minimal`:
18
+ # a fixed one-line persona marked `complete: true` with
19
+ # `includeRuntimeContext: false`, so global identity, Web orientation, tool
20
+ # guidance, and later assembly listeners cannot add prompt text, and runtime
21
+ # context snapshots are suppressed. The `agent-instructions` row from `ptc` is
22
+ # dropped for the same reason — its workspace instruction baselines would add
23
+ # user-role text the minimal prompt policy excludes.
24
+ #
25
+ # This file is an AGENT-PLANE composition. It is mounted under one agent's
26
+ # scope context, so every tool it registers belongs to that session alone.
27
+ # A service row here MUST sit inside a group carrying an `isolate` realm.
28
+
29
+ # ── identity ────────────────────────────────────────────────────────────────
30
+
31
+ # The persona is the complete system prompt (minimal-mode prompt policy).
32
+ # dsh 0.1.3 renamed the persona config field `text` to `prefix` (required).
33
+ - id: persona
34
+ name: '@deepseek-ai/dsh-persona'
35
+ config:
36
+ prefix: You are a helpful software engineer assistant.
37
+ complete: true
38
+ includeRuntimeContext: false
39
+
40
+ # ── shell ───────────────────────────────────────────────────────────────────
41
+
42
+ # `shell-env` stays in the HOST composition: `apps/cli/src/web.ts` injects it to
43
+ # publish `DSH_WEB_URL`/`DSH_WEB_MODE`. Both shell tools consume the host
44
+ # registry from here; their executors are host-plane too.
45
+ - id: tool-bash
46
+ name: '@deepseek-ai/dsh-tool-bash'
47
+ disabled: !!js process.platform === 'win32'
48
+
49
+ - id: tool-pwsh
50
+ name: '@deepseek-ai/dsh-tool-pwsh'
51
+ disabled: true
52
+
53
+ # Windows persistent PowerShell PTY stack (rc.1 minimal parity). Replaces the
54
+ # one-shot pwsh row on win32; the gitbash group below keeps a stateless bash
55
+ # tool beside it. The model-facing tool name remains `pwsh`.
56
+ - id: persistent-shell
57
+ name: cordis:group
58
+ group: true
59
+ disabled: !!js process.platform !== 'win32'
60
+ isolate:
61
+ terminals: true
62
+ config:
63
+ - id: pty
64
+ name: '@deepseek-ai/dsh-terminal'
65
+
66
+ - id: terminal-pwsh
67
+ name: '@deepseek-ai/dsh-terminal-bash'
68
+ disabled: !!js process.platform !== 'win32'
69
+ config:
70
+ shellDialect: pwsh
71
+ timeoutMs: 300000
72
+
73
+ - id: persistent-pwsh
74
+ name: '@deepseek-ai/dsh-tool-pwsh-persistent'
75
+ disabled: !!js process.platform !== 'win32'
76
+ config:
77
+ timeoutMs: 300000
78
+ description: |-
79
+ Run commands in a PowerShell shell
80
+ * When invoking this tool, the contents of the "command" parameter does NOT need to be XML-escaped.
81
+ * Network access depends on the host environment.
82
+ * State is persistent across command calls and discussions with the user.
83
+ * Use native Windows paths (C:\...) and $env:NAME variables; this is PowerShell, not bash.
84
+ * Please avoid commands that may produce a very large amount of output.
85
+ * Please run long lived commands in the background, e.g. 'Start-Job' or start a server with Start-Process.
86
+
87
+ # Windows Git Bash shell stack. The preset-local executor runs every `bash`
88
+ # call through Git for Windows bash, keeping the model-facing tool name and
89
+ # stateless semantics identical to the POSIX `tool-bash` row above. Only
90
+ # mounted on win32; the POSIX host keeps the official bash runner.
91
+ - id: gitbash-shell
92
+ name: cordis:group
93
+ group: true
94
+ disabled: !!js process.platform !== 'win32'
95
+ isolate:
96
+ shell: true
97
+ config:
98
+ - id: gitbash-executor
99
+ name: dsh-minimal-ptc/gitbash-executor
100
+ config:
101
+ # 留空:executor 自动探测 GIT_BASH → 常见安装目录 → PATH → 'bash'
102
+ # 如需固定路径可显式写 shellPath: 'C:\\Program Files\\Git\\bin\\bash.exe'
103
+ timeoutMs: 120000
104
+ maxTimeoutMs: 600000
105
+ maxOutputBytes: 64000
106
+ maxSpillBytes: 67108864
107
+ graceMs: 3000
108
+
109
+ - id: tool-bash-win
110
+ name: '@deepseek-ai/dsh-tool-bash'
111
+ config:
112
+ enableRunInBackground: false
113
+
114
+ # ── filesystem ──────────────────────────────────────────────────────────────
115
+
116
+ # Both register into the host `tools` registry and provide nothing, so
117
+ # they need no realm. The `fs` service and its policy stay in the host.
118
+ - id: tool-fs
119
+ name: '@deepseek-ai/dsh-tool-fs'
120
+
121
+ - id: tool-fs-search
122
+ name: '@deepseek-ai/dsh-tool-fs-search'
123
+ config:
124
+ sampleOverCapGlobResults: false
125
+
126
+ # ── background jobs ────────────────────────────────────────────────────────
127
+
128
+ # Only the model-facing controls. The task REGISTRY stays on the host plane.
129
+ - id: tool-jobs
130
+ name: '@deepseek-ai/dsh-tool-jobs'
131
+
132
+ # ── skills ──────────────────────────────────────────────────────────────────
133
+
134
+ # The skill REGISTRY lives in the host composition and is layered per scope:
135
+ # these rows register into THIS preset's layer of it, so they need no realm.
136
+ - id: skill-filesystem
137
+ name: '@deepseek-ai/dsh-skill-filesystem'
138
+
139
+ - id: tool-skill
140
+ name: '@deepseek-ai/dsh-tool-skill'
141
+
142
+ # ── goals ───────────────────────────────────────────────────────────────────
143
+
144
+ # Only the model-facing tool plus the human command. The goal SERVICE, its
145
+ # session driver stay on the host plane.
146
+ - id: command-goal
147
+ name: '@deepseek-ai/dsh-command-goal'
148
+
149
+ - id: tool-goal
150
+ name: '@deepseek-ai/dsh-tool-goal'
151
+
152
+ # ── plan mode ───────────────────────────────────────────────────────────────
153
+
154
+ # Plan state is per-agent by nature, so an entry-local realm is not a
155
+ # workaround here — it is the correct lifetime.
156
+ - id: planning
157
+ name: cordis:group
158
+ group: true
159
+ isolate:
160
+ planMode: true
161
+ config:
162
+ - id: plan-mode
163
+ name: '@deepseek-ai/dsh-plan-mode'
164
+ config:
165
+ section: |
166
+ 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.
167
+
168
+ 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.
169
+
170
+ The tool catalog stays the same across modes for request-cache stability. These plan-mode rules override any later tool description or guidance that suggests using mutation tools; those tools remain listed to keep the tool catalog unchanged. Do not use todo_write to track this planning phase: it tracks implementation after an approved plan, while the plan itself belongs in exit_plan_mode.
171
+
172
+ Resolve discoverable facts by inspection. Use ask_user_question only for user-owned choices or material ambiguity that inspection cannot answer. Do not ask the user where code lives or how current behavior works when you can find out.
173
+
174
+ Make the plan decision-complete: state the goal and success criteria; group implementation changes by subsystem; identify public API, schema, and data-flow changes; cover edge cases, failure modes, tests, acceptance criteria, and explicit assumptions. Keep it concise enough to review but detailed enough that another engineer can implement it without making design decisions.
175
+
176
+ When ready, call exit_plan_mode with the complete plan markdown, starting with a # title. Make exit_plan_mode the only and final tool call in that assistant response: it presents the plan for approval, and implementation begins only in a later step after approval. Do not paste the final plan as a plain reply or ask "should I proceed?" through prose or ask_user_question. If review rejects it, incorporate the feedback and present again. If the review channel is unavailable or aborted, stay in plan mode and ask the user to switch modes manually; do not proceed with implementation.
177
+
178
+ # ── compaction ──────────────────────────────────────────────────────────────
179
+
180
+ # `compaction-basic` reads `toolResultPrune` through `ctx.get`, so the pruner
181
+ # must share this realm rather than sit outside it. `tokenMeter` stays HOST-side.
182
+ - id: compaction
183
+ name: cordis:group
184
+ group: true
185
+ isolate:
186
+ compaction: true
187
+ toolResultPruner: true
188
+ config:
189
+ - id: compaction-basic
190
+ name: '@deepseek-ai/dsh-compaction-basic'
191
+
192
+ - id: command-compact
193
+ name: '@deepseek-ai/dsh-command-compact'
194
+
195
+ - id: tool-result-pruner
196
+ name: '@deepseek-ai/dsh-compaction-tool-result-pruner'
197
+ config:
198
+ thresholdChars: 8192
199
+ headChars: 4096
200
+ tailChars: 1024
201
+
202
+ # ── delegation and workflows ────────────────────────────────────────────────
203
+
204
+ # The `subagents` registry and its spawn/fork backends live in the HOST
205
+ # composition. This preset contributes the delegation TOOLS. `workflows` shares
206
+ # one entry-local realm here, and a consumer left outside would resolve a host
207
+ # registry this preset does not populate.
208
+ - id: delegation
209
+ name: cordis:group
210
+ group: true
211
+ isolate:
212
+ workflowEngine: true
213
+ config:
214
+ - id: tool-subagent-control
215
+ name: '@deepseek-ai/dsh-tool-subagent-control'
216
+
217
+ - id: tool-subagent-list-agents
218
+ name: '@deepseek-ai/dsh-tool-subagent-control/list-agents'
219
+
220
+ - id: tool-subagent
221
+ name: '@deepseek-ai/dsh-tool-subagent'
222
+ config:
223
+ provider: spawn
224
+ toolName: subagent
225
+ modelSelectionSettings: true
226
+ backgroundMode: continuable
227
+
228
+ - id: tool-subagent-fork
229
+ name: '@deepseek-ai/dsh-tool-subagent'
230
+ config:
231
+ provider: fork
232
+ toolName: subagent_fork
233
+ backgroundMode: continuable
234
+
235
+ # Product providers are host-plane singletons. Remove `disabled` from
236
+ # either ordinary tool row to expose that product to agents on this preset.
237
+ - id: tool-subagent-codex
238
+ name: '@deepseek-ai/dsh-tool-subagent'
239
+ disabled: true
240
+ config:
241
+ provider: codex
242
+ toolName: subagent_codex
243
+ backgroundMode: one-shot
244
+ maxDepth: provider-managed
245
+
246
+ - id: tool-subagent-claude-code
247
+ name: '@deepseek-ai/dsh-tool-subagent'
248
+ disabled: true
249
+ config:
250
+ provider: claude-code
251
+ toolName: subagent_claude_code
252
+ backgroundMode: one-shot
253
+ maxDepth: provider-managed
254
+
255
+ - id: workflow-ptc
256
+ name: '@deepseek-ai/dsh-workflow-ptc'
257
+ config:
258
+ provider: spawn
259
+
260
+ - id: tool-workflow
261
+ name: '@deepseek-ai/dsh-tool-workflow'
262
+ # Keep the engine above for `ralph`, but do not publish a second
263
+ # model-authored orchestration surface beside `run_code` in PTC mode.
264
+ disabled: true
265
+
266
+ - id: tool-ralph
267
+ name: '@deepseek-ai/dsh-tool-ralph'
268
+ config:
269
+ subagentProvider: spawn
270
+ maxRounds: 64
271
+
272
+ # ── remaining model-facing rows ─────────────────────────────────────────────
273
+
274
+ - id: tool-ask-user
275
+ name: '@deepseek-ai/dsh-tool-ask-user'
276
+
277
+ - id: tool-todo
278
+ name: '@deepseek-ai/dsh-tool-todo'
279
+ config:
280
+ allowParallelInProgress: true
281
+
282
+ # The `web` service and its search provider stay in the host composition; only
283
+ # the model-facing tool is per-session.
284
+ - id: tool-web
285
+ name: '@deepseek-ai/dsh-tool-web'
286
+ config:
287
+ fetch: true
288
+ searchTimeoutMs: 60000
289
+
290
+ # ── presentation ────────────────────────────────────────────────────────────
291
+
292
+ # PTC for this agent alone. The row waits for the host's `ptcRuntime`
293
+ # rather than assuming it: a deployment that composes no TypeScript runtime
294
+ # fails this preset at mount, naming this id, instead of at the first request.
295
+ - id: tool-presentation
296
+ name: '@deepseek-ai/dsh-agent-tool-presentation'
297
+ config:
298
+ mode: ptc
299
+
300
+ # Official `ptc` parity rows (0.1.6): the deliverables presenter and the
301
+ # plugin-manager tools (off by default, mirroring the official preset).
302
+ - id: present
303
+ name: '@deepseek-ai/dsh-tool-present'
304
+
305
+ - id: tool-plugin-manager
306
+ name: '@deepseek-ai/dsh-plugin-manager/tools'
307
+ disabled: true