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