opencode-swarm 7.189.0 → 7.190.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 (177) hide show
  1. package/README.md +42 -6
  2. package/binaries/win32-arm64/swarm-sandbox-runner.exe +0 -0
  3. package/binaries/win32-x64/swarm-sandbox-runner.exe +0 -0
  4. package/dist/agents/architect.d.ts +1 -1
  5. package/dist/background/completion-observer.d.ts +6 -0
  6. package/dist/cli/{auto-checkpoint-m7c4x8bk.js → auto-checkpoint-qvk04fya.js} +9 -9
  7. package/dist/cli/{checkpoint-m7q9886q.js → checkpoint-9q2r5c3j.js} +18 -20
  8. package/dist/cli/{coder-settlement-hh81z2f7.js → coder-settlement-xcparbf3.js} +13 -13
  9. package/dist/cli/{config-doctor-0rexy3xt.js → config-doctor-by0ak49m.js} +23 -20
  10. package/dist/cli/{core-ays6stz4.js → core-b1b3kxzy.js} +4 -4
  11. package/dist/cli/{curation-policy-65ckmmd5.js → curation-policy-6p6fcfjb.js} +6 -6
  12. package/dist/cli/{curator-dfzkfgs0.js → curator-d7b88mzr.js} +44 -44
  13. package/dist/cli/{curator-drift-nts5atks.js → curator-drift-6v604220.js} +9 -9
  14. package/dist/cli/curator-llm-factory-yvbktznk.js +82 -0
  15. package/dist/cli/{doctor-knowledge-receipt-phase-id-ec40k5hn.js → doctor-knowledge-receipt-phase-id-kwrvnps9.js} +9 -9
  16. package/dist/cli/{evidence-summary-service-vgtm72g5.js → evidence-summary-service-mzr2q4bn.js} +21 -22
  17. package/dist/cli/{gate-evidence-vmn65kxe.js → gate-evidence-78jes9kq.js} +8 -8
  18. package/dist/cli/guardrail-explain-8kt2mxmw.js +83 -0
  19. package/dist/cli/{guardrail-log-hc8fjm4x.js → guardrail-log-2sthykag.js} +8 -8
  20. package/dist/cli/{guardrail-reset-ct00w300.js → guardrail-reset-2n746rzv.js} +44 -44
  21. package/dist/cli/{hive-promoter-2xax6van.js → hive-promoter-s7a5gwhz.js} +44 -44
  22. package/dist/cli/{index-cbqkag7q.js → index-0qc7a88d.js} +3 -3
  23. package/dist/cli/{index-g03m5jhw.js → index-1s95jrgc.js} +3 -3
  24. package/dist/cli/{index-9tvjwv01.js → index-2fpv2wmc.js} +1 -1
  25. package/dist/cli/{index-2btybj8w.js → index-2kpqqcch.js} +4 -4
  26. package/dist/cli/{index-3dx0c7ve.js → index-3t9t9q2q.js} +44 -44
  27. package/dist/cli/{index-8q8783g0.js → index-3zwhxk98.js} +1 -1
  28. package/dist/cli/{index-34vsyj15.js → index-49e65y51.js} +5 -5
  29. package/dist/cli/{index-5v09zw1q.js → index-69tgdm9t.js} +18 -8
  30. package/dist/cli/{index-d3rjvm9e.js → index-7vnr5cmp.js} +2 -2
  31. package/dist/cli/{index-twb3f4tk.js → index-8bx6vhzk.js} +1 -1
  32. package/dist/cli/{index-nhsafbrh.js → index-9gcqmgbc.js} +5 -5
  33. package/dist/cli/{index-4p3jh14t.js → index-9xxqdzp4.js} +4 -4
  34. package/dist/cli/{index-qx3g1bbe.js → index-a5ca62vt.js} +1 -1
  35. package/dist/cli/{index-bskex45z.js → index-ajzgeb2s.js} +2 -2
  36. package/dist/cli/{index-8xabhfwr.js → index-b2j231jy.js} +2 -2
  37. package/dist/cli/{index-cj4mp0fm.js → index-dmq7p8s9.js} +6 -6
  38. package/dist/cli/{index-bzbxn24k.js → index-ej1hdw16.js} +5 -5
  39. package/dist/cli/{index-waxvpwbv.js → index-ejk34dnw.js} +127 -13
  40. package/dist/cli/{index-skdpgjar.js → index-fb5s32c2.js} +862 -1221
  41. package/dist/cli/{index-ntda6tje.js → index-feaxsjrt.js} +10 -2
  42. package/dist/cli/{index-2nexf5vz.js → index-ffgcdf49.js} +22147 -15396
  43. package/dist/cli/{index-kqegvngt.js → index-h0xhec3d.js} +4 -4
  44. package/dist/cli/{index-kaqdzhj3.js → index-kfevm0n5.js} +2 -2
  45. package/dist/cli/{index-4a7j5f60.js → index-kp8k95v9.js} +4 -4
  46. package/dist/cli/{index-x1eh2636.js → index-mcv0v2dp.js} +1 -1
  47. package/dist/cli/{index-9czp2dcg.js → index-mjfpaxw3.js} +7 -7
  48. package/dist/cli/{index-cdjxzs2r.js → index-mp1s7b0n.js} +7 -7
  49. package/dist/cli/{index-z29hksyw.js → index-mseerehd.js} +26 -10
  50. package/dist/cli/{index-f6exny9m.js → index-n8q43eff.js} +2 -2
  51. package/dist/cli/{index-7hr5m7yp.js → index-nkgzkt7c.js} +1 -1
  52. package/dist/cli/{index-9j3ybyfs.js → index-npe10823.js} +7 -7
  53. package/dist/cli/{index-16m2m4ah.js → index-p69k8v0e.js} +1 -1
  54. package/dist/cli/{index-p2tqzwh6.js → index-qs9myayh.js} +5 -10
  55. package/dist/cli/{index-hh7pa3yk.js → index-r9yvpr2m.js} +2 -2
  56. package/dist/cli/{index-w4zscz6p.js → index-rgkzcw2a.js} +5 -5
  57. package/dist/cli/{index-zfbxfm2m.js → index-s8b67e6h.js} +33 -12
  58. package/dist/cli/{index-9gqb5nkj.js → index-s92a5ta3.js} +4 -4
  59. package/dist/cli/{index-89f56ej4.js → index-sm01zpqe.js} +46 -46
  60. package/dist/cli/{index-q9kefh33.js → index-sxj143a4.js} +1 -1
  61. package/dist/cli/{index-1cwmj1gs.js → index-t0gj8s46.js} +77 -16
  62. package/dist/cli/{index-0gejy4cx.js → index-t73adn9b.js} +2 -2
  63. package/dist/cli/{index-fbgjj7h5.js → index-tkhenmms.js} +101 -13
  64. package/dist/cli/{index-zsrtt42s.js → index-v3bmwmqw.js} +25 -1
  65. package/dist/cli/{index-wqa31xnf.js → index-vhn4e6rm.js} +7 -7
  66. package/dist/cli/{index-5cfhwd65.js → index-xyvrfram.js} +2 -2
  67. package/dist/cli/{index-k8sarme1.js → index-y9v41185.js} +1 -1
  68. package/dist/cli/{index-1xa8wq76.js → index-z3ahy9c2.js} +2 -2
  69. package/dist/cli/{index-wrdktgpy.js → index-zk6ttjkt.js} +2 -2
  70. package/dist/cli/{index-mfxef20k.js → index-zyg1m9d0.js} +4 -4
  71. package/dist/cli/index.js +45 -45
  72. package/dist/cli/{knowledge-escalator-v3c8w86g.js → knowledge-escalator-n1ezv1zp.js} +15 -15
  73. package/dist/cli/{knowledge-events-kagaccj9.js → knowledge-events-nyqk3mr7.js} +13 -13
  74. package/dist/cli/{knowledge-link-h4pdcnya.js → knowledge-link-6hw3z6wn.js} +5 -5
  75. package/dist/cli/{knowledge-store-ywxjk5pb.js → knowledge-store-mnxqcyet.js} +6 -6
  76. package/dist/cli/{knowledge-validator-210gkpec.js → knowledge-validator-z30113mp.js} +8 -8
  77. package/dist/cli/{mcp-58hgx6av.js → mcp-mnbqw2s5.js} +1 -1
  78. package/dist/cli/{model-preflight-e69b48n0.js → model-preflight-ex482fsy.js} +44 -44
  79. package/dist/cli/{pending-delegations-g24d3qa9.js → pending-delegations-j18afz5z.js} +12 -12
  80. package/dist/cli/{pr-subscriptions-qprh2zsm.js → pr-subscriptions-yngda8mz.js} +12 -12
  81. package/dist/cli/{pr-workflow-gate-pj7dhkv4.js → pr-workflow-gate-0vt614f0.js} +44 -44
  82. package/dist/cli/{runner-4hfmp1ag.js → runner-ssnsje35.js} +6 -6
  83. package/dist/cli/{scan-cursor-s5wsxxd1.js → scan-cursor-8pwfg5g9.js} +7 -7
  84. package/dist/cli/{schema-smgngq9m.js → schema-e58ytmqt.js} +14 -2
  85. package/dist/cli/{scope-persistence-tbv2ar4w.js → scope-persistence-9qfx6ext.js} +16 -16
  86. package/dist/cli/{server-7p2ds5w2.js → server-wxcfwsdx.js} +45 -45
  87. package/dist/cli/{skill-generator-r4hsne71.js → skill-generator-tbd4tq9r.js} +17 -17
  88. package/dist/cli/{snapshot-coordination-init-ydjwh56d.js → snapshot-coordination-init-sckyzb94.js} +44 -44
  89. package/dist/cli/{speckit-checkoff-aj75vmjq.js → speckit-checkoff-k5jm0abh.js} +5 -5
  90. package/dist/cli/{telemetry-kvhe94gs.js → telemetry-9szfdfqv.js} +1 -1
  91. package/dist/cli/{workspace-snapshot-30kdf018.js → workspace-snapshot-9f12p1s1.js} +3 -3
  92. package/dist/cli/{worktree-collision-ownership-0bxj9f0t.js → worktree-collision-ownership-3wwfc72t.js} +14 -14
  93. package/dist/cli/{worktree-isolation-h0c22pm2.js → worktree-isolation-zfk7zk6a.js} +46 -44
  94. package/dist/commands/coupling.d.ts +21 -4
  95. package/dist/commands/epic-learning.d.ts +28 -0
  96. package/dist/commands/epic.d.ts +81 -36
  97. package/dist/commands/registry.d.ts +8 -8
  98. package/dist/commands/turbo.d.ts +16 -1
  99. package/dist/config/constants.d.ts +11 -1
  100. package/dist/config/loader.d.ts +2 -0
  101. package/dist/config/schema.d.ts +291 -77
  102. package/dist/db/coordination-store.d.ts +6 -0
  103. package/dist/epic/close.d.ts +209 -0
  104. package/dist/{turbo/epic → epic}/cochange-conflict.d.ts +5 -4
  105. package/dist/{turbo/epic → epic}/cochange-source.d.ts +10 -1
  106. package/dist/epic/components.d.ts +238 -0
  107. package/dist/epic/config-gate.d.ts +25 -0
  108. package/dist/epic/config.d.ts +101 -0
  109. package/dist/{turbo/epic → epic}/coupling-report.d.ts +3 -1
  110. package/dist/epic/declared-scopes.d.ts +37 -0
  111. package/dist/epic/epic-branch.d.ts +157 -0
  112. package/dist/epic/gate-policy.d.ts +114 -0
  113. package/dist/epic/git-once.d.ts +26 -0
  114. package/dist/epic/learning-store.d.ts +176 -0
  115. package/dist/epic/learning.d.ts +198 -0
  116. package/dist/epic/legacy-migration.d.ts +26 -0
  117. package/dist/epic/lifecycle.d.ts +437 -0
  118. package/dist/epic/markers.d.ts +123 -0
  119. package/dist/epic/merge-epoch.d.ts +90 -0
  120. package/dist/epic/next-wave-format.d.ts +101 -0
  121. package/dist/epic/next-wave.d.ts +102 -0
  122. package/dist/epic/phase-readiness.d.ts +221 -0
  123. package/dist/epic/plan-key.d.ts +104 -0
  124. package/dist/epic/plan-shaping-seam.d.ts +112 -0
  125. package/dist/epic/planning-signals.d.ts +38 -0
  126. package/dist/epic/report.d.ts +152 -0
  127. package/dist/epic/residue-commit.d.ts +151 -0
  128. package/dist/epic/scorecard.d.ts +130 -0
  129. package/dist/epic/shaping-sizing.d.ts +108 -0
  130. package/dist/epic/shaping-suggestions.d.ts +172 -0
  131. package/dist/epic/shaping.d.ts +112 -0
  132. package/dist/epic/sizing.d.ts +60 -0
  133. package/dist/epic/start.d.ts +187 -0
  134. package/dist/epic/task-landing.d.ts +83 -0
  135. package/dist/epic/wave-close.d.ts +112 -0
  136. package/dist/epic/wave-select.d.ts +95 -0
  137. package/dist/evaluation/contracts.d.ts +1 -1
  138. package/dist/evaluation/public-api.d.ts +1 -1
  139. package/dist/full-auto/policy.d.ts +12 -1
  140. package/dist/hooks/delegation-gate/worktree-isolation.d.ts +16 -0
  141. package/dist/hooks/delegation-gate.d.ts +11 -0
  142. package/dist/hooks/guardrails/index.d.ts +7 -0
  143. package/dist/hooks/promotion-evidence-store.d.ts +2 -2
  144. package/dist/index.js +814 -807
  145. package/dist/plan/manager.d.ts +6 -8
  146. package/dist/plan/parallel-verdict.d.ts +13 -2
  147. package/dist/retention/caps.d.ts +1 -1
  148. package/dist/review/contracts.d.ts +8 -1
  149. package/dist/services/config-doctor.d.ts +38 -0
  150. package/dist/session/snapshot-reader.d.ts +2 -0
  151. package/dist/session/snapshot-writer.d.ts +13 -2
  152. package/dist/state.d.ts +13 -18
  153. package/dist/tools/epic-next-wave.d.ts +20 -0
  154. package/dist/tools/epic-phase-review.d.ts +43 -0
  155. package/dist/tools/index.d.ts +2 -3
  156. package/dist/tools/manifest.d.ts +2 -3
  157. package/dist/tools/phase-complete.d.ts +5 -1
  158. package/dist/tools/save-plan.d.ts +7 -0
  159. package/dist/tools/tool-metadata.d.ts +4 -8
  160. package/dist/worktree/merge.d.ts +14 -1
  161. package/opencode-swarm.schema.json +273 -28
  162. package/package.json +1 -1
  163. package/dist/cli/curator-llm-factory-nrn6n2p1.js +0 -82
  164. package/dist/cli/guardrail-explain-9jmr8ezt.js +0 -83
  165. package/dist/tools/epic-plan-waves.d.ts +0 -79
  166. package/dist/tools/epic-record-divergence.d.ts +0 -73
  167. package/dist/tools/epic-run-phase.d.ts +0 -179
  168. package/dist/turbo/epic/activation.d.ts +0 -193
  169. package/dist/turbo/epic/calibration-engine.d.ts +0 -88
  170. package/dist/turbo/epic/calibration.d.ts +0 -80
  171. package/dist/turbo/epic/divergence-recorder.d.ts +0 -123
  172. package/dist/turbo/epic/index.d.ts +0 -24
  173. package/dist/turbo/epic/promotion-evidence.d.ts +0 -42
  174. package/dist/turbo/epic/state.d.ts +0 -69
  175. package/dist/turbo/epic/task-commit.d.ts +0 -110
  176. package/dist/turbo/epic/upstream-commits.d.ts +0 -82
  177. package/dist/turbo/epic/wave-planner.d.ts +0 -83
package/README.md CHANGED
@@ -28,7 +28,7 @@ bunx opencode-swarm install
28
28
 
29
29
  ### Why Swarm?
30
30
 
31
- Most AI coding tools let one model write code and ask that same model whether the code is good. That misses too much. Swarm separates planning, implementation, review, testing, and documentation into specialized internal roles — and enforces gated execution so agents never mutate the codebase in parallel.
31
+ Most AI coding tools let one model write code and ask that same model whether the code is good. That misses too much. Swarm separates planning, implementation, review, testing, and documentation into specialized internal roles — and enforces gated execution so agents never mutate the codebase in parallel unless their scopes are proven disjoint (v8 parallel lanes, Epic waves), and then each in its own isolated worktree.
32
32
 
33
33
  ### Key Features
34
34
 
@@ -43,6 +43,7 @@ Most AI coding tools let one model write code and ask that same model whether th
43
43
  - 🔍 **DEEP_DIVE Protocol** — High-rigor, on-demand read-only codebase audit via specialized skills
44
44
  - 🔬 **External Skill Curation Pipeline** — Opt-in discovery, quarantine, evaluation, and promotion of external skill candidates from configured sources (disabled by default; enable via `external_skills.curation_enabled: true` in config). Includes 7 tools: `external_skill_discover`, `external_skill_list`, `external_skill_inspect`, `external_skill_promote`, `external_skill_reject`, `external_skill_delete`, `external_skill_revoke`. Candidates pass through a 3-gate validation pipeline before evaluation: **prompt injection scan** (12 regex patterns), **unsafe instruction scan** (25 patterns), and **provenance integrity check** (SHA-256, timestamp, URL, publisher, and hash verification).
45
45
  - 🎯 **Governed Skill Optimizer** — Manually-activated, single-skill optimizer (`/swarm skill-opt plan|run|status|diff|approve|reject|rollback|history`) that drives one allowlisted `SKILL.md` candidate at a time through deterministic draft → smoke → evaluation-substrate validation → manual approval → atomic activation/rollback. Bounded, restartable, reversible, and unable to mutate source/harness/security surfaces. Disabled by default (`skill_opt.enabled: false`); see [docs/skill-optimizer.md](docs/skill-optimizer.md).
46
+ - 🌊 **Epic Mode (opt-in preview)** — one plan = one epic, run phase by phase as parallel waves of tasks whose declared scopes don't conflict. The delegation gate enforces the active wave; in git projects each coder works in an isolated worktree on an epic branch that `/swarm epic close` squash-lands as staged changes. Per-task QA always runs, and a phase reviewer + critic gate (`epic_phase_review`) runs before `phase_complete`. Epic learns per-file write risk across epics, suggests plan restructurings with a predicted speedup, and reports a scorecard (`/swarm epic report`). Enable with `epic.mode.enabled: true`; see [docs/modes.md](docs/modes.md#epic-mode-preview).
46
47
  - 🔄 **Phase completion gates** — completion-verify and drift verifier gates enforced before phase completion
47
48
  - 🔁 **Resumable sessions** — all state saved to `.swarm/`; pick up any project any day
48
49
  - 🔀 **GitLab as a first-class forge** (#2733) — MR and issue URLs (`https://<gitlab-host>/owner/repo/-/merge_requests/N`, `/-/issues/N`) are accepted by `/swarm pr-review`, `pr-feedback`, `pr subscribe/unsubscribe`, `ci-monitor`, publication recording, and issue ingestion, with self-hosted instance hosts derived from the remote or `forge.base_url` (config `forge: { provider, base_url }`, default `auto`; ambiguous remotes fail closed). Every URL-security control (HTTPS-only, private/localhost rejection, IDN protection, credential stripping) applies identically to GitLab. The `glab` binary resolves through the same hardened resolver contract as `gh` (`OPENCODE_SWARM_GLAB_BINARY` env override). Honest capability reporting: GitLab does not synthesize GitHub's `statusCheckRollup`/`reviewDecision`/`mergeStateStatus` — those surface an explicit unavailable result instead of a fabricated value, and glab-backed live MR polling is tracked as follow-up issue [#2882](https://github.com/ZaxbyHub/opencode-swarm/issues/2882).
@@ -124,6 +125,8 @@ Swarm then:
124
125
  * architect runs regression sweep
125
126
  * failures loop back with structured feedback
126
127
 
128
+ With Epic Mode on, `epic_next_wave` issues each phase as waves of conflict-free tasks (the same per-task pipeline runs inside every wave), and `epic_phase_review` runs a reviewer + critic over the whole phase before `phase_complete`.
129
+
127
130
  7. After each phase, docs and retrospectives are updated.
128
131
 
129
132
  All project state lives in `.swarm/` — plans, evidence, context, knowledge, and telemetry. Resumable by design. If `.swarm/` already exists, the architect goes straight into **RESUME** → **EXECUTE** instead of repeating discovery.
@@ -142,11 +145,14 @@ Swarm has two independent mode systems:
142
145
  | **Turbo** | Medium | Fast | Rapid iteration; skips Stage B gates for non-Tier-3 files |
143
146
  | **Lean Turbo** | High | Fast | Parallel lanes for non-conflicting tasks (up to `max_parallel_coders` coders) |
144
147
  | **Full-Auto** | Deterministic policy + critic oversight | Fast | Unattended multi-interaction runs |
148
+ | **Epic** (opt-in) | High — per-task QA always runs; Turbo stays off | Fast on plans with many independent tasks | Large plans: one plan = one epic, run phase by phase as parallel waves of tasks with disjoint scopes |
145
149
 
146
150
  **Auto-proceed** — a session toggle (`/swarm auto-proceed [on|off]`) that skips the "Ready for Phase N+1?" prompt at phase boundaries. Defaults to `false`; set as a plan default via `execution_profile.auto_proceed` during QA GATE SELECTION. Session override always wins. Independent of Full-Auto.
147
151
 
148
152
  Full-Auto reduces approval friction by deterministically allowing safe operations (read-only tools, in-scope writes, safe shell) and routing every ambiguous or high-risk action (writes to plugin/build/guardrail paths, network, dependency changes, plan/phase mutations, subagent delegation) through the read-only `critic_oversight` agent before it executes. Denials are returned to the agent as structured signals so it can choose a safer path; repeated denials pause the run; phase completion requires an APPROVED oversight record. See [docs/modes.md](docs/modes.md#full-auto) for `mode`, `permission_policy`, `denials`, and `oversight` config keys, fail-closed semantics, and recovery from a paused run.
149
153
 
154
+ Epic binds to the current plan and needs an OpenCode 1.x host for now (on OpenCode 2 the plugin has no SDK client yet, so `/swarm epic start` refuses with `host-unsupported`). `/swarm epic start` also refuses plans too small to benefit and suggests Balanced. The `epic_next_wave` tool then dispatches each phase as waves of tasks whose declared scopes don't conflict; in a git project each coder works in an isolated worktree on an epic branch, and `/swarm epic close` squash-lands the work as staged changes for you to review. Every task in a wave still runs the full per-task QA pipeline (Stage A and Stage B). Epic learns which files tasks tend to write together and uses it to plan later waves and epics. See [docs/modes.md](docs/modes.md#epic-mode-preview); maintainers start with [src/epic/README.md](src/epic/README.md).
155
+
150
156
  **Project mode** — persistent via `execution_mode` config key:
151
157
 
152
158
  | Value | Effect |
@@ -155,7 +161,7 @@ Full-Auto reduces approval friction by deterministically allowing safe operation
155
161
  | `balanced` (default) | Standard hooks |
156
162
  | `fast` | Skips compaction service — for short sessions under context pressure |
157
163
 
158
- Switch session modes with `/swarm turbo [on|off]` or `/swarm full-auto [on|off]`. Control phase-boundary auto-proceed with `/swarm auto-proceed [on|off]`. Set project mode in config. Lean Turbo is configured in `turbo.lean.*` in config and composes with all session modes. See [docs/modes.md](docs/modes.md).
164
+ Switch session modes with `/swarm turbo [on|off]`, `/swarm full-auto [on|off]`, or `/swarm epic start|close` (Epic needs `"epic": {"mode": {"enabled": true}}` in config). Control phase-boundary auto-proceed with `/swarm auto-proceed [on|off]`. Set project mode in config. Lean Turbo is configured in `turbo.lean.*` in config and composes with all session modes. See [docs/modes.md](docs/modes.md).
159
165
 
160
166
  ---
161
167
 
@@ -278,6 +284,7 @@ Common subcommands at a glance:
278
284
  /swarm agents # Registered agents and models
279
285
  /swarm diagnose # Health check
280
286
  /swarm evidence [task] # Test and review results
287
+ /swarm epic status # Open epic, current wave, landing state (Epic Mode)
281
288
  /swarm reset --confirm # Clear swarm state
282
289
  ```
283
290
 
@@ -318,9 +325,9 @@ Swarm registers a roster of specialized core, optional, and conditional agents.
318
325
  | **architect** | Orchestrates workflow, writes plans, enforces gates | Core |
319
326
  | **explorer** | Scans codebase, gathers context, maps facts | Core |
320
327
  | **coder** | Implements one task at a time (or concurrently in isolated worktrees for provably file-disjoint task groups — v8, #1674) | Core |
321
- | **reviewer** | Checks correctness and security | Core |
328
+ | **reviewer** | Checks correctness and security (also reviews a whole phase under Epic Mode via `epic_phase_review`) | Core |
322
329
  | **test_engineer** | Writes and runs tests, adversarial testing | Core |
323
- | **critic** | Reviews plans before implementation begins | Core |
330
+ | **critic** | Reviews plans before implementation begins (also challenges a whole phase under Epic Mode via `epic_phase_review`) | Core |
324
331
  | **critic_finding_validator** | Independently confirms, disproves, or leaves reviewer findings unverified | Core |
325
332
  | **critic_oversight** | Sole quality gate in full-auto autonomous mode | Core |
326
333
  | **sme** | Provides domain expertise guidance | Core |
@@ -407,6 +414,11 @@ graph TB
407
414
  | Resumable sessions | ✅ | ❌ | ❌ |
408
415
  | Built-in security scanning | ✅ | ❌ | ❌ |
409
416
  | Learns from mistakes | ✅ | ❌ | ❌ |
417
+ | Parallel tasks refused at dispatch unless their scopes are conflict-free (Epic Mode) | ✅ | ❌ | ⚠️ overlap check only falls back to sequential |
418
+ | Conflict prediction from git co-change history (Epic Mode) | ✅ | ❌ | ❌ |
419
+ | Learns per-file risk of undeclared writes across runs (Epic Mode) | ✅ | ❌ | ❌ |
420
+ | Plan-restructuring suggestions with predicted speedup (Epic Mode) | ✅ | ❌ | ❌ |
421
+ | Per-epic scorecard: conflicts, rework, gate first-pass rates (Epic Mode) | ✅ | ❌ | ❌ |
410
422
 
411
423
  ---
412
424
 
@@ -537,6 +549,10 @@ Configure via:
537
549
 
538
550
  **`.swarm/curator-summary.json`** — phase-level intelligence and drift reports
539
551
 
552
+ **`.swarm/epic/`** — Epic Mode: the open epic, its waves, and close reports with scorecards
553
+
554
+ **`.swarm/epic-prior/`** — Epic Mode: the learned project prior and past epic reports (survives `/swarm close`)
555
+
540
556
  ### Guardrails & Circuit Breakers
541
557
 
542
558
  Every agent runs inside a circuit breaker that prevents runaway behavior:
@@ -573,6 +589,7 @@ Built-in tools verify every task before it ships:
573
589
  - **sast_scan** — 68 security rules across 8 languages (offline)
574
590
  - **sbom_generate** — Dependency tracking (CycloneDX)
575
591
  - **quality_budget** — Complexity, duplication, test ratio limits
592
+ - **epic_phase_review** — Epic Mode only: an APPROVED phase reviewer, then an APPROVED phase critic, before `phase_complete`
576
593
 
577
594
  These quality gates run locally. No Docker is required. Config-gated features such as General Council web search can make external API calls only when you enable them and provide a Tavily or Brave Search key.
578
595
 
@@ -770,6 +787,14 @@ Every candidate passes a 3-gate pipeline before entering quarantine:
770
787
  | `skill_opt.deadband` | number | `0` | Promotion policy deadband forwarded to the evaluation substrate. |
771
788
  | `skill_opt.max_rounds` | number | `5` | Hard cap on draft/smoke retries before a validation (held-out test set is single-use). |
772
789
  | `skill_opt.max_transient_retries` | number | `5` | Max transient-infra retries before an infra failure becomes inconclusive. |
790
+ | `epic.mode.enabled` | boolean | `false` | Master opt-in for Epic Mode (`/swarm epic`, `epic_next_wave`, `epic_phase_review`). The legacy `turbo.epic.*` path is still accepted and migrated with a warning. See [docs/modes.md](docs/modes.md#epic-mode-preview) |
791
+ | `epic.mode.activation_threshold` | number | `0.3` | Intra-component density above which a conflict component runs one task per wave |
792
+ | `epic.cochange.enabled` | boolean | `false` | Adds the git co-change conflict signal to Epic planning and `/swarm coupling` (otherwise declared-path conflicts only) |
793
+ | `epic.cochange.threshold` / `min_co_changes` | number | `0.6` / `5` | NPMI floor and minimum co-change count for a file pair to count as coupled |
794
+ | `epic.sizing.*` | object | `min_tasks: 6`, `min_scope_coverage: 0.8`, `min_effective_speedup: 1.25`, `coder_fraction: 0.6` | `/swarm epic start` refuses plans below these (`--force` overrides and is recorded) |
795
+ | `epic.learning.*` | object | `enabled: true`, `decay_per_epic: 0.7`, `half_life_days: 60`, `hot_excess: 0.25` | Per-file risk and co-write learning across waves and epics |
796
+ | `epic.commit_policy` | string | `epic-branch` | `epic-branch` (work on `swarm/epic/<key>`, landed at close) or `current-branch` |
797
+ | `epic.retain_refs` | boolean | `false` | Keep `refs/swarm/epics/<key>/*` after close |
773
798
  | `context_budget.scoring.enabled` | boolean | `false` | Enable context scoring/ranking |
774
799
  | `context_budget.scoring.max_candidates` | number | `100` | Maximum items to score (10-500) |
775
800
  | `context_budget.scoring.weights` | object | `{ phase: 1.0, current_task: 2.0, blocked_task: 1.5, recent_failure: 2.5, recent_success: 0.5, evidence_presence: 1.0, decision_recency: 1.5, dependency_proximity: 1.0 }` | Per-signal priority weights (each 0-5). Only these eight keys are read |
@@ -879,6 +904,8 @@ Every candidate passes a 3-gate pipeline before entering quarantine:
879
904
  | write_pr_review_trigger_eval | Architect-only: validates the exact mandatory PR-review micro-lane ID set, requires completed provenance for all 11 repository-agnostic lanes, verifies the claimed merge base against an exact live base ref, rejects every `NO-MATCH` waiver, and atomically persists `.swarm/pr-review/<run_id>/trigger-eval.json` |
880
905
  | complete_pr_workflow | Architect-only: validates terminal PR-review or PR-feedback coverage; feedback uses a two-call arm/publish protocol and clears only after the approved content is observed on both the bound remote-tracking ref and the actual remote branch |
881
906
  | run_pr_feedback_stage_a | Architect-only: executes targeted reproduction/regression and exact `git diff --check` plus every mechanically applicable workspace/category/source build, typecheck, and lint obligation, then persists content-bound Stage A receipts before ordered feedback review gates |
907
+ | epic_next_wave | Architect-only, Epic Mode: closes the current wave (recording outcomes and declared-vs-actual writes) and issues the next wave of conflict-free tasks; the delegation gate only admits the active wave's tasks |
908
+ | epic_phase_review | Architect-only, Epic Mode: dispatches a read-only phase reviewer and then a phase critic, and records the evidence `phase_complete` requires while an epic is open |
882
909
  | git_blame | Per-line git blame metadata (sha, author, date, summary) via `git blame --porcelain`; supports optional line range filtering |
883
910
  | diff | Structured git diff with contract change detection; supports `summaryOnly` mode returning file list with additions/deletions counts |
884
911
  | suggest_patch | Reviewer-safe structured patch suggestion; supports `format` parameter ('json' or 'unified') where unified outputs valid unified diff with `diff --git` headers, hunks, and context |
@@ -1034,6 +1061,10 @@ Tip: add `"$schema": "https://unpkg.com/opencode-swarm/opencode-swarm.schema.jso
1034
1061
  "low_utility_threshold": 0.3,
1035
1062
  "min_retrievals_for_utility": 3,
1036
1063
  "schema_version": 1
1064
+ },
1065
+ "epic": {
1066
+ "mode": { "enabled": false },
1067
+ "cochange": { "enabled": false }
1037
1068
  }
1038
1069
  }
1039
1070
  ```
@@ -1216,6 +1247,8 @@ Control how tool outputs are summarized for LLM context.
1216
1247
  | `/swarm pr status` | List active PR subscriptions for current session with relative timestamps (the `bunx opencode-swarm run pr status` CLI has no session context, so it lists subscriptions across all sessions) |
1217
1248
  | `/swarm deep-dive <scope> [--profile <name>] [--max-explorers <n>]` | Read-only codebase audit with parallel explorers, dual reviewers, and critic challenge |
1218
1249
  | `/swarm design-docs <description> [--out <dir>] [--lang <name>] [--update]` | Generate or sync language-agnostic design docs (requires `design_docs.enabled`) |
1250
+ | `/swarm epic start [--force] \| close [--abandon] [--land squash\|merge\|none] \| status [--repair-refs] \| report [<key>\|last] [--format json] \| learning \| prior [show\|reset [--confirm=<token>]] \| clear-merge-failure <taskId> [--confirm]` | Open, inspect, and close a plan-scoped epic (Epic Mode preview; requires `epic.mode.enabled`) |
1251
+ | `/swarm coupling [--phase <n>] [--threshold <-1..1>] [--min-co-changes <n>] [--format markdown\|json] [--persist] [--suggest]` | Measure plan coupling and rank modules driving conflicts; `--suggest` adds Epic plan-shaping suggestions |
1219
1252
  | `/swarm dark-matter` | Detect hidden file couplings from co-change history |
1220
1253
  | `/swarm finalize [--prune-branches] [--skill-review]` | Idempotent session close-out: retrospectives, lesson curation, evidence archive, git reset --hard + clean to align with remote branch (discards uncommitted changes), optional branch pruning, optional skill-improver proposal |
1221
1254
  | `/swarm close [--prune-branches] [--skill-review]` | Deprecated alias for `/swarm finalize [--prune-branches] [--skill-review]` |
@@ -1267,12 +1300,14 @@ All binaries optional. Missing tools produce soft warnings, never hard-fail.
1267
1300
  bun test
1268
1301
  ```
1269
1302
 
1303
+ Epic Mode's planner regression harness: `bun scripts/epic-bench.ts`.
1304
+
1270
1305
  ---
1271
1306
 
1272
1307
  ## Design Principles
1273
1308
 
1274
1309
  1. **Plan before code.** Critic approves the plan before a single line is written.
1275
- 2. **One task at a time.** Coder gets one task and full context. Nothing else.
1310
+ 2. **One task at a time.** Coder gets one task and full context. Nothing else. Tasks run in parallel (v8 lanes, Epic waves) only when their scopes are disjoint, each in an isolated worktree.
1276
1311
  3. **Review everything immediately.** Correctness, security, tests, adversarial tests. Every task.
1277
1312
  4. **Different models catch different bugs.** Blind spots of the coder are the reviewer's strength.
1278
1313
  5. **Save everything to disk.** Resume any project any day from `.swarm/` state.
@@ -1288,9 +1323,10 @@ bun test
1288
1323
  - [Architecture Deep Dive](docs/architecture.md) — control model, pipeline, tools
1289
1324
  - [Design Rationale](docs/design-rationale.md) — why every major decision
1290
1325
  - [Commands Reference](docs/commands.md) — `/swarm` subcommands grouped by function
1291
- - [Modes Guide](docs/modes.md) — session modes (Turbo, Full-Auto) and project modes (strict/balanced/fast)
1326
+ - [Modes Guide](docs/modes.md) — session modes (Turbo, Full-Auto, Epic) and project modes (strict/balanced/fast)
1292
1327
  - [Configuration](docs/configuration.md) — all config keys and examples
1293
1328
  - [Planning Guide](docs/planning.md) — task format, phase structure, sizing
1329
+ - [Epic Mode maintainer guide](src/epic/README.md) — module map, invariants, shared-file seams
1294
1330
 
1295
1331
  ---
1296
1332
 
@@ -213,4 +213,4 @@ export declare function buildQaGateSelectionDialogue(modeLabel: 'BRAINSTORM' | '
213
213
  * (output no worse than input).
214
214
  */
215
215
  export declare function capToolDescriptionForPrompt(description: string): string;
216
- export declare function createArchitectAgent(model: string, customPrompt?: string, customAppendPrompt?: string, adversarialTesting?: AdversarialTestingConfig, council?: CouncilWorkflowConfig, uiReview?: UIReviewConfig, memoryEnabled?: boolean, architecturalSupervision?: ArchitectureSupervisionWorkflowConfig, designDocsEnabled?: boolean, externalSkillsEnabled?: boolean, turboEnabled?: boolean, skillsEnabled?: boolean, planningProfileResolution?: ResolvedPlanningProfile): AgentDefinition;
216
+ export declare function createArchitectAgent(model: string, customPrompt?: string, customAppendPrompt?: string, adversarialTesting?: AdversarialTestingConfig, council?: CouncilWorkflowConfig, uiReview?: UIReviewConfig, memoryEnabled?: boolean, architecturalSupervision?: ArchitectureSupervisionWorkflowConfig, designDocsEnabled?: boolean, externalSkillsEnabled?: boolean, turboEnabled?: boolean, skillsEnabled?: boolean, planningProfileResolution?: ResolvedPlanningProfile, epicEnabled?: boolean): AgentDefinition;
@@ -6,6 +6,8 @@
6
6
  * event therefore resumes the first incomplete transition without re-running a
7
7
  * completed one.
8
8
  */
9
+ import { epicSentinelExists } from '../epic/lifecycle.js';
10
+ import { commitEpicResidueAfterDelegation } from '../epic/residue-commit.js';
9
11
  import { transferCoderSettlementToBackground } from '../workflow/coder-settlement.js';
10
12
  import { type BackgroundDelegationRecord, markLegacyCoderSettlementTransferPending, type ReplacePendingBackgroundAdvisoryResult, recordDelegationIngestionResult } from './pending-delegations.js';
11
13
  interface ObserverConfig {
@@ -18,6 +20,10 @@ export interface PreparedBackgroundAdvisories {
18
20
  }
19
21
  /** Test-only dependency seam; production callers should use the observer API. */
20
22
  export declare const _internals: {
23
+ /** Epic v2 C3: sentinel probe gating the residue seam (one existsSync). */
24
+ epicSentinelExists: typeof epicSentinelExists;
25
+ /** Epic v2 C3 (X1): commit a background non-coder writer's residue. */
26
+ commitEpicResidueAfterDelegation: typeof commitEpicResidueAfterDelegation;
21
27
  transferCoderSettlementToBackground: typeof transferCoderSettlementToBackground;
22
28
  markLegacyCoderSettlementTransferPending: typeof markLegacyCoderSettlementTransferPending;
23
29
  sleep: (milliseconds: number) => Promise<void>;
@@ -1,27 +1,27 @@
1
1
  // @bun
2
- import"./index-g03m5jhw.js";
2
+ import"./index-1s95jrgc.js";
3
3
  import"./index-pkhbd2t5.js";
4
4
  import"./index-0725jpp7.js";
5
5
  import {
6
6
  appendCoreEventSync
7
- } from "./index-wrdktgpy.js";
7
+ } from "./index-zk6ttjkt.js";
8
8
  import {
9
9
  derivePlanIdentityHash
10
10
  } from "./index-7pmbnjvj.js";
11
- import"./index-1xa8wq76.js";
12
- import"./index-d3rjvm9e.js";
11
+ import"./index-z3ahy9c2.js";
12
+ import"./index-7vnr5cmp.js";
13
13
  import"./index-fzpt2djt.js";
14
- import"./index-p2tqzwh6.js";
14
+ import"./index-qs9myayh.js";
15
15
  import"./index-gx2vp8gx.js";
16
16
  import {
17
17
  loadPluginConfigWithMeta
18
- } from "./index-waxvpwbv.js";
18
+ } from "./index-ejk34dnw.js";
19
19
  import {
20
20
  init_git_executable,
21
21
  resolveGitExecutable
22
22
  } from "./index-zxdawwc7.js";
23
- import"./index-1cwmj1gs.js";
24
- import"./index-zfbxfm2m.js";
23
+ import"./index-t0gj8s46.js";
24
+ import"./index-s8b67e6h.js";
25
25
  import"./index-bk5tah7q.js";
26
26
  import"./index-gknz3bv1.js";
27
27
  import"./index-zpsr8rpc.js";
@@ -152,7 +152,7 @@ async function maybeSaveAutoCheckpoint(directory, plan) {
152
152
  generation += 1;
153
153
  label = buildAutoCheckpointLabel(plan, completedCount, generation);
154
154
  }
155
- const { saveCheckpointRecord } = await import("./checkpoint-m7q9886q.js");
155
+ const { saveCheckpointRecord } = await import("./checkpoint-9q2r5c3j.js");
156
156
  const result = await saveCheckpointRecord(label, directory);
157
157
  if (result.success) {
158
158
  emitAutoSavedEvent(directory, {
@@ -3,45 +3,43 @@ import {
3
3
  _internals,
4
4
  checkpoint,
5
5
  saveCheckpointRecord
6
- } from "./index-z29hksyw.js";
7
- import"./index-skdpgjar.js";
6
+ } from "./index-mseerehd.js";
7
+ import"./index-fb5s32c2.js";
8
8
  import"./index-6b295cas.js";
9
9
  import"./index-9nyqt3kb.js";
10
- import"./index-16m2m4ah.js";
11
- import"./index-zsrtt42s.js";
12
- import"./index-5cfhwd65.js";
10
+ import"./index-p69k8v0e.js";
11
+ import"./index-v3bmwmqw.js";
12
+ import"./index-xyvrfram.js";
13
13
  import"./index-g4fs6z4e.js";
14
14
  import"./index-m9zzj4ee.js";
15
- import"./index-7hr5m7yp.js";
15
+ import"./index-nkgzkt7c.js";
16
16
  import"./index-2s7dvzff.js";
17
- import"./index-g03m5jhw.js";
17
+ import"./index-1s95jrgc.js";
18
18
  import"./index-pkhbd2t5.js";
19
19
  import"./index-0725jpp7.js";
20
- import"./index-bzbxn24k.js";
21
- import"./index-wrdktgpy.js";
22
- import"./index-ntda6tje.js";
23
- import"./index-9tvjwv01.js";
20
+ import"./index-ej1hdw16.js";
21
+ import"./index-zk6ttjkt.js";
22
+ import"./index-feaxsjrt.js";
23
+ import"./index-2fpv2wmc.js";
24
24
  import"./index-ry16d01s.js";
25
25
  import"./index-rdm3px0g.js";
26
26
  import"./index-7pmbnjvj.js";
27
- import"./index-1xa8wq76.js";
28
- import"./index-twb3f4tk.js";
27
+ import"./index-z3ahy9c2.js";
28
+ import"./index-8bx6vhzk.js";
29
29
  import"./index-t7hmqgjy.js";
30
- import"./index-d3rjvm9e.js";
30
+ import"./index-7vnr5cmp.js";
31
31
  import"./index-fzpt2djt.js";
32
32
  import"./index-ejhxgyvm.js";
33
33
  import"./index-7g4c7s5r.js";
34
- import"./index-p2tqzwh6.js";
34
+ import"./index-qs9myayh.js";
35
35
  import"./index-gx2vp8gx.js";
36
- import"./index-waxvpwbv.js";
36
+ import"./index-ejk34dnw.js";
37
37
  import"./index-zxdawwc7.js";
38
- import"./index-1cwmj1gs.js";
39
- import"./index-zfbxfm2m.js";
38
+ import"./index-t0gj8s46.js";
39
+ import"./index-s8b67e6h.js";
40
40
  import"./index-bk5tah7q.js";
41
41
  import"./index-gknz3bv1.js";
42
42
  import"./index-zpsr8rpc.js";
43
- import"./index-wvghb3x6.js";
44
- import"./index-9rwhas09.js";
45
43
  import"./index-zgwm4ryv.js";
46
44
  import"./index-a76rekgs.js";
47
45
  export {
@@ -14,26 +14,26 @@ import {
14
14
  releaseCoderDispatchOwnership,
15
15
  settleCoderDispatch,
16
16
  transferCoderSettlementToBackground
17
- } from "./index-wqa31xnf.js";
18
- import"./index-kaqdzhj3.js";
19
- import"./index-f6exny9m.js";
20
- import"./index-5v09zw1q.js";
21
- import"./index-mfxef20k.js";
17
+ } from "./index-vhn4e6rm.js";
18
+ import"./index-kfevm0n5.js";
19
+ import"./index-n8q43eff.js";
20
+ import"./index-69tgdm9t.js";
21
+ import"./index-zyg1m9d0.js";
22
22
  import"./index-g4fs6z4e.js";
23
- import"./index-7hr5m7yp.js";
23
+ import"./index-nkgzkt7c.js";
24
24
  import"./index-2s7dvzff.js";
25
- import"./index-wrdktgpy.js";
26
- import"./index-1xa8wq76.js";
27
- import"./index-hh7pa3yk.js";
28
- import"./index-twb3f4tk.js";
25
+ import"./index-zk6ttjkt.js";
26
+ import"./index-z3ahy9c2.js";
27
+ import"./index-r9yvpr2m.js";
28
+ import"./index-8bx6vhzk.js";
29
29
  import"./index-t7hmqgjy.js";
30
- import"./index-d3rjvm9e.js";
30
+ import"./index-7vnr5cmp.js";
31
31
  import"./index-fzpt2djt.js";
32
32
  import"./index-ejhxgyvm.js";
33
33
  import"./index-7g4c7s5r.js";
34
- import"./index-p2tqzwh6.js";
34
+ import"./index-qs9myayh.js";
35
35
  import"./index-zxdawwc7.js";
36
- import"./index-zfbxfm2m.js";
36
+ import"./index-s8b67e6h.js";
37
37
  import"./index-gknz3bv1.js";
38
38
  import"./index-zpsr8rpc.js";
39
39
  import"./index-9rwhas09.js";
@@ -6,6 +6,9 @@ import {
6
6
  _internals,
7
7
  applySafeAutoFixes,
8
8
  collectLeanTurboGateSatisfiabilityFindings,
9
+ collectRawInertKeyFindings,
10
+ collectRawLegacyEpicConfigFindings,
11
+ collectRawRetiredEpicKeyFindings,
9
12
  createConfigBackup,
10
13
  detectStraySwarmDirs,
11
14
  getConfigPaths,
@@ -18,42 +21,39 @@ import {
18
21
  shouldRunOnStartup,
19
22
  writeBackupArtifact,
20
23
  writeDoctorArtifact
21
- } from "./index-fbgjj7h5.js";
22
- import"./index-skdpgjar.js";
24
+ } from "./index-tkhenmms.js";
25
+ import"./index-fb5s32c2.js";
23
26
  import"./index-6b295cas.js";
24
- import"./index-16m2m4ah.js";
25
- import"./index-zsrtt42s.js";
26
- import"./index-5cfhwd65.js";
27
- import"./index-g4fs6z4e.js";
27
+ import"./index-p69k8v0e.js";
28
+ import"./index-v3bmwmqw.js";
29
+ import"./index-xyvrfram.js";
28
30
  import"./index-m9zzj4ee.js";
29
- import"./index-7hr5m7yp.js";
31
+ import"./index-nkgzkt7c.js";
30
32
  import"./index-2s7dvzff.js";
31
33
  import"./index-0725jpp7.js";
32
- import"./index-bzbxn24k.js";
33
- import"./index-wrdktgpy.js";
34
- import"./index-ntda6tje.js";
35
- import"./index-9tvjwv01.js";
34
+ import"./index-ej1hdw16.js";
35
+ import"./index-zk6ttjkt.js";
36
+ import"./index-feaxsjrt.js";
37
+ import"./index-2fpv2wmc.js";
36
38
  import"./index-ry16d01s.js";
37
39
  import"./index-rdm3px0g.js";
38
40
  import"./index-7pmbnjvj.js";
39
- import"./index-1xa8wq76.js";
40
- import"./index-twb3f4tk.js";
41
+ import"./index-z3ahy9c2.js";
42
+ import"./index-8bx6vhzk.js";
41
43
  import"./index-t7hmqgjy.js";
42
- import"./index-d3rjvm9e.js";
44
+ import"./index-7vnr5cmp.js";
43
45
  import"./index-fzpt2djt.js";
44
46
  import"./index-ejhxgyvm.js";
45
47
  import"./index-7g4c7s5r.js";
46
- import"./index-p2tqzwh6.js";
48
+ import"./index-qs9myayh.js";
47
49
  import"./index-gx2vp8gx.js";
48
- import"./index-waxvpwbv.js";
50
+ import"./index-ejk34dnw.js";
49
51
  import"./index-zxdawwc7.js";
50
- import"./index-1cwmj1gs.js";
51
- import"./index-zfbxfm2m.js";
52
+ import"./index-t0gj8s46.js";
53
+ import"./index-s8b67e6h.js";
52
54
  import"./index-bk5tah7q.js";
53
55
  import"./index-gknz3bv1.js";
54
56
  import"./index-zpsr8rpc.js";
55
- import"./index-wvghb3x6.js";
56
- import"./index-9rwhas09.js";
57
57
  import"./index-zgwm4ryv.js";
58
58
  import"./index-a76rekgs.js";
59
59
  export {
@@ -69,6 +69,9 @@ export {
69
69
  getConfigPaths,
70
70
  detectStraySwarmDirs,
71
71
  createConfigBackup,
72
+ collectRawRetiredEpicKeyFindings,
73
+ collectRawLegacyEpicConfigFindings,
74
+ collectRawInertKeyFindings,
72
75
  collectLeanTurboGateSatisfiabilityFindings,
73
76
  applySafeAutoFixes,
74
77
  _internals,
@@ -14,13 +14,13 @@ import {
14
14
  resolveWorktreeBaseDir,
15
15
  shortenWorktreePath,
16
16
  writeLaneProfileToDiskReal
17
- } from "./index-mfxef20k.js";
18
- import"./index-7hr5m7yp.js";
17
+ } from "./index-zyg1m9d0.js";
18
+ import"./index-nkgzkt7c.js";
19
19
  import"./index-2s7dvzff.js";
20
20
  import"./index-fzpt2djt.js";
21
- import"./index-p2tqzwh6.js";
21
+ import"./index-qs9myayh.js";
22
22
  import"./index-zxdawwc7.js";
23
- import"./index-zfbxfm2m.js";
23
+ import"./index-s8b67e6h.js";
24
24
  import"./index-zpsr8rpc.js";
25
25
  import"./index-zgwm4ryv.js";
26
26
  import"./index-a76rekgs.js";
@@ -5,18 +5,18 @@ import {
5
5
  authorizeCuration,
6
6
  buildConfigFingerprintInput,
7
7
  readCohortConfigFingerprint
8
- } from "./index-q9kefh33.js";
8
+ } from "./index-sxj143a4.js";
9
9
  import"./index-rtry5xyf.js";
10
10
  import"./index-vzm6zre7.js";
11
- import"./index-8q8783g0.js";
12
- import"./index-hh7pa3yk.js";
13
- import"./index-twb3f4tk.js";
11
+ import"./index-3zwhxk98.js";
12
+ import"./index-r9yvpr2m.js";
13
+ import"./index-8bx6vhzk.js";
14
14
  import"./index-t7hmqgjy.js";
15
- import"./index-d3rjvm9e.js";
15
+ import"./index-7vnr5cmp.js";
16
16
  import"./index-fzpt2djt.js";
17
17
  import"./index-ejhxgyvm.js";
18
18
  import"./index-7g4c7s5r.js";
19
- import"./index-p2tqzwh6.js";
19
+ import"./index-qs9myayh.js";
20
20
  import"./index-gknz3bv1.js";
21
21
  import"./index-zpsr8rpc.js";
22
22
  import"./index-zgwm4ryv.js";
@@ -14,75 +14,75 @@ import {
14
14
  runCuratorInit,
15
15
  runCuratorPhase,
16
16
  writeCuratorSummary
17
- } from "./index-2nexf5vz.js";
18
- import"./index-4p3jh14t.js";
19
- import"./index-fbgjj7h5.js";
20
- import"./index-nhsafbrh.js";
17
+ } from "./index-ffgcdf49.js";
18
+ import"./index-9xxqdzp4.js";
19
+ import"./index-tkhenmms.js";
20
+ import"./index-9gcqmgbc.js";
21
21
  import"./index-j2vv0h13.js";
22
- import"./index-k8sarme1.js";
23
- import"./index-8xabhfwr.js";
22
+ import"./index-y9v41185.js";
23
+ import"./index-b2j231jy.js";
24
24
  import"./index-txdagbh7.js";
25
- import"./index-bskex45z.js";
25
+ import"./index-ajzgeb2s.js";
26
26
  import"./index-rdec0y3z.js";
27
- import"./index-cbqkag7q.js";
28
- import"./index-wqa31xnf.js";
29
- import"./index-9gqb5nkj.js";
30
- import"./index-cj4mp0fm.js";
31
- import"./index-kaqdzhj3.js";
32
- import"./index-9czp2dcg.js";
27
+ import"./index-0qc7a88d.js";
28
+ import"./index-vhn4e6rm.js";
29
+ import"./index-s92a5ta3.js";
30
+ import"./index-dmq7p8s9.js";
31
+ import"./index-kfevm0n5.js";
32
+ import"./index-mjfpaxw3.js";
33
33
  import"./index-cjapb4hy.js";
34
- import"./index-f6exny9m.js";
34
+ import"./index-n8q43eff.js";
35
35
  import"./index-pt7h91zc.js";
36
36
  import"./index-q7sjgr1y.js";
37
- import"./index-z29hksyw.js";
38
- import"./index-skdpgjar.js";
37
+ import"./index-mseerehd.js";
38
+ import"./index-fb5s32c2.js";
39
39
  import"./index-6b295cas.js";
40
40
  import"./index-9nyqt3kb.js";
41
- import"./index-16m2m4ah.js";
42
- import"./index-zsrtt42s.js";
43
- import"./index-5cfhwd65.js";
44
- import"./index-5v09zw1q.js";
45
- import"./index-mfxef20k.js";
41
+ import"./index-p69k8v0e.js";
42
+ import"./index-v3bmwmqw.js";
43
+ import"./index-xyvrfram.js";
44
+ import"./index-69tgdm9t.js";
45
+ import"./index-zyg1m9d0.js";
46
46
  import"./index-g4fs6z4e.js";
47
- import"./index-9j3ybyfs.js";
48
- import"./index-kqegvngt.js";
49
- import"./index-34vsyj15.js";
47
+ import"./index-npe10823.js";
48
+ import"./index-h0xhec3d.js";
49
+ import"./index-49e65y51.js";
50
50
  import"./index-m9zzj4ee.js";
51
- import"./index-7hr5m7yp.js";
51
+ import"./index-nkgzkt7c.js";
52
52
  import"./index-2s7dvzff.js";
53
- import"./index-2btybj8w.js";
54
- import"./index-q9kefh33.js";
53
+ import"./index-2kpqqcch.js";
54
+ import"./index-sxj143a4.js";
55
55
  import"./index-rtry5xyf.js";
56
- import"./index-g03m5jhw.js";
56
+ import"./index-1s95jrgc.js";
57
57
  import"./index-pkhbd2t5.js";
58
58
  import"./index-0725jpp7.js";
59
- import"./index-w4zscz6p.js";
60
- import"./index-bzbxn24k.js";
61
- import"./index-wrdktgpy.js";
62
- import"./index-x1eh2636.js";
63
- import"./index-ntda6tje.js";
64
- import"./index-9tvjwv01.js";
59
+ import"./index-rgkzcw2a.js";
60
+ import"./index-ej1hdw16.js";
61
+ import"./index-zk6ttjkt.js";
62
+ import"./index-mcv0v2dp.js";
63
+ import"./index-feaxsjrt.js";
64
+ import"./index-2fpv2wmc.js";
65
65
  import"./index-ry16d01s.js";
66
66
  import"./index-rdm3px0g.js";
67
67
  import"./index-7pmbnjvj.js";
68
- import"./index-1xa8wq76.js";
69
- import"./index-cdjxzs2r.js";
68
+ import"./index-z3ahy9c2.js";
69
+ import"./index-mp1s7b0n.js";
70
70
  import"./index-vzm6zre7.js";
71
71
  import"./index-ae75rja9.js";
72
- import"./index-8q8783g0.js";
73
- import"./index-hh7pa3yk.js";
74
- import"./index-twb3f4tk.js";
72
+ import"./index-3zwhxk98.js";
73
+ import"./index-r9yvpr2m.js";
74
+ import"./index-8bx6vhzk.js";
75
75
  import"./index-t7hmqgjy.js";
76
- import"./index-d3rjvm9e.js";
76
+ import"./index-7vnr5cmp.js";
77
77
  import"./index-fzpt2djt.js";
78
78
  import"./index-ejhxgyvm.js";
79
79
  import"./index-7g4c7s5r.js";
80
- import"./index-p2tqzwh6.js";
80
+ import"./index-qs9myayh.js";
81
81
  import"./index-gx2vp8gx.js";
82
- import"./index-waxvpwbv.js";
82
+ import"./index-ejk34dnw.js";
83
83
  import"./index-zxdawwc7.js";
84
- import"./index-1cwmj1gs.js";
85
- import"./index-zfbxfm2m.js";
84
+ import"./index-t0gj8s46.js";
85
+ import"./index-s8b67e6h.js";
86
86
  import"./index-bk5tah7q.js";
87
87
  import"./index-gknz3bv1.js";
88
88
  import"./index-zpsr8rpc.js";