@xiaoso/dsh-tool-plus 0.1.9 → 0.1.10-beta.1

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.
Files changed (40) hide show
  1. package/README.en.md +12 -5
  2. package/README.md +11 -4
  3. package/THIRD_PARTY_NOTICES.md +36 -0
  4. package/lib/client.js +272 -181
  5. package/lib/index.mjs +875 -1081
  6. package/lib/{scrapers-mhvFrvjH.mjs → scrapers-DODCPcZW.mjs} +1 -1
  7. package/lib/types/client/BashPlusCard.d.ts +6 -6
  8. package/lib/types/client/ToolPlusSection.d.ts +3 -3
  9. package/lib/types/client/forms.d.ts +6 -6
  10. package/lib/types/client/index.d.ts +25 -12
  11. package/lib/types/client/locales.d.ts +1 -1
  12. package/lib/types/client/preset-panel.d.ts +54 -42
  13. package/lib/types/config/settings.d.ts +202 -21
  14. package/lib/types/host/browser-probe-rpc.d.ts +2 -1
  15. package/lib/types/host/preset-host.d.ts +103 -0
  16. package/lib/types/host/preset-rpc.d.ts +37 -72
  17. package/lib/types/presets/compare.d.ts +14 -37
  18. package/lib/types/presets/conflicts.d.ts +59 -0
  19. package/lib/types/presets/delta.d.ts +23 -18
  20. package/lib/types/presets/plan.d.ts +55 -0
  21. package/lib/types/presets/rows.d.ts +84 -0
  22. package/lib/types/presets/status.d.ts +56 -47
  23. package/lib/types/tools/bash/background.d.ts +20 -5
  24. package/lib/types/tools/bash/streaming-output.d.ts +4 -2
  25. package/lib/types/tools/shared/browser-rpc-channel.d.ts +84 -42
  26. package/lib/types/web/client/labels.d.ts +1 -1
  27. package/lib/types/web/client/row-utils.d.ts +26 -1
  28. package/lib/{utils-eiUz9n8I.mjs → utils-D80w8vry.mjs} +1 -1
  29. package/package.json +61 -46
  30. package/presets/tool-plus-ptc.patch.yml +164 -0
  31. package/presets/tool-plus-standard.patch.yml +158 -0
  32. package/lib/types/presets/install.d.ts +0 -44
  33. package/lib/types/presets/paths.d.ts +0 -41
  34. package/lib/types/presets/rewrite.d.ts +0 -86
  35. package/presets/install-presets.mjs +0 -143
  36. package/presets/package.json +0 -42
  37. package/presets/tool-plus-ptc/agent.cordis.yml +0 -284
  38. package/presets/tool-plus-ptc/preset.yml +0 -3
  39. package/presets/tool-plus-standard/agent.cordis.yml +0 -269
  40. package/presets/tool-plus-standard/preset.yml +0 -3
@@ -1,284 +0,0 @@
1
- # The `tool-plus-ptc` agent preset: the PTC (Code Mode) coding agent with the
2
- # official file/shell toolset replaced by @xiaoso/dsh-tool-plus (OMP port).
3
- #
4
- # Packaged template of @xiaoso/dsh-tool-plus (repo folder
5
- # `presets/tool-plus-ptc/`). Install into a running DSH with:
6
- #
7
- # node presets/install-presets.mjs # first install; re-run is safe
8
- # node presets/install-presets.mjs --force # discard local edits, restore canonical
9
- #
10
- # The script copies this directory to `${DSH_HOME:-~/.dsh}/.agent-presets/`.
11
- #
12
- # WHERE THE TOOLSET ACTUALLY REGISTERS: the @xiaoso/dsh-tool-plus PACKAGE,
13
- # once loaded on the host plane (profile plugin / profile bundle), ships a
14
- # bundle patch that disables the official tool-bash / tool-pwsh / tool-fs /
15
- # tool-fs-search rows and inserts ONE global `tool-plus` row there. Registries
16
- # keep per-scope tables and resolve session tools nearest-layer-first, so that
17
- # host-plane registration serves every preset with no preset row at all — an
18
- # agent-plane duplicate would instead shadow the healthy host instance with a
19
- # second apply() whose settings injection never fires (cfg falls back to
20
- # replace-mode reads: the 2026-08-25 hashline root cause). Hence the tool-plus
21
- # row below ships DISABLED ON PURPOSE: it only documents where a preset-row
22
- # setup would go (a deployment that loads the plugin nowhere else may remove
23
- # the `disabled` line — understand the tradeoff above first).
24
- #
25
- # Changes versus the shipped `code` preset beyond that: the official
26
- # tool-pwsh row is kept DISABLED by user decision — both enhanced presets
27
- # (标准增强版 / PTC 增强版) ship without pwsh; OMP bash covers the shell
28
- # scenarios. Everything else — persona, jobs, skills, goals, plan mode,
29
- # compaction, delegation, ask-user, todo, web, and the Code Mode
30
- # `tool-presentation` row — is unchanged from `code`.
31
- #
32
- # This file is an AGENT-PLANE composition. It is mounted under one agent's
33
- # scope context, so every tool and prompt section it registers belongs to that
34
- # session alone. The host composition (`base.cordis.yml` + `web.cordis.yml`)
35
- # keeps everything a preset must not own: the registries themselves, the
36
- # sandbox and approval stack, persistence, and the model route.
37
- #
38
- # A service row here MUST sit inside a group carrying an `isolate` realm.
39
- # Without one it publishes into the root realm, where it is process-global
40
- # rather than per-session and the second session mounting this preset collides
41
- # with the first; `dsh-agent-presets` rejects that at mount. `true` means an
42
- # entry-local realm — one private instance per mounted session, which is the
43
- # default this deployment wants. A shared label would instead pool one instance
44
- # across every session naming it.
45
-
46
- # ── identity ────────────────────────────────────────────────────────────────
47
-
48
- # The preset's own persona, shadowing the deployment default for this agent.
49
- # `{{model}}` and `{{cwd}}` resolve from the agent's own route and workspace.
50
- - id: persona
51
- name: '@deepseek-ai/dsh-persona'
52
- config:
53
- suffix: Your working directory is {{cwd}}.
54
- prefix: >-
55
- You are a coding agent powered by the {{model}} model.
56
-
57
- - id: agent-instructions
58
- name: '@deepseek-ai/dsh-agent-instructions'
59
- config:
60
- maxBytes: 65536
61
-
62
- # ── shell + filesystem: served by the host plane (pwsh 默认禁用) ────────────
63
-
64
- # Official tool-bash / tool-fs / tool-fs-search are intentionally ABSENT here:
65
- # when the plugin package is loaded on the host plane those rows are already
66
- # disabled by its bundle patch and the global `tool-plus` row serves every
67
- # session joining this preset. Re-registering the toolset in this file would
68
- # create a per-session shadow instance (see the file header).
69
- - id: tool-plus
70
- name: '@xiaoso/dsh-tool-plus'
71
- disabled: true
72
-
73
- # Official pwsh DISABLED by user decision (增强的标准版与增强的 PTC 均不启用
74
- # pwsh)。需要启用时删除下一行即可恢复 standard/code 的平台 gating。
75
- - id: tool-pwsh
76
- name: '@deepseek-ai/dsh-tool-pwsh'
77
- disabled: true
78
-
79
- # ── background jobs ────────────────────────────────────────────────────────
80
-
81
- # Only the model-facing controls. The task REGISTRY stays on the host plane:
82
- # its producers sit outside any realm this file could put it in — an entry-local
83
- # realm here is invisible to every sibling row, so `run_in_background` would
84
- # answer "background jobs unavailable" while these controls sat in the catalog.
85
- # The registry is keyed by owning agent anyway, so one host instance serves
86
- # every session. What a preset chooses is whether its agent can collect and
87
- # stop background work at all.
88
- - id: tool-jobs
89
- name: '@deepseek-ai/dsh-tool-jobs'
90
-
91
- # ── skills ──────────────────────────────────────────────────────────────────
92
-
93
- # The skill REGISTRY lives in the host composition and is layered per scope:
94
- # these rows register into THIS preset's layer of it, so they need no realm.
95
- # `skill-filesystem` contributes local-root discovery for agents on this preset, and
96
- # `tool-skill` gives them the catalog and loader; the merged catalog also
97
- # carries whatever the deployment registered globally (repository plugins).
98
- - id: skill-filesystem
99
- name: '@deepseek-ai/dsh-skill-filesystem'
100
-
101
- - id: tool-skill
102
- name: '@deepseek-ai/dsh-tool-skill'
103
-
104
- # ── goals ───────────────────────────────────────────────────────────────────
105
-
106
- # Only the model-facing tool. The goal SERVICE, its session driver, and the
107
- # `/goal` command stay on the host plane: the Gateway serves the goal domain as
108
- # Remote endpoints whose receiver comes from a generated descriptor, so it
109
- # resolves `goals` on the host and an entry-local realm here would hide it. The
110
- # registry is keyed by session anyway, so one host instance serves every
111
- # session. What a preset chooses is whether its agent can call the goal tool.
112
- - id: command-goal
113
- name: '@deepseek-ai/dsh-command-goal'
114
-
115
- - id: tool-goal
116
- name: '@deepseek-ai/dsh-tool-goal'
117
-
118
- # ── plan mode ───────────────────────────────────────────────────────────────
119
-
120
- # Plan state is per-agent by nature, so an entry-local realm is not a
121
- # workaround here — it is the correct lifetime.
122
- - id: planning
123
- name: cordis:group
124
- group: true
125
- isolate:
126
- planMode: true
127
- config:
128
- - id: plan-mode
129
- name: '@deepseek-ai/dsh-plan-mode'
130
- config:
131
- section: |
132
- 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.
133
-
134
- 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.
135
-
136
- 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.
137
-
138
- 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.
139
-
140
- 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.
141
-
142
- 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.
143
-
144
- # ── compaction ──────────────────────────────────────────────────────────────
145
-
146
- # `compaction-basic` reads `toolResultPrune` through `ctx.get`, so the pruner must
147
- # share this realm rather than sit outside it.
148
- #
149
- # `tokenMeter` is deliberately NOT in this realm: the meter stays on the HOST
150
- # plane, and the rows here resolve that one instance. It takes no configuration,
151
- # keys every fold by Session, and owns the context-meter projection units the
152
- # browser reads for every session — behind a realm those units would come and go
153
- # with whichever presets happen to be mounted. What a preset chooses is whether
154
- # its agent compacts at all, which is `compaction-basic` below.
155
- - id: compaction
156
- name: cordis:group
157
- group: true
158
- isolate:
159
- compaction: true
160
- toolResultPruner: true
161
- config:
162
- - id: compaction-basic
163
- name: '@deepseek-ai/dsh-compaction-basic'
164
-
165
- - id: command-compact
166
- name: '@deepseek-ai/dsh-command-compact'
167
-
168
- - id: tool-result-pruner
169
- name: '@deepseek-ai/dsh-compaction-tool-result-pruner'
170
- config:
171
- thresholdChars: 8192
172
- headChars: 4096
173
- tailChars: 1024
174
-
175
- # ── delegation and workflows ────────────────────────────────────────────────
176
-
177
- # The `subagents` registry and its spawn/fork backends live in the HOST
178
- # composition: the registry is a process singleton whose cross-session queries
179
- # the api-proxy serves to the browser, and a provider name may only be
180
- # registered once. This preset contributes the delegation TOOLS, which resolve
181
- # that host registry.
182
- #
183
- # `workflows` is different — nothing outside an agent reads it — so every row
184
- # that reaches it shares one entry-local realm here, and a consumer left
185
- # outside would resolve a host registry this preset does not populate.
186
- #
187
- # `tool-subagent-report` is host-plane for the same reason as the registry,
188
- # not because a preset may not want it: it registers a CONTINUABLE SETUP on
189
- # that singleton rather than a tool this agent calls, and the setup list is
190
- # not scope-aware — one copy per mounted preset means every child gets
191
- # `report` registered once per live session, which throws on the second.
192
- - id: delegation
193
- name: cordis:group
194
- group: true
195
- isolate:
196
- workflowEngine: true
197
- config:
198
- - id: tool-subagent-control
199
- name: '@deepseek-ai/dsh-tool-subagent-control'
200
-
201
- - id: tool-subagent-list-agents
202
- name: '@deepseek-ai/dsh-tool-subagent-control/list-agents'
203
-
204
- - id: tool-subagent
205
- name: '@deepseek-ai/dsh-tool-subagent'
206
- config:
207
- provider: spawn
208
- toolName: subagent
209
- modelSelectionSettings: true
210
- backgroundMode: continuable
211
-
212
- - id: tool-subagent-fork
213
- name: '@deepseek-ai/dsh-tool-subagent'
214
- config:
215
- provider: fork
216
- toolName: subagent_fork
217
- backgroundMode: continuable
218
-
219
- # Production dsh does not install these optional providers. An opting-in
220
- # Profile mounts each provider once on the host plane; copy this preset,
221
- # then remove `disabled` from the matching tool row.
222
- - id: tool-subagent-codex
223
- name: '@deepseek-ai/dsh-tool-subagent'
224
- disabled: true
225
- config:
226
- provider: codex
227
- toolName: subagent_codex
228
- backgroundMode: one-shot
229
- maxDepth: provider-managed
230
-
231
- - id: tool-subagent-claude-code
232
- name: '@deepseek-ai/dsh-tool-subagent'
233
- disabled: true
234
- config:
235
- provider: claude-code
236
- toolName: subagent_claude_code
237
- backgroundMode: one-shot
238
- maxDepth: provider-managed
239
-
240
- - id: workflow-worker-thread
241
- name: '@deepseek-ai/dsh-workflow-worker-thread'
242
- config:
243
- provider: spawn
244
-
245
- - id: tool-workflow
246
- name: '@deepseek-ai/dsh-tool-workflow'
247
- disabled: true
248
-
249
- - id: tool-ralph
250
- name: '@deepseek-ai/dsh-tool-ralph'
251
- config:
252
- subagentProvider: spawn
253
- maxRounds: 64
254
-
255
- # ── remaining model-facing rows ─────────────────────────────────────────────
256
-
257
- - id: tool-ask-user
258
- name: '@deepseek-ai/dsh-tool-ask-user'
259
-
260
- - id: tool-todo
261
- name: '@deepseek-ai/dsh-tool-todo'
262
- config:
263
- allowParallelInProgress: true
264
-
265
- # The `web` service and its search provider stay in the host composition; only
266
- # the model-facing tool is per-session.
267
- - id: tool-web
268
- name: '@deepseek-ai/dsh-tool-web'
269
- config:
270
- fetch: false
271
- searchTimeoutMs: 60000
272
-
273
- - id: present
274
- name: '@deepseek-ai/dsh-tool-present'
275
-
276
- # ── presentation ────────────────────────────────────────────────────────────
277
-
278
- # Code Mode for this agent alone. The row waits for the host's `codeRuntime`
279
- # rather than assuming it: a deployment that composes no TypeScript runtime
280
- # fails this preset at mount, naming this id, instead of at the first request.
281
- - id: tool-presentation
282
- name: '@deepseek-ai/dsh-agent-tool-presentation'
283
- config:
284
- mode: ptc
@@ -1,3 +0,0 @@
1
- name: Tool Plus PTC 增强版
2
- description: PTC 模式全部能力 + tool-plus 增强:文件/Shell 工具集替换为 @xiaoso/dsh-tool-plus(移植 oh-my-pi:read 单参数 file_path 内联行选择器、edit 三模式、bash/grep/glob),经 Code Mode SDK 以 run_code 组合多步操作;pwsh 默认禁用。
3
- order: 3
@@ -1,269 +0,0 @@
1
- # The `tool-plus-standard` agent preset: the standard full coding agent with
2
- # the official file/shell toolset replaced by @xiaoso/dsh-tool-plus (OMP port).
3
- #
4
- # Packaged template of @xiaoso/dsh-tool-plus (repo folder
5
- # `presets/tool-plus-standard/`). Install into a running DSH with:
6
- #
7
- # node presets/install-presets.mjs # first install; re-run is safe
8
- # node presets/install-presets.mjs --force # discard local edits, restore canonical
9
- #
10
- # The script copies this directory to `${DSH_HOME:-~/.dsh}/.agent-presets/`.
11
- #
12
- # WHERE THE TOOLSET ACTUALLY REGISTERS: the @xiaoso/dsh-tool-plus PACKAGE,
13
- # once loaded on the host plane (profile plugin / profile bundle), ships a
14
- # bundle patch that disables the official tool-bash / tool-pwsh / tool-fs /
15
- # tool-fs-search rows and inserts ONE global `tool-plus` row there. Registries
16
- # keep per-scope tables and resolve session tools nearest-layer-first, so that
17
- # host-plane registration serves every preset with no preset row at all — an
18
- # agent-plane duplicate would instead shadow the healthy host instance with a
19
- # second apply() whose settings injection never fires (cfg falls back to
20
- # replace-mode reads: the 2026-08-25 hashline root cause). Hence the tool-plus
21
- # row below ships DISABLED ON PURPOSE: it only documents where a preset-row
22
- # setup would go (a deployment that loads the plugin nowhere else may remove
23
- # the `disabled` line — understand the tradeoff above first).
24
- #
25
- # This file is an AGENT-PLANE composition. The roster mounts it ONCE under a
26
- # standing scope; every session naming it joins by scope parentage, so the
27
- # tools and prompt sections registered here cover each joined agent while a
28
- # session's own state stays keyed per Session/Agent inside the plugins. The
29
- # host composition (`base.cordis.yml` + `web.cordis.yml`) keeps everything a
30
- # preset must not own: the registries themselves, the sandbox and approval
31
- # stack, persistence, and the model route.
32
- #
33
- # A service row here MUST sit inside a group carrying an `isolate` realm.
34
- # Without one it publishes into the root realm, where it is process-global —
35
- # another preset publishing the same name collides, and a host reader would
36
- # resolve one preset's instance for every session; `dsh-agent-presets` rejects
37
- # that at mount. `true` means an entry-local realm: this standing mount's own
38
- # private instance, apart from every other preset's. (A shared label does NOT
39
- # pool instances — `provide()` throws on the second registration under the
40
- # same realm symbol; labels join REALMS, and are not what this file needs.)
41
-
42
- # ── identity ────────────────────────────────────────────────────────────────
43
-
44
- # The preset's own persona, shadowing the deployment default for this agent.
45
- # `{{model}}` and `{{cwd}}` resolve from the agent's own route and workspace.
46
- - id: persona
47
- name: '@deepseek-ai/dsh-persona'
48
- config:
49
- suffix: Your working directory is {{cwd}}.
50
- prefix: >-
51
- You are a coding agent powered by the {{model}} model.
52
-
53
- - id: agent-instructions
54
- name: '@deepseek-ai/dsh-agent-instructions'
55
- config:
56
- maxBytes: 65536
57
-
58
- # ── shell + filesystem: served by the host plane (+ official pwsh) ─────────
59
-
60
- # Official tool-bash / tool-fs / tool-fs-search are intentionally ABSENT here:
61
- # when the plugin package is loaded on the host plane those rows are already
62
- # disabled by its bundle patch and the global `tool-plus` row serves every
63
- # session joining this preset. Re-registering the toolset in this file would
64
- # create a per-session shadow instance (see the file header).
65
- - id: tool-plus
66
- name: '@xiaoso/dsh-tool-plus'
67
- disabled: true
68
-
69
- # Official pwsh DISABLED by user decision (增强的标准版与增强的 PTC 均不启用
70
- # pwsh,OMP bash 覆盖 shell 场景)。需要时把下一行改为平台 gating 或删除即可。
71
- - id: tool-pwsh
72
- name: '@deepseek-ai/dsh-tool-pwsh'
73
- disabled: true
74
-
75
- # ── background jobs ────────────────────────────────────────────────────────
76
-
77
- # Only the model-facing controls. The task REGISTRY stays on the host plane:
78
- # its producers sit outside any realm this file could put it in — an entry-local
79
- # realm here is invisible to every sibling row, so `run_in_background` would
80
- # answer "background jobs unavailable" while these controls sat in the catalog.
81
- # The registry is keyed by owning agent anyway, so one host instance serves
82
- # every session. What a preset chooses is whether its agent can collect and
83
- # stop background work at all.
84
- - id: tool-jobs
85
- name: '@deepseek-ai/dsh-tool-jobs'
86
-
87
- # ── skills ──────────────────────────────────────────────────────────────────
88
-
89
- # The skill REGISTRY lives in the host composition and is layered per scope:
90
- # these rows register into THIS preset's layer of it, so they need no realm.
91
- # `skill-filesystem` contributes local-root discovery for agents on this preset, and
92
- # `tool-skill` gives them the catalog and loader; the merged catalog also
93
- # carries whatever the deployment registered globally (repository plugins).
94
- - id: skill-filesystem
95
- name: '@deepseek-ai/dsh-skill-filesystem'
96
-
97
- - id: tool-skill
98
- name: '@deepseek-ai/dsh-tool-skill'
99
-
100
- # ── goals ───────────────────────────────────────────────────────────────────
101
-
102
- # Only the model-facing tool. The goal SERVICE, its session driver, and the
103
- # `/goal` command stay on the host plane: the Gateway serves the goal domain as
104
- # Remote endpoints whose receiver comes from a generated descriptor, so it
105
- # resolves `goals` on the host and an entry-local realm here would hide it. The
106
- # registry is keyed by session anyway, so one host instance serves every
107
- # session. What a preset chooses is whether its agent can call the goal tool.
108
- - id: command-goal
109
- name: '@deepseek-ai/dsh-command-goal'
110
-
111
- - id: tool-goal
112
- name: '@deepseek-ai/dsh-tool-goal'
113
-
114
- # ── plan mode ───────────────────────────────────────────────────────────────
115
-
116
- # Plan state is per-agent by nature, so an entry-local realm is not a
117
- # workaround here — it is the correct lifetime.
118
- - id: planning
119
- name: cordis:group
120
- group: true
121
- isolate:
122
- planMode: true
123
- config:
124
- - id: plan-mode
125
- name: '@deepseek-ai/dsh-plan-mode'
126
- config:
127
- section: |
128
- 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.
129
-
130
- 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.
131
-
132
- 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.
133
-
134
- 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.
135
-
136
- 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.
137
-
138
- 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.
139
-
140
- # ── compaction ──────────────────────────────────────────────────────────────
141
-
142
- # `compaction-basic` reads `toolResultPrune` through `ctx.get`, so the pruner must
143
- # share this realm rather than sit outside it.
144
- #
145
- # `tokenMeter` is deliberately NOT in this realm: the meter stays on the HOST
146
- # plane, and the rows here resolve that one instance. It takes no configuration,
147
- # keys every fold by Session, and owns the context-meter projection units the
148
- # browser reads for every session — behind a realm those units would come and go
149
- # with whichever presets happen to be mounted. What a preset chooses is whether
150
- # its agent compacts at all, which is `compaction-basic` below.
151
- - id: compaction
152
- name: cordis:group
153
- group: true
154
- isolate:
155
- compaction: true
156
- toolResultPruner: true
157
- config:
158
- - id: compaction-basic
159
- name: '@deepseek-ai/dsh-compaction-basic'
160
-
161
- - id: command-compact
162
- name: '@deepseek-ai/dsh-command-compact'
163
-
164
- - id: tool-result-pruner
165
- name: '@deepseek-ai/dsh-compaction-tool-result-pruner'
166
- config:
167
- thresholdChars: 8192
168
- headChars: 4096
169
- tailChars: 1024
170
-
171
- # ── delegation and workflows ────────────────────────────────────────────────
172
-
173
- # The `subagents` registry and its spawn/fork backends live in the HOST
174
- # composition: the registry is a process singleton whose cross-session queries
175
- # the api-proxy serves to the browser, and a provider name may only be
176
- # registered once. This preset contributes the delegation TOOLS, which resolve
177
- # that host registry.
178
- #
179
- # `workflows` is different — nothing outside an agent reads it — so every row
180
- # that reaches it shares one entry-local realm here, and a consumer left
181
- # outside would resolve a host registry this preset does not populate.
182
- #
183
- # `tool-subagent-report` is host-plane for the same reason as the registry,
184
- # not because a preset may not want it: it registers a CONTINUABLE SETUP on
185
- # that singleton rather than a tool this agent calls, and the setup list is
186
- # not scope-aware — one copy per mounted preset means every child gets
187
- # `report` registered once per live session, which throws on the second.
188
- - id: delegation
189
- name: cordis:group
190
- group: true
191
- isolate:
192
- workflowEngine: true
193
- config:
194
- - id: tool-subagent-control
195
- name: '@deepseek-ai/dsh-tool-subagent-control'
196
-
197
- - id: tool-subagent-list-agents
198
- name: '@deepseek-ai/dsh-tool-subagent-control/list-agents'
199
-
200
- - id: tool-subagent
201
- name: '@deepseek-ai/dsh-tool-subagent'
202
- config:
203
- provider: spawn
204
- toolName: subagent
205
- modelSelectionSettings: true
206
- backgroundMode: continuable
207
-
208
- - id: tool-subagent-fork
209
- name: '@deepseek-ai/dsh-tool-subagent'
210
- config:
211
- provider: fork
212
- toolName: subagent_fork
213
- backgroundMode: continuable
214
-
215
- # Production dsh does not install these optional providers. An opting-in
216
- # Profile mounts each provider once on the host plane; copy this preset,
217
- # then remove `disabled` from the matching tool row.
218
- - id: tool-subagent-codex
219
- name: '@deepseek-ai/dsh-tool-subagent'
220
- disabled: true
221
- config:
222
- provider: codex
223
- toolName: subagent_codex
224
- backgroundMode: one-shot
225
- maxDepth: provider-managed
226
-
227
- - id: tool-subagent-claude-code
228
- name: '@deepseek-ai/dsh-tool-subagent'
229
- disabled: true
230
- config:
231
- provider: claude-code
232
- toolName: subagent_claude_code
233
- backgroundMode: one-shot
234
- maxDepth: provider-managed
235
-
236
- - id: workflow-worker-thread
237
- name: '@deepseek-ai/dsh-workflow-worker-thread'
238
- config:
239
- provider: spawn
240
-
241
- - id: tool-workflow
242
- name: '@deepseek-ai/dsh-tool-workflow'
243
-
244
- - id: tool-ralph
245
- name: '@deepseek-ai/dsh-tool-ralph'
246
- config:
247
- subagentProvider: spawn
248
- maxRounds: 64
249
-
250
- # ── remaining model-facing rows ─────────────────────────────────────────────
251
-
252
- - id: tool-ask-user
253
- name: '@deepseek-ai/dsh-tool-ask-user'
254
-
255
- - id: tool-todo
256
- name: '@deepseek-ai/dsh-tool-todo'
257
- config:
258
- allowParallelInProgress: true
259
-
260
- # The `web` service and its search provider stay in the host composition; only
261
- # the model-facing tool is per-session.
262
- - id: tool-web
263
- name: '@deepseek-ai/dsh-tool-web'
264
- config:
265
- fetch: false
266
- searchTimeoutMs: 60000
267
-
268
- - id: present
269
- name: '@deepseek-ai/dsh-tool-present'
@@ -1,3 +0,0 @@
1
- name: Tool Plus 标准增强版
2
- description: 标准模式全部能力 + tool-plus 增强:文件/Shell 工具集替换为 @xiaoso/dsh-tool-plus(移植 oh-my-pi:read 单参数 file_path 内联行选择器、edit 三模式、bash/grep/glob);pwsh 默认禁用。
3
- order: 2