@qilitt-mickey/vue3-temp-skill 1.1.30 → 1.1.33

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.
package/README.md CHANGED
@@ -1,16 +1,25 @@
1
1
  # vue3-temp-skill
2
2
 
3
- Vue 3 企业级中后台项目开发规范技能包 按团队规范生成代码并自动审查。
3
+ Vue 3 企业级项目开发技能包。面向 vue3-web-temp 及其派生项目,把产品点子快速做成可演示、可验证、可继续演进的 Demo,同时约束代码质量和设计落地。
4
+
5
+ ## 文档分工
6
+
7
+ | 文档 | 读者 | 内容 |
8
+ |------|------|------|
9
+ | `SKILL.md` | AI | 何时做什么、禁止什么、工作流约束 |
10
+ | `README.md`(本文件) | 维护者 / 人类开发者 | 安装、脚本命令、本地调试、发布 |
11
+ | `references/*.md` | AI(写代码时) | 标准样板、专项细则、硬失败表 |
12
+ | `scripts/modules.json` | 匹配器 + 维护者 | 能力组关键词、同批加载、闸门项 |
4
13
 
5
14
  ## 这是什么
6
15
 
7
- `/vue3-temp-skill <需求>` → 命中模块按约定生成 → `code-quality` 闸门。
16
+ `/vue3-temp-skill <需求>` → 项目探查能力路由按约定实现 → `code-quality` 闸门。
8
17
 
9
18
  - **始终加载** `core-kernel`
10
- - **按需** `project-inventory`(addon / 查 Re* / 装依赖)
11
- - **精简模板启用 addon** `addon-enable`(装包后逐文件恢复配置,非自动)
19
+ - **按需** `project-inventory`(查依赖 / 装包 / 查 Re* 名录)
20
+ - **按需** `addon-enable` — 只有目标项目确实存在排除项、占位插件或缺失接线时才读
12
21
  - **生成后闸门** `code-quality`:清单 + `pnpm lint:fix` + `pnpm type-check` + 结果块
13
- - 复用仓库已有封装;选型表指定库勿擅自替换;addon 精确版本见 inventory 第九节
22
+ - **设计交接** `design-handoff/v1` 时读 `design-handoff`,落地后用 `handoff.mjs` 做轻量校验
14
23
 
15
24
  ## 使用方式
16
25
 
@@ -28,13 +37,64 @@ Vue 3 企业级中后台项目开发规范技能包 — 按团队规范生成代
28
37
 
29
38
  ## 模块一览
30
39
 
31
- | 类型 | 模块 |
40
+ | 类型 | 能力组 |
32
41
  |------|------|
33
42
  | 始终 | core-kernel |
34
43
  | 闸门 | code-quality |
35
- | 按需资产 | project-inventory、**addon-enable** |
36
- | 标准业务 | http-apicrud-pagesdetail-pagedata-writeback、permission-authlayout-theme、design-systemdesign-handoffdesign-verify、icons、feedback-loading、base-code-dict、api-check、ui-components |
37
- | 专项 | form-advanced、table-vxe、tree-table、chart-echarts、file-management、download-export、rich-text、graph-relation、workflow-bpmn、flowchart-g6、data-mapping、websocket-realtime、mobile-h5、wechat-js、verify-captcha、qrcode-barcode、feedback-ui、seamless-scroll、particles、data-compare、data-screen、directives-advanced |
44
+ | 高频 | page-crud、page-detail、data-service、forms、access、design-implementation、shared-ui |
45
+ | 专项 | table-advancedvisualizationworkflowfiles-and-editorsrealtime-and-mobiledata-comparei18n |
46
+ | 工程 | project-setup(project-inventory + addon-enable) |
47
+
48
+ 能力组定义、关键词和参考文件由 `scripts/modules.json` 维护。
49
+
50
+ ## 维护者:扩展能力组
51
+
52
+ 新增能力时先判断能否并入已有组;确需扩展时编辑 `scripts/modules.json`(关键词、`load` 映射),再运行 `npm run validate` 校验。
53
+
54
+ ## 脚本与 npm 命令
55
+
56
+ ### 运行时(AI / 本地调试)
57
+
58
+ | 脚本 | 职责 |
59
+ |------|------|
60
+ | `scripts/match.py` | 能力路由器:输入需求,输出 JSON(`load_files`、同批加载、闸门项) |
61
+ | `scripts/handoff.mjs` | 设计交接:`init` 校验 JSON 并建 session,`check` 校验关键接线 |
62
+
63
+ **匹配器调用(本地环境):**
64
+
65
+ ```bash
66
+ # Windows 优先
67
+ py -3 scripts/match.py "客户列表查询跳转详情" --json
68
+
69
+ # 通用
70
+ python scripts/match.py "客户列表查询跳转详情" --json
71
+ python scripts/match.py --batch # 15 个典型场景回归
72
+ ```
73
+
74
+ **npm 封装:**
75
+
76
+ ```bash
77
+ npm run match # python scripts/match.py
78
+ npm run match:batch # 批量回归
79
+ npm run handoff:init # node scripts/handoff.mjs init(需追加 --project 等参数)
80
+ npm run handoff:check # node scripts/handoff.mjs check
81
+ ```
82
+
83
+ ### 维护者(不随技能安装分发)
84
+
85
+ | 脚本 / 命令 | 职责 |
86
+ |-------------|------|
87
+ | `scripts/validate.mjs` / `npm run validate` | 结构校验:frontmatter、路由引用、交叉引用 |
88
+ | `scripts/check.mjs` / `npm run check` | 发布前检查:validate + match 批量回归 |
89
+ | `scripts/cli.mjs` | 统一入口:`--validate` / `--route` / `--list` |
90
+ | `npm run release` | 先 check,再升版本、提交、发布 npm |
91
+
92
+ ```bash
93
+ node scripts/cli.mjs --list
94
+ node scripts/cli.mjs --route "客户列表跳转详情"
95
+ node scripts/cli.mjs --validate
96
+ npm run check
97
+ ```
38
98
 
39
99
  ## 安装
40
100
 
@@ -44,6 +104,8 @@ Node.js >= 22.12.0
44
104
  npx @qilitt-mickey/vue3-temp-skill@latest install all
45
105
  ```
46
106
 
107
+ 安装器只复制 AI 运行时文件:`match.py`、`modules.json`、`handoff.mjs`。validate / check / cli 留在技能包仓库供维护使用。
108
+
47
109
  | 目标 | 说明 |
48
110
  |------|------|
49
111
  | 个人 Skill 目录 | 安装器写入当前 AI 环境支持的 Skill 目录 |
@@ -51,13 +113,31 @@ npx @qilitt-mickey/vue3-temp-skill@latest install all
51
113
 
52
114
  具体路径因 AI 环境而异,安装完成后以安装器输出为准。
53
115
 
54
- ## 生成工作流(AI)
116
+ ### 设计落地(可选)
117
+
118
+ handoff JSON 可以来自对话、临时文件或管道。状态默认保存在用户级状态目录,**不在业务项目创建 `.handoff/`**:
119
+
120
+ - 默认路径:`~/.workbuddy/state/vue3-temp-skill/<项目哈希>/handoff.json`
121
+ - Windows 示例:`%USERPROFILE%\.workbuddy\state\vue3-temp-skill\<项目哈希>\handoff.json`
122
+
123
+ ```bash
124
+ # 动手前:校验 JSON 规格并建立 session
125
+ node scripts/handoff.mjs init --project ./my-vue-app --file C:/temp/handoff.json
126
+
127
+ # 落地后:确认关键接线存在
128
+ node scripts/handoff.mjs check --project ./my-vue-app --require-session
129
+ ```
130
+
131
+ 也支持显式指定状态目录(适合 CI 或多工作区):追加 `--state-dir <项目外状态目录>`。
132
+
133
+ 通过 npm 包 CLI:
134
+
135
+ ```bash
136
+ npx @qilitt-mickey/vue3-temp-skill handoff init --project ./my-vue-app --file C:/temp/handoff.json
137
+ npx @qilitt-mickey/vue3-temp-skill handoff check --project ./my-vue-app --require-session
138
+ ```
55
139
 
56
- 1. 解析需求 命中功能模块
57
- 2. 读 `core-kernel` + 命中模块;addon 时加读 inventory + **`addon-enable`**;设计交接块时加读 `design-handoff`
58
- 3. 缺包按 inventory 第九节精确版本,确认后安装;**再按 `addon-enable` 逐文件恢复配置**
59
- 4. 复用仓库 Re*/Hook/utils;按模块示例生成落盘
60
- 5. 执行 `code-quality` → 输出审查结果块 + 变更说明
140
+ `handoff.mjs` 只做两件事:确认 JSON 规格完整,确认目标项目存在落地所需关键接线。它不统计改动文件数量,也不要求全项目遍历。
61
141
 
62
142
  ## 与模版的关系
63
143
 
@@ -70,8 +150,8 @@ npx @qilitt-mickey/vue3-temp-skill@latest install all
70
150
  | 本包 `references/` | AI + 开发者 | **标准样板**、专项细则、addon 安装表 |
71
151
  | 本包 `addon-enable.md` | AI + 开发者 | **出厂已删依赖的逐文件恢复代码** |
72
152
 
73
- - 模板仓库:布局壳 + core 依赖 + `Re*` 源码(addon 组件默认不参与类型检查直至安装依赖)
74
- - **标准样板**:在本包 `references/`,不在模板 `views/`
75
- - 壳层以当前项目源码为准;规范与安装表以本包为准
76
- - HTTP:`axios@1.19.0` 固定版本,仅经 `@/utils/http`
153
+ - 模板仓库:布局壳 + `Re*` 源码 + 多种已接线能力;具体依赖和构建状态以目标项目当前源码为准
154
+ - **标准样板**:在本包 `references/`;模板 `views/` 主要用于确认真实接线,不直接复制演示文案
155
+ - 壳层、组件和 API 以当前项目源码为准;规范文档只补充实现方法
156
+ - HTTP:仅经 `@/utils/http`;版本以目标项目 `package.json` 和锁文件为准
77
157
  - **设计协同**:定制 UI 由**设计技能**出稿(含 `design-handoff/v1` JSON)→ 本 Skill 工程落地;不引入其他设计 Skill
package/SKILL.md CHANGED
@@ -1,263 +1,117 @@
1
1
  ---
2
2
  name: "vue3-temp-skill"
3
- description: "Vue 3 企业级中后台项目开发规范技能包。用户通过 /vue3-temp-skill 命令描述需求,AI 自动匹配对应规范模块生成代码,并在生成后自动执行代码质量审查。"
3
+ description: "Vue 3 企业级项目开发技能。面向 vue3-web-temp 及其派生项目,帮助产品经理和前端快速把点子做成可演示、可验证、可继续演进的 Demo;同时约束真实模板复用、代码质量和设计交接落地。"
4
4
  scope: project
5
- tags: [vue3, typescript, element-plus, vant, pinia, vite, unocss, crud, component, api, permission, mobile, code-review, compare]
5
+ agent_created: true
6
+ tags: [vue3, typescript, element-plus, pinia, vite, unocss, crud, demo, code-quality]
6
7
  ---
7
8
 
8
- # Vue 3 项目开发规范技能包
9
+ # Vue 3 项目开发技能
9
10
 
10
- 执行顺序:运行 `python scripts/match.py "<需求>"` 获取精确匹配 → 按 `load_files` 读参考文件 → 生成 → 按 `quality_gates` 检查 → 执行 `code-quality` → 回复含审查结果块。
11
+ ## 目标
11
12
 
12
- > **模块路由优先用脚本**:`python scripts/match.py "需求描述"` 输出 JSON,含命中模块、同批加载、闸门项、加载文件清单。AI 按此结果加载文件,不自行推理匹配。无 Python 环境时回退至下方路由表手动匹配。
13
+ 把产品点子快速落到真实 Vue 3 项目中,先形成客户可看的完整 Demo,再保留后续正式开发所需的代码边界。页面可以使用 mock 和最小数据,但不得使用模板演示噪音、虚构项目能力或堆叠无法维护的代码。
13
14
 
14
- ### 脚本工具
15
+ ## 触发方式
15
16
 
16
- | 命令 | 用途 |
17
- |------|------|
18
- | `python scripts/match.py "<需求>"` | **运行时匹配器**(AI 调用):输出命中模块、同批加载、闸门项、文件清单 |
19
- | `python scripts/match.py --batch` | 批量测试 15 个典型场景 |
20
- | `npm run check` | **发布前全量检查**(5 项任一失败即中断) |
21
- | `npm run validate` | 结构校验:frontmatter、路由表一致性、孤立模块、交叉引用 |
22
- | `npm run audit` | 命中精度审计:关键词重叠、盲区、模块评分、边界冲突 |
23
- | `npm run content` | 内容可用性审计:样板完整性、Must-do 清单 |
24
- | `npm run deps` | 依赖图分析:断链、循环依赖、引用热度 |
25
- | `npm run match:batch` | 批量测试(npm 封装) |
26
- | `node scripts/cli.mjs --list` | 列出所有可用命令 |
27
-
28
- > `npm run release` 会自动先执行全量检查,通过后才升版本、提交、发布。
29
-
30
- ## 术语约定
31
-
32
- 全文统一使用下表术语;不得使用「黄金样板 / 强制完整样板 / 抗略读 / 默记 / 真相源」等表述。
33
-
34
- | 统一术语 | 含义 | 禁止使用 |
35
- |----------|------|----------|
36
- | 标准样板 | 模块内完整代码样板,命中即整段落盘 | 黄金样板、强制完整样板 |
37
- | 完整性守则 | 全模块通用的防浅读规则 | 抗略读 |
38
- | 速查约定 | 高频写法的快速指引 | 默记 |
39
- | 权威性优先级 | 实现方式选取顺序:仓库封装 > 本 Skill 示例 > 通用 Vue 习惯 | 真相源 |
40
- | 回退至 | 缺档取值动作(如「缺档 → 回退至 default」) | 缺档场景的「落到」 |
41
- | 未命中模块 | 需求无对应专项模块时的路由结果 | 「兜底」指代路由结果 |
42
-
43
- ## 模版约定
44
-
45
- - 面向由 **vue3-web-temp** 脚手架搭出的业务项目(目录名/安装路径因人而异,以当前工作区为准)
46
- - **文档分工**:人类读模板 `README.md`;AI 读模板 `AGENTS.md` + 本 Skill;样板与细则在本包 `references/`
47
- - **设计协同**:定制 UI 由**设计技能**出稿(含 `design-handoff/v1` JSON)→ 本 Skill 工程落地;不引入其他设计 Skill
48
- - **精简出厂**:模板 `views/` 仅保留登录/首页等壳页面;**业务标准样板**在本包 `references/`(如 `crud-pages`、`detail-page`)
49
- - **依赖分层**:`package.json` 仅 **core**;**addon** 默认不装;缺包时装依赖后须按 `addon-enable.md` **逐文件恢复配置**(非自动)
50
- - 壳层行为(顶部 tag / 侧栏 / keep-alive / `useDetail`)以**当前项目**已有实现为准
51
- - **双轨**:无设计 handoff → 保持模版出厂;有设计落地 → 读 `design-handoff.md` 逐文件修改清单(含 1:1 还原要求 F1-F14 / P1-P7)+ `design-verify.md` 还原度验证
52
- - **设计优先级**:当设计技能产出(`design-handoff/v1` JSON)存在时,视觉层面(布局/间距/圆角/阴影/色彩/组件结构)以设计技能产出为准,本技能出厂默认值按设计产出替换。详见下方「设计优先级与 handoff 强制执行」段
53
-
54
- ## 使用方式
55
-
56
- ```
17
+ ```text
57
18
  /vue3-temp-skill <自然语言需求>
58
19
  ```
59
20
 
60
- ## 项目优先
61
-
62
- 1. 先读 `references/core-kernel.md`
63
- 2. 复用仓库已有 `Re*` / Hook / utils;选型表指定库勿擅自替换
64
- 3. 按命中模块内**标准样板**整段编写(禁止只抄 API 签名、丢掉 meta/配套段落)
65
- 4. 无对应能力 标注「待确认」,未经同意不引入新依赖
66
- 5. 权威性优先级:`仓库已有封装` > `本 Skill 示例` > 通用 Vue 习惯
67
- 6. 命中 addon / 缺依赖:读 `project-inventory` 第九/十节 + **`addon-enable.md`**(逐文件恢复代码);精确版本安装,禁止 `@latest`
68
-
69
- ## 完整性守则(全模块强制)
70
-
71
- 按需模块 可浅读。命中即须落到该文件的**标准样板 / Must-do**,生成后靠 `code-quality` 硬失败表兜底。
72
-
73
- 1. **样板字段默认写出**:示例里写明的 `activePath` / `keepAlive` / `roles` / `responseType: "blob"` 等不得改成 `//` 注释再当可选项;仅业务明确不需要时才删除
74
- 2. **关联能力同批落盘**:列表→详情 = `crud-pages` + `detail-page` 三件套;有 API = 同步 `http-api`;有删除 = 确认框;有编辑回显 = `Object.assign`
75
- 3. **Hook 壳层自动**:`toDetail` tag;侧栏高亮 / keepAlive 靠路由 meta;`http` 加解密靠环境开关,不靠单请求配置
76
- 4. **大范围交付仍须逐模块核对硬失败表**,禁止以 lint 通过代替硬失败表逐项核对
77
-
78
- ## 设计落地(handoff)
79
-
80
- 设计技能每次产出时**始终自动附加 `design-handoff/v1` JSON**。本技能检测到 JSON 后**强制加载** `references/design-handoff.md`,按 C/T/F/Co/S/P 六步全流程执行(配置→令牌→框架→共享组件→样式→页面),**任一步跳过 = 硬失败**。执行完毕后**强制加载** `references/design-verify.md` 逐项验证还原度(区域级 + 逐属性 CSS 校验)。设计产出优先级高于本技能出厂默认值,页面保留业务逻辑、重写视觉结构。用户无需提及「JSON」或「handoff」——这是两技能间的自动协议。完整规则与逐项清单见 `design-handoff.md`,验证流程见 `design-verify.md`。
21
+ 典型需求:
22
+
23
+ - 开发客户管理列表,支持搜索、分页、编辑和详情
24
+ - 做一个有设计感的订单仪表盘,沿用设计 handoff
25
+ - 给现有 Demo 增加附件上传、导出或审批流
26
+ - 把一个页面从 mock 改成真实 API
27
+
28
+ ## 运行时只保留三件事
29
+
30
+ 1. **项目探查**:读取目标项目的 `package.json`、路由、页面、`Re*` 组件、Hooks、API 和样式;以源码事实为准。
31
+ 2. **能力路由**:运行 `scripts/match.py "需求" --json`,**仅**按输出中的 `load_files` 阅读 reference;禁止自行展开全部 `references/`。无 Python 时按下方能力组表手动匹配。
32
+ 3. **质量闸门**:代码完成后读取 `references/code-quality.md`,执行清单和项目命令;有设计 handoff 时完成交接检查(init → 改代码 → check exit 0)。
33
+
34
+ ## 能力组路由
35
+
36
+ | 能力组 | 覆盖内容 | 主要参考文件 |
37
+ |---|---|---|
38
+ | `page-crud` | 常规列表、筛选、分页、表格操作 | `crud-pages.md` |
39
+ | `page-detail` | 独立详情/编辑页、顶部标签、路由 meta | `detail-page.md` |
40
+ | `data-service` | HTTP、API、类型、mock、联调 | `http-api.md`、`api-check.md` |
41
+ | `forms` | 表单、弹窗、远程选择、回显、字典、反馈 | `form-advanced.md`、`data-writeback.md`、`base-code-dict.md`、`feedback-loading.md` |
42
+ | `access` | 权限、认证页面 | `permission-auth.md`、`auth-pages.md` |
43
+ | `design-implementation` | 设计 handoff、主题、布局、组件样式 | `design-handoff.md`、`design-system.md`、`layout-theme.md` |
44
+ | `shared-ui` | Re*、图标、通用展示和指令 | `ui-components.md`、`icons.md`、`feedback-ui.md`、`directives-advanced.md` |
45
+ | `table-advanced` | 树表、VXE 表格 | `tree-table.md`、`table-vxe.md` |
46
+ | `visualization` | 图表、大屏、关系图谱 | `chart-echarts.md`、`data-screen.md`、`graph-relation.md` |
47
+ | `workflow` | BPMN、G6 流程图、字段映射 | `workflow-bpmn.md`、`flowchart-g6.md`、`data-mapping.md` |
48
+ | `files-and-editors` | 附件、预览、下载、富文本、二维码 | `file-management.md`、`download-export.md`、`rich-text.md`、`qrcode-barcode.md` |
49
+ | `realtime-and-mobile` | WebSocket、移动端、微信、验证码、动效 | 对应专项 reference |
50
+ | `data-compare` | 编辑页变更对比和汇总 | `data-compare.md` |
81
51
 
82
- ### 项目级模式 vs 单页模式
83
-
84
- 通过 JSON 的 `meta.transformScope` 字段自动识别改造范围:
85
-
86
- | 模式 | 触发条件 | 执行范围 | 关键规则 |
87
- |------|---------|---------|---------|
88
- | **单页模式**(默认) | `transformScope: "single-page"` 或未设置 | C/T/F/Co/S + 单个页面 P 步骤 | 只改造当前对话涉及的页面,框架/共享组件若已改造则跳过 |
89
- | **项目级模式** | `transformScope: "project"` | C/T/F/Co/S(全局一次) + **全页面遍历改造** | 先扫描全部路由,构建页面清单,逐页面执行 P 步骤,全部完成后做全量校验 |
90
-
91
- **项目级模式核心规则**:
92
- 1. 先扫描 `src/router/modules/` 所有路由文件,构建页面清单
93
- 2. C/T/F/Co/S 是全局的,只执行一次(框架 + 共享组件)
94
- 3. 逐页面执行 P1-P7,每页标记 `status: completed`
95
- 4. 单次对话改不完时,输出进度 + 待改造页面清单,用户说「继续」时从断点恢复
96
- 5. **禁止在未完成全部页面前声称任务完成**——必须明确告知进度和剩余页面
97
-
98
- ### 设计概念 → 项目组件映射
99
-
100
- 设计 skill 定义了"表格工具栏""操作列""导航栏"等设计概念,本技能通过映射表自动找到项目中对应的组件进行修改。映射表见 `design-handoff.md` 第八章(共享组件级落地)。共享组件在 Co 步骤(F 步骤之后、S 步骤之前)统一修改,**一处修改,全局生效**,不需要在每个页面重复处理。
101
-
102
- ### 设计产出落盘范围
103
-
104
- 设计落地时,所有修改只落在 `src/`、`public/`、`platform-config.json` 等业务代码中:
105
- - ✅ 设计规范读取**设计技能**的 `references/` 文件,不另存到项目
106
- - ✅ 设计产出 HTML 仅在对话中作为参考对照,**不写入项目文件**
107
- - ❌ 不得把设计 HTML / 规范文档写入项目内非业务目录
108
-
109
- 违反此规则即硬失败。
110
-
111
- ## 模块路由表
52
+ ## 工作流
112
53
 
113
- ### 始终加载
54
+ ### 1. 识别目标和范围
114
55
 
115
- | 模块 | 文件 |
116
- |------|------|
117
- | **core-kernel** | `references/core-kernel.md` |
56
+ - 确认目标项目根目录;没有明确目标时先询问,不在技能仓库里写业务代码。
57
+ - 判断是 Demo 验证、功能增量还是正式业务开发。
58
+ - 判断是否有设计稿或 `design-handoff/v1` JSON。没有时保留目标项目当前初始化视觉;有时按设计要求落地,不让开发技能自行设计。
118
59
 
119
- ### 按需加载
60
+ ### 2. 读取事实
120
61
 
121
- | 时机 | 文件 |
122
- |------|------|
123
- | addon / 查 Re* 名 / 装依赖 | `references/project-inventory.md` |
124
- | **启用精简模板已删的 addon(装包 + 改配置)** | `references/addon-enable.md`(与功能模块同读) |
125
- | 写完代码后(闸门,非功能命中) | `references/code-quality.md` |
126
- | 设计交接块 / **design-handoff/v1 JSON** / 上游令牌产出落地 | `references/design-handoff.md`(逐文件修改清单)+ `design-verify.md`(还原度验证)+ `design-system.md`(项目设计系统说明) |
127
- | **设计模式**(设计 Skill 产出存在时触发) | `crud-pages.md` 设计模式样板 + `design-handoff.md` 1:1 还原要求(F1-F14 / P1-P7) |
62
+ - 先读 `references/core-kernel.md`。
63
+ - 运行 `scripts/match.py "需求" --json`,按 `load_files` 阅读。
64
+ - 读取目标项目当前 `package.json` 和锁文件;不要根据“core/addon”标签猜依赖是否存在。
65
+ - 扫描已有 `Re*`、Hooks、`src/api`、路由和相关页面;已有封装优先于技能示例。
128
66
 
129
- ### 标准业务面
67
+ ### 3. 实现闭环
130
68
 
131
- | 模块 | 关键词 |
132
- |------|--------|
133
- | **http-api** | 接口、http、加密、API、请求、响应、axios |
134
- | **crud-pages** | 列表、表格、查询、管理、CRUD、新增、行编辑、操作列、行操作、分页、筛选、批量、排序 |
135
- | **detail-page** | 详情、编辑页、查看页、新开路由、toDetail、activePath、showLink、顶部 tag、跳转 |
136
- | **data-writeback** | 回显、回填、回写、useFormCheck、编辑数据 |
137
- | **permission-auth** | 权限、v-auth、roles、ReAuth、按钮权限、页面权限、角色可见 |
138
- | **layout-theme** | 布局、主题、暗黑、`--vts-*`、UnoCSS、夜间模式、换肤、侧栏、标签页、面包屑 |
139
- | **design-system** | 设计规范、UI 规范、按 XX 规范适配、design-tokens、主题色系、令牌体系、暗色模式 |
140
- | **icons** | 图标、svg-icon、Iconify、ReIconPicker、菜单图标、icon |
141
- | **feedback-loading** | message、loading、确认框、提示、加载、操作反馈、骨架屏 |
142
- | **base-code-dict** | 字典、baseCode、码表、下拉字典、数据字典 |
143
- | **api-check** | 联调、mock、契约、对接后端、接口核对 |
144
- | **i18n-localization** | 国际化、多语言、i18n、vue-i18n、locale、语言切换、语言包、useI18n、ReLanguageSwitch |
145
- | **auth-pages** | 登录、注册、忘记密码、重置密码、认证、auth、login、register、signup、forgot-password、找回密码(**设计自由,仅规范流程**) |
146
- | **ui-components** | 新建 Re*、type.ts、组件目录;**用法见各功能模块**(本文件仅索引) |
69
+ - 页面、路由、API、类型、mock 和共享组件按一个业务闭环实现。
70
+ - 列表使用 `useTableSearch`、`ReTableBar`、`RePagination`;有独立详情时同步完成 `useDetail` 与路由 meta。
71
+ - HTTP 只经过 `@/utils/http`,响应按项目实际 `Result<T>` 约定处理。
72
+ - Demo 可以最小化数据和接口,但目录、类型、命名和组件边界要能承接后续开发。
73
+ - 新依赖先检查目标项目;缺失时说明精确版本、原因和构建接线,确认后再安装。
74
+ - 只有目标项目确实存在排除项、占位插件或缺失接线时,才读取 `addon-enable.md` 恢复配置。
147
75
 
148
- ### 专项能力包
76
+ ### 4. 设计交接
149
77
 
150
- | 模块 | 关键词 |
151
- |------|--------|
152
- | **tree-table** | 树表、ReTreeLine、handleTree、树形、树状、层级表格、组织架构、部门树 |
153
- | **table-vxe** | vxe、高性能表格、虚拟滚动、虚拟表格、大数据表格、单元格编辑 |
154
- | **form-advanced** | 弹窗、对话框、抽屉、ReDialog、ReDialogResize、锚点、卡片选择、地址解析、ReSelectQuery、级联、远程搜索、下拉选择、高级表单、步骤条、折叠面板、穿梭框、分步表单、联动、动态表单、日历、时间选择、日期选择、拖动、拖拽排序 |
155
- | **data-compare** | v-compare、变更汇总、变更对比、数据对比、字段对比、高亮变更 |
156
- | **file-management** | 附件、ReAttachment、ReFileViewer、预览、上传、文件上传、图片上传、断点续传、分片上传、打印、截图、视频播放、音频 |
157
- | **download-export** | 导出、excel、blob、下载文件、下载、导出Excel |
158
- | **rich-text** | 富文本、wangeditor、ReRichText、编辑器、Markdown |
159
- | **chart-echarts** | echarts、图表、ReEchart、折线图、柱状图、饼图、统计图、雷达图、散点图、热力图、趋势图、地图、甘特图 |
160
- | **data-screen** | 大屏、dataScreen、数据大屏、看板、数据看板、仪表盘、全屏可视化 |
161
- | **graph-relation** | 图谱、relation-graph、关系图、知识图谱、关系网络 |
162
- | **workflow-bpmn** | bpmn、流程审批、审批流、工作流、审批流程 |
163
- | **flowchart-g6** | g6、流程图、拓扑图、antv、自定义流程图、流程设计 |
164
- | **data-mapping** | jsplumb、字段映射、连线映射、数据映射 |
165
- | **websocket-realtime** | websocket、ws、实时、消息推送、实时推送、在线状态 |
166
- | **mobile-h5** | 移动端、H5、vant、vconsole、手机 |
167
- | **wechat-js** | 微信、weixin、wechat、js-sdk |
168
- | **verify-captcha** | 验证码、滑块、短信验证、拖拽验证、图片验证码 |
169
- | **qrcode-barcode** | 二维码、条形码、扫码 |
170
- | **feedback-ui** | 通知栏、水印、时间轴、打字机、展示组件、空状态 |
171
- | **seamless-scroll** | 无缝滚动、跑马灯、marquee、滚动公告 |
172
- | **particles** | 粒子、tsparticles、登录背景粒子、粒子动画 |
173
- | **directives-advanced** | 一键复制、复制、标题字号自适应、字号自适应 → `v-copy` / `v-auto-font` |
78
+ - 发现 `$schema: design-handoff/v1` 后,读取 `references/design-handoff.md`。
79
+ - 动手前初始化 handoff session;设计决定视觉、结构和交互意图,本技能只负责映射到真实模板并保留业务逻辑。
80
+ - 只修改 handoff 明确覆盖的文件和页面;不为通过检查虚构修改、不强制全项目遍历。
81
+ - 项目级视觉改造只有在用户明确要求时才执行;单页 Demo 默认只处理当前页面及必要共享组件。
174
82
 
175
- ### 匹配规则
83
+ ### 5. 验证与交付
176
84
 
177
- 1. 单模块 → 该模块 + `core-kernel`;结束后执行 `code-quality`
178
- 2. 多模块 同时加载(例:客户列表 = `crud-pages` + `permission-auth` + `http-api`)
179
- 3. 未命中模块 `core-kernel`,向用户确认是否专项
180
- 4. 默认不改 `vite.config.ts` / `build/**`;**例外**:按 `addon-enable.md` 恢复 FileViewer / VantResolver / Vconsole 等占位插件时允许改 `build/plugins/*`
181
- 5. 效果匹配:
182
- - 启用 echarts / vant / file-viewer / 富文本等已删 addon → 功能模块 + **`addon-enable`**
183
- - 弹窗、对话框、抽屉 → `form-advanced`
184
- - 远程搜索下拉、级联选择 → `form-advanced`
185
- - 步骤条、分步表单、穿梭框、折叠面板、动态表单 → `form-advanced`
186
- - 日历、时间选择、日期选择、联动 → `form-advanced`
187
- - 点一下复制 → `directives-advanced`(`v-copy`)
188
- - 标题字跟着宽度变小 → `directives-advanced`(`v-auto-font`)
189
- - 角色可见、按钮权限 → `permission-auth`
190
- - 变更对比、数据对比 → `data-compare`
191
- - 导出、下载文件 → `download-export`
192
- - 菜单/本地图标 → `icons`
193
- - 粒子背景 → `particles`
194
- - 树形列表、层级表格、组织架构、部门树 → `tree-table`
195
- - 虚拟滚动、大数据表格 → `table-vxe`
196
- - 骨架屏 → `feedback-loading`
197
- - 空状态 → `feedback-ui`
198
- - 标签页、面包屑 → `layout-theme`
199
- - 批量操作、表格排序 → `crud-pages`
200
- - 趋势图、地图、甘特图 → `chart-echarts`
201
- - 附件上传、断点续传 → `file-management`
202
- - 按 XX / UI 规范适配、设计交接块、整站风格重构 → `design-system`(项目设计系统说明)+ `layout-theme`;有令牌/交接产出时加读 `design-handoff.md`(逐文件修改清单,含 C/T/F/Co/S/P 全流程 + 共享组件映射 + 项目级模式)+ `design-verify.md`(还原度验证)
203
- - 列表→独立详情/编辑页 → `crud-pages` + `detail-page`
204
- - 图表(折线/柱状/饼图) → `chart-echarts`
205
- - 数据大屏、看板 → `data-screen`
206
- - 实时推送、在线状态 → `websocket-realtime`
207
- - BPMN 流程、审批、工作流 → `workflow-bpmn`
208
- - 自定义流程图、流程设计、拓扑 → `flowchart-g6`
209
- - 国际化、多语言、i18n、语言切换 → `i18n-localization`
210
- - 注册、忘记密码、重置密码、认证 → `auth-pages`(设计自由,仅规范流程;含验证码 → `verify-captcha`)
211
- - 打印、截图 → `file-management`(ReFileViewer)
212
- - 视频播放、音频 → `file-management`(ReFileViewer 文件预览)
213
- 6. 独立详情路由:跳转与 meta 见 `detail-page`(`toDetail` / `showLink` / `activePath` / `initToDetail`)
85
+ - 对照 `references/code-quality.md` 检查类型、组件复用、API、路由、权限、安全、异常反馈、响应式和可演进性。
86
+ - 在目标项目执行 `pnpm lint:fix`、`pnpm type-check`;改动构建配置时再执行 `pnpm build`。
87
+ - handoff 时:落地前 init session,完成后 handoff check(`--require-session`)须 **exit 0** 才能声称设计落地完成。
88
+ - 最终说明:命中能力组、修改文件、功能验证、设计落地范围、命令结果、未解决问题和下一步。
214
89
 
215
- ## 速查约定(细则见对应模块)
90
+ ## 项目事实优先级
216
91
 
217
- - HTTP:`import { http } from '@/utils/http'`;方法跟后端(允许 GET/POST);`Result<T>`;`VITE_API_BASE_URL` `http-api`
218
- - 列表:`onSearch` / `reset` + 标准样板 → `crud-pages`
219
- - 独立详情:`toDetail` **不能替代** `activePath` / `keepAlive` / `moreTags`;三件套 → `detail-page`
220
- - 权限:`meta.roles` + `v-auth`/`ReAuth` → `permission-auth`
221
- - 不二次挂 Layout;`script setup` + `defineOptions({ name })`;`$t('中文')`;样式契约 → `core-kernel`
92
+ `目标项目当前源码` > `目标项目 package.json / 锁文件` > `本 Skill reference` > `通用 Vue 习惯`。
222
93
 
223
- ## 工作流
94
+ ## 默认禁止
224
95
 
225
- 1. **需求分析**:列出功能模块 ID(不含 `code-quality`)
226
- 2. **加载**:`core-kernel` + 命中模块;addon/缺包时加读 `project-inventory` + **`addon-enable`**;**检测 design-handoff/v1 JSON 是否存在** — 若存在,强制加载 `design-handoff`(逐文件修改清单,含 C/T/F/Co/S/P 全流程 + 共享组件映射 + 项目级模式)+ `design-verify`(还原度验证)+ `design-system.md`,并按设计产出优先级执行
227
- 3. **模式判断**:有 handoff JSON 时,读取 `meta.transformScope`:
228
- - `project` 进入**项目级模式**:先扫描 `src/router/modules/` 构建页面清单,输出「待改造页面清单」供用户确认
229
- - `single-page` 或未设置 单页模式,仅处理当前页面
230
- 4. **依赖**:缺包按 inventory 第九节精确版本,确认后安装;**再按 `addon-enable` 对应章节改配置**
231
- 5. **探查**:复用仓库 `Re*` / Hook / utils;**项目级模式下**,探查所有共享组件(ReTableBar / ReTableOperate / RePagination 等)的当前实现
232
- 6. **生成**:
233
- - 单页模式:C/T/F/Co/S + 当前页面 P 步骤
234
- - 项目级模式:C/T/F/Co/S(全局一次) + 逐页面执行 P 步骤,标记完成状态
235
- - **有 handoff JSON 时,页面结构以设计输出为准,保留业务逻辑**
236
- 7. **设计还原度验证**:有 handoff JSON 时必须执行,加载 `design-verify.md` 按其流程逐区域逐元素对照设计规范验证(10.1-10.7 区域级 + 10.8 逐属性 CSS 校验),输出「设计还原度验证报告」+「逐属性 CSS 校验报告」,未通过项必须修正
237
- 8. **功能完整性核查**:有 handoff JSON 时必须执行,按 `design-handoff.md` 第十一章逐项核查功能是否正常(框架/共享组件/页面),样式改造不得破坏原有功能,发现问题立即修正
238
- 9. **code-quality**:按 `references/code-quality.md` 执行;**有 handoff JSON 时,额外执行 handoff 落地完整性校验**(项目级模式需校验全页面完成度 + 共享组件修改 + 设计还原度 + 功能完整性)
239
- 10. **输出**:变更说明(含已改配置文件列表)+ 设计还原度验证报告 + 逐属性 CSS 校验报告 + 功能完整性核查报告 + 待确认项;**项目级模式未全部完成时,输出进度 + 待改造页面清单 + 「继续」指令提示**
96
+ - 不在页面内直接使用 `axios` / `fetch`,不虚构 API 前缀。
97
+ - 不二次挂载 `Layout`,不把模板演示页原样当业务页面。
98
+ - 不使用裸 `v-if` 代替权限指令,不使用不可信 `v-html`。
99
+ - 不为了视觉效果引入未经确认的新 UI 框架或图表库。
100
+ - 不把 lint 通过当成业务闭环完成,也不把 handoff 文件修改数量当成设计质量证明。
240
101
 
241
- ### 最终回复结构
102
+ ## 最终回复格式
242
103
 
243
104
  ```markdown
244
- ## 命中模块
245
- - <功能模块…>(缺包时含 addon-enable)
246
-
247
- ## 代码质量审查
248
- - 闸门:已执行 code-quality(生成后)
249
- - 清单:选型 / 类型 / 组件 / API / 安全 / 业务 / 列表→详情(如适用) / 列表布局(如适用) / 风格 / addon启用(如适用) → 通过 | 已修正:…
250
- - 硬失败:无 | 已拦截并修正:…
251
- - handoff 落地(如有 JSON):C/T/F/Co/S/P 全流程已执行 → 通过 | 未完成项:…(硬失败)
252
- - 还原度验证(如有 JSON):design-verify.md 区域级 + 逐属性校验已执行 → 通过 | 偏差项:…(已修正 / 待确认)
253
- - 命令:`pnpm lint:fix` → …;`pnpm type-check` → …
254
- - 待确认:…
105
+ ## 命中能力组
106
+ - page-crud / data-service / ...
255
107
 
256
108
  ## 变更说明
257
- -
258
- - 移除/新增元素(如有 handoff):按设计输出移除了…/新增了…(供用户确认)
109
+ - `src/...`:...
110
+
111
+ ## 验证结果
112
+ - 功能:...
113
+ - 设计交接:未涉及 | 已按 handoff 落地 ...
114
+ - `pnpm lint:fix`:通过 | 失败(原因)
115
+ - `pnpm type-check`:通过 | 失败(原因)
116
+ - 待确认:...
259
117
  ```
260
-
261
- ## 文件索引
262
-
263
- `references/<模块名>.md` 与路由表 ID 一一对应。依赖安装见 `project-inventory.md` 第九节;**精简模板配置恢复见 `addon-enable.md`**。
package/bin/cli.js CHANGED
@@ -21,13 +21,15 @@
21
21
  const fs = require("fs");
22
22
  const path = require("path");
23
23
  const os = require("os");
24
- const { execSync } = require("child_process");
24
+ const { execFileSync, execSync } = require("child_process");
25
25
 
26
26
  const HOME = os.homedir();
27
27
  // bin/cli.js → 上一级即包根目录
28
28
  const SKILL_DIR = path.resolve(__dirname, "..");
29
29
  const SKILL_NAME = "vue3-temp-skill";
30
30
  const TRACK_FILE = path.join(HOME, ".vue3-temp-skill.json");
31
+ // 只复制 AI 运行时真正需要的文件;validate/check/cli 属于作者侧工具,不随技能分发
32
+ const RUNTIME_SCRIPT_FILES = ["match.py", "modules.json", "handoff.mjs"];
31
33
 
32
34
  // ============================================================
33
35
  // 版本
@@ -251,6 +253,15 @@ function installSkills(targetKey, projectDir) {
251
253
  copyDir(refsSrc, path.join(dest, "references"));
252
254
  }
253
255
 
256
+ const scriptsSrc = path.join(SKILL_DIR, "scripts");
257
+ if (fs.existsSync(scriptsSrc)) {
258
+ const scriptsDest = path.join(dest, "scripts");
259
+ ensureDir(scriptsDest);
260
+ for (const file of RUNTIME_SCRIPT_FILES) {
261
+ copyFile(path.join(scriptsSrc, file), path.join(scriptsDest, file));
262
+ }
263
+ }
264
+
254
265
  // Cursor:清理旧版 rules/*.mdc,避免与 skills 重复
255
266
  if (cfg.legacyRulesFile) {
256
267
  const legacy = cfg.legacyRulesFile(projectDir);
@@ -337,6 +348,8 @@ ${bold("命令:")}
337
348
  update [target] 更新已安装的技能(默认更新全部已安装目标)
338
349
  uninstall [target] 卸载技能(默认卸载全部已安装目标)
339
350
  list 查看已安装的目标和版本
351
+ handoff init 校验 handoff JSON 规格,在用户级目录建立会话(不污染业务项目)
352
+ handoff check 确认目标项目存在设计落地所需的关键接线
340
353
 
341
354
  ${bold("目标 (target):")}
342
355
  cursor → Cursor ~/.cursor/skills/
@@ -370,8 +383,9 @@ ${bold("示例:")}
370
383
  ${dim("# 查看已安装情况")}
371
384
  npx @qilitt-mickey/vue3-temp-skill list
372
385
 
373
- ${dim("# 卸载")}
374
- npx @qilitt-mickey/vue3-temp-skill uninstall cursor
386
+ ${dim("# 设计交接(在业务项目根目录执行)")}
387
+ npx @qilitt-mickey/vue3-temp-skill handoff init --project ./my-app --file C:/temp/handoff.json
388
+ npx @qilitt-mickey/vue3-temp-skill handoff check --project ./my-app --require-session
375
389
  `);
376
390
  }
377
391
 
@@ -591,6 +605,36 @@ function cmdList() {
591
605
  }
592
606
  }
593
607
 
608
+ function cmdHandoff(sub, args, projectDir) {
609
+ const proj = projectDir || process.cwd();
610
+ const fileIdx = args.indexOf("--file");
611
+ const handoffFile = fileIdx !== -1 ? path.resolve(args[fileIdx + 1]) : null;
612
+ const stateDirIdx = args.indexOf("--state-dir");
613
+ const stateDir = stateDirIdx !== -1 ? path.resolve(args[stateDirIdx + 1]) : null;
614
+ const requireSession = args.includes("--require-session");
615
+ const scriptDir = path.join(SKILL_DIR, "scripts");
616
+
617
+ if (sub !== "init" && sub !== "check") {
618
+ console.error(red("✗ handoff 子命令: init | check"));
619
+ console.error(dim(" handoff init --project <dir> --file <handoff.json> [--state-dir <dir>]"));
620
+ console.error(dim(" handoff check --project <dir> [--state-dir <dir>] [--require-session]"));
621
+ console.error(dim(" 默认状态目录见 README.md「设计落地」"));
622
+ process.exit(1);
623
+ }
624
+
625
+ const script = path.join(scriptDir, "handoff.mjs");
626
+ const childArgs = [script, sub, "--project", proj];
627
+ if (sub === "init" && handoffFile) childArgs.push("--file", handoffFile);
628
+ if (stateDir) childArgs.push("--state-dir", stateDir);
629
+ if (sub === "check" && requireSession) childArgs.push("--require-session");
630
+
631
+ try {
632
+ execFileSync(process.execPath, childArgs, { stdio: "inherit" });
633
+ } catch (e) {
634
+ process.exit(e.status ?? 1);
635
+ }
636
+ }
637
+
594
638
  // ============================================================
595
639
  // 入口
596
640
  // ============================================================
@@ -626,6 +670,9 @@ function main() {
626
670
  case "list":
627
671
  cmdList();
628
672
  break;
673
+ case "handoff":
674
+ cmdHandoff(target, args.slice(2), projectDir);
675
+ break;
629
676
  default:
630
677
  // 兼容旧用法:直接传 target 名当作 install
631
678
  if (TARGETS[command] || command === "all") {