@stardustlc/dsh-suite 0.2.29 → 0.2.30

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/CHANGELOG.md CHANGED
@@ -2,6 +2,13 @@
2
2
 
3
3
  [返回简介](README.md) · [使用说明](docs/USAGE.md) · [验证记录](docs/VALIDATION.md)
4
4
 
5
+ ## 0.2.30(2026-10-21)
6
+
7
+ - 同步 PPT 0.13.0:逐页 Markdown 讲稿、图片读取取消、外部成品覆盖保护与另存副本,以及键盘保存、未保存提醒和错误重试。
8
+ - 同步日历 0.11.2:空字段清除、TZID / 夏令时保留、复杂重复系列保护与明确的整系列操作范围;PPT 与日历引导跟随宿主语言。
9
+ - 同步邮件 0.17.2:阻止无 MOVE / UIDPLUS 服务器上可能误删其他邮件的移动操作,包含 0.17.1 的账号与发信策略修复。
10
+ - 同步安全检查 0.5.1、SQL 0.4.6 与语音 0.3.7:包含 Git 命令钩子防护、数据库只读校验与语音地址 / 工作区边界修复;其余 12 个组件保持原版本。
11
+
5
12
  ## 0.2.29(2026-10-17)
6
13
 
7
14
  - 跟随 9 个组件的「首次使用分步引导」版本:`dsh-email 0.17.0`、`dsh-calendar 0.11.0`、`@stardustlc/dsh-dream 0.10.0`、`dsh-rss 0.7.0`、`dsh-ppt 0.11.0`、`dsh-code-security 0.5.0`、`dsh-hyperframes 0.7.0`、`dsh-remotion 0.6.0`、`dsh-cite 0.5.0`。
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@stardustlc/dsh-suite",
3
- "version": "0.2.29",
3
+ "version": "0.2.30",
4
4
  "description": "一次安装 18 个独立 DSH 插件,并统一组合它们的默认配置。",
5
5
  "type": "module",
6
6
  "dsh": {
@@ -52,22 +52,22 @@
52
52
  "dependencies": {
53
53
  "@stardustlc/dsh-docker": "0.4.2",
54
54
  "@stardustlc/dsh-dream": "0.10.0",
55
- "dsh-calendar": "0.11.0",
55
+ "dsh-calendar": "0.11.2",
56
56
  "dsh-cite": "0.5.0",
57
- "dsh-code-security": "0.5.0",
57
+ "dsh-code-security": "0.5.1",
58
58
  "dsh-codex-port": "0.3.0",
59
59
  "dsh-dingtalk": "0.2.2",
60
- "dsh-email": "0.17.0",
60
+ "dsh-email": "0.17.2",
61
61
  "dsh-ffmpeg": "0.5.0",
62
62
  "dsh-flakefinder": "0.3.5",
63
63
  "dsh-hyperframes": "0.7.0",
64
64
  "dsh-minimal-ptc": "0.5.6",
65
- "dsh-ppt": "0.11.0",
65
+ "dsh-ppt": "0.13.0",
66
66
  "dsh-remotion": "0.6.0",
67
67
  "dsh-rss": "0.7.0",
68
68
  "dsh-slack": "0.3.4",
69
- "dsh-sql": "0.4.5",
70
- "dsh-voice": "0.3.6"
69
+ "dsh-sql": "0.4.6",
70
+ "dsh-voice": "0.3.7"
71
71
  },
72
72
  "devDependencies": {
73
73
  "js-yaml": "^4.1.0"
@@ -1,130 +1,130 @@
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 identity plus the Host-generated PTC SDK, marked complete
19
- # with `includeRuntimeContext: false`. Other identity and workspace guidance
20
- # cannot add prompt text, and runtime context snapshots are suppressed.
21
- # 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 complete prompt keeps the minimal identity and the callable tool SDK.
32
- - id: persona
33
- name: dsh-minimal-ptc/ptc-persona
34
- config:
35
- prefix: You are a helpful software engineer assistant.
36
- complete: true
37
- includeRuntimeContext: false
38
-
39
- # ── shell ───────────────────────────────────────────────────────────────────
40
-
41
- # `shell-env` stays in the HOST composition: `apps/cli/src/web.ts` injects it to
42
- # publish `DSH_WEB_URL`/`DSH_WEB_MODE`. Both shell tools consume the host
43
- # registry from here; their executors are host-plane too.
44
- - id: tool-bash
45
- name: '@deepseek-ai/dsh-tool-bash'
46
- disabled: !!js process.platform === 'win32'
47
-
48
- - id: tool-pwsh
49
- name: '@deepseek-ai/dsh-tool-pwsh'
50
- disabled: true
51
-
52
- # Windows persistent PowerShell PTY stack (rc.1 minimal parity). Replaces the
53
- # one-shot pwsh row on win32; the gitbash group below keeps a stateless bash
54
- # tool beside it. The model-facing tool name remains `pwsh`.
55
- - id: persistent-shell
56
- name: cordis:group
57
- group: true
58
- disabled: !!js process.platform !== 'win32'
59
- isolate:
60
- terminals: true
61
- config:
62
- - id: pty
63
- name: '@deepseek-ai/dsh-terminal'
64
-
65
- - id: terminal-pwsh
66
- name: '@deepseek-ai/dsh-terminal-bash'
67
- disabled: !!js process.platform !== 'win32'
68
- config:
69
- shellDialect: pwsh
70
- timeoutMs: 300000
71
-
72
- - id: persistent-pwsh
73
- name: '@deepseek-ai/dsh-tool-pwsh-persistent'
74
- disabled: !!js process.platform !== 'win32'
75
- config:
76
- timeoutMs: 300000
77
- description: |-
78
- Run commands in a PowerShell shell
79
- * When invoking this tool, the contents of the "command" parameter does NOT need to be XML-escaped.
80
- * Network access depends on the host environment.
81
- * State is persistent across command calls and discussions with the user.
82
- * Use native Windows paths (C:\...) and $env:NAME variables; this is PowerShell, not bash.
83
- * Please avoid commands that may produce a very large amount of output.
84
- * Please run long lived commands in the background, e.g. 'Start-Job' or start a server with Start-Process.
85
-
86
- # Windows Git Bash shell stack. The preset-local executor runs every `bash`
87
- # call through Git for Windows bash, keeping the model-facing tool name and
88
- # stateless semantics identical to the POSIX `tool-bash` row above. Only
89
- # mounted on win32; the POSIX host keeps the official bash runner.
90
- - id: gitbash-shell
91
- name: cordis:group
92
- group: true
93
- disabled: !!js process.platform !== 'win32'
94
- isolate:
95
- shell: true
96
- config:
97
- - id: gitbash-executor
98
- name: dsh-minimal-ptc/gitbash-executor
99
- config:
100
- # 留空:executor 自动探测 GIT_BASH → 常见安装目录 → PATH → 'bash'
101
- # 如需固定路径可显式写 shellPath: 'C:\\Program Files\\Git\\bin\\bash.exe'
102
- timeoutMs: 120000
103
- maxTimeoutMs: 600000
104
- maxOutputBytes: 64000
105
- maxSpillBytes: 67108864
106
- graceMs: 3000
107
-
108
- - id: tool-bash-win
109
- name: '@deepseek-ai/dsh-tool-bash'
110
- config:
111
- enableRunInBackground: false
112
-
113
- # ── filesystem ──────────────────────────────────────────────────────────────
114
-
115
- # Both register into the host `tools` registry and provide nothing, so
116
- # they need no realm. The `fs` service and its policy stay in the host.
117
- - id: tool-fs
118
- name: '@deepseek-ai/dsh-tool-fs'
119
-
120
- - id: tool-fs-search
121
- name: '@deepseek-ai/dsh-tool-fs-search'
122
- config:
123
- sampleOverCapGlobResults: false
124
-
125
- # ── background jobs ────────────────────────────────────────────────────────
126
-
127
- # Only the model-facing controls. The task REGISTRY stays on the host plane.
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 identity plus the Host-generated PTC SDK, marked complete
19
+ # with `includeRuntimeContext: false`. Other identity and workspace guidance
20
+ # cannot add prompt text, and runtime context snapshots are suppressed.
21
+ # 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 complete prompt keeps the minimal identity and the callable tool SDK.
32
+ - id: persona
33
+ name: dsh-minimal-ptc/ptc-persona
34
+ config:
35
+ prefix: You are a helpful software engineer assistant.
36
+ complete: true
37
+ includeRuntimeContext: false
38
+
39
+ # ── shell ───────────────────────────────────────────────────────────────────
40
+
41
+ # `shell-env` stays in the HOST composition: `apps/cli/src/web.ts` injects it to
42
+ # publish `DSH_WEB_URL`/`DSH_WEB_MODE`. Both shell tools consume the host
43
+ # registry from here; their executors are host-plane too.
44
+ - id: tool-bash
45
+ name: '@deepseek-ai/dsh-tool-bash'
46
+ disabled: !!js process.platform === 'win32'
47
+
48
+ - id: tool-pwsh
49
+ name: '@deepseek-ai/dsh-tool-pwsh'
50
+ disabled: true
51
+
52
+ # Windows persistent PowerShell PTY stack (rc.1 minimal parity). Replaces the
53
+ # one-shot pwsh row on win32; the gitbash group below keeps a stateless bash
54
+ # tool beside it. The model-facing tool name remains `pwsh`.
55
+ - id: persistent-shell
56
+ name: cordis:group
57
+ group: true
58
+ disabled: !!js process.platform !== 'win32'
59
+ isolate:
60
+ terminals: true
61
+ config:
62
+ - id: pty
63
+ name: '@deepseek-ai/dsh-terminal'
64
+
65
+ - id: terminal-pwsh
66
+ name: '@deepseek-ai/dsh-terminal-bash'
67
+ disabled: !!js process.platform !== 'win32'
68
+ config:
69
+ shellDialect: pwsh
70
+ timeoutMs: 300000
71
+
72
+ - id: persistent-pwsh
73
+ name: '@deepseek-ai/dsh-tool-pwsh-persistent'
74
+ disabled: !!js process.platform !== 'win32'
75
+ config:
76
+ timeoutMs: 300000
77
+ description: |-
78
+ Run commands in a PowerShell shell
79
+ * When invoking this tool, the contents of the "command" parameter does NOT need to be XML-escaped.
80
+ * Network access depends on the host environment.
81
+ * State is persistent across command calls and discussions with the user.
82
+ * Use native Windows paths (C:\...) and $env:NAME variables; this is PowerShell, not bash.
83
+ * Please avoid commands that may produce a very large amount of output.
84
+ * Please run long lived commands in the background, e.g. 'Start-Job' or start a server with Start-Process.
85
+
86
+ # Windows Git Bash shell stack. The preset-local executor runs every `bash`
87
+ # call through Git for Windows bash, keeping the model-facing tool name and
88
+ # stateless semantics identical to the POSIX `tool-bash` row above. Only
89
+ # mounted on win32; the POSIX host keeps the official bash runner.
90
+ - id: gitbash-shell
91
+ name: cordis:group
92
+ group: true
93
+ disabled: !!js process.platform !== 'win32'
94
+ isolate:
95
+ shell: true
96
+ config:
97
+ - id: gitbash-executor
98
+ name: dsh-minimal-ptc/gitbash-executor
99
+ config:
100
+ # 留空:executor 自动探测 GIT_BASH → 常见安装目录 → PATH → 'bash'
101
+ # 如需固定路径可显式写 shellPath: 'C:\\Program Files\\Git\\bin\\bash.exe'
102
+ timeoutMs: 120000
103
+ maxTimeoutMs: 600000
104
+ maxOutputBytes: 64000
105
+ maxSpillBytes: 67108864
106
+ graceMs: 3000
107
+
108
+ - id: tool-bash-win
109
+ name: '@deepseek-ai/dsh-tool-bash'
110
+ config:
111
+ enableRunInBackground: false
112
+
113
+ # ── filesystem ──────────────────────────────────────────────────────────────
114
+
115
+ # Both register into the host `tools` registry and provide nothing, so
116
+ # they need no realm. The `fs` service and its policy stay in the host.
117
+ - id: tool-fs
118
+ name: '@deepseek-ai/dsh-tool-fs'
119
+
120
+ - id: tool-fs-search
121
+ name: '@deepseek-ai/dsh-tool-fs-search'
122
+ config:
123
+ sampleOverCapGlobResults: false
124
+
125
+ # ── background jobs ────────────────────────────────────────────────────────
126
+
127
+ # Only the model-facing controls. The task REGISTRY stays on the host plane.
128
128
  - id: tool-jobs
129
129
  name: '@deepseek-ai/dsh-tool-jobs'
130
130
 
@@ -132,180 +132,180 @@
132
132
  # Wait for service activation; do not freeze an early readiness
133
133
  # check into a disabled row while the Host is still booting.
134
134
  name: dsh-minimal-ptc/schedule-tools
135
-
136
- # ── skills ──────────────────────────────────────────────────────────────────
137
-
138
- # The skill REGISTRY lives in the host composition and is layered per scope:
139
- # these rows register into THIS preset's layer of it, so they need no realm.
140
- - id: skill-filesystem
141
- name: '@deepseek-ai/dsh-skill-filesystem'
142
-
143
- - id: tool-skill
144
- name: '@deepseek-ai/dsh-tool-skill'
145
-
146
- # ── goals ───────────────────────────────────────────────────────────────────
147
-
148
- # Only the model-facing tool plus the human command. The goal SERVICE, its
149
- # session driver stay on the host plane.
150
- - id: command-goal
151
- name: '@deepseek-ai/dsh-command-goal'
152
-
153
- - id: tool-goal
154
- name: '@deepseek-ai/dsh-tool-goal'
155
-
156
- # ── plan mode ───────────────────────────────────────────────────────────────
157
-
158
- # Plan state is per-agent by nature, so an entry-local realm is not a
159
- # workaround here — it is the correct lifetime.
160
- - id: planning
161
- name: cordis:group
162
- group: true
163
- isolate:
164
- planMode: true
165
- config:
166
- - id: plan-mode
167
- name: '@deepseek-ai/dsh-plan-mode'
168
- config:
169
- section: |
170
- 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.
171
-
172
- 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.
173
-
174
- 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.
175
-
176
- 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.
177
-
178
- 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.
179
-
180
- 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.
181
-
182
- # ── compaction ──────────────────────────────────────────────────────────────
183
-
184
- # `compaction-basic` reads `toolResultPrune` through `ctx.get`, so the pruner
185
- # must share this realm rather than sit outside it. `tokenMeter` stays HOST-side.
186
- - id: compaction
187
- name: cordis:group
188
- group: true
189
- isolate:
190
- compaction: true
191
- toolResultPruner: true
192
- config:
193
- - id: compaction-basic
194
- name: '@deepseek-ai/dsh-compaction-basic'
195
-
196
- - id: command-compact
197
- name: '@deepseek-ai/dsh-command-compact'
198
-
199
- - id: tool-result-pruner
200
- name: '@deepseek-ai/dsh-compaction-tool-result-pruner'
201
- config:
202
- thresholdChars: 8192
203
- headChars: 4096
204
- tailChars: 1024
205
-
206
- # ── delegation and workflows ────────────────────────────────────────────────
207
-
208
- # The `subagents` registry and its spawn/fork backends live in the HOST
209
- # composition. This preset contributes the delegation TOOLS. `workflows` shares
210
- # one entry-local realm here, and a consumer left outside would resolve a host
211
- # registry this preset does not populate.
212
- - id: delegation
213
- name: cordis:group
214
- group: true
215
- isolate:
216
- workflowEngine: true
217
- config:
218
- - id: tool-subagent-control
219
- name: '@deepseek-ai/dsh-tool-subagent-control'
220
-
221
- - id: tool-subagent-list-agents
222
- name: '@deepseek-ai/dsh-tool-subagent-control/list-agents'
223
-
224
- - id: tool-subagent
225
- name: '@deepseek-ai/dsh-tool-subagent'
226
- config:
227
- provider: spawn
228
- toolName: subagent
229
- modelSelectionSettings: true
135
+
136
+ # ── skills ──────────────────────────────────────────────────────────────────
137
+
138
+ # The skill REGISTRY lives in the host composition and is layered per scope:
139
+ # these rows register into THIS preset's layer of it, so they need no realm.
140
+ - id: skill-filesystem
141
+ name: '@deepseek-ai/dsh-skill-filesystem'
142
+
143
+ - id: tool-skill
144
+ name: '@deepseek-ai/dsh-tool-skill'
145
+
146
+ # ── goals ───────────────────────────────────────────────────────────────────
147
+
148
+ # Only the model-facing tool plus the human command. The goal SERVICE, its
149
+ # session driver stay on the host plane.
150
+ - id: command-goal
151
+ name: '@deepseek-ai/dsh-command-goal'
152
+
153
+ - id: tool-goal
154
+ name: '@deepseek-ai/dsh-tool-goal'
155
+
156
+ # ── plan mode ───────────────────────────────────────────────────────────────
157
+
158
+ # Plan state is per-agent by nature, so an entry-local realm is not a
159
+ # workaround here — it is the correct lifetime.
160
+ - id: planning
161
+ name: cordis:group
162
+ group: true
163
+ isolate:
164
+ planMode: true
165
+ config:
166
+ - id: plan-mode
167
+ name: '@deepseek-ai/dsh-plan-mode'
168
+ config:
169
+ section: |
170
+ 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.
171
+
172
+ 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.
173
+
174
+ 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.
175
+
176
+ 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.
177
+
178
+ 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.
179
+
180
+ 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.
181
+
182
+ # ── compaction ──────────────────────────────────────────────────────────────
183
+
184
+ # `compaction-basic` reads `toolResultPrune` through `ctx.get`, so the pruner
185
+ # must share this realm rather than sit outside it. `tokenMeter` stays HOST-side.
186
+ - id: compaction
187
+ name: cordis:group
188
+ group: true
189
+ isolate:
190
+ compaction: true
191
+ toolResultPruner: true
192
+ config:
193
+ - id: compaction-basic
194
+ name: '@deepseek-ai/dsh-compaction-basic'
195
+
196
+ - id: command-compact
197
+ name: '@deepseek-ai/dsh-command-compact'
198
+
199
+ - id: tool-result-pruner
200
+ name: '@deepseek-ai/dsh-compaction-tool-result-pruner'
201
+ config:
202
+ thresholdChars: 8192
203
+ headChars: 4096
204
+ tailChars: 1024
205
+
206
+ # ── delegation and workflows ────────────────────────────────────────────────
207
+
208
+ # The `subagents` registry and its spawn/fork backends live in the HOST
209
+ # composition. This preset contributes the delegation TOOLS. `workflows` shares
210
+ # one entry-local realm here, and a consumer left outside would resolve a host
211
+ # registry this preset does not populate.
212
+ - id: delegation
213
+ name: cordis:group
214
+ group: true
215
+ isolate:
216
+ workflowEngine: true
217
+ config:
218
+ - id: tool-subagent-control
219
+ name: '@deepseek-ai/dsh-tool-subagent-control'
220
+
221
+ - id: tool-subagent-list-agents
222
+ name: '@deepseek-ai/dsh-tool-subagent-control/list-agents'
223
+
224
+ - id: tool-subagent
225
+ name: '@deepseek-ai/dsh-tool-subagent'
226
+ config:
227
+ provider: spawn
228
+ toolName: subagent
229
+ modelSelectionSettings: true
230
230
  backgroundMode: continuable
231
-
232
- - id: tool-subagent-fork
233
- name: '@deepseek-ai/dsh-tool-subagent'
234
- config:
235
- provider: fork
231
+
232
+ - id: tool-subagent-fork
233
+ name: '@deepseek-ai/dsh-tool-subagent'
234
+ config:
235
+ provider: fork
236
236
  toolName: subagent_fork
237
237
  backgroundMode: continuable
238
-
239
- # Product providers are host-plane singletons. Remove `disabled` from
240
- # either ordinary tool row to expose that product to agents on this preset.
241
- - id: tool-subagent-codex
242
- name: '@deepseek-ai/dsh-tool-subagent'
243
- disabled: true
244
- config:
245
- provider: codex
246
- toolName: subagent_codex
247
- backgroundMode: one-shot
248
- maxDepth: provider-managed
249
-
250
- - id: tool-subagent-claude-code
251
- name: '@deepseek-ai/dsh-tool-subagent'
252
- disabled: true
253
- config:
254
- provider: claude-code
255
- toolName: subagent_claude_code
256
- backgroundMode: one-shot
257
- maxDepth: provider-managed
258
-
259
- - id: workflow-ptc
260
- name: '@deepseek-ai/dsh-workflow-ptc'
261
- config:
262
- provider: spawn
263
-
264
- - id: tool-workflow
265
- name: '@deepseek-ai/dsh-tool-workflow'
266
- # Keep the engine above for `ralph`, but do not publish a second
267
- # model-authored orchestration surface beside `run_code` in PTC mode.
268
- disabled: true
269
-
270
- - id: tool-ralph
271
- name: '@deepseek-ai/dsh-tool-ralph'
272
- config:
273
- subagentProvider: spawn
274
- maxRounds: 64
275
-
276
- # ── remaining model-facing rows ─────────────────────────────────────────────
277
-
278
- - id: tool-ask-user
279
- name: '@deepseek-ai/dsh-tool-ask-user'
280
-
281
- - id: tool-todo
282
- name: '@deepseek-ai/dsh-tool-todo'
283
- config:
284
- allowParallelInProgress: true
285
-
286
- # The `web` service and its search provider stay in the host composition; only
287
- # the model-facing tool is per-session.
288
- - id: tool-web
289
- name: '@deepseek-ai/dsh-tool-web'
290
- config:
291
- fetch: true
292
- searchTimeoutMs: 60000
293
-
294
- # ── presentation ────────────────────────────────────────────────────────────
295
-
296
- # PTC for this agent alone. The row waits for the host's `ptcRuntime`
297
- # rather than assuming it: a deployment that composes no TypeScript runtime
298
- # fails this preset at mount, naming this id, instead of at the first request.
299
- - id: tool-presentation
300
- name: '@deepseek-ai/dsh-agent-tool-presentation'
301
- config:
302
- mode: ptc
303
-
304
- # Official `ptc` parity rows (0.1.6): the deliverables presenter and the
305
- # plugin-manager tools (off by default, mirroring the official preset).
306
- - id: present
307
- name: '@deepseek-ai/dsh-tool-present'
308
-
309
- - id: tool-plugin-manager
310
- name: '@deepseek-ai/dsh-plugin-manager/tools'
311
- disabled: true
238
+
239
+ # Product providers are host-plane singletons. Remove `disabled` from
240
+ # either ordinary tool row to expose that product to agents on this preset.
241
+ - id: tool-subagent-codex
242
+ name: '@deepseek-ai/dsh-tool-subagent'
243
+ disabled: true
244
+ config:
245
+ provider: codex
246
+ toolName: subagent_codex
247
+ backgroundMode: one-shot
248
+ maxDepth: provider-managed
249
+
250
+ - id: tool-subagent-claude-code
251
+ name: '@deepseek-ai/dsh-tool-subagent'
252
+ disabled: true
253
+ config:
254
+ provider: claude-code
255
+ toolName: subagent_claude_code
256
+ backgroundMode: one-shot
257
+ maxDepth: provider-managed
258
+
259
+ - id: workflow-ptc
260
+ name: '@deepseek-ai/dsh-workflow-ptc'
261
+ config:
262
+ provider: spawn
263
+
264
+ - id: tool-workflow
265
+ name: '@deepseek-ai/dsh-tool-workflow'
266
+ # Keep the engine above for `ralph`, but do not publish a second
267
+ # model-authored orchestration surface beside `run_code` in PTC mode.
268
+ disabled: true
269
+
270
+ - id: tool-ralph
271
+ name: '@deepseek-ai/dsh-tool-ralph'
272
+ config:
273
+ subagentProvider: spawn
274
+ maxRounds: 64
275
+
276
+ # ── remaining model-facing rows ─────────────────────────────────────────────
277
+
278
+ - id: tool-ask-user
279
+ name: '@deepseek-ai/dsh-tool-ask-user'
280
+
281
+ - id: tool-todo
282
+ name: '@deepseek-ai/dsh-tool-todo'
283
+ config:
284
+ allowParallelInProgress: true
285
+
286
+ # The `web` service and its search provider stay in the host composition; only
287
+ # the model-facing tool is per-session.
288
+ - id: tool-web
289
+ name: '@deepseek-ai/dsh-tool-web'
290
+ config:
291
+ fetch: true
292
+ searchTimeoutMs: 60000
293
+
294
+ # ── presentation ────────────────────────────────────────────────────────────
295
+
296
+ # PTC for this agent alone. The row waits for the host's `ptcRuntime`
297
+ # rather than assuming it: a deployment that composes no TypeScript runtime
298
+ # fails this preset at mount, naming this id, instead of at the first request.
299
+ - id: tool-presentation
300
+ name: '@deepseek-ai/dsh-agent-tool-presentation'
301
+ config:
302
+ mode: ptc
303
+
304
+ # Official `ptc` parity rows (0.1.6): the deliverables presenter and the
305
+ # plugin-manager tools (off by default, mirroring the official preset).
306
+ - id: present
307
+ name: '@deepseek-ai/dsh-tool-present'
308
+
309
+ - id: tool-plugin-manager
310
+ name: '@deepseek-ai/dsh-plugin-manager/tools'
311
+ disabled: true