@hupan56/wlkj 3.0.0 → 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.
- package/bin/cli.js +1435 -1373
- package/package.json +1 -1
- package/templates/qoder/commands/optional/wl-insight.md +6 -4
- package/templates/qoder/commands/optional/wl-report.md +20 -39
- package/templates/qoder/commands/optional/wl-status.md +4 -4
- package/templates/qoder/commands/wl-code.md +2 -2
- package/templates/qoder/commands/wl-design.md +5 -5
- package/templates/qoder/commands/wl-init.md +3 -3
- package/templates/qoder/commands/wl-prd.md +26 -13
- package/templates/qoder/commands/wl-req.md +3 -3
- package/templates/qoder/commands/wl-search.md +78 -47
- package/templates/qoder/commands/wl-task.md +343 -40
- package/templates/qoder/commands/wl-test.md +10 -10
- package/templates/qoder/config.yaml +35 -13
- package/templates/qoder/hooks/post-tool-use.py +181 -0
- package/templates/qoder/hooks/session-start.py +82 -1
- package/templates/qoder/hooks/stop-eval.py +207 -0
- package/templates/qoder/hooks/user-prompt-submit.py +139 -0
- package/templates/qoder/rules/wl-pipeline.md +70 -8
- package/templates/qoder/scripts/README.md +78 -115
- package/templates/qoder/scripts/capability/__init__.py +26 -0
- package/templates/qoder/scripts/capability/__main__.py +72 -0
- package/templates/qoder/scripts/capability/adapters/__init__.py +29 -0
- package/templates/qoder/scripts/capability/adapters/cli.py +316 -0
- package/templates/qoder/scripts/capability/adapters/mcp.py +334 -0
- package/templates/qoder/scripts/capability/adapters/qw.py +271 -0
- package/templates/qoder/scripts/capability/caps/__init__.py +27 -0
- package/templates/qoder/scripts/capability/caps/context.py +36 -0
- package/templates/qoder/scripts/capability/caps/cron.py +50 -0
- package/templates/qoder/scripts/capability/caps/identity.py +43 -0
- package/templates/qoder/scripts/capability/caps/memory.py +71 -0
- package/templates/qoder/scripts/capability/caps/notify.py +41 -0
- package/templates/qoder/scripts/capability/caps/present.py +48 -0
- package/templates/qoder/scripts/capability/caps/repo.py +31 -0
- package/templates/qoder/scripts/capability/caps/sandbox.py +43 -0
- package/templates/qoder/scripts/capability/chain.py +92 -0
- package/templates/qoder/scripts/capability/memory_chain.py +41 -0
- package/templates/qoder/scripts/capability/registry.py +246 -0
- package/templates/qoder/scripts/capability/registry_mcp.py +250 -0
- package/templates/qoder/scripts/capability/smoke_test.py +211 -0
- package/templates/qoder/scripts/capability/smoke_test_report.json +94 -0
- package/templates/qoder/scripts/{report → deployment/setup}/__init__.py +11 -11
- package/templates/qoder/scripts/{setup → deployment/setup}/carriers.py +33 -26
- package/templates/qoder/scripts/deployment/setup/carriers_verify.py +148 -0
- package/templates/qoder/scripts/{setup → deployment/setup}/init_doctor.py +40 -16
- package/templates/qoder/scripts/{setup → deployment/setup}/install_qoderwork.py +20 -12
- package/templates/qoder/scripts/{setup → deployment/setup}/platform_doctor.py +8 -2
- package/templates/qoder/scripts/{setup → deployment/setup}/repo_root.py +113 -112
- package/templates/qoder/scripts/{setup → deployment/setup}/setup.py +31 -11
- package/templates/qoder/scripts/{setup → deployment/setup}/setup_lanhu.py +13 -7
- package/templates/qoder/scripts/domain/__init__.py +0 -0
- package/templates/qoder/scripts/domain/design/__init__.py +0 -0
- package/templates/qoder/scripts/{report → domain/design}/fill_prototype.py +12 -6
- package/templates/qoder/scripts/{report → domain/design}/gen_design_doc.py +8 -2
- package/templates/qoder/scripts/{setup → domain/kg}/__init__.py +11 -11
- package/templates/qoder/scripts/domain/kg/build/__init__.py +0 -0
- package/templates/qoder/scripts/{kg → domain/kg/build}/build_entity_registry.py +7 -2
- package/templates/qoder/scripts/{kg → domain/kg/build}/build_relations.py +7 -2
- package/templates/qoder/scripts/{kg → domain/kg/build}/build_style_index.py +13 -7
- package/templates/qoder/scripts/{kg → domain/kg/build}/build_workflows.py +7 -2
- package/templates/qoder/scripts/{kg → domain/kg/build}/kg_build.py +76 -9
- package/templates/qoder/scripts/{kg → domain/kg/build}/kg_build_db.py +7 -2
- package/templates/qoder/scripts/{kg → domain/kg/build}/kg_incremental.py +11 -6
- package/templates/qoder/scripts/{report → domain/kg/build}/learn_aggregate.py +9 -4
- package/templates/qoder/scripts/domain/kg/extract/__init__.py +0 -0
- package/templates/qoder/scripts/{common → domain/kg/extract}/extract.py +430 -419
- package/templates/qoder/scripts/{common → domain/kg/extract}/test_extract.py +115 -115
- package/templates/qoder/scripts/{common → domain/kg/extract}/ts_extract.py +614 -536
- package/templates/qoder/scripts/domain/kg/graph/__init__.py +0 -0
- package/templates/qoder/scripts/{kg → domain/kg/graph}/kg_link_db.py +7 -2
- package/templates/qoder/scripts/domain/kg/graph/kg_semantic.py +683 -0
- package/templates/qoder/scripts/{kg → domain/kg}/kg.py +263 -30
- package/templates/qoder/scripts/{common → domain/kg}/kg_capabilities.py +182 -182
- package/templates/qoder/scripts/domain/kg/search/__init__.py +0 -0
- package/templates/qoder/scripts/{kg → domain/kg/search}/context_pack.py +30 -9
- package/templates/qoder/scripts/{kg → domain/kg/search}/enrich_prompt.py +10 -4
- package/templates/qoder/scripts/{kg → domain/kg/search}/prefetch.py +33 -8
- package/templates/qoder/scripts/{common → domain/kg/search}/search_engine.py +207 -205
- package/templates/qoder/scripts/{kg → domain/kg/search}/search_index.py +143 -77
- package/templates/qoder/scripts/domain/kg/server/__init__.py +0 -0
- package/templates/qoder/scripts/domain/kg/server/kgd.py +549 -0
- package/templates/qoder/scripts/domain/kg/server/perf_bench.py +197 -0
- package/templates/qoder/scripts/domain/kg/storage/__init__.py +0 -0
- package/templates/qoder/scripts/{kg → domain/kg/storage}/kg_duckdb.py +38 -14
- package/templates/qoder/scripts/domain/learning/__init__.py +0 -0
- package/templates/qoder/scripts/{report → domain/learning}/learn.py +8 -3
- package/templates/qoder/scripts/{mcp → domain/report}/__init__.py +11 -11
- package/templates/qoder/scripts/{report → domain/report}/add_session.py +9 -3
- package/templates/qoder/scripts/{report → domain/report}/export.py +10 -5
- package/templates/qoder/scripts/{report → domain/report}/report.py +9 -4
- package/templates/qoder/scripts/domain/report/report_snapshot.py +261 -0
- package/templates/qoder/scripts/{report → domain/report}/role.py +10 -4
- package/templates/qoder/scripts/{report → domain/report}/status.py +112 -9
- package/templates/qoder/scripts/domain/report/status_snapshot.py +191 -0
- package/templates/qoder/scripts/domain/requirement/__init__.py +0 -0
- package/templates/qoder/scripts/{report → domain/requirement}/archive_prd.py +8 -2
- package/templates/qoder/scripts/{report → domain/requirement}/req.py +228 -222
- package/templates/qoder/scripts/{kg → domain/task}/__init__.py +11 -11
- package/templates/qoder/scripts/{task → domain/task}/git_sync.py +40 -21
- package/templates/qoder/scripts/{task → domain/task}/syncgate.py +13 -8
- package/templates/qoder/scripts/{task → domain/task}/task.py +13 -5
- package/templates/qoder/scripts/{task → domain/task}/task_lifecycle.py +606 -596
- package/templates/qoder/scripts/{task → domain/task}/task_query.py +162 -161
- package/templates/qoder/scripts/{task → domain/task}/task_relations.py +425 -424
- package/templates/qoder/scripts/{task → domain/task}/team_sync.py +9 -4
- package/templates/qoder/scripts/domain/task/zentao_sync.py +370 -0
- package/templates/qoder/scripts/foundation/__init__.py +0 -0
- package/templates/qoder/scripts/{common → foundation}/bootstrap.py +10 -10
- package/templates/qoder/scripts/foundation/core/__init__.py +0 -0
- package/templates/qoder/scripts/{common → foundation/core}/cmd_registry.py +1 -1
- package/templates/qoder/scripts/{common → foundation/core}/config.py +1 -1
- package/templates/qoder/scripts/{common → foundation/core}/paths.py +706 -586
- package/templates/qoder/scripts/foundation/data/__init__.py +0 -0
- package/templates/qoder/scripts/{common → foundation/data}/contract.py +2 -2
- package/templates/qoder/scripts/{common → foundation/data}/events.py +2 -2
- package/templates/qoder/scripts/{common → foundation/data}/result.py +1 -1
- package/templates/qoder/scripts/{common → foundation/data}/task_utils.py +427 -404
- package/templates/qoder/scripts/foundation/identity/__init__.py +0 -0
- package/templates/qoder/scripts/{common → foundation/identity}/check_publish.py +103 -98
- package/templates/qoder/scripts/{common → foundation/identity}/developer.py +239 -239
- package/templates/qoder/scripts/{common → foundation/identity}/guard.py +2 -2
- package/templates/qoder/scripts/{common → foundation/identity}/identity.py +14 -10
- package/templates/qoder/scripts/{common → foundation/identity}/roles.py +1 -1
- package/templates/qoder/scripts/foundation/integrations/__init__.py +0 -0
- package/templates/qoder/scripts/{common → foundation/integrations}/active_task.py +30 -15
- package/templates/qoder/scripts/{common → foundation/integrations}/feishu.py +2 -2
- package/templates/qoder/scripts/{common → foundation/integrations}/terms.py +3 -3
- package/templates/qoder/scripts/foundation/integrations/zentao_client.py +220 -0
- package/templates/qoder/scripts/foundation/io/__init__.py +0 -0
- package/templates/qoder/scripts/{common → foundation/io}/filelock.py +1 -1
- package/templates/qoder/scripts/{common → foundation/io}/reqid.py +1 -1
- package/templates/qoder/scripts/foundation/protocol/__init__.py +0 -0
- package/templates/qoder/scripts/foundation/protocol/duckdb_conn.py +39 -0
- package/templates/qoder/scripts/{common → foundation/protocol}/mcp_base.py +1 -1
- package/templates/qoder/scripts/foundation/utils/__init__.py +0 -0
- package/templates/qoder/scripts/{common → foundation/utils}/eval_api.py +12 -1
- package/templates/qoder/scripts/{common → foundation/utils}/pip_install.py +23 -6
- package/templates/qoder/scripts/{common → foundation/utils}/platform_guard.py +1 -1
- package/templates/qoder/scripts/orchestration/__init__.py +0 -0
- package/templates/qoder/scripts/orchestration/wlkj.py +185 -0
- package/templates/qoder/scripts/protocol/__init__.py +0 -0
- package/templates/qoder/scripts/protocol/browser/README.md +207 -0
- package/templates/qoder/scripts/protocol/browser/SKILL.md +265 -0
- package/templates/qoder/scripts/protocol/browser/config.env +9 -0
- package/templates/qoder/scripts/protocol/browser/references/cdp-api.md +110 -0
- package/templates/qoder/scripts/protocol/browser/references/migration-2.5.3.md +72 -0
- package/templates/qoder/scripts/protocol/browser/references/site-patterns/.gitkeep +0 -0
- package/templates/qoder/scripts/protocol/browser/scripts/browser-discovery.mjs +138 -0
- package/templates/qoder/scripts/protocol/browser/scripts/cdp-proxy.mjs +672 -0
- package/templates/qoder/scripts/protocol/browser/scripts/check-deps.mjs +206 -0
- package/templates/qoder/scripts/protocol/browser/scripts/find-url.mjs +253 -0
- package/templates/qoder/scripts/protocol/browser/scripts/match-site.mjs +46 -0
- package/templates/qoder/scripts/protocol/browser/templates/config.env.template +9 -0
- package/templates/qoder/scripts/protocol/mcp/__init__.py +11 -0
- package/templates/qoder/scripts/protocol/mcp/kg_mcp_server.py +478 -0
- package/templates/qoder/scripts/{mcp → protocol/mcp}/lanhu_stdio_wrapper.py +11 -5
- package/templates/qoder/scripts/{mcp → protocol/mcp}/mcp_doctor.py +47 -14
- package/templates/qoder/scripts/protocol/mcp/mcp_launcher.py +600 -0
- package/templates/qoder/scripts/{mcp → protocol/mcp}/mysql_mcp_server.py +181 -67
- package/templates/qoder/scripts/protocol/mcp/zentao_mcp_server.py +1920 -0
- package/templates/qoder/scripts/protocol/transports/__init__.py +56 -0
- package/templates/qoder/scripts/protocol/transports/base.py +87 -0
- package/templates/qoder/scripts/protocol/transports/cli.py +132 -0
- package/templates/qoder/scripts/protocol/transports/http.py +141 -0
- package/templates/qoder/scripts/protocol/transports/stdio.py +293 -0
- package/templates/qoder/scripts/run_weekly_update.bat +27 -18
- package/templates/qoder/scripts/run_weekly_update.sh +22 -13
- package/templates/qoder/scripts/validation/__init__.py +0 -0
- package/templates/qoder/scripts/validation/eval/__init__.py +0 -0
- package/templates/qoder/scripts/validation/eval/perf-report-2026-06-24.md +139 -0
- package/templates/qoder/scripts/validation/eval/qwork_harness.py +617 -0
- package/templates/qoder/scripts/validation/eval/report-commands.md +220 -0
- package/templates/qoder/scripts/validation/eval/transcript_timing.py +386 -0
- package/templates/qoder/scripts/validation/metrics/__init__.py +0 -0
- package/templates/qoder/scripts/{report → validation/metrics}/eval_prd.py +17 -10
- package/templates/qoder/scripts/validation/metrics/usability_score.py +750 -0
- package/templates/qoder/scripts/validation/test/__init__.py +11 -0
- package/templates/qoder/scripts/validation/test/assertion_gen.py +551 -0
- package/templates/qoder/scripts/{test → validation/test}/autotest.py +64 -4
- package/templates/qoder/scripts/{common → validation/test}/autotest_auth.py +1 -1
- package/templates/qoder/scripts/{test → validation/test}/autotest_batch.py +16 -3
- package/templates/qoder/scripts/{test → validation/test}/autotest_data.py +17 -12
- package/templates/qoder/scripts/validation/test/autotest_opencli.py +646 -0
- package/templates/qoder/scripts/{test → validation/test}/autotest_run.py +17 -3
- package/templates/qoder/scripts/validation/test/autotest_webaccess.py +571 -0
- package/templates/qoder/scripts/{test → validation/test}/benchmark.py +12 -6
- package/templates/qoder/scripts/{test → validation/test}/kg_auto_login.py +8 -2
- package/templates/qoder/scripts/{test → validation/test}/kg_test_runner.py +7 -2
- package/templates/qoder/scripts/{test → validation/test}/page_probe.py +8 -3
- package/templates/qoder/scripts/validation/test/smoke_all_commands.py +170 -0
- package/templates/qoder/settings.json +30 -0
- package/templates/qoder/skills/design-import/SKILL.md +22 -13
- package/templates/qoder/skills/design-review/SKILL.md +19 -10
- package/templates/qoder/skills/prd-generator/SKILL.md +22 -18
- package/templates/qoder/skills/prd-review/SKILL.md +6 -4
- package/templates/qoder/skills/prototype-generator/SKILL.md +63 -14
- package/templates/qoder/skills/spec-coder/SKILL.md +22 -13
- package/templates/qoder/skills/spec-generator/SKILL.md +22 -10
- package/templates/qoder/skills/test-generator/SKILL.md +7 -5
- package/templates/qoder/skills/wl-code/SKILL.md +23 -11
- package/templates/qoder/skills/wl-commit/SKILL.md +9 -8
- package/templates/qoder/skills/wl-design/SKILL.md +5 -3
- package/templates/qoder/skills/wl-init/SKILL.md +6 -6
- package/templates/qoder/skills/wl-insight/SKILL.md +23 -10
- package/templates/qoder/skills/wl-prd-full/SKILL.md +57 -6
- package/templates/qoder/skills/wl-prd-quick/SKILL.md +3 -3
- package/templates/qoder/skills/wl-prd-review/SKILL.md +16 -4
- package/templates/qoder/skills/wl-report/SKILL.md +25 -23
- package/templates/qoder/skills/wl-search/SKILL.md +149 -78
- package/templates/qoder/skills/wl-spec/SKILL.md +7 -5
- package/templates/qoder/skills/wl-status/SKILL.md +48 -16
- package/templates/qoder/skills/wl-task/SKILL.md +92 -10
- package/templates/qoder/skills/wl-test/SKILL.md +75 -29
- package/templates/qoder/templates/prd-full-template.md +7 -0
- package/templates/root/AGENTS.md +275 -236
- package/templates/root/requirements.txt +3 -0
- package/templates/root//344/275/277/347/224/250/350/257/264/346/230/216.md +3 -3
- package/templates/root//346/226/260/346/211/213/346/214/207/345/215/227.md +2 -2
- package/templates/.qoder/.runtime/ctx-cache-5660152f1d6dd819.md +0 -23
- package/templates/.qoder/.runtime/ctx-cache-afdce0dac06b25b0.md +0 -23
- package/templates/.qoder/.runtime/search-cache-eae7644e7b122f35.txt +0 -1
- package/templates/.qoder/learning/eval-history.jsonl +0 -28
- package/templates/data/index/wiki-index.json +0 -8
- package/templates/qoder/nul +0 -4
- package/templates/qoder/scripts/kg/extract.py +0 -398
- package/templates/qoder/scripts/kg/kg_semantic.py +0 -156
- package/templates/qoder/scripts/mcp/kg_mcp_server.py +0 -606
- package/templates/qoder/scripts/mcp/mcp_launcher.py +0 -442
- package/templates/qoder/scripts/mcp/zentao_mcp_server.py +0 -384
- package/templates/qoder/scripts/task/__init__.py +0 -11
- package/templates/qoder/scripts/test/__init__.py +0 -11
- package/templates/qoder/scripts/wlkj.py +0 -116
- /package/templates/qoder/scripts/{common → deployment}/__init__.py +0 -0
- /package/templates/qoder/scripts/{common → domain/kg/graph}/graph_traverse.py +0 -0
- /package/templates/qoder/scripts/{common → domain/kg/server}/repowiki.py +0 -0
- /package/templates/qoder/scripts/{common → foundation/io}/atomicio.py +0 -0
- /package/templates/qoder/scripts/{test → validation/test}/secure-ls.js +0 -0
|
@@ -11,13 +11,13 @@ trigger: "user invokes /wl-* command explicitly"
|
|
|
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
|
|
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
|
|
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/
|
|
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/
|
|
52
|
-
python "$R/.qoder/scripts/
|
|
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 道质量锁**:
|
|
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 道质量锁
|
|
@@ -11,13 +11,13 @@ trigger: "user invokes /wl-* command explicitly"
|
|
|
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
|
|
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
|
|
20
|
+
> 完整工作流见同名 command 文件 `.qoder/commands/wl-prd.md`,
|
|
21
21
|
> 功能实现层见 `.qoder/skills/prd-generator/SKILL.md`(快档分支)。
|
|
22
22
|
|
|
23
23
|
## ⚠️ STEP 0: 必须先问平台(任何分析前)
|
|
@@ -40,7 +40,7 @@ R=$(python ~/.qoderwork/repo_root.py 2>/dev/null) || R=.
|
|
|
40
40
|
|
|
41
41
|
1. **先 prefetch(预测 + 批量预取,禁止串行 search)**:
|
|
42
42
|
```bash
|
|
43
|
-
python "$R/.qoder/scripts/
|
|
43
|
+
python "$R/.qoder/scripts/orchestration/wlkj.py" prefetch "<需求描述>" --platform <p>
|
|
44
44
|
```
|
|
45
45
|
prefetch 一次返回代码/字段/API/Wiki/历史PRD 的合并结果。**之后不要再用 search/find/grep 逐个查词**——那会变成 6+ 次串行往返,是轮次爆炸的根因。prefetch 不够时才补调一次。
|
|
46
46
|
2. 一次 Write:Mini-PRD(prd-quick-template.md,6 章)+ 微型原型(只画 diff)
|
|
@@ -11,12 +11,12 @@ trigger: "user invokes /wl-* command explicitly"
|
|
|
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
|
|
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
|
|
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/
|
|
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
|
|
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
|
+
|
|
@@ -11,7 +11,7 @@ trigger: "user invokes /wl-* command explicitly"
|
|
|
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
|
|
14
|
+
> `repo_root.py` 从 `~/.qoderwork/mcp.json` 反推仓库根;失败回退 `.`(IDE/CLI 工作目录即仓库根)。找不到时先跑 `python "$R/.qoder/scripts/orchestration/wlkj.py" install-qw`。
|
|
15
15
|
|
|
16
16
|
# wl-report — 日报 / 周报(按开发者隔离)
|
|
17
17
|
|
|
@@ -19,33 +19,35 @@ R=$(python ~/.qoderwork/repo_root.py 2>/dev/null) || R=.
|
|
|
19
19
|
|
|
20
20
|
## ⚙️ 自取上下文(Quest / QoderWork 无 hook 注入,必须自读)
|
|
21
21
|
|
|
22
|
-
|
|
23
|
-
- `.qoder/.current-task` — 当前任务
|
|
24
|
-
- `workspace/members/{dev}/journal/` — 历史日报/周报
|
|
25
|
-
- `workspace/members/{dev}/drafts/` — 今日/本周产出的 PRD/原型草稿
|
|
22
|
+
### ⚡ Fast Path:一次拿全(必须先跑,禁止逐个 cat/ls/git log)
|
|
26
23
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
-
|
|
30
|
-
-
|
|
31
|
-
|
|
24
|
+
```bash
|
|
25
|
+
R=$(python ~/.qoderwork/repo_root.py 2>/dev/null) || R=.
|
|
26
|
+
python "$R/.qoder/scripts/orchestration/wlkj.py" report-snapshot "$R" # 日报
|
|
27
|
+
python "$R/.qoder/scripts/orchestration/wlkj.py" report-snapshot "$R" --days 7 # 周报
|
|
28
|
+
```
|
|
32
29
|
|
|
33
|
-
|
|
30
|
+
这一个命令**一次返回全部所需数据**(JSON,全部已按当前开发者过滤):
|
|
31
|
+
- `developer` — 当前开发者(报告归属)
|
|
32
|
+
- `my_tasks` — 我创建/被指派的任务(`task.py list --mine` 结果)
|
|
33
|
+
- `commits` — 我的 git 提交(自动扫 data/code/ 各项目,按 author 过滤)
|
|
34
|
+
- `journal` — 我的 journal 学习/反馈事件
|
|
35
|
+
- `my_prds` — 我写的 PRD/草稿
|
|
36
|
+
- `date_range` — 报告日期范围(直接套模板)
|
|
34
37
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
+
**拿到后直接写报告,不要再 cat/ls/git log 探查。**
|
|
39
|
+
> 性能:旧方式 5-7 次工具调用、多轮思考;聚合后 1 轮 + 1 次调用(实测 650-740ms < 旧 836ms)。
|
|
40
|
+
> 缺失字段为 null = 该数据源无内容(如今天无提交),正常处理,如实写"无代码产出"即可。
|
|
38
41
|
|
|
39
|
-
|
|
40
|
-
git log --author=<开发者名> --since="<时间范围>" --pretty=format:"%h %s (%ar)" --no-merges
|
|
42
|
+
## 模式自动判断
|
|
41
43
|
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
44
|
+
- **周五**(周一=1,周五=5)→ 周报模式(聚合脚本传 `--days 7`)
|
|
45
|
+
- 其他工作日 → 日报模式(默认 `--days 1`)
|
|
46
|
+
- 用户明说"周报/日报" → 覆盖自动判断
|
|
45
47
|
|
|
46
48
|
## 🧩 QoderWork 增强:日历补数据(可选 · 无连接器则自动回退)
|
|
47
49
|
|
|
48
|
-
>
|
|
50
|
+
> 通过 capability 层自动路由(Settings → Connectors,授权 Microsoft 365 或 macOS)。
|
|
49
51
|
> **纯 Qoder IDE / CLI 没有连接器 → 本段不生效,日报照常只用上面 3 个数据源,功能完全不受影响。**
|
|
50
52
|
> 探测方式:仅当运行环境提供了「日历/会议」工具可直接读取时才用;看不到这些工具就跳过。
|
|
51
53
|
|
|
@@ -100,7 +102,7 @@ PM / 设计岗常一天在开会、评审,没有 git 提交,纯靠 commit
|
|
|
100
102
|
|
|
101
103
|
保存到 `workspace/members/{dev}/journal/{YYYY-MM-DD}-{daily|weekly}.md`,然后:
|
|
102
104
|
```bash
|
|
103
|
-
|
|
105
|
+
cap.mcp.call("sync", {"direction": "push"})
|
|
104
106
|
```
|
|
105
107
|
让团队/上级看到。
|
|
106
108
|
|
|
@@ -118,8 +120,8 @@ python "$R/.qoder/scripts/task/team_sync.py" push
|
|
|
118
120
|
### 方式 B: webhook(任何环境,脚本化)
|
|
119
121
|
如果没有连接器,用引擎自带的 webhook 推送:
|
|
120
122
|
```bash
|
|
121
|
-
python "$R/.qoder/scripts/
|
|
122
|
-
python "$R/.qoder/scripts/
|
|
123
|
+
python "$R/.qoder/scripts/orchestration/wlkj.py" report daily --push-feishu
|
|
124
|
+
python "$R/.qoder/scripts/orchestration/wlkj.py" report weekly --push-feishu
|
|
123
125
|
```
|
|
124
126
|
这会通过 config.yaml 里配的飞书 bot webhook 发卡片通知。
|
|
125
127
|
两种方式不冲突,连接器更富交互,webhook 更可靠无依赖。
|
|
@@ -7,109 +7,174 @@ trigger: "user invokes /wl-* command explicitly"
|
|
|
7
7
|
|
|
8
8
|
# wl-search — 代码 / 知识图谱搜索
|
|
9
9
|
|
|
10
|
-
##
|
|
10
|
+
## 执行方式(宿主无关,自动路由)
|
|
11
11
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
12
|
+
```python
|
|
13
|
+
from capability import resolve
|
|
14
|
+
cap = resolve()
|
|
15
|
+
result = cap.mcp.call("search_code", {"keyword": "保险", "platform": "web"})
|
|
15
16
|
```
|
|
16
|
-
|
|
17
|
+
|
|
18
|
+
自动路由:有 MCP 走 MCP(快),无 MCP 走 wlkj.py(CLI 降级)。零宿主感知。
|
|
17
19
|
|
|
18
20
|
> ⚠️ 这是查代码、业务、知识图谱的**唯一入口**。禁止直接 grep `data/code/` 全库。
|
|
19
21
|
|
|
20
|
-
|
|
22
|
+
> 🚫 **绝对禁止**用 `findstr /s` / `grep -r` / `os.walk` / `subprocess` 全盘递归扫
|
|
23
|
+
> data/code(8973+ 文件)——Windows 下会**卡死 + 疯狂弹 cmd 子进程窗口**。中文文案/报错
|
|
24
|
+
> 溯源(如"车辆不存在")只能用 `grep-text`(单进程、范围限定、不弹窗)。
|
|
25
|
+
|
|
26
|
+
## ⚙️ 自取上下文
|
|
21
27
|
|
|
22
28
|
- `data/index/.index-meta.json` — 图谱新鲜度;若 >7 天或不存在,提示用户
|
|
23
29
|
"知识图谱可能过期,建议先说'初始化'(/wl-init)刷新",但不要阻塞本次搜索
|
|
24
|
-
- 平台意图:用户提到"Web/PC/管理端"→
|
|
25
|
-
"APP/H5/移动端"→
|
|
30
|
+
- 平台意图:用户提到"Web/PC/管理端"→ `platform: "web"`;
|
|
31
|
+
"APP/H5/移动端"→ `platform: "app"`;不明确就不加
|
|
26
32
|
|
|
27
|
-
##
|
|
33
|
+
## ⚡⚡ 第一步永远是 context(强制 — 反碎片化命门)
|
|
28
34
|
|
|
29
|
-
|
|
35
|
+
**实测:旧版 AI 在十几个子命令间试错,单次搜索连调 5 次、6 轮迭代。
|
|
36
|
+
本规则把这压成 1 次调用、1-2 轮。**
|
|
30
37
|
|
|
31
|
-
|
|
32
|
-
|
|
38
|
+
```python
|
|
39
|
+
cap.mcp.call("context_pack", {"keyword": "<业务词>", "role": "<pm|dev|design|test>"})
|
|
40
|
+
```
|
|
33
41
|
|
|
34
|
-
|
|
42
|
+
**除非用户明确要"影响分析/覆盖矩阵/多跳遍历"等图谱高级能力(见下方后备表),
|
|
43
|
+
否则第一步且唯一一步就是 `context_pack`。** 它一次返回:代码文件 + 字段 + API + PRD + Repo Wiki。
|
|
44
|
+
拿到后直接 Read 2-3 个核心文件回答,**绝大多数情况禁止再跑第二个子命令。**
|
|
35
45
|
|
|
36
|
-
|
|
46
|
+
角色裁剪:
|
|
47
|
+
- `role: "pm"`:字段+PRD+API(PM 首选)
|
|
48
|
+
- `role: "dev"`:代码+字段+API+Wiki(开发首选)
|
|
49
|
+
- `role: "design"`:页面示例+风格
|
|
50
|
+
- `role: "test"`:代码+PRD+API
|
|
37
51
|
|
|
38
|
-
|
|
52
|
+
> **纠偏(唯一允许追加 search 的情形)**:若 context 返回的前几个文件明显跑偏
|
|
53
|
+
> (如搜"考勤"却全是二维码模块),**最多**补 1 次 `search_code` 用精确关键词定位,
|
|
54
|
+
> 然后直接 Read。禁止搜超过 2 次。
|
|
39
55
|
|
|
40
|
-
|
|
41
|
-
|---------|-----------|---------|
|
|
42
|
-
| "考勤代码在哪""搜保险" | `kg.py search <关键词> [--platform web\|app]` | search_code |
|
|
43
|
-
| "薪资 API""有哪些接口" | `kg.py api <关键词>` | search_api |
|
|
44
|
-
| "保险相关的 PRD"(防重复造轮子) | `kg.py prd <关键词>` | search_prd |
|
|
56
|
+
### 能并发的工具调用必须并发,别串行等(性能命门)
|
|
45
57
|
|
|
46
|
-
|
|
58
|
+
**串行执行是工作流慢的最大原因。** 每次工具调用要等返回(图谱查询 2-3 秒、读文件 1 秒),
|
|
59
|
+
串行 10 步 = 白等 30 秒。MCP 工具调用**支持在同一回合并发**,务必利用:
|
|
47
60
|
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
| "资产管理功能画像"(几端点几按钮几测试) | `kg.py feature <功能名>` | feature_overview | **PM 写 PRD 前** |
|
|
54
|
-
| "资产盘点有几步"(业务流程链) | `kg.py workflow <模块名>` | get_workflow | **PM/测试** |
|
|
55
|
-
| "从资产管理能到哪些实体"(多跳遍历) | `kg.py hop <符号> [--depth 1-5]` | multi_hop | 开发/架构 |
|
|
56
|
-
| "考勤的 Wiki 文档"(比读源码省 token) | `kg.py wiki <关键词>` | search_wiki | 所有人 |
|
|
61
|
+
**并发规则(强制):**
|
|
62
|
+
1. **多个独立的 search/Read → 同一回合一起发**。
|
|
63
|
+
2. **搜索 + 搜索 可并发**:要同时搜 `OSS` 和 `upload`,一次发 2 个 search_code。
|
|
64
|
+
3. **只有"后一步依赖前一步结果"时才串行**。
|
|
65
|
+
4. **一轮思考里尽量塞满**:能同回合发的全发出去,等它们一起回来。
|
|
57
66
|
|
|
58
|
-
|
|
67
|
+
**反例(慢,禁止)**:search A → 等 → Read X → 等 → search B → 等 → Read Y → 等 ...
|
|
68
|
+
**正例(快,正确)**:[search A + search B] 并发 → 等 → [Read X + Read Y + Read Z] 并发 → 答
|
|
59
69
|
|
|
60
|
-
|
|
61
|
-
|---------|-----------|---------|
|
|
62
|
-
| "用真实数据预填原型" | `kg.py fill-prototype <关键词> [--platform]` | fill_prototype |
|
|
63
|
-
| "项目设计规范"(布局/配色/组件) | `kg.py design-system [--platform]` | get_design_system |
|
|
70
|
+
---
|
|
64
71
|
|
|
65
|
-
|
|
72
|
+
## 🔧 后备能力表(仅当 context 不够用时)
|
|
66
73
|
|
|
67
|
-
|
|
74
|
+
> 以下子命令是 **context 的补充**,不是默认起点。先用 context,不够再查这里。
|
|
75
|
+
> **禁止"先翻这张表挑命令"——那是旧版连调 5 次的根因。**
|
|
68
76
|
|
|
69
|
-
|
|
70
|
-
# 搜字段用法(返回字段标签 + 使用文件)
|
|
71
|
-
python "$R/.qoder/scripts/kg/search_index.py" --field <字段名>
|
|
77
|
+
### A. 基础搜索(context 跑偏时才用)
|
|
72
78
|
|
|
73
|
-
|
|
74
|
-
|
|
79
|
+
| 用户问法 | 调用方式 |
|
|
80
|
+
|---------|---------|
|
|
81
|
+
| "考勤代码在哪""搜保险" | `cap.mcp.call("search_code", {"keyword": "考勤", "platform": "web"})` |
|
|
82
|
+
| "薪资 API""有哪些接口" | `cap.mcp.call("search_api", {"keyword": "salary"})` |
|
|
83
|
+
| "保险相关的 PRD"(防重复造轮子) | `cap.mcp.call("search_prd", {"keyword": "保险"})` |
|
|
75
84
|
|
|
76
|
-
|
|
77
|
-
python "$R/.qoder/scripts/kg/search_index.py" --list
|
|
85
|
+
### A++. 中文文案/报错溯源(findstr 安全替代)
|
|
78
86
|
|
|
79
|
-
|
|
80
|
-
|
|
87
|
+
用户查的是中文短语(报错文案"车辆不存在"、字段标签"项目车号"、业务词),代码标识符
|
|
88
|
+
索引天然查不到。**这时只能用 grep-text**(单进程、限定 data/code、限定扩展名、不弹窗):
|
|
81
89
|
|
|
82
|
-
|
|
83
|
-
|
|
90
|
+
```bash
|
|
91
|
+
# grep-text 走 CLI 降级(不是 MCP 工具)
|
|
92
|
+
python "$R/.qoder/scripts/orchestration/wlkj.py" kg grep-text 车辆不存在 --ext java --limit 20
|
|
84
93
|
```
|
|
85
94
|
|
|
86
|
-
|
|
95
|
+
> 🚫 这是中文文案搜索的**唯一合法通道**。绝不用 `findstr /s`/`grep -r`/`os.walk` 全盘扫。
|
|
96
|
+
|
|
97
|
+
### 🔴 DB. 数据库查询(表结构/数据/枚举)— 查库前必须先问环境,不可跳过
|
|
98
|
+
|
|
99
|
+
当用户意图涉及**数据库 / 表结构 / 字段 / 枚举值 / 真实数据**,走 `cap.mcp.call("list_envs")` 等,**不走知识图谱**。
|
|
100
|
+
|
|
101
|
+
**🚫 安全红线(最高优先级):查任何数据库之前,必须先问用户选哪个环境。
|
|
102
|
+
绝不能自动判断、绝不能默认走 test 就不问。**
|
|
103
|
+
|
|
104
|
+
**强制流程(每轮对话首次查库时执行,不可省略):**
|
|
105
|
+
|
|
106
|
+
1. **先调 `cap.mcp.call("list_envs", {})`** 拿到所有环境标签;
|
|
107
|
+
2. **把环境列给用户,问"要查哪个环境",然后停下等用户选**;
|
|
108
|
+
3. **用户明确选定后**,后续查询都带 `env=<用户选的标签>`。
|
|
109
|
+
|
|
110
|
+
可用工具(全部带可选 `env` 参数):
|
|
111
|
+
- `cap.mcp.call("list_envs", {})` — 列出环境(**第一步必调**)
|
|
112
|
+
- `cap.mcp.call("query_schema", {"table": "t_xxx", "env": "test"})` — 表结构
|
|
113
|
+
- `cap.mcp.call("query_data", {"table": "t_xxx", "env": "test"})` — 数据
|
|
114
|
+
- `cap.mcp.call("query_distinct", {"table": "t_xxx", "column": "status", "env": "test"})` — 枚举值
|
|
87
115
|
|
|
88
|
-
|
|
116
|
+
### A+. 语义检索补充(中→英跨语言,自动触发)
|
|
117
|
+
|
|
118
|
+
关键词精确匹配查不到时,**自动**用语义向量补一轮——查"报销"能命中 `expense`/`reimburse`。
|
|
119
|
+
|
|
120
|
+
- 触发条件:`search` / `context` 关键词命中 ≤2 个文件时自动叠加「语义补充」段
|
|
121
|
+
- 模型未装时静默跳过,不报错
|
|
122
|
+
- 管理员构建向量:`python "$R/.qoder/scripts/orchestration/wlkj.py" semantic build-embeddings`
|
|
123
|
+
|
|
124
|
+
### B. 知识图谱高级能力
|
|
125
|
+
|
|
126
|
+
| 用户问法 | 调用方式 | 谁最该用 |
|
|
127
|
+
|---------|---------|---------|
|
|
128
|
+
| "改 /asset 影响哪些页面" | `cap.mcp.call("get_impact", {"endpoint": "/asset"})` | 开发改接口前 |
|
|
129
|
+
| "handleExport 的完整关联" | `cap.mcp.call("context_360", {"symbol": "handleExport"})` | 开发/测试 |
|
|
130
|
+
| "哪些功能没测试""回归盲区" | `cap.mcp.call("coverage_matrix", {})` | **PM/测试/管理** |
|
|
131
|
+
| "资产管理功能画像" | `cap.mcp.call("feature_overview", {"feature": "资产管理"})` | **PM 写 PRD 前** |
|
|
132
|
+
| "资产盘点有几步" | `cap.mcp.call("get_workflow", {"module": "assets"})` | **PM/测试** |
|
|
133
|
+
| "从资产管理能到哪些实体" | `cap.mcp.call("multi_hop", {"symbol": "资产管理", "depth": 3})` | 开发/架构 |
|
|
134
|
+
| "考勤的 Wiki 文档" | `cap.mcp.call("search_wiki", {"keyword": "考勤"})` | 所有人 |
|
|
135
|
+
|
|
136
|
+
### C. 设计/原型辅助
|
|
137
|
+
|
|
138
|
+
| 用户问法 | 调用方式 |
|
|
139
|
+
|---------|---------|
|
|
140
|
+
| "用真实数据预填原型" | `cap.mcp.call("fill_prototype", {"keyword": "车辆", "platform": "web"})` |
|
|
141
|
+
| "项目设计规范" | `cap.mcp.call("get_design_system", {"platform": "web"})` |
|
|
142
|
+
|
|
143
|
+
### D. 字段 / 页面风格 / 组件
|
|
144
|
+
|
|
145
|
+
这些走 CLI 降级(不是 MCP 工具):
|
|
89
146
|
|
|
90
147
|
```bash
|
|
91
|
-
python "$R/.qoder/scripts/
|
|
148
|
+
python "$R/.qoder/scripts/orchestration/wlkj.py" search --field <字段名>
|
|
149
|
+
python "$R/.qoder/scripts/orchestration/wlkj.py" search --style <类型> [--platform web|app]
|
|
150
|
+
python "$R/.qoder/scripts/orchestration/wlkj.py" search --list
|
|
151
|
+
python "$R/.qoder/scripts/orchestration/wlkj.py" search --modules
|
|
152
|
+
python "$R/.qoder/scripts/orchestration/wlkj.py" search --components
|
|
92
153
|
```
|
|
93
154
|
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
155
|
+
## 一次取全(推荐写 PRD/Spec 前)
|
|
156
|
+
|
|
157
|
+
```python
|
|
158
|
+
cap.mcp.call("context_pack", {"keyword": "<业务词>", "platform": "web", "role": "pm"})
|
|
159
|
+
```
|
|
99
160
|
|
|
100
|
-
|
|
161
|
+
角色裁剪:
|
|
162
|
+
- `role: "pm"`:只看字段+PRD+API(**PM 首选**)
|
|
163
|
+
- `role: "design"`:只看页面示例+布局指纹+风格速查
|
|
164
|
+
- `role: "dev"`:只看代码+字段+API+Wiki
|
|
165
|
+
- `role: "test"`:只看代码+PRD+API
|
|
101
166
|
|
|
102
167
|
## 决策树:该用哪个能力?
|
|
103
168
|
|
|
104
169
|
```
|
|
105
170
|
用户想查什么?
|
|
106
|
-
├─ "这个东西有了吗/在哪" →
|
|
107
|
-
├─ "这个功能现在啥样" →
|
|
108
|
-
├─ "改这个会影响谁" →
|
|
109
|
-
├─ "这个流程有几步" →
|
|
110
|
-
├─ "哪些功能缺测试" →
|
|
111
|
-
├─ "XX 谁调用/调用链" →
|
|
112
|
-
└─ 要出原型/查风格 →
|
|
171
|
+
├─ "这个东西有了吗/在哪" → search_code / search_prd / search_api
|
|
172
|
+
├─ "这个功能现在啥样" → feature_overview + context_pack --role pm
|
|
173
|
+
├─ "改这个会影响谁" → get_impact
|
|
174
|
+
├─ "这个流程有几步" → get_workflow
|
|
175
|
+
├─ "哪些功能缺测试" → coverage_matrix
|
|
176
|
+
├─ "XX 谁调用/调用链" → context_360 或 multi_hop
|
|
177
|
+
└─ 要出原型/查风格 → get_design_system + fill_prototype
|
|
113
178
|
```
|
|
114
179
|
|
|
115
180
|
## 结果使用规则
|
|
@@ -119,23 +184,29 @@ python "$R/.qoder/scripts/kg/kg.py" context <业务词> --platform <web|app> --r
|
|
|
119
184
|
3. 基于读到的真实代码/数据回答用户问题
|
|
120
185
|
4. 不要把脚本原始输出整个贴给用户 —— 提炼后再回答
|
|
121
186
|
|
|
187
|
+
### Glob/文件找不到怎么办
|
|
188
|
+
|
|
189
|
+
context/search 已给出文件路径时,直接 Read 那个路径。若 Glob 报"未找到文件",
|
|
190
|
+
**不要**去跑 `find`/`findstr`/`dir /s` 命令行兜底。正确做法:
|
|
191
|
+
- 用 `cap.mcp.call("search_code", {"keyword": "ServiceImpl"})` 在索引里搜
|
|
192
|
+
- 或用 `wlkj.py kg grep-text ServiceImpl --ext java` 单进程搜文案
|
|
193
|
+
|
|
122
194
|
## 索引/图谱缺失怎么办
|
|
123
195
|
|
|
124
|
-
|
|
196
|
+
遇到"知识图谱未构建"类提示:
|
|
125
197
|
- 对 AI 说「初始化」(/wl-init)自动刷新
|
|
126
|
-
- 或 `python "$R/.qoder/scripts/
|
|
127
|
-
- 或 `python "$R/.qoder/scripts/
|
|
198
|
+
- 或 `python "$R/.qoder/scripts/orchestration/wlkj.py" kg-build` 手动构建
|
|
199
|
+
- 或 `python "$R/.qoder/scripts/orchestration/wlkj.py" doctor --fix` 自检修复
|
|
128
200
|
|
|
129
201
|
## 高频场景对照
|
|
130
202
|
|
|
131
|
-
| 用户问法 |
|
|
132
|
-
|
|
133
|
-
| "考勤代码在哪" | `
|
|
134
|
-
| "改 /asset 接口影响谁" | `
|
|
135
|
-
| "哪些功能没测试覆盖" | `
|
|
136
|
-
| "资产管理功能完整吗" | `
|
|
137
|
-
| "资产盘点业务流程" | `
|
|
138
|
-
| "
|
|
139
|
-
| "
|
|
140
|
-
| "
|
|
141
|
-
| "写 PRD 前一次取全" | `kg.py context 车辆 --role pm` |
|
|
203
|
+
| 用户问法 | 调用方式 |
|
|
204
|
+
|---------|---------|
|
|
205
|
+
| "考勤代码在哪" | `cap.mcp.call("search_code", {"keyword": "考勤"})` |
|
|
206
|
+
| "改 /asset 接口影响谁" | `cap.mcp.call("get_impact", {"endpoint": "/asset"})` |
|
|
207
|
+
| "哪些功能没测试覆盖" | `cap.mcp.call("coverage_matrix", {})` |
|
|
208
|
+
| "资产管理功能完整吗" | `cap.mcp.call("feature_overview", {"feature": "资产管理"})` |
|
|
209
|
+
| "资产盘点业务流程" | `cap.mcp.call("get_workflow", {"module": "assets"})` |
|
|
210
|
+
| "nickName 字段在哪用" | `wlkj.py search --field nickName` |
|
|
211
|
+
| "列表页有哪些例子(Web)" | `wlkj.py search --style table --platform web` |
|
|
212
|
+
| "写 PRD 前一次取全" | `cap.mcp.call("context_pack", {"keyword": "车辆", "role": "pm"})` |
|
|
@@ -11,7 +11,7 @@ trigger: "user invokes /wl-* command explicitly"
|
|
|
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
|
|
14
|
+
> `repo_root.py` 从 `~/.qoderwork/mcp.json` 反推仓库根;失败回退 `.`(IDE/CLI 工作目录即仓库根)。找不到时先跑 `python "$R/.qoder/scripts/orchestration/wlkj.py" install-qw`。
|
|
15
15
|
|
|
16
16
|
# wl-spec — 生成开发 Spec(/wl-spec 命令入口)
|
|
17
17
|
|
|
@@ -22,11 +22,13 @@ R=$(python ~/.qoderwork/repo_root.py 2>/dev/null) || R=.
|
|
|
22
22
|
|
|
23
23
|
## ⚙️ 自取上下文(Quest / QoderWork 无 hook 注入,必须自读)
|
|
24
24
|
|
|
25
|
-
-
|
|
26
|
-
|
|
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 存哪个 task 目录)。读法 `python "$R/.qoder/scripts/foundation/core/paths.py" current-task`(输出任务路径;空=无活动任务)。
|
|
27
29
|
- 扫描 PRD 来源:`data/docs/prd/`(已发布)+
|
|
28
30
|
`workspace/members/{dev}/drafts/REQ-*.md`(草稿),找出还没 Spec 的 PRD
|
|
29
|
-
- 字段命名约定:`python "$R/.qoder/scripts/
|
|
31
|
+
- 字段命名约定:`python "$R/.qoder/scripts/orchestration/wlkj.py" search --field <字段名>`
|
|
30
32
|
- 团队 Java 约定(MyBatis Plus + RESTful + BigDecimal 金额)见
|
|
31
33
|
`.qoder/skills/spec-generator/SKILL.md` 的 Step 3
|
|
32
34
|
|
|
@@ -39,7 +41,7 @@ R=$(python ~/.qoderwork/repo_root.py 2>/dev/null) || R=.
|
|
|
39
41
|
5. 通知开发评审
|
|
40
42
|
6. 发布后自动同步:
|
|
41
43
|
```bash
|
|
42
|
-
|
|
44
|
+
cap.mcp.call("sync", {"direction": "push"})
|
|
43
45
|
```
|
|
44
46
|
|
|
45
47
|
## Review 模式
|