dsh-switchman 1.3.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.
@@ -0,0 +1,599 @@
1
+ # =============================================================================
2
+ # dsh-switchman bundle patch
3
+ #
4
+ # One bundle, four preset overrides: each of the four shipped Web presets
5
+ # (standard / ptc / minimal / cordis) keeps its exact shipped plugin list and
6
+ # gains, in its persona suffix, the dsh-switchman autonomous Agent Teams
7
+ # doctrine. The persona suffix renders as the LAST system-prompt section
8
+ # (DEPLOYMENT_PERSONA_SUFFIX, order 10200), after the conservative TEAM_POLICY
9
+ # section (order 600) contributed by the Host-level
10
+ # @deepseek-ai/dsh-experimental-tool-agent-team, so this doctrine is the
11
+ # operative team policy for sessions of every preset.
12
+ #
13
+ # The Agent Teams tools themselves (spawn_teammate, team_task_*, send_message,
14
+ # wait_agent, …) come from the Host composition, i.e. the shipped
15
+ # @deepseek-ai/dsh-experimental-agent-team-profile bundle
16
+ # (dsh-experimental-agent-team + dsh-experimental-tool-agent-team +
17
+ # dsh-experimental-client-ui-agent-team). That shipped bundle must stay enabled
18
+ # in the profile: this bundle contributes only the doctrine, and mounting the
19
+ # team plugins here would double-register the tools and collide.
20
+ #
21
+ # Provenance & maintenance: the four `plugins` lists below are copied verbatim
22
+ # from @deepseek-ai/dsh-web-app presets/{standard,ptc,minimal,cordis}.patch.yml
23
+ # (dsh 0.1.7-rc.2). A Loader override replaces the target row's `config`
24
+ # wholesale, so every field is restated here. After a DSH upgrade that changes
25
+ # the shipped presets, re-sync these lists from the new preset files, then
26
+ # reinstall this bundle.
27
+ #
28
+ # Known consequences of overriding:
29
+ # - plugin_manager `set_plugin` on these preset rows reports `overridden`.
30
+ # - An edit saved from the Web preset editor lands in the profile patch layer,
31
+ # which still wins over this bundle, but it replaces `config.plugins`
32
+ # wholesale and therefore drops this doctrine unless the suffix is kept.
33
+ # =============================================================================
34
+
35
+ # -----------------------------------------------------------------------------
36
+ # standard — shipped list verbatim; persona suffix extended with the doctrine.
37
+ # -----------------------------------------------------------------------------
38
+ - id: preset-standard
39
+ name: '@deepseek-ai/dsh-agent-preset'
40
+ config:
41
+ id: standard
42
+ order: 1
43
+ plugins:
44
+ - id: persona
45
+ name: '@deepseek-ai/dsh-persona'
46
+ config:
47
+ prefix: You are a coding agent powered by the {{model}} model.
48
+ suffix: &switchman-team-suffix |
49
+ Your working directory is {{cwd}}.
50
+
51
+ # dsh-switchman 自主智能体团队调度规程(本段为当前 profile 的最高行为准则)
52
+
53
+ 总纲:在准确理解需求、严谨思考、最优质量、最低返工率的前提下最小化总 token 消耗。返工是最贵的 token——过程与铺陈可以省,验证与关键推理绝不省。
54
+
55
+ 系统提示词前文的默认团队策略写的是「仅当用户明确要求时才创建 teammate」。该默认策略在当前 profile 下不适用:用户安装 dsh-switchman 即预先授权,你应当自主判断、自主触发,无需再询问用户。
56
+
57
+ ## 一、默认委派,例外亲做(delegate by default)
58
+ - 委派只消耗一个全新子上下文、只收回一份摘要;亲自读写每一份都会膨胀本会话上下文,长期更贵。长或重的上下文偏向委派,琐碎小事留在手里。
59
+ - 仅当满足全部条件才亲自做:认知负载低或中、读取合计 <200 行、改动 <50 行;强迭代小步试错(每步都要立刻用上一步结果);期望收益 <3k token 的收尾。
60
+ - 位置不确定的检索、跨多文件调查、大范围重构、独立研究或方案对比:一律委派,侦察优先派 economy 泳道。
61
+ - 任务开始时判断一次,中途规模或结构变化时重做;结论不必请示用户。
62
+ - 需要多成员持久协作、共享任务板、消息往来的用 Agent Teams(满足任一即触发 spawn_teammate:可并行的多个独立子任务;量大且自包含;主上下文水位已高;需要角色分离);一次性、无需共享状态的单点调查用 subagent。
63
+
64
+ ## 二、编排与 token 纪律(Lead 职责)
65
+ - prompt 必须自包含:目标、已知事实与结论、文件路径、期望输出与验收标准;已查明的事实不让对方重查;固定段在前、可变段在后。
66
+ - 只收结论:回报结论 + 引用(file:line / URL),不贴大段原文。
67
+ - 中间产物落盘:长文档与大段生成物写入 .dsh-switchman/ 下的文件,对话里只引用相对路径。
68
+ - 禁止复活死会话:子智能体达 cap 终止后,用自包含 prompt 新派一个,不 resume 旧壳。
69
+ - 广搜先问:首次整项目范围的搜索先向用户澄清范围,定点检索不受此限。
70
+ - 大额派发先估成本:预计 ≥3 个成员或总消耗 >100k token 时,先报规模与预估请用户确认。
71
+ - 写作域隔离:共享任务上写明互不重叠的 write_scopes;用 team_task_* 维护任务板与依赖顺序;Lead 汇总最终 diff、复核关键改动并运行测试;用 wait_agent 等到必需的 teammate 完成,绝不在结果未回前下最终结论。
72
+
73
+ ## 三、分级验证(质量下限,不可省)
74
+ - 改动 >20 行或涉及多个调用点:交 tester 验证。
75
+ - 改动 >300 行,或触及核心/安全/数据一致性逻辑:交 reviewer 独立复审。复审池有多个模型时优先选与主会话不同的模型;复审池只有与主会话相同的模型、或确需复用时,允许同模型复审,只需在结论中声明 DOWNGRADED。
76
+ - 任何降到更弱模型或更省验证的决定都必须显式声明;沉默放弃验证禁止。
77
+
78
+ ## 四、边界
79
+ - 用户明确说「不要用团队 / 自己做」时,该即时要求优先于本段。
80
+ - 工具目录中没有 Agent Teams 工具时,静默回退单人模式,不声明故障。
81
+ - 你是 teammate 时:遵守本段协作与回报纪律即可,组建团队是 Lead 的职责,不要 spawn_teammate。
82
+ - id: agent-instructions
83
+ name: '@deepseek-ai/dsh-agent-instructions'
84
+ config:
85
+ maxBytes: 65536
86
+ - id: tool-bash
87
+ name: '@deepseek-ai/dsh-tool-bash'
88
+ disabled: !!js process.platform === 'win32'
89
+ - id: tool-pwsh
90
+ name: '@deepseek-ai/dsh-tool-pwsh'
91
+ disabled: !!js process.platform !== 'win32'
92
+ - id: tool-fs
93
+ name: '@deepseek-ai/dsh-tool-fs'
94
+ - id: tool-fs-search
95
+ name: '@deepseek-ai/dsh-tool-fs-search'
96
+ config:
97
+ sampleOverCapGlobResults: false
98
+ - id: tool-jobs
99
+ name: '@deepseek-ai/dsh-tool-jobs'
100
+ - id: skill-filesystem
101
+ name: '@deepseek-ai/dsh-skill-filesystem'
102
+ - id: tool-skill
103
+ name: '@deepseek-ai/dsh-tool-skill'
104
+ - id: command-goal
105
+ name: '@deepseek-ai/dsh-command-goal'
106
+ - id: tool-goal
107
+ name: '@deepseek-ai/dsh-tool-goal'
108
+ - id: planning
109
+ name: cordis:group
110
+ group: true
111
+ isolate:
112
+ planMode: true
113
+ config:
114
+ - id: plan-mode
115
+ name: '@deepseek-ai/dsh-plan-mode'
116
+ config:
117
+ section: |
118
+ 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.
119
+
120
+ 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.
121
+
122
+ 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.
123
+
124
+ 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.
125
+
126
+ 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.
127
+
128
+ 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.
129
+ - id: compaction
130
+ name: cordis:group
131
+ group: true
132
+ isolate:
133
+ compaction: true
134
+ toolResultPruner: true
135
+ config:
136
+ - id: compaction-basic
137
+ name: '@deepseek-ai/dsh-compaction-basic'
138
+ - id: command-compact
139
+ name: '@deepseek-ai/dsh-command-compact'
140
+ - id: tool-result-pruner
141
+ name: '@deepseek-ai/dsh-compaction-tool-result-pruner'
142
+ config:
143
+ thresholdChars: 8192
144
+ headChars: 4096
145
+ tailChars: 1024
146
+ - id: delegation
147
+ name: cordis:group
148
+ group: true
149
+ isolate:
150
+ workflowEngine: true
151
+ config:
152
+ - id: tool-subagent-control
153
+ name: '@deepseek-ai/dsh-tool-subagent-control'
154
+ - id: tool-subagent-list-agents
155
+ name: '@deepseek-ai/dsh-tool-subagent-control/list-agents'
156
+ - id: tool-subagent
157
+ name: '@deepseek-ai/dsh-tool-subagent'
158
+ config:
159
+ provider: spawn
160
+ toolName: subagent
161
+ modelSelectionSettings: true
162
+ backgroundMode: continuable
163
+ - id: tool-subagent-fork
164
+ name: '@deepseek-ai/dsh-tool-subagent'
165
+ config:
166
+ provider: fork
167
+ toolName: subagent_fork
168
+ backgroundMode: continuable
169
+ - id: tool-subagent-codex
170
+ name: '@deepseek-ai/dsh-tool-subagent'
171
+ disabled: true
172
+ config:
173
+ provider: codex
174
+ toolName: subagent_codex
175
+ backgroundMode: one-shot
176
+ maxDepth: provider-managed
177
+ - id: tool-subagent-claude-code
178
+ name: '@deepseek-ai/dsh-tool-subagent'
179
+ disabled: true
180
+ config:
181
+ provider: claude-code
182
+ toolName: subagent_claude_code
183
+ backgroundMode: one-shot
184
+ maxDepth: provider-managed
185
+ - id: workflow-ptc
186
+ name: '@deepseek-ai/dsh-workflow-ptc'
187
+ config:
188
+ provider: spawn
189
+ - id: tool-workflow
190
+ name: '@deepseek-ai/dsh-tool-workflow'
191
+ - id: tool-ralph
192
+ name: '@deepseek-ai/dsh-tool-ralph'
193
+ disabled: true
194
+ config:
195
+ subagentProvider: spawn
196
+ maxRounds: 64
197
+ - id: tool-ask-user
198
+ name: '@deepseek-ai/dsh-tool-ask-user'
199
+ - id: tool-todo
200
+ name: '@deepseek-ai/dsh-tool-todo'
201
+ config:
202
+ allowParallelInProgress: true
203
+ - id: tool-web
204
+ name: '@deepseek-ai/dsh-tool-web'
205
+ config:
206
+ fetch: true
207
+ searchTimeoutMs: 60000
208
+ - id: present
209
+ name: '@deepseek-ai/dsh-tool-present'
210
+ - id: tool-plugin-manager
211
+ name: '@deepseek-ai/dsh-plugin-manager/tools'
212
+ disabled: true
213
+
214
+ # -----------------------------------------------------------------------------
215
+ # ptc — shipped list verbatim (workflow tooling disabled, PTC presentation);
216
+ # persona suffix replaced by the shared doctrine suffix.
217
+ # -----------------------------------------------------------------------------
218
+ - id: preset-ptc
219
+ name: '@deepseek-ai/dsh-agent-preset'
220
+ config:
221
+ id: ptc
222
+ order: 2
223
+ plugins:
224
+ - id: persona
225
+ name: '@deepseek-ai/dsh-persona'
226
+ config:
227
+ prefix: You are a coding agent powered by the {{model}} model.
228
+ suffix: *switchman-team-suffix
229
+ - id: agent-instructions
230
+ name: '@deepseek-ai/dsh-agent-instructions'
231
+ config:
232
+ maxBytes: 65536
233
+ - id: tool-bash
234
+ name: '@deepseek-ai/dsh-tool-bash'
235
+ disabled: !!js process.platform === 'win32'
236
+ - id: tool-pwsh
237
+ name: '@deepseek-ai/dsh-tool-pwsh'
238
+ disabled: !!js process.platform !== 'win32'
239
+ - id: tool-fs
240
+ name: '@deepseek-ai/dsh-tool-fs'
241
+ - id: tool-fs-search
242
+ name: '@deepseek-ai/dsh-tool-fs-search'
243
+ config:
244
+ sampleOverCapGlobResults: false
245
+ - id: tool-jobs
246
+ name: '@deepseek-ai/dsh-tool-jobs'
247
+ - id: skill-filesystem
248
+ name: '@deepseek-ai/dsh-skill-filesystem'
249
+ - id: tool-skill
250
+ name: '@deepseek-ai/dsh-tool-skill'
251
+ - id: command-goal
252
+ name: '@deepseek-ai/dsh-command-goal'
253
+ - id: tool-goal
254
+ name: '@deepseek-ai/dsh-tool-goal'
255
+ - id: planning
256
+ name: cordis:group
257
+ group: true
258
+ isolate:
259
+ planMode: true
260
+ config:
261
+ - id: plan-mode
262
+ name: '@deepseek-ai/dsh-plan-mode'
263
+ config:
264
+ section: |
265
+ 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.
266
+
267
+ 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.
268
+
269
+ 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.
270
+
271
+ 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.
272
+
273
+ 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.
274
+
275
+ 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.
276
+ - id: compaction
277
+ name: cordis:group
278
+ group: true
279
+ isolate:
280
+ compaction: true
281
+ toolResultPruner: true
282
+ config:
283
+ - id: compaction-basic
284
+ name: '@deepseek-ai/dsh-compaction-basic'
285
+ - id: command-compact
286
+ name: '@deepseek-ai/dsh-command-compact'
287
+ - id: tool-result-pruner
288
+ name: '@deepseek-ai/dsh-compaction-tool-result-pruner'
289
+ config:
290
+ thresholdChars: 8192
291
+ headChars: 4096
292
+ tailChars: 1024
293
+ - id: delegation
294
+ name: cordis:group
295
+ group: true
296
+ isolate:
297
+ workflowEngine: true
298
+ config:
299
+ - id: tool-subagent-control
300
+ name: '@deepseek-ai/dsh-tool-subagent-control'
301
+ - id: tool-subagent-list-agents
302
+ name: '@deepseek-ai/dsh-tool-subagent-control/list-agents'
303
+ - id: tool-subagent
304
+ name: '@deepseek-ai/dsh-tool-subagent'
305
+ config:
306
+ provider: spawn
307
+ toolName: subagent
308
+ modelSelectionSettings: true
309
+ backgroundMode: continuable
310
+ - id: tool-subagent-fork
311
+ name: '@deepseek-ai/dsh-tool-subagent'
312
+ config:
313
+ provider: fork
314
+ toolName: subagent_fork
315
+ backgroundMode: continuable
316
+ - id: tool-subagent-codex
317
+ name: '@deepseek-ai/dsh-tool-subagent'
318
+ disabled: true
319
+ config:
320
+ provider: codex
321
+ toolName: subagent_codex
322
+ backgroundMode: one-shot
323
+ maxDepth: provider-managed
324
+ - id: tool-subagent-claude-code
325
+ name: '@deepseek-ai/dsh-tool-subagent'
326
+ disabled: true
327
+ config:
328
+ provider: claude-code
329
+ toolName: subagent_claude_code
330
+ backgroundMode: one-shot
331
+ maxDepth: provider-managed
332
+ - id: workflow-ptc
333
+ name: '@deepseek-ai/dsh-workflow-ptc'
334
+ disabled: true
335
+ config:
336
+ provider: spawn
337
+ - id: tool-workflow
338
+ name: '@deepseek-ai/dsh-tool-workflow'
339
+ disabled: true
340
+ - id: tool-ralph
341
+ name: '@deepseek-ai/dsh-tool-ralph'
342
+ disabled: true
343
+ config:
344
+ subagentProvider: spawn
345
+ maxRounds: 64
346
+ - id: tool-ask-user
347
+ name: '@deepseek-ai/dsh-tool-ask-user'
348
+ - id: tool-todo
349
+ name: '@deepseek-ai/dsh-tool-todo'
350
+ config:
351
+ allowParallelInProgress: true
352
+ - id: tool-web
353
+ name: '@deepseek-ai/dsh-tool-web'
354
+ config:
355
+ fetch: true
356
+ searchTimeoutMs: 60000
357
+ - id: tool-presentation
358
+ name: '@deepseek-ai/dsh-agent-tool-presentation'
359
+ config:
360
+ mode: ptc
361
+ - id: present
362
+ name: '@deepseek-ai/dsh-tool-present'
363
+ - id: tool-plugin-manager
364
+ name: '@deepseek-ai/dsh-plugin-manager/tools'
365
+ disabled: true
366
+
367
+ # -----------------------------------------------------------------------------
368
+ # minimal — shipped list verbatim (persistent shell); the shipped persona has
369
+ # no suffix, so this override adds the doctrine suffix. The shared suffix also
370
+ # carries the "{{cwd}}" line: minimal's persistent shell tools need the working
371
+ # directory, and the variable is registered host-wide regardless of the
372
+ # persona's includeRuntimeContext: false.
373
+ # -----------------------------------------------------------------------------
374
+ - id: preset-minimal
375
+ name: '@deepseek-ai/dsh-agent-preset'
376
+ config:
377
+ id: minimal
378
+ order: 3
379
+ plugins:
380
+ - id: persona
381
+ name: '@deepseek-ai/dsh-persona'
382
+ config:
383
+ prefix: You are a helpful software engineer assistant.
384
+ complete: true
385
+ includeRuntimeContext: false
386
+ suffix: *switchman-team-suffix
387
+ - id: persistent-shell
388
+ name: cordis:group
389
+ group: true
390
+ isolate:
391
+ terminals: true
392
+ config:
393
+ - id: pty
394
+ name: '@deepseek-ai/dsh-terminal'
395
+ - id: terminal-bash
396
+ name: '@deepseek-ai/dsh-terminal-bash'
397
+ disabled: !!js process.platform === 'win32'
398
+ config:
399
+ timeoutMs: 300000
400
+ - id: persistent-bash
401
+ name: '@deepseek-ai/dsh-tool-bash-persistent'
402
+ disabled: !!js process.platform === 'win32'
403
+ config:
404
+ timeoutMs: 300000
405
+ description: |-
406
+ Run commands in a bash shell
407
+ * When invoking this tool, the contents of the "command" parameter does NOT need to be XML-escaped.
408
+ * Network access depends on the task environment. Prefer configured mirrors/proxies when they are available.
409
+ * State is persistent across command calls and discussions with the user.
410
+ * To inspect a particular line range of a file, e.g. lines 10-25, try 'sed -n 10,25p /path/to/the/file'.
411
+ * Please avoid commands that may produce a very large amount of output.
412
+ * Please run long lived commands in the background, e.g. 'sleep 10 &' or start a server in the background.
413
+ - id: terminal-pwsh
414
+ name: '@deepseek-ai/dsh-terminal-bash'
415
+ disabled: !!js process.platform !== 'win32'
416
+ config:
417
+ shellDialect: pwsh
418
+ timeoutMs: 300000
419
+ - id: persistent-pwsh
420
+ name: '@deepseek-ai/dsh-tool-pwsh-persistent'
421
+ disabled: !!js process.platform !== 'win32'
422
+ config:
423
+ timeoutMs: 300000
424
+ description: |-
425
+ Run commands in a PowerShell shell
426
+ * When invoking this tool, the contents of the "command" parameter does NOT need to be XML-escaped.
427
+ * You don't have access to the internet via this tool.
428
+ * State is persistent across command calls and discussions with the user.
429
+ * Use native Windows paths (C:\...) and $env:NAME variables; this is PowerShell, not bash.
430
+ * Please avoid commands that may produce a very large amount of output.
431
+ * Please run long lived commands in the background, e.g. 'Start-Job' or start a server with Start-Process.
432
+
433
+ # -----------------------------------------------------------------------------
434
+ # cordis — shipped list verbatim (cordis tooling, bundled skills directory,
435
+ # plugin-manager tools for profile-context sessions); persona suffix replaced
436
+ # by the shared doctrine suffix.
437
+ # -----------------------------------------------------------------------------
438
+ - id: preset-cordis
439
+ name: '@deepseek-ai/dsh-agent-preset'
440
+ config:
441
+ id: cordis
442
+ order: 4
443
+ plugins:
444
+ - id: persona
445
+ name: '@deepseek-ai/dsh-persona'
446
+ config:
447
+ prefix: You are a coding agent powered by the {{model}} model.
448
+ suffix: *switchman-team-suffix
449
+ - id: agent-instructions
450
+ name: '@deepseek-ai/dsh-agent-instructions'
451
+ config:
452
+ maxBytes: 65536
453
+ - id: tool-bash
454
+ name: '@deepseek-ai/dsh-tool-bash'
455
+ disabled: !!js process.platform === 'win32'
456
+ - id: tool-pwsh
457
+ name: '@deepseek-ai/dsh-tool-pwsh'
458
+ disabled: !!js process.platform !== 'win32'
459
+ - id: tool-fs
460
+ name: '@deepseek-ai/dsh-tool-fs'
461
+ - id: tool-fs-search
462
+ name: '@deepseek-ai/dsh-tool-fs-search'
463
+ config:
464
+ sampleOverCapGlobResults: false
465
+ - id: tool-jobs
466
+ name: '@deepseek-ai/dsh-tool-jobs'
467
+ - id: command-goal
468
+ name: '@deepseek-ai/dsh-command-goal'
469
+ - id: tool-goal
470
+ name: '@deepseek-ai/dsh-tool-goal'
471
+ - id: planning
472
+ name: cordis:group
473
+ group: true
474
+ isolate:
475
+ planMode: true
476
+ config:
477
+ - id: plan-mode
478
+ name: '@deepseek-ai/dsh-plan-mode'
479
+ config:
480
+ section: |
481
+ 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.
482
+
483
+ 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.
484
+
485
+ 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.
486
+
487
+ 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.
488
+
489
+ 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.
490
+
491
+ 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.
492
+ - id: compaction
493
+ name: cordis:group
494
+ group: true
495
+ isolate:
496
+ compaction: true
497
+ toolResultPruner: true
498
+ config:
499
+ - id: compaction-basic
500
+ name: '@deepseek-ai/dsh-compaction-basic'
501
+ - id: command-compact
502
+ name: '@deepseek-ai/dsh-command-compact'
503
+ - id: tool-result-pruner
504
+ name: '@deepseek-ai/dsh-compaction-tool-result-pruner'
505
+ config:
506
+ thresholdChars: 8192
507
+ headChars: 4096
508
+ tailChars: 1024
509
+ - id: delegation
510
+ name: cordis:group
511
+ group: true
512
+ isolate:
513
+ workflowEngine: true
514
+ config:
515
+ - id: tool-subagent-control
516
+ name: '@deepseek-ai/dsh-tool-subagent-control'
517
+ - id: tool-subagent-list-agents
518
+ name: '@deepseek-ai/dsh-tool-subagent-control/list-agents'
519
+ - id: tool-subagent
520
+ name: '@deepseek-ai/dsh-tool-subagent'
521
+ config:
522
+ provider: spawn
523
+ toolName: subagent
524
+ modelSelectionSettings: true
525
+ backgroundMode: continuable
526
+ - id: tool-subagent-fork
527
+ name: '@deepseek-ai/dsh-tool-subagent'
528
+ config:
529
+ provider: fork
530
+ toolName: subagent_fork
531
+ backgroundMode: continuable
532
+ - id: tool-subagent-codex
533
+ name: '@deepseek-ai/dsh-tool-subagent'
534
+ disabled: true
535
+ config:
536
+ provider: codex
537
+ toolName: subagent_codex
538
+ backgroundMode: one-shot
539
+ maxDepth: provider-managed
540
+ - id: tool-subagent-claude-code
541
+ name: '@deepseek-ai/dsh-tool-subagent'
542
+ disabled: true
543
+ config:
544
+ provider: claude-code
545
+ toolName: subagent_claude_code
546
+ backgroundMode: one-shot
547
+ maxDepth: provider-managed
548
+ - id: workflow-ptc
549
+ name: '@deepseek-ai/dsh-workflow-ptc'
550
+ config:
551
+ provider: spawn
552
+ - id: tool-workflow
553
+ name: '@deepseek-ai/dsh-tool-workflow'
554
+ - id: tool-ralph
555
+ name: '@deepseek-ai/dsh-tool-ralph'
556
+ disabled: true
557
+ config:
558
+ subagentProvider: spawn
559
+ maxRounds: 64
560
+ - id: tool-ask-user
561
+ name: '@deepseek-ai/dsh-tool-ask-user'
562
+ - id: tool-todo
563
+ name: '@deepseek-ai/dsh-tool-todo'
564
+ config:
565
+ allowParallelInProgress: true
566
+ - id: tool-web
567
+ name: '@deepseek-ai/dsh-tool-web'
568
+ config:
569
+ fetch: true
570
+ searchTimeoutMs: 60000
571
+ - id: tool-cordis
572
+ name: '@deepseek-ai/dsh-tool-cordis'
573
+ - id: skill-filesystem
574
+ name: '@deepseek-ai/dsh-skill-filesystem'
575
+ config:
576
+ customSkillDirs:
577
+ - !!js process.getBuiltinModule('node:path').join(process.getBuiltinModule('node:path').dirname(process.getBuiltinModule('node:module').createRequire(baseUrl).resolve('@deepseek-ai/dsh-agent-preset/package.json')), 'skills')
578
+ - id: tool-skill
579
+ name: '@deepseek-ai/dsh-tool-skill'
580
+ - id: present
581
+ name: '@deepseek-ai/dsh-tool-present'
582
+ - id: tool-plugin-manager
583
+ name: '@deepseek-ai/dsh-plugin-manager/tools'
584
+ disabled: !!js "!ctx.get('profileContext')"
585
+
586
+ # -----------------------------------------------------------------------------
587
+ # The bundle's own plugin row. The Host half (index.js) registers the bundled
588
+ # skills provider on ctx.skills (skills/<name>/SKILL.md → source "bundled");
589
+ # the preset overrides above are pure patch data. The Client half (client.js)
590
+ # renders a small "team autonomy" badge into `conversation.session.header.actions`
591
+ # (order -9, right after the agent-preset chip at order -10) so the doctrine's
592
+ # presence is visible at a glance — the built-in preset picker shows only its
593
+ # own i18n copy and ignores declaration name/description fields. Client-half
594
+ # discovery itself is driven by the `dsh.client` declaration in package.json
595
+ # and does not depend on this row.
596
+ # -----------------------------------------------------------------------------
597
+ - insert:
598
+ - id: dsh-switchman-host
599
+ name: dsh-switchman