@dsh-workbench/core 0.3.10 → 0.3.11

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.
Files changed (82) hide show
  1. package/README.md +19 -7
  2. package/bin/dsh-workbench +2 -2
  3. package/client.js +1648 -973
  4. package/cordis.patch.yml +60 -35
  5. package/dist/client/client.body.js +1648 -973
  6. package/dist/client/index.js +1333 -658
  7. package/dist/host/index.js +2896 -2334
  8. package/dist/types/app/client.d.ts +2 -1
  9. package/dist/types/app/layouts/env-gate/boot-gate.d.ts +1 -1
  10. package/dist/types/app/layouts/market/use-module-versions.d.ts +13 -2
  11. package/dist/types/app/layouts/rightbar/MarketView.d.ts +6 -3
  12. package/dist/types/app/layouts/rightbar/market-act.d.ts +6 -3
  13. package/dist/types/app/layouts/rightbar/market-settle-hold.d.ts +2 -0
  14. package/dist/types/app/layouts/rightbar/market-settle.d.ts +20 -0
  15. package/dist/types/app/layouts/rightbar/market-update-verdict.d.ts +41 -0
  16. package/dist/types/app/layouts/rightbar/market-view-text.d.ts +4 -1
  17. package/dist/types/app/layouts/rightbar/store.d.ts +14 -0
  18. package/dist/types/app/layouts/sidebar/LongTaskDot.d.ts +12 -0
  19. package/dist/types/app/layouts/sidebar/LongTaskHover.d.ts +12 -0
  20. package/dist/types/app/layouts/sidebar/edition-boot.d.ts +24 -0
  21. package/dist/types/app/layouts/sidebar/edition.d.ts +22 -0
  22. package/dist/types/app/layouts/workbench-settings/ConfigSyncItem.d.ts +5 -0
  23. package/dist/types/app/layouts/workbench-settings/SettingsItem.d.ts +17 -0
  24. package/dist/types/app/layouts/workbench-settings/SidebarEditionItem.d.ts +11 -0
  25. package/dist/types/app/layouts/workbench-settings/WorkbenchSettingsSection.d.ts +11 -0
  26. package/dist/types/modules/panels/model/approval.d.ts +12 -4
  27. package/dist/types/modules/panels/model/diy-browser-tools.d.ts +1 -1
  28. package/dist/types/modules/panels/model/diy-context.d.ts +31 -14
  29. package/dist/types/modules/panels/model/diy-page.d.ts +3 -2
  30. package/dist/types/modules/panels/model/diy-record.d.ts +3 -3
  31. package/dist/types/modules/panels/model/diy-report.d.ts +6 -7
  32. package/dist/types/modules/panels/model/market-dependency-update.d.ts +21 -0
  33. package/dist/types/modules/panels/model/market-dispatch.d.ts +1 -0
  34. package/dist/types/modules/panels/model/market-types.d.ts +1 -0
  35. package/dist/types/modules/panels/model/market-update-bundle.d.ts +25 -0
  36. package/dist/types/modules/panels/model/market-verify.d.ts +31 -0
  37. package/dist/types/modules/panels/unit.d.ts +3 -4
  38. package/dist/types/shared/api/bundle-install.d.ts +13 -0
  39. package/dist/types/shared/api/host/approval-gate.d.ts +39 -0
  40. package/dist/types/shared/api/host/bundle-routes.d.ts +2 -1
  41. package/dist/types/shared/api/host/diy-artifacts.d.ts +14 -0
  42. package/dist/types/shared/api/host/diy-modules.d.ts +41 -0
  43. package/dist/types/shared/api/host/host-routes.d.ts +13 -0
  44. package/dist/types/shared/api/host/permission-mode.d.ts +9 -0
  45. package/dist/types/shared/api/host/runtime-seed.d.ts +2 -0
  46. package/dist/types/shared/api/host/self-update.d.ts +9 -2
  47. package/dist/types/shared/api/host/sidebar-edition.d.ts +46 -0
  48. package/dist/types/shared/api/host/workspace-root.d.ts +13 -0
  49. package/dist/types/shared/api/sidebar-edition.d.ts +14 -0
  50. package/dist/types/shared/api/unit-board.d.ts +20 -0
  51. package/dist/types/shared/api/write-outcome.d.ts +15 -0
  52. package/dist/types/shared/components/IconModules.d.ts +8 -0
  53. package/dist/types/shared/components/blocker-action.d.ts +16 -0
  54. package/dist/types/shared/hooks/sidebar-edition.d.ts +7 -0
  55. package/dist/types/shared/hooks/use-capabilities.d.ts +5 -0
  56. package/dist/types/shared/hooks/use-capability-gate.d.ts +1 -2
  57. package/dist/types/shared/hooks/use-host-write.d.ts +1 -1
  58. package/dist/types/shared/hooks/use-unit-board.d.ts +1 -1
  59. package/docs/HANDOFF.md +3 -3
  60. package/docs/OPERATIONS.md +16 -5
  61. package/package.json +3 -3
  62. package/preset/diy.patch.yml +2 -2
  63. package/profile/isolation.patch.yml +11 -0
  64. package/skills/workbench-module-diy/BUILD.md +62 -131
  65. package/skills/workbench-module-diy/COPY.md +89 -0
  66. package/skills/workbench-module-diy/DATASOURCE.md +84 -112
  67. package/skills/workbench-module-diy/DESIGN.md +75 -109
  68. package/skills/workbench-module-diy/FAMILY.md +70 -54
  69. package/skills/workbench-module-diy/KIT.md +77 -133
  70. package/skills/workbench-module-diy/LINKAGE.md +66 -105
  71. package/skills/workbench-module-diy/PANEL.md +79 -171
  72. package/skills/workbench-module-diy/REVIEW.md +67 -81
  73. package/skills/workbench-module-diy/SKILL.md +57 -96
  74. package/skills/workbench-module-diy/STEPS.md +66 -69
  75. package/skills/workbench-module-diy/TOOLING.md +34 -51
  76. package/skills/workbench-module-diy/TOOLS.md +110 -103
  77. package/skills/workbench-module-diy/WIRING.md +51 -83
  78. package/skills/workbench-module-diy/WRITES.md +89 -142
  79. package/dist/types/app/layouts/config-sync/ConfigSyncSection.d.ts +0 -5
  80. package/dist/types/shared/api/host/diy-workshop.d.ts +0 -23
  81. package/dist/types/shared/api/host/workshop-root.d.ts +0 -16
  82. /package/dist/types/shared/{api/host/diy-workshop.test.d.ts → components/blocker-action.test.d.ts} +0 -0
package/README.md CHANGED
@@ -1,7 +1,9 @@
1
1
  # dsh-workbench
2
2
 
3
3
  基于 [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness) 的 **Agent 工作台**:
4
- 一个 dsh 插件包 —— 换掉 dsh 的左栏,中列保留 dsh 的对话,右侧加一列自研的数据面板。
4
+ 一个 dsh 插件包 —— 默认沿用 dsh 官方的左栏,中列保留 dsh 的对话,右侧加一列自研的数据面板。
5
+ 想把左栏换成工作台自己那套(项目下拉 / 我们的排序 / 跑马灯 / DIY 新会话),在
6
+ 「设置 → 工作台设置 → 会话列表」切,**切完自动刷新页面生效**(不用重启,会话不断)。
5
7
  **dsh 本体一行不改**,两个实例可以同时开着。
6
8
 
7
9
  ```
@@ -47,6 +49,14 @@ npx @dsh-workbench/core # ② 起工作台,默认 :3081
47
49
  - 外壳会**自己把缺的那几件补齐**(建隔离 opencli 的入口、把 `dsh-wb-module` 挂上 PATH、
48
50
  后台把 DIY 工坊骨架建起来)—— 不需要跑 `setup`、也不需要启动器。后台脚本的输出在
49
51
  `~/.dsh/workbench/seed.log`(DIY 工坊的依赖是几百 MB,第一次启动在后台下)。
52
+ - **可写根不随包改**(2026-10-22 起):启用**不会**再动 `sandbox-policy` —— 在线改那一行会把
53
+ dsh 的 session-controller 撞成 failed(症状:新建会话报 `gateway/service-unavailable`,
54
+ **退出重开**即恢复)。要用市场装模块这类走执行缝的命令时,把
55
+ [`profile/sandbox.patch.yml`](profile/sandbox.patch.yml) 那一行写进这个 profile 的
56
+ `cordis.patch.yml`,再退出启动一次;宿主启动时若发现可写根盖不住 `~/.dsh/workbench` 会打一条 warn。
57
+ - **DIY 模式在任意工作区都能开**:开了它,工具就在**这条会话的工作区**里造 / 装 / 上板
58
+ (模块 = 那个工作区里声明了 `dsh.workbench` 的包)。`setup` 建的那个工坊只是「造一个模块」
59
+ 那个入口的落脚点(脚手架),不是 DIY 的落点 —— 详见下面「常见问题」。
50
60
  - **工坊工具链跟着外壳走**:外壳升级后不用管工坊 —— 每次启动都会把工坊里那三个
51
61
  `@dsh-workbench/*` 与**正在跑的那份外壳**比一次,不同代就在后台增量同步到同代(所以升级后
52
62
  **下一次启动**就对上了)。离线时停在旧一代,但 `workbench_diy_status` 会直说
@@ -79,7 +89,8 @@ npx @dsh-workbench/core # ② 起工作台,默认 :3081
79
89
  | 重建 profile | `mv ~/.dsh/profiles/workbench ~/.dsh/profiles/workbench.bak`,再跑一次 `setup` |
80
90
  | 彻底不用了 | 删 `~/.dsh/profiles/workbench` 与 `~/.dsh/workbench` 两个目录(都不影响 `dsh web`) |
81
91
  | 改设置 | 在 `:3081` 的 Settings 里改(模型供应商 / 搜索源 / MCP 也是这里) |
82
- | 从 `dsh web` 搬设置过来 | 设置 → 「配置同步」→ 选来源 → 勾行 → 同步(即生效) |
92
+ | 换左栏 | 「设置 → 工作台设置 → 会话列表」:默认**官方**;切完**自动刷新页面**生效(从旧版升上来第一次要重启一次) |
93
+ | 从 `dsh web` 搬设置过来 | 设置 → 「工作台设置」→「配置同步」→ 选来源 → 勾行 → 同步(即生效) |
83
94
 
84
95
  ## 和 `dsh web` 的关系
85
96
 
@@ -90,11 +101,11 @@ npx @dsh-workbench/core # ② 起工作台,默认 :3081
90
101
  API 凭据(`~/.dsh/.credentials.yaml`,一机一把 key)。
91
102
  - **设置是工作台自己那份**:模型供应商 / 搜索源 / MCP 都在 `:3081` 的 Settings 里配,
92
103
  落在 `profiles/workbench/cordis.patch.yml` —— 那是它唯一的一份设置文档,每一行都改得动。
93
- 想用 `dsh web` 那边已经配好的行:`:3081` → `Meta+,` → 「配置同步」→ 选来源 → 勾行 → 同步 →
104
+ 想用 `dsh web` 那边已经配好的行:`:3081` → `Meta+,` → 「工作台设置」→「配置同步」→ 选来源 → 勾行 → 同步 →
94
105
  **即生效**(只搬显式配过的行;同 id 内容不同默认不覆盖)。web 后来改的不会自动过来,
95
106
  再打开这一页拉一次即可。见 [ADR-0044](../../docs/adr/0044-config-sync-replaces-the-web-patch-overlay.md)。
96
107
  - ⚠️ **别在 Settings → 插件里把 `@dsh-workbench/core` 关掉**:关掉 = 它那份 bundle patch 整份不再应用
97
- (包括里面的"禁用出厂左栏"),界面会**退化成原版 dsh web**(左栏回来、右侧面板消失)。
108
+ (插入工作台插件那几行),界面会**退化成原版 dsh web**(左栏回来、右侧面板消失)。
98
109
  **数据一个都不丢**;把开关拨回来就恢复 —— 进不去设置页就按 `Meta+,`。进程已经退过的话,
99
110
  启动器读到"bundle 没被选中"会直接拒绝启动并给一条命令:`./bin/dsh-workbench setup`(幂等,
100
111
  把这一项补回 `dsh.profile.bundles`)。别当成故障去重建 profile。
@@ -109,9 +120,10 @@ npx @dsh-workbench/core # ② 起工作台,默认 :3081
109
120
  | 打开面板 / 按刷新要等 5–8 秒 | 正常:opencli 每次调用有**固定约 5 秒**开销(起浏览器会话)。**没有缓存**,数据一律实时 |
110
121
  | 体检那屏说「检测浏览器通道 · 没连上」,可面板照样能用 | 本机全局 opencli 与隔离运行时版本不一致,daemon 被顶成对方那版;下一条浏览器命令会自动把它重启回来,体检复检后改回「已连接」 |
111
122
  | 一切正常,但左栏是出厂样子、右边没有面板 | 工作台插件在 Settings 里被关了(见上一条 ⚠️)。**重启之后**启动器不会再让你拿到这种实例:它读到 `dsh.profile.bundles` 里没有它就直接拒绝启动,并打印 `./bin/dsh-workbench setup` |
112
- | 模型列表里只有出厂的几个、没有自己配的供应商 | 新装的 profile 不带设置(ADR-0044):设置 → 「配置同步」→ 选来源 → 勾 `llm-` 那几行 → 同步(即生效)|
113
- | 「配置同步」里某一行说 `@x 还没装` | 那一行点名的包不在这个 profile 的 `node_modules` 里:`dsh plugin --profile workbench add @x`(或在模块市场装),(装完 dsh 会自行重组;它报 `restartReason` 时才重启)|
114
- | 左栏没有「工作台DIY」那一项、模式下拉里也没有「工作台 DIY」 | 多半是 dsh 太旧(DIY 模式是从 **dsh 0.2.1-rc.2** 的 preset 清单派生的;旧一代那个 preset 挂不起来,而 dsh 的模式选择器**只列挂得起来的** ⇒ 整个不见且不报错)。**启动体检会把它摆出来并停在那一页**(「检查 DIY 模式 · 挂不起来」+ 缺哪几行 + 升级命令 + 一颗「先进入工作台」);启动器更早一步:dsh 太旧就直接拒绝启动/安装并打印 `npm i -g @deepseek-ai/dsh@latest`,装完**重启工作台**即可。想自己核对是哪一行挂不起来:`dsh` 的 设置 → 「Agent presets」里那一行会带红标与原因 |
123
+ | 模型列表里只有出厂的几个、没有自己配的供应商 | 新装的 profile 不带设置(ADR-0044):设置 → 「工作台设置」→「配置同步」→ 选来源 → 勾 `llm-` 那几行 → 同步(即生效)|
124
+ | 「工作台设置」→「配置同步」里某一行说 `@x 还没装` | 那一行点名的包不在这个 profile 的 `node_modules` 里:`dsh plugin --profile workbench add @x`(或在模块市场装),(装完 dsh 会自行重组;它报 `restartReason` 时才重启)|
125
+ | 在自己项目里开了 DIY 模式,`workbench_diy_list` 却说「没有找到 DIY 模块」/ 看不到工坊里造过的那些 | **看/调面板不需要模块**(空项目、单包、monorepo 都一样):`workbench_diy_panel` / `_status` 直接看装过的。只有「造」才需要源码:模块跟**这条会话的工作区**走,不跟工坊走(ADR-0077)。① 那个工作区里要有一个在 `package.json` 里声明了 `dsh.workbench` 的包(`packages/*` 由它自己的 `pnpm-workspace.yaml` 或 `workspaces` 说);② 从工坊带过去的,把模块目录挪/拷到那个仓库里;③ 旧 `shots/` 下的截图与录制不迁移(新的落在 `~/.dsh/workbench/artifacts/<工作区>/`) |
126
+ | 左栏没有「工作台DIY」那一项、模式下拉里也没有「工作台 DIY 模式」 | 多半是 dsh 太旧(DIY 模式是从 **dsh 0.2.1-rc.2** 的 preset 清单派生的;旧一代那个 preset 挂不起来,而 dsh 的模式选择器**只列挂得起来的** ⇒ 整个不见且不报错)。**启动体检会把它摆出来并停在那一页**(「检查 DIY 模式 · 挂不起来」+ 缺哪几行 + 升级命令 + 一颗「先进入工作台」);启动器更早一步:dsh 太旧就直接拒绝启动/安装并打印 `npm i -g @deepseek-ai/dsh@latest`,装完**重启工作台**即可。想自己核对是哪一行挂不起来:`dsh` 的 设置 → 「Agent presets」里那一行会带红标与原因 |
115
127
 
116
128
  排障全表在仓库的 [`docs/OPERATIONS.md`](https://github.com/code-farmer-i/dsh-workbench/blob/main/packages/workbench/docs/OPERATIONS.md);
117
129
  把工作台装到别人机器上的前置清单见 [`docs/HANDOFF.md`](https://github.com/code-farmer-i/dsh-workbench/blob/main/packages/workbench/docs/HANDOFF.md)。
package/bin/dsh-workbench CHANGED
@@ -61,7 +61,7 @@ fi
61
61
  # `standard.patch.yml` 派生的**(scripts/gen-diy-preset.mjs)—— 所以它跟的是**派生那一刻的
62
62
  # dsh**。dsh 旧到那份清单里有几个包它根本没有时(实测 0.2.0-rc.2 缺
63
63
  # `@deepseek-ai/dsh-tool-schedule`),preset 挂不起来;dsh 的模式选择器**只列挂得起来的**
64
- # (healthy presets only),于是「工作台 DIY」在用户面前整个消失,界面与终端都不吭声。
64
+ # (healthy presets only),于是「工作台 DIY 模式」在用户面前整个消失,界面与终端都不吭声。
65
65
  # 同一代 dsh 0.2.0 的 `uiWorkspace.startSession()` 也**不收** `agentPreset`(0.2.1-alpha.3 才收),
66
66
  # 所以就算 preset 挂上了,「造一个模块」也落不到 DIY 模式 —— 这一档没有"少一把工具"的降级空间。
67
67
  #
@@ -103,7 +103,7 @@ process.exit(0);
103
103
  ' || DSH_FLOOR_GUARD=$?
104
104
  if [ "${DSH_FLOOR_GUARD:-0}" -eq 1 ]; then
105
105
  echo "dsh-workbench: 这台机器上的 dsh 是 ${DSH_VERSION},这份外壳要 ${DSH_FLOOR}。" >&2
106
- echo " 低于它时 DIY 模式(会话里的「工作台 DIY」)挂不起来,而 dsh 的模式选择器只列挂得起来的" >&2
106
+ echo " 低于它时 DIY 模式(会话里的「工作台 DIY 模式」)挂不起来,而 dsh 的模式选择器只列挂得起来的" >&2
107
107
  echo " —— 它会**整个不出现**,不报错。所以这里直接拒绝启动。" >&2
108
108
  echo " 升级 dsh(再重启一次工作台): npm i -g @deepseek-ai/dsh@latest" >&2
109
109
  exit 1