1) dsh-server-docs/ 从工作区(原 E:\...\aliyun-dsh-server\dsh-server-docs)**整体并入本仓**,
保留目录名 ⇒ 仓库内 dsh-server-docs/... 的相对引用天然继续有效;旧目录(含其 .git)已归档到
工作区 _中间产物_待清理/,未随本提交带入。
2) .gitattributes:新增 `dsh-server-docs/** -text` —— 原文档库是 `* -text` + autocrlf=false,
必须保持纯 LF,否则会被本仓的 CRLF 规则翻掉。
3) 活引用里的绝对路径已全部改到新位置(docs 的 INDEX / README / scripts / skills + 用户级 skills
+ ~/.workbuddy/settings.json 的 hooks);历史档案(04-调整方案/、archive/)按「只增不改」未动。
⚠️ hooks 路径改动需「完全重启会话」才生效(配置是会话启动快照)。
4) 交接单/T08:新增 §16「生产整体切换执行记录」(形态 / 落地动作 / **4 个只有真上线才暴露的真 bug** /
验收证据 / 回滚命令 / 残留项);台账 T08 行 → 已完成并归档;03-路线图 §二 登记 T08 收尾项。
5) 统一称谓:**「本机」只指跑 WorkBuddy 的开发机**,47 / 106 一律写「远程服务器」。
5.0 KiB
5.0 KiB
T07 · 内置 dsh 安装路径按序探测(修 P1 静默失效)
- 日期:2026-09-14
- 状态:✅ 已完成并归档(源仓
cbaf3ad+1d72e8f,均已 pushmaster) - 执行会话:
craft-session-installpath(主修)/craft-session-tailclear(留痕 + 收尾) - 提出方:开源导出会话(P1 交接单
dsh-laijing-github\_交原仓会话_模型目录安装路径缺陷_20260914.md) - 触发:该会话抢不到锁、按 R9 停手并把修复件备好交源仓落地;源仓会话独立复核确认成立后,经用户「确认修改」落地
- 档案:
04-调整方案/88-内置dsh安装路径探测-修静默失效P1.md(全部技术结论与复盘)
1. 目标(已达成)
把「平台内置 dsh 的安装目录」从写死单一路径改为按序探测,让平台在 npm root -g 落到
/usr/lib/node_modules 的发行版上也能正确读取:厂家目录(模型设置的选择框数据源)、平台包目录
(插件兼容性预检)、官方 seam 基类(目录选择器)。
2. 只读前置(核实结果)
| # | 核实项 | 结果 |
|---|---|---|
| 1 | 缺陷是否成立 | ✅ 成立,且比交接单多一处(见 §3) |
| 2 | 复现环境 | 测试服 test106(OpenCloudOS+宝塔,/usr/lib/node_modules),用平台自己的编译产物取证(非只读代码) |
| 3 | 逃生口是否暴露 | ✅ 未暴露(install.sh/env 样例/README 均 0 命中) |
| 4 | 修复件可用性 | ✅ 方向正确;但env 名是导出侧的(源仓侧会永不生效)——已修正(见 §4) |
3. 范围
改了三处(不是两处):src/web/model-catalog.ts:30 · src/web/plugin-compat.ts:36 ·
poc/workspace-scoped-picker/lib/index.js:34-35(交接单漏的第 3 处)。
没动:官方 dsh 主程序与缓存 · 04-调整方案/87(模型设置本体)· 内存/配额档位 · nginx/nft · 系统面。
4. 决策点
- 用户已定:确认修复(无口径分叉)。
- 技术自决(可推翻):① 解析顺序 env → dsh 可执行文件解软链 → 常见全局根 →
npm root -g→ 历史默认值; ② 判定用package.json.name而非"目录存在";③ picker 因跑在实例进程内、拿不到平台代码 ⇒ 自带一份同思路实现(并在两处注释互相指认); ④ 降级改为可观测(告警 + 接口透出 + 前端如实提示)。 - ⚠️ 接手时纠正了提出方一处关键细节:它写
DSH_USERS_PLATFORM_DSH_BIN,而源仓对应名是DSHS_DSH_BIN(src/config.ts:239)⇒ 改为两侧都认。
5. 步骤与验证(全部执行完毕)
- 独立复核(§2)→ ✅ 发现第 3 处
- 落地主修
cbaf3ad:新模块src/web/dsh-install.ts+ 三处调用点 +scripts/verify-dsh-install.mjs→ ✅ - 本机:
tsc0 错误 ·npm run verify全绿 · 单测 16/0 → ✅ - 部署
bt-server+ 回归:platformPkgCount223、厂家目录 39、picker 未受影响 → ✅ - 测试服
test106三种 env 姿势全部解析正确(/usr/lib;scope 240 项、pi-ai 数据 39)→ ✅ - 收尾
1d72e8f:降级留痕 + 前端 0.3.13 如实提示 + picker 升 0.1.5 重铺(消除源码/线上漂移)+ README 补 3 个 env → ✅ - 归档与台账(本单 +
04/88+ INDEX +交接单/README §一)→ ✅
6. 验收(对应提出方 §6)
| # | 验收标准 | 结果 |
|---|---|---|
| 1 | 源仓 src/web/dsh-install.ts 存在且 tsc --noEmit 零错误 |
✅ |
| 2 | 源仓再无裸字面量(仅 dsh-install.ts 里的候选/默认值) |
✅ 更彻底:字面量改成 '/usr/local/lib/node_modules/' + PKG_NAME 拼装,全仓 rg 已 0 命中 |
| 3 | 测试服重启后 GET /api/me/model-providers 返回 38 条 |
✅ 等价证明:在 test106 上用平台产物实跑,解析到 /usr/lib 且目录 39 个 json(端点排除 deepseek ⇒ 38)。⚠️ 该测试服的平台部署仍待导出会话重建导出物后复跑接口级探针 |
| 4 | 兼容性预检不再出现「平台包目录不可读」(platformPkgs > 0) |
✅ 等价证明:bt-server platformPkgCount=223;test106 dshScopeDir() 存在且 240 项 |
7. 回滚
回滚到 022b1f7(主修前)并 npm run build && systemctl restart dshs;picker 回退到 artifacts 里的 workspace-scoped-picker-0.1.4.tgz 并重跑 poc/workspace-scoped-picker/ensure-workspace-picker.cjs --restart。
⚠️ 回滚 = 主动恢复「另一种布局静默失效」,一般不要回滚。
8. 回报格式(已回填)
- 每步命令与证据:
04-调整方案/88§五; - 产物:
business-plugins0.3.13、workspace-scoped-picker0.1.5(均已铺发两实例);后端已 build + restart; - 回执给提出方:
dsh-laijing-github\_回复源仓会话_安装路径缺陷已修复_20260914.md(含它待做的 4 步); - commit:
cbaf3ad(主修)、1d72e8f(留痕 + 收尾),均已 push。