Files
dsh_ai1net_server/归档/交接单-20260924-归档/接续包_共享模型授权与品牌改名_20260919.md
T

64 lines
4.7 KiB
Markdown
Raw Normal View History

# 接续包 · 共享模型按用户授权 + 品牌改名 + 跨机落地修复(2026-09-19)
> **本包是唯一细节来源**。接续会话开工第一步:`state.py` → 重算本文件 md5 → 与 automation prompt 里的值比对,
> **不符即停并报告「口径已更新,需重新接续」**。
> ⚠️ **本棒已全部完成并入库**,无在途任务;下一棒默认动作 = **核实完成状态后报告结束**(⛔ 勿自行开工)。
## 1. 目标(全部达成)
| # | 用户需求(原话) | 状态 |
|---|---|---|
| ① | 「admin设置的共享模型,需要admin在用户列表中开启(新增选项,默认关闭),用户才能在会话中使用(以及在设置的模型设置页面展示)」 | ✅ 上线并两腿实测 |
| ② | 「把页面上的能力枢纽 改为能力网络」 | ✅ 上线并实测 |
| ③ | 「处理完毕后提交到仓库」 | ✅ 已提交并双推 |
## 2. 已完成(可核对的落点)
| 项 | 值 |
|---|---|
| commit | **`9c2e797`**(主提交 `c2b7c5e`,30 文件;补提交 `9c2e797`,manifest) |
| 双推 | 原仓 `work.alotbuy.com:maogeigei/dsh_shenxian.git` + CNB `cnb.cool/maogeigei/dsh-shenxian.git`;**三方裸 sha 全等** |
| 档案 | `dsh-server-docs/04-调整方案/138-平台共享模型-管理员逐用户授权.md`、`139-品牌中文名改为能力网络.md`;`INDEX.md` 已登记;`137` 顶部加"后续"指针(不改历史) |
| 迁移 | DB **v11** `users.shared_model_granted`(DEFAULT 0)已应用 |
| 部署 | 47 `/opt/dshs/lib` 51 个产物、106 `/opt/dshs-cluster/lib` 12 个(对账 0 不一致);插件 `business-plugins` **0.3.24** 已铺 admin+guest |
| 回滚点 | `/opt/dsh/backups/seq138b-20260919-125345/{opt/dshs/lib,opt/dshs-cluster/lib}`(`lib/` 是 gitignore ⇒ 只能这样物化;另 `seq138-web-20260919-125345/` = 4 个前端文件) |
| 零回归 | `npm test` 226 / 225 pass / 0 fail / 1 skip;`verify-static`、`verify-inject`、`verify-platform-admin-section`、`verify-models-render` 全绿 |
| 镜像 | `/opt/dsh/docs` 的 INDEX / 138 / 139 / 137 / docs-manifest 已同步,md5 一致 |
## 3. 在途 / 未完成
- **无代码在途**。工作区仅剩三个**历史**临时目录(`_tmp_seq24/`、`_tmp_seq40/`、`_中间产物_待清理/`,本次未动)。
- 全局执行锁:**收口时已释放**(若 `state.py` 显示被占,是本棒之后的会话,⛔ 与本棒无关)。
## 4. 🔴 关键决定(后续别推翻)
1. **门禁与用户偏好分两列**:`shared_model_granted`(admin,默认 0)∧ `shared_model_enabled`(用户,默认 1)
—— **生效 = 两者都为真**。⛔ 别合并成一列(用户就能给自己授权)。
2. **存量用户默认全部"未授权"**(v11 的 DEFAULT 0 回填)。**guest 已被显式开启**(恢复其原有可用性);
若你要改,在 admin 用户列表点一下即可。
3. **平台侧写用户 home 必须走 `UserFs`**(`readHomeFile` / `writeHomeFile`,文件名白名单
`settings.yaml` / `.credentials.yaml`)—— ⛔ 别再用 `join(home_dir, …)` + 本机 fs:
用户卷在 worker 上时那是**静默空操作**(读回空串、不报错)。
4. **门禁类判据一律失败关闭**;但"一次性交接认领"用的 `sharedDeepseekKey()` **刻意不判门禁**
(判在 `resolveApiKey` 的调用点)—— 否则被撤销授权的用户认不出自己那行、删不掉。
5. `pg.ts` **有自己的一份 `USER_COLS`**(与 `repo.ts` 两份)⇒ 加列必须**两处都改**。
## 5. 下一步(都属"需要你"或"可选增量",⛔ 无必须开工项)
1. **UI 目视(只能你做)**:`https://ai1net.com/admin.html` 用户列表的新「共享模型」列;
用户实例「设置 → 模型设置」在未授权时那一块不出现。
2. **可选增量**:`shared_model_enabled` 目前的用户侧开关**未加门禁**(有意,见档案 138 §七-4);
若要"授权后用户不得自关",需另立需求。
3. **在册旧账(与本次无关)**:D8 云安全组(唯一在册红,待你在云控制台落地)、档案 136 控制面并集(已立项未落地)。
## 6. 验证回放(想自己复核时照跑)
```bash
# 红/绿两腿(会停启 guest 实例,⛔ 别在生产高峰跑)
sh <本工作区>/_tmp_seq138/seq138-leg.sh false # 期望:106 上 guest 的 .credentials.yaml refs 变空
sh <本工作区>/_tmp_seq138/seq138-leg.sh true # 期望:DEEPSEEK_API_KEY 回来
# 语言偏好跨机
# POST /api/me/locale {locale:'en'} ⇒ 106 的 home/settings.yaml 出现 locale.preference
```
⚠️ 验证脚本用 `mksess.cjs` 造临时会话(TTL 10 分钟),**必须一次跑完并清理**
(`DELETE FROM sessions WHERE user_agent='poc-curl2'`)。