@teamix-evo/skills 0.4.0 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (97) hide show
  1. package/README.md +7 -3
  2. package/manifest.json +3 -2
  3. package/package.json +2 -2
  4. package/src/teamix-evo-code-opentrek/SKILL.md +12 -10
  5. package/src/teamix-evo-code-opentrek/api-layering.md +8 -5
  6. package/src/teamix-evo-code-opentrek/checklist.md +2 -0
  7. package/src/teamix-evo-code-opentrek/error-and-loading.md +38 -25
  8. package/src/teamix-evo-code-opentrek/file-structure.md +63 -54
  9. package/src/teamix-evo-code-opentrek/forms-and-validation.md +14 -12
  10. package/src/teamix-evo-code-opentrek/reuse-first.md +2 -0
  11. package/src/teamix-evo-code-opentrek/routing-and-codesplit.md +23 -21
  12. package/src/teamix-evo-code-opentrek/testing.md +32 -28
  13. package/src/teamix-evo-code-uni-manager/SKILL.md +12 -10
  14. package/src/teamix-evo-code-uni-manager/api-layering.md +2 -0
  15. package/src/teamix-evo-code-uni-manager/checklist.md +2 -0
  16. package/src/teamix-evo-code-uni-manager/error-and-loading.md +3 -1
  17. package/src/teamix-evo-code-uni-manager/file-structure.md +2 -0
  18. package/src/teamix-evo-code-uni-manager/forms-and-validation.md +2 -0
  19. package/src/teamix-evo-code-uni-manager/reuse-first.md +3 -1
  20. package/src/teamix-evo-code-uni-manager/routing-and-codesplit.md +3 -1
  21. package/src/teamix-evo-code-uni-manager/testing.md +2 -0
  22. package/src/teamix-evo-design-opentrek/SKILL.md +213 -52
  23. package/src/teamix-evo-design-opentrek/boundaries.md +25 -5
  24. package/src/teamix-evo-design-opentrek/brand.md +7 -7
  25. package/src/teamix-evo-design-opentrek/checklist.md +15 -13
  26. package/src/teamix-evo-design-opentrek/components.md +89 -39
  27. package/src/teamix-evo-design-opentrek/examples/detail-ai-gateway-1.html +1069 -0
  28. package/src/teamix-evo-design-opentrek/examples/detail-ai-gateway-instance.html +941 -0
  29. package/src/teamix-evo-design-opentrek/examples/detail-page-api-doc.html +906 -0
  30. package/src/teamix-evo-design-opentrek/examples/detail-page-config.html +993 -0
  31. package/src/teamix-evo-design-opentrek/examples/detail-page-monitor.html +1339 -0
  32. package/src/teamix-evo-design-opentrek/examples/detail-page.html +933 -0
  33. package/src/teamix-evo-design-opentrek/examples/settings-page.html +1119 -0
  34. package/src/teamix-evo-design-opentrek/examples/standard-card-list.html +1094 -0
  35. package/src/teamix-evo-design-opentrek/examples/standard-table-list.html +1361 -0
  36. package/src/teamix-evo-design-opentrek/examples/wizard-form-page.html +877 -0
  37. package/src/teamix-evo-design-opentrek/flows.md +85 -12
  38. package/src/teamix-evo-design-opentrek/foundations.md +12 -9
  39. package/src/teamix-evo-design-opentrek/generation-flow.md +84 -14
  40. package/src/teamix-evo-design-opentrek/pages/detail-page/SKILL.md +260 -0
  41. package/src/teamix-evo-design-opentrek/pages/detail-page/patterns/api-doc-detail.md +163 -0
  42. package/src/teamix-evo-design-opentrek/pages/detail-page/patterns/comparison-detail.md +100 -0
  43. package/src/teamix-evo-design-opentrek/pages/detail-page/patterns/monitor-detail.md +190 -0
  44. package/src/teamix-evo-design-opentrek/pages/detail-page/patterns/resource-detail.md +148 -0
  45. package/src/teamix-evo-design-opentrek/pages/form-page/SKILL.md +362 -0
  46. package/src/teamix-evo-design-opentrek/pages/list-page/SKILL.md +286 -0
  47. package/src/teamix-evo-design-opentrek/pages/list-page/_shared/action-column-spec.md +60 -0
  48. package/src/teamix-evo-design-opentrek/pages/list-page/_shared/column-meta-rules.md +117 -0
  49. package/src/teamix-evo-design-opentrek/pages/list-page/_shared/search-combo-spec.md +194 -0
  50. package/src/teamix-evo-design-opentrek/pages/list-page/_shared/state-action-pattern.md +51 -0
  51. package/src/teamix-evo-design-opentrek/pages/list-page/patterns/advanced-filter-list.md +94 -0
  52. package/src/teamix-evo-design-opentrek/pages/list-page/patterns/card-list.md +558 -0
  53. package/src/teamix-evo-design-opentrek/pages/list-page/patterns/drawer-list.md +76 -0
  54. package/src/teamix-evo-design-opentrek/pages/list-page/patterns/expandable-list.md +70 -0
  55. package/src/teamix-evo-design-opentrek/pages/list-page/patterns/l2-sidebar-list.md +73 -0
  56. package/src/teamix-evo-design-opentrek/pages/list-page/patterns/standard-list.md +198 -0
  57. package/src/teamix-evo-design-opentrek/patterns/color-mapping.md +96 -0
  58. package/src/teamix-evo-design-opentrek/patterns/dashboard.md +2 -0
  59. package/src/teamix-evo-design-opentrek/patterns/detail-page.md +218 -152
  60. package/src/teamix-evo-design-opentrek/patterns/form-page.md +437 -228
  61. package/src/teamix-evo-design-opentrek/patterns/list-page.md +221 -260
  62. package/src/teamix-evo-design-opentrek/patterns/page-types.md +40 -125
  63. package/src/teamix-evo-design-opentrek/philosophy.md +7 -5
  64. package/src/teamix-evo-design-opentrek/rules/_assets/OP_AGENT RUNTIME.svg +1 -0
  65. package/src/teamix-evo-design-opentrek/rules/_assets/OP_AI GATEWAY.svg +1 -0
  66. package/src/teamix-evo-design-opentrek/rules/_assets/OP_AI STUDIO.svg +1 -0
  67. package/src/teamix-evo-design-opentrek/rules/_assets/OP_DEV-2.svg +1 -0
  68. package/src/teamix-evo-design-opentrek/rules/_assets/OP_LOGO.svg +1 -0
  69. package/src/teamix-evo-design-opentrek/rules/_assets/OP_OPS.svg +1 -0
  70. package/src/teamix-evo-design-opentrek/rules/boundaries.rules.json +3 -3
  71. package/src/teamix-evo-design-opentrek/rules/business-mapping.json +124 -0
  72. package/src/teamix-evo-design-opentrek/rules/common-components.json +924 -0
  73. package/src/teamix-evo-design-opentrek/rules/component-specs.json +1083 -0
  74. package/src/teamix-evo-design-opentrek/rules/design-tokens.css +433 -0
  75. package/src/teamix-evo-design-opentrek/rules/design-tokens.json +2798 -0
  76. package/src/teamix-evo-design-opentrek/rules/layout-rules.json +218 -0
  77. package/src/teamix-evo-design-opentrek/rules/page-flow.json +351 -0
  78. package/src/teamix-evo-design-opentrek/rules/page-frame.json +241 -0
  79. package/src/teamix-evo-design-opentrek/rules/page-header-spec.md +123 -0
  80. package/src/teamix-evo-design-opentrek/rules/page-types.json +206 -0
  81. package/src/teamix-evo-design-opentrek/rules/sidebar-spec.md +217 -0
  82. package/src/teamix-evo-design-opentrek/rules/styling.json +188 -0
  83. package/src/teamix-evo-design-opentrek/rules/token-mapping.md +284 -0
  84. package/src/teamix-evo-design-uni-manager/SKILL.md +18 -27
  85. package/src/teamix-evo-design-uni-manager/boundaries.md +7 -4
  86. package/src/teamix-evo-design-uni-manager/brand.md +1 -1
  87. package/src/teamix-evo-design-uni-manager/components.md +33 -28
  88. package/src/teamix-evo-design-uni-manager/foundations.md +24 -21
  89. package/src/teamix-evo-design-uni-manager/generation-flow.md +46 -8
  90. package/src/teamix-evo-design-uni-manager/patterns/dashboard.md +3 -1
  91. package/src/teamix-evo-design-uni-manager/patterns/detail-page.md +42 -13
  92. package/src/teamix-evo-design-uni-manager/patterns/form-page.md +67 -30
  93. package/src/teamix-evo-design-uni-manager/patterns/list-page.md +73 -40
  94. package/src/teamix-evo-design-uni-manager/patterns/page-types.md +14 -12
  95. package/src/teamix-evo-design-uni-manager/philosophy.md +4 -2
  96. package/src/teamix-evo-design-uni-manager/rules/boundaries.rules.json +3 -3
  97. package/src/teamix-evo-manage/SKILL.md +74 -66
@@ -1,8 +1,10 @@
1
1
  # Page Types — 5 种标准页面类型(uni-manager)
2
2
 
3
+ > ⚠️ **Prerequisites**: 你必须由 [generation-flow.md](../generation-flow.md) Step 2 引导到这里。若未完成 Step 1(需求确认),请先返回。
4
+
3
5
  > AI 生成页面前**必须先识别页面类型**,再选择对应模式。本文档是 generation-flow.md Step 2 的核心输入。
4
6
  >
5
- > uni-manager 与 OpenTrek 五型同构,差异在于:**Dashboard 默认承担"Console Home"**、所有 L1/L2 页面**必须挂在 `um-topbar` 之下**。
7
+ > uni-manager 与 OpenTrek 五型同构,差异在于:**Dashboard 默认承担“Console Home”**、所有 L1/L2 页面**必须挂在 `um-topbar` 之下**。
6
8
 
7
9
  ---
8
10
 
@@ -124,16 +126,16 @@
124
126
 
125
127
  ### 6.4 CRUD 流转速查
126
128
 
127
- | 意图 | 关键词 | 目标页 | 完成后 |
128
- | ---------- | -------------- | ---------------------------- | --------------- |
129
- | 看首页 | 控制台/工作台 | Dashboard (Console Home) | — |
130
- | 查看列表 | 列表/查询/检索 | ListPage | — |
131
- | 查看详情 | 详情/查看/信息 | DetailPage | 可返回列表 |
132
- | 新建 | 新建/创建/新增 | FormPage(新建) | 保存后返回列表 |
133
- | 编辑 | 编辑/修改 | FormPage(编辑) 或 Drawer | 保存后返回原页 |
134
- | 删除 | 删除/移除 | Dialog (输入名称确认) | 确认后刷新列表 |
135
- | 复制 | 复制/克隆 | FormPage(复制新建) | 保存后返回列表 |
136
- | 切换上下文 | 切租户/切区域 | um-topbar 触发 + AlertDialog | URL 改写 + 刷新 |
129
+ | 意图 | 关键词 | 目标页 | 完成后 |
130
+ | ---------- | -------------- | ------------------------------- | --------------- |
131
+ | 看首页 | 控制台/工作台 | Dashboard (Console Home) | — |
132
+ | 查看列表 | 列表/查询/检索 | ListPage | — |
133
+ | 查看详情 | 详情/查看/信息 | DetailPage | 可返回列表 |
134
+ | 新建 | 新建/创建/新增 | FormPage(新建) | 保存后返回列表 |
135
+ | 编辑 | 编辑/修改 | FormPage(编辑) 或 Sheet(抽屉) | 保存后返回原页 |
136
+ | 删除 | 删除/移除 | Dialog (输入名称确认) | 确认后刷新列表 |
137
+ | 复制 | 复制/克隆 | FormPage(复制新建) | 保存后返回列表 |
138
+ | 切换上下文 | 切租户/切区域 | um-topbar 触发 + AlertDialog | URL 改写 + 刷新 |
137
139
 
138
140
  ---
139
141
 
@@ -145,7 +147,7 @@
145
147
  3. **页头不可重复** — 子页面禁止自建 header / topbar,PageHeader / um-topbar 由框架管控(UM1 / UM2)
146
148
  4. **不在内容区直接放 Form 整体** — 必须用 FieldGroup + Field(详见 boundaries.md C7)
147
149
  5. **不在 ListPage / DetailPage 内嵌 Chart 整体** — 图表归属 Dashboard
148
- 6. **不在 FormPage / DetailPage 内嵌 DataTable 整体** — 关联数据通过 Tabs / Drawer 组织
150
+ 6. **不在 FormPage / DetailPage 内嵌 DataTable 整体** — 关联数据通过 Tabs / Sheet(抽屉)组织
149
151
  7. **跨云资源在 ListPage / DetailPage 主区必须有 CloudBadge** — 不可只在 Tooltip 中提示(UM3)
150
152
 
151
153
  ---
@@ -1,6 +1,8 @@
1
1
  # 设计哲学 · Uni-Manager
2
2
 
3
- > 回答**"为什么这么做"**。具体规则见 [boundaries.md](./boundaries.md) / [foundations.md](./foundations.md)。
3
+ > ⚠️ **何时读本文件**: [generation-flow.md](./generation-flow.md) Step 1 强制要求读取。本文件建立“为什么这么做”的认知基础,是后续所有决策的裁判依据。
4
+
5
+ > 回答**“为什么这么做”**。具体规则见 [boundaries.md](./boundaries.md) / [foundations.md](./foundations.md)。
4
6
 
5
7
  ---
6
8
 
@@ -32,7 +34,7 @@ Uni-Manager 是面向**专有云 / 混合云 / 多租户管控平台**的设计
32
34
  > 关键资源操作必须有防护栏。云管平台一次误操作可能影响整片资源。
33
35
 
34
36
  - 危险操作(删除 / 释放 / 停机)二次确认 → `AlertDialog variant="destructive"` + 输入资源名称确认
35
- - 跨租户 / 跨区域操作显式提示(Banner 或 Drawer 顶部)
37
+ - 跨租户 / 跨区域操作显式提示(Banner 或 Sheet 顶部)
36
38
  - 表单未保存离开提示 → `beforeunload`
37
39
  - 无权限操作隐藏或禁用 → `usePermission`
38
40
  - 操作记录可查(OperationLog 全局可访问)
@@ -237,11 +237,11 @@
237
237
  {
238
238
  "id": "C2",
239
239
  "group": "component",
240
- "rule": "Dialog / Sheet / Drawer 必须有 Title",
240
+ "rule": "Dialog / Sheet 必须有 Title",
241
241
  "severity": "ERROR",
242
- "scope": "Dialog|Sheet|Drawer",
242
+ "scope": "Dialog|Sheet",
243
243
  "lintRule": "teamix-evo/dialog-must-have-title",
244
- "boundaryAnchor": "boundaries.md#error-c2--dialog--sheet--drawer-必须有-title",
244
+ "boundaryAnchor": "boundaries.md#error-c2--dialog--sheet-必须有-title",
245
245
  "status": "active"
246
246
  },
247
247
  {
@@ -2,7 +2,7 @@
2
2
  name: teamix-evo-manage
3
3
  description: |
4
4
  Single entry point for the teamix-evo lifecycle: scaffold a new project, install the AI coding system into an existing repo, run / update / inspect / remove any teamix-evo package, and drive the placeholder→real UI migration loop after `npm create teamix-evo`.
5
- TRIGGER when: (CLI) user runs or asks about `teamix-evo tokens ...` / `teamix-evo skills ...` / `teamix-evo ui ...` / `teamix-evo biz-ui ...` / `teamix-evo templates ...` / `teamix-evo logs ...`, or `npm create teamix-evo` / `pnpm create teamix-evo`; (模糊初始化) "初始化一个项目"、"初始化一个工程"、"初始化一个 teamix-evo 工程"、"初始化一个 Teamix Evo 项目"、"create a teamix-evo project"、"set up teamix-evo from scratch"、"new teamix-evo app"; (具名变体初始化) "初始化一个 opentrek 工程 / op 工程 / OpenTrek 项目 / 探索者项目"、"初始化一个云管 / 云管控制台 / 云管项目 / uni-manager 工程 / 云管工程"、"new opentrek/uni-manager project"; (AI coding 接入) "给现有仓库装 teamix-evo"、"现有项目装一下 skills + ui"、"接入 AI coding 体系"、"装 teamix-evo 进这个项目"、"add teamix-evo to existing repo"、"install AI coding system"、"接入 opentrek 研发体系"、"接入 op 研发体系"、"接入 OpenTrek 研发体系"、"接入 opentrek 研发系统"、"接入 op 研发系统"、"接入云管研发体系"、"接入云管研发系统"、"接入 uni-manager 研发体系"、"接入 uni-manager 研发系统"、"接入统一管理研发体系"; (更新检测) "升级 teamix-evo"、"看看哪些要升级"、"update teamix-evo"、"check what needs updating"、"refresh installed teamix-evo packages"; (卸载 / 清单) "卸载 teamix-evo"、"看看装了哪些 teamix-evo 资源"、"remove the design system"、"list installed"; (placeholder→real 升级) "升级 UI"、"接入真组件"、"替换 placeholder"、"upgrade UI"、"replace placeholders"、"swap in real components"、"make the UI real", or user opens / edits `src/components/_placeholder/**`, project contains `.teamix-evo/create/pending-ui.json`, literal `@teamix-evo:placeholder` tag in code; (状态文件) user touches `.teamix-evo/config.json`、`.teamix-evo/manifest.json`、`.teamix-evo/create/pending-ui.json`.
5
+ TRIGGER when: (CLI) user runs or asks about `teamix-evo tokens ...` / `teamix-evo skills ...` / `teamix-evo ui ...` / `teamix-evo biz-ui ...` / `teamix-evo templates ...` / `teamix-evo lint ...` / `teamix-evo logs ...`, or `npm create teamix-evo` / `pnpm create teamix-evo`; (模糊初始化) "初始化一个项目"、"初始化一个工程"、"初始化一个 teamix-evo 工程"、"初始化一个 Teamix Evo 项目"、"create a teamix-evo project"、"set up teamix-evo from scratch"、"new teamix-evo app"; (具名变体初始化) "初始化一个 opentrek 工程 / op 工程 / OpenTrek 项目 / 探索者项目"、"初始化一个云管 / 云管控制台 / 云管项目 / uni-manager 工程 / 云管工程"、"new opentrek/uni-manager project"; (AI coding 接入) "给现有仓库装 teamix-evo"、"现有项目装一下 skills + ui"、"接入 AI coding 体系"、"装 teamix-evo 进这个项目"、"add teamix-evo to existing repo"、"install AI coding system"、"接入 opentrek 研发体系"、"接入 op 研发体系"、"接入 OpenTrek 研发体系"、"接入 opentrek 研发系统"、"接入 op 研发系统"、"接入云管研发体系"、"接入云管研发系统"、"接入 uni-manager 研发体系"、"接入 uni-manager 研发系统"、"接入统一管理研发体系"; (更新检测) "升级 teamix-evo"、"看看哪些要升级"、"update teamix-evo"、"check what needs updating"、"refresh installed teamix-evo packages"; (卸载 / 清单) "卸载 teamix-evo"、"看看装了哪些 teamix-evo 资源"、"remove the design system"、"list installed"; (placeholder→real 升级) "升级 UI"、"接入真组件"、"替换 placeholder"、"upgrade UI"、"replace placeholders"、"swap in real components"、"make the UI real", or user opens / edits `src/components/_placeholder/**`, project contains `.teamix-evo/create/pending-ui.json`, literal `@teamix-evo:placeholder` tag in code; (状态文件) user touches `.teamix-evo/config.json`、`.teamix-evo/manifest.json`、`.teamix-evo/create/pending-ui.json`.
6
6
  SKIP: any content task — generating components, pages, services, or reviewing screens; changes to `src/` files outside the migration loop, design tokens, or business logic. Those go to teamix-evo-code-opentrek or teamix-evo-design-opentrek. SKIP if the user is mid-flow inside an already-initialized project asking to "新增页面 / 加按钮 / 调接口" — that's coding work, not lifecycle. SKIP pure styling / token tweaks — those go to ESLint + `tokens.overrides.css`.
7
7
  Coordinates with: teamix-evo-design-opentrek (visual side after a screen is generated)、teamix-evo-code-opentrek (file placement / reuse rules) — manage is the entry point and precedes content skills, never co-triggers.
8
8
  ---
@@ -18,6 +18,34 @@ Single entry skill for the **teamix-evo** toolkit lifecycle. Covers six scenario
18
18
  5. Uninstall.
19
19
  6. Placeholder → real UI migration loop (post-`npm create teamix-evo`).
20
20
 
21
+ ## 安装方式
22
+
23
+ 本 skill 是 **entry skill**(lifecycle orchestrator),manifest 里声明 `scope: "global"`。**推荐全局安装一次**:
24
+
25
+ ```bash
26
+ npx teamix-evo skills add teamix-evo-manage --scope global
27
+ ```
28
+
29
+ `skills add`(默认 project scope)与 `npm create teamix-evo` **不会**自动装本 skill —— bulk 模式按 scope 自动跳过(ADR 0033)。如果用户在项目级显式 `skills add teamix-evo-manage --scope project`,CLI 给出"推荐 global"warning 但仍装入(用户自负责),代价是后续 IDE 会同时识别全局与项目两份副本。
30
+
31
+ ## 自助升级
32
+
33
+ 升级到最新版本(任何目录可跑 — 自动找全局 meta root):
34
+
35
+ ```bash
36
+ npx teamix-evo@latest skills update # 全部已装
37
+ npx teamix-evo@latest skills update teamix-evo-manage # 只升 manage 一个
38
+ npx teamix-evo@latest skills update --dry-run # 预览,不写盘
39
+ ```
40
+
41
+ `@latest` 让 npx 拉最新 CLI + 最新 `@teamix-evo/skills` 包。命令头部会打印 CLI 版本与 skills 包版本,方便排查 npx cache 与包不同步的问题。
42
+
43
+ 升级范围(ADR 0035 双闸):
44
+
45
+ - 只更新 lock 里**已装**的 skill — 新 skill 用 `skills add <id>` 显式加入,不会被 update 自动装上
46
+ - 只更新 scope 与当前 install scope 一致的 skill — 项目级 update 不会动全局 manage,反之亦然
47
+ - 版本完全一致时短路,不重写源(managed 区域用户改动不被来回备份)
48
+
21
49
  <!-- teamix-evo:managed:start id="core" -->
22
50
 
23
51
  ## 决策树(动手前必看)
@@ -25,7 +53,7 @@ Single entry skill for the **teamix-evo** toolkit lifecycle. Covers six scenario
25
53
  ```text
26
54
  用户的指令命中本 skill
27
55
  ├── 目录里有 `.teamix-evo/`?
28
- │ 是 ──▶ 4 (更新) / 5 (卸载) / 6 (placeholder→real,见 `pending-ui.json`)
56
+ │ 是 ──▶ 4 (更新) / 5 (卸载)
29
57
  │ 否 ──▶ 继续
30
58
  ├── 用户说出业务名 / variant?
31
59
  │ 是 ──▶ 2 (具名变体初始化) — 用「业务名→variant 映射表」推断
@@ -67,21 +95,23 @@ CLI 二进制名 `teamix-evo`,所有命令都从这里发起。命令名以 `tok
67
95
 
68
96
  ### Skills(`@teamix-evo/skills`)
69
97
 
70
- | 目标 | 命令 |
71
- | -------- | ---------------------------------------- |
72
- | 全量装 | `npx teamix-evo skills add` |
73
- | 增量装 | `npx teamix-evo skills add <name...>` |
74
- | 列出全部 | `npx teamix-evo skills list`(alias `ls`) |
75
- | 列出已装 | `npx teamix-evo skills list --installed` |
76
- | 升级 | `npx teamix-evo skills update` |
77
- | 卸载 | `npx teamix-evo skills uninstall [-y]` |
78
- | 漂移检测 | `npx teamix-evo skills doctor` |
79
- | 重新镜像 | `npx teamix-evo skills sync [name...]` |
98
+ | 目标 | 命令 |
99
+ | -------- | ---------------------------------------------------- |
100
+ | 自举 | `npx teamix-evo skills init` |
101
+ | 增量装 | `npx teamix-evo skills add <name...>` |
102
+ | 列出全部 | `npx teamix-evo skills list`(alias `ls`) |
103
+ | 列出已装 | `npx teamix-evo skills list --installed` |
104
+ | 升级 | `npx teamix-evo skills update [name...] [--dry-run]` |
105
+ | 卸载 | `npx teamix-evo skills uninstall [-y]` |
106
+ | 漂移检测 | `npx teamix-evo skills doctor` |
107
+ | 重新镜像 | `npx teamix-evo skills sync [name...]` |
108
+
109
+ > 升级语义见 ADR 0035 双闸:仅升级 lock 已装且 scope 匹配的 skill;version 完全一致时短路;新 skill 用 `skills add <id>` 显式加入。
80
110
 
81
- `skills add` 模式:
111
+ verb 分工(ADR 0034):
82
112
 
83
- - **Bulk**(无位置参数):装 manifest 中所有 skill;已装的项目返回 `already-added`。
84
- - **Incremental**(指定 id):只装列出的 skill;已装的跳过(用 `update` 刷新)。
113
+ - **`skills init`**(无 ids):自举 — 按当前 tokens variant + install scope 装 manifest 里全部符合条件的 skill。已装的工程再跑会返回 `already-initialized`。
114
+ - **`skills add <name...>`**(必填 ids):增量 — 只装列出的 skill;已装的跳过(用 `update` 刷新)。不传 id 会被 commander 拒绝并输出 help
85
115
 
86
116
  首次交互式(无既有配置且无 flag 时):
87
117
 
@@ -100,7 +130,7 @@ CLI 二进制名 `teamix-evo`,所有命令都从这里发起。命令名以 `tok
100
130
 
101
131
  - `ui init` 写 `.teamix-evo/config.json` 的 `packages.ui`(aliases / iconLibrary / tsx / rsc)。可交互元素的 `cursor: pointer` 由组件源码内显式声明,不再有全局 `preferences.css` —— 见 [ADR 0023](docs/adr/0023-cursor-pointer-explicit-in-component-source.md)
102
132
  - `ui add` 自动解析 `registryDependencies`,组件源码写入 `src/components/ui/<id>.tsx`(frozen),并报告还需 `pnpm add` 的 npm 包。
103
- - 没有 `ui upgrade` 子命令 — placeholder→real 迁移由本 skill 的「场景 6」直接驱动,内部调 `ui add`。
133
+ - 没有 `ui upgrade` 子命令 — 组件升级走 `ui add` 覆盖即可。
104
134
 
105
135
  ### 业务组件(`@teamix-evo/biz-ui`)
106
136
 
@@ -129,7 +159,7 @@ CLI 二进制名 `teamix-evo`,所有命令都从这里发起。命令名以 `tok
129
159
  | ---------- | ----------------------------------- |
130
160
  | 分析调用链 | `npx teamix-evo logs analyze [...]` |
131
161
 
132
- - 读 vibe-logger 输出 `.log/ai/**/*.jsonl`,做 AI 调用链可视化。诊断 `runTokensInit` / `runUiAdd` 等编排流程时用。
162
+ - 读 vibe-logger 输出 `.teamix-evo/logs/ai/**/*.jsonl`,做 AI 调用链可视化。诊断 `runTokensInit` / `runUiAdd` 等编排流程时用。
133
163
 
134
164
  ## 场景 1 · 模糊初始化
135
165
 
@@ -156,14 +186,16 @@ npm create teamix-evo@latest <dir> --variant <name>
156
186
 
157
187
  `create-teamix-evo` 的 `console` preset(默认且当前唯一)会自动一站式落地:
158
188
 
159
- | 阶段 | 产物 |
160
- | ---- | ---------------------------------------------------------------------------------------- |
161
- | 1 | Vite + React + TS scaffold(`src/`、`vite.config.ts` 等) |
162
- | 2 | `tokens init <variant>` → 根 `tokens/` 目录(`tokens.theme.css` / `tokens.overrides.css`) |
163
- | 3 | `skills add``.qoder/skills/` + `.claude/skills/`(出厂 3 skill) |
164
- | 4 | `ui init` → `.teamix-evo/config.json` |
165
- | 5 | `ui add button` → 真组件源码;Card / Input / Form / Table `_placeholder/` 占位 |
166
- | 6 | `.teamix-evo/create/pending-ui.json` → 4 placeholder 待迁移 |
189
+ | 阶段 | 产物 |
190
+ | ---- | ---------------------------------------------------------------------------------------------------------- |
191
+ | 1 | Vite + React + TS scaffold(`src/`、`vite.config.ts` 等) |
192
+ | 2 | `tokens init <variant>` → 根 `tokens/` 目录(`tokens.theme.css` / `tokens.overrides.css`) |
193
+ | 3 | `skills add design-<variant> code-<variant>` 项目级装 2 个 variant 内容 skill(manage 不在内,见 ADR 0033) |
194
+ | 4 | `ui init` → `.teamix-evo/config.json` |
195
+ | 5 | `ui add` → 真组件源码(button / card / input / form / table 等) |
196
+ | 6 | `lint init` ESLint + Stylelint 配置 |
197
+
198
+ > 提示:`teamix-evo-manage` 是 entry skill,推荐**全局**装一次(`npx teamix-evo skills add teamix-evo-manage --scope global`)。create CLI 不会装它到 project,scaffold 完成后的 next-steps 会提示用户。
167
199
 
168
200
  **完成后告知用户**:
169
201
 
@@ -173,8 +205,6 @@ pnpm dev # 立刻可跑
173
205
  pnpm typecheck # 验证零类型错误
174
206
  ```
175
207
 
176
- 并提示:「placeholder 占位组件想换真组件?对我说"升级 UI"/"替换 placeholder",我会进入场景 6 逐个迁移。」
177
-
178
208
  ## 场景 3 · AI coding 接入(现有仓库)
179
209
 
180
210
  **触发**:用户已有 React/TS/Vite 仓库(已 `npm install` / 有 `package.json`),只想装 AI coding 体系。
@@ -191,8 +221,8 @@ pnpm typecheck # 验证零类型错误
191
221
  npx teamix-evo tokens list-variants
192
222
  npx teamix-evo tokens init <variant> # 装 tokens(写 tokens/ 与 .teamix-evo/tokens-lock.json)
193
223
 
194
- # 2. skills(同源 Qoder + Claude)
195
- npx teamix-evo skills add # 默认两个 IDE 镜像,project scope
224
+ # 2. 自举 skills(同源 Qoder + Claude;manage 是 global-only,自举自动跳过 — ADR 0033 + 0034)
225
+ npx teamix-evo skills init # 项目级装 design-<variant> + code-<variant>,默认两个 IDE 镜像
196
226
 
197
227
  # 3. 装 ui 配置
198
228
  npx teamix-evo ui init -y
@@ -203,6 +233,7 @@ npx teamix-evo ui add button # 可选:先装一个真组件验
203
233
 
204
234
  - 已装的 skill 列表(从 `skills list --installed`)、tokens variant、ui aliases。
205
235
  - 接下来怎么用:写新页面就触发 `teamix-evo-design-opentrek` / `teamix-evo-code-opentrek`。
236
+ - 若全局尚未安装 entry skill,补一句:`npx teamix-evo skills add teamix-evo-manage --scope global`(ADR 0033)。
206
237
 
207
238
  ## 场景 4 · 更新检测
208
239
 
@@ -214,9 +245,8 @@ npx teamix-evo ui add button # 可选:先装一个真组件验
214
245
  2. 对每个已装包,跑对应 `list --installed`(若有该子命令)与上游 manifest 比对版本。
215
246
  3. 仅对**已装**的包做 update:
216
247
  - `npx teamix-evo tokens update`(stub — 仍提示用户清 + 重装)
217
- - `npx teamix-evo skills update`
218
- - 没有 `ui update`(组件升级走场景 6 的语义合并 + AI 协作)
219
- 4. 检测 `.teamix-evo/create/pending-ui.json` 是否存在;存在则提示「还有 placeholder 未迁移,要现在进入场景 6 吗?」
248
+ - `npx teamix-evo skills update [name...] [--dry-run]` — 双闸 + version 短路 + 可选限定 id(ADR 0035)。先 `--dry-run` 给用户看清单,确认后再无 flag 跑一遍真升级
249
+ - 没有 `ui update`(组件升级走 `ui add` 覆盖即可)
220
250
 
221
251
  **不要**给未安装的包做 install — 那是场景 2/3 的事。
222
252
 
@@ -232,47 +262,25 @@ npx teamix-evo ui add button # 可选:先装一个真组件验
232
262
 
233
263
  `tokens uninstall` 默认保留 `managed` 文件以保护用户编辑;`--keep-files` 完全保留物理文件,只清 manifest。
234
264
 
235
- ## 场景 6 · placeholder → real UI 升级循环
236
-
237
- **触发**:`pending-ui.json` 存在 / 用户说"升级 UI / 替换 placeholder / upgrade UI / replace placeholders" / 用户编辑 `src/components/_placeholder/**` / grep `@teamix-evo:placeholder` 命中。
238
-
239
- **5 步循环**(对 `pendingComponents` 每个条目重复):
240
-
241
- 1. **读** `.teamix-evo/create/pending-ui.json` 拿 `pendingComponents` 列表(每条含 `id` 如 `card` / `input` / `form` / `table` 与当前 placeholder 路径)。
242
- 2. **装真组件**:`npx teamix-evo ui add <id>` → `src/components/ui/<id>.tsx`。**[ADR 0006](docs/adr/0006-ui-upgrade-no-baseline.md)**:无 baseline diff,真组件直接覆盖。
243
- 3. **迁移引用点**:把 `@/components/_placeholder/<Name>` 替换为 `@/components/ui/<id>`。**真组件的 prop API 可能与 placeholder 不同**(prop 名 / 必填项 / slot 形态),逐个 call site 改对。**不要**靠 `as any` 压住类型错误 — prop 差异是有意的。
244
- 4. **删 placeholder 文件** — 全部 import 迁完后删源文件;再 grep 一次旧路径,确认零命中。
245
- 5. **更新** `pending-ui.json`:移除已迁移的条目;`pendingComponents` 空了就删整文件。
246
-
247
- 循环完后:再 grep `@teamix-evo:placeholder` 字面 tag,任何残留都是漏网的占位,要再迁移或删除。
248
-
249
- **告警**:
250
-
251
- - placeholder 顶部的 `@teamix-evo:placeholder` 是字面 canary,不能留进生产代码。
252
- - Form / Table / DataTable 真组件可能需要 Provider(`FormProvider`、`useReactTable` 等)— 在消费侧补 wiring,**不要**把 wiring 包回 `_placeholder/`。
253
- - 每迁完一个组件,跑一次 `pnpm typecheck`,有错先修干净再迁下一个。
254
-
255
265
  ## 配置文件(信息性)
256
266
 
257
- | 路径 | 所有者 | 说明 |
258
- | ------------------------------------ | ---------- | --------------------------------------- |
259
- | `.teamix-evo/config.json` | CLI | 已装包清单、版本、IDE / scope |
260
- | `.teamix-evo/manifest.json` | CLI | 已装资源 ledger;diff / uninstall 的依据 |
261
- | `.teamix-evo/create/pending-ui.json` | create CLI | 场景 6 的迁移清单;迁完即删 |
262
- | `tokens/tokens.overrides.css` | 用户 | 业务自定义 token 覆盖(`frozen`) |
267
+ | 路径 | 所有者 | 说明 |
268
+ | ----------------------------- | ------ | --------------------------------------- |
269
+ | `.teamix-evo/config.json` | CLI | 已装包清单、版本、IDE / scope |
270
+ | `.teamix-evo/manifest.json` | CLI | 已装资源 ledger;diff / uninstall 的依据 |
271
+ | `tokens/tokens.overrides.css` | 用户 | 业务自定义 token 覆盖(`frozen`) |
263
272
 
264
273
  **不要**手编 `config.json` / `manifest.json`,用对应 CLI 子命令。
265
274
 
266
275
  ## 常见错误与恢复路径(P8 — failures must be observable)
267
276
 
268
- | 症状 | 原因 | 恢复路径 |
269
- | -------------------------------------------------- | ------------------------------------------- | ---------------------------------------------------------- |
270
- | `Unknown tokens variant "..."` | 拼写错误或上游未发布该 variant | `npx teamix-evo tokens list-variants` 列出当前可用 |
271
- | `Target directory already contains a .teamix-evo/` | 误用 `npm create teamix-evo` 进已装目录 | 改走场景 4(更新)或场景 3(增量装) |
272
- | `UI not initialized`(跑 `ui add` 时) | 未先跑 `ui init` | `npx teamix-evo ui init -y` 然后再 `ui add` |
273
- | Vite/Tailwind 跑起来没样式 | `src/index.css` 缺少 tokens / Tailwind 导入 | 检查 `src/index.css` 的 `@import` 顺序 |
274
- | `pending-ui.json` 已删但仍有 `_placeholder/` 文件 | 场景 6 中漏迁某个 import | grep `@teamix-evo:placeholder` `_placeholder/` 双管验证 |
275
- | Skills 在 IDE 不触发 | `.qoder/skills/` 或 `.claude/skills/` 漂移 | `npx teamix-evo skills doctor` 然后 `skills sync` |
277
+ | 症状 | 原因 | 恢复路径 |
278
+ | -------------------------------------------------- | ------------------------------------------- | -------------------------------------------------- |
279
+ | `Unknown tokens variant "..."` | 拼写错误或上游未发布该 variant | `npx teamix-evo tokens list-variants` 列出当前可用 |
280
+ | `Target directory already contains a .teamix-evo/` | 误用 `npm create teamix-evo` 进已装目录 | 改走场景 4(更新)或场景 3(增量装) |
281
+ | `UI not initialized`(跑 `ui add` 时) | 未先跑 `ui init` | `npx teamix-evo ui init -y` 然后再 `ui add` |
282
+ | Vite/Tailwind 跑起来没样式 | `src/index.css` 缺少 tokens / Tailwind 导入 | 检查 `src/index.css` 的 `@import` 顺序 |
283
+ | Skills IDE 不触发 | `.qoder/skills/` `.claude/skills/` 漂移 | `npx teamix-evo skills doctor` 然后 `skills sync` |
276
284
 
277
285
  <!-- teamix-evo:managed:end id="core" -->
278
286