@dsh-workbench/core 0.2.5 → 0.2.7
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 +13 -9
- package/bin/dsh-workbench +12 -43
- package/client.js +914 -350
- package/dist/client/client.body.js +914 -350
- package/dist/client/index.js +915 -351
- package/dist/host/index.js +1314 -667
- package/dist/types/app/client.d.ts +216 -6
- package/dist/types/app/layouts/config-sync/ConfigSyncSection.d.ts +5 -0
- package/dist/types/app/layouts/rightbar/__tests__/market-order.test.d.ts +1 -0
- package/dist/types/app/layouts/rightbar/__tests__/market-running-display.test.d.ts +1 -0
- package/dist/types/app/layouts/rightbar/__tests__/market-workbench-act.test.d.ts +1 -0
- package/dist/types/app/layouts/rightbar/market-act.d.ts +2 -1
- package/dist/types/app/layouts/rightbar/market-rows.d.ts +3 -0
- package/dist/types/app/layouts/rightbar/market-settle-hold.d.ts +13 -0
- package/dist/types/app/layouts/rightbar/market-settle.d.ts +22 -0
- package/dist/types/app/layouts/rightbar/market-transient-state.d.ts +22 -0
- package/dist/types/app/layouts/rightbar/market-view-text.d.ts +26 -1
- package/dist/types/app/layouts/sidebar/workspace-groups.d.ts +4 -1
- package/dist/types/modules/panels/__tests__/market-tools-harness.d.ts +3 -0
- package/dist/types/modules/panels/model/market-workbench-update.d.ts +19 -0
- package/dist/types/modules/panels/model/market.d.ts +4 -0
- package/dist/types/modules/sessions/index.d.ts +1 -1
- package/dist/types/modules/sessions/model/session-node.d.ts +1 -0
- package/dist/types/shared/api/bundle-install.d.ts +1 -0
- package/dist/types/shared/api/config-sync.d.ts +35 -0
- package/dist/types/shared/api/config-sync.test.d.ts +1 -0
- package/dist/types/shared/api/host/__tests__/config-sync.test.d.ts +1 -0
- package/dist/types/shared/api/host/__tests__/post-channels.test.d.ts +1 -0
- package/dist/types/shared/api/host/__tests__/self-update.test.d.ts +1 -0
- package/dist/types/shared/api/host/bundle-manager.d.ts +1 -0
- package/dist/types/shared/api/host/bundle-routes.d.ts +1 -1
- package/dist/types/shared/api/host/config-sync.d.ts +46 -0
- package/dist/types/shared/api/host/post-channels.d.ts +18 -0
- package/dist/types/shared/api/host/self-update.d.ts +45 -0
- package/docs/HANDOFF.md +19 -14
- package/docs/OPERATIONS.md +40 -8
- package/package.json +4 -4
- package/scripts/seed-profile.sh +21 -85
package/README.md
CHANGED
|
@@ -25,7 +25,7 @@ dsh web (:3080) dsh workbench (:3081)
|
|
|
25
25
|
| --- | --- | --- |
|
|
26
26
|
| `dsh` | 本体。本包在 `0.1.7-rc.2` 上验过 | `npm i -g @deepseek-ai/dsh` |
|
|
27
27
|
| `node` + `pnpm` | dsh 的 `plugin` 子命令是**转发给 pnpm** 的;没有 pnpm 会直接报 `dsh: pnpm was not found` | 各自装 |
|
|
28
|
-
| 跑过一次 `dsh web` | `setup` 拿 `~/.dsh/profiles/web`
|
|
28
|
+
| 跑过一次 `dsh web` | `setup` 拿 `~/.dsh/profiles/web` 当模板(**bundle 清单**:这台机器上装了哪些 bundle),也是「配置同步」的默认来源。没有它会**明确报错**,不会静默建出半个 profile | `dsh web`,起来就行,然后 Ctrl-C |
|
|
29
29
|
|
|
30
30
|
然后两条命令:
|
|
31
31
|
|
|
@@ -71,10 +71,11 @@ npx @dsh-workbench/core # ② 起工作台,默认 :3081
|
|
|
71
71
|
| --- | --- |
|
|
72
72
|
| 起工作台 | `npx @dsh-workbench/core` |
|
|
73
73
|
| 换端口 | `WORKBENCH_PORT=3091 npx @dsh-workbench/core` |
|
|
74
|
-
| 升级 | 重跑一次 `npx --yes @dsh-workbench/core@latest setup
|
|
74
|
+
| 升级 | 重跑一次 `npx --yes @dsh-workbench/core@latest setup`(幂等),刷新一次页面即可(`dsh-hmr` 会重组;它报 `restartReason` 时才重启进程) |
|
|
75
75
|
| 重建 profile | `mv ~/.dsh/profiles/workbench ~/.dsh/profiles/workbench.bak`,再跑一次 `setup` |
|
|
76
76
|
| 彻底不用了 | 删 `~/.dsh/profiles/workbench` 与 `~/.dsh/workbench` 两个目录(都不影响 `dsh web`) |
|
|
77
|
-
| 改设置 |
|
|
77
|
+
| 改设置 | 在 `:3081` 的 Settings 里改(模型供应商 / 搜索源 / MCP 也是这里) |
|
|
78
|
+
| 从 `dsh web` 搬设置过来 | 设置 → 「配置同步」→ 选来源 → 勾行 → 同步(即生效) |
|
|
78
79
|
|
|
79
80
|
## 和 `dsh web` 的关系
|
|
80
81
|
|
|
@@ -83,10 +84,11 @@ npx @dsh-workbench/core # ② 起工作台,默认 :3081
|
|
|
83
84
|
- **另一个 profile、另一个端口、另一个进程**:`workbench` profile 在 `~/.dsh/profiles/workbench`;
|
|
84
85
|
会话 / 存储 / 附件 / 模块配置全走 `~/.dsh/workbench/**`,与 web **数据分家**。只有一样有意共享:
|
|
85
86
|
API 凭据(`~/.dsh/.credentials.yaml`,一机一把 key)。
|
|
86
|
-
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
87
|
+
- **设置是工作台自己那份**:模型供应商 / 搜索源 / MCP 都在 `:3081` 的 Settings 里配,
|
|
88
|
+
落在 `profiles/workbench/cordis.patch.yml` —— 那是它唯一的一份设置文档,每一行都改得动。
|
|
89
|
+
想用 `dsh web` 那边已经配好的行:`:3081` → `Meta+,` → 「配置同步」→ 选来源 → 勾行 → 同步 →
|
|
90
|
+
**即生效**(只搬显式配过的行;同 id 内容不同默认不覆盖)。web 后来改的不会自动过来,
|
|
91
|
+
再打开这一页拉一次即可。见 [ADR-0044](../../docs/adr/0044-config-sync-replaces-the-web-patch-overlay.md)。
|
|
90
92
|
- ⚠️ **别在 Settings → 插件里把 `@dsh-workbench/core` 关掉**:关掉 = 它那份 bundle patch 整份不再应用
|
|
91
93
|
(包括里面的"禁用出厂左栏"),界面会**退化成原版 dsh web**(左栏回来、右侧面板消失)。
|
|
92
94
|
**数据一个都不丢**;把开关拨回来就恢复 —— 进不去设置页就按 `Meta+,`。别当成故障去重建 profile。
|
|
@@ -101,6 +103,8 @@ npx @dsh-workbench/core # ② 起工作台,默认 :3081
|
|
|
101
103
|
| 打开面板 / 按刷新要等 5–8 秒 | 正常:opencli 每次调用有**固定约 5 秒**开销(起浏览器会话)。**没有缓存**,数据一律实时 |
|
|
102
104
|
| 体检那屏说「检测浏览器通道 · 没连上」,可面板照样能用 | 本机全局 opencli 与隔离运行时版本不一致,daemon 被顶成对方那版;下一条浏览器命令会自动把它重启回来,体检复检后改回「已连接」 |
|
|
103
105
|
| 一切正常,但左栏是出厂样子、右边没有面板 | 工作台插件在 Settings 里被关了(见上一条 ⚠️) |
|
|
106
|
+
| 模型列表里只有出厂的几个、没有自己配的供应商 | 新装的 profile 不带设置(ADR-0044):设置 → 「配置同步」→ 选来源 → 勾 `llm-` 那几行 → 同步(即生效)|
|
|
107
|
+
| 「配置同步」里某一行说 `@x 还没装` | 那一行点名的包不在这个 profile 的 `node_modules` 里:`dsh plugin --profile workbench add @x`(或在模块市场装),(装完 dsh 会自行重组;它报 `restartReason` 时才重启)|
|
|
104
108
|
|
|
105
109
|
排障全表在仓库的 [`docs/OPERATIONS.md`](https://github.com/code-farmer-i/dsh-workbench/blob/main/packages/workbench/docs/OPERATIONS.md);
|
|
106
110
|
把工作台装到别人机器上的前置清单见 [`docs/HANDOFF.md`](https://github.com/code-farmer-i/dsh-workbench/blob/main/packages/workbench/docs/HANDOFF.md)。
|
|
@@ -112,7 +116,7 @@ git clone git@github.com:code-farmer-i/dsh-workbench.git
|
|
|
112
116
|
cd dsh-workbench/packages/workbench
|
|
113
117
|
pnpm install
|
|
114
118
|
pnpm run dev # 监听 src/**(重建产物)+ 起工作台 :3081;改完不用重启、不用刷新页面
|
|
115
|
-
pnpm run check #
|
|
119
|
+
pnpm run check # 门禁:整仓那一套(类型 / lint / 覆盖率 / 架构 / 文档 / 运行时边界 / 接线 / 模块判据)
|
|
116
120
|
./bin/dsh-workbench # 只想起工作台、不需要监听改动时用它
|
|
117
121
|
```
|
|
118
122
|
|
|
@@ -120,7 +124,7 @@ pnpm run check # 门禁:类型 / 覆盖率 / 架构 / 运行时边界 / 接
|
|
|
120
124
|
`:3081` 已经有实例在跑时就只监听、不重复起第二个。改界面时开着它就够了:
|
|
121
125
|
浏览器半侧重建 `client.js` 后由 dsh 的 HMR 热换插件(不刷新页面),宿主半侧按模块路径热重载。
|
|
122
126
|
|
|
123
|
-
|
|
127
|
+
`cordis.patch.yml` 与 `package.json` 的 bundle 清单也**不用重启**(`dsh-hmr` 变了就重组);要重启的是改 `vite.config.ts`。
|
|
124
128
|
|
|
125
129
|
结构与边界(两个运行时、槽位接线、模块包的门禁)见仓库的
|
|
126
130
|
[`docs/ARCHITECTURE.md`](https://github.com/code-farmer-i/dsh-workbench/blob/main/docs/ARCHITECTURE.md) ·
|
package/bin/dsh-workbench
CHANGED
|
@@ -69,6 +69,8 @@ run_setup() {
|
|
|
69
69
|
else
|
|
70
70
|
SPEC="$PKG@^$(pkg_version)"
|
|
71
71
|
echo "→ 从内网源装 ${SPEC}(源在 package.json 的 publishConfig.registry)"
|
|
72
|
+
echo " 这一份启动器是装在哪就是哪一代:换 profile / 重建 profile 之前,先"
|
|
73
|
+
echo " npm i -g ${PKG}@latest。已经在跑的那个 profile 升级走市场里工作台那一行的「更新」。"
|
|
72
74
|
fi
|
|
73
75
|
|
|
74
76
|
dsh plugin --profile "$PROFILE" add "$SPEC"
|
|
@@ -138,51 +140,18 @@ else
|
|
|
138
140
|
export DSH_WORKBENCH_ROOT="$REPO_DIR"
|
|
139
141
|
fi
|
|
140
142
|
|
|
141
|
-
# ──
|
|
143
|
+
# ── 设置从哪来:工作台自己的 profile patch(不再叠 web 那一份)──────────────
|
|
142
144
|
#
|
|
143
|
-
#
|
|
144
|
-
#
|
|
145
|
-
#
|
|
145
|
+
# 以前每次启动都用 `--patch` 把 `profiles/web/cordis.patch.yml` 叠成**最高层**。
|
|
146
|
+
# 代价是那一层盖住的行在 :3081 的 Settings 里**改不动**:dsh 的 config-editor 写文件
|
|
147
|
+
# **之前**会拿组合后的值跟你写的值对,不等就抛
|
|
148
|
+
# `overridden by a home patch or command-line overlay` —— 文件根本没写。
|
|
149
|
+
# 症状就是"模型供应商这类设置只能去 :3080 改,工作台这边看着能点、点了没用"。
|
|
146
150
|
#
|
|
147
|
-
#
|
|
148
|
-
#
|
|
149
|
-
#
|
|
150
|
-
# 用户在 web 的 Settings 页里配的就是它,配完即生效。
|
|
151
|
-
#
|
|
152
|
-
# 副作用(刻意的):被这一层覆盖的行,在工作台的 Settings 页里会显示
|
|
153
|
-
# `overridden by a home patch or command-line overlay` —— 那正是"这行由 web 管"的提示。
|
|
154
|
-
# 反向不成立:工作台里配的只落在自己的 profile patch(差异层),web 看不到。
|
|
155
|
-
# ⚠️ 叠之前先剥掉「每个界面自己的偏好」那一类。
|
|
156
|
-
#
|
|
157
|
-
# `--patch` 是最高层,被它覆盖的行在工作台的 Settings 页里会显示
|
|
158
|
-
# "overridden by a home patch or command-line overlay"、**改了也会跳回去**。
|
|
159
|
-
# 供应商 / 搜索源 / MCP 那类机器级设置这样管是对的;但 `ui-theme.preference`
|
|
160
|
-
# 是**每个界面自己的**偏好(有人要 web 深色、工作台浅色),叠上来等于把工作台的
|
|
161
|
-
# 主题锁成 web 的 —— 实测就是"切到浅色自动跳回深色"。
|
|
162
|
-
#
|
|
163
|
-
# 剥的方式:按顶层列表项过滤,命中 id 的那一项整块不要(缩进到下一个 `- ` 为止)。
|
|
164
|
-
WEB_PATCH="$DSH_HOME/profiles/web/cordis.patch.yml"
|
|
165
|
-
WORKBENCH_PATCH_STRIP="${DSH_WORKBENCH_PATCH_STRIP:-ui-theme}"
|
|
151
|
+
# 现在改成:**工作台自己的 patch 是唯一真相**。想要 web 的哪几行,去
|
|
152
|
+
# 设置 → 「配置同步」里勾(它读源 profile 的 cordis.patch.yml,按行搬运,
|
|
153
|
+
# 见 .scratch/config-sync/spec.md 与 ADR-0044)。启动器只负责把工作台起起来。
|
|
166
154
|
PATCH_ARGS=()
|
|
167
|
-
WEB_PATCH_LAYER="$WEB_PATCH"
|
|
168
|
-
if [ -f "$WEB_PATCH" ]; then
|
|
169
|
-
if [ -n "$WORKBENCH_PATCH_STRIP" ]; then
|
|
170
|
-
WEB_PATCH_LAYER="$(mktemp -t dsh-workbench-web-patch)"
|
|
171
|
-
trap 'rm -f "$WEB_PATCH_LAYER"' EXIT INT TERM
|
|
172
|
-
awk -v strip="$WORKBENCH_PATCH_STRIP" '
|
|
173
|
-
/^- / {
|
|
174
|
-
id = $0
|
|
175
|
-
sub(/^- id:[[:space:]]*/, "", id)
|
|
176
|
-
sub(/[[:space:]]*$/, "", id)
|
|
177
|
-
skip = (id == strip)
|
|
178
|
-
}
|
|
179
|
-
!skip { print }
|
|
180
|
-
' "$WEB_PATCH" > "$WEB_PATCH_LAYER"
|
|
181
|
-
fi
|
|
182
|
-
PATCH_ARGS=(--patch "$WEB_PATCH_LAYER")
|
|
183
|
-
else
|
|
184
|
-
echo "dsh-workbench: 提醒 —— 找不到 ${WEB_PATCH},这次不叠加 web 的设置(供应商等可能不全)。" >&2
|
|
185
|
-
fi
|
|
186
155
|
|
|
187
156
|
# ── 声明工作台运行时的**可写根**(执行缝的沙箱只放行 process.cwd())──────────
|
|
188
157
|
#
|
|
@@ -195,7 +164,7 @@ fi
|
|
|
195
164
|
#
|
|
196
165
|
# 为什么是 `--patch` 叠加而不是改 profile 的 cordis.patch.yml:profile 可能是旧的
|
|
197
166
|
# (交接出去的机器尤其如此),没人会回头重跑 seed;叠加层每次启动都生效。
|
|
198
|
-
# ⚠️ 必须排在
|
|
167
|
+
# ⚠️ 必须排在 profile 自己那一层**之后**:工作台的可写根要赢。
|
|
199
168
|
SANDBOX_PATCH="$REPO_DIR/profile/sandbox.patch.yml"
|
|
200
169
|
if [ -f "$SANDBOX_PATCH" ]; then
|
|
201
170
|
PATCH_ARGS+=(--patch "$SANDBOX_PATCH")
|