dsh-pstack 0.2.0 → 0.2.2
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/README.md +19 -13
- package/README.zh.md +19 -13
- package/cordis.patch.yml +4 -0
- package/dist/client.mjs +116 -9
- package/dist/client.mjs.map +1 -1
- package/dist/index.mjs +1 -1
- package/dist/{paths-BT77khwm.mjs → paths-yji9SNak.mjs} +0 -1
- package/dist/pstack/docs/harness/dsh.md +7 -7
- package/dist/pstack/skills/poteto-mode/scripts/check-plan.test.mjs +1 -1
- package/dist/pstack/skills/poteto-mode/scripts/watch-pr/github.test.mjs +1 -1
- package/dist/pstack/skills/poteto-mode/scripts/worktree-audit.mjs +1 -1
- package/dist/pstack/skills/statechart/scripts/run.mjs +3 -3
- package/dist/pstack/skills/statechart/scripts/statechart.mjs +1 -1
- package/dist/pstack/skills/statechart/scripts/statechart.test.mjs +2 -2
- package/dist/pstack/skills/statechart/scripts/worker.mjs +1 -1
- package/dist/remote.d.mts +1 -1
- package/dist/remote.mjs +2 -1
- package/dist/role-catalog.d.mts +35 -0
- package/dist/role-catalog.mjs +122 -0
- package/dist/{role-config-NNn5r1JX.mjs → role-config-a4JpVdc-.mjs} +107 -143
- package/dist/role-manifest-79cnFfDM.mjs +112 -0
- package/dist/role-manifest-8OERX9-s.d.mts +90 -0
- package/dist/{role-wire-DZwTn2wF.d.mts → role-wire-CAJsVA6e.d.mts} +2 -3
- package/dist/roles.d.mts +1 -1
- package/dist/roles.mjs +4 -34
- package/dist/script.mjs +1 -1
- package/dist/subagent.d.mts +25 -3
- package/dist/subagent.mjs +67 -37
- package/package.json +13 -11
- package/dist/role-manifest-C3fUzjLI.d.mts +0 -19
package/README.md
CHANGED
|
@@ -15,13 +15,13 @@
|
|
|
15
15
|
<p align="center">
|
|
16
16
|
<a href="https://npmx.dev/package/dsh-pstack"><img src="https://img.shields.io/npm/v/dsh-pstack?style=flat-square&colorA=080f12&colorB=1fa669" alt="npm version" /></a>
|
|
17
17
|
<a href="https://npmx.dev/package/dsh-pstack"><img src="https://img.shields.io/npm/dm/dsh-pstack?style=flat-square&colorA=080f12&colorB=1fa669" alt="npm downloads" /></a>
|
|
18
|
-
<a href="https://github.com/deepseek-ai/deepseek-harness"><img src="https://img.shields.io/badge/dsh
|
|
18
|
+
<a href="https://github.com/deepseek-ai/deepseek-harness"><img src="https://img.shields.io/badge/dsh-%3E%3D0.2.1--rc.5-1f6feb?style=flat-square" alt="dsh >=0.2.1-rc.5" /></a>
|
|
19
19
|
<a href="https://github.com/cursor/plugins/tree/main/pstack"><img src="https://img.shields.io/badge/pstack-0.15.36-d97706?style=flat-square" alt="pstack 0.15.36" /></a>
|
|
20
20
|
</p>
|
|
21
21
|
|
|
22
22
|
<p align="center">
|
|
23
23
|
<a href="https://github.com/l246804/dsh-pstack/blob/main/LICENSE"><img src="https://img.shields.io/github/license/l246804/dsh-pstack?style=flat-square&colorA=080f12&colorB=1fa669" alt="license" /></a>
|
|
24
|
-
<a href="https://
|
|
24
|
+
<a href="https://npmx.dev/package/dsh-pstack"><img src="https://img.shields.io/npm/unpacked-size/dsh-pstack?style=flat-square&colorA=080f12&colorB=1fa669" alt="unpacked size" /></a>
|
|
25
25
|
<a href="https://www.jsdocs.io/package/dsh-pstack"><img src="https://img.shields.io/badge/jsdocs-reference-080f12?style=flat-square&colorA=080f12&colorB=1fa669" alt="JSDocs" /></a>
|
|
26
26
|
</p>
|
|
27
27
|
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
<tr>
|
|
31
31
|
<td align="center"><strong>58</strong><br /><sub>pstack skills</sub></td>
|
|
32
32
|
<td align="center"><strong>23</strong><br /><sub>playbooks</sub></td>
|
|
33
|
-
<td align="center"><strong>
|
|
33
|
+
<td align="center"><strong>5</strong><br /><sub>native tools</sub></td>
|
|
34
34
|
<td align="center"><strong>2</strong><br /><sub>agent presets</sub></td>
|
|
35
35
|
<td align="center"><strong>5</strong><br /><sub>bundled scripts</sub></td>
|
|
36
36
|
</tr>
|
|
@@ -42,10 +42,11 @@
|
|
|
42
42
|
<a href="#capabilities">Capabilities</a> ·
|
|
43
43
|
<a href="#skills-directory">Skills directory</a> ·
|
|
44
44
|
<a href="#optional-dsh-plugins">Optional DSH plugins</a> ·
|
|
45
|
-
<a href="#compatibility">Compatibility</a>
|
|
45
|
+
<a href="#compatibility">Compatibility</a> ·
|
|
46
|
+
<a href="#friendly-links">Friendly Links</a>
|
|
46
47
|
</p>
|
|
47
48
|
|
|
48
|
-
`dsh-pstack` ports [pstack](https://github.com/cursor/plugins/tree/main/pstack) to [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness) (DSH). It keeps the upstream pstack skills, playbooks, and reference documents.
|
|
49
|
+
`dsh-pstack` ports [pstack](https://github.com/cursor/plugins/tree/main/pstack) to [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness) (DSH). It keeps the upstream pstack skills, playbooks, and reference documents. Five native tools fill the gaps in DSH's interfaces, while an adaptation layer maps Cursor's tool names, subagent fields, model slugs, and paths to DSH.
|
|
49
50
|
|
|
50
51
|
Most upstream pstack skills declare `disable-model-invocation: true`. `poteto-mode` routes to those hidden skills by name, but DSH's `skill` tool only exposes the model-visible catalog. DSH also has no equivalents for Cursor's model slugs, `subagent_type`, `readonly`, and Bun scripts. dsh-pstack handles those differences in the plugin layer. You can start with `/poteto-mode` after installation.
|
|
51
52
|
|
|
@@ -96,6 +97,7 @@ See [`pstack/README.md`](./pstack/README.md) for the full capability map, gaps,
|
|
|
96
97
|
|---|---|
|
|
97
98
|
| `pstack_skill` | Loads a hidden skill registered by this plugin by name, and reads relative resources inside the skill directory. |
|
|
98
99
|
| `pstack_models` | Read-only list of the providers, models, and efforts DSH actually offers, used by `/setup-pstack`. |
|
|
100
|
+
| `pstack_roles` | Read-only list of every pstack role's shape and whether it is an automatic panel, so a `pstack_subagent` call passes the right `roleIndex`. |
|
|
99
101
|
| `pstack_subagent` | Reads `$DSH_HOME/pstack-models.mdc` per role, parses `provider/model [effort]`, selects a preset by `agent`, and can start several subagents at once. |
|
|
100
102
|
| `pstack_script` | Runs bundled Node scripts by fixed id without Bun or shell scripts. |
|
|
101
103
|
|
|
@@ -124,7 +126,7 @@ Open **Plugins → Installed plugins → dsh-pstack** and click **Configure** in
|
|
|
124
126
|
|
|
125
127
|
## Optional DSH plugins
|
|
126
128
|
|
|
127
|
-
DSH
|
|
129
|
+
DSH provides the following optional plugins, which are disabled by default. Most ship with DSH; `@deepseek-ai/dsh-cua-bundle` installs on demand. dsh-pstack does not require them during installation. Some pstack flows need these plugins to run end to end. To enable a plugin, enter its package name in **Add plugin** on the Plugins page. Alternatively, run `dsh plugin --profile <profile> add <package>`, then restart the profile. Except for `@deepseek-ai/dsh-mcp-client`, the bundles and providers here are experimental.
|
|
128
130
|
|
|
129
131
|
> [!NOTE]
|
|
130
132
|
> Without an optional plugin, the pstack skills still load. Steps that need the plugin print `Skipped in DeepSeek Harness: <step>. <reason>.` and continue. Missing `gh`, Java/TLC, or video tools also cause the corresponding steps to report blocked or degrade to screenshots. dsh-pstack never marks an unrun step as passed.
|
|
@@ -135,7 +137,7 @@ DSH ships with the following plugins, which are disabled by default. dsh-pstack
|
|
|
135
137
|
|---|---|---|
|
|
136
138
|
| `@deepseek-ai/dsh-experimental-session-search` | Five read-only tools search and trace historical Sessions for `/recall`, `/reflect`, and `/show-me-your-work`: `session_search`, `session_event_search`, `session_trace`, `session_event_trace`, and `session_event_read`. | Matches only Sessions with the same `cwd`; use `session_event_search` for the current Session; there is no Cursor `.jsonl` transcript path. |
|
|
137
139
|
| `@deepseek-ai/dsh-experimental-worktree`<br />`@deepseek-ai/dsh-experimental-tool-worktree` | `create_worktree` creates a local branch and worktree and switches the current Session directory, isolating parallel candidates for `/arena`, `/swarm`, and `/architect`. | `from` reads only local refs and does not fetch; there is no cloud VM; creating worktrees repeatedly changes `cwd`; it does not automatically give each subagent its own tree. |
|
|
138
|
-
| `@deepseek-ai/dsh-experimental-forge-bundle` | PR panel, checks, review, mark ready, merge, and Session binding, plus starting a Session from the composer with a new worktree, serving `/babysit`, `/shipping`, and `/autopilot-*`. | GitHub only, requires `gh` login; there is no
|
|
140
|
+
| `@deepseek-ai/dsh-experimental-forge-bundle` | PR panel, checks, review, mark ready, merge, and Session binding, plus starting a Session from the composer with a new worktree, serving `/babysit`, `/shipping`, and `/autopilot-*`. | GitHub only, requires `gh` login; there is no model-side change-request tool; there is no stack verdict or `origin` CLI; it can coexist with the worktree bundle. |
|
|
139
141
|
|
|
140
142
|
### Verification and evidence
|
|
141
143
|
|
|
@@ -143,16 +145,16 @@ Choose one of three browser providers: `@deepseek-ai/dsh-experimental-browser-us
|
|
|
143
145
|
|
|
144
146
|
| Plugin | Capability when enabled | Boundaries and conflicts |
|
|
145
147
|
|---|---|---|
|
|
146
|
-
| `@deepseek-ai/dsh-browser-use` + one provider | Navigation, clicking, typing, screenshots, and ARIA snapshots; Stagehand also provides act,
|
|
147
|
-
| `@deepseek-ai/dsh-cua-bundle` | macOS app clicking, typing, screenshots,
|
|
148
|
-
| `@deepseek-ai/dsh-experimental-terminal-bundle` | Six global terminal tools that keep a shell or REPL alive across calls
|
|
148
|
+
| `@deepseek-ai/dsh-browser-use` + one provider | Navigation, clicking, typing, screenshots, and ARIA snapshots; Stagehand also provides act, observe, and extract, for verification skills and UI reproduction. | The base package does nothing without a provider; one provider per Session; screenshots need an image-capable model; no video; Stagehand needs Chromium and a non-DeepSeek model. |
|
|
149
|
+
| `@deepseek-ai/dsh-cua-bundle` | macOS app clicking, typing, screenshots, permission pages, and session-level authorization, for desktop app verification. | macOS PTC only; single computer-use provider slot; Windows is incomplete; no video. |
|
|
150
|
+
| `@deepseek-ai/dsh-experimental-terminal-bundle` | Six global terminal tools that keep a shell or REPL alive across calls, support background send, and isolate terminals by owner, for CLI and TUI verification. | Terminal only; added to every Agent; persistent state must be cleaned up; switching invalidates the KV cache. |
|
|
149
151
|
| `@deepseek-ai/dsh-mcp-client` | Mounts MCP servers; tools appear as `mcp__<server>__<tool>`, and `mcp-resources` lists servers with resources, serving evidence investigation for `/why` and `/teach`. | No default server; configuration is per server; no automatic category discovery. |
|
|
150
152
|
|
|
151
153
|
### Multi-agent
|
|
152
154
|
|
|
153
155
|
| Plugin | Capability when enabled | Boundaries and conflicts |
|
|
154
156
|
|---|---|---|
|
|
155
|
-
| `@deepseek-ai/dsh-experimental-agent-team-profile` | Lead and teammate roles, a shared task board, nine team tools, and a Web roster, serving `/orchestrate` and `/autopilot-*`. | Disables `subagent` and `subagent_fork`. Conflicts with `pstack_subagent`. See the warning below. |
|
|
157
|
+
| `@deepseek-ai/dsh-experimental-agent-team-profile` | Lead and teammate roles, a shared task board, nine team tools, and a Web roster, serving `/orchestrate` and `/autopilot-*`. | Disables `subagent` and `subagent_fork`. Conflicts with `pstack_subagent`. There is no pstack PR frontier, ledger, or stack verdict. See the warning below. |
|
|
156
158
|
| `@deepseek-ai/dsh-experimental-ralph-bundle` | Global `ralph`, a foreground loop with a fresh child each round, serving `/autonomous-run`. | Not a persistent loop in the same Session; no event watcher; does not replace goals, heartbeats, or the decision log. |
|
|
157
159
|
|
|
158
160
|
> [!WARNING]
|
|
@@ -163,7 +165,7 @@ Choose one of three browser providers: `@deepseek-ai/dsh-experimental-browser-us
|
|
|
163
165
|
| Item | Version | Notes |
|
|
164
166
|
|---|---|---|
|
|
165
167
|
| DSH | `>=0.2.1-rc.5` | Minimum supported version; verified through the `0.2.2-alpha.2` baseline |
|
|
166
|
-
| pstack | `0.15.36` | Upstream baseline commit `
|
|
168
|
+
| pstack | `0.15.36` | Upstream baseline commit `ae5650f` |
|
|
167
169
|
| Node.js | `>=24.21.1` | Runtime requirement |
|
|
168
170
|
| Cordis | `~4.0.6-alpha.1` | Peer dependency |
|
|
169
171
|
|
|
@@ -183,7 +185,11 @@ A worktree Session has a different `cwd` from the original Session. The session-
|
|
|
183
185
|
|
|
184
186
|
Upstream pstack adapts Claude Code with `docs/harness/claude-code.md`. It preserves the skill bodies. A separate host adaptation table maps `Task`, `AskQuestion`, todo, model slugs, and paths to the target host. The generator adds a one-line Claude Code adaptation note to skills that use Cursor names. Unsupported capabilities report `Skipped in Claude Code: <step>. <reason>.`
|
|
185
187
|
|
|
186
|
-
dsh-pstack follows the same approach. The main adaptation document is [`pstack/harness/docs/harness/dsh.md`](./pstack/harness/docs/harness/dsh.md). It covers Tools, Subagent fields, Models, setup-pstack, Paths,
|
|
188
|
+
dsh-pstack follows the same approach. The main adaptation document is [`pstack/harness/docs/harness/dsh.md`](./pstack/harness/docs/harness/dsh.md). It covers Tools, Subagent fields, Models, setup-pstack, Paths, Cursor-only features, Local replacements, and Optional plugins. The `pstack_*` tools, agent presets, and Node scripts replace fields that DSH lacks. At build time, upstream pstack and the local adaptation tree are rendered into `pstack/pstack/`, then packaged with `src/*.ts` and `skills/` into `dist/`.
|
|
189
|
+
|
|
190
|
+
## Friendly Links
|
|
191
|
+
|
|
192
|
+
[LinuxDo](https://linux.do/) — the new ideal community
|
|
187
193
|
|
|
188
194
|
## Credits
|
|
189
195
|
|
package/README.zh.md
CHANGED
|
@@ -15,13 +15,13 @@
|
|
|
15
15
|
<p align="center">
|
|
16
16
|
<a href="https://npmx.dev/package/dsh-pstack"><img src="https://img.shields.io/npm/v/dsh-pstack?style=flat-square&colorA=080f12&colorB=1fa669" alt="npm version" /></a>
|
|
17
17
|
<a href="https://npmx.dev/package/dsh-pstack"><img src="https://img.shields.io/npm/dm/dsh-pstack?style=flat-square&colorA=080f12&colorB=1fa669" alt="npm downloads" /></a>
|
|
18
|
-
<a href="https://github.com/deepseek-ai/deepseek-harness"><img src="https://img.shields.io/badge/dsh
|
|
18
|
+
<a href="https://github.com/deepseek-ai/deepseek-harness"><img src="https://img.shields.io/badge/dsh-%3E%3D0.2.1--rc.5-1f6feb?style=flat-square" alt="dsh >=0.2.1-rc.5" /></a>
|
|
19
19
|
<a href="https://github.com/cursor/plugins/tree/main/pstack"><img src="https://img.shields.io/badge/pstack-0.15.36-d97706?style=flat-square" alt="pstack 0.15.36" /></a>
|
|
20
20
|
</p>
|
|
21
21
|
|
|
22
22
|
<p align="center">
|
|
23
23
|
<a href="https://github.com/l246804/dsh-pstack/blob/main/LICENSE"><img src="https://img.shields.io/github/license/l246804/dsh-pstack?style=flat-square&colorA=080f12&colorB=1fa669" alt="license" /></a>
|
|
24
|
-
<a href="https://
|
|
24
|
+
<a href="https://npmx.dev/package/dsh-pstack"><img src="https://img.shields.io/npm/unpacked-size/dsh-pstack?style=flat-square&colorA=080f12&colorB=1fa669" alt="unpacked size" /></a>
|
|
25
25
|
<a href="https://www.jsdocs.io/package/dsh-pstack"><img src="https://img.shields.io/badge/jsdocs-reference-080f12?style=flat-square&colorA=080f12&colorB=1fa669" alt="JSDocs" /></a>
|
|
26
26
|
</p>
|
|
27
27
|
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
<tr>
|
|
31
31
|
<td align="center"><strong>58</strong><br /><sub>pstack 技能</sub></td>
|
|
32
32
|
<td align="center"><strong>23</strong><br /><sub>playbook</sub></td>
|
|
33
|
-
<td align="center"><strong>
|
|
33
|
+
<td align="center"><strong>5</strong><br /><sub>原生工具</sub></td>
|
|
34
34
|
<td align="center"><strong>2</strong><br /><sub>agent preset</sub></td>
|
|
35
35
|
<td align="center"><strong>5</strong><br /><sub>随包脚本</sub></td>
|
|
36
36
|
</tr>
|
|
@@ -42,10 +42,11 @@
|
|
|
42
42
|
<a href="#能力">能力</a> ·
|
|
43
43
|
<a href="#skills-目录">skills 目录</a> ·
|
|
44
44
|
<a href="#可选-dsh-插件">可选 DSH 插件</a> ·
|
|
45
|
-
<a href="#兼容性">兼容性</a>
|
|
45
|
+
<a href="#兼容性">兼容性</a> ·
|
|
46
|
+
<a href="#友情链接">友情链接</a>
|
|
46
47
|
</p>
|
|
47
48
|
|
|
48
|
-
`dsh-pstack` 是 [pstack](https://github.com/cursor/plugins/tree/main/pstack) 的 [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness)(DSH)移植。它保留上游 pstack 的技能、playbook 与参考文档。
|
|
49
|
+
`dsh-pstack` 是 [pstack](https://github.com/cursor/plugins/tree/main/pstack) 的 [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness)(DSH)移植。它保留上游 pstack 的技能、playbook 与参考文档。5 个原生工具补上 DSH 的接口缺口,适配层则把 Cursor 的工具名、子代理字段、模型 slug 和路径映射到 DSH。
|
|
49
50
|
|
|
50
51
|
上游 pstack 的技能大多声明 `disable-model-invocation: true`。`poteto-mode` 按名称路由到这些隐藏技能,但 DSH 的 `skill` 工具只暴露模型可见目录。DSH 也没有与 Cursor 的模型 slug、`subagent_type`、`readonly` 和 Bun 脚本对等的接口。dsh-pstack 在插件层处理这些差异,安装后可以从 `/poteto-mode` 开始工作。
|
|
51
52
|
|
|
@@ -96,6 +97,7 @@
|
|
|
96
97
|
|---|---|
|
|
97
98
|
| `pstack_skill` | 按名称加载本插件注册的隐藏技能,也能读取技能目录内的相对资源。 |
|
|
98
99
|
| `pstack_models` | 只读列出 DSH 实际提供的 provider、model 和 effort,供 `/setup-pstack` 使用。 |
|
|
100
|
+
| `pstack_roles` | 只读列出每个 pstack 角色的 shape 与是否为自动面板,帮助 `pstack_subagent` 调用传对 `roleIndex`。 |
|
|
99
101
|
| `pstack_subagent` | 按角色读取 `$DSH_HOME/pstack-models.mdc`,解析 `provider/model [effort]`,按 `agent` 选择 preset,一次可启动多个子代理。 |
|
|
100
102
|
| `pstack_script` | 用固定 id 运行随包 Node 脚本,不依赖 Bun 或 shell 脚本。 |
|
|
101
103
|
|
|
@@ -124,7 +126,7 @@
|
|
|
124
126
|
|
|
125
127
|
## 可选 DSH 插件
|
|
126
128
|
|
|
127
|
-
|
|
129
|
+
DSH 提供以下可选插件,默认关闭。多数随 DSH 提供,`@deepseek-ai/dsh-cua-bundle` 需按需安装。安装 dsh-pstack 时不要求安装这些插件,但部分 pstack 流程需要它们才能完整执行。要启用插件,在「插件」页面用**添加插件**输入包名。也可以运行 `dsh plugin --profile <profile> add <package>`,然后重启 profile。除 `@deepseek-ai/dsh-mcp-client` 外,本节列出的 bundle 与 provider 都是实验性的。
|
|
128
130
|
|
|
129
131
|
> [!NOTE]
|
|
130
132
|
> 未启用可选插件时,pstack 技能仍可加载。需要插件的步骤会输出 `Skipped in DeepSeek Harness: <step>. <reason>.` 后继续。缺少 `gh`、Java/TLC 或视频工具时,对应步骤会报告 blocked 或降级为截图。dsh-pstack 不会把未运行的步骤标记为通过。
|
|
@@ -135,7 +137,7 @@
|
|
|
135
137
|
|---|---|---|
|
|
136
138
|
| `@deepseek-ai/dsh-experimental-session-search` | 5 个只读工具:`session_search`、`session_event_search`、`session_trace`、`session_event_trace`、`session_event_read`,搜索和追踪历史会话,服务 `/recall`、`/reflect`、`/show-me-your-work`。 | 只匹配同一 `cwd` 的会话;当前会话用 `session_event_search`;没有 Cursor 的 `.jsonl` 转写路径。 |
|
|
137
139
|
| `@deepseek-ai/dsh-experimental-worktree`<br />`@deepseek-ai/dsh-experimental-tool-worktree` | `create_worktree` 建本地分支和工作树,切换当前 Session 目录,用于 `/arena`、`/swarm`、`/architect` 的并行候选隔离。 | `from` 只读本地 ref,不 fetch;无云 VM;连续建树会改 `cwd`;不会自动给每个子代理分树。 |
|
|
138
|
-
| `@deepseek-ai/dsh-experimental-forge-bundle` | PR 面板、checks、review、mark ready、merge、Session 绑定,也能从 composer 用新 worktree 启动 Session,服务 `/babysit`、`/shipping`、`/autopilot-*`。 | 仅 GitHub,需 `gh`
|
|
140
|
+
| `@deepseek-ai/dsh-experimental-forge-bundle` | PR 面板、checks、review、mark ready、merge、Session 绑定,也能从 composer 用新 worktree 启动 Session,服务 `/babysit`、`/shipping`、`/autopilot-*`。 | 仅 GitHub,需 `gh` 登录;模型侧没有变更请求工具;没有 stack verdict,也没有 `origin` CLI;可与 worktree bundle 共存。 |
|
|
139
141
|
|
|
140
142
|
### 验证与证据
|
|
141
143
|
|
|
@@ -143,16 +145,16 @@
|
|
|
143
145
|
|
|
144
146
|
| 插件 | 打开后的能力 | 边界与冲突 |
|
|
145
147
|
|---|---|---|
|
|
146
|
-
| `@deepseek-ai/dsh-browser-use` + 一个 provider | 导航、点击、输入、截图和 ARIA snapshot;Stagehand 另有 act、
|
|
147
|
-
| `@deepseek-ai/dsh-cua-bundle` | macOS
|
|
148
|
-
| `@deepseek-ai/dsh-experimental-terminal-bundle` | 6 个全局终端工具,跨调用保持 shell / REPL,支持后台 send
|
|
148
|
+
| `@deepseek-ai/dsh-browser-use` + 一个 provider | 导航、点击、输入、截图和 ARIA snapshot;Stagehand 另有 act、observe、extract,用于验证技能和 UI 复现。 | 基础包没有 provider 时不生效;每个 Session 一个 provider;截图要图像模型;无视频;Stagehand 需要 Chromium 和非 DeepSeek 模型。 |
|
|
149
|
+
| `@deepseek-ai/dsh-cua-bundle` | macOS 应用点击、输入、截图、权限页和会话级授权,用于桌面应用验证。 | 仅 macOS PTC;单 computer-use provider 槽;Windows 未完成;无视频。 |
|
|
150
|
+
| `@deepseek-ai/dsh-experimental-terminal-bundle` | 6 个全局终端工具,跨调用保持 shell / REPL,支持后台 send 和按 owner 隔离,用于 CLI / TUI 验证。 | 只覆盖终端;会加到所有 Agent;持久状态要清理;切换会失效 KV cache。 |
|
|
149
151
|
| `@deepseek-ai/dsh-mcp-client` | 挂载 MCP server,工具以 `mcp__<server>__<tool>` 出现,`mcp-resources` 列出带资源的 server,服务 `/why`、`/teach` 的证据调查。 | 无默认 server;需逐项配置;无自动类别发现。 |
|
|
150
152
|
|
|
151
153
|
### 多代理
|
|
152
154
|
|
|
153
155
|
| 插件 | 打开后的能力 | 边界与冲突 |
|
|
154
156
|
|---|---|---|
|
|
155
|
-
| `@deepseek-ai/dsh-experimental-agent-team-profile` | Lead / teammate、共享任务板、9 个团队工具和 Web roster,服务 `/orchestrate`、`/autopilot-*`。 | 禁用 `subagent` 和 `subagent_fork`,与 `pstack_subagent`
|
|
157
|
+
| `@deepseek-ai/dsh-experimental-agent-team-profile` | Lead / teammate、共享任务板、9 个团队工具和 Web roster,服务 `/orchestrate`、`/autopilot-*`。 | 禁用 `subagent` 和 `subagent_fork`,与 `pstack_subagent` 冲突。没有 pstack 的 PR frontier、ledger 或 stack verdict。见下方警告。 |
|
|
156
158
|
| `@deepseek-ai/dsh-experimental-ralph-bundle` | 全局 `ralph`,每轮 fresh child 的 foreground 循环,服务 `/autonomous-run`。 | 不是同一 Session 常驻循环;无事件 watcher;不替代 goal、心跳和 decision log。 |
|
|
157
159
|
|
|
158
160
|
> [!WARNING]
|
|
@@ -163,7 +165,7 @@
|
|
|
163
165
|
| 项目 | 版本 | 说明 |
|
|
164
166
|
|---|---|---|
|
|
165
167
|
| DSH | `>=0.2.1-rc.5` | 最低支持版本;已验证至 `0.2.2-alpha.2` 基线 |
|
|
166
|
-
| pstack | `0.15.36` | 上游基线提交 `
|
|
168
|
+
| pstack | `0.15.36` | 上游基线提交 `ae5650f` |
|
|
167
169
|
| Node.js | `>=24.21.1` | 运行时要求 |
|
|
168
170
|
| Cordis | `~4.0.6-alpha.1` | peer dependency |
|
|
169
171
|
|
|
@@ -183,7 +185,11 @@ worktree Session 的 `cwd` 与原 Session 不同。session-search 插件只匹
|
|
|
183
185
|
|
|
184
186
|
上游 pstack 用 `docs/harness/claude-code.md` 适配 Claude Code。它保留技能正文,另用宿主适配表把 `Task`、`AskQuestion`、todo、模型 slug 和路径映射到目标宿主。生成器为使用 Cursor 名称的技能添加一行 Claude Code 适配提示。不支持的能力会报告 `Skipped in Claude Code: <step>. <reason>.`
|
|
185
187
|
|
|
186
|
-
dsh-pstack 沿用这套做法。主适配文档是 [`pstack/harness/docs/harness/dsh.md`](./pstack/harness/docs/harness/dsh.md),覆盖 Tools、Subagent fields、Models、setup-pstack、Paths
|
|
188
|
+
dsh-pstack 沿用这套做法。主适配文档是 [`pstack/harness/docs/harness/dsh.md`](./pstack/harness/docs/harness/dsh.md),覆盖 Tools、Subagent fields、Models、setup-pstack、Paths、Cursor-only features、Local replacements 和 Optional plugins。`pstack_*` 工具、agent preset 和 Node 脚本替代 DSH 缺少的字段。构建时,上游 pstack 与本地适配树被渲染到 `pstack/pstack/`,再与 `src/*.ts`、`skills/` 一起打包到 `dist/`。
|
|
189
|
+
|
|
190
|
+
## 友情链接
|
|
191
|
+
|
|
192
|
+
[LinuxDo](https://linux.do/) —— 新的理想型社区
|
|
187
193
|
|
|
188
194
|
## 鸣谢
|
|
189
195
|
|
package/cordis.patch.yml
CHANGED
|
@@ -5,6 +5,8 @@
|
|
|
5
5
|
# `pstack-models` registers the read-only model/effort directory used by `/setup-pstack`.
|
|
6
6
|
# `pstack-roles` exposes the same role file to the Plugins configuration page through a
|
|
7
7
|
# Typert Remote service; its browser half is declared by `dsh.client` in package.json.
|
|
8
|
+
# `pstack-role-catalog` registers `pstack_roles`, the read-only capability query that
|
|
9
|
+
# reports each role's shape and autoPanel so a caller sets `roleIndex` correctly.
|
|
8
10
|
# `pstack-subagent` registers `pstack_subagent`, which re-reads the role file on every
|
|
9
11
|
# delegation and selects one of the pstack agent presets below.
|
|
10
12
|
# `pstack-script` registers `pstack_script`, the only supported way to run the bundled
|
|
@@ -21,6 +23,8 @@
|
|
|
21
23
|
name: dsh-pstack/models
|
|
22
24
|
- id: pstack-roles
|
|
23
25
|
name: dsh-pstack/roles
|
|
26
|
+
- id: pstack-role-catalog
|
|
27
|
+
name: dsh-pstack/role-catalog
|
|
24
28
|
- id: pstack-subagent
|
|
25
29
|
name: dsh-pstack/subagent
|
|
26
30
|
config:
|
package/dist/client.mjs
CHANGED
|
@@ -7,6 +7,98 @@ window.__ModuleLoader__.load({
|
|
|
7
7
|
let react = require("react");
|
|
8
8
|
let react_jsx_runtime = require("react/jsx-runtime");
|
|
9
9
|
let react_dom = require("react-dom");
|
|
10
|
+
// src/internal/role-manifest.ts
|
|
11
|
+
/** The 17 roles, in manifest order. */
|
|
12
|
+
const ROLE_MANIFEST = [
|
|
13
|
+
{
|
|
14
|
+
key: "feature, refactoring",
|
|
15
|
+
shape: "single",
|
|
16
|
+
autoPanel: false
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
key: "bug-fix",
|
|
20
|
+
shape: "single",
|
|
21
|
+
autoPanel: false
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
key: "perf-issue",
|
|
25
|
+
shape: "single",
|
|
26
|
+
autoPanel: false
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
key: "hillclimb",
|
|
30
|
+
shape: "single",
|
|
31
|
+
autoPanel: false
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
key: "judgment and prose",
|
|
35
|
+
shape: "single",
|
|
36
|
+
autoPanel: false
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
key: "hardest tasks",
|
|
40
|
+
shape: "single",
|
|
41
|
+
autoPanel: false
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
key: "how explorer",
|
|
45
|
+
shape: "single",
|
|
46
|
+
autoPanel: false
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
key: "how explainer",
|
|
50
|
+
shape: "single",
|
|
51
|
+
autoPanel: false
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
key: "why investigators",
|
|
55
|
+
shape: "single",
|
|
56
|
+
autoPanel: false
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
key: "why synthesizer",
|
|
60
|
+
shape: "single",
|
|
61
|
+
autoPanel: false
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
key: "reflect tooling",
|
|
65
|
+
shape: "single",
|
|
66
|
+
autoPanel: false
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
key: "reflect judgment, divergent, synthesizer",
|
|
70
|
+
shape: "single",
|
|
71
|
+
autoPanel: false
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
key: "arena runners",
|
|
75
|
+
shape: "list",
|
|
76
|
+
autoPanel: true
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
key: "arena cross-judge pool",
|
|
80
|
+
shape: "list",
|
|
81
|
+
autoPanel: false
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
key: "swarm workers",
|
|
85
|
+
shape: "list",
|
|
86
|
+
autoPanel: false
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
key: "architect runners",
|
|
90
|
+
shape: "list",
|
|
91
|
+
autoPanel: true
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
key: "interrogate reviewers",
|
|
95
|
+
shape: "list",
|
|
96
|
+
autoPanel: true
|
|
97
|
+
}
|
|
98
|
+
];
|
|
99
|
+
function isRoleKey(value) {
|
|
100
|
+
return ROLE_MANIFEST.some((role) => role.key === value);
|
|
101
|
+
}
|
|
10
102
|
// src/remote.ts
|
|
11
103
|
/** npm package that owns these methods. */
|
|
12
104
|
const REMOTE_PACKAGE = "dsh-pstack";
|
|
@@ -79,7 +171,7 @@ window.__ModuleLoader__.load({
|
|
|
79
171
|
}
|
|
80
172
|
function parseRoleView(value, index) {
|
|
81
173
|
const record = parseRecord(value, `roles[${index}]`);
|
|
82
|
-
if (typeof record["key"] !== "string") throw new TypeError(`roles[${index}].key
|
|
174
|
+
if (typeof record["key"] !== "string" || !isRoleKey(record["key"])) throw new TypeError(`roles[${index}].key is not in the role manifest`);
|
|
83
175
|
if (record["shape"] !== "single" && record["shape"] !== "list") throw new TypeError(`roles[${index}].shape is unknown`);
|
|
84
176
|
if (typeof record["configured"] !== "boolean") throw new TypeError(`roles[${index}].configured must be a boolean`);
|
|
85
177
|
const routes = record["routes"];
|
|
@@ -310,6 +402,10 @@ window.__ModuleLoader__.load({
|
|
|
310
402
|
bundle: "@deepseek-ai/dsh-experimental-ralph-bundle"
|
|
311
403
|
}
|
|
312
404
|
];
|
|
405
|
+
/** The default recommendation ids, in catalogue order. */
|
|
406
|
+
function defaultRecommendationIds() {
|
|
407
|
+
return OPTIONAL_PLUGINS.filter((plugin) => plugin.recommended === true).map((plugin) => plugin.id);
|
|
408
|
+
}
|
|
313
409
|
// src/client/optional-plugins-state.ts
|
|
314
410
|
/**
|
|
315
411
|
* Pure state and small async operations for the optional-plugin recommendation
|
|
@@ -527,6 +623,7 @@ window.__ModuleLoader__.load({
|
|
|
527
623
|
/** Render the recommendation section; all decisions come from props. */
|
|
528
624
|
function OptionalPluginsView(props) {
|
|
529
625
|
const { rows, status, loadError, busyId, bulkBusy = false, messages, summary, onToggle, onEnableRecommended, onRetry, t } = props;
|
|
626
|
+
const recommendationIds = defaultRecommendationIds();
|
|
530
627
|
const offRecommended = rows.filter((row) => row.definition.recommended === true && row.status === "off").length;
|
|
531
628
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("section", {
|
|
532
629
|
"data-optional-plugins": true,
|
|
@@ -600,7 +697,7 @@ window.__ModuleLoader__.load({
|
|
|
600
697
|
color: COLOR_CAPTION$1,
|
|
601
698
|
fontSize: 12
|
|
602
699
|
},
|
|
603
|
-
children: t("recommendedHint")
|
|
700
|
+
children: t("recommendedHint", { ids: recommendationIds.join(t("listSeparator")) })
|
|
604
701
|
})
|
|
605
702
|
]
|
|
606
703
|
}),
|
|
@@ -1222,10 +1319,7 @@ window.__ModuleLoader__.load({
|
|
|
1222
1319
|
/** Localized role name and usage, keyed by the exact role-file key. */
|
|
1223
1320
|
function rolePresentation(key, t) {
|
|
1224
1321
|
const copy = roleCopyKeys[key];
|
|
1225
|
-
return
|
|
1226
|
-
name: key,
|
|
1227
|
-
description: ""
|
|
1228
|
-
} : {
|
|
1322
|
+
return {
|
|
1229
1323
|
name: t(copy.name),
|
|
1230
1324
|
description: t(copy.description)
|
|
1231
1325
|
};
|
|
@@ -1257,6 +1351,17 @@ window.__ModuleLoader__.load({
|
|
|
1257
1351
|
color: primary ? "var(--dsw-alias-label-primary-foreground)" : COLOR_TEXT$1
|
|
1258
1352
|
};
|
|
1259
1353
|
}
|
|
1354
|
+
function dangerButtonStyle() {
|
|
1355
|
+
return {
|
|
1356
|
+
border: `1px solid color-mix(in srgb, ${COLOR_ERROR} 55%, transparent)`,
|
|
1357
|
+
borderRadius: 8,
|
|
1358
|
+
padding: "5px 12px",
|
|
1359
|
+
cursor: "pointer",
|
|
1360
|
+
font: "inherit",
|
|
1361
|
+
background: `color-mix(in srgb, ${COLOR_ERROR} 10%, transparent)`,
|
|
1362
|
+
color: COLOR_ERROR
|
|
1363
|
+
};
|
|
1364
|
+
}
|
|
1260
1365
|
function fieldStyle(basis, fullWidth = false) {
|
|
1261
1366
|
return {
|
|
1262
1367
|
flex: fullWidth ? "1 1 auto" : `1 1 ${basis}px`,
|
|
@@ -1414,7 +1519,7 @@ window.__ModuleLoader__.load({
|
|
|
1414
1519
|
routes.length > 1 ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
1415
1520
|
type: "button",
|
|
1416
1521
|
style: {
|
|
1417
|
-
...
|
|
1522
|
+
...dangerButtonStyle(),
|
|
1418
1523
|
justifySelf: "start"
|
|
1419
1524
|
},
|
|
1420
1525
|
onClick: () => onRemove(index),
|
|
@@ -2166,7 +2271,8 @@ window.__ModuleLoader__.load({
|
|
|
2166
2271
|
enableRecommended: "Enable recommended plugins",
|
|
2167
2272
|
enablingRecommended: "Enabling recommended plugins…",
|
|
2168
2273
|
recommendedSummary: "{applied} applied, {restart} need a restart, {failed} failed, {skipped} skipped",
|
|
2169
|
-
recommendedHint: "Default recommendations:
|
|
2274
|
+
recommendedHint: "Default recommendations: {ids}.",
|
|
2275
|
+
listSeparator: ", ",
|
|
2170
2276
|
enablePlugin: "Enable",
|
|
2171
2277
|
disablePlugin: "Disable",
|
|
2172
2278
|
pluginWorking: "Working…",
|
|
@@ -2226,7 +2332,8 @@ window.__ModuleLoader__.load({
|
|
|
2226
2332
|
enableRecommended: "一键启用推荐项",
|
|
2227
2333
|
enablingRecommended: "正在启用推荐项…",
|
|
2228
2334
|
recommendedSummary: "成功 {applied} 项,需重启 {restart} 项,失败 {failed} 项,跳过 {skipped} 项",
|
|
2229
|
-
recommendedHint: "默认推荐
|
|
2335
|
+
recommendedHint: "默认推荐 {ids}。",
|
|
2336
|
+
listSeparator: "、",
|
|
2230
2337
|
enablePlugin: "启用",
|
|
2231
2338
|
disablePlugin: "关闭",
|
|
2232
2339
|
pluginWorking: "处理中…",
|