pstack-dsh 0.2.3 → 0.2.5
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 +20 -4
- package/lib/index.js +3 -2
- package/package.json +37 -36
- package/src/catalog-types.ts +2 -2
- package/src/catalog.ts +7 -2
package/README.md
CHANGED
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
Open **Settings → Plugins → Add plugin** and enter this in “Package name or address”:
|
|
10
10
|
|
|
11
11
|
```text
|
|
12
|
-
github:aa2246740/pstack-dsh#v0.2.
|
|
12
|
+
github:aa2246740/pstack-dsh#v0.2.5
|
|
13
13
|
```
|
|
14
14
|
|
|
15
15
|
桌面端插件管理器负责 Desktop profile 和内置包管理器。本发布已包含编译好的 `lib/`;普通使用不需要 clone 或本地构建。若应用提示刷新或重新打开,请按提示完成。
|
|
@@ -19,16 +19,16 @@ The desktop plugin manager owns the Desktop profile and bundled package manager.
|
|
|
19
19
|
### Web CLI
|
|
20
20
|
|
|
21
21
|
```sh
|
|
22
|
-
dsh plugin --profile web add github:aa2246740/pstack-dsh#v0.2.
|
|
22
|
+
dsh plugin --profile web add github:aa2246740/pstack-dsh#v0.2.5
|
|
23
23
|
```
|
|
24
24
|
|
|
25
25
|
这条官方 CLI 命令只写入 `web` profile,不能修改 Desktop App 的 profile。对于已运行的 Web Host,请重新打开该 Host 一次,再刷新网页。
|
|
26
26
|
|
|
27
27
|
This official CLI command writes only the `web` profile; it cannot modify the Desktop App profile. For an already-running Web Host, reopen that Host once and reload the page.
|
|
28
28
|
|
|
29
|
-
面向官方 DeepSeek Harness **0.2.
|
|
29
|
+
面向官方 DeepSeek Harness **0.2.1-rc.5**(tag `dsh-v0.2.1-rc.5`,npm `@deepseek-ai/dsh@0.2.1-rc.5`)。Node `^22.19.0` 或 `>=24`。`@deepseek-ai/dsh-*` peer 范围是 `>=0.2.1-rc.1 <0.2.2`,接受 `0.2.1-rc.5`,拒绝 `0.2.0` 系列与 `0.2.1` alpha。
|
|
30
30
|
|
|
31
|
-
Targets official DeepSeek Harness **0.2.
|
|
31
|
+
Targets official DeepSeek Harness **0.2.1-rc.5** (tag `dsh-v0.2.1-rc.5`, npm `@deepseek-ai/dsh@0.2.1-rc.5`). Node `^22.19.0` or `>=24`. The `@deepseek-ai/dsh-*` peer range is `>=0.2.1-rc.1 <0.2.2`: it accepts `0.2.1-rc.5` and rejects the `0.2.0` series and `0.2.1` alphas.
|
|
32
32
|
|
|
33
33
|
**English title.** pstack-dsh, a DeepSeek Harness port of official pstack.
|
|
34
34
|
|
|
@@ -81,6 +81,22 @@ Two steps.
|
|
|
81
81
|
|
|
82
82
|
Model choices follow DSH login/logout and catalog notifications. **Refresh models** also updates the choices without replacing unsaved role/effort edits. A selected route that becomes unavailable stays visibly marked. Newly registered, signed-in `pi-*` and `agy-*` routes are discovered without a second provider allowlist.
|
|
83
83
|
|
|
84
|
+
The locally authenticated `cursor` provider is also discovered when
|
|
85
|
+
[dsh-cursor-passthrough](https://github.com/mingzhong15/dsh-cursor-passthrough)
|
|
86
|
+
is installed and exposes live models. This lets a DSH parent assign a pstack
|
|
87
|
+
role to a Cursor subscription model without storing Cursor credentials in DSH.
|
|
88
|
+
|
|
89
|
+
安装并启用 [dsh-cursor-passthrough](https://github.com/mingzhong15/dsh-cursor-passthrough)
|
|
90
|
+
后,pstack 也会发现由本机 Cursor CLI 登录的 `cursor` 提供商。这样 DSH 父对话可以把指定角色分配给 Cursor 订阅模型,无需在 DSH 中保存 Cursor 凭据。
|
|
91
|
+
|
|
92
|
+
For mixed routing, keep the parent conversation on a native DSH provider and
|
|
93
|
+
assign Cursor models to selected roles in **Settings → pstack**. `pstack_spawn`
|
|
94
|
+
then routes those children through Cursor. If the parent itself uses Cursor
|
|
95
|
+
passthrough, it runs through Cursor ACP and cannot call DSH-only tools such as
|
|
96
|
+
`pstack_spawn`; use Cursor's own subagents in that case.
|
|
97
|
+
|
|
98
|
+
混合路由时,请让父对话使用 DSH 原生提供商,再在 **设置 → pstack** 中把部分角色分配给 Cursor 模型。若父对话本身使用 Cursor passthrough,该轮会通过 Cursor ACP 执行,无法调用 `pstack_spawn` 等 DSH 专用工具;此时请使用 Cursor 自带的子代理。
|
|
99
|
+
|
|
84
100
|
第一次用可以看 [pstack 指南](./docs/guide/README.md)。
|
|
85
101
|
|
|
86
102
|
New here? The [pstack guide](./docs/guide/README.md) walks through a first real task.
|
package/lib/index.js
CHANGED
|
@@ -568,8 +568,9 @@ async function buildCatalog(host, signal) {
|
|
|
568
568
|
keyPresent = true;
|
|
569
569
|
break;
|
|
570
570
|
}
|
|
571
|
-
const
|
|
572
|
-
const
|
|
571
|
+
const localPassthrough = provider.id === "cursor";
|
|
572
|
+
const selectable = oauthSignedIn || keyPresent || localPassthrough;
|
|
573
|
+
const source = oauthSignedIn ? "oauth" : localPassthrough ? "local" : "api-key";
|
|
573
574
|
if (!selectable) continue;
|
|
574
575
|
for (const model of models) {
|
|
575
576
|
let resolved;
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pstack-dsh",
|
|
3
3
|
"description": "DeepSeek Harness port of official pstack. Playbooks and principles are poteto's; only the harness call layer is rewritten.",
|
|
4
|
-
"version": "0.2.
|
|
4
|
+
"version": "0.2.5",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"main": "lib/index.js",
|
|
@@ -36,7 +36,8 @@
|
|
|
36
36
|
"check": "npm run typecheck && npm run test && npm run build"
|
|
37
37
|
},
|
|
38
38
|
"engines": {
|
|
39
|
-
"node": "^22.19.0 || >=24"
|
|
39
|
+
"node": "^22.19.0 || >=24",
|
|
40
|
+
"dsh": ">=0.2.1-rc.1 <0.2.2"
|
|
40
41
|
},
|
|
41
42
|
"repository": {
|
|
42
43
|
"type": "git",
|
|
@@ -65,23 +66,23 @@
|
|
|
65
66
|
},
|
|
66
67
|
"peerDependencies": {
|
|
67
68
|
"@deepseek-ai/cordis": "^4.0.4",
|
|
68
|
-
"@deepseek-ai/dsh-agent": ">=0.2.
|
|
69
|
-
"@deepseek-ai/dsh-api-remotes": ">=0.2.
|
|
70
|
-
"@deepseek-ai/dsh-atomic-write": ">=0.2.
|
|
71
|
-
"@deepseek-ai/dsh-client-locale": ">=0.2.
|
|
72
|
-
"@deepseek-ai/dsh-client-connection": ">=0.2.
|
|
73
|
-
"@deepseek-ai/dsh-client-ui-primitives": ">=0.2.
|
|
74
|
-
"@deepseek-ai/dsh-client-ui-renderer": ">=0.2.
|
|
75
|
-
"@deepseek-ai/dsh-client-ui-settings": ">=0.2.
|
|
76
|
-
"@deepseek-ai/dsh-client-ui-slots": ">=0.2.
|
|
77
|
-
"@deepseek-ai/dsh-credentials": ">=0.2.
|
|
78
|
-
"@deepseek-ai/dsh-host-webserver": ">=0.2.
|
|
79
|
-
"@deepseek-ai/dsh-llm": ">=0.2.
|
|
80
|
-
"@deepseek-ai/dsh-settings": ">=0.2.
|
|
81
|
-
"@deepseek-ai/dsh-skill": ">=0.2.
|
|
82
|
-
"@deepseek-ai/dsh-subagent": ">=0.2.
|
|
83
|
-
"@deepseek-ai/dsh-tools": ">=0.2.
|
|
84
|
-
"@deepseek-ai/dsh-util-values": ">=0.2.
|
|
69
|
+
"@deepseek-ai/dsh-agent": ">=0.2.1-rc.1 <0.2.2",
|
|
70
|
+
"@deepseek-ai/dsh-api-remotes": ">=0.2.1-rc.1 <0.2.2",
|
|
71
|
+
"@deepseek-ai/dsh-atomic-write": ">=0.2.1-rc.1 <0.2.2",
|
|
72
|
+
"@deepseek-ai/dsh-client-locale": ">=0.2.1-rc.1 <0.2.2",
|
|
73
|
+
"@deepseek-ai/dsh-client-connection": ">=0.2.1-rc.1 <0.2.2",
|
|
74
|
+
"@deepseek-ai/dsh-client-ui-primitives": ">=0.2.1-rc.1 <0.2.2",
|
|
75
|
+
"@deepseek-ai/dsh-client-ui-renderer": ">=0.2.1-rc.1 <0.2.2",
|
|
76
|
+
"@deepseek-ai/dsh-client-ui-settings": ">=0.2.1-rc.1 <0.2.2",
|
|
77
|
+
"@deepseek-ai/dsh-client-ui-slots": ">=0.2.1-rc.1 <0.2.2",
|
|
78
|
+
"@deepseek-ai/dsh-credentials": ">=0.2.1-rc.1 <0.2.2",
|
|
79
|
+
"@deepseek-ai/dsh-host-webserver": ">=0.2.1-rc.1 <0.2.2",
|
|
80
|
+
"@deepseek-ai/dsh-llm": ">=0.2.1-rc.1 <0.2.2",
|
|
81
|
+
"@deepseek-ai/dsh-settings": ">=0.2.1-rc.1 <0.2.2",
|
|
82
|
+
"@deepseek-ai/dsh-skill": ">=0.2.1-rc.1 <0.2.2",
|
|
83
|
+
"@deepseek-ai/dsh-subagent": ">=0.2.1-rc.1 <0.2.2",
|
|
84
|
+
"@deepseek-ai/dsh-tools": ">=0.2.1-rc.1 <0.2.2",
|
|
85
|
+
"@deepseek-ai/dsh-util-values": ">=0.2.1-rc.1 <0.2.2",
|
|
85
86
|
"react": "^18.2.0"
|
|
86
87
|
},
|
|
87
88
|
"peerDependenciesMeta": {
|
|
@@ -112,23 +113,23 @@
|
|
|
112
113
|
},
|
|
113
114
|
"devDependencies": {
|
|
114
115
|
"@deepseek-ai/cordis": "^4.0.4",
|
|
115
|
-
"@deepseek-ai/dsh-agent": "0.2.
|
|
116
|
-
"@deepseek-ai/dsh-api-remotes": "0.2.
|
|
117
|
-
"@deepseek-ai/dsh-atomic-write": "0.2.
|
|
118
|
-
"@deepseek-ai/dsh-client-locale": "0.2.
|
|
119
|
-
"@deepseek-ai/dsh-client-connection": "0.2.
|
|
120
|
-
"@deepseek-ai/dsh-client-ui-primitives": "0.2.
|
|
121
|
-
"@deepseek-ai/dsh-client-ui-renderer": "0.2.
|
|
122
|
-
"@deepseek-ai/dsh-client-ui-settings": "0.2.
|
|
123
|
-
"@deepseek-ai/dsh-client-ui-slots": "0.2.
|
|
124
|
-
"@deepseek-ai/dsh-credentials": "0.2.
|
|
125
|
-
"@deepseek-ai/dsh-host-webserver": "0.2.
|
|
126
|
-
"@deepseek-ai/dsh-llm": "0.2.
|
|
127
|
-
"@deepseek-ai/dsh-settings": "0.2.
|
|
128
|
-
"@deepseek-ai/dsh-skill": "0.2.
|
|
129
|
-
"@deepseek-ai/dsh-subagent": "0.2.
|
|
130
|
-
"@deepseek-ai/dsh-tools": "0.2.
|
|
131
|
-
"@deepseek-ai/dsh-util-values": "0.2.
|
|
116
|
+
"@deepseek-ai/dsh-agent": ">=0.2.1-rc.1 <0.2.2",
|
|
117
|
+
"@deepseek-ai/dsh-api-remotes": ">=0.2.1-rc.1 <0.2.2",
|
|
118
|
+
"@deepseek-ai/dsh-atomic-write": ">=0.2.1-rc.1 <0.2.2",
|
|
119
|
+
"@deepseek-ai/dsh-client-locale": ">=0.2.1-rc.1 <0.2.2",
|
|
120
|
+
"@deepseek-ai/dsh-client-connection": ">=0.2.1-rc.1 <0.2.2",
|
|
121
|
+
"@deepseek-ai/dsh-client-ui-primitives": ">=0.2.1-rc.1 <0.2.2",
|
|
122
|
+
"@deepseek-ai/dsh-client-ui-renderer": ">=0.2.1-rc.1 <0.2.2",
|
|
123
|
+
"@deepseek-ai/dsh-client-ui-settings": ">=0.2.1-rc.1 <0.2.2",
|
|
124
|
+
"@deepseek-ai/dsh-client-ui-slots": ">=0.2.1-rc.1 <0.2.2",
|
|
125
|
+
"@deepseek-ai/dsh-credentials": ">=0.2.1-rc.1 <0.2.2",
|
|
126
|
+
"@deepseek-ai/dsh-host-webserver": ">=0.2.1-rc.1 <0.2.2",
|
|
127
|
+
"@deepseek-ai/dsh-llm": ">=0.2.1-rc.1 <0.2.2",
|
|
128
|
+
"@deepseek-ai/dsh-settings": ">=0.2.1-rc.1 <0.2.2",
|
|
129
|
+
"@deepseek-ai/dsh-skill": ">=0.2.1-rc.1 <0.2.2",
|
|
130
|
+
"@deepseek-ai/dsh-subagent": ">=0.2.1-rc.1 <0.2.2",
|
|
131
|
+
"@deepseek-ai/dsh-tools": ">=0.2.1-rc.1 <0.2.2",
|
|
132
|
+
"@deepseek-ai/dsh-util-values": ">=0.2.1-rc.1 <0.2.2",
|
|
132
133
|
"@types/node": "^22.20.0",
|
|
133
134
|
"@types/semver": "^7.7.0",
|
|
134
135
|
"@types/react": "~18.3.1",
|
package/src/catalog-types.ts
CHANGED
|
@@ -9,9 +9,9 @@ export interface LiveRoute {
|
|
|
9
9
|
readonly providerName: string
|
|
10
10
|
readonly model: string
|
|
11
11
|
readonly modelName: string
|
|
12
|
-
/** True when this route can be selected for spawn (live adapter +
|
|
12
|
+
/** True when this route can be selected for spawn (live adapter + available authentication). */
|
|
13
13
|
readonly selectable: boolean
|
|
14
|
-
readonly source: 'api-key' | 'oauth'
|
|
14
|
+
readonly source: 'api-key' | 'oauth' | 'local'
|
|
15
15
|
readonly oauthSignedIn?: boolean
|
|
16
16
|
readonly routeRegistered: boolean
|
|
17
17
|
readonly efforts: readonly LiveEffort[]
|
package/src/catalog.ts
CHANGED
|
@@ -235,8 +235,13 @@ export async function buildCatalog(host: CatalogHost, signal?: AbortSignal): Pro
|
|
|
235
235
|
}
|
|
236
236
|
}
|
|
237
237
|
|
|
238
|
-
|
|
239
|
-
|
|
238
|
+
// Cursor passthrough authenticates through the local Cursor CLI. A
|
|
239
|
+
// registered provider with live models therefore needs no DSH credential.
|
|
240
|
+
const localPassthrough = provider.id === 'cursor'
|
|
241
|
+
const selectable = oauthSignedIn || keyPresent || localPassthrough
|
|
242
|
+
const source: LiveRoute['source'] = oauthSignedIn
|
|
243
|
+
? 'oauth'
|
|
244
|
+
: localPassthrough ? 'local' : 'api-key'
|
|
240
245
|
if (!selectable) continue
|
|
241
246
|
|
|
242
247
|
for (const model of models) {
|