dsh-deeppilot 0.9.5 → 0.9.6
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/COMPATIBILITY.md +37 -6
- package/README.md +11 -9
- package/README.zh-CN.md +12 -9
- package/docs/DSH_RELEASE_MEMORY.md +226 -12
- package/docs/NPM_PUBLISHING.md +5 -0
- package/package.json +13 -12
package/COMPATIBILITY.md
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
# Compatibility
|
|
2
2
|
|
|
3
|
-
This branch targets exactly **
|
|
4
|
-
`latest`/`next` channels point at, and `0.2.1-alpha.3
|
|
5
|
-
|
|
6
|
-
|
|
3
|
+
This branch targets exactly **three DSH releases**: `0.2.0-rc.2`, which the npm
|
|
4
|
+
`latest`/`next` channels point at, and `0.2.1-alpha.3` and `0.2.1-alpha.4`, which
|
|
5
|
+
the `alpha` channel has pointed at in turn. All three are named in both
|
|
6
|
+
`engines.dsh` and `peerDependencies`; no other version is accepted. DSH evaluates
|
|
7
|
+
that declaration before composing a profile — on every start, not only on
|
|
7
8
|
install — so a newly published DSH release deactivates this plugin until the
|
|
8
|
-
|
|
9
|
+
list is widened deliberately. That is the intended trade: a plugin that cannot
|
|
9
10
|
run on an unaudited host fails visibly instead of misbehaving quietly. The
|
|
10
11
|
decision and the reversal it represents are recorded in
|
|
11
12
|
[`docs/决策记录.md`](./docs/决策记录.md) (章节一), with the supporting audit in
|
|
@@ -18,7 +19,7 @@ is covered by the isolated compose and live-runs recorded in the release memory.
|
|
|
18
19
|
| Component | Current contract | Evidence |
|
|
19
20
|
|---|---|---|
|
|
20
21
|
| Node.js | 22 or newer | Package engine and CI |
|
|
21
|
-
| DSH CLI and Host API | `0.2.0-rc.2 \|\| 0.2.1-alpha.3` (dev pins `0.2.0-rc.2`) | Peer metadata, source typecheck, unit tests, bundle build, and config schema projection against a real 0.2.0-rc.2 CLI, plus isolated composes and live phone-protocol runs with the published 0.2.1-alpha.2 and 0.2.1-alpha.
|
|
22
|
+
| DSH CLI and Host API | `engines.dsh` and `peerDependencies` both name `0.2.0-rc.2 \|\| 0.2.1-alpha.3 \|\| 0.2.1-alpha.4` (dev pins `0.2.0-rc.2`) | Peer metadata, source typecheck, unit tests, bundle build, and config schema projection against a real 0.2.0-rc.2 CLI, plus isolated composes and live phone-protocol runs with the published 0.2.1-alpha.2, 0.2.1-alpha.3, and 0.2.1-alpha.4 CLIs |
|
|
22
23
|
| iOS bridge | DeepPilot protocol v2 | Bridge protocol tests; device behavior must be checked with the running Host and app |
|
|
23
24
|
| Remote access | Tailscale Funnel on ports 443, 8443, or 10000 | Helper and supervisor tests |
|
|
24
25
|
|
|
@@ -70,6 +71,34 @@ carries the old top-level `debug: true` is accepted but that value is ignored:
|
|
|
70
71
|
verbose logging must be turned on again from the settings page. No other config
|
|
71
72
|
field changed shape, and the old key is not read anywhere in this version.
|
|
72
73
|
|
|
74
|
+
## 0.2.1-alpha.4 audit outcome
|
|
75
|
+
|
|
76
|
+
The source-level audit of `dsh-v0.2.1-alpha.4` against `dsh-v0.2.1-alpha.3` found
|
|
77
|
+
no runtime break and one deliberate activation break. Of the ten peer packages,
|
|
78
|
+
**eight have byte-identical `lib/` trees** — including `dsh-api-gateway` and the
|
|
79
|
+
three Client faces the resident interaction client loads — so every alpha.3 fix
|
|
80
|
+
still holds unchanged. Only `dsh-api-remotes` changed in code: one additive
|
|
81
|
+
Remote Events entry (`plugin-market/changed`) and the rename of
|
|
82
|
+
`IncompatiblePlugin.peers` to `requirements`, a field this plugin never reads.
|
|
83
|
+
Two packages appear for the first time — `dsh-plugin-market` and
|
|
84
|
+
`dsh-experimental-plugin-market-bundle` — behind the release's custom plugin
|
|
85
|
+
index sources; neither is a dependency of this plugin.
|
|
86
|
+
|
|
87
|
+
The activation break is the release's own stated migration: DSH now evaluates a
|
|
88
|
+
plugin's `engines.dsh` range **alone**, ignoring `peerDependencies` entirely
|
|
89
|
+
whenever that field is present. A package that declares no `engines.dsh` — as
|
|
90
|
+
this one did — keeps the older peer evaluation, so the previously exact peer
|
|
91
|
+
list rejected `0.2.1-alpha.4` and the plugin would not have activated on it.
|
|
92
|
+
Both declarations now name the same three releases. The audit reproduced that
|
|
93
|
+
refusal against the published `evaluatePluginCompatibility` of both hosts before
|
|
94
|
+
changing anything, and the same harness confirms the three audited hosts pass
|
|
95
|
+
while `0.2.1-alpha.2`, `0.2.1-alpha.5`, `0.2.1`, and `0.3.0` still fail.
|
|
96
|
+
|
|
97
|
+
Nothing else moved. Protocol v2, pairing state, and device records are untouched,
|
|
98
|
+
so no paired phone needs to re-pair, and the vendor peers need no widening: both
|
|
99
|
+
hosts still vendor `cordis 4.0.5-alpha.2` and `schemastery 3.18.5-alpha.2`, which
|
|
100
|
+
the existing ranges already admit.
|
|
101
|
+
|
|
73
102
|
## 0.2.1-alpha.3 audit outcome
|
|
74
103
|
|
|
75
104
|
The source-level audit of `dsh-v0.2.1-alpha.3` against `dsh-v0.2.1-alpha.2`
|
|
@@ -146,6 +175,8 @@ needs a documentation update, not a peer-range widening.
|
|
|
146
175
|
> versions actually audited, `0.2.0-rc.2` and `0.2.1-alpha.3`; see the
|
|
147
176
|
> 0.2.1-alpha.3 outcome above and `docs/决策记录.md` (章节一). The paragraphs in
|
|
148
177
|
> this historical entry describe the policy as it stood on 2026-09-29.
|
|
178
|
+
> `0.2.1-alpha.4` was added the next day by the same deliberate audit step, and
|
|
179
|
+
> the list now lives in `engines.dsh` as well as in `peerDependencies`.
|
|
149
180
|
|
|
150
181
|
## 0.2.0-rc.1 audit outcome
|
|
151
182
|
|
package/README.md
CHANGED
|
@@ -32,15 +32,17 @@ Host on your own computer and does not replace or modify the DSH Web UI.
|
|
|
32
32
|
|
|
33
33
|
## Install from npm
|
|
34
34
|
|
|
35
|
-
This source checkout targets Node.js 22+ and the
|
|
36
|
-
audited against — `0.2.0-rc.2` (the `latest`/`next` channels) and `
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
any other host version refuses to activate
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
35
|
+
This source checkout targets Node.js 22+ and the three DSH releases it has been
|
|
36
|
+
audited against — `0.2.0-rc.2` (the `latest`/`next` channels) and the `alpha`
|
|
37
|
+
channel releases `0.2.1-alpha.3` and `0.2.1-alpha.4` — with a `web` profile. DSH
|
|
38
|
+
checks a plugin's declared requirements before composing a profile, on every
|
|
39
|
+
start rather than only on install, so any other host version refuses to activate
|
|
40
|
+
this plugin. From DSH `0.2.1-alpha.4` on, that check reads `engines.dsh` and
|
|
41
|
+
ignores `peerDependencies`; older hosts know only the peer range, so both name
|
|
42
|
+
the same three releases. The package includes Funnel helpers for macOS, Linux,
|
|
43
|
+
and Windows on amd64/arm64; trusted-LAN mode does not require the helper.
|
|
44
|
+
|
|
45
|
+
The current working tree names exactly those three versions in `engines.dsh` and
|
|
44
46
|
`peerDependencies` and is built/typechecked against `0.2.0-rc.2`. A previously
|
|
45
47
|
published plugin package may still carry its own older compatibility
|
|
46
48
|
declaration until a release is made from this tree.
|
package/README.zh-CN.md
CHANGED
|
@@ -30,15 +30,18 @@
|
|
|
30
30
|
|
|
31
31
|
## 从 npm 安装
|
|
32
32
|
|
|
33
|
-
当前源码面向 Node.js 22+ 与带 `web` profile
|
|
34
|
-
`0.2.0-rc.2`(`latest`/`next`
|
|
35
|
-
DSH 在组合 profile
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
33
|
+
当前源码面向 Node.js 22+ 与带 `web` profile 的**三个已审计 DSH 版本**:
|
|
34
|
+
`0.2.0-rc.2`(`latest`/`next` 通道),以及 `alpha` 通道的 `0.2.1-alpha.3`
|
|
35
|
+
与 `0.2.1-alpha.4`。DSH 在组合 profile 前会校验插件声明的兼容要求,且
|
|
36
|
+
**每次启动都会校验**(不只是安装时),因此其他宿主版本会拒绝激活本插件。
|
|
37
|
+
从 DSH `0.2.1-alpha.4` 起,该校验只读 `engines.dsh` 并忽略
|
|
38
|
+
`peerDependencies`;更早的宿主只认 peer 范围,因此两处列出同一组三个版本。
|
|
39
|
+
npm 包内置 macOS、Linux、Windows 的 amd64/arm64 Funnel helper;可信局域网
|
|
40
|
+
模式不依赖 helper。
|
|
41
|
+
|
|
42
|
+
当前工作树的 `engines.dsh` 与 `peerDependencies` 精确列出这三个版本,构建与
|
|
43
|
+
类型检查针对 `0.2.0-rc.2`。从此工作树发布新版本前,已发布的旧插件包仍可能
|
|
44
|
+
带有各自旧的兼容声明。
|
|
42
45
|
|
|
43
46
|
```sh
|
|
44
47
|
dsh plugin --profile web add dsh-deeppilot
|
|
@@ -3,7 +3,71 @@
|
|
|
3
3
|
> This is the durable audit record for DeepPilot's public DSH plugin. Re-audit
|
|
4
4
|
> the next DSH release instead of assuming that an rc upgrade is runtime-safe.
|
|
5
5
|
|
|
6
|
-
## Current decision
|
|
6
|
+
## Current decision — `dsh-v0.2.1-alpha.4`
|
|
7
|
+
|
|
8
|
+
- **Audited release:** `dsh-v0.2.1-alpha.4` (official release page:
|
|
9
|
+
<https://github.com/deepseek-ai/deepseek-harness/releases/tag/dsh-v0.2.1-alpha.4>),
|
|
10
|
+
published to npm 2026-10-15T13:08:08Z on the `alpha` dist-tag. It is **not**
|
|
11
|
+
`latest`; `latest`/`next` still point at `0.2.0-rc.2`, exactly as at alpha.3.
|
|
12
|
+
- **Comparison baseline:** `dsh-v0.2.1-alpha.3` (the previous audited tag).
|
|
13
|
+
- **Plugin runtime verdict: no break, and no `src/` change was needed.** Eight of
|
|
14
|
+
the ten peer packages ship a byte-identical `lib/` tree; only their
|
|
15
|
+
`package.json` `version` fields moved. That set includes `dsh-api-gateway`,
|
|
16
|
+
where alpha.3's first two breaks lived, and all three Client faces the resident
|
|
17
|
+
interaction client loads (`dsh-typert-registry/client`,
|
|
18
|
+
`dsh-client-connection/client`, `dsh-api-gateway/client`). Every alpha.3 fix
|
|
19
|
+
therefore still holds unchanged.
|
|
20
|
+
- **Only `dsh-api-remotes` changed in code, additively.** One new Remote Events
|
|
21
|
+
entry (`plugin-market/changed`) and the rename of `IncompatiblePlugin.peers` to
|
|
22
|
+
`requirements`. The plugin reads neither: it subscribes to no Remote Events
|
|
23
|
+
entry of that name, and its own phone-wire frame registry is a separate
|
|
24
|
+
vocabulary from DSH Remote Events. Its `lib/client.js` shows a 750-line diff
|
|
25
|
+
that normalises to zero contract changes — the bulk is `TYPERT_REMOTE$N`
|
|
26
|
+
renumbering plus `sourceLocation` line drift from the one inserted remote.
|
|
27
|
+
- **Two packages exist for the first time** — `@deepseek-ai/dsh-plugin-market`
|
|
28
|
+
and `@deepseek-ai/dsh-experimental-plugin-market-bundle` — behind this
|
|
29
|
+
release's custom plugin index sources. Neither is a dependency of this plugin,
|
|
30
|
+
the plugin does not name either in `inject`, and the bundle is a purely
|
|
31
|
+
additive entry in `dsh-app-boot`'s default bundle list.
|
|
32
|
+
- **Activation verdict: one break, and it is the release's own stated
|
|
33
|
+
migration.** alpha.4 changed the compatibility rule so that a plugin's own
|
|
34
|
+
`engines.dsh` range **decides alone and `peerDependencies` are ignored**
|
|
35
|
+
whenever that field is present; only a manifest without `engines.dsh` falls
|
|
36
|
+
back to the old peer evaluation. This plugin declared no `engines.dsh`, so it
|
|
37
|
+
kept the peer path, and its exact two-version peer list rejected
|
|
38
|
+
`0.2.1-alpha.4` — the plugin would not have activated on that host.
|
|
39
|
+
- **Evidence: reproduced against the published bundles, not inferred.** The audit
|
|
40
|
+
ran each host's own published `evaluatePluginCompatibility` (alpha.3 and
|
|
41
|
+
alpha.4 installed into separate isolated directories) against this plugin's
|
|
42
|
+
real `package.json`, over one candidate list. Before any edit, both hosts
|
|
43
|
+
admitted `0.2.0-rc.2` and `0.2.1-alpha.3` and both refused `0.2.1-alpha.4`,
|
|
44
|
+
reporting all ten peers unmet. With the new `engines.dsh` range in place, both
|
|
45
|
+
hosts admit all three audited releases; alpha.4 reports a **single**
|
|
46
|
+
`engines.dsh` requirement instead of ten peers when it refuses; and
|
|
47
|
+
`0.2.1-alpha.2`, `0.2.1-alpha.5`, `0.2.1`, and `0.3.0` are still refused.
|
|
48
|
+
alpha.3 ignores `engines.dsh` entirely — the field did not exist yet — and
|
|
49
|
+
keeps deciding on `peerDependencies`, which is why both declarations must name
|
|
50
|
+
the same list.
|
|
51
|
+
- **Install verdict: the two declarations now agree.** `engines.dsh` and all ten
|
|
52
|
+
`@deepseek-ai/dsh*` peers name `0.2.0-rc.2 || 0.2.1-alpha.3 || 0.2.1-alpha.4`,
|
|
53
|
+
mirrored in `tests/compatibility-metadata.test.ts`, `package-lock.json`, both
|
|
54
|
+
READMEs, `COMPATIBILITY.md`, `AGENTS.md`, and the local `docs/决策记录.md`
|
|
55
|
+
(章节一, 条目3). The dev pins and `DSH_BASELINE` stay at the exact
|
|
56
|
+
`0.2.0-rc.2` this branch builds and typechecks against.
|
|
57
|
+
- **Vendor peers need no widening.** Both hosts still vendor `cordis
|
|
58
|
+
4.0.5-alpha.2` and `schemastery 3.18.5-alpha.2`; neither package published a
|
|
59
|
+
`dsh-0-2-1-alpha-4` dist-tag, and the existing `~4.0.5-alpha.1` /
|
|
60
|
+
`~3.18.5-alpha.1` ranges already admit them.
|
|
61
|
+
- **Protocol verdict: no phone-protocol change.** Protocol v2, pairing state, and
|
|
62
|
+
device records are untouched by this release; no phone needs to re-pair.
|
|
63
|
+
- **Unrelated to this plugin, recorded for completeness:** the release also
|
|
64
|
+
brought per-model reasoning levels for custom API models, discovery and
|
|
65
|
+
installation from custom plugin index sources, a command/argument input fix, an
|
|
66
|
+
Office file delivery change, a Developer Tools reload fix, lower Linux command
|
|
67
|
+
startup overhead, and failed-command status reporting. None of them touches a
|
|
68
|
+
surface this plugin calls.
|
|
69
|
+
|
|
70
|
+
### Previous decision — `dsh-v0.2.1-alpha.3`
|
|
7
71
|
|
|
8
72
|
- **Audited release:** `dsh-v0.2.1-alpha.3` (official release page:
|
|
9
73
|
<https://github.com/deepseek-ai/deepseek-harness/releases/tag/dsh-v0.2.1-alpha.3>),
|
|
@@ -115,17 +179,36 @@
|
|
|
115
179
|
|
|
116
180
|
### Plugin release verdicts
|
|
117
181
|
|
|
118
|
-
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
182
|
+
- **发布结论(`0.9.5`,2026-10-15,`v0.9.5` @ `6517ad7`):** 包含 alpha.3
|
|
183
|
+
对端(Peer)与客户端兼容修复、两个宿主精确列举策略、跨语言认证向量与恢复说明,
|
|
184
|
+
以及手动 OIDC 身份认证与来源证明发布。包与锁文件两处根版本、基线快照一致。
|
|
185
|
+
- **发布前验证:** 干净依赖安装;562 项单元测试通过、零失败、一项既有待办;
|
|
186
|
+
类型检查、构建、固定宿主的真实配置模型加载、Go 测试、六个辅助程序校验和与
|
|
187
|
+
包内容检查通过。挑战篡改测试基于当前连接生成变更值,消除了时间碰撞,连续
|
|
188
|
+
20 次重点回归通过。发布提交的持续集成(CI)和 CodeQL 代码安全扫描通过。
|
|
189
|
+
- **注册表与来源证明:** npm 于 `2026-10-14T23:29:29.605Z` 发布该版本,
|
|
190
|
+
`latest`(稳定分发标签)指向 `0.9.5`。下载压缩包共 50,934,088 字节,
|
|
191
|
+
SHA1 `6a2f356efa1e48849d9bf713f88cd0fd67c7999c` 与工作流上传记录一致;
|
|
192
|
+
SHA512 与注册表及来源证明中的包摘要一致。来源证明精确对应 `v0.9.5`、
|
|
193
|
+
`6517ad7b6d7022afc9b3d81d6779b434282c9c56` 和 `.github/workflows/publish.yml`。
|
|
194
|
+
`npm audit signatures`(npm 签名审计)通过,包含本插件的注册表签名和来源证明;
|
|
195
|
+
npm 可信发布者绑定显示 `Valid`(有效)。压缩包发布不依赖可选的 `gitHead`
|
|
196
|
+
字段来确认源码,使用已验证签名的来源证明提交。
|
|
197
|
+
- **已发布包安装:** 两个独立的新 DSH 主目录分别使用 `0.2.0-rc.2` 与
|
|
198
|
+
`0.2.1-alpha.3`,从注册表执行 `dsh plugin --profile verify add dsh-deeppilot@0.9.5`。
|
|
199
|
+
三条插件配置组合成功,版本为 `0.9.5`,安装路径未引用源码工作区,六个辅助程序
|
|
200
|
+
校验和全部一致;实际配置模型导入未出现本插件相关错误。两个 Web 模板仍各有
|
|
201
|
+
四项宿主配置模型错误,与未安装插件的基线完全一致;不把整个模板核对说成全绿。
|
|
202
|
+
- **真实宿主边界:** 隔离的 alpha.3 冒烟检查为 24 项通过、1 项失败、3 项跳过。
|
|
203
|
+
失败项是未配置模型账号的全新主目录中,模型目录非空的断言;模型目录 RPC 正常
|
|
204
|
+
且可路由。模型切换、真实提问和模型触发的审批问答未验证,iPhone 真机未验证。
|
|
205
|
+
已认证连接重复提交认证证明的既有待办保留。
|
|
206
|
+
- **发布后缓存核对修正:** [首次发布运行](https://github.com/Mars-Sea/dsh-deeppilot/actions/runs/38653869533)
|
|
207
|
+
上传成功,末尾核对短暂命中缓存的 404 而失败。独立注册表、摘要、签名及安装
|
|
208
|
+
核验通过后才公开 [GitHub 发布页](https://github.com/Mars-Sea/dsh-deeppilot/releases/tag/v0.9.5)。
|
|
209
|
+
后续仓库修正为刷新查询、要求元数据重新校验并最多读取重试 12 次;修正后的
|
|
210
|
+
只读核对步骤已对真实注册表执行通过。未重跑上传、未修改已发布包或移动版本标签。
|
|
211
|
+
发布说明:`docs/RELEASE_NOTES-0.9.5.md`。
|
|
129
212
|
|
|
130
213
|
- **Release verdict (`0.9.4`, published 2026-10-10, tag `v0.9.4` @ `e2f77af`):**
|
|
131
214
|
carries the `projections` adapter fix and the Automation tasks documentation
|
|
@@ -306,6 +389,137 @@
|
|
|
306
389
|
bundle" below. The plugin needs no code change; the phone's copy now points
|
|
307
390
|
at the bundle.
|
|
308
391
|
|
|
392
|
+
## 2026-10-15 — audit of `dsh-v0.2.1-alpha.4`
|
|
393
|
+
|
|
394
|
+
`dsh-v0.2.1-alpha.4` reached npm on 2026-10-15T13:08:08Z, roughly 24 hours after
|
|
395
|
+
alpha.3, with the GitHub release following at 13:40:02Z. It is a small release —
|
|
396
|
+
two features, five fixes, and one compatibility-policy change — and
|
|
397
|
+
`latest`/`next` still point at `0.2.0-rc.2`.
|
|
398
|
+
|
|
399
|
+
### Method
|
|
400
|
+
|
|
401
|
+
This audit established the change surface from **released artifacts before
|
|
402
|
+
reading any source**, rather than from the release notes, because those notes are
|
|
403
|
+
under 2 KB and all four of alpha.3's breaks had been invisible in its notes.
|
|
404
|
+
Every `@deepseek-ai/dsh*` peer package was fetched from npm at both
|
|
405
|
+
`0.2.1-alpha.3` and `0.2.1-alpha.4`, unpacked into a scratch tree, and compared
|
|
406
|
+
file by file. The one large diff was then re-compared after normalising
|
|
407
|
+
`TYPERT_REMOTE$N` renumbering and `sourceLocation` line/column drift, so that
|
|
408
|
+
mechanical churn could not hide a contract change.
|
|
409
|
+
|
|
410
|
+
### Change surface
|
|
411
|
+
|
|
412
|
+
- **Eight of the ten peer packages carry a byte-identical `lib/` tree**:
|
|
413
|
+
`dsh-api-gateway`, `dsh-client-connection`, `dsh-client-locale`,
|
|
414
|
+
`dsh-client-ui-settings`, `dsh-client-ui-slots`, `dsh-settings`,
|
|
415
|
+
`dsh-typert-protocol`, `dsh-typert-registry`. Only their `package.json`
|
|
416
|
+
`version` fields moved. That set includes every module alpha.3 broke the
|
|
417
|
+
plugin through.
|
|
418
|
+
- **`dsh-api-remotes`** gained one Remote Events entry (`plugin-market/changed`),
|
|
419
|
+
renamed `IncompatiblePlugin.peers` to `requirements`, and added a
|
|
420
|
+
`pluginMarket` remote. Its `lib/client.js` diff spans 750 lines but normalises
|
|
421
|
+
to zero contract changes — `TYPERT_REMOTE$N` renumbering, `sourceLocation`
|
|
422
|
+
drift, and one rewritten `productAnalytics/report` description.
|
|
423
|
+
- **`dsh-app-boot`** rewrote the compatibility evaluator (below) and appended
|
|
424
|
+
`@deepseek-ai/dsh-experimental-plugin-market-bundle` to its default bundle
|
|
425
|
+
list, which is additive to `DEFAULT_BUNDLES`.
|
|
426
|
+
- **`dsh-plugin-manager`** carried the same `peers` → `requirements` rename
|
|
427
|
+
through `IncompatiblePlugin` and its diagnostics.
|
|
428
|
+
- **Two packages are new at this release**: `@deepseek-ai/dsh-plugin-market` and
|
|
429
|
+
`@deepseek-ai/dsh-experimental-plugin-market-bundle`. Neither resolves at
|
|
430
|
+
alpha.3. Neither is a dependency of this plugin, and neither appears in its
|
|
431
|
+
`inject`.
|
|
432
|
+
- The `dsh` CLI's own ten `@deepseek-ai/dsh*` dependencies all moved to alpha.4;
|
|
433
|
+
the vendor pins did **not** move. Both hosts still vendor `cordis
|
|
434
|
+
4.0.5-alpha.2` and `schemastery 3.18.5-alpha.2`, and neither vendor published a
|
|
435
|
+
`dsh-0-2-1-alpha-4` dist-tag, so the existing `~4.0.5-alpha.1` /
|
|
436
|
+
`~3.18.5-alpha.1` ranges already admit what both hosts ship.
|
|
437
|
+
|
|
438
|
+
### The one break: `engines.dsh` now decides alone
|
|
439
|
+
|
|
440
|
+
`dsh-app-boot`'s evaluator grew a requirements path that short-circuits the old
|
|
441
|
+
peer loop:
|
|
442
|
+
|
|
443
|
+
```js
|
|
444
|
+
function unmetRequirements(fields, runtimeVersion) {
|
|
445
|
+
const engines = Object.hasOwn(fields, "engines") ? objectOf$1(fields.engines, "Plugin manifest engines") : {};
|
|
446
|
+
if (Object.hasOwn(engines, "dsh")) {
|
|
447
|
+
const range = engines.dsh;
|
|
448
|
+
if (typeof range !== "string") throw new Error("Plugin manifest engines.dsh must be a string");
|
|
449
|
+
return satisfies(runtimeVersion, range) ? {} : { "engines.dsh": range };
|
|
450
|
+
}
|
|
451
|
+
if (!Object.hasOwn(fields, "peerDependencies")) return {};
|
|
452
|
+
// ...otherwise the previous per-peer loop, unchanged
|
|
453
|
+
}
|
|
454
|
+
```
|
|
455
|
+
|
|
456
|
+
Three consequences matter here. A plugin that declares `engines.dsh` is judged
|
|
457
|
+
**only** by it, and its `peerDependencies` are never read. A plugin that does not
|
|
458
|
+
declare it keeps the previous behaviour — which is the state this plugin was in,
|
|
459
|
+
so its exact two-version peer list refused `0.2.1-alpha.4`. And `engines.dsh` is
|
|
460
|
+
taken verbatim, with none of the `workspace:^` / `workspace:~` / `workspace:*`
|
|
461
|
+
substitution the peer path performs, so any `workspace:` range there is unmet.
|
|
462
|
+
|
|
463
|
+
### Validation evidence
|
|
464
|
+
|
|
465
|
+
- **Compatibility decision, reproduced against the published evaluators — before
|
|
466
|
+
any edit.** Each host's own `evaluatePluginCompatibility` (alpha.3 and alpha.4,
|
|
467
|
+
installed into separate isolated directories) judged this plugin's real
|
|
468
|
+
`package.json` over one candidate list. Unchanged, both hosts admitted
|
|
469
|
+
`0.2.0-rc.2` and `0.2.1-alpha.3` and refused `0.2.1-alpha.4`, listing all ten
|
|
470
|
+
peers as unmet. With the added `engines.dsh` range, both hosts admit all three
|
|
471
|
+
audited releases; alpha.4 reports a **single** `engines.dsh` requirement
|
|
472
|
+
instead of ten peers when it refuses; and `0.2.1-alpha.2`, `0.2.1-alpha.5`,
|
|
473
|
+
`0.2.1`, and `0.3.0` remain refused. alpha.3 ignores `engines.dsh` entirely
|
|
474
|
+
and keeps deciding on `peerDependencies`, which is why both declarations must
|
|
475
|
+
name the same list.
|
|
476
|
+
- **Live A/B install on the published alpha.4 CLI — the evidence that matters.**
|
|
477
|
+
Under an isolated `DSH_HOME`, the **unchanged** package was rejected outright:
|
|
478
|
+
`dsh: installation rejected: Plugin dsh-deeppilot@0.9.5 is incompatible with
|
|
479
|
+
dsh 0.2.1-alpha.4: requirements {…ten peers…}`, `Exact-version exemption: not
|
|
480
|
+
active`, `dsh: nothing was installed`, exit 1. The **fixed** package installed
|
|
481
|
+
cleanly, exit 0, linked into the profile manifest's `dsh.profile.bundles`
|
|
482
|
+
alongside `@deepseek-ai/dsh-sdk-minimal`.
|
|
483
|
+
- **Composed tree:** the same CLI's `--dump-config` produced **162 rows with the
|
|
484
|
+
plugin and 153 without it**, the plugin's three rows present at
|
|
485
|
+
`deeppilot-directory-picker-browse`, `deeppilot-directory-picker-browse-client`,
|
|
486
|
+
and `deeppilot`, with no `skipped`/`incompatible` diagnostic. The single
|
|
487
|
+
warning is the `sdk-minimal` template's own missing `directory-picker` entry,
|
|
488
|
+
which alpha.3 recorded as well.
|
|
489
|
+
- **Live boot on a real alpha.4 Web host.** An isolated `DSH_HOME` profile built
|
|
490
|
+
from the shipped Web template and linked to this working tree booted under the
|
|
491
|
+
published alpha.4 CLI on `--port 3180` (the default 3080 is held by this
|
|
492
|
+
machine's own Host). The plugin started fully —
|
|
493
|
+
`[deeppilot] data plane active (mux + host streams)`,
|
|
494
|
+
`[deeppilot] LAN TLS identity created`,
|
|
495
|
+
`[deeppilot] local transport listening on https://0.0.0.0:3098` — and the
|
|
496
|
+
alpha.3 failure line `DSH Remote interaction client unavailable` **did not
|
|
497
|
+
appear**. A scan of the whole boot log for `incompatible`, `rejected`,
|
|
498
|
+
`requirements`, `unavailable`, or `error` returns nothing.
|
|
499
|
+
- **Plugin unit tests:** `npm test` → **564 tests, 563 pass, 0 fail, 1 todo**,
|
|
500
|
+
including the new `engines.dsh names the same closed host list as the peer
|
|
501
|
+
range` and the updated peer-range boundary test. `npm run typecheck` passes.
|
|
502
|
+
- **Build and schema:** `npm run build` passes and leaves `lib/` **byte-identical
|
|
503
|
+
to HEAD** — this fix changes no code, only declarations and documentation, so
|
|
504
|
+
no host's runtime behaviour can regress. `npm run check:config-schema` passes
|
|
505
|
+
against the pinned `0.2.0-rc.2` CLI (`/34 → $defs/config19`, volatile fields
|
|
506
|
+
pinned).
|
|
507
|
+
- **Environment note, not a defect:** `check:config-schema` shells out to
|
|
508
|
+
`npx --yes @deepseek-ai/dsh@0.2.0-rc.2`, and this machine's `~/.npm/_cacache`
|
|
509
|
+
contains root-owned files, so the default npm cache fails with `EPERM`. Running
|
|
510
|
+
it with `npm_config_cache` pointed at a writable directory passes, and the
|
|
511
|
+
unchanged HEAD build fails identically under the default cache, which is what
|
|
512
|
+
attributes the failure to the machine rather than to this change.
|
|
513
|
+
|
|
514
|
+
### Evidence limits
|
|
515
|
+
|
|
516
|
+
Verified: install admission on alpha.4, profile composition, plugin startup, and
|
|
517
|
+
the full unit/typecheck/build/schema suite. **Not** verified here: a real iPhone
|
|
518
|
+
against this alpha.4 host, the Funnel transport, and a real model turn. The
|
|
519
|
+
phone-side contract is unchanged by this release — protocol v2, pairing state,
|
|
520
|
+
and device records are untouched, so no paired phone needs to re-pair — but that
|
|
521
|
+
is a source-level verdict, not a device run.
|
|
522
|
+
|
|
309
523
|
## 2026-10-14 — audit of `dsh-v0.2.1-alpha.3`
|
|
310
524
|
|
|
311
525
|
### Scope and method
|
package/docs/NPM_PUBLISHING.md
CHANGED
|
@@ -72,8 +72,13 @@
|
|
|
72
72
|
`npm whoami`(当前账号查询)不能验证 OIDC 发布权限。
|
|
73
73
|
2. 若 npm 上传成功而后续核对失败,先检查注册表;已存在的版本不能通过重跑覆盖。
|
|
74
74
|
排查来源证明或分发标签后再决定下一步,禁止把核对失败直接当作上传失败。
|
|
75
|
+
发布核对会绕过元数据缓存并有限重试;人工查询使用 `npm view --prefer-online`,
|
|
76
|
+
以免继续读取发布前的旧版本列表或缓存的 404 响应。
|
|
75
77
|
3. 本地语法检查、测试和打包不能证明 npm 绑定已生效;真实 OIDC 认证与来源证明
|
|
76
78
|
需要首次获授权的新版本发布才能验证。已有旧版本的认证状态不因新增工作流改变。
|
|
79
|
+
4. `0.9.5` 已完成首次 OIDC 身份认证发布;npm 绑定显示 `Valid`(有效),
|
|
80
|
+
来源证明签名、压缩包摘要与两个支持宿主的注册表安装核验通过。首次运行的末尾
|
|
81
|
+
核对因缓存失败,其上传步骤成功;发布证据及边界见 `docs/DSH_RELEASE_MEMORY.md`。
|
|
77
82
|
|
|
78
83
|
## 五、官方资料
|
|
79
84
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dsh-deeppilot",
|
|
3
|
-
"version": "0.9.
|
|
3
|
+
"version": "0.9.6",
|
|
4
4
|
"description": "DeepPilot companion plugin for DeepSeek Harness: use DSH from a native iPhone app over an authenticated, direct connection to your own computer.",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -82,7 +82,8 @@
|
|
|
82
82
|
"test": "tsx --test tests/*.test.ts"
|
|
83
83
|
},
|
|
84
84
|
"engines": {
|
|
85
|
-
"node": ">=22"
|
|
85
|
+
"node": ">=22",
|
|
86
|
+
"dsh": "0.2.0-rc.2 || 0.2.1-alpha.3 || 0.2.1-alpha.4"
|
|
86
87
|
},
|
|
87
88
|
"publishConfig": {
|
|
88
89
|
"access": "public"
|
|
@@ -94,16 +95,16 @@
|
|
|
94
95
|
},
|
|
95
96
|
"peerDependencies": {
|
|
96
97
|
"@deepseek-ai/cordis": "~4.0.4 || ~4.0.5-alpha.1",
|
|
97
|
-
"@deepseek-ai/dsh": "0.2.0-rc.2 || 0.2.1-alpha.3",
|
|
98
|
-
"@deepseek-ai/dsh-api-gateway": "0.2.0-rc.2 || 0.2.1-alpha.3",
|
|
99
|
-
"@deepseek-ai/dsh-api-remotes": "0.2.0-rc.2 || 0.2.1-alpha.3",
|
|
100
|
-
"@deepseek-ai/dsh-client-connection": "0.2.0-rc.2 || 0.2.1-alpha.3",
|
|
101
|
-
"@deepseek-ai/dsh-client-locale": "0.2.0-rc.2 || 0.2.1-alpha.3",
|
|
102
|
-
"@deepseek-ai/dsh-client-ui-settings": "0.2.0-rc.2 || 0.2.1-alpha.3",
|
|
103
|
-
"@deepseek-ai/dsh-client-ui-slots": "0.2.0-rc.2 || 0.2.1-alpha.3",
|
|
104
|
-
"@deepseek-ai/dsh-settings": "0.2.0-rc.2 || 0.2.1-alpha.3",
|
|
105
|
-
"@deepseek-ai/dsh-typert-protocol": "0.2.0-rc.2 || 0.2.1-alpha.3",
|
|
106
|
-
"@deepseek-ai/dsh-typert-registry": "0.2.0-rc.2 || 0.2.1-alpha.3",
|
|
98
|
+
"@deepseek-ai/dsh": "0.2.0-rc.2 || 0.2.1-alpha.3 || 0.2.1-alpha.4",
|
|
99
|
+
"@deepseek-ai/dsh-api-gateway": "0.2.0-rc.2 || 0.2.1-alpha.3 || 0.2.1-alpha.4",
|
|
100
|
+
"@deepseek-ai/dsh-api-remotes": "0.2.0-rc.2 || 0.2.1-alpha.3 || 0.2.1-alpha.4",
|
|
101
|
+
"@deepseek-ai/dsh-client-connection": "0.2.0-rc.2 || 0.2.1-alpha.3 || 0.2.1-alpha.4",
|
|
102
|
+
"@deepseek-ai/dsh-client-locale": "0.2.0-rc.2 || 0.2.1-alpha.3 || 0.2.1-alpha.4",
|
|
103
|
+
"@deepseek-ai/dsh-client-ui-settings": "0.2.0-rc.2 || 0.2.1-alpha.3 || 0.2.1-alpha.4",
|
|
104
|
+
"@deepseek-ai/dsh-client-ui-slots": "0.2.0-rc.2 || 0.2.1-alpha.3 || 0.2.1-alpha.4",
|
|
105
|
+
"@deepseek-ai/dsh-settings": "0.2.0-rc.2 || 0.2.1-alpha.3 || 0.2.1-alpha.4",
|
|
106
|
+
"@deepseek-ai/dsh-typert-protocol": "0.2.0-rc.2 || 0.2.1-alpha.3 || 0.2.1-alpha.4",
|
|
107
|
+
"@deepseek-ai/dsh-typert-registry": "0.2.0-rc.2 || 0.2.1-alpha.3 || 0.2.1-alpha.4",
|
|
107
108
|
"@deepseek-ai/schemastery": "~3.18.4 || ~3.18.5-alpha.1",
|
|
108
109
|
"react": "^19.2.8"
|
|
109
110
|
},
|