@hupan56/wlkj 2.7.12 → 3.1.2

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 (253) hide show
  1. package/bin/cli.js +1435 -1107
  2. package/package.json +29 -29
  3. package/templates/qoder/agents/insight-planning.md +1 -1
  4. package/templates/qoder/agents/insight-research.md +28 -15
  5. package/templates/qoder/commands/optional/wl-insight.md +161 -161
  6. package/templates/qoder/commands/optional/wl-report.md +20 -39
  7. package/templates/qoder/commands/optional/wl-status.md +4 -4
  8. package/templates/qoder/commands/wl-code.md +2 -2
  9. package/templates/qoder/commands/wl-design.md +6 -6
  10. package/templates/qoder/commands/wl-init.md +3 -3
  11. package/templates/qoder/commands/wl-prd.md +26 -13
  12. package/templates/qoder/commands/wl-req.md +43 -0
  13. package/templates/qoder/commands/wl-search.md +78 -47
  14. package/templates/qoder/commands/wl-task.md +343 -40
  15. package/templates/qoder/commands/wl-test.md +43 -17
  16. package/templates/qoder/config.yaml +52 -14
  17. package/templates/qoder/hooks/post-tool-use.py +181 -0
  18. package/templates/qoder/hooks/session-start.py +94 -23
  19. package/templates/qoder/hooks/stop-eval.py +207 -0
  20. package/templates/qoder/hooks/user-prompt-submit.py +139 -0
  21. package/templates/qoder/rules/wl-pipeline.md +85 -49
  22. package/templates/qoder/scripts/README.md +102 -0
  23. package/templates/qoder/scripts/capability/__init__.py +26 -0
  24. package/templates/qoder/scripts/capability/__main__.py +72 -0
  25. package/templates/qoder/scripts/capability/adapters/__init__.py +29 -0
  26. package/templates/qoder/scripts/capability/adapters/cli.py +316 -0
  27. package/templates/qoder/scripts/capability/adapters/mcp.py +334 -0
  28. package/templates/qoder/scripts/capability/adapters/qw.py +271 -0
  29. package/templates/qoder/scripts/capability/caps/__init__.py +27 -0
  30. package/templates/qoder/scripts/capability/caps/context.py +36 -0
  31. package/templates/qoder/scripts/capability/caps/cron.py +50 -0
  32. package/templates/qoder/scripts/capability/caps/identity.py +43 -0
  33. package/templates/qoder/scripts/capability/caps/memory.py +71 -0
  34. package/templates/qoder/scripts/capability/caps/notify.py +41 -0
  35. package/templates/qoder/scripts/capability/caps/present.py +48 -0
  36. package/templates/qoder/scripts/capability/caps/repo.py +31 -0
  37. package/templates/qoder/scripts/capability/caps/sandbox.py +43 -0
  38. package/templates/qoder/scripts/capability/chain.py +92 -0
  39. package/templates/qoder/scripts/capability/memory_chain.py +41 -0
  40. package/templates/qoder/scripts/capability/registry.py +246 -0
  41. package/templates/qoder/scripts/capability/registry_mcp.py +250 -0
  42. package/templates/qoder/scripts/capability/smoke_test.py +211 -0
  43. package/templates/qoder/scripts/capability/smoke_test_report.json +94 -0
  44. package/templates/qoder/scripts/deployment/setup/__init__.py +11 -0
  45. package/templates/qoder/scripts/deployment/setup/carriers.py +669 -0
  46. package/templates/qoder/scripts/deployment/setup/carriers_verify.py +148 -0
  47. package/templates/qoder/scripts/{init_doctor.py → deployment/setup/init_doctor.py} +100 -39
  48. package/templates/qoder/scripts/{install_qoderwork.py → deployment/setup/install_qoderwork.py} +48 -30
  49. package/templates/qoder/scripts/{platform_doctor.py → deployment/setup/platform_doctor.py} +271 -259
  50. package/templates/qoder/scripts/{repo_root.py → deployment/setup/repo_root.py} +9 -2
  51. package/templates/qoder/scripts/{setup.py → deployment/setup/setup.py} +143 -14
  52. package/templates/qoder/scripts/{setup_lanhu.py → deployment/setup/setup_lanhu.py} +979 -963
  53. package/templates/qoder/scripts/domain/design/__init__.py +0 -0
  54. package/templates/qoder/scripts/{fill_prototype.py → domain/design/fill_prototype.py} +17 -5
  55. package/templates/qoder/scripts/{gen_design_doc.py → domain/design/gen_design_doc.py} +406 -394
  56. package/templates/qoder/scripts/domain/kg/__init__.py +11 -0
  57. package/templates/qoder/scripts/domain/kg/build/__init__.py +0 -0
  58. package/templates/qoder/scripts/domain/kg/build/build_entity_registry.py +201 -0
  59. package/templates/qoder/scripts/domain/kg/build/build_relations.py +132 -0
  60. package/templates/qoder/scripts/{build_style_index.py → domain/kg/build/build_style_index.py} +50 -15
  61. package/templates/qoder/scripts/domain/kg/build/build_workflows.py +149 -0
  62. package/templates/qoder/scripts/{kg_build.py → domain/kg/build/kg_build.py} +685 -612
  63. package/templates/qoder/scripts/{kg_build_db.py → domain/kg/build/kg_build_db.py} +338 -327
  64. package/templates/qoder/scripts/{kg_incremental.py → domain/kg/build/kg_incremental.py} +425 -393
  65. package/templates/qoder/scripts/{learn_aggregate.py → domain/kg/build/learn_aggregate.py} +212 -201
  66. package/templates/qoder/scripts/domain/kg/extract/__init__.py +0 -0
  67. package/templates/qoder/scripts/{common → domain/kg/extract}/extract.py +430 -419
  68. package/templates/qoder/scripts/domain/kg/extract/test_extract.py +115 -0
  69. package/templates/qoder/scripts/{common → domain/kg/extract}/ts_extract.py +614 -536
  70. package/templates/qoder/scripts/domain/kg/graph/__init__.py +0 -0
  71. package/templates/qoder/scripts/{kg_link_db.py → domain/kg/graph/kg_link_db.py} +235 -224
  72. package/templates/qoder/scripts/domain/kg/graph/kg_semantic.py +683 -0
  73. package/templates/qoder/scripts/{kg.py → domain/kg/kg.py} +871 -708
  74. package/templates/qoder/scripts/domain/kg/kg_capabilities.py +182 -0
  75. package/templates/qoder/scripts/domain/kg/search/__init__.py +0 -0
  76. package/templates/qoder/scripts/{context_pack.py → domain/kg/search/context_pack.py} +45 -17
  77. package/templates/qoder/scripts/{enrich_prompt.py → domain/kg/search/enrich_prompt.py} +238 -226
  78. package/templates/qoder/scripts/domain/kg/search/prefetch.py +384 -0
  79. package/templates/qoder/scripts/{common → domain/kg/search}/search_engine.py +207 -205
  80. package/templates/qoder/scripts/{search_index.py → domain/kg/search/search_index.py} +210 -88
  81. package/templates/qoder/scripts/domain/kg/server/__init__.py +0 -0
  82. package/templates/qoder/scripts/domain/kg/server/kgd.py +549 -0
  83. package/templates/qoder/scripts/domain/kg/server/perf_bench.py +197 -0
  84. package/templates/qoder/scripts/domain/kg/storage/__init__.py +0 -0
  85. package/templates/qoder/scripts/{kg_duckdb.py → domain/kg/storage/kg_duckdb.py} +70 -45
  86. package/templates/qoder/scripts/domain/learning/__init__.py +0 -0
  87. package/templates/qoder/scripts/{learn.py → domain/learning/learn.py} +157 -146
  88. package/templates/qoder/scripts/domain/report/__init__.py +11 -0
  89. package/templates/qoder/scripts/{add_session.py → domain/report/add_session.py} +256 -244
  90. package/templates/qoder/scripts/{export.py → domain/report/export.py} +72 -4
  91. package/templates/qoder/scripts/{report.py → domain/report/report.py} +292 -281
  92. package/templates/qoder/scripts/domain/report/report_snapshot.py +261 -0
  93. package/templates/qoder/scripts/domain/report/role.py +39 -0
  94. package/templates/qoder/scripts/{status.py → domain/report/status.py} +737 -628
  95. package/templates/qoder/scripts/domain/report/status_snapshot.py +191 -0
  96. package/templates/qoder/scripts/domain/requirement/__init__.py +0 -0
  97. package/templates/qoder/scripts/{archive_prd.py → domain/requirement/archive_prd.py} +389 -377
  98. package/templates/qoder/scripts/domain/requirement/req.py +228 -0
  99. package/templates/qoder/scripts/domain/task/__init__.py +11 -0
  100. package/templates/qoder/scripts/{git_sync.py → domain/task/git_sync.py} +90 -50
  101. package/templates/qoder/scripts/{syncgate.py → domain/task/syncgate.py} +18 -7
  102. package/templates/qoder/scripts/domain/task/task.py +229 -0
  103. package/templates/qoder/scripts/domain/task/task_lifecycle.py +606 -0
  104. package/templates/qoder/scripts/domain/task/task_query.py +162 -0
  105. package/templates/qoder/scripts/domain/task/task_relations.py +425 -0
  106. package/templates/qoder/scripts/{team_sync.py → domain/task/team_sync.py} +101 -23
  107. package/templates/qoder/scripts/domain/task/zentao_sync.py +370 -0
  108. package/templates/qoder/scripts/foundation/__init__.py +0 -0
  109. package/templates/qoder/scripts/foundation/bootstrap.py +145 -0
  110. package/templates/qoder/scripts/foundation/core/__init__.py +0 -0
  111. package/templates/qoder/scripts/foundation/core/cmd_registry.py +112 -0
  112. package/templates/qoder/scripts/foundation/core/config.py +187 -0
  113. package/templates/qoder/scripts/{common → foundation/core}/paths.py +706 -400
  114. package/templates/qoder/scripts/foundation/data/__init__.py +0 -0
  115. package/templates/qoder/scripts/foundation/data/contract.py +317 -0
  116. package/templates/qoder/scripts/{common → foundation/data}/events.py +2 -2
  117. package/templates/qoder/scripts/foundation/data/result.py +223 -0
  118. package/templates/qoder/scripts/{common → foundation/data}/task_utils.py +427 -392
  119. package/templates/qoder/scripts/foundation/identity/__init__.py +0 -0
  120. package/templates/qoder/scripts/foundation/identity/check_publish.py +103 -0
  121. package/templates/qoder/scripts/{common → foundation/identity}/developer.py +239 -238
  122. package/templates/qoder/scripts/foundation/identity/guard.py +159 -0
  123. package/templates/qoder/scripts/{common → foundation/identity}/identity.py +132 -9
  124. package/templates/qoder/scripts/foundation/identity/roles.py +60 -0
  125. package/templates/qoder/scripts/foundation/integrations/__init__.py +0 -0
  126. package/templates/qoder/scripts/{common → foundation/integrations}/active_task.py +30 -15
  127. package/templates/qoder/scripts/{common → foundation/integrations}/feishu.py +11 -10
  128. package/templates/qoder/scripts/{common → foundation/integrations}/terms.py +3 -3
  129. package/templates/qoder/scripts/foundation/integrations/zentao_client.py +220 -0
  130. package/templates/qoder/scripts/foundation/io/__init__.py +0 -0
  131. package/templates/qoder/scripts/{common → foundation/io}/filelock.py +1 -1
  132. package/templates/qoder/scripts/{common → foundation/io}/reqid.py +1 -1
  133. package/templates/qoder/scripts/foundation/protocol/__init__.py +0 -0
  134. package/templates/qoder/scripts/foundation/protocol/duckdb_conn.py +39 -0
  135. package/templates/qoder/scripts/foundation/protocol/mcp_base.py +268 -0
  136. package/templates/qoder/scripts/foundation/utils/__init__.py +0 -0
  137. package/templates/qoder/scripts/{common → foundation/utils}/eval_api.py +12 -1
  138. package/templates/qoder/scripts/{common → foundation/utils}/pip_install.py +23 -6
  139. package/templates/qoder/scripts/{common → foundation/utils}/platform_guard.py +1 -1
  140. package/templates/qoder/scripts/orchestration/__init__.py +0 -0
  141. package/templates/qoder/scripts/orchestration/wlkj.py +185 -0
  142. package/templates/qoder/scripts/protocol/__init__.py +0 -0
  143. package/templates/qoder/scripts/protocol/browser/README.md +207 -0
  144. package/templates/qoder/scripts/protocol/browser/SKILL.md +265 -0
  145. package/templates/qoder/scripts/protocol/browser/config.env +9 -0
  146. package/templates/qoder/scripts/protocol/browser/references/cdp-api.md +110 -0
  147. package/templates/qoder/scripts/protocol/browser/references/migration-2.5.3.md +72 -0
  148. package/templates/qoder/scripts/protocol/browser/references/site-patterns/.gitkeep +0 -0
  149. package/templates/qoder/scripts/protocol/browser/scripts/browser-discovery.mjs +138 -0
  150. package/templates/qoder/scripts/protocol/browser/scripts/cdp-proxy.mjs +672 -0
  151. package/templates/qoder/scripts/protocol/browser/scripts/check-deps.mjs +206 -0
  152. package/templates/qoder/scripts/protocol/browser/scripts/find-url.mjs +253 -0
  153. package/templates/qoder/scripts/protocol/browser/scripts/match-site.mjs +46 -0
  154. package/templates/qoder/scripts/protocol/browser/templates/config.env.template +9 -0
  155. package/templates/qoder/scripts/protocol/mcp/__init__.py +11 -0
  156. package/templates/qoder/scripts/protocol/mcp/kg_mcp_server.py +478 -0
  157. package/templates/qoder/scripts/{lanhu_stdio_wrapper.py → protocol/mcp/lanhu_stdio_wrapper.py} +131 -119
  158. package/templates/qoder/scripts/protocol/mcp/mcp_doctor.py +548 -0
  159. package/templates/qoder/scripts/protocol/mcp/mcp_launcher.py +600 -0
  160. package/templates/qoder/scripts/protocol/mcp/mysql_mcp_server.py +461 -0
  161. package/templates/qoder/scripts/protocol/mcp/zentao_mcp_server.py +1920 -0
  162. package/templates/qoder/scripts/protocol/transports/__init__.py +56 -0
  163. package/templates/qoder/scripts/protocol/transports/base.py +87 -0
  164. package/templates/qoder/scripts/protocol/transports/cli.py +132 -0
  165. package/templates/qoder/scripts/protocol/transports/http.py +141 -0
  166. package/templates/qoder/scripts/protocol/transports/stdio.py +293 -0
  167. package/templates/qoder/scripts/run_weekly_update.bat +27 -18
  168. package/templates/qoder/scripts/run_weekly_update.sh +22 -13
  169. package/templates/qoder/scripts/validation/__init__.py +0 -0
  170. package/templates/qoder/scripts/validation/eval/__init__.py +0 -0
  171. package/templates/qoder/scripts/validation/eval/perf-report-2026-06-24.md +139 -0
  172. package/templates/qoder/scripts/validation/eval/qwork_harness.py +617 -0
  173. package/templates/qoder/scripts/validation/eval/report-commands.md +220 -0
  174. package/templates/qoder/scripts/validation/eval/transcript_timing.py +386 -0
  175. package/templates/qoder/scripts/validation/metrics/__init__.py +0 -0
  176. package/templates/qoder/scripts/{eval_prd.py → validation/metrics/eval_prd.py} +84 -15
  177. package/templates/qoder/scripts/validation/metrics/usability_score.py +750 -0
  178. package/templates/qoder/scripts/validation/test/__init__.py +11 -0
  179. package/templates/qoder/scripts/validation/test/assertion_gen.py +551 -0
  180. package/templates/qoder/scripts/{autotest.py → validation/test/autotest.py} +1234 -1751
  181. package/templates/qoder/scripts/validation/test/autotest_auth.py +109 -0
  182. package/templates/qoder/scripts/{autotest_batch.py → validation/test/autotest_batch.py} +255 -224
  183. package/templates/qoder/scripts/validation/test/autotest_data.py +680 -0
  184. package/templates/qoder/scripts/validation/test/autotest_opencli.py +646 -0
  185. package/templates/qoder/scripts/{autotest_run.py → validation/test/autotest_run.py} +323 -297
  186. package/templates/qoder/scripts/validation/test/autotest_webaccess.py +571 -0
  187. package/templates/qoder/scripts/{benchmark.py → validation/test/benchmark.py} +17 -5
  188. package/templates/qoder/scripts/{kg_auto_login.py → validation/test/kg_auto_login.py} +208 -196
  189. package/templates/qoder/scripts/{kg_test_runner.py → validation/test/kg_test_runner.py} +13 -2
  190. package/templates/qoder/scripts/{page_probe.py → validation/test/page_probe.py} +470 -459
  191. package/templates/qoder/scripts/validation/test/smoke_all_commands.py +170 -0
  192. package/templates/qoder/settings.json +23 -2
  193. package/templates/qoder/skills/design-import/SKILL.md +235 -226
  194. package/templates/qoder/skills/design-review/SKILL.md +91 -82
  195. package/templates/qoder/skills/prd-generator/SKILL.md +38 -24
  196. package/templates/qoder/skills/prd-review/SKILL.md +8 -6
  197. package/templates/qoder/skills/prototype-generator/SKILL.md +296 -247
  198. package/templates/qoder/skills/spec-coder/SKILL.md +24 -15
  199. package/templates/qoder/skills/spec-generator/SKILL.md +24 -12
  200. package/templates/qoder/skills/test-generator/SKILL.md +9 -7
  201. package/templates/qoder/skills/wl-code/SKILL.md +25 -13
  202. package/templates/qoder/skills/wl-commit/SKILL.md +10 -9
  203. package/templates/qoder/skills/wl-design/SKILL.md +7 -5
  204. package/templates/qoder/skills/wl-init/SKILL.md +8 -8
  205. package/templates/qoder/skills/wl-insight/SKILL.md +25 -12
  206. package/templates/qoder/skills/wl-prd-full/SKILL.md +59 -8
  207. package/templates/qoder/skills/wl-prd-quick/SKILL.md +7 -7
  208. package/templates/qoder/skills/wl-prd-review/SKILL.md +18 -6
  209. package/templates/qoder/skills/wl-report/SKILL.md +27 -25
  210. package/templates/qoder/skills/wl-search/SKILL.md +151 -80
  211. package/templates/qoder/skills/wl-spec/SKILL.md +9 -7
  212. package/templates/qoder/skills/wl-status/SKILL.md +50 -18
  213. package/templates/qoder/skills/wl-task/SKILL.md +94 -12
  214. package/templates/qoder/skills/wl-test/SKILL.md +154 -45
  215. package/templates/qoder/templates/prd-full-template.md +7 -0
  216. package/templates/root/AGENTS.md +275 -237
  217. package/templates/root/requirements.txt +3 -0
  218. package/templates/root//344/275/277/347/224/250/350/257/264/346/230/216.md +3 -3
  219. package/templates/root//346/226/260/346/211/213/346/214/207/345/215/227.md +2 -2
  220. package/templates/qoder/hooks/inject-workflow-state.py +0 -169
  221. package/templates/qoder/scripts/__pycache__/check_mcp_launch.cpython-39.pyc +0 -0
  222. package/templates/qoder/scripts/__pycache__/install_qoderwork.cpython-39.pyc +0 -0
  223. package/templates/qoder/scripts/__pycache__/mcp_launcher.cpython-39.pyc +0 -0
  224. package/templates/qoder/scripts/__pycache__/platform_doctor.cpython-39.pyc +0 -0
  225. package/templates/qoder/scripts/check_carriers.py +0 -238
  226. package/templates/qoder/scripts/check_mcp.py +0 -298
  227. package/templates/qoder/scripts/check_mcp_launch.py +0 -183
  228. package/templates/qoder/scripts/check_qoderwork_consistency.py +0 -166
  229. package/templates/qoder/scripts/collect_prds.py +0 -31
  230. package/templates/qoder/scripts/common/mentions.py +0 -134
  231. package/templates/qoder/scripts/common/utf8.py +0 -38
  232. package/templates/qoder/scripts/extract_api_params.py +0 -246
  233. package/templates/qoder/scripts/extract_routes.py +0 -54
  234. package/templates/qoder/scripts/extract_routes_tree.py +0 -78
  235. package/templates/qoder/scripts/handoff.py +0 -22
  236. package/templates/qoder/scripts/init_developer.py +0 -76
  237. package/templates/qoder/scripts/kg_mcp_server.py +0 -801
  238. package/templates/qoder/scripts/kg_semantic.py +0 -150
  239. package/templates/qoder/scripts/mcp_launcher.py +0 -414
  240. package/templates/qoder/scripts/mysql_mcp_server.py +0 -396
  241. package/templates/qoder/scripts/parse_prds.py +0 -33
  242. package/templates/qoder/scripts/role.py +0 -51
  243. package/templates/qoder/scripts/sync_carriers.py +0 -259
  244. package/templates/qoder/scripts/task.py +0 -1261
  245. package/templates/qoder/scripts/workspace_init.py +0 -102
  246. package/templates/qoder/scripts/zentao_mcp_server.py +0 -424
  247. package/templates/qoder/skills/prompt-enrich/SKILL.md +0 -90
  248. /package/templates/qoder/scripts/{common → deployment}/__init__.py +0 -0
  249. /package/templates/qoder/{skills/prototype-generator/SKILL.md.zcode-79180-2af4721f-f9a6-412c-88db-c0af680d211b.tmp → scripts/domain/__init__.py} +0 -0
  250. /package/templates/qoder/scripts/{common → domain/kg/graph}/graph_traverse.py +0 -0
  251. /package/templates/qoder/scripts/{common → domain/kg/server}/repowiki.py +0 -0
  252. /package/templates/qoder/scripts/{common → foundation/io}/atomicio.py +0 -0
  253. /package/templates/qoder/scripts/{secure-ls.js → validation/test/secure-ls.js} +0 -0
@@ -1,82 +1,91 @@
1
- ---
2
- name: design-review
3
- description: "评审设计交付物的完整性。Review design artifacts for completeness. 用户说'评审设计''设计稿看一下''检查交互稿'时触发。"
4
- trigger: "user invokes /review design, asks to check design, or designer submits design artifacts"
5
- ---
6
-
7
-
8
- ## 🔧 仓库根定位(QoderWork 桌面端 vs Qoder IDE/CLI)
9
-
10
- **后续脚本里的 `$R` 代表仓库根**,先确定它(QoderWork 桌面端工作目录不是仓库根,相对路径会失效):
11
- ```bash
12
- R=$(python ~/.qoderwork/repo_root.py 2>/dev/null) || R=.
13
- ```
14
- > `repo_root.py` 从 `~/.qoderwork/mcp.json` 反推仓库根;失败回退 `.`(IDE/CLI 工作目录即仓库根)。找不到时先跑 `python .qoder/scripts/install_qoderwork.py`。
15
-
16
- # Design Review Skill(设计师 + PM 都可用)
17
-
18
- > 🚫 **边界铁律:蓝湖工具(`mcp__lanhu__*`)只能在本 skill(即 `/wl-design-spec 评审`)内部调用。**
19
- > 用户直接说"用蓝湖对比一下"而没走评审命令时,引导到 `/wl-design-spec 评审`。非侵入式,不裸调。
20
-
21
- ## ⚙️ 自取上下文(Quest / QoderWork 无 hook 注入,必须自读)
22
-
23
- - `.qoder/.developer` 当前评审人
24
- - 设计文件路径由用户指定,或扫 `workspace/members/{dev}/drafts/prototype-*.html`
25
- - `data/style/{需求名}-design-spec.json` 存在,作为评审基准(优先级最高)
26
-
27
- ## 两种评审模式
28
-
29
- ### 模式 A:评审 AI 原型(设计师审 AI 的活)
30
-
31
- 设计师在 QoderWork "评审原型",AI 拉出 `drafts/prototype-*.html`:
32
-
33
- 1. 逐项检查(见下方 Checklist)
34
- 2. **对照设计师 spec**:若 data/style/spec.json,检查原型是否匹配
35
- 3. 输出问题清单(按严重度排序),设计师确认后 PM 说"修订原型"
36
-
37
- ### 模式 B:评审设计师交付(PM 审设计师的活)
38
-
39
- PM 说"评审设计稿",AI 检查设计师的 spec.json 或原型:
40
-
41
- 1. 是否跟系统现有风格一致(对照 vben-style-reference.json / Vant 变量)
42
- 2. 图标/颜色是否来自真源
43
- 3. 是否覆盖 PRD 的所有界面需求
44
-
45
- ## 检查项 (Checklist)
46
-
47
- - [ ] 组件规格完整(components.json 或 spec.json)
48
- - [ ] 交互流程覆盖所有状态(interaction-flow.md)
49
- - [ ] 技术约束已标注
50
- - [ ] 响应式/设计 Token 已定义
51
- - [ ] 符合 PRD 需求
52
- - [ ] **图标来自真源(data/index/ref-icon.json),无 emoji**(硬性)
53
- - [ ] 颜色来自真源(Web: ref-vben-style.json;APP: Vant 变量)
54
- - [ ] **若设计师 spec 存在:原型是否匹配 spec 的布局/配色/组件**(硬性)
55
- - [ ] 侧边栏/导航/表格/表单等关键区域是否跟系统其他页面一致
56
- - [ ] **🆕 按钮文案是否用了系统真实文案**(对照 DESIGN.md 的 "Real Button Texts" 段或 entity-registry,别用编的"新增/编辑"
57
- - [ ] **🆕 布局是否跟同功能模块的标杆页面一致**(对照 DESIGN.md 的 "Feature Modules" 段)
58
- - [ ] **🆕 侧边栏宽度是否 = layout_fingerprint 的值**(fywl-ui 是 160px,不是 200px)
59
- - [ ] **🆕 spec 有 `lanhu_source`:原型配色是否忠于蓝湖原图**(调 `mcp__lanhu__get_ai_analyze_design_result` 拉蓝湖 CSS,逐项比原型 `:root` 的值是否一致;不一致=还原度问题)
60
- - [ ] **🆕 spec 有 `icons`:原型图标是否用了蓝湖切图**(别退回 emoji 或通用图标)
61
-
62
- **评审时可调 MCP 工具辅助:**
63
- - `mcp__qoder-knowledge-graph__feature_overview(feature='XX')` 看这个功能模块的完整画像,对比原型是否遗漏页面/按钮
64
- - `mcp__qoder-knowledge-graph__get_design_system(platform='web')` 拿到真实 token/按钮文案/模块标杆做对照
65
- - **`mcp__qoder-knowledge-graph__get_workflow(module='XX')`** 查业务操作链(查询→新增→审批→...),检查原型是否覆盖了完整交互流程(而不只是静态页面)
66
- - **`mcp__coverage_matrix()`** 查这个功能有没有测试覆盖,如果原型要改的页面有测试,提醒"改动后需回归测试"
67
- - **`mcp__lanhu__get_ai_analyze_design_result`** spec lanhu_source 时,拉蓝湖原图 CSS 做还原度比对(蓝湖不可用则跳过此项,不阻塞)
68
-
69
- ## 输出
70
-
71
- 报告:PASS 列出需修复的问题清单(按 🔴严重/🟡建议 分级)。
72
-
73
- ## 埋点(评审完成后 AI 必须做)
74
-
75
- 评审输出报告后,**立即调用 learning 引擎记录本次评审**(让团队学习哪些设计问题最常见):
76
-
77
- ```bash
78
- python "$R/.qoder/scripts/learn.py" record review_done "{\"target\":\"{被评审的原型或spec}\",\"result\":\"PASS或问题数\",\"issues\":[\"严重问题1\",\"建议1\"]}"
79
- ```
80
-
81
- > 埋点失败不阻塞评审。数据进个人 journal,管理员聚合到 kg.duckdb 后,可统计"最常出现的设计问题",反哺 design-import 防再犯。
82
- 若不通过,附上修复建议和参考文件路径,PM 确认后 AI 修订原型。
1
+ ---
2
+ name: design-review
3
+ description: "评审设计交付物的完整性。Review design artifacts for completeness. "
4
+ trigger: "user invokes /wl-* command explicitly"
5
+ ---
6
+
7
+
8
+ ## 🔧 仓库根定位(QoderWork 桌面端 vs Qoder IDE/CLI)
9
+
10
+ **后续脚本里的 `$R` 代表仓库根**,先确定它(QoderWork 桌面端工作目录不是仓库根,相对路径会失效):
11
+ ```bash
12
+ R=$(python ~/.qoderwork/repo_root.py 2>/dev/null) || R=.
13
+ ```
14
+ > `repo_root.py` 从 `~/.qoderwork/mcp.json` 反推仓库根;失败回退 `.`(IDE/CLI 工作目录即仓库根)。找不到时先跑 `python "$R/.qoder/scripts/orchestration/wlkj.py" install-qw`。
15
+
16
+ # Design Review Skill(设计师 + PM 都可用)
17
+
18
+ > 🚫 **边界铁律:蓝湖工具(`MCP 工具 (`)只能在本 skill(即 `/wl-design 评审`)内部调用。**
19
+ > 用户直接说"用蓝湖对比一下"而没走评审命令时,引导到 `/wl-design 评审`。非侵入式,不裸调。
20
+
21
+ ## 🔌 MCP 工具可用性(双轨)
22
+
23
+ skill 用到的知识图谱 MCP 工具(`MCP 工具 (` / `MCP 工具 (`)**自动路由(有 MCP 走 MCP,无 MCP 走 CLI)**。
24
+
25
+ - **QoderWork**:直接调 MCP 工具(更快更准)。
26
+ - **Qoder IDE/Quest/CLI(无 MCP)**:用 `python "$R/.qoder/scripts/orchestration/wlkj.py" search` 降级(`--style table|form|modal` / `--field <名>` / `--components`);仅 MCP 有的能力(如 feature_overview/get_workflow)跳过或人工评估。
27
+
28
+ ## ⚙️ 自取上下文(Quest / QoderWork 无 hook 注入,必须自读)
29
+
30
+ - **当前身份**:当前评审人。读法:先 `R=$(python ~/.qoderwork/repo_root.py 2>/dev/null) || R=.` 定位仓库根,
31
+ `python "$R/.qoder/scripts/foundation/core/paths.py" whoami`(输出开发者名;空=未初始化)。
32
+ ⚠️ 勿用裸相对路径 `.qoder/.developer`(QoderWork 桌面端 cwd 不在仓库根,会读不到而误报未初始化)。
33
+ - 设计文件路径由用户指定,或扫 `workspace/members/{dev}/drafts/prototype-*.html`
34
+ - `data/style/{需求名}-design-spec.json` 存在,作为评审基准(优先级最高)
35
+
36
+ ## 两种评审模式
37
+
38
+ ### 模式 A:评审 AI 原型(设计师审 AI 的活)
39
+
40
+ 设计师在 QoderWork 说"评审原型",AI 拉出 `drafts/prototype-*.html`:
41
+
42
+ 1. 逐项检查(见下方 Checklist)
43
+ 2. **对照设计师 spec**:若 data/style/ 有 spec.json,检查原型是否匹配
44
+ 3. 输出问题清单(按严重度排序),设计师确认后 PM 说"修订原型"
45
+
46
+ ### 模式 B:评审设计师交付(PM 审设计师的活)
47
+
48
+ PM 说"评审设计稿",AI 检查设计师的 spec.json 或原型:
49
+
50
+ 1. 是否跟系统现有风格一致(对照 vben-style-reference.json / Vant 变量)
51
+ 2. 图标/颜色是否来自真源
52
+ 3. 是否覆盖 PRD 的所有界面需求
53
+
54
+ ## 检查项 (Checklist)
55
+
56
+ - [ ] 组件规格完整(components.json spec.json
57
+ - [ ] 交互流程覆盖所有状态(interaction-flow.md
58
+ - [ ] 技术约束已标注
59
+ - [ ] 响应式/设计 Token 已定义
60
+ - [ ] 符合 PRD 需求
61
+ - [ ] **图标来自真源(data/index/ref-icon.json),无 emoji**(硬性)
62
+ - [ ] 颜色来自真源(Web: ref-vben-style.json;APP: Vant 变量)
63
+ - [ ] **若设计师 spec 存在:原型是否匹配 spec 的布局/配色/组件**(硬性)
64
+ - [ ] 侧边栏/导航/表格/表单等关键区域是否跟系统其他页面一致
65
+ - [ ] **🆕 按钮文案是否用了系统真实文案**(对照 DESIGN.md 的 "Real Button Texts" 段或 entity-registry,别用编的"新增/编辑")
66
+ - [ ] **🆕 布局是否跟同功能模块的标杆页面一致**(对照 DESIGN.md 的 "Feature Modules" 段)
67
+ - [ ] **🆕 侧边栏宽度是否 = layout_fingerprint 的值**(fywl-ui 是 160px,不是 200px)
68
+ - [ ] **🆕 若 spec 有 `lanhu_source`:原型配色是否忠于蓝湖原图**(调 `cap.mcp.call("get_ai_analyze_design_result` 拉蓝湖 CSS,逐项比原型 `:root` 的值是否一致;不一致=还原度问题)
69
+ - [ ] **🆕 若 spec 有 `icons`:原型图标是否用了蓝湖切图**(别退回 emoji 或通用图标)
70
+
71
+ **评审时可调 MCP 工具辅助:**
72
+ - `cap.mcp.call("feature_overview", {"feature": "XX"})` → 看这个功能模块的完整画像,对比原型是否遗漏页面/按钮
73
+ - `cap.mcp.call("get_design_system", {"platform": "web"})` → 拿到真实 token/按钮文案/模块标杆做对照
74
+ - **`cap.mcp.call("get_workflow", {"module": "XX"})`** → 查业务操作链(查询→新增→审批→...),检查原型是否覆盖了完整交互流程(而不只是静态页面)
75
+ - **`cap.mcp.call("coverage_matrix", {})`** → 查这个功能有没有测试覆盖,如果原型要改的页面有测试,提醒"改动后需回归测试"
76
+ - **`cap.mcp.call("get_ai_analyze_design_result`** → spec 有 lanhu_source 时,拉蓝湖原图 CSS 做还原度比对(蓝湖不可用则跳过此项,不阻塞)
77
+
78
+ ## 输出
79
+
80
+ 报告:PASS 或 列出需修复的问题清单(按 🔴严重/🟡建议 分级)。
81
+
82
+ ## 埋点(评审完成后 AI 必须做)
83
+
84
+ 评审输出报告后,**立即调用 learning 引擎记录本次评审**(让团队学习哪些设计问题最常见):
85
+
86
+ ```bash
87
+ python "$R/.qoder/scripts/orchestration/wlkj.py" learn record review_done "{\"target\":\"{被评审的原型或spec}\",\"result\":\"PASS或问题数\",\"issues\":[\"严重问题1\",\"建议1\"]}"
88
+ ```
89
+
90
+ > 埋点失败不阻塞评审。数据进个人 journal,管理员聚合到 kg.duckdb 后,可统计"最常出现的设计问题",反哺 design-import 防再犯。
91
+ 若不通过,附上修复建议和参考文件路径,PM 确认后 AI 修订原型。
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: prd-generator
3
- description: "生成 PRD + 平台匹配的原型。Generate PRD with platform-aware prototype. 用户说'写个需求''生成PRD''做个原型''保单这块加个功能''写个产品需求文档'时触发。"
4
- trigger: "user describes a requirement, asks for PRD, mockup, or invokes /wl-prd-full or /wl-prd-quick"
3
+ description: "生成 PRD + 平台匹配的原型。Generate PRD with platform-aware prototype. "
4
+ trigger: "user invokes /wl-* command explicitly"
5
5
  ---
6
6
 
7
7
 
@@ -11,7 +11,7 @@ trigger: "user describes a requirement, asks for PRD, mockup, or invokes /wl-prd
11
11
  ```bash
12
12
  R=$(python ~/.qoderwork/repo_root.py 2>/dev/null) || R=.
13
13
  ```
14
- > `repo_root.py` 从 `~/.qoderwork/mcp.json` 反推仓库根;失败回退 `.`(IDE/CLI 工作目录即仓库根)。找不到时先跑 `python .qoder/scripts/install_qoderwork.py`。
14
+ > `repo_root.py` 从 `~/.qoderwork/mcp.json` 反推仓库根;失败回退 `.`(IDE/CLI 工作目录即仓库根)。找不到时先跑 `python "$R/.qoder/scripts/orchestration/wlkj.py" install-qw`。
15
15
 
16
16
  # PRD Generator Skill
17
17
 
@@ -39,20 +39,28 @@ R=$(python ~/.qoderwork/repo_root.py 2>/dev/null) || R=.
39
39
 
40
40
  ## 自取上下文(Quest / QoderWork 无 hook,必须自读)
41
41
 
42
- - `.qoder/.developer` 当前开发者名
43
- - `.qoder/.current-task` 当前活动任务
42
+ - **当前身份**:当前开发者名。读法:先 `R=$(python ~/.qoderwork/repo_root.py 2>/dev/null) || R=.` 定位仓库根,
43
+ `python "$R/.qoder/scripts/foundation/core/paths.py" whoami`(输出开发者名;空=未初始化)。
44
+ ⚠️ 勿用裸相对路径 `.qoder/.developer`(QoderWork 桌面端 cwd 不在仓库根,会读不到而误报未初始化)。
45
+ - **活动任务**:当前活动任务。读法 `python "$R/.qoder/scripts/foundation/core/paths.py" current-task`(输出任务路径;空=无活动任务)。
44
46
  - `data/index/.index-meta.json` — 知识图谱新鲜度
45
47
 
46
- ### 写 PRD 前:一次取全(context_pack 已含数据库表结构+历史PRD)
48
+ ### 写 PRD 前:一次取全(prefetch 预测 + 批量预取)
47
49
 
48
- **只调 1 次** `context_pack`(第 1-8 段一次全返回),不要逐个调 MCP:
49
- - 第 4 段 = 历史 PRD(防重复,替代 search_prd)
50
- - 8 = 数据库表结构+真实字段(替代 query_schema)
51
- - 5 = 相关 API(替代 feature_overview)
50
+ **写 PRD 第一件事:调 1 `prefetch`**(它会预测业务词 + 批量取多词上下文,合并去重):
51
+ ```bash
52
+ ROLE=$(python "$R/.qoder/scripts/orchestration/wlkj.py" role 2>/dev/null || echo pm)
53
+ python "$R/.qoder/scripts/orchestration/wlkj.py" kg prefetch "<需求描述>" --platform <p>
54
+ ```
55
+ 或直接:`python "$R/.qoder/scripts/orchestration/wlkj.py" prefetch "<需求描述>" --platform <p>`
56
+
57
+ prefetch 一次返回 8 段(含历史PRD/数据库表/真实字段/API/Wiki),等于把多个业务词的查询合并。**prefetch 之后严禁再串行 search/find/grep**(这是轮次爆炸的根因——查一个词不命中就换词再查 6+ 次)。
52
58
 
53
- **仅当 context_pack 没覆盖到时才额外调**(极少):
54
- - 字段枚举值:`mcp__qoder-mysql__query_distinct(table='表名', column='状态列')` context_pack 给了表结构但没给枚举取值,需要时才调
55
- - 改表影响:`mcp__qoder-knowledge-graph__table_impact(table='表名')` — 评估改动范围时才调
59
+ **仅当 prefetch 明确没覆盖到时才补调一次**(极少):
60
+ > 以下两个 MCP 工具自动路由(有 MCP 走 MCP,无 MCP 走 CLI);Qoder IDE/Quest/CLI 无 MCP 时跳过即可,靠 prefetch 已返回的数据足够。
61
+
62
+ - 字段枚举值:`cap.mcp.call("query_distinct", {"table": "表名", "column": "状态列"})` — prefetch 给了表结构但没给枚举取值,需要时才调
63
+ - 改表影响:`cap.mcp.call("table_impact", {"table": "表名"})` — 评估改动范围时才调
56
64
 
57
65
  ## STEP 0: 必须先问平台
58
66
 
@@ -106,12 +114,12 @@ R=$(python ~/.qoderwork/repo_root.py 2>/dev/null) || R=.
106
114
  **第 1 步|并行取全(同一条消息并发,别串行)**
107
115
  ```
108
116
  同一条消息里并行发:
109
- context_pack.py <关键词> --platform <p> ← 代码+页面+字段+API+样式一次拿全
110
- ② Read 历史相关 PRD
111
- ③ Read 业务草稿
117
+ kg.py prefetch "<需求描述原句>" --platform <p> ← 多词预测一次取全: 代码+页面+字段+API+样式+历史PRD标题
118
+ ② Read 业务草稿(workspace/members/{dev}/drafts/ 下相关草稿)
112
119
  (若衔接了 insight 报告:同时 Read 该报告,作为现状背景输入)
113
120
  ```
114
- 然后只读 context_pack 列出的最相关 1-2 个 Vue 文件。
121
+ 然后只读 prefetch 列出的最相关 1-2 个 Vue 文件。
122
+ > 历史相关 PRD:prefetch 第4段已返回标题列表。**只有要参考某篇历史 PRD 的写法/结构时,才额外 Read 那一篇**,不要每次都读。
115
123
  > ⚠️ 探索/调研/对标已归 /wl-insight,第 1 步**不派多 agent、不做 web 搜索**。
116
124
 
117
125
  **第 2 步|轻反思 + 批量确认(核心:基于现状反思,重点是跟用户确认)**
@@ -130,11 +138,17 @@ R=$(python ~/.qoderwork/repo_root.py 2>/dev/null) || R=.
130
138
 
131
139
  **"准"的保障。eval_prd.py 的 A1/A2/A3 已实现大半,这里提升为流程强制门。**
132
140
 
133
- 生成后、发布前:
141
+ 生成后、发布前,**先跑角色+契约前置门,再跑质量分**:
134
142
  ```bash
135
- python "$R/.qoder/scripts/eval_prd.py" <draft-prd.md> <prototype.html>
143
+ # 1+2: 角色边界(当前角色能否产 prd?) + 契约校验(@contract 头是否合规?)
144
+ # 软提示不阻塞, 越权/无契约头会提示但仍可发布
145
+ python "$R/.qoder/scripts/foundation/identity/check_publish.py" prd <draft-prd.md>
146
+
147
+ # 门 3: 质量分 (eval_prd 内部也会跑契约校验, 这里是质量评分)
148
+ python "$R/.qoder/scripts/orchestration/wlkj.py" eval <draft-prd.md> <prototype.html>
136
149
  ```
137
- eval_prd < 80% 不准发布,按报告修到 PASS。
150
+ - check_publish 越权提示 软提示(如 dev 产 prd 会提示"建议产品经理"),不阻塞
151
+ - eval_prd < 80% 不准发布,按报告修到 PASS
138
152
 
139
153
  AI 在跑 eval_prd 前,自己先做内容自检(快档只查锁②):
140
154
 
@@ -168,12 +182,12 @@ context_pack 字段段返回"无直接相关字段"时,**字段锁不报错,
168
182
  | REQ-ID 分配器失败 | 扫最大号+1,文件名带 `-manual`,push 时 team_sync 校验唯一 |
169
183
  | team_sync SYNC_CONFLICT | AI 按脚本给的命令自行解决,不让用户碰 git |
170
184
 
171
- > 完整降级表(含平台答错、归档失败等)见 `.qoder/commands/wl-prd-full.md` 的「故障降级表」。
185
+ > 完整降级表(含平台答错、归档失败等)见 `.qoder/commands/wl-prd.md` 的「故障降级表」。
172
186
 
173
187
  ## 取上下文 — 一次取全(不要逐个搜)
174
188
 
175
189
  ```bash
176
- python "$R/.qoder/scripts/context_pack.py" <关键词> --platform <web|app>
190
+ python "$R/.qoder/scripts/orchestration/wlkj.py" context <关键词> --platform <web|app>
177
191
  ```
178
192
  返回 7 章节(代码+页面+字段+PRD+API+样式+Wiki)。**只读最相关 1-2 个 Vue 文件**。
179
193
 
@@ -196,7 +210,7 @@ python "$R/.qoder/scripts/context_pack.py" <关键词> --platform <web|app>
196
210
  ## 原型规则
197
211
 
198
212
  - 从模板开始(`.qoder/templates/prototype-{web|app}.html`),模板已有正确颜色与 mixed-nav 多级菜单骨架
199
- - 先跑 `python "$R/.qoder/scripts/fill_prototype.py" <关键词> --platform <web|app>` 拿 80% 草稿;
213
+ - 先跑 `python "$R/.qoder/scripts/orchestration/wlkj.py" fill-prototype <关键词> --platform <web|app>` 拿 80% 草稿;
200
214
  它会按目标项目的 `layout_fingerprint` 自动填示例菜单骨架和真实字段,你只微调 20%
201
215
  - 颜色/布局指纹见 fill_prototype 输出的"设计 Token"段(布局模式/主色/侧边栏宽度)
202
216
  - **菜单层级**: 若需求描述了侧边栏/菜单结构(如"一级→二级,右侧三四级"),
@@ -211,7 +225,7 @@ python "$R/.qoder/scripts/context_pack.py" <关键词> --platform <web|app>
211
225
  PRD 写入 drafts 后,**顺手归档一份**到当前成员的按时间文件夹,方便人翻查"我那天做了啥":
212
226
 
213
227
  ```bash
214
- python "$R/.qoder/scripts/archive_prd.py" <刚生成的PRD文件路径>
228
+ python "$R/.qoder/scripts/orchestration/wlkj.py" archive-prd <刚生成的PRD文件路径>
215
229
  ```
216
230
 
217
231
  > 归档产物:`workspace/members/{你的名字}/archive/{YYYY-MM-DD}/REQ-{编号}-{中文标题}.md`
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: prd-review
3
- description: "评审 PRD 完整性与质量。Review PRD for completeness and quality. 用户说'评审PRD''PRD质量怎么样''检查一下这个需求文档'时触发。"
4
- trigger: "user invokes /review prd, asks to review/check PRD quality, or PM submits PRD"
3
+ description: "评审 PRD 完整性与质量。Review PRD for completeness and quality. "
4
+ trigger: "user invokes /wl-* command explicitly"
5
5
  ---
6
6
 
7
7
 
@@ -11,13 +11,15 @@ trigger: "user invokes /review prd, asks to review/check PRD quality, or PM subm
11
11
  ```bash
12
12
  R=$(python ~/.qoderwork/repo_root.py 2>/dev/null) || R=.
13
13
  ```
14
- > `repo_root.py` 从 `~/.qoderwork/mcp.json` 反推仓库根;失败回退 `.`(IDE/CLI 工作目录即仓库根)。找不到时先跑 `python .qoder/scripts/install_qoderwork.py`。
14
+ > `repo_root.py` 从 `~/.qoderwork/mcp.json` 反推仓库根;失败回退 `.`(IDE/CLI 工作目录即仓库根)。找不到时先跑 `python "$R/.qoder/scripts/orchestration/wlkj.py" install-qw`。
15
15
 
16
16
  # PRD Review Skill
17
17
 
18
18
  ## ⚙️ 自取上下文(Quest / QoderWork 无 hook 注入,必须自读)
19
19
 
20
- - `.qoder/.developer` 当前评审人
20
+ - **当前身份**:当前评审人。读法:先 `R=$(python ~/.qoderwork/repo_root.py 2>/dev/null) || R=.` 定位仓库根,
21
+ 再 `python "$R/.qoder/scripts/foundation/core/paths.py" whoami`(输出开发者名;空=未初始化)。
22
+ ⚠️ 勿用裸相对路径 `.qoder/.developer`(QoderWork 桌面端 cwd 不在仓库根,会读不到而误报未初始化)。
21
23
  - `data/index/.index-meta.json` — 图谱新鲜度(影响"现实锚定"能否校验)
22
24
  - 评审的 PRD 文件路径由用户指定;若用户没给路径,扫 `data/docs/prd/` 和
23
25
  `workspace/members/{dev}/drafts/` 列出最近的 PRD 让用户选
@@ -40,7 +42,7 @@ R=$(python ~/.qoderwork/repo_root.py 2>/dev/null) || R=.
40
42
 
41
43
  跑一次 EVA 门禁给出客观分数:
42
44
  ```bash
43
- python "$R/.qoder/scripts/eval_prd.py" <PRD路径> [原型HTML路径]
45
+ python "$R/.qoder/scripts/orchestration/wlkj.py" eval <PRD路径> [原型HTML路径]
44
46
  ```
45
47
  分数 ≥80% 才能发布。低于 80% 把 EVA 报告的问题合并进上面的清单。
46
48
 
@@ -48,6 +50,6 @@ python "$R/.qoder/scripts/eval_prd.py" <PRD路径> [原型HTML路径]
48
50
 
49
51
  评审出结论(无论 PASS/打回)后埋点,供 /wl-status 统计评审活跃度:
50
52
  ```bash
51
- python "$R/.qoder/scripts/learn.py" record review_done "{\"prd\": \"<PRD文件名>\", \"verdict\": \"<PASS|打回>\", \"score\": <EVA分数或空>}"
53
+ python "$R/.qoder/scripts/orchestration/wlkj.py" learn record review_done "{\"prd\": \"<PRD文件名>\", \"verdict\": \"<PASS|打回>\", \"score\": <EVA分数或空>}"
52
54
  ```
53
55
  > 失败静默忽略。