dsh-plugin-bridge 0.2.11 → 0.3.1
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/README.md +24 -12
- package/README.zh.md +24 -12
- package/docs/design.md +5 -3
- package/docs/guide.zh.md +16 -6
- package/docs/native-webui-feasibility.md +56 -28
- package/lib/api-rpc.d.ts +5 -2
- package/lib/api-rpc.js +10 -2
- package/lib/cli.js +12 -10
- package/lib/client-contract.d.ts +87 -0
- package/lib/client-contract.js +487 -0
- package/lib/client.d.ts +16 -0
- package/lib/client.js +1295 -0
- package/lib/client.js.map +1 -0
- package/lib/command.d.ts +10 -20
- package/lib/command.js +139 -18
- package/lib/dsh-alpha-host.d.ts +67 -0
- package/lib/dsh-alpha-host.js +276 -0
- package/lib/host.d.ts +177 -0
- package/lib/host.js +102 -0
- package/lib/index.d.ts +2 -3
- package/lib/index.js +6 -8
- package/lib/migrate.d.ts +17 -38
- package/lib/migrate.js +114 -71
- package/package.json +54 -4
- package/reports/dsh-0.1.2-alpha.2-compat-2026-08-31.md +64 -0
- package/reports/native-workbench-2026-08-25.md +30 -0
- package/reports/native-workbench-2026-08-25.raw.json +34 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dsh-plugin-bridge",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.1",
|
|
4
4
|
"description": "Previewable cross-preset session migration for DeepSeek Harness with bounded, fixed-schema handoffs",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "lib/index.js",
|
|
@@ -11,12 +11,16 @@
|
|
|
11
11
|
"reports/v0.2.3-e2e-2026-08-20T13-19-13-924Z.raw.json",
|
|
12
12
|
"reports/v0.2.3-e2e-report.md",
|
|
13
13
|
"reports/v0.2.6-rc11-vision-report.md",
|
|
14
|
+
"reports/native-workbench-2026-08-25.md",
|
|
15
|
+
"reports/native-workbench-2026-08-25.raw.json",
|
|
16
|
+
"reports/dsh-0.1.2-alpha.2-compat-2026-08-31.md",
|
|
14
17
|
"cordis.patch.yml",
|
|
15
18
|
"README.md",
|
|
16
19
|
"README.zh.md"
|
|
17
20
|
],
|
|
18
21
|
"scripts": {
|
|
19
|
-
"build": "tsc -p tsconfig.json",
|
|
22
|
+
"build": "tsc -p tsconfig.json && npm run build:client",
|
|
23
|
+
"build:client": "tsdown --config tsdown.config.ts",
|
|
20
24
|
"build:check": "npm run build && git diff --exit-code -- lib",
|
|
21
25
|
"typecheck": "tsc -p tsconfig.check.json",
|
|
22
26
|
"prepack": "npm run build",
|
|
@@ -41,20 +45,54 @@
|
|
|
41
45
|
"dsh": {
|
|
42
46
|
"bundle": {
|
|
43
47
|
"patch": "./cordis.patch.yml"
|
|
48
|
+
},
|
|
49
|
+
"client": {
|
|
50
|
+
"inject": [
|
|
51
|
+
"@deepseek-ai/dsh-api-remotes",
|
|
52
|
+
"@deepseek-ai/dsh-client-ui-conversation",
|
|
53
|
+
"@deepseek-ai/dsh-client-ui-chat"
|
|
54
|
+
],
|
|
55
|
+
"platform": "web"
|
|
44
56
|
}
|
|
45
57
|
},
|
|
46
58
|
"engines": {
|
|
47
59
|
"node": ">=22"
|
|
48
60
|
},
|
|
49
61
|
"peerDependencies": {
|
|
50
|
-
"@deepseek-ai/cordis": "^4.0.1"
|
|
62
|
+
"@deepseek-ai/cordis": "^4.0.1",
|
|
63
|
+
"@deepseek-ai/dsh-api-remotes": "^0.1.0-rc.7 || ^0.1.1-rc.1 || ^0.1.2-alpha.1",
|
|
64
|
+
"@deepseek-ai/dsh-client-ui-chat": "^0.1.0-rc.7 || ^0.1.1-rc.1 || ^0.1.2-alpha.1",
|
|
65
|
+
"@deepseek-ai/dsh-client-ui-conversation": "^0.1.0-rc.7 || ^0.1.1-rc.1 || ^0.1.2-alpha.1",
|
|
66
|
+
"@deepseek-ai/dsh-client-ui-primitives": "^0.1.0-rc.7 || ^0.1.1-rc.1 || ^0.1.2-alpha.1",
|
|
67
|
+
"@deepseek-ai/dsh-client-ui-slots": "^0.1.0-rc.7 || ^0.1.1-rc.1 || ^0.1.2-alpha.1",
|
|
68
|
+
"react": "^18.2.0"
|
|
69
|
+
},
|
|
70
|
+
"peerDependenciesMeta": {
|
|
71
|
+
"@deepseek-ai/cordis": { "optional": true },
|
|
72
|
+
"@deepseek-ai/dsh-api-remotes": { "optional": true },
|
|
73
|
+
"@deepseek-ai/dsh-client-ui-chat": { "optional": true },
|
|
74
|
+
"@deepseek-ai/dsh-client-ui-conversation": { "optional": true },
|
|
75
|
+
"@deepseek-ai/dsh-client-ui-primitives": { "optional": true },
|
|
76
|
+
"@deepseek-ai/dsh-client-ui-slots": { "optional": true },
|
|
77
|
+
"react": { "optional": true }
|
|
51
78
|
},
|
|
52
79
|
"dependencies": {
|
|
53
80
|
"@deepseek-ai/schemastery": "^3.18.1"
|
|
54
81
|
},
|
|
55
82
|
"devDependencies": {
|
|
56
|
-
"@deepseek-ai/cordis": "4.0.
|
|
83
|
+
"@deepseek-ai/cordis": "4.0.2",
|
|
84
|
+
"@deepseek-ai/dsh-api-remotes": "^0.1.2-alpha.2",
|
|
85
|
+
"@deepseek-ai/dsh-api-session-controller": "^0.1.2-alpha.2",
|
|
86
|
+
"@deepseek-ai/dsh-client-ui-chat": "^0.1.2-alpha.2",
|
|
87
|
+
"@deepseek-ai/dsh-client-ui-conversation": "^0.1.2-alpha.2",
|
|
88
|
+
"@deepseek-ai/dsh-client-ui-primitives": "^0.1.2-alpha.2",
|
|
89
|
+
"@deepseek-ai/dsh-client-ui-renderer": "^0.1.2-alpha.2",
|
|
90
|
+
"@deepseek-ai/dsh-client-ui-session": "^0.1.2-alpha.2",
|
|
91
|
+
"@deepseek-ai/dsh-client-ui-slots": "^0.1.2-alpha.2",
|
|
57
92
|
"@types/node": "^26.2.0",
|
|
93
|
+
"@types/react": "~18.3.1",
|
|
94
|
+
"react": "^18.3.1",
|
|
95
|
+
"tsdown": "^0.22.14",
|
|
58
96
|
"typescript": "^7.0.2"
|
|
59
97
|
},
|
|
60
98
|
"publishConfig": {
|
|
@@ -88,6 +126,10 @@
|
|
|
88
126
|
"types": "./lib/migrate.d.ts",
|
|
89
127
|
"default": "./lib/migrate.js"
|
|
90
128
|
},
|
|
129
|
+
"./host": {
|
|
130
|
+
"types": "./lib/host.d.ts",
|
|
131
|
+
"default": "./lib/host.js"
|
|
132
|
+
},
|
|
91
133
|
"./rpc": {
|
|
92
134
|
"types": "./lib/rpc.d.ts",
|
|
93
135
|
"default": "./lib/rpc.js"
|
|
@@ -100,6 +142,14 @@
|
|
|
100
142
|
"types": "./lib/command.d.ts",
|
|
101
143
|
"default": "./lib/command.js"
|
|
102
144
|
},
|
|
145
|
+
"./client": {
|
|
146
|
+
"types": "./lib/client.d.ts",
|
|
147
|
+
"default": "./lib/client.js"
|
|
148
|
+
},
|
|
149
|
+
"./client-contract": {
|
|
150
|
+
"types": "./lib/client-contract.d.ts",
|
|
151
|
+
"default": "./lib/client-contract.js"
|
|
152
|
+
},
|
|
103
153
|
"./cordis.patch.yml": "./cordis.patch.yml",
|
|
104
154
|
"./package.json": "./package.json"
|
|
105
155
|
}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
# DSH 0.1.2-alpha.2 compatibility validation
|
|
2
|
+
|
|
3
|
+
Date: 2026-08-31 (Asia/Shanghai)
|
|
4
|
+
|
|
5
|
+
## Scope
|
|
6
|
+
|
|
7
|
+
- Official host: `@deepseek-ai/dsh@0.1.2-alpha.2` from the npm registry
|
|
8
|
+
- Upstream tag: `dsh-v0.1.2-alpha.2`
|
|
9
|
+
- Upstream commit: `0a53fb55bea101816fa226bb964ae2bed71c343b`
|
|
10
|
+
- Bridge branch: `codex/dsh-alpha2-compat`
|
|
11
|
+
- Packed Bridge SHA-256: `4170fc548ad4c9f77d70bc9e47cef92da849b4fa608a6b7cf323f4ad972cb085`
|
|
12
|
+
- All profiles, credentials copied for the run, sessions, packages, and browser state were isolated from the ordinary DSH home.
|
|
13
|
+
|
|
14
|
+
## Compatibility changes covered
|
|
15
|
+
|
|
16
|
+
- Accept alpha.2's `session/attachment-invalid` image rejection while retaining rc.2's `attachment-error` behavior.
|
|
17
|
+
- Remove the alpha-deleted `@deepseek-ai/dsh-client-runtime` peer, development import, and bundler external.
|
|
18
|
+
- Build against the split alpha.2 client contracts: API remotes/session controller, Chat command-row slot, renderer, Session UI, primitives, and slots.
|
|
19
|
+
- Provide alpha.2's required localized labels to `MarkdownText` and `JsonTree`.
|
|
20
|
+
- Add `ui-chat` to client injection so the package that owns `conversation.chat.commandview` is explicit rather than assumed from the official Web profile.
|
|
21
|
+
- Treat Cordis as a host-provided optional peer while retaining its supported version range.
|
|
22
|
+
|
|
23
|
+
## Automated evidence
|
|
24
|
+
|
|
25
|
+
- Focused old/new image fallback tests passed.
|
|
26
|
+
- Alpha manifest and split-client contract tests passed.
|
|
27
|
+
- `npm run verify` passed build, typecheck, 167 tests, generated-lib drift, dataset checks, and packed-package smoke installation.
|
|
28
|
+
- Source coverage: 93.58% lines, 78.10% branches, and 88.24% functions.
|
|
29
|
+
|
|
30
|
+
## Official npm install evidence
|
|
31
|
+
|
|
32
|
+
- The clean runtime reported DSH `0.1.2-alpha.2`.
|
|
33
|
+
- Plugin add completed without a peer warning after the Cordis metadata correction.
|
|
34
|
+
- `pnpm peers check`: no peer dependency issues.
|
|
35
|
+
- The profile contained the Bridge dependency and bundle layer, and `node_modules/dsh-plugin-bridge` resolved.
|
|
36
|
+
|
|
37
|
+
## Real WebUI evidence
|
|
38
|
+
|
|
39
|
+
- Native `/bridge --doctor`: `dsh-typed-controllers`, 13/13 required methods.
|
|
40
|
+
- `code` resolved to the official `ptc` preset.
|
|
41
|
+
- Preview preserved `ORBIT-A2-731`, port `7643`, `PostgreSQL`, `src/alpha.ts`, and the `MongoDB` prohibition.
|
|
42
|
+
- Preview, Text, and Markdown modes rendered. A Next-step edit in Text mode was the exact Next step delivered to the target.
|
|
43
|
+
- At 1200x853 the card panel scrolled internally; toolbar and confirmation actions stayed outside it; the document had no overflow.
|
|
44
|
+
- Confirm automatically opened the target under the official PTC mode.
|
|
45
|
+
- The target restated all five facts and stopped for confirmation.
|
|
46
|
+
- The target goal was visibly paused and contained the reviewed summary.
|
|
47
|
+
- The original source remained separately selectable and retained its original model conversation.
|
|
48
|
+
|
|
49
|
+
The run used three authorized model requests: source seed, preview worker, and target restatement.
|
|
50
|
+
|
|
51
|
+
## Removal evidence
|
|
52
|
+
|
|
53
|
+
After `dsh plugin --profile web remove dsh-plugin-bridge` and a WebUI restart:
|
|
54
|
+
|
|
55
|
+
- the profile dependency was absent;
|
|
56
|
+
- the bundle list contained only the official base and Web app;
|
|
57
|
+
- the Bridge package was absent from profile `node_modules` and lock/profile text;
|
|
58
|
+
- the browser loaded no Bridge client asset and contained zero `.dsh-bridge-card` nodes;
|
|
59
|
+
- the fresh browser console contained zero errors;
|
|
60
|
+
- historical command outcomes remained readable through the official generic command renderer.
|
|
61
|
+
|
|
62
|
+
## Known boundary
|
|
63
|
+
|
|
64
|
+
This run did not repeat a live raw-image/VLM transfer. Alpha.2's namespaced text-model image rejection is covered by deterministic migration regression tests; the earlier rc.2 vision report remains the live attachment-transfer evidence. Installation and removal still require one WebUI restart.
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# Native WebUI workbench acceptance · 2026-08-25
|
|
2
|
+
|
|
3
|
+
Environment: isolated official `@deepseek-ai/dsh@0.1.1-rc.2` Web profile, locally packed Bridge `0.2.11` plus the current PR changes. The source, worker, and target sessions were synthetic and isolated from the user's normal DSH home.
|
|
4
|
+
|
|
5
|
+
## What was exercised
|
|
6
|
+
|
|
7
|
+
- the client half loaded through the official `dsh.client` module graph and occupied `conversation.chat.commandview`;
|
|
8
|
+
- `/bridge --doctor` rendered through the native card and reported 13/13 host capabilities;
|
|
9
|
+
- the running row showed immediate elapsed-time feedback without mutating the source;
|
|
10
|
+
- completed Markdown rendered through the official primitive, a complete JSON edit rendered as a keyboard-accessible tree, and the textarea round-tripped user changes;
|
|
11
|
+
- the reviewed payload was accepted by the host command without being recorded in command input;
|
|
12
|
+
- the created goal was paused, the first target turn restated the handoff, and the client automatically opened the target session.
|
|
13
|
+
|
|
14
|
+
## Fixed repeat gate
|
|
15
|
+
|
|
16
|
+
Each run carried the same five low-collision facts: port `8118`, PostgreSQL, MongoDB forbidden, `src/orders/router.ts`, and “idempotency tests only.”
|
|
17
|
+
|
|
18
|
+
| Run | Route | Preview facts | Target facts | Worker time | Target LLM time | Paused | Auto-open |
|
|
19
|
+
|---|---|---:|---:|---:|---:|---:|---:|
|
|
20
|
+
| R1 | standard → code | 5/5 | 5/5 | 12.846 s | 7.807 s | yes | yes |
|
|
21
|
+
| R2 | minimal → code | 5/5 | 5/5 | 9.713 s | 6.175 s | yes | yes |
|
|
22
|
+
| R3 | minimal → code | 5/5 | 5/5 | 7.421 s | 5.772 s | yes | yes |
|
|
23
|
+
|
|
24
|
+
R1 additionally changed `8118` to `8118(用户在 WebUI 校对)` inside the native editor; the exact marker appeared in both the stored target goal and the first target response.
|
|
25
|
+
|
|
26
|
+
The token counters and per-run records are in [`native-workbench-2026-08-25.raw.json`](native-workbench-2026-08-25.raw.json).
|
|
27
|
+
|
|
28
|
+
## Boundary
|
|
29
|
+
|
|
30
|
+
This is a three-run fixed release gate, not a latency distribution or population-level reliability claim. Worker and target latency, token use, and phrasing remain model-, preset-, cache-, and provider-dependent. Automated fake-host tests cover failure and payload bounds without spending tokens; this report covers the installed official-WebUI path that those tests cannot prove.
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
{
|
|
2
|
+
"date": "2026-08-25",
|
|
3
|
+
"dshVersion": "0.1.1-rc.2",
|
|
4
|
+
"bridgePackageVersion": "0.2.11",
|
|
5
|
+
"environment": "isolated official dsh web profile",
|
|
6
|
+
"workerModel": "deepseek-v4-flash",
|
|
7
|
+
"facts": ["8118", "PostgreSQL", "MongoDB forbidden", "src/orders/router.ts", "idempotency tests only"],
|
|
8
|
+
"runs": [
|
|
9
|
+
{
|
|
10
|
+
"id": "R1", "from": "standard", "to": "code",
|
|
11
|
+
"previewFacts": 5, "targetFacts": 5,
|
|
12
|
+
"workerMs": 12846, "targetMs": 7807,
|
|
13
|
+
"editedMarkerPreserved": true, "targetPaused": true, "autoOpened": true,
|
|
14
|
+
"workerTokens": { "uncachedInput": 931, "output": 1112, "cacheRead": 1024 },
|
|
15
|
+
"targetTokens": { "uncachedInput": 10415, "output": 436, "cacheRead": 0 }
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"id": "R2", "from": "minimal", "to": "code",
|
|
19
|
+
"previewFacts": 5, "targetFacts": 5,
|
|
20
|
+
"workerMs": 9713, "targetMs": 6175,
|
|
21
|
+
"targetPaused": true, "autoOpened": true,
|
|
22
|
+
"workerTokens": { "uncachedInput": 518, "output": 771, "cacheRead": 1024 },
|
|
23
|
+
"targetTokens": { "uncachedInput": 9670, "output": 278, "cacheRead": 640 }
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
"id": "R3", "from": "minimal", "to": "code",
|
|
27
|
+
"previewFacts": 5, "targetFacts": 5,
|
|
28
|
+
"workerMs": 7421, "targetMs": 5772,
|
|
29
|
+
"targetPaused": true, "autoOpened": true,
|
|
30
|
+
"workerTokens": { "uncachedInput": 131, "output": 615, "cacheRead": 1408 },
|
|
31
|
+
"targetTokens": { "uncachedInput": 1622, "output": 290, "cacheRead": 8704 }
|
|
32
|
+
}
|
|
33
|
+
]
|
|
34
|
+
}
|