Files
dsh_ai1net_server/dsh-server-docs/04-调整方案/01-launch-token自动携带.md
T
admin 5ad755116e chore(docs): 文档库并入代码仓(R4 选 a)+ 索引/台账跟进
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 一律写「远程服务器」。
2026-09-15 18:47:13 +08:00

1.7 KiB
Raw Blame History

十六、方案 A 落地:launch/status 自动携带 dsh launch token(2026-09-08 19:30)

决策:用户选方案 A(小改上游,普通用户无需手动拿 token 即可打开聊天界面)。

改动(3 文件,已 git commit 29c8907,本地分叉 patch):

文件 改动
src/supervisor/spawner.ts Instance 接口加 launchToken?: string 字段
src/supervisor/orchestrator.ts ① trackChild 监听子进程 stdout,正则 dsh web: http://127.0.0.1:\d+/\?token=([A-Za-z0-9_-]+) 解析 token 存入 instance;② 新增 waitForLaunchToken()(轮询最多 20s 等 token 出现,崩溃/停止即返回);③ launch()/restartMain() 返回前等待 token
src/web/routes/dsh.ts dshUrl() 支持可选 token 参数;launch/restart/status 返回的 url 均拼接 ?token=(status 从 main.launchToken 取)

验证结果(全链路):

步骤 结果
launch 返回 {launchToken, url: https://admin.dsh.alotbuy.com/?token=...} ✅
打开带 token url(带 sid,-L 跟随) 200,24233B SPA,自动 303 种 dsh-auth cookie ✅
之后裸开 / 200 ✅
/api/llm/listProviders ok:true, deepseek-official ✅

构建/部署:npm run build(tsc)+ systemctl restart dshs。TS 坑:RegExp.exec 返回 null 非 undefined,判空须 m !== null && m[1] !== undefined。

admin API Key 已配置:从旧 /opt/dsh/.env 取出 sk-81c... 经 /api/me/keys 注入(name=deepseek-main,AES-GCM 加密入库,自动触发实例重启生效)。KEY 为每用户独立——每个用户需在桌面"管理密钥"各自添加;无全局通用 key(原容器 .env 统一 key 模型已废弃)。