@agile-team/wl-skills-kit 2.6.0 → 2.7.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.
- package/CHANGELOG.md +25 -0
- package/README.md +9 -1
- package/bin/wl-skills.js +48 -2
- package/docs/agent-pipeline-runbook.md +1 -1
- package/docs/ai/345/205/250/346/231/257/345/210/206/346/236/220.md +1 -1
- package/docs/mcp-tool-risk-matrix.md +2 -1
- package/docs//345/205/250/347/233/230/345/210/206/346/236/220/344/270/216/346/231/272/350/203/275/344/275/223/346/220/255/345/273/272/346/214/207/345/215/227.md +1 -1
- package/files/.github/copilot-instructions.md +1 -12
- package/files/.github/guides/architecture.md +1 -1
- package/files/.github/skills/ops/code-fix/USAGE.md +131 -0
- package/files/.github/skills/sync/dict-sync/USAGE.md +122 -0
- package/mcp/registry.js +368 -0
- package/mcp/server.js +65 -432
- package/package.json +8 -4
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,30 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [2.7.0] - 2026-05-12
|
|
4
|
+
|
|
5
|
+
### Added
|
|
6
|
+
|
|
7
|
+
- **CLI 未知 flag/命令防护**:`bin/wl-skills.js` 引入 `KNOWN_COMMANDS` / `KNOWN_FLAGS` 白名单。`node bin/wl-skills.js --version` 等未识别参数不再默认走 `init`,而是**退出非零并提示**,彻底消除 v2.6.x 时段被验证过的"误装风险"。
|
|
8
|
+
- **MCP Tool auto-discovery**:新增 `mcp/registry.js` 集中维护 17 个工具描述符(含 `handle` / `needsBackendConfig`)。`mcp/server.js` 大幅瘦身(496 行 → 130 行),不再硬编码 17 项 switch case;新增 / 修改 Tool 仅改 `mcp/registry.js`。
|
|
9
|
+
- **版本一致性自检脚本**:新增 `scripts/verify-version.js`(`npm run version:verify`),跨文件校验 `package.json#version` 与 CLI header / README / `guides/architecture.md` / headers 中描述行的一致性,并交叉校验 `_registry.md` 的 ✅ 启用 行数与 README / `package.json#description` 中的 "N 个 AI Skill" 数字一致。
|
|
10
|
+
- **prepublishOnly 守门**:`npm publish` 前自动运行 `version:verify` + `vitest run`,不一致或测试失败则阻断发版。
|
|
11
|
+
- **vitest 单元测试**:`tests/registry.test.js`(17 项 Tool 描述符 / Skill 计数 / package.json 一致性,9 测试)+ `tests/cli.test.js`(A1 防护黑盒测试 + dry-run 隔离验证,6 测试)+ `tests/version-tools.test.js`(version 工具脚本,3 测试)。共 **18 测试**全绿。
|
|
12
|
+
- 新增 `dict-sync` / `code-fix` 的 `USAGE.md`,与其他 8 个启用 Skill 文档结构一致。
|
|
13
|
+
|
|
14
|
+
### Changed
|
|
15
|
+
|
|
16
|
+
- **`scripts/sync-version.js` 改为 registry-driven**:`SKILL_COUNT` 不再是手动维护常量,自动从 `files/.github/skills/_registry.md` 解析 ✅ 启用 行数得到;`MCP_TOOL_COUNT` 自动从 `mcp/registry.js` 取。
|
|
17
|
+
- `files/.github/copilot-instructions.md` 删除内嵌的 Skill 状态表,改为单行指针 → `_registry.md`,消除三处独立维护。
|
|
18
|
+
- `kit-internal/architecture.md` 重写为 **ADR 索引 + 当前架构指针**,不再复制能力清单;当前能力盘点统一指向 `docs/全盘分析与智能体搭建指南.md` 等单一数据源。
|
|
19
|
+
- `package.json` 新增 `test` / `version:verify` / `prepublishOnly` 脚本与 `vitest` devDependency。
|
|
20
|
+
|
|
21
|
+
### Notes
|
|
22
|
+
|
|
23
|
+
- 业务项目升级 `npx @agile-team/wl-skills-kit update` 即可,无破坏性变更。
|
|
24
|
+
- 维护者新增 Skill:仅改 `_registry.md` 与 `_pipeline.md` + 写 SKILL.md/USAGE.md,**不再需要手改 sync-version 常量与 copilot Skill 表**。
|
|
25
|
+
- 维护者新增 MCP Tool:仅改 `mcp/registry.js` 加一条描述符,**不再需要改 server.js**。
|
|
26
|
+
- 验证:`npm run version:verify && npm test` 应全绿,CI 可直接接入。
|
|
27
|
+
|
|
3
28
|
## [2.6.0] - 2026-05-12
|
|
4
29
|
|
|
5
30
|
### Added
|
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# @agile-team/wl-skills-kit
|
|
2
2
|
|
|
3
|
-
**AI Skill 模板包 v2.
|
|
3
|
+
**AI Skill 模板包 v2.7.0** — 一键将 13 条规范、10 个 AI Skill、17 个 MCP Tool、编辑器 MCP 配置、文档导入 Vue 3 项目。
|
|
4
4
|
|
|
5
5
|
让 AI 编辑器(Copilot / Cursor / Windsurf / Claude Code / Cline / Kiro / Trae / Qoder / 通用 Agents)**真正理解项目规范**,从原型/详设到完整页面代码全流程自动化。
|
|
6
6
|
|
|
@@ -23,6 +23,14 @@ npm run standards:init # 本包维护/业务项目均可复用
|
|
|
23
23
|
|
|
24
24
|
## 版本亮点
|
|
25
25
|
|
|
26
|
+
**v2.7.0**:一致性治理与可测性升级,安全防护加固。
|
|
27
|
+
|
|
28
|
+
- **CLI 未知 flag / 命令防护**:`npx @agile-team/wl-skills-kit --version` 等未识别参数不再默认走 `init` 误装,而是退出非零并提示
|
|
29
|
+
- **MCP Tool auto-discovery**:新增 `mcp/registry.js`,17 个 Tool 描述符集中维护;`mcp/server.js` 从 496 行瘦身到 130 行,新增 Tool 仅改 registry
|
|
30
|
+
- **版本一致性自检**:`npm run version:verify` 跨文件校验版本 + Skill 计数;`prepublishOnly` 在 `npm publish` 前自动运行它与 `vitest`,不一致则阻断发版
|
|
31
|
+
- **单元测试**:registry / CLI / version-tools 共 18 项覆盖,上面三项防护都有连动验证
|
|
32
|
+
- **单一数据源加固**:`SKILL_COUNT` 从常量改为从 `_registry.md` 动态计算;copilot-instructions 删除内嵌 Skill 表改为指针;dict-sync / code-fix 补 USAGE.md
|
|
33
|
+
|
|
26
34
|
当前 2.6.x 重点补齐业务理解闭环:原型/详设 → 业务文档 → 接口契约 → 页面代码 → 复扫。
|
|
27
35
|
|
|
28
36
|
- **新增 `business-doc-extract` Skill**:语义级智能触发(不依赖固定关键词),在资料达模块/项目级完整度时建议生成业务文档:
|
package/bin/wl-skills.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
|
-
* wl-skills-kit CLI v2.
|
|
4
|
+
* wl-skills-kit CLI v2.7.0
|
|
5
5
|
*
|
|
6
6
|
* 命令:
|
|
7
7
|
* init 全量安装(默认,向后兼容)
|
|
@@ -27,11 +27,57 @@ const MANIFEST_NAME = ".wl-skills-manifest.json";
|
|
|
27
27
|
const MANIFEST_PATH = path.join(TARGET_DIR, MANIFEST_NAME);
|
|
28
28
|
const PKG = require("../package.json");
|
|
29
29
|
const args = process.argv.slice(2);
|
|
30
|
+
|
|
31
|
+
// ─── 已知命令 / 选项白名单(A1: 防止未知 flag 默认走 init 误装)──────────
|
|
32
|
+
const KNOWN_COMMANDS = new Set([
|
|
33
|
+
"init",
|
|
34
|
+
"update",
|
|
35
|
+
"clean",
|
|
36
|
+
"check",
|
|
37
|
+
"diff",
|
|
38
|
+
"validate",
|
|
39
|
+
"validate-page",
|
|
40
|
+
"doctor-ui",
|
|
41
|
+
"export",
|
|
42
|
+
]);
|
|
43
|
+
const KNOWN_FLAGS = new Set([
|
|
44
|
+
"--dry-run",
|
|
45
|
+
"--keep-reports",
|
|
46
|
+
"--force",
|
|
47
|
+
"--help",
|
|
48
|
+
"-h",
|
|
49
|
+
]);
|
|
50
|
+
|
|
30
51
|
const dryRun = args.includes("--dry-run");
|
|
31
52
|
const showHelp = args.includes("--help") || args.includes("-h");
|
|
32
53
|
const keepReports = args.includes("--keep-reports");
|
|
33
54
|
const force = args.includes("--force");
|
|
34
|
-
|
|
55
|
+
|
|
56
|
+
// 校验所有 flag 是否已知(--help 优先,跳过校验直接显示帮助)
|
|
57
|
+
if (!showHelp) {
|
|
58
|
+
const unknownFlags = args.filter(
|
|
59
|
+
(a) => a.startsWith("-") && !KNOWN_FLAGS.has(a),
|
|
60
|
+
);
|
|
61
|
+
if (unknownFlags.length > 0) {
|
|
62
|
+
console.error("");
|
|
63
|
+
console.error(" ✖ 未知选项: " + unknownFlags.join(", "));
|
|
64
|
+
console.error(" 请使用 --help 查看可用选项");
|
|
65
|
+
console.error("");
|
|
66
|
+
process.exit(1);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
const positional = args.filter((a) => !a.startsWith("-"));
|
|
71
|
+
const command = positional[0] || "init";
|
|
72
|
+
|
|
73
|
+
// 校验主命令是否已知(--help 时跳过;空命令默认 init)
|
|
74
|
+
if (!showHelp && !KNOWN_COMMANDS.has(command)) {
|
|
75
|
+
console.error("");
|
|
76
|
+
console.error(' ✖ 未知命令: "' + command + '"');
|
|
77
|
+
console.error(" 请使用 --help 查看可用命令");
|
|
78
|
+
console.error("");
|
|
79
|
+
process.exit(1);
|
|
80
|
+
}
|
|
35
81
|
|
|
36
82
|
if (showHelp) {
|
|
37
83
|
console.log(`
|
|
@@ -267,18 +267,7 @@ onMounted(() => select());
|
|
|
267
267
|
- 保留 `common-core` 平台骨架,不得生搬硬套 `wk-skills-ui` 通用模板里的 `usePageHook/el-form/el-pagination`
|
|
268
268
|
- 生成后建议运行 `wl-skills validate-page <页面目录>` 和 `wl-skills doctor-ui`
|
|
269
269
|
|
|
270
|
-
|
|
271
|
-
| -------------------- | -------- | --------------------------------------- |
|
|
272
|
-
| prototype-scan | ✅ 启用 | 原型/详设 → page-spec JSON |
|
|
273
|
-
| api-contract | ✅ 启用 | 生成 api.md 接口约定 |
|
|
274
|
-
| page-codegen | ✅ 启用 | 页面骨架 + 模板调度 + 菜单追加 |
|
|
275
|
-
| business-doc-extract | ✅ 启用 | 原型/详设/字段/字典/现有页面 → docs/business 业务文档 |
|
|
276
|
-
| menu-sync | ✅ 启用 | reports/SYS_MENU_INFO → 后端菜单接口 |
|
|
277
|
-
| convention-audit | ✅ 启用 | 13 条规范扫描 + 偏差报告 + 提取建议 |
|
|
278
|
-
| template-extract | ✅ 启用 | 现有页面 → 领域模板沉淀 |
|
|
279
|
-
| dict-sync | ✅ 启用 | 字典数据同步 |
|
|
280
|
-
| permission-sync | ✅ 启用 | 角色+授权+动作权限同步(MCP) |
|
|
281
|
-
| code-fix | ✅ 启用 | 自动整改 🟢🟡 等级偏差 |
|
|
270
|
+
**Skill 状态总览 / 路径 / 完整触发词**:见 `skills/_registry.md`(**单一数据源**,新增或激活 Skill 只改这一处)。
|
|
282
271
|
|
|
283
272
|
**执行规则**:
|
|
284
273
|
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
# 使用指南:code-fix(受控自动修复)
|
|
2
|
+
|
|
3
|
+
> **谁读这个文档**:团队成员(前端 / 接手老项目时)
|
|
4
|
+
> **AI 触发文件**:同目录 `SKILL.md`
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## 这个 Skill 解决什么问题
|
|
9
|
+
|
|
10
|
+
`convention-audit` 跑完会生成 `reports/规范审查报告.md`,里面列出 N 条偏差,按 🔴/🟡/🟢 分级。如果手动一条一条改,效率很低;但**全量交给 AI 自动改**又会引入隐性破坏。
|
|
11
|
+
|
|
12
|
+
`code-fix` 的定位是:**只修 🟡 / 🟢 级偏差,且每条都要 diff 预览 + 用户确认**。
|
|
13
|
+
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
## 何时使用
|
|
17
|
+
|
|
18
|
+
- `convention-audit` 报告里堆积了大量 🟡 / 🟢 偏差(如缺 `:scoped` / 缺 `cid` / 缺导入顺序等)
|
|
19
|
+
- 接手老项目,想批量整改 ESLint 之外的项目内规范
|
|
20
|
+
- PR 评审前快速把"低风险偏差"清干净,让 reviewer 只看业务逻辑
|
|
21
|
+
|
|
22
|
+
**不适用场景**:
|
|
23
|
+
|
|
24
|
+
- 🔴 严重偏差(结构错误 / 用错组件 / 接口契约不符等)→ 用 `page-codegen` 重新生成或人工重写
|
|
25
|
+
- 业务逻辑变更 → code-fix 不参与;这是 PR 的活
|
|
26
|
+
- 没跑过 `convention-audit` → 必须先有报告,code-fix 不会自己扫代码
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
## 触发关键词
|
|
31
|
+
|
|
32
|
+
`自动修复` / `整改偏差` / `修复报告` / `规范整改` / `code fix`
|
|
33
|
+
|
|
34
|
+
---
|
|
35
|
+
|
|
36
|
+
## 前置条件
|
|
37
|
+
|
|
38
|
+
1. 项目根有 `reports/规范审查报告.md`(来自 `convention-audit` 的最新一次输出)
|
|
39
|
+
2. 报告里 issue 项明确(含 issueId / 文件路径 / 行号 / 偏差类型)
|
|
40
|
+
|
|
41
|
+
---
|
|
42
|
+
|
|
43
|
+
## 标准对话示例
|
|
44
|
+
|
|
45
|
+
```
|
|
46
|
+
你:把规范审查报告里 🟡 级的偏差都修一下
|
|
47
|
+
AI:[Pre-flight]
|
|
48
|
+
步骤 1:读取 reports/规范审查报告.md,识别到:
|
|
49
|
+
- 🔴 严重 3 项(不修)
|
|
50
|
+
- 🟡 中 12 项(可修)
|
|
51
|
+
- 🟢 低 8 项(可修)
|
|
52
|
+
步骤 2:本次修复目标:12 + 8 = 20 项
|
|
53
|
+
步骤 3:分组展示前 5 项 diff:
|
|
54
|
+
|
|
55
|
+
[issue-001] src/views/sale/order/index.vue:24
|
|
56
|
+
- <style lang="scss">
|
|
57
|
+
+ <style lang="scss" scoped>
|
|
58
|
+
|
|
59
|
+
[issue-002] src/views/sale/order/index.vue:80
|
|
60
|
+
- <BaseTable :columns="columns" />
|
|
61
|
+
+ <BaseTable :cid="ORDER_CID" :columns="columns" />
|
|
62
|
+
|
|
63
|
+
... (再展示 3 项)
|
|
64
|
+
|
|
65
|
+
[需你确认] 这 5 项 yes 后继续看后续 15 项?逐组 yes/no?
|
|
66
|
+
你:yes,全部一起改了吧
|
|
67
|
+
AI:执行第 1 组(5 项)写入 → 标记报告条目为 ✅ 已修复 → 显示下一组
|
|
68
|
+
...
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
---
|
|
72
|
+
|
|
73
|
+
## 输出物
|
|
74
|
+
|
|
75
|
+
1. **修改后的源文件**(每条 issue 命中的文件被精准 patch)
|
|
76
|
+
2. **报告条目状态更新**:`reports/规范审查报告.md` 中对应 issueId 标记为 ✅ 已修复 + 时间戳
|
|
77
|
+
3. **修复摘要**(可选):`reports/CODE_FIX_<YYYYMMDD>.md` —— 本次共修复 N 项,按文件聚合
|
|
78
|
+
|
|
79
|
+
---
|
|
80
|
+
|
|
81
|
+
## 受控原则(严格执行)
|
|
82
|
+
|
|
83
|
+
| 原则 | 说明 |
|
|
84
|
+
|---|---|
|
|
85
|
+
| **不修 🔴** | 严重偏差必须人工或 page-codegen 处理,code-fix 不介入 |
|
|
86
|
+
| **不破坏功能** | 只改报告点名的行,不顺手"重构"周边代码 |
|
|
87
|
+
| **不批量盲改** | 每个文件都先 diff 预览,禁止跳过用户确认 |
|
|
88
|
+
| **不生成新逻辑** | 只修偏差,不做功能补全(那是 page-codegen 的职责) |
|
|
89
|
+
| **范围明确** | 若用户引导修改业务逻辑,必须拒绝并说明原因 |
|
|
90
|
+
|
|
91
|
+
---
|
|
92
|
+
|
|
93
|
+
## 常见踩坑
|
|
94
|
+
|
|
95
|
+
| 现象 | 原因 | 解法 |
|
|
96
|
+
|---|---|---|
|
|
97
|
+
| diff 看着对,但 lint 又报新错 | 修复策略与项目 ESLint 配置不一致 | 先跑 `npm run lint` 看新报错;调整 SKILL 里的 rule-based 策略 |
|
|
98
|
+
| 报告里 issueId 被改回去了 | code-fix 修完后又有人手工改回旧写法 | PR 评审环节加"不要逆向修改"约束 |
|
|
99
|
+
| AI 想"顺手优化"周边逻辑 | 模型主动性过强 | 在指令里加"严格按 issueId 修复,不做其他改动" |
|
|
100
|
+
| 两次 code-fix 的 diff 不一致 | 中间 convention-audit 没重跑 | code-fix 之前必须先 audit,保证报告是最新快照 |
|
|
101
|
+
|
|
102
|
+
---
|
|
103
|
+
|
|
104
|
+
## 团队协作流程
|
|
105
|
+
|
|
106
|
+
```
|
|
107
|
+
[每次 PR 之前]
|
|
108
|
+
1. wl-skills validate-page <修改过的页面> # 单页快速校验
|
|
109
|
+
2. convention-audit # 生成最新偏差报告
|
|
110
|
+
3. code-fix # 修 🟡/🟢
|
|
111
|
+
4. 再跑一次 convention-audit # 复扫确认 🟡/🟢 → 0
|
|
112
|
+
5. PR 提交(reviewer 只看 🔴 处理 + 业务逻辑)
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
> 复扫这一步**必做**:避免 code-fix 改完之后又引入新偏差。
|
|
116
|
+
|
|
117
|
+
---
|
|
118
|
+
|
|
119
|
+
## FAQ
|
|
120
|
+
|
|
121
|
+
**Q:能跳过用户确认直接全部改吗?**
|
|
122
|
+
A:**不允许**。code-fix 的核心定位就是"受控",跳过确认会变成黑盒整改。要全自动请用 ESLint --fix。
|
|
123
|
+
|
|
124
|
+
**Q:和 ESLint --fix 有什么区别?**
|
|
125
|
+
A:ESLint 修语法/格式(自动化没风险),code-fix 修**项目内规范**(如 cid/operations/`:scoped`/导入顺序/AGGrid 写法 等 ESLint 不覆盖的规则)。两者互补,建议先 ESLint 再 code-fix。
|
|
126
|
+
|
|
127
|
+
**Q:code-fix 改完会不会破坏 mock-first?**
|
|
128
|
+
A:不会。code-fix 只动报告点名的行,mock-first 相关字段(`API_CONFIG.useMock` 等)不在受控修复范围。
|
|
129
|
+
|
|
130
|
+
**Q:和 page-codegen 重新生成有什么区别?**
|
|
131
|
+
A:`page-codegen` 是"重写整个页面骨架",适合 🔴 级整页结构错误;`code-fix` 是"按 issue 精准修", 适合 🟡/🟢 级零碎偏差。两者互补,混用即可。
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
# 使用指南:dict-sync(字典同步)
|
|
2
|
+
|
|
3
|
+
> **谁读这个文档**:团队成员(前端 + 后端联调时)
|
|
4
|
+
> **AI 触发文件**:同目录 `SKILL.md`
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## 这个 Skill 解决什么问题
|
|
9
|
+
|
|
10
|
+
业务页面里 `data.ts` 引用的字典(`logicType: BusLogicDataType.dict, logicValue: "DICT_CODE"`)需要在低代码平台 **数据字典模块** 中真实存在,否则下拉项为空、表头标签为空。
|
|
11
|
+
|
|
12
|
+
`dict-sync` 负责:
|
|
13
|
+
|
|
14
|
+
1. 拉取**线上字典模块及字典项**到 `reports/SYS_DICT_INFO.md`(团队基线)
|
|
15
|
+
2. 对比 `data.ts` 引用的字典码 vs 线上字典,**列出缺失字典码**
|
|
16
|
+
3. 调用字典模块/字典项保存接口(或生成对照报告供后端建数据)
|
|
17
|
+
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
## 何时使用
|
|
21
|
+
|
|
22
|
+
- 业务页面下拉/状态列空白,怀疑字典码没建
|
|
23
|
+
- 一次性从原型/详设里抽取出 N 个新字典,需批量同步
|
|
24
|
+
- 同步线上字典基线(DEV / UAT / PROD 拉齐)
|
|
25
|
+
- `convention-audit` 报告里出现 "字典码不存在" 类偏差
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
## 触发关键词
|
|
30
|
+
|
|
31
|
+
`同步字典` / `创建字典` / `刷新字典基线` / `字典对比` / `字典审计`
|
|
32
|
+
|
|
33
|
+
---
|
|
34
|
+
|
|
35
|
+
## 前置条件
|
|
36
|
+
|
|
37
|
+
`.github/skills/sync/env.local.json`(已 gitignore,每个开发者本地填自己的 token):
|
|
38
|
+
|
|
39
|
+
```json
|
|
40
|
+
{
|
|
41
|
+
"gatewayPath": "http://192.168.10.50:9000",
|
|
42
|
+
"sysAppNo": "QjQuXy1kbKxZyjhS5N2",
|
|
43
|
+
"token": "eyJhbGci...",
|
|
44
|
+
"dict": {
|
|
45
|
+
"moduleId": "7C909G0U2F8HI7E305LV0135LSJ3UBIO"
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
`dict.moduleId` 获取方式:低代码平台 → 数据字典 → 新增一条 → DevTools Network → 抓 `moduleId` 字段。
|
|
51
|
+
|
|
52
|
+
> **向下兼容**:`env.local.json` 不存在时回落到旧路径 `skills/sync/menu-sync/env/env.local.json`。
|
|
53
|
+
|
|
54
|
+
---
|
|
55
|
+
|
|
56
|
+
## 标准对话示例
|
|
57
|
+
|
|
58
|
+
```
|
|
59
|
+
你:把 src/views/produce/aiflow/ 里所有页面用到的字典同步一下
|
|
60
|
+
AI:[Pre-flight]
|
|
61
|
+
步骤 1:扫描 data.ts,提取 logicValue 形成字典码集合(共 12 个)
|
|
62
|
+
步骤 2:调用 wls_dict_query 拉线上字典模块(已有 8 个,缺 4 个)
|
|
63
|
+
步骤 3:建议新增字典模块 + 字典项:
|
|
64
|
+
- APPLY_STATUS(申请状态:待审核/审核中/已通过/已驳回)
|
|
65
|
+
- CUSTOMER_TYPE(客户类型:临时/正式/合作/战略)
|
|
66
|
+
- ...
|
|
67
|
+
[需你确认]
|
|
68
|
+
- 排序 sortPriority 自动从 1 递增?yes/no
|
|
69
|
+
- 字典名 strName 我直接用截图里的中文,对吗?yes/no
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
---
|
|
73
|
+
|
|
74
|
+
## 输出物
|
|
75
|
+
|
|
76
|
+
1. **基线文件**:`reports/SYS_DICT_INFO.md` —— 当前所有线上字典模块 + 字典项的本地基线
|
|
77
|
+
2. **同步报告**(可选):`reports/DICT_SYNC_<YYYYMMDD>.md` —— 本次新增了哪些字典/字典项
|
|
78
|
+
3. **缺失对照**:报告附 "未在线上找到的字典码" 列表,便于后端预先建数据
|
|
79
|
+
|
|
80
|
+
---
|
|
81
|
+
|
|
82
|
+
## 与 business-doc-extract 的关系
|
|
83
|
+
|
|
84
|
+
| 维度 | `business-doc-extract` | `dict-sync` |
|
|
85
|
+
|---|---|---|
|
|
86
|
+
| 职责 | 业务理解 / 设计意图 | 线上事实 / 数据落地 |
|
|
87
|
+
| 输出 | `docs/business/0X-xx/dictionary.md`(人读) | 后端字典表(系统读) |
|
|
88
|
+
| 时机 | 项目/模块沉淀阶段 | 联调前 / 上线前 |
|
|
89
|
+
|
|
90
|
+
两者**互不替代**:业务文档说的是"应该有什么字典",dict-sync 解决"线上有没有"。建议顺序:`business-doc-extract` 整理出 dictionary.md 草案 → 评审 → `dict-sync` 落地。
|
|
91
|
+
|
|
92
|
+
---
|
|
93
|
+
|
|
94
|
+
## 常见踩坑
|
|
95
|
+
|
|
96
|
+
| 现象 | 原因 | 解法 |
|
|
97
|
+
|---|---|---|
|
|
98
|
+
| 下拉空白但接口返回正常 | 字典码大小写不一致 | 字典码全部 UPPER_SNAKE_CASE,data.ts 与后端对齐 |
|
|
99
|
+
| 401/403 报错 | env.local.json 的 token 过期 | 重新登录系统,从 Network 抓 Authorization 替换 |
|
|
100
|
+
| 模块新增成功但取不到 id | 接口异步延迟 | dict-sync 已自动 re-query,无需手动处理 |
|
|
101
|
+
| 字典项重复创建 | 没读基线就 push | 先跑 `wls_dict_query` 取线上数据 → 对比 → 增量 push |
|
|
102
|
+
|
|
103
|
+
---
|
|
104
|
+
|
|
105
|
+
## 团队协作流程
|
|
106
|
+
|
|
107
|
+
1. **每周一**由 lead 跑一次 `刷新字典基线`,更新 `reports/SYS_DICT_INFO.md`
|
|
108
|
+
2. 业务页面 PR 提交前自查 "我加的字典码是否进了基线"
|
|
109
|
+
3. 上线前再 sync 一次到生产环境(切换 env 文件中的 gatewayPath)
|
|
110
|
+
|
|
111
|
+
---
|
|
112
|
+
|
|
113
|
+
## FAQ
|
|
114
|
+
|
|
115
|
+
**Q:业务字典 vs 系统字典 vs 状态枚举怎么区分?**
|
|
116
|
+
A:状态枚举(如 `APPLY_STATUS`)走系统字典;业务高频可枚举字段(如 `CUSTOMER_TYPE`)走系统字典;纯文本备注、复杂联动数据不走字典。
|
|
117
|
+
|
|
118
|
+
**Q:能不能让 AI 直接根据 data.ts 自动建字典?**
|
|
119
|
+
A:可以,但 **建议人工确认 strName**。AI 从字段中文猜出来的字典名往往不够标准,PR 评审难。先生成对照报告,人工 review 后再 push。
|
|
120
|
+
|
|
121
|
+
**Q:和 menu-sync / permission-sync 关系?**
|
|
122
|
+
A:菜单是入口,字典是值域,权限是访问控制。三者独立但配合。建议顺序:`menu-sync` → `permission-sync` → `dict-sync`。
|