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.
Files changed (151) hide show
  1. package/.agents/skills/maestro-ralph-execute/SKILL.md +2 -1
  2. package/.agents/skills/maestro-swarm-workflow/SKILL.md +27 -19
  3. package/.agents/skills/maestro-universal-workflow/SKILL.md +563 -0
  4. package/.agents/skills/team-adversarial-swarm/SKILL.md +235 -0
  5. package/.agents/skills/team-adversarial-swarm/scripts/__pycache__/pheromone.cpython-313.pyc +0 -0
  6. package/.agents/skills/team-adversarial-swarm/scripts/__pycache__/scoring.cpython-313.pyc +0 -0
  7. package/.agents/skills/team-adversarial-swarm/scripts/aco.py +473 -0
  8. package/.agents/skills/team-adversarial-swarm/scripts/pheromone.py +144 -0
  9. package/.agents/skills/team-adversarial-swarm/scripts/scoring.py +92 -0
  10. package/.agents/skills/team-adversarial-swarm/scripts/test_aco.py +475 -0
  11. package/.agents/skills/team-adversarial-swarm/specs/ant-output-schema.md +115 -0
  12. package/.agents/skills/team-adversarial-swarm/specs/convergence-criteria.md +75 -0
  13. package/.agents/skills/team-adversarial-swarm/specs/pheromone-schema.md +90 -0
  14. package/.agents/skills/team-adversarial-swarm/specs/swarm-config-template.json +66 -0
  15. package/.agents/skills/team-adversarial-swarm/specs/swarm-protocol.md +105 -0
  16. package/.agents/skills/team-adversarial-swarm/workflows/wf-swarm-converge.js +197 -0
  17. package/.agents/skills/team-adversarial-swarm/workflows/wf-swarm-explore.js +194 -0
  18. package/.agents/skills/team-adversarial-swarm/workflows/wf-swarm-score.js +188 -0
  19. package/.agents/skills/team-adversarial-swarm/workflows/wf-swarm-synthesize.js +248 -0
  20. package/.agents/skills/team-swarm/scripts/aco.py +15 -15
  21. package/.agents/skills/team-swarm/scripts/pheromone.py +2 -2
  22. package/.agents/skills/team-swarm/scripts/scoring.py +1 -1
  23. package/.agy/skills/maestro-ralph-execute/SKILL.md +2 -1
  24. package/.agy/skills/maestro-swarm-workflow/SKILL.md +27 -19
  25. package/.agy/skills/maestro-universal-workflow/SKILL.md +560 -0
  26. package/.agy/skills/team-adversarial-swarm/SKILL.md +244 -0
  27. package/.agy/skills/team-adversarial-swarm/scripts/__pycache__/pheromone.cpython-313.pyc +0 -0
  28. package/.agy/skills/team-adversarial-swarm/scripts/__pycache__/scoring.cpython-313.pyc +0 -0
  29. package/.agy/skills/team-adversarial-swarm/scripts/aco.py +473 -0
  30. package/.agy/skills/team-adversarial-swarm/scripts/pheromone.py +144 -0
  31. package/.agy/skills/team-adversarial-swarm/scripts/scoring.py +92 -0
  32. package/.agy/skills/team-adversarial-swarm/scripts/test_aco.py +475 -0
  33. package/.agy/skills/team-adversarial-swarm/specs/ant-output-schema.md +115 -0
  34. package/.agy/skills/team-adversarial-swarm/specs/convergence-criteria.md +75 -0
  35. package/.agy/skills/team-adversarial-swarm/specs/pheromone-schema.md +90 -0
  36. package/.agy/skills/team-adversarial-swarm/specs/swarm-config-template.json +66 -0
  37. package/.agy/skills/team-adversarial-swarm/specs/swarm-protocol.md +105 -0
  38. package/.agy/skills/team-adversarial-swarm/workflows/wf-swarm-converge.js +197 -0
  39. package/.agy/skills/team-adversarial-swarm/workflows/wf-swarm-explore.js +194 -0
  40. package/.agy/skills/team-adversarial-swarm/workflows/wf-swarm-score.js +188 -0
  41. package/.agy/skills/team-adversarial-swarm/workflows/wf-swarm-synthesize.js +248 -0
  42. package/.agy/skills/team-swarm/scripts/aco.py +15 -15
  43. package/.agy/skills/team-swarm/scripts/pheromone.py +2 -2
  44. package/.agy/skills/team-swarm/scripts/scoring.py +1 -1
  45. package/.claude/commands/maestro-ralph-execute.md +2 -1
  46. package/.claude/commands/maestro-swarm-workflow.md +27 -19
  47. package/.claude/commands/maestro-universal-workflow.md +561 -0
  48. package/.claude/skills/team-adversarial-swarm/SKILL.md +233 -0
  49. package/.claude/skills/team-adversarial-swarm/scripts/__pycache__/pheromone.cpython-313.pyc +0 -0
  50. package/.claude/skills/team-adversarial-swarm/scripts/__pycache__/scoring.cpython-313.pyc +0 -0
  51. package/.claude/skills/team-adversarial-swarm/scripts/aco.py +473 -0
  52. package/.claude/skills/team-adversarial-swarm/scripts/pheromone.py +144 -0
  53. package/.claude/skills/team-adversarial-swarm/scripts/scoring.py +92 -0
  54. package/.claude/skills/team-adversarial-swarm/scripts/test_aco.py +475 -0
  55. package/.claude/skills/team-adversarial-swarm/specs/ant-output-schema.md +115 -0
  56. package/.claude/skills/team-adversarial-swarm/specs/convergence-criteria.md +75 -0
  57. package/.claude/skills/team-adversarial-swarm/specs/pheromone-schema.md +90 -0
  58. package/.claude/skills/team-adversarial-swarm/specs/swarm-config-template.json +66 -0
  59. package/.claude/skills/team-adversarial-swarm/specs/swarm-protocol.md +105 -0
  60. package/.claude/skills/team-adversarial-swarm/workflows/wf-swarm-converge.js +197 -0
  61. package/.claude/skills/team-adversarial-swarm/workflows/wf-swarm-explore.js +194 -0
  62. package/.claude/skills/team-adversarial-swarm/workflows/wf-swarm-score.js +188 -0
  63. package/.claude/skills/team-adversarial-swarm/workflows/wf-swarm-synthesize.js +248 -0
  64. package/.claude/skills/team-swarm/scripts/aco.py +15 -15
  65. package/.claude/skills/team-swarm/scripts/pheromone.py +2 -2
  66. package/.claude/skills/team-swarm/scripts/scoring.py +1 -1
  67. package/dashboard/dist-server/dashboard/src/server/wiki/graph-analysis.js +1 -1
  68. package/dashboard/dist-server/dashboard/src/server/wiki/graph-analysis.js.map +1 -1
  69. package/dashboard/dist-server/dashboard/src/server/wiki/search.js +1 -1
  70. package/dashboard/dist-server/dashboard/src/server/wiki/search.js.map +1 -1
  71. package/dashboard/dist-server/dashboard/src/server/wiki/virtual-wiki-adapters.d.ts +1 -1
  72. package/dashboard/dist-server/dashboard/src/server/wiki/virtual-wiki-adapters.js +5 -5
  73. package/dashboard/dist-server/dashboard/src/server/wiki/virtual-wiki-adapters.js.map +1 -1
  74. package/dashboard/dist-server/dashboard/src/server/wiki/wiki-indexer.js +3 -3
  75. package/dashboard/dist-server/dashboard/src/server/wiki/wiki-indexer.js.map +1 -1
  76. package/dashboard/dist-server/src/graph/types.d.ts +111 -0
  77. package/dashboard/dist-server/src/graph/types.js +2 -0
  78. package/dashboard/dist-server/src/graph/types.js.map +1 -0
  79. package/dist/src/commands/install-backend.d.ts +0 -7
  80. package/dist/src/commands/install-backend.d.ts.map +1 -1
  81. package/dist/src/commands/install-backend.js +0 -14
  82. package/dist/src/commands/install-backend.js.map +1 -1
  83. package/dist/src/commands/install.d.ts.map +1 -1
  84. package/dist/src/commands/install.js +0 -18
  85. package/dist/src/commands/install.js.map +1 -1
  86. package/dist/src/commands/kg.d.ts +2 -2
  87. package/dist/src/commands/kg.d.ts.map +1 -1
  88. package/dist/src/commands/kg.js +150 -179
  89. package/dist/src/commands/kg.js.map +1 -1
  90. package/dist/src/graph/analyzers/fs-analyzer.d.ts +10 -0
  91. package/dist/src/graph/analyzers/fs-analyzer.d.ts.map +1 -0
  92. package/dist/src/graph/analyzers/fs-analyzer.js +959 -0
  93. package/dist/src/graph/analyzers/fs-analyzer.js.map +1 -0
  94. package/dist/src/graph/index.d.ts +6 -0
  95. package/dist/src/graph/index.d.ts.map +1 -0
  96. package/dist/src/graph/index.js +6 -0
  97. package/dist/src/graph/index.js.map +1 -0
  98. package/dist/src/graph/loader.d.ts +3 -0
  99. package/dist/src/graph/loader.d.ts.map +1 -0
  100. package/dist/src/graph/loader.js +12 -0
  101. package/dist/src/graph/loader.js.map +1 -0
  102. package/dist/src/graph/merger.d.ts +56 -0
  103. package/dist/src/graph/merger.d.ts.map +1 -0
  104. package/dist/src/graph/merger.js +896 -0
  105. package/dist/src/graph/merger.js.map +1 -0
  106. package/dist/src/graph/query.d.ts +7 -0
  107. package/dist/src/graph/query.d.ts.map +1 -0
  108. package/dist/src/graph/query.js +126 -0
  109. package/dist/src/graph/query.js.map +1 -0
  110. package/dist/src/graph/types.d.ts +112 -0
  111. package/dist/src/graph/types.d.ts.map +1 -0
  112. package/dist/src/graph/types.js +2 -0
  113. package/dist/src/graph/types.js.map +1 -0
  114. package/dist/src/i18n/locales/en.d.ts.map +1 -1
  115. package/dist/src/i18n/locales/en.js +0 -10
  116. package/dist/src/i18n/locales/en.js.map +1 -1
  117. package/dist/src/i18n/locales/zh.d.ts.map +1 -1
  118. package/dist/src/i18n/locales/zh.js +0 -10
  119. package/dist/src/i18n/locales/zh.js.map +1 -1
  120. package/dist/src/i18n/types.d.ts +0 -9
  121. package/dist/src/i18n/types.d.ts.map +1 -1
  122. package/dist/src/tui/install-ui/InstallConfirm.d.ts +0 -1
  123. package/dist/src/tui/install-ui/InstallConfirm.d.ts.map +1 -1
  124. package/dist/src/tui/install-ui/InstallConfirm.js +1 -1
  125. package/dist/src/tui/install-ui/InstallConfirm.js.map +1 -1
  126. package/dist/src/tui/install-ui/InstallExecution.d.ts +0 -1
  127. package/dist/src/tui/install-ui/InstallExecution.d.ts.map +1 -1
  128. package/dist/src/tui/install-ui/InstallExecution.js +0 -22
  129. package/dist/src/tui/install-ui/InstallExecution.js.map +1 -1
  130. package/dist/src/tui/install-ui/InstallFlow.d.ts +1 -1
  131. package/dist/src/tui/install-ui/InstallFlow.d.ts.map +1 -1
  132. package/dist/src/tui/install-ui/InstallFlow.js +5 -23
  133. package/dist/src/tui/install-ui/InstallFlow.js.map +1 -1
  134. package/dist/src/tui/install-ui/InstallHub.d.ts +0 -2
  135. package/dist/src/tui/install-ui/InstallHub.d.ts.map +1 -1
  136. package/dist/src/tui/install-ui/InstallHub.js +0 -6
  137. package/dist/src/tui/install-ui/InstallHub.js.map +1 -1
  138. package/dist/src/tui/install-ui/InstallResult.d.ts.map +1 -1
  139. package/dist/src/tui/install-ui/InstallResult.js +1 -1
  140. package/dist/src/tui/install-ui/InstallResult.js.map +1 -1
  141. package/dist/src/utils/update-notices.js +12 -0
  142. package/dist/src/utils/update-notices.js.map +1 -1
  143. package/package.json +1 -1
  144. package/workflows/swarm/wf-analyze.js +195 -34
  145. package/workflows/swarm/wf-brainstorm.js +225 -53
  146. package/workflows/swarm/wf-execute.js +199 -23
  147. package/workflows/swarm/wf-grill.js +181 -20
  148. package/workflows/swarm/wf-milestone-audit.js +178 -29
  149. package/workflows/swarm/wf-plan.js +288 -53
  150. package/workflows/swarm/wf-review.js +195 -80
  151. 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()
@@ -52,6 +52,7 @@ HARD RULES:
52
52
  6. **Self-invocation chain** — 持续直到全部 `completion_confirmed` 或 paused
53
53
  7. **status.json 每步骤后由 CLI 原子写盘** — resume-safe
54
54
  8. **STATUS 枚举受限** — 仅 `DONE | DONE_WITH_CONCERNS | NEEDS_RETRY | BLOCKED`;`NEEDS_CONTEXT` 已废除
55
+ 9. **CLI 输出禁止截断** — `maestro ralph next` 的 stdout 包含完整 skill prompt,必须全量捕获。**严禁** `| head`、`| tail`、`2>&1 | head -N` 等任何截断管道。Bash timeout 可加长但不可截断输出
55
56
  </invariants>
56
57
 
57
58
  <state_machine>
@@ -155,7 +156,7 @@ Write enriched args back to status.json.
155
156
 
156
157
  ### A_EXEC_STEP
157
158
 
158
- 1. **Load** — `Bash("maestro ralph next")`
159
+ 1. **Load** — `Bash("maestro ralph next --session <session_id>")` — **必须全量捕获 stdout,严禁 `| head`/`| tail` 等截断管道**(stdout 含完整 skill prompt,截断会导致执行内容不完整)
159
160
  - 退出码 0 → 按 stdout 内联执行
160
161
  - 退出码 2 → 交给 S_LOCATE
161
162
  - 退出码 3 → active_step_index 已被占用
@@ -21,16 +21,16 @@ swarm-workflow provides parallel compute bursts within individual steps.
21
21
 
22
22
  Scripts: `~/.maestro/workflows/swarm/wf-*.js`
23
23
 
24
- | Script | Accelerates | Pattern |
25
- |--------|-------------|---------|
26
- | `wf-analyze` | maestro-analyze | cli-explore-agent → 6-dimension parallel scoring → synthesis |
27
- | `wf-brainstorm` | maestro-brainstorm | multi-role parallel analysis → cross-role-reviewerguidance |
28
- | `wf-review` | quality-review | 6-dimension workflow-reviewer → adversarial verify → report |
29
- | `wf-verify` | maestro-verify | 3-layer workflow-verifier + convergence + antipatternaggregate |
30
- | `wf-grill` | maestro-grill | cli-explore-agent → parallel branch stress-testingcontradiction synthesis |
31
- | `wf-plan` | maestro-plan | parallel context exploration workflow-plannerplan-checker |
32
- | `wf-execute` | maestro-execute | wave-based parallel workflow-executor (worktree isolation) |
33
- | `wf-milestone-audit` | maestro-milestone-audit | parallel coverage + execution + integration-checker |
24
+ | Script | Accelerates | Adversarial Pattern |
25
+ |--------|-------------|---------------------|
26
+ | `wf-analyze` | maestro-analyze | explore → 6-dim scoring → **skeptic cross-verify** → **3-way advocacy (go/no-go/conditional) + referee** |
27
+ | `wf-brainstorm` | maestro-brainstorm | multi-role analysis → **3-specialist cross-review** → **3-proposal competition** **arbitrator** |
28
+ | `wf-review` | quality-review | 6-dim scan**3-vote adversarial verify (prosecutor/defense/judge)** **3-perspective report + arbitrated verdict** |
29
+ | `wf-verify` | maestro-verify | 3-layer + antipattern + convergence **prosecutor vs defender debate** **judge verdict** |
30
+ | `wf-grill` | maestro-grill | explore → parallel branch stress → **meta-skeptic challenge** **3-vote verdict (optimist/pessimist/realist)** |
31
+ | `wf-plan` | maestro-plan | parallel context → **3-strategy competing proposals** **judge panel scoring** → **3-critic adversarial check** |
32
+ | `wf-execute` | maestro-execute | wave-based parallel execution → **adversarial convergence spot-check** **3-vote status determination** |
33
+ | `wf-milestone-audit` | maestro-milestone-audit | parallel 3-dim audit **adversarial dimension challenge** → **3-vote verdict (strict/lenient/objective)** |
34
34
 
35
35
  Integration modes:
36
36
  - **Standalone**: `/maestro-swarm-workflow "analyze auth module"` — direct invocation
@@ -175,11 +175,15 @@ Intent-to-script routing(按关键词匹配,--script 优先级最高):
175
175
 
176
176
  Workflow 返回 JSON 后:
177
177
 
178
- 1. **摘要输出**:按脚本类型格式化关键指标
179
- - analyze: overall_score, scope_verdict, go_no_go, critical findings count
180
- - brainstorm: role count, conflict/synergy count, top guidance items
181
- - review: verdict (APPROVE/REQUEST_CHANGES/BLOCK), confirmed vs false-positive count
182
- - verify: overall_passed, confidence, gap count, antipattern blocker count
178
+ 1. **摘要输出**:按脚本类型格式化关键指标(含对抗决策结果)
179
+ - analyze: overall_score, scope_verdict, adversarial_outcome (go/no-go/conditional advocacy + referee), scores_challenged count
180
+ - brainstorm: role count, conflict/synergy count, 3-proposal competition result, arbitration notes
181
+ - review: verdict (APPROVE/REQUEST_CHANGES/BLOCK), 3-vote tally, confirmed vs false-positive count, adversarial_verdict
182
+ - verify: overall_status, prosecutor vs defender confidence, adversarial_outcome, gap count
183
+ - grill: overall_verdict, meta-skeptic quality rating, 3-vote verdict tally, overblown findings count
184
+ - plan: selected_strategy (breadth/depth/risk), judge panel scores, 3-critic adversarial check verdict
185
+ - execute: 3-vote status (DONE/DONE_WITH_CONCERNS/NEEDS_RETRY), convergence trust %, discrepancy count
186
+ - milestone-audit: 3-vote verdict, dimensions_overturned count, next_step
183
187
 
184
188
  2. **Artifact 写入**(可选):
185
189
  - 若当前在 ralph session 中(检测 `.workflow/.maestro/ralph-*/status.json` 状态为 running):
@@ -187,10 +191,14 @@ Workflow 返回 JSON 后:
187
191
  - 否则写入 `.workflow/scratch/{YYYYMMDD}-swarm-{script}-{slug}/results.json`
188
192
 
189
193
  3. **Ralph 兼容产出**:
190
- - analyze → `analysis.md` + `context.md`(decisions)+ `conclusions.json`
191
- - brainstorm → `guidance-specification.md`
192
- - review → `review.json`
193
- - verify → `verification.json`
194
+ - analyze → `analysis.md` + `context.md`(decisions)+ `conclusions.json` + `adversarial-debate.json`
195
+ - brainstorm → `guidance-specification.md` + `proposals-competition.json`
196
+ - review → `review.json`(含 adversarial_verdict + 3-vote tally)
197
+ - verify → `verification.json`(含 adversarial_outcome: prosecutor/defender debate)
198
+ - grill → `grill-results.json`(含 meta-challenge + 3-vote verdict)
199
+ - plan → `plan.json`(含 competition scores + critic feedback)
200
+ - execute → `execution-report.json`(含 convergence_checks + 3-vote status)
201
+ - milestone-audit → `audit-report.json`(含 dimension challenges + 3-vote verdict)
194
202
 
195
203
  4. **RunId 提示**:显示 `Resume: /maestro-swarm-workflow --resume {runId}` 用于增量重跑
196
204