maestro-flow 0.4.20 → 0.4.22
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-execute/SKILL.md +2 -1
- package/.agents/skills/maestro-swarm-workflow/SKILL.md +27 -19
- package/.agents/skills/maestro-universal-workflow/SKILL.md +563 -0
- package/.agents/skills/team-adversarial-swarm/SKILL.md +235 -0
- package/.agents/skills/team-adversarial-swarm/scripts/__pycache__/pheromone.cpython-313.pyc +0 -0
- package/.agents/skills/team-adversarial-swarm/scripts/__pycache__/scoring.cpython-313.pyc +0 -0
- package/.agents/skills/team-adversarial-swarm/scripts/aco.py +473 -0
- package/.agents/skills/team-adversarial-swarm/scripts/pheromone.py +144 -0
- package/.agents/skills/team-adversarial-swarm/scripts/scoring.py +92 -0
- package/.agents/skills/team-adversarial-swarm/scripts/test_aco.py +475 -0
- package/.agents/skills/team-adversarial-swarm/specs/ant-output-schema.md +115 -0
- package/.agents/skills/team-adversarial-swarm/specs/convergence-criteria.md +75 -0
- package/.agents/skills/team-adversarial-swarm/specs/pheromone-schema.md +90 -0
- package/.agents/skills/team-adversarial-swarm/specs/swarm-config-template.json +66 -0
- package/.agents/skills/team-adversarial-swarm/specs/swarm-protocol.md +105 -0
- package/.agents/skills/team-adversarial-swarm/workflows/wf-swarm-converge.js +197 -0
- package/.agents/skills/team-adversarial-swarm/workflows/wf-swarm-explore.js +194 -0
- package/.agents/skills/team-adversarial-swarm/workflows/wf-swarm-score.js +188 -0
- package/.agents/skills/team-adversarial-swarm/workflows/wf-swarm-synthesize.js +248 -0
- package/.agents/skills/team-swarm/scripts/aco.py +15 -15
- package/.agents/skills/team-swarm/scripts/pheromone.py +2 -2
- package/.agents/skills/team-swarm/scripts/scoring.py +1 -1
- package/.agy/skills/maestro-ralph-execute/SKILL.md +2 -1
- package/.agy/skills/maestro-swarm-workflow/SKILL.md +27 -19
- package/.agy/skills/maestro-universal-workflow/SKILL.md +560 -0
- package/.agy/skills/team-adversarial-swarm/SKILL.md +244 -0
- package/.agy/skills/team-adversarial-swarm/scripts/__pycache__/pheromone.cpython-313.pyc +0 -0
- package/.agy/skills/team-adversarial-swarm/scripts/__pycache__/scoring.cpython-313.pyc +0 -0
- package/.agy/skills/team-adversarial-swarm/scripts/aco.py +473 -0
- package/.agy/skills/team-adversarial-swarm/scripts/pheromone.py +144 -0
- package/.agy/skills/team-adversarial-swarm/scripts/scoring.py +92 -0
- package/.agy/skills/team-adversarial-swarm/scripts/test_aco.py +475 -0
- package/.agy/skills/team-adversarial-swarm/specs/ant-output-schema.md +115 -0
- package/.agy/skills/team-adversarial-swarm/specs/convergence-criteria.md +75 -0
- package/.agy/skills/team-adversarial-swarm/specs/pheromone-schema.md +90 -0
- package/.agy/skills/team-adversarial-swarm/specs/swarm-config-template.json +66 -0
- package/.agy/skills/team-adversarial-swarm/specs/swarm-protocol.md +105 -0
- package/.agy/skills/team-adversarial-swarm/workflows/wf-swarm-converge.js +197 -0
- package/.agy/skills/team-adversarial-swarm/workflows/wf-swarm-explore.js +194 -0
- package/.agy/skills/team-adversarial-swarm/workflows/wf-swarm-score.js +188 -0
- package/.agy/skills/team-adversarial-swarm/workflows/wf-swarm-synthesize.js +248 -0
- package/.agy/skills/team-swarm/scripts/aco.py +15 -15
- package/.agy/skills/team-swarm/scripts/pheromone.py +2 -2
- package/.agy/skills/team-swarm/scripts/scoring.py +1 -1
- package/.claude/commands/maestro-ralph-execute.md +2 -1
- package/.claude/commands/maestro-swarm-workflow.md +27 -19
- package/.claude/commands/maestro-universal-workflow.md +561 -0
- package/.claude/skills/team-adversarial-swarm/SKILL.md +233 -0
- package/.claude/skills/team-adversarial-swarm/scripts/__pycache__/pheromone.cpython-313.pyc +0 -0
- package/.claude/skills/team-adversarial-swarm/scripts/__pycache__/scoring.cpython-313.pyc +0 -0
- package/.claude/skills/team-adversarial-swarm/scripts/aco.py +473 -0
- package/.claude/skills/team-adversarial-swarm/scripts/pheromone.py +144 -0
- package/.claude/skills/team-adversarial-swarm/scripts/scoring.py +92 -0
- package/.claude/skills/team-adversarial-swarm/scripts/test_aco.py +475 -0
- package/.claude/skills/team-adversarial-swarm/specs/ant-output-schema.md +115 -0
- package/.claude/skills/team-adversarial-swarm/specs/convergence-criteria.md +75 -0
- package/.claude/skills/team-adversarial-swarm/specs/pheromone-schema.md +90 -0
- package/.claude/skills/team-adversarial-swarm/specs/swarm-config-template.json +66 -0
- package/.claude/skills/team-adversarial-swarm/specs/swarm-protocol.md +105 -0
- package/.claude/skills/team-adversarial-swarm/workflows/wf-swarm-converge.js +197 -0
- package/.claude/skills/team-adversarial-swarm/workflows/wf-swarm-explore.js +194 -0
- package/.claude/skills/team-adversarial-swarm/workflows/wf-swarm-score.js +188 -0
- package/.claude/skills/team-adversarial-swarm/workflows/wf-swarm-synthesize.js +248 -0
- package/.claude/skills/team-swarm/scripts/aco.py +15 -15
- package/.claude/skills/team-swarm/scripts/pheromone.py +2 -2
- package/.claude/skills/team-swarm/scripts/scoring.py +1 -1
- package/dashboard/dist-server/dashboard/src/server/wiki/graph-analysis.js +1 -1
- package/dashboard/dist-server/dashboard/src/server/wiki/graph-analysis.js.map +1 -1
- package/dashboard/dist-server/dashboard/src/server/wiki/search.js +1 -1
- package/dashboard/dist-server/dashboard/src/server/wiki/search.js.map +1 -1
- package/dashboard/dist-server/dashboard/src/server/wiki/virtual-wiki-adapters.d.ts +1 -1
- package/dashboard/dist-server/dashboard/src/server/wiki/virtual-wiki-adapters.js +5 -5
- package/dashboard/dist-server/dashboard/src/server/wiki/virtual-wiki-adapters.js.map +1 -1
- package/dashboard/dist-server/dashboard/src/server/wiki/wiki-indexer.js +3 -3
- package/dashboard/dist-server/dashboard/src/server/wiki/wiki-indexer.js.map +1 -1
- package/dashboard/dist-server/src/graph/types.d.ts +111 -0
- package/dashboard/dist-server/src/graph/types.js +2 -0
- package/dashboard/dist-server/src/graph/types.js.map +1 -0
- package/dist/src/commands/install-backend.d.ts +0 -7
- package/dist/src/commands/install-backend.d.ts.map +1 -1
- package/dist/src/commands/install-backend.js +0 -14
- package/dist/src/commands/install-backend.js.map +1 -1
- package/dist/src/commands/install.d.ts.map +1 -1
- package/dist/src/commands/install.js +0 -18
- package/dist/src/commands/install.js.map +1 -1
- package/dist/src/commands/kg.d.ts +2 -2
- package/dist/src/commands/kg.d.ts.map +1 -1
- package/dist/src/commands/kg.js +150 -179
- package/dist/src/commands/kg.js.map +1 -1
- package/dist/src/graph/analyzers/fs-analyzer.d.ts +10 -0
- package/dist/src/graph/analyzers/fs-analyzer.d.ts.map +1 -0
- package/dist/src/graph/analyzers/fs-analyzer.js +959 -0
- package/dist/src/graph/analyzers/fs-analyzer.js.map +1 -0
- package/dist/src/graph/index.d.ts +6 -0
- package/dist/src/graph/index.d.ts.map +1 -0
- package/dist/src/graph/index.js +6 -0
- package/dist/src/graph/index.js.map +1 -0
- package/dist/src/graph/loader.d.ts +3 -0
- package/dist/src/graph/loader.d.ts.map +1 -0
- package/dist/src/graph/loader.js +12 -0
- package/dist/src/graph/loader.js.map +1 -0
- package/dist/src/graph/merger.d.ts +56 -0
- package/dist/src/graph/merger.d.ts.map +1 -0
- package/dist/src/graph/merger.js +896 -0
- package/dist/src/graph/merger.js.map +1 -0
- package/dist/src/graph/query.d.ts +7 -0
- package/dist/src/graph/query.d.ts.map +1 -0
- package/dist/src/graph/query.js +126 -0
- package/dist/src/graph/query.js.map +1 -0
- package/dist/src/graph/types.d.ts +112 -0
- package/dist/src/graph/types.d.ts.map +1 -0
- package/dist/src/graph/types.js +2 -0
- package/dist/src/graph/types.js.map +1 -0
- package/dist/src/i18n/locales/en.d.ts.map +1 -1
- package/dist/src/i18n/locales/en.js +0 -10
- package/dist/src/i18n/locales/en.js.map +1 -1
- package/dist/src/i18n/locales/zh.d.ts.map +1 -1
- package/dist/src/i18n/locales/zh.js +0 -10
- package/dist/src/i18n/locales/zh.js.map +1 -1
- package/dist/src/i18n/types.d.ts +0 -9
- package/dist/src/i18n/types.d.ts.map +1 -1
- package/dist/src/tui/install-ui/InstallConfirm.d.ts +0 -1
- package/dist/src/tui/install-ui/InstallConfirm.d.ts.map +1 -1
- package/dist/src/tui/install-ui/InstallConfirm.js +1 -1
- package/dist/src/tui/install-ui/InstallConfirm.js.map +1 -1
- package/dist/src/tui/install-ui/InstallExecution.d.ts +0 -1
- package/dist/src/tui/install-ui/InstallExecution.d.ts.map +1 -1
- package/dist/src/tui/install-ui/InstallExecution.js +0 -22
- package/dist/src/tui/install-ui/InstallExecution.js.map +1 -1
- package/dist/src/tui/install-ui/InstallFlow.d.ts +1 -1
- package/dist/src/tui/install-ui/InstallFlow.d.ts.map +1 -1
- package/dist/src/tui/install-ui/InstallFlow.js +5 -23
- package/dist/src/tui/install-ui/InstallFlow.js.map +1 -1
- package/dist/src/tui/install-ui/InstallHub.d.ts +0 -2
- package/dist/src/tui/install-ui/InstallHub.d.ts.map +1 -1
- package/dist/src/tui/install-ui/InstallHub.js +0 -6
- package/dist/src/tui/install-ui/InstallHub.js.map +1 -1
- package/dist/src/tui/install-ui/InstallResult.d.ts.map +1 -1
- package/dist/src/tui/install-ui/InstallResult.js +1 -1
- package/dist/src/tui/install-ui/InstallResult.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 -1
- package/workflows/swarm/wf-analyze.js +195 -34
- package/workflows/swarm/wf-brainstorm.js +225 -53
- package/workflows/swarm/wf-execute.js +199 -23
- package/workflows/swarm/wf-grill.js +181 -20
- package/workflows/swarm/wf-milestone-audit.js +178 -29
- package/workflows/swarm/wf-plan.js +288 -53
- package/workflows/swarm/wf-review.js +195 -80
- package/workflows/swarm/wf-verify.js +125 -28
|
@@ -89,7 +89,7 @@ def cmd_init(args: argparse.Namespace) -> None:
|
|
|
89
89
|
paths = SessionPaths(Path(args.session))
|
|
90
90
|
if not paths.config.exists():
|
|
91
91
|
_fail(2, f"config not found: {paths.config}")
|
|
92
|
-
config = json.loads(paths.config.read_text())
|
|
92
|
+
config = json.loads(paths.config.read_text(encoding="utf-8"))
|
|
93
93
|
|
|
94
94
|
paths.ensure_dirs()
|
|
95
95
|
|
|
@@ -107,7 +107,7 @@ def cmd_init(args: argparse.Namespace) -> None:
|
|
|
107
107
|
"start_nodes": config.get("task_space", {}).get("start_nodes", "any"),
|
|
108
108
|
"edges": config.get("task_space", {}).get("edges", "complete"),
|
|
109
109
|
}
|
|
110
|
-
paths.task_space.write_text(json.dumps(task_space, indent=2, ensure_ascii=False))
|
|
110
|
+
paths.task_space.write_text(json.dumps(task_space, indent=2, ensure_ascii=False), encoding="utf-8")
|
|
111
111
|
|
|
112
112
|
# Initialize pheromone
|
|
113
113
|
aco_cfg = config.get("aco", {})
|
|
@@ -148,9 +148,9 @@ def _pick_start_node(nodes: List[str], state: PheromoneState, mode: str) -> str:
|
|
|
148
148
|
|
|
149
149
|
def cmd_select(args: argparse.Namespace) -> None:
|
|
150
150
|
paths = SessionPaths(Path(args.session))
|
|
151
|
-
config = json.loads(paths.config.read_text())
|
|
151
|
+
config = json.loads(paths.config.read_text(encoding="utf-8"))
|
|
152
152
|
state = PheromoneState.load(paths.pheromone_current)
|
|
153
|
-
task_space = json.loads(paths.task_space.read_text())
|
|
153
|
+
task_space = json.loads(paths.task_space.read_text(encoding="utf-8"))
|
|
154
154
|
|
|
155
155
|
n_ants = config.get("swarm", {}).get("n_ants", 5)
|
|
156
156
|
nodes = task_space["nodes"]
|
|
@@ -190,7 +190,7 @@ def _load_iteration_artifacts(paths: SessionPaths, iteration: int) -> List[dict]
|
|
|
190
190
|
artifacts = []
|
|
191
191
|
for f in files:
|
|
192
192
|
try:
|
|
193
|
-
artifacts.append(json.loads(Path(f).read_text()))
|
|
193
|
+
artifacts.append(json.loads(Path(f).read_text(encoding="utf-8")))
|
|
194
194
|
except json.JSONDecodeError as e:
|
|
195
195
|
print(f"warning: skipped malformed artifact {f}: {e}", file=sys.stderr)
|
|
196
196
|
return artifacts
|
|
@@ -213,9 +213,9 @@ def _validate_artifact(art: dict, valid_nodes: set) -> Optional[str]:
|
|
|
213
213
|
|
|
214
214
|
def cmd_update(args: argparse.Namespace) -> None:
|
|
215
215
|
paths = SessionPaths(Path(args.session))
|
|
216
|
-
config = json.loads(paths.config.read_text())
|
|
216
|
+
config = json.loads(paths.config.read_text(encoding="utf-8"))
|
|
217
217
|
state = PheromoneState.load(paths.pheromone_current)
|
|
218
|
-
task_space = json.loads(paths.task_space.read_text())
|
|
218
|
+
task_space = json.loads(paths.task_space.read_text(encoding="utf-8"))
|
|
219
219
|
valid_nodes = set(task_space["nodes"])
|
|
220
220
|
|
|
221
221
|
artifacts = _load_iteration_artifacts(paths, args.iter)
|
|
@@ -266,7 +266,7 @@ def cmd_update(args: argparse.Namespace) -> None:
|
|
|
266
266
|
# Elitist: re-load best history, deposit extra on best path
|
|
267
267
|
best_data = None
|
|
268
268
|
if paths.best.exists():
|
|
269
|
-
best_data = json.loads(paths.best.read_text())
|
|
269
|
+
best_data = json.loads(paths.best.read_text(encoding="utf-8"))
|
|
270
270
|
current_best = max(scored, key=lambda x: x["score"]) if scored else None
|
|
271
271
|
if current_best:
|
|
272
272
|
best_art = next(a for a in artifacts if a["ant_id"] == current_best["ant_id"])
|
|
@@ -281,7 +281,7 @@ def cmd_update(args: argparse.Namespace) -> None:
|
|
|
281
281
|
"evidence": best_art.get("evidence", []),
|
|
282
282
|
"updated_at": time.time(),
|
|
283
283
|
}
|
|
284
|
-
paths.best.write_text(json.dumps(best_data, indent=2, ensure_ascii=False))
|
|
284
|
+
paths.best.write_text(json.dumps(best_data, indent=2, ensure_ascii=False), encoding="utf-8")
|
|
285
285
|
# Elite deposit
|
|
286
286
|
state.deposit(best_data["path"], best_data["score"])
|
|
287
287
|
|
|
@@ -292,14 +292,14 @@ def cmd_update(args: argparse.Namespace) -> None:
|
|
|
292
292
|
|
|
293
293
|
# Persist trails
|
|
294
294
|
trails_file = paths.trails / f"{args.iter}.jsonl"
|
|
295
|
-
trails_file.write_text("\n".join(json.dumps(t, ensure_ascii=False) for t in trail_log))
|
|
295
|
+
trails_file.write_text("\n".join(json.dumps(t, ensure_ascii=False) for t in trail_log), encoding="utf-8")
|
|
296
296
|
|
|
297
297
|
mean_score = sum(s["score"] for s in scored) / len(scored) if scored else 0.0
|
|
298
298
|
best_score = best_data["score"] if best_data else 0.0
|
|
299
299
|
prev_best = 0.0
|
|
300
300
|
history_files = sorted(paths.pheromone_history.glob("*.json"))
|
|
301
301
|
if len(history_files) >= 2:
|
|
302
|
-
prev = json.loads(history_files[-2].read_text())
|
|
302
|
+
prev = json.loads(history_files[-2].read_text(encoding="utf-8"))
|
|
303
303
|
prev_best = prev.get("stats", {}).get("best_known", best_score)
|
|
304
304
|
delta = best_score - prev_best
|
|
305
305
|
|
|
@@ -323,7 +323,7 @@ def cmd_update(args: argparse.Namespace) -> None:
|
|
|
323
323
|
|
|
324
324
|
def cmd_converged(args: argparse.Namespace) -> None:
|
|
325
325
|
paths = SessionPaths(Path(args.session))
|
|
326
|
-
config = json.loads(paths.config.read_text())
|
|
326
|
+
config = json.loads(paths.config.read_text(encoding="utf-8"))
|
|
327
327
|
cv = config.get("convergence", {})
|
|
328
328
|
|
|
329
329
|
state = PheromoneState.load(paths.pheromone_current)
|
|
@@ -339,7 +339,7 @@ def cmd_converged(args: argparse.Namespace) -> None:
|
|
|
339
339
|
}
|
|
340
340
|
|
|
341
341
|
if paths.best.exists():
|
|
342
|
-
metrics["best_score"] = json.loads(paths.best.read_text()).get("score", 0.0)
|
|
342
|
+
metrics["best_score"] = json.loads(paths.best.read_text(encoding="utf-8")).get("score", 0.0)
|
|
343
343
|
|
|
344
344
|
# max_iterations
|
|
345
345
|
max_iter = cv.get("max_iterations", 5)
|
|
@@ -397,7 +397,7 @@ def cmd_report(args: argparse.Namespace) -> None:
|
|
|
397
397
|
|
|
398
398
|
best = None
|
|
399
399
|
if paths.best.exists():
|
|
400
|
-
best = json.loads(paths.best.read_text())
|
|
400
|
+
best = json.loads(paths.best.read_text(encoding="utf-8"))
|
|
401
401
|
|
|
402
402
|
# Top-K trails across all iterations
|
|
403
403
|
all_trails = []
|
|
@@ -410,7 +410,7 @@ def cmd_report(args: argparse.Namespace) -> None:
|
|
|
410
410
|
# Convergence curve
|
|
411
411
|
curve = []
|
|
412
412
|
for hf in sorted(paths.pheromone_history.glob("*.json"), key=lambda p: int(p.stem)):
|
|
413
|
-
snap = json.loads(hf.read_text())
|
|
413
|
+
snap = json.loads(hf.read_text(encoding="utf-8"))
|
|
414
414
|
curve.append({
|
|
415
415
|
"iteration": snap["iteration"],
|
|
416
416
|
"entropy": snap["stats"]["entropy"],
|
|
@@ -114,11 +114,11 @@ class PheromoneState:
|
|
|
114
114
|
|
|
115
115
|
def save(self, path: Path) -> None:
|
|
116
116
|
path.parent.mkdir(parents=True, exist_ok=True)
|
|
117
|
-
path.write_text(json.dumps(self.to_dict(), indent=2, ensure_ascii=False))
|
|
117
|
+
path.write_text(json.dumps(self.to_dict(), indent=2, ensure_ascii=False), encoding="utf-8")
|
|
118
118
|
|
|
119
119
|
@classmethod
|
|
120
120
|
def load(cls, path: Path) -> "PheromoneState":
|
|
121
|
-
return cls.from_dict(json.loads(path.read_text()))
|
|
121
|
+
return cls.from_dict(json.loads(path.read_text(encoding="utf-8")))
|
|
122
122
|
|
|
123
123
|
def select_neighbors(
|
|
124
124
|
self,
|
|
@@ -62,7 +62,7 @@ def load_verified_scores(scores_file: Path) -> Dict[str, float]:
|
|
|
62
62
|
"""Load pre-computed verified_scores from scorer role output (if exists)."""
|
|
63
63
|
if not scores_file.exists():
|
|
64
64
|
return {}
|
|
65
|
-
data = json.loads(scores_file.read_text())
|
|
65
|
+
data = json.loads(scores_file.read_text(encoding="utf-8"))
|
|
66
66
|
return {
|
|
67
67
|
ant_id: entry["verified_score"]
|
|
68
68
|
for ant_id, entry in data.get("scores", {}).items()
|
|
@@ -50,6 +50,7 @@ HARD RULES:
|
|
|
50
50
|
6. **Self-invocation chain** — 持续直到全部 `completion_confirmed` 或 paused
|
|
51
51
|
7. **status.json 每步骤后由 CLI 原子写盘** — resume-safe
|
|
52
52
|
8. **STATUS 枚举受限** — 仅 `DONE | DONE_WITH_CONCERNS | NEEDS_RETRY | BLOCKED`;`NEEDS_CONTEXT` 已废除
|
|
53
|
+
9. **CLI 输出禁止截断** — `maestro ralph next` 的 stdout 包含完整 skill prompt,必须全量捕获。**严禁** `| head`、`| tail`、`2>&1 | head -N` 等任何截断管道。Bash timeout 可加长但不可截断输出
|
|
53
54
|
</invariants>
|
|
54
55
|
|
|
55
56
|
<state_machine>
|
|
@@ -153,7 +154,7 @@ Write enriched args back to status.json.
|
|
|
153
154
|
|
|
154
155
|
### A_EXEC_STEP
|
|
155
156
|
|
|
156
|
-
1. **Load** — `run_command("maestro ralph next")`
|
|
157
|
+
1. **Load** — `run_command("maestro ralph next --session <session_id>")` — **必须全量捕获 stdout,严禁 `| head`/`| tail` 等截断管道**(stdout 含完整 skill prompt,截断会导致执行内容不完整)
|
|
157
158
|
- 退出码 0 → 按 stdout 内联执行
|
|
158
159
|
- 退出码 2 → 交给 S_LOCATE
|
|
159
160
|
- 退出码 3 → active_step_index 已被占用
|
|
@@ -20,16 +20,16 @@ swarm-workflow provides parallel compute bursts within individual steps.
|
|
|
20
20
|
|
|
21
21
|
Scripts: `~/.maestro/workflows/swarm/wf-*.js`
|
|
22
22
|
|
|
23
|
-
| Script | Accelerates | Pattern |
|
|
24
|
-
|
|
25
|
-
| `wf-analyze` | maestro-analyze |
|
|
26
|
-
| `wf-brainstorm` | maestro-brainstorm | multi-role
|
|
27
|
-
| `wf-review` | quality-review | 6-
|
|
28
|
-
| `wf-verify` | maestro-verify | 3-layer
|
|
29
|
-
| `wf-grill` | maestro-grill |
|
|
30
|
-
| `wf-plan` | maestro-plan | parallel context
|
|
31
|
-
| `wf-execute` | maestro-execute | wave-based parallel
|
|
32
|
-
| `wf-milestone-audit` | maestro-milestone-audit | parallel
|
|
23
|
+
| Script | Accelerates | Adversarial Pattern |
|
|
24
|
+
|--------|-------------|---------------------|
|
|
25
|
+
| `wf-analyze` | maestro-analyze | explore → 6-dim scoring → **skeptic cross-verify** → **3-way advocacy (go/no-go/conditional) + referee** |
|
|
26
|
+
| `wf-brainstorm` | maestro-brainstorm | multi-role analysis → **3-specialist cross-review** → **3-proposal competition** → **arbitrator** |
|
|
27
|
+
| `wf-review` | quality-review | 6-dim scan → **3-vote adversarial verify (prosecutor/defense/judge)** → **3-perspective report + arbitrated verdict** |
|
|
28
|
+
| `wf-verify` | maestro-verify | 3-layer + antipattern + convergence → **prosecutor vs defender debate** → **judge verdict** |
|
|
29
|
+
| `wf-grill` | maestro-grill | explore → parallel branch stress → **meta-skeptic challenge** → **3-vote verdict (optimist/pessimist/realist)** |
|
|
30
|
+
| `wf-plan` | maestro-plan | parallel context → **3-strategy competing proposals** → **judge panel scoring** → **3-critic adversarial check** |
|
|
31
|
+
| `wf-execute` | maestro-execute | wave-based parallel execution → **adversarial convergence spot-check** → **3-vote status determination** |
|
|
32
|
+
| `wf-milestone-audit` | maestro-milestone-audit | parallel 3-dim audit → **adversarial dimension challenge** → **3-vote verdict (strict/lenient/objective)** |
|
|
33
33
|
|
|
34
34
|
Integration modes:
|
|
35
35
|
- **Standalone**: `/maestro-swarm-workflow "analyze auth module"` — direct invocation
|
|
@@ -174,11 +174,15 @@ Intent-to-script routing(按关键词匹配,--script 优先级最高):
|
|
|
174
174
|
|
|
175
175
|
Workflow 返回 JSON 后:
|
|
176
176
|
|
|
177
|
-
1.
|
|
178
|
-
- analyze: overall_score, scope_verdict,
|
|
179
|
-
- brainstorm: role count, conflict/synergy count,
|
|
180
|
-
- review: verdict (APPROVE/REQUEST_CHANGES/BLOCK), confirmed vs false-positive count
|
|
181
|
-
- verify:
|
|
177
|
+
1. **摘要输出**:按脚本类型格式化关键指标(含对抗决策结果)
|
|
178
|
+
- analyze: overall_score, scope_verdict, adversarial_outcome (go/no-go/conditional advocacy + referee), scores_challenged count
|
|
179
|
+
- brainstorm: role count, conflict/synergy count, 3-proposal competition result, arbitration notes
|
|
180
|
+
- review: verdict (APPROVE/REQUEST_CHANGES/BLOCK), 3-vote tally, confirmed vs false-positive count, adversarial_verdict
|
|
181
|
+
- verify: overall_status, prosecutor vs defender confidence, adversarial_outcome, gap count
|
|
182
|
+
- grill: overall_verdict, meta-skeptic quality rating, 3-vote verdict tally, overblown findings count
|
|
183
|
+
- plan: selected_strategy (breadth/depth/risk), judge panel scores, 3-critic adversarial check verdict
|
|
184
|
+
- execute: 3-vote status (DONE/DONE_WITH_CONCERNS/NEEDS_RETRY), convergence trust %, discrepancy count
|
|
185
|
+
- milestone-audit: 3-vote verdict, dimensions_overturned count, next_step
|
|
182
186
|
|
|
183
187
|
2. **Artifact 写入**(可选):
|
|
184
188
|
- 若当前在 ralph session 中(检测 `.workflow/.maestro/ralph-*/status.json` 状态为 running):
|
|
@@ -186,10 +190,14 @@ Workflow 返回 JSON 后:
|
|
|
186
190
|
- 否则写入 `.workflow/scratch/{YYYYMMDD}-swarm-{script}-{slug}/results.json`
|
|
187
191
|
|
|
188
192
|
3. **Ralph 兼容产出**:
|
|
189
|
-
- analyze → `analysis.md` + `context.md`(decisions)+ `conclusions.json`
|
|
190
|
-
- brainstorm → `guidance-specification.md`
|
|
191
|
-
- review → `review.json
|
|
192
|
-
- verify → `verification.json
|
|
193
|
+
- analyze → `analysis.md` + `context.md`(decisions)+ `conclusions.json` + `adversarial-debate.json`
|
|
194
|
+
- brainstorm → `guidance-specification.md` + `proposals-competition.json`
|
|
195
|
+
- review → `review.json`(含 adversarial_verdict + 3-vote tally)
|
|
196
|
+
- verify → `verification.json`(含 adversarial_outcome: prosecutor/defender debate)
|
|
197
|
+
- grill → `grill-results.json`(含 meta-challenge + 3-vote verdict)
|
|
198
|
+
- plan → `plan.json`(含 competition scores + critic feedback)
|
|
199
|
+
- execute → `execution-report.json`(含 convergence_checks + 3-vote status)
|
|
200
|
+
- milestone-audit → `audit-report.json`(含 dimension challenges + 3-vote verdict)
|
|
193
201
|
|
|
194
202
|
4. **RunId 提示**:显示 `Resume: /maestro-swarm-workflow --resume {runId}` 用于增量重跑
|
|
195
203
|
|