Files
dsh_shenxian/dsh-server-docs/04-调整方案/37b-功能插件分区v0.2官方token与i18n.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

63 lines
4.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 37b · 功能插件分区 v0.2.0:官方 token 化 + i18n + 交互升级(批次 3)
- 日期:2026-09-11
- 触发:用户三问 —— ① 确认样式交互是否符合规范、是否比 dsh-market 好(整合优秀交互)② 按项目**亮色调** ③ 亮/暗切换与多语言的实现复杂度
- 状态:**✅ 已实施(commit `5f42fb7`)并验证**
> **TL;DR**|**结论**:「功能插件」section 升级 v0.2:**官方 `--dsw-*` design token**(自动跟随亮/暗/第三方主题)+ 官方 locale 中英双语。
> **关键**:交互补齐:搜索 / 状态徽章 / 全选清空 / 被自动禁用插件的行内提示与重试 / 重启后探活再刷新。
> **状态**:✅ 已实施并验证
## 一、调研结论(决定了做法)
| 事实 | 影响 |
|---|---|
| dsh 官方客户端(含设置面板)使用 **`--dsw-*` design token(CSS 变量)**:`--dsw-alias-label-primary/-secondary/-tertiary`、`--dsw-alias-bg-layer-{1,2,3}`、`--dsw-alias-border-l{1,2,3}`、`--dsw-alias-brand-primary`、`--dsw-alias-state-{error,success}-primary`、`--dsw-elevation-prominent` 等 | **正解不是"改成亮色十六进制",而是改用官方 token** → 自动跟随主题 |
| 官方主题插件 = `@deepseek-ai/dsh-client-ui-theme` | **亮/暗切换由官方提供,我们零成本跟随**,不需要自己实现 |
| dsh-market(567KB client)**全量使用 `--dsw-*`**;交互词表含 更新/失败/确认/重启/卸载/已安装/停用/重试/重新安装/搜索插件/分类/暂无 | 我们 v0.1.0 的差距:硬编码深色、无搜索、无状态词、失败只有一行文字 |
| 官方 i18n:`ctx.effect(() => ctx.locale.register(NS, {zh, en}))` + `ctx.locale.bind(NS)`,`inject` 需含 `"locale"` | 多语言**复杂度低**,直接复用 |
## 二、v0.2.0 改动(`@dsh-local/business-plugins` client half)
1. **配色全部改官方 token**(原硬编码 `#f9fafb/#c9cdd4/#4f6ef7` 等)→ 与官方深色面板和谐,且**亮/暗/第三方主题自动适配**。
2. **文案走官方 locale**(zh/en 双语);section label 改为 `t("section.label")`。
3. **交互升级**(对齐 dsh-market 的优秀做法):
- 搜索过滤(名称/描述)
- 每行**状态徽章**:`已启用` / `未启用`
- 全选 / 清空 + 「已选 N / M」计数
- 加载态、空态
- **被门户自动禁用的不兼容插件:行内 `⚠` 标记(悬浮显示真实 reason)+「重试」按钮** —— 与档案 34 的隔离机制闭环
4. **重启后自动刷新页面**:应用成功且实例重启时,先探活(最多 3 次 × 1.5s)再 `location.reload()`,避免实例重启窗口白屏。
## 三、验证
| 检查项 | 结果 |
|---|---|
| 已装版本 | ✅ guest `node_modules/@dsh-local/business-plugins/package.json` = **0.2.0** |
| token 化 | ✅ 已装 `lib/client.js` 含 `dsw-alias-label-primary` |
| i18n | ✅ 含 `locale.register` |
| bundle 被加载 | ✅ `.dsh-biz-plugins.log` 新增 `apply pid=2` 标记 |
| **UI 实拍** | ✅ headless Chrome 打开 guest 实例 → 设置面板 → **「功能插件」分区已出现**(与「通用设置 / Agent 预设」平级),显示 v0.2.0 locale 空态「**暂无功能插件(需管理员在门户投放)**」,配色融入官方面板 |
## 四、顺带修掉一个真实风险:bundle 源码从未进版本控制
`.gitignore` 的 `lib/`(本意忽略 TS 构建产物)**连 `poc/<plugin>/lib/` 一起忽略了** →
**平台两个自建 client bundle 的源码(`client.js` / `index.js`)从来没有进 git**:
`@dsh-local/business-plugins` 与 `@dsh-local/workspace-scoped-picker` 都中招。
→ 一旦 `/opt/dsh/docs/04-调整方案/poc/` 那份丢失,这两个插件**无法重建**。
**修法**(commit `04a2496`):加反忽略 `!poc/*/lib/` + `!poc/*/lib/**`,并把两个 bundle 的 `lib/` 一并入库。
## 五、回答用户第 ③ 问(复杂度)
| 需求 | 做法 | 复杂度 | 本次是否已做 |
|---|---|---|---|
| 按项目亮色调 | 改用 `--dsw-*` token;主题由 dsh 决定 | 低 | ✅ |
| 亮/暗切换 | **不需要我们实现** —— 跟随官方 `dsh-client-ui-theme` | ≈ 零 | ✅(自动) |
| 多语言 | 官方 locale 机制,注册 zh/en | 低(~30 行) | ✅ |
## 六、后续
- 若要"平台统一指定亮色":可在 profile 层设 dsh 主题默认值(未做,等需求)。
- 小尾巴仍在:admin 侧事故可见性(`audit` 只有写没有读 → 需加读取方法才能在门户显示「N 个用户启用失败」)、重启前 `dump-config` 预检、批量上限保护(N>5 只回滚)。