@andyqiu/codeforge 0.3.11 → 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/README.md +45 -3
- package/agents/codeforge.md +5 -4
- package/agents/coder-deep.md +3 -0
- package/agents/coder-quick.md +3 -0
- package/agents/coder.md +3 -0
- package/agents/discover-challenger.md +161 -0
- package/agents/discover.md +357 -0
- package/agents/planner.md +12 -8
- package/agents/reviewer.md +3 -0
- package/assets/adr-init/.github/pull_request_template.md +22 -0
- package/assets/adr-init/docs/adr/README.md +105 -0
- package/assets/adr-init/docs/adr/template.md +83 -0
- package/assets/adr-init/githooks/pre-commit.sh +46 -0
- package/assets/adr-init/githooks/pre-push.sh +23 -0
- package/assets/adr-init/scripts/adr-check.mjs +428 -0
- package/assets/adr-init/scripts/adr-index-sync.mjs +151 -0
- package/bin/codeforge.mjs +96 -3
- package/codeforge.json +24 -0
- package/commands/adr-init.md +67 -0
- package/dist/adr-init.js +207 -0
- package/dist/index.js +1691 -580
- package/install.ps1 +555 -516
- package/install.sh +33 -0
- package/package.json +22 -5
- package/scripts/sync-agent-models.mjs +1 -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/bugfix.yaml +3 -3
- package/workflows/discover-flow.yaml +150 -0
- package/workflows/feature-dev.yaml +3 -3
- package/workflows/parallel-explore.yaml +1 -1
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: weighted-dimensions
|
|
3
|
+
description: 5 维加权打分逻辑;输出 weighted_score ∈ [0,1],供退出条件判断
|
|
4
|
+
metadata:
|
|
5
|
+
owner: codeforge
|
|
6
|
+
group: discover
|
|
7
|
+
version: 1.0.0
|
|
8
|
+
allowed_tools: [read]
|
|
9
|
+
mode: on-demand
|
|
10
|
+
trigger: 每轮对话结束前 / Phase 跳转判定
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# Weighted Dimensions
|
|
14
|
+
|
|
15
|
+
## 5 个维度定义
|
|
16
|
+
|
|
17
|
+
| 维度 | 含义 | 典型证据 |
|
|
18
|
+
|---|---|---|
|
|
19
|
+
| **Functional** | 功能目标是否清晰:做什么、输出什么、核心流程是否可描述 | 用户能用一句话说出"给谁解决什么 Job" |
|
|
20
|
+
| **UX** | 用户体验诉求:交互形式、感知质量、用户旅程中的关键时刻 | 用户提到了"快"/"简单"/"不要让我多点"等具体体验锚点 |
|
|
21
|
+
| **Technical** | 技术可行性边界:性能要求、技术栈约束、已知依赖或限制 | 提及响应时间、系统限制、第三方 API、数据量级等 |
|
|
22
|
+
| **Constraints** | 业务约束:时间窗口、合规、资源限制、显式排除项 | 提及"本期只做……"/"不做……"/"必须兼容……" |
|
|
23
|
+
| **Edge Cases** | 边界场景:异常路径、零状态、错误处理、极端用户行为 | 用户或 discover 主动列举了"如果……怎么处理" |
|
|
24
|
+
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
## 加权公式
|
|
28
|
+
|
|
29
|
+
**默认权重分配**:
|
|
30
|
+
|
|
31
|
+
| 维度 | 权重 |
|
|
32
|
+
|---|---|
|
|
33
|
+
| Functional | **30%** |
|
|
34
|
+
| UX | **25%** |
|
|
35
|
+
| Technical | **20%** |
|
|
36
|
+
| Constraints | **15%** |
|
|
37
|
+
| Edge Cases | **10%** |
|
|
38
|
+
|
|
39
|
+
**计算公式**:
|
|
40
|
+
|
|
41
|
+
```
|
|
42
|
+
weighted_score = Σ (维度得分 × 权重)
|
|
43
|
+
= F×0.30 + U×0.25 + T×0.20 + C×0.15 + E×0.10
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
其中每个维度得分 ∈ [0, 1.0](0 = 完全未知,0.5 = 部分清晰,1.0 = 充分明确)。
|
|
47
|
+
|
|
48
|
+
**示例**:
|
|
49
|
+
|
|
50
|
+
```
|
|
51
|
+
F=0.8, U=0.5, T=0.3, C=0.6, E=0.2
|
|
52
|
+
weighted_score = 0.8×0.30 + 0.5×0.25 + 0.3×0.20 + 0.6×0.15 + 0.2×0.10
|
|
53
|
+
= 0.24 + 0.13 + 0.06 + 0.09 + 0.02
|
|
54
|
+
= 0.54
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
---
|
|
58
|
+
|
|
59
|
+
## 阈值表
|
|
60
|
+
|
|
61
|
+
| 阶段跳转 | 所需 weighted_score | 备注 |
|
|
62
|
+
|---|---|---|
|
|
63
|
+
| Phase A → B | **≥ 0.5** | 且 Functional ≥ 0.7,用户能说出核心 Job |
|
|
64
|
+
| Phase B → C | **≥ 0.65** | ≥ 3 个具体场景已确认 |
|
|
65
|
+
| Phase C → D | —(由 challenger 红旗处理状态决定) | 至少 1 轮 challenger 反对被用户正面回应 |
|
|
66
|
+
| Phase D → E | **≥ 0.8** | 或 0.6-0.8 且用户明确说"够了" |
|
|
67
|
+
|
|
68
|
+
---
|
|
69
|
+
|
|
70
|
+
## 评分表输出模板
|
|
71
|
+
|
|
72
|
+
当用户触发「评估 / 打分 / 评分 / 严谨模式 / 看进度 / 澄清度 / 现在多少分 / score / rate」关键词时,或进入 Phase E 前,按此格式输出:
|
|
73
|
+
|
|
74
|
+
```
|
|
75
|
+
─────────────────────────────────────
|
|
76
|
+
本轮澄清度评分(满分 1.0):
|
|
77
|
+
| 维度 | 权重 | 当前 | 加权 |
|
|
78
|
+
|---------------|------|------|------|
|
|
79
|
+
| Functional | 30% | 0.8 | 0.24 |
|
|
80
|
+
| UX | 25% | 0.5 | 0.13 |
|
|
81
|
+
| Technical | 20% | 0.3 | 0.06 |
|
|
82
|
+
| Constraints | 15% | 0.6 | 0.09 |
|
|
83
|
+
| Edge Cases | 10% | 0.2 | 0.02 |
|
|
84
|
+
| **总分** | | | 0.54 |
|
|
85
|
+
|
|
86
|
+
档位:Insufficient (<0.6) → 继续澄清
|
|
87
|
+
建议下一步:聚焦 Technical 维度(本轮最低分)
|
|
88
|
+
─────────────────────────────────────
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
**档位规则**:
|
|
92
|
+
|
|
93
|
+
- **≥ 0.8** → Sufficient,建议进 Phase E 产出 PRD
|
|
94
|
+
- **0.6 ~ 0.8** → Acceptable,可选退出(用户拍板)
|
|
95
|
+
- **< 0.6** → Insufficient,必须继续澄清
|
|
96
|
+
|
|
97
|
+
---
|
|
98
|
+
|
|
99
|
+
## 维度打分指南
|
|
100
|
+
|
|
101
|
+
**Functional 常见打分依据**:
|
|
102
|
+
- 0.0:只说了"做个东西",完全不知道做什么
|
|
103
|
+
- 0.5:知道大方向("做个导出"),但不知道输出形式、流程
|
|
104
|
+
- 1.0:输入输出明确,核心流程可描述,用户能说出 Job
|
|
105
|
+
|
|
106
|
+
**Edge Cases 常见打分依据**:
|
|
107
|
+
- 0.0:完全没讨论过边界
|
|
108
|
+
- 0.5:讨论了 1-2 个正常 happy path,无异常路径
|
|
109
|
+
- 1.0:覆盖了至少 3 个边界场景(空状态/错误/极端输入)
|
package/workflows/bugfix.yaml
CHANGED
|
@@ -19,7 +19,7 @@ description: |
|
|
|
19
19
|
7. reviewer 沉淀 bugfix 经验回 KH
|
|
20
20
|
|
|
21
21
|
trigger: /debug
|
|
22
|
-
# ADR-
|
|
22
|
+
# ADR:workflow-on-decision-branching — 跨 step 反馈循环上限
|
|
23
23
|
max_loops: 3
|
|
24
24
|
|
|
25
25
|
steps:
|
|
@@ -61,7 +61,7 @@ steps:
|
|
|
61
61
|
description: 按 planner 选定的根因假设改代码,让复现测试变绿
|
|
62
62
|
inject_context:
|
|
63
63
|
forbid_direct_edit: true
|
|
64
|
-
# ADR-
|
|
64
|
+
# ADR:workflow-auto-feedback-loop: 完成 stage 后自动跑 npm test 自纠
|
|
65
65
|
# bugfix 失败本质是假设错——escalate 给 planner 重出根因假设,而不是 reviewer
|
|
66
66
|
auto_feedback:
|
|
67
67
|
test_cmd: "npm test"
|
|
@@ -79,7 +79,7 @@ steps:
|
|
|
79
79
|
args:
|
|
80
80
|
action: list
|
|
81
81
|
status: pending
|
|
82
|
-
# ADR-
|
|
82
|
+
# ADR:workflow-on-decision-branching: 三档决策驱动;BLOCK 回 planner 重出根因假设(与 auto_feedback escalate_to=planner 同语义)
|
|
83
83
|
on_decision:
|
|
84
84
|
APPROVE: continue # 进入"落地" step
|
|
85
85
|
REQUEST_CHANGES:
|
|
@@ -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
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
# ──────────────────────────────────────────────────────────────
|
|
8
8
|
|
|
9
9
|
name: feature-dev
|
|
10
|
-
# ADR-
|
|
10
|
+
# ADR:workflow-on-decision-branching — 跨 step 反馈循环上限(reviewer→coder REQUEST_CHANGES 反复 goto 兜底)
|
|
11
11
|
max_loops: 3
|
|
12
12
|
version: 1.0.0
|
|
13
13
|
description: |
|
|
@@ -41,7 +41,7 @@ steps:
|
|
|
41
41
|
description: 严格按方案 stage 改动;测试失败立刻停下汇报
|
|
42
42
|
inject_context:
|
|
43
43
|
forbid_direct_edit: true
|
|
44
|
-
# ADR-
|
|
44
|
+
# ADR:workflow-auto-feedback-loop: 完成 stage 后自动跑 npm test 自纠(最多 3 轮,失败 escalate reviewer)
|
|
45
45
|
auto_feedback:
|
|
46
46
|
test_cmd: "npm test"
|
|
47
47
|
max_retries: 3
|
|
@@ -60,7 +60,7 @@ steps:
|
|
|
60
60
|
args:
|
|
61
61
|
action: list
|
|
62
62
|
status: pending
|
|
63
|
-
# ADR-
|
|
63
|
+
# ADR:workflow-on-decision-branching: 三档决策驱动 workflow 跳转
|
|
64
64
|
on_decision:
|
|
65
65
|
APPROVE: continue # 进入"落地" step
|
|
66
66
|
REQUEST_CHANGES:
|