@bruc3van/dsh-doctor 0.5.8 → 0.5.9
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.en.md +11 -6
- package/README.md +11 -6
- package/migrations/dsh-v0.1.1-rc.2__dsh-v0.1.2-rc.1/behavior.md +16 -0
- package/migrations/dsh-v0.1.1-rc.2__dsh-v0.1.2-rc.1/config-rules.json +36 -0
- package/migrations/dsh-v0.1.1-rc.2__dsh-v0.1.2-rc.1/manifest.json +20 -0
- package/migrations/dsh-v0.1.1-rc.2__dsh-v0.1.2-rc.1/packages.json +83 -0
- package/migrations/dsh-v0.1.1-rc.2__dsh-v0.1.2-rc.1/services.json +28 -0
- package/migrations/dsh-v0.1.1-rc.2__dsh-v0.1.2-rc.1/symbols.json +134 -0
- package/package.json +1 -1
- package/skills/dsh-plugin-upgrade/SKILL.md +2 -2
- package/skills/dsh-plugin-upgrade/evals/evals.json +1 -1
- package/skills/dsh-plugin-upgrade/evals/trigger-evals.json +1 -1
- package/skills/dsh-plugin-upgrade/references/migration-map.md +6 -0
- package/src/cli.mjs +2 -2
- package/src/migrate.mjs +1 -1
package/README.en.md
CHANGED
|
@@ -6,7 +6,7 @@ DSH Doctor is an upgrade and troubleshooting tool for DSH plugin developers and
|
|
|
6
6
|
|
|
7
7
|
When a change depends on the plugin's business logic, Doctor calls it out for the agent or developer instead of guessing. Every edit is previewed and backed up first, and runtime checks use a temporary DSH environment rather than the developer's everyday profile.
|
|
8
8
|
|
|
9
|
-
> This is a community-maintained third-party project, not an official DeepSeek project. The current migration scope is DSH 0.1.1 → 0.1.2. The catalog exactly covers `dsh-v0.1.1-rc.2` → `dsh-v0.1.2-
|
|
9
|
+
> This is a community-maintained third-party project, not an official DeepSeek project. The current migration scope is DSH 0.1.1 → 0.1.2. The catalog exactly covers `dsh-v0.1.1-rc.2` → `dsh-v0.1.2-rc.1` and retains the alpha.2 and alpha.3 historical rules. Differences outside those catalogs still require a separate investigation and are not proven compatible by the catalog.
|
|
10
10
|
|
|
11
11
|
## What it helps with
|
|
12
12
|
|
|
@@ -19,19 +19,24 @@ When a change depends on the plugin's business logic, Doctor calls it out for th
|
|
|
19
19
|
|
|
20
20
|
Agents can orchestrate these capabilities through the skill, while other tools can integrate the same structured CLI workflows.
|
|
21
21
|
|
|
22
|
-
## Recommended: use the skill
|
|
22
|
+
## Recommended: ask an agent to install and use the skill
|
|
23
23
|
|
|
24
|
-
|
|
24
|
+
Send this prompt to your agent:
|
|
25
|
+
|
|
26
|
+
```text
|
|
27
|
+
Install this skill: https://github.com/bruc3van/dsh-doctor, and tell me how to use it.
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
You can also install the repository's [`dsh-plugin-upgrade`](skills/dsh-plugin-upgrade/SKILL.md) skill manually:
|
|
25
31
|
|
|
26
32
|
```sh
|
|
27
33
|
npx skills add bruc3van/dsh-doctor
|
|
28
34
|
```
|
|
29
35
|
|
|
30
|
-
|
|
36
|
+
After installation, ask the agent from inside the plugin repository that needs migration:
|
|
31
37
|
|
|
32
38
|
```text
|
|
33
|
-
|
|
34
|
-
Analyze compatibility first, modify the code, then complete build and runtime verification.
|
|
39
|
+
Adjust and verify this plugin so that it is compatible with DSH 0.1.2.
|
|
35
40
|
```
|
|
36
41
|
|
|
37
42
|
The skill guides the agent to:
|
package/README.md
CHANGED
|
@@ -6,7 +6,7 @@ DSH Doctor 是给 DSH 插件开发者和 Agent 使用的升级、排障工具。
|
|
|
6
6
|
|
|
7
7
|
遇到需要理解业务逻辑的改动,它会明确列出来交给 Agent 或开发者处理,不会直接猜。所有修改都会先生成预览并保留备份,运行验证也会放在临时 DSH 环境中,不影响日常使用的 profile。
|
|
8
8
|
|
|
9
|
-
> 这是社区维护的第三方工具,不属于 DeepSeek 官方项目。当前迁移范围是 DSH 0.1.1 → 0.1.2;catalog 精确覆盖 `dsh-v0.1.1-rc.2` → `dsh-v0.1.2-
|
|
9
|
+
> 这是社区维护的第三方工具,不属于 DeepSeek 官方项目。当前迁移范围是 DSH 0.1.1 → 0.1.2;catalog 精确覆盖 `dsh-v0.1.1-rc.2` → `dsh-v0.1.2-rc.1`,并保留 alpha.2、alpha.3 历史规则。未收录的版本差异仍需单独调查,不能视为 catalog 已证明兼容。
|
|
10
10
|
|
|
11
11
|
## 它能解决什么问题
|
|
12
12
|
|
|
@@ -19,19 +19,24 @@ DSH Doctor 是给 DSH 插件开发者和 Agent 使用的升级、排障工具。
|
|
|
19
19
|
|
|
20
20
|
这些能力既可以由 Agent 通过 Skill 编排,也可以作为结构化 CLI 能力集成到其他工具中。
|
|
21
21
|
|
|
22
|
-
## 推荐方式:让 Agent
|
|
22
|
+
## 推荐方式:让 Agent 安装并使用 Skill
|
|
23
23
|
|
|
24
|
-
|
|
24
|
+
向你的 Agent 发送以下提示词:
|
|
25
|
+
|
|
26
|
+
```text
|
|
27
|
+
帮我安装这个 Skill:https://github.com/bruc3van/dsh-doctor,并告诉我如何使用。
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
也可以手动安装仓库中的 [`dsh-plugin-upgrade`](skills/dsh-plugin-upgrade/SKILL.md) Skill:
|
|
25
31
|
|
|
26
32
|
```sh
|
|
27
33
|
npx skills add bruc3van/dsh-doctor
|
|
28
34
|
```
|
|
29
35
|
|
|
30
|
-
|
|
36
|
+
安装完成后,在需要迁移的插件仓库中告诉 Agent:
|
|
31
37
|
|
|
32
38
|
```text
|
|
33
|
-
|
|
34
|
-
先分析兼容问题,再修改代码,最后完成构建和运行时验证。
|
|
39
|
+
请调整并验证当前插件,使其兼容 DSH 0.1.2。
|
|
35
40
|
```
|
|
36
41
|
|
|
37
42
|
Skill 会引导 Agent:
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# DSH 0.1.1-rc.2 to 0.1.2-rc.1 behavior migration
|
|
2
|
+
|
|
3
|
+
The old Client Runtime was split by ownership. There is no aggregate replacement package.
|
|
4
|
+
|
|
5
|
+
- Session control, list state, commands, projections, queue and event windows belong to `api-session-controller/client`.
|
|
6
|
+
- Workspace state and commands belong to `api-workspace-controller/client`; navigation policy belongs to `ui-workspace`.
|
|
7
|
+
- Conversation assembly belongs to `ui-conversation`; Chat and Trajectory own their respective projections.
|
|
8
|
+
- Approval and Question own their pending objects; `ui-session` only aggregates domain publications.
|
|
9
|
+
- The store engine belongs to `client-store`; React hook synthesis belongs to the renderer.
|
|
10
|
+
- The Host API Proxy was removed. Unary browser operations live on their natural Remote service owners.
|
|
11
|
+
- The demo-only `dsh-agent-spine-demo` package and the SQLite session persistence package were removed; neither has a catalog-confirmed drop-in replacement.
|
|
12
|
+
- `dsh-tool-subagent-report` was removed after alpha.3: child reporting and parent follow-up were unified into one Steer messaging operation (`SubagentRuntime.sendMessage`, exposed to models through `tool-subagent-control`). Migrating a report-tool integration is semantic work, not an import move.
|
|
13
|
+
- `dsh-code-runtime-python` was renamed to `dsh-experimental-code-runtime-python` when the package moved to the experimental tier. The module rename is exact in shape, but the experimental placement is a support-level change the developer must accept deliberately.
|
|
14
|
+
- 0.1.2 adds the `dsh-session-turn-outline` package and extends session submission/load-through APIs. These additions do not justify mechanical rewrites of existing plugin behavior.
|
|
15
|
+
|
|
16
|
+
An import move is safe only when the catalog marks it `exact`. A `semantic` mapping identifies the new owner but still requires the plugin developer to rewrite behavior and verify the real lifecycle.
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
{
|
|
2
|
+
"platformModules": [
|
|
3
|
+
"react",
|
|
4
|
+
"react/jsx-runtime",
|
|
5
|
+
"react-dom",
|
|
6
|
+
"react-dom/client",
|
|
7
|
+
"@deepseek-ai/cordis",
|
|
8
|
+
"@deepseek-ai/dsh-client-store",
|
|
9
|
+
"@deepseek-ai/dsh-client-ui-slots",
|
|
10
|
+
"@deepseek-ai/dsh-client-ui-primitives"
|
|
11
|
+
],
|
|
12
|
+
"profilePatchPaths": {
|
|
13
|
+
"web": [
|
|
14
|
+
"packages/bundle/base/cordis.patch.yml",
|
|
15
|
+
"packages/bundle/web-app/cordis.patch.yml"
|
|
16
|
+
]
|
|
17
|
+
},
|
|
18
|
+
"rules": [
|
|
19
|
+
{
|
|
20
|
+
"id": "client-inject-is-informational",
|
|
21
|
+
"note": "dsh.client.inject lists package dependency edges; Cordis service inject controls activation."
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
"id": "baseline-external-is-implicit",
|
|
25
|
+
"note": "Platform modules are implicit and must not be repeated in dsh.client.external."
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
"id": "feature-values-use-services-or-slots",
|
|
29
|
+
"note": "Feature plugins must not use dsh.client.external as a feature-to-feature value dependency mechanism."
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
"id": "client-export-required",
|
|
33
|
+
"note": "A web dsh.client declaration requires a published exports[\"./client\"] artifact."
|
|
34
|
+
}
|
|
35
|
+
]
|
|
36
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 1,
|
|
3
|
+
"id": "dsh-v0.1.1-rc.2__dsh-v0.1.2-rc.1",
|
|
4
|
+
"from": {
|
|
5
|
+
"ref": "dsh-v0.1.1-rc.2",
|
|
6
|
+
"commit": "b150a551b8d465e31e418e1b2eaf5e79bbb7d28e"
|
|
7
|
+
},
|
|
8
|
+
"to": {
|
|
9
|
+
"ref": "dsh-v0.1.2-rc.1",
|
|
10
|
+
"commit": "a66e4702047846cdaa10c66c9d3df3951f5ea70d",
|
|
11
|
+
"version": "0.1.2-rc.1"
|
|
12
|
+
},
|
|
13
|
+
"description": "DeepSeek Harness 0.1.1-rc.2 to 0.1.2-rc.1 plugin migration",
|
|
14
|
+
"references": {
|
|
15
|
+
"ownership": ".agents/notes/implemented/architecture/2026-08-20-client-session-conversation-ownership.md",
|
|
16
|
+
"remoteMigration": ".agents/notes/implemented/architecture/2026-08-10-unary-apiproxy-remote-migration.md",
|
|
17
|
+
"clientRules": "packages/client/AGENTS.md",
|
|
18
|
+
"steerMessaging": ".agents/notes/implemented/architecture/2026-08-27-adjacent-agent-steer-messaging.md"
|
|
19
|
+
}
|
|
20
|
+
}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
{
|
|
2
|
+
"removed": [
|
|
3
|
+
"@deepseek-ai/dsh-acp-demo",
|
|
4
|
+
"@deepseek-ai/dsh-acp-snapshot",
|
|
5
|
+
"@deepseek-ai/dsh-agent-spine-demo",
|
|
6
|
+
"@deepseek-ai/dsh-client-runtime",
|
|
7
|
+
"@deepseek-ai/dsh-code-runtime-python",
|
|
8
|
+
"@deepseek-ai/dsh-host-apiproxy",
|
|
9
|
+
"@deepseek-ai/dsh-sdk-jsonrpc-demo",
|
|
10
|
+
"@deepseek-ai/dsh-session-persistence-sqlite",
|
|
11
|
+
"@deepseek-ai/dsh-tool-subagent-report"
|
|
12
|
+
],
|
|
13
|
+
"added": [
|
|
14
|
+
"@deepseek-ai/dsh-acp-app",
|
|
15
|
+
"@deepseek-ai/dsh-api-session-controller",
|
|
16
|
+
"@deepseek-ai/dsh-api-settings-controller",
|
|
17
|
+
"@deepseek-ai/dsh-api-workspace-controller",
|
|
18
|
+
"@deepseek-ai/dsh-client-store",
|
|
19
|
+
"@deepseek-ai/dsh-client-ui-approval",
|
|
20
|
+
"@deepseek-ai/dsh-client-ui-chat",
|
|
21
|
+
"@deepseek-ai/dsh-client-ui-schedule",
|
|
22
|
+
"@deepseek-ai/dsh-client-ui-session",
|
|
23
|
+
"@deepseek-ai/dsh-deepseek-llm-api-extensions",
|
|
24
|
+
"@deepseek-ai/dsh-deque",
|
|
25
|
+
"@deepseek-ai/dsh-experimental-agent-team-profile",
|
|
26
|
+
"@deepseek-ai/dsh-experimental-agent-team-web-profile",
|
|
27
|
+
"@deepseek-ai/dsh-experimental-client-ui-agent-team",
|
|
28
|
+
"@deepseek-ai/dsh-experimental-code-runtime-python",
|
|
29
|
+
"@deepseek-ai/dsh-experimental-inspector",
|
|
30
|
+
"@deepseek-ai/dsh-experimental-webworker-packer",
|
|
31
|
+
"@deepseek-ai/dsh-experimental-webworker-runtime",
|
|
32
|
+
"@deepseek-ai/dsh-plugin-package-inventory-deepseek",
|
|
33
|
+
"@deepseek-ai/dsh-sdk-app",
|
|
34
|
+
"@deepseek-ai/dsh-sdk-minimal",
|
|
35
|
+
"@deepseek-ai/dsh-session-log-deepseek",
|
|
36
|
+
"@deepseek-ai/dsh-session-snapshot",
|
|
37
|
+
"@deepseek-ai/dsh-session-turn-outline",
|
|
38
|
+
"@deepseek-ai/dsh-util-crypto",
|
|
39
|
+
"@deepseek-ai/dsh-util-time",
|
|
40
|
+
"@deepseek-ai/dsh-util-values",
|
|
41
|
+
"@deepseek-ai/dsh-util-workspace-path",
|
|
42
|
+
"@deepseek-ai/dsh-webhook",
|
|
43
|
+
"@deepseek-ai/dsh-webhook-github",
|
|
44
|
+
"@deepseek-ai/dsh-win32-process"
|
|
45
|
+
],
|
|
46
|
+
"targetVersions": {
|
|
47
|
+
"@deepseek-ai/cordis": "4.0.2"
|
|
48
|
+
},
|
|
49
|
+
"dependencyPolicies": {
|
|
50
|
+
"@deepseek-ai/cordis": {
|
|
51
|
+
"client": ["peerDependencies", "devDependencies"]
|
|
52
|
+
},
|
|
53
|
+
"@deepseek-ai/dsh-client-store": {
|
|
54
|
+
"client": ["devDependencies"]
|
|
55
|
+
},
|
|
56
|
+
"@deepseek-ai/dsh-session": {
|
|
57
|
+
"client": ["devDependencies"]
|
|
58
|
+
}
|
|
59
|
+
},
|
|
60
|
+
"semanticReplacements": {
|
|
61
|
+
"@deepseek-ai/dsh-client-runtime": [
|
|
62
|
+
"@deepseek-ai/dsh-api-session-controller",
|
|
63
|
+
"@deepseek-ai/dsh-api-workspace-controller",
|
|
64
|
+
"@deepseek-ai/dsh-client-store",
|
|
65
|
+
"@deepseek-ai/dsh-client-ui-session",
|
|
66
|
+
"@deepseek-ai/dsh-client-ui-conversation",
|
|
67
|
+
"@deepseek-ai/dsh-client-ui-chat",
|
|
68
|
+
"@deepseek-ai/dsh-client-ui-trajectory",
|
|
69
|
+
"@deepseek-ai/dsh-client-ui-approval",
|
|
70
|
+
"@deepseek-ai/dsh-client-ui-user-questions"
|
|
71
|
+
],
|
|
72
|
+
"@deepseek-ai/dsh-host-apiproxy": [
|
|
73
|
+
"@deepseek-ai/dsh-api-gateway",
|
|
74
|
+
"@deepseek-ai/dsh-api-remotes"
|
|
75
|
+
],
|
|
76
|
+
"@deepseek-ai/dsh-code-runtime-python": [
|
|
77
|
+
"@deepseek-ai/dsh-experimental-code-runtime-python"
|
|
78
|
+
],
|
|
79
|
+
"@deepseek-ai/dsh-tool-subagent-report": [
|
|
80
|
+
"@deepseek-ai/dsh-tool-subagent-control"
|
|
81
|
+
]
|
|
82
|
+
}
|
|
83
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
{
|
|
2
|
+
"services": {
|
|
3
|
+
"sessions": {
|
|
4
|
+
"owner": "@deepseek-ai/dsh-api-session-controller/client",
|
|
5
|
+
"confidence": "semantic",
|
|
6
|
+
"note": "The service name survives, but Session snapshots no longer contain Conversation views or pending interactions."
|
|
7
|
+
},
|
|
8
|
+
"workspaces": {
|
|
9
|
+
"owner": "@deepseek-ai/dsh-api-workspace-controller/client",
|
|
10
|
+
"confidence": "semantic",
|
|
11
|
+
"note": "The service name survives, while cross-domain navigation belongs to ui-workspace."
|
|
12
|
+
},
|
|
13
|
+
"conversation": {
|
|
14
|
+
"owner": "@deepseek-ai/dsh-client-ui-conversation/client",
|
|
15
|
+
"confidence": "semantic",
|
|
16
|
+
"note": "Conversation assembly and input are independent of Session lifecycle snapshots."
|
|
17
|
+
},
|
|
18
|
+
"slots": {
|
|
19
|
+
"owner": "@deepseek-ai/dsh-client-ui-renderer/client",
|
|
20
|
+
"confidence": "semantic",
|
|
21
|
+
"note": "Slot declarations stay in ui-slots; runtime registration and binding belong to ui-renderer."
|
|
22
|
+
}
|
|
23
|
+
},
|
|
24
|
+
"removedHostFacade": {
|
|
25
|
+
"package": "@deepseek-ai/dsh-host-apiproxy",
|
|
26
|
+
"replacementPolicy": "Use the natural business Remote owner through generated api-remotes contributions; there is no replacement facade."
|
|
27
|
+
}
|
|
28
|
+
}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
{
|
|
2
|
+
"modules": {
|
|
3
|
+
"@deepseek-ai/dsh-settings": {
|
|
4
|
+
"settingsNamespace": {
|
|
5
|
+
"toModule": "@deepseek-ai/dsh-settings",
|
|
6
|
+
"toSymbol": "SettingsProvider.register",
|
|
7
|
+
"confidence": "semantic",
|
|
8
|
+
"reason": "The settingsNamespace factory was removed. Inject the settings Service and register the namespace through ctx.settings.register(name, schema)."
|
|
9
|
+
}
|
|
10
|
+
},
|
|
11
|
+
"@deepseek-ai/dsh-client-runtime/client": {
|
|
12
|
+
"ClientContext": {
|
|
13
|
+
"toModule": "@deepseek-ai/cordis",
|
|
14
|
+
"toSymbol": "Context",
|
|
15
|
+
"confidence": "exact",
|
|
16
|
+
"reason": "ClientContext was a type alias of Cordis Context."
|
|
17
|
+
},
|
|
18
|
+
"createSnapshotStore": {
|
|
19
|
+
"toModule": "@deepseek-ai/dsh-client-store",
|
|
20
|
+
"toSymbol": "createSnapshotStore",
|
|
21
|
+
"confidence": "exact",
|
|
22
|
+
"reason": "The React-free store engine moved to client-store."
|
|
23
|
+
},
|
|
24
|
+
"defineStore": {
|
|
25
|
+
"toModule": "@deepseek-ai/dsh-client-store",
|
|
26
|
+
"toSymbol": "defineStore",
|
|
27
|
+
"confidence": "exact",
|
|
28
|
+
"reason": "The declarative store factory moved to client-store."
|
|
29
|
+
},
|
|
30
|
+
"ObservableSnapshot": {
|
|
31
|
+
"toModule": "@deepseek-ai/dsh-client-store",
|
|
32
|
+
"toSymbol": "ObservableSnapshot",
|
|
33
|
+
"confidence": "exact",
|
|
34
|
+
"reason": "The observable store contract moved to client-store."
|
|
35
|
+
},
|
|
36
|
+
"SnapshotStore": {
|
|
37
|
+
"toModule": "@deepseek-ai/dsh-client-store",
|
|
38
|
+
"toSymbol": "SnapshotStore",
|
|
39
|
+
"confidence": "exact",
|
|
40
|
+
"reason": "The writable store contract moved to client-store."
|
|
41
|
+
},
|
|
42
|
+
"shallowEqual": {
|
|
43
|
+
"toModule": "@deepseek-ai/dsh-client-store",
|
|
44
|
+
"toSymbol": "shallowEqual",
|
|
45
|
+
"confidence": "exact",
|
|
46
|
+
"reason": "The store equality helper moved to client-store."
|
|
47
|
+
},
|
|
48
|
+
"SessionId": {
|
|
49
|
+
"toModule": "@deepseek-ai/dsh-session/types",
|
|
50
|
+
"toSymbol": "SessionId",
|
|
51
|
+
"confidence": "exact",
|
|
52
|
+
"reason": "Session identity is owned by the Session domain."
|
|
53
|
+
},
|
|
54
|
+
"ISessions": {
|
|
55
|
+
"toModule": "@deepseek-ai/dsh-api-session-controller/client",
|
|
56
|
+
"toSymbol": "ISessions",
|
|
57
|
+
"confidence": "semantic",
|
|
58
|
+
"reason": "Session ownership moved to the Session Controller and its snapshots changed."
|
|
59
|
+
},
|
|
60
|
+
"Session": {
|
|
61
|
+
"toModule": "@deepseek-ai/dsh-api-session-controller/client",
|
|
62
|
+
"toSymbol": "Session",
|
|
63
|
+
"confidence": "semantic",
|
|
64
|
+
"reason": "The Client Session object and lifecycle moved to the Session Controller."
|
|
65
|
+
},
|
|
66
|
+
"SessionBinding": {
|
|
67
|
+
"toModule": "@deepseek-ai/dsh-api-session-controller/client",
|
|
68
|
+
"toSymbol": "SessionBinding",
|
|
69
|
+
"confidence": "semantic",
|
|
70
|
+
"reason": "Session bindings are now Controller-owned lifetimes."
|
|
71
|
+
},
|
|
72
|
+
"SessionListState": {
|
|
73
|
+
"toModule": "@deepseek-ai/dsh-api-session-controller/client",
|
|
74
|
+
"toSymbol": "SessionListState",
|
|
75
|
+
"confidence": "semantic",
|
|
76
|
+
"reason": "The list state moved and no longer owns Conversation or pending-interaction facts."
|
|
77
|
+
},
|
|
78
|
+
"SessionSummary": {
|
|
79
|
+
"toModule": "@deepseek-ai/dsh-api-session-controller/client",
|
|
80
|
+
"toSymbol": "SessionSummary",
|
|
81
|
+
"confidence": "semantic",
|
|
82
|
+
"reason": "The Session summary is now a Controller-owned control snapshot."
|
|
83
|
+
},
|
|
84
|
+
"UseProjection": {
|
|
85
|
+
"toModule": "@deepseek-ai/dsh-api-session-controller/client",
|
|
86
|
+
"toSymbol": "UseProjection",
|
|
87
|
+
"confidence": "semantic",
|
|
88
|
+
"reason": "Projection sources are now exposed by Session Controller bindings and adapted by ui-session."
|
|
89
|
+
},
|
|
90
|
+
"IWorkspaces": {
|
|
91
|
+
"toModule": "@deepseek-ai/dsh-api-workspace-controller/client",
|
|
92
|
+
"toSymbol": "IWorkspaces",
|
|
93
|
+
"confidence": "semantic",
|
|
94
|
+
"reason": "Workspace ownership moved to the Workspace Controller and navigation policy moved to ui-workspace."
|
|
95
|
+
},
|
|
96
|
+
"WorkspaceId": {
|
|
97
|
+
"toModule": "@deepseek-ai/dsh-api-workspace-controller/client",
|
|
98
|
+
"toSymbol": "WorkspaceId",
|
|
99
|
+
"confidence": "semantic",
|
|
100
|
+
"reason": "Workspace identity is re-exported by the Workspace Controller."
|
|
101
|
+
},
|
|
102
|
+
"WorkspaceView": {
|
|
103
|
+
"toModule": "@deepseek-ai/dsh-api-workspace-controller/client",
|
|
104
|
+
"toSymbol": "WorkspaceView",
|
|
105
|
+
"confidence": "semantic",
|
|
106
|
+
"reason": "Workspace snapshots are Controller-owned and their shape changed."
|
|
107
|
+
},
|
|
108
|
+
"ConversationNode": {
|
|
109
|
+
"toModule": "@deepseek-ai/dsh-client-ui-conversation/client",
|
|
110
|
+
"toSymbol": "ConversationNode",
|
|
111
|
+
"confidence": "semantic",
|
|
112
|
+
"reason": "Conversation assembly moved out of Session snapshots into ui-conversation."
|
|
113
|
+
},
|
|
114
|
+
"ConversationSnapshot": {
|
|
115
|
+
"toModule": "@deepseek-ai/dsh-client-ui-conversation/client",
|
|
116
|
+
"toSymbol": "ConversationSnapshot",
|
|
117
|
+
"confidence": "semantic",
|
|
118
|
+
"reason": "Conversation is now an independent target-neutral source."
|
|
119
|
+
},
|
|
120
|
+
"PendingInteraction": {
|
|
121
|
+
"toModule": "@deepseek-ai/dsh-client-ui-session/client",
|
|
122
|
+
"toSymbol": "SessionPendingInteraction",
|
|
123
|
+
"confidence": "semantic",
|
|
124
|
+
"reason": "Approval and Question now publish domain-owned pending interactions through ui-session."
|
|
125
|
+
},
|
|
126
|
+
"PendingWait": {
|
|
127
|
+
"toModule": "@deepseek-ai/dsh-client-ui-session/client",
|
|
128
|
+
"toSymbol": "SessionPendingInteraction",
|
|
129
|
+
"confidence": "semantic",
|
|
130
|
+
"reason": "The Runtime PendingWait aggregate was removed; pending domains own their payloads."
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
}
|
package/package.json
CHANGED
|
@@ -14,7 +14,7 @@ The migration knowledge covers the DSH 0.1.1 to 0.1.2 transition, derived and ve
|
|
|
14
14
|
This block is the single source of truth for the exact refs. Every command below and every reference file defers to it; the references avoid repeating the literals on purpose. When the catalog advances, update this block, the `migrate analyze` example, and the shipped catalog together.
|
|
15
15
|
|
|
16
16
|
- source ref: `dsh-v0.1.1-rc.2`
|
|
17
|
-
- target ref: `dsh-v0.1.2-
|
|
17
|
+
- target ref: `dsh-v0.1.2-rc.1`
|
|
18
18
|
|
|
19
19
|
Standard commands target this pair and need no `--target-version`. If the developer explicitly targets a newer 0.1.2 build before the catalog is updated, inspect that additional interval first (see [source-investigation.md](references/source-investigation.md)), then pass its exact version to every migration phase as `--target-version <actual-0.1.2-version>`. That changes dependency pins and runtime expectations only; the catalog's API claims still end at the declared pair.
|
|
20
20
|
|
|
@@ -56,7 +56,7 @@ Run from any directory:
|
|
|
56
56
|
```sh
|
|
57
57
|
dsh-doctor migrate analyze <plugin-root> \
|
|
58
58
|
--from dsh-v0.1.1-rc.2 \
|
|
59
|
-
--to dsh-v0.1.2-
|
|
59
|
+
--to dsh-v0.1.2-rc.1 \
|
|
60
60
|
--json
|
|
61
61
|
```
|
|
62
62
|
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
"expectations": [
|
|
10
10
|
"Records the compatibility intent as 0.1.2-only, treating the developer's own statement in the prompt as the explicit decision instead of re-asking or blocking",
|
|
11
11
|
"Maps the removed dsh-client-runtime symbols to their real 0.1.2 owners (createSnapshotStore/defineStore/shallowEqual/SnapshotStore to @deepseek-ai/dsh-client-store, ClientContext to @deepseek-ai/cordis Context) and never proposes an aggregate replacement package for dsh-client-runtime",
|
|
12
|
-
"Uses or constructs the dsh-doctor CLI flow (migrate analyze, then preview/apply via a plan file) with the catalog refs dsh-v0.1.1-rc.2 and dsh-v0.1.2-
|
|
12
|
+
"Uses or constructs the dsh-doctor CLI flow (migrate analyze, then preview/apply via a plan file) with the catalog refs dsh-v0.1.1-rc.2 and dsh-v0.1.2-rc.1, or clearly reports why the CLI could not run and proceeds from catalog knowledge with that limitation stated",
|
|
13
13
|
"Keeps the migration plan file outside the plugin root",
|
|
14
14
|
"Does not commit, tag, publish, or declare the plugin release-ready; reports the highest achieved gate and remaining verification steps"
|
|
15
15
|
]
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
{"query": "我们的插件 peerDependencies 里写着 ~0.1.1,现在要支持 0.1.2,需要改哪些依赖范围?插件在 D:\\work\\dsh-plugin-kanban", "should_trigger": true},
|
|
9
9
|
{"query": "The migration analysis says MIG_SEMANTIC_API_CHANGE for every session import in my plugin. What does that mean and how do I finish the 0.1.2 migration properly?", "should_trigger": true},
|
|
10
10
|
{"query": "help me assess whether my dsh plugin is compatible with harness 0.1.2 or whether the session controller changes break my list view", "should_trigger": true},
|
|
11
|
-
{"query": "I checked out the harness at tag dsh-v0.1.2-
|
|
11
|
+
{"query": "I checked out the harness at tag dsh-v0.1.2-rc.1 and my plugin's typecheck now fails on dsh-client-runtime types. Migrate the plugin source to 0.1.2.", "should_trigger": true},
|
|
12
12
|
{"query": "My plugin already targets DSH 0.1.2 and worked fine yesterday, but today activation fails with 'service not found' after I updated my graphics driver. Debug it.", "should_trigger": false},
|
|
13
13
|
{"query": "How do I write my first DSH plugin? Walk me through the plugin manifest and a hello-world client entry for 0.1.2.", "should_trigger": false},
|
|
14
14
|
{"query": "dsh-doctor diagnose says my web profile has a corrupted cordis.patch.yml - how do I use dsh-doctor recover to fix my installation?", "should_trigger": false},
|
|
@@ -23,6 +23,12 @@ Session snapshots no longer own Conversation views or all pending-interaction fa
|
|
|
23
23
|
|
|
24
24
|
`@deepseek-ai/dsh-settings` remains, but its `settingsNamespace` factory export was removed in 0.1.2-alpha.2. This is a semantic Service migration, not an import move: inject the `settings` Service and register the plugin namespace through `ctx.settings.register(name, schema)`. Keep `SettingsConflictError` or other exports that still exist, and verify every namespace read path against the provider API (for example `describe`) instead of assuming the former factory object's methods still exist.
|
|
25
25
|
|
|
26
|
+
## Packages removed after alpha.3
|
|
27
|
+
|
|
28
|
+
`@deepseek-ai/dsh-tool-subagent-report` was removed: child reporting and parent follow-up were unified into one Steer messaging operation. The runtime surface is `SubagentRuntime.sendMessage` over one adjacent parent/child edge, and the model-facing adapters live in `@deepseek-ai/dsh-tool-subagent-control`. A plugin that bundled or extended the report tool needs a semantic rewrite against that operation; there is no drop-in replacement package.
|
|
29
|
+
|
|
30
|
+
`@deepseek-ai/dsh-code-runtime-python` was renamed to `@deepseek-ai/dsh-experimental-code-runtime-python` when the package moved to the experimental tier. Update module specifiers and dependency names together, then confirm with the developer that depending on an experimental-tier package is acceptable for the plugin's support posture; do not treat the rename as a silently compatible change.
|
|
31
|
+
|
|
26
32
|
## Client graph
|
|
27
33
|
|
|
28
34
|
- `dsh.client.inject` declares package dependency edges; Cordis service injection still controls activation.
|
package/src/cli.mjs
CHANGED
|
@@ -43,7 +43,7 @@ Options:
|
|
|
43
43
|
--fix, --repair legacy confirmed repairs (never removes a plugin)
|
|
44
44
|
--yes confirm an explicit write or command
|
|
45
45
|
--from <ref> source DSH ref (default: dsh-v0.1.1-rc.2)
|
|
46
|
-
--to <ref> target DSH ref (default: dsh-v0.1.2-
|
|
46
|
+
--to <ref> target DSH ref (default: dsh-v0.1.2-rc.1)
|
|
47
47
|
--target-version <ver> actual DSH 0.1.2 version for dependency/runtime checks
|
|
48
48
|
--safe restrict migrate apply to catalog-confirmed exact rewrites
|
|
49
49
|
--plan-file <path> persist or consume the reviewed migrate apply plan
|
|
@@ -86,7 +86,7 @@ const HELP_ZH = `用法:
|
|
|
86
86
|
--fix, --repair 旧式确认修复(绝不移除插件)
|
|
87
87
|
--yes 确认一个明确的写入或命令动作
|
|
88
88
|
--from <ref> 源 DSH ref(默认:dsh-v0.1.1-rc.2)
|
|
89
|
-
--to <ref> 目标 DSH ref(默认:dsh-v0.1.2-
|
|
89
|
+
--to <ref> 目标 DSH ref(默认:dsh-v0.1.2-rc.1)
|
|
90
90
|
--target-version <版本> 依赖与 runtime 验证使用的实际 DSH 0.1.2 版本
|
|
91
91
|
--safe migrate apply 仅执行 catalog 确认的精确改写
|
|
92
92
|
--plan-file <路径> 保存或读取已审阅的 migrate apply 计划
|
package/src/migrate.mjs
CHANGED
|
@@ -391,7 +391,7 @@ function analysisInputs(root) {
|
|
|
391
391
|
export function analyzeMigration(pluginRoot = process.cwd(), options = {}) {
|
|
392
392
|
const root = resolve(pluginRoot)
|
|
393
393
|
if (!statSync(root).isDirectory()) throw new Error(`plugin root is not a directory: ${root}`)
|
|
394
|
-
const catalog = loadMigration(options.from ?? 'dsh-v0.1.1-rc.2', options.to ?? 'dsh-v0.1.2-
|
|
394
|
+
const catalog = loadMigration(options.from ?? 'dsh-v0.1.1-rc.2', options.to ?? 'dsh-v0.1.2-rc.1')
|
|
395
395
|
const actualTarget = actualTargetVersion(catalog, options.targetVersion)
|
|
396
396
|
const harness = verifyHarnessCheckout(catalog, options.harnessRoot)
|
|
397
397
|
const manifest = readManifest(root)
|