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
@@ -1,10 +1,10 @@
1
1
  // @bun
2
2
  import {
3
3
  handleGuardrailExplain
4
- } from "./index-0gejy4cx.js";
4
+ } from "./index-t73adn9b.js";
5
5
  import {
6
6
  handleGuardrailLog
7
- } from "./index-qx3g1bbe.js";
7
+ } from "./index-a5ca62vt.js";
8
8
  import {
9
9
  COMMAND_REGISTRY,
10
10
  DEFAULT_CI_DEADLINE_MS,
@@ -97,82 +97,82 @@ import {
97
97
  handleWriteRetroCommand,
98
98
  normalizeSwarmCommandInput,
99
99
  resolveCommand
100
- } from "./index-2nexf5vz.js";
101
- import"./index-4p3jh14t.js";
102
- import"./index-fbgjj7h5.js";
103
- import"./index-nhsafbrh.js";
100
+ } from "./index-ffgcdf49.js";
101
+ import"./index-9xxqdzp4.js";
102
+ import"./index-tkhenmms.js";
103
+ import"./index-9gcqmgbc.js";
104
104
  import"./index-j2vv0h13.js";
105
- import"./index-k8sarme1.js";
106
- import"./index-8xabhfwr.js";
105
+ import"./index-y9v41185.js";
106
+ import"./index-b2j231jy.js";
107
107
  import"./index-txdagbh7.js";
108
- import"./index-bskex45z.js";
108
+ import"./index-ajzgeb2s.js";
109
109
  import"./index-rdec0y3z.js";
110
- import"./index-cbqkag7q.js";
111
- import"./index-wqa31xnf.js";
112
- import"./index-9gqb5nkj.js";
113
- import"./index-cj4mp0fm.js";
114
- import"./index-kaqdzhj3.js";
115
- import"./index-9czp2dcg.js";
110
+ import"./index-0qc7a88d.js";
111
+ import"./index-vhn4e6rm.js";
112
+ import"./index-s92a5ta3.js";
113
+ import"./index-dmq7p8s9.js";
114
+ import"./index-kfevm0n5.js";
115
+ import"./index-mjfpaxw3.js";
116
116
  import"./index-cjapb4hy.js";
117
- import"./index-f6exny9m.js";
117
+ import"./index-n8q43eff.js";
118
118
  import"./index-pt7h91zc.js";
119
119
  import"./index-q7sjgr1y.js";
120
- import"./index-z29hksyw.js";
121
- import"./index-skdpgjar.js";
120
+ import"./index-mseerehd.js";
121
+ import"./index-fb5s32c2.js";
122
122
  import"./index-6b295cas.js";
123
123
  import"./index-9nyqt3kb.js";
124
- import"./index-16m2m4ah.js";
125
- import"./index-zsrtt42s.js";
126
- import"./index-5cfhwd65.js";
127
- import"./index-5v09zw1q.js";
128
- import"./index-mfxef20k.js";
124
+ import"./index-p69k8v0e.js";
125
+ import"./index-v3bmwmqw.js";
126
+ import"./index-xyvrfram.js";
127
+ import"./index-69tgdm9t.js";
128
+ import"./index-zyg1m9d0.js";
129
129
  import"./index-g4fs6z4e.js";
130
- import"./index-9j3ybyfs.js";
131
- import"./index-kqegvngt.js";
132
- import"./index-34vsyj15.js";
130
+ import"./index-npe10823.js";
131
+ import"./index-h0xhec3d.js";
132
+ import"./index-49e65y51.js";
133
133
  import"./index-m9zzj4ee.js";
134
- import"./index-7hr5m7yp.js";
134
+ import"./index-nkgzkt7c.js";
135
135
  import"./index-2s7dvzff.js";
136
- import"./index-2btybj8w.js";
137
- import"./index-q9kefh33.js";
136
+ import"./index-2kpqqcch.js";
137
+ import"./index-sxj143a4.js";
138
138
  import"./index-rtry5xyf.js";
139
- import"./index-g03m5jhw.js";
139
+ import"./index-1s95jrgc.js";
140
140
  import"./index-pkhbd2t5.js";
141
141
  import"./index-0725jpp7.js";
142
- import"./index-w4zscz6p.js";
143
- import"./index-bzbxn24k.js";
144
- import"./index-wrdktgpy.js";
145
- import"./index-x1eh2636.js";
146
- import"./index-ntda6tje.js";
147
- import"./index-9tvjwv01.js";
142
+ import"./index-rgkzcw2a.js";
143
+ import"./index-ej1hdw16.js";
144
+ import"./index-zk6ttjkt.js";
145
+ import"./index-mcv0v2dp.js";
146
+ import"./index-feaxsjrt.js";
147
+ import"./index-2fpv2wmc.js";
148
148
  import"./index-ry16d01s.js";
149
149
  import"./index-rdm3px0g.js";
150
150
  import"./index-7pmbnjvj.js";
151
- import"./index-1xa8wq76.js";
152
- import"./index-cdjxzs2r.js";
151
+ import"./index-z3ahy9c2.js";
152
+ import"./index-mp1s7b0n.js";
153
153
  import"./index-vzm6zre7.js";
154
154
  import"./index-ae75rja9.js";
155
- import"./index-8q8783g0.js";
156
- import"./index-hh7pa3yk.js";
157
- import"./index-twb3f4tk.js";
155
+ import"./index-3zwhxk98.js";
156
+ import"./index-r9yvpr2m.js";
157
+ import"./index-8bx6vhzk.js";
158
158
  import"./index-t7hmqgjy.js";
159
- import"./index-d3rjvm9e.js";
159
+ import"./index-7vnr5cmp.js";
160
160
  import"./index-fzpt2djt.js";
161
161
  import"./index-ejhxgyvm.js";
162
162
  import"./index-7g4c7s5r.js";
163
- import"./index-p2tqzwh6.js";
163
+ import"./index-qs9myayh.js";
164
164
  import"./index-gx2vp8gx.js";
165
- import"./index-waxvpwbv.js";
165
+ import"./index-ejk34dnw.js";
166
166
  import"./index-zxdawwc7.js";
167
167
  import {
168
168
  init_schema,
169
169
  stripKnownSwarmPrefix
170
- } from "./index-1cwmj1gs.js";
170
+ } from "./index-t0gj8s46.js";
171
171
  import {
172
172
  AGENT_TOOL_MAP,
173
173
  ORCHESTRATOR_NAME,
174
174
  init_constants
175
- } from "./index-zfbxfm2m.js";
175
+ } from "./index-s8b67e6h.js";
176
176
  import"./index-bk5tah7q.js";
177
177
  import"./index-gknz3bv1.js";
178
178
  import"./index-zpsr8rpc.js";
@@ -11,7 +11,7 @@ import {
11
11
  readLinkPointer,
12
12
  resolveKnowledgeStoreDir,
13
13
  resolveLinkDir
14
- } from "./index-8q8783g0.js";
14
+ } from "./index-3zwhxk98.js";
15
15
 
16
16
  // src/knowledge/curation-policy.ts
17
17
  import { readFile as readFile2 } from "fs/promises";
@@ -3,7 +3,7 @@ import {
3
3
  ALL_AGENT_NAMES,
4
4
  SUMMARIZER_EXEMPT_TOOL_NAMES,
5
5
  init_constants
6
- } from "./index-zfbxfm2m.js";
6
+ } from "./index-s8b67e6h.js";
7
7
  import {
8
8
  OUTCOME_BLOCK_THRESHOLD,
9
9
  init_knowledge_types
@@ -21,7 +21,7 @@ var package_default;
21
21
  var init_package = __esm(() => {
22
22
  package_default = {
23
23
  name: "opencode-swarm",
24
- version: "7.189.0",
24
+ version: "7.190.0",
25
25
  description: "Architect-centric agentic swarm plugin for OpenCode - hub-and-spoke orchestration with SME consultation, code generation, and QA review",
26
26
  main: "dist/index.js",
27
27
  types: "dist/index.d.ts",
@@ -363,6 +363,36 @@ function rejectCheckpointPrototypePollution(raw) {
363
363
  }
364
364
  return raw;
365
365
  }
366
+ function retiredEpicKeyReplacement(dotted) {
367
+ const relative = dotted.replace(/^(?:turbo\.)?epic\./, "");
368
+ return Object.hasOwn(RETIRED_EPIC_KEY_REPLACEMENTS, relative) ? RETIRED_EPIC_KEY_REPLACEMENTS[relative] : undefined;
369
+ }
370
+ function stripKeys(keys) {
371
+ return (value) => {
372
+ if (value === null || typeof value !== "object" || Array.isArray(value)) {
373
+ return value;
374
+ }
375
+ const record = value;
376
+ if (!keys.some((key) => Object.hasOwn(record, key)))
377
+ return value;
378
+ const stripped = { ...record };
379
+ for (const key of keys)
380
+ delete stripped[key];
381
+ return stripped;
382
+ };
383
+ }
384
+ function findRetiredEpicConfigKeys(raw) {
385
+ const at = (node, key) => node !== null && typeof node === "object" && !Array.isArray(node) && Object.hasOwn(node, key) ? node[key] : undefined;
386
+ const found = [];
387
+ for (const [prefix, epic] of [
388
+ ["epic", at(raw, "epic")],
389
+ ["turbo.epic", at(at(raw, "turbo"), "epic")]
390
+ ]) {
391
+ const mode = at(epic, "mode");
392
+ found.push(...RETIRED_EPIC_MODE_KEYS.filter((key) => at(mode, key) !== undefined).map((key) => `${prefix}.mode.${key}`), ...RETIRED_EPIC_KEYS.filter((key) => at(epic, key) !== undefined).map((key) => `${prefix}.${key}`));
393
+ }
394
+ return found;
395
+ }
366
396
  function resolveExternalSkillsConfig(input) {
367
397
  if (input === undefined || input === null || typeof input !== "object" || Array.isArray(input)) {
368
398
  return { ...DEFAULT_EXTERNAL_SKILLS_CONFIG };
@@ -382,7 +412,7 @@ function resolveExternalSkillsConfig(input) {
382
412
  };
383
413
  return merged;
384
414
  }
385
- var _internals, SEPARATORS, CANONICAL_ROLES_LONGEST_FIRST, CANONICAL_ROLES_SET, AgentReasoningConfigSchema, AgentThinkingConfigSchema, FALLBACK_MODELS_MAX = 3, AgentOverrideConfigSchema, SwarmConfigSchema, ModelPricingConfigSchema, PricingConfigSchema, HooksConfigSchema, ScoringWeightsSchema, DecisionDecaySchema, TokenRatiosSchema, ScoringConfigSchema, ContextBudgetConfigSchema, EvidenceConfigSchema, GateFeatureSchema, PlaceholderScanConfigSchema, QualityBudgetConfigSchema, GATE_SECTION_SCHEMAS, GateConfigSchema, GATE_CONFIG_KNOWN_SECTION_KEYS, GATE_CONFIG_READERS, PipelineConfigSchema, PhaseCompleteConfigSchema, SummaryConfigSchema, RetentionConfigSchema, ReviewPassesConfigSchema, AUTO_REVIEW_V8_BURN_IN_DECISION, CONSERVATIVE_PRESET_BASE, AutoReviewFinalConfigSchema, AutoReviewConfigObjectSchema, AutoReviewConfigSchema, AdversarialDetectionConfigSchema, AdversarialTestingConfigSchemaBase, AdversarialTestingConfigSchema, IntegrationAnalysisConfigSchema, DocsConfigSchema, DesignDocsConfigSchema, GitConfigSchema, UIReviewConfigSchema, CompactionAdvisoryConfigSchema, LintConfigSchema, SecretscanConfigSchema, GuardrailsProfileSchema, DEFAULT_AGENT_PROFILES, DEFAULT_ARCHITECT_PROFILE, GuardrailsConfigSchema, WatchdogConfigSchema, SelfReviewConfigSchema, ToolFilterConfigSchema, PlanCursorConfigSchema, ContextMapConfigSchema, RepoGraphConfigSchema, INVALID_CHECKPOINT_PROTO_FIELD = "__swarm_invalid_checkpoint_proto__", FORBIDDEN_CHECKPOINT_CONFIG_KEYS, CheckpointConfigSchema, ApplyPatchConfigSchema, AutomationModeSchema, AutomationCapabilitiesSchema, AutomationConfigSchemaBase, AutomationConfigSchema, KnowledgeConfigSchema, LearningConfigSchema, ConsensusConfigSchema, OtlpExportConfigSchema, ObservabilityConfigSchema, ForgeConfigSchema, MemoryConfigSchema, CuratorConfigSchema, ArchitecturalSupervisionConfigSchema, KnowledgeApplicationConfigSchema, SkillPropagationAudienceSchema, SkillPropagationConfigSchema, HarnessRelativePathSchema, HarnessEvolutionConfigSchema, DEFAULT_HARNESS_EVOLUTION_CONFIG, HarnessOptConfigSchema, DEFAULT_HARNESS_OPT_CONFIG, SkillImproverConfigSchema, SkillsConfigSchema, SkillOptConfigSchema, DEFAULT_SKILL_OPT_CONFIG, SpecWriterConfigSchema, SlopDetectorConfigSchema, IncrementalVerifyConfigSchema, CompactionConfigSchema, PrmConfigSchema, AgentAuthorityRuleSchema, AuthorityConfigSchema, GeneralCouncilMemberConfigSchema, GeneralCouncilConfigSchema, CouncilConfigSchema, PrMonitorConfigSchema, PrFeedbackLoopConfigSchema, ParallelizationConfigSchema, WorktreeIsolationConfigSchema, LeanTurboConfigSchema, EpicConfigSchema, StandardTurboConfigSchema, LeanTurboStrategyConfigSchema, TurboConfigSchema, ExternalSkillCandidateSourceTypeSchema, ExternalSkillCandidateEvaluationVerdictSchema, DiscoverySourceSchema, ExternalSkillCandidateSchema, ExternalSkillsConfigSchema, DEFAULT_EXTERNAL_SKILLS_CONFIG, DEFAULT_SKILLS_CONFIG, DEFAULT_PR_REVIEW_RESILIENCE_CONFIG, PrReviewResilienceConfigSchema, ReviewRoutingConfigSchema, DEFAULT_REVIEW_ROUTING_CONFIG, LaneLivenessWatchdogConfigSchema, DispatchProtectionConfigSchema, DashboardConfigSchema, DEFAULT_PR_REVIEW_LEGACY_TRANSCRIPT_COMPATIBILITY = false, PluginConfigSchema;
415
+ var _internals, SEPARATORS, CANONICAL_ROLES_LONGEST_FIRST, CANONICAL_ROLES_SET, AgentReasoningConfigSchema, AgentThinkingConfigSchema, FALLBACK_MODELS_MAX = 3, AgentOverrideConfigSchema, SwarmConfigSchema, ModelPricingConfigSchema, PricingConfigSchema, HooksConfigSchema, ScoringWeightsSchema, DecisionDecaySchema, TokenRatiosSchema, ScoringConfigSchema, ContextBudgetConfigSchema, EvidenceConfigSchema, GateFeatureSchema, PlaceholderScanConfigSchema, QualityBudgetConfigSchema, GATE_SECTION_SCHEMAS, GateConfigSchema, GATE_CONFIG_KNOWN_SECTION_KEYS, GATE_CONFIG_READERS, PipelineConfigSchema, PhaseCompleteConfigSchema, SummaryConfigSchema, RetentionConfigSchema, ReviewPassesConfigSchema, AUTO_REVIEW_V8_BURN_IN_DECISION, CONSERVATIVE_PRESET_BASE, AutoReviewFinalConfigSchema, AutoReviewConfigObjectSchema, AutoReviewConfigSchema, AdversarialDetectionConfigSchema, AdversarialTestingConfigSchemaBase, AdversarialTestingConfigSchema, IntegrationAnalysisConfigSchema, DocsConfigSchema, DesignDocsConfigSchema, GitConfigSchema, UIReviewConfigSchema, CompactionAdvisoryConfigSchema, LintConfigSchema, SecretscanConfigSchema, GuardrailsProfileSchema, DEFAULT_AGENT_PROFILES, DEFAULT_ARCHITECT_PROFILE, GuardrailsConfigSchema, WatchdogConfigSchema, SelfReviewConfigSchema, ToolFilterConfigSchema, PlanCursorConfigSchema, ContextMapConfigSchema, RepoGraphConfigSchema, INVALID_CHECKPOINT_PROTO_FIELD = "__swarm_invalid_checkpoint_proto__", FORBIDDEN_CHECKPOINT_CONFIG_KEYS, CheckpointConfigSchema, ApplyPatchConfigSchema, AutomationModeSchema, AutomationCapabilitiesSchema, AutomationConfigSchemaBase, AutomationConfigSchema, KnowledgeConfigSchema, LearningConfigSchema, ConsensusConfigSchema, OtlpExportConfigSchema, ObservabilityConfigSchema, ForgeConfigSchema, MemoryConfigSchema, CuratorConfigSchema, ArchitecturalSupervisionConfigSchema, KnowledgeApplicationConfigSchema, SkillPropagationAudienceSchema, SkillPropagationConfigSchema, HarnessRelativePathSchema, HarnessEvolutionConfigSchema, DEFAULT_HARNESS_EVOLUTION_CONFIG, HarnessOptConfigSchema, DEFAULT_HARNESS_OPT_CONFIG, SkillImproverConfigSchema, SkillsConfigSchema, SkillOptConfigSchema, DEFAULT_SKILL_OPT_CONFIG, SpecWriterConfigSchema, SlopDetectorConfigSchema, IncrementalVerifyConfigSchema, CompactionConfigSchema, PrmConfigSchema, AgentAuthorityRuleSchema, AuthorityConfigSchema, GeneralCouncilMemberConfigSchema, GeneralCouncilConfigSchema, CouncilConfigSchema, PrMonitorConfigSchema, PrFeedbackLoopConfigSchema, ParallelizationConfigSchema, WorktreeIsolationConfigSchema, LeanTurboConfigSchema, RETIRED_EPIC_MODE_KEYS, RETIRED_EPIC_KEYS, RETIRED_EPIC_KEY_REPLACEMENTS, stripRetiredEpicModeKeys, stripRetiredEpicKeys, EpicConfigSchema, LegacyTurboEpicConfigSchema, StandardTurboConfigSchema, LeanTurboStrategyConfigSchema, TurboConfigSchema, ExternalSkillCandidateSourceTypeSchema, ExternalSkillCandidateEvaluationVerdictSchema, DiscoverySourceSchema, ExternalSkillCandidateSchema, ExternalSkillsConfigSchema, DEFAULT_EXTERNAL_SKILLS_CONFIG, DEFAULT_SKILLS_CONFIG, DEFAULT_PR_REVIEW_RESILIENCE_CONFIG, PrReviewResilienceConfigSchema, ReviewRoutingConfigSchema, DEFAULT_REVIEW_ROUTING_CONFIG, LaneLivenessWatchdogConfigSchema, DispatchProtectionConfigSchema, DashboardConfigSchema, DEFAULT_PR_REVIEW_LEGACY_TRANSCRIPT_COMPATIBILITY = false, PluginConfigSchema;
386
416
  var init_schema = __esm(() => {
387
417
  init_zod();
388
418
  init_package();
@@ -1612,34 +1642,64 @@ var init_schema = __esm(() => {
1612
1642
  cache_redirects: exports_external.record(exports_external.string(), exports_external.string()).optional()
1613
1643
  }).optional()
1614
1644
  });
1615
- EpicConfigSchema = exports_external.object({
1645
+ RETIRED_EPIC_MODE_KEYS = [
1646
+ "min_commits_for_signal"
1647
+ ];
1648
+ RETIRED_EPIC_KEYS = ["calibration"];
1649
+ RETIRED_EPIC_KEY_REPLACEMENTS = {
1650
+ calibration: "Epic learning replaced it \u2014 see epic.learning.* (enabled, decay_per_epic, half_life_days, hot_excess)."
1651
+ };
1652
+ stripRetiredEpicModeKeys = stripKeys(RETIRED_EPIC_MODE_KEYS);
1653
+ stripRetiredEpicKeys = stripKeys(RETIRED_EPIC_KEYS);
1654
+ EpicConfigSchema = exports_external.preprocess(stripRetiredEpicKeys, exports_external.object({
1616
1655
  cochange: exports_external.object({
1617
1656
  enabled: exports_external.boolean().default(false),
1618
1657
  threshold: exports_external.number().min(-1).max(1).default(0.6),
1619
1658
  min_co_changes: exports_external.number().int().min(1).default(5)
1620
1659
  }).strict().optional(),
1621
- mode: exports_external.object({
1660
+ mode: exports_external.preprocess(stripRetiredEpicModeKeys, exports_external.object({
1622
1661
  enabled: exports_external.boolean().default(false),
1623
1662
  activation_threshold: exports_external.number().min(0).max(1).default(0.3),
1624
- min_commits_for_signal: exports_external.number().int().min(1).default(20)
1625
- }).strict().optional(),
1626
- calibration: exports_external.object({
1663
+ min_commits_for_signal: exports_external.number().optional().meta({
1664
+ deprecated: true,
1665
+ description: "Retired (Epic v2): accepted and ignored with a warning. Remove it."
1666
+ })
1667
+ }).strict()).optional(),
1668
+ calibration: exports_external.record(exports_external.string(), exports_external.unknown()).optional().meta({
1669
+ deprecated: true,
1670
+ description: "Retired (Epic v2): accepted and ignored with a warning \u2014 Epic learning replaced it (epic.learning). Remove it."
1671
+ }),
1672
+ learning: exports_external.object({
1627
1673
  enabled: exports_external.boolean().default(true),
1628
- floor_threshold: exports_external.number().min(0).max(1).default(0.05),
1629
- tighten_step: exports_external.number().min(0).max(1).default(0.02),
1630
- loosen_step: exports_external.number().min(0).max(1).default(0.01),
1631
- loosen_window: exports_external.number().int().min(1).default(10)
1674
+ decay_per_epic: exports_external.number().min(0).max(1).default(0.7),
1675
+ half_life_days: exports_external.number().positive().default(60),
1676
+ hot_excess: exports_external.number().min(0).max(1).default(0.25)
1677
+ }).strict().optional(),
1678
+ sizing: exports_external.object({
1679
+ min_tasks: exports_external.number().int().min(1).default(6),
1680
+ min_scope_coverage: exports_external.number().min(0).max(1).default(0.8),
1681
+ min_effective_speedup: exports_external.number().min(1).default(1.25),
1682
+ coder_fraction: exports_external.number().min(0).max(1).default(0.6)
1683
+ }).strict().optional(),
1684
+ commit_policy: exports_external.enum(["epic-branch", "current-branch"]).optional(),
1685
+ retain_refs: exports_external.boolean().optional(),
1686
+ phase_review: exports_external.object({
1687
+ timeout_ms: exports_external.number().int().min(1e4).max(1800000).default(300000)
1632
1688
  }).strict().optional()
1633
- }).strict();
1689
+ }).strict());
1690
+ LegacyTurboEpicConfigSchema = EpicConfigSchema.optional().meta({
1691
+ deprecated: true,
1692
+ description: "Deprecated (still accepted): move this block to top-level `epic` \u2014 Epic Mode no longer needs a `turbo` block. Within a file, top-level `epic` wins per key when both are set."
1693
+ });
1634
1694
  StandardTurboConfigSchema = exports_external.object({
1635
1695
  strategy: exports_external.literal("standard"),
1636
1696
  lean: LeanTurboConfigSchema.optional(),
1637
- epic: EpicConfigSchema.optional()
1697
+ epic: LegacyTurboEpicConfigSchema
1638
1698
  });
1639
1699
  LeanTurboStrategyConfigSchema = exports_external.object({
1640
1700
  strategy: exports_external.literal("lean"),
1641
1701
  lean: LeanTurboConfigSchema,
1642
- epic: EpicConfigSchema.optional()
1702
+ epic: LegacyTurboEpicConfigSchema
1643
1703
  });
1644
1704
  TurboConfigSchema = exports_external.discriminatedUnion("strategy", [
1645
1705
  StandardTurboConfigSchema,
@@ -1871,6 +1931,7 @@ var init_schema = __esm(() => {
1871
1931
  parallelization: ParallelizationConfigSchema.optional().describe("Parallelization (PR 1 dark foundation) \u2014 disabled by default; no production code path branches on enabled=true yet."),
1872
1932
  worktree: WorktreeIsolationConfigSchema.optional().describe("Worktree isolation policy for parallel coder dispatch lanes (general surface; Lean Turbo keeps its legacy per-mode fields)."),
1873
1933
  turbo: TurboConfigSchema.optional().describe("Turbo execution strategy block (Phase 1). Absent means current behavior unchanged."),
1934
+ epic: EpicConfigSchema.optional().describe("Epic Mode block: one plan = one epic delivered in conflict-free parallel waves. Opt in with `mode.enabled: true`, then `/swarm epic start`. Needs no `turbo` block (legacy `turbo.epic` is still accepted and migrated here)."),
1874
1935
  turbo_mode: exports_external.boolean().default(false).optional().describe("Bypass reviewer/test gates for rapid iteration (v6.40). When true, new sessions start with turbo mode on (session default); /swarm turbo still toggles per session. Directory-less constructions default off."),
1875
1936
  quiet: exports_external.boolean().default(true).optional().describe("Suppress non-critical startup warnings (default true keeps the TUI clean). Set false to restore verbose warnings for debugging."),
1876
1937
  version_check: exports_external.boolean().default(true).optional().describe("Background staleness check against npm, throttled to once per 24h (issue #675). Set false to fully disable the network call."),
@@ -2042,4 +2103,4 @@ var init_schema = __esm(() => {
2042
2103
  });
2043
2104
  });
2044
2105
 
2045
- export { init_package, package_default, DEFAULT_MODEL_CONTEXT_TOKENS, isUsableConfiguredWindow, isUsableContextWindow, resolveContextWindow, init_context_window, _internals, isKnownCanonicalRole, getCanonicalAgentRole, resolveGeneratedAgentRole, stripKnownSwarmPrefix, AgentReasoningConfigSchema, AgentThinkingConfigSchema, FALLBACK_MODELS_MAX, AgentOverrideConfigSchema, SwarmConfigSchema, ModelPricingConfigSchema, PricingConfigSchema, HooksConfigSchema, ScoringWeightsSchema, DecisionDecaySchema, TokenRatiosSchema, ScoringConfigSchema, ContextBudgetConfigSchema, EvidenceConfigSchema, GateFeatureSchema, PlaceholderScanConfigSchema, QualityBudgetConfigSchema, GATE_SECTION_SCHEMAS, GateConfigSchema, GATE_CONFIG_KNOWN_SECTION_KEYS, GATE_CONFIG_READERS, PipelineConfigSchema, PhaseCompleteConfigSchema, SummaryConfigSchema, RetentionConfigSchema, ReviewPassesConfigSchema, AUTO_REVIEW_V8_BURN_IN_DECISION, CONSERVATIVE_PRESET_BASE, AutoReviewConfigSchema, resolveAutoReviewConfig, AdversarialDetectionConfigSchema, AdversarialTestingConfigSchema, IntegrationAnalysisConfigSchema, DocsConfigSchema, DesignDocsConfigSchema, GitConfigSchema, UIReviewConfigSchema, CompactionAdvisoryConfigSchema, LintConfigSchema, SecretscanConfigSchema, GuardrailsProfileSchema, DEFAULT_AGENT_PROFILES, DEFAULT_ARCHITECT_PROFILE, GuardrailsConfigSchema, WatchdogConfigSchema, SelfReviewConfigSchema, resolveGuardrailsConfig, ToolFilterConfigSchema, PlanCursorConfigSchema, ContextMapConfigSchema, RepoGraphConfigSchema, CheckpointConfigSchema, ApplyPatchConfigSchema, AutomationModeSchema, AutomationCapabilitiesSchema, AutomationConfigSchema, KnowledgeConfigSchema, LearningConfigSchema, ConsensusConfigSchema, OtlpExportConfigSchema, ObservabilityConfigSchema, ForgeConfigSchema, MemoryConfigSchema, CuratorConfigSchema, ArchitecturalSupervisionConfigSchema, KnowledgeApplicationConfigSchema, SkillPropagationConfigSchema, HarnessEvolutionConfigSchema, DEFAULT_HARNESS_EVOLUTION_CONFIG, HarnessOptConfigSchema, DEFAULT_HARNESS_OPT_CONFIG, SkillImproverConfigSchema, SkillsConfigSchema, SkillOptConfigSchema, DEFAULT_SKILL_OPT_CONFIG, SpecWriterConfigSchema, SlopDetectorConfigSchema, IncrementalVerifyConfigSchema, CompactionConfigSchema, PrmConfigSchema, AgentAuthorityRuleSchema, AuthorityConfigSchema, GeneralCouncilConfigSchema, CouncilConfigSchema, PrMonitorConfigSchema, PrFeedbackLoopConfigSchema, ParallelizationConfigSchema, WorktreeIsolationConfigSchema, LeanTurboConfigSchema, EpicConfigSchema, StandardTurboConfigSchema, LeanTurboStrategyConfigSchema, TurboConfigSchema, ExternalSkillCandidateSourceTypeSchema, ExternalSkillCandidateEvaluationVerdictSchema, DiscoverySourceSchema, ExternalSkillCandidateSchema, ExternalSkillsConfigSchema, DEFAULT_EXTERNAL_SKILLS_CONFIG, DEFAULT_SKILLS_CONFIG, resolveExternalSkillsConfig, DEFAULT_PR_REVIEW_RESILIENCE_CONFIG, PrReviewResilienceConfigSchema, ReviewRoutingConfigSchema, DEFAULT_REVIEW_ROUTING_CONFIG, LaneLivenessWatchdogConfigSchema, DispatchProtectionConfigSchema, DashboardConfigSchema, DEFAULT_PR_REVIEW_LEGACY_TRANSCRIPT_COMPATIBILITY, PluginConfigSchema, init_schema };
2106
+ export { init_package, package_default, DEFAULT_MODEL_CONTEXT_TOKENS, isUsableConfiguredWindow, isUsableContextWindow, resolveContextWindow, init_context_window, _internals, isKnownCanonicalRole, getCanonicalAgentRole, resolveGeneratedAgentRole, stripKnownSwarmPrefix, AgentReasoningConfigSchema, AgentThinkingConfigSchema, FALLBACK_MODELS_MAX, AgentOverrideConfigSchema, SwarmConfigSchema, ModelPricingConfigSchema, PricingConfigSchema, HooksConfigSchema, ScoringWeightsSchema, DecisionDecaySchema, TokenRatiosSchema, ScoringConfigSchema, ContextBudgetConfigSchema, EvidenceConfigSchema, GateFeatureSchema, PlaceholderScanConfigSchema, QualityBudgetConfigSchema, GATE_SECTION_SCHEMAS, GateConfigSchema, GATE_CONFIG_KNOWN_SECTION_KEYS, GATE_CONFIG_READERS, PipelineConfigSchema, PhaseCompleteConfigSchema, SummaryConfigSchema, RetentionConfigSchema, ReviewPassesConfigSchema, AUTO_REVIEW_V8_BURN_IN_DECISION, CONSERVATIVE_PRESET_BASE, AutoReviewConfigSchema, resolveAutoReviewConfig, AdversarialDetectionConfigSchema, AdversarialTestingConfigSchema, IntegrationAnalysisConfigSchema, DocsConfigSchema, DesignDocsConfigSchema, GitConfigSchema, UIReviewConfigSchema, CompactionAdvisoryConfigSchema, LintConfigSchema, SecretscanConfigSchema, GuardrailsProfileSchema, DEFAULT_AGENT_PROFILES, DEFAULT_ARCHITECT_PROFILE, GuardrailsConfigSchema, WatchdogConfigSchema, SelfReviewConfigSchema, resolveGuardrailsConfig, ToolFilterConfigSchema, PlanCursorConfigSchema, ContextMapConfigSchema, RepoGraphConfigSchema, CheckpointConfigSchema, ApplyPatchConfigSchema, AutomationModeSchema, AutomationCapabilitiesSchema, AutomationConfigSchema, KnowledgeConfigSchema, LearningConfigSchema, ConsensusConfigSchema, OtlpExportConfigSchema, ObservabilityConfigSchema, ForgeConfigSchema, MemoryConfigSchema, CuratorConfigSchema, ArchitecturalSupervisionConfigSchema, KnowledgeApplicationConfigSchema, SkillPropagationConfigSchema, HarnessEvolutionConfigSchema, DEFAULT_HARNESS_EVOLUTION_CONFIG, HarnessOptConfigSchema, DEFAULT_HARNESS_OPT_CONFIG, SkillImproverConfigSchema, SkillsConfigSchema, SkillOptConfigSchema, DEFAULT_SKILL_OPT_CONFIG, SpecWriterConfigSchema, SlopDetectorConfigSchema, IncrementalVerifyConfigSchema, CompactionConfigSchema, PrmConfigSchema, AgentAuthorityRuleSchema, AuthorityConfigSchema, GeneralCouncilConfigSchema, CouncilConfigSchema, PrMonitorConfigSchema, PrFeedbackLoopConfigSchema, ParallelizationConfigSchema, WorktreeIsolationConfigSchema, LeanTurboConfigSchema, RETIRED_EPIC_MODE_KEYS, RETIRED_EPIC_KEYS, RETIRED_EPIC_KEY_REPLACEMENTS, retiredEpicKeyReplacement, findRetiredEpicConfigKeys, EpicConfigSchema, LegacyTurboEpicConfigSchema, StandardTurboConfigSchema, LeanTurboStrategyConfigSchema, TurboConfigSchema, ExternalSkillCandidateSourceTypeSchema, ExternalSkillCandidateEvaluationVerdictSchema, DiscoverySourceSchema, ExternalSkillCandidateSchema, ExternalSkillsConfigSchema, DEFAULT_EXTERNAL_SKILLS_CONFIG, DEFAULT_SKILLS_CONFIG, resolveExternalSkillsConfig, DEFAULT_PR_REVIEW_RESILIENCE_CONFIG, PrReviewResilienceConfigSchema, ReviewRoutingConfigSchema, DEFAULT_REVIEW_ROUTING_CONFIG, LaneLivenessWatchdogConfigSchema, DispatchProtectionConfigSchema, DashboardConfigSchema, DEFAULT_PR_REVIEW_LEGACY_TRANSCRIPT_COMPATIBILITY, PluginConfigSchema, init_schema };
@@ -14,14 +14,14 @@ import {
14
14
  detectWindowsWrites,
15
15
  getSharedClassifierGuardrailBlock,
16
16
  resolveWriteTargets
17
- } from "./index-2nexf5vz.js";
17
+ } from "./index-ffgcdf49.js";
18
18
  import {
19
19
  checkFileAuthority,
20
20
  classifyFile,
21
21
  isInDeclaredScope,
22
22
  redactPath,
23
23
  redactShellCommand
24
- } from "./index-4p3jh14t.js";
24
+ } from "./index-9xxqdzp4.js";
25
25
 
26
26
  // src/services/guardrail-explain-service.ts
27
27
  import path from "path";
@@ -1,27 +1,36 @@
1
1
  // @bun
2
2
  import {
3
3
  loadPlanJsonOnly
4
- } from "./index-skdpgjar.js";
4
+ } from "./index-fb5s32c2.js";
5
5
  import {
6
6
  isCanonicalPathWithinRoot
7
7
  } from "./index-6b295cas.js";
8
8
  import {
9
9
  sameExistingFilesystemPath
10
10
  } from "./index-ry16d01s.js";
11
+ import {
12
+ hasLegacyEpicConfig,
13
+ init_config,
14
+ legacyEpicIssuePath,
15
+ migrateLegacyEpicConfig,
16
+ resolveEpicConfig
17
+ } from "./index-ejk34dnw.js";
11
18
  import {
12
19
  FALLBACK_MODELS_MAX,
13
20
  GATE_CONFIG_KNOWN_SECTION_KEYS,
14
21
  GateConfigSchema,
15
22
  PluginConfigSchema,
23
+ findRetiredEpicConfigKeys,
16
24
  init_schema,
25
+ retiredEpicKeyReplacement,
17
26
  stripKnownSwarmPrefix
18
- } from "./index-1cwmj1gs.js";
27
+ } from "./index-t0gj8s46.js";
19
28
  import {
20
29
  ALL_AGENT_NAMES,
21
30
  TOOL_NAME_SET,
22
31
  init_constants,
23
32
  init_tool_metadata
24
- } from "./index-zfbxfm2m.js";
33
+ } from "./index-s8b67e6h.js";
25
34
  import {
26
35
  log
27
36
  } from "./index-zgwm4ryv.js";
@@ -515,9 +524,16 @@ var CONFIG_CONSUMERS = {
515
524
  turbo: {
516
525
  consumers: [
517
526
  "src/agents/index.ts:createSwarmAgents",
518
- "src/commands/epic.ts:renderCalibration",
519
527
  "src/commands/turbo.ts:handleTurboCommand",
520
- "src/config/worktree-isolation-config.ts:resolveWorktreeIsolationConfig"
528
+ "src/config/worktree-isolation-config.ts:resolveWorktreeIsolationConfig",
529
+ "src/epic/config.ts:resolveEpicConfig",
530
+ "src/epic/shaping-sizing.ts:epicWaveWidth"
531
+ ]
532
+ },
533
+ epic: {
534
+ consumers: [
535
+ "src/epic/config.ts:resolveEpicConfig",
536
+ "src/epic/config.ts:migrateLegacyEpicConfig"
521
537
  ]
522
538
  },
523
539
  turbo_mode: {
@@ -590,9 +606,11 @@ var CONFIG_CONSUMERS = {
590
606
  ]
591
607
  }
592
608
  };
609
+ Object.freeze(CONFIG_CONSUMERS);
593
610
 
594
611
  // src/services/config-doctor.ts
595
612
  init_schema();
613
+ init_config();
596
614
  init_tool_metadata();
597
615
  var CONFIG_DOCTOR_MAX_CONFIG_FILE_BYTES = 102400;
598
616
  var KNOWN_TOP_LEVEL_KEYS = new Set(Object.keys(PluginConfigSchema.shape));
@@ -693,7 +711,7 @@ function emitObjectTypeMismatch(key, value, findings) {
693
711
  function isPlainObject(value) {
694
712
  return typeof value === "object" && value !== null && !Array.isArray(value);
695
713
  }
696
- function collectRawInertKeyFindings(directory) {
714
+ function collectRawInertKeyFindings(directory, consumers = CONFIG_CONSUMERS) {
697
715
  const findings = [];
698
716
  const { userConfigPath, projectConfigPath } = getConfigPaths(directory);
699
717
  const seen = new Set;
@@ -710,7 +728,7 @@ function collectRawInertKeyFindings(directory) {
710
728
  for (const key of Object.keys(raw)) {
711
729
  if (seen.has(key))
712
730
  continue;
713
- const declaration = CONFIG_CONSUMERS[key];
731
+ const declaration = Object.hasOwn(consumers, key) ? consumers[key] : undefined;
714
732
  if (!declaration || !("inert" in declaration))
715
733
  continue;
716
734
  seen.add(key);
@@ -905,7 +923,7 @@ function collectRawStrictSectionFindings(directory) {
905
923
  const raw = JSON.parse(fs.readFileSync(configPath, "utf-8"));
906
924
  if (!isPlainObject(raw))
907
925
  continue;
908
- const parsed = PluginConfigSchema.safeParse(raw);
926
+ const parsed = PluginConfigSchema.safeParse(migrateLegacyEpicConfig(raw));
909
927
  if (parsed.success)
910
928
  continue;
911
929
  const seen = new Set;
@@ -915,8 +933,9 @@ function collectRawStrictSectionFindings(directory) {
915
933
  if (issue.path[0] === "gates")
916
934
  continue;
917
935
  const keys = issue.keys ?? [];
936
+ const issuePath = legacyEpicIssuePath(raw, issue.path);
918
937
  for (const key of keys) {
919
- const dotted = [...issue.path.map(String), key].join(".");
938
+ const dotted = [...issuePath.map(String), key].join(".");
920
939
  if (seen.has(dotted))
921
940
  continue;
922
941
  seen.add(dotted);
@@ -935,6 +954,68 @@ function collectRawStrictSectionFindings(directory) {
935
954
  }
936
955
  return findings;
937
956
  }
957
+ function readRawEpicConfigFiles(directory) {
958
+ const out = [];
959
+ const { userConfigPath, projectConfigPath } = getConfigPaths(directory);
960
+ for (const configPath of [userConfigPath, projectConfigPath]) {
961
+ if (!fs.existsSync(configPath))
962
+ continue;
963
+ try {
964
+ const stats = fs.statSync(configPath);
965
+ if (stats.size > CONFIG_DOCTOR_MAX_CONFIG_FILE_BYTES)
966
+ continue;
967
+ const content = fs.readFileSync(configPath, "utf-8");
968
+ out.push({
969
+ configPath,
970
+ raw: JSON.parse(content.charCodeAt(0) === 65279 ? content.slice(1) : content)
971
+ });
972
+ } catch {}
973
+ }
974
+ return out;
975
+ }
976
+ function collectRawRetiredEpicKeyFindings(config, directory) {
977
+ const findings = [];
978
+ if (resolveEpicConfig(config) === undefined)
979
+ return findings;
980
+ const seen = new Set;
981
+ for (const { configPath, raw } of readRawEpicConfigFiles(directory)) {
982
+ for (const dotted of findRetiredEpicConfigKeys(raw)) {
983
+ if (seen.has(`${configPath}\x00${dotted}`))
984
+ continue;
985
+ seen.add(`${configPath}\x00${dotted}`);
986
+ const hint = retiredEpicKeyReplacement(dotted);
987
+ findings.push({
988
+ id: "retired-config-key",
989
+ title: "Retired config key",
990
+ description: `"${dotted}" in ${configPath} was retired by Epic Mode v2 and is ignored.${hint ? ` ${hint}` : ""} Remove it.`,
991
+ severity: "warn",
992
+ path: dotted,
993
+ currentValue: undefined,
994
+ autoFixable: false
995
+ });
996
+ }
997
+ }
998
+ return findings;
999
+ }
1000
+ function collectRawLegacyEpicConfigFindings(config, directory) {
1001
+ const findings = [];
1002
+ if (resolveEpicConfig(config) === undefined)
1003
+ return findings;
1004
+ for (const { configPath, raw } of readRawEpicConfigFiles(directory)) {
1005
+ if (!hasLegacyEpicConfig(raw))
1006
+ continue;
1007
+ findings.push({
1008
+ id: "legacy-epic-config-path",
1009
+ title: "Deprecated Epic config path",
1010
+ description: `"turbo.epic" in ${configPath} is deprecated: move the block to top-level "epic" (Epic Mode no longer needs a "turbo" block). It still works \u2014 the loader migrates it; within this file a top-level "epic" wins every key both set, and across files the project config wins over the user config as usual.`,
1011
+ severity: "warn",
1012
+ path: "turbo.epic",
1013
+ currentValue: undefined,
1014
+ autoFixable: false
1015
+ });
1016
+ }
1017
+ return findings;
1018
+ }
938
1019
  function getRawValueAtPath(raw, issuePath) {
939
1020
  let node = raw;
940
1021
  for (const seg of issuePath) {
@@ -960,7 +1041,7 @@ function collectRawValueConstraintFindings(directory) {
960
1041
  const raw = JSON.parse(fs.readFileSync(configPath, "utf-8"));
961
1042
  if (!isPlainObject(raw))
962
1043
  continue;
963
- const parsed = PluginConfigSchema.safeParse(raw);
1044
+ const parsed = PluginConfigSchema.safeParse(migrateLegacyEpicConfig(raw));
964
1045
  if (parsed.success)
965
1046
  continue;
966
1047
  for (const issue of parsed.error.issues) {
@@ -968,12 +1049,13 @@ function collectRawValueConstraintFindings(directory) {
968
1049
  continue;
969
1050
  if (issue.path[0] === "gates")
970
1051
  continue;
971
- const dotted = issue.path.map(String).join(".");
1052
+ const issuePath = legacyEpicIssuePath(raw, issue.path);
1053
+ const dotted = issuePath.map(String).join(".");
972
1054
  const dedupeKey = `${dotted}|${issue.code}`;
973
1055
  if (seen.has(dedupeKey))
974
1056
  continue;
975
1057
  seen.add(dedupeKey);
976
- const current = getRawValueAtPath(raw, issue.path);
1058
+ const current = getRawValueAtPath(raw, issuePath);
977
1059
  if (issue.code === "too_big" && dotted.endsWith("fallback_models") && Array.isArray(current) && current.length > FALLBACK_MODELS_MAX) {
978
1060
  const trimmed = current.slice(0, FALLBACK_MODELS_MAX);
979
1061
  const dropped = current.slice(FALLBACK_MODELS_MAX).map(String);
@@ -1881,6 +1963,10 @@ function validateConfigKey(path2, value) {
1881
1963
  emitObjectTypeMismatch("turbo", value, findings);
1882
1964
  break;
1883
1965
  }
1966
+ case "epic": {
1967
+ emitObjectTypeMismatch("epic", value, findings);
1968
+ break;
1969
+ }
1884
1970
  case "turbo_mode": {
1885
1971
  if (value !== undefined && typeof value !== "boolean") {
1886
1972
  findings.push({
@@ -2099,6 +2185,8 @@ function runConfigDoctor(config, directory, planParallelizationEnabled = null) {
2099
2185
  findings.push(...collectRawGatesConfigFindings(directory));
2100
2186
  findings.push(...collectRawCouncilPolicyFindings(directory));
2101
2187
  findings.push(...collectRawStrictSectionFindings(directory));
2188
+ findings.push(...collectRawRetiredEpicKeyFindings(config, directory));
2189
+ findings.push(...collectRawLegacyEpicConfigFindings(config, directory));
2102
2190
  findings.push(...collectRawValueConstraintFindings(directory));
2103
2191
  findings.push(...collectRawAutoReviewCompatibilityFindings(directory));
2104
2192
  findings.push(...collectRawInertKeyFindings(directory));
@@ -2582,4 +2670,4 @@ function removeStraySwarmDir(projectRoot, strayPath) {
2582
2670
  }
2583
2671
  }
2584
2672
 
2585
- export { CURRENT_CONFIG_FORMAT_VERSION, DEFAULT_FLIPS, LEAN_TURBO_GATE_PRODUCERS, collectLeanTurboGateSatisfiabilityFindings, _internals, resolvePlanParallelizationFlag, getConfigPaths, createConfigBackup, writeBackupArtifact, restoreFromBackup, runConfigDoctor, applySafeAutoFixes, readDoctorArtifact, writeDoctorArtifact, shouldRunOnStartup, runConfigDoctorWithFixes, detectStraySwarmDirs, removeStraySwarmDir };
2673
+ export { CURRENT_CONFIG_FORMAT_VERSION, DEFAULT_FLIPS, collectRawInertKeyFindings, LEAN_TURBO_GATE_PRODUCERS, collectLeanTurboGateSatisfiabilityFindings, collectRawRetiredEpicKeyFindings, collectRawLegacyEpicConfigFindings, _internals, resolvePlanParallelizationFlag, getConfigPaths, createConfigBackup, writeBackupArtifact, restoreFromBackup, runConfigDoctor, applySafeAutoFixes, readDoctorArtifact, writeDoctorArtifact, shouldRunOnStartup, runConfigDoctorWithFixes, detectStraySwarmDirs, removeStraySwarmDir };
@@ -8,6 +8,13 @@ var durableStatusPath;
8
8
  var MAX_RECOVERY_STATUS_BYTES = 2 * 1024 * 1024;
9
9
  var MAX_RECOVERY_STATUS_ENTRIES = 512;
10
10
  var hasLoaded = false;
11
+ function getDurableStatusPath(projectDir) {
12
+ if (durableStatusPath)
13
+ return durableStatusPath;
14
+ if (!projectDir)
15
+ throw new Error("durableStatusPath not set and projectDir not provided");
16
+ return path.join(projectDir, ".swarm", "worktree-merge-status.json");
17
+ }
11
18
  function loadDurableStatus(statusPath) {
12
19
  try {
13
20
  hasLoaded = true;
@@ -152,5 +159,22 @@ function getAllWorktreeMergeFailures() {
152
159
  }
153
160
  return failuresByTask.entries();
154
161
  }
162
+ var _internals = {
163
+ failuresByTask,
164
+ getDurableStatusPath,
165
+ loadDurableStatus,
166
+ saveDurableStatus,
167
+ initDurableStatusPath,
168
+ resetForTest() {
169
+ if (durableStatusPath !== undefined) {
170
+ try {
171
+ fs.unlinkSync(durableStatusPath);
172
+ } catch {}
173
+ }
174
+ failuresByTask.clear();
175
+ durableStatusPath = undefined;
176
+ hasLoaded = false;
177
+ }
178
+ };
155
179
 
156
- export { scanWorktreeMergeFailuresForRecovery, initDurableStatusPath, recordWorktreeMergeFailure, clearWorktreeMergeStatus, getWorktreeMergeFailure, getAllWorktreeMergeFailures };
180
+ export { scanWorktreeMergeFailuresForRecovery, initDurableStatusPath, recordWorktreeMergeFailure, clearWorktreeMergeStatus, getWorktreeMergeFailure, getAllWorktreeMergeFailures, _internals };
@@ -2,10 +2,10 @@
2
2
  import {
3
3
  captureWorkspaceSnapshotAsync,
4
4
  changedFilesSinceSnapshotAsync
5
- } from "./index-kaqdzhj3.js";
5
+ } from "./index-kfevm0n5.js";
6
6
  import {
7
7
  removeWorktreeProvisioningOwner
8
- } from "./index-f6exny9m.js";
8
+ } from "./index-n8q43eff.js";
9
9
  import {
10
10
  SOURCE_WORKTREE_GONE_STAGE,
11
11
  ensureTaskGateRequirementsReceiptForSettledTransition,
@@ -14,13 +14,13 @@ import {
14
14
  reconcileLandedMerge,
15
15
  withTaskEvidenceTransaction,
16
16
  writeWorkflowWalFile
17
- } from "./index-5v09zw1q.js";
17
+ } from "./index-69tgdm9t.js";
18
18
  import {
19
19
  validateSwarmPath
20
- } from "./index-7hr5m7yp.js";
20
+ } from "./index-nkgzkt7c.js";
21
21
  import {
22
22
  appendCoreEventSync
23
- } from "./index-wrdktgpy.js";
23
+ } from "./index-zk6ttjkt.js";
24
24
  import {
25
25
  canonicalRootKeyFresh
26
26
  } from "./index-fzpt2djt.js";
@@ -512,7 +512,7 @@ async function cleanupRecoveredWorktree(directory, descriptor, options) {
512
512
  awaitingMergeByCallID,
513
513
  cleanupStandardWorktreeForCallId,
514
514
  standardWorktreeByCallID
515
- } = await import("./worktree-isolation-h0c22pm2.js");
515
+ } = await import("./worktree-isolation-zfk7zk6a.js");
516
516
  standardWorktreeByCallID.delete(descriptor.callID);
517
517
  if (hasResidue)
518
518
  awaitingMergeByCallID.set(descriptor.callID, {
@@ -648,7 +648,7 @@ async function recoverCoderSettlement(directory, taskId) {
648
648
  awaitingMergeByCallID,
649
649
  finishStandardWorktreeDispatch,
650
650
  standardWorktreeByCallID
651
- } = await import("./worktree-isolation-h0c22pm2.js");
651
+ } = await import("./worktree-isolation-zfk7zk6a.js");
652
652
  const descriptor = wal.worktree;
653
653
  const reconstructedDispatch = {
654
654
  callID: descriptor.callID,