dsh-gitbash-shell 0.4.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 ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 KannaKuron
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,133 @@
1
+ # dsh-gitbash-shell
2
+
3
+ > 让 DeepSeek Harness (dsh) 在 Windows 上**全部使用 Git Bash** 的官方风格插件
4
+ > —— 以 Git for Windows 的 `bash.exe` 替换 PowerShell 执行器,并为所有模式
5
+ > 物化对应的 Git Bash 版 agent preset。
6
+
7
+ ## 它解决什么
8
+
9
+ 官方 Windows 组合默认把 `dsh-pwsh-sandbox` 作为 `ctx.shell`(PowerShell 执行器),
10
+ 且各 preset 的 `tool-bash` 行在 win32 上被禁用——因为在 Windows 上裸 `bash`
11
+ 会解析到 `C:\Windows\System32\bash.exe`(WSL 占位),本插件直接指定
12
+ `C:/Program Files/Git/bin/bash.exe` 并保留官方沙箱语义。
13
+
14
+ 安装本插件后:
15
+
16
+ | 模式 | preset id | 说明 |
17
+ | --- | --- | --- |
18
+ | 标准模式 · Git Bash | `standard-gitbash` | 完整编码 Agent,shell 为 Git Bash |
19
+ | 极简模式 · Git Bash | `minimal-gitbash` | 持久 Git Bash 终端 + str_replace_editor |
20
+ | PTC 模式 · Git Bash | `code-gitbash` | PTC(Code Mode SDK)+ Git Bash |
21
+ | 创造模式 · Git Bash | `cordis-gitbash` | 自引用 Cordis 工具集 + Git Bash |
22
+
23
+ 原有的 `标准模式`/`极简模式`/`PTC 模式`/`创造模式`(shipped,不可修改)在
24
+ Git Bash host 下会拿到"暗示 PowerShell 语法的工具",请改用上面的变体;
25
+ 已装 dsh-ptc-cordis-preset 的话,`PTC 创造模式` 用户 preset 不受影响。
26
+
27
+ ## 安装(公开 GitHub 插件,推荐)
28
+
29
+ 仓库: <https://github.com/KannaKuron/dsh-gitbash-shell>
30
+
31
+ ```sh
32
+ # web 图形界面
33
+ dsh plugin --profile web add github:KannaKuron/dsh-gitbash-shell
34
+
35
+ # 可选:TUI / 自定义 TUI 也启用(命令行各 profile 需要)
36
+ dsh plugin --profile tui add github:KannaKuron/dsh-gitbash-shell
37
+ dsh plugin --profile cc-tui add github:KannaKuron/dsh-gitbash-shell
38
+ ```
39
+
40
+ `dsh plugin add` 会自动:① pnpm 安装 `github:KannaKuron/dsh-gitbash-shell`;
41
+ ② 检测到包声明的 `dsh.bundle` 后把它追加进该 profile 的
42
+ `dsh.profile.bundles`。**重启该 profile 的 host 后生效。**
43
+
44
+ TUI/cc-tui 额外:在其 `cordis.patch.yml` 里翻转 host 工具行(web 不需要):
45
+
46
+ ```yaml
47
+ - id: tool-bash
48
+ disabled: false
49
+ - id: tool-pwsh
50
+ disabled: true
51
+ ```
52
+
53
+ ## 它做了什么
54
+
55
+ bundle patch(`cordis.patch.yml`)应用三个改动:
56
+
57
+ 1. `pwsh-sandbox` 行 `disabled: true` —— 每进程只允许一个 `ctx.shell`;
58
+ 2. 插入 `gitbash-executor`(`dsh-gitbash-shell/shell`):继承官方
59
+ `@deepseek-ai/dsh-bash-sandbox`,仅把内层 argv 换成
60
+ `<git-bash.exe> -c <command>`。沙箱策略/拒绝分类/后台任务/超时/设置节
61
+ 全部沿用官方实现;full-access 分支单独接 Git Bash(父类那里硬编码裸 `bash`);
62
+ 3. 插入 `gitbash-presets`(`dsh-gitbash-shell/presets`):启动时把上表 4 个
63
+ preset 物化到首个 user-trust preset 根目录,并写
64
+ `.plugin-managed.json`(逐文件哈希)——未改动则随版本刷新;被用户改过就
65
+ 不再碰;卸载时(且仅当未改动)会清理。
66
+
67
+ **环境变量**:`bash.exe` 是 host 进程的直接子进程(不经 git-bash 登录壳),完整继承
68
+ 系统环境变量与 `DSH_*` 快照,和原来 pwsh 拿到的完全一致。
69
+
70
+ ## 配置
71
+
72
+ `gitbash-presets` 行支持 `presets` 数组,只物化你常用的模式(未列出的旧物化目录、
73
+ 且未被用户修改过的,会自动清理):
74
+
75
+ ```yaml
76
+ - id: gitbash-presets
77
+ config:
78
+ presets: [standard-gitbash, minimal-gitbash] # 默认物化全部 4 个
79
+ ```
80
+
81
+ 配合 `agent-presets` 的 `default`,新会话直接落在 Git Bash 模式,免去每次在
82
+ 模式选择器里翻找(原版 shipped 模式无法替换或隐藏——部署级、只读):
83
+
84
+ ```yaml
85
+ - id: agent-presets
86
+ config:
87
+ default: ptc-cordis # 或 standard-gitbash / minimal-gitbash
88
+ ```
89
+
90
+ ## 配置
91
+
92
+ `gitbash-executor` 行支持:
93
+
94
+ ```yaml
95
+ config:
96
+ bashPath: "D:/Tools/Git/bin/bash.exe" # 默认 C:/Program Files/Git/bin/bash.exe
97
+ timeoutMs: 60000 # 默认 60s,可继续用 shell 设置节调整
98
+ ```
99
+
100
+ ## 验证
101
+
102
+ ```sh
103
+ npm test
104
+ ```
105
+
106
+ 重启 host 后新会话:
107
+ - 工具列表里出现 `bash`(不再有 `pwsh`),描述为 Git Bash;
108
+ - `echo \$BASH_VERSION` 有输出、`command -v bash` 指向 Git 安装目录。
109
+
110
+ ## 卸载
111
+
112
+ ```sh
113
+ dsh plugin --profile web remove dsh-gitbash-shell
114
+ ```
115
+
116
+ 或删除 profile`package.json` 中依赖 + `dsh.profile.bundles` 中的条目后
117
+ `dsh plugin --profile web install`。卸载并重启后,未改过的 `* -gitbash`
118
+ preset 会被插件自动清理;宿主 shell 回退为 PowerShell。
119
+
120
+ ## 与 dsh-ptc-cordis-preset 联动
121
+
122
+ 本插件在 host 上发布 `gitBash` 能力服务(`{ active, bashPath }`,仅 Windows 为 active)。
123
+ [dsh-ptc-cordis-preset](https://github.com/KannaKuron/dsh-ptc-cordis-preset) v0.5.0+ 在物化
124
+ `PTC 创造模式` 时会检测该信号:两个插件都安装时,**PTC 创造模式自动物化为 Git Bash 版**
125
+ (`tool-bash` 启用、`tool-pwsh` 禁用),无需新增模式、无需手工修改 preset;
126
+ 只装本插件时 PTC 创造模式保持原样(由它自己的插件管理)。
127
+
128
+ > 切换生效后若 `ptc-cordis` 目录已存在且被旧版本物化,删除
129
+ > `~/.dsh/.agent-presets/ptc-cordis` 并重启,即由新逻辑重新物化。
130
+
131
+ ## 许可
132
+
133
+ MIT © KannaKuron。参考与致敬:[dsh-ptc-cordis-preset](https://github.com/KannaKuron/dsh-ptc-cordis-preset)。
package/README_EN.md ADDED
@@ -0,0 +1,58 @@
1
+ # dsh-gitbash-shell
2
+
3
+ > Run **every agent shell command through Git Bash** on Windows with DeepSeek
4
+ > Harness (dsh) — replaces the PowerShell executor and materializes Git Bash
5
+ > variants of all four agent presets.
6
+
7
+ ## Install (public GitHub plugin)
8
+
9
+ ```sh
10
+ dsh plugin --profile web add github:KannaKuron/dsh-gitbash-shell
11
+ # optional TUI surfaces
12
+ dsh plugin --profile tui add github:KannaKuron/dsh-gitbash-shell
13
+ dsh plugin --profile cc-tui add github:KannaKuron/dsh-gitbash-shell
14
+ ```
15
+
16
+ `dsh plugin add` installs the dependency via pnpm and, seeing the
17
+ `dsh.bundle` declaration, appends the package to `dsh.profile.bundles`.
18
+ **Restart the profile's host to activate.**
19
+
20
+ ## What it does
21
+
22
+ The bundle patch (`cordis.patch.yml`):
23
+
24
+ 1. disables `pwsh-sandbox` (one `ctx.shell` provider per process);
25
+ 2. mounts `dsh-gitbash-shell/shell` — a subclass of the shipped
26
+ `@deepseek-ai/dsh-bash-sandbox` whose inner argv is
27
+ `<git-bash.exe> -c <command>` (sandbox policy, denial classification,
28
+ background jobs, and settings behavior all inherited);
29
+ 3. mounts `dsh-gitbash-shell/presets`, which materializes
30
+ `standard-gitbash`, `minimal-gitbash`, `code-gitbash`,
31
+ `cordis-gitbash` into the first user-trust preset root, guarded by
32
+ per-file `.plugin-managed.json` hashes (user edits are never overwritten;
33
+ unmodified trees are cleaned on uninstall).
34
+
35
+ Environment: `bash.exe` is spawned as a direct child of the host, so it
36
+ inherits the full system environment plus the `DSH_*` snapshot, exactly like
37
+ the pwsh executor did.
38
+
39
+ ## Config
40
+
41
+ ```yaml
42
+ config:
43
+ bashPath: "D:/Tools/Git/bin/bash.exe" # default C:/Program Files/Git/bin/bash.exe
44
+ ```
45
+
46
+ ## Cooperation with dsh-ptc-cordis-preset
47
+
48
+ This plugin publishes a `gitBash` host capability (`{ active, bashPath }`,
49
+ active only on Windows). [dsh-ptc-cordis-preset](https://github.com/KannaKuron/dsh-ptc-cordis-preset)
50
+ v0.5.0+ detects it while materializing `PTC 创造模式`: with both installed,
51
+ the PTC preset is materialized as Git Bash automatically (tool-bash on,
52
+ tool-pwsh off) — no extra mode, no manual edits. Without this plugin the PTC
53
+ preset stays as its own plugin manages it.
54
+
55
+ ## License
56
+
57
+ MIT © KannaKuron. Inspired by
58
+ [dsh-ptc-cordis-preset](https://github.com/KannaKuron/dsh-ptc-cordis-preset).
@@ -0,0 +1,264 @@
1
+ # The `code` agent preset: the standard coding agent, presented as Code Mode.
2
+ #
3
+ # Everything in `standard` is here unchanged. What is added is the `tool-presentation`
4
+ # row: instead of one tool call per action, the model writes a TypeScript
5
+ # program against a generated SDK and `run_code` executes it, so a sequence
6
+ # that would be five round trips becomes one.
7
+ #
8
+ # The registry itself stays on the host plane — the agent loop's scheduler and
9
+ # the API proxy's presenters are its consumers — so what this preset owns is
10
+ # the PRESENTATION of that registry for this agent alone. Native sessions run
11
+ # beside this one in the same process, each seeing its own catalog.
12
+ #
13
+ # This file is an AGENT-PLANE composition. It is mounted under one agent's
14
+ # scope context, so every tool and prompt section it registers belongs to that
15
+ # session alone. The host composition (`base.cordis.yml` + `web.cordis.yml`)
16
+ # keeps everything a preset must not own: the registries themselves, the
17
+ # sandbox and approval stack, persistence, and the model route.
18
+ #
19
+ # A service row here MUST sit inside a group carrying an `isolate` realm.
20
+ # Without one it publishes into the root realm, where it is process-global
21
+ # rather than per-session and the second session mounting this preset collides
22
+ # with the first; `dsh-agent-presets` rejects that at mount. `true` means an
23
+ # entry-local realm — one private instance per mounted session, which is the
24
+ # default this deployment wants. A shared label would instead pool one instance
25
+ # across every session naming it.
26
+
27
+ # ── identity ────────────────────────────────────────────────────────────────
28
+
29
+ # The preset's own persona, shadowing the deployment default for this agent.
30
+ # `{{model}}` and `{{cwd}}` resolve from the agent's own route and workspace.
31
+ - id: persona
32
+ name: '@deepseek-ai/dsh-persona'
33
+ config:
34
+ text: >-
35
+ You are a coding agent powered by the {{model}} model. Your working directory is {{cwd}}.
36
+
37
+ - id: agent-instructions
38
+ name: '@deepseek-ai/dsh-agent-instructions'
39
+ config:
40
+ maxBytes: 65536
41
+
42
+ # ── shell ───────────────────────────────────────────────────────────────────
43
+
44
+ # `shell-env` stays in the HOST composition: `apps/cli/src/web.ts` injects it to
45
+ # publish `DSH_WEB_URL`/`DSH_WEB_MODE`, and a host row that injects a service is
46
+ # the criterion for host-plane ownership — injection resolves before any session
47
+ # exists, so there is no agent to key by. Behind a preset realm those variables
48
+ # never reached the model's shell at all. Both shell tools consume the host
49
+ # registry from here; the host executor is the Git Bash provider (`dsh-gitbash-shell`)
50
+ # host-plane too.
51
+ - id: tool-bash
52
+ name: '@deepseek-ai/dsh-tool-bash'
53
+ # Git Bash on Windows: the host executor is dsh-gitbash-shell (see $DSH_HOME/cordis.patch.yml).
54
+ disabled: false
55
+
56
+ - id: tool-pwsh
57
+ name: '@deepseek-ai/dsh-tool-pwsh'
58
+ disabled: true
59
+
60
+ # ── filesystem ──────────────────────────────────────────────────────────────
61
+
62
+ # Both register into the host `tools` registry and provide nothing, so
63
+ # they need no realm. The `fs` service and its policy stay in the host.
64
+ - id: tool-fs
65
+ name: '@deepseek-ai/dsh-tool-fs'
66
+
67
+ - id: tool-fs-search
68
+ name: '@deepseek-ai/dsh-tool-fs-search'
69
+ config:
70
+ sampleOverCapGlobResults: false
71
+
72
+ # ── background jobs ────────────────────────────────────────────────────────
73
+
74
+ # Only the model-facing controls. The task REGISTRY stays on the host plane:
75
+ # its producers sit outside any realm this file could put it in — `tool-bash`
76
+ # above resolves it with `ctx.get`, and an entry-local realm here is invisible
77
+ # to every sibling row, so `run_in_background` would answer "background jobs
78
+ # unavailable" while these controls sat in the catalog. The registry is keyed by
79
+ # owning agent anyway, so one host instance serves every session. What a preset
80
+ # chooses is whether its agent can collect and stop background work at all.
81
+ - id: tool-jobs
82
+ name: '@deepseek-ai/dsh-tool-jobs'
83
+
84
+ # ── skills ──────────────────────────────────────────────────────────────────
85
+
86
+ # The skill REGISTRY lives in the host composition and is layered per scope:
87
+ # these rows register into THIS preset's layer of it, so they need no realm.
88
+ # `skill-filesystem` contributes local-root discovery for agents on this preset, and
89
+ # `tool-skill` gives them the catalog and loader; the merged catalog also
90
+ # carries whatever the deployment registered globally (repository plugins).
91
+ - id: skill-filesystem
92
+ name: '@deepseek-ai/dsh-skill-filesystem'
93
+
94
+ - id: tool-skill
95
+ name: '@deepseek-ai/dsh-tool-skill'
96
+
97
+ # ── goals ───────────────────────────────────────────────────────────────────
98
+
99
+ # Only the model-facing tool. The goal SERVICE, its session driver, and the
100
+ # `/goal` command stay on the host plane: the Gateway serves the goal domain as
101
+ # Remote endpoints whose receiver comes from a generated descriptor, so it
102
+ # resolves `goals` on the host and an entry-local realm here would hide it. The
103
+ # registry is keyed by session anyway, so one host instance serves every
104
+ # session. What a preset chooses is whether its agent can call the goal tool.
105
+ - id: tool-goal
106
+ name: '@deepseek-ai/dsh-tool-goal'
107
+
108
+ # ── plan mode ───────────────────────────────────────────────────────────────
109
+
110
+ # Plan state is per-agent by nature, so an entry-local realm is not a
111
+ # workaround here — it is the correct lifetime.
112
+ - id: planning
113
+ name: cordis:group
114
+ group: true
115
+ isolate:
116
+ planMode: true
117
+ config:
118
+ - id: plan-mode
119
+ name: '@deepseek-ai/dsh-plan-mode'
120
+ config:
121
+ section: |
122
+ 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.
123
+
124
+ 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.
125
+
126
+ 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.
127
+
128
+ 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.
129
+
130
+ 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.
131
+
132
+ 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.
133
+
134
+ # ── compaction ──────────────────────────────────────────────────────────────
135
+
136
+ # `compaction-basic` reads `toolResultPrune` through `ctx.get`, so the pruner must
137
+ # share this realm rather than sit outside it.
138
+ #
139
+ # `tokenMeter` is deliberately NOT in this realm: the meter stays on the HOST
140
+ # plane, and the rows here resolve that one instance. It takes no configuration,
141
+ # keys every fold by Session, and owns the context-meter projection units the
142
+ # browser reads for every session — behind a realm those units would come and go
143
+ # with whichever presets happen to be mounted. What a preset chooses is whether
144
+ # its agent compacts at all, which is `compaction-basic` below.
145
+ - id: compaction
146
+ name: cordis:group
147
+ group: true
148
+ isolate:
149
+ compaction: true
150
+ toolResultPruner: true
151
+ config:
152
+ - id: compaction-basic
153
+ name: '@deepseek-ai/dsh-compaction-basic'
154
+
155
+ - id: command-compact
156
+ name: '@deepseek-ai/dsh-command-compact'
157
+
158
+ - id: tool-result-pruner
159
+ name: '@deepseek-ai/dsh-compaction-tool-result-pruner'
160
+ config:
161
+ thresholdChars: 8192
162
+ headChars: 4096
163
+ tailChars: 1024
164
+
165
+ # ── delegation and workflows ────────────────────────────────────────────────
166
+
167
+ # The `subagents` registry and its spawn/fork backends live in the HOST
168
+ # composition: the registry is a process singleton whose cross-session queries
169
+ # the api-proxy serves to the browser, and a provider name may only be
170
+ # registered once. This preset contributes the delegation TOOLS, which resolve
171
+ # that host registry.
172
+ #
173
+ # `workflows` is different — nothing outside an agent reads it — so every row
174
+ # that reaches it shares one entry-local realm here, and a consumer left
175
+ # outside would resolve a host registry this preset does not populate.
176
+ - id: delegation
177
+ name: cordis:group
178
+ group: true
179
+ isolate:
180
+ workflowEngine: true
181
+ config:
182
+ - id: tool-subagent-control
183
+ name: '@deepseek-ai/dsh-tool-subagent-control'
184
+
185
+ - id: tool-subagent-list-agents
186
+ name: '@deepseek-ai/dsh-tool-subagent-control/list-agents'
187
+
188
+ - id: tool-subagent
189
+ name: '@deepseek-ai/dsh-tool-subagent'
190
+ config:
191
+ provider: spawn
192
+ toolName: subagent
193
+ backgroundMode: continuable
194
+
195
+ - id: tool-subagent-fork
196
+ name: '@deepseek-ai/dsh-tool-subagent'
197
+ config:
198
+ provider: fork
199
+ toolName: subagent_fork
200
+ backgroundMode: continuable
201
+
202
+ # Production dsh does not install these optional providers. Install the
203
+ # matching Bundle in this Profile and restart the Host, then copy this
204
+ # preset and remove `disabled` from the matching tool row. Host availability
205
+ # alone grants no tool.
206
+ - id: tool-subagent-codex
207
+ name: '@deepseek-ai/dsh-tool-subagent'
208
+ disabled: true
209
+ config:
210
+ provider: codex
211
+ toolName: subagent_codex
212
+ backgroundMode: one-shot
213
+ maxDepth: provider-managed
214
+
215
+ - id: tool-subagent-claude-code
216
+ name: '@deepseek-ai/dsh-tool-subagent'
217
+ disabled: true
218
+ config:
219
+ provider: claude-code
220
+ toolName: subagent_claude_code
221
+ backgroundMode: one-shot
222
+ maxDepth: provider-managed
223
+
224
+ - id: workflow-worker-thread
225
+ name: '@deepseek-ai/dsh-workflow-worker-thread'
226
+ config:
227
+ provider: spawn
228
+
229
+ - id: tool-workflow
230
+ name: '@deepseek-ai/dsh-tool-workflow'
231
+
232
+ - id: tool-ralph
233
+ name: '@deepseek-ai/dsh-tool-ralph'
234
+ config:
235
+ subagentProvider: spawn
236
+ maxRounds: 64
237
+
238
+ # ── remaining model-facing rows ─────────────────────────────────────────────
239
+
240
+ - id: tool-ask-user
241
+ name: '@deepseek-ai/dsh-tool-ask-user'
242
+
243
+ - id: tool-todo
244
+ name: '@deepseek-ai/dsh-tool-todo'
245
+ config:
246
+ allowParallelInProgress: true
247
+
248
+ # The `web` service and its search provider stay in the host composition; only
249
+ # the model-facing tool is per-session.
250
+ - id: tool-web
251
+ name: '@deepseek-ai/dsh-tool-web'
252
+ config:
253
+ fetch: false
254
+ searchTimeoutMs: 60000
255
+
256
+ # ── presentation ────────────────────────────────────────────────────────────
257
+
258
+ # Code Mode for this agent alone. The row waits for the host's `codeRuntime`
259
+ # rather than assuming it: a deployment that composes no TypeScript runtime
260
+ # fails this preset at mount, naming this id, instead of at the first request.
261
+ - id: tool-presentation
262
+ name: '@deepseek-ai/dsh-agent-tool-presentation'
263
+ config:
264
+ mode: code
@@ -0,0 +1,3 @@
1
+ name: PTC 模式 · Git Bash
2
+ description: 具备标准模式的全部能力,并通过 Code Mode SDK 呈现工具,让模型用一个 TypeScript 程序组合多步操作。(Shell 使用 Git Bash)
3
+ order: 2