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 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.3
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.3
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.0-rc.2**(tag `dsh-v0.2.0-rc.2`,npm `@deepseek-ai/dsh@0.2.0-rc.2`)。Node `^22.19.0` 或 `>=24`。`@deepseek-ai/dsh-*` peer 范围是 `>=0.2.0-rc.1 <0.2.1`,接受 `0.2.0-rc.2`,拒绝 `0.1.7` alpha。
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.0-rc.2** (tag `dsh-v0.2.0-rc.2`, npm `@deepseek-ai/dsh@0.2.0-rc.2`). Node `^22.19.0` or `>=24`. The `@deepseek-ai/dsh-*` peer range is `>=0.2.0-rc.1 <0.2.1`: it accepts `0.2.0-rc.2` and rejects `0.1.7` alphas.
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 selectable = oauthSignedIn || keyPresent;
572
- const source = oauthSignedIn ? "oauth" : "api-key";
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.3",
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.0-rc.1 <0.2.1",
69
- "@deepseek-ai/dsh-api-remotes": ">=0.2.0-rc.1 <0.2.1",
70
- "@deepseek-ai/dsh-atomic-write": ">=0.2.0-rc.1 <0.2.1",
71
- "@deepseek-ai/dsh-client-locale": ">=0.2.0-rc.1 <0.2.1",
72
- "@deepseek-ai/dsh-client-connection": ">=0.2.0-rc.1 <0.2.1",
73
- "@deepseek-ai/dsh-client-ui-primitives": ">=0.2.0-rc.1 <0.2.1",
74
- "@deepseek-ai/dsh-client-ui-renderer": ">=0.2.0-rc.1 <0.2.1",
75
- "@deepseek-ai/dsh-client-ui-settings": ">=0.2.0-rc.1 <0.2.1",
76
- "@deepseek-ai/dsh-client-ui-slots": ">=0.2.0-rc.1 <0.2.1",
77
- "@deepseek-ai/dsh-credentials": ">=0.2.0-rc.1 <0.2.1",
78
- "@deepseek-ai/dsh-host-webserver": ">=0.2.0-rc.1 <0.2.1",
79
- "@deepseek-ai/dsh-llm": ">=0.2.0-rc.1 <0.2.1",
80
- "@deepseek-ai/dsh-settings": ">=0.2.0-rc.1 <0.2.1",
81
- "@deepseek-ai/dsh-skill": ">=0.2.0-rc.1 <0.2.1",
82
- "@deepseek-ai/dsh-subagent": ">=0.2.0-rc.1 <0.2.1",
83
- "@deepseek-ai/dsh-tools": ">=0.2.0-rc.1 <0.2.1",
84
- "@deepseek-ai/dsh-util-values": ">=0.2.0-rc.1 <0.2.1",
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.0-rc.2",
116
- "@deepseek-ai/dsh-api-remotes": "0.2.0-rc.2",
117
- "@deepseek-ai/dsh-atomic-write": "0.2.0-rc.2",
118
- "@deepseek-ai/dsh-client-locale": "0.2.0-rc.2",
119
- "@deepseek-ai/dsh-client-connection": "0.2.0-rc.2",
120
- "@deepseek-ai/dsh-client-ui-primitives": "0.2.0-rc.2",
121
- "@deepseek-ai/dsh-client-ui-renderer": "0.2.0-rc.2",
122
- "@deepseek-ai/dsh-client-ui-settings": "0.2.0-rc.2",
123
- "@deepseek-ai/dsh-client-ui-slots": "0.2.0-rc.2",
124
- "@deepseek-ai/dsh-credentials": "0.2.0-rc.2",
125
- "@deepseek-ai/dsh-host-webserver": "0.2.0-rc.2",
126
- "@deepseek-ai/dsh-llm": "0.2.0-rc.2",
127
- "@deepseek-ai/dsh-settings": "0.2.0-rc.2",
128
- "@deepseek-ai/dsh-skill": "0.2.0-rc.2",
129
- "@deepseek-ai/dsh-subagent": "0.2.0-rc.2",
130
- "@deepseek-ai/dsh-tools": "0.2.0-rc.2",
131
- "@deepseek-ai/dsh-util-values": "0.2.0-rc.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",
@@ -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 + logged-in credential). */
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
- const selectable = oauthSignedIn || keyPresent
239
- const source: LiveRoute['source'] = oauthSignedIn ? 'oauth' : 'api-key'
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) {