@dsh-workbench/core 0.1.14 → 0.1.16

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 (48) hide show
  1. package/README.md +19 -0
  2. package/bin/dsh-workbench +21 -1
  3. package/client.js +163 -89
  4. package/cordis.patch.yml +40 -0
  5. package/dist/client/client.body.js +163 -89
  6. package/dist/client/index.js +163 -89
  7. package/dist/host/index.js +1474 -93
  8. package/dist/types/app/__tests__/workbench-styles.test.d.ts +1 -0
  9. package/dist/types/app/client.d.ts +39 -15
  10. package/dist/types/app/layouts/rightbar/board-columns.d.ts +8 -0
  11. package/dist/types/app/layouts/rightbar/board-columns.test.d.ts +1 -0
  12. package/dist/types/app/layouts/rightbar/market-rows.d.ts +2 -0
  13. package/dist/types/app/layouts/workbench-styles.d.ts +2 -0
  14. package/dist/types/modules/panels/__tests__/diy-harness.d.ts +51 -0
  15. package/dist/types/modules/panels/__tests__/diy-tools-status.test.d.ts +1 -0
  16. package/dist/types/modules/panels/__tests__/diy-tools.test.d.ts +1 -0
  17. package/dist/types/modules/panels/model/diy-tools.d.ts +4 -0
  18. package/dist/types/modules/panels/unit.d.ts +1 -0
  19. package/dist/types/shared/api/bundle-install.d.ts +1 -0
  20. package/dist/types/shared/api/host/diy-facts.d.ts +9 -0
  21. package/dist/types/shared/api/host/diy-facts.test.d.ts +1 -0
  22. package/dist/types/shared/api/host/diy-recon-fs.d.ts +3 -0
  23. package/dist/types/shared/api/host/diy-recon-fs.test.d.ts +1 -0
  24. package/dist/types/shared/api/host/diy-recon.d.ts +39 -0
  25. package/dist/types/shared/api/host/diy-recon.test.d.ts +1 -0
  26. package/dist/types/shared/api/host/diy-workshop.d.ts +12 -0
  27. package/dist/types/shared/api/host/diy-workshop.test.d.ts +1 -0
  28. package/dist/types/shared/api/host/installed-module.d.ts +2 -0
  29. package/dist/types/shared/api/host/opencli-command.d.ts +10 -0
  30. package/dist/types/shared/api/host/opencli-command.test.d.ts +1 -0
  31. package/dist/types/shared/api/host/runtime-seed.d.ts +40 -0
  32. package/dist/types/shared/api/host/runtime-seed.test.d.ts +1 -0
  33. package/docs/HANDOFF.md +82 -44
  34. package/docs/OPERATIONS.md +22 -1
  35. package/package.json +5 -5
  36. package/scripts/seed-profile.sh +4 -113
  37. package/scripts/seed-workshop.sh +216 -0
  38. package/skills/workbench-module-diy/BUILD.md +36 -66
  39. package/skills/workbench-module-diy/DATASOURCE.md +80 -12
  40. package/skills/workbench-module-diy/DESIGN.md +27 -2
  41. package/skills/workbench-module-diy/LINKAGE.md +49 -19
  42. package/skills/workbench-module-diy/PANEL.md +78 -4
  43. package/skills/workbench-module-diy/REVIEW.md +6 -5
  44. package/skills/workbench-module-diy/SKILL.md +32 -12
  45. package/skills/workbench-module-diy/STEPS.md +4 -0
  46. package/skills/workbench-module-diy/TOOLING.md +47 -0
  47. package/skills/workbench-module-diy/TOOLS.md +147 -5
  48. package/skills/workbench-module-diy/WIRING.md +88 -0
package/README.md CHANGED
@@ -36,6 +36,23 @@ npx @dsh-workbench/core # ② 起工作台,默认 :3081
36
36
 
37
37
  打开 <http://localhost:3081> 就是工作台。你原来那份 `dsh web` 继续用 `:3080`,两边互不影响。
38
38
 
39
+ ## 另一种装法:就在你那份 `dsh web` 里装(单 profile)
40
+
41
+ 不想多一个 profile、多一个端口、多一个进程?那就**在 `dsh web` 里装**——
42
+ 侧栏 **Plugins → Add plugin**,填 `@dsh-workbench/core`(包在公网 npm 上,默认源就能解析),
43
+ **Install → Enable now**,然后**刷新一次页面**。左栏换成工作台,右侧多出面板列。
44
+
45
+ - 装的是**你现在这个 profile**:会话、存储、附件接着用你原来的(**不分家**);
46
+ 面板与模块配置照旧落在 `~/.dsh/workbench/**`。
47
+ - 外壳会**自己把缺的那几件补齐**(建隔离 opencli 的入口、把 `dsh-wb-module` 挂上 PATH、
48
+ 后台把 DIY 工坊骨架建起来)—— 不需要跑 `setup`、也不需要启动器。后台脚本的输出在
49
+ `~/.dsh/workbench/seed.log`(DIY 工坊的依赖是几百 MB,第一次启动在后台下)。
50
+ - 第一次打开照旧走启动体检,自己装隔离 opencli 运行时;装不上时给一条能照抄到终端的命令。
51
+ - 与 `setup` 那条路的差别:**没有独立端口/进程**、**会话不隔离**、**改外壳源码不热重载**,
52
+ DIY 工坊的依赖是第一次启动在后台装的。取舍与理由见
53
+ [ADR-0037](https://github.com/code-farmer-i/dsh-workbench/blob/main/docs/adr/0037-workbench-installs-into-any-profile.md)。
54
+ - 想回到"两条实例并存",就删掉这个包(Plugins 页里卸载),再走上面的 `setup` 那条路 —— 数据都还在。
55
+
39
56
  ## 首次打开会自己做什么
40
57
 
41
58
  - **装 opencli 的隔离运行时**:启动体检自己装,落在 `~/.dsh/workbench/opencli/`,
@@ -61,6 +78,8 @@ npx @dsh-workbench/core # ② 起工作台,默认 :3081
61
78
 
62
79
  ## 和 `dsh web` 的关系
63
80
 
81
+ (下面说的是 `setup` 那条路;装在 web 自己的 profile 里那条见上一节。)
82
+
64
83
  - **另一个 profile、另一个端口、另一个进程**:`workbench` profile 在 `~/.dsh/profiles/workbench`;
65
84
  会话 / 存储 / 附件 / 模块配置全走 `~/.dsh/workbench/**`,与 web **数据分家**。只有一样有意共享:
66
85
  API 凭据(`~/.dsh/.credentials.yaml`,一机一把 key)。
package/bin/dsh-workbench CHANGED
@@ -222,6 +222,22 @@ mkdir -p "$OPENCLI_ROOT/bin" "$OPENCLI_ROOT/home"
222
222
  # 只建目录:骨架与依赖是 seed-profile.sh 第 6 步的事。
223
223
  mkdir -p "$DSH_HOME/workbench/diy/packages"
224
224
 
225
+ # 工坊的**稳定入口**:每次启动都重写一遍(幂等、几乎不花时间),挂进 PATH。
226
+ # 于是 agent 在工坊里(或任何目录里)都能直接叫 `dsh-wb-module`,不必记着 `pnpm exec` 前缀 ——
227
+ # 指令里那句"工坊里没有全局 dsh-wb-module"是**旧**状态,现在有一个我们自己的转发脚本。
228
+ bash "$REPO_DIR/scripts/seed-workshop.sh" entry || true
229
+ export PATH="$DSH_HOME/workbench/bin:$PATH"
230
+
231
+ # 骨架不在就**当场建**(不是只提醒):工坊看着"能用",可模块的 build / check 会把
232
+ # "不在 workspace 里"说成"声明写错了"——实测就是在这一步卡住过(干净机器上 seed 第 6 步没跑)。
233
+ # 提醒是对人说的,而先撞上它的是 agent:它读到的报错指着别的地方,于是开始自由发挥。
234
+ if [ ! -f "$DSH_HOME/workbench/diy/package.json" ]; then
235
+ bash "$REPO_DIR/scripts/seed-workshop.sh" || {
236
+ echo "dsh-workbench: 提醒 —— DIY 工坊的骨架没建起来($DSH_HOME/workbench/diy/package.json)。" >&2
237
+ echo " 跑一次 dsh-workbench setup;在那之前工坊里的模块 build / check 都会报错。" >&2
238
+ }
239
+ fi
240
+
225
241
  # 工坊**自己带着** DIY 的指引:软链到随包出货的那一份(本包的 `skills/workbench-module-diy/`)。
226
242
  # 为什么放在这里、而不是靠 agent preset 的 `customSkillDirs`:DIY 会话的 cwd 就是工坊
227
243
  # (会话 cwd 即沙箱边界),而 dsh 的 skill-filesystem 是从 **cwd 下的 `.agents/skills/`**
@@ -242,8 +258,12 @@ fi
242
258
  # (症状:启动体检永远说"隔离运行时没装好",而它其实是没权限跑)。
243
259
  # 所以这里写一个**我们自己拥有**的转发脚本,x 位由 chmod 当场给。
244
260
  # ⚠️ 先 rm -f:旧版本留下的软链还在时,`>` 会顺着软链把真脚本覆盖掉。
261
+ # ⚠️ DSH_HOME 必须**钉在命令里**:执行缝不继承它,而 bin/opencli-isolated 用
262
+ # `${DSH_HOME:-$HOME/.dsh}` 推根 —— 不钉的话,DSH_HOME 不是默认值的机器上,
263
+ # 隔离运行时会被认成用户真家目录那一份(实测:同一条路上的 seed-workshop.sh
264
+ # 就是这样把入口写进了 ~/.dsh,见 ADR-0037 的"执行缝不继承 DSH_HOME")。
245
265
  rm -f "$OPENCLI_ROOT/bin/opencli"
246
- printf '#!/bin/sh\nexec bash %q "$@"\n' "$DSH_WORKBENCH_ROOT/bin/opencli-isolated" \
266
+ printf '#!/bin/sh\nexec env DSH_HOME=%q bash %q "$@"\n' "$DSH_HOME" "$DSH_WORKBENCH_ROOT/bin/opencli-isolated" \
247
267
  >"$OPENCLI_ROOT/bin/opencli"
248
268
  chmod +x "$OPENCLI_ROOT/bin/opencli"
249
269
  export DSH_WORKBENCH_OPENCLI="$OPENCLI_ROOT/bin/opencli"