@hupan56/wlkj 2.6.0 → 2.7.0
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 +261 -11
- package/package.json +1 -1
- package/templates/qoder/agents/insight-planning.md +67 -0
- package/templates/qoder/agents/insight-research.md +61 -0
- package/templates/qoder/agents/prd-reference.md +8 -2
- package/templates/qoder/commands/optional/wl-insight.md +275 -0
- package/templates/qoder/commands/{wl-report.md → optional/wl-report.md} +13 -5
- package/templates/qoder/commands/{wl-spec.md → optional/wl-spec.md} +1 -1
- package/templates/qoder/commands/{wl-status.md → optional/wl-status.md} +28 -2
- package/templates/qoder/commands/wl-code.md +10 -2
- package/templates/qoder/commands/wl-commit.md +1 -1
- package/templates/qoder/commands/wl-design-draw.md +78 -0
- package/templates/qoder/commands/wl-design-scan.md +108 -0
- package/templates/qoder/commands/wl-design-spec.md +154 -0
- package/templates/qoder/commands/wl-design.md +32 -0
- package/templates/qoder/commands/wl-init.md +24 -3
- package/templates/qoder/commands/wl-prd-full.md +226 -0
- package/templates/qoder/commands/wl-prd-quick.md +134 -0
- package/templates/qoder/commands/wl-prd-review.md +104 -0
- package/templates/qoder/commands/wl-prd.md +17 -311
- package/templates/qoder/commands/wl-search.md +66 -30
- package/templates/qoder/commands/wl-task.md +290 -59
- package/templates/qoder/commands/wl-test.md +92 -24
- package/templates/qoder/config.yaml +51 -15
- package/templates/qoder/hooks/inject-workflow-state.py +2 -2
- package/templates/qoder/hooks/session-start.py +82 -51
- package/templates/qoder/rules/wl-pipeline.md +216 -105
- package/templates/qoder/scripts/__pycache__/search_index.cpython-39.pyc +0 -0
- package/templates/qoder/scripts/archive_prd.py +377 -0
- package/templates/qoder/scripts/autotest.py +1715 -0
- package/templates/qoder/scripts/autotest_batch.py +224 -0
- package/templates/qoder/scripts/autotest_run.py +297 -0
- package/templates/qoder/scripts/benchmark.py +210 -209
- package/templates/qoder/scripts/build_style_index.py +444 -4
- package/templates/qoder/scripts/check_carriers.py +238 -0
- package/templates/qoder/scripts/check_mcp.py +298 -0
- package/templates/qoder/scripts/check_qoderwork_consistency.py +166 -0
- package/templates/qoder/scripts/common/events.py +46 -0
- package/templates/qoder/scripts/common/extract.py +419 -0
- package/templates/qoder/scripts/common/graph_traverse.py +533 -0
- package/templates/qoder/scripts/common/paths.py +89 -0
- package/templates/qoder/scripts/common/pip_install.py +144 -0
- package/templates/qoder/scripts/common/platform_guard.py +61 -0
- package/templates/qoder/scripts/common/search_engine.py +205 -205
- package/templates/qoder/scripts/common/terms.py +57 -0
- package/templates/qoder/scripts/common/ts_extract.py +536 -0
- package/templates/qoder/scripts/context_pack.py +73 -13
- package/templates/qoder/scripts/enrich_prompt.py +226 -0
- package/templates/qoder/scripts/eval_prd.py +318 -231
- package/templates/qoder/scripts/export.py +487 -487
- package/templates/qoder/scripts/extract_api_params.py +246 -0
- package/templates/qoder/scripts/extract_routes.py +54 -0
- package/templates/qoder/scripts/extract_routes_tree.py +78 -0
- package/templates/qoder/scripts/fill_prototype.py +707 -0
- package/templates/qoder/scripts/gen_design_doc.py +394 -0
- package/templates/qoder/scripts/git_sync.py +27 -15
- package/templates/qoder/scripts/init_doctor.py +292 -40
- package/templates/qoder/scripts/install_qoderwork.py +366 -9
- package/templates/qoder/scripts/kg.py +708 -0
- package/templates/qoder/scripts/kg_auto_login.py +196 -0
- package/templates/qoder/scripts/kg_build.py +612 -0
- package/templates/qoder/scripts/kg_build_db.py +327 -0
- package/templates/qoder/scripts/kg_duckdb.py +549 -0
- package/templates/qoder/scripts/kg_incremental.py +393 -0
- package/templates/qoder/scripts/kg_link_db.py +224 -0
- package/templates/qoder/scripts/kg_mcp_server.py +801 -0
- package/templates/qoder/scripts/kg_semantic.py +150 -0
- package/templates/qoder/scripts/kg_test_runner.py +241 -0
- package/templates/qoder/scripts/lanhu_stdio_wrapper.py +119 -0
- package/templates/qoder/scripts/learn.py +118 -39
- package/templates/qoder/scripts/learn_aggregate.py +201 -0
- package/templates/qoder/scripts/mcp_launcher.py +359 -0
- package/templates/qoder/scripts/mysql_mcp_server.py +396 -0
- package/templates/qoder/scripts/repo_root.py +106 -0
- package/templates/qoder/scripts/role.py +12 -0
- package/templates/qoder/scripts/run_weekly_update.bat +5 -0
- package/templates/qoder/scripts/run_weekly_update.sh +5 -0
- package/templates/qoder/scripts/search_index.py +307 -60
- package/templates/qoder/scripts/secure-ls.js +5640 -0
- package/templates/qoder/scripts/setup.py +706 -641
- package/templates/qoder/scripts/setup_lanhu.py +963 -0
- package/templates/qoder/scripts/status.py +250 -11
- package/templates/qoder/scripts/sync_carriers.py +259 -0
- package/templates/qoder/scripts/syncgate.py +2 -2
- package/templates/qoder/scripts/task.py +75 -0
- package/templates/qoder/scripts/team_sync.py +60 -4
- package/templates/qoder/scripts/workspace_init.py +1 -1
- package/templates/qoder/skills/design-import/SKILL.md +226 -0
- package/templates/qoder/skills/design-import/figma-workflow.md +81 -0
- package/templates/qoder/skills/design-review/SKILL.md +82 -25
- package/templates/qoder/skills/prd-generator/SKILL.md +184 -60
- package/templates/qoder/skills/prd-review/SKILL.md +18 -1
- package/templates/qoder/skills/prompt-enrich/SKILL.md +90 -0
- package/templates/qoder/skills/prototype-generator/SKILL.md +256 -141
- package/templates/qoder/skills/prototype-generator/SKILL.md.zcode-79180-2af4721f-f9a6-412c-88db-c0af680d211b.tmp +0 -0
- package/templates/qoder/skills/spec-coder/SKILL.md +18 -1
- package/templates/qoder/skills/spec-generator/SKILL.md +18 -1
- package/templates/qoder/skills/test-generator/SKILL.md +15 -2
- package/templates/qoder/skills/wl-code/SKILL.md +55 -36
- package/templates/qoder/skills/wl-commit/SKILL.md +89 -76
- package/templates/qoder/skills/wl-design/SKILL.md +55 -0
- package/templates/qoder/skills/wl-init/SKILL.md +76 -67
- package/templates/qoder/skills/wl-insight/SKILL.md +201 -81
- package/templates/qoder/skills/wl-prd-full/SKILL.md +69 -0
- package/templates/qoder/skills/wl-prd-quick/SKILL.md +49 -0
- package/templates/qoder/skills/wl-prd-review/SKILL.md +34 -0
- package/templates/qoder/skills/wl-report/SKILL.md +131 -107
- package/templates/qoder/skills/wl-search/SKILL.md +141 -75
- package/templates/qoder/skills/wl-spec/SKILL.md +49 -39
- package/templates/qoder/skills/wl-status/SKILL.md +83 -61
- package/templates/qoder/skills/wl-task/SKILL.md +132 -58
- package/templates/qoder/skills/wl-test/SKILL.md +406 -40
- package/templates/qoder/templates/prototype-app.html +13 -8
- package/templates/qoder/templates/prototype-web.html +376 -93
- package/templates/root/AGENTS.md +89 -34
- package/templates/root/requirements.txt +21 -0
- package/templates/root//344/275/277/347/224/250/350/257/264/346/230/216.md +259 -259
- package/templates/root//346/226/260/346/211/213/346/214/207/345/215/227.md +186 -186
- package/templates/qoder/agents/prd-planning.md +0 -57
- package/templates/qoder/agents/prd-research.md +0 -34
- package/templates/qoder/commands/wl-insight.md +0 -51
- package/templates/qoder/scripts/__pycache__/init_doctor.cpython-39.pyc +0 -0
- package/templates/qoder/scripts/__pycache__/setup.cpython-39.pyc +0 -0
- package/templates/qoder/scripts/common/__pycache__/developer.cpython-39.pyc +0 -0
- package/templates/qoder/skills/wl-prd/SKILL.md +0 -92
|
@@ -1,19 +1,41 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: prd-generator
|
|
3
3
|
description: "生成 PRD + 平台匹配的原型。Generate PRD with platform-aware prototype. 用户说'写个需求''生成PRD''做个原型''保单这块加个功能''写个产品需求文档'时触发。"
|
|
4
|
-
trigger: "user describes a requirement, asks for PRD, mockup, or invokes /wl-prd"
|
|
4
|
+
trigger: "user describes a requirement, asks for PRD, mockup, or invokes /wl-prd-full or /wl-prd-quick"
|
|
5
5
|
---
|
|
6
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 .qoder/scripts/install_qoderwork.py`。
|
|
15
|
+
|
|
7
16
|
# PRD Generator Skill
|
|
8
17
|
|
|
9
|
-
|
|
18
|
+
> 📌 **主入口:`/wl-prd-full`(正经需求)/ `/wl-prd-quick`(小改动)命令。** 本 skill 是它们的实现层 + Quest/QoderWork 自然语言路由。
|
|
19
|
+
> 两者功能等价,优先用 `/wl-prd-full` 或 `/wl-prd-quick`(参数提示更全、更稳定)。
|
|
20
|
+
> **模块契约**(输入/输出/校验):`.qoder/contracts/prd.md`
|
|
21
|
+
> **第一性原理:又快又准**(快=并行+砍模式,准=语义归档+质量锁)
|
|
22
|
+
> **定位:专注"已确定需求"的落地。** 探索/调研/规划/对标已移交 `/wl-insight`,
|
|
23
|
+
> 本 skill 不做 web 搜索、不派多 agent、不做 Gap 分析。基于 context_pack 现状做轻反思 + 跟用户确认。
|
|
24
|
+
|
|
25
|
+
## 🔒 语言锁(最高优先级)
|
|
26
|
+
|
|
27
|
+
**全部输出必须简体中文。** 含 PRD 标题、章节名、字段名、表格内容、原型文案、注释。
|
|
28
|
+
禁止任何英文句子(技术专有名词如 API/REQ-ID 可保留英文缩写)。
|
|
29
|
+
违反此锁 = 产出不合格,必须重写。
|
|
30
|
+
|
|
31
|
+
## 性能原则(最重要的规则 —— 治"太慢/轮次太多")
|
|
10
32
|
|
|
11
|
-
1.
|
|
12
|
-
2.
|
|
13
|
-
3.
|
|
14
|
-
4.
|
|
15
|
-
5.
|
|
16
|
-
6.
|
|
33
|
+
1. **轮次硬上限**:快档 ≤3 轮,完整档 ≤6 轮。超了就是流程跑偏
|
|
34
|
+
2. **一次取全**:context_pack 一次拿全上下文,不要逐个 search(5-6 次变 1 次)
|
|
35
|
+
3. **并行调用**:独立操作放**同一条消息**里并行(取上下文+读历史+读草稿一起发),不要串行
|
|
36
|
+
4. **批量生成**:PRD + 原型一次 Write 写完,不分两轮
|
|
37
|
+
5. **不重复读**:模板已有正确颜色(vben-style / Vant),不要单独读 style JSON
|
|
38
|
+
6. **少打断**:context_pack 已取全 → AI 自己判断,**不要动不动停下来逐条确认**
|
|
17
39
|
|
|
18
40
|
## 自取上下文(Quest / QoderWork 无 hook,必须自读)
|
|
19
41
|
|
|
@@ -21,6 +43,17 @@ trigger: "user describes a requirement, asks for PRD, mockup, or invokes /wl-prd
|
|
|
21
43
|
- `.qoder/.current-task` — 当前活动任务
|
|
22
44
|
- `data/index/.index-meta.json` — 知识图谱新鲜度
|
|
23
45
|
|
|
46
|
+
### 写 PRD 前:一次取全(context_pack 已含数据库表结构+历史PRD)
|
|
47
|
+
|
|
48
|
+
**只调 1 次** `context_pack`(第 1-8 段一次全返回),不要逐个调 MCP:
|
|
49
|
+
- 第 4 段 = 历史 PRD(防重复,替代 search_prd)
|
|
50
|
+
- 第 8 段 = 数据库表结构+真实字段(替代 query_schema)
|
|
51
|
+
- 第 5 段 = 相关 API(替代 feature_overview)
|
|
52
|
+
|
|
53
|
+
**仅当 context_pack 没覆盖到时才额外调**(极少):
|
|
54
|
+
- 字段枚举值:`mcp__qoder-mysql__query_distinct(table='表名', column='状态列')` — context_pack 给了表结构但没给枚举取值,需要时才调
|
|
55
|
+
- 改表影响:`mcp__qoder-knowledge-graph__table_impact(table='表名')` — 评估改动范围时才调
|
|
56
|
+
|
|
24
57
|
## STEP 0: 必须先问平台
|
|
25
58
|
|
|
26
59
|
```
|
|
@@ -32,71 +65,162 @@ trigger: "user describes a requirement, asks for PRD, mockup, or invokes /wl-prd
|
|
|
32
65
|
```
|
|
33
66
|
等用户回答。绝不自动判断。
|
|
34
67
|
|
|
35
|
-
|
|
36
|
-
|------|------|------|---------|
|
|
37
|
-
| 1 | Web | fywl-ui | prototype-web.html |
|
|
38
|
-
| 2 | APP | Carmg-H5 | prototype-app.html |
|
|
39
|
-
| 3 | Both | Both | 两个模板 |
|
|
68
|
+
## STEP 1: 归档(两档制 —— PM 只需判断"小改动还是正经需求")
|
|
40
69
|
|
|
41
|
-
|
|
70
|
+
**prd 只管"已确定需求"的落地。探索类请走 /wl-insight。**
|
|
71
|
+
|
|
72
|
+
### 归档三道保险
|
|
73
|
+
|
|
74
|
+
**① 显式关键词**
|
|
75
|
+
| 用户说 | 走哪档 |
|
|
76
|
+
|--------|--------|
|
|
77
|
+
| `快速`/`quick`/`加个字段`/`小改动` | 快档 |
|
|
78
|
+
| (默认/无关键词) | 完整档 |
|
|
79
|
+
| `深度`/`调研`/`对标`/`规划`/`路线图`/`探讨` | **不归 prd** → 提示走 `/wl-insight`(探索已外迁) |
|
|
80
|
+
|
|
81
|
+
**② AI 语义自动归档(默认)**
|
|
82
|
+
- "加/改/删一个具体小点" → **快档**
|
|
83
|
+
- "新做一个模块/能力/流程" → **完整档**
|
|
84
|
+
|
|
85
|
+
**③ 歧义必问(拿不准绝不猜)**
|
|
86
|
+
```
|
|
87
|
+
这个需求有两种走法:
|
|
88
|
+
1. 【快档】当小改动,3 步极速出 Mini-PRD(约 2-3 轮)
|
|
89
|
+
2. 【完整档】当正经需求,完整 PRD + 原型(约 4-6 轮)
|
|
90
|
+
你要哪种?(1/2)
|
|
91
|
+
```
|
|
92
|
+
> 需求方向本身没定("想做但不知道做什么")→ 提示走 `/wl-insight discover` 先探索。
|
|
93
|
+
|
|
94
|
+
## STEP 2: 三步流程
|
|
95
|
+
|
|
96
|
+
### 快档(3 步极速,目标 2-3 轮)
|
|
97
|
+
```
|
|
98
|
+
① context_pack.py 一次取全(1 次调用)
|
|
99
|
+
② 一次 Write:Mini-PRD(prd-quick-template.md) + 微型原型(只画 diff)
|
|
100
|
+
③ "出好了,确认发布吗?" → 确认后归档+push
|
|
101
|
+
跳过:EVA完整检查 / 历史 PRD / style JSON
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
### 完整档(3 步并行,目标 4-6 轮)
|
|
105
|
+
|
|
106
|
+
**第 1 步|并行取全(同一条消息并发,别串行)**
|
|
107
|
+
```
|
|
108
|
+
同一条消息里并行发:
|
|
109
|
+
① context_pack.py <关键词> --platform <p> ← 代码+页面+字段+API+样式一次拿全
|
|
110
|
+
② Read 历史相关 PRD
|
|
111
|
+
③ Read 业务草稿
|
|
112
|
+
(若衔接了 insight 报告:同时 Read 该报告,作为现状背景输入)
|
|
113
|
+
```
|
|
114
|
+
然后只读 context_pack 列出的最相关 1-2 个 Vue 文件。
|
|
115
|
+
> ⚠️ 探索/调研/对标已归 /wl-insight,第 1 步**不派多 agent、不做 web 搜索**。
|
|
116
|
+
|
|
117
|
+
**第 2 步|轻反思 + 批量确认(核心:基于现状反思,重点是跟用户确认)**
|
|
118
|
+
- AI 先用上下文**自动补全** PRD 的背景/目标/指标/用户画像
|
|
119
|
+
- **基于现状做轻反思**:现状怎么做、本次改什么、预期效果——写进"需求背景/产品现状"章节
|
|
120
|
+
- 只把"上下文真没有、必须 PM 拍板"的 1-2 点,**一次性**问完(编号列表)
|
|
121
|
+
- **不再逐条确认** context_pack 已取全的现有行为/页面/字段 —— AI 自己判断
|
|
122
|
+
- 确认用批量方式(一个编号列表一轮)
|
|
123
|
+
|
|
124
|
+
**第 3 步|一次生成 + 3 道质量锁 + 发布**
|
|
125
|
+
```
|
|
126
|
+
一次 Write 写完 PRD + 原型 → 跑 3 道质量锁 → 不过自动修 → 问"发布吗?"
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
## 🔒 3 道质量锁(治"产出质量不稳",完整档全跑,快档只跑锁②)
|
|
42
130
|
|
|
131
|
+
**"准"的保障。eval_prd.py 的 A1/A2/A3 已实现大半,这里提升为流程强制门。**
|
|
132
|
+
|
|
133
|
+
生成后、发布前:
|
|
43
134
|
```bash
|
|
44
|
-
python
|
|
135
|
+
python "$R/.qoder/scripts/eval_prd.py" <draft-prd.md> <prototype.html>
|
|
45
136
|
```
|
|
46
|
-
|
|
137
|
+
eval_prd < 80% 不准发布,按报告修到 PASS。
|
|
47
138
|
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
### Reference(默认 — 直接说需求)
|
|
51
|
-
1. 问平台
|
|
52
|
-
2. context_pack 一次取全
|
|
53
|
-
3. 读 1-2 个 Vue 文件
|
|
54
|
-
4. 一次性确认发现
|
|
55
|
-
5. **一次 Write** PRD + 原型
|
|
56
|
-
6. EVA 评估 + 确认发布
|
|
57
|
-
|
|
58
|
-
### Quick(快速 — "快速""加个字段""小改动")
|
|
59
|
-
1. 问平台
|
|
60
|
-
2. context_pack 一次取全
|
|
61
|
-
3. **一次 Write** Mini-PRD + 微型原型
|
|
62
|
-
4. 一句话确认 → push
|
|
63
|
-
> 跳过:EVA / 历史 PRD / 搜索 / style JSON
|
|
64
|
-
|
|
65
|
-
### Discuss(探讨 — "探讨""聊聊""分析")
|
|
66
|
-
1. 听需求
|
|
67
|
-
2. 问关键问题(痛点/谁用/现状/目标)
|
|
68
|
-
3. 给 2-3 个方向建议
|
|
69
|
-
> 不出文件。聊完说"出PRD"转 Reference
|
|
70
|
-
|
|
71
|
-
### Brainstorm(头脑风暴)
|
|
72
|
-
1. 问平台
|
|
73
|
-
2. SCAMPER + 多 agent 调研
|
|
74
|
-
3. 生成 PRD + 原型
|
|
75
|
-
|
|
76
|
-
### Planning(规划)
|
|
77
|
-
1. 问平台
|
|
78
|
-
2. 现状 + 理想态 + Gap + MVP
|
|
79
|
-
3. 生成 PRD + 原型
|
|
139
|
+
AI 在跑 eval_prd 前,自己先做内容自检(快档只查锁②):
|
|
80
140
|
|
|
81
|
-
|
|
141
|
+
| 锁 | 查什么 | 不过怎么办 |
|
|
142
|
+
|----|--------|-----------|
|
|
143
|
+
| **锁① 背景锁** | 背景回答了"为什么做 + 目标指标"?非空泛? | 打回,补"业务驱动力 + 可量化目标" |
|
|
144
|
+
| **锁② 字段锁** | PRD 字段都来自 context_pack 真实字段清单?无发明字段? | 标红发明字段,对照真实代码替换/删除 |
|
|
145
|
+
| **锁③ 闭环锁** | 每个功能点都有验收标准(Given-When-Then)? | 缺验收的功能点补全 |
|
|
82
146
|
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
147
|
+
> 锁② 直接复用 eval_prd 的 A1 结果(A1 已校验字段真实性)。AI 把 A1 报告的"可疑字段"在发布前显式标给 PM 确认,不重复造校验。
|
|
148
|
+
|
|
149
|
+
### 锁② 零命中时的降级(全新功能,索引无现成字段)
|
|
150
|
+
|
|
151
|
+
context_pack 字段段返回"无直接相关字段"时,**字段锁不报错,降级为显式声明**:
|
|
152
|
+
- 字段规格表每个字段标来源:`既有`(context_pack)/ `复用`(同类页同名字段)/ `新增`(本次定义)。
|
|
153
|
+
- eval_prd A1 会跳过 `新增` 行不扣分 —— **新增字段必须打标记**,否则被当可疑字段。
|
|
154
|
+
- `新增` 字段仍要写全:字段名(camelCase)/中文标题/类型/校验规则。
|
|
155
|
+
|
|
156
|
+
### 🛡️ 故障降级(脚本崩了怎么走)
|
|
157
|
+
|
|
158
|
+
**脚本崩 ≠ PRD 写不了。** 索引/工具是"准"的加速器,不是写 PRD 的前提。常见异常及降级:
|
|
159
|
+
|
|
160
|
+
| 故障 | 降级动作 |
|
|
161
|
+
|------|---------|
|
|
162
|
+
| context_pack 零命中(全新业务) | 照常写,字段标 `新增`,诚实告诉 PM"索引无先例,字段需确认"。**绝不编字段** |
|
|
163
|
+
| 索引文件缺失(A1=0 分) | 提示 `/wl-init --fix`;仍可出 PRD,锁②改人工标注 |
|
|
164
|
+
| eval_prd 缺原型 | 只评 A1+A3,A2 跳过。快档允许只出 PRD |
|
|
165
|
+
| eval_prd 本身崩 | 不阻塞,用 3 道锁自检代替,记"自动评分暂不可用" |
|
|
166
|
+
| eval_prd <80% | 完整档修到 ≥80%;快档只看锁②,不阻塞 |
|
|
167
|
+
| fill_prototype 崩 | 读模板手写起步,颜色只取 context_pack 第6段真源 |
|
|
168
|
+
| REQ-ID 分配器失败 | 扫最大号+1,文件名带 `-manual`,push 时 team_sync 校验唯一 |
|
|
169
|
+
| team_sync SYNC_CONFLICT | AI 按脚本给的命令自行解决,不让用户碰 git |
|
|
170
|
+
|
|
171
|
+
> 完整降级表(含平台答错、归档失败等)见 `.qoder/commands/wl-prd-full.md` 的「故障降级表」。
|
|
172
|
+
|
|
173
|
+
## 取上下文 — 一次取全(不要逐个搜)
|
|
174
|
+
|
|
175
|
+
```bash
|
|
176
|
+
python "$R/.qoder/scripts/context_pack.py" <关键词> --platform <web|app>
|
|
177
|
+
```
|
|
178
|
+
返回 7 章节(代码+页面+字段+PRD+API+样式+Wiki)。**只读最相关 1-2 个 Vue 文件**。
|
|
88
179
|
|
|
89
180
|
## PRD 模板
|
|
90
181
|
|
|
91
|
-
|
|
|
182
|
+
| 档位 | 模板 | mode 标记 |
|
|
92
183
|
|------|------|----------|
|
|
93
|
-
|
|
|
94
|
-
|
|
|
184
|
+
| 快档 | `.qoder/templates/prd-quick-template.md` | `<!-- mode: quick -->` |
|
|
185
|
+
| 完整档(默认) | `.qoder/templates/prd-full-template.md` | `<!-- mode: reference -->` |
|
|
95
186
|
|
|
96
|
-
>
|
|
97
|
-
>
|
|
187
|
+
> planning/brainstorm 两个 mode 标记**已随探索能力迁至 /wl-insight**,prd 不再主动产出。
|
|
188
|
+
> 模板头部已含 mode 标记。生成时**只改 mode 值,别删标记**——
|
|
189
|
+
> syncgate/eval_prd 靠它识别模式(quick 跳过 EVA 完整检查,其余全跑)。
|
|
98
190
|
|
|
99
|
-
## 质量自检(10
|
|
191
|
+
## 质量自检(10 项,快档跳过)
|
|
100
192
|
1. 背景回答"为什么" 2. 目标可量化 3. 用户画像具体
|
|
101
193
|
4. 业务规则完整 5. 异常覆盖(2+) 6. 验收可测(Given-When-Then)
|
|
102
194
|
7. 数据事件完整 8. PRD 无技术实现 9. 优先级标注 10. 排期合理
|
|
195
|
+
|
|
196
|
+
## 原型规则
|
|
197
|
+
|
|
198
|
+
- 从模板开始(`.qoder/templates/prototype-{web|app}.html`),模板已有正确颜色与 mixed-nav 多级菜单骨架
|
|
199
|
+
- 先跑 `python "$R/.qoder/scripts/fill_prototype.py" <关键词> --platform <web|app>` 拿 80% 草稿;
|
|
200
|
+
它会按目标项目的 `layout_fingerprint` 自动填示例菜单骨架和真实字段,你只微调 20%
|
|
201
|
+
- 颜色/布局指纹见 fill_prototype 输出的"设计 Token"段(布局模式/主色/侧边栏宽度)
|
|
202
|
+
- **菜单层级**: 若需求描述了侧边栏/菜单结构(如"一级→二级,右侧三四级"),
|
|
203
|
+
严格按它填 `{{TOP_MENU}}`/`{{SIDEBAR_MENU}}`/`{{TABS}}` —— 模板是 mixed-nav
|
|
204
|
+
多级骨架,不要退化成扁平单级 sidebar
|
|
205
|
+
- 只改 diff 部分,新功能高亮
|
|
206
|
+
- 单 HTML 文件,可交互
|
|
207
|
+
- Web: mixed-nav(顶部一级+左侧二级三级+标签页);APP: 375px + 底部 tab
|
|
208
|
+
|
|
209
|
+
## STEP:自动归档到个人时间线(可选增强 · 失败不影响 PRD)
|
|
210
|
+
|
|
211
|
+
PRD 写入 drafts 后,**顺手归档一份**到当前成员的按时间文件夹,方便人翻查"我那天做了啥":
|
|
212
|
+
|
|
213
|
+
```bash
|
|
214
|
+
python "$R/.qoder/scripts/archive_prd.py" <刚生成的PRD文件路径>
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
> 归档产物:`workspace/members/{你的名字}/archive/{YYYY-MM-DD}/REQ-{编号}-{中文标题}.md`
|
|
218
|
+
> 同时更新 `archive/_index.md`(按周/月汇总)和当天 `_index.md`。
|
|
219
|
+
|
|
220
|
+
**规则:**
|
|
221
|
+
- 只**复制**不移动,drafts 原件保留,data/docs/prd/ 完全不碰 → 不影响搜索/撞号检测
|
|
222
|
+
- 归属看当前操作者(.developer),不看"产品负责人"字段 → 开发/测试/产品都能用
|
|
223
|
+
- 脚本内部全程 try/except,**失败只 print 一句,绝不阻塞 PRD 生成**
|
|
224
|
+
- 多端 PRD(Web + APP 各一份)可一次传多个路径批量归档
|
|
225
|
+
|
|
226
|
+
**非侵入**:用户没用 PRD 命令时本步骤完全不触发,QODER 原生流程零影响。
|
|
@@ -4,6 +4,15 @@ description: "评审 PRD 完整性与质量。Review PRD for completeness and qu
|
|
|
4
4
|
trigger: "user invokes /review prd, asks to review/check PRD quality, or PM submits PRD"
|
|
5
5
|
---
|
|
6
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 .qoder/scripts/install_qoderwork.py`。
|
|
15
|
+
|
|
7
16
|
# PRD Review Skill
|
|
8
17
|
|
|
9
18
|
## ⚙️ 自取上下文(Quest / QoderWork 无 hook 注入,必须自读)
|
|
@@ -31,6 +40,14 @@ trigger: "user invokes /review prd, asks to review/check PRD quality, or PM subm
|
|
|
31
40
|
|
|
32
41
|
跑一次 EVA 门禁给出客观分数:
|
|
33
42
|
```bash
|
|
34
|
-
python
|
|
43
|
+
python "$R/.qoder/scripts/eval_prd.py" <PRD路径> [原型HTML路径]
|
|
35
44
|
```
|
|
36
45
|
分数 ≥80% 才能发布。低于 80% 把 EVA 报告的问题合并进上面的清单。
|
|
46
|
+
|
|
47
|
+
## 评审完成埋点
|
|
48
|
+
|
|
49
|
+
评审出结论(无论 PASS/打回)后埋点,供 /wl-status 统计评审活跃度:
|
|
50
|
+
```bash
|
|
51
|
+
python "$R/.qoder/scripts/learn.py" record review_done "{\"prd\": \"<PRD文件名>\", \"verdict\": \"<PASS|打回>\", \"score\": <EVA分数或空>}"
|
|
52
|
+
```
|
|
53
|
+
> 失败静默忽略。
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: prompt-enrich
|
|
3
|
+
description: "提问润色(第0步): 用户每条消息后先跑极速润色(<10ms), 定位业务上下文, 输出润色结果给用户确认, 再走原命令。触发: 每条含业务词的用户消息。"
|
|
4
|
+
trigger: "用户每条消息(含业务关键词时)"
|
|
5
|
+
always_apply: true
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
## 🔧 仓库根定位(QoderWork 桌面端 vs Qoder IDE/CLI)
|
|
10
|
+
|
|
11
|
+
**后续脚本里的 `$R` 代表仓库根**,先确定它(QoderWork 桌面端工作目录不是仓库根,相对路径会失效):
|
|
12
|
+
```bash
|
|
13
|
+
R=$(python ~/.qoderwork/repo_root.py 2>/dev/null) || R=.
|
|
14
|
+
```
|
|
15
|
+
> `repo_root.py` 从 `~/.qoderwork/mcp.json` 反推仓库根;失败回退 `.`(IDE/CLI 工作目录即仓库根)。找不到时先跑 `python .qoder/scripts/install_qoderwork.py`。
|
|
16
|
+
|
|
17
|
+
# prompt-enrich — 提问润色(每个命令的第 0 步)
|
|
18
|
+
|
|
19
|
+
> **这是什么**:用户提问后,先极速判断这句话命中哪些业务上下文,输出一个「润色后的提示词」给用户确认,再走原命令。
|
|
20
|
+
> **不是什么**:不是独立命令,是内置在每条消息处理前的第 0 步。
|
|
21
|
+
|
|
22
|
+
## 🚦 执行规则(每条用户消息都适用)
|
|
23
|
+
|
|
24
|
+
收到用户消息后,**在做任何其它事之前**,先判断:
|
|
25
|
+
|
|
26
|
+
### 第 0 步:极速润色(必须最先做)
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
python "$R/.qoder/scripts/enrich_prompt.py" "<用户原话>" --json
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
- 脚本纯内存查表,实测 **< 50ms**(冷启动含索引加载;热态 < 10ms)
|
|
33
|
+
- 不跑重检索(那个留到确认后)
|
|
34
|
+
|
|
35
|
+
**看返回的 `is_business` 字段**:
|
|
36
|
+
|
|
37
|
+
| is_business | 意思 | 你怎么做 |
|
|
38
|
+
|-------------|------|----------|
|
|
39
|
+
| `false` | 非业务消息(谢谢/继续/确认润色等) | **跳过润色**,直接处理用户请求 |
|
|
40
|
+
| `true` | 业务消息 | **输出润色块**,等用户确认 |
|
|
41
|
+
|
|
42
|
+
### is_business=true 时,输出润色块(严格按这个格式)
|
|
43
|
+
|
|
44
|
+
```
|
|
45
|
+
🔎 极速润色(Xms)— 直接用或回复「改:xxx」调整
|
|
46
|
+
─────────────────────────────────────
|
|
47
|
+
业务词: insurance, approval, abnormal...
|
|
48
|
+
相关代码: 19 处 (abnormal, anomaly, approval, exception...)
|
|
49
|
+
相关 API: /insurance
|
|
50
|
+
─────────────────────────────────────
|
|
51
|
+
将以此上下文继续。回复「好」接受,或「改: <你的调整>」。
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
**然后停下,等用户回复。** 不要继续往下做命令。
|
|
55
|
+
|
|
56
|
+
### 用户确认后
|
|
57
|
+
|
|
58
|
+
| 用户回复 | 你怎么做 |
|
|
59
|
+
|---------|----------|
|
|
60
|
+
| 「好」「继续」「接受」「确认」或任意无"改"字 | 接受润色,继续走原命令(prd/code/test...) |
|
|
61
|
+
| 「改: 不要保险,只要批改」 | 按用户调整的上下文继续 |
|
|
62
|
+
| 「不要润色」 | 跳过润色,用原话继续 |
|
|
63
|
+
|
|
64
|
+
---
|
|
65
|
+
|
|
66
|
+
## 关键约束
|
|
67
|
+
|
|
68
|
+
1. **必须最先做**:润色是第 0 步,排在平台询问、搜索、读文件之前。
|
|
69
|
+
例外:`/wl-init`、`/wl-search` 这种纯工具命令可跳过润色(它们不产契约)。
|
|
70
|
+
2. **极速**:只用 enrich_prompt.py,不用 context_pack(那是确认后的事)。
|
|
71
|
+
3. **可改可拒**:润色结果是建议,用户有最终决定权。
|
|
72
|
+
4. **不改变意图**:润色只补上下文,不改用户要做的事(还是 /wl-prd-full /wl-code 等)。
|
|
73
|
+
|
|
74
|
+
## 与其它命令的关系
|
|
75
|
+
|
|
76
|
+
润色是**横切关注点**,所有产契约的命令(prd/design/spec/code/test)都先过它:
|
|
77
|
+
|
|
78
|
+
```
|
|
79
|
+
用户: /wl-prd-full 保险批改那个异常统计页加个审批按钮
|
|
80
|
+
↓
|
|
81
|
+
第0步: enrich_prompt → 输出润色块 → 用户确认
|
|
82
|
+
↓
|
|
83
|
+
第1步起: /wl-prd-full 原流程(用确认后的上下文跑 context_pack)
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
## 为什么用脚本而不是靠 AI 自己想
|
|
87
|
+
|
|
88
|
+
- **快**:纯内存查表纳秒级,AI 自己推理要秒级
|
|
89
|
+
- **准**:复用 common/terms.py 的中文分词 + keyword-index,跟 /wl-search 同源
|
|
90
|
+
- **一致**:每次润色逻辑一样,不依赖 AI 心情
|