opencode-swarm 7.195.0 → 7.196.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 (74) hide show
  1. package/README.md +1 -1
  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/cli/{auto-checkpoint-anf21wwa.js → auto-checkpoint-f00tk7sc.js} +4 -4
  5. package/dist/cli/{checkpoint-ngdw2qx2.js → checkpoint-acztxqga.js} +8 -8
  6. package/dist/cli/{coder-settlement-bqb059y2.js → coder-settlement-0ka4n1xf.js} +3 -3
  7. package/dist/cli/{config-doctor-vetg215g.js → config-doctor-qv7wc6fa.js} +7 -7
  8. package/dist/cli/{core-8qgvsm6x.js → core-dmn3arr1.js} +1 -1
  9. package/dist/cli/{curator-hh0n9wgz.js → curator-891pc8b7.js} +25 -25
  10. package/dist/cli/{curator-drift-3gjycbkv.js → curator-drift-sxzs48ew.js} +5 -5
  11. package/dist/cli/{curator-llm-factory-d17ybmgm.js → curator-llm-factory-cvrt4bf9.js} +25 -25
  12. package/dist/cli/{doctor-knowledge-receipt-phase-id-1d465vkg.js → doctor-knowledge-receipt-phase-id-mvbj576e.js} +4 -4
  13. package/dist/cli/{evidence-summary-service-rkd3yc5x.js → evidence-summary-service-x9nxvmn5.js} +9 -9
  14. package/dist/cli/{gate-evidence-wtjrerkh.js → gate-evidence-dxd20wrc.js} +2 -2
  15. package/dist/cli/{guardrail-explain-8xh3r0dn.js → guardrail-explain-fga9bnvt.js} +26 -26
  16. package/dist/cli/{guardrail-log-jrey2myg.js → guardrail-log-y84b9m8n.js} +3 -3
  17. package/dist/cli/{guardrail-reset-m5qbg30j.js → guardrail-reset-xpcsxyt0.js} +25 -25
  18. package/dist/cli/{hive-promoter-36yhdfre.js → hive-promoter-w1vchgfr.js} +25 -25
  19. package/dist/cli/{index-1hcjxz6w.js → index-174j0g38.js} +2 -2
  20. package/dist/cli/{index-780g1hht.js → index-2grr37ry.js} +1 -1
  21. package/dist/cli/{index-xs9cn3c0.js → index-31b55cq9.js} +3 -3
  22. package/dist/cli/{index-479kf368.js → index-391ydd25.js} +1 -1
  23. package/dist/cli/{index-kmvy5fr8.js → index-3drq02r1.js} +1 -1
  24. package/dist/cli/{index-jatgbm7k.js → index-3hpjqa6y.js} +1 -1
  25. package/dist/cli/{index-yryy781f.js → index-41p9zzpe.js} +3 -3
  26. package/dist/cli/{index-h7275akd.js → index-4cazf4kb.js} +27 -27
  27. package/dist/cli/{index-gz16dke1.js → index-7gqmqhzj.js} +6 -6
  28. package/dist/cli/{index-fk4j26km.js → index-7zkgdefv.js} +3 -3
  29. package/dist/cli/{index-82aj6gaj.js → index-8bsnnnj2.js} +2 -2
  30. package/dist/cli/{index-7kbpzg05.js → index-bjaef5zn.js} +63 -63
  31. package/dist/cli/{index-gns3gc87.js → index-hjma52c8.js} +3 -3
  32. package/dist/cli/{index-5gf2wx2c.js → index-jnjvghgp.js} +4 -4
  33. package/dist/cli/{index-8448vj9w.js → index-knxq5byr.js} +1 -1
  34. package/dist/cli/{index-bftpd2m5.js → index-mt5t492g.js} +2 -2
  35. package/dist/cli/{index-jn4mmhqc.js → index-nqxbqb50.js} +1 -1
  36. package/dist/cli/{index-9teqkkp4.js → index-nrqyc8pr.js} +25 -25
  37. package/dist/cli/{index-c6hyd8hg.js → index-ppnpkww2.js} +1 -1
  38. package/dist/cli/{index-bpq6z8qe.js → index-psqfkgav.js} +3 -3
  39. package/dist/cli/{index-peyz4k9k.js → index-ryjp0wmq.js} +1 -1
  40. package/dist/cli/{index-863hst4e.js → index-sgt1d7ez.js} +1 -1
  41. package/dist/cli/{index-z59414gv.js → index-svbh91pz.js} +1 -1
  42. package/dist/cli/{index-akb436kn.js → index-t5med3ga.js} +1 -1
  43. package/dist/cli/{index-c4hx57tz.js → index-te61qv0q.js} +2 -2
  44. package/dist/cli/{index-epdzvp4w.js → index-tjc68trf.js} +5 -5
  45. package/dist/cli/{index-6vpqe4ws.js → index-tzasccpd.js} +1 -1
  46. package/dist/cli/{index-3k65kdfp.js → index-vsa05smc.js} +1 -1
  47. package/dist/cli/{index-ha8xc5d3.js → index-w3mav870.js} +2 -2
  48. package/dist/cli/{index-tc8x0zc5.js → index-wscg5ryb.js} +1 -1
  49. package/dist/cli/index.js +26 -26
  50. package/dist/cli/{knowledge-escalator-6sgrjbcj.js → knowledge-escalator-2dy96d0j.js} +7 -7
  51. package/dist/cli/{knowledge-events-hztjt63y.js → knowledge-events-70kb745b.js} +5 -5
  52. package/dist/cli/{knowledge-store-3sd2034v.js → knowledge-store-hvq03g0j.js} +1 -1
  53. package/dist/cli/{knowledge-validator-3fe82zy4.js → knowledge-validator-eaatcnkr.js} +2 -2
  54. package/dist/cli/{mcp-spbx3efe.js → mcp-bj3awdfy.js} +1 -1
  55. package/dist/cli/{model-preflight-k2bw7rt1.js → model-preflight-skhq4xtr.js} +25 -25
  56. package/dist/cli/{pending-delegations-kcvd9t41.js → pending-delegations-yamzv468.js} +2 -2
  57. package/dist/cli/{pr-subscriptions-nqby87en.js → pr-subscriptions-hkzd0nr4.js} +1 -1
  58. package/dist/cli/{pr-workflow-gate-cgbc0x1z.js → pr-workflow-gate-2gmznmj4.js} +25 -25
  59. package/dist/cli/{scan-cursor-sphr9phs.js → scan-cursor-arezehhk.js} +2 -2
  60. package/dist/cli/{schema-x892aatt.js → schema-emx6r32d.js} +1 -1
  61. package/dist/cli/{scope-persistence-n9xksct2.js → scope-persistence-tvr8w7ea.js} +5 -5
  62. package/dist/cli/{server-am2y11yn.js → server-ez03wdw9.js} +25 -25
  63. package/dist/cli/{skill-generator-p71b6h5k.js → skill-generator-w0jy1mpc.js} +8 -8
  64. package/dist/cli/{snapshot-coordination-init-x9b4t9sk.js → snapshot-coordination-init-2x56ds8a.js} +25 -25
  65. package/dist/cli/{speckit-checkoff-xp9vsp9k.js → speckit-checkoff-c2e5wezr.js} +3 -3
  66. package/dist/cli/{worktree-collision-ownership-2pmyww6g.js → worktree-collision-ownership-1bgcea0v.js} +2 -2
  67. package/dist/cli/{worktree-isolation-379tmkta.js → worktree-isolation-9xp4dz41.js} +25 -25
  68. package/dist/commands/registry.d.ts +1 -1
  69. package/dist/epic/start.d.ts +5 -4
  70. package/dist/host/v2/agents-commands.d.ts +13 -3
  71. package/dist/index.js +81 -78
  72. package/dist/sbom/detectors/index.d.ts +15 -0
  73. package/dist/tools/sbom-generate.d.ts +1 -1
  74. package/package.json +1 -1
@@ -8,14 +8,14 @@ import {
8
8
  protectedRoots,
9
9
  redactDecisionLineForArchive,
10
10
  stableCanonicalStringify
11
- } from "./index-akb436kn.js";
11
+ } from "./index-t5med3ga.js";
12
12
  import {
13
13
  detectStraySwarmDirs,
14
14
  readDoctorArtifact,
15
15
  removeStraySwarmDir,
16
16
  resolvePlanParallelizationFlag,
17
17
  runConfigDoctor
18
- } from "./index-gns3gc87.js";
18
+ } from "./index-hjma52c8.js";
19
19
  import {
20
20
  archiveEvidence,
21
21
  checkRequirementCoverage,
@@ -27,7 +27,7 @@ import {
27
27
  sanitizeTaskId,
28
28
  saveEvidence,
29
29
  validateProjectRoot
30
- } from "./index-780g1hht.js";
30
+ } from "./index-2grr37ry.js";
31
31
  import {
32
32
  JAVA_SYMBOL_GRAMMAR,
33
33
  LANGUAGE_REGISTRY,
@@ -89,7 +89,7 @@ import {
89
89
  alreadyCuratedThisGeneration,
90
90
  claimNextScanBatch,
91
91
  resolveCohortId
92
- } from "./index-8448vj9w.js";
92
+ } from "./index-knxq5byr.js";
93
93
  import {
94
94
  CURATOR_CONSOLIDATION_PROMPT,
95
95
  CURATOR_INIT_PROMPT,
@@ -108,13 +108,13 @@ import {
108
108
  getGroupCommitWriter,
109
109
  importLegacyJsonl,
110
110
  readPriorDriftReports
111
- } from "./index-863hst4e.js";
111
+ } from "./index-sgt1d7ez.js";
112
112
  import {
113
113
  assertNoUnsettledCoderDispatch,
114
114
  listCoderSettlementWalStates,
115
115
  recoverCoderSettlement,
116
116
  recoverStaleCoderSettlements
117
- } from "./index-fk4j26km.js";
117
+ } from "./index-7zkgdefv.js";
118
118
  import {
119
119
  BUNDLED_PROJECT_SKILL_ROOT,
120
120
  DEFAULT_SKILL_MIN_CONFIDENCE,
@@ -135,11 +135,11 @@ import {
135
135
  retireSkill,
136
136
  selectCandidateEntries,
137
137
  syncBundledProjectSkillsIfMissingAsync
138
- } from "./index-yryy781f.js";
138
+ } from "./index-41p9zzpe.js";
139
139
  import {
140
140
  buildEscalationBriefing,
141
141
  readRecentEscalations
142
- } from "./index-gz16dke1.js";
142
+ } from "./index-7gqmqhzj.js";
143
143
  import {
144
144
  parsePorcelainV2Snapshot,
145
145
  resolveCommitCountSince,
@@ -223,7 +223,7 @@ import {
223
223
  swarmOverwriteCandidates,
224
224
  trackedDirtyCandidates,
225
225
  transientBackoff
226
- } from "./index-xs9cn3c0.js";
226
+ } from "./index-31b55cq9.js";
227
227
  import {
228
228
  EPIC_MODE_CONFIG_DISABLED_MESSAGE,
229
229
  PlanRecoverySupersededError,
@@ -255,7 +255,7 @@ import {
255
255
  updateEpicRecord,
256
256
  updateTaskStatus,
257
257
  withPlanLifecycleLock
258
- } from "./index-epdzvp4w.js";
258
+ } from "./index-tjc68trf.js";
259
259
  import {
260
260
  containsControlChars,
261
261
  containsPathTraversal,
@@ -271,7 +271,7 @@ import {
271
271
  resolveSpeckitProjection,
272
272
  validateSpeckit,
273
273
  writeProjectedSpecSync
274
- } from "./index-peyz4k9k.js";
274
+ } from "./index-ryjp0wmq.js";
275
275
  import {
276
276
  clearWorktreeMergeStatus,
277
277
  getAllWorktreeMergeFailures,
@@ -303,7 +303,7 @@ import {
303
303
  transitionTaskWorkflowEvidenceWithStatus,
304
304
  withTaskEvidenceTransaction,
305
305
  writeWorkflowWalFile
306
- } from "./index-kmvy5fr8.js";
306
+ } from "./index-3drq02r1.js";
307
307
  import {
308
308
  isPathUnderSwarmWorktreeBase,
309
309
  listLiveLaneOwners,
@@ -312,7 +312,7 @@ import {
312
312
  recordLiveLaneOwner,
313
313
  removeWorktree,
314
314
  resolveWorktreeBaseDir
315
- } from "./index-479kf368.js";
315
+ } from "./index-391ydd25.js";
316
316
  import {
317
317
  GitBinaryMissingError,
318
318
  GitSpawnCwdError,
@@ -354,7 +354,7 @@ import {
354
354
  scanBackgroundCoderReservationsForAdmission,
355
355
  scanDelegationsForRecovery,
356
356
  sweepStaleDelegations
357
- } from "./index-3k65kdfp.js";
357
+ } from "./index-vsa05smc.js";
358
358
  import {
359
359
  MAX_EVENT_LOG_ENTRIES,
360
360
  _internals,
@@ -366,7 +366,7 @@ import {
366
366
  recordHiveKnowledgeEvent,
367
367
  recordKnowledgeEvent,
368
368
  resolveKnowledgeEventsPath
369
- } from "./index-bftpd2m5.js";
369
+ } from "./index-mt5t492g.js";
370
370
  import {
371
371
  commitDisplayedMembership,
372
372
  commitEmptyRetrieval,
@@ -379,7 +379,7 @@ import {
379
379
  queryLiveMemberships,
380
380
  reconcilePhaseClose,
381
381
  recordPhaseCloseIntent
382
- } from "./index-c4hx57tz.js";
382
+ } from "./index-te61qv0q.js";
383
383
  import {
384
384
  sanitizeContextText
385
385
  } from "./index-m9zzj4ee.js";
@@ -410,7 +410,7 @@ import {
410
410
  validateActionableFields,
411
411
  validateLesson,
412
412
  validateSkillPath
413
- } from "./index-tc8x0zc5.js";
413
+ } from "./index-wscg5ryb.js";
414
414
  import {
415
415
  MAX_CURATION_PROPOSALS,
416
416
  authorizeCuration,
@@ -421,7 +421,7 @@ import {
421
421
  } from "./index-rtry5xyf.js";
422
422
  import {
423
423
  resolveWorktreeIsolationConfig
424
- } from "./index-82aj6gaj.js";
424
+ } from "./index-8bsnnnj2.js";
425
425
  import {
426
426
  RetrospectiveEvidenceSchema
427
427
  } from "./index-g22dps7x.js";
@@ -433,7 +433,7 @@ import {
433
433
  clearScopeBindings,
434
434
  readAuthoritativeScopeBindingSet,
435
435
  readDeclaredScopeFilesFromBindings
436
- } from "./index-6vpqe4ws.js";
436
+ } from "./index-tzasccpd.js";
437
437
  import {
438
438
  approvedSnapshotCoversPlan,
439
439
  clearPlanLedgerForReset,
@@ -450,7 +450,7 @@ import {
450
450
  replayFromLedgerWithStatus,
451
451
  resolvePlanningProfile,
452
452
  takeSnapshotEvent
453
- } from "./index-1hcjxz6w.js";
453
+ } from "./index-174j0g38.js";
454
454
  import {
455
455
  CORE_EVENT_LOCKED,
456
456
  appendCoreEventSync,
@@ -539,7 +539,7 @@ import {
539
539
  transactFile,
540
540
  transactKnowledge,
541
541
  wordBigrams
542
- } from "./index-5gf2wx2c.js";
542
+ } from "./index-jnjvghgp.js";
543
543
  import {
544
544
  readTailJsonl,
545
545
  readTailJsonlDetailed,
@@ -624,7 +624,7 @@ import {
624
624
  loadPluginConfig,
625
625
  loadPluginConfigWithMeta,
626
626
  resolveEpicConfig
627
- } from "./index-c6hyd8hg.js";
627
+ } from "./index-ppnpkww2.js";
628
628
  import {
629
629
  GIT_BINARY_ENV_VAR,
630
630
  addDeferredWarning,
@@ -657,7 +657,7 @@ import {
657
657
  resolveContextWindow,
658
658
  resolveGeneratedAgentRole,
659
659
  stripKnownSwarmPrefix
660
- } from "./index-jn4mmhqc.js";
660
+ } from "./index-nqxbqb50.js";
661
661
  import {
662
662
  AGENT_TOOL_MAP,
663
663
  ALL_AGENT_NAMES,
@@ -3457,7 +3457,7 @@ async function importLegacyPrWorkflowGateStateIfNeeded(directory, sessionID, all
3457
3457
  return null;
3458
3458
  throw error2;
3459
3459
  }
3460
- const legacy = allowSalvagedImport ? (await (await import("./pr-workflow-gate-cgbc0x1z.js")).readPrWorkflowGateStateForRecovery(directory, sessionID))?.state ?? null : await readPrWorkflowGateStateFileFromDisk(filePath, sessionID);
3460
+ const legacy = allowSalvagedImport ? (await (await import("./pr-workflow-gate-2gmznmj4.js")).readPrWorkflowGateStateForRecovery(directory, sessionID))?.state ?? null : await readPrWorkflowGateStateFileFromDisk(filePath, sessionID);
3461
3461
  if (!legacy)
3462
3462
  return null;
3463
3463
  const namespace = workflowGateStateCoordinationNamespace(sessionID);
@@ -3544,7 +3544,7 @@ async function deleteStateWhileLocked(directory, sessionID, options = {}) {
3544
3544
  let recoveryState = null;
3545
3545
  if (!currentAuthoritative) {
3546
3546
  if (options.allowSalvagedRead) {
3547
- const { readPrWorkflowGateStateForRecovery } = await import("./pr-workflow-gate-cgbc0x1z.js");
3547
+ const { readPrWorkflowGateStateForRecovery } = await import("./pr-workflow-gate-2gmznmj4.js");
3548
3548
  recoveryState = (await readPrWorkflowGateStateForRecovery(directory, normalizedSessionID))?.state ?? null;
3549
3549
  }
3550
3550
  if (!recoveryState) {
@@ -11342,7 +11342,7 @@ function isLaneOwnedByCurrentSession(branchName, expectedSessionId) {
11342
11342
  return extracted === expectedSessionId;
11343
11343
  }
11344
11344
  async function inspectStandardWorktreeCollisionOwnership(identity) {
11345
- const collisionOwnership = await import("./worktree-collision-ownership-2pmyww6g.js");
11345
+ const collisionOwnership = await import("./worktree-collision-ownership-1bgcea0v.js");
11346
11346
  return collisionOwnership.inspectStandardWorktreeCollisionOwnership(identity);
11347
11347
  }
11348
11348
  async function runRecoveryGit(directory, args, timeoutMs = 15000) {
@@ -11770,7 +11770,7 @@ async function precreateStandardWorktreeSession(args) {
11770
11770
  const laneProfile = computeLaneRuntimeProfile(worktreeConfig.runtime_isolation, laneIndex, handle.worktreePath);
11771
11771
  if (laneProfile) {
11772
11772
  try {
11773
- const { writeLaneProfileToDiskReal } = await import("./core-8qgvsm6x.js");
11773
+ const { writeLaneProfileToDiskReal } = await import("./core-dmn3arr1.js");
11774
11774
  await writeLaneProfileToDiskReal(handle.worktreePath, laneProfile.laneIndex, laneProfile.envOverrides);
11775
11775
  } catch {}
11776
11776
  }
@@ -12764,7 +12764,7 @@ async function finishStandardWorktreeDispatch(directory, dispatch, config, callI
12764
12764
  }
12765
12765
  clearWorktreeMergeStatus(statusKey);
12766
12766
  try {
12767
- const { removeLaneProfileFromDiskReal } = await import("./core-8qgvsm6x.js");
12767
+ const { removeLaneProfileFromDiskReal } = await import("./core-dmn3arr1.js");
12768
12768
  await removeLaneProfileFromDiskReal(dispatch.handle.worktreePath, dispatch.laneIndex);
12769
12769
  } catch {}
12770
12770
  const state = serializationStateBySessionID.get(dispatch.parentSessionID);
@@ -29106,7 +29106,7 @@ function clearCriticalShownIds(sessionID) {
29106
29106
  async function rehydratePrSubscriptions(sessionID, directory) {
29107
29107
  const map = new Map;
29108
29108
  try {
29109
- const { listActive: listActive2 } = await import("./pr-subscriptions-nqby87en.js");
29109
+ const { listActive: listActive2 } = await import("./pr-subscriptions-hkzd0nr4.js");
29110
29110
  const records = await listActive2(directory);
29111
29111
  for (const record of records) {
29112
29112
  if (record.sessionID !== sessionID)
@@ -46108,9 +46108,9 @@ function hashContent(content) {
46108
46108
  return createHash30("sha1").update(content).digest("hex");
46109
46109
  }
46110
46110
  async function loadConfigForPolicyCurator(directory) {
46111
- const { KnowledgeConfigSchema: KnowledgeConfigSchema2 } = await import("./schema-x892aatt.js");
46111
+ const { KnowledgeConfigSchema: KnowledgeConfigSchema2 } = await import("./schema-emx6r32d.js");
46112
46112
  try {
46113
- const { loadPluginConfigWithMeta: loadPluginConfigWithMeta2 } = await import("./index-bpq6z8qe.js");
46113
+ const { loadPluginConfigWithMeta: loadPluginConfigWithMeta2 } = await import("./index-psqfkgav.js");
46114
46114
  const { config: loadedConfig } = loadPluginConfigWithMeta2(directory);
46115
46115
  return KnowledgeConfigSchema2.parse(loadedConfig.knowledge ?? {});
46116
46116
  } catch {
@@ -49168,7 +49168,7 @@ async function resolveCuratorLLMDelegate(directory, mode, sessionId) {
49168
49168
  const seam = _internals50.createCuratorLLMDelegate;
49169
49169
  if (seam)
49170
49170
  return seam(directory, mode, sessionId);
49171
- const { createCuratorLLMDelegate } = await import("./curator-llm-factory-d17ybmgm.js");
49171
+ const { createCuratorLLMDelegate } = await import("./curator-llm-factory-cvrt4bf9.js");
49172
49172
  return createCuratorLLMDelegate(directory, mode, sessionId);
49173
49173
  }
49174
49174
  async function reconcileCloseTerminalStateForPlan(directory, targetPlan, options) {
@@ -49563,7 +49563,7 @@ async function runFinalizeStage(ctx) {
49563
49563
  }
49564
49564
  }
49565
49565
  try {
49566
- const { CuratorConfigSchema: CCS } = await import("./schema-x892aatt.js");
49566
+ const { CuratorConfigSchema: CCS } = await import("./schema-emx6r32d.js");
49567
49567
  const { config: pmLoadedConfig } = _internals50.loadPluginConfigWithMeta(ctx.directory);
49568
49568
  const curatorCfg = CCS.parse(pmLoadedConfig.curator ?? {});
49569
49569
  if (curatorCfg.enabled && curatorCfg.postmortem_enabled) {
@@ -53596,7 +53596,7 @@ function serializeAgentSession(s) {
53596
53596
  }
53597
53597
  async function writeSnapshot(directory, state) {
53598
53598
  try {
53599
- const { ensureSnapshotCoordinationReady } = await import("./snapshot-coordination-init-x9b4t9sk.js");
53599
+ const { ensureSnapshotCoordinationReady } = await import("./snapshot-coordination-init-2x56ds8a.js");
53600
53600
  await ensureSnapshotCoordinationReady(directory);
53601
53601
  const snapshot = {
53602
53602
  version: 3,
@@ -56617,7 +56617,7 @@ function planMerges(active, threshold, maxComparisons, maxMerges) {
56617
56617
  };
56618
56618
  }
56619
56619
  async function sweepActiveNearDuplicates(directory, options = {}) {
56620
- const { loadPluginConfigWithMeta: loadPluginConfigWithMeta2 } = await import("./index-bpq6z8qe.js");
56620
+ const { loadPluginConfigWithMeta: loadPluginConfigWithMeta2 } = await import("./index-psqfkgav.js");
56621
56621
  const { config } = loadPluginConfigWithMeta2(directory);
56622
56622
  const sweepConfig = config.learning?.dedup_sweep;
56623
56623
  if (sweepConfig?.enabled === false)
@@ -57741,7 +57741,7 @@ async function runCuratorPhase(directory, phase, agentsDispatched, config, knowl
57741
57741
  }
57742
57742
  if (config.skill_generation_enabled === true && skillCandidates.length > 0) {
57743
57743
  try {
57744
- const skillModule = await import("./skill-generator-p71b6h5k.js");
57744
+ const skillModule = await import("./skill-generator-w0jy1mpc.js");
57745
57745
  for (const cand of skillCandidates) {
57746
57746
  if (cand.confidence < (config.min_skill_confidence ?? DEFAULT_SKILL_MIN_CONFIDENCE)) {
57747
57747
  continue;
@@ -58213,7 +58213,7 @@ async function applyCuratorKnowledgeUpdates(directory, recommendations, knowledg
58213
58213
  } catch {}
58214
58214
  }
58215
58215
  if (contradictedEntries.length > 0 && knowledgeConfig.contradiction_threshold_action === "quarantine") {
58216
- const { maybeQuarantineOnContradiction } = await import("./knowledge-escalator-6sgrjbcj.js");
58216
+ const { maybeQuarantineOnContradiction } = await import("./knowledge-escalator-2dy96d0j.js");
58217
58217
  for (const { id } of contradictedEntries) {
58218
58218
  try {
58219
58219
  await maybeQuarantineOnContradiction(directory, id, knowledgeConfig.contradiction_quarantine_threshold, knowledgeConfig.contradiction_quarantine_window_days);
@@ -59045,7 +59045,7 @@ async function runCuratorPostMortem(directory, options = {}) {
59045
59045
  warnings.push("Failed to collect knowledge summary.");
59046
59046
  }
59047
59047
  try {
59048
- const { getScanStatus } = await import("./scan-cursor-sphr9phs.js");
59048
+ const { getScanStatus } = await import("./scan-cursor-arezehhk.js");
59049
59049
  const scanStatus = await getScanStatus(directory);
59050
59050
  if (scanStatus.remaining_estimate > 0) {
59051
59051
  warnings.push(`Fair scan: reviewed ${knowledgeSummary.length} entries this sweep (generation ${scanStatus.generation}); ${scanStatus.remaining_estimate} more eligible entries will be visited in future curation sweeps.`);
@@ -59217,9 +59217,9 @@ var _internals72 = {
59217
59217
  verifyPostMortemKnowledgeActions,
59218
59218
  repairPostMortemActions,
59219
59219
  loadDefaultKnowledgeConfig: async (directory) => {
59220
- const { KnowledgeConfigSchema: KnowledgeConfigSchema2 } = await import("./schema-x892aatt.js");
59220
+ const { KnowledgeConfigSchema: KnowledgeConfigSchema2 } = await import("./schema-emx6r32d.js");
59221
59221
  try {
59222
- const { loadPluginConfigWithMeta: loadPluginConfigWithMeta2 } = await import("./index-bpq6z8qe.js");
59222
+ const { loadPluginConfigWithMeta: loadPluginConfigWithMeta2 } = await import("./index-psqfkgav.js");
59223
59223
  const loaded = loadPluginConfigWithMeta2(directory);
59224
59224
  return KnowledgeConfigSchema2.parse(loaded.config.knowledge ?? {});
59225
59225
  } catch {
@@ -59227,11 +59227,11 @@ var _internals72 = {
59227
59227
  }
59228
59228
  },
59229
59229
  applyCuratorKnowledgeUpdates: async (directory, recommendations, knowledgeConfig, generation) => {
59230
- const { applyCuratorKnowledgeUpdates: applyCuratorKnowledgeUpdates2 } = await import("./curator-hh0n9wgz.js");
59230
+ const { applyCuratorKnowledgeUpdates: applyCuratorKnowledgeUpdates2 } = await import("./curator-891pc8b7.js");
59231
59231
  return applyCuratorKnowledgeUpdates2(directory, recommendations, knowledgeConfig, generation);
59232
59232
  },
59233
59233
  checkHivePromotions: async (entries2, knowledgeConfig, directory) => {
59234
- const { checkHivePromotions } = await import("./hive-promoter-36yhdfre.js");
59234
+ const { checkHivePromotions } = await import("./hive-promoter-w1vchgfr.js");
59235
59235
  return checkHivePromotions(entries2, knowledgeConfig, directory);
59236
59236
  },
59237
59237
  applyProposalTriage: async (directory, triage) => {
@@ -59240,7 +59240,7 @@ var _internals72 = {
59240
59240
  activateProposal,
59241
59241
  listSkills: listSkills2,
59242
59242
  sanitizeSlug
59243
- } = await import("./skill-generator-p71b6h5k.js");
59243
+ } = await import("./skill-generator-w0jy1mpc.js");
59244
59244
  const result = {
59245
59245
  approved: [],
59246
59246
  rejected: [],
@@ -59282,7 +59282,7 @@ var _internals72 = {
59282
59282
  return result;
59283
59283
  },
59284
59284
  readPriorDriftReports: async (directory) => {
59285
- const { readPriorDriftReports: readPriorDriftReports2 } = await import("./curator-drift-3gjycbkv.js");
59285
+ const { readPriorDriftReports: readPriorDriftReports2 } = await import("./curator-drift-sxzs48ew.js");
59286
59286
  return readPriorDriftReports2(directory);
59287
59287
  },
59288
59288
  readSwarmKnowledge: (directory) => readKnowledge(resolveSwarmKnowledgePath(directory))
@@ -69552,9 +69552,9 @@ var _internals80 = {
69552
69552
  loadPluginConfigWithMeta,
69553
69553
  loadCuratorDeps: async () => {
69554
69554
  const [{ CuratorConfigSchema }, curator, { createCuratorLLMDelegate }] = await Promise.all([
69555
- import("./schema-x892aatt.js"),
69556
- import("./curator-hh0n9wgz.js"),
69557
- import("./curator-llm-factory-d17ybmgm.js")
69555
+ import("./schema-emx6r32d.js"),
69556
+ import("./curator-891pc8b7.js"),
69557
+ import("./curator-llm-factory-cvrt4bf9.js")
69558
69558
  ]);
69559
69559
  return { CuratorConfigSchema, curator, createCuratorLLMDelegate };
69560
69560
  }
@@ -72004,7 +72004,7 @@ async function computeCurationDiagnostics(directory, entries2) {
72004
72004
  let scanCompleted = false;
72005
72005
  let scanRemaining = 0;
72006
72006
  try {
72007
- const { getScanStatus } = await import("./scan-cursor-sphr9phs.js");
72007
+ const { getScanStatus } = await import("./scan-cursor-arezehhk.js");
72008
72008
  const status = await getScanStatus(directory);
72009
72009
  scanGeneration = status.generation;
72010
72010
  scanCompleted = status.completed;
@@ -72014,10 +72014,10 @@ async function computeCurationDiagnostics(directory, entries2) {
72014
72014
  try {
72015
72015
  const { isLinked: isLinked2 } = await import("./knowledge-link-8bn2b7vr.js");
72016
72016
  if (isLinked2(directory)) {
72017
- const { KnowledgeConfigSchema: KnowledgeConfigSchema2 } = await import("./schema-x892aatt.js");
72017
+ const { KnowledgeConfigSchema: KnowledgeConfigSchema2 } = await import("./schema-emx6r32d.js");
72018
72018
  let config;
72019
72019
  try {
72020
- const { loadPluginConfigWithMeta: loadPluginConfigWithMeta2 } = await import("./index-bpq6z8qe.js");
72020
+ const { loadPluginConfigWithMeta: loadPluginConfigWithMeta2 } = await import("./index-psqfkgav.js");
72021
72021
  const loaded = loadPluginConfigWithMeta2(directory);
72022
72022
  config = KnowledgeConfigSchema2.parse(loaded.config.knowledge ?? {});
72023
72023
  } catch {
@@ -73473,7 +73473,7 @@ async function handleDoctorCommand(directory, args) {
73473
73473
  const result = runConfigDoctor(config, directory, planParallelizationEnabled);
73474
73474
  let output;
73475
73475
  if (enableAutoFix && result.hasAutoFixableIssues) {
73476
- const { runConfigDoctorWithFixes } = await import("./config-doctor-vetg215g.js");
73476
+ const { runConfigDoctorWithFixes } = await import("./config-doctor-qv7wc6fa.js");
73477
73477
  const fixResult = await runConfigDoctorWithFixes(directory, config, true, {
73478
73478
  applyLossy: true
73479
73479
  });
@@ -73511,7 +73511,7 @@ async function handleDoctorCommand(directory, args) {
73511
73511
  `;
73512
73512
  }
73513
73513
  try {
73514
- const { runModelPreflight } = await import("./model-preflight-k2bw7rt1.js");
73514
+ const { runModelPreflight } = await import("./model-preflight-skhq4xtr.js");
73515
73515
  const preflight = await runModelPreflight(config, swarmState.opencodeClient, { generatedAgentNames: swarmState.generatedAgentNames });
73516
73516
  const missingSelection = preflight.resolutions.filter((resolution) => resolution.status === "missing-selection");
73517
73517
  const unresolved = preflight.catalogAvailable ? preflight.resolutions.filter((resolution) => resolution.status === "unresolved") : [];
@@ -73545,7 +73545,7 @@ async function handleDoctorCommand(directory, args) {
73545
73545
  }
73546
73546
  } catch {}
73547
73547
  try {
73548
- const { renderKnowledgeReceiptPhaseIdSection } = await import("./doctor-knowledge-receipt-phase-id-1d465vkg.js");
73548
+ const { renderKnowledgeReceiptPhaseIdSection } = await import("./doctor-knowledge-receipt-phase-id-mvbj576e.js");
73549
73549
  output += await renderKnowledgeReceiptPhaseIdSection(directory, enableAutoFix);
73550
73550
  } catch {}
73551
73551
  const strayDirs = detectStraySwarmDirs(directory);
@@ -74041,7 +74041,7 @@ var BACKGROUND_DELEGATION_NAMESPACE = "background.pending-delegation";
74041
74041
  var LEGACY_LEAN_STATE_FILE = "turbo-state.json";
74042
74042
  var MAX_LEGACY_LEAN_STATE_BYTES = 4 * 1024 * 1024;
74043
74043
  var UNSETTLED_WAL_STATES2 = new Set(["DISPATCHED", "PREPARED", "unreadable"]);
74044
- var EPIC_HOST_UNSUPPORTED_MESSAGE = "This OpenCode host gives the plugin no SDK client. Epic needs it for worktree-isolated coders and for the epic_phase_review reviewer/critic, so an epic here could neither run its coders nor complete a phase. Run the plan in Balanced, or use an OpenCode 1.x host (1.18.29+). (On OpenCode 2 the v2 adapter now ships a session-capable client, so this refusal no longer fires there \u2014 Epic on v2 is held by the #3169 child-session placement work instead.)";
74044
+ var EPIC_HOST_UNSUPPORTED_MESSAGE = "This OpenCode host gives the plugin no SDK client. Epic needs it for worktree-isolated coders and for the epic_phase_review reviewer/critic, so an epic here could neither run its coders nor complete a phase. Run the plan in Balanced, or use an OpenCode 1.x host (1.18.29+). (On OpenCode 2 the v2 adapter ships a session-capable client and native /swarm command dispatch, so this refusal does not fire there.)";
74045
74045
  function refused2(reason, details, sizing) {
74046
74046
  return { status: "refused", reason, details, sizing };
74047
74047
  }
@@ -75562,7 +75562,7 @@ async function handleEvidenceCommand(directory, args) {
75562
75562
  return formatTaskEvidenceMarkdown(evidenceData);
75563
75563
  }
75564
75564
  async function handleEvidenceSummaryCommand(directory) {
75565
- const { buildEvidenceSummary } = await import("./evidence-summary-service-rkd3yc5x.js");
75565
+ const { buildEvidenceSummary } = await import("./evidence-summary-service-x9nxvmn5.js");
75566
75566
  const artifact = await buildEvidenceSummary(directory);
75567
75567
  if (!artifact) {
75568
75568
  return "No plan found. Run `/swarm plan` to check plan status.";
@@ -100028,7 +100028,7 @@ function createCuratorLLMDelegate(directory, mode = "init", sessionId) {
100028
100028
  }
100029
100029
  const sdkOpts = signal ? { signal } : {};
100030
100030
  try {
100031
- const { getSwarmAgents: getSwarmAgents2, resolveFallbackModel: resolveFallbackModel2 } = await import("./index-9teqkkp4.js");
100031
+ const { getSwarmAgents: getSwarmAgents2, resolveFallbackModel: resolveFallbackModel2 } = await import("./index-nrqyc8pr.js");
100032
100032
  const createResult = await client.session.create({
100033
100033
  ...sessionId ? {
100034
100034
  body: {
@@ -102126,7 +102126,7 @@ async function cancelPrFeedbackLoopUnlocked(directory, sessionID, reason) {
102126
102126
  clearedEvents: []
102127
102127
  };
102128
102128
  try {
102129
- const { cancelPrFeedbackPublication: cancelPrFeedbackPublication2 } = await import("./pr-workflow-gate-cgbc0x1z.js");
102129
+ const { cancelPrFeedbackPublication: cancelPrFeedbackPublication2 } = await import("./pr-workflow-gate-2gmznmj4.js");
102130
102130
  await cancelPrFeedbackPublication2(directory, sessionID, reason);
102131
102131
  } catch (err) {
102132
102132
  warn(`[pr-feedback-loop] cancelPrFeedbackPublication failed (fail-open): ${err instanceof Error ? err.message : String(err)}`);
@@ -118592,7 +118592,7 @@ function buildDetailedHelp(commandName, entry) {
118592
118592
  async function handleHelpCommand(ctx) {
118593
118593
  const targetCommand = ctx.args.join(" ");
118594
118594
  if (!targetCommand) {
118595
- const { buildHelpText } = await import("./index-h7275akd.js");
118595
+ const { buildHelpText } = await import("./index-4cazf4kb.js");
118596
118596
  return buildHelpText();
118597
118597
  }
118598
118598
  const tokens = targetCommand.split(/\s+/);
@@ -118606,7 +118606,7 @@ async function handleHelpCommand(ctx) {
118606
118606
  > Note: \`/swarm ${resolved.key}\` is a deprecated alias for \`/swarm ${aliasTarget}\`.` : detailed;
118607
118607
  }
118608
118608
  const similar = _internals39.findSimilarCommands(targetCommand);
118609
- const { buildHelpText: fullHelp } = await import("./index-h7275akd.js");
118609
+ const { buildHelpText: fullHelp } = await import("./index-4cazf4kb.js");
118610
118610
  if (similar.length > 0) {
118611
118611
  return `Command '/swarm ${targetCommand}' not found.
118612
118612
 
@@ -118934,7 +118934,7 @@ var COMMAND_REGISTRY = {
118934
118934
  },
118935
118935
  "guardrail explain": {
118936
118936
  handler: async (ctx) => {
118937
- const { handleGuardrailExplain } = await import("./guardrail-explain-8xh3r0dn.js");
118937
+ const { handleGuardrailExplain } = await import("./guardrail-explain-fga9bnvt.js");
118938
118938
  return handleGuardrailExplain(ctx.directory, ctx.args);
118939
118939
  },
118940
118940
  description: "Dry-run: show what the guardrails would do to a command or write target (executes nothing)",
@@ -118944,7 +118944,7 @@ var COMMAND_REGISTRY = {
118944
118944
  },
118945
118945
  "guardrail reset": {
118946
118946
  handler: async (ctx) => {
118947
- const { handleGuardrailReset } = await import("./guardrail-reset-m5qbg30j.js");
118947
+ const { handleGuardrailReset } = await import("./guardrail-reset-xpcsxyt0.js");
118948
118948
  return handleGuardrailReset(ctx.args, ctx.sessionID);
118949
118949
  },
118950
118950
  description: "Reset one exact active invocation/action circuit after repair",
@@ -118965,7 +118965,7 @@ var COMMAND_REGISTRY = {
118965
118965
  },
118966
118966
  "guardrail-log": {
118967
118967
  handler: async (ctx) => {
118968
- const { handleGuardrailLog } = await import("./guardrail-log-jrey2myg.js");
118968
+ const { handleGuardrailLog } = await import("./guardrail-log-y84b9m8n.js");
118969
118969
  return handleGuardrailLog(ctx.directory, ctx.args);
118970
118970
  },
118971
118971
  description: "Read the guardrail decision log (use --blocks-only for blocks)",
@@ -119363,7 +119363,7 @@ var COMMAND_REGISTRY = {
119363
119363
  epic: {
119364
119364
  handler: (ctx) => handleEpicCommand(ctx.directory, ctx.args, ctx.sessionID),
119365
119365
  description: "Open, inspect, and close a plan-scoped epic (coupling-aware parallel execution of the current plan)",
119366
- details: "An epic is bound to ONE plan: `start` opens it for the current plan, `close` ends it. Requires `epic.mode.enabled: true` in config (top-level `epic` block; no `turbo` block needed \u2014 the legacy `turbo.epic` path is still accepted and migrated). `start [--force]` refuses, in order: epic-disabled-by-config, host-unsupported (the host gives the plugin no OpenCode SDK client; on OpenCode 2 the v2 adapter now ships one, so this refusal no longer fires there \u2014 v2 is held by the child-session placement work instead), no-plan / plan-ledger-unreadable, epic-already-open (idempotent for the same plan) / epic-open-for-other-plan, turbo-active (config turbo_mode, a session with Turbo on, or a running Lean run \u2014 Epic enables neither Lean nor Turbo and never waives per-task QA), dirty-baseline (git: uncommitted changes outside .swarm/), detached-head / epic-branch-exists (epic-branch policy), in-flight-coders (any coder dispatch, background delegation, unsettled settlement, or preserved/recovery lane), not-epic-sized (too few pending tasks, insufficient scope coverage, or insufficient effective speedup \u2014 run it in Balanced, or reshape it with the plan-shaping suggestions shown; `--force` overrides and is recorded). Non-git projects run an epic serially (one task per wave). Git epics default to `epic.commit_policy: \"epic-branch\"`: start checks out `swarm/epic/<epicKey>` and every Epic commit goes there (epic_next_wave blocks with epic-branch-mismatch, and no landing or residue is committed, while HEAD is elsewhere); `current-branch` keeps commits on the starting branch. In a git epic every coder runs in an isolated worktree (refused EPIC_ISOLATION_DEGRADED when isolation is unavailable) and lands as a `swarm(task <id>): \u2026` merge commit; main-tree files a non-coder writer (test_engineer, docs) wrote for a task are committed as residue of that task; update_task_status writes nothing to git; wave close records the commit of each task as `refs/swarm/epics/<epicKey>/tasks/<id>` (deleted at close unless `epic.retain_refs`; never pushed by default). While open, the architect calls epic_next_wave and does what its status says: it issues one wave at a time (tasks with non-conflicting declared scopes \u2014 exclusive tasks alone, at most one task per densely coupled component; phases strictly in order), the architect dispatches one Task per taskId in ONE message and runs per-task QA (pre_check_batch \u2192 reviewer + test_engineer \u2192 update_task_status(completed)), and the next epic_next_wave closes the wave (recording outcomes and declared-vs-actual divergence) and issues the next; when a phase is done it returns phase-ready-for-review \u2192 epic_phase_review \u2192 phase_complete. `close [--abandon] [--land squash|merge|none]` refuses while tasks are pending (or the epic is orphaned / unreadable) unless `--abandon`, refuses a dirty tree before landing, writes a close report (epic-report-v2, embedding the epic scorecard) to .swarm/epic/reports/ and .swarm/epic-prior/reports/ (newest 50 kept), and lands the epic branch onto the original branch: squash (default \u2014 staged, uncommitted changes for you to review and commit), merge (a --no-ff merge commit), or none (switch back only). The epic branch is kept (remove it with `git branch -D` once committed). A landing conflict is rolled back (the attempted squash or merge is undone) and the epic stays closing \u2014 rerun close to resume. `--abandon` never lands; it switches back to the original branch when the tree is clean. `status [--repair-refs]` (also bare /swarm epic) shows the epic, its waves, phases, the task components recorded with the latest wave and recorded divergence, orphan detection (plan renamed or replaced), sentinel/row repair, recorded worktree merge failures, and retires legacy Epic v1 session state once; `--repair-refs` re-adopts task commits a rebase or amend made unreachable from HEAD. `report [<key>|last] [--format json]` shows the epic scorecard: live for the open epic (bare `report`), else from the close report of a past epic in .swarm/epic-prior/reports/ (`last` = newest; `<key>` = a report or epic key) \u2014 tasks completed in the epic, waves (count, width), time over closed waves (wave span, task issue\u2192resolve time, and their ratio, a concurrency factor that is NOT a speedup: it includes queueing behind serialized QA), conflicts (merge-back failures, undeclared writes), rework (extra generations, reopens), first-pass gate rates (upper bounds: the failure history is bounded), forced/sizing at start and learned hot files. Epics learn from their outcomes: undeclared writes teach learned co-writes (a task declaring D that also wrote f makes later tasks declaring D conflict with tasks on f \u2014 planner analysis only, never write authorization) and incidents (undeclared writes, merge conflicts, Stage B failures, rework, reopens) in excess of clean exposures make a file hot (a task declaring it runs alone) \u2014 undeclared writes its strongest learned co-writer explains are discounted (expansion already separates them), so one declarer writing a file is not heat; an empty history learns nothing (neutral start). Each wave close updates the posterior of the epic; close merges it into the project prior .swarm/epic-prior/learning.json (decayed per epic and by age; kept across /swarm close; `epic.learning.*`). `learning` shows what the planner learned and uses now; `prior [show]` shows the project prior; `prior reset` previews and prints a single-use confirm token (15 minutes); `prior reset --confirm=<token>` clears it. Also: clear-merge-failure <taskId> [--confirm]. The former `on` / `off` toggles, the `decide` / `last` subcommands and `calibration` (renamed `learning`) were removed.",
119366
+ details: "An epic is bound to ONE plan: `start` opens it for the current plan, `close` ends it. Requires `epic.mode.enabled: true` in config (top-level `epic` block; no `turbo` block needed \u2014 the legacy `turbo.epic` path is still accepted and migrated). `start [--force]` refuses, in order: epic-disabled-by-config, host-unsupported (the host gives the plugin no OpenCode SDK client; on OpenCode 2 the v2 adapter ships one, so this refusal does not fire there \u2014 Epic is startable on OpenCode 2 via the native v2 /swarm command dispatch, #3169 Phase 4), no-plan / plan-ledger-unreadable, epic-already-open (idempotent for the same plan) / epic-open-for-other-plan, turbo-active (config turbo_mode, a session with Turbo on, or a running Lean run \u2014 Epic enables neither Lean nor Turbo and never waives per-task QA), dirty-baseline (git: uncommitted changes outside .swarm/), detached-head / epic-branch-exists (epic-branch policy), in-flight-coders (any coder dispatch, background delegation, unsettled settlement, or preserved/recovery lane), not-epic-sized (too few pending tasks, insufficient scope coverage, or insufficient effective speedup \u2014 run it in Balanced, or reshape it with the plan-shaping suggestions shown; `--force` overrides and is recorded). Non-git projects run an epic serially (one task per wave). Git epics default to `epic.commit_policy: \"epic-branch\"`: start checks out `swarm/epic/<epicKey>` and every Epic commit goes there (epic_next_wave blocks with epic-branch-mismatch, and no landing or residue is committed, while HEAD is elsewhere); `current-branch` keeps commits on the starting branch. In a git epic every coder runs in an isolated worktree (refused EPIC_ISOLATION_DEGRADED when isolation is unavailable) and lands as a `swarm(task <id>): \u2026` merge commit; main-tree files a non-coder writer (test_engineer, docs) wrote for a task are committed as residue of that task; update_task_status writes nothing to git; wave close records the commit of each task as `refs/swarm/epics/<epicKey>/tasks/<id>` (deleted at close unless `epic.retain_refs`; never pushed by default). While open, the architect calls epic_next_wave and does what its status says: it issues one wave at a time (tasks with non-conflicting declared scopes \u2014 exclusive tasks alone, at most one task per densely coupled component; phases strictly in order), the architect dispatches one Task per taskId in ONE message and runs per-task QA (pre_check_batch \u2192 reviewer + test_engineer \u2192 update_task_status(completed)), and the next epic_next_wave closes the wave (recording outcomes and declared-vs-actual divergence) and issues the next; when a phase is done it returns phase-ready-for-review \u2192 epic_phase_review \u2192 phase_complete. `close [--abandon] [--land squash|merge|none]` refuses while tasks are pending (or the epic is orphaned / unreadable) unless `--abandon`, refuses a dirty tree before landing, writes a close report (epic-report-v2, embedding the epic scorecard) to .swarm/epic/reports/ and .swarm/epic-prior/reports/ (newest 50 kept), and lands the epic branch onto the original branch: squash (default \u2014 staged, uncommitted changes for you to review and commit), merge (a --no-ff merge commit), or none (switch back only). The epic branch is kept (remove it with `git branch -D` once committed). A landing conflict is rolled back (the attempted squash or merge is undone) and the epic stays closing \u2014 rerun close to resume. `--abandon` never lands; it switches back to the original branch when the tree is clean. `status [--repair-refs]` (also bare /swarm epic) shows the epic, its waves, phases, the task components recorded with the latest wave and recorded divergence, orphan detection (plan renamed or replaced), sentinel/row repair, recorded worktree merge failures, and retires legacy Epic v1 session state once; `--repair-refs` re-adopts task commits a rebase or amend made unreachable from HEAD. `report [<key>|last] [--format json]` shows the epic scorecard: live for the open epic (bare `report`), else from the close report of a past epic in .swarm/epic-prior/reports/ (`last` = newest; `<key>` = a report or epic key) \u2014 tasks completed in the epic, waves (count, width), time over closed waves (wave span, task issue\u2192resolve time, and their ratio, a concurrency factor that is NOT a speedup: it includes queueing behind serialized QA), conflicts (merge-back failures, undeclared writes), rework (extra generations, reopens), first-pass gate rates (upper bounds: the failure history is bounded), forced/sizing at start and learned hot files. Epics learn from their outcomes: undeclared writes teach learned co-writes (a task declaring D that also wrote f makes later tasks declaring D conflict with tasks on f \u2014 planner analysis only, never write authorization) and incidents (undeclared writes, merge conflicts, Stage B failures, rework, reopens) in excess of clean exposures make a file hot (a task declaring it runs alone) \u2014 undeclared writes its strongest learned co-writer explains are discounted (expansion already separates them), so one declarer writing a file is not heat; an empty history learns nothing (neutral start). Each wave close updates the posterior of the epic; close merges it into the project prior .swarm/epic-prior/learning.json (decayed per epic and by age; kept across /swarm close; `epic.learning.*`). `learning` shows what the planner learned and uses now; `prior [show]` shows the project prior; `prior reset` previews and prints a single-use confirm token (15 minutes); `prior reset --confirm=<token>` clears it. Also: clear-merge-failure <taskId> [--confirm]. The former `on` / `off` toggles, the `decide` / `last` subcommands and `calibration` (renamed `learning`) were removed.",
119367
119367
  args: "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]",
119368
119368
  category: "diagnostics",
119369
119369
  toolPolicy: "human-only"
@@ -1,7 +1,7 @@
1
1
  // @bun
2
2
  import {
3
3
  loadPlanJsonOnly
4
- } from "./index-epdzvp4w.js";
4
+ } from "./index-tjc68trf.js";
5
5
  import {
6
6
  isCanonicalPathWithinRoot
7
7
  } from "./index-6b295cas.js";
@@ -14,7 +14,7 @@ import {
14
14
  legacyEpicIssuePath,
15
15
  migrateLegacyEpicConfig,
16
16
  resolveEpicConfig
17
- } from "./index-c6hyd8hg.js";
17
+ } from "./index-ppnpkww2.js";
18
18
  import {
19
19
  FALLBACK_MODELS_MAX,
20
20
  GATE_CONFIG_KNOWN_SECTION_KEYS,
@@ -24,7 +24,7 @@ import {
24
24
  init_schema,
25
25
  retiredEpicKeyReplacement,
26
26
  stripKnownSwarmPrefix
27
- } from "./index-jn4mmhqc.js";
27
+ } from "./index-nqxbqb50.js";
28
28
  import {
29
29
  ALL_AGENT_NAMES,
30
30
  TOOL_NAME_SET,
@@ -739,7 +739,7 @@ async function applyConfidenceFloorAction(directory, touched, options) {
739
739
  const {
740
740
  readAuthoritativeKnowledgeCounterRollups,
741
741
  effectiveRetrievalOutcomes
742
- } = await import("./knowledge-events-hztjt63y.js");
742
+ } = await import("./knowledge-events-70kb745b.js");
743
743
  const rollups = await readAuthoritativeKnowledgeCounterRollups(directory);
744
744
  const flagIds = new Set;
745
745
  for (const e of atFloor) {
@@ -806,11 +806,11 @@ async function applyConfidenceFloorAction(directory, touched, options) {
806
806
  });
807
807
  }
808
808
  if (action === "quarantine" && toQuarantine.length > 0) {
809
- const { quarantineEntry } = await import("./knowledge-validator-3fe82zy4.js");
810
- const { KnowledgeConfigSchema } = await import("./schema-x892aatt.js");
809
+ const { quarantineEntry } = await import("./knowledge-validator-eaatcnkr.js");
810
+ const { KnowledgeConfigSchema } = await import("./schema-emx6r32d.js");
811
811
  let config;
812
812
  try {
813
- const { loadPluginConfigWithMeta } = await import("./index-bpq6z8qe.js");
813
+ const { loadPluginConfigWithMeta } = await import("./index-psqfkgav.js");
814
814
  const { config: loadedConfig } = loadPluginConfigWithMeta(directory);
815
815
  config = KnowledgeConfigSchema.parse(loadedConfig.knowledge ?? {});
816
816
  } catch {
@@ -2,7 +2,7 @@
2
2
  import {
3
3
  readKnowledge,
4
4
  transactKnowledge
5
- } from "./index-5gf2wx2c.js";
5
+ } from "./index-jnjvghgp.js";
6
6
  import {
7
7
  resolveKnowledgeStoreDir
8
8
  } from "./index-ry5g9s8d.js";
@@ -1,7 +1,7 @@
1
1
  // @bun
2
2
  import {
3
3
  queryHistoricalOutcomes
4
- } from "./index-c4hx57tz.js";
4
+ } from "./index-te61qv0q.js";
5
5
  import {
6
6
  resolveHiveEventsPath
7
7
  } from "./index-ae75rja9.js";
@@ -708,7 +708,7 @@ async function applyKnowledgeVerdictFeedback(directory, options) {
708
708
  }
709
709
  let bumps = 0;
710
710
  if (deltas.length > 0) {
711
- const { bumpKnowledgeConfidenceBatch } = await import("./knowledge-store-3sd2034v.js");
711
+ const { bumpKnowledgeConfidenceBatch } = await import("./knowledge-store-hvq03g0j.js");
712
712
  bumps = await bumpKnowledgeConfidenceBatch(directory, deltas, options?.floorOptions);
713
713
  }
714
714
  return {
@@ -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.195.0",
24
+ version: "7.196.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",