@hupan56/wlkj 3.1.19 → 3.1.21
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/package.json +1 -1
- package/templates/qoder/commands/optional/wl-insight.md +5 -4
- package/templates/qoder/commands/optional/wl-report.md +4 -3
- package/templates/qoder/commands/optional/wl-status.md +3 -2
- package/templates/qoder/commands/wl-code.md +3 -2
- package/templates/qoder/commands/wl-design.md +3 -2
- package/templates/qoder/commands/wl-init.md +4 -3
- package/templates/qoder/commands/wl-prd.md +4 -3
- package/templates/qoder/commands/wl-req.md +48 -47
- package/templates/qoder/commands/wl-search.md +3 -2
- package/templates/qoder/commands/wl-task.md +23 -22
- package/templates/qoder/commands/wl-test.md +8 -7
- package/templates/qoder/skills/design-import/SKILL.md +9 -8
- package/templates/qoder/skills/design-review/SKILL.md +7 -6
- package/templates/qoder/skills/prd-generator/SKILL.md +14 -13
- package/templates/qoder/skills/prd-review/SKILL.md +7 -6
- package/templates/qoder/skills/prototype-generator/SKILL.md +11 -10
- package/templates/qoder/skills/spec-coder/SKILL.md +6 -5
- package/templates/qoder/skills/spec-generator/SKILL.md +7 -6
- package/templates/qoder/skills/test-generator/SKILL.md +8 -7
- package/templates/qoder/skills/wl-code/SKILL.md +7 -6
- package/templates/qoder/skills/wl-commit/SKILL.md +7 -6
- package/templates/qoder/skills/wl-design/SKILL.md +6 -5
- package/templates/qoder/skills/wl-init/SKILL.md +7 -6
- package/templates/qoder/skills/wl-insight/SKILL.md +7 -6
- package/templates/qoder/skills/wl-prd-full/SKILL.md +7 -6
- package/templates/qoder/skills/wl-prd-quick/SKILL.md +4 -3
- package/templates/qoder/skills/wl-prd-review/SKILL.md +5 -4
- package/templates/qoder/skills/wl-report/SKILL.md +8 -7
- package/templates/qoder/skills/wl-spec/SKILL.md +7 -6
- package/templates/qoder/skills/wl-status/SKILL.md +6 -5
- package/templates/qoder/skills/wl-task/SKILL.md +7 -6
- package/templates/qoder/skills/wl-test/SKILL.md +25 -24
|
@@ -9,9 +9,10 @@ trigger: "user invokes /wl-* command explicitly"
|
|
|
9
9
|
|
|
10
10
|
**后续脚本里的 `$R` 代表仓库根**,先确定它(QoderWork 桌面端工作目录不是仓库根,相对路径会失效):
|
|
11
11
|
```bash
|
|
12
|
-
R=$(
|
|
12
|
+
R=$($PY ~/.qoderwork/repo_root.py 2>/dev/null) || R=.
|
|
13
|
+
PY=$(python --version >/dev/null 2>&1 && echo python || echo python3)
|
|
13
14
|
```
|
|
14
|
-
> `repo_root.py` 从 `~/.qoderwork/mcp.json` 反推仓库根;失败回退 `.`(IDE/CLI 工作目录即仓库根)。找不到时先跑
|
|
15
|
+
> `repo_root.py` 从 `~/.qoderwork/mcp.json` 反推仓库根;失败回退 `.`(IDE/CLI 工作目录即仓库根)。找不到时先跑 `$PY "$R/.qoder/scripts/orchestration/wlkj.py" install-qw`。
|
|
15
16
|
|
|
16
17
|
# PRD Generator Skill
|
|
17
18
|
|
|
@@ -39,20 +40,20 @@ R=$(python ~/.qoderwork/repo_root.py 2>/dev/null) || R=.
|
|
|
39
40
|
|
|
40
41
|
## 自取上下文(Quest / QoderWork 无 hook,必须自读)
|
|
41
42
|
|
|
42
|
-
- **当前身份**:当前开发者名。读法:先 `R=$(
|
|
43
|
-
再
|
|
43
|
+
- **当前身份**:当前开发者名。读法:先 `R=$($PY ~/.qoderwork/repo_root.py 2>/dev/null) || R=.` 定位仓库根,
|
|
44
|
+
再 `$PY "$R/.qoder/scripts/foundation/core/paths.py" whoami`(输出开发者名;空=未初始化)。
|
|
44
45
|
⚠️ 勿用裸相对路径 `.qoder/.developer`(QoderWork 桌面端 cwd 不在仓库根,会读不到而误报未初始化)。
|
|
45
|
-
- **活动任务**:当前活动任务。读法
|
|
46
|
+
- **活动任务**:当前活动任务。读法 `$PY "$R/.qoder/scripts/foundation/core/paths.py" current-task`(输出任务路径;空=无活动任务)。
|
|
46
47
|
- `data/index/.index-meta.json` — 知识图谱新鲜度
|
|
47
48
|
|
|
48
49
|
### 写 PRD 前:一次取全(prefetch 预测 + 批量预取)
|
|
49
50
|
|
|
50
51
|
**写 PRD 第一件事:调 1 次 `prefetch`**(它会预测业务词 + 批量取多词上下文,合并去重):
|
|
51
52
|
```bash
|
|
52
|
-
ROLE=$(
|
|
53
|
-
|
|
53
|
+
ROLE=$($PY "$R/.qoder/scripts/orchestration/wlkj.py" role 2>/dev/null || echo pm)
|
|
54
|
+
$PY "$R/.qoder/scripts/orchestration/wlkj.py" kg prefetch "<需求描述>" --platform <p>
|
|
54
55
|
```
|
|
55
|
-
|
|
56
|
+
或直接:`$PY "$R/.qoder/scripts/orchestration/wlkj.py" prefetch "<需求描述>" --platform <p>`
|
|
56
57
|
|
|
57
58
|
prefetch 一次返回 8 段(含历史PRD/数据库表/真实字段/API/Wiki),等于把多个业务词的查询合并。**prefetch 之后严禁再串行 search/find/grep**(这是轮次爆炸的根因——查一个词不命中就换词再查 6+ 次)。
|
|
58
59
|
|
|
@@ -142,10 +143,10 @@ prefetch 一次返回 8 段(含历史PRD/数据库表/真实字段/API/Wiki)
|
|
|
142
143
|
```bash
|
|
143
144
|
# 门 1+2: 角色边界(当前角色能否产 prd?) + 契约校验(@contract 头是否合规?)
|
|
144
145
|
# 软提示不阻塞, 越权/无契约头会提示但仍可发布
|
|
145
|
-
|
|
146
|
+
$PY "$R/.qoder/scripts/foundation/identity/check_publish.py" prd <draft-prd.md>
|
|
146
147
|
|
|
147
148
|
# 门 3: 质量分 (eval_prd 内部也会跑契约校验, 这里是质量评分)
|
|
148
|
-
|
|
149
|
+
$PY "$R/.qoder/scripts/orchestration/wlkj.py" eval <draft-prd.md> <prototype.html>
|
|
149
150
|
```
|
|
150
151
|
- check_publish 越权提示 → 软提示(如 dev 产 prd 会提示"建议产品经理"),不阻塞
|
|
151
152
|
- eval_prd < 80% 不准发布,按报告修到 PASS
|
|
@@ -187,7 +188,7 @@ context_pack 字段段返回"无直接相关字段"时,**字段锁不报错,
|
|
|
187
188
|
## 取上下文 — 一次取全(不要逐个搜)
|
|
188
189
|
|
|
189
190
|
```bash
|
|
190
|
-
|
|
191
|
+
$PY "$R/.qoder/scripts/orchestration/wlkj.py" context <关键词> --platform <web|app>
|
|
191
192
|
```
|
|
192
193
|
返回 7 章节(代码+页面+字段+PRD+API+样式+Wiki)。**只读最相关 1-2 个 Vue 文件**。
|
|
193
194
|
|
|
@@ -210,7 +211,7 @@ python "$R/.qoder/scripts/orchestration/wlkj.py" context <关键词> --platform
|
|
|
210
211
|
## 原型规则
|
|
211
212
|
|
|
212
213
|
- 从模板开始(`.qoder/templates/prototype-{web|app}.html`),模板已有正确颜色与 mixed-nav 多级菜单骨架
|
|
213
|
-
- 先跑
|
|
214
|
+
- 先跑 `$PY "$R/.qoder/scripts/orchestration/wlkj.py" fill-prototype <关键词> --platform <web|app>` 拿 80% 草稿;
|
|
214
215
|
它会按目标项目的 `layout_fingerprint` 自动填示例菜单骨架和真实字段,你只微调 20%
|
|
215
216
|
- 颜色/布局指纹见 fill_prototype 输出的"设计 Token"段(布局模式/主色/侧边栏宽度)
|
|
216
217
|
- **菜单层级**: 若需求描述了侧边栏/菜单结构(如"一级→二级,右侧三四级"),
|
|
@@ -225,7 +226,7 @@ python "$R/.qoder/scripts/orchestration/wlkj.py" context <关键词> --platform
|
|
|
225
226
|
PRD 写入 drafts 后,**顺手归档一份**到当前成员的按时间文件夹,方便人翻查"我那天做了啥":
|
|
226
227
|
|
|
227
228
|
```bash
|
|
228
|
-
|
|
229
|
+
$PY "$R/.qoder/scripts/orchestration/wlkj.py" archive-prd <刚生成的PRD文件路径>
|
|
229
230
|
```
|
|
230
231
|
|
|
231
232
|
> 归档产物:`workspace/members/{你的名字}/archive/{YYYY-MM-DD}/REQ-{编号}-{中文标题}.md`
|
|
@@ -9,16 +9,17 @@ trigger: "user invokes /wl-* command explicitly"
|
|
|
9
9
|
|
|
10
10
|
**后续脚本里的 `$R` 代表仓库根**,先确定它(QoderWork 桌面端工作目录不是仓库根,相对路径会失效):
|
|
11
11
|
```bash
|
|
12
|
-
R=$(
|
|
12
|
+
R=$($PY ~/.qoderwork/repo_root.py 2>/dev/null) || R=.
|
|
13
|
+
PY=$(python --version >/dev/null 2>&1 && echo python || echo python3)
|
|
13
14
|
```
|
|
14
|
-
> `repo_root.py` 从 `~/.qoderwork/mcp.json` 反推仓库根;失败回退 `.`(IDE/CLI 工作目录即仓库根)。找不到时先跑
|
|
15
|
+
> `repo_root.py` 从 `~/.qoderwork/mcp.json` 反推仓库根;失败回退 `.`(IDE/CLI 工作目录即仓库根)。找不到时先跑 `$PY "$R/.qoder/scripts/orchestration/wlkj.py" install-qw`。
|
|
15
16
|
|
|
16
17
|
# PRD Review Skill
|
|
17
18
|
|
|
18
19
|
## ⚙️ 自取上下文(Quest / QoderWork 无 hook 注入,必须自读)
|
|
19
20
|
|
|
20
|
-
- **当前身份**:当前评审人。读法:先 `R=$(
|
|
21
|
-
再
|
|
21
|
+
- **当前身份**:当前评审人。读法:先 `R=$($PY ~/.qoderwork/repo_root.py 2>/dev/null) || R=.` 定位仓库根,
|
|
22
|
+
再 `$PY "$R/.qoder/scripts/foundation/core/paths.py" whoami`(输出开发者名;空=未初始化)。
|
|
22
23
|
⚠️ 勿用裸相对路径 `.qoder/.developer`(QoderWork 桌面端 cwd 不在仓库根,会读不到而误报未初始化)。
|
|
23
24
|
- `data/index/.index-meta.json` — 图谱新鲜度(影响"现实锚定"能否校验)
|
|
24
25
|
- 评审的 PRD 文件路径由用户指定;若用户没给路径,扫 `data/docs/prd/` 和
|
|
@@ -42,7 +43,7 @@ R=$(python ~/.qoderwork/repo_root.py 2>/dev/null) || R=.
|
|
|
42
43
|
|
|
43
44
|
跑一次 EVA 门禁给出客观分数:
|
|
44
45
|
```bash
|
|
45
|
-
|
|
46
|
+
$PY "$R/.qoder/scripts/orchestration/wlkj.py" eval <PRD路径> [原型HTML路径]
|
|
46
47
|
```
|
|
47
48
|
分数 ≥80% 才能发布。低于 80% 把 EVA 报告的问题合并进上面的清单。
|
|
48
49
|
|
|
@@ -50,6 +51,6 @@ python "$R/.qoder/scripts/orchestration/wlkj.py" eval <PRD路径> [原型HTML路
|
|
|
50
51
|
|
|
51
52
|
评审出结论(无论 PASS/打回)后埋点,供 /wl-status 统计评审活跃度:
|
|
52
53
|
```bash
|
|
53
|
-
|
|
54
|
+
$PY "$R/.qoder/scripts/orchestration/wlkj.py" learn record review_done "{\"prd\": \"<PRD文件名>\", \"verdict\": \"<PASS|打回>\", \"score\": <EVA分数或空>}"
|
|
54
55
|
```
|
|
55
56
|
> 失败静默忽略。
|
|
@@ -9,9 +9,10 @@ trigger: "user invokes /wl-* command explicitly"
|
|
|
9
9
|
|
|
10
10
|
**后续脚本里的 `$R` 代表仓库根**,先确定它(QoderWork 桌面端工作目录不是仓库根,相对路径会失效):
|
|
11
11
|
```bash
|
|
12
|
-
R=$(
|
|
12
|
+
R=$($PY ~/.qoderwork/repo_root.py 2>/dev/null) || R=.
|
|
13
|
+
PY=$(python --version >/dev/null 2>&1 && echo python || echo python3)
|
|
13
14
|
```
|
|
14
|
-
> `repo_root.py` 从 `~/.qoderwork/mcp.json` 反推仓库根;失败回退 `.`(IDE/CLI 工作目录即仓库根)。找不到时先跑
|
|
15
|
+
> `repo_root.py` 从 `~/.qoderwork/mcp.json` 反推仓库根;失败回退 `.`(IDE/CLI 工作目录即仓库根)。找不到时先跑 `$PY "$R/.qoder/scripts/orchestration/wlkj.py" install-qw`。
|
|
15
16
|
|
|
16
17
|
# Prototype Generator
|
|
17
18
|
|
|
@@ -22,12 +23,12 @@ Generate production-ready HTML prototypes that match the project's actual UI sty
|
|
|
22
23
|
本 skill 用到的知识图谱 MCP 工具(`MCP 工具 (` / `MCP 工具 (`)**自动路由(有 MCP 走 MCP,无 MCP 走 CLI)**。
|
|
23
24
|
|
|
24
25
|
- **QoderWork**:直接调 MCP 工具(更快更准)。
|
|
25
|
-
- **Qoder IDE/Quest/CLI(无 MCP)**:用
|
|
26
|
+
- **Qoder IDE/Quest/CLI(无 MCP)**:用 `$PY "$R/.qoder/scripts/orchestration/wlkj.py" search` 降级(`--style` / `--field <名>` / `--vben` / `--components`);仅 MCP 有的能力(如 fill_prototype/context_pack)跳过或人工补。
|
|
26
27
|
|
|
27
28
|
## ⚙️ 自取上下文(Quest / QoderWork 无 hook 注入,必须自读)
|
|
28
29
|
|
|
29
|
-
- **当前身份**:决定产出存到 `workspace/members/{dev}/drafts/`。读法:先 `R=$(
|
|
30
|
-
再
|
|
30
|
+
- **当前身份**:决定产出存到 `workspace/members/{dev}/drafts/`。读法:先 `R=$($PY ~/.qoderwork/repo_root.py 2>/dev/null) || R=.` 定位仓库根,
|
|
31
|
+
再 `$PY "$R/.qoder/scripts/foundation/core/paths.py" whoami`(输出开发者名;空=未初始化)。
|
|
31
32
|
⚠️ 勿用裸相对路径 `.qoder/.developer`(QoderWork 桌面端 cwd 不在仓库根,会读不到而误报未初始化)。
|
|
32
33
|
- 若 `.qoder/.current-task` 存在,原型命名带上任务关键词
|
|
33
34
|
- 平台(Web/APP/Both)必须明确;如未指定,先问用户(见 prd-generator Step 0)
|
|
@@ -94,7 +95,7 @@ cap.mcp.call("get_design_system", {"platform": "web"})
|
|
|
94
95
|
```
|
|
95
96
|
|
|
96
97
|
**FALLBACK: Read file directly:**
|
|
97
|
-
Read `data/design/DESIGN.md`. If missing, run
|
|
98
|
+
Read `data/design/DESIGN.md`. If missing, run `$PY "$R/.qoder/scripts/orchestration/wlkj.py" design-doc`.
|
|
98
99
|
|
|
99
100
|
Returns: layout fingerprint (sidebar 160px, mixed-nav), token set (primary HSL),
|
|
100
101
|
page type patterns, form behavior modes, icon rules, component stats.
|
|
@@ -119,7 +120,7 @@ cap.mcp.call("fill_prototype", {"keyword": "营业外合同", "platform": "web"}
|
|
|
119
120
|
|
|
120
121
|
**FALLBACK: Run script:**
|
|
121
122
|
```bash
|
|
122
|
-
|
|
123
|
+
$PY "$R/.qoder/scripts/orchestration/wlkj.py" fill-prototype <关键词> --platform <web|app>
|
|
123
124
|
```
|
|
124
125
|
|
|
125
126
|
Returns: 80% complete HTML draft (real columns/fields/layout injected) + data manifest.
|
|
@@ -173,9 +174,9 @@ cap.mcp.call("search_wiki", {"keyword": "资产"})
|
|
|
173
174
|
|
|
174
175
|
**FALLBACK: Python scripts:**
|
|
175
176
|
```bash
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
177
|
+
$PY "$R/.qoder/scripts/orchestration/wlkj.py" search --style <table|form|detail|modal|dashboard> --platform <web|app>
|
|
178
|
+
$PY "$R/.qoder/scripts/orchestration/wlkj.py" search <keyword> --platform <web|app>
|
|
179
|
+
$PY "$R/.qoder/scripts/orchestration/wlkj.py" search --field <field_name>
|
|
179
180
|
```
|
|
180
181
|
|
|
181
182
|
Then read the TOP 2-3 most similar existing Vue files to extract:
|
|
@@ -9,9 +9,10 @@ trigger: "user invokes /wl-* command explicitly"
|
|
|
9
9
|
|
|
10
10
|
**后续脚本里的 `$R` 代表仓库根**,先确定它(QoderWork 桌面端工作目录不是仓库根,相对路径会失效):
|
|
11
11
|
```bash
|
|
12
|
-
R=$(
|
|
12
|
+
R=$($PY ~/.qoderwork/repo_root.py 2>/dev/null) || R=.
|
|
13
|
+
PY=$(python --version >/dev/null 2>&1 && echo python || echo python3)
|
|
13
14
|
```
|
|
14
|
-
> `repo_root.py` 从 `~/.qoderwork/mcp.json` 反推仓库根;失败回退 `.`(IDE/CLI 工作目录即仓库根)。找不到时先跑
|
|
15
|
+
> `repo_root.py` 从 `~/.qoderwork/mcp.json` 反推仓库根;失败回退 `.`(IDE/CLI 工作目录即仓库根)。找不到时先跑 `$PY "$R/.qoder/scripts/orchestration/wlkj.py" install-qw`。
|
|
15
16
|
|
|
16
17
|
# Spec Coder
|
|
17
18
|
|
|
@@ -25,10 +26,10 @@ R=$(python ~/.qoderwork/repo_root.py 2>/dev/null) || R=.
|
|
|
25
26
|
|
|
26
27
|
## ⚙️ 自取上下文(Quest / QoderWork 无 hook 注入,必须自读)
|
|
27
28
|
|
|
28
|
-
- **当前身份**:当前开发者。读法:先 `R=$(
|
|
29
|
-
再
|
|
29
|
+
- **当前身份**:当前开发者。读法:先 `R=$($PY ~/.qoderwork/repo_root.py 2>/dev/null) || R=.` 定位仓库根,
|
|
30
|
+
再 `$PY "$R/.qoder/scripts/foundation/core/paths.py" whoami`(输出开发者名;空=未初始化)。
|
|
30
31
|
⚠️ 勿用裸相对路径 `.qoder/.developer`(QoderWork 桌面端 cwd 不在仓库根,会读不到而误报未初始化)。
|
|
31
|
-
- **活动任务**:当前任务(含任务相关的 Spec 路径)。读法
|
|
32
|
+
- **活动任务**:当前任务(含任务相关的 Spec 路径)。读法 `$PY "$R/.qoder/scripts/foundation/core/paths.py" current-task`(输出任务路径;空=无活动任务)。
|
|
32
33
|
- Spec 文件位置:`workspace/specs/REQ-{ID}-*.spec.md` 或 `workspace/tasks/{task-id}/spec.md`
|
|
33
34
|
- 目标代码库:`data/code/`(fywl-ics 后端 / fywl-ui 前端 / Carmg-H5 移动端)
|
|
34
35
|
|
|
@@ -9,9 +9,10 @@ trigger: "user invokes /wl-* command explicitly"
|
|
|
9
9
|
|
|
10
10
|
**后续脚本里的 `$R` 代表仓库根**,先确定它(QoderWork 桌面端工作目录不是仓库根,相对路径会失效):
|
|
11
11
|
```bash
|
|
12
|
-
R=$(
|
|
12
|
+
R=$($PY ~/.qoderwork/repo_root.py 2>/dev/null) || R=.
|
|
13
|
+
PY=$(python --version >/dev/null 2>&1 && echo python || echo python3)
|
|
13
14
|
```
|
|
14
|
-
> `repo_root.py` 从 `~/.qoderwork/mcp.json` 反推仓库根;失败回退 `.`(IDE/CLI 工作目录即仓库根)。找不到时先跑
|
|
15
|
+
> `repo_root.py` 从 `~/.qoderwork/mcp.json` 反推仓库根;失败回退 `.`(IDE/CLI 工作目录即仓库根)。找不到时先跑 `$PY "$R/.qoder/scripts/orchestration/wlkj.py" install-qw`。
|
|
15
16
|
|
|
16
17
|
# Spec Generator
|
|
17
18
|
|
|
@@ -23,13 +24,13 @@ R=$(python ~/.qoderwork/repo_root.py 2>/dev/null) || R=.
|
|
|
23
24
|
|
|
24
25
|
## ⚙️ 自取上下文(Quest / QoderWork 无 hook 注入,必须自读)
|
|
25
26
|
|
|
26
|
-
- **当前身份**:当前开发者。读法:先 `R=$(
|
|
27
|
-
再
|
|
27
|
+
- **当前身份**:当前开发者。读法:先 `R=$($PY ~/.qoderwork/repo_root.py 2>/dev/null) || R=.` 定位仓库根,
|
|
28
|
+
再 `$PY "$R/.qoder/scripts/foundation/core/paths.py" whoami`(输出开发者名;空=未初始化)。
|
|
28
29
|
⚠️ 勿用裸相对路径 `.qoder/.developer`(QoderWork 桌面端 cwd 不在仓库根,会读不到而误报未初始化)。
|
|
29
|
-
- **活动任务**:当前任务(决定 spec 存到哪个 task 目录)。读法
|
|
30
|
+
- **活动任务**:当前任务(决定 spec 存到哪个 task 目录)。读法 `$PY "$R/.qoder/scripts/foundation/core/paths.py" current-task`(输出任务路径;空=无活动任务)。
|
|
30
31
|
- 扫描 PRD 来源目录:`data/docs/prd/`(已发布)+ `workspace/members/{dev}/drafts/REQ-*.md`(草稿)
|
|
31
32
|
找出还没有对应 Spec 的 PRD
|
|
32
|
-
-
|
|
33
|
+
- 风格/字段参考:`$PY "$R/.qoder/scripts/orchestration/wlkj.py" search --field <字段名>` 查现有字段命名约定
|
|
33
34
|
- 团队 Java 约定(MyBatis Plus + RESTful + BigDecimal 金额)写在本 skill 的 Step 3
|
|
34
35
|
|
|
35
36
|
## Step 1: 定位 PRD
|
|
@@ -9,9 +9,10 @@ trigger: "user invokes /wl-* command explicitly"
|
|
|
9
9
|
|
|
10
10
|
**后续脚本里的 `$R` 代表仓库根**,先确定它(QoderWork 桌面端工作目录不是仓库根,相对路径会失效):
|
|
11
11
|
```bash
|
|
12
|
-
R=$(
|
|
12
|
+
R=$($PY ~/.qoderwork/repo_root.py 2>/dev/null) || R=.
|
|
13
|
+
PY=$(python --version >/dev/null 2>&1 && echo python || echo python3)
|
|
13
14
|
```
|
|
14
|
-
> `repo_root.py` 从 `~/.qoderwork/mcp.json` 反推仓库根;失败回退 `.`(IDE/CLI 工作目录即仓库根)。找不到时先跑
|
|
15
|
+
> `repo_root.py` 从 `~/.qoderwork/mcp.json` 反推仓库根;失败回退 `.`(IDE/CLI 工作目录即仓库根)。找不到时先跑 `$PY "$R/.qoder/scripts/orchestration/wlkj.py" install-qw`。
|
|
15
16
|
|
|
16
17
|
# Test Generator
|
|
17
18
|
|
|
@@ -25,14 +26,14 @@ R=$(python ~/.qoderwork/repo_root.py 2>/dev/null) || R=.
|
|
|
25
26
|
|
|
26
27
|
## ⚙️ 自取上下文(Quest / QoderWork 无 hook 注入,必须自读)
|
|
27
28
|
|
|
28
|
-
- **当前身份**:当前开发者。读法:先 `R=$(
|
|
29
|
-
再
|
|
29
|
+
- **当前身份**:当前开发者。读法:先 `R=$($PY ~/.qoderwork/repo_root.py 2>/dev/null) || R=.` 定位仓库根,
|
|
30
|
+
再 `$PY "$R/.qoder/scripts/foundation/core/paths.py" whoami`(输出开发者名;空=未初始化)。
|
|
30
31
|
⚠️ 勿用裸相对路径 `.qoder/.developer`(QoderWork 桌面端 cwd 不在仓库根,会读不到而误报未初始化)。
|
|
31
|
-
- **活动任务**:当前任务。读法
|
|
32
|
+
- **活动任务**:当前任务。读法 `$PY "$R/.qoder/scripts/foundation/core/paths.py" current-task`(输出任务路径;空=无活动任务)。
|
|
32
33
|
- Spec 文件:`workspace/specs/REQ-{ID}-*.spec.md` 或 `workspace/tasks/{task-id}/spec.md`
|
|
33
34
|
- 已实现代码:用 search_index.py 定位
|
|
34
35
|
```bash
|
|
35
|
-
|
|
36
|
+
$PY "$R/.qoder/scripts/orchestration/wlkj.py" search <类名或模块关键词>
|
|
36
37
|
```
|
|
37
38
|
|
|
38
39
|
## Step 1: 定位待测代码
|
|
@@ -50,7 +51,7 @@ ls data/code/ # 已实现代码库
|
|
|
50
51
|
2. **Spec 文件**(推荐):测试用例映射来源
|
|
51
52
|
3. **现有测试代码**(推荐):用 search_index.py 找同类 Test 类,照着写
|
|
52
53
|
```bash
|
|
53
|
-
|
|
54
|
+
$PY "$R/.qoder/scripts/orchestration/wlkj.py" search Test
|
|
54
55
|
```
|
|
55
56
|
|
|
56
57
|
## Step 3: 生成测试
|
|
@@ -9,9 +9,10 @@ trigger: "user invokes /wl-* command explicitly"
|
|
|
9
9
|
|
|
10
10
|
**后续脚本里的 `$R` 代表仓库根**,先确定它(QoderWork 桌面端工作目录不是仓库根,相对路径会失效):
|
|
11
11
|
```bash
|
|
12
|
-
R=$(
|
|
12
|
+
R=$($PY ~/.qoderwork/repo_root.py 2>/dev/null) || R=.
|
|
13
|
+
PY=$(python --version >/dev/null 2>&1 && echo python || echo python3)
|
|
13
14
|
```
|
|
14
|
-
> `repo_root.py` 从 `~/.qoderwork/mcp.json` 反推仓库根;失败回退 `.`(IDE/CLI 工作目录即仓库根)。找不到时先跑
|
|
15
|
+
> `repo_root.py` 从 `~/.qoderwork/mcp.json` 反推仓库根;失败回退 `.`(IDE/CLI 工作目录即仓库根)。找不到时先跑 `$PY "$R/.qoder/scripts/orchestration/wlkj.py" install-qw`。
|
|
15
16
|
|
|
16
17
|
# wl-code — 按 Spec 实现代码(/wl-code 命令入口)
|
|
17
18
|
|
|
@@ -22,10 +23,10 @@ R=$(python ~/.qoderwork/repo_root.py 2>/dev/null) || R=.
|
|
|
22
23
|
|
|
23
24
|
## ⚙️ 自取上下文(Quest / QoderWork 无 hook 注入,必须自读)
|
|
24
25
|
|
|
25
|
-
- **当前身份**:当前开发者。读法:先 `R=$(
|
|
26
|
-
再
|
|
26
|
+
- **当前身份**:当前开发者。读法:先 `R=$($PY ~/.qoderwork/repo_root.py 2>/dev/null) || R=.` 定位仓库根,
|
|
27
|
+
再 `$PY "$R/.qoder/scripts/foundation/core/paths.py" whoami`(输出开发者名;空=未初始化)。
|
|
27
28
|
⚠️ 勿用裸相对路径 `.qoder/.developer`(QoderWork 桌面端 cwd 不在仓库根,会读不到而误报未初始化)。
|
|
28
|
-
- **活动任务**:当前活动任务(找对应的 spec)。读法
|
|
29
|
+
- **活动任务**:当前活动任务(找对应的 spec)。读法 `$PY "$R/.qoder/scripts/foundation/core/paths.py" current-task`(输出任务路径;空=无活动任务)。
|
|
29
30
|
- 活动任务的 spec:`workspace/specs/` 或 `workspace/tasks/{id}/spec.md`
|
|
30
31
|
|
|
31
32
|
### ⚡ 取全一次到位(spec 里的模块名 → 1 次 context_pack 拿全)
|
|
@@ -41,7 +42,7 @@ cap.mcp.call("context_pack", {"keyword": "..."}) <模块关键词> --platform <w
|
|
|
41
42
|
### 改表/改 Entity 前必查(用知识图谱 MCP,防改崩)
|
|
42
43
|
|
|
43
44
|
> ⚠️ 本段依赖知识图谱 MCP(`cap.mcp.call("search_code", ...)` / `cap.mcp.call("query_schema", ...)`),自动路由。
|
|
44
|
-
> Qoder IDE/Quest/CLI 无 MCP 时:table_impact 无脚本等价,需人工评估改动波及面;真实字段可用
|
|
45
|
+
> Qoder IDE/Quest/CLI 无 MCP 时:table_impact 无脚本等价,需人工评估改动波及面;真实字段可用 `$PY "$R/.qoder/scripts/orchestration/wlkj.py" search --field <表名>` 查代码侧字段(不含 DB 真实列类型)。
|
|
45
46
|
|
|
46
47
|
1. **改表影响分析**:涉及改数据库表/Entity 时,先 `cap.mcp.call("table_impact", {"table": "表名"})`
|
|
47
48
|
- 查这张表关联哪些 Entity + 影响哪些 Controller/接口。
|
|
@@ -9,9 +9,10 @@ trigger: "user invokes /wl-* command explicitly"
|
|
|
9
9
|
|
|
10
10
|
**后续脚本里的 `$R` 代表仓库根**,先确定它(QoderWork 桌面端工作目录不是仓库根,相对路径会失效):
|
|
11
11
|
```bash
|
|
12
|
-
R=$(
|
|
12
|
+
R=$($PY ~/.qoderwork/repo_root.py 2>/dev/null) || R=.
|
|
13
|
+
PY=$(python --version >/dev/null 2>&1 && echo python || echo python3)
|
|
13
14
|
```
|
|
14
|
-
> `repo_root.py` 从 `~/.qoderwork/mcp.json` 反推仓库根;失败回退 `.`(IDE/CLI 工作目录即仓库根)。找不到时先跑
|
|
15
|
+
> `repo_root.py` 从 `~/.qoderwork/mcp.json` 反推仓库根;失败回退 `.`(IDE/CLI 工作目录即仓库根)。找不到时先跑 `$PY "$R/.qoder/scripts/orchestration/wlkj.py" install-qw`。
|
|
15
16
|
|
|
16
17
|
# wl-commit — 代码提交 + 质量门禁 + 同步
|
|
17
18
|
|
|
@@ -21,11 +22,11 @@ R=$(python ~/.qoderwork/repo_root.py 2>/dev/null) || R=.
|
|
|
21
22
|
|
|
22
23
|
## ⚙️ 自取上下文(Quest / QoderWork 无 hook 注入,必须自读)
|
|
23
24
|
|
|
24
|
-
- **当前身份**:当前开发者(提交作者)。读法:先 `R=$(
|
|
25
|
-
再
|
|
25
|
+
- **当前身份**:当前开发者(提交作者)。读法:先 `R=$($PY ~/.qoderwork/repo_root.py 2>/dev/null) || R=.` 定位仓库根,
|
|
26
|
+
再 `$PY "$R/.qoder/scripts/foundation/core/paths.py" whoami`(输出开发者名;空=未初始化)。
|
|
26
27
|
⚠️ 勿用裸相对路径 `.qoder/.developer`(QoderWork 桌面端 cwd 不在仓库根,会读不到而误报未初始化)。
|
|
27
28
|
- 当前工作目录的 `git status` 和 `git diff --stat` 看改了什么
|
|
28
|
-
- **活动任务**:若有活动任务,提交信息关联任务 ID。读法
|
|
29
|
+
- **活动任务**:若有活动任务,提交信息关联任务 ID。读法 `$PY "$R/.qoder/scripts/foundation/core/paths.py" current-task`(输出任务路径;空=无活动任务)。
|
|
29
30
|
|
|
30
31
|
## 执行流程
|
|
31
32
|
|
|
@@ -83,7 +84,7 @@ git push
|
|
|
83
84
|
|
|
84
85
|
提交成功后埋点(写当前开发者的 journal,供 /wl-status 健康度统计):
|
|
85
86
|
```bash
|
|
86
|
-
|
|
87
|
+
$PY "$R/.qoder/scripts/orchestration/wlkj.py" learn record commit_done "{\"files\": <改动文件数>, \"task\": \"<关联任务ID或空>\"}"
|
|
87
88
|
```
|
|
88
89
|
> 失败静默忽略,绝不阻塞提交流程。
|
|
89
90
|
|
|
@@ -9,9 +9,10 @@ trigger: "user invokes /wl-* command explicitly"
|
|
|
9
9
|
|
|
10
10
|
**后续脚本里的 `$R` 代表仓库根**,先确定它(QoderWork 桌面端工作目录不是仓库根,相对路径会失效):
|
|
11
11
|
```bash
|
|
12
|
-
R=$(
|
|
12
|
+
R=$($PY ~/.qoderwork/repo_root.py 2>/dev/null) || R=.
|
|
13
|
+
PY=$(python --version >/dev/null 2>&1 && echo python || echo python3)
|
|
13
14
|
```
|
|
14
|
-
> `repo_root.py` 从 `~/.qoderwork/mcp.json` 反推仓库根;失败回退 `.`(IDE/CLI 工作目录即仓库根)。找不到时先跑
|
|
15
|
+
> `repo_root.py` 从 `~/.qoderwork/mcp.json` 反推仓库根;失败回退 `.`(IDE/CLI 工作目录即仓库根)。找不到时先跑 `$PY "$R/.qoder/scripts/orchestration/wlkj.py" install-qw`。
|
|
15
16
|
|
|
16
17
|
# wl-design — 设计工序入口(/wl-design 命令入口)
|
|
17
18
|
|
|
@@ -36,10 +37,10 @@ R=$(python ~/.qoderwork/repo_root.py 2>/dev/null) || R=.
|
|
|
36
37
|
|
|
37
38
|
## ⚙️ 自取上下文(Quest / QoderWork 无 hook 注入,必须自读)
|
|
38
39
|
|
|
39
|
-
- **当前身份**:当前设计师名(产出归属)。读法:先 `R=$(
|
|
40
|
-
再
|
|
40
|
+
- **当前身份**:当前设计师名(产出归属)。读法:先 `R=$($PY ~/.qoderwork/repo_root.py 2>/dev/null) || R=.` 定位仓库根,
|
|
41
|
+
再 `$PY "$R/.qoder/scripts/foundation/core/paths.py" whoami`(输出开发者名;空=未初始化)。
|
|
41
42
|
⚠️ 勿用裸相对路径 `.qoder/.developer`(QoderWork 桌面端 cwd 不在仓库根,会读不到而误报未初始化)。
|
|
42
|
-
- **活动任务**:若存在,spec/原型命名带上任务关键词。读法
|
|
43
|
+
- **活动任务**:若存在,spec/原型命名带上任务关键词。读法 `$PY "$R/.qoder/scripts/foundation/core/paths.py" current-task`(输出任务路径;空=无活动任务)。
|
|
43
44
|
- 平台必须明确(Web/APP/Both);如未指定,先问
|
|
44
45
|
- 风格真源:`data/style/*-design-spec.json`(优先)→ `data/code/` 源码 → `data/index/vben-style-reference.json`(Web)/ Vant(APP)
|
|
45
46
|
|
|
@@ -9,9 +9,10 @@ trigger: "user invokes /wl-* command explicitly"
|
|
|
9
9
|
|
|
10
10
|
**后续脚本里的 `$R` 代表仓库根**,先确定它(QoderWork 桌面端工作目录不是仓库根,相对路径会失效):
|
|
11
11
|
```bash
|
|
12
|
-
R=$(
|
|
12
|
+
R=$($PY ~/.qoderwork/repo_root.py 2>/dev/null) || R=.
|
|
13
|
+
PY=$(python --version >/dev/null 2>&1 && echo python || echo python3)
|
|
13
14
|
```
|
|
14
|
-
> `repo_root.py` 从 `~/.qoderwork/mcp.json` 反推仓库根;失败回退 `.`(IDE/CLI 工作目录即仓库根)。找不到时先跑
|
|
15
|
+
> `repo_root.py` 从 `~/.qoderwork/mcp.json` 反推仓库根;失败回退 `.`(IDE/CLI 工作目录即仓库根)。找不到时先跑 `$PY "$R/.qoder/scripts/orchestration/wlkj.py" install-qw`。
|
|
15
16
|
|
|
16
17
|
# wl-init — 开发者身份 + 环境体检
|
|
17
18
|
|
|
@@ -28,14 +29,14 @@ R=$(python ~/.qoderwork/repo_root.py 2>/dev/null) || R=.
|
|
|
28
29
|
|
|
29
30
|
### 无参数(仅体检)
|
|
30
31
|
```bash
|
|
31
|
-
|
|
32
|
+
$PY "$R/.qoder/scripts/orchestration/wlkj.py" doctor
|
|
32
33
|
```
|
|
33
34
|
输出 8 段体检报告,每行 `[OK]/[WARN]/[FIX]/[MISS]` 标注。
|
|
34
35
|
|
|
35
36
|
### 带名字(注册 + 自愈)
|
|
36
37
|
```bash
|
|
37
|
-
|
|
38
|
-
#
|
|
38
|
+
$PY "$R/.qoder/scripts/orchestration/wlkj.py" doctor --fix <名字> [角色]
|
|
39
|
+
# 例:$PY "$R/.qoder/scripts/orchestration/wlkj.py" doctor --fix 小王 pm
|
|
39
40
|
```
|
|
40
41
|
做 3 件事:
|
|
41
42
|
1. 写 `.qoder/.developer`(key=value 格式)
|
|
@@ -44,7 +45,7 @@ python "$R/.qoder/scripts/orchestration/wlkj.py" doctor --fix <名字> [角色]
|
|
|
44
45
|
|
|
45
46
|
### 仅自愈(不换人)
|
|
46
47
|
```bash
|
|
47
|
-
|
|
48
|
+
$PY "$R/.qoder/scripts/orchestration/wlkj.py" doctor --fix
|
|
48
49
|
```
|
|
49
50
|
|
|
50
51
|
## 体检覆盖的 8 段
|
|
@@ -9,9 +9,10 @@ trigger: "user invokes /wl-* command explicitly"
|
|
|
9
9
|
|
|
10
10
|
**后续脚本里的 `$R` 代表仓库根**,先确定它(QoderWork 桌面端工作目录不是仓库根,相对路径会失效):
|
|
11
11
|
```bash
|
|
12
|
-
R=$(
|
|
12
|
+
R=$($PY ~/.qoderwork/repo_root.py 2>/dev/null) || R=.
|
|
13
|
+
PY=$(python --version >/dev/null 2>&1 && echo python || echo python3)
|
|
13
14
|
```
|
|
14
|
-
> `repo_root.py` 从 `~/.qoderwork/mcp.json` 反推仓库根;失败回退 `.`(IDE/CLI 工作目录即仓库根)。找不到时先跑
|
|
15
|
+
> `repo_root.py` 从 `~/.qoderwork/mcp.json` 反推仓库根;失败回退 `.`(IDE/CLI 工作目录即仓库根)。找不到时先跑 `$PY "$R/.qoder/scripts/orchestration/wlkj.py" install-qw`。
|
|
15
16
|
|
|
16
17
|
# wl-insight — 需求探索(7 站之前的「探索站」· 产品工位)
|
|
17
18
|
|
|
@@ -54,12 +55,12 @@ insight(探索/调研/规划)→ [用户确认转PRD] → prd(落地)→
|
|
|
54
55
|
|
|
55
56
|
## ⚙️ 自取上下文(Quest / QoderWork 无 hook 注入,必须自读)
|
|
56
57
|
|
|
57
|
-
- **当前身份**:当前探索者(报告归属)。读法:先 `R=$(
|
|
58
|
-
再
|
|
58
|
+
- **当前身份**:当前探索者(报告归属)。读法:先 `R=$($PY ~/.qoderwork/repo_root.py 2>/dev/null) || R=.` 定位仓库根,
|
|
59
|
+
再 `$PY "$R/.qoder/scripts/foundation/core/paths.py" whoami`(输出开发者名;空=未初始化)。
|
|
59
60
|
⚠️ 勿用裸相对路径 `.qoder/.developer`(QoderWork 桌面端 cwd 不在仓库根,会读不到而误报未初始化)。
|
|
60
61
|
- **现状锚点(必跑,只跑这一次)**:用 prefetch 一次取全,不要串行换词搜:
|
|
61
62
|
```bash
|
|
62
|
-
|
|
63
|
+
$PY "$R/.qoder/scripts/orchestration/wlkj.py" kg prefetch "<需求描述原句>"
|
|
63
64
|
```
|
|
64
65
|
> **不传 `--platform` = 默认双平台一次返回**(platform: all)。探索阶段需求常未定平台,
|
|
65
66
|
> 直接默认双平台拿全,**绝不 web 跑一次、app 再跑一次**(这是 insight 慢的 #2 元凶)。
|
|
@@ -76,7 +77,7 @@ insight(探索/调研/规划)→ [用户确认转PRD] → prd(落地)→
|
|
|
76
77
|
|
|
77
78
|
## 🔒 三道前置检查(任何动作前先做)
|
|
78
79
|
|
|
79
|
-
1. **身份检查**:跑
|
|
80
|
+
1. **身份检查**:跑 `$PY "$R/.qoder/scripts/foundation/core/paths.py" whoami`,无输出/退出码1 = 未初始化 → 停下,提示先 `/wl-init`
|
|
80
81
|
2. **现状锚点**:任何探索前先跑 **1 次** `kg.py prefetch "<需求句>"`(见上方自取上下文段)。**不锚定现状的探索 = 凭空臆想,禁止。禁止串行换词搜。**
|
|
81
82
|
3. **报告归属**:报告必须写到 `workspace/members/{dev}/drafts/`,用 `.developer` 归属。
|
|
82
83
|
|
|
@@ -9,9 +9,10 @@ trigger: "user invokes /wl-* command explicitly"
|
|
|
9
9
|
|
|
10
10
|
**后续脚本里的 `$R` 代表仓库根**,先确定它(QoderWork 桌面端工作目录不是仓库根,相对路径会失效):
|
|
11
11
|
```bash
|
|
12
|
-
R=$(
|
|
12
|
+
R=$($PY ~/.qoderwork/repo_root.py 2>/dev/null) || R=.
|
|
13
|
+
PY=$(python --version >/dev/null 2>&1 && echo python || echo python3)
|
|
13
14
|
```
|
|
14
|
-
> `repo_root.py` 从 `~/.qoderwork/mcp.json` 反推仓库根;失败回退 `.`(IDE/CLI 工作目录即仓库根)。找不到时先跑
|
|
15
|
+
> `repo_root.py` 从 `~/.qoderwork/mcp.json` 反推仓库根;失败回退 `.`(IDE/CLI 工作目录即仓库根)。找不到时先跑 `$PY "$R/.qoder/scripts/orchestration/wlkj.py" install-qw`。
|
|
15
16
|
|
|
16
17
|
# wl-prd-full — 完整档 PRD + 原型(/wl-prd-full 命令入口)
|
|
17
18
|
|
|
@@ -89,10 +90,10 @@ Read 指定 insight 报告 → 把现状锚定 + 选中的机会/Gap 作为 PRD
|
|
|
89
90
|
|
|
90
91
|
## 完整流程(详细见 command 文件)
|
|
91
92
|
|
|
92
|
-
1.
|
|
93
|
+
1. **并行取全上下文**:先读当前角色(`$PY "$R/.qoder/scripts/orchestration/wlkj.py" role` 输出 pm/design/dev/test/admin 之一),用 prefetch 一次取全(完整档需求含多业务实体,prefetch 多词预测比单词 context 更准):
|
|
93
94
|
```bash
|
|
94
|
-
ROLE=$(
|
|
95
|
-
|
|
95
|
+
ROLE=$($PY "$R/.qoder/scripts/orchestration/wlkj.py" role 2>/dev/null || echo pm)
|
|
96
|
+
$PY "$R/.qoder/scripts/orchestration/wlkj.py" kg prefetch "<需求描述原句>" --platform <p>
|
|
96
97
|
```
|
|
97
98
|
> prefetch 把需求句拆成多个业务词批量搜、一次合并(例"考勤导入校验"→考勤/导入两词全搜)。
|
|
98
99
|
> 拿到后**按 $ROLE 视角看重点**:dev 看代码段、design 看页面+风格段、pm 看字段+历史PRD段。prefetch 之后不要再串行 search。
|
|
@@ -103,7 +104,7 @@ Read 指定 insight 报告 → 把现状锚定 + 选中的机会/Gap 作为 PRD
|
|
|
103
104
|
- **原型按 Step 0.5 决策**:用户选"画"→ 走 prototype-generator(必须先 fill_prototype);
|
|
104
105
|
用户选"不画"→ 跳过,PRD 第 11 章写 `无` + contract 头标 `prototype: none`
|
|
105
106
|
- 3 道质量锁:背景锁/字段锁/闭环锁 → eval_prd(**不要加 `2>/dev/null`,stderr 阻断原因要看**)→ 不过自动修
|
|
106
|
-
- eval
|
|
107
|
+
- eval 命令:`$PY "$R/.qoder/scripts/orchestration/wlkj.py" eval <prd.md> [原型.html]`
|
|
107
108
|
(wlkj.py eval 内部映射 validation/metrics/eval_prd.py,路径不会漂移)
|
|
108
109
|
4. **发布 + 归档 + 同步**(3 合 1):collect_prds → team_sync push → archive_prd
|
|
109
110
|
|
|
@@ -9,9 +9,10 @@ trigger: "user invokes /wl-* command explicitly"
|
|
|
9
9
|
|
|
10
10
|
**后续脚本里的 `$R` 代表仓库根**,先确定它(QoderWork 桌面端工作目录不是仓库根,相对路径会失效):
|
|
11
11
|
```bash
|
|
12
|
-
R=$(
|
|
12
|
+
R=$($PY ~/.qoderwork/repo_root.py 2>/dev/null) || R=.
|
|
13
|
+
PY=$(python --version >/dev/null 2>&1 && echo python || echo python3)
|
|
13
14
|
```
|
|
14
|
-
> `repo_root.py` 从 `~/.qoderwork/mcp.json` 反推仓库根;失败回退 `.`(IDE/CLI 工作目录即仓库根)。找不到时先跑
|
|
15
|
+
> `repo_root.py` 从 `~/.qoderwork/mcp.json` 反推仓库根;失败回退 `.`(IDE/CLI 工作目录即仓库根)。找不到时先跑 `$PY "$R/.qoder/scripts/orchestration/wlkj.py" install-qw`。
|
|
15
16
|
|
|
16
17
|
# wl-prd-quick — 小改动极速出 Mini-PRD(/wl-prd-quick 命令入口)
|
|
17
18
|
|
|
@@ -40,7 +41,7 @@ R=$(python ~/.qoderwork/repo_root.py 2>/dev/null) || R=.
|
|
|
40
41
|
|
|
41
42
|
1. **先 prefetch(预测 + 批量预取,禁止串行 search)**:
|
|
42
43
|
```bash
|
|
43
|
-
|
|
44
|
+
$PY "$R/.qoder/scripts/orchestration/wlkj.py" prefetch "<需求描述>" --platform <p>
|
|
44
45
|
```
|
|
45
46
|
prefetch 一次返回代码/字段/API/Wiki/历史PRD 的合并结果。**之后不要再用 search/find/grep 逐个查词**——那会变成 6+ 次串行往返,是轮次爆炸的根因。prefetch 不够时才补调一次。
|
|
46
47
|
2. 一次 Write:Mini-PRD(prd-quick-template.md,6 章)+ 微型原型(只画 diff)
|
|
@@ -9,9 +9,10 @@ trigger: "user invokes /wl-* command explicitly"
|
|
|
9
9
|
|
|
10
10
|
**后续脚本里的 `$R` 代表仓库根**,先确定它(QoderWork 桌面端工作目录不是仓库根,相对路径会失效):
|
|
11
11
|
```bash
|
|
12
|
-
R=$(
|
|
12
|
+
R=$($PY ~/.qoderwork/repo_root.py 2>/dev/null) || R=.
|
|
13
|
+
PY=$(python --version >/dev/null 2>&1 && echo python || echo python3)
|
|
13
14
|
```
|
|
14
|
-
> `repo_root.py` 从 `~/.qoderwork/mcp.json` 反推仓库根;失败回退 `.`(IDE/CLI 工作目录即仓库根)。找不到时先跑
|
|
15
|
+
> `repo_root.py` 从 `~/.qoderwork/mcp.json` 反推仓库根;失败回退 `.`(IDE/CLI 工作目录即仓库根)。找不到时先跑 `$PY "$R/.qoder/scripts/orchestration/wlkj.py" install-qw`。
|
|
15
16
|
|
|
16
17
|
# wl-prd-review — 评审 PRD 质量(/wl-prd-review 命令入口)
|
|
17
18
|
|
|
@@ -24,7 +25,7 @@ R=$(python ~/.qoderwork/repo_root.py 2>/dev/null) || R=.
|
|
|
24
25
|
|
|
25
26
|
拿到一份 PRD,检查它够不够格发布/交付下游:
|
|
26
27
|
1. **7 项 checklist**:用户故事清晰 / 验收可测 / 优先级已标 / 模块已识别 / 非功能已列 / 边界已考虑 / 依赖已识别
|
|
27
|
-
2. **EVA
|
|
28
|
+
2. **EVA 客观评分**:`$PY "$R/.qoder/scripts/orchestration/wlkj.py" eval <PRD> [原型]`,≥80% 才 PASS
|
|
28
29
|
3. **合并报告**:PASS → 可发布;不 PASS → 修复清单
|
|
29
30
|
|
|
30
31
|
## 定位要评审的 PRD
|
|
@@ -39,7 +40,7 @@ R=$(python ~/.qoderwork/repo_root.py 2>/dev/null) || R=.
|
|
|
39
40
|
这是「可用性指标 F2 转化漏斗」评审级数据的唯一来源,不埋则该级永远为 0:
|
|
40
41
|
|
|
41
42
|
```bash
|
|
42
|
-
|
|
43
|
+
$PY "$R/.qoder/scripts/orchestration/wlkj.py" learn record review_done "{\"prd\": \"<被评审PRD文件名>\", \"verdict\": \"PASS\"}"
|
|
43
44
|
```
|
|
44
45
|
- `verdict`:评审结论,`PASS` 或 `FAIL`
|
|
45
46
|
- 埋点失败不阻塞评审(包在 try 里无所谓),但能埋一定要埋。
|
|
@@ -9,9 +9,10 @@ trigger: "user invokes /wl-* command explicitly"
|
|
|
9
9
|
|
|
10
10
|
**后续脚本里的 `$R` 代表仓库根**,先确定它(QoderWork 桌面端工作目录不是仓库根,相对路径会失效):
|
|
11
11
|
```bash
|
|
12
|
-
R=$(
|
|
12
|
+
R=$($PY ~/.qoderwork/repo_root.py 2>/dev/null) || R=.
|
|
13
|
+
PY=$(python --version >/dev/null 2>&1 && echo python || echo python3)
|
|
13
14
|
```
|
|
14
|
-
> `repo_root.py` 从 `~/.qoderwork/mcp.json` 反推仓库根;失败回退 `.`(IDE/CLI 工作目录即仓库根)。找不到时先跑
|
|
15
|
+
> `repo_root.py` 从 `~/.qoderwork/mcp.json` 反推仓库根;失败回退 `.`(IDE/CLI 工作目录即仓库根)。找不到时先跑 `$PY "$R/.qoder/scripts/orchestration/wlkj.py" install-qw`。
|
|
15
16
|
|
|
16
17
|
# wl-report — 日报 / 周报(按开发者隔离)
|
|
17
18
|
|
|
@@ -22,9 +23,9 @@ R=$(python ~/.qoderwork/repo_root.py 2>/dev/null) || R=.
|
|
|
22
23
|
### ⚡ Fast Path:一次拿全(必须先跑,禁止逐个 cat/ls/git log)
|
|
23
24
|
|
|
24
25
|
```bash
|
|
25
|
-
R=$(
|
|
26
|
-
|
|
27
|
-
|
|
26
|
+
R=$($PY ~/.qoderwork/repo_root.py 2>/dev/null) || R=.
|
|
27
|
+
$PY "$R/.qoder/scripts/orchestration/wlkj.py" report-snapshot "$R" # 日报
|
|
28
|
+
$PY "$R/.qoder/scripts/orchestration/wlkj.py" report-snapshot "$R" --days 7 # 周报
|
|
28
29
|
```
|
|
29
30
|
|
|
30
31
|
这一个命令**一次返回全部所需数据**(JSON,全部已按当前开发者过滤):
|
|
@@ -120,8 +121,8 @@ cap.mcp.call("sync", {"direction": "push"})
|
|
|
120
121
|
### 方式 B: webhook(任何环境,脚本化)
|
|
121
122
|
如果没有连接器,用引擎自带的 webhook 推送:
|
|
122
123
|
```bash
|
|
123
|
-
|
|
124
|
-
|
|
124
|
+
$PY "$R/.qoder/scripts/orchestration/wlkj.py" report daily --push-feishu
|
|
125
|
+
$PY "$R/.qoder/scripts/orchestration/wlkj.py" report weekly --push-feishu
|
|
125
126
|
```
|
|
126
127
|
这会通过 config.yaml 里配的飞书 bot webhook 发卡片通知。
|
|
127
128
|
两种方式不冲突,连接器更富交互,webhook 更可靠无依赖。
|