@mmerterden/multi-agent-pipeline 12.11.0 → 13.1.0

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 (47) hide show
  1. package/CHANGELOG.md +179 -0
  2. package/README.md +24 -7
  3. package/index.js +5 -2
  4. package/install/_codex-agents.mjs +211 -0
  5. package/install/_codex-instructions.mjs +33 -0
  6. package/install/_managed-block.mjs +99 -0
  7. package/install/codex.mjs +478 -0
  8. package/install/copilot.mjs +34 -80
  9. package/install/index.mjs +25 -9
  10. package/install/templates/codex-instructions.md +45 -0
  11. package/package.json +5 -3
  12. package/pipeline/claude-md-template.md +1 -0
  13. package/pipeline/commands/multi-agent/SKILL.md +1 -1
  14. package/pipeline/commands/multi-agent/dev/SKILL.md +52 -6
  15. package/pipeline/commands/multi-agent/dev-local/SKILL.md +21 -0
  16. package/pipeline/commands/multi-agent/finish/SKILL.md +1 -1
  17. package/pipeline/commands/multi-agent/language/SKILL.md +2 -2
  18. package/pipeline/commands/multi-agent/setup/SKILL.md +69 -2
  19. package/pipeline/commands/multi-agent/sync/SKILL.md +128 -5
  20. package/pipeline/commands/multi-agent/testflight-validation/SKILL.md +219 -0
  21. package/pipeline/commands/multi-agent/update/SKILL.md +7 -4
  22. package/pipeline/multi-agent-refs/_input-parser.md +1 -1
  23. package/pipeline/multi-agent-refs/component-dispatch.md +40 -7
  24. package/pipeline/multi-agent-refs/cross-cli-contract.md +51 -17
  25. package/pipeline/multi-agent-refs/features/model-fallback.md +29 -0
  26. package/pipeline/multi-agent-refs/features/review-multi-repo.md +1 -1
  27. package/pipeline/multi-agent-refs/phases/log-format.md +1 -1
  28. package/pipeline/multi-agent-refs/phases/phase-0-init.md +43 -2
  29. package/pipeline/multi-agent-refs/phases/phase-1-analysis.md +24 -1
  30. package/pipeline/multi-agent-refs/phases/phase-3-dev.md +32 -0
  31. package/pipeline/multi-agent-refs/phases/phase-4-review.md +62 -5
  32. package/pipeline/multi-agent-refs/progress-contract.md +1 -1
  33. package/pipeline/multi-agent-refs/tracker-contract.md +17 -1
  34. package/pipeline/schemas/prefs.schema.json +296 -62
  35. package/pipeline/schemas/reviewer-output.schema.json +1 -1
  36. package/pipeline/schemas/triage-output.schema.json +1 -1
  37. package/pipeline/scripts/cost-table.json +15 -1
  38. package/pipeline/scripts/phase0-exit-gate.mjs +185 -0
  39. package/pipeline/scripts/smoke-cross-cli-behavior.sh +25 -10
  40. package/pipeline/scripts/uninstall.mjs +105 -9
  41. package/pipeline/scripts/update-check.sh +2 -1
  42. package/pipeline/skills/shared/core/multi-agent-dev/SKILL.md +21 -0
  43. package/pipeline/skills/shared/core/multi-agent-dev-local/SKILL.md +21 -0
  44. package/pipeline/skills/shared/core/multi-agent-language/SKILL.md +2 -2
  45. package/pipeline/skills/shared/core/multi-agent-setup/SKILL.md +48 -1
  46. package/pipeline/skills/shared/core/multi-agent-sync/SKILL.md +87 -6
  47. package/pipeline/skills/shared/core/multi-agent-testflight-validation/SKILL.md +120 -0
@@ -218,11 +218,42 @@ Launch Agent instances **in parallel** using the shared `code-reviewer` subagent
218
218
 
219
219
  **Scope from Step 1.77.** `$REVIEW_SCOPE == "single"` → dispatch **Reviewer 1 only**, and skip Step 2.5 + 3.6 (both no-ops with one reviewer). `"full"` (default + fail-safe) → the whole set below. Either way record the count in `consensus.reviewerCount`.
220
220
 
221
- | Reviewer | subagent_type | Model | Focus | Skills Referenced | Where it runs |
222
- | ---------- | ----------------- | ------------------- | --------------------------------- | --------------------------------------------- | -------------------- |
223
- | Reviewer 1 | `code-reviewer` | `claude-fable-5` (Claude Code) / `claude-opus-4-8` (Copilot CLI) | Deep security + architecture | `api-security-best-practices`, `architecture` | Both CLIs |
224
- | Reviewer 2 | `code-reviewer` | `gpt-5.4` | Edge cases, different perspective | cross-model diversity | **Copilot CLI only** |
225
- | Reviewer 3 | `code-reviewer` | `claude-sonnet-4-6` | Quality + correctness + naming | `clean-code`, stack-specific skill | Both CLIs |
221
+ | Reviewer | subagent_type | Claude Code | Copilot CLI | Codex CLI | Focus | Skills Referenced |
222
+ | ---------- | --------------- | --- | --- | --- | --- | --- |
223
+ | Reviewer 1 | `code-reviewer` | `claude-fable-5` | `claude-opus-4-8` | `gpt-5.6` @ `xhigh` | Deep security + architecture | `api-security-best-practices`, `architecture` |
224
+ | Reviewer 2 | `code-reviewer` | (not dispatched) | `gpt-5.4` | `gpt-5.4` @ `high` | Edge cases, different perspective | cross-model diversity |
225
+ | Reviewer 3 | `code-reviewer` | `claude-sonnet-4-6` | `claude-sonnet-4-6` | `gpt-5.6` @ `medium` | Quality + correctness + naming | `clean-code`, stack-specific skill |
226
+ | Triage | triage persona | `claude-fable-5` | `claude-opus-4-8` | `gpt-5.6` @ `max` | Filter false positives + out-of-scope | - |
227
+
228
+ Reviewer count per host: **Claude Code 2, Copilot CLI 3, Codex CLI 3**.
229
+
230
+ #### Codex CLI - two constraints that fail silently
231
+
232
+ Both were measured against Codex 0.145, not inferred. Getting either wrong produces
233
+ a review that looks like it ran.
234
+
235
+ 1. **Every `spawn_agent` that sets `model` or `reasoning_effort` MUST pass
236
+ `fork_turns: "none"`** (or a positive integer). Codex states that a full-history
237
+ fork "inherits the parent model and reasoning effort and does not accept
238
+ overrides" - so omitting `fork_turns` silently collapses the whole panel onto
239
+ the orchestrator's model, with three reviewers reporting from one perspective
240
+ and no error anywhere.
241
+ 2. **Three concurrent children is the ceiling.** Codex advertises 4 concurrency
242
+ slots *including the orchestrator*, so a 3-reviewer panel saturates it and a 4th
243
+ child queues instead of running in parallel. The reviewer count on Codex is
244
+ capability-derived, not a preference.
245
+
246
+ Codex also refuses to spawn sub-agents at all unless instructions ask for it
247
+ explicitly; the pipeline's `~/.codex/AGENTS.md` managed block carries that
248
+ authorization. Without it Phase 4 degrades to a single in-thread review.
249
+
250
+ **Single-vendor caveat.** Every Codex reviewer is an OpenAI model, so the
251
+ cross-vendor disagreement that Claude Code and Copilot CLI get for free is absent.
252
+ The diversity budget shifts to reasoning effort and persona focus: Reviewer 1 runs
253
+ `xhigh` on security and architecture, Reviewer 2 runs a different model family
254
+ member on edge cases, Reviewer 3 runs `medium` on quality. Treat consensus among
255
+ them as weaker evidence than the same consensus on a two-vendor host, and say so
256
+ in the triage note when all three agree on a borderline finding.
226
257
 
227
258
  Each reviewer inherits the `code-reviewer` agent's focus areas (Security, Architecture, Quality, Performance) and output contract. The orchestrator overrides only the model and the stack-specific skill per-reviewer - no prompt duplication.
228
259
 
@@ -241,6 +272,32 @@ Each reviewer inherits the `code-reviewer` agent's focus areas (Security, Archit
241
272
 
242
273
  Skills are injected into reviewer prompt context - the reviewer uses them as reference, not as commands.
243
274
 
275
+ #### Step 2.8 - Visual conformance gate (component / screen work only)
276
+
277
+ Runs when `state.taskType == "component"` **or** the diff touches SwiftUI UI files
278
+ AND the task carried a Figma reference. Two checks, in order:
279
+
280
+ 1. **`ai-ios-engineering-toolkit:figma-review`** over the implemented frames - the
281
+ plugin's own component review, including the 14-item checklist that covers design
282
+ tokens, accessibility identifiers, previews and Code Connect.
283
+ 2. **`/multi-agent:design-check`** for pixel + spacing + typography + colour
284
+ conformance against the Figma variants, with its coverage gate: a variant that is
285
+ neither audited nor skipped-with-a-reason fails the run.
286
+
287
+ **Code Connect must be published, not merely written.** A `*.figma.swift` file on
288
+ disk with `Code Connect: Not published` in Figma means the binding does not exist for
289
+ anyone but the author. Assert the publish step ran; an unpublished binding is a
290
+ blocking finding.
291
+
292
+ Why this is a gate and not advice: `design-check` existed as a command for a while
293
+ with **no phase invoking it**, so the only thing standing between a build and visual
294
+ drift was the user opening the app and looking. On one run that produced 16pt padding
295
+ where the frame said `Spacing/12`, and a full sheet rebuild afterwards. A reviewer
296
+ reading a diff cannot see spacing; something has to compare against the design.
297
+
298
+ Skip only when the diff has no UI change. Record the outcome in
299
+ `consensus.visualConformance` so Phase 7 reports whether it ran.
300
+
244
301
  **iOS/Swift - interaction & convention checks (conditional).** When the diff touches SwiftUI UI files (`*View.swift`, `*Screen.swift`, `*Configuration.swift`, `*+Modifiers.swift`), the iOS reviewers additionally apply the component/interaction conventions documented in the analysis doc (Section 14 Code Connect mapping) and, where the repo has the marketplace component toolkit enabled (`ai-ios-engineering-toolkit`), that plugin's navigation / overlay / bottom-sheet conventions (interaction: emit-intent vs self-route/self-present; native-SwiftUI-first vs the project's `ui.*` custom system) plus the component accessibility rules (minimalism). These back the Step 1.5 iOS convention checks. Generic across SwiftUI projects - not tied to any one app. Omit when the diff has no SwiftUI UI changes (keeps the reviewer prompt lean).
245
302
 
246
303
  **Module review guides (conditional, all stacks).** A module in the repo may carry its own CLAUDE guide - a convention/checklist file living somewhere in the module's directory tree that the host CLI never auto-loads. When a changed file's module has such a guide, the review must consult it. Discovery is deterministic, from the diff's changed paths: for each changed file, walk its directory chain up to the repo root and collect `CLAUDE.md`, `*-CLAUDE.md`, and `AGENTS.md` files (root-level ones excluded - the host CLI already loads those). Dedupe, cap at 5 (log any dropped). Inject into every reviewer prompt with the directive: read each guide before reviewing and apply its rules/checklist to the changed files under its directory - a guide governs only its own subtree, and guide violations are findings triaged by severity like any other. No guides found → no-op, prompt stays lean. Same contract as `/multi-agent:review` Step 2b.
@@ -129,7 +129,7 @@ Every phase that dispatches a billable LLM agent MUST forward the call's token t
129
129
 
130
130
  ```bash
131
131
  LOG_METRIC_FORWARD_TO_TRACKER=1 pipeline/scripts/log-metric.sh "$TASK_ID" <phase-id> <event> \
132
- model=<fable|opus|sonnet|haiku|gpt-5.4> \
132
+ model=<fable|opus|sonnet|haiku|gpt-5.4|gpt-5.6|gpt-5.6-terra> \
133
133
  tokens_in=$IN tokens_out=$OUT duration_ms=$DUR
134
134
  ```
135
135
 
@@ -24,7 +24,8 @@ The agent detects which CLI it's running in and uses the appropriate visual mech
24
24
  ```
25
25
  1. system prompt mentions "Claude Code" → claude-code
26
26
  2. system prompt mentions "Copilot" / "GitHub Copilot" → copilot
27
- 3. None of the above → generic (bash stdout)
27
+ 3. system prompt mentions "Codex" → codex
28
+ 4. None of the above → generic (bash stdout)
28
29
  ```
29
30
 
30
31
  Visual mechanism per CLI:
@@ -33,12 +34,27 @@ Visual mechanism per CLI:
33
34
  |---|---|
34
35
  | **claude-code** | `TaskCreate({subject, activeForm})` then `TaskUpdate({status, activeForm})`. Native sticky widget; ⏺ tiles, spinner header. |
35
36
  | **copilot** | Inline call: `bash phase-tracker.sh render`. The bordered ANSI card lands as the last tool result in the chat. |
37
+ | **codex** | The native `update_plan` tool: one plan step per phase, `status: pending \| in_progress \| completed`. Rewrite the whole step list on each boundary - the tool takes the full plan, not a delta. |
36
38
  | **generic** (plain shell, Git Bash, WSL, tmux) | Same bash render - the bordered ANSI card prints to terminal stdout in place. |
37
39
 
38
40
  **Common to every CLI**: `phase-tracker.sh add/update/meta/tokens` calls run identically → the state file is always correct, and `:resume` / `:log` / `:status` work on every CLI.
39
41
 
40
42
  **Claude Code only**: in addition, `TaskCreate` / `TaskUpdate` native tool calls → the sticky widget pins the phase stack in the user's view.
41
43
 
44
+ ### Codex specifics
45
+
46
+ Two constraints on `update_plan`, both of which fail quietly if ignored:
47
+
48
+ - **Never call it in parallel with another tool.** Codex states this explicitly. A
49
+ phase boundary that batches `update_plan` alongside other calls loses the update.
50
+ - **It is unavailable in Codex plan mode.** Fall back to
51
+ `bash phase-tracker.sh render` there rather than skipping the visual channel.
52
+
53
+ The plan step is the phase label, not a restatement of the work: `Phase 4 - Review`
54
+ in the step list, with detail going to the agent log. A plan that mirrors the phase
55
+ list is legible; one that mirrors the task list duplicates what the log already
56
+ holds.
57
+
42
58
  ## Call pattern
43
59
 
44
60
  At every phase boundary the agent takes **two steps**: