@hupan56/wlkj 2.7.3 → 2.7.4
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 +162 -32
- package/package.json +1 -1
- package/templates/qoder/commands/wl-design.md +113 -20
- package/templates/qoder/commands/wl-prd.md +89 -17
- package/templates/qoder/scripts/git_sync.py +5 -1
- package/templates/qoder/commands/wl-design-draw.md +0 -78
- package/templates/qoder/commands/wl-design-scan.md +0 -108
- package/templates/qoder/commands/wl-design-spec.md +0 -154
- package/templates/qoder/commands/wl-prd-full.md +0 -226
- package/templates/qoder/commands/wl-prd-quick.md +0 -134
- package/templates/qoder/commands/wl-prd-review.md +0 -104
|
@@ -1,108 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: wl-design-scan
|
|
3
|
-
description: "扫描/审视系统现状。看功能模块有哪些页面/按钮/流程/风格/测试覆盖。画原型前必做。"
|
|
4
|
-
argument-hint: "<功能模块名或关键词>"
|
|
5
|
-
auto-approve: true
|
|
6
|
-
allowed-tools: [Read, Glob, Grep, Bash, mcp__qoder-knowledge-graph]
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
# /wl-design-scan - 审视系统现状
|
|
10
|
-
|
|
11
|
-
User input: $ARGUMENTS
|
|
12
|
-
|
|
13
|
-
> 画之前先看。设计师/PM 需要理解"系统现在长什么样"才能动手。
|
|
14
|
-
> 这是业界 Discover 阶段的工具——understand before you design。
|
|
15
|
-
|
|
16
|
-
## 🔧 环境自检(QoderWork 桌面端 vs Qoder IDE/CLI)
|
|
17
|
-
|
|
18
|
-
**先确定仓库根 R**(QoderWork 桌面端工作目录不是仓库根,相对路径会失效):
|
|
19
|
-
```bash
|
|
20
|
-
R=$(python ~/.qoderwork/repo_root.py 2>/dev/null) || R=.
|
|
21
|
-
```
|
|
22
|
-
> 后续脚本统一用 `python "$R/.qoder/scripts/xxx.py"`。
|
|
23
|
-
|
|
24
|
-
## 第一步:判断用户想看什么
|
|
25
|
-
|
|
26
|
-
| 用户说什么 | 调什么 | 返回什么 |
|
|
27
|
-
|-----------|--------|---------|
|
|
28
|
-
| "XX 有哪些页面""XX 功能模块" | `feature_overview(feature='XX')` | 页面列表 + 端点数 + 按钮数 + 测试数 |
|
|
29
|
-
| "XX 的操作流程""XX 业务流程" | `get_workflow(module='XX')` | 操作链(查询→新增→审批→...) |
|
|
30
|
-
| "XX 用什么风格""系统主色" | `get_design_system(platform='web')` | token + 布局指纹 + 组件表 + 真实按钮 |
|
|
31
|
-
| "XX 有没有测试""XX 测试覆盖" | `coverage_matrix()` | 17 个功能的测试覆盖红黄绿 |
|
|
32
|
-
| "改 XX 影响什么" | `get_impact(endpoint='XX')` | 影响页面数 + 操作数 + 可回归测试 |
|
|
33
|
-
| "XX 按钮 调什么接口" | `context_360(symbol='handleXX')` | 按钮关联的 API + Controller + 调用链 |
|
|
34
|
-
| 模糊 | 先问 | "你想看功能模块、操作流程、设计风格、测试覆盖、还是影响分析?" |
|
|
35
|
-
|
|
36
|
-
## 第二步:执行查询
|
|
37
|
-
|
|
38
|
-
**PREFERRED: MCP 工具**(QoderWork 有 MCP 时直接调)
|
|
39
|
-
```
|
|
40
|
-
mcp__qoder-knowledge-graph__feature_overview(feature='资产管理')
|
|
41
|
-
mcp__qoder-knowledge-graph__get_workflow(module='资产')
|
|
42
|
-
mcp__qoder-knowledge-graph__get_design_system(platform='web')
|
|
43
|
-
```
|
|
44
|
-
|
|
45
|
-
**FALLBACK: Python 脚本**
|
|
46
|
-
```bash
|
|
47
|
-
python "$R/.qoder/scripts/search_index.py" 资产 --platform web
|
|
48
|
-
python "$R/.qoder/scripts/search_index.py" --style table --platform web
|
|
49
|
-
python "$R/.qoder/scripts/search_index.py" --field assetName
|
|
50
|
-
```
|
|
51
|
-
|
|
52
|
-
## 第三步:结构化输出
|
|
53
|
-
|
|
54
|
-
不是简单返回数据,而是**帮用户理解**:
|
|
55
|
-
|
|
56
|
-
### 功能模块视图(用户说"XX 有哪些页面"时)
|
|
57
|
-
```
|
|
58
|
-
📊 资产管理 (assets) 模块全景
|
|
59
|
-
页面: 38 个
|
|
60
|
-
API: 12 个端点
|
|
61
|
-
按钮: 108 个操作
|
|
62
|
-
测试: 3 个测试用例 (覆盖率偏低 ⚠️)
|
|
63
|
-
|
|
64
|
-
主要页面类型:
|
|
65
|
-
- table-page: 20 个 (异常申请/记录/分析...)
|
|
66
|
-
- form-page: 12 个 (新增/编辑/审批...)
|
|
67
|
-
- dashboard: 3 个 (资产看板)
|
|
68
|
-
- detail-page: 3 个
|
|
69
|
-
|
|
70
|
-
标杆页面 (最适合做参考的):
|
|
71
|
-
1. assets/abnormal/apply/index.vue (异常申请, 19个字段)
|
|
72
|
-
2. assets/abnormalManage/abnormalAnalysis/index.vue (分析看板)
|
|
73
|
-
```
|
|
74
|
-
|
|
75
|
-
### 操作流程视图(用户说"XX 流程"时)
|
|
76
|
-
```
|
|
77
|
-
🔄 资产管理操作链 (7 步)
|
|
78
|
-
查询 → 新增 → 提交 → 审批 → 归档 → 导出 → 删除
|
|
79
|
-
|
|
80
|
-
⚠️ 步骤较多 (7步), 考虑优化:
|
|
81
|
-
- 第3步"提交"和第4步"审批"可能合并
|
|
82
|
-
- 第6步"导出"可放到工具栏, 不算独立步骤
|
|
83
|
-
```
|
|
84
|
-
|
|
85
|
-
### 设计风格视图(用户说"XX 风格"时)
|
|
86
|
-
```
|
|
87
|
-
🎨 fywl-ui 设计指纹
|
|
88
|
-
主色: hsl(214.58, 86.34%, 59.8%) (Vben 蓝)
|
|
89
|
-
侧边栏: 160px, 浅色, mixed-nav 布局
|
|
90
|
-
顶栏: 深色, 含 logo + 通知 + 头像
|
|
91
|
-
圆角: 0.25rem
|
|
92
|
-
字体: -apple-system, BlinkMacSystemFont, ...
|
|
93
|
-
|
|
94
|
-
真实按钮文案示例: 添加反馈资产, 导出Excel, 批量导入, ...
|
|
95
|
-
常用组件: Modal(273次), Input(135次), FormItem(95次), ...
|
|
96
|
-
```
|
|
97
|
-
|
|
98
|
-
## 使用示例
|
|
99
|
-
|
|
100
|
-
```
|
|
101
|
-
/wl-design-scan 资产管理 → 功能模块全景
|
|
102
|
-
/wl-design-scan 资产的操作流程 → 操作链分析
|
|
103
|
-
/wl-design-scan 系统设计风格 → 设计 token + 布局指纹
|
|
104
|
-
/wl-design-scan 哪些功能没测试 → 覆盖矩阵
|
|
105
|
-
/wl-design-scan 改 /asset 影响 → 影响分析
|
|
106
|
-
```
|
|
107
|
-
|
|
108
|
-
> scan 不产出文件,只返回结构化分析。帮设计师/PM"看清楚"再动手。
|
|
@@ -1,154 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: wl-design-spec
|
|
3
|
-
description: "设计交付。录入设计稿→spec.json + 评审原型合规性。设计师和系统对接的唯一入口。"
|
|
4
|
-
argument-hint: "<录入|评审> <描述>"
|
|
5
|
-
auto-approve: true
|
|
6
|
-
allowed-tools: [Read, Glob, Grep, Bash, Write, Edit, mcp__qoder-knowledge-graph, mcp__lanhu]
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
# /wl-design-spec - 设计交付
|
|
10
|
-
|
|
11
|
-
User input: $ARGUMENTS
|
|
12
|
-
|
|
13
|
-
> 设计的终点:把设计意图"规格化"让前端能实现,并评审原型是否合规。
|
|
14
|
-
> 包含两个动作:**录入**(设计师→系统)和**评审**(系统→设计师)。
|
|
15
|
-
|
|
16
|
-
## 🔧 环境自检(QoderWork 桌面端 vs Qoder IDE/CLI)
|
|
17
|
-
|
|
18
|
-
**先确定仓库根 R**(QoderWork 桌面端工作目录不是仓库根,相对路径会失效):
|
|
19
|
-
```bash
|
|
20
|
-
R=$(python ~/.qoderwork/repo_root.py 2>/dev/null) || R=.
|
|
21
|
-
```
|
|
22
|
-
> 后续脚本统一用 `python "$R/.qoder/scripts/xxx.py"`。
|
|
23
|
-
|
|
24
|
-
## 第一步:判断用户要做哪个动作
|
|
25
|
-
|
|
26
|
-
| 用户说什么 | 动作 | 跳到 |
|
|
27
|
-
|-----------|------|------|
|
|
28
|
-
| "录入""这是 Figma 稿""把这个设计录进去""设计稿录入" | **录入** | 录入段 |
|
|
29
|
-
| "评审""检查""看看这个原型""合规吗" | **评审** | 评审段 |
|
|
30
|
-
| 模糊 | 先问 | "你是要录入设计稿,还是评审现有原型?" |
|
|
31
|
-
|
|
32
|
-
---
|
|
33
|
-
|
|
34
|
-
## 录入(设计师把 Figma 稿变成 spec.json)
|
|
35
|
-
|
|
36
|
-
**铁律:平台必须先问。** 问完就停。
|
|
37
|
-
|
|
38
|
-
### 流程
|
|
39
|
-
|
|
40
|
-
完整执行见 `.qoder/skills/design-import/SKILL.md`:
|
|
41
|
-
|
|
42
|
-
1. **录入前先看现状**(让 spec 不是凭空设计,是基于系统增量改进):
|
|
43
|
-
```
|
|
44
|
-
mcp__qoder-knowledge-graph__feature_overview(feature='资产') → 这个模块现有页面/按钮
|
|
45
|
-
mcp__qoder-knowledge-graph__get_workflow(module='资产') → 现有操作流程
|
|
46
|
-
mcp__qoder-knowledge-graph__get_design_system(platform='web') → 现有 token/布局/组件
|
|
47
|
-
```
|
|
48
|
-
设计师据此知道"系统现在有什么、我的设计改了什么"。
|
|
49
|
-
|
|
50
|
-
2. **收集设计信息**(按精度从高到低):
|
|
51
|
-
- **蓝湖链接(最推荐)**:设计师发 `https://lanhuapp.com/web/#/item/...`,走 4 步直读
|
|
52
|
-
(详见 design-import/SKILL.md 方式 A):
|
|
53
|
-
① `mcp__lanhu__get_designs(url)` 探测+列图(失败就降级截图口述,不报错)
|
|
54
|
-
② 让设计师选哪张图(**问了就停**)
|
|
55
|
-
③ `mcp__lanhu__get_ai_analyze_design_result(url, design_names)` 读 CSS 标注+切图
|
|
56
|
-
④ AI 语义映射进 spec.json(出现最多的色→主色,width→侧边栏...)
|
|
57
|
-
- **铁律:蓝湖 CSS 值原样填**。`rgba(255,115,10,1)` 不写成 `#FF730A`,`200px` 不四舍五入
|
|
58
|
-
- STDIO 自动开关(开 QoderWork 自动起/关自动停,无需手动 start);cookie 按角色在 `workspace/members/{当前用户}/.secrets/lanhu.env`
|
|
59
|
-
- **截图 + 口述**(蓝湖不可用时降级):设计师发一张 Figma 截图,口述关键决策
|
|
60
|
-
- **导出标注**(CSS / JSON / PDF)
|
|
61
|
-
- **参照现有页面改**("类似 XX 页面,但侧边栏改成手风琴")
|
|
62
|
-
|
|
63
|
-
3. **生成 spec.json**,结构包含:
|
|
64
|
-
```json
|
|
65
|
-
{
|
|
66
|
-
"platform": "web",
|
|
67
|
-
"requirement": "异常资产申请页改版",
|
|
68
|
-
"design_tokens": { "--primary-color": "rgba(255,115,10,1)", "--sidebar-width": "160px" },
|
|
69
|
-
"layout": { "description": "...", "sidebar": "...", "content": "..." },
|
|
70
|
-
"components": [{ "name": "...", "spec": "..." }],
|
|
71
|
-
"behaviors": { "sidebar_collapse": "click", "form_mode": "wizard" },
|
|
72
|
-
"source": "蓝湖直读 (设计师: XXX)",
|
|
73
|
-
"lanhu_source": { "url": "...", "image_names": ["..."] }
|
|
74
|
-
}
|
|
75
|
-
```
|
|
76
|
-
> ⚠️ `requirement` 必须跟未来 `/wl-design-draw` 关键词一致(fill_prototype 靠它匹配)。
|
|
77
|
-
> 蓝湖来源填 `"source": "蓝湖直读 (...)"` + `lanhu_source`;截图口述只填 `source`。
|
|
78
|
-
|
|
79
|
-
4. **存储到** `data/style/{需求名}-{平台}-design-spec.json`(平台=web/app,避免同功能多端冲突;同需求同平台重录=覆盖更新)
|
|
80
|
-
> `requirement` 用"功能名+同义词"(如 `待办 我的待办 设置待办`),让 PM 搜各种词都能命中。
|
|
81
|
-
|
|
82
|
-
5. **优先级声明**:spec.json > 代码风格 > PDF 规范
|
|
83
|
-
一旦录入,同需求的 `/wl-design-draw` 必须锚定它。
|
|
84
|
-
|
|
85
|
-
### 铁律
|
|
86
|
-
|
|
87
|
-
- **绝不编造 token**:设计师没说的值,留空或标"待确认"
|
|
88
|
-
- **图标必须来自真源**:即使设计师用 emoji 示意,录入时替换成系统真源
|
|
89
|
-
(Web: `data/index/ref-icon.json` Ant Design SVG;APP: Vant 字体图标)
|
|
90
|
-
- **录入后同需求原型必须锚定它**
|
|
91
|
-
|
|
92
|
-
### 完成提示
|
|
93
|
-
|
|
94
|
-
```
|
|
95
|
-
✅ 设计规范已录入: data/style/{需求名}-design-spec.json
|
|
96
|
-
下次 /wl-design-draw 同关键词时,会自动优先用这份 spec。
|
|
97
|
-
设计师可随时 /wl-design-spec 录入 更新它。
|
|
98
|
-
```
|
|
99
|
-
|
|
100
|
-
### Figma 协作流程
|
|
101
|
-
|
|
102
|
-
设计师在 Figma 精修完设计稿后,导出/截图,用 `/wl-design-spec 录入` 录入。
|
|
103
|
-
完整 Figma 协作指南见 `.qoder/skills/design-import/figma-workflow.md`。
|
|
104
|
-
|
|
105
|
-
---
|
|
106
|
-
|
|
107
|
-
## 评审(检查原型是否合规)
|
|
108
|
-
|
|
109
|
-
完整执行见 `.qoder/skills/design-review/SKILL.md`。
|
|
110
|
-
|
|
111
|
-
读最新的 `workspace/members/{dev}/drafts/prototype-*.html`,按 checklist 评审:
|
|
112
|
-
|
|
113
|
-
### 评审 checklist
|
|
114
|
-
|
|
115
|
-
**视觉合规:**
|
|
116
|
-
- [ ] 颜色来自真源(get_design_system 的 HSL token,不是 #1890ff)
|
|
117
|
-
- [ ] 图标来自真源(ref-icon.json 的 SVG,无 emoji)
|
|
118
|
-
- [ ] 侧边栏宽度 = layout_fingerprint 值(fywl-ui 是 160px)
|
|
119
|
-
- [ ] 字体/圆角/间距跟系统一致
|
|
120
|
-
|
|
121
|
-
**内容合规:**
|
|
122
|
-
- [ ] 按钮文案用了系统真实文案(entity-registry,非编的"新增/编辑")
|
|
123
|
-
- [ ] 表格列/表单字段来自真实代码(fill_prototype 数据清单)
|
|
124
|
-
- [ ] 若设计师 spec 存在:原型匹配 spec 的布局/配色/组件
|
|
125
|
-
|
|
126
|
-
**交互合规:**
|
|
127
|
-
- [ ] 交互流程闭环(对照 get_workflow 的操作链,原型覆盖了全部步骤)
|
|
128
|
-
- [ ] 包含完整状态(有数据/空状态/加载中/错误)
|
|
129
|
-
- [ ] 布局跟同功能模块标杆页面一致(对照 feature_overview)
|
|
130
|
-
|
|
131
|
-
**测试影响:**
|
|
132
|
-
- [ ] 若改动页面有测试覆盖(coverage_matrix),提醒"改动后需回归测试"
|
|
133
|
-
|
|
134
|
-
### 评审时可调 MCP 工具
|
|
135
|
-
|
|
136
|
-
- `mcp__qoder-knowledge-graph__feature_overview(feature='XX')` → 功能画像,对比原型是否遗漏
|
|
137
|
-
- `mcp__qoder-knowledge-graph__get_workflow(module='XX')` → 操作链,检查原型是否覆盖完整流程
|
|
138
|
-
- `mcp__coverage_matrix()` → 测试覆盖,判断改动是否需回归
|
|
139
|
-
- `mcp__qoder-knowledge-graph__get_design_system(platform='web')` → 真实 token/按钮做对照
|
|
140
|
-
|
|
141
|
-
### 输出
|
|
142
|
-
|
|
143
|
-
报告:PASS 或 🔴/🟡 问题清单(不产文件,只出报告)。
|
|
144
|
-
若不通过,附上修复建议和参考文件路径。
|
|
145
|
-
|
|
146
|
-
---
|
|
147
|
-
|
|
148
|
-
## 使用示例
|
|
149
|
-
|
|
150
|
-
```
|
|
151
|
-
/wl-design-spec 录入 这个 Figma 稿 → 录入设计稿
|
|
152
|
-
/wl-design-spec 评审 最新原型 → 评审原型
|
|
153
|
-
/wl-design-spec 这个按钮文案对不对 → 评审(按钮文案检查)
|
|
154
|
-
```
|
|
@@ -1,226 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: wl-prd-full
|
|
3
|
-
description: "完整档 PRD + 原型(13 章,正经需求)。新模块/新业务/新流程用这个。支持 参考:<insight报告> 衔接探索站。"
|
|
4
|
-
argument-hint: "[需求描述] 可选: 参考:<insight报告路径>"
|
|
5
|
-
auto-approve: true
|
|
6
|
-
allowed-tools: [Read, Glob, Grep, Bash, Write, Edit]
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
# /wl-prd-full - 完整档 PRD + 原型(又快又准)
|
|
10
|
-
|
|
11
|
-
User input: $ARGUMENTS
|
|
12
|
-
|
|
13
|
-
> **第一性原理:又快又准。** 快 = 并行取全 + 少打断;准 = 语义归档 + 3 道质量锁。
|
|
14
|
-
> **定位:专注"已确定需求"的落地。** 新模块/新业务/新流程走这里。
|
|
15
|
-
> 探索/调研/规划已移交 `/wl-insight`。小改动走 `/wl-prd-quick`。
|
|
16
|
-
|
|
17
|
-
## 🔒 语言锁(最高优先级)
|
|
18
|
-
|
|
19
|
-
**全部输出必须简体中文。** 含 PRD 标题、章节名、字段名、表格内容、原型文案、注释。
|
|
20
|
-
禁止任何英文句子(技术专有名词如 API/REQ-ID 可保留英文缩写)。
|
|
21
|
-
违反此锁 = 产出不合格,必须重写。
|
|
22
|
-
|
|
23
|
-
---
|
|
24
|
-
|
|
25
|
-
## 🔧 环境自检(QoderWork 桌面端 vs Qoder IDE/CLI)
|
|
26
|
-
|
|
27
|
-
**QoderWork 桌面端的工作目录是临时会话目录(workspace/xxx),不是仓库根!** 相对路径 `.qoder/scripts/xxx` 会失效。
|
|
28
|
-
|
|
29
|
-
**第一步:确定仓库根 R**(后续所有脚本/模板路径都用它):
|
|
30
|
-
```bash
|
|
31
|
-
# QoderWork 桌面端(工作目录不在仓库):
|
|
32
|
-
R=$(python ~/.qoderwork/repo_root.py) # 输出仓库根绝对路径
|
|
33
|
-
# Qoder IDE/CLI(工作目录就是仓库):
|
|
34
|
-
R=. # 直接用相对路径
|
|
35
|
-
```
|
|
36
|
-
若 `repo_root.py` 报错找不到,先在仓库里跑 `python .qoder/scripts/install_qoderwork.py`。
|
|
37
|
-
|
|
38
|
-
**取上下文双轨(优先 MCP,QoderWork 桌面端有 MCP 工具):**
|
|
39
|
-
- **QoderWork 桌面端**:直接调 MCP 工具 `mcp__qoder-knowledge-graph__context_pack(keyword='保险', platform='web', role='pm')`,**不要跑 python 脚本**
|
|
40
|
-
- **IDE/CLI**:`python "$R/.qoder/scripts/kg.py" context 保险 --platform web --role pm`
|
|
41
|
-
|
|
42
|
-
> 判断依据:能看到 `mcp__` 开头的工具 → 用 MCP;看不到 → 用 kg.py 脚本。
|
|
43
|
-
> MCP 工具列表:search_code / search_api / search_prd / get_impact / context_360 / context_pack / coverage_matrix / feature_overview / get_workflow / multi_hop / search_wiki / fill_prototype / get_design_system(共 13 个)
|
|
44
|
-
|
|
45
|
-
---
|
|
46
|
-
|
|
47
|
-
## ⚠️ STEP 0: 必须先问平台(任何操作前的第一步)
|
|
48
|
-
|
|
49
|
-
**在任何搜索、读文件、分析之前 —— 先问这个问题。**
|
|
50
|
-
**绝不自动判断。绝不假设。绝不跳过。永远先问。问完就停。**
|
|
51
|
-
|
|
52
|
-
```
|
|
53
|
-
这个需求是针对哪个平台?
|
|
54
|
-
|
|
55
|
-
1. **Web 管理端** (fywl-ui) - Ant Design Vue + VxeGrid 风格
|
|
56
|
-
2. **APP 移动端** (Carmg-H5) - Vant 风格
|
|
57
|
-
3. **两端都要**
|
|
58
|
-
|
|
59
|
-
请选择 (1/2/3):
|
|
60
|
-
```
|
|
61
|
-
|
|
62
|
-
| 回答 | 平台 | 项目 | 搜索 flag | 原型模板 |
|
|
63
|
-
|------|------|------|-----------|----------|
|
|
64
|
-
| 1 / Web / PC / 管理端 | Web | fywl-ui | `--platform web` | prototype-web.html |
|
|
65
|
-
| 2 / APP / H5 / 移动端 | APP | Carmg-H5 | `--platform app` | prototype-app.html |
|
|
66
|
-
| 3 / 都要 / 两端 | Both | Both | 都跑 | 两个模板,两份原型 |
|
|
67
|
-
|
|
68
|
-
---
|
|
69
|
-
|
|
70
|
-
## STEP 0.5: 检查是否衔接 insight(探索站 → 落地站)
|
|
71
|
-
|
|
72
|
-
**若 $ARGUMENTS 含 `参考:<路径>`,或用户说"按 insight 的报告做 PRD""转 PRD":**
|
|
73
|
-
1. Read 指定的 insight 报告(`workspace/members/*/drafts/insight-*.md`)
|
|
74
|
-
2. 把报告里的**现状锚定 + 选中的机会/Gap** 作为本次 PRD 的现状背景输入
|
|
75
|
-
3. 直接进完整档流程,走"轻反思 + 批量确认"
|
|
76
|
-
4. 跳过需求方向确认(用户已通过 insight 确认过方向,这里只确认落地细节)
|
|
77
|
-
|
|
78
|
-
> 衔接语义:`/wl-prd-full 参考:{报告路径}#{机会编号}` —— insight 想清楚了"该做什么",prd 落地"怎么做"。
|
|
79
|
-
|
|
80
|
-
---
|
|
81
|
-
|
|
82
|
-
## STEP 1: 并行取全上下文(一个消息内并发,不要串行)
|
|
83
|
-
|
|
84
|
-
```
|
|
85
|
-
同一条消息里并行发:
|
|
86
|
-
① 取上下文(双轨,按环境自检段):
|
|
87
|
-
QoderWork: mcp__qoder-knowledge-graph__context_pack(keyword='<词>', platform='<p>', role='pm')
|
|
88
|
-
IDE/CLI: python "$R/.qoder/scripts/kg.py" context <词> --platform <p> --role pm
|
|
89
|
-
② Read 历史相关 PRD($R/data/docs/prd/) ← 不再单独成轮
|
|
90
|
-
③ Read 业务草稿($R/data/docs/drafts/) ← 不再单独成轮
|
|
91
|
-
(若 STEP 0.5 衔接了 insight 报告:同时 Read 该报告,作为现状背景输入)
|
|
92
|
-
```
|
|
93
|
-
然后**只读 context 列出的最相关 1-2 个 Vue 文件**,不要逐个读。
|
|
94
|
-
> ⚠️ 探索/调研/对标已归 /wl-insight,prd 第 1 步**不派多 agent、不做 web 搜索**。
|
|
95
|
-
|
|
96
|
-
---
|
|
97
|
-
|
|
98
|
-
## STEP 2: 轻反思 + 批量确认(核心:基于现状反思,重点是跟用户确认)
|
|
99
|
-
|
|
100
|
-
- AI 先用取到的上下文**自动补全** PRD 的背景/目标/指标/用户画像
|
|
101
|
-
- **基于现状做轻反思**(不是发散探索):现状怎么做的、本次要改什么、改完预期效果——
|
|
102
|
-
这段反思写进 PRD 的"需求背景/产品现状"章节,让落地有据可依
|
|
103
|
-
- 只把"上下文里真没有、必须 PM 拍板"的 1-2 个点,**一次性**问完(一个编号列表)
|
|
104
|
-
- **绝不再像旧流程那样把"现有行为/相关页面/字段"列出来逐条确认** —— context 已取全,AI 该自己判断
|
|
105
|
-
- 确认采用批量方式(一个编号列表一轮),不逐条问
|
|
106
|
-
- 若衔接了 insight 报告:把报告选中的机会/Gap 作为本次落地的"为什么做",跟用户确认"怎么落地"
|
|
107
|
-
|
|
108
|
-
---
|
|
109
|
-
|
|
110
|
-
## STEP 3: 一次生成 + 3 道质量锁 + 发布
|
|
111
|
-
|
|
112
|
-
```
|
|
113
|
-
一次 Write 写完 PRD + 原型(不分两轮)→ 自动跑 3 道质量锁(见下)→ 不过自动修 → 问"发布吗?"
|
|
114
|
-
```
|
|
115
|
-
|
|
116
|
-
PRD 用模板 `$R/.qoder/templates/prd-full-template.md`(13 章)。
|
|
117
|
-
**mode 标记写 `<!-- mode: reference -->`**(模板已带)—— eval_prd 靠它跑完整 EVA 检查。
|
|
118
|
-
|
|
119
|
-
---
|
|
120
|
-
|
|
121
|
-
## 🔒 3 道质量锁(完整档全跑)
|
|
122
|
-
|
|
123
|
-
**这是"准"的保障。eval_prd.py 的 A1(现实锚定)/A2(风格保真)/A3(模板完整) 已实现大部分,这里提升为强制门。**
|
|
124
|
-
|
|
125
|
-
发布前必跑(在仓库根下执行):
|
|
126
|
-
```bash
|
|
127
|
-
cd "$R" && python .qoder/scripts/eval_prd.py <draft-prd.md> <prototype.html>
|
|
128
|
-
```
|
|
129
|
-
eval_prd 已含三道检查(A1 现实锚定 / A2 风格保真 / A3 模板完整)。**eval_prd < 80% 不准发布,必须按报告修到 PASS。**
|
|
130
|
-
|
|
131
|
-
此外,AI 在生成后、跑 eval_prd 前,**自己先做一遍内容自检**:
|
|
132
|
-
|
|
133
|
-
| 锁 | 查什么 | 不过怎么办 |
|
|
134
|
-
|----|--------|-----------|
|
|
135
|
-
| **锁① 背景锁** | 需求背景是否回答了"为什么做 + 目标指标"?是否空泛? | 自动打回,要求补"业务驱动力 + 可量化目标" |
|
|
136
|
-
| **锁② 字段锁** | PRD 里的字段是否都来自 context 的真实字段清单?有无发明字段? | 标红发明字段,要求对照真实代码替换或删除 |
|
|
137
|
-
| **锁③ 闭环锁** | 每个功能点是否都有对应的验收标准(Given-When-Then)? | 缺验收的功能点要求补全 |
|
|
138
|
-
|
|
139
|
-
> 锁② 直接复用 eval_prd 的 A1 结果(A1 已校验字段真实性)。
|
|
140
|
-
|
|
141
|
-
### 锁② 零命中时的降级(全新功能,索引里没有现成字段)
|
|
142
|
-
|
|
143
|
-
context 字段段返回"无直接相关字段"时,**字段锁不报错,降级为"显式声明"**:
|
|
144
|
-
- PRD 字段规格表里,每个字段标注来源:`既有`(来自 context)/ `复用`(沿用同类页同名字段)/ `新增`(本次需求定义,行内打 `新增` 标记)。
|
|
145
|
-
- eval_prd 的 A1 会跳过标了 `新增` 的行(不当作"发明字段"扣分)——**所以新增字段一定要打标记**。
|
|
146
|
-
|
|
147
|
-
---
|
|
148
|
-
|
|
149
|
-
## 🛡️ 故障降级表(脚本失败时怎么走 —— 健壮的保障)
|
|
150
|
-
|
|
151
|
-
**原则:脚本崩了不等于 PRD 写不了。**
|
|
152
|
-
|
|
153
|
-
| 故障现象 | 降级动作 | 绝不能 |
|
|
154
|
-
|---------|---------|--------|
|
|
155
|
-
| **context 零命中**(全新业务) | 照常写 PRD,字段标 `新增`;诚实告诉 PM"全新功能,索引无先例" | ❌ 编一串字段充数 |
|
|
156
|
-
| **索引文件缺失** | 提示 PM"知识图谱未构建,跑 `/wl-init --fix`"。仍可出 PRD,锁②降级人工标注 | ❌ 拒绝出 PRD |
|
|
157
|
-
| **eval_prd 缺原型** | A2 风格分跳过,只评 A1+A3 | ❌ 强行要求画原型才能跑 EVA |
|
|
158
|
-
| **eval_prd 本身崩** | 不阻塞发布,用 AI 自检 3 道锁代替;记"自动评分暂不可用" | ❌ 因评分工具崩就拦住 |
|
|
159
|
-
| **eval_prd < 80%** | 按报告修到 ≥80% 再发布 | ❌ 无视分数硬发 |
|
|
160
|
-
| **fill_prototype 报错** | 读模板 `$R/.qoder/templates/prototype-{web\|app}.html` 从手写起步 | ❌ 跳过 fill 就用默认色 |
|
|
161
|
-
| **REQ-ID 分配失败** | 从 `$R/data/docs/prd/` 扫最大 REQ 号 +1,文件名带 `-manual` | ❌ 多人各扫各的(撞号) |
|
|
162
|
-
| **team_sync push 冲突** | AI 按脚本给的命令自行解决(pull→合并→push) | ❌ 把冲突丢给用户 |
|
|
163
|
-
| **QoderWork 桌面端找不到脚本** | 先跑 `R=$(python ~/.qoderwork/repo_root.py)` 拿仓库根,所有脚本用 `"$R/.qoder/scripts/..."` | ❌ 用相对路径(工作目录不是仓库) |
|
|
164
|
-
|
|
165
|
-
> 一句话:索引/工具是"准"的加速器,不是"能写 PRD"的前提。工具健全时严格走质量锁;工具缺失时降级为人工标注,**永远能产出 PRD**。
|
|
166
|
-
|
|
167
|
-
---
|
|
168
|
-
|
|
169
|
-
## Storage(存储规则)
|
|
170
|
-
|
|
171
|
-
```
|
|
172
|
-
Draft → <R>/workspace/members/{developer}/drafts/REQ-{ID}-{desc}.md
|
|
173
|
-
确认发布 → <R>/workspace/specs/prd/REQ-{ID}-{desc}.md
|
|
174
|
-
原型(单端) → <R>/workspace/members/{developer}/drafts/prototype-{feature}.html
|
|
175
|
-
原型(两端) → prototype-{feature}-web.html AND prototype-{feature}-app.html
|
|
176
|
-
```
|
|
177
|
-
> `<R>` = 仓库根。QoderWork 桌面端注意:PRD/原型必须写到**仓库的** workspace 目录(用绝对路径),不要写到临时会话目录。
|
|
178
|
-
|
|
179
|
-
**REQ-ID 必须用原子分配器**:
|
|
180
|
-
```bash
|
|
181
|
-
python -c "import sys; sys.path.insert(0,r'$R/.qoder/scripts'); from common.reqid import allocate_req_id; n=allocate_req_id(); print('REQ-%d-%03d' % (__import__('datetime').date.today().year, n))"
|
|
182
|
-
```
|
|
183
|
-
(IDE/CLI 里 `$R`=`.`,可简化为原写法)
|
|
184
|
-
|
|
185
|
-
---
|
|
186
|
-
|
|
187
|
-
## 发布(确认后 3 合 1:归档 + push + 自动可搜)
|
|
188
|
-
|
|
189
|
-
> 这 3 步必须在仓库根下跑(依赖仓库工作目录):
|
|
190
|
-
```bash
|
|
191
|
-
cd "$R" && python .qoder/scripts/collect_prds.py # 归档到 data/docs/prd/(立刻可搜)
|
|
192
|
-
cd "$R" && python .qoder/scripts/team_sync.py push # 推送到团队
|
|
193
|
-
cd "$R" && python .qoder/scripts/archive_prd.py <PRD> # 可选,归档个人时间线,失败不阻塞
|
|
194
|
-
```
|
|
195
|
-
用户**永不接触 git**。这 3 步都是幂等的。
|
|
196
|
-
|
|
197
|
-
---
|
|
198
|
-
|
|
199
|
-
## 需求方向没定?走 /wl-insight(不在 prd 职责内)
|
|
200
|
-
|
|
201
|
-
若用户说"探讨""聊聊""分析一下""想做但不知道做什么""调研一下"——
|
|
202
|
-
这是**探索阶段**,提示走 `/wl-insight`:先探索清楚"该做什么",再用 `/wl-prd-full 参考:<报告>` 落地。
|
|
203
|
-
|
|
204
|
-
---
|
|
205
|
-
|
|
206
|
-
## Prototype Rules(原型规则)
|
|
207
|
-
|
|
208
|
-
1. **风格优先级**:真实 .vue 代码 > ref-vben-style.json / Vant token > PDF spec
|
|
209
|
-
2. **先拿 80% 原型草稿**(双轨):
|
|
210
|
-
- **QoderWork 桌面端(有 MCP)**:调 `mcp__qoder-knowledge-graph__fill_prototype(keyword='<词>', platform='web')`
|
|
211
|
-
- **IDE/CLI**:`python "$R/.qoder/scripts/fill_prototype.py" <关键词> --platform <web|app>`
|
|
212
|
-
3. **只改 diff**,新功能用模板的 `highlight-new` 类高亮
|
|
213
|
-
4. **单 HTML 文件**,可交互
|
|
214
|
-
5. **图标绝对禁止 emoji**:Web 用 data/index/icon-reference.json 的 Ant Design SVG;APP 用 Vant 字体图标
|
|
215
|
-
6. **菜单层级按需求填**,模板是 mixed-nav 多级骨架,不准退化成扁平单级
|
|
216
|
-
|
|
217
|
-
### Web (fywl-ui) tokens
|
|
218
|
-
- Primary: `hsl(212 100% 45%)` via `--primary`
|
|
219
|
-
- Background: `hsl(216 20.11% 95.47%)` deep / #ffffff card
|
|
220
|
-
- Table: VxeGrid, 固定表头, 斑马纹; Form: labelWidth 80-120px, grid 2-4 列
|
|
221
|
-
|
|
222
|
-
### APP (Carmg-H5) tokens — Vant 3
|
|
223
|
-
- `--van-primary-color: #1989fa`, success #07c160, warning #ff976a, danger #ee0a24
|
|
224
|
-
- max-width: 375px, 底部 tab bar
|
|
225
|
-
|
|
226
|
-
详细原型规则见 `.qoder/skills/prototype-generator/SKILL.md`。
|
|
@@ -1,134 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: wl-prd-quick
|
|
3
|
-
description: "小改动极速出 Mini-PRD(6 章)。加字段/加按钮/改文案/加导出等零星需求专用。"
|
|
4
|
-
argument-hint: "[小改动需求描述] 例: 保单列表加个导出按钮"
|
|
5
|
-
auto-approve: true
|
|
6
|
-
allowed-tools: [Read, Glob, Grep, Bash, Write, Edit]
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
# /wl-prd-quick - 小改动极速出 Mini-PRD
|
|
10
|
-
|
|
11
|
-
User input: $ARGUMENTS
|
|
12
|
-
|
|
13
|
-
> **定位:只管"小改动"。** 加字段、加按钮、改文案、加导出、改校验规则这类零星需求。
|
|
14
|
-
> 目标 2-3 轮出稿。正经需求(新模块/新业务/新流程)请走 `/wl-prd-full`。
|
|
15
|
-
|
|
16
|
-
## 🔒 语言锁
|
|
17
|
-
|
|
18
|
-
**全部输出必须简体中文。** 含标题、章节名、字段名、表格内容。违反 = 产出不合格。
|
|
19
|
-
|
|
20
|
-
---
|
|
21
|
-
|
|
22
|
-
## 🔧 环境自检(QoderWork 桌面端 vs Qoder IDE/CLI)
|
|
23
|
-
|
|
24
|
-
**QoderWork 桌面端的工作目录是临时会话目录(workspace/xxx),不是仓库根!** 相对路径 `.qoder/scripts/xxx` 会失效。
|
|
25
|
-
|
|
26
|
-
**第一步:确定仓库根 R**(后续所有脚本/模板路径都用它):
|
|
27
|
-
```bash
|
|
28
|
-
# QoderWork 桌面端(工作目录不在仓库):
|
|
29
|
-
R=$(python ~/.qoderwork/repo_root.py) # 输出仓库根绝对路径
|
|
30
|
-
# Qoder IDE/CLI(工作目录就是仓库):
|
|
31
|
-
R=. # 直接用相对路径
|
|
32
|
-
```
|
|
33
|
-
若 `repo_root.py` 报错找不到,先在仓库里跑 `python .qoder/scripts/install_qoderwork.py`。
|
|
34
|
-
|
|
35
|
-
**取上下文双轨(优先 MCP,QoderWork 桌面端有 MCP 工具):**
|
|
36
|
-
- **QoderWork 桌面端**:直接调 MCP 工具 `mcp__qoder-knowledge-graph__context_pack(keyword='保险', platform='web', role='pm')`,**不要跑 python 脚本**
|
|
37
|
-
- **IDE/CLI**:`python "$R/.qoder/scripts/kg.py" context 保险 --platform web --role pm`
|
|
38
|
-
|
|
39
|
-
> 判断依据:能看到 `mcp__` 开头的工具 → 用 MCP;看不到 → 用 kg.py 脚本。
|
|
40
|
-
|
|
41
|
-
---
|
|
42
|
-
|
|
43
|
-
## ⚠️ STEP 0: 必须先问平台(任何操作前的第一步)
|
|
44
|
-
|
|
45
|
-
```
|
|
46
|
-
这个需求是针对哪个平台?
|
|
47
|
-
|
|
48
|
-
1. **Web 管理端** (fywl-ui) - Ant Design Vue + VxeGrid 风格
|
|
49
|
-
2. **APP 移动端** (Carmg-H5) - Vant 风格
|
|
50
|
-
3. **两端都要**
|
|
51
|
-
|
|
52
|
-
请选择 (1/2/3):
|
|
53
|
-
```
|
|
54
|
-
|
|
55
|
-
**绝不自动判断。问完就停,整条回复到此结束。** 等用户回答平台后再开始。
|
|
56
|
-
|
|
57
|
-
| 回答 | 平台 | 搜索 flag | 原型模板 |
|
|
58
|
-
|------|------|-----------|----------|
|
|
59
|
-
| 1 / Web / PC / 管理端 | Web | `--platform web` | prototype-web.html |
|
|
60
|
-
| 2 / APP / H5 / 移动端 | APP | `--platform app` | prototype-app.html |
|
|
61
|
-
| 3 / 都要 / 两端 | Both | 都跑 | 两个模板,两份原型 |
|
|
62
|
-
|
|
63
|
-
---
|
|
64
|
-
|
|
65
|
-
## STEP 1: 判断是不是真"小改动"(保险)
|
|
66
|
-
|
|
67
|
-
收到平台回答后,先快速判断需求规模。**只满足以下之一才算 quick 范围**:
|
|
68
|
-
- 加/删/改一个具体字段、按钮、文案
|
|
69
|
-
- 加一个导出/导入
|
|
70
|
-
- 改一个校验规则
|
|
71
|
-
- 小幅调整一个已有页面的交互
|
|
72
|
-
|
|
73
|
-
**若发现是新模块/新业务/新流程/多页面联动 → 停下提示:**
|
|
74
|
-
```
|
|
75
|
-
这个需求看起来是新模块/新业务,超出 quick 范围。
|
|
76
|
-
建议改用 /wl-prd-full 走完整档(13 章完整 PRD + 原型 + 3 道质量锁)。
|
|
77
|
-
要切到 /wl-prd-full 吗?(y/n)
|
|
78
|
-
```
|
|
79
|
-
|
|
80
|
-
---
|
|
81
|
-
|
|
82
|
-
## STEP 2: 3 步极速流程
|
|
83
|
-
|
|
84
|
-
**① 一次取全上下文(双轨,按环境自检段判断)**
|
|
85
|
-
- **QoderWork 桌面端(有 MCP)**:调 `mcp__qoder-knowledge-graph__context_pack(keyword='<关键词>', platform='web', role='pm')`
|
|
86
|
-
- **IDE/CLI**:`python "$R/.qoder/scripts/kg.py" context <关键词> --platform <web|app> --role pm`
|
|
87
|
-
|
|
88
|
-
只读 context 列出的最相关 1 个 Vue 文件。
|
|
89
|
-
|
|
90
|
-
**② 一次 Write:Mini-PRD + 微型原型**
|
|
91
|
-
- Mini-PRD 用模板(6 章:功能入口/需求背景/需求说明/影响范围/验收标准/不在本次范围)
|
|
92
|
-
- IDE/CLI 读:`$R/.qoder/templates/prd-quick-template.md`
|
|
93
|
-
- QoderWork 桌面端:`Read "<R>/.qoder/templates/prd-quick-template.md"`(R 是 repo_root.py 输出的绝对路径)
|
|
94
|
-
- **mode 标记必须写 `<!-- mode: quick -->`**(模板已带,别删)—— eval_prd 靠它跳过 EVA 完整检查
|
|
95
|
-
- 微型原型:只画 diff 部分(改了什么画什么),新功能用模板的 `highlight-new` 类高亮
|
|
96
|
-
- REQ-ID 用原子分配器:
|
|
97
|
-
```bash
|
|
98
|
-
python -c "import sys; sys.path.insert(0,r'$R/.qoder/scripts'); from common.reqid import allocate_req_id; n=allocate_req_id(); print('REQ-%d-%03d' % (__import__('datetime').date.today().year, n))"
|
|
99
|
-
```
|
|
100
|
-
(IDE/CLI 里 `$R`=`.`,可简化为原写法)
|
|
101
|
-
|
|
102
|
-
**③ "出好了,确认发布吗?"** → 确认后归档 + push(见下)
|
|
103
|
-
|
|
104
|
-
> quick 模式**跳过**:EVA 完整检查、历史 PRD 检索、style JSON(模板已含正确颜色)、多轮确认(只一次)。
|
|
105
|
-
> 只跑"字段锁":PRD 字段都来自 context_pack 真实字段,无发明字段。
|
|
106
|
-
|
|
107
|
-
---
|
|
108
|
-
|
|
109
|
-
## 发布(确认后 3 合 1)
|
|
110
|
-
|
|
111
|
-
> 以下命令在 IDE/CLI 里 `$R`=`.`;QoderWork 桌面端 `$R` 由 `repo_root.py` 确定。**这 3 步必须用绝对路径在仓库根下跑(collect_prds/team_sync 依赖仓库工作目录)。**
|
|
112
|
-
|
|
113
|
-
```bash
|
|
114
|
-
cd "$R" && python .qoder/scripts/collect_prds.py # 归档到 data/docs/prd/,立刻可搜
|
|
115
|
-
cd "$R" && python .qoder/scripts/team_sync.py push # 推送到团队
|
|
116
|
-
cd "$R" && python .qoder/scripts/archive_prd.py <PRD> # 可选,归档个人时间线,失败不阻塞
|
|
117
|
-
```
|
|
118
|
-
用户**永不接触 git**。team_sync 打印 SYNC_CONFLICT 时,AI 按提示自行解决。
|
|
119
|
-
|
|
120
|
-
这 3 步都是幂等的——重复说"发布"不会出问题。
|
|
121
|
-
|
|
122
|
-
---
|
|
123
|
-
|
|
124
|
-
## Storage
|
|
125
|
-
|
|
126
|
-
```
|
|
127
|
-
Draft → <R>/workspace/members/{developer}/drafts/REQ-{ID}-{desc}.md
|
|
128
|
-
原型 → <R>/workspace/members/{developer}/drafts/prototype-{feature}.html
|
|
129
|
-
```
|
|
130
|
-
> `<R>` = 仓库根。QoderWork 桌面端注意:PRD/原型文件必须写到**仓库的** workspace 目录(用绝对路径),不要写到临时会话目录。
|
|
131
|
-
|
|
132
|
-
## 图标绝对禁止 emoji
|
|
133
|
-
|
|
134
|
-
Web 用 data/index/icon-reference.json 的 Ant Design SVG;APP 用 Vant 字体图标。
|