dsh-cindy-host 0.1.37 → 0.1.38
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 +5 -0
- package/README.md +6 -2
- package/package.json +1 -1
- package/src/cindy-message-row.js +25 -5
- package/src/host-version.js +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.1.38 — 2026-11-07
|
|
4
|
+
|
|
5
|
+
- Show a valid `run_code` description in Cindy's collapsed tool label as a Host-only display alias. Normalize the preview to one bounded line, remove control/bidi-spoofing characters, and cap it at 120 Unicode code points without changing original input or full details.
|
|
6
|
+
- Keep execution tool names, call/result identities, other tools and exact-name special cards unchanged. Share the projection between live and history reads; invalid/missing descriptions retain the original name. Add focused display/input-immutability/pairing regressions; handset rendering remains separate acceptance.
|
|
7
|
+
|
|
3
8
|
## 0.1.37 — 2026-11-06
|
|
4
9
|
|
|
5
10
|
- Use explicit source-order history snapshots for both validated persistence and the hot fallback reader. Preserve legacy raw order, reconcile live reasoning through native history-live client identities, and page by source cuts; unknown cursors now fail explicitly rather than silently skipping history.
|
package/README.md
CHANGED
|
@@ -4,12 +4,12 @@ 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.38** shows valid `run_code` work descriptions in Cindy's collapsed tool labels without renaming execution tools or changing call/result pairing. It retains the earlier history stability, interruption controls and native capability subsets. Host regressions do not establish handset rendering or white-screen acceptance.
|
|
8
8
|
|
|
9
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:
|
|
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.38
|
|
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.
|
|
@@ -95,6 +95,10 @@ Organization ID/slug/domain and email discovery check both regions. A found orga
|
|
|
95
95
|
|
|
96
96
|
This feature ships in 0.1.33; installation and runtime activation are verified separately. Tests cover protocol, real local callbacks, settings-panel state, credential races and both regions' actual runtime URL routing with fake credentials. Real Apple/enterprise identity providers and iOS discovery/file round trips still require an authorized test account after deployment. See [authentication flow notes](doc/auth-login.md). The new browser flow is exposed by the settings page; the older interactive CLI is not a replacement for that UI on Windows.
|
|
97
97
|
|
|
98
|
+
## Tool work titles on Cindy mobile (0.1.38)
|
|
99
|
+
|
|
100
|
+
The Host projects `run_code` calls with a non-empty string `description` as `run_code · <description>` in Cindy’s collapsed tool row. Titles are normalized to one line and limited to a 120-code-point preview; the original input, code and full description remain in expanded details. Calls without a valid title and all other tool names keep their existing mapping. Live events and history use the same projection, and results remain paired by `toolUseId`. This is a Host-only display alias, not a renamed DSH execution tool. Reload an updated Host to apply it; existing phone-cached history may need reloading. Handset rendering has not been acceptance-tested.
|
|
101
|
+
|
|
98
102
|
## Thinking content on Cindy mobile (0.1.33)
|
|
99
103
|
|
|
100
104
|
The Host sends DSH-provided public reasoning text/summaries as native structured `thinking` content (`{ text }`), not ordinary prose strings. Expand the work/activity group, then its thinking row, to read it. No Cindy or DSH core patch is needed. Models that expose no reasoning text still have nothing to show; signatures and provider-private replay metadata are never forwarded.
|
package/package.json
CHANGED
package/src/cindy-message-row.js
CHANGED
|
@@ -69,8 +69,26 @@ function parseToolArguments(raw) {
|
|
|
69
69
|
*/
|
|
70
70
|
const TOOL_NAME_BY_DSH_NAME = { todo_write: 'TodoWrite' };
|
|
71
71
|
|
|
72
|
-
/**
|
|
73
|
-
|
|
72
|
+
/**
|
|
73
|
+
* Project a tool name for Cindy's read-only transcript, never for execution.
|
|
74
|
+
* Mobile's generic tool row uses toolName as its collapsed label and leaves
|
|
75
|
+
* input.description in expanded details. Only run_code needs this display alias;
|
|
76
|
+
* special card names (notably TodoWrite) must retain their exact vocabulary.
|
|
77
|
+
*/
|
|
78
|
+
function cindyToolName(name, input) {
|
|
79
|
+
if (name === 'run_code' && input !== null && typeof input === 'object'
|
|
80
|
+
&& !Array.isArray(input) && typeof input.description === 'string') {
|
|
81
|
+
// One bounded line, without control/bidi characters that could spoof the name.
|
|
82
|
+
// Keep the original input intact for expanded details and result pairing by ID.
|
|
83
|
+
const title = input.description
|
|
84
|
+
.replace(/[\u0000-\u001f\u007f-\u009f\u200e\u200f\u202a-\u202e\u2066-\u2069]/g, ' ')
|
|
85
|
+
.replace(/\s+/gu, ' ').trim();
|
|
86
|
+
const characters = Array.from(title);
|
|
87
|
+
if (characters.length > 0) {
|
|
88
|
+
const preview = characters.length > 120 ? `${characters.slice(0, 119).join('')}…` : title;
|
|
89
|
+
return `${name} · ${preview}`;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
74
92
|
return TOOL_NAME_BY_DSH_NAME[name] ?? name;
|
|
75
93
|
}
|
|
76
94
|
|
|
@@ -379,17 +397,19 @@ export function toCindyMessageRows(message, { sessionId, createdAt, now = () =>
|
|
|
379
397
|
? `${sessionId}:reasoning-stream:${identity.turn}:${identity.step}:${index}` : clientId;
|
|
380
398
|
rows.push({ ...base, clientId: logical, content: { text: block.text } });
|
|
381
399
|
return;
|
|
382
|
-
case 'tool-call':
|
|
400
|
+
case 'tool-call': {
|
|
401
|
+
const input = parseToolArguments(block.arguments);
|
|
383
402
|
rows.push({
|
|
384
403
|
...base,
|
|
385
404
|
toolUseId: typeof block.id === 'string' ? block.id : null,
|
|
386
405
|
content: {
|
|
387
|
-
toolName: typeof block.name === 'string' ? cindyToolName(block.name) : '',
|
|
388
|
-
input
|
|
406
|
+
toolName: typeof block.name === 'string' ? cindyToolName(block.name, input) : '',
|
|
407
|
+
input,
|
|
389
408
|
...(typeof block.id === 'string' ? { toolUseId: block.id } : {}),
|
|
390
409
|
},
|
|
391
410
|
});
|
|
392
411
|
return;
|
|
412
|
+
}
|
|
393
413
|
case 'tool-result':
|
|
394
414
|
rows.push({
|
|
395
415
|
...base,
|
package/src/host-version.js
CHANGED