@dsh-workbench/core 1.1.8 → 1.1.10

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 (127) hide show
  1. package/README.md +3 -3
  2. package/bin/dsh-workbench +11 -45
  3. package/client.js +549 -459
  4. package/dist/client/client.body.js +549 -459
  5. package/dist/client/index.js +422 -332
  6. package/dist/host/index.js +4661 -3954
  7. package/dist/types/app/layouts/approval-detail.d.ts +5 -5
  8. package/dist/types/app/layouts/env-gate/gate-text.d.ts +6 -4
  9. package/dist/types/app/layouts/market/discover-view.d.ts +1 -0
  10. package/dist/types/app/layouts/rightbar/MarketView.d.ts +25 -3
  11. package/dist/types/app/layouts/rightbar/market-rows.d.ts +0 -1
  12. package/dist/types/app/layouts/rightbar/market-view-text.d.ts +1 -2
  13. package/dist/types/app/layouts/sidebar/ProjectSwitcher.d.ts +1 -1
  14. package/dist/types/app/layouts/sidebar/workspace-groups.d.ts +4 -1
  15. package/dist/types/kernel/contract/index.d.ts +1 -0
  16. package/dist/types/modules/panels/model/diy-browser-act.d.ts +2 -2
  17. package/dist/types/modules/panels/model/diy-browser.d.ts +4 -2
  18. package/dist/types/modules/panels/model/diy-page.d.ts +2 -1
  19. package/dist/types/modules/panels/model/diy-record.d.ts +2 -1
  20. package/dist/types/modules/panels/model/diy-tools.d.ts +1 -0
  21. package/dist/types/modules/panels/model/market-dependency.d.ts +1 -1
  22. package/dist/types/modules/panels/model/market-discover.d.ts +1 -0
  23. package/dist/types/modules/panels/model/market-env.d.ts +2 -0
  24. package/dist/types/modules/panels/model/market.d.ts +1 -1
  25. package/dist/types/modules/panels/model/plugin-ledger.d.ts +3 -0
  26. package/dist/types/modules/panels/model/plugin-name.d.ts +7 -3
  27. package/dist/types/modules/sessions/index.d.ts +1 -1
  28. package/dist/types/modules/sessions/model/attention.d.ts +1 -0
  29. package/dist/types/shared/api/host/diy-publish-preview.d.ts +4 -4
  30. package/dist/types/shared/api/host/diy-recon-fs.d.ts +1 -1
  31. package/dist/types/shared/api/host/diy-recon.d.ts +12 -5
  32. package/dist/types/shared/api/host/flow/task.d.ts +10 -0
  33. package/dist/types/shared/api/host/flow/tool.d.ts +12 -0
  34. package/dist/types/shared/api/host/git-exec.d.ts +1 -0
  35. package/dist/types/shared/api/host/git-probe.d.ts +6 -6
  36. package/dist/types/shared/api/host/git-process.d.ts +13 -0
  37. package/dist/types/shared/api/host/git-routes.d.ts +5 -2
  38. package/dist/types/shared/api/host/host-routes.d.ts +2 -2
  39. package/dist/types/shared/api/host/market-doc.d.ts +2 -2
  40. package/dist/types/shared/api/host/market-index-fetch.d.ts +2 -2
  41. package/dist/types/shared/api/host/market-source-init.d.ts +2 -2
  42. package/dist/types/shared/api/host/plugin-term.d.ts +2 -0
  43. package/dist/types/shared/api/host/runtime-surface.d.ts +3 -0
  44. package/dist/types/shared/hooks/locale-text.d.ts +3 -0
  45. package/dist/types/shared/hooks/runtime-queries.d.ts +6 -0
  46. package/dist/types/shared/hooks/runtime-terms.d.ts +2 -0
  47. package/dist/types/shared/hooks/use-runtime-capabilities.d.ts +6 -0
  48. package/package.json +6 -3
  49. package/scripts/seed-workshop.sh +1 -1
  50. package/skills/workbench-module-diy/DESIGN.md +3 -1
  51. package/skills/workbench-module-diy/FLOW.md +117 -0
  52. package/skills/workbench-module-diy/PANEL.md +9 -7
  53. package/skills/workbench-module-diy/SKILL.md +7 -1
  54. package/skills/workbench-module-diy/STEPS.md +12 -1
  55. package/skills/workbench-module-diy/TOOLS.md +16 -4
  56. package/skills/workbench-module-diy/WIRING.md +2 -2
  57. package/skills/workbench-module-diy/WRITES.md +2 -2
  58. package/bin/opencli-isolated +0 -62
  59. package/bin/opencli-isolated.mjs +0 -44
  60. package/bin/opencli-node-mode.cjs +0 -1
  61. package/dist/types/app/layouts/rightbar/AskAgentButton.d.ts +0 -6
  62. package/dist/types/app/layouts/rightbar/board-columns.test.d.ts +0 -1
  63. package/dist/types/app/layouts/rightbar/dsh-borrow.test.d.ts +0 -1
  64. package/dist/types/app/layouts/rightbar/dsh-column-source.test.d.ts +0 -1
  65. package/dist/types/app/layouts/rightbar/dsh-surface.test.d.ts +0 -1
  66. package/dist/types/app/layouts/rightbar/presentation.test.d.ts +0 -1
  67. package/dist/types/app/layouts/rightbar/rightbar-width.test.d.ts +0 -1
  68. package/dist/types/app/layouts/rightbar/store.test.d.ts +0 -1
  69. package/dist/types/kernel/contract/contracts.test.d.ts +0 -1
  70. package/dist/types/kernel/contract/index.test.d.ts +0 -1
  71. package/dist/types/modules/panels/model/diy-browser-act.test.d.ts +0 -1
  72. package/dist/types/modules/panels/model/diy-browser-tools-shot.test.d.ts +0 -1
  73. package/dist/types/modules/panels/model/diy-browser-tools.test.d.ts +0 -1
  74. package/dist/types/modules/panels/model/diy-browser.test.d.ts +0 -1
  75. package/dist/types/modules/panels/model/diy-components.test.d.ts +0 -1
  76. package/dist/types/modules/panels/model/diy-context.test.d.ts +0 -1
  77. package/dist/types/modules/panels/model/diy-debug-routes.test.d.ts +0 -1
  78. package/dist/types/modules/panels/model/diy-debug-tools.test.d.ts +0 -1
  79. package/dist/types/modules/panels/model/diy-logs.test.d.ts +0 -1
  80. package/dist/types/modules/panels/model/diy-observers.test.d.ts +0 -1
  81. package/dist/types/modules/panels/model/diy-page.test.d.ts +0 -1
  82. package/dist/types/modules/panels/model/diy-record-bar.test.d.ts +0 -1
  83. package/dist/types/modules/panels/model/diy-record-beat.test.d.ts +0 -1
  84. package/dist/types/modules/panels/model/diy-record-capture.test.d.ts +0 -1
  85. package/dist/types/modules/panels/model/diy-record-close.test.d.ts +0 -1
  86. package/dist/types/modules/panels/model/diy-record-failure.test.d.ts +0 -1
  87. package/dist/types/modules/panels/model/diy-record-hook.test.d.ts +0 -1
  88. package/dist/types/modules/panels/model/diy-record-open.test.d.ts +0 -1
  89. package/dist/types/modules/panels/model/diy-record-routes.test.d.ts +0 -1
  90. package/dist/types/modules/panels/model/diy-record-shot.test.d.ts +0 -1
  91. package/dist/types/modules/panels/model/diy-record-text.test.d.ts +0 -1
  92. package/dist/types/modules/panels/model/diy-record.test.d.ts +0 -1
  93. package/dist/types/modules/panels/model/diy-schema.test.d.ts +0 -1
  94. package/dist/types/modules/panels/model/diy-spec.test.d.ts +0 -1
  95. package/dist/types/modules/panels/model/handoff.test.d.ts +0 -1
  96. package/dist/types/modules/panels/model/long-task-tools.test.d.ts +0 -1
  97. package/dist/types/modules/panels/model/market-install-error.test.d.ts +0 -1
  98. package/dist/types/modules/panels/model/market-installed.test.d.ts +0 -1
  99. package/dist/types/modules/panels/model/market-registry.test.d.ts +0 -1
  100. package/dist/types/modules/panels/model/market-remove.test.d.ts +0 -1
  101. package/dist/types/modules/panels/model/market-restart.test.d.ts +0 -1
  102. package/dist/types/modules/panels/model/market-sources-tool.test.d.ts +0 -1
  103. package/dist/types/modules/panels/model/market-swap-stuck.test.d.ts +0 -1
  104. package/dist/types/modules/panels/model/plugin-name.test.d.ts +0 -1
  105. package/dist/types/modules/panels/model/routes.test.d.ts +0 -1
  106. package/dist/types/modules/sessions/model/attention-long-task.test.d.ts +0 -1
  107. package/dist/types/modules/sessions/model/attention.test.d.ts +0 -1
  108. package/dist/types/modules/sessions/model/scroll-edges.test.d.ts +0 -1
  109. package/dist/types/modules/sessions/model/session-node.test.d.ts +0 -1
  110. package/dist/types/shared/api/config-sync.test.d.ts +0 -1
  111. package/dist/types/shared/api/diy.test.d.ts +0 -1
  112. package/dist/types/shared/api/dsh-plugins.test.d.ts +0 -1
  113. package/dist/types/shared/api/host/bundle-inspect-kind.test.d.ts +0 -1
  114. package/dist/types/shared/api/host/bundle-routes-self.test.d.ts +0 -1
  115. package/dist/types/shared/api/host/bundle-routes.test.d.ts +0 -1
  116. package/dist/types/shared/api/host/diy-facts.test.d.ts +0 -1
  117. package/dist/types/shared/api/host/diy-recon-fs.test.d.ts +0 -1
  118. package/dist/types/shared/api/host/diy-recon.test.d.ts +0 -1
  119. package/dist/types/shared/api/host/diy.test.d.ts +0 -1
  120. package/dist/types/shared/api/host/http.test.d.ts +0 -1
  121. package/dist/types/shared/api/host/png-crop.test.d.ts +0 -1
  122. package/dist/types/shared/api/host/runtime-seed.test.d.ts +0 -1
  123. package/dist/types/shared/api/host/self-update-marker.test.d.ts +0 -1
  124. package/dist/types/shared/api/host/shell.test.d.ts +0 -1
  125. package/dist/types/shared/api/unit-manifests.test.d.ts +0 -1
  126. package/dist/types/shared/components/blocker-action.test.d.ts +0 -1
  127. package/dist/types/shared/hooks/panel-state-report.test.d.ts +0 -1
package/README.md CHANGED
@@ -148,7 +148,7 @@ dsh-workbench migrate --force # 已经迁过一次、想再补并一次
148
148
  **完全不碰**你本机的 `~/.opencli`。装不上时(没网 / 源不通)失败态里有一条能直接照抄到终端
149
149
  的命令 —— 那条得在终端跑,工作台自己发起的命令带文件沙箱。
150
150
  - **浏览器扩展要你装一次**:`~/.dsh/workbench/opencli/` 里没有扩展,opencli 靠浏览器里的
151
- OpenCLI 扩展把登录状态接过来。自检里「浏览器连接」没连上时会给商店链接,装完并启用、
151
+ OpenCLI 扩展把登录状态接过来。自检里「连接浏览器」没连上时会给商店链接,装完并启用、
152
152
  保持浏览器开着,回「准备工作台」那一屏点「重试」。Desktop 里还能点「打开浏览器」。
153
153
  - **要面板有数据,得登录对应平台**:卡片上点「去登录 ↗」,登完切回来按「重试」
154
154
  (刻意不做自动重试 —— 登录什么时候完成我们不知道)。
@@ -163,8 +163,8 @@ dsh-workbench migrate --force # 已经迁过一次、想再补并一次
163
163
  | 左栏是出厂样子、右边没有面板 | 工作台插件在 Settings 里被关了(见上一节 ⚠️)。重启后启动器不会再让你拿到这种实例 |
164
164
  | 面板一直空着 | 多半是没登录平台(见上);或这个工作区的 git `origin` 不指向它要读的平台 |
165
165
  | 打开面板 / 按刷新要等 5–8 秒 | 正常:opencli 每次调用有固定约 5 秒开销(起浏览器会话)。没有缓存,数据一律实时 |
166
- | 自检说「浏览器连接 · 还没连上」/ 面板取不到数据 | 扩展没装或没启用:从 [Chrome 应用商店](https://chromewebstore.google.com/detail/opencli/ildkmabpimmkaediidaifkhjpohdnifk)装 OpenCLI,在扩展页确认启用,保持浏览器开着,回「准备工作台」那一屏点「重试」。多个浏览器账号会要求先选默认的那个:按页面上给的那条命令做 |
167
- | 体检说「浏览器连接 · 还没连上」,可面板照样能用 | 本机全局 opencli 与隔离运行时版本不一致,daemon 被顶成对方那版;下一条浏览器命令会自动把它重启回来,复检后改回「已连接」 |
166
+ | 自检说「连接浏览器 · 还没连上」/ 面板取不到数据 | 扩展没装或没启用:从 [Chrome 应用商店](https://chromewebstore.google.com/detail/opencli/ildkmabpimmkaediidaifkhjpohdnifk)装 OpenCLI,在扩展页确认启用,保持浏览器开着,回「准备工作台」那一屏点「重试」。多个浏览器账号会要求先选默认的那个:按页面上给的那条命令做 |
167
+ | 体检说「连接浏览器 · 还没连上」,可面板照样能用 | 本机全局 opencli 与隔离运行时版本不一致,daemon 被顶成对方那版;下一条浏览器命令会自动把它重启回来,复检后改回「已连接」 |
168
168
  | Desktop 里体检一直「没连上」 | 浏览器没开。「准备工作台」那一屏有「打开浏览器」,点了才开上次承载扩展的那个(没记住就用 Chrome),开完自动复检;点了会切到 Chrome 前台(冷启动抢焦点,静默做不到)。仍连不上多半是扩展没装或被禁用 |
169
169
  | 模型列表里只有出厂的几个、没有自己配的供应商 | 新 profile 不带设置。设置 → 工作台设置 → 配置同步 → 勾 `llm-` 那几行 → 同步 |
170
170
  | 配置同步里某行说 `@x 还没装` | 那一行点名的包不在这个 profile 的 `node_modules` 里:`dsh plugin --profile workbench add @x`(或在模块市场装),装完 dsh 会自行重组,它报 `restartReason` 时才重启 |
package/bin/dsh-workbench CHANGED
@@ -13,7 +13,7 @@
13
13
  #
14
14
  # 与 `dsh web` 并存:不同的 profile、不同的 node_modules、不同的端口、独立的进程。
15
15
  # 会话 / 项目 / 附件跟 `dsh web` 和 Desktop 共用一份(都在 $DSH_HOME 下),
16
- # 只有设置与插件分家;运行时的 opencli、工坊、模块市场仍按 profile 各一份。
16
+ # 只有设置与插件分家;运行时自己的那棵树、工坊、模块市场仍按 profile 各一份。
17
17
  #
18
18
  # ── 这份脚本有两种身份,它自己分得清 ──────────────────────────────────────
19
19
  # · **仓库副本**(这个包落在一个 git 工作树里):开发用。bundle 以 link 方式装本目录,
@@ -114,14 +114,14 @@ fi
114
114
  export WORKBENCH_PROFILE="$PROFILE"
115
115
  export WB_CLONE="${WB_CLONE:-0}"
116
116
  PROFILE_DIR="$DSH_HOME/profiles/$PROFILE"
117
- # 每个 profile 一份自己的**运行时**根(opencli 隔离运行时、工坊、模块市场);
117
+ # 每个 profile 一份自己的**运行时**根(隔离运行时、工坊、模块市场);
118
118
  # 会话 / 项目 / 附件不在这里 —— 它们跟 `dsh web` / Desktop 共用 $DSH_HOME。
119
119
  WORKBENCH_HOME="${DSH_WORKBENCH_HOME:-$DSH_HOME/$PROFILE}"
120
120
  export DSH_WORKBENCH_HOME="$WORKBENCH_HOME"
121
121
 
122
122
  # 本包的真实位置。**不能**直接 `dirname "$0"/..`:npx 是经 `node_modules/.bin/dsh-workbench`
123
123
  # 这条软链调进来的,那样算出来会停在 `node_modules`(实测),于是下面
124
- # `$REPO_DIR/bin/opencli-isolated` 与 `$REPO_DIR/profile/*` 全指着不存在的地方
124
+ # `$REPO_DIR/bin`、`$REPO_DIR/profile/*` 全指着不存在的地方
125
125
  # —— 症状是隔离运行时那条软链变成死链、启动体检一直说"没装好"。
126
126
  # 所以先把软链解析到底,再取它的上一级。
127
127
  SELF="${BASH_SOURCE[0]}"
@@ -218,7 +218,7 @@ pkg_version() {
218
218
  run_setup() {
219
219
  # ⚠️ 用 `bash` 呼,不靠文件的 x 位:pnpm publish(release.mjs 走 `pnpm -r publish`)
220
220
  # 只给 `package.json#bin` 点名的那一个文件 755,其余在 tarball 里一律 644
221
- # (实测 pnpm pack 的产物:bin/dsh-workbench 是 755,bin/opencli-isolated 与
221
+ # (实测 pnpm pack 的产物:bin/dsh-workbench 是 755,随包出去的其它脚本与
222
222
  # scripts/seed-profile.sh 都是 644;npm pack 会保留 x 位,所以这是 pnpm 独有的坑)。
223
223
  # 症状是「本机怎么跑都行、别人机器上 Permission denied」——因为 git 里有 x 位,
224
224
  # 只有装出来的副本会丢。
@@ -271,13 +271,11 @@ run_setup() {
271
271
 
272
272
  (全局装过就用 dsh-workbench;npx 就用 npx @dsh-workbench/core;本仓开发用 ./packages/core/bin/dsh-workbench。)
273
273
 
274
- 首次打开会走启动体检,它会自己把 opencli 的隔离运行时装好。还有一步要你动手:
275
- 在浏览器里装一次 OpenCLI 扩展(Chrome / Edge / Brave / Chromium / Vivaldi 都行):
274
+ 首次打开会走启动体检:它按当前运行时自己把隔离环境装好,缺什么、怎么装都在那一屏上,
275
+ 必要时还会给一条能直接照抄到终端的命令。
276
276
 
277
- https://chromewebstore.google.com/detail/opencli/ildkmabpimmkaediidaifkhjpohdnifk
278
-
279
- 装完确认已启用、浏览器保持开着;启动后如果「浏览器连接」还没连上,回「准备工作台」那一屏点「重试」。
280
- 面板读的是你浏览器里的登录状态;不装也能进工作台,只是要靠登录状态的面板取不到数据。
277
+ 浏览器那边同理 —— 要不要扩展、装哪个、装完怎么确认,都由运行时自己的说明给出;
278
+ 面板读的是你浏览器里的登录状态,没连上也能进工作台,只是靠登录状态取数的面板会空着。
281
279
  EOF
282
280
  }
283
281
 
@@ -409,7 +407,7 @@ PATCH_ARGS=()
409
407
 
410
408
  # ── 声明工作台运行时的**可写根**(执行缝的沙箱只放行 process.cwd())──────────
411
409
  #
412
- # 工作台自己要跑命令:启动体检自动装 opencli、模块市场装/升插件、查源上新版。
410
+ # 工作台自己要跑命令:启动体检自动装运行时、模块市场装/升插件、查源上新版。
413
411
  # 这些命令走 dsh 的执行缝,而那条缝带**文件沙箱**;插件发起的调用**没有会话**,
414
412
  # 回落到部署策略,出厂值是 `workspaceRoot: process.cwd()` —— 安装目标
415
413
  # `$DSH_HOME/workbench/...` 不在启动目录下,被拒写(EPERM),"自动装"死在第一步,
@@ -426,18 +424,6 @@ else
426
424
  echo "dsh-workbench: 提醒 —— 找不到 ${SANDBOX_PATCH},这次不声明可写根(自动装会失败)。" >&2
427
425
  fi
428
426
 
429
- # 把 opencli 指到**隔离运行时**:所有 opencli 调用(探测、取数、装/卸插件)都走它,
430
- # 于是装/卸插件不碰用户本机的 ~/.opencli。
431
- #
432
- # 为什么隔离要用 HOME(而不是 OPENCLI_CONFIG_DIR):opencli 的**插件目录只认 HOME**
433
- # —— 见 bin/opencli-isolated 开头的说明。
434
- #
435
- # 建一个**稳定路径**的软链:别处(包括给用户"复制这条命令"的文案)都能用
436
- # $WORKBENCH_HOME/opencli/bin/opencli 引用它,不必知道本目录在哪 ——
437
- # 而且从那里跑出来同样是隔离的。指向 profile 里那份,别指 npx 缓存(会回收)。
438
- OPENCLI_ROOT="$WORKBENCH_HOME/opencli"
439
- mkdir -p "$OPENCLI_ROOT/bin" "$OPENCLI_ROOT/home"
440
-
441
427
  # DIY 工坊的目录必须**每次启动都在**:`cordis.patch.yml` 的 hmr 行把它列成一个监听根
442
428
  # (工坊里的模块是被 link 进 profile 的仓外目录,Node 解析到的是工坊里的真路径,
443
429
  # 所以不把它列进去,模块重建 dist/host.js 就不热换 —— 而且**不报错**)。
@@ -466,28 +452,8 @@ fi
466
452
  # (上面那次 `entry` 已经跑过它)。为什么收成一处:启动器与宿主自举都跑那个脚本,从前两处
467
453
  # 各写一遍(这里一段 bash + 宿主 TS 的 `linkSkills`),目标虽一致,却是**同一件事两个实现** ——
468
454
  # 哪天只有一边改了源或判据就会互相改指,而软链指到哪 skill 发现都**不报错**。
469
- # 稳定路径不直接软链到随包脚本:同上面那条 —— pnpm publish 之后
470
- # `bin/opencli-isolated` 是 644,软链过去一执行就是 Permission denied
471
- # (症状:启动体检永远说"隔离运行时没装好",而它其实是没权限跑)。
472
- # 所以这里写一个**我们自己拥有**的转发脚本,x 位由 chmod 当场给。
473
- # ⚠️ 先 rm -f:旧版本留下的软链还在时,`>` 会顺着软链把真脚本覆盖掉。
474
- # ⚠️ DSH_HOME 必须**钉在命令里**:执行缝不继承它,而 bin/opencli-isolated 用
475
- # `${DSH_HOME:-$HOME/.dsh}` 推根 —— 不钉的话,DSH_HOME 不是默认值的机器上,
476
- # 隔离运行时会被认成用户真家目录那一份(实测:同一条路上的 seed-workshop.sh
477
- # 就是这样把入口写进了 ~/.dsh,见 ADR-0037 的"执行缝不继承 DSH_HOME")。
478
- rm -f "$OPENCLI_ROOT/bin/opencli"
479
- printf '#!/bin/sh\nexec env DSH_HOME=%q bash %q "$@"\n' "$DSH_HOME" "$DSH_WORKBENCH_ROOT/bin/opencli-isolated" \
480
- >"$OPENCLI_ROOT/bin/opencli"
481
- chmod +x "$OPENCLI_ROOT/bin/opencli"
482
- export DSH_WORKBENCH_OPENCLI="$OPENCLI_ROOT/bin/opencli"
483
-
484
- # 软提醒:隔离运行时没装的话,启动体检会**自己装**(沙箱已放行工作台运行时,
485
- # 见上面那层 SANDBOX_PATCH);这条只是提前说一声,免得盯着全屏 loading 猜。
486
- if [ ! -x "$OPENCLI_ROOT/toolchain/node_modules/.bin/opencli" ]; then
487
- echo "dsh-workbench: opencli 的隔离运行时还没装好 —— 启动体检会自己装," >&2
488
- echo " 装不上时它会给一条能直接照抄到终端的命令。" >&2
489
- fi
490
-
455
+ # 运行时的**稳定入口**不在这里建:它属于适配器(隔离包装随适配器出货),
456
+ # 由宿主自举在每次启动时写到自己的隔离根里 —— 写口只有那一处。
491
457
  # ⚠️ 顺序有讲究:`--patch` 是 **dsh 本体**的选项,必须排在 `--port`(应用参数)**之前** ——
492
458
  # 参数一旦进了应用的透传区(第一个应用自己的选项开始),后面的都直接交给应用,
493
459
  # `--patch` 会被应用当成未知选项(实测:`--port` 在前时报 `unknown option '--patch'`)。