@andyqiu/codeforge 0.3.12 → 0.3.13
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/agents/discover-challenger.md +161 -0
- package/agents/discover.md +357 -0
- package/codeforge.json +24 -0
- package/dist/index.js +1 -1
- package/install.ps1 +555 -516
- package/install.sh +33 -0
- package/package.json +7 -1
- package/skills/ambiguity-gate/SKILL.md +99 -0
- package/skills/devils-advocate/SKILL.md +74 -0
- package/skills/ears-zh/SKILL.md +126 -0
- package/skills/example-mapping/SKILL.md +96 -0
- package/skills/success-criteria/SKILL.md +84 -0
- package/skills/weighted-dimensions/SKILL.md +109 -0
- package/workflows/discover-flow.yaml +150 -0
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
# ──────────────────────────────────────────────────────────────
|
|
2
|
+
# discover-flow.yaml — Discover Agent 5 阶段需求澄清流程
|
|
3
|
+
# trigger: /discover
|
|
4
|
+
# 流程:phase-a 入口门控 → phase-b JTBD 挖掘 → phase-c 对抗审查
|
|
5
|
+
# → phase-d 假设暴露 + 补边界 → phase-e PRD + handoff 生成
|
|
6
|
+
#
|
|
7
|
+
# ⚠️ Schema 适配说明(reviewer REQUEST_CHANGES 修复 1,选项 A):
|
|
8
|
+
# lib/workflow-loader.ts 的 WorkflowSchema.strict() 只接受
|
|
9
|
+
# name / description / version / trigger / context_template /
|
|
10
|
+
# max_loops / steps 这些顶层字段;StepSchema.strict() 只接受
|
|
11
|
+
# name / agent / description / inject_context / requires_human_approval /
|
|
12
|
+
# actions / on_error / max_retries / timeout / auto_feedback /
|
|
13
|
+
# on_decision —— 不允许 id / skills / exit_when / on_success /
|
|
14
|
+
# on_fail / artifacts。
|
|
15
|
+
#
|
|
16
|
+
# Session 3 原始设计中那些"声明字段"的语义(每阶段允许调哪些
|
|
17
|
+
# skill、退出条件、产物路径)按 ADR-discover-phase1 D4 决策属于
|
|
18
|
+
# **声明 ≠ 调用**:workflow runner 不解析、不强制,由 discover
|
|
19
|
+
# agent 在对话中通过 opencode `skill` 工具按需执行。因此本次修复
|
|
20
|
+
# 把这些信息全部下沉到每个 step 的 `description:` 文本块中作为
|
|
21
|
+
# 可审计的契约声明,loader 把它当普通字符串处理,不影响 schema
|
|
22
|
+
# 校验,"声明仍是 source of truth"。
|
|
23
|
+
# ──────────────────────────────────────────────────────────────
|
|
24
|
+
|
|
25
|
+
name: discover-flow
|
|
26
|
+
version: 1.0.0
|
|
27
|
+
description: |
|
|
28
|
+
双 agent(discover + discover-challenger)协作的 5 阶段需求澄清流程:
|
|
29
|
+
phase-a 入口门控 → 判断用户输入是否清晰到可进入挖掘
|
|
30
|
+
phase-b JTBD 挖掘 → 澄清 job-to-be-done + 核心 user story
|
|
31
|
+
phase-c 对抗审查 → 召唤 challenger 子 agent 做反 sycophancy 强对抗
|
|
32
|
+
phase-d 假设暴露 → 处理红旗 + Example Mapping 补 case
|
|
33
|
+
phase-e PRD+handoff → 输出 PRD.md + handoff.yaml
|
|
34
|
+
本 workflow 不直接调用 skill,由 discover agent 按 ## Skill 路由表 决定。
|
|
35
|
+
|
|
36
|
+
trigger: /discover
|
|
37
|
+
max_loops: 5
|
|
38
|
+
|
|
39
|
+
steps:
|
|
40
|
+
- name: phase-a 入口模糊度门控
|
|
41
|
+
agent: discover
|
|
42
|
+
description: |
|
|
43
|
+
[阶段 A] 入口门控
|
|
44
|
+
─────────────────────────────────────
|
|
45
|
+
职责:首次接到用户输入,判断 5 维度清晰度(who/what/why/scope/criteria);
|
|
46
|
+
模糊则要求用户补充,清晰则进入 phase-b。
|
|
47
|
+
|
|
48
|
+
允许调用 skill(声明,由 agent 按需触发,runner 不强制):
|
|
49
|
+
- ambiguity-gate
|
|
50
|
+
- weighted-dimensions
|
|
51
|
+
|
|
52
|
+
退出条件(声明,由 agent 自检;不通过则在本 step 继续澄清):
|
|
53
|
+
- weighted_score >= 0.5
|
|
54
|
+
- user_intent 字段已确立
|
|
55
|
+
|
|
56
|
+
成功后跳转:phase-b
|
|
57
|
+
失败回退:留在本 step 继续追问
|
|
58
|
+
|
|
59
|
+
产物(可选):
|
|
60
|
+
- handoff.draft.yaml(草稿,本阶段非必需)
|
|
61
|
+
|
|
62
|
+
- name: phase-b JTBD 挖掘
|
|
63
|
+
agent: discover
|
|
64
|
+
description: |
|
|
65
|
+
[阶段 B] JTBD 挖掘
|
|
66
|
+
─────────────────────────────────────
|
|
67
|
+
职责:澄清 job-to-be-done + 核心 user story;中段调用 example-mapping
|
|
68
|
+
挖 BDD 场景;每轮末调用 weighted-dimensions 更新加权分。
|
|
69
|
+
|
|
70
|
+
允许调用 skill(声明):
|
|
71
|
+
- weighted-dimensions
|
|
72
|
+
- example-mapping
|
|
73
|
+
|
|
74
|
+
退出条件(声明):
|
|
75
|
+
- weighted_score >= 0.65
|
|
76
|
+
- core_user_story 字段已确立
|
|
77
|
+
|
|
78
|
+
成功后跳转:phase-c
|
|
79
|
+
失败回退:留在本 step 继续澄清
|
|
80
|
+
|
|
81
|
+
产物(必须):
|
|
82
|
+
- handoff.draft.yaml
|
|
83
|
+
|
|
84
|
+
- name: phase-c 对抗审查
|
|
85
|
+
agent: discover
|
|
86
|
+
description: |
|
|
87
|
+
[阶段 C] 对抗审查
|
|
88
|
+
─────────────────────────────────────
|
|
89
|
+
职责:召唤 discover-challenger 子 agent 前,调用 devils-advocate 准备
|
|
90
|
+
4 种 combo(A/B/C/D)对抗框架;challenger 返回红旗判定
|
|
91
|
+
(YES/NO)后由 discover 决定下一步。
|
|
92
|
+
|
|
93
|
+
允许调用 skill(声明):
|
|
94
|
+
- devils-advocate
|
|
95
|
+
- weighted-dimensions
|
|
96
|
+
|
|
97
|
+
退出条件(声明):
|
|
98
|
+
- red_flags_handled == true(challenger 报告中的红旗已全部回应)
|
|
99
|
+
|
|
100
|
+
成功后跳转:phase-d
|
|
101
|
+
失败回退:留在本 step 继续处理红旗
|
|
102
|
+
|
|
103
|
+
产物(必须):
|
|
104
|
+
- handoff.draft.yaml(更新红旗处理记录)
|
|
105
|
+
|
|
106
|
+
- name: phase-d 假设暴露与补边界
|
|
107
|
+
agent: discover
|
|
108
|
+
description: |
|
|
109
|
+
[阶段 D] 假设暴露 + 补边界
|
|
110
|
+
─────────────────────────────────────
|
|
111
|
+
职责:处理 challenger 报告中的红旗 + 漏洞;末段调用 example-mapping
|
|
112
|
+
补充边界 case;Question 卡 ≤ 2 张时收敛进入 phase-e。
|
|
113
|
+
|
|
114
|
+
允许调用 skill(声明):
|
|
115
|
+
- example-mapping
|
|
116
|
+
- weighted-dimensions
|
|
117
|
+
|
|
118
|
+
退出条件(声明):
|
|
119
|
+
- red_flags == [] (或全部已处理)
|
|
120
|
+
- weighted_score >= 0.75
|
|
121
|
+
|
|
122
|
+
成功后跳转:phase-e
|
|
123
|
+
失败回退:留在本 step 继续补边界
|
|
124
|
+
|
|
125
|
+
产物(必须):
|
|
126
|
+
- handoff.draft.yaml(更新边界 case)
|
|
127
|
+
|
|
128
|
+
- name: phase-e PRD 与 handoff 生成
|
|
129
|
+
agent: discover
|
|
130
|
+
description: |
|
|
131
|
+
[阶段 E] PRD + handoff 生成
|
|
132
|
+
─────────────────────────────────────
|
|
133
|
+
职责:调用 success-criteria 把 user story + example mapping 转成 SMART
|
|
134
|
+
验收清单;调用 ears-zh 把验收套 EARS 中文句式;最终产出
|
|
135
|
+
PRD.md + handoff.yaml。
|
|
136
|
+
|
|
137
|
+
允许调用 skill(声明):
|
|
138
|
+
- success-criteria
|
|
139
|
+
- ears-zh
|
|
140
|
+
|
|
141
|
+
退出条件(声明):
|
|
142
|
+
- handoff_yaml_complete == true
|
|
143
|
+
- weighted_score >= 0.8
|
|
144
|
+
|
|
145
|
+
成功后跳转:__end__(workflow 结束)
|
|
146
|
+
失败回退:留在本 step 继续完善 PRD
|
|
147
|
+
|
|
148
|
+
产物(必须):
|
|
149
|
+
- PRD.md
|
|
150
|
+
- handoff.yaml
|