平台共享模型改为「管理员逐用户授权」+ 品牌中文名改「能力网络」+ 修掉跨机模型落地/语言偏好静默失效

三条线合并入库(同一次部署批次,源码与生产此前已一致):

一、档案 138 · 平台共享模型:管理员逐用户授权(默认关闭)
  用户口径原文:「admin 设置的共享模型,需要 admin 在用户列表中开启(新增选项,默认关闭),
  用户才能在会话中使用(以及在设置的模型设置页面展示)」。
  · DB 迁移 v11:新增 users.shared_model_granted(DEFAULT 0 = 默认关闭)。
    ⚠️ 刻意**不**复用 v6 的 shared_model_enabled —— 那是用户侧偏好(用户能自己关,默认 1),
    而本需求要的是**管理员门禁**;共用一列则用户点一下就给自己授权,门禁形同不存在。
    生效 = granted ∧ enabled(server.ts#sharedLandingRows)。
  · 新路由 POST /api/admin/users/:id/models/shared(requireAdmin)+ 审计 shared_model_grant
    + **尽力而为**重启该用户实例(租约被占/实例未运行都不算失败)。
  · admin 用户列表新增「共享模型」列;用户侧 /api/me/keys 增 shared.granted / sharedModelGranted;
    插件 0.3.24:未授权时「平台共享模型」整块不渲染。

二、顺带修掉一个既有真缺陷:平台侧写用户 home 必须走 UserFs(用户卷在 worker 上)
  landModels 原先 join(owner.home_dir, …) + 本机 fs ⇒ 对「实例不在控制面本机」的用户
  读到空串(**不报错**)⇒ 模型落地一直是**静默空操作**(托管清单还被清空)
  ——即档案 87 的模型设置页对 guest 这类用户**从未生效**。
  · UserFs 新增 readHomeFile/writeHomeFile + 文件名白名单(settings.yaml / .credentials.yaml)
  · worker agent 新增 /fs/home-read /fs/home-write(只认白名单裸文件名)
  · landModels 改走 userFs(与"文件面"同一份按归属路由 ⇒ 落地与实例必然同机)
  · 同轮把 /api/me/locale(档案 102 语言偏好)也改成同一套(原先同样失效)
  · home-files.ts 抽出 backupHomeFile(备份留平台侧,命名规则逐字不变)

三、档案 139 · 品牌中文名:能力枢纽 → 能力网络(其他语言仍 CapabilityNet)
  落点四处:i18n 中文词条 / admin.html 顶栏 / favicon.svg 的 title+aria-label / design.css 注释;
  test/i18n-brand.test.mjs 期望值同步。档案 137 顶部加"后续"指针,不改历史。

验证(全部真机实测):
  · 红腿:未授权 → 106 上 guest 的 .credentials.yaml refs 变空(共享 key 被撤)
  · 绿腿:授权 → key 回来 + 托管清单恢复 ["DEEPSEEK_API_KEY"]
  · admin 列表带出 sharedModelGranted;用户侧 granted 随授权翻面(true/shared ↔ false/none)
  · 开关两次均 200(不再假失败);插件实装 0.3.24 且含 gating 字符串
  · 语言偏好:106 上 settings.yaml 出现 locale.preference=en(属主=实例属主,既有段逐字保留)
  · 本机 npm test 226 tests / 225 pass / 0 fail / 1 skipped;四个 verify 脚本全绿

部署:47 推 51 个 lib 产物、106 推 12 个(lib/ 是 gitignore ⇒ 回滚点物化在
/opt/dsh/backups/seq138b-20260919-125345/,逐文件对账 0 不一致;先 106 后 47);
插件 business-plugins 0.3.24(两机 artifacts 与本机 pack md5 一致)。
This commit is contained in:
admin committed 2026-09-19 13:51:01 +08:00
1 parent 971ccc3703
commit c2b7c5ef71
30 files changed
+770 -70

No files matched your search

+43 -13
View File
@@ -1,20 +1,20 @@
{
"generatedFrom": "scripts/docs-manifest.py",
"counts": {
"files": 194,
"chars": 2050190
"files": 196,
"chars": 2062355
},
"tiers": {
"hot": 6,
"cur": 25,
"warm": 61,
"cold": 42,
"cold": 44,
"doc": 60
},
"domains": {
"platform": 75,
"platform": 76,
"method": 47,
"ui": 17,
"ui": 18,
"plugin": 27,
"ops": 16,
"?": 8,
@@ -22,7 +22,7 @@
},
"layers": {
"L0": 1,
"L5": 149,
"L5": 151,
"L4": 22,
"L2": 3,
"?": 4,
@@ -218,7 +218,7 @@
"date": "04-10",
"chars": 6261,
"lines": 129,
"refs": 58,
"refs": 60,
"refsCurrent": 4,
"tier": "hot",
"layer": "L5",
@@ -713,7 +713,7 @@
"date": "04-13",
"chars": 2444,
"lines": 58,
"refs": 9,
"refs": 12,
"refsCurrent": 0,
"tier": "warm",
"layer": "L5",
@@ -786,8 +786,8 @@
"title": "137-品牌标识改造(去 DeepSeek 图形 → 平台自有标识)",
"status": "✅",
"date": "09-19",
"chars": 6287,
"lines": 119,
"chars": 6401,
"lines": 122,
"refs": 0,
"refsCurrent": 0,
"tier": "cold",
@@ -795,6 +795,36 @@
"domain": "ui",
"tldr": ""
},
{
"path": "04-调整方案/138-平台共享模型-管理员逐用户授权.md",
"num": "138",
"title": "138 · 平台共享模型 —— 管理员**逐用户**授权(默认关闭)",
"status": "✅ 已上线并端到端验证(控制",
"date": "2026-09-19",
"chars": 8578,
"lines": 148,
"refs": 0,
"refsCurrent": 0,
"tier": "cold",
"layer": "L5",
"domain": "platform",
"tldr": "① 共享模型从「人人默认可用(用户可自关)」改成「**管理员逐用户授权**」——新增列"
},
{
"path": "04-调整方案/139-品牌中文名改为能力网络.md",
"num": "139",
"title": "139 · 品牌中文名:能力枢纽 → **能力网络**",
"status": "✅ 已上线(静态资源直覆,无",
"date": "2026-09-19",
"chars": 2666,
"lines": 56,
"refs": 0,
"refsCurrent": 0,
"tier": "cold",
"layer": "L5",
"domain": "ui",
"tldr": "中文品牌名 **「能力枢纽」→「能力网络」**;**其他语言不变**(仍 `CapabilityNet`,"
},
{
"path": "04-调整方案/14-实例会话敏感信息暴露面审计与加固.md",
"num": "14",
@@ -1898,7 +1928,7 @@
"date": "2026-09-13",
"chars": 14028,
"lines": 218,
"refs": 14,
"refs": 18,
"refsCurrent": 0,
"tier": "warm",
"layer": "L5",
@@ -2181,8 +2211,8 @@
"title": "dsh 平台文档导航(INDEX)",
"status": "?",
"date": "",
"chars": 24468,
"lines": 268,
"chars": 25275,
"lines": 270,
"refs": 0,
"refsCurrent": 0,
"tier": "doc",