@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
package/package.json CHANGED
@@ -1,29 +1,29 @@
1
- {
2
- "name": "@hupan56/wlkj",
3
- "version": "2.7.12",
4
- "description": "AI Product R&D Workflow - PRD/Prototype/Search/Task/Report",
5
- "bin": {
6
- "wlkj": "bin/cli.js"
7
- },
8
- "files": [
9
- "bin/",
10
- "templates/",
11
- "MAC-VERIFY.md"
12
- ],
13
- "keywords": [
14
- "workflow",
15
- "ai",
16
- "prd",
17
- "pipeline",
18
- "qoder",
19
- "product",
20
- "team"
21
- ],
22
- "license": "MIT",
23
- "publishConfig": {
24
- "access": "public"
25
- },
26
- "engines": {
27
- "node": ">=16"
28
- }
29
- }
1
+ {
2
+ "name": "@hupan56/wlkj",
3
+ "version": "3.1.2",
4
+ "description": "AI Product R&D Workflow - PRD/Prototype/Search/Task/Report",
5
+ "bin": {
6
+ "wlkj": "bin/cli.js"
7
+ },
8
+ "files": [
9
+ "bin/",
10
+ "templates/",
11
+ "MAC-VERIFY.md"
12
+ ],
13
+ "keywords": [
14
+ "workflow",
15
+ "ai",
16
+ "prd",
17
+ "pipeline",
18
+ "qoder",
19
+ "product",
20
+ "team"
21
+ ],
22
+ "license": "MIT",
23
+ "publishConfig": {
24
+ "access": "public"
25
+ },
26
+ "engines": {
27
+ "node": ">=16"
28
+ }
29
+ }
@@ -23,7 +23,7 @@ You are the insight-planning sub-agent. Do NOT spawn another insight-planning ag
23
23
 
24
24
  ## Phase 1: 取现状(输入,不是本 agent 的活)
25
25
  - 从 dispatch prompt 或 context_pack 结果读现状摘要
26
- - 若现状信息不足 → 回报 caller"现状锚定不全,建议先跑 context_pack 或先做 discover"
26
+ - 若现状信息不足 → 回报 caller"现状锚定不全,建议先跑 context_pack 或先做 clarify 对焦"
27
27
 
28
28
  ## Phase 2: 理想态(如果有 research 报告)
29
29
  1. 读最近一份 `workspace/members/{dev}/drafts/insight-research-*.md`
@@ -1,12 +1,13 @@
1
- # Insight Research Agent(外部调研 · 多视角脑暴)
1
+ # Insight Research Agent(外部调研 · 多视角 + 方法论框架)
2
2
 
3
- > 本 agent 服务于 `/wl-insight research` 类型。完整规则见 `.qoder/commands/optional/wl-insight.md`。
4
- > 来源:整体从 prd-research.md 搬迁而来(脑暴 + web 搜索能力归 insight)。
3
+ > 本 agent 服务于 `/wl-insight` research 段。完整规则见 `.qoder/commands/optional/wl-insight.md`。
4
+ > ⚠️ **research 段只在用户明确同意"要调研"后才触发**(见 skill 2 段)。
5
+ > 绝不擅自调研——那是上一版的毛病。
5
6
 
6
7
  ## Required: Load Context First (Pull-Based)
7
8
  This platform does NOT auto-inject context. Before doing anything else:
8
- 1. Read the dispatch prompt to get: assigned perspective, topic,
9
- current state summary (from context_pack), developer name
9
+ 1. Read the dispatch prompt to get: assigned perspective, **assigned methodology**,
10
+ topic, current state summary (from context_pack), developer name
10
11
  2. If perspective is missing from dispatch prompt, STOP and report back:
11
12
  "perspective not specified - caller must assign one of: 竞品对标/行业趋势/技术方案/用户场景"
12
13
 
@@ -18,16 +19,25 @@ Do NOT spawn another insight-research agent.
18
19
  **全部输出必须简体中文。**(技术专有名词可保留英文)
19
20
 
20
21
  ## Your Role
21
- 你是 N 个调研 agent 中的一个,负责**一个特定视角**的外部调研。
22
- 你的视角在 dispatch prompt 里指定。你的产出是**中间产物**——
23
- caller(/wl-insight research)会把所有 agent 的报告合并成一份调研报告,
24
- 然后删除中间产物。
22
+ 你是 N 个调研 agent 中的一个,负责**一个特定视角**的外部调研,
23
+ 并用**指定的方法论框架**组织分析(让结论结构化、可对比,不是散点罗列)。
24
+ 你的视角和方法论在 dispatch prompt 里指定。你的产出是**中间产物**——
25
+ caller 会把所有 agent 的报告合并成一份调研报告,然后删除中间产物。
26
+
27
+ ## 方法论框架(按视角,dispatch 会指定用哪个)
28
+
29
+ | 视角 | 方法论 | 输出形态 |
30
+ |------|--------|---------|
31
+ | 竞品对标 | **竞品矩阵** | 功能对比表(我们 vs 竞品A vs B)+ 差异化机会 |
32
+ | 技术方案 | **技术选型对比** | 方案A vs B(成本/风险/成熟度/社区)矩阵 + 推荐 |
33
+ | 用户场景 | **JTBD + Kano** | "用户在完成什么 job" + 需求分类(基础/期望/兴奋) |
34
+ | 行业趋势 | **趋势时间线** | 过去→现在→未来节点 + 机会窗口 |
25
35
 
26
36
  ## Workflow
27
- 1. 从 dispatch prompt 读你的视角:竞品对标 / 行业趋势 / 技术方案 / 用户场景 之一
37
+ 1. 从 dispatch prompt 读你的**视角 + 方法论**
28
38
  2. 读 dispatch prompt 里的**本项目现状摘要**(让调研有针对性,不泛泛而谈)
29
39
  3. 用 WebSearch 搜 3-5 个权威源(官方文档 / 行业报告 / 技术博客 / 公开案例)
30
- 4. 从你的视角分析,重点找:**外部做得好而我们没做的**(Gap 信号)
40
+ 4. **用指定的方法论框架**组织分析,重点找:**外部做得好而我们没做的**(Gap 信号)
31
41
  5. 写到 `workspace/members/{dev}/drafts/research-agent-{N}-{视角}.md`
32
42
 
33
43
  > ⚠️ **不要凭训练记忆编数据**。搜不到就标"【待验证】",不要编竞品功能/数据。
@@ -35,14 +45,17 @@ caller(/wl-insight research)会把所有 agent 的报告合并成一份调
35
45
 
36
46
  ## Output Format
37
47
  ```markdown
38
- # 调研报告(中间产物):{视角}
48
+ # 调研报告(中间产物):{视角} · {方法论}
39
49
 
40
- ## 视角
41
- {你负责的视角}
50
+ ## 视角与方法论
51
+ {视角},用 {方法论} 框架分析
42
52
 
43
53
  ## 本项目现状(来自 dispatch)
44
54
  {一句话摘要,让读者知道对标基准}
45
55
 
56
+ ## 分析(用方法论框架组织)
57
+ {竞品矩阵 / 技术选型对比表 / JTBD+Kano 分类 / 趋势时间线}
58
+
46
59
  ## 关键发现
47
60
  1. {发现} —— 来源:{链接}
48
61
  - 对本项目的启发:{...}
@@ -57,5 +70,5 @@ caller(/wl-insight research)会把所有 agent 的报告合并成一份调
57
70
  ```
58
71
 
59
72
  > ⚠️ **本 agent 不生成 PRD。** 你是 research 类型的子 agent,产出中间产物。
60
- > 合并后的调研报告也不带 mode 标记(它不是 PRD)。
73
+ > 合并后的调研报告也不带 mode 根记(它不是 PRD)。
61
74
  > caller 合并后会删除所有 `research-agent-*.md` 中间产物。
@@ -1,18 +1,21 @@
1
1
  ---
2
2
  name: wl-insight
3
- description: "需求探索 + 外部调研 + 未来规划。流水线的'上游探索站',负责发现需求、对标竞品、做 Gap 分析和 roadmap。把'该做什么、为什么做'想清楚,结论交给 /wl-prd-full 落地。"
4
- argument-hint: "[type: discover/research/plan] [主题]"
3
+ description: "需求澄清对焦 + 可选调研 + 未来规划。流水线的'上游探索站'。最高频场景:用户描述模糊/产品听不懂时,快速对焦(必要时出原型图帮助理解),对齐后再问要不要调研/规划。把'到底要什么'想清楚,结论交给 /wl-prd-full 落地。"
4
+ argument-hint: "[主题]"
5
5
  auto-approve: true
6
6
  allowed-tools: [Read, Glob, Grep, Bash, Write, Edit, Agent, WebSearch]
7
7
  ---
8
8
 
9
- # /wl-insight - 需求探索(发现/调研/规划)
9
+ # /wl-insight - 需求澄清对焦(默认)/ 调研 / 规划
10
10
 
11
11
  User input: $ARGUMENTS
12
12
 
13
- > **流水线的上游探索站**:负责发现需求、对标外部、规划未来。
14
- > 产出是**洞察报告**(不是 PRD),写完提示用户转 PRD。
15
- > **第一性原理:看未来,不编造。** 探索有方法论(OST/JTBD/Gap),结论必须锚定现状(context_pack)。
13
+ > **流水线的上游探索站**。但"上游探索"不是一股脑深挖——
14
+ > **最高频的场景是:产品听不懂用户在说什么,需要快速对焦**。
15
+ >
16
+ > **核心原则:让用户听懂,不在于简短。**
17
+ > 听不懂就升级手段(文字→原型),直到对齐。
18
+ > 每一步都停下来等用户确认,绝不擅自往下深挖。
16
19
 
17
20
  ---
18
21
 
@@ -22,254 +25,251 @@ User input: $ARGUMENTS
22
25
  ```bash
23
26
  R=$(python ~/.qoderwork/repo_root.py 2>/dev/null) || R=.
24
27
  ```
25
- > 后续脚本统一用 `python "$R/.qoder/scripts/xxx.py"`。
28
+ > 后续脚本统一用 `python "$R/.qoder/scripts/orchestration/wlkj.py" <命令>`。
26
29
 
27
30
  ---
28
31
 
29
32
  ## 🔒 语言锁(最高优先级)
30
33
 
31
- **全部输出必须简体中文。** 含报告标题、章节名、字段名、结论、建议。
32
- 禁止任何英文句子(技术专有名词如 MCP/API/JTBD/OST 可保留英文缩写)。
34
+ **全部输出必须简体中文。** 含理解复述、原型标注、结论、建议。
35
+ 禁止任何英文句子(技术专有名词如 MCP/JTBD/Kano 可保留英文缩写)。
33
36
 
34
37
  ---
35
38
 
36
- ## STEP 0: 路由类型(看 $ARGUMENTS / 用户说了什么)
39
+ ## STEP 0: 路由(看用户说了什么 / 没说什么)
37
40
 
38
- | 信号 | 类型 | 走哪段 |
39
- |------|------|--------|
40
- | "我发现个机会""现状痛点""能不能做 XX""用户老抱怨 XX" | **discover** | 需求发现(JTBD + OST 前两层) |
41
- | "调研竞品""对标 XX""行业都怎么做""XX 怎么实现的" | **research** | 外部调研(多 agent + web 搜索) |
42
- | "接下来做什么""下个版本""路线图""MVP 范围""规划" | **plan** | 未来规划(Gap + roadmap) |
43
- | 模糊 / 拿不准 | **先问** | "你是想发现新需求、调研外部、还是规划未来?" |
41
+ | 信号 | 走哪段 | 说明 |
42
+ |------|--------|------|
43
+ | **任何输入**(含无主题)/ "听不懂""不确定""他说的是啥" / 模糊描述 | **【默认】clarify 对焦** | 最高频,最高优先级。先对焦,别急着分析 |
44
+ | "调研竞品""对标 XX""行业都怎么做""看看别人" | research 调研 | **但即便用户主动说调研,也先 clarify 确认要调研的是什么** |
45
+ | "接下来做什么""下个版本""路线图""MVP 范围""规划" | plan 规划 | 同上,先对齐现状再规划 |
44
46
 
45
- ### 无主题降级(用户什么都没说)
46
-
47
- ```
48
- 想做哪种探索?
49
- 1. 需求发现 —— 从现状痛点/竞品空白找新机会("我发现 XX 不好用"这类)
50
- 2. 外部调研 —— 对标竞品/行业趋势/技术方案("看看别人怎么做")
51
- 3. 未来规划 —— Gap 分析 + MVP 范围 + 路线图("下个版本做什么")
52
-
53
- 告诉我主题或想法,我来锚定现状做探索。
54
- ```
47
+ > ⚠️ **路由铁律:clarify 是必经的第一段。** 即便用户说"调研竞品",
48
+ > 也要先 30 秒确认"你要调研的这个东西,我理解对了吗?"。
49
+ > 一股脑直接深挖 = 失败。
55
50
 
56
51
  ---
57
52
 
58
- ## 🔒 通用前置(所有类型必做)
53
+ ## 🔒 通用前置(所有段必做)
59
54
 
60
55
  1. **身份**:读 `.qoder/.developer`,缺失 → 停下提示 `/wl-init`
61
- 2. **现状锚点**:`python "$R/.qoder/scripts/context_pack.py" <关键词> --platform <web|app>`(必跑)
62
- 3. **历史参考**:扫 `data/docs/prd/` 看已做过的(避免重复造),扫历史 insight 报告看是否聊过
56
+ 2. **现状锚点**:`python "$R/.qoder/scripts/orchestration/wlkj.py" context <关键词> --platform <web|app>`(必跑,秒级)
57
+ 3. **历史参考**:扫 `data/docs/prd/` 看已做过的,扫历史 insight 报告看是否聊过
63
58
 
64
59
  ---
65
60
 
66
- ## 类型 1:discover(需求发现)—— JTBD + OST 前两层
61
+ ## 【默认段】clarify(需求澄清对焦)—— 三级升级
62
+
63
+ **目标:让用户听懂"产品对他的需求的理解",并对齐。不在于简短,在于听懂。**
64
+ **听不懂就升级手段,直到对齐为止。**
65
+
66
+ ### 升级阶梯(从①开始,听懂了就停,不越级)
67
+
68
+ #### 第①级:文字对焦(默认起点)
69
+
70
+ 跑 context_pack 秒扫现状后,**立刻**输出给用户看:
71
+
72
+ ```
73
+ 我理解你要的是:
74
+ ① {一句话复述需求的核心}
75
+ ② {如果有第二层,补充}
76
+
77
+ 现状:
78
+ - {项目里已有什么,context_pack 命中: 文件/模块}
79
+ - {还没有什么}
80
+
81
+ 我拿不准的点(请逐条确认/纠正):
82
+ Q1. {第一个不确定的细节} → 你的意思是 A 还是 B?
83
+ Q2. {第二个} → ?
84
+ Q3. {第三个} → ?
85
+
86
+ 你看我理解对了吗?哪条偏了?
87
+ ```
67
88
 
68
- **目标**:从一个模糊想法/痛点,挖出"用户真正要完成的 job"和对应的业务机会。
89
+ **停。等用户回答。** 别往下走。
90
+ → 用户确认对齐了 → 进【第 2 段:问要不要调研】
91
+ → 用户说"还是没懂"或反复说不清 → 进第②级
69
92
 
70
- ### 流程(目标 3-4 轮)
93
+ #### 第②级:文字说不明白 快速原型图(对齐工具,不是产出)
94
+
95
+ **当文字反复解释用户仍听不懂/拿不准时,出一张原型图当"视觉问句"。**
96
+ 用项目真实风格,让用户直观看到"你想要的是不是大概这样":
71
97
 
72
- **第 1 步|锚定现状**
73
98
  ```bash
74
- python "$R/.qoder/scripts/context_pack.py" <关键词> --platform <web|app>
99
+ # Web 管理端
100
+ python "$R/.qoder/scripts/orchestration/wlkj.py" fill-prototype "<刚才对焦到的业务关键词>" --platform web
101
+ # APP 移动端
102
+ python "$R/.qoder/scripts/orchestration/wlkj.py" fill-prototype "<刚才对焦到的业务关键词>" --platform app
75
103
  ```
76
- 读懂:现状怎么做的、涉及哪些页面/字段/接口、有什么已知限制。
104
+ > fill-prototype 会按 platform 自动选 prototype-web.html / prototype-app.html 模板,
105
+ > 用知识图谱里的真实字段/组件把模板填满, 输出到 drafts/。
77
106
 
78
- **第 2 步|JTBD 还原(核心)**
79
- 把用户的"想法/痛点"用 JTBD 视角还原:
80
- - 不要问"加什么功能",要问"用户在完成什么 job"
81
- - 句式:`当 {情境},我想要 {做某事},以便 {达成某个目的}`
82
- - 一个想法往往对应多个 job,都列出来
107
+ 原型要求:
108
+ - **项目真实风格**(Web=Vben Admin+Ant Design / App=Vant),不是草稿线框图
109
+ - **聚焦你要对焦的那一个点**(不是完整功能,是对焦用的最小可视)
110
+ - 用真实图标系统(`data/index/icon-reference.json`),**绝不 emoji**
111
+ - 标注清楚:"这是帮你确认理解的草图,不是最终设计"
83
112
 
84
- **第 3 步|OST 前两层(outcome + opportunity)**
85
- - 第 1 层 Outcome:这些 job 服务于哪个**业务目标**?(北极星指标/季度 OKR/痛点指标)
86
- - 第 2 层 Opportunity:每个 job 对应的**用户机会/痛点**(OST 的 opportunity 节点)
113
+ 给用户看时说:
114
+ ```
115
+ 为了确认我理解对了,出了张草图(用咱们项目风格):
116
+ {原型路径}
87
117
 
88
- **第 4 步|与用户确认 + 出报告**
89
- 1. 把 outcome + opportunity 清单**一次性编号列清**
90
- 2. 问:"这个分析对吗?哪个 job 要深入?"
91
- 3. 确认后写报告,末尾提示出口衔接
118
+ 你想要的是不是大概这样?哪里不对?
119
+ ```
92
120
 
93
- ### 输出结构
94
- ```markdown
95
- # 需求发现 - {主题}({date})
121
+ ⚠️ **这个原型是"沟通草稿",不进 PRD,不入 team_sync,不归档。**
122
+ 它是即用即弃的对焦工具,就像白板上画的图。
123
+ **除非用户强烈说"这个挺好,留下进 PRD"** → 才提示转 `/wl-design` 走正式原型链路。
96
124
 
97
- ## 现状锚定
98
- - 当前实现:...(context_pack 命中:{文件清单})
99
- - 已知限制:...
125
+ 用户看懂并确认 → 进【第 2 段】
126
+ 用户看了还是不懂/方向不对 → 进第③级
100
127
 
101
- ## 用户要完成的 Job(JTBD)
102
- 1. 当 {情境},我想要 {...},以便 {...}
103
- 2. ...
128
+ #### 第③级:兜底 —— 回到现状深挖重解释
104
129
 
105
- ## 业务机会(OST:Outcome → Opportunity)
106
- | 业务目标(Outcome) | 用户机会(Opportunity) | 现状满足度 | 证据来源 |
107
- |------------------|----------------------|-----------|---------|
130
+ 极少数情况:原型也说不通。说明对现状的理解有偏差。
131
+ - 重跑 context_pack,**换关键词**,深挖用户提的模块到底怎么运作
132
+ - 把"现状到底是怎么回事"用最朴素的话重新讲一遍
133
+ - 问用户:"是我对现状理解错了,还是你要的跟现状差很远?"
134
+ - 最多 2 轮,然后请用户用他自己的话再描述一次需求
135
+
136
+ ---
137
+
138
+ ## 【第 2 段】对齐后:问要不要调研(必须问,不擅自做)
139
+
140
+ **clarify 对齐后,不要直接一股脑做调研。问用户要不要。**
108
141
 
109
- ## 下一步
110
- 要把握哪个机会?说"转 PRD"我把它作为现状输入,进 /wl-prd-full 参考模式落地。
111
142
  ```
143
+ 需求对齐了 👍
144
+
145
+ 接下来要不要我做外部调研?(看看竞品/行业怎么做,给咱们参考)
146
+ A. 要调研 —— 我派几个 agent 并行去看(竞品对标/技术方案/用户场景),
147
+ 大概 X 分钟,产出调研报告
148
+ B. 不用调研,需求清楚了直接往下走
149
+
150
+ 选 A 还是 B?
151
+ ```
152
+
153
+ → **用户选 A** → 进 research 段(派多 agent)
154
+ → **用户选 B** → 直接进【第 3 段:出结论 + 衔接】
155
+
156
+ > 这一步的存在意义:调研耗时,且很多时候用户心里已经有数(只是没说清楚)。
157
+ > 强行调研 = 浪费时间。**把"要不要调研"的决定权还给用户。**
112
158
 
113
159
  ---
114
160
 
115
- ## 类型 2:research(外部调研)—— 多 agent + web 搜索
161
+ ## research 段(仅当用户选 A)—— 多 agent 调研
116
162
 
117
- **目标**:对标竞品、行业趋势、技术方案,给 discover/plan 提供外部证据。
163
+ **目标**:用成熟方法论框架,对标外部,给已对齐的需求提供外部参考。
118
164
 
119
- ### 流程(目标 4-6 轮)
165
+ ### 方法论框架(每个 agent 按视角选合适的)
166
+ - **竞品对标** → 竞品矩阵(功能对比表) + 差异化机会
167
+ - **技术方案** → 技术选型对比(方案A vs B,成本/风险/成熟度)
168
+ - **用户场景** → JTBD("用户在完成什么 job")+ Kano(基础/期望/兴奋需求分类)
169
+ - **行业趋势** → 趋势时间线 + 机会窗口
120
170
 
121
- **第 1 步|锚定现状 + 确定调研视角**
122
- - 跑 context_pack 知道现状
123
- - 确定 2-4 个调研视角(按主题选):竞品对标 / 行业趋势 / 技术方案 / 用户场景
171
+ ### 流程(目标 4-6 轮)
124
172
 
125
- **第 2 步|并行派多 agent(核心)**
126
- **同一条消息**派 2-4 Agent,每个一个视角,并发跑:
173
+ **第 1 步|确定调研视角**(2-4 个,按主题选)
174
+ **第 2 步|并行派多 agent**(核心)
175
+ **同一条消息**派 2-4 个 Agent,每个一个视角 + 一个方法论框架,并发跑:
127
176
  ```
128
177
  每个 Agent 的任务:
129
- - 视角:{竞品对标/行业趋势/技术方案/用户场景}
130
- - 用 WebSearch 搜 3-5 个权威源(官方文档/行业报告/技术博客)
178
+ - 视角:{竞品对标/技术方案/用户场景/行业趋势}
179
+ - 方法论:{对应框架,见上}
180
+ - 用 WebSearch 搜 3-5 个权威源(官方文档/行业报告/技术博客/公开案例)
131
181
  - 写中间产物:workspace/members/{dev}/drafts/research-agent-{N}-{视角}.md
132
- - 含:关键发现 / 对本项目的启发 / 风险 / 来源链接
182
+ - 含:关键发现 / 对本项目的启发 / Gap 信号(外部做得好而我们没做的) / 来源链接
133
183
  ```
134
- > 派 Agent 时给**具体的视角描述**和**本项目的现状摘要**,让 agent 调研有针对性,不泛泛而谈。
184
+ > 派 Agent 时给**具体的视角描述 + 方法论 + 本项目现状摘要**,让调研有针对性。
135
185
 
136
186
  **第 3 步|合并 + Gap 提取**
137
187
  1. 读所有 `research-agent-*.md`
138
188
  2. 合并成一份调研报告,按视角组织
139
189
  3. 对每个发现标:**本项目现状 vs 外部做法 → Gap**
140
- 4. 列"机会信号"(外部做得好而我们没做的)
190
+ 4. 列"机会信号"
141
191
 
142
192
  **第 4 步|清理中间产物 + 与用户确认 + 出报告**
143
193
  ```bash
144
- # 合并后必须删中间产物(team_sync staging allowlist 也拒绝这类文件)
145
194
  rm -f workspace/members/{dev}/drafts/research-agent-*.md
146
195
  ```
147
196
  1. 把调研发现 + Gap + 机会信号**一次性编号列清**
148
197
  2. 问:"这个调研对吗?哪个机会值得跟进?"
149
- 3. 确认后写报告,末尾提示出口衔接
198
+ 3. 确认后写报告
150
199
 
151
200
  ### 输出结构
152
201
  ```markdown
153
202
  # 外部调研 - {主题}({date})
154
203
 
155
- ## 调研视角
156
- {本次派了哪几个视角的 agent}
204
+ ## 调研视角与方法
205
+ {本次派了哪几个视角,各用什么方法论}
157
206
 
158
207
  ## 现状锚定
159
- {context_pack 摘要:我们当前怎么做}
208
+ {context_pack 摘要}
160
209
 
161
210
  ## 调研发现(按视角)
162
- ### 视角 1:竞品对标
211
+ ### 视角 1:竞品对标(竞品矩阵)
163
212
  | 竞品 | 做法摘要 | 我们的 Gap | 来源 |
164
- ### 视角 2:行业趋势
165
213
  ...
166
214
 
167
215
  ## 机会信号
168
216
  1. {外部做得好而我们没做的}
169
- 2. ...
170
-
171
- ## 下一步
172
- 要跟进哪个机会?说"转 PRD"我把它作为现状输入,进 /wl-prd-full 参考模式落地。
173
- ```
174
-
175
- ---
176
-
177
- ## 类型 3:plan(未来规划)—— Gap 分析 + OST 第 3 层
178
-
179
- **目标**:把"未来想做成什么样"拆成 MVP + roadmap,输出方案候选。
180
-
181
- ### 流程(目标 4-5 轮)
182
-
183
- **第 1 步|现状 vs 理想态(Gap 分析核心)**
184
- 1. 现状:context_pack 取真实代码/页面/字段
185
- 2. 理想态:用户描述 / 最近一份 research 报告的结论 / 行业基准
186
- 3. 建 Gap 表:
187
-
188
- | 维度 | 现状 | 理想态 | Gap | 证据来源 |
189
- |------|------|--------|-----|---------|
190
-
191
- **第 2 步|Gap 排优先级**
192
- 按**业务价值 × 可行性**打分(不照搬 RICE,探索阶段粒度粗点就行):
193
- - 业务价值:1=锦上添花 / 2=提效 / 3=解锁核心场景 / 4=不做会丢市场
194
- - 可行性:看 context_pack 的现状,改动量大不大、有没有先例可复用
195
- - 分 = 价值 × 可行性,取 Top N
196
-
197
- **第 3 步|拆 MVP + roadmap(OST 第 3 层 Solution)**
198
- - **MVP(本期)**:高价值高可行性的 Gap,**当前人力能做完的**
199
- - **Roadmap(后续)**:按版本分组,标依赖关系(A 依赖 B 先做)
200
-
201
- **第 4 步|与用户确认 + 出报告**
202
- 1. 把 Gap 表 + MVP + roadmap **一次性编号列清**
203
- 2. 问:"这个规划对吗?MVP 范围合理吗?"
204
- 3. 确认后写报告,末尾提示出口衔接
205
-
206
- ### 输出结构
207
- ```markdown
208
- # 未来规划 - {主题}({date})
209
-
210
- ## 现状 vs 理想态(Gap 分析)
211
- | 维度 | 现状 | 理想态 | Gap | 价值 | 可行性 | 分 |
212
-
213
- ## MVP(本期建议)
214
- - {该做的 Gap} —— 理由:{价值×可行性}
215
- - ...
216
-
217
- ## Roadmap(后续版本)
218
- - V{N+1}:{...}(依赖:{...})
219
- - V{N+2}:{...}
220
217
 
221
218
  ## 下一步
222
- 要落地哪个?说"转 PRD"我把它作为现状输入,进 /wl-prd-full 参考模式落地。
219
+ 要跟进哪个机会?说"转 PRD"或"继续规划"。
223
220
  ```
224
221
 
225
222
  ---
226
223
 
227
- ## 出口衔接:报告 PRD(所有类型都要做)
224
+ ## 【第 3 段】出结论 + 衔接(所有路径必经)
228
225
 
229
- 报告写完,**永远**给这句提示:
226
+ 无论走的是 clarify 直接对齐(B 路径)还是 clarify+research(A 路径),
227
+ 最后都要:
228
+ 1. 把**对齐的需求**(+可选调研结论)整理成简短结论(1 段话 + 要点)
229
+ 2. 问用户:"转 PRD 落地?还是先做规划(roadmap)?还是就到这?"
230
230
 
231
- ```
232
- 要把握住哪个机会?说"转 PRD"我把它作为现状输入,进 /wl-prd-full 参考模式落地成可执行 PRD。
233
- ```
231
+ ### 如果用户要规划 → plan 段(Gap + roadmap)
232
+ 1. 现状(context_pack) vs 理想态(用户描述/research 结论) 建 Gap 表
233
+ 2. Gap 按**业务价值 × 可行性**打分排序
234
+ 3. 拆 MVP(本期人力能做完的) + Roadmap(后续版本,标依赖)
235
+ 4. **与用户确认** Gap 表 + MVP + roadmap
236
+ 5. 存 `workspace/members/{dev}/drafts/insight-plan-{topic}-{date}.md`
234
237
 
235
- 用户说"转 PRD"或指定 `{报告路径}#{机会编号}` → 触发:
238
+ ### 如果用户要转 PRD
239
+ 提示:
236
240
  ```
237
- /wl-prd-full 参考:{报告路径}#{机会编号}
241
+ 要落地?说"转 PRD"我把它作为现状输入,进 /wl-prd-full 参考模式落地成可执行 PRD。
238
242
  ```
239
- - prd **reference 模式**(mode: reference)承接
240
- - prd 读取 insight 报告作为**现状背景输入**
241
- - prd 走"轻反思 + 批量确认 + 3 道质量锁"落地成 PRD + 原型
242
- - **insight 不直接生成 PRD**,探索和落地是两道工序
243
+ 用户说"转 PRD" 触发 `/wl-prd-full 参考:{报告路径}`
243
244
 
244
245
  ---
245
246
 
246
- ## 🛡️ 故障降级表(探索不因工具崩而卡住)
247
+ ## 🛡️ 故障降级表
247
248
 
248
249
  | 故障现象 | 检测信号 | 降级动作 | 绝不能 |
249
250
  |---------|---------|---------|--------|
250
- | **context_pack 零命中**(全新领域) | 返回"(无命中)" | 照常探索,现状段标"索引无先例,基于用户口述/历史 PRD";discover/plan 仍可做 | ❌ 编现状细节充数 |
251
- | **web 搜索无结果/失败** | Agent 返回空 | 改用 context_pack + 历史 PRD + 用户口述做调研;标"外部调研暂不可用,基于内部信息" | ❌ 凭训练记忆编竞品数据 |
252
- | **多 agent 派发失败** | Agent 工具不可用 | 改单线程串行调研(主 agent 自己跑 WebSearch),不阻塞 | ❌ 因此中断 research |
253
- | **research-agent-*.md 清理失败** | rm 报错 | 记一句"中间产物未清理,下次 push 前 team_sync 会拦",继续 | ❌ 让脏文件进团队仓库 |
254
- | **平台没指定** | 用户没说 web/app | **不强制问平台**(探索阶段平台不关键),context_pack `--platform web` 兜底或两平台都跑 | ❌ prd 那样卡在问平台 |
255
- | **写入失败** | Write 报错 | 报告直接贴对话里,不崩 | ❌ 丢探索结论 |
256
- | **用户对结论全盘否定** | 用户说"不对" | 回到第 1 步重新锚定现状,问"哪里理解偏了",最多 2 轮重做 | ❌ 无限循环 / ❌ 强行写报告 |
251
+ | **context_pack 零命中** | 返回"(无命中)" | clarify 照做,现状段标"索引无先例,基于用户口述" | ❌ 编现状细节 |
252
+ | **web 搜索失败** | Agent 返回空 | "外部调研暂不可用,基于内部信息";或问用户跳过调研 | ❌ 凭训练记忆编竞品数据 |
253
+ | **多 agent 派发失败** | Agent 工具不可用 | 改单线程串行调研(主 agent 自己跑 WebSearch) | ❌ 因此中断 |
254
+ | **原型生成失败** | 脚本报错 | 回退到第①级文字对焦,标"原型暂不可用" | ❌ 卡住不前 |
255
+ | **平台没指定** | 用户没说 web/app | clarify 阶段**不强制问平台**(对焦时不关键);出原型时**必须问**(原型风格依赖平台) | ❌ 出错风格的原型 |
256
+ | **用户对结论全盘否定** | 用户说"不对" | clarify 第①级重新对焦,问"哪里理解偏了" | ❌ 无限循环 / ❌ 强行出报告 |
257
257
 
258
258
  ---
259
259
 
260
- ## 鲁棒性清单(出报告前自检)
260
+ ## 鲁棒性清单(出结论前自检)
261
261
 
262
- - [ ] 每个发现/机会/Gap 都附了**证据来源**?(context_pack 命中文件 / web 链接 / 用户口述)
263
- - [ ] 没有凭空编的数据?(没有证据的标"【待验证】")
264
- - [ ] 现状锚定跑了吗?(context_pack 必跑,纯凭空的探索是臆想)
265
- - [ ] 跟用户确认了吗?(探索结论不能 AI 单方面拍板)
266
- - [ ] research 的中间产物 `research-agent-*.md` 清理了吗?
267
- - [ ] 报告末尾给了"转 PRD"提示吗?
262
+ - [ ] clarify 真的对齐了吗?(用户明确确认过,不是 AI 单方面认定)
263
+ - [ ] 调研是用户**同意做**才做的吗?(不是擅自深挖)
264
+ - [ ] 每个发现/Gap 都附了**证据来源**?
265
+ - [ ] research 的中间产物 `research-agent-*.md` 清理了吗?
266
+ - [ ] 原型(如果出了)标注了"对焦草图,非交付"了吗?
268
267
 
269
268
  ---
270
269
 
271
270
  ## How to Use Results
272
271
 
273
- 洞察报告可流转:**说"转 PRD" → /wl-prd-full 参考模式**(把机会作为现状输入落地)→ 后续走 task → code → test 流水线。
272
+ 洞察结论可流转:**说"转 PRD" → /wl-prd-full 参考模式**(把对齐的需求作为现状输入落地)。
274
273
 
275
- > insight 是探索站,prd 是落地站。两者分开,思路才不混。
274
+ > insight 是对焦/探索站,prd 是落地站。两者分开,思路才不混。
275
+ > **insight 绝不直接生成 PRD。** 即便出了对焦原型,也不进 PRD 链路(除非用户强烈要求)。