dsh-deeppilot 0.8.1 → 0.8.3

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 CHANGED
@@ -1,154 +1,35 @@
1
1
  # Compatibility
2
2
 
3
- This file separates tested evidence from intended behavior. Passing unit tests does not prove every DSH build, network, Mac, or iPhone combination.
3
+ This branch targets **DSH 0.1.7-rc.2**. The DSH peer dependencies and the development packages are pinned to that exact release. Earlier DSH builds and later release candidates are outside this branch's support scope.
4
4
 
5
- ## Public-beta baseline
6
-
7
- | Component | Baseline | Evidence |
5
+ | Component | Current contract | Evidence |
8
6
  |---|---|---|
9
- | Node.js | 22 or newer | package engine and CI |
10
- | DSH CLI and Host API | the `0.1.5-rc.*` and `0.1.6-*`/`0.1.6` lines, `0.1.5-rc.1` minimum, for plugin `0.7.x` | plugin source typecheck, unit suite (301 tests) and `tsdown` build run against the `0.1.5-rc.2`, `0.1.6-alpha.1` and `0.1.6-alpha.2` package families; the `deeppilot/report` contribution registered through both the `0.1.6-alpha.1` and the `0.1.6-alpha.2` `TypertRegistry`; bridge and `/phone` protocol tests |
11
- | Host OS | macOS, Linux, Windows on packaged amd64/arm64 helper targets | helper checksums plus user-confirmed Windows/Linux Funnel launch and connection; local LAN validation remains part of alpha testing |
12
- | Remote access | Tailscale Funnel, ports 443/8443/10000 | helper and supervisor tests |
13
- | iOS | native DeepPilot client, protocol v2 | simulator build and v2 pairing/challenge evidence |
7
+ | Node.js | 22 or newer | Package engine and CI |
8
+ | DSH CLI and Host API | `0.1.7-rc.2` | Peer metadata, source typecheck, unit tests, bundle build, and config schema projection against rc.2 |
9
+ | iOS bridge | DeepPilot protocol v2 | Bridge protocol tests; device behavior must be checked with the running Host and app |
10
+ | Remote access | Tailscale Funnel on ports 443, 8443, or 10000 | Helper and supervisor tests |
11
+
12
+ ## DSH interfaces used here
13
+
14
+ - The Host adapter uses Session and Workspace controllers, Gateway Remote Events, and `typertGateway.wireStream.open(endpoint, payload, uplink, peer, signal)`. Its in-process carrier passes `undefined` for `uplink` and `peer` and the cancellation signal in argument five.
15
+ - The resident Client sends relative RPC paths such as `api/$events/result`. The in-process transport resolves those paths to a local URL before constructing a Node `Request`; the shared Fetch handler dispatches it without a network request. This is required for iOS approval and question answers to settle at the Gateway.
16
+ - The client settings page binds `configForms.get('deeppilot')` when the service becomes available. The Host reads volatile config references from its profile entry and reconciles transports on `loader/volatile-update`.
17
+ - Typert strict codecs publish `create()` factories. Session opening reads `session.projections` for a complete baseline.
18
+ - The Host adapter retains a stable bridge-facing API so the phone protocol does not depend directly on DSH controller shapes. This adapter is an internal design boundary, not support for an older DSH Host.
19
+
20
+ ## Separate protocol and data boundaries
21
+
22
+ - Protocol v2 is the only supported phone wire version. Protocol-v1 devices must pair again. The LAN listener uses its own TLS identity and certificate pinning; old LAN pairings without a fingerprint must also pair again.
23
+ - The current app accepts the `deeppilot://pair` link and the JSON pairing payload. Bearer authentication, URL credentials, and first-frame shared tokens are rejected; devices register a P-256 public key and sign each WebSocket challenge.
24
+ - The plugin's persisted device and Funnel state migration remains separate from DSH API version support. Session logs written by earlier DSH builds are readable only when the current Host's own history reader accepts them; this plugin does not rewrite those logs.
25
+ - An unavailable optional OS facility, transport, or controller disables its dependent capability without crashing the Host.
14
26
 
15
- ## Protocol boundary
27
+ ## rc.2 feature planning
16
28
 
17
- - Protocol v2 is the only supported wire version. Existing protocol-v1 devices must pair again after upgrading.
18
- - The pairing QR now encodes a `deeppilot://pair` link, and the settings page shows that same string in one copy field. An app build that predates the link only parses the JSON payload, so it must be updated before pairing against this plugin; a link pasted into an older app is rejected instead of being half-applied. The current app still accepts the JSON payload.
19
- - Plugin `0.7.x` serves the LAN listener over self-signed TLS only; devices paired over LAN with `0.6.x` or older must pair again so the app receives the certificate fingerprint. The DSH web server no longer carries `/phone` compatibility routes. Funnel pairings are unaffected.
20
- - Bearer authentication, URL credentials, and first-frame shared tokens are rejected. A supported client registers a P-256 public key through `/phone/pair` and signs each WebSocket challenge.
21
- - Without a compatible embedded helper, the core bridge and trusted-LAN mode can still run; remote Funnel reports `unavailable`.
22
- - If a DSH Host API is missing, only the dependent capability should be disabled. The plugin must not crash the Host.
23
- - Plugin `0.7.x` requires DSH `0.1.5-rc.1` or newer within the `0.1.x` line.
24
- Older plugin versions used developer-preview DSH builds and remain historical
25
- artifacts.
26
- - The declared peer range is a disjunction,
27
- `^0.1.5-rc.1 || >=0.1.6-alpha.1 <0.2.0-0 || >=0.1.7-alpha.1 <0.2.0-0`,
28
- because npm's prerelease rule only
29
- lets a prerelease version satisfy a range whose comparators carry a
30
- prerelease on the same `major.minor.patch` tuple. Neither `^0.1.5-rc.1` nor
31
- `>=0.1.5-rc.1` alone admits a `0.1.6` prerelease, and the `0.1.7-alpha.*`
32
- line is likewise rejected by `>=0.1.6-alpha.1 <0.2.0-0` because no
33
- comparator there carries a prerelease on the `0.1.7` tuple — every new
34
- prerelease line needs its own disjunct.
35
- `tests/compatibility-metadata.test.ts`
36
- asserts the range admits `0.1.5-rc.1`, `0.1.5-rc.2`, `0.1.6-alpha.1`,
37
- `0.1.6-beta.1`, `0.1.6`, `0.1.7-alpha.1` and `0.1.7`,
38
- and rejects `0.2.0`.
39
- - DSH `0.1.6-alpha.1` replaced `agent/session-start` with `agent/created`,
40
- deprecated the synchronous `snapshotEvents`/`eventAt`/`ownEvents` history
41
- readers, and renamed the PTC packages to the `ptc-runtime` family. The plugin
42
- uses none of those surfaces: every host dependency is resolved structurally
43
- from the Cordis context (`sessionController`, `workspaceController`,
44
- `directoryPickerController`, `sessionProjections`) and the `session/event`
45
- and `api-session/*` events, all of which kept their `0.1.5-rc` shape.
46
- - DSH `0.1.6-alpha.2` changed the strict codec shape carried by an
47
- `InvocationDescriptor`. Through `0.1.6-alpha.1` a descriptor published the
48
- schema value itself and every consumer called `codec.schema.parse(value)`;
49
- `alpha.2` instead validates a lazy `create()` factory at registration and the
50
- Gateway parses through `codec.create().parse(value)`. A codec carrying only
51
- `schema` is rejected by the `alpha.2` registry
52
- (`typert: … strict codec has no create() factory`), which aborts plugin
53
- activation. One `strictCodec()` helper in `src/report-wire.ts` emits both
54
- keys — the same hand-written, dependency-free codec — so a single published
55
- package registers and parses on either generation, and
56
- `tests/report-wire.test.ts` pins both access paths.
57
- The other `alpha.2` Typert change — a contributed schema's materialized
58
- `schema` becoming a lazy `create()` factory — does not apply here: this
59
- Remote contributes no schemas, which the same test asserts.
60
- - DSH `0.1.7-alpha.1` reordered the Host `typertGateway.wireStream.open`
61
- parameters from `(endpoint, payload, signal)` to
62
- `(endpoint, payload, uplink, peer, signal)`. The reorder is not additive: a
63
- 3-argument call lands the `AbortSignal` in the `uplink` slot, leaves `signal`
64
- undefined, and the Host fails every stream inside
65
- `AbortSignal.any([signal, …])` with
66
- `TypeError [ERR_INVALID_ARG_TYPE]: The "signals[0]" argument must be an
67
- instance of AbortSignal`. The resident Client's Connection treats that dead
68
- generation as a lost connection and prints an endless
69
- `[connection] connection lost, retry #N` loop with exponential backoff while
70
- the phone's approval and question round-trips stay broken.
71
- `openHostStream()` in `src/dsh012-remote-interactions.ts` selects the
72
- contract from the published arity (`open.length`) and passes `undefined` for
73
- both `uplink` and `peer` on 0.1.7 — the documented "operator's in-process
74
- carrier" case, since DeepPilot's carrier owns the Host in process and has no
75
- Client-to-Host uplink. `tests/dsh012-wire-stream-contract.test.ts` pins the
76
- argument binding for a 3-arity and a 5-arity Host, and asserts the signal
77
- lands in each contract's declared slot.
78
- - DSH `0.1.7-alpha.1` rewrote the settings subsystem: `installSection`,
79
- `SettingsSectionHooks`, and the client `settingsScope` service are gone,
80
- section values persist in this plugin own profile config entry, and the
81
- settings UI refuses writes to fields the schema does not declare
82
- `.volatile()`. The plugin adapts across both generations: `live()` in
83
- `src/config.ts` feature-detects the volatile method and, on schemastery
84
- 3.18.2, writes the same metadata through `extra('volatile', true)` (an
85
- unconditional `.volatile()` throws at import on ≤ 0.1.6 and kills
86
- activation); volatile fields are exactly the ones the settings surface
87
- writes (`enabled`, `local`, `remote`, plus read-time `debug`) while
88
- `devicesPath`, `historyBufferMax`, and `push` keep remount-on-edit
89
- semantics; `normalizeOptions` unwraps the `{ get() }`
90
- references 0.1.7 carries in `apply()` options (a surviving reference fails
91
- every plain-value comparison the bridge makes), the host re-runs its
92
- transport reconciles on `loader/volatile-update`, and the client binds
93
- `ctx.configForms.get('deeppilot')` through `src/client/settings-scope.ts`
94
- when `settingsScope` is absent. Neither seam is declared in the client
95
- entry's `inject`: a service name no running host provides keeps the whole
96
- entry pending (`dsh-deeppilot: pending (waiting for service: settingsScope)`
97
- on the first 0.1.7 boot), so both are awaited as optional injections, and
98
- both are read through `ctx.get()` because a Cordis context proxy throws
99
- `cannot get property "settingsScope" without inject` on an undeclared
100
- service read; `tests/client-entry.test.ts` activates the real entry against
101
- a Cordis context shaped like each generation and pins that audit. The same
102
- release added
103
- `session.projections`; the bridge feature-detects it via
104
- `supportsProjections` and refreshes a session projection baseline on open,
105
- while older hosts keep list-row projection hints. Plugin-manager display
106
- metadata (`locale/*.json`, `package.json.icon`) and `--dump-config-schema`
107
- are additive and inert on older hosts; `npm run check:config-schema`
108
- projects this package Config through the pinned 0.1.7 CLI in CI and pins
109
- the volatile annotations on the four live fields (devDependency floor:
110
- `@deepseek-ai/schemastery` 3.18.3, which is also what a profile install
111
- resolves through the `^3.18.2` peer range).
112
- - `icon.svg` is a vector recreation of the iOS app icon, built from the
113
- private app's own Icon Composer sources (`ios/DeepPilot.icon/icon.json`
114
- plus `Assets/deepseek.svg`) and the in-app composition its
115
- `AppIconArtwork` applies: a white field, the DeepSeek brand glyph fitted
116
- with 13% padding, and a `Color(white: 0.25)` → black vertical gradient.
117
- The app's `.icon` bundle is not distributable through npm — the host
118
- inlines a single relative SVG, PNG, JPEG, or WebP file under 256 KiB as a
119
- `data:` URI — so the recreation is the only way to keep the two icons
120
- visually identical. `tests/package-meta.test.ts` pins the host's reader
121
- rules; regenerate the SVG from the app sources whenever the app icon
122
- changes.
123
- - DSH `0.1.6-alpha.2` made runtime plugin removal real, through both the
124
- Plugin Manager and the client entry reconciler. Every long-lived resource is
125
- registered through `ctx.effect`, and the settings-page stylesheet stamps
126
- `data-plugin="dsh-deeppilot"` so the module system's `removeOwnedStyles()`
127
- can delete it; the module system only auto-claims styles present during
128
- factory materialization, while this sheet is injected from `apply()`.
129
- Without that stamp, disabling the plugin would leave its sheet styling the
130
- page.
131
- - The compatibility facade converts the
132
- current Session controller's raw event arrays into the stable wrapped
133
- history entries consumed by the phone bridge. Sessions persisted by earlier
134
- Hosts can therefore be listed and opened when the rc.1 Host's own
135
- persistence reader accepts their log vocabulary. Unsupported persisted
136
- formats still fail closed in the Host without modifying the original log.
29
+ The source-level audit of `dsh-v0.1.7-rc.2` found no breaking change in the DSH service surfaces currently used by the plugin. The exact rc.2 package pins, corrected registry lockfile, compatibility assertions, generated output, unit tests, typecheck, build, and config-schema check now pass locally. A real rc.2 `web` profile smoke test and the clean-install release gate remain before publishing. The planned phone additions for durable schedules and session forking are specified in [`docs/DEEPPILOT_FEATURE_PLAN.md`](./docs/DEEPPILOT_FEATURE_PLAN.md); they are not advertised until the protocol, iOS mirror, and integration tests land.
137
30
 
138
- ## Not yet claimed
31
+ The complete audit evidence and re-audit procedure remain in [`docs/DSH_RELEASE_MEMORY.md`](./docs/DSH_RELEASE_MEMORY.md).
139
32
 
140
- - Intel macOS support for the embedded helper;
141
- - signed/notarized helper distribution;
142
- - validation against the `0.1.7-*` package line: the peer range admits
143
- `0.1.7-alpha.1` and later `0.1.7` releases, and the `wireStream.open`
144
- reorder that release introduced is adapted and pinned by
145
- `tests/dsh012-wire-stream-contract.test.ts`, but the unit suite still runs
146
- against the `0.1.5-rc.1`/`0.1.6-*` package families and no `0.1.7`
147
- typecheck or full-suite evidence has been produced yet;
148
- - repair or migration of persisted history rejected by the Host's own session
149
- reader;
150
- - every DSH developer-preview revision;
151
- - physical-device performance and every carrier/network combination;
152
- - production APNs delivery without a real provider credential and device.
33
+ ## Evidence limits
153
34
 
154
- When reporting an issue, include `node --version`, the exact DSH package version, plugin commit/tag, macOS version and architecture, connection mode, and sanitized status output. Never include pairing codes, key material, APNs tokens, or message content.
35
+ Unit tests and config schema projection do not prove every network, Mac, Linux, Windows, or iPhone combination. In particular, physical-device performance, signed helper distribution, and production APNs delivery need their own checks. Include the exact DSH version, plugin commit, Node version, OS, connection mode, and sanitized status output when reporting a compatibility issue; never include credentials or message content.
package/README.md CHANGED
@@ -32,30 +32,16 @@ Host on your own Mac and does not replace or modify the DSH Web UI.
32
32
 
33
33
  ## Install from npm
34
34
 
35
- Requirements: Node.js 22+ and DSH with a `web` profile. The package includes
35
+ This source checkout targets Node.js 22+ and **DSH 0.1.7-rc.2** with a `web` profile. The package includes
36
36
  Funnel helpers for macOS, Linux, and Windows on amd64/arm64; trusted-LAN mode
37
37
  does not require the helper.
38
38
 
39
- | Plugin version | Required DSH | How to install |
40
- |---|---|---|
41
- | `0.8.x` (current stable, `latest`) | DSH `0.1.5-rc.1` or newer | `dsh plugin --profile web add dsh-deeppilot` |
42
- | `0.7.x` (previous stable) | DSH `0.1.5-rc.1` or newer | `dsh plugin --profile web add dsh-deeppilot@0.7.1` |
43
- | `0.6.x` (legacy) | DSH `0.1.5-rc.1` or newer | `dsh plugin --profile web add dsh-deeppilot@0.6.2` |
44
-
45
- `0.8.x` is built and typechecked against the DSH
46
- [0.1.5-rc.1](https://www.npmjs.com/package/@deepseek-ai/dsh/v/0.1.5-rc.1)
47
- and [0.1.7-alpha.1](https://www.npmjs.com/package/@deepseek-ai/dsh/v/0.1.7-alpha.1)
48
- Host and client package families — the config-schema release check projects the
49
- plugin's Config through the pinned 0.1.7 CLI. It uses the Gateway multi-client
50
- Remote Events routing that keeps Web and DeepPilot independently answerable.
51
- Earlier plugin alphas remain historical artifacts; users installing the `alpha`
52
- tag for pre-release testing should update DSH to `0.1.5-rc.1` or newer.
39
+ The current working tree pins its DSH packages and compatibility checks to
40
+ `0.1.7-rc.2`. A previously published plugin package may still carry its own
41
+ older compatibility declaration until a release is made from this tree.
53
42
 
54
43
  ```sh
55
- # DSH 0.1.5-rc.1 or newer (recommended):
56
44
  dsh plugin --profile web add dsh-deeppilot
57
- # DSH 0.1.1-rc.2 through 0.1.2-alpha.1 (previous stable):
58
- dsh plugin --profile web add dsh-deeppilot@0.5.0
59
45
  dsh web
60
46
  ```
61
47
 
@@ -94,16 +80,12 @@ DeepPilot state under `$DSH_HOME/deeppilot/`.
94
80
 
95
81
  ## Publishing (maintainers)
96
82
 
97
- `0.8.x` targets DSH `0.1.5-rc.1`+ and adapts to the DSH 0.1.7 settings rewrite;
98
- `0.7.x` keeps the pre-0.1.7 settings API during the migration window, `0.6.x`
99
- keeps the pre-TLS LAN transport for the same DSH family, and `0.5.x` stays
100
- compatible with DSH `0.1.1-rc.2`–`0.1.2-alpha.1`. Keep them published:
83
+ Release from this branch only after validating against DSH `0.1.7-rc.2`:
101
84
 
102
85
  1. Bump `version` in `package.json` and in the root `""` entry of
103
86
  `package-lock.json`, then run `npm test && npm run typecheck && npm run build`
104
- and inspect `npm pack --dry-run --json` (the check
105
- `tests/compatibility-metadata.test.ts` enforces the peer range and asserts it
106
- admits the `0.1.5-rc.*`, the `0.1.6-*`, and the `0.1.7-*` lines).
87
+ and inspect `npm pack --dry-run --json`. The compatibility metadata test
88
+ enforces the exact rc.2 peer and development dependency versions.
107
89
  2. Commit the release and push it. `npm publish` runs `prepack` (build) and
108
90
  `prepublishOnly` (test + typecheck) automatically.
109
91
  3. Publish pre-releases without touching `latest`:
@@ -112,10 +94,8 @@ compatible with DSH `0.1.1-rc.2`–`0.1.2-alpha.1`. Keep them published:
112
94
  npm publish --tag alpha
113
95
  ```
114
96
 
115
- After a successful publish, `npm view dsh-deeppilot dist-tags --json` shows
116
- `"latest": "0.8.x"` and `"alpha": "0.8.x-alpha.y"`. Verify the published
117
- package by installing it into a DSH `0.1.5-rc.1` profile before pointing
118
- users at it.
97
+ After a successful publish, verify the dist tag and install the package in
98
+ a DSH `0.1.7-rc.2` profile before pointing users at it.
119
99
  4. Tag the release commit `vX.Y.Z` and prepare a GitHub Release
120
100
  (English + 简体中文 notes) that links this README section.
121
101
  5. Publish stable releases with `npm publish --tag latest`, which moves
@@ -137,7 +117,10 @@ connection, one-time pairing, and health endpoints, not the complete DSH Web UI.
137
117
  The DeepPilot settings page exposes **Connections per public source** under
138
118
  the collapsed **Advanced settings** section. It defaults to `8`, accepts
139
119
  `1`–`16`, and briefly restarts the Funnel helper when changed, so connected
140
- remote clients reconnect once.
120
+ remote clients reconnect once. The device list also supports a custom name for
121
+ each paired device. Names are stored in the host registry and survive iPhone
122
+ reconnects or changes to the system-reported name; saving an empty value restores
123
+ the iPhone-reported default.
141
124
 
142
125
  Offline push is optional. Relay mode sends only the target APNs device token
143
126
  and a limited notification payload; full conversation history and live output
package/README.zh-CN.md CHANGED
@@ -30,28 +30,14 @@
30
30
 
31
31
  ## 从 npm 安装
32
32
 
33
- 需要 Node.js 22+ 和带 `web` profile 的 DSH。npm 包内置 macOS、Linux、Windows
33
+ 当前源码仅面向 Node.js 22+ 与带 `web` profile 的 **DSH 0.1.7-rc.2**。npm 包内置 macOS、Linux、Windows
34
34
  的 amd64/arm64 Funnel helper;可信局域网模式不依赖 helper。
35
35
 
36
- | 插件版本 | 所需 DSH | 安装命令 |
37
- |---|---|---|
38
- | `0.8.x`(当前稳定版,`latest`) | DSH `0.1.5-rc.1` 或更高 | `dsh plugin --profile web add dsh-deeppilot` |
39
- | `0.7.x`(旧版稳定版) | DSH `0.1.5-rc.1` 或更高 | `dsh plugin --profile web add dsh-deeppilot@0.7.1` |
40
- | `0.6.x`(历史版本) | DSH `0.1.5-rc.1` 或更高 | `dsh plugin --profile web add dsh-deeppilot@0.6.2` |
41
-
42
- `0.8.x` 基于 DSH
43
- [0.1.5-rc.1](https://www.npmjs.com/package/@deepseek-ai/dsh/v/0.1.5-rc.1)
44
- 与 [0.1.7-alpha.1](https://www.npmjs.com/package/@deepseek-ai/dsh/v/0.1.7-alpha.1)
45
- 的 Host 与 client 包族构建并完成类型检查 —— 发布前的 config-schema 检查会通过
46
- 固定的 0.1.7 CLI 投影本插件的 Config。它使用 Gateway 多 Client Remote Events
47
- 路由,使 Web 与 DeepPilot 能独立处理同一交互。旧 alpha 仅保留为历史产物;安装
48
- `alpha` tag 进行预发布测试的用户应先把 DSH 更新到 `0.1.5-rc.1` 或更高版本。
36
+ 当前工作树的 DSH 包和兼容性检查均固定为 `0.1.7-rc.2`。从此工作树发布新版本前,
37
+ 已发布的旧插件包仍可能带有各自的旧兼容声明。
49
38
 
50
39
  ```sh
51
- # DSH 0.1.5-rc.1 或更高(推荐):
52
40
  dsh plugin --profile web add dsh-deeppilot
53
- # DSH 0.1.1-rc.2 至 0.1.2-alpha.1(旧版稳定):
54
- dsh plugin --profile web add dsh-deeppilot@0.5.0
55
41
  dsh web
56
42
  ```
57
43
 
@@ -82,14 +68,12 @@ dsh plugin --profile web remove dsh-deeppilot
82
68
 
83
69
  ## 发布说明(维护者)
84
70
 
85
- `0.8.x` 面向 DSH `0.1.5-rc.1`+ 并适配 DSH 0.1.7 的设置系统重写;迁移期内
86
- `0.7.x` 保留 0.1.7 之前的设置 API,`0.6.x` 在同一 DSH 版本族上保留 TLS 化之前的
87
- 局域网传输,`0.5.x` 保持兼容 DSH `0.1.1-rc.2`–`0.1.2-alpha.1`,各版本线都要保持发布:
71
+ 此分支仅在 DSH `0.1.7-rc.2` 下完成验证后发布:
88
72
 
89
73
  1. 同步修改 `package.json` 与 `package-lock.json` 根 `""` 条目中的
90
74
  `version`,然后运行 `npm test && npm run typecheck && npm run build`,
91
- 并检查 `npm pack --dry-run --json`(`tests/compatibility-metadata.test.ts`
92
- 会强制校验 peer 范围,并断言它同时接纳 `0.1.5-rc.*`、`0.1.6-*` 与 `0.1.7-*` 三条线)。
75
+ 并检查 `npm pack --dry-run --json`。兼容性元数据测试会校验 peer 与开发依赖
76
+ 均固定为 rc.2。
93
77
  2. 提交发布并推送。`npm publish` 会自动执行 `prepack`(构建)与
94
78
  `prepublishOnly`(测试 + 类型检查)。
95
79
  3. 发布预发布版本,不要动 `latest`:
@@ -98,9 +82,7 @@ dsh plugin --profile web remove dsh-deeppilot
98
82
  npm publish --tag alpha
99
83
  ```
100
84
 
101
- 发布成功后,`npm view dsh-deeppilot dist-tags --json` 应显示
102
- `"latest": "0.8.x"` 与 `"alpha": "0.8.x-alpha.y"`。向用户推荐前,请先在
103
- DSH `0.1.5-rc.1` profile 中安装验证发布的包。
85
+ 发布成功后检查 dist tag,并在 DSH `0.1.7-rc.2` profile 中安装验证发布的包。
104
86
  4. 为发布提交打 `vX.Y.Z` tag,并准备包含英文与简体中文说明的
105
87
  GitHub Release,链接本 README 的发布说明。
106
88
  5. 稳定版用 `npm publish --tag latest` 发布,使 `latest` 切换到新版本。
@@ -119,7 +101,9 @@ DSH Web UI。
119
101
 
120
102
  DeepPilot 设置页在默认折叠的“高级设置”中提供“每个公网来源的连接上限”,默认
121
103
  `8`,可设置为 `1`–`16`。修改后 Funnel helper 会短暂重启,已连接的远程客户端
122
- 会自动重连一次。
104
+ 会自动重连一次。设备列表支持为每台已配对设备设置自定义名称;名称会保存在主机
105
+ 设备注册表中,即使 iPhone 重连或上报了新的系统名称也不会被覆盖。留空保存可恢复
106
+ iPhone 上报的默认名称。
123
107
 
124
108
  离线推送是可选功能。中继模式只发送目标 APNs 设备 Token 和有限的通知内容;
125
109
  完整会话历史与实时输出不会经过中继。启用远程访问或推送前,请阅读
package/SKILL.md ADDED
@@ -0,0 +1,87 @@
1
+ ---
2
+ name: dsh-release-audit
3
+ description: Audit DeepSeek Harness releases for the dsh-deeppilot plugin. Use when a DSH version changes, when checking plugin compatibility, or when looking for new DSH capabilities that could become safe DeepPilot features.
4
+ ---
5
+
6
+ # DSH release audit for DeepPilot
7
+
8
+ Use this skill to keep the public `dsh-deeppilot` plugin aligned with DeepSeek
9
+ Harness without repeatedly rediscovering the compatibility rules.
10
+
11
+ ## Source of truth
12
+
13
+ Read these files before making a compatibility decision:
14
+
15
+ - `docs/DSH_RELEASE_MEMORY.md` — the last audited release, risk decisions,
16
+ feature opportunities, and the re-audit rule;
17
+ - `COMPATIBILITY.md` — the currently supported DSH baseline and validation
18
+ limitations;
19
+ - `AGENTS.md` — repository contracts and validation requirements;
20
+ - `package.json` and `package-lock.json` — the exact DSH peer/development pins.
21
+
22
+ Treat the official DSH release page and tagged source as evidence, not the
23
+ release-note summary alone.
24
+
25
+ ## Audit workflow
26
+
27
+ 1. Identify the new DSH tag and the last audited tag. Fetch the official
28
+ release page and the complete tag-to-tag comparison.
29
+ 2. Read this repository's `package.json`, lockfile, compatibility assertions,
30
+ and DSH adapter source. Identify the exact Host services, Events, Remote
31
+ methods, Gateway carriers, and Client bundles that the plugin imports.
32
+ 3. Inspect the corresponding tagged DSH source for each used surface. Check
33
+ method presence, argument/result shapes, stream envelopes, lifecycle
34
+ behavior, and package version constraints.
35
+ 4. Classify the result separately as:
36
+ - **install/deployment**: package metadata, peer constraints, loader and
37
+ profile compatibility;
38
+ - **runtime**: Host service, Gateway, Cordis lifecycle, and event behavior;
39
+ - **phone protocol**: DeepPilot `PROTOCOL.md` v2, iOS mirror, pairing,
40
+ replay, and authorization boundaries.
41
+ 5. Identify new capabilities. For each candidate, state the user value, the
42
+ DSH API it would use, the required DeepPilot protocol/UI work, the
43
+ authorization scope, and the tests needed before shipping it.
44
+ 6. Update `docs/DSH_RELEASE_MEMORY.md` with the tag, date, evidence links,
45
+ decision, risks, feature backlog, and upgrade gate. Update
46
+ `COMPATIBILITY.md` when the supported baseline changes.
47
+ 7. Never claim a release is supported until the dependency pins, generated
48
+ output, automated checks, and a real DSH Host smoke test have passed.
49
+
50
+ ## DeepPilot-specific rules
51
+
52
+ - Keep `/phone` and `/phone/health` compatible with the current iOS app.
53
+ - Treat `PROTOCOL.md` as normative. Any phone wire change must update the
54
+ TypeScript mirror and coordinate with the private iOS repository.
55
+ - Protocol v2 is the current baseline. New optional capabilities should be
56
+ capability-gated; do not silently change existing frame meanings.
57
+ - A DSH controller change belongs behind the stable `ApiProxyLike` boundary;
58
+ do not leak DSH controller shapes into the phone protocol.
59
+ - Reminder prompts, message bodies, pairing tokens, APNs tokens, relay
60
+ credentials, and tool arguments must not be written to logs.
61
+ - New file-open or shell-like behavior must use DSH's verified Host path seam
62
+ and explicit user confirmation. Never add arbitrary remote command execution.
63
+ - Scheduled tasks must remain bound to their original DSH Session and use a
64
+ dedicated authorization scope when exposed to phones.
65
+
66
+ ## Required validation
67
+
68
+ For documentation-only audits, run `git diff --check` and verify every link.
69
+ For an actual DSH dependency upgrade, run the repository's full release
70
+ checklist, including tests, typecheck, build, config schema projection, Go
71
+ helper tests, and binary checksums. Add a real DSH `web` profile smoke test for
72
+ sessions, history, prompts, models, workspaces, approvals, questions, replay,
73
+ and any newly exposed capability.
74
+
75
+ ## Output format
76
+
77
+ When reporting an audit, lead with one of these verdicts:
78
+
79
+ - **compatible** — tested and ready to support;
80
+ - **source-compatible, upgrade required** — no code break found, but pins or
81
+ validation still block release;
82
+ - **runtime risk** — a used service or event needs an integration change;
83
+ - **protocol impact** — DeepPilot/iOS wire coordination is required;
84
+ - **unsupported** — a confirmed incompatibility remains.
85
+
86
+ Never turn a source-level review into a false claim of runtime or iPhone
87
+ compatibility.
@@ -0,0 +1,98 @@
1
+ # DSH release compatibility memory
2
+
3
+ > This is the durable audit record for DeepPilot's public DSH plugin. Re-audit
4
+ > the next DSH release instead of assuming that an rc upgrade is runtime-safe.
5
+
6
+ ## Current decision
7
+
8
+ - **Audited release:** `dsh-v0.1.7-rc.2` (official release page: <https://github.com/deepseek-ai/deepseek-harness/releases/tag/dsh-v0.1.7-rc.2>).
9
+ - **Comparison baseline:** `dsh-v0.1.7-rc.1` (the previous plugin baseline).
10
+ - **Plugin runtime verdict:** **no confirmed breaking change in the DSH APIs
11
+ that DeepPilot currently calls**.
12
+ - **Install/deployment verdict:** the exact peer/dev pins and lockfile are now
13
+ updated to `0.1.7-rc.2`; `npm test`, `npm run typecheck`, `npm run build`, and
14
+ the rc.2 config-schema check pass locally. Support still awaits a real rc.2
15
+ `web` profile smoke test and the release checklist's clean-install gate.
16
+ - **Protocol verdict:** no required DeepPilot phone-protocol break was found in
17
+ the rc.2 release notes or the inspected rc.2 source. This does not waive the
18
+ normal integration test against a real rc.2 Host.
19
+ - **Current implementation:** the optional DSH Schedule facade, schedule phone
20
+ frames, `schedule.manage` authorization, DSH `schedule/changed` projection,
21
+ a prompt-free persistent mutation journal, and the DSH Session fork facade
22
+ with fork idempotency are implemented and locally tested. The private iOS
23
+ protocol mirror, BridgeClient/AppModel integration, reminder list/editor/
24
+ history UI, and message “Branch from here” action are implemented; real
25
+ Host/iPhone integration remains pending.
26
+
27
+ ## Evidence and risk assessment
28
+
29
+ | Area | rc.2 finding | DeepPilot impact |
30
+ | --- | --- | --- |
31
+ | Session controller | The rc.2 source still exposes the methods used by the adapter: `list`, `inspect`, `create`, `modelCatalog`, `selectModel`, `rename`, `prompt`, `attachment`, `cancel`, and `projections`. It adds `search`, `page`, `follow`, `fork`, `updateQueue`, `initializeDefaultModel`, and native workspace-path operations. | Existing calls are source-compatible at the inspected API level. New calls must remain optional and capability-gated. |
32
+ | Workspace controller | `create`, `archiveSession`, `unarchiveSession`, and `follow` remain. rc.2 adds rename/delete/order/pin operations and archive activity handling. | Existing bridge behavior is source-compatible. Archive behavior is stricter when a Session has active work, including scheduled reminders. |
33
+ | Gateway / Typert | The in-process `typertGateway.wireStream.open(endpoint, payload, uplink, peer, signal)` seam used by the resident approval/question Client remains. Typert registration still exposes `register(contribution)`. | No confirmed break in the resident Remote Events path. Re-run the approval/question tests on rc.2 because this is the highest-risk integration seam. |
34
+ | Release metadata | The plugin's peer/dev pins and lockfile now target rc.2 with real rc.2 integrity metadata. | Keep `package.json`, `package-lock.json`, compatibility assertions, generated `lib/`, and release documentation synchronized before claiming rc.2 support. |
35
+ | DSH event/history internals | rc.2 continues to evolve session projections, history paging, and assistant stream presentation. The plugin currently consumes the older `session/event`/`inspect` projection seam rather than the newer Remote `page`/`follow` surface. | Treat as a compatibility risk requiring a real Host smoke test, not as a confirmed wire break. Keep the phone protocol independent of DSH controller shapes. |
36
+
37
+ Official comparison: <https://github.com/deepseek-ai/deepseek-harness/compare/dsh-v0.1.7-rc.1...dsh-v0.1.7-rc.2>.
38
+
39
+ ## New rc.2 capabilities worth using
40
+
41
+ Prioritized for DeepPilot, in this order:
42
+
43
+ 1. **Durable reminders and schedules (highest value).** DSH now has
44
+ `schedule_create`, `schedule_list`, `schedule_delete`, and
45
+ `schedule_update`, persistent one-shot/fixed-rate/daily/weekly/cron tasks,
46
+ restart survival, delivery history, and a minimum one-minute interval. Add
47
+ an optional, session-bound schedule surface to the phone: list tasks, create
48
+ or edit a task, delete it, and show delivery history. Keep all operations
49
+ behind `sessions.manage` plus a dedicated schedule scope; never log reminder
50
+ prompts. A reminder must remain bound to its original Host Session.
51
+ 2. **Host Session search.** `sessionController.search(query)` returns bounded
52
+ snippets without activating an Agent. This maps naturally to a phone search
53
+ screen and can reduce the amount of history transferred over a mobile link.
54
+ Return only the bounded snippet/session identity and keep it in the
55
+ `sessions.read` authorization domain.
56
+ 3. **Conversation forking.** `sessionController.fork({ sessionId, atSeq? })`
57
+ enables a phone action such as “branch from this turn”. It is additive to
58
+ the phone protocol but needs an iOS mirror, cursor/ownership tests, and a
59
+ deliberate policy for subagent and archived Sessions.
60
+ 4. **Queue editing.** `sessionController.updateQueue` supports editing,
61
+ removing, or steering a pending queue item. This is useful for a phone when
62
+ a turn is already running, but it needs first-class queue UI and conflict
63
+ handling rather than silently changing the existing prompt path.
64
+ 5. **Open/reveal on the Mac.** rc.2 adds verified native workspace-path opening
65
+ and application discovery. This could power a deliberate “Reveal in Finder /
66
+ Open associated app” action. Keep the Host's path verification and show an
67
+ explicit confirmation on the phone; do not expose arbitrary shell access.
68
+
69
+ Features that are primarily Web/Desktop UX (onboarding, keyboard shortcut
70
+ management, archived-only filters, account/API-key model entry separation, and
71
+ background continuation) should not be copied into the phone plugin unless
72
+ they solve a mobile-specific need.
73
+
74
+ ## Required rc.2 upgrade gate
75
+
76
+ Do not call the rc.2 baseline fully supported until all of these are true:
77
+
78
+ 1. The exact DSH peer/dev pins and lockfile remain on `0.1.7-rc.2`.
79
+ 2. The plugin's full release checklist passes: `npm ci`, `npm test`,
80
+ `npm run typecheck`, `npm run build`, `npm run check:config-schema`, Go helper
81
+ tests, and the binary checksum verification.
82
+ 3. A real DSH rc.2 `web` profile smoke test covers: session list/open, history,
83
+ prompt, model selection, workspace list/create/archive/unarchive, approval,
84
+ question, and disconnect/reconnect replay.
85
+ 4. A phone-visible schedule create/list/update/delete/history flow is tested
86
+ after the schedule surface is implemented; a passing plugin build alone does
87
+ not prove mobile protocol compatibility.
88
+ 5. Fork is tested for exact event-prefix behavior, idempotent retries, and
89
+ original-session immutability after the fork surface is implemented.
90
+ 6. `COMPATIBILITY.md`, README compatibility text, generated `lib/`, and this
91
+ file are updated with the tested DSH version and intentional support range.
92
+
93
+ ## Re-audit rule
94
+
95
+ For every future DSH release, compare the new tag against the last audited tag,
96
+ inspect the package/service surfaces actually imported by this repository,
97
+ classify install/runtime/protocol risk separately, and append a dated decision
98
+ here. Do not treat a release-note summary as proof of compatibility.