@agile-team/wl-skills-kit 2.10.1 → 2.11.1

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 (196) hide show
  1. package/CHANGELOG.md +51 -8
  2. package/README.md +47 -29
  3. package/bin/wl-skills.js +156 -53
  4. package/docs/agent-pipeline-runbook.md +3 -3
  5. 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 +4 -4
  6. package/files/.github/copilot-instructions.md +23 -465
  7. package/files/.wl-skills/copilot-instructions-full.md +233 -0
  8. package/files/{docs → .wl-skills/docs}/jh-pagination.md +2 -2
  9. package/files/{docs → .wl-skills/docs}/page-query-hook-best-practices.md +3 -3
  10. package/files/.wl-skills/docs/page-spec-schema.md +109 -0
  11. package/files/{.github → .wl-skills}/guides/README.md +1 -1
  12. package/files/{.github → .wl-skills}/guides/architecture.md +5 -5
  13. package/files/{.github → .wl-skills}/guides/mcp-setup.md +1 -1
  14. package/files/{.github → .wl-skills}/guides/usage.md +8 -8
  15. package/files/{.github → .wl-skills}/reports/SYS_MENU_INFO.md +1 -1
  16. package/files/{.github → .wl-skills}/reports/SYS_PERMISSION_INFO.md +1 -1
  17. package/files/{.github → .wl-skills}/reports//347/273/204/344/273/266/346/217/220/345/217/226/345/273/272/350/256/256.md +1 -1
  18. package/files/{.github → .wl-skills}/skills/_best-practices.md +5 -5
  19. package/files/{.github → .wl-skills}/skills/_compat/README.md +1 -1
  20. package/files/{.github → .wl-skills}/skills/_compat/editors.json +1 -1
  21. package/files/{.github → .wl-skills}/skills/_pipeline.md +9 -9
  22. package/files/{.github → .wl-skills}/skills/_registry.md +3 -3
  23. package/files/{.github → .wl-skills}/skills/core/business-doc-extract/SKILL.md +27 -27
  24. package/files/{.github → .wl-skills}/skills/core/business-doc-extract/USAGE.md +22 -22
  25. package/files/{.github → .wl-skills}/skills/core/business-doc-extract/templates/business-index.md +1 -1
  26. package/files/{.github → .wl-skills}/skills/core/business-doc-extract/templates/business-open-questions.md +1 -1
  27. package/files/{.github → .wl-skills}/skills/core/business-doc-extract/templates/module-dictionary.md +1 -1
  28. package/files/{.github → .wl-skills}/skills/core/business-doc-extract/templates/module-field.md +1 -1
  29. package/files/{.github → .wl-skills}/skills/core/business-doc-extract/templates/module-index.md +2 -2
  30. package/files/{.github → .wl-skills}/skills/core/business-doc-extract/templates/module-requirement.md +2 -2
  31. package/files/{.github → .wl-skills}/skills/core/convention-audit/SKILL.md +6 -6
  32. package/files/{.github → .wl-skills}/skills/core/convention-audit/USAGE.md +1 -1
  33. package/files/{.github → .wl-skills}/skills/core/page-codegen/SKILL.md +20 -14
  34. package/files/{.github → .wl-skills}/skills/core/page-codegen/USAGE.md +1 -1
  35. package/files/{.github → .wl-skills}/skills/core/page-codegen/templates/universal/TPL-DETAIL-TABS.md +7 -7
  36. package/files/{.github → .wl-skills}/skills/core/page-codegen/templates/universal/TPL-DRIVEN.md +5 -5
  37. package/files/{.github → .wl-skills}/skills/core/page-codegen/templates/universal/TPL-FORM-ROUTE.md +2 -2
  38. package/files/{.github → .wl-skills}/skills/core/page-codegen/templates/universal/TPL-RECORD-FORM.md +1 -1
  39. package/files/{.github → .wl-skills}/skills/core/page-codegen/templates/universal/TPL-TREE-LIST.md +1 -1
  40. package/files/{.github → .wl-skills}/skills/core/prototype-scan/SKILL.md +11 -11
  41. package/files/{.github → .wl-skills}/skills/core/prototype-scan/USAGE.md +3 -3
  42. package/files/{.github → .wl-skills}/skills/core/spec-doc-parse/SKILL.md +9 -9
  43. package/files/{.github → .wl-skills}/skills/core/spec-doc-parse/USAGE.md +6 -6
  44. package/files/{.github → .wl-skills}/skills/core/template-extract/SKILL.md +1 -1
  45. package/files/{.github → .wl-skills}/skills/core/template-extract/USAGE.md +1 -1
  46. package/files/{.github → .wl-skills}/skills/sync/_mcp-guardrail.md +3 -3
  47. package/files/{.github → .wl-skills}/skills/sync/dict-sync/SKILL.md +5 -5
  48. package/files/{.github → .wl-skills}/skills/sync/dict-sync/USAGE.md +2 -2
  49. package/files/{.github → .wl-skills}/skills/sync/menu-sync/SKILL.md +6 -6
  50. package/files/{.github → .wl-skills}/skills/sync/menu-sync/USAGE.md +3 -3
  51. package/files/{.github → .wl-skills}/skills/sync/menu-sync/env/guide.md +2 -2
  52. package/files/{.github → .wl-skills}/skills/sync/permission-sync/SKILL.md +3 -3
  53. package/files/{.github → .wl-skills}/skills/sync/permission-sync/USAGE.md +1 -1
  54. package/files/{src → .wl-skills/src}/components/local/c_formModal/README.md +1 -1
  55. package/files/{src → .wl-skills/src}/components/local/c_formSections/README.md +2 -2
  56. package/files/{src → .wl-skills/src}/components/remote/BaseForm/README.md +2 -2
  57. package/files/{src → .wl-skills/src}/components/remote/BaseQuery/README.md +4 -4
  58. package/files/{src → .wl-skills/src}/components/remote/BaseTable/README.md +2 -2
  59. package/files/{src → .wl-skills/src}/components/remote/BaseToolbar/README.md +1 -1
  60. package/files/{.github → .wl-skills}/standards/02-code-structure.md +1 -1
  61. package/files/{.github → .wl-skills}/standards/08-git.md +1 -1
  62. package/files/{.github → .wl-skills}/standards/11-form-validation.md +1 -1
  63. package/files/{.github → .wl-skills}/standards/13-platform-components.md +15 -15
  64. package/files/{.github → .wl-skills}/standards/14-layout-containers.md +9 -9
  65. package/files/{demo → .wl-skills/templates}/README.md +3 -3
  66. package/lib/page-spec.js +588 -0
  67. package/lib/safe-fix.js +115 -0
  68. package/lib/vite-plugin-wl-skills.js +97 -0
  69. package/mcp/config.js +3 -3
  70. package/mcp/tools/projectTools.js +10 -0
  71. package/package.json +16 -11
  72. package/files/src/components/global/C_Splitter/index.scss +0 -61
  73. package/files/src/components/global/C_Splitter/index.vue +0 -149
  74. /package/files/{docs → .wl-skills/docs}/jh-date-range.md +0 -0
  75. /package/files/{docs → .wl-skills/docs}/jh-date.md +0 -0
  76. /package/files/{docs → .wl-skills/docs}/jh-dept-picker.md +0 -0
  77. /package/files/{docs → .wl-skills/docs}/jh-drag-row.md +0 -0
  78. /package/files/{docs → .wl-skills/docs}/jh-file-upload.md +0 -0
  79. /package/files/{docs → .wl-skills/docs}/jh-picker.md +0 -0
  80. /package/files/{docs → .wl-skills/docs}/jh-select.md +0 -0
  81. /package/files/{docs → .wl-skills/docs}/jh-text.md +0 -0
  82. /package/files/{docs → .wl-skills/docs}/jh-textarea.md +0 -0
  83. /package/files/{docs → .wl-skills/docs}/jh-user-picker.md +0 -0
  84. /package/files/{docs → .wl-skills/docs}/mock-architecture.md +0 -0
  85. /package/files/{docs → .wl-skills/docs}/request.md +0 -0
  86. /package/files/{.github → .wl-skills}/reports/README.md +0 -0
  87. /package/files/{.github → .wl-skills}/reports/SYS_DICT_INFO.md +0 -0
  88. /package/files/{.github → .wl-skills}/reports//350/247/204/350/214/203/345/256/241/346/237/245/346/212/245/345/221/212.md" +0 -0
  89. /package/files/{.github → .wl-skills}/skills/_compat/headers/agents.txt +0 -0
  90. /package/files/{.github → .wl-skills}/skills/_compat/headers/claude-code.txt +0 -0
  91. /package/files/{.github → .wl-skills}/skills/_compat/headers/cline.txt +0 -0
  92. /package/files/{.github → .wl-skills}/skills/_compat/headers/cursor-mdc.txt +0 -0
  93. /package/files/{.github → .wl-skills}/skills/_compat/headers/cursor-rules.txt +0 -0
  94. /package/files/{.github → .wl-skills}/skills/_compat/headers/github-copilot.txt +0 -0
  95. /package/files/{.github → .wl-skills}/skills/_compat/headers/kiro.txt +0 -0
  96. /package/files/{.github → .wl-skills}/skills/_compat/headers/qoder.txt +0 -0
  97. /package/files/{.github → .wl-skills}/skills/_compat/headers/trae.txt +0 -0
  98. /package/files/{.github → .wl-skills}/skills/_compat/headers/windsurf.txt +0 -0
  99. /package/files/{.github → .wl-skills}/skills/core/api-contract/SKILL.md +0 -0
  100. /package/files/{.github → .wl-skills}/skills/core/api-contract/USAGE.md +0 -0
  101. /package/files/{.github → .wl-skills}/skills/core/page-codegen/templates/_index.md +0 -0
  102. /package/files/{.github → .wl-skills}/skills/core/page-codegen/templates/domains/_CONTRIBUTING.md +0 -0
  103. /package/files/{.github → .wl-skills}/skills/core/page-codegen/templates/domains/produce/TPL-OPERATION-STATION.md +0 -0
  104. /package/files/{.github → .wl-skills}/skills/core/page-codegen/templates/domains/sale/README.md +0 -0
  105. /package/files/{.github → .wl-skills}/skills/core/page-codegen/templates/universal/TPL-CHANGE-HISTORY.md +0 -0
  106. /package/files/{.github → .wl-skills}/skills/core/page-codegen/templates/universal/TPL-LIST.md +0 -0
  107. /package/files/{.github → .wl-skills}/skills/core/page-codegen/templates/universal/TPL-MASTER-DETAIL.md +0 -0
  108. /package/files/{.github → .wl-skills}/skills/domain/README.md +0 -0
  109. /package/files/{.github → .wl-skills}/skills/ops/code-fix/SKILL.md +0 -0
  110. /package/files/{.github → .wl-skills}/skills/ops/code-fix/USAGE.md +0 -0
  111. /package/files/{.github → .wl-skills}/skills/sync/env.local.json +0 -0
  112. /package/files/{.github → .wl-skills}/skills/sync/menu-sync/env/env.local.json +0 -0
  113. /package/files/{src → .wl-skills/src}/components/global/C_ParentView/index.vue +0 -0
  114. /package/files/{src → .wl-skills/src}/components/global/C_RightToolbar/data.ts +0 -0
  115. /package/files/{src → .wl-skills/src}/components/global/C_RightToolbar/index.scss +0 -0
  116. /package/files/{src → .wl-skills/src}/components/global/C_RightToolbar/index.vue +0 -0
  117. /package/files/{src → .wl-skills/src}/components/global/C_SvgIcon/index.scss +0 -0
  118. /package/files/{src → .wl-skills/src}/components/global/C_SvgIcon/index.vue +0 -0
  119. /package/files/{src → .wl-skills/src}/components/global/C_SvgIcon/svgicon.js +0 -0
  120. /package/files/{src → .wl-skills/src}/components/global/C_TagStatus/README.md +0 -0
  121. /package/files/{src → .wl-skills/src}/components/global/C_TagStatus/config.ts +0 -0
  122. /package/files/{src → .wl-skills/src}/components/global/C_TagStatus/index.scss +0 -0
  123. /package/files/{src → .wl-skills/src}/components/global/C_TagStatus/index.vue +0 -0
  124. /package/files/{src → .wl-skills/src}/components/global/C_TagStatus/types.ts +0 -0
  125. /package/files/{src → .wl-skills/src}/components/global/C_Tree/README.md +0 -0
  126. /package/files/{src → .wl-skills/src}/components/global/C_Tree/data.ts +0 -0
  127. /package/files/{src → .wl-skills/src}/components/global/C_Tree/index.scss +0 -0
  128. /package/files/{src → .wl-skills/src}/components/global/C_Tree/index.vue +0 -0
  129. /package/files/{src → .wl-skills/src}/components/global/C_Tree/types.ts +0 -0
  130. /package/files/{src → .wl-skills/src}/components/local/c_formModal/data.ts +0 -0
  131. /package/files/{src → .wl-skills/src}/components/local/c_formModal/index.scss +0 -0
  132. /package/files/{src → .wl-skills/src}/components/local/c_formModal/index.vue +0 -0
  133. /package/files/{src → .wl-skills/src}/components/local/c_formSections/data.ts +0 -0
  134. /package/files/{src → .wl-skills/src}/components/local/c_formSections/index.scss +0 -0
  135. /package/files/{src → .wl-skills/src}/components/local/c_formSections/index.vue +0 -0
  136. /package/files/{src → .wl-skills/src}/components/local/c_listModal/data.ts +0 -0
  137. /package/files/{src → .wl-skills/src}/components/local/c_listModal/index.scss +0 -0
  138. /package/files/{src → .wl-skills/src}/components/local/c_listModal/index.vue +0 -0
  139. /package/files/{src → .wl-skills/src}/components/local/c_spliterTitle/index.scss +0 -0
  140. /package/files/{src → .wl-skills/src}/components/local/c_spliterTitle/index.vue +0 -0
  141. /package/files/{src → .wl-skills/src}/components/remote/AGGrid/README.md +0 -0
  142. /package/files/{src → .wl-skills/src}/types/page.ts +0 -0
  143. /package/files/{.github → .wl-skills}/standards/01-toolchain.md +0 -0
  144. /package/files/{.github → .wl-skills}/standards/03-comments.md +0 -0
  145. /package/files/{.github → .wl-skills}/standards/04-coding-basics.md +0 -0
  146. /package/files/{.github → .wl-skills}/standards/05-logging.md +0 -0
  147. /package/files/{.github → .wl-skills}/standards/06-security.md +0 -0
  148. /package/files/{.github → .wl-skills}/standards/07-config.md +0 -0
  149. /package/files/{.github → .wl-skills}/standards/09-typescript.md +0 -0
  150. /package/files/{.github → .wl-skills}/standards/10-pinia.md +0 -0
  151. /package/files/{.github → .wl-skills}/standards/12-base-table.md +0 -0
  152. /package/files/{.github → .wl-skills}/standards/index.md +0 -0
  153. /package/files/{demo → .wl-skills/templates}/produce/aiflow/mmwr-customer-apply-add/api.md +0 -0
  154. /package/files/{demo → .wl-skills/templates}/produce/aiflow/mmwr-customer-apply-add/data.ts +0 -0
  155. /package/files/{demo → .wl-skills/templates}/produce/aiflow/mmwr-customer-apply-add/index.scss +0 -0
  156. /package/files/{demo → .wl-skills/templates}/produce/aiflow/mmwr-customer-apply-add/index.vue +0 -0
  157. /package/files/{demo → .wl-skills/templates}/produce/aiflow/mmwr-customer-apply-add-form/data.ts +0 -0
  158. /package/files/{demo → .wl-skills/templates}/produce/aiflow/mmwr-customer-apply-add-form/index.scss +0 -0
  159. /package/files/{demo → .wl-skills/templates}/produce/aiflow/mmwr-customer-apply-add-form/index.vue +0 -0
  160. /package/files/{demo → .wl-skills/templates}/produce/aiflow/mmwr-customer-apply-change/data.ts +0 -0
  161. /package/files/{demo → .wl-skills/templates}/produce/aiflow/mmwr-customer-apply-change/index.scss +0 -0
  162. /package/files/{demo → .wl-skills/templates}/produce/aiflow/mmwr-customer-apply-change/index.vue +0 -0
  163. /package/files/{demo → .wl-skills/templates}/produce/aiflow/mmwr-customer-apply-change-form/data.ts +0 -0
  164. /package/files/{demo → .wl-skills/templates}/produce/aiflow/mmwr-customer-apply-change-form/index.scss +0 -0
  165. /package/files/{demo → .wl-skills/templates}/produce/aiflow/mmwr-customer-apply-change-form/index.vue +0 -0
  166. /package/files/{demo → .wl-skills/templates}/produce/aiflow/mmwr-customer-apply-change-history/data.ts +0 -0
  167. /package/files/{demo → .wl-skills/templates}/produce/aiflow/mmwr-customer-apply-change-history/index.scss +0 -0
  168. /package/files/{demo → .wl-skills/templates}/produce/aiflow/mmwr-customer-apply-change-history/index.vue +0 -0
  169. /package/files/{demo → .wl-skills/templates}/produce/aiflow/mmwr-customer-archive/api.md +0 -0
  170. /package/files/{demo → .wl-skills/templates}/produce/aiflow/mmwr-customer-archive/data.ts +0 -0
  171. /package/files/{demo → .wl-skills/templates}/produce/aiflow/mmwr-customer-archive/index.scss +0 -0
  172. /package/files/{demo → .wl-skills/templates}/produce/aiflow/mmwr-customer-archive/index.vue +0 -0
  173. /package/files/{demo → .wl-skills/templates}/produce/aiflow/mmwr-customer-detail/api.md +0 -0
  174. /package/files/{demo → .wl-skills/templates}/produce/aiflow/mmwr-customer-detail/data.ts +0 -0
  175. /package/files/{demo → .wl-skills/templates}/produce/aiflow/mmwr-customer-detail/index.scss +0 -0
  176. /package/files/{demo → .wl-skills/templates}/produce/aiflow/mmwr-customer-detail/index.vue +0 -0
  177. /package/files/{demo → .wl-skills/templates}/produce/aiflow/mmwr-temp-customer-archive/api.md +0 -0
  178. /package/files/{demo → .wl-skills/templates}/produce/aiflow/mmwr-temp-customer-archive/data.ts +0 -0
  179. /package/files/{demo → .wl-skills/templates}/produce/aiflow/mmwr-temp-customer-archive/index.scss +0 -0
  180. /package/files/{demo → .wl-skills/templates}/produce/aiflow/mmwr-temp-customer-archive/index.vue +0 -0
  181. /package/files/{demo → .wl-skills/templates}/sale/demo/add-demo/data.ts +0 -0
  182. /package/files/{demo → .wl-skills/templates}/sale/demo/add-demo/index.scss +0 -0
  183. /package/files/{demo → .wl-skills/templates}/sale/demo/add-demo/index.vue +0 -0
  184. /package/files/{demo → .wl-skills/templates}/sale/demo/billet-flame-cut-plan/data.ts +0 -0
  185. /package/files/{demo → .wl-skills/templates}/sale/demo/billet-flame-cut-plan/index.scss +0 -0
  186. /package/files/{demo → .wl-skills/templates}/sale/demo/billet-flame-cut-plan/index.vue +0 -0
  187. /package/files/{demo → .wl-skills/templates}/sale/demo/domestic-trade-order/data.ts +0 -0
  188. /package/files/{demo → .wl-skills/templates}/sale/demo/domestic-trade-order/index.scss +0 -0
  189. /package/files/{demo → .wl-skills/templates}/sale/demo/domestic-trade-order/index.vue +0 -0
  190. /package/files/{demo → .wl-skills/templates}/sale/demo/heat-batch-return/data.ts +0 -0
  191. /package/files/{demo → .wl-skills/templates}/sale/demo/heat-batch-return/index.scss +0 -0
  192. /package/files/{demo → .wl-skills/templates}/sale/demo/heat-batch-return/index.vue +0 -0
  193. /package/files/{demo → .wl-skills/templates}/sale/demo/heat-batch-return/meltDialog.vue +0 -0
  194. /package/files/{demo → .wl-skills/templates}/sale/demo/metallurgical-spec/data.ts +0 -0
  195. /package/files/{demo → .wl-skills/templates}/sale/demo/metallurgical-spec/index.scss +0 -0
  196. /package/files/{demo → .wl-skills/templates}/sale/demo/metallurgical-spec/index.vue +0 -0
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.10.1
4
+ * wl-skills-kit CLI v2.11.1
5
5
  *
6
6
  * 命令:
7
7
  * init 全量安装(默认,向后兼容)
@@ -29,6 +29,12 @@ const {
29
29
  hasAstAvailable,
30
30
  } = require("../lib/ast-rules");
31
31
 
32
+ // ─── page-spec 比对引擎(v2.11.1+,"约定 vs 代码"确定性核对)────────────
33
+ const { alignPage } = require("../lib/page-spec");
34
+
35
+ // ─── 安全修复引擎(v2.11.1+,确定性机械修复 F1~F5)────────────────────────
36
+ const { runSafeFix } = require("../lib/safe-fix");
37
+
32
38
  const FILES_DIR = path.resolve(__dirname, "..", "files");
33
39
  const TARGET_DIR = process.cwd();
34
40
  const MANIFEST_NAME = ".wl-skills-manifest.json";
@@ -48,6 +54,7 @@ const KNOWN_COMMANDS = new Set([
48
54
  "doctor-ui",
49
55
  "export",
50
56
  "mock-clean",
57
+ "fix",
51
58
  ]);
52
59
  const KNOWN_FLAGS = new Set([
53
60
  "--dry-run",
@@ -102,7 +109,7 @@ if (showHelp) {
102
109
  wl-skills-kit v${PKG.version} — AI Skill 模板包
103
110
 
104
111
  用法:
105
- npx @agile-team/wl-skills-kit [命令] [选项]
112
+ pnpm dlx @agile-team/wl-skills-kit [命令] [选项]
106
113
 
107
114
  命令:
108
115
  init 全量安装模板文件到当前项目(默认)
@@ -116,10 +123,11 @@ if (showHelp) {
116
123
  doctor-ui 检查 @agile-team/wk-skills-ui 接入完整性
117
124
  export 导出 reports/SYS_* 数据为 xlsx
118
125
  mock-clean 清理 mock 文件(按域或全部),保留 _utils.ts
126
+ fix 确定性机械修复(agGrid/:deep/未用 import 等),AI 无关
119
127
 
120
128
  选项:
121
129
  --dry-run 预览模式,不实际写入/删除任何文件
122
- --keep-reports clean 命令保留 .github/reports/(默认一起删除)
130
+ --keep-reports clean 命令保留 .wl-skills/reports/(默认一起删除)
123
131
  --force 强制执行,跳过同版本检测(忽略已安装状态)
124
132
  --domain <name> mock-clean 指定要清理的业务域(如 sale、mdata)
125
133
  --all mock-clean 清理全部 mock(保留 _utils.ts)
@@ -128,24 +136,24 @@ if (showHelp) {
128
136
  --help 显示帮助
129
137
 
130
138
  示例:
131
- npx @agile-team/wl-skills-kit 安装全量文件
132
- npx @agile-team/wl-skills-kit update 仅更新有变化的文件
133
- npx @agile-team/wl-skills-kit update --force 强制更新(忽略同版本检测)
134
- npx @agile-team/wl-skills-kit check 检查本地环境
135
- npx @agile-team/wl-skills-kit diff 查看当前项目与最新 kit 差异
136
- npx @agile-team/wl-skills-kit validate 检查 src/views 页面文件
137
- npx @agile-team/wl-skills-kit validate-page src/views/mdata/model/demo
138
- npx @agile-team/wl-skills-kit doctor-ui 检查 wk-skills-ui 接入
139
- npx @agile-team/wl-skills-kit export 导出菜单/字典/权限 xlsx
140
- npx @agile-team/wl-skills-kit clean 清理开发期文件
141
- npx @agile-team/wl-skills-kit clean --keep-reports 保留 reports/中的菜单/字典数据
142
- npx @agile-team/wl-skills-kit clean --dry-run 预览将要清理哪些文件
143
- npx @agile-team/wl-skills-kit mock-clean --domain mdata 清理 mdata 域 mock
144
- npx @agile-team/wl-skills-kit mock-clean --all 清理全部 mock
145
- npx @agile-team/wl-skills-kit mock-clean --all --dry-run 预览将要清理的 mock 文件
139
+ pnpm dlx @agile-team/wl-skills-kit 安装全量文件
140
+ pnpm dlx @agile-team/wl-skills-kit update 仅更新有变化的文件
141
+ pnpm dlx @agile-team/wl-skills-kit update --force 强制更新(忽略同版本检测)
142
+ pnpm dlx @agile-team/wl-skills-kit check 检查本地环境
143
+ pnpm dlx @agile-team/wl-skills-kit diff 查看当前项目与最新 kit 差异
144
+ pnpm dlx @agile-team/wl-skills-kit validate 检查 src/views 页面文件
145
+ pnpm dlx @agile-team/wl-skills-kit validate-page src/views/mdata/model/demo
146
+ pnpm dlx @agile-team/wl-skills-kit doctor-ui 检查 wk-skills-ui 接入
147
+ pnpm dlx @agile-team/wl-skills-kit export 导出菜单/字典/权限 xlsx
148
+ pnpm dlx @agile-team/wl-skills-kit clean 清理开发期文件
149
+ pnpm dlx @agile-team/wl-skills-kit clean --keep-reports 保留 reports/中的菜单/字典数据
150
+ pnpm dlx @agile-team/wl-skills-kit clean --dry-run 预览将要清理哪些文件
151
+ pnpm dlx @agile-team/wl-skills-kit mock-clean --domain mdata 清理 mdata 域 mock
152
+ pnpm dlx @agile-team/wl-skills-kit mock-clean --all 清理全部 mock
153
+ pnpm dlx @agile-team/wl-skills-kit mock-clean --all --dry-run 预览将要清理的 mock 文件
146
154
 
147
155
  保护路径(init / update 不覆盖已存在的):
148
- .github/reports/ AI 生成报告(团队累积数据,存在则跳过)
156
+ .wl-skills/reports/ AI 生成报告(团队累积数据,存在则跳过)
149
157
 
150
158
  清理保护路径(clean 不删除):
151
159
  src/components/ 通用组件(被业务页面 import,构建必需)
@@ -246,20 +254,20 @@ function writeManifest(data) {
246
254
  }
247
255
 
248
256
  // 受保护路径(clean 不删除)
249
- const PROTECTED_PREFIXES = ["src/components/", "src/types/"];
257
+ const PROTECTED_PREFIXES = ["src/components/", "src/types/", ".wl-skills/src/components/", ".wl-skills/src/types/"];
250
258
  function isProtected(relPath) {
251
259
  return PROTECTED_PREFIXES.some((p) => relPath.startsWith(p));
252
260
  }
253
261
 
254
262
  // reports/ 中的 AI 生成报告:init/update 遇到已存在不覆盖(团队累积数据)
255
263
  function isReportFile(relPath) {
256
- return relPath.startsWith(".github/reports/") && relPath.endsWith(".md");
264
+ return (relPath.startsWith(".wl-skills/reports/") || relPath.startsWith(".github/reports/")) && relPath.endsWith(".md");
257
265
  }
258
266
 
259
267
  // ─── 旧版遗留路径(v1.x/v2.0 → v2.1 迁移清理)───────────────────────────
260
268
  // update 时自动检测并移除,避免旧结构与新结构并存产生歧义。
261
269
  const LEGACY_PATHS = [
262
- // Skill 目录重组:flat → core/sync/ops 分级(v2.1)
270
+ // v2.1: Skill 目录重组 flat → core/sync/ops
263
271
  ".github/skills/prototype-scan/SKILL.md",
264
272
  ".github/skills/api-contract/SKILL.md",
265
273
  ".github/skills/page-codegen/SKILL.md",
@@ -275,34 +283,42 @@ const LEGACY_PATHS = [
275
283
  ".github/skills/menu-sync/SKILL.md",
276
284
  ".github/skills/menu-sync/env/env.local.json",
277
285
  ".github/skills/menu-sync/env/guide.md",
278
- ".github/skills/convention-extract/SKILL.md", // 已更名为 convention-audit
279
- // docs/ 废弃文件:内容已迁移至 guides/ 或 reports/(v2.0)
286
+ ".github/skills/convention-extract/SKILL.md",
280
287
  ".github/docs/menu-sync-design.md",
281
288
  ".github/docs/use-skill.md",
282
289
  ".github/docs/wl-skills-kit.md",
283
- ".github/docs/SYS_MENU_INFO.md", // 已迁移至 reports/
284
- // _compat/ 旧说明文件(v2.0 → v2.1 重构为可执行配置层)
290
+ ".github/docs/SYS_MENU_INFO.md",
285
291
  ".github/skills/_compat/ai-model-matrix.md",
286
292
  ".github/skills/_compat/editor-setup.md",
287
293
  ];
288
294
 
295
+ // ─── v2.11 迁移:.github/ → .wl-skills/ 目录重构 ────────────────────────────
296
+ // update 时自动检测旧目录结构并清理
297
+ const LEGACY_DIR_PREFIXES = [
298
+ ".github/skills/",
299
+ ".github/standards/",
300
+ ".github/guides/",
301
+ ".github/reports/",
302
+ ];
303
+
289
304
  // ─── 编辑器配置生成(从 _compat/editors.json 读取,特化 frontmatter 注入)─────
290
305
 
291
306
  const AUTO_HEADER_NOTE =
292
- "<!-- 由 @agile-team/wl-skills-kit 自动生成。源文件:.github/copilot-instructions.md -->\n" +
293
- "<!-- 请勿手动编辑本文件,更新时重新执行:npx @agile-team/wl-skills-kit@latest update -->\n\n";
307
+ "<!-- 由 @agile-team/wl-skills-kit 自动生成。薄壳入口 → .wl-skills/copilot-instructions-full.md -->\n" +
308
+ "<!-- 请勿手动编辑本文件,更新时重新执行:pnpm dlx @agile-team/wl-skills-kit@latest update -->\n\n";
294
309
 
295
310
  function getEditorConfigs(raw) {
311
+ // v2.11+: _compat 目录已迁移到 .wl-skills/skills/_compat/
296
312
  const editorsJsonPath = path.join(
297
313
  FILES_DIR,
298
- ".github",
314
+ ".wl-skills",
299
315
  "skills",
300
316
  "_compat",
301
317
  "editors.json",
302
318
  );
303
319
  const headersDir = path.join(
304
320
  FILES_DIR,
305
- ".github",
321
+ ".wl-skills",
306
322
  "skills",
307
323
  "_compat",
308
324
  "headers",
@@ -367,7 +383,7 @@ function runInstall(incremental) {
367
383
  if (oldManifest.version === PKG.version) {
368
384
  console.log(" ✔ 当前项目已安装 v" + PKG.version + ",无需重复操作");
369
385
  console.log(
370
- " 如需强制重装:npx @agile-team/wl-skills-kit@latest " +
386
+ " 如需强制重装:pnpm dlx @agile-team/wl-skills-kit@latest " +
371
387
  label +
372
388
  " --force",
373
389
  );
@@ -477,6 +493,8 @@ function runInstall(incremental) {
477
493
  if (incremental) {
478
494
  let migrated = 0;
479
495
  if (dryRun) console.log("\n [Step 3] 旧版遗留文件检查(迁移清理):\n");
496
+
497
+ // v2.1 旧版单文件清理
480
498
  for (const legacyRel of LEGACY_PATHS) {
481
499
  const legacyFull = path.join(TARGET_DIR, legacyRel);
482
500
  if (fs.existsSync(legacyFull)) {
@@ -488,6 +506,28 @@ function runInstall(incremental) {
488
506
  migrated++;
489
507
  }
490
508
  }
509
+
510
+ // v2.11 目录重构迁移:.github/skills|standards|guides|reports/ → .wl-skills/
511
+ for (const prefix of LEGACY_DIR_PREFIXES) {
512
+ const legacyDir = path.join(TARGET_DIR, prefix);
513
+ if (fs.existsSync(legacyDir)) {
514
+ const legacyFiles = walkDir(legacyDir, legacyDir);
515
+ for (const f of legacyFiles) {
516
+ const legacyFile = path.join(legacyDir, f);
517
+ if (dryRun) {
518
+ console.log(" 迁移清理 " + prefix + f + " (v2.11 目录重构)");
519
+ } else {
520
+ removeFileAndEmptyParents(legacyFile);
521
+ }
522
+ migrated++;
523
+ }
524
+ // 删除空目录
525
+ if (!dryRun && fs.existsSync(legacyDir)) {
526
+ try { fs.rmSync(legacyDir, { recursive: true, force: true }); } catch {}
527
+ }
528
+ }
529
+ }
530
+
491
531
  if (!dryRun && migrated > 0) {
492
532
  console.log(
493
533
  " 迁移: " +
@@ -572,7 +612,7 @@ function runInstall(incremental) {
572
612
  );
573
613
  }
574
614
  console.log(
575
- " ℹ 规范插件:建议执行 npx @robot-admin/git-standards init 接入代码质量与提交规范。",
615
+ " ℹ 规范插件:建议执行 pnpm dlx @robot-admin/git-standards init 接入代码质量与提交规范。",
576
616
  );
577
617
  console.log("");
578
618
 
@@ -590,7 +630,7 @@ function runInstall(incremental) {
590
630
  * 3. 如果存在且已含但格式过旧 → 刷新为最新格式
591
631
  * 4. 如果存在且格式最新 → 跳过
592
632
  *
593
- * hook 使用 npx 动态解析,避免硬编码 node_modules 路径在 pnpm 下失效。
633
+ * hook 使用包管理器动态解析,避免硬编码 node_modules 路径在 pnpm 下失效。
594
634
  * 包含存在性守卫:kit 未安装时优雅跳过,不阻断提交。
595
635
  */
596
636
  function ensurePreCommitHook(targetDir) {
@@ -705,7 +745,7 @@ function runClean() {
705
745
  const manifest = readManifest();
706
746
  if (!manifest) {
707
747
  console.log(" ⚠ 未找到 " + MANIFEST_NAME);
708
- console.log(" 请先执行 npx @agile-team/wl-skills-kit init 安装一次。");
748
+ console.log(" 请先执行 pnpm dlx @agile-team/wl-skills-kit init 安装一次。");
709
749
  console.log("");
710
750
  process.exit(1);
711
751
  }
@@ -713,12 +753,12 @@ function runClean() {
713
753
  const allFiles = Object.keys(manifest.files);
714
754
  const toRemove = allFiles.filter((f) => {
715
755
  if (isProtected(f)) return false;
716
- if (keepReports && f.startsWith(".github/reports/")) return false;
756
+ if (keepReports && (f.startsWith(".wl-skills/reports/") || f.startsWith(".github/reports/"))) return false;
717
757
  return true;
718
758
  });
719
759
  const toKeep = allFiles.filter((f) => {
720
760
  if (isProtected(f)) return true;
721
- if (keepReports && f.startsWith(".github/reports/")) return true;
761
+ if (keepReports && (f.startsWith(".wl-skills/reports/") || f.startsWith(".github/reports/"))) return true;
722
762
  return false;
723
763
  });
724
764
 
@@ -754,7 +794,7 @@ function runClean() {
754
794
  console.log(
755
795
  " 保留: " +
756
796
  toKeep.length +
757
- " 个文件(src/components/ + src/types/ + .github/reports/)",
797
+ " 个文件(src/components/ + src/types/ + .wl-skills/reports/)",
758
798
  );
759
799
  } else {
760
800
  console.log(
@@ -773,6 +813,7 @@ function expectedManifestFiles() {
773
813
  for (const relPath of files) {
774
814
  expected[relPath] = fileMd5(path.join(FILES_DIR, relPath));
775
815
  }
816
+ // v2.11+: copilot-instructions.md 是薄壳入口,完整地图在 .wl-skills/
776
817
  const instructionsSrc = path.join(
777
818
  FILES_DIR,
778
819
  ".github",
@@ -1220,8 +1261,24 @@ function runValidate() {
1220
1261
  // 合并 AST 结果(降级和正常都 push)
1221
1262
  issues.push(...astResult.issues);
1222
1263
 
1264
+ // ── page-spec 比对(v2.11.1+,"约定 vs 代码"确定性核对 S1~S5)───────
1265
+ // 页面目录存在 page-spec.json 时,比对 data.ts 实际实现与原型约定真值。
1266
+ // 无 page-spec.json 的页面静默跳过,不影响其他检查。
1267
+ let specAlignedPages = 0;
1268
+ for (const page of pages) {
1269
+ const absDir = path.join(TARGET_DIR, page.dir);
1270
+ const { issues: specIssues, hasSpec } = alignPage(absDir, page.dir);
1271
+ if (hasSpec) specAlignedPages++;
1272
+ issues.push(...specIssues);
1273
+ }
1274
+
1223
1275
  // ── 输出 ───────────────────────────────────────────────────────────
1224
- console.log(" 页面目录: " + pages.length + (astResult.pages ? "(AST 扫描 " + astResult.pages + ")" : ""));
1276
+ console.log(
1277
+ " 页面目录: " +
1278
+ pages.length +
1279
+ (astResult.pages ? "(AST 扫描 " + astResult.pages + ")" : "") +
1280
+ (specAlignedPages ? "(spec-align " + specAlignedPages + ")" : ""),
1281
+ );
1225
1282
  console.log(" 提示项: " + issues.length);
1226
1283
  console.log("");
1227
1284
  const errors = issues.filter((issue) => issue.level === "error").length;
@@ -1327,6 +1384,12 @@ const AST_FIX_SUGGESTIONS = {
1327
1384
  R10: { fix: '\u66ff\u6362\u539f\u751f el-* \u7ec4\u4ef6\u4e3a\u5e73\u53f0\u5c01\u88c5\uff08jh-select/jh-date/jh-pagination \u7b49\uff09', ref: 'standards/13-platform-components.md', auto: true },
1328
1385
  R11: { fix: '\u4ece data.ts \u4e2d\u79fb\u9664 Pinia Store import\uff0cStore \u5e94\u5728\u7ec4\u4ef6\u5c42\u4f7f\u7528', ref: 'standards/10-pinia.md', auto: true },
1329
1386
  R12: { fix: '\u5c06\u786c\u7f16\u7801 IP/URL \u79fb\u81f3 .env.* \u73af\u5883\u53d8\u91cf', ref: 'standards/07-config.md', auto: true },
1387
+ // S 系列:page-spec 约定 vs 代码确定性核对(v2.11.1+)
1388
+ S0: { fix: '\u4fee\u6b63 page-spec.json \u7ed3\u6784\uff08page/query/columns/toolbar/operations\uff09', ref: '.wl-skills/skills/core/page-codegen/SKILL.md', auto: false },
1389
+ S1: { fix: '\u8c03\u6574 queryDef() \u67e5\u8be2\u5b57\u6bb5\u987a\u5e8f\u4e0e page-spec.json query \u4e25\u683c\u4e00\u81f4', ref: '.wl-skills/skills/core/page-codegen/SKILL.md', auto: true },
1390
+ S2: { fix: '\u8c03\u6574 columnsDef() \u8868\u683c\u5217\u987a\u5e8f/\u96c6\u5408\u4e0e page-spec.json columns \u4e25\u683c\u4e00\u81f4', ref: '.wl-skills/skills/core/page-codegen/SKILL.md', auto: true },
1391
+ S3: { fix: '\u8c03\u6574 toolbarDef() \u6309\u94ae\u987a\u5e8f/\u989c\u8272\u4e0e page-spec.json toolbar \u4e25\u683c\u4e00\u81f4', ref: '.wl-skills/skills/core/page-codegen/SKILL.md', auto: true },
1392
+ S4: { fix: '\u64cd\u4f5c\u5217\u6309\u94ae\u4e0e page-spec.json operations \u4e25\u683c\u5bf9\u5e94\uff0c\u4e0d\u591a\u4e0d\u5c11', ref: '.wl-skills/skills/core/page-codegen/SKILL.md', auto: true },
1330
1393
  };
1331
1394
 
1332
1395
  function printFixSuggestions(blockingIssues) {
@@ -1562,13 +1625,18 @@ function parseMarkdownTable(content) {
1562
1625
  );
1563
1626
  }
1564
1627
 
1565
- function runExport() {
1628
+ async function runExport() {
1566
1629
  console.log("");
1567
1630
  console.log(" wl-skills-kit v" + PKG.version + " [export]");
1568
1631
  console.log(" 目标目录: " + TARGET_DIR);
1569
1632
  console.log("");
1570
1633
 
1571
- const reportDir = path.join(TARGET_DIR, ".github", "reports");
1634
+ const reportDir =
1635
+ [
1636
+ path.join(TARGET_DIR, ".wl-skills", "reports"),
1637
+ path.join(TARGET_DIR, ".github", "reports"),
1638
+ ].find((dir) => fs.existsSync(dir)) ||
1639
+ path.join(TARGET_DIR, ".wl-skills", "reports");
1572
1640
  const files = [
1573
1641
  ["菜单", "SYS_MENU_INFO.md"],
1574
1642
  ["字典", "SYS_DICT_INFO.md"],
@@ -1603,25 +1671,22 @@ function runExport() {
1603
1671
  console.log(" 将导出: " + outFile);
1604
1672
  console.log(" sheet 数: " + addedSheets);
1605
1673
  } else {
1606
- let XLSX;
1674
+ let writeXlsxFile;
1607
1675
  try {
1608
- XLSX = require("xlsx");
1676
+ writeXlsxFile = require("write-excel-file/node");
1609
1677
  } catch {
1610
1678
  console.error(
1611
- " ✖ 未找到 xlsx 依赖,请重新安装最新 @agile-team/wl-skills-kit",
1679
+ " ✖ 未找到 write-excel-file 依赖,请重新安装最新 @agile-team/wl-skills-kit",
1612
1680
  );
1613
1681
  process.exit(1);
1614
1682
  }
1615
- const wb = XLSX.utils.book_new();
1616
- for (const [sheetName, rows] of sheets) {
1617
- XLSX.utils.book_append_sheet(
1618
- wb,
1619
- XLSX.utils.aoa_to_sheet(rows),
1620
- sheetName,
1621
- );
1622
- }
1623
1683
  fs.mkdirSync(outDir, { recursive: true });
1624
- XLSX.writeFile(wb, outFile);
1684
+ await writeXlsxFile(
1685
+ sheets.map(([sheetName, rows]) => ({
1686
+ sheet: sheetName,
1687
+ data: rows,
1688
+ })),
1689
+ ).toFile(outFile);
1625
1690
  console.log(" ✔ 已导出: " + outFile);
1626
1691
  console.log(" sheet 数: " + addedSheets);
1627
1692
  }
@@ -1709,6 +1774,38 @@ function runMockClean() {
1709
1774
 
1710
1775
  // ─── 主路由 ─────────────────────────────────────────────────────────────
1711
1776
 
1777
+ // ─── 命令: fix(确定性机械修复)──────────────────────────────────────────
1778
+
1779
+ function runFix() {
1780
+ const scanPath =
1781
+ args.find((a) => !a.startsWith("-") && a !== command) || "src/views";
1782
+ console.log("");
1783
+ console.log(" wl-skills-kit v" + PKG.version + " [fix]" + (dryRun ? " [dry-run]" : ""));
1784
+ console.log(" 扫描目录: " + scanPath);
1785
+ console.log("");
1786
+
1787
+ const result = runSafeFix(TARGET_DIR, scanPath, { dryRun });
1788
+ if (result.files.length === 0) {
1789
+ console.log(" ✔ 未发现可自动修复的机械偏差");
1790
+ console.log("");
1791
+ return;
1792
+ }
1793
+ for (const f of result.files) {
1794
+ for (const change of f.changes) {
1795
+ console.log(" " + (dryRun ? "将修复" : "已修复") + " " + f.rel + " — " + change);
1796
+ }
1797
+ }
1798
+ console.log("");
1799
+ console.log(
1800
+ " " + (dryRun ? "预览" : "完成") + ":" + result.fixedCount + " 处机械修复,涉及 " + result.files.length + " 个文件",
1801
+ );
1802
+ if (!dryRun) {
1803
+ console.log("");
1804
+ console.log(" → 建议执行 wl-skills validate 复扫确认;语义级偏差仍需 AI 或人工处理");
1805
+ }
1806
+ console.log("");
1807
+ }
1808
+
1712
1809
  switch (command) {
1713
1810
  case "init":
1714
1811
  runInstall(false);
@@ -1733,11 +1830,17 @@ switch (command) {
1733
1830
  runDoctorUi();
1734
1831
  break;
1735
1832
  case "export":
1736
- runExport();
1833
+ runExport().catch((e) => {
1834
+ console.error(" ✖ 导出失败: " + (e && e.message ? e.message : e));
1835
+ process.exit(1);
1836
+ });
1737
1837
  break;
1738
1838
  case "mock-clean":
1739
1839
  runMockClean();
1740
1840
  break;
1841
+ case "fix":
1842
+ runFix();
1843
+ break;
1741
1844
  default:
1742
1845
  console.error(
1743
1846
  ' ✖ 未知命令: "' + command + '",请使用 --help 查看可用命令',
@@ -136,9 +136,9 @@ page-codegen 产出 SYS_* 报告
136
136
  ### 本地页面质量
137
137
 
138
138
  ```bash
139
- npx @agile-team/wl-skills-kit validate
140
- npx @agile-team/wl-skills-kit validate-page src/views/xxx/yyy
141
- npx @agile-team/wl-skills-kit doctor-ui
139
+ pnpm dlx @agile-team/wl-skills-kit validate
140
+ pnpm dlx @agile-team/wl-skills-kit validate-page src/views/xxx/yyy
141
+ pnpm dlx @agile-team/wl-skills-kit doctor-ui
142
142
  ```
143
143
 
144
144
  ### MCP 项目感知
@@ -132,9 +132,9 @@ prototype-scan
132
132
  ### Step 1:安装与环境预检
133
133
 
134
134
  ```bash
135
- npx @robot-admin/git-standards init
136
- npx @agile-team/wl-skills-kit@latest
137
- npx @agile-team/wl-skills-kit@latest check
135
+ pnpm dlx @robot-admin/git-standards init
136
+ pnpm dlx @agile-team/wl-skills-kit@latest
137
+ pnpm dlx @agile-team/wl-skills-kit@latest check
138
138
  ```
139
139
 
140
140
  检查点:
@@ -224,7 +224,7 @@ Agent 完成任一 Skill 后,必须输出:
224
224
  建议组合:
225
225
 
226
226
  ```bash
227
- npx @agile-team/wl-skills-kit@latest validate
227
+ pnpm dlx @agile-team/wl-skills-kit@latest validate
228
228
  ```
229
229
 
230
230
  MCP 验证: