@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,7 +1,7 @@
1
1
  ---
2
2
  name: spec-generator
3
- description: "从已确认的 PRD 自动生成开发 Spec 文档(技术规格说明)。Auto-generate development Spec documents from confirmed PRDs. 用户说'生成规格''写spec''出技术方案''把PRD转成开发文档'时触发。"
4
- trigger: "PRD 被确认/发布后自动触发;或用户说'生成Spec''写技术规格''/wl-spec'"
3
+ description: "从已确认的 PRD 自动生成开发 Spec 文档(技术规格说明)。Auto-generate development Spec documents from confirmed PRDs. "
4
+ trigger: "user invokes /wl-* command explicitly"
5
5
  ---
6
6
 
7
7
 
@@ -11,7 +11,7 @@ trigger: "PRD 被确认/发布后自动触发;或用户说'生成Spec''写技
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
  # Spec Generator
17
17
 
@@ -23,11 +23,13 @@ R=$(python ~/.qoderwork/repo_root.py 2>/dev/null) || R=.
23
23
 
24
24
  ## ⚙️ 自取上下文(Quest / QoderWork 无 hook 注入,必须自读)
25
25
 
26
- - `.qoder/.developer` 当前开发者
27
- - `.qoder/.current-task` 当前任务(决定 spec 存到哪个 task 目录)
26
+ - **当前身份**:当前开发者。读法:先 `R=$(python ~/.qoderwork/repo_root.py 2>/dev/null) || R=.` 定位仓库根,
27
+ `python "$R/.qoder/scripts/foundation/core/paths.py" whoami`(输出开发者名;空=未初始化)。
28
+ ⚠️ 勿用裸相对路径 `.qoder/.developer`(QoderWork 桌面端 cwd 不在仓库根,会读不到而误报未初始化)。
29
+ - **活动任务**:当前任务(决定 spec 存到哪个 task 目录)。读法 `python "$R/.qoder/scripts/foundation/core/paths.py" current-task`(输出任务路径;空=无活动任务)。
28
30
  - 扫描 PRD 来源目录:`data/docs/prd/`(已发布)+ `workspace/members/{dev}/drafts/REQ-*.md`(草稿)
29
31
  找出还没有对应 Spec 的 PRD
30
- - 风格/字段参考:`python "$R/.qoder/scripts/search_index.py" --field <字段名>` 查现有字段命名约定
32
+ - 风格/字段参考:`python "$R/.qoder/scripts/orchestration/wlkj.py" search --field <字段名>` 查现有字段命名约定
31
33
  - 团队 Java 约定(MyBatis Plus + RESTful + BigDecimal 金额)写在本 skill 的 Step 3
32
34
 
33
35
  ## Step 1: 定位 PRD
@@ -43,15 +45,25 @@ ls workspace/members/{developer}/drafts/REQ-*.md
43
45
 
44
46
  ## Step 2: 读取上下文
45
47
 
46
- 按优先级读取:
48
+ ### ⚡ 取全一次到位(先跑,省掉后续多次 search/Read)
49
+
50
+ ```bash
51
+ cap.mcp.call("context_pack", {"keyword": "..."}) <PRD里的模块关键词> --platform <web|app> --role dev
52
+ ```
53
+
54
+ **一次拿到**:相关代码文件(第1段) + 真实字段名(第3段) + 相关 API(第5段) + Repo Wiki(第7段)。
55
+ 照着第1段命中的相似文件学写法,**不要再 search_index 单词搜**。
56
+
57
+ ### 同时并发补这几项(与 context_pack 无依赖,同回合并发)
58
+
47
59
  1. **PRD 文件**(必需):需求源
48
60
  2. **历史 Spec**(推荐):扫 `workspace/specs/` 看同类需求的写法,照着写
49
- 3. **现有代码风格**(推荐):用 search_index.py 找相关模块的真实代码做参考
50
- 4. **数据字典**(如有):`.qoder/context/data-dictionary.md`(不存在则跳过,从现有 Entity 类推断)
51
- 5. **真实表结构(强烈推荐)**:调 MySQL MCP 查数据库真实字段,别靠猜。
52
- - `mcp__qoder-mysql__query_schema(table='quality_case', db='fywl_ics_quality')`
61
+ 3. **真实表结构**(强烈推荐):context_pack 不含 DB schema,写 API 字段前单独查
62
+ - 先 `cap.mcp.call("list_envs", {})` 问环境,再 `query_schema(table='quality_case', db='fywl_ics_quality')`
53
63
  - 拿到真实列名/类型/注释(注释里常含枚举定义,如"0=小时,1=工作日")
54
- - 注意:[QAS 测试环境] 表结构与生产一致可放心用;数据行是测试数据仅参考格式
64
+
65
+ > 数据字典 `.qoder/context/data-dictionary.md` 如存在顺手读,不存在跳过。
66
+ > 以上 PRD/历史Spec/query_schema 三项相互独立 → **同一条消息并发发**,不要逐个等。
55
67
 
56
68
  ## Step 3: 分析并生成
57
69
 
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: test-generator
3
- description: "从已实现代码和 Spec 自动生成单元测试。Auto-generate unit tests from implemented code and Spec. 用户说'写单元测试''补测试''覆盖一下''写个test'时触发。需用户确认(DANGEROUS)。"
4
- trigger: "代码实现完成后;用户说'写测试''补单测''生成test''/wl-test'"
3
+ description: "从已实现代码和 Spec 自动生成单元测试。Auto-generate unit tests from implemented code and Spec. 需用户确认(DANGEROUS)。"
4
+ trigger: "user invokes /wl-* command explicitly"
5
5
  ---
6
6
 
7
7
 
@@ -11,7 +11,7 @@ trigger: "代码实现完成后;用户说'写测试''补单测''生成test''/w
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
  # Test Generator
17
17
 
@@ -25,12 +25,14 @@ R=$(python ~/.qoderwork/repo_root.py 2>/dev/null) || R=.
25
25
 
26
26
  ## ⚙️ 自取上下文(Quest / QoderWork 无 hook 注入,必须自读)
27
27
 
28
- - `.qoder/.developer` 当前开发者
29
- - `.qoder/.current-task` 当前任务
28
+ - **当前身份**:当前开发者。读法:先 `R=$(python ~/.qoderwork/repo_root.py 2>/dev/null) || R=.` 定位仓库根,
29
+ `python "$R/.qoder/scripts/foundation/core/paths.py" whoami`(输出开发者名;空=未初始化)。
30
+ ⚠️ 勿用裸相对路径 `.qoder/.developer`(QoderWork 桌面端 cwd 不在仓库根,会读不到而误报未初始化)。
31
+ - **活动任务**:当前任务。读法 `python "$R/.qoder/scripts/foundation/core/paths.py" current-task`(输出任务路径;空=无活动任务)。
30
32
  - Spec 文件:`workspace/specs/REQ-{ID}-*.spec.md` 或 `workspace/tasks/{task-id}/spec.md`
31
33
  - 已实现代码:用 search_index.py 定位
32
34
  ```bash
33
- python "$R/.qoder/scripts/search_index.py" <类名或模块关键词>
35
+ python "$R/.qoder/scripts/orchestration/wlkj.py" search <类名或模块关键词>
34
36
  ```
35
37
 
36
38
  ## Step 1: 定位待测代码
@@ -48,7 +50,7 @@ ls data/code/ # 已实现代码库
48
50
  2. **Spec 文件**(推荐):测试用例映射来源
49
51
  3. **现有测试代码**(推荐):用 search_index.py 找同类 Test 类,照着写
50
52
  ```bash
51
- python "$R/.qoder/scripts/search_index.py" Test
53
+ python "$R/.qoder/scripts/orchestration/wlkj.py" search Test
52
54
  ```
53
55
 
54
56
  ## Step 3: 生成测试
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: wl-code
3
- description: "按开发 Spec 严格实现代码(/wl-code 命令入口)。Implement code following a Spec strictly. 用户说'开始写代码''按规格实现''实现这个接口''把这个需求做出来'或输入 /wl-code 时触发。需用户确认(DANGEROUS)。"
4
- trigger: "Spec 已确认待实现;用户说'开始写代码''按spec实现''/wl-code'"
3
+ description: "按开发 Spec 严格实现代码(/wl-code 命令入口)。Implement code following a Spec strictly. 需用户确认(DANGEROUS)。"
4
+ trigger: "user invokes /wl-* command explicitly"
5
5
  ---
6
6
 
7
7
 
@@ -11,7 +11,7 @@ trigger: "Spec 已确认待实现;用户说'开始写代码''按spec实现''/w
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
  # wl-code — 按 Spec 实现代码(/wl-code 命令入口)
17
17
 
@@ -22,28 +22,40 @@ R=$(python ~/.qoderwork/repo_root.py 2>/dev/null) || R=.
22
22
 
23
23
  ## ⚙️ 自取上下文(Quest / QoderWork 无 hook 注入,必须自读)
24
24
 
25
- - `.qoder/.developer` 当前开发者
26
- - `.qoder/.current-task` 当前活动任务(找对应的 spec)
25
+ - **当前身份**:当前开发者。读法:先 `R=$(python ~/.qoderwork/repo_root.py 2>/dev/null) || R=.` 定位仓库根,
26
+ `python "$R/.qoder/scripts/foundation/core/paths.py" whoami`(输出开发者名;空=未初始化)。
27
+ ⚠️ 勿用裸相对路径 `.qoder/.developer`(QoderWork 桌面端 cwd 不在仓库根,会读不到而误报未初始化)。
28
+ - **活动任务**:当前活动任务(找对应的 spec)。读法 `python "$R/.qoder/scripts/foundation/core/paths.py" current-task`(输出任务路径;空=无活动任务)。
27
29
  - 活动任务的 spec:`workspace/specs/` 或 `workspace/tasks/{id}/spec.md`
28
30
 
29
- ### 改代码前必查(用知识图谱 MCP,防改崩)
31
+ ### 取全一次到位(spec 里的模块名 → 1 次 context_pack 拿全)
30
32
 
31
- 1. **改表影响分析**:涉及改数据库表/Entity 时,先 `mcp__qoder-knowledge-graph__table_impact(table='表名')`
33
+ ```bash
34
+ cap.mcp.call("context_pack", {"keyword": "..."}) <模块关键词> --platform <web|app> --role dev
35
+ ```
36
+
37
+ **一次返回**:相关代码文件(第1段) + 字段真名(第3段) + 相关 API(第5段) + Repo Wiki(第7段)。
38
+ 拿到后直接 Read 2-3 个命中的代码文件照着写,**不要再 search_index 单词搜**(context 第1段已给全代码路径)。
39
+ > 只有关键词命中太少时,才回退 `search_index.py <词>` 补搜。
40
+
41
+ ### 改表/改 Entity 前必查(用知识图谱 MCP,防改崩)
42
+
43
+ > ⚠️ 本段依赖知识图谱 MCP(`cap.mcp.call("search_code", ...)` / `cap.mcp.call("query_schema", ...)`),自动路由。
44
+ > Qoder IDE/Quest/CLI 无 MCP 时:table_impact 无脚本等价,需人工评估改动波及面;真实字段可用 `python "$R/.qoder/scripts/orchestration/wlkj.py" search --field <表名>` 查代码侧字段(不含 DB 真实列类型)。
45
+
46
+ 1. **改表影响分析**:涉及改数据库表/Entity 时,先 `cap.mcp.call("table_impact", {"table": "表名"})`
32
47
  - 查这张表关联哪些 Entity + 影响哪些 Controller/接口。
33
48
  - 例:`table_impact(table='quality_case')` → 发现影响 QualityCaseController + 5 个接口。
34
49
  - 看完才知道改动波及面,避免改一处崩多处。
35
- 2. **真实字段核对**:写 Entity/SQL 前 `mcp__qoder-mysql__query_schema(table='表名')`
50
+ 2. **真实字段核对**:写 Entity/SQL 前 `cap.mcp.call("query_schema", {"table": "表名"})`
51
+ - context_pack 不含 DB 表结构(只有代码字段名),写 Entity/DDL 必须单独查真实列。
36
52
  - 拿真实列名/类型/注释(含枚举定义),别靠推断。
37
53
  - [QAS环境] 表结构与生产一致可放心用。
38
54
 
39
55
  ## 执行
40
56
 
41
57
  1. **加载 Spec**:按 REQ-ID 找 spec;没参数就读 `.qoder/.current-task`
42
- 2. **搜相关代码**:
43
- ```bash
44
- python "$R/.qoder/scripts/search_index.py" <关键词>
45
- ```
46
- 读相关文件了解现有模式。
58
+ 2. **一次取全上下文**:用上面 context_pack(spec 里的模块名)拿代码+字段+API,再 Read 命中的 2-3 个文件
47
59
  3. **按 spec-coder skill 实现**:严格按 spec,遵循 data/code/ 的团队约定
48
60
  4. **自检**:
49
61
  - [ ] Spec 所有需求都覆盖
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: wl-commit
3
- description: "代码提交 + push + 同步,带质量门禁。Git commit + push + sync with pre-commit quality gate. 用户说'提交代码''commit''推上去''保存代码''提交一下'时触发。需用户确认(DANGERONS)。"
4
- trigger: "用户说'提交''commit''推上去''保存代码''提交一下''/wl-commit'"
3
+ description: "代码提交 + push + 同步,带质量门禁。Git commit + push + sync with pre-commit quality gate. 需用户确认(DANGEROUS)。"
4
+ trigger: "user invokes /wl-* command explicitly"
5
5
  ---
6
6
 
7
7
 
@@ -11,7 +11,7 @@ trigger: "用户说'提交''commit''推上去''保存代码''提交一下''/wl-c
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
  # wl-commit — 代码提交 + 质量门禁 + 同步
17
17
 
@@ -21,18 +21,19 @@ R=$(python ~/.qoderwork/repo_root.py 2>/dev/null) || R=.
21
21
 
22
22
  ## ⚙️ 自取上下文(Quest / QoderWork 无 hook 注入,必须自读)
23
23
 
24
- - `.qoder/.developer` 当前开发者(提交作者)
24
+ - **当前身份**:当前开发者(提交作者)。读法:先 `R=$(python ~/.qoderwork/repo_root.py 2>/dev/null) || R=.` 定位仓库根,
25
+ 再 `python "$R/.qoder/scripts/foundation/core/paths.py" whoami`(输出开发者名;空=未初始化)。
26
+ ⚠️ 勿用裸相对路径 `.qoder/.developer`(QoderWork 桌面端 cwd 不在仓库根,会读不到而误报未初始化)。
25
27
  - 当前工作目录的 `git status` 和 `git diff --stat` 看改了什么
26
- - `.qoder/.current-task` — 若有活动任务,提交信息关联任务 ID
28
+ - **活动任务**:若有活动任务,提交信息关联任务 ID。读法 `python "$R/.qoder/scripts/foundation/core/paths.py" current-task`(输出任务路径;空=无活动任务)。
27
29
 
28
30
  ## 执行流程
29
31
 
30
32
  ### Step 1: 看改动
31
33
  ```bash
32
- git status
33
- git diff --stat
34
- git diff --cached --stat
34
+ git status && git diff HEAD --stat
35
35
  ```
36
+ > 三个只读查询合并成一条命令一次拿全(status + 工作区/暂存区改动清单),别分三次发。
36
37
 
37
38
  ### Step 2: 质量门禁(提交前自检)
38
39
 
@@ -70,7 +71,7 @@ git push
70
71
 
71
72
  提交成功后埋点(写当前开发者的 journal,供 /wl-status 健康度统计):
72
73
  ```bash
73
- python "$R/.qoder/scripts/learn.py" record commit_done "{\"files\": <改动文件数>, \"task\": \"<关联任务ID或空>\"}"
74
+ python "$R/.qoder/scripts/orchestration/wlkj.py" learn record commit_done "{\"files\": <改动文件数>, \"task\": \"<关联任务ID或空>\"}"
74
75
  ```
75
76
  > 失败静默忽略,绝不阻塞提交流程。
76
77
 
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: wl-design
3
- description: "设计工序入口: import 录入设计稿→spec.json(默认) / generate 按设计spec出原型 / review 评审原型。用户说'录入设计稿''按设计出原型''评审原型'或输入 /wl-design 时触发。"
4
- trigger: "用户说'录入设计稿''Figma稿录入''按设计出原型''评审原型''/wl-design'"
3
+ description: "设计工序入口: import 录入设计稿→spec.json(默认) / generate 按设计spec出原型 / review 评审原型。"
4
+ trigger: "user invokes /wl-* command explicitly"
5
5
  ---
6
6
 
7
7
 
@@ -11,7 +11,7 @@ trigger: "用户说'录入设计稿''Figma稿录入''按设计出原型''评审
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
  # wl-design — 设计工序入口(/wl-design 命令入口)
17
17
 
@@ -36,8 +36,10 @@ R=$(python ~/.qoderwork/repo_root.py 2>/dev/null) || R=.
36
36
 
37
37
  ## ⚙️ 自取上下文(Quest / QoderWork 无 hook 注入,必须自读)
38
38
 
39
- - `.qoder/.developer` 当前设计师名(产出归属)
40
- - `.qoder/.current-task` 若存在,spec/原型命名带上任务关键词
39
+ - **当前身份**:当前设计师名(产出归属)。读法:先 `R=$(python ~/.qoderwork/repo_root.py 2>/dev/null) || R=.` 定位仓库根,
40
+ `python "$R/.qoder/scripts/foundation/core/paths.py" whoami`(输出开发者名;空=未初始化)。
41
+ ⚠️ 勿用裸相对路径 `.qoder/.developer`(QoderWork 桌面端 cwd 不在仓库根,会读不到而误报未初始化)。
42
+ - **活动任务**:若存在,spec/原型命名带上任务关键词。读法 `python "$R/.qoder/scripts/foundation/core/paths.py" current-task`(输出任务路径;空=无活动任务)。
41
43
  - 平台必须明确(Web/APP/Both);如未指定,先问
42
44
  - 风格真源:`data/style/*-design-spec.json`(优先)→ `data/code/` 源码 → `data/index/vben-style-reference.json`(Web)/ Vant(APP)
43
45
 
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: wl-init
3
- description: "初始化/切换开发者身份 + 环境体检。Initialize/switch developer identity + environment health check. 用户说'初始化''我是谁''换开发者''环境检查''/wl-init''设置一下''开始用'时触发。"
4
- trigger: "首次使用、换人、或遇到环境问题时;用户说'初始化''换开发者''环境检查''体检'"
3
+ description: "初始化/切换开发者身份 + 环境体检。Initialize/switch developer identity + environment health check. "
4
+ trigger: "user invokes /wl-* command explicitly"
5
5
  ---
6
6
 
7
7
 
@@ -11,7 +11,7 @@ trigger: "首次使用、换人、或遇到环境问题时;用户说'初始化
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
  # wl-init — 开发者身份 + 环境体检
17
17
 
@@ -28,14 +28,14 @@ R=$(python ~/.qoderwork/repo_root.py 2>/dev/null) || R=.
28
28
 
29
29
  ### 无参数(仅体检)
30
30
  ```bash
31
- python "$R/.qoder/scripts/init_doctor.py"
31
+ python "$R/.qoder/scripts/orchestration/wlkj.py" doctor
32
32
  ```
33
33
  输出 8 段体检报告,每行 `[OK]/[WARN]/[FIX]/[MISS]` 标注。
34
34
 
35
35
  ### 带名字(注册 + 自愈)
36
36
  ```bash
37
- python "$R/.qoder/scripts/init_doctor.py" --fix <名字> [角色]
38
- # 例:python "$R/.qoder/scripts/init_doctor.py" --fix 小王 pm
37
+ python "$R/.qoder/scripts/orchestration/wlkj.py" doctor --fix <名字> [角色]
38
+ # 例:python "$R/.qoder/scripts/orchestration/wlkj.py" doctor --fix 小王 pm
39
39
  ```
40
40
  做 3 件事:
41
41
  1. 写 `.qoder/.developer`(key=value 格式)
@@ -44,7 +44,7 @@ python "$R/.qoder/scripts/init_doctor.py" --fix <名字> [角色]
44
44
 
45
45
  ### 仅自愈(不换人)
46
46
  ```bash
47
- python "$R/.qoder/scripts/init_doctor.py" --fix
47
+ python "$R/.qoder/scripts/orchestration/wlkj.py" doctor --fix
48
48
  ```
49
49
 
50
50
  ## 体检覆盖的 8 段
@@ -71,6 +71,6 @@ python "$R/.qoder/scripts/init_doctor.py" --fix
71
71
  体检/注册本身不需要 push(只改本地 `.developer`)。但若 `--fix` 触发了图谱重建,
72
72
  完成后建议跑一次:
73
73
  ```bash
74
- python "$R/.qoder/scripts/team_sync.py" push
74
+ cap.mcp.call("sync", {"direction": "push"})
75
75
  ```
76
76
  让队友拿到刷新后的索引。
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: wl-insight
3
- description: "需求探索 + 外部调研 + 未来规划。流水线的'上游探索站',负责发现需求、对标竞品、做 Gap 分析和 roadmap。把'该做什么、为什么做'想清楚,结论交给 /wl-prd-full 落地。用户说'调研一下''竞品分析''接下来做什么''路线图''探讨一下需求''我发现个机会''规划下个版本'时触发。"
4
- trigger: "用户说'调研''竞品''对标''规划''路线图''roadmap''探讨需求''接下来做什么''发现个机会''下个版本做什么''/wl-insight'"
3
+ description: "需求探索 + 外部调研 + 未来规划。流水线的'上游探索站',负责发现需求、对标竞品、做 Gap 分析和 roadmap。把'该做什么、为什么做'想清楚,结论交给 /wl-prd-full 落地。"
4
+ trigger: "user invokes /wl-* command explicitly"
5
5
  ---
6
6
 
7
7
 
@@ -11,7 +11,7 @@ trigger: "用户说'调研''竞品''对标''规划''路线图''roadmap''探讨
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
  # wl-insight — 需求探索(7 站之前的「探索站」· 产品工位)
17
17
 
@@ -54,17 +54,30 @@ insight(探索/调研/规划)→ [用户确认转PRD] → prd(落地)→
54
54
 
55
55
  ## ⚙️ 自取上下文(Quest / QoderWork 无 hook 注入,必须自读)
56
56
 
57
- - `.qoder/.developer` 当前探索者(报告归属)
58
- - **现状锚点**:`python "$R/.qoder/scripts/context_pack.py" <关键词> --platform <web|app>`(必跑,探索不能脱离现状凭空想)
59
- - `.qoder/learning/feedback.jsonl` 历史 insight 报告索引(可能为空)
60
- - 相关历史 PRD:`data/docs/prd/`(看已经做了什么,避免重复)
57
+ - **当前身份**:当前探索者(报告归属)。读法:先 `R=$(python ~/.qoderwork/repo_root.py 2>/dev/null) || R=.` 定位仓库根,
58
+ `python "$R/.qoder/scripts/foundation/core/paths.py" whoami`(输出开发者名;空=未初始化)。
59
+ ⚠️ 勿用裸相对路径 `.qoder/.developer`(QoderWork 桌面端 cwd 不在仓库根,会读不到而误报未初始化)。
60
+ - **现状锚点(必跑,只跑这一次)**:用 prefetch 一次取全,不要串行换词搜:
61
+ ```bash
62
+ python "$R/.qoder/scripts/orchestration/wlkj.py" kg prefetch "<需求描述原句>"
63
+ ```
64
+ > **不传 `--platform` = 默认双平台一次返回**(platform: all)。探索阶段需求常未定平台,
65
+ > 直接默认双平台拿全,**绝不 web 跑一次、app 再跑一次**(这是 insight 慢的 #2 元凶)。
66
+ > 用户明确说"只要 web/只要 app"时,才加 `--platform web` 或 `app`。
67
+ > 探索需求常含多业务实体(如"3D地图实时车辆调度"),prefetch 自动拆多词批量搜、
68
+ > 一次合并代码+页面+字段+历史PRD标题+API+RepoWiki。**拿到后不要再串行 search/find/grep**,
69
+ > 也不要再单独扫 `data/docs/prd/`(prefetch 第4段已返回相关历史 PRD 标题,要参考某篇再单独读那篇)。
70
+ - `workspace/members/{dev}/journal/feedback.jsonl` — 历史 insight 报告索引(可能为空;按人分文件,团队 git 共享)
71
+
72
+ > 🚫 禁止串行换词搜:第一次 prefetch 没命中或命中少,先反思是不是需求描述太泛,
73
+ > 不要本能地 context_pack 换第2个、第3个词再搜(这是 insight 慢的 #1 元凶)。
61
74
 
62
75
  ---
63
76
 
64
77
  ## 🔒 三道前置检查(任何动作前先做)
65
78
 
66
- 1. **身份检查**:`.developer` 缺失 → 停下,提示先 `/wl-init`,不继续。
67
- 2. **现状锚点**:任何探索前先跑 `context_pack.py`。**不锚定现状的探索 = 凭空臆想,禁止。**
79
+ 1. **身份检查**:跑 `python "$R/.qoder/scripts/foundation/core/paths.py" whoami`,无输出/退出码1 = 未初始化 → 停下,提示先 `/wl-init`
80
+ 2. **现状锚点**:任何探索前先跑 **1 次** `kg.py prefetch "<需求句>"`(见上方自取上下文段)。**不锚定现状的探索 = 凭空臆想,禁止。禁止串行换词搜。**
68
81
  3. **报告归属**:报告必须写到 `workspace/members/{dev}/drafts/`,用 `.developer` 归属。
69
82
 
70
83
  ---
@@ -106,7 +119,7 @@ OST ├─ Opportunity(用户机会/痛点)─ discover ──┤ → i
106
119
  ## 三类型怎么做(概要,详见命令定义)
107
120
 
108
121
  **discover(需求发现)—— 用 JTBD + OST 前两层:**
109
- 1. 跑 context_pack 锚定现状
122
+ 1. 跑 **1 次** prefetch 锚定现状(多业务实体一次取全,不要串行换词搜)
110
123
  2. 用 JTBD 还原"用户要完成什么 job",列出痛点/机会
111
124
  3. 每个机会对应一个业务 outcome(OST 第 1-2 层)
112
125
  4. 输出机会清单,问用户"哪个值得深入?"
@@ -155,7 +168,7 @@ prd 以 reference 模式(mode: reference)承接,读取 insight 报告作
155
168
 
156
169
  ## 🧩 QoderWork 增强:外部数据源(可选 · 无连接器则自动回退)
157
170
 
158
- > 依赖 **QoderWork 桌面端连接器**(Settings → Connectors & MCP)。
171
+ > 通过 capability 层自动路由(Settings → Connectors & MCP)。
159
172
  > **纯 Qoder IDE / CLI 没有连接器 → 本段不生效,insight 用 context_pack + web 搜索足够。**
160
173
  > 探测方式:仅当运行环境提供了「Browser / MCP 工具」可调用时才用。
161
174
 
@@ -186,7 +199,7 @@ prd 以 reference 模式(mode: reference)承接,读取 insight 报告作
186
199
 
187
200
  insight 报告**默认不 push**(个人探索草稿)。用户说"发出去/同步/分享给团队"才:
188
201
  ```bash
189
- python "$R/.qoder/scripts/team_sync.py" push
202
+ cap.mcp.call("sync", {"direction": "push"})
190
203
  ```
191
204
 
192
205
  ---
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: wl-prd-full
3
- description: "完整档 PRD + 原型(13 章,正经需求)。新模块/新业务/新流程用这个。支持 参考:<insight报告> 衔接探索站。用户说'写个需求''生成PRD''做个原型''保单这块加个功能''写个产品需求文档'或输入 /wl-prd-full 时触发。先问平台!"
4
- trigger: "用户描述正经需求、要 PRD、要原型、要 mockup,或直接 /wl-prd-full"
3
+ description: "完整档 PRD + 原型(13 章,正经需求)。新模块/新业务/新流程用这个。支持 参考:<insight报告> 衔接探索站。先问平台!"
4
+ trigger: "user invokes /wl-* command explicitly"
5
5
  ---
6
6
 
7
7
 
@@ -11,13 +11,13 @@ trigger: "用户描述正经需求、要 PRD、要原型、要 mockup,或直
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
  # wl-prd-full — 完整档 PRD + 原型(/wl-prd-full 命令入口)
17
17
 
18
18
  > 这是 `/wl-prd-full` 命令的 skill 入口。QoderWork 的 `/` 列表读 skills,
19
19
  > 所以本 skill 让 QoderWork 也能用 `/wl-prd-full`,与 Qoder IDE 保持一致。
20
- > 完整工作流见同名 command 文件 `.qoder/commands/wl-prd-full`,
20
+ > 完整工作流见同名 command 文件 `.qoder/commands/wl-prd.md`,
21
21
  > 功能实现层见 `.qoder/skills/prd-generator/SKILL.md`。
22
22
  > **第一性原理:又快又准。**
23
23
 
@@ -38,6 +38,49 @@ R=$(python ~/.qoderwork/repo_root.py 2>/dev/null) || R=.
38
38
  | 2 / APP / H5 / 移动端 | APP | `--platform app` | prototype-app.html |
39
39
  | 3 / 都要 / 两端 | Both | 都跑 | 两个模板,两份原型 |
40
40
 
41
+ ## ⚠️ STEP 0.5: 原型要不要画?(融入 Step 2 批量确认,不另开轮次)
42
+
43
+ **不交给 AI 默默判断**(避免"AI 觉得不需要、用户其实想要"的扯皮),但也**不额外开一轮问答**——
44
+ 合并进 Step 2「轻反思 + 批量确认」那一步,跟背景/目标/指标一起一次性问完。
45
+
46
+ ### 关键词触发矩阵(给默认建议,用户可一键改)
47
+
48
+ | 模式 | 关键词信号 | 默认建议 | 例子 |
49
+ |------|-----------|---------|------|
50
+ | 评审 | (任何) | ❌ 不画 | 评审别人的 PRD,本就不画 |
51
+ | 快速 | 加字段/按钮/文案/导出/接口 | ❌ 不画 | "列表加个导出按钮" |
52
+ | 快速 | 含"页面/弹窗/表单/交互" | ✅ 画 | "弹窗里加 3 个字段" |
53
+ | 完整 | 含"页面/菜单/详情/列表/向导/看板/大屏" | ✅ 画 | "新出库单页面" |
54
+ | 完整 | 纯"规则/接口/定时/对账/计算/开关/参数/性能" | ❌ 不画 | "出交车点检固定为总部全局规则" |
55
+ | 完整 | 混合(既有页面又有规则) | ✅ 画(只画页面那部分) | "新增审批流 + 审批页" |
56
+
57
+ ### Step 2 问法(合并到批量确认)
58
+
59
+ ```
60
+ 确认 3 件事就开工:
61
+ 1. 背景/目标:……(AI 已补,要改吗?)
62
+ 2. 关键指标:……(AI 已补,要改吗?)
63
+ 3. 原型图:我建议【画/不画】,因为……(理由)。
64
+ 要改吗?(画 / 不画 / 两端各画一份)
65
+ ```
66
+
67
+ ### 两端都画时的边界(v3.1)
68
+
69
+ 「完整模式 + 两端都要」如果用户选了"画",**默认只画主端一份**(用户在 PRD 里标的主端),
70
+ 另一端在 PRD 第 11 章写"复用主端规则,UI 适配另出"。用户明确说"两端各画一份"才画 2 份。
71
+
72
+ ### 不画原型时的下游连锁(必须对齐)
73
+
74
+ | 产物 | 处理 |
75
+ |------|------|
76
+ | PRD 第 11 章「原型地址」 | 写 `无({原因},经用户确认豁免)`,**保留章节标题**不省略 |
77
+ | PRD 第 1 行 `@contract` 头 | 标记 `prototype: none` |
78
+ | eval_prd | 检测到 `prototype: none` → A2 自动跳过,满分从 100 降到 70,照样能 PASS |
79
+ | /wl-design | 读到 `prototype: none` 跳过原型环节 |
80
+ | /wl-code | 直接以 PRD 字段表为准 |
81
+
82
+ ---
83
+
41
84
  ## 衔接 insight(参考模式)
42
85
 
43
86
  **若用户说"按 insight 报告做 PRD""转 PRD"或带 `参考:<报告路径>`:**
@@ -46,14 +89,22 @@ Read 指定 insight 报告 → 把现状锚定 + 选中的机会/Gap 作为 PRD
46
89
 
47
90
  ## 完整流程(详细见 command 文件)
48
91
 
49
- 1. **并行取全上下文**:先读当前角色(`python "$R/.qoder/scripts/role.py"` 输出 pm/design/dev/test/admin 之一),按角色传 `--role`,让上下文匹配角色视角:
92
+ 1. **并行取全上下文**:先读当前角色(`python "$R/.qoder/scripts/orchestration/wlkj.py" role` 输出 pm/design/dev/test/admin 之一),用 prefetch 一次取全(完整档需求含多业务实体,prefetch 多词预测比单词 context 更准):
50
93
  ```bash
51
- ROLE=$(python "$R/.qoder/scripts/role.py" 2>/dev/null || echo pm)
52
- python "$R/.qoder/scripts/kg.py" context <词> --platform <p> --role "$ROLE"
94
+ ROLE=$(python "$R/.qoder/scripts/orchestration/wlkj.py" role 2>/dev/null || echo pm)
95
+ python "$R/.qoder/scripts/orchestration/wlkj.py" kg prefetch "<需求描述原句>" --platform <p>
53
96
  ```
97
+ > prefetch 把需求句拆成多个业务词批量搜、一次合并(例"考勤导入校验"→考勤/导入两词全搜)。
98
+ > 拿到后**按 $ROLE 视角看重点**:dev 看代码段、design 看页面+风格段、pm 看字段+历史PRD段。prefetch 之后不要再串行 search。
54
99
  > 不硬编码 pm:dev 写 PRD 能拿到代码视角、设计师拿到页面+风格视角,比统一 PM 视角更"准"。
55
100
  2. **轻反思 + 批量确认**:AI 自动补全背景/目标/指标,只把真缺失的 1-2 点一次性问完
56
- 3. **一次生成 + 3 道质量锁**:PRD(prd-full-template.md,13 章)+ 原型一次 Write → 背景锁/字段锁/闭环锁 → eval_prd → 不过自动修
101
+ 3. **一次生成 + 3 道质量锁**:
102
+ - PRD(prd-full-template.md,13 章)一次 Write
103
+ - **原型按 Step 0.5 决策**:用户选"画"→ 走 prototype-generator(必须先 fill_prototype);
104
+ 用户选"不画"→ 跳过,PRD 第 11 章写 `无` + contract 头标 `prototype: none`
105
+ - 3 道质量锁:背景锁/字段锁/闭环锁 → eval_prd(**不要加 `2>/dev/null`,stderr 阻断原因要看**)→ 不过自动修
106
+ - eval 命令:`python "$R/.qoder/scripts/orchestration/wlkj.py" eval <prd.md> [原型.html]`
107
+ (wlkj.py eval 内部映射 validation/metrics/eval_prd.py,路径不会漂移)
57
108
  4. **发布 + 归档 + 同步**(3 合 1):collect_prds → team_sync push → archive_prd
58
109
 
59
110
  ## 🔒 3 道质量锁
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: wl-prd-quick
3
- description: "小改动极速出 Mini-PRD(6 章)。加字段/加按钮/改文案/加导出等零星需求专用。用户说'加个字段''加个导出按钮''改下文案''快速出个需求'时触发。先问平台!"
4
- trigger: "用户说小改动/加字段/加按钮/改文案/快速出 PRD,或直接 /wl-prd-quick"
3
+ description: "小改动极速出 Mini-PRD(6 章)。加字段/加按钮/改文案/加导出等零星需求专用。先问平台!"
4
+ trigger: "user invokes /wl-* command explicitly"
5
5
  ---
6
6
 
7
7
 
@@ -11,13 +11,13 @@ trigger: "用户说小改动/加字段/加按钮/改文案/快速出 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
  # wl-prd-quick — 小改动极速出 Mini-PRD(/wl-prd-quick 命令入口)
17
17
 
18
18
  > 这是 `/wl-prd-quick` 命令的 skill 入口。QoderWork 的 `/` 列表读 skills,
19
19
  > 所以本 skill 让 QoderWork 也能用 `/wl-prd-quick`,与 Qoder IDE 保持一致。
20
- > 完整工作流见同名 command 文件 `.qoder/commands/wl-prd-quick.md`,
20
+ > 完整工作流见同名 command 文件 `.qoder/commands/wl-prd.md`,
21
21
  > 功能实现层见 `.qoder/skills/prd-generator/SKILL.md`(快档分支)。
22
22
 
23
23
  ## ⚠️ STEP 0: 必须先问平台(任何分析前)
@@ -38,11 +38,11 @@ R=$(python ~/.qoderwork/repo_root.py 2>/dev/null) || R=.
38
38
 
39
39
  ## 3 步极速流程(详细见 command 文件)
40
40
 
41
- 1. 先读当前角色再取上下文(不硬编码 pm,让 dev/设计师拿到匹配视角):
41
+ 1. **先 prefetch(预测 + 批量预取,禁止串行 search)**:
42
42
  ```bash
43
- ROLE=$(python "$R/.qoder/scripts/role.py" 2>/dev/null || echo pm)
44
- python "$R/.qoder/scripts/kg.py" context <词> --platform <p> --role "$ROLE"
43
+ python "$R/.qoder/scripts/orchestration/wlkj.py" prefetch "<需求描述>" --platform <p>
45
44
  ```
45
+ prefetch 一次返回代码/字段/API/Wiki/历史PRD 的合并结果。**之后不要再用 search/find/grep 逐个查词**——那会变成 6+ 次串行往返,是轮次爆炸的根因。prefetch 不够时才补调一次。
46
46
  2. 一次 Write:Mini-PRD(prd-quick-template.md,6 章)+ 微型原型(只画 diff)
47
47
  3. "出好了,确认发布吗?" → 归档 + push
48
48
 
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: wl-prd-review
3
- description: "评审 PRD 完整性与质量(7 项 checklist + EVA 评分)。用户说'评审PRD''检查需求文档''PRD质量怎么样''这个 PRD 合格吗''帮我看看这个需求文档'时触发。"
4
- trigger: "用户说要评审/检查/审核 PRD 质量,或直接 /wl-prd-review"
3
+ description: "评审 PRD 完整性与质量(7 项 checklist + EVA 评分)。"
4
+ trigger: "user invokes /wl-* command explicitly"
5
5
  ---
6
6
 
7
7
 
@@ -11,12 +11,12 @@ trigger: "用户说要评审/检查/审核 PRD 质量,或直接 /wl-prd-review
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
  # wl-prd-review — 评审 PRD 质量(/wl-prd-review 命令入口)
17
17
 
18
18
  > 这是 `/wl-prd-review` 命令的 skill 入口。
19
- > 完整工作流见同名 command 文件 `.qoder/commands/wl-prd-review.md`,
19
+ > 完整工作流见同名 command 文件 `.qoder/commands/wl-prd.md`,
20
20
  > 评审实现细节见 `.qoder/skills/prd-review/SKILL.md`。
21
21
  > **定位:评审已有 PRD,不产出新 PRD。**
22
22
 
@@ -24,11 +24,23 @@ R=$(python ~/.qoderwork/repo_root.py 2>/dev/null) || R=.
24
24
 
25
25
  拿到一份 PRD,检查它够不够格发布/交付下游:
26
26
  1. **7 项 checklist**:用户故事清晰 / 验收可测 / 优先级已标 / 模块已识别 / 非功能已列 / 边界已考虑 / 依赖已识别
27
- 2. **EVA 客观评分**:`python "$R/.qoder/scripts/eval_prd.py" <PRD> [原型]`,≥80% 才 PASS
27
+ 2. **EVA 客观评分**:`python "$R/.qoder/scripts/orchestration/wlkj.py" eval <PRD> [原型]`,≥80% 才 PASS
28
28
  3. **合并报告**:PASS → 可发布;不 PASS → 修复清单
29
29
 
30
30
  ## 定位要评审的 PRD
31
31
 
32
32
  用户给路径 → 直接 Read;没给 → 扫 `data/docs/prd/` + `workspace/members/*/drafts/` 列出最近 PRD 让用户选。
33
33
 
34
- 详细流程见 `.qoder/commands/wl-prd-review.md`。
34
+ 详细流程见 `.qoder/commands/wl-prd.md`。
35
+
36
+ ## ✅ 评审完成后必须埋点(不要跳过)
37
+
38
+ 评审报告给出 PASS/不 PASS 结论后,**立即**记录一条 `review_done` 事件——
39
+ 这是「可用性指标 F2 转化漏斗」评审级数据的唯一来源,不埋则该级永远为 0:
40
+
41
+ ```bash
42
+ python "$R/.qoder/scripts/orchestration/wlkj.py" learn record review_done "{\"prd\": \"<被评审PRD文件名>\", \"verdict\": \"PASS\"}"
43
+ ```
44
+ - `verdict`:评审结论,`PASS` 或 `FAIL`
45
+ - 埋点失败不阻塞评审(包在 try 里无所谓),但能埋一定要埋。
46
+