dsh-cindy-host 0.1.40 → 0.1.42

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/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.1.42 — 2026-11-13
4
+
5
+ - Accept the reviewed DSH `0.2.2-rc.2` Agent/Session/Settings carrier without bundling a DSH runtime or enabling unreviewed prereleases. Preserve the existing supported carriers and Cindy handshake identity.
6
+ - Revalidate native Session observers and controller/subagent reads against the RC.2 carrier; batched appends still publish the existing per-event observation API. Real handset, relay, OAuth and model calls remain separate acceptance requirements.
7
+
8
+ ## 0.1.41 — 2026-11-08
9
+
10
+ - Accept the exact DSH `0.2.2-rc.1` Agent/Session/Settings carrier alongside the existing 0.2.1 RC and 0.2.2-alpha.2 peers. Keep DSH packages host-provided and preserve 0.1.40's complete feature set, including credentials without keytar.
11
+ - Keep historical ordinary forks visible when they retain parent lineage; identify delegated sessions by `origin: 'subagent'` across discovery, active reads, direct lookup and creation pushes.
12
+ - Update the development SDK lock to the reviewed RC; distinguish DSH 0.2.2's Node >=24.9 requirement from the plugin's older-carrier Node >=22.16 baseline. Keep Cindy handshake identity unchanged.
13
+ - Validate the actual release candidate separately from the earlier 0.1.31-based local prototype: 1,235 automated tests passed (8 skipped), native question/Gateway checks 4/4, RC core contracts 7/7, real Windows DPAPI persistence/restore/renewal/logout, channel audit with 0 unclassified channels, and clean tarball installation with Web runtime smoke 30/30. Live relay/handset and real OAuth/model requests remain outside this compatibility release's verification claim.
14
+
3
15
  ## 0.1.40 — 2026-11-07
4
16
 
5
17
  - Declare `source: 'desktop'` consistently on ordinary DSH task rows in session lists and direct detail reads, independently of model/provider identity. Let Cindy recognize known ordinary-task provenance without requiring an extra source-confirmation lookup before mounting the chat.
package/README.md CHANGED
@@ -4,16 +4,22 @@ A Host-side adapter connecting current Cindy clients to DeepSeek Harness.
4
4
 
5
5
  ## Requirements and installation
6
6
 
7
- Version **0.1.40** declares ordinary-task provenance consistently in session list/detail rows, independent of the model provider, so Cindy can recognize known DSH tasks without an additional source-confirmation lookup. It retains the earlier image delivery, thumbnails, work titles, history stability and interruption controls. It does not implement a new phone cache; handset re-entry, rendering and white-screen acceptance remain separate.
7
+ Version **0.1.42** adds exact DSH `0.2.2-rc.2` compatibility, retaining 0.1.41's historical ordinary-fork handling, task provenance, credential storage, image delivery, thumbnails, work titles, history stability and interruption controls. Cindy's handshake identity is unchanged. Handset re-entry, rendering and white-screen acceptance remain separate.
8
8
 
9
- It supports the exact **DSH 0.2.2-alpha.2** carrier, while retaining `0.2.1-rc.3`, `0.2.1-rc.4` and `0.2.1-rc.5`. Alpha requires **Node.js >=24.9** (tested with 24.12); the older carriers retain this plugin's Node.js >=22.16 minimum. Agent/session/settings peers and alpha Schemastery are explicitly allowed, not a blanket promise for future prereleases. The full Web installation gate uses DSH **0.2.1-rc.5**; alpha core-contract checks do not establish alpha Web/relay/handset acceptance. Install through the Desktop DSH plugin manager. CLI-managed profiles can use:
9
+ It supports the exact **DSH 0.2.2-rc.1 and 0.2.2-rc.2** carriers, while retaining `0.2.2-alpha.2`, `0.2.1-rc.3`, `0.2.1-rc.4` and `0.2.1-rc.5`. DSH 0.2.2 requires **Node.js >=24.9**; older carriers retain this plugin's Node.js >=22.16 minimum. Agent/session/settings peers are explicitly allowed, not a blanket promise for future prereleases. RC.2 automated validation uses the actual native SDK, including Cordis/Gateway question arbitration, without a real account or handset. Installation, UI, relay and handset acceptance are distinct checks.
10
+
11
+ The 0.1.42 candidate is distributed as a verified tarball until separately published. Add that tarball through the Desktop plugin manager; CLI-managed profiles can use:
10
12
 
11
13
  ```sh
12
- dsh plugin --profile <profile> add dsh-cindy-host@0.1.40
14
+ dsh plugin --profile <profile> add <path-to-dsh-cindy-host-0.1.42.tgz>
13
15
  ```
14
16
 
15
17
  Reload the Host plugin after installation. A full DSH restart is separate. Keep existing Cindy sign-in, device identity and settings; do not run two Host processes with the same identity.
16
18
 
19
+ ## 0.1.41: DSH 0.2.2 RC compatibility
20
+
21
+ Accepts the exact RC Agent, Session and Settings SDKs, Cordis 4.1 and Schemastery 3.19. Historical ordinary forks can retain `parentSession`/`parentSessionId`; only `origin: 'subagent'` classifies delegated sessions. The correction covers discovery, active reads, direct lookup and creation pushes. Cindy's handshake identity remains unchanged. See [verification details](doc/dsh-0.2.2-rc.1-compatibility.md) for candidate checks and the earlier local prototype's limits.
22
+
17
23
  ## 0.1.36: interruption controls
18
24
 
19
25
  The existing Cindy acknowledgement/dismissal actions update owner-scoped display preferences, not failure or completion facts. Manual continuation is a new human input; it verifies the current native tail and effective plan-mode off rather than retrying old tool calls. These changes are Host-only: Cindy is a read-only protocol/test dependency. See the [diagnostic protocol and limitations](<doc/model-errors.md>) for persistence, concurrency and current-client boundaries. Source contracts do not establish live-handset acceptance.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dsh-cindy-host",
3
- "version": "0.1.40",
3
+ "version": "0.1.42",
4
4
  "private": false,
5
5
  "description": "Cindy 手机客户端连接 DSH 的 Host 侧插件:会话/消息/审批/todo/goal 的手机通道,以及配套的设置卡片",
6
6
  "license": "MIT",
@@ -43,6 +43,23 @@
43
43
  "platform": "web"
44
44
  }
45
45
  },
46
+ "//dependencies": "只放宿主不提供的库。凭据存储不依赖原生 npm 模块:Linux/macOS 使用系统钥匙串,Windows 使用系统 DPAPI 加密并由 DSH 原生凭据服务持久化密文。",
47
+ "dependencies": {
48
+ "werift": "0.24.4",
49
+ "ws": "^8.21.3"
50
+ },
51
+ "//peerDependencies": "DSH 自己的包必须由宿主提供,绝不能声明成 dependency/optionalDependency:pnpm 会把它们**连同整代依赖图**装进 profile,宿主再组合这个混合体就起不来(实测:`^0.1.1-rc.2` 会把 28 个 0.1.1-rc.2 的包装进一个 0.1.5-rc.2 的宿主,profile 启动失败于 dsh-client-file-upload / dsh-session)。区间必须覆盖宿主那一代(semver 的预发布规则:`^0.1.1-rc.2` 匹配不到 `0.1.5-rc.2`),与生态里 dsh-codex / dsh-cost-meter 的写法一致;`0.2.0-rc.2` 需要 `>=0.2.0-rc.1 <0.3.0-0`。",
52
+ "peerDependencies": {
53
+ "@deepseek-ai/dsh-agent": "0.2.1-rc.3 || 0.2.1-rc.4 || 0.2.1-rc.5 || 0.2.2-alpha.2 || 0.2.2-rc.1 || 0.2.2-rc.2",
54
+ "@deepseek-ai/dsh-session": "0.2.1-rc.3 || 0.2.1-rc.4 || 0.2.1-rc.5 || 0.2.2-alpha.2 || 0.2.2-rc.1 || 0.2.2-rc.2",
55
+ "@deepseek-ai/dsh-settings": "0.2.1-rc.3 || 0.2.1-rc.4 || 0.2.1-rc.5 || 0.2.2-alpha.2 || 0.2.2-rc.1 || 0.2.2-rc.2",
56
+ "@deepseek-ai/schemastery": "^3.18.1 || 3.18.6-alpha.1"
57
+ },
58
+ "//peerDependenciesMeta": "**故意没有这个字段。** `@deepseek-ai/dsh-host-apiproxy` 曾经在这里标 optional,但 0.2 已经删掉了这个包,而 `evaluatePluginCompatibility` 会遍历 `peerDependencies` 的**每一个键且不查 `peerDependenciesMeta`**,所以只要它出现在 peers 里,`dsh plugin add` 就会直接拒绝安装(`installation rejected`),启动时 bundle 也会被静默跳过、`dsh-cindy-host` 行根本不会出现。该适配器本来就走惰性 `require` + 失败降级(见 src/dsh-plugin.js 的 apiProxy 分支),从 peers 里移除不改变任何运行时行为,只是让两道门禁都能正确判定。",
59
+ "devDependencies": {
60
+ "react": "^18.3.1",
61
+ "react-dom": "^18.3.1"
62
+ },
46
63
  "scripts": {
47
64
  "acceptance": "node tools/acceptance.mjs",
48
65
  "acceptance:sandbox": "node tools/acceptance.mjs --base http://127.0.0.1:3081",
@@ -60,22 +77,5 @@
60
77
  "test": "node --test",
61
78
  "test:file-peer": "node --test test/file-peer-rtc.test.js test/host-file-peer.test.js test/host-file-ice.test.js test/host-media-fetch.test.js test/file-peer-integration.test.js",
62
79
  "smoke:file-peer": "node tools/file-peer-rtc-smoke.mjs --manager"
63
- },
64
- "//dependencies": "只放宿主不提供的库。凭据存储不依赖原生 npm 模块:Linux/macOS 使用系统钥匙串,Windows 使用系统 DPAPI 加密并由 DSH 原生凭据服务持久化密文。",
65
- "dependencies": {
66
- "werift": "0.24.4",
67
- "ws": "^8.21.3"
68
- },
69
- "//peerDependencies": "DSH 自己的包必须由宿主提供,绝不能声明成 dependency/optionalDependency:pnpm 会把它们**连同整代依赖图**装进 profile,宿主再组合这个混合体就起不来(实测:`^0.1.1-rc.2` 会把 28 个 0.1.1-rc.2 的包装进一个 0.1.5-rc.2 的宿主,profile 启动失败于 dsh-client-file-upload / dsh-session)。区间必须覆盖宿主那一代(semver 的预发布规则:`^0.1.1-rc.2` 匹配不到 `0.1.5-rc.2`),与生态里 dsh-codex / dsh-cost-meter 的写法一致;`0.2.0-rc.2` 需要 `>=0.2.0-rc.1 <0.3.0-0`。",
70
- "peerDependencies": {
71
- "@deepseek-ai/dsh-agent": "0.2.1-rc.3 || 0.2.1-rc.4 || 0.2.1-rc.5 || 0.2.2-alpha.2",
72
- "@deepseek-ai/dsh-session": "0.2.1-rc.3 || 0.2.1-rc.4 || 0.2.1-rc.5 || 0.2.2-alpha.2",
73
- "@deepseek-ai/dsh-settings": "0.2.1-rc.3 || 0.2.1-rc.4 || 0.2.1-rc.5 || 0.2.2-alpha.2",
74
- "@deepseek-ai/schemastery": "^3.18.1 || 3.18.6-alpha.1"
75
- },
76
- "//peerDependenciesMeta": "**故意没有这个字段。** `@deepseek-ai/dsh-host-apiproxy` 曾经在这里标 optional,但 0.2 已经删掉了这个包,而 `evaluatePluginCompatibility` 会遍历 `peerDependencies` 的**每一个键且不查 `peerDependenciesMeta`**,所以只要它出现在 peers 里,`dsh plugin add` 就会直接拒绝安装(`installation rejected`),启动时 bundle 也会被静默跳过、`dsh-cindy-host` 行根本不会出现。该适配器本来就走惰性 `require` + 失败降级(见 src/dsh-plugin.js 的 apiProxy 分支),从 peers 里移除不改变任何运行时行为,只是让两道门禁都能正确判定。",
77
- "devDependencies": {
78
- "react": "^18.3.1",
79
- "react-dom": "^18.3.1"
80
80
  }
81
- }
81
+ }
@@ -31,8 +31,10 @@ export function readActiveSessionSummaries(ctx) {
31
31
  const session = sessions.get(id);
32
32
  if (!session || agent.session !== session) continue;
33
33
  const header = session.header;
34
+ // DSH 0.2.2 keeps parentSession on historical ordinary forks as lineage.
35
+ // Only origin classifies a delegated run; lineage must not hide user tasks.
34
36
  if (!header || header.id !== id || header.origin === 'subagent'
35
- || header.parentSession != null || typeof header.cwd !== 'string' || !header.cwd) continue;
37
+ || typeof header.cwd !== 'string' || !header.cwd) continue;
36
38
 
37
39
  const snapshot = projections.snapshot(session, ['sessionListMetadata']);
38
40
  const metadata = snapshot.values.sessionListMetadata;
@@ -28,8 +28,9 @@ function activity(kind, sessionId, phase, extra = {}) {
28
28
  * Whether a session belongs in a controller's session list.
29
29
  *
30
30
  * **A subagent run and an unprompted draft are not tasks.** DSH marks delegated
31
- * sessions in the summary (`origin: 'subagent'`, and a `parentSessionId` when the
32
- * delegation has a parent). It also marks a newly opened, never-prompted conversation
31
+ * sessions in the summary (`origin: 'subagent'`). `parentSessionId` is lineage,
32
+ * and can also appear on historical ordinary forks (DSH 0.2.2). It also marks a
33
+ * newly opened, never-prompted conversation
33
34
  * as `blank: true`. Neither appears in DSH's user-facing sidebar, so neither may be
34
35
  * projected as a Cindy task — which is why a deployment's
35
36
  * `~/.dsh/sessions` can hold two hundred subagent logs the user has never seen. This Host
@@ -41,8 +42,7 @@ function activity(kind, sessionId, phase, extra = {}) {
41
42
  * @returns true when a controller should see it.
42
43
  */
43
44
  function isControllerSession(item) {
44
- if (item === null || typeof item !== 'object' || item.origin === 'subagent') return false;
45
- return item.parentSessionId === undefined || item.parentSessionId === null;
45
+ return item !== null && typeof item === 'object' && item.origin !== 'subagent';
46
46
  }
47
47
  function isControllerVisible(item) {
48
48
  return isControllerSession(item) && item.blank !== true;
@@ -4,4 +4,4 @@
4
4
  */
5
5
  export const HOST_APP_VERSION = '0.1.82';
6
6
  /** Actual npm release, separate from the Cindy compatibility identity. */
7
- export const HOST_PLUGIN_VERSION = '0.1.40';
7
+ export const HOST_PLUGIN_VERSION = '0.1.42';