opencode-swarm 7.188.7 → 7.188.8

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 (71) hide show
  1. package/binaries/win32-arm64/swarm-sandbox-runner.exe +0 -0
  2. package/binaries/win32-x64/swarm-sandbox-runner.exe +0 -0
  3. package/dist/cli/{auto-checkpoint-1z9d2jrk.js → auto-checkpoint-cdcf7yeb.js} +4 -4
  4. package/dist/cli/{checkpoint-f8165pv4.js → checkpoint-jpc3a69d.js} +8 -8
  5. package/dist/cli/{coder-settlement-gaby6spt.js → coder-settlement-rmaypr7g.js} +3 -3
  6. package/dist/cli/{config-doctor-4wgw6nak.js → config-doctor-b5t9hrzb.js} +7 -7
  7. package/dist/cli/{core-y89texpp.js → core-ky5b3mh6.js} +1 -1
  8. package/dist/cli/{curator-tkz65fvw.js → curator-bsafet3m.js} +25 -25
  9. package/dist/cli/{curator-drift-rpwrx355.js → curator-drift-2dwkkykq.js} +5 -5
  10. package/dist/cli/{curator-llm-factory-1qbcj7vs.js → curator-llm-factory-ajtxk3sm.js} +25 -25
  11. package/dist/cli/{doctor-knowledge-receipt-phase-id-11q7en6t.js → doctor-knowledge-receipt-phase-id-mckkwm0c.js} +4 -4
  12. package/dist/cli/{evidence-summary-service-hn7vdm45.js → evidence-summary-service-svrt4se9.js} +9 -9
  13. package/dist/cli/{gate-evidence-sxh3r64f.js → gate-evidence-jcw4mvwr.js} +2 -2
  14. package/dist/cli/{guardrail-explain-e0wbeyk1.js → guardrail-explain-5j0cg165.js} +26 -26
  15. package/dist/cli/{guardrail-log-gzrj46h0.js → guardrail-log-h6fc7rnv.js} +3 -3
  16. package/dist/cli/{guardrail-reset-7z62s1j5.js → guardrail-reset-kjmqnr5r.js} +25 -25
  17. package/dist/cli/{hive-promoter-88d95wk8.js → hive-promoter-edp5c7k2.js} +25 -25
  18. package/dist/cli/{index-snwj9ptc.js → index-0g7wya30.js} +1 -1
  19. package/dist/cli/{index-kap459mr.js → index-11v15np0.js} +2 -2
  20. package/dist/cli/{index-yj1cwps4.js → index-8gyt9j0a.js} +1 -1
  21. package/dist/cli/{index-c016phsk.js → index-8hf3rt47.js} +4 -4
  22. package/dist/cli/{index-y8z9x87e.js → index-9m3pcjf2.js} +1 -1
  23. package/dist/cli/{index-7k9hdn0b.js → index-b81wsm2s.js} +1 -1
  24. package/dist/cli/{index-0j5ggeem.js → index-chsaj89g.js} +1 -1
  25. package/dist/cli/{index-c937rpbm.js → index-d1yjbjf9.js} +3 -3
  26. package/dist/cli/{index-ghjg1rxe.js → index-d4vrpe06.js} +1 -1
  27. package/dist/cli/{index-ytms8x1h.js → index-e69469z9.js} +2 -2
  28. package/dist/cli/{index-rw0c6qtt.js → index-f0kk9daj.js} +3 -3
  29. package/dist/cli/{index-pnfd3s7s.js → index-fbw4g7yh.js} +1 -1
  30. package/dist/cli/{index-eh0sg1pz.js → index-fqyd21v7.js} +3 -3
  31. package/dist/cli/{index-g39cmzpj.js → index-gfqz06ra.js} +2 -2
  32. package/dist/cli/{index-emh69vk9.js → index-h93hm2ew.js} +124 -62
  33. package/dist/cli/{index-03ad14qc.js → index-hsmvdecz.js} +2 -2
  34. package/dist/cli/{index-7eajwwfg.js → index-js2jykf9.js} +1 -1
  35. package/dist/cli/{index-2wctq2hn.js → index-kwbgrb3y.js} +1 -1
  36. package/dist/cli/{index-2vtrjm19.js → index-kx0sr39t.js} +27 -27
  37. package/dist/cli/{index-61kszszd.js → index-mcnqpmw6.js} +2 -2
  38. package/dist/cli/{index-ffmw6af9.js → index-n8n94des.js} +25 -25
  39. package/dist/cli/{index-xsdphmet.js → index-nyy3hpwg.js} +6 -6
  40. package/dist/cli/{index-a4s5yrdd.js → index-pd9hkz4f.js} +3 -3
  41. package/dist/cli/{index-8sqyx5rh.js → index-qg3tx5az.js} +1 -1
  42. package/dist/cli/{index-m9g7s9ee.js → index-r89wr177.js} +1 -1
  43. package/dist/cli/{index-7zyktm9f.js → index-s55t0cdc.js} +5 -5
  44. package/dist/cli/{index-y3sk68m5.js → index-sarq27b9.js} +1 -1
  45. package/dist/cli/{index-xj3k6x1h.js → index-vhqcqq73.js} +1 -1
  46. package/dist/cli/{index-5102w44y.js → index-wbjk8xq9.js} +2 -2
  47. package/dist/cli/{index-9tes309n.js → index-yyh5kegx.js} +1 -1
  48. package/dist/cli/index.js +26 -26
  49. package/dist/cli/{knowledge-escalator-ejfb2e7c.js → knowledge-escalator-ndsm1023.js} +7 -7
  50. package/dist/cli/{knowledge-events-3fzfehwy.js → knowledge-events-pcbxvykz.js} +5 -5
  51. package/dist/cli/{knowledge-store-swxk4tr6.js → knowledge-store-00t92ypz.js} +1 -1
  52. package/dist/cli/{knowledge-validator-0a1at9gm.js → knowledge-validator-f8mkzp37.js} +2 -2
  53. package/dist/cli/{mcp-0ah7s1j0.js → mcp-sawqgyk6.js} +1 -1
  54. package/dist/cli/{model-preflight-nfvapzyj.js → model-preflight-7rrjh3wp.js} +25 -25
  55. package/dist/cli/{pending-delegations-hynywgkj.js → pending-delegations-2161efex.js} +2 -2
  56. package/dist/cli/{pr-subscriptions-k86p5qcn.js → pr-subscriptions-m47zghfv.js} +1 -1
  57. package/dist/cli/{pr-workflow-gate-3ett6hjh.js → pr-workflow-gate-hmtae8gc.js} +25 -25
  58. package/dist/cli/{scan-cursor-9961dhv1.js → scan-cursor-gdy1qjed.js} +2 -2
  59. package/dist/cli/{schema-s5zbnzmv.js → schema-qaxjz2de.js} +1 -1
  60. package/dist/cli/{scope-persistence-2w562h83.js → scope-persistence-dnx61ybv.js} +5 -5
  61. package/dist/cli/{server-vrk0k61v.js → server-6wmhhy81.js} +25 -25
  62. package/dist/cli/{skill-generator-bfcjzp20.js → skill-generator-sgv3bdgt.js} +8 -8
  63. package/dist/cli/{snapshot-coordination-init-8ykpp5m6.js → snapshot-coordination-init-qbtzxwga.js} +25 -25
  64. package/dist/cli/{speckit-checkoff-3x52vw64.js → speckit-checkoff-yepzgcmj.js} +3 -3
  65. package/dist/cli/{worktree-collision-ownership-kjw1pqfc.js → worktree-collision-ownership-cswsfrj6.js} +2 -2
  66. package/dist/cli/{worktree-isolation-xdgm4ekx.js → worktree-isolation-vj7egepy.js} +25 -25
  67. package/dist/hooks/knowledge-receipt-ledger.d.ts +23 -0
  68. package/dist/hooks/knowledge-receipt-validator.d.ts +10 -0
  69. package/dist/index.js +11 -11
  70. package/dist/state.d.ts +48 -0
  71. package/package.json +1 -1
@@ -8,14 +8,14 @@ import {
8
8
  protectedRoots,
9
9
  redactDecisionLineForArchive,
10
10
  stableCanonicalStringify
11
- } from "./index-7k9hdn0b.js";
11
+ } from "./index-b81wsm2s.js";
12
12
  import {
13
13
  detectStraySwarmDirs,
14
14
  readDoctorArtifact,
15
15
  removeStraySwarmDir,
16
16
  resolvePlanParallelizationFlag,
17
17
  runConfigDoctor
18
- } from "./index-g39cmzpj.js";
18
+ } from "./index-gfqz06ra.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-y8z9x87e.js";
30
+ } from "./index-9m3pcjf2.js";
31
31
  import {
32
32
  JAVA_SYMBOL_GRAMMAR,
33
33
  LANGUAGE_REGISTRY,
@@ -81,7 +81,7 @@ import {
81
81
  alreadyCuratedThisGeneration,
82
82
  claimNextScanBatch,
83
83
  resolveCohortId
84
- } from "./index-snwj9ptc.js";
84
+ } from "./index-0g7wya30.js";
85
85
  import {
86
86
  CURATOR_CONSOLIDATION_PROMPT,
87
87
  CURATOR_INIT_PROMPT,
@@ -100,13 +100,13 @@ import {
100
100
  getGroupCommitWriter,
101
101
  importLegacyJsonl,
102
102
  readPriorDriftReports
103
- } from "./index-pnfd3s7s.js";
103
+ } from "./index-fbw4g7yh.js";
104
104
  import {
105
105
  assertNoUnsettledCoderDispatch,
106
106
  listCoderSettlementWalStates,
107
107
  recoverCoderSettlement,
108
108
  recoverStaleCoderSettlements
109
- } from "./index-rw0c6qtt.js";
109
+ } from "./index-f0kk9daj.js";
110
110
  import {
111
111
  BUNDLED_PROJECT_SKILL_ROOT,
112
112
  DEFAULT_SKILL_MIN_CONFIDENCE,
@@ -127,11 +127,11 @@ import {
127
127
  retireSkill,
128
128
  selectCandidateEntries,
129
129
  syncBundledProjectSkillsIfMissingAsync
130
- } from "./index-c937rpbm.js";
130
+ } from "./index-d1yjbjf9.js";
131
131
  import {
132
132
  buildEscalationBriefing,
133
133
  readRecentEscalations
134
- } from "./index-xsdphmet.js";
134
+ } from "./index-nyy3hpwg.js";
135
135
  import {
136
136
  parsePorcelainV2Snapshot,
137
137
  resolveCommitCountSince,
@@ -211,7 +211,7 @@ import {
211
211
  resolveWorkingDirectory,
212
212
  swarmOverwriteCandidates,
213
213
  trackedDirtyCandidates
214
- } from "./index-a4s5yrdd.js";
214
+ } from "./index-pd9hkz4f.js";
215
215
  import {
216
216
  MAX_TRANSIENT_RETRIES,
217
217
  PlanRecoverySupersededError,
@@ -238,7 +238,7 @@ import {
238
238
  transientBackoff,
239
239
  updateTaskStatus,
240
240
  withPlanLifecycleLock
241
- } from "./index-7zyktm9f.js";
241
+ } from "./index-s55t0cdc.js";
242
242
  import {
243
243
  containsControlChars,
244
244
  containsPathTraversal,
@@ -254,7 +254,7 @@ import {
254
254
  resolveSpeckitProjection,
255
255
  validateSpeckit,
256
256
  writeProjectedSpecSync
257
- } from "./index-2wctq2hn.js";
257
+ } from "./index-kwbgrb3y.js";
258
258
  import {
259
259
  clearWorktreeMergeStatus,
260
260
  getAllWorktreeMergeFailures,
@@ -285,7 +285,7 @@ import {
285
285
  transitionTaskWorkflowEvidenceWithStatus,
286
286
  withTaskEvidenceTransaction,
287
287
  writeWorkflowWalFile
288
- } from "./index-8sqyx5rh.js";
288
+ } from "./index-qg3tx5az.js";
289
289
  import {
290
290
  isPathUnderSwarmWorktreeBase,
291
291
  listLiveLaneOwners,
@@ -294,7 +294,7 @@ import {
294
294
  recordLiveLaneOwner,
295
295
  removeWorktree,
296
296
  resolveWorktreeBaseDir
297
- } from "./index-xj3k6x1h.js";
297
+ } from "./index-vhqcqq73.js";
298
298
  import {
299
299
  DEFAULT_STALE_DELEGATION_TIMEOUT_MS,
300
300
  DELEGATION_COMPACTION_HIGH_WATER_BYTES,
@@ -328,7 +328,7 @@ import {
328
328
  scanBackgroundCoderReservationsForAdmission,
329
329
  scanDelegationsForRecovery,
330
330
  sweepStaleDelegations
331
- } from "./index-7eajwwfg.js";
331
+ } from "./index-js2jykf9.js";
332
332
  import {
333
333
  MAX_EVENT_LOG_ENTRIES,
334
334
  _internals,
@@ -340,7 +340,7 @@ import {
340
340
  recordHiveKnowledgeEvent,
341
341
  recordKnowledgeEvent,
342
342
  resolveKnowledgeEventsPath
343
- } from "./index-kap459mr.js";
343
+ } from "./index-11v15np0.js";
344
344
  import {
345
345
  commitDisplayedMembership,
346
346
  commitEmptyRetrieval,
@@ -353,7 +353,7 @@ import {
353
353
  queryLiveMemberships,
354
354
  reconcilePhaseClose,
355
355
  recordPhaseCloseIntent
356
- } from "./index-61kszszd.js";
356
+ } from "./index-mcnqpmw6.js";
357
357
  import {
358
358
  sanitizeContextText
359
359
  } from "./index-m9zzj4ee.js";
@@ -384,7 +384,7 @@ import {
384
384
  validateActionableFields,
385
385
  validateLesson,
386
386
  validateSkillPath
387
- } from "./index-m9g7s9ee.js";
387
+ } from "./index-r89wr177.js";
388
388
  import {
389
389
  MAX_CURATION_PROPOSALS,
390
390
  authorizeCuration,
@@ -395,7 +395,7 @@ import {
395
395
  } from "./index-rtry5xyf.js";
396
396
  import {
397
397
  resolveWorktreeIsolationConfig
398
- } from "./index-5102w44y.js";
398
+ } from "./index-wbjk8xq9.js";
399
399
  import {
400
400
  RetrospectiveEvidenceSchema
401
401
  } from "./index-kbkk7vnh.js";
@@ -407,7 +407,7 @@ import {
407
407
  clearScopeBindings,
408
408
  readAuthoritativeScopeBindingSet,
409
409
  readDeclaredScopeFilesFromBindings
410
- } from "./index-y3sk68m5.js";
410
+ } from "./index-sarq27b9.js";
411
411
  import {
412
412
  clearPlanLedgerForReset,
413
413
  computePlanStructureHash,
@@ -423,7 +423,7 @@ import {
423
423
  replayFromLedgerWithStatus,
424
424
  resolvePlanningProfile,
425
425
  takeSnapshotEvent
426
- } from "./index-ytms8x1h.js";
426
+ } from "./index-e69469z9.js";
427
427
  import {
428
428
  CORE_EVENT_LOCKED,
429
429
  appendCoreEventSync,
@@ -512,7 +512,7 @@ import {
512
512
  transactFile,
513
513
  transactKnowledge,
514
514
  wordBigrams
515
- } from "./index-c016phsk.js";
515
+ } from "./index-8hf3rt47.js";
516
516
  import {
517
517
  readTailJsonl,
518
518
  readTailJsonlDetailed,
@@ -593,7 +593,7 @@ import {
593
593
  loadGateOverrides,
594
594
  loadPluginConfig,
595
595
  loadPluginConfigWithMeta
596
- } from "./index-9tes309n.js";
596
+ } from "./index-yyh5kegx.js";
597
597
  import {
598
598
  addDeferredWarning,
599
599
  advisoryWarn,
@@ -625,7 +625,7 @@ import {
625
625
  resolveContextWindow,
626
626
  resolveGeneratedAgentRole,
627
627
  stripKnownSwarmPrefix
628
- } from "./index-ghjg1rxe.js";
628
+ } from "./index-d4vrpe06.js";
629
629
  import {
630
630
  AGENT_TOOL_MAP,
631
631
  ALL_AGENT_NAMES,
@@ -3414,7 +3414,7 @@ async function importLegacyPrWorkflowGateStateIfNeeded(directory, sessionID, all
3414
3414
  return null;
3415
3415
  throw error2;
3416
3416
  }
3417
- const legacy = allowSalvagedImport ? (await (await import("./pr-workflow-gate-3ett6hjh.js")).readPrWorkflowGateStateForRecovery(directory, sessionID))?.state ?? null : await readPrWorkflowGateStateFileFromDisk(filePath, sessionID);
3417
+ const legacy = allowSalvagedImport ? (await (await import("./pr-workflow-gate-hmtae8gc.js")).readPrWorkflowGateStateForRecovery(directory, sessionID))?.state ?? null : await readPrWorkflowGateStateFileFromDisk(filePath, sessionID);
3418
3418
  if (!legacy)
3419
3419
  return null;
3420
3420
  const namespace = workflowGateStateCoordinationNamespace(sessionID);
@@ -3501,7 +3501,7 @@ async function deleteStateWhileLocked(directory, sessionID, options = {}) {
3501
3501
  let recoveryState = null;
3502
3502
  if (!currentAuthoritative) {
3503
3503
  if (options.allowSalvagedRead) {
3504
- const { readPrWorkflowGateStateForRecovery } = await import("./pr-workflow-gate-3ett6hjh.js");
3504
+ const { readPrWorkflowGateStateForRecovery } = await import("./pr-workflow-gate-hmtae8gc.js");
3505
3505
  recoveryState = (await readPrWorkflowGateStateForRecovery(directory, normalizedSessionID))?.state ?? null;
3506
3506
  }
3507
3507
  if (!recoveryState) {
@@ -15074,7 +15074,7 @@ function isLaneOwnedByCurrentSession(branchName, expectedSessionId) {
15074
15074
  return extracted === expectedSessionId;
15075
15075
  }
15076
15076
  async function inspectStandardWorktreeCollisionOwnership(identity) {
15077
- const collisionOwnership = await import("./worktree-collision-ownership-kjw1pqfc.js");
15077
+ const collisionOwnership = await import("./worktree-collision-ownership-cswsfrj6.js");
15078
15078
  return collisionOwnership.inspectStandardWorktreeCollisionOwnership(identity);
15079
15079
  }
15080
15080
  async function runRecoveryGit(directory, args, timeoutMs = 15000) {
@@ -15500,7 +15500,7 @@ async function precreateStandardWorktreeSession(args) {
15500
15500
  const laneProfile = computeLaneRuntimeProfile(worktreeConfig.runtime_isolation, laneIndex, handle.worktreePath);
15501
15501
  if (laneProfile) {
15502
15502
  try {
15503
- const { writeLaneProfileToDiskReal } = await import("./core-y89texpp.js");
15503
+ const { writeLaneProfileToDiskReal } = await import("./core-ky5b3mh6.js");
15504
15504
  await writeLaneProfileToDiskReal(handle.worktreePath, laneProfile.laneIndex, laneProfile.envOverrides);
15505
15505
  } catch {}
15506
15506
  }
@@ -16479,7 +16479,7 @@ async function finishStandardWorktreeDispatch(directory, dispatch, config, callI
16479
16479
  }
16480
16480
  clearWorktreeMergeStatus(statusKey);
16481
16481
  try {
16482
- const { removeLaneProfileFromDiskReal } = await import("./core-y89texpp.js");
16482
+ const { removeLaneProfileFromDiskReal } = await import("./core-ky5b3mh6.js");
16483
16483
  await removeLaneProfileFromDiskReal(dispatch.handle.worktreePath, dispatch.laneIndex);
16484
16484
  } catch {}
16485
16485
  const state = serializationStateBySessionID.get(dispatch.parentSessionID);
@@ -22923,6 +22923,8 @@ var swarmState = {
22923
22923
  finalPromptPressureBySession: new Map,
22924
22924
  finalAccountingWarningBandsBySession: new Map,
22925
22925
  liveContextWindows: new Map,
22926
+ dispatchParentByChildSession: new Map,
22927
+ pendingDispatchAuthorizations: [],
22926
22928
  agentSessions: defaultRunContext.agentSessions,
22927
22929
  pendingRehydrations: new Set,
22928
22930
  fullAutoEnabledInConfig: false,
@@ -22956,6 +22958,8 @@ function resetSwarmState() {
22956
22958
  swarmState.knowledgeAckDedup.clear();
22957
22959
  swarmState.gateDenialCounts.clear();
22958
22960
  swarmState.generatedAgentNames = [];
22961
+ swarmState.dispatchParentByChildSession.clear();
22962
+ swarmState.pendingDispatchAuthorizations = [];
22959
22963
  clearHydrationOwnershipState();
22960
22964
  swarmState.fullAutoEnabledInConfig = false;
22961
22965
  swarmState.environmentProfiles.clear();
@@ -22995,6 +22999,55 @@ function resetSwarmStatePreservingSingletons() {
22995
22999
  }
22996
23000
  var STALE_SESSION_TTL_MS = 7200000;
22997
23001
  var REVIEWER_SCOPE_GENERATION_TTL_MS = STALE_SESSION_TTL_MS;
23002
+ var MAX_TRACKED_DISPATCH_PARENTS = 200;
23003
+ var PENDING_DISPATCH_AUTHORIZATION_TTL_MS = 600000;
23004
+ function pruneExpiredPendingDispatchAuthorizations(now) {
23005
+ const pendings = swarmState.pendingDispatchAuthorizations;
23006
+ if (pendings.length === 0)
23007
+ return;
23008
+ const alive = pendings.filter((pending) => now - pending.recordedAt <= PENDING_DISPATCH_AUTHORIZATION_TTL_MS);
23009
+ if (alive.length !== pendings.length) {
23010
+ swarmState.pendingDispatchAuthorizations = alive;
23011
+ }
23012
+ }
23013
+ function setDispatchParentEntry(childSessionId, parentSessionId) {
23014
+ if (!childSessionId || !parentSessionId)
23015
+ return;
23016
+ swarmState.dispatchParentByChildSession.delete(childSessionId);
23017
+ swarmState.dispatchParentByChildSession.set(childSessionId, parentSessionId);
23018
+ if (swarmState.dispatchParentByChildSession.size > MAX_TRACKED_DISPATCH_PARENTS) {
23019
+ const oldestKey = swarmState.dispatchParentByChildSession.keys().next().value;
23020
+ if (oldestKey !== undefined) {
23021
+ swarmState.dispatchParentByChildSession.delete(oldestKey);
23022
+ }
23023
+ }
23024
+ }
23025
+ function adoptPendingDispatchAuthorization(newSessionId, agentName) {
23026
+ if (swarmState.dispatchParentByChildSession.has(newSessionId))
23027
+ return;
23028
+ const normalizedRole = stripKnownSwarmPrefix(agentName).toLowerCase();
23029
+ if (!normalizedRole)
23030
+ return;
23031
+ const now = Date.now();
23032
+ pruneExpiredPendingDispatchAuthorizations(now);
23033
+ const pendings = swarmState.pendingDispatchAuthorizations;
23034
+ const matchIndex = pendings.findIndex((pending) => pending.agentName === normalizedRole);
23035
+ if (matchIndex < 0)
23036
+ return;
23037
+ const [adopted] = pendings.splice(matchIndex, 1);
23038
+ if (!adopted)
23039
+ return;
23040
+ setDispatchParentEntry(newSessionId, adopted.parentSessionId);
23041
+ }
23042
+ function clearDispatchLineageForSession(sessionId) {
23043
+ swarmState.dispatchParentByChildSession.delete(sessionId);
23044
+ for (const [child, parent] of swarmState.dispatchParentByChildSession) {
23045
+ if (parent === sessionId) {
23046
+ swarmState.dispatchParentByChildSession.delete(child);
23047
+ }
23048
+ }
23049
+ swarmState.pendingDispatchAuthorizations = swarmState.pendingDispatchAuthorizations.filter((pending) => pending.parentSessionId !== sessionId);
23050
+ }
22998
23051
  function ensureReviewerScopeGenerationState(session) {
22999
23052
  session.reviewerScopeGenerations ??= new Map;
23000
23053
  session.reviewerScopeGenerationCounter ??= 0;
@@ -23105,6 +23158,7 @@ function sweepStaleSessions(staleDurationMs = STALE_SESSION_TTL_MS, now = Date.n
23105
23158
  releaseSnapshotSessionOwnership(id);
23106
23159
  swarmState.agentSessions.delete(id);
23107
23160
  swarmState.delegationChains.delete(id);
23161
+ clearDispatchLineageForSession(id);
23108
23162
  swarmState.activeAgent.delete(id);
23109
23163
  }
23110
23164
  return staleIds;
@@ -23275,6 +23329,7 @@ function endAgentSession(sessionId, directory) {
23275
23329
  swarmState.agentSessions.delete(sessionId);
23276
23330
  swarmState.activeAgent.delete(sessionId);
23277
23331
  swarmState.delegationChains.delete(sessionId);
23332
+ clearDispatchLineageForSession(sessionId);
23278
23333
  clearRealtimeLearningNudgeSession(sessionId);
23279
23334
  resetSessionQueue(sessionId);
23280
23335
  resetPrmPatternSupport(sessionId);
@@ -23503,6 +23558,9 @@ function ensureAgentSession(sessionId, agentName, directory) {
23503
23558
  if (!session) {
23504
23559
  throw new Error(`Failed to create guardrail session for ${sessionId}`);
23505
23560
  }
23561
+ if (agentName && agentName !== "unknown") {
23562
+ adoptPendingDispatchAuthorization(sessionId, agentName);
23563
+ }
23506
23564
  return session;
23507
23565
  }
23508
23566
  function recordSessionWorkspaceRoot(sessionId, laneRoot) {
@@ -24059,7 +24117,7 @@ function clearCriticalShownIds(sessionID) {
24059
24117
  async function rehydratePrSubscriptions(sessionID, directory) {
24060
24118
  const map = new Map;
24061
24119
  try {
24062
- const { listActive: listActive2 } = await import("./pr-subscriptions-k86p5qcn.js");
24120
+ const { listActive: listActive2 } = await import("./pr-subscriptions-m47zghfv.js");
24063
24121
  const records = await listActive2(directory);
24064
24122
  for (const record of records) {
24065
24123
  if (record.sessionID !== sessionID)
@@ -40606,9 +40664,9 @@ function hashContent(content) {
40606
40664
  return createHash27("sha1").update(content).digest("hex");
40607
40665
  }
40608
40666
  async function loadConfigForPolicyCurator(directory) {
40609
- const { KnowledgeConfigSchema: KnowledgeConfigSchema2 } = await import("./schema-s5zbnzmv.js");
40667
+ const { KnowledgeConfigSchema: KnowledgeConfigSchema2 } = await import("./schema-qaxjz2de.js");
40610
40668
  try {
40611
- const { loadPluginConfigWithMeta: loadPluginConfigWithMeta2 } = await import("./index-eh0sg1pz.js");
40669
+ const { loadPluginConfigWithMeta: loadPluginConfigWithMeta2 } = await import("./index-fqyd21v7.js");
40612
40670
  const { config: loadedConfig } = loadPluginConfigWithMeta2(directory);
40613
40671
  return KnowledgeConfigSchema2.parse(loadedConfig.knowledge ?? {});
40614
40672
  } catch {
@@ -43666,7 +43724,7 @@ async function resolveCuratorLLMDelegate(directory, mode, sessionId) {
43666
43724
  const seam = _internals38.createCuratorLLMDelegate;
43667
43725
  if (seam)
43668
43726
  return seam(directory, mode, sessionId);
43669
- const { createCuratorLLMDelegate } = await import("./curator-llm-factory-1qbcj7vs.js");
43727
+ const { createCuratorLLMDelegate } = await import("./curator-llm-factory-ajtxk3sm.js");
43670
43728
  return createCuratorLLMDelegate(directory, mode, sessionId);
43671
43729
  }
43672
43730
  async function reconcileCloseTerminalStateForPlan(directory, targetPlan, options) {
@@ -44061,7 +44119,7 @@ async function runFinalizeStage(ctx) {
44061
44119
  }
44062
44120
  }
44063
44121
  try {
44064
- const { CuratorConfigSchema: CCS } = await import("./schema-s5zbnzmv.js");
44122
+ const { CuratorConfigSchema: CCS } = await import("./schema-qaxjz2de.js");
44065
44123
  const { config: pmLoadedConfig } = _internals38.loadPluginConfigWithMeta(ctx.directory);
44066
44124
  const curatorCfg = CCS.parse(pmLoadedConfig.curator ?? {});
44067
44125
  if (curatorCfg.enabled && curatorCfg.postmortem_enabled) {
@@ -46298,7 +46356,7 @@ function serializeAgentSession(s) {
46298
46356
  }
46299
46357
  async function writeSnapshot(directory, state) {
46300
46358
  try {
46301
- const { ensureSnapshotCoordinationReady } = await import("./snapshot-coordination-init-8ykpp5m6.js");
46359
+ const { ensureSnapshotCoordinationReady } = await import("./snapshot-coordination-init-qbtzxwga.js");
46302
46360
  await ensureSnapshotCoordinationReady(directory);
46303
46361
  const snapshot = {
46304
46362
  version: 3,
@@ -49308,7 +49366,7 @@ function planMerges(active, threshold, maxComparisons, maxMerges) {
49308
49366
  };
49309
49367
  }
49310
49368
  async function sweepActiveNearDuplicates(directory, options = {}) {
49311
- const { loadPluginConfigWithMeta: loadPluginConfigWithMeta2 } = await import("./index-eh0sg1pz.js");
49369
+ const { loadPluginConfigWithMeta: loadPluginConfigWithMeta2 } = await import("./index-fqyd21v7.js");
49312
49370
  const { config } = loadPluginConfigWithMeta2(directory);
49313
49371
  const sweepConfig = config.learning?.dedup_sweep;
49314
49372
  if (sweepConfig?.enabled === false)
@@ -50432,7 +50490,7 @@ async function runCuratorPhase(directory, phase, agentsDispatched, config, knowl
50432
50490
  }
50433
50491
  if (config.skill_generation_enabled === true && skillCandidates.length > 0) {
50434
50492
  try {
50435
- const skillModule = await import("./skill-generator-bfcjzp20.js");
50493
+ const skillModule = await import("./skill-generator-sgv3bdgt.js");
50436
50494
  for (const cand of skillCandidates) {
50437
50495
  if (cand.confidence < (config.min_skill_confidence ?? DEFAULT_SKILL_MIN_CONFIDENCE)) {
50438
50496
  continue;
@@ -50904,7 +50962,7 @@ async function applyCuratorKnowledgeUpdates(directory, recommendations, knowledg
50904
50962
  } catch {}
50905
50963
  }
50906
50964
  if (contradictedEntries.length > 0 && knowledgeConfig.contradiction_threshold_action === "quarantine") {
50907
- const { maybeQuarantineOnContradiction } = await import("./knowledge-escalator-ejfb2e7c.js");
50965
+ const { maybeQuarantineOnContradiction } = await import("./knowledge-escalator-ndsm1023.js");
50908
50966
  for (const { id } of contradictedEntries) {
50909
50967
  try {
50910
50968
  await maybeQuarantineOnContradiction(directory, id, knowledgeConfig.contradiction_quarantine_threshold, knowledgeConfig.contradiction_quarantine_window_days);
@@ -51736,7 +51794,7 @@ async function runCuratorPostMortem(directory, options = {}) {
51736
51794
  warnings.push("Failed to collect knowledge summary.");
51737
51795
  }
51738
51796
  try {
51739
- const { getScanStatus } = await import("./scan-cursor-9961dhv1.js");
51797
+ const { getScanStatus } = await import("./scan-cursor-gdy1qjed.js");
51740
51798
  const scanStatus = await getScanStatus(directory);
51741
51799
  if (scanStatus.remaining_estimate > 0) {
51742
51800
  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.`);
@@ -51908,9 +51966,9 @@ var _internals56 = {
51908
51966
  verifyPostMortemKnowledgeActions,
51909
51967
  repairPostMortemActions,
51910
51968
  loadDefaultKnowledgeConfig: async (directory) => {
51911
- const { KnowledgeConfigSchema: KnowledgeConfigSchema2 } = await import("./schema-s5zbnzmv.js");
51969
+ const { KnowledgeConfigSchema: KnowledgeConfigSchema2 } = await import("./schema-qaxjz2de.js");
51912
51970
  try {
51913
- const { loadPluginConfigWithMeta: loadPluginConfigWithMeta2 } = await import("./index-eh0sg1pz.js");
51971
+ const { loadPluginConfigWithMeta: loadPluginConfigWithMeta2 } = await import("./index-fqyd21v7.js");
51914
51972
  const loaded = loadPluginConfigWithMeta2(directory);
51915
51973
  return KnowledgeConfigSchema2.parse(loaded.config.knowledge ?? {});
51916
51974
  } catch {
@@ -51918,11 +51976,11 @@ var _internals56 = {
51918
51976
  }
51919
51977
  },
51920
51978
  applyCuratorKnowledgeUpdates: async (directory, recommendations, knowledgeConfig, generation) => {
51921
- const { applyCuratorKnowledgeUpdates: applyCuratorKnowledgeUpdates2 } = await import("./curator-tkz65fvw.js");
51979
+ const { applyCuratorKnowledgeUpdates: applyCuratorKnowledgeUpdates2 } = await import("./curator-bsafet3m.js");
51922
51980
  return applyCuratorKnowledgeUpdates2(directory, recommendations, knowledgeConfig, generation);
51923
51981
  },
51924
51982
  checkHivePromotions: async (entries2, knowledgeConfig, directory) => {
51925
- const { checkHivePromotions } = await import("./hive-promoter-88d95wk8.js");
51983
+ const { checkHivePromotions } = await import("./hive-promoter-edp5c7k2.js");
51926
51984
  return checkHivePromotions(entries2, knowledgeConfig, directory);
51927
51985
  },
51928
51986
  applyProposalTriage: async (directory, triage) => {
@@ -51931,7 +51989,7 @@ var _internals56 = {
51931
51989
  activateProposal,
51932
51990
  listSkills: listSkills2,
51933
51991
  sanitizeSlug
51934
- } = await import("./skill-generator-bfcjzp20.js");
51992
+ } = await import("./skill-generator-sgv3bdgt.js");
51935
51993
  const result = {
51936
51994
  approved: [],
51937
51995
  rejected: [],
@@ -51973,7 +52031,7 @@ var _internals56 = {
51973
52031
  return result;
51974
52032
  },
51975
52033
  readPriorDriftReports: async (directory) => {
51976
- const { readPriorDriftReports: readPriorDriftReports2 } = await import("./curator-drift-rpwrx355.js");
52034
+ const { readPriorDriftReports: readPriorDriftReports2 } = await import("./curator-drift-2dwkkykq.js");
51977
52035
  return readPriorDriftReports2(directory);
51978
52036
  },
51979
52037
  readSwarmKnowledge: (directory) => readKnowledge(resolveSwarmKnowledgePath(directory))
@@ -61776,9 +61834,9 @@ var _internals66 = {
61776
61834
  loadPluginConfigWithMeta,
61777
61835
  loadCuratorDeps: async () => {
61778
61836
  const [{ CuratorConfigSchema }, curator, { createCuratorLLMDelegate }] = await Promise.all([
61779
- import("./schema-s5zbnzmv.js"),
61780
- import("./curator-tkz65fvw.js"),
61781
- import("./curator-llm-factory-1qbcj7vs.js")
61837
+ import("./schema-qaxjz2de.js"),
61838
+ import("./curator-bsafet3m.js"),
61839
+ import("./curator-llm-factory-ajtxk3sm.js")
61782
61840
  ]);
61783
61841
  return { CuratorConfigSchema, curator, createCuratorLLMDelegate };
61784
61842
  }
@@ -64176,7 +64234,7 @@ async function computeCurationDiagnostics(directory, entries2) {
64176
64234
  let scanCompleted = false;
64177
64235
  let scanRemaining = 0;
64178
64236
  try {
64179
- const { getScanStatus } = await import("./scan-cursor-9961dhv1.js");
64237
+ const { getScanStatus } = await import("./scan-cursor-gdy1qjed.js");
64180
64238
  const status = await getScanStatus(directory);
64181
64239
  scanGeneration = status.generation;
64182
64240
  scanCompleted = status.completed;
@@ -64186,10 +64244,10 @@ async function computeCurationDiagnostics(directory, entries2) {
64186
64244
  try {
64187
64245
  const { isLinked: isLinked2 } = await import("./knowledge-link-h4pdcnya.js");
64188
64246
  if (isLinked2(directory)) {
64189
- const { KnowledgeConfigSchema: KnowledgeConfigSchema2 } = await import("./schema-s5zbnzmv.js");
64247
+ const { KnowledgeConfigSchema: KnowledgeConfigSchema2 } = await import("./schema-qaxjz2de.js");
64190
64248
  let config;
64191
64249
  try {
64192
- const { loadPluginConfigWithMeta: loadPluginConfigWithMeta2 } = await import("./index-eh0sg1pz.js");
64250
+ const { loadPluginConfigWithMeta: loadPluginConfigWithMeta2 } = await import("./index-fqyd21v7.js");
64193
64251
  const loaded = loadPluginConfigWithMeta2(directory);
64194
64252
  config = KnowledgeConfigSchema2.parse(loaded.config.knowledge ?? {});
64195
64253
  } catch {
@@ -65645,7 +65703,7 @@ async function handleDoctorCommand(directory, args) {
65645
65703
  const result = runConfigDoctor(config, directory, planParallelizationEnabled);
65646
65704
  let output;
65647
65705
  if (enableAutoFix && result.hasAutoFixableIssues) {
65648
- const { runConfigDoctorWithFixes } = await import("./config-doctor-4wgw6nak.js");
65706
+ const { runConfigDoctorWithFixes } = await import("./config-doctor-b5t9hrzb.js");
65649
65707
  const fixResult = await runConfigDoctorWithFixes(directory, config, true, {
65650
65708
  applyLossy: true
65651
65709
  });
@@ -65683,7 +65741,7 @@ async function handleDoctorCommand(directory, args) {
65683
65741
  `;
65684
65742
  }
65685
65743
  try {
65686
- const { runModelPreflight } = await import("./model-preflight-nfvapzyj.js");
65744
+ const { runModelPreflight } = await import("./model-preflight-7rrjh3wp.js");
65687
65745
  const preflight = await runModelPreflight(config, swarmState.opencodeClient, { generatedAgentNames: swarmState.generatedAgentNames });
65688
65746
  const missingSelection = preflight.resolutions.filter((resolution) => resolution.status === "missing-selection");
65689
65747
  const unresolved = preflight.catalogAvailable ? preflight.resolutions.filter((resolution) => resolution.status === "unresolved") : [];
@@ -65717,7 +65775,7 @@ async function handleDoctorCommand(directory, args) {
65717
65775
  }
65718
65776
  } catch {}
65719
65777
  try {
65720
- const { renderKnowledgeReceiptPhaseIdSection } = await import("./doctor-knowledge-receipt-phase-id-11q7en6t.js");
65778
+ const { renderKnowledgeReceiptPhaseIdSection } = await import("./doctor-knowledge-receipt-phase-id-mckkwm0c.js");
65721
65779
  output += await renderKnowledgeReceiptPhaseIdSection(directory, enableAutoFix);
65722
65780
  } catch {}
65723
65781
  const strayDirs = detectStraySwarmDirs(directory);
@@ -66614,7 +66672,7 @@ async function handleEvidenceCommand(directory, args) {
66614
66672
  return formatTaskEvidenceMarkdown(evidenceData);
66615
66673
  }
66616
66674
  async function handleEvidenceSummaryCommand(directory) {
66617
- const { buildEvidenceSummary } = await import("./evidence-summary-service-hn7vdm45.js");
66675
+ const { buildEvidenceSummary } = await import("./evidence-summary-service-svrt4se9.js");
66618
66676
  const artifact = await buildEvidenceSummary(directory);
66619
66677
  if (!artifact) {
66620
66678
  return "No plan found. Run `/swarm plan` to check plan status.";
@@ -91061,7 +91119,7 @@ function createCuratorLLMDelegate(directory, mode = "init", sessionId) {
91061
91119
  }
91062
91120
  const sdkOpts = signal ? { signal } : {};
91063
91121
  try {
91064
- const { getSwarmAgents: getSwarmAgents2, resolveFallbackModel: resolveFallbackModel2 } = await import("./index-ffmw6af9.js");
91122
+ const { getSwarmAgents: getSwarmAgents2, resolveFallbackModel: resolveFallbackModel2 } = await import("./index-n8n94des.js");
91065
91123
  const createResult = await client.session.create({
91066
91124
  ...sessionId ? {
91067
91125
  body: {
@@ -93398,7 +93456,7 @@ async function cancelPrFeedbackLoopUnlocked(directory, sessionID, reason) {
93398
93456
  clearedEvents: []
93399
93457
  };
93400
93458
  try {
93401
- const { cancelPrFeedbackPublication: cancelPrFeedbackPublication2 } = await import("./pr-workflow-gate-3ett6hjh.js");
93459
+ const { cancelPrFeedbackPublication: cancelPrFeedbackPublication2 } = await import("./pr-workflow-gate-hmtae8gc.js");
93402
93460
  await cancelPrFeedbackPublication2(directory, sessionID, reason);
93403
93461
  } catch (err) {
93404
93462
  warn(`[pr-feedback-loop] cancelPrFeedbackPublication failed (fail-open): ${err instanceof Error ? err.message : String(err)}`);
@@ -102879,7 +102937,9 @@ async function releaseKnowledgeGateObligations(directory, sessionID) {
102879
102937
  releasedPairs.push(`${traceId}/${item.entry_id}`);
102880
102938
  }
102881
102939
  if (committed.rejected.length > 0) {
102882
- results.push(`\u26A0\uFE0F Partially released trace ${sanitizeDiagnosticText(traceId, 64)}: ${committed.rejected.map((item) => item.reason).join("; ")}`);
102940
+ const reasons = committed.rejected.map((item) => item.reason).join("; ");
102941
+ const hasWrongSession = committed.rejected.some((item) => item.reason === "wrong_session");
102942
+ results.push(`\u26A0\uFE0F Partially released trace ${sanitizeDiagnosticText(traceId, 64)}: ${reasons}` + (hasWrongSession ? ` \u2014 a re-dispatched child session is an authorized filer for its dispatch's stamps, or surface fresh knowledge via knowledge_recall for a new trace` : ""));
102883
102943
  }
102884
102944
  }
102885
102945
  if (committedCount === 0) {
@@ -102992,6 +103052,8 @@ async function handleResetSessionCommand(directory, args, sessionID) {
102992
103052
  clearTrajectoryStep(sessionId);
102993
103053
  }
102994
103054
  swarmState.agentSessions.clear();
103055
+ swarmState.dispatchParentByChildSession.clear();
103056
+ swarmState.pendingDispatchAuthorizations = [];
102995
103057
  clearSnapshotSessionOwnerships();
102996
103058
  results.push(`\u2705 Cleared ${sessionCount} in-memory agent session(s)`);
102997
103059
  try {
@@ -109768,7 +109830,7 @@ function buildDetailedHelp(commandName, entry) {
109768
109830
  async function handleHelpCommand(ctx) {
109769
109831
  const targetCommand = ctx.args.join(" ");
109770
109832
  if (!targetCommand) {
109771
- const { buildHelpText } = await import("./index-2vtrjm19.js");
109833
+ const { buildHelpText } = await import("./index-kx0sr39t.js");
109772
109834
  return buildHelpText();
109773
109835
  }
109774
109836
  const tokens = targetCommand.split(/\s+/);
@@ -109782,7 +109844,7 @@ async function handleHelpCommand(ctx) {
109782
109844
  > Note: \`/swarm ${resolved.key}\` is a deprecated alias for \`/swarm ${aliasTarget}\`.` : detailed;
109783
109845
  }
109784
109846
  const similar = _internals27.findSimilarCommands(targetCommand);
109785
- const { buildHelpText: fullHelp } = await import("./index-2vtrjm19.js");
109847
+ const { buildHelpText: fullHelp } = await import("./index-kx0sr39t.js");
109786
109848
  if (similar.length > 0) {
109787
109849
  return `Command '/swarm ${targetCommand}' not found.
109788
109850
 
@@ -110110,7 +110172,7 @@ var COMMAND_REGISTRY = {
110110
110172
  },
110111
110173
  "guardrail explain": {
110112
110174
  handler: async (ctx) => {
110113
- const { handleGuardrailExplain } = await import("./guardrail-explain-e0wbeyk1.js");
110175
+ const { handleGuardrailExplain } = await import("./guardrail-explain-5j0cg165.js");
110114
110176
  return handleGuardrailExplain(ctx.directory, ctx.args);
110115
110177
  },
110116
110178
  description: "Dry-run: show what the guardrails would do to a command or write target (executes nothing)",
@@ -110120,7 +110182,7 @@ var COMMAND_REGISTRY = {
110120
110182
  },
110121
110183
  "guardrail reset": {
110122
110184
  handler: async (ctx) => {
110123
- const { handleGuardrailReset } = await import("./guardrail-reset-7z62s1j5.js");
110185
+ const { handleGuardrailReset } = await import("./guardrail-reset-kjmqnr5r.js");
110124
110186
  return handleGuardrailReset(ctx.args, ctx.sessionID);
110125
110187
  },
110126
110188
  description: "Reset one exact active invocation/action circuit after repair",
@@ -110141,7 +110203,7 @@ var COMMAND_REGISTRY = {
110141
110203
  },
110142
110204
  "guardrail-log": {
110143
110205
  handler: async (ctx) => {
110144
- const { handleGuardrailLog } = await import("./guardrail-log-gzrj46h0.js");
110206
+ const { handleGuardrailLog } = await import("./guardrail-log-h6fc7rnv.js");
110145
110207
  return handleGuardrailLog(ctx.directory, ctx.args);
110146
110208
  },
110147
110209
  description: "Read the guardrail decision log (use --blocks-only for blocks)",
@@ -14,14 +14,14 @@ import {
14
14
  detectWindowsWrites,
15
15
  getSharedClassifierGuardrailBlock,
16
16
  resolveWriteTargets
17
- } from "./index-emh69vk9.js";
17
+ } from "./index-h93hm2ew.js";
18
18
  import {
19
19
  checkFileAuthority,
20
20
  classifyFile,
21
21
  isInDeclaredScope,
22
22
  redactPath,
23
23
  redactShellCommand
24
- } from "./index-7k9hdn0b.js";
24
+ } from "./index-b81wsm2s.js";
25
25
 
26
26
  // src/services/guardrail-explain-service.ts
27
27
  import path from "path";
@@ -4735,7 +4735,7 @@ async function reconcileLegacyCoderSettlements(directory, maxRecords, onReconcil
4735
4735
  const candidates = readDelegations(directory).filter((record) => record.normalizedAgent === "coder" && Boolean(record.legacyCoderSettlementTransfer) && Boolean(record.terminalResult)).slice(0, maxRecords);
4736
4736
  if (candidates.length === 0)
4737
4737
  return 0;
4738
- const { transferCoderSettlementToBackground } = await import("./coder-settlement-gaby6spt.js");
4738
+ const { transferCoderSettlementToBackground } = await import("./coder-settlement-rmaypr7g.js");
4739
4739
  let transferred = 0;
4740
4740
  for (const record of candidates) {
4741
4741
  try {
@@ -1,7 +1,7 @@
1
1
  // @bun
2
2
  import {
3
3
  writeSpeckitCheckoffLedger
4
- } from "./index-yj1cwps4.js";
4
+ } from "./index-8gyt9j0a.js";
5
5
  import {
6
6
  validateSpecContent
7
7
  } from "./index-0725jpp7.js";