@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,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: wl-report
|
|
3
|
-
description: "生成日报/周报,严格按当前开发者隔离。Generate daily/weekly work report, isolated by current developer.
|
|
4
|
-
trigger: "
|
|
3
|
+
description: "生成日报/周报,严格按当前开发者隔离。Generate daily/weekly work report, isolated by current developer. "
|
|
4
|
+
trigger: "user invokes /wl-* command explicitly"
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
|
|
@@ -11,7 +11,7 @@ trigger: "用户说'日报''周报''我干了啥''今天做了什么''本周工
|
|
|
11
11
|
```bash
|
|
12
12
|
R=$(python ~/.qoderwork/repo_root.py 2>/dev/null) || R=.
|
|
13
13
|
```
|
|
14
|
-
> `repo_root.py` 从 `~/.qoderwork/mcp.json` 反推仓库根;失败回退 `.`(IDE/CLI 工作目录即仓库根)。找不到时先跑 `python
|
|
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/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 更可靠无依赖。
|
|
@@ -1,115 +1,180 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: wl-search
|
|
3
|
-
description: "查代码/业务/API/字段/PRD + 知识图谱(影响分析/覆盖矩阵/功能画像/业务流程/多跳遍历)
|
|
4
|
-
trigger: "
|
|
3
|
+
description: "查代码/业务/API/字段/PRD + 知识图谱(影响分析/覆盖矩阵/功能画像/业务流程/多跳遍历)的唯一入口。"
|
|
4
|
+
trigger: "user invokes /wl-* command explicitly"
|
|
5
5
|
---
|
|
6
6
|
|
|
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/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/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.py" context <业务词> --platform <web|app> --role
|
|
|
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"})` |
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: wl-spec
|
|
3
|
-
description: "从已确认 PRD 生成开发 Spec 文档(/wl-spec 命令入口)。Generate or review technical Spec from PRD + Design.
|
|
4
|
-
trigger: "
|
|
3
|
+
description: "从已确认 PRD 生成开发 Spec 文档(/wl-spec 命令入口)。Generate or review technical Spec from PRD + Design. "
|
|
4
|
+
trigger: "user invokes /wl-* command explicitly"
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
|
|
@@ -11,7 +11,7 @@ trigger: "PRD 确认/发布后;用户说'生成Spec''写技术规格''/wl-spec
|
|
|
11
11
|
```bash
|
|
12
12
|
R=$(python ~/.qoderwork/repo_root.py 2>/dev/null) || R=.
|
|
13
13
|
```
|
|
14
|
-
> `repo_root.py` 从 `~/.qoderwork/mcp.json` 反推仓库根;失败回退 `.`(IDE/CLI 工作目录即仓库根)。找不到时先跑 `python
|
|
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 模式
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: wl-status
|
|
3
|
-
description: "项目状态/路线图/健康度。Project status: current sprint / roadmap / health score.
|
|
4
|
-
trigger: "
|
|
3
|
+
description: "项目状态/路线图/健康度。Project status: current sprint / roadmap / health score. "
|
|
4
|
+
trigger: "user invokes /wl-* command explicitly"
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
|
|
@@ -11,7 +11,7 @@ trigger: "用户说'项目怎么样''进度''健康度''路线图''整体情况'
|
|
|
11
11
|
```bash
|
|
12
12
|
R=$(python ~/.qoderwork/repo_root.py 2>/dev/null) || R=.
|
|
13
13
|
```
|
|
14
|
-
> `repo_root.py` 从 `~/.qoderwork/mcp.json` 反推仓库根;失败回退 `.`(IDE/CLI 工作目录即仓库根)。找不到时先跑 `python
|
|
14
|
+
> `repo_root.py` 从 `~/.qoderwork/mcp.json` 反推仓库根;失败回退 `.`(IDE/CLI 工作目录即仓库根)。找不到时先跑 `python "$R/.qoder/scripts/orchestration/wlkj.py" install-qw`。
|
|
15
15
|
|
|
16
16
|
# wl-status — 项目状态总览
|
|
17
17
|
|
|
@@ -19,17 +19,33 @@ R=$(python ~/.qoderwork/repo_root.py 2>/dev/null) || R=.
|
|
|
19
19
|
|
|
20
20
|
## ⚙️ 自取上下文(Quest / QoderWork 无 hook 注入,必须自读)
|
|
21
21
|
|
|
22
|
-
|
|
23
|
-
- `data/index/.index-meta.json` — 图谱新鲜度(健康度计算用)
|
|
24
|
-
- `.qoder/learning/eval-history.jsonl` — EVA 评估历史(健康度趋势用,可能不存在)
|
|
25
|
-
- `workspace/tasks/*/task.json` — 全部任务(current 维度用)
|
|
26
|
-
|
|
27
|
-
## 维度 1:current(当前迭代)
|
|
22
|
+
### ⚡ Fast Path:一次拿全(必须先跑,禁止逐个 cat/ls)
|
|
28
23
|
|
|
29
24
|
```bash
|
|
30
|
-
python
|
|
25
|
+
R=$(python ~/.qoderwork/repo_root.py 2>/dev/null) || R=.
|
|
26
|
+
python "$R/.qoder/scripts/orchestration/wlkj.py" status-snapshot "$R"
|
|
31
27
|
```
|
|
32
|
-
|
|
28
|
+
|
|
29
|
+
这一个命令**一次返回全部所需数据**(JSON):开发者、图谱新鲜度、EVA 历史、
|
|
30
|
+
任务列表、团队同步、配置、成员、学习记录。**拿到后直接算健康度,不要再 cat/ls 探查。**
|
|
31
|
+
|
|
32
|
+
> 性能:旧方式 5 轮迭代 + 10 次调用;聚合后 1 轮 + 1 次调用。
|
|
33
|
+
> 缺失字段为 null = 该数据源不存在(如 eval_history 没跑过 EVA),正常处理即可。
|
|
34
|
+
|
|
35
|
+
### 字段说明(聚合脚本返回的 JSON)
|
|
36
|
+
|
|
37
|
+
- `developer` — 当前开发者(.developer 内容)
|
|
38
|
+
- `index_meta` + `index_age_days` — 图谱元数据 + 距今天数(健康度·索引新鲜度)
|
|
39
|
+
- `eval_history` — EVA 最近 10 次评估(健康度·EVA 合格率;null=未跑过)
|
|
40
|
+
- `feedback_count` — 学习反馈条数(健康度·学习成长;null=无)
|
|
41
|
+
- `task_list` — 全部任务(current 维度)
|
|
42
|
+
- `team_sync` — ahead/behind/未同步数(健康度·团队同步)
|
|
43
|
+
- `tasks_dir` / `patterns` / `members` — 目录清单(null=不存在)
|
|
44
|
+
- `config_summary` — 项目配置摘要
|
|
45
|
+
|
|
46
|
+
## 维度 1:current(当前迭代)
|
|
47
|
+
|
|
48
|
+
直接用聚合脚本返回的 `task_list` 字段(**不要再调 task.py**):
|
|
33
49
|
- 当前活动任务(标 `*` 的那条)
|
|
34
50
|
- 进行中任务清单 + 各自进度
|
|
35
51
|
- 最近 5 个动作(建任务/finish/PRD 发布等,从 task.json 的 status 历史推)
|
|
@@ -52,21 +68,21 @@ python "$R/.qoder/scripts/task.py" list
|
|
|
52
68
|
| 索引新鲜度 | 20% | .index-meta.json 的 last_sync 距今天数 |
|
|
53
69
|
| 按时交付 | 20% | 近期 task finish 是否在计划期内 |
|
|
54
70
|
| 团队同步 | 15% | `team_sync.py status` 的 ahead/behind |
|
|
55
|
-
|
|
|
56
|
-
|
|
|
71
|
+
| **工作流采纳** | **10%** | **usability_score.py 的采纳分(U2/U3/U4/U6 达标率)** |
|
|
72
|
+
| 流水线流转 | 5% | task 在各阶段的停留时长 |
|
|
73
|
+
| 学习成长 | 5% | learning 记录条数 |
|
|
57
74
|
|
|
58
75
|
判定:≥4 健康 / 3–4 有风险 / <3 需关注。
|
|
76
|
+
> 7 维权重合计 = 1.00。**工作流采纳**是吸收宿主能力后新增的维度,回答"工作流用不用得起来"。
|
|
59
77
|
|
|
60
|
-
##
|
|
78
|
+
## 团队同步健康(用聚合数据)
|
|
61
79
|
|
|
62
|
-
|
|
63
|
-
python "$R/.qoder/scripts/team_sync.py" status
|
|
64
|
-
```
|
|
80
|
+
直接用聚合脚本返回的 `team_sync` 字段(**不要再调 team_sync.py**):
|
|
65
81
|
看 ahead/behind 是否对齐,未同步产出有几个。
|
|
66
82
|
|
|
67
83
|
## 🧩 QoderWork 增强:日历校准健康度(可选 · 无连接器则自动回退)
|
|
68
84
|
|
|
69
|
-
>
|
|
85
|
+
> 通过 capability 层自动路由(Settings → Connectors,授权 Microsoft 365 / macOS 日历,邮件可选)。
|
|
70
86
|
> **纯 Qoder IDE / CLI 没有连接器 → 本段不生效,健康度照常按上表纯本地数据计算,不受影响。**
|
|
71
87
|
> 探测方式:仅当运行环境提供了「日历」工具可直接读取时才用。
|
|
72
88
|
|
|
@@ -81,3 +97,19 @@ python "$R/.qoder/scripts/team_sync.py" status
|
|
|
81
97
|
|
|
82
98
|
一段总览 + 三个分维度小节。健康度分数醒目显示。发现问题(如索引过期、
|
|
83
99
|
未同步堆积、EVA 合格率低)在结尾列"建议动作"清单。
|
|
100
|
+
|
|
101
|
+
## 📊 可用性看板(吸收宿主动态 UI 能力 · 双轨)
|
|
102
|
+
|
|
103
|
+
健康度展示后,**追加一个可用性看板**(让"工作流用没用起来"可视化):
|
|
104
|
+
|
|
105
|
+
```bash
|
|
106
|
+
python "$R/.qoder/scripts/orchestration/wlkj.py" usability --html
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
- **QoderWork**:脚本自动调 `qoder_show_widget` 把交互看板(仪表盘 + 绿黄红指标条)**嵌入对话流**。
|
|
110
|
+
- **纯 IDE / CLI**:自动降级——看板落盘到 `workspace/members/{dev}/journal/dashboard-*.html`,
|
|
111
|
+
你把路径告诉用户让他点开看;同时口述核心数字(采纳分 + 红灯项)。
|
|
112
|
+
- 看板数据源:eval-history + feedback + learning.yaml(同 `usability` 命令)。
|
|
113
|
+
|
|
114
|
+
> 这是吸收宿主 Skills 动态 UI 能力的落点:富宿主嵌入对话,纯 CLI 落盘兜底,能力层自动切。
|
|
115
|
+
|