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.
- package/LICENSE +21 -0
- package/README.md +79 -0
- package/README.zh.md +79 -0
- package/client.js +2441 -0
- package/cordis.patch.yml +599 -0
- package/host/config.js +116 -0
- package/host/context-watch.js +620 -0
- package/host/data/capability-default.json +1097 -0
- package/host/dispatch.js +205 -0
- package/host/lang.js +182 -0
- package/host/lib/rank.js +187 -0
- package/host/routes.js +398 -0
- package/icon.svg +7 -0
- package/index.js +154 -0
- package/locale/en.json +6 -0
- package/locale/zh.json +6 -0
- package/package.json +70 -0
- package/skills/db-query/SKILL.md +322 -0
- package/skills/db-query/package-lock.json +251 -0
- package/skills/db-query/package.json +20 -0
- package/skills/db-query/references/mysql.md +137 -0
- package/skills/db-query/references/redis.md +213 -0
- package/skills/db-query/references/security.md +176 -0
- package/skills/db-query/scripts/lib/cli.js +118 -0
- package/skills/db-query/scripts/lib/config.js +215 -0
- package/skills/db-query/scripts/lib/mysql-readonly.js +655 -0
- package/skills/db-query/scripts/lib/output.js +322 -0
- package/skills/db-query/scripts/lib/redis-readonly.js +362 -0
- package/skills/db-query/scripts/mysql-query.js +198 -0
- package/skills/db-query/scripts/redis-query.js +181 -0
- package/skills/db-query/scripts/setup.sh +51 -0
- package/skills/git-commit-message/SKILL.md +49 -0
- package/skills/requirement-docs/SKILL.md +38 -0
- package/skills/requirement-docs/references/templates.md +187 -0
package/cordis.patch.yml
ADDED
|
@@ -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
|