dsh-cindy-host 0.1.39 → 0.1.41
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 +12 -0
- package/README.md +7 -3
- package/package.json +4 -4
- package/src/cindy-session-row.js +5 -0
- package/src/dsh-active-sessions.js +3 -1
- package/src/dsh-session-source.js +4 -4
- package/src/host-version.js +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.1.41 — 2026-11-08
|
|
4
|
+
|
|
5
|
+
- 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.
|
|
6
|
+
- 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.
|
|
7
|
+
- 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.
|
|
8
|
+
- 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.
|
|
9
|
+
|
|
10
|
+
## 0.1.40 — 2026-11-07
|
|
11
|
+
|
|
12
|
+
- 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.
|
|
13
|
+
- Preserve provenance when history counts are unavailable and keep missing tasks as explicit `NOT_FOUND` failures. Add projection/router regressions without changing authorization, source logs, provider selection, Cindy code or its cache implementation; handset re-entry/cache behavior remains separate acceptance.
|
|
14
|
+
|
|
3
15
|
## 0.1.39 — 2026-11-07
|
|
4
16
|
|
|
5
17
|
- Serve bounded, authorized project-grid WebP thumbnails through the existing file-browser contract; keep original-file reads independent of codec failures.
|
package/README.md
CHANGED
|
@@ -4,16 +4,20 @@ A Host-side adapter connecting current Cindy clients to DeepSeek Harness.
|
|
|
4
4
|
|
|
5
5
|
## Requirements and installation
|
|
6
6
|
|
|
7
|
-
Version **0.1.
|
|
7
|
+
Version **0.1.41** adds DSH `0.2.2-rc.1` compatibility and keeps historical ordinary forks visible by classifying subagents through `origin`, not parent lineage. It retains 0.1.40's task provenance, system credential storage, image delivery, thumbnails, work titles, history stability and interruption controls. Handset re-entry, rendering and white-screen acceptance remain separate.
|
|
8
8
|
|
|
9
|
-
It supports the exact **DSH 0.2.2-
|
|
9
|
+
It supports the exact **DSH 0.2.2-rc.1** carrier, 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** (RC tested with 24.18); 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. RC validation covers isolated Web installation and runtime smoke; the prior alpha checks cover core contracts. Neither establishes relay or handset acceptance. Install through the Desktop DSH plugin manager. CLI-managed profiles can use:
|
|
10
10
|
|
|
11
11
|
```sh
|
|
12
|
-
dsh plugin --profile <profile> add dsh-cindy-host@0.1.
|
|
12
|
+
dsh plugin --profile <profile> add dsh-cindy-host@0.1.41
|
|
13
13
|
```
|
|
14
14
|
|
|
15
15
|
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
16
|
|
|
17
|
+
## 0.1.41: DSH 0.2.2 RC compatibility
|
|
18
|
+
|
|
19
|
+
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.
|
|
20
|
+
|
|
17
21
|
## 0.1.36: interruption controls
|
|
18
22
|
|
|
19
23
|
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.
|
|
3
|
+
"version": "0.1.41",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "Cindy 手机客户端连接 DSH 的 Host 侧插件:会话/消息/审批/todo/goal 的手机通道,以及配套的设置卡片",
|
|
6
6
|
"license": "MIT",
|
|
@@ -68,9 +68,9 @@
|
|
|
68
68
|
},
|
|
69
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
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",
|
|
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 || 0.2.2-rc.1",
|
|
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 || 0.2.2-rc.1",
|
|
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 || 0.2.2-rc.1",
|
|
74
74
|
"@deepseek-ai/schemastery": "^3.18.1 || 3.18.6-alpha.1"
|
|
75
75
|
},
|
|
76
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 里移除不改变任何运行时行为,只是让两道门禁都能正确判定。",
|
package/src/cindy-session-row.js
CHANGED
|
@@ -76,6 +76,11 @@ export function toCindySessionListRow(item, { now = () => new Date(), device, de
|
|
|
76
76
|
return {
|
|
77
77
|
id,
|
|
78
78
|
title,
|
|
79
|
+
// DSH projects ordinary user tasks, not Cindy Make/bot sessions. The phone's
|
|
80
|
+
// entry gate requires explicit provenance before mounting the chat and its
|
|
81
|
+
// local history cache; omitting it forces an extra remote lookup on re-entry.
|
|
82
|
+
// This is task provenance, independent of the model's providerId below.
|
|
83
|
+
source: 'desktop',
|
|
79
84
|
createdAt,
|
|
80
85
|
updatedAt,
|
|
81
86
|
// `'active' | 'archived' | 'deleted'`; the controller's default status filter
|
|
@@ -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
|
-
||
|
|
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'
|
|
32
|
-
*
|
|
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
|
-
|
|
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;
|
package/src/host-version.js
CHANGED