maestro-flow 0.5.43 → 0.5.44
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/skills/maestro-ralph-agent/SKILL.md +697 -0
- package/.agents/skills/maestro-ralph-agent-execute/SKILL.md +461 -0
- package/.agy/skills/maestro-ralph-agent/SKILL.md +696 -0
- package/.agy/skills/maestro-ralph-agent-execute/SKILL.md +457 -0
- package/.claude/commands/maestro-ralph-agent-execute.md +459 -0
- package/.claude/commands/maestro-ralph-agent.md +695 -0
- package/dashboard/dist-server/dashboard/src/server/wiki/wiki-indexer.js +7 -7
- package/dashboard/dist-server/dashboard/src/server/wiki/wiki-indexer.js.map +1 -1
- package/dashboard/dist-server/src/graph/kg/credibility.d.ts +2 -2
- package/dashboard/dist-server/src/graph/kg/credibility.js +10 -5
- package/dashboard/dist-server/src/graph/kg/credibility.js.map +1 -1
- package/dashboard/dist-server/src/graph/kg/db/connection.d.ts +3 -2
- package/dashboard/dist-server/src/graph/kg/db/connection.js +28 -16
- package/dashboard/dist-server/src/graph/kg/db/connection.js.map +1 -1
- package/dashboard/dist-server/src/graph/kg/db/queries.js +4 -4
- package/dashboard/dist-server/src/graph/kg/db/queries.js.map +1 -1
- package/dashboard/dist-server/src/graph/kg/engine.d.ts +1 -1
- package/dashboard/dist-server/src/graph/kg/extraction/knowledge/domain-extractor.d.ts +1 -1
- package/dashboard/dist-server/src/graph/kg/extraction/knowledge/domain-extractor.js +8 -4
- package/dashboard/dist-server/src/graph/kg/extraction/knowledge/domain-extractor.js.map +1 -1
- package/dashboard/dist-server/src/graph/kg/resolution/knowledge-resolver.d.ts +3 -3
- package/dashboard/dist-server/src/graph/kg/resolution/knowledge-resolver.js +3 -2
- package/dashboard/dist-server/src/graph/kg/resolution/knowledge-resolver.js.map +1 -1
- package/dashboard/dist-server/src/graph/kg/surface/hook-injector.js +2 -4
- package/dashboard/dist-server/src/graph/kg/surface/hook-injector.js.map +1 -1
- package/dashboard/dist-server/src/search/daemon-client.d.ts +3 -25
- package/dashboard/dist-server/src/search/daemon-client.js +3 -25
- package/dashboard/dist-server/src/search/daemon-client.js.map +1 -1
- package/dashboard/dist-server/src/search/daemon-types.d.ts +29 -0
- package/dashboard/dist-server/src/search/daemon-types.js +31 -0
- package/dashboard/dist-server/src/search/daemon-types.js.map +1 -0
- package/dist/src/agents/api-explore/agent-loop.d.ts +1 -1
- package/dist/src/agents/api-explore/agent-loop.d.ts.map +1 -1
- package/dist/src/agents/api-explore/agent-loop.js +32 -17
- package/dist/src/agents/api-explore/agent-loop.js.map +1 -1
- package/dist/src/agents/api-explore/prompt-parser.js +5 -5
- package/dist/src/agents/api-explore/prompt-parser.js.map +1 -1
- package/dist/src/agents/api-explore/runner.d.ts.map +1 -1
- package/dist/src/agents/api-explore/runner.js +0 -2
- package/dist/src/agents/api-explore/runner.js.map +1 -1
- package/dist/src/agents/api-explore/system-prompt.d.ts.map +1 -1
- package/dist/src/agents/api-explore/system-prompt.js +30 -22
- package/dist/src/agents/api-explore/system-prompt.js.map +1 -1
- package/dist/src/agents/api-explore/tools.d.ts +1 -0
- package/dist/src/agents/api-explore/tools.d.ts.map +1 -1
- package/dist/src/agents/api-explore/tools.js +219 -50
- package/dist/src/agents/api-explore/tools.js.map +1 -1
- package/dist/src/commands/search.d.ts.map +1 -1
- package/dist/src/commands/search.js +10 -4
- package/dist/src/commands/search.js.map +1 -1
- package/dist/src/commands/update.d.ts.map +1 -1
- package/dist/src/commands/update.js +89 -21
- package/dist/src/commands/update.js.map +1 -1
- package/dist/src/graph/db/connection.d.ts +3 -2
- package/dist/src/graph/db/connection.d.ts.map +1 -1
- package/dist/src/graph/db/connection.js +28 -16
- package/dist/src/graph/db/connection.js.map +1 -1
- package/dist/src/graph/db/queries.d.ts.map +1 -1
- package/dist/src/graph/db/queries.js.map +1 -1
- package/dist/src/graph/kg/credibility.d.ts +2 -2
- package/dist/src/graph/kg/credibility.d.ts.map +1 -1
- package/dist/src/graph/kg/credibility.js +10 -5
- package/dist/src/graph/kg/credibility.js.map +1 -1
- package/dist/src/graph/kg/db/connection.d.ts +3 -2
- package/dist/src/graph/kg/db/connection.d.ts.map +1 -1
- package/dist/src/graph/kg/db/connection.js +28 -16
- package/dist/src/graph/kg/db/connection.js.map +1 -1
- package/dist/src/graph/kg/db/queries.js +4 -4
- package/dist/src/graph/kg/db/queries.js.map +1 -1
- package/dist/src/graph/kg/engine.d.ts +1 -1
- package/dist/src/graph/kg/engine.d.ts.map +1 -1
- package/dist/src/graph/kg/extraction/knowledge/domain-extractor.d.ts +1 -1
- package/dist/src/graph/kg/extraction/knowledge/domain-extractor.d.ts.map +1 -1
- package/dist/src/graph/kg/extraction/knowledge/domain-extractor.js +8 -4
- package/dist/src/graph/kg/extraction/knowledge/domain-extractor.js.map +1 -1
- package/dist/src/graph/kg/resolution/knowledge-resolver.d.ts +3 -3
- package/dist/src/graph/kg/resolution/knowledge-resolver.d.ts.map +1 -1
- package/dist/src/graph/kg/resolution/knowledge-resolver.js +3 -2
- package/dist/src/graph/kg/resolution/knowledge-resolver.js.map +1 -1
- package/dist/src/graph/kg/surface/hook-injector.d.ts.map +1 -1
- package/dist/src/graph/kg/surface/hook-injector.js +2 -4
- package/dist/src/graph/kg/surface/hook-injector.js.map +1 -1
- package/dist/src/search/daemon-client.d.ts +3 -25
- package/dist/src/search/daemon-client.d.ts.map +1 -1
- package/dist/src/search/daemon-client.js +3 -25
- package/dist/src/search/daemon-client.js.map +1 -1
- package/dist/src/search/daemon-types.d.ts +30 -0
- package/dist/src/search/daemon-types.d.ts.map +1 -0
- package/dist/src/search/daemon-types.js +31 -0
- package/dist/src/search/daemon-types.js.map +1 -0
- package/dist/src/search/daemon.d.ts +2 -27
- package/dist/src/search/daemon.d.ts.map +1 -1
- package/dist/src/search/daemon.js +4 -60
- package/dist/src/search/daemon.js.map +1 -1
- package/dist/src/tools/wiki-search.d.ts.map +1 -1
- package/dist/src/tools/wiki-search.js +8 -2
- package/dist/src/tools/wiki-search.js.map +1 -1
- package/dist/src/utils/update-notices.js +12 -0
- package/dist/src/utils/update-notices.js.map +1 -1
- package/package.json +1 -3
|
@@ -0,0 +1,695 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: maestro-ralph-agent
|
|
3
|
+
description: Agent-orchestrated lifecycle — compose, dispatch Agent, evaluate decision, loop
|
|
4
|
+
argument-hint: "<intent> [-y] [--amend [change]] [--roadmap] | status | continue"
|
|
5
|
+
allowed-tools:
|
|
6
|
+
- Read
|
|
7
|
+
- Write
|
|
8
|
+
- Edit
|
|
9
|
+
- Bash
|
|
10
|
+
- Glob
|
|
11
|
+
- Grep
|
|
12
|
+
- Skill
|
|
13
|
+
- AskUserQuestion
|
|
14
|
+
- Agent
|
|
15
|
+
---
|
|
16
|
+
<purpose>
|
|
17
|
+
Agent-orchestrated variant of maestro-ralph. Same chain-building logic — but execution via Claude Agent instead of CLI delegation: compose prompt → dispatch Agent(maestro-ralph-agent-execute) → agent runs step loop → returns on decision/complete/fail → evaluate decision inline via Agent → re-dispatch → loop.
|
|
18
|
+
|
|
19
|
+
Session: `.workflow/.maestro/ralph-agent-{YYYYMMDD-HHmmss}/status.json`
|
|
20
|
+
|
|
21
|
+
Chain building(A_RESOLVE_PHASE → A_INFER_POSITION → A_BUILD_STEPS)、session schema、decomposition(A_DECOMPOSE_TASKS)逻辑同 ralph。
|
|
22
|
+
</purpose>
|
|
23
|
+
|
|
24
|
+
<deferred_reading>
|
|
25
|
+
- [ralph-amend-goal.md](~/.maestro/workflows/ralph-amend-goal.md) — read when `--amend` flag active for goal amendment flow
|
|
26
|
+
</deferred_reading>
|
|
27
|
+
|
|
28
|
+
<context>
|
|
29
|
+
$ARGUMENTS — intent text, flags, or keywords.
|
|
30
|
+
|
|
31
|
+
**Parse:**
|
|
32
|
+
```
|
|
33
|
+
-y flag → auto_confirm = true
|
|
34
|
+
--roadmap → wants_roadmap = true
|
|
35
|
+
--amend / -a → amend_mode = true
|
|
36
|
+
.md/.txt path → input_doc
|
|
37
|
+
status|continue → route keyword
|
|
38
|
+
Remaining → intent (amend_mode 时为 change_request)
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
**State files**:
|
|
42
|
+
- `.workflow/state.json` — artifact registry
|
|
43
|
+
- `.workflow/.maestro/ralph-agent-*/status.json` — session state
|
|
44
|
+
</context>
|
|
45
|
+
|
|
46
|
+
<invariants>
|
|
47
|
+
All ralph invariants (1-16) apply, with the following overrides:
|
|
48
|
+
|
|
49
|
+
- **Invariant 1 Agent 语义**: ralph-agent 不直接执行 step 内容;执行由 Agent(maestro-ralph-agent-execute) 完成
|
|
50
|
+
- **Invariant 2 覆盖**: ralph-agent 不调用 `Skill("maestro-ralph-execute")`;invariant 17-24 替代 handoff 机制,ralph-agent 持有完整循环
|
|
51
|
+
|
|
52
|
+
Additionally:
|
|
53
|
+
|
|
54
|
+
17. **ralph-agent owns the loop** — dispatch Agent → wait → verify → decide → re-dispatch 全部在本命令内完成;execute Agent 是被委派的执行者
|
|
55
|
+
18. **Dispatch via Agent()** — 使用 `Agent({ name, description, prompt })` 启动执行 Agent,Agent 内部调用 `Skill("maestro-ralph-agent-execute", "--session {session_id}")` 加载执行命令
|
|
56
|
+
19. **Synchronous dispatch** — Agent() 调用是同步的(等待返回),不需要 STOP/callback 模式
|
|
57
|
+
20. **Execute Agent 自治执行** — 执行 Agent 自主循环处理所有 pending 执行 step,遇到 decision 节点时停止并返回;执行 Agent 内部调用 `maestro ralph complete` 上报(agent 上报)
|
|
58
|
+
21. **Decision evaluation inline** — decision 节点不 handoff,通过 `Agent()` 启动分析 Agent 在本循环内评估
|
|
59
|
+
22. **Agent return 解析** — 从 Agent 返回文本中解析执行结果(`---AGENT-STATUS---` 块),替代 `---RESULT---` 解析
|
|
60
|
+
23. **No CLI delegation** — 本命令不使用 `maestro delegate`;执行和评估均通过 Agent() 完成
|
|
61
|
+
24. **No inline skill execution** — 本命令不执行 skill 逻辑;执行由 Agent(maestro-ralph-agent-execute) 完成
|
|
62
|
+
</invariants>
|
|
63
|
+
|
|
64
|
+
<state_machine>
|
|
65
|
+
|
|
66
|
+
Chain-building states + 执行循环 states:
|
|
67
|
+
|
|
68
|
+
<states>
|
|
69
|
+
S_PARSE_ROUTE — 解析参数、路由入口
|
|
70
|
+
S_STATUS — 显示 session 进度
|
|
71
|
+
S_CONTINUE — 恢复执行
|
|
72
|
+
S_RESOLVE_PHASE — 解析 phase + phase_is_new + milestone PERSIST: session.phase, session.phase_is_new, session.milestone
|
|
73
|
+
S_INFER — 推断 lifecycle_position PERSIST: session.lifecycle_position, session.wants_roadmap
|
|
74
|
+
S_RESOLVE_SCOPE — 读 macro analyze conclusions.scope_verdict PERSIST: session.scope_verdict, session.analyze_macro_id
|
|
75
|
+
S_QUALITY_MODE — 决定质量管线模式 PERSIST: session.quality_mode
|
|
76
|
+
S_PLANNING_MODE — 决定统一/独立规划模式 PERSIST: session.planning_mode
|
|
77
|
+
S_DECOMPOSE — 边界澄清 + 执行准则 + 子目标清单 PERSIST: session.boundary_contract, .execution_criteria, .task_decomposition
|
|
78
|
+
S_BUILD_CHAIN — 构建步骤链(build rules 0-14) PERSIST: session.steps[]
|
|
79
|
+
S_CREATE_SESSION — 写 status.json PERSIST: session (全量)
|
|
80
|
+
S_CONFIRM — 用户确认
|
|
81
|
+
|
|
82
|
+
S_AGENT_DISPATCH — 启动执行 Agent PERSIST: session.active_agent_name
|
|
83
|
+
S_AGENT_RECEIVE — 接收 Agent 返回、解析状态 PERSIST: —
|
|
84
|
+
S_DECISION_EVAL — 启动分析 Agent 评估质量门 PERSIST: —
|
|
85
|
+
S_APPLY_VERDICT — 应用裁决 PERSIST: session.steps[]
|
|
86
|
+
S_SESSION_DONE — 所有 step 完成 PERSIST: session.status
|
|
87
|
+
S_HANDLE_FAIL — 处理失败 PERSIST: step.status
|
|
88
|
+
S_AMEND_GOAL — 修改 running session 目标 PERSIST: session.task_decomposition, .boundary_contract, .goal_changelog, .steps[]
|
|
89
|
+
S_FALLBACK — 请求用户输入 PERSIST: —
|
|
90
|
+
</states>
|
|
91
|
+
|
|
92
|
+
<transitions>
|
|
93
|
+
|
|
94
|
+
S_PARSE_ROUTE:
|
|
95
|
+
→ S_STATUS WHEN: intent == "status"
|
|
96
|
+
→ S_CONTINUE WHEN: intent == "continue"
|
|
97
|
+
→ S_AMEND_GOAL WHEN: amend_mode == true AND running session exists
|
|
98
|
+
→ S_FALLBACK WHEN: amend_mode == true AND no running session
|
|
99
|
+
→ S_DECISION_EVAL WHEN: running session with decision step in "running" status
|
|
100
|
+
→ S_RESOLVE_PHASE WHEN: intent is non-empty
|
|
101
|
+
→ S_FALLBACK WHEN: no intent AND no running session
|
|
102
|
+
|
|
103
|
+
S_STATUS:
|
|
104
|
+
→ END DO: A_SHOW_STATUS
|
|
105
|
+
|
|
106
|
+
S_CONTINUE:
|
|
107
|
+
→ S_AGENT_DISPATCH WHEN: running session found
|
|
108
|
+
→ S_FALLBACK WHEN: no running session
|
|
109
|
+
|
|
110
|
+
S_AMEND_GOAL:
|
|
111
|
+
→ S_AGENT_DISPATCH WHEN: change applied + user confirmed DO: A_AMEND_GOAL
|
|
112
|
+
→ END WHEN: user cancels
|
|
113
|
+
GUARD: RISK_LEVEL=high → auto_confirm 无效
|
|
114
|
+
|
|
115
|
+
S_CREATE_SESSION:
|
|
116
|
+
→ S_CONFIRM WHEN: not auto_confirm
|
|
117
|
+
→ S_AGENT_DISPATCH WHEN: auto_confirm
|
|
118
|
+
|
|
119
|
+
S_CONFIRM:
|
|
120
|
+
→ S_AGENT_DISPATCH WHEN: user confirms
|
|
121
|
+
→ S_BUILD_CHAIN WHEN: user edits
|
|
122
|
+
→ END WHEN: user cancels
|
|
123
|
+
|
|
124
|
+
S_AGENT_DISPATCH:
|
|
125
|
+
→ S_AGENT_RECEIVE DO: A_DISPATCH_EXECUTE_AGENT
|
|
126
|
+
|
|
127
|
+
S_AGENT_RECEIVE:
|
|
128
|
+
→ S_DECISION_EVAL WHEN: Agent returned "decision_pending" DO: A_PARSE_AGENT_RETURN
|
|
129
|
+
→ S_SESSION_DONE WHEN: Agent returned "session_complete" DO: A_PARSE_AGENT_RETURN
|
|
130
|
+
→ S_HANDLE_FAIL WHEN: Agent returned "step_failed" DO: A_PARSE_AGENT_RETURN
|
|
131
|
+
→ S_HANDLE_FAIL WHEN: Agent returned null (agent error) DO: A_PARSE_AGENT_RETURN
|
|
132
|
+
|
|
133
|
+
S_DECISION_EVAL: (decision 节点 == `step.decision` 非空)
|
|
134
|
+
→ S_APPLY_VERDICT WHEN: quality-gate (post-execute, post-business-test, post-review, post-test, post-frontend-verify)
|
|
135
|
+
DO: A_AGENT_EVALUATE
|
|
136
|
+
→ S_APPLY_VERDICT WHEN: goal-gate (post-goal-audit)
|
|
137
|
+
DO: A_AGENT_GOAL_AUDIT
|
|
138
|
+
→ S_APPLY_VERDICT WHEN: scope-gate (post-analyze-scope)
|
|
139
|
+
DO: A_SCOPE_EVALUATE
|
|
140
|
+
→ S_APPLY_VERDICT WHEN: reground-gate (post-reground)
|
|
141
|
+
DO: A_AGENT_REGROUND
|
|
142
|
+
→ S_APPLY_VERDICT WHEN: structural (post-milestone, post-debug-escalate)
|
|
143
|
+
DO: A_STRUCTURAL_EVALUATE
|
|
144
|
+
|
|
145
|
+
S_APPLY_VERDICT:
|
|
146
|
+
→ S_AGENT_DISPATCH WHEN: verdict == "proceed" DO: A_APPLY_PROCEED
|
|
147
|
+
→ S_AGENT_DISPATCH WHEN: post-goal-audit + has_unmet DO: A_APPLY_GOAL_FIX
|
|
148
|
+
→ S_AGENT_DISPATCH WHEN: post-goal-audit + all_met + INTENT_ALIGNED=true DO: A_APPLY_GOAL_DONE
|
|
149
|
+
→ END WHEN: post-goal-audit + all_met + INTENT_ALIGNED=false DO: A_REGROUND_HALT
|
|
150
|
+
→ S_AGENT_DISPATCH WHEN: post-analyze-scope DO: A_APPLY_SCOPE_VERDICT
|
|
151
|
+
→ S_AGENT_DISPATCH WHEN: verdict == "fix" DO: A_APPLY_FIX
|
|
152
|
+
→ S_AGENT_DISPATCH WHEN: verdict == "escalate" DO: A_APPLY_ESCALATE
|
|
153
|
+
→ S_AGENT_DISPATCH WHEN: post-milestone + standard + next milestone DO: A_ADVANCE_MILESTONE
|
|
154
|
+
→ END WHEN: post-milestone + standard + no next milestone
|
|
155
|
+
→ END WHEN: post-milestone + adhoc DO: mark completed (set current_milestone = null)
|
|
156
|
+
→ END WHEN: post-debug-escalate DO: A_PAUSE_ESCALATE
|
|
157
|
+
→ END WHEN: post-reground + drifted + confidence >= 60 DO: A_REGROUND_HALT
|
|
158
|
+
→ S_AGENT_DISPATCH WHEN: post-reground + aligned DO: A_APPLY_PROCEED
|
|
159
|
+
→ S_AGENT_DISPATCH WHEN: post-reground + drifted + confidence < 60 DO: A_APPLY_PROCEED (标 LOW CONFIDENCE)
|
|
160
|
+
GUARD: retry_count >= max_retries → force escalate
|
|
161
|
+
GUARD: confidence_score < 60 AND proceed → override to fix
|
|
162
|
+
GUARD: confidence_score > 95 AND fix AND retry > 0 → suggest proceed
|
|
163
|
+
GUARD: auto_confirm → skip user prompt, apply adjusted verdict
|
|
164
|
+
GUARD: not auto_confirm → AskUserQuestion with override options
|
|
165
|
+
GUARD: post-reground + drifted + confidence >= 60 → A_REGROUND_HALT(auto_confirm 不跳过)
|
|
166
|
+
|
|
167
|
+
S_HANDLE_FAIL:
|
|
168
|
+
→ S_AGENT_DISPATCH WHEN: auto + not retried DO: A_RETRY
|
|
169
|
+
→ END WHEN: auto + retried DO: A_PAUSE_SESSION
|
|
170
|
+
→ S_AGENT_DISPATCH WHEN: interactive + retry
|
|
171
|
+
→ S_AGENT_DISPATCH WHEN: interactive + skip
|
|
172
|
+
→ END WHEN: interactive + abort
|
|
173
|
+
|
|
174
|
+
S_SESSION_DONE:
|
|
175
|
+
→ END DO: A_COMPLETE_SESSION
|
|
176
|
+
|
|
177
|
+
</transitions>
|
|
178
|
+
|
|
179
|
+
<actions>
|
|
180
|
+
|
|
181
|
+
### A_CREATE_SESSION
|
|
182
|
+
1. `session_id` format: `ralph-agent-{YYYYMMDD-HHmmss}`
|
|
183
|
+
2. Additional fields: `execution_mode: "agent"`,无 `cli_tool` 字段
|
|
184
|
+
3. Each step: `agent_exec_name: null`(替代 `delegate_exec_id`)
|
|
185
|
+
4. Step mode/role/rule assigned per stage (see Stage Mapping table)
|
|
186
|
+
|
|
187
|
+
### A_DISPATCH_EXECUTE_AGENT
|
|
188
|
+
|
|
189
|
+
启动执行 Agent 处理 pending 执行 step。Agent 自主循环直到遇到 decision/完成/失败。
|
|
190
|
+
|
|
191
|
+
1. Read status.json → 确认有 pending step
|
|
192
|
+
2. Resolve agent name: `{stage_prefix}-{session_id_short}-{HHmmss}`
|
|
193
|
+
|
|
194
|
+
**Agent Name Prefix (by stage):**
|
|
195
|
+
|
|
196
|
+
| Stage | Prefix |
|
|
197
|
+
|-------|--------|
|
|
198
|
+
| grill | `grl` |
|
|
199
|
+
| brainstorm | `brn` |
|
|
200
|
+
| analyze-macro | `anm` |
|
|
201
|
+
| analyze | `ana` |
|
|
202
|
+
| plan | `pln` |
|
|
203
|
+
| execute | `exe` |
|
|
204
|
+
| review | `rev` |
|
|
205
|
+
| test | `tst` |
|
|
206
|
+
| debug | `dbg` |
|
|
207
|
+
| Other | `run` |
|
|
208
|
+
|
|
209
|
+
3. Compose `<execution_context>` block:
|
|
210
|
+
|
|
211
|
+
```xml
|
|
212
|
+
<execution_context>
|
|
213
|
+
<intent>{session.intent}</intent>
|
|
214
|
+
<phase>{session.phase}</phase>
|
|
215
|
+
<milestone>{session.milestone}</milestone>
|
|
216
|
+
<boundary_contract>
|
|
217
|
+
<in_scope>{boundary_contract.in_scope}</in_scope>
|
|
218
|
+
<out_of_scope>{boundary_contract.out_of_scope}</out_of_scope>
|
|
219
|
+
<definition_of_done>{boundary_contract.definition_of_done}</definition_of_done>
|
|
220
|
+
</boundary_contract>
|
|
221
|
+
<execution_criteria>{session.execution_criteria}</execution_criteria>
|
|
222
|
+
<active_goals>{task_decomposition WHERE status != "superseded"; superseded 目标仅一行标注}</active_goals>
|
|
223
|
+
<prior_step_context>
|
|
224
|
+
{最近 5 个已完成 step 的 completion_summary + completion_caveats}
|
|
225
|
+
</prior_step_context>
|
|
226
|
+
<accumulated_signals>
|
|
227
|
+
{聚合所有已完成 step 的 caveats + deferred}
|
|
228
|
+
</accumulated_signals>
|
|
229
|
+
<stage_context>
|
|
230
|
+
{按下一个 pending step 的目标 skill 类型选择性注入,见下表;仅在有实际内容时加入}
|
|
231
|
+
</stage_context>
|
|
232
|
+
</execution_context>
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
**Stage-specific `<stage_context>` injection:**
|
|
236
|
+
|
|
237
|
+
| 目标 skill 类型 | 注入重点 |
|
|
238
|
+
|----------------|---------|
|
|
239
|
+
| analyze | intent + scope + boundary |
|
|
240
|
+
| plan | analysis findings + scope_verdict + recommendations |
|
|
241
|
+
| execute | task list + dependencies + wave + caveats from plan |
|
|
242
|
+
| review | changed files + verification results + execution decisions |
|
|
243
|
+
| test | review findings + execution artifacts + coverage data |
|
|
244
|
+
| debug | error details + failing tests + execution trace |
|
|
245
|
+
| brainstorm/grill | challenged assumptions + risks + prior findings |
|
|
246
|
+
|
|
247
|
+
4. Dispatch Agent:
|
|
248
|
+
|
|
249
|
+
```
|
|
250
|
+
Agent({
|
|
251
|
+
name: "{resolved_agent_name}",
|
|
252
|
+
description: "执行 ralph session steps",
|
|
253
|
+
prompt: `执行 ralph-agent session {session_id} 的 pending steps。
|
|
254
|
+
|
|
255
|
+
调用 Skill("maestro-ralph-agent-execute", "--session {session_id}") 执行步骤。
|
|
256
|
+
maestro-ralph-agent-execute 会自动循环执行 pending 执行 step,遇到 decision/完成/失败时返回。
|
|
257
|
+
|
|
258
|
+
{execution_context}
|
|
259
|
+
|
|
260
|
+
执行 Agent 内部调用 maestro ralph complete 上报。你只需确保 Skill 调用完成后输出 ---AGENT-STATUS--- 块。
|
|
261
|
+
|
|
262
|
+
最后必须输出以下状态块:
|
|
263
|
+
|
|
264
|
+
---AGENT-STATUS---
|
|
265
|
+
RESULT: decision_pending|session_complete|step_failed|steps_completed
|
|
266
|
+
LAST_STEP_INDEX: {N}
|
|
267
|
+
DECISION_NODE: {gate name, 仅 decision_pending 时}
|
|
268
|
+
COMPLETED_STEPS: {本次完成的 step 数量}
|
|
269
|
+
FAILURE_REASON: {仅 step_failed 时}
|
|
270
|
+
---END---`
|
|
271
|
+
})
|
|
272
|
+
```
|
|
273
|
+
|
|
274
|
+
5. Write `session.active_agent_name` to status.json
|
|
275
|
+
6. Display: `⟶ Agent:{name} dispatched for session {session_id}`
|
|
276
|
+
|
|
277
|
+
### A_PARSE_AGENT_RETURN
|
|
278
|
+
|
|
279
|
+
从 Agent 返回文本中解析 `---AGENT-STATUS---` 块,并验证 session 状态一致性。
|
|
280
|
+
|
|
281
|
+
1. Extract RESULT field → route to next state
|
|
282
|
+
2. Extract metadata: LAST_STEP_INDEX, DECISION_NODE, COMPLETED_STEPS, FAILURE_REASON
|
|
283
|
+
3. If no `---AGENT-STATUS---` block → fallback: re-read status.json 推断状态
|
|
284
|
+
- 有 pending decision step → `decision_pending`
|
|
285
|
+
- 全部 completed → `session_complete`
|
|
286
|
+
- 有 failed step → `step_failed`
|
|
287
|
+
4. **Verify agent reporting** — re-read status.json 验证 agent 上报是否成功写入:
|
|
288
|
+
- 检查 LAST_STEP_INDEX 对应的 step 是否 `completion_confirmed == true`
|
|
289
|
+
- 若 Agent 返回 COMPLETED_STEPS > 0 但 status.json 中对应 step 未 completed → 标记 `agent_report_mismatch = true`,RESULT 降级为 `step_failed`,FAILURE_REASON = "agent 上报未写入 status.json"
|
|
290
|
+
- 检查 `session.status` 是否仍为 "running"(agent 崩溃可能导致 paused)
|
|
291
|
+
5. Display: `[Agent返回] {RESULT} — 完成 {COMPLETED_STEPS} 步`
|
|
292
|
+
|
|
293
|
+
### A_AGENT_EVALUATE
|
|
294
|
+
|
|
295
|
+
通过 Agent 在本循环内评估质量门。替代 `maestro delegate --mode analysis`。
|
|
296
|
+
|
|
297
|
+
1. Resolve artifact dir: `.workflow/scratch/{artifact.path}/` with fallback glob
|
|
298
|
+
2. Parse decision metadata: `{ decision, retry_count, max_retries }`
|
|
299
|
+
3. Map result files(同 ralph A_DELEGATE_EVALUATE):
|
|
300
|
+
|
|
301
|
+
| Decision | Files |
|
|
302
|
+
|----------|-------|
|
|
303
|
+
| post-execute | verification.json |
|
|
304
|
+
| post-business-test | .tests/auto-test/report.json |
|
|
305
|
+
| post-review | review.json |
|
|
306
|
+
| post-test | uat.md, .tests/test-results.json |
|
|
307
|
+
| post-frontend-verify | e2e-results.json |
|
|
308
|
+
|
|
309
|
+
4. Dispatch evaluation Agent:
|
|
310
|
+
```
|
|
311
|
+
Agent({
|
|
312
|
+
name: "eval-{decision}-{timestamp}",
|
|
313
|
+
description: "评估 {decision} 质量门",
|
|
314
|
+
prompt: "PURPOSE: 评估 {decision} 质量门结果
|
|
315
|
+
TASK: 读取以下结果文件 | 分析状态 | 评估严重性 | 给出建议
|
|
316
|
+
FILES: {result_file_paths}
|
|
317
|
+
SESSION: {session_dir}/status.json
|
|
318
|
+
EXPECTED: 输出以下格式:
|
|
319
|
+
---VERDICT---
|
|
320
|
+
STATUS: PASS|FAIL|PARTIAL|BLOCKED
|
|
321
|
+
REASON: <一句话原因>
|
|
322
|
+
GAP_SUMMARY: <差距摘要>
|
|
323
|
+
CONFIDENCE: high|medium|low
|
|
324
|
+
CONFIDENCE_SCORE: 0-100
|
|
325
|
+
WEAKEST_DIMENSION: <最弱维度>
|
|
326
|
+
---END---
|
|
327
|
+
CONSTRAINTS: 只评估不修改文件 | 置信度<60%倾向 fix | retry {n}/{max} 达上限必须 escalate"
|
|
328
|
+
})
|
|
329
|
+
```
|
|
330
|
+
5. On return: parse `---VERDICT---` block — STATUS must match strict enum `PASS|FAIL|PARTIAL|BLOCKED`; parse failure → fallback STATUS="fix", `parse_failed: true`, `confidence_score: 0` (invariant 13)
|
|
331
|
+
6. Confidence adjustment: <60 + proceed → fix; >95 + fix + retry>0 → suggest proceed
|
|
332
|
+
7. **Decision log**: Append to `{session_dir}/decisions.ndjson`:
|
|
333
|
+
```json
|
|
334
|
+
{ "id": "DEC-{timestamp}", "timestamp": "{ISO}", "source": "ralph-agent",
|
|
335
|
+
"node_id": "{step.decision}", "type": "quality-gate",
|
|
336
|
+
"verdict": "{adjusted_verdict}", "confidence_score": {N},
|
|
337
|
+
"parse_failed": false,
|
|
338
|
+
"close_call": {N>=50 && N<=70}, "summary": "{REASON}" }
|
|
339
|
+
```
|
|
340
|
+
|
|
341
|
+
### A_AGENT_GOAL_AUDIT
|
|
342
|
+
|
|
343
|
+
通过 Agent 审计子目标完成情况。替代 `maestro delegate --mode analysis` 的 goal audit。
|
|
344
|
+
|
|
345
|
+
1. Read `session.task_decomposition` from status.json
|
|
346
|
+
2. Dispatch audit Agent:
|
|
347
|
+
```
|
|
348
|
+
Agent({
|
|
349
|
+
name: "goal-audit-{timestamp}",
|
|
350
|
+
description: "审计子目标完成情况",
|
|
351
|
+
prompt: "PURPOSE: 审计未完成子目标,判定 met / unmet
|
|
352
|
+
TASK:
|
|
353
|
+
1. 读取 {session_dir}/status.json 中 task_decomposition 的 status!=done 子目标
|
|
354
|
+
2. 打开 evidence 产物,对照 done_when 严格判定
|
|
355
|
+
3. 输出 met / unmet,unmet 给出 gap + target_phase
|
|
356
|
+
4. 对照 intent + definition_of_done 判定意图保真
|
|
357
|
+
CONTEXT:
|
|
358
|
+
status.json = {session_dir}/status.json
|
|
359
|
+
intent = {session.intent}
|
|
360
|
+
definition_of_done = {boundary_contract.definition_of_done}
|
|
361
|
+
execution_criteria = {execution_criteria}
|
|
362
|
+
boundary_contract = {boundary_contract}
|
|
363
|
+
EXPECTED:
|
|
364
|
+
---VERDICT---
|
|
365
|
+
STATUS: all_met|has_unmet
|
|
366
|
+
INTENT_ALIGNED: true|false
|
|
367
|
+
UNMET: [{id:G2,gap:'...',target_phase:execute}, ...]
|
|
368
|
+
CONFIDENCE_SCORE: 0-100
|
|
369
|
+
---END---
|
|
370
|
+
CONSTRAINTS: 只评估不修改文件 | 严格按 done_when 判定 | evidence 缺失→unmet"
|
|
371
|
+
})
|
|
372
|
+
```
|
|
373
|
+
3. On return: parse verdict, update task_decomposition status
|
|
374
|
+
4. Append `{session_dir}/decisions.ndjson`:`{ "type": "goal-gate", "unmet_count": N, "unmet_ids": [...] }`
|
|
375
|
+
5. Verdict routing: `all_met` + `INTENT_ALIGNED=true` → A_APPLY_GOAL_DONE;`all_met` + `INTENT_ALIGNED=false` → A_REGROUND_HALT;`has_unmet` → A_APPLY_GOAL_FIX
|
|
376
|
+
GUARD: retry_count >= max_retries AND still unmet → A_APPLY_ESCALATE
|
|
377
|
+
|
|
378
|
+
### A_AGENT_REGROUND
|
|
379
|
+
|
|
380
|
+
通过 Agent 执行意图保真检查。替代 `maestro delegate --mode analysis` 的 reground。
|
|
381
|
+
|
|
382
|
+
1. Read status.json:intent, boundary_contract, completed steps, done goals
|
|
383
|
+
2. Dispatch reground Agent:
|
|
384
|
+
```
|
|
385
|
+
Agent({
|
|
386
|
+
name: "reground-{timestamp}",
|
|
387
|
+
description: "意图保真检查",
|
|
388
|
+
prompt: "PURPOSE: 意图保真检查 — 对照 intent 验证累积执行是否漂移
|
|
389
|
+
TASK:
|
|
390
|
+
1. 读取 intent + boundary_contract.definition_of_done
|
|
391
|
+
2. 读取已完成 steps 的 completion_evidence + 已 done 子目标
|
|
392
|
+
3. 判定累积产出是否仍服务 intent
|
|
393
|
+
4. 输出 aligned / drifted + drift_description + corrective_action
|
|
394
|
+
CONTEXT:
|
|
395
|
+
status.json = {session_dir}/status.json
|
|
396
|
+
intent = {session.intent}
|
|
397
|
+
definition_of_done = {boundary_contract.definition_of_done}
|
|
398
|
+
in_scope = {boundary_contract.in_scope}
|
|
399
|
+
out_of_scope = {boundary_contract.out_of_scope}
|
|
400
|
+
goal_changelog = {session.goal_changelog ?? []}
|
|
401
|
+
EXPECTED:
|
|
402
|
+
---VERDICT---
|
|
403
|
+
STATUS: aligned|drifted
|
|
404
|
+
DRIFT_DESCRIPTION: <空或具体描述>
|
|
405
|
+
CORRECTIVE_ACTION: <空或建议>
|
|
406
|
+
CONFIDENCE_SCORE: 0-100
|
|
407
|
+
---END---
|
|
408
|
+
CONSTRAINTS: 只评估不修改文件 | aligned 阈值≥80% | 单个 step 触碰 out_of_scope→直接 drifted"
|
|
409
|
+
})
|
|
410
|
+
```
|
|
411
|
+
3. On return: parse verdict
|
|
412
|
+
4. Append `{session_dir}/decisions.ndjson`
|
|
413
|
+
5. Verdict routing:aligned → A_APPLY_PROCEED;drifted + confidence >= 60 → A_REGROUND_HALT;drifted + confidence < 60 → A_APPLY_PROCEED (LOW CONFIDENCE)
|
|
414
|
+
|
|
415
|
+
### A_SCOPE_EVALUATE
|
|
416
|
+
|
|
417
|
+
仅由 `post-analyze-scope` 决策节点触发。
|
|
418
|
+
|
|
419
|
+
1. 定位刚完成的 macro analyze artifact → `analyze_macro_id`, `conclusions_path`
|
|
420
|
+
2. 读取 `conclusions.scope_verdict`(`large | medium | small`),缺失 → `unknown`
|
|
421
|
+
3. 写入 `session.scope_verdict` + `session.analyze_macro_id`
|
|
422
|
+
4. Append `{session_dir}/decisions.ndjson`:`{ "type": "scope-gate", "source": "ralph-agent", "verdict": "{scope_verdict}", "analyze_macro_id": "{ANL_ID}" }`
|
|
423
|
+
|
|
424
|
+
### A_STRUCTURAL_EVALUATE
|
|
425
|
+
|
|
426
|
+
**post-milestone:**
|
|
427
|
+
1. Read state.json → resolve milestone type(default `"standard"`)
|
|
428
|
+
2. Standard milestone:next milestone exists → insert lifecycle steps / complete
|
|
429
|
+
3. Adhoc milestone(`type == "adhoc"`):always END,set `current_milestone = null`
|
|
430
|
+
|
|
431
|
+
**post-debug-escalate:** always → A_PAUSE_ESCALATE
|
|
432
|
+
|
|
433
|
+
### A_SHOW_STATUS
|
|
434
|
+
|
|
435
|
+
1. Find latest `ralph-agent-*` session(by created_at)
|
|
436
|
+
2. Display: Session, Status, Position, Progress, Current step
|
|
437
|
+
3. List steps: [✓] confirmed, [▸] current, [ ] pending, [◆] decision;执行 step 附 `command_scope` + `command_path`
|
|
438
|
+
4. If `task_decomposition` present → 显示 sub-goals 进度(done/total)
|
|
439
|
+
|
|
440
|
+
### A_APPLY_PROCEED / A_APPLY_FIX / A_APPLY_ESCALATE
|
|
441
|
+
|
|
442
|
+
- **A_APPLY_PROCEED**: Mark decision completed, write status.json
|
|
443
|
+
- **A_APPLY_FIX**: Insert fix-loop steps after current step(见 Fix-Loop Templates),reindex,increment retry_count
|
|
444
|
+
- **A_APPLY_ESCALATE**: Insert `[quality-debug "{gap_summary}", decision:post-debug-escalate]`,reindex
|
|
445
|
+
|
|
446
|
+
### A_APPLY_SCOPE_VERDICT
|
|
447
|
+
|
|
448
|
+
依据 `session.scope_verdict` + `session.wants_roadmap` 重塑下游链路:
|
|
449
|
+
|
|
450
|
+
1. 路径 A(`large` 且 `wants_roadmap`):保持 roadmap+analyze,`plan` 选 phase 列
|
|
451
|
+
2. 路径 B(`medium`/`small`,或 `large` 非 `wants_roadmap`):删除未完成的 `roadmap` + `analyze` step,`plan` 改为 `--from analyze:{ANL_ID}`
|
|
452
|
+
3. 路径 C(`unknown`):非 auto_confirm → AskUserQuestion;auto_confirm → 默认路径 B
|
|
453
|
+
4. Reindex steps,标 decision completed
|
|
454
|
+
|
|
455
|
+
### A_APPLY_GOAL_FIX / A_APPLY_GOAL_DONE
|
|
456
|
+
|
|
457
|
+
- **A_APPLY_GOAL_FIX**: 对每个 unmet 子目标插入 scoped mini-loop(plan --gaps + execute),`goal_ref` 标注,重新追加 `decision:post-goal-audit {retry+1}`
|
|
458
|
+
- **A_APPLY_GOAL_DONE**: set `task_decomposition[*].status="done"`, `completion_confirmed=true`, `task_decomposition_all_done=true`
|
|
459
|
+
|
|
460
|
+
### A_ADVANCE_MILESTONE
|
|
461
|
+
|
|
462
|
+
1. Update session: milestone, phase, reset passed_gates
|
|
463
|
+
2. Insert full lifecycle steps for next milestone
|
|
464
|
+
3. Reindex, write status.json
|
|
465
|
+
|
|
466
|
+
### A_REGROUND_HALT / A_PAUSE_ESCALATE
|
|
467
|
+
|
|
468
|
+
- **A_REGROUND_HALT**: set `session.status = "paused"`,display drift warning + 恢复选项。auto_confirm 不跳过
|
|
469
|
+
- **A_PAUSE_ESCALATE**: set session paused,display "请人工介入",suggest continue
|
|
470
|
+
|
|
471
|
+
### A_AMEND_GOAL
|
|
472
|
+
|
|
473
|
+
运行中 session 的目标热修改。详细流程由 `<deferred_reading>` 加载 `ralph-amend-goal.md`。
|
|
474
|
+
|
|
475
|
+
| Phase | 行为 | 产出 |
|
|
476
|
+
|-------|------|------|
|
|
477
|
+
| 1. 快照 | 读 `task_decomposition` + `boundary_contract` + 已完成 steps 的 `completion_summary` | Display: 目标列表 + 进度 |
|
|
478
|
+
| 2. 解析 | `change_request` 非空 → 直接用;为空 → AskUserQuestion(修改/新增/移除/调整边界) | `change_type` + `change_request` |
|
|
479
|
+
| 3. Mini Grill | Agent 评估影响(替代 maestro delegate) | RISK_LEVEL + AFFECTED_GOALS + INVALIDATED_STEPS + NEW_GAPS |
|
|
480
|
+
| 4. 确认 | AskUserQuestion:应用并继续 / 仅改目标 / 取消 | 用户选择 |
|
|
481
|
+
| 5. 应用 | 归档旧目标(`superseded`)→ 写入新目标(`origin: CHG-xxx`)→ 重建链路 → write status.json | re-dispatch |
|
|
482
|
+
|
|
483
|
+
**Phase 3 Agent prompt:**
|
|
484
|
+
```
|
|
485
|
+
Agent({
|
|
486
|
+
name: "amend-grill-{timestamp}",
|
|
487
|
+
description: "Amend impact analysis",
|
|
488
|
+
prompt: "PURPOSE: 评估目标修改对 running session 的影响
|
|
489
|
+
TASK:
|
|
490
|
+
1. 读取 {session_dir}/status.json 的 task_decomposition + boundary_contract + 已完成 steps
|
|
491
|
+
2. 分析 change_request 对既有目标/步骤的影响
|
|
492
|
+
3. 判定 RISK_LEVEL (low/medium/high)
|
|
493
|
+
4. 列出 AFFECTED_GOALS / INVALIDATED_STEPS / NEW_GAPS
|
|
494
|
+
CONTEXT:
|
|
495
|
+
change_request = {change_request}
|
|
496
|
+
change_type = {change_type}
|
|
497
|
+
session = {session_dir}/status.json
|
|
498
|
+
EXPECTED:
|
|
499
|
+
---AMEND-VERDICT---
|
|
500
|
+
RISK_LEVEL: low|medium|high
|
|
501
|
+
AFFECTED_GOALS: [G1, G2, ...]
|
|
502
|
+
INVALIDATED_STEPS: [step indices]
|
|
503
|
+
NEW_GAPS: [gap descriptions]
|
|
504
|
+
RECOMMENDATION: <建议>
|
|
505
|
+
---END---
|
|
506
|
+
CONSTRAINTS: 只评估不修改文件"
|
|
507
|
+
})
|
|
508
|
+
```
|
|
509
|
+
|
|
510
|
+
GUARD: `RISK_LEVEL == high` → AskUserQuestion 不跳过(auto_confirm 无效)
|
|
511
|
+
GUARD: 已完成(`status: "done"`)的目标不可 supersede(skip + warn)
|
|
512
|
+
旧目标标 `superseded`(`superseded_by` + `superseded_at`),新目标标 `origin: "CHG-xxx"`。`goal_changelog` 含完整 `before/after` + `impact_assessment`。
|
|
513
|
+
|
|
514
|
+
### A_RETRY / A_PAUSE_SESSION / A_COMPLETE_SESSION
|
|
515
|
+
|
|
516
|
+
- **A_RETRY**: `Bash("maestro ralph retry {index}")` — 同 ralph
|
|
517
|
+
- **A_PAUSE_SESSION**: `ralph complete N --status BLOCKED --reason "..."` — 同 ralph
|
|
518
|
+
- **A_COMPLETE_SESSION**: 校验所有 step `completion_confirmed == true` + `task_decomposition_all_done == true`,写 `session.status = "completed"` — 同 ralph
|
|
519
|
+
|
|
520
|
+
</actions>
|
|
521
|
+
|
|
522
|
+
</state_machine>
|
|
523
|
+
|
|
524
|
+
<appendix>
|
|
525
|
+
|
|
526
|
+
### Agent vs CLI-Delegate 对照
|
|
527
|
+
|
|
528
|
+
| 维度 | ralph-cli (CLI-delegate) | ralph-agent (Agent) |
|
|
529
|
+
|------|-------------------------|---------------------|
|
|
530
|
+
| 执行分发 | `maestro delegate` (Bash bg) | `Agent()` (同步) |
|
|
531
|
+
| 执行包装器 | `maestro-ralph-cli-execute` (delegate 加载) | `maestro-ralph-agent-execute` (Agent 内 Skill 加载) |
|
|
532
|
+
| 结果通信 | `---RESULT---` 文本块 (从 delegate output 解析) | Agent 返回文本 + `---AGENT-STATUS---` 块 |
|
|
533
|
+
| 回调模式 | STOP → re-invocation callback | 同步等待 Agent 返回(无 STOP) |
|
|
534
|
+
| 决策评估 | `maestro delegate --mode analysis` (Bash bg + STOP) | `Agent()` 同步分析(无 STOP) |
|
|
535
|
+
| 完成上报 | 编排器调 `ralph complete`(解析 RESULT 后) | 执行 Agent 内调 `ralph complete`(agent 上报) |
|
|
536
|
+
| session 字段 | `execution_mode: "cli-delegate"`, `cli_tool`, `delegate_exec_id` | `execution_mode: "agent"`, `agent_exec_name` |
|
|
537
|
+
|
|
538
|
+
### Stage Mapping
|
|
539
|
+
|
|
540
|
+
Agent 版无 `delegate_mode`/`delegate_rule` 字段。执行 Agent 始终拥有完整工具集(read + write),由 skill 自身约束行为。Decision 评估 Agent 通过 prompt 中的 CONSTRAINTS 约束为只读。
|
|
541
|
+
|
|
542
|
+
| Stage | Skill (independent) | Skill (unified) | Decision after | quality_mode |
|
|
543
|
+
|-------|---------------------|-----------------|----------------|--------------|
|
|
544
|
+
| grill | `maestro-grill "{intent}"` | *(same)* | — | all |
|
|
545
|
+
| brainstorm | `maestro-brainstorm "{intent}"` | *(same)* | — | all |
|
|
546
|
+
| blueprint | `maestro-blueprint "{intent}"` | *(same)* | — | all |
|
|
547
|
+
| init | `maestro-init` | *(same)* | — | all |
|
|
548
|
+
| spec-setup | `spec-setup` | *(same)* | — | all |
|
|
549
|
+
| analyze-macro | `maestro-analyze "{intent}"` | *(same)* | `post-analyze-scope` | all |
|
|
550
|
+
| roadmap | `maestro-roadmap --from analyze:{id}` | *(same)* | — | all |
|
|
551
|
+
| analyze | `maestro-analyze {phase}` | `maestro-analyze` | — | all |
|
|
552
|
+
| plan | `maestro-plan {phase}` | `maestro-plan` | — | all |
|
|
553
|
+
| execute | `maestro-execute {phase}` | `maestro-execute` | `post-execute` | all |
|
|
554
|
+
| business-test | `quality-auto-test {phase}` | `quality-auto-test` | `post-business-test` | full only |
|
|
555
|
+
| review | `quality-review {phase}` | `quality-review` | `post-review` | all |
|
|
556
|
+
| test-gen | `quality-auto-test {phase}` | `quality-auto-test` | — | full / standard |
|
|
557
|
+
| test | `quality-test {phase}` | `quality-test` | `post-test` | full, standard |
|
|
558
|
+
| frontend-verify | `quality-test {phase} --frontend-verify` | `quality-test --frontend-verify` | `post-frontend-verify` | all (UI only) |
|
|
559
|
+
| milestone-audit | `maestro-milestone-audit` | *(same)* | — | all |
|
|
560
|
+
| goal-audit | *(decision-only)* | *(same)* | `post-goal-audit` | all |
|
|
561
|
+
| milestone-complete | `maestro-milestone-complete` | *(same)* | `post-milestone` | all |
|
|
562
|
+
|
|
563
|
+
Build rules 0-14 全部适用,包括 spec-setup 预检(rule 0.5)、grill auto_confirm 透传(rule 3.5)、frontend-verify UI 门控(rule 3.6)、re-grounding 插入(rule 5.5)等。
|
|
564
|
+
|
|
565
|
+
### Session Schema
|
|
566
|
+
|
|
567
|
+
```json
|
|
568
|
+
{
|
|
569
|
+
"session_id": "ralph-agent-{YYYYMMDD-HHmmss}",
|
|
570
|
+
"source": "ralph", "status": "running",
|
|
571
|
+
"execution_mode": "agent",
|
|
572
|
+
"ralph_protocol_version": "2",
|
|
573
|
+
"active_step_index": null,
|
|
574
|
+
"active_agent_name": null,
|
|
575
|
+
"intent": "", "lifecycle_position": "",
|
|
576
|
+
"phase": null, "phase_is_new": false,
|
|
577
|
+
"milestone": "",
|
|
578
|
+
"auto_mode": false,
|
|
579
|
+
"decomposition_owner": "ralph",
|
|
580
|
+
|
|
581
|
+
"quality_mode": "standard",
|
|
582
|
+
"planning_mode": "independent",
|
|
583
|
+
"scope_verdict": null,
|
|
584
|
+
"wants_roadmap": false,
|
|
585
|
+
"analyze_macro_id": null,
|
|
586
|
+
"blueprint_id": null,
|
|
587
|
+
"passed_gates": [],
|
|
588
|
+
"context": { "issue_id": null, "scratch_dir": null, "plan_dir": null,
|
|
589
|
+
"analysis_dir": null, "brainstorm_dir": null, "blueprint_dir": null },
|
|
590
|
+
"steps": [{
|
|
591
|
+
"index": 0,
|
|
592
|
+
"skill": "",
|
|
593
|
+
"args": "",
|
|
594
|
+
"stage": "",
|
|
595
|
+
"scope": null,
|
|
596
|
+
"decision": null,
|
|
597
|
+
"retry_count": 0,
|
|
598
|
+
"max_retries": 2,
|
|
599
|
+
"command_scope": "global|project|missing|null",
|
|
600
|
+
"command_path": "<absolute path> | null",
|
|
601
|
+
"milestone_id": null,
|
|
602
|
+
"source_artifact_ref": null,
|
|
603
|
+
"status": "pending|running|completed|skipped|failed",
|
|
604
|
+
"goal_ref": null,
|
|
605
|
+
"completion_confirmed": false,
|
|
606
|
+
"completion_status": null,
|
|
607
|
+
"completion_evidence": null,
|
|
608
|
+
"completion_summary": null,
|
|
609
|
+
"completion_decisions": null,
|
|
610
|
+
"completion_caveats": null,
|
|
611
|
+
"completion_deferred": null,
|
|
612
|
+
"completed_at": null,
|
|
613
|
+
"deferred_reads": [],
|
|
614
|
+
"load": null,
|
|
615
|
+
"agent_exec_name": null,
|
|
616
|
+
"artifacts_produced": [],
|
|
617
|
+
"drift_score": null,
|
|
618
|
+
"drift_correction": null
|
|
619
|
+
}],
|
|
620
|
+
"waves": [], "current_step": 0,
|
|
621
|
+
|
|
622
|
+
"boundary_contract": {
|
|
623
|
+
"in_scope": [], "out_of_scope": [], "constraints": [], "definition_of_done": ""
|
|
624
|
+
},
|
|
625
|
+
"execution_criteria": [],
|
|
626
|
+
"task_decomposition": [
|
|
627
|
+
{ "id": "G1", "goal": "", "boundary": "", "done_when": "",
|
|
628
|
+
"evidence": "", "lifecycle": [], "status": "pending|done|superseded",
|
|
629
|
+
"completion_confirmed": false, "completed_at": null,
|
|
630
|
+
"superseded_by": null, "superseded_at": null, "origin": null }
|
|
631
|
+
],
|
|
632
|
+
"task_decomposition_all_done": false,
|
|
633
|
+
|
|
634
|
+
"goal_changelog": [
|
|
635
|
+
{ "id": "CHG-001", "timestamp": "{ISO}",
|
|
636
|
+
"change_type": "modify|add|remove|boundary",
|
|
637
|
+
"reason": "",
|
|
638
|
+
"impact_assessment": { "risk_level": "low|medium|high",
|
|
639
|
+
"invalidated_steps": [], "new_steps_inserted": 0 },
|
|
640
|
+
"before": { "goals": [{"id":"G1","goal":"...","done_when":"..."}] },
|
|
641
|
+
"after": { "goals": [{"id":"G1v2","goal":"...","done_when":"..."}] } }
|
|
642
|
+
]
|
|
643
|
+
}
|
|
644
|
+
```
|
|
645
|
+
|
|
646
|
+
### Fix-Loop Templates
|
|
647
|
+
|
|
648
|
+
6 套 fix-loop templates(post-execute / post-business-test / post-review / post-test / post-frontend-verify / post-goal-audit),结构同 ralph。插入的 step 通过 Agent dispatch 执行,由 execute Agent 内调 `ralph complete` 上报。
|
|
649
|
+
|
|
650
|
+
### Error Codes
|
|
651
|
+
|
|
652
|
+
E001–E006, W001–W004 适用。Agent 新增:
|
|
653
|
+
|
|
654
|
+
| Code | Severity | Description | Recovery |
|
|
655
|
+
|------|----------|-------------|----------|
|
|
656
|
+
| E014 | error | Agent execution failed (Agent returned null) | Retry once, then BLOCKED |
|
|
657
|
+
| E015 | error | `---AGENT-STATUS---` block not found | Fallback: re-read status.json 推断 |
|
|
658
|
+
| E016 | error | Evaluation Agent verdict parse failed | Fallback fix + parse_failed: true |
|
|
659
|
+
|
|
660
|
+
### Success Criteria
|
|
661
|
+
|
|
662
|
+
- [ ] ralph-agent owns full loop: dispatch Agent → wait → verify → decide → re-dispatch
|
|
663
|
+
- [ ] 执行通过 `Agent()` 分发,Agent 内调 `Skill("maestro-ralph-agent-execute", "--session {id}")` 执行
|
|
664
|
+
- [ ] Agent 返回文本含 `---AGENT-STATUS---` 块(RESULT/LAST_STEP_INDEX/DECISION_NODE/COMPLETED_STEPS/FAILURE_REASON)
|
|
665
|
+
- [ ] 无 STOP/callback 模式 — Agent() 同步等待返回
|
|
666
|
+
- [ ] 执行 Agent 自主循环执行 step,遇 decision 停止返回
|
|
667
|
+
- [ ] 执行 Agent 内部调 `maestro ralph complete` 上报(agent 上报,非编排器上报)
|
|
668
|
+
- [ ] A_PARSE_AGENT_RETURN 验证 status.json:agent 上报写入确认 + session.status 一致性
|
|
669
|
+
- [ ] Decision evaluation 通过 Agent() 同步完成(非 maestro delegate)
|
|
670
|
+
- [ ] Verdict 解析保持 `---VERDICT---` 格式,parse 失败 → fallback fix + parse_failed: true
|
|
671
|
+
- [ ] decisions.ndjson 追加:source 字段为 `"ralph-agent"`
|
|
672
|
+
- [ ] Session schema: `execution_mode: "agent"`,`agent_exec_name` 替代 `delegate_exec_id`,含 `artifacts_produced`
|
|
673
|
+
- [ ] Chain building(S_RESOLVE_PHASE through S_BUILD_CHAIN)逻辑同 ralph,本文件自包含执行
|
|
674
|
+
- [ ] execution_context 块含 prior_step_context(滑动窗口 5 step)+ accumulated_signals + stage_context
|
|
675
|
+
- [ ] execution_context 中 boundary_contract 不截断;superseded 目标仅一行标注
|
|
676
|
+
- [ ] Agent name 含 stage prefix(grl/brn/anm/ana/pln/exe/rev/tst/dbg)
|
|
677
|
+
- [ ] Stage Mapping 表内联适配(无 delegate_mode/delegate_rule,Agent 始终 read+write,评估 Agent prompt 约束只读)
|
|
678
|
+
- [ ] completion_summary 在 DONE/DONE_WITH_CONCERNS 时为 MUST(由 execute Agent 的 ralph complete --summary 写入)
|
|
679
|
+
- [ ] CAVEATS 在 DONE_WITH_CONCERNS 时同时映射 --concerns(execute Agent 负责)
|
|
680
|
+
- [ ] A_AMEND_GOAL:完整 5 步流程 + deferred_reading ralph-amend-goal.md + Agent mini grill 含完整 prompt
|
|
681
|
+
- [ ] 旧目标标 superseded(superseded_by + superseded_at),新目标 origin: "CHG-xxx"
|
|
682
|
+
- [ ] goal_changelog 含完整 before/after + impact_assessment
|
|
683
|
+
- [ ] blueprint_id session 字段支持 --from blueprint:{BLP_ID} 路径
|
|
684
|
+
- [ ] spec-setup 预检(build rule 0.5)
|
|
685
|
+
- [ ] post-milestone adhoc 分支:mark completed + set current_milestone = null
|
|
686
|
+
- [ ] post-reground + drifted + confidence < 60 → A_APPLY_PROCEED (LOW CONFIDENCE)
|
|
687
|
+
- [ ] Fix-loop 插入的 step 通过 Agent dispatch 执行,`agent_exec_name` 初始化为 null
|
|
688
|
+
- [ ] re-grounding 3-step 插入规则(build rule 5.5)不变
|
|
689
|
+
- [ ] A_REGROUND_HALT 漂移熔断(auto_confirm 不跳过)不变
|
|
690
|
+
- [ ] `---AGENT-STATUS---` 块缺失时 fallback:re-read status.json 推断状态
|
|
691
|
+
- [ ] Agent 超时/崩溃 → A_PARSE_AGENT_RETURN fallback 推断 + S_HANDLE_FAIL 路径
|
|
692
|
+
|
|
693
|
+
</appendix>
|
|
694
|
+
</output>
|
|
695
|
+
</output>
|