opencode-swarm 7.200.1 → 7.200.3

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 (92) 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/{attest-task-sg8b5a5j.js → attest-task-k7b87zk8.js} +29 -29
  5. package/dist/cli/{auto-checkpoint-bywgxh27.js → auto-checkpoint-pzsrkk2q.js} +4 -4
  6. package/dist/cli/{checkpoint-k2092cbw.js → checkpoint-sb3f8jfv.js} +9 -9
  7. package/dist/cli/{coder-settlement-y0hkcngn.js → coder-settlement-5jh2erx1.js} +6 -6
  8. package/dist/cli/{config-doctor-0fnrwkga.js → config-doctor-8keyw62b.js} +8 -8
  9. package/dist/cli/{core-mfyaj8b4.js → core-7240e0vh.js} +2 -2
  10. package/dist/cli/{curator-1s64jkc3.js → curator-1jhwv0ce.js} +29 -29
  11. package/dist/cli/{curator-drift-famx6p6s.js → curator-drift-r4yttpe9.js} +6 -6
  12. package/dist/cli/{curator-llm-factory-vya4epq6.js → curator-llm-factory-wcv6x9pq.js} +29 -29
  13. package/dist/cli/{doctor-knowledge-receipt-phase-id-v4y6pbek.js → doctor-knowledge-receipt-phase-id-1v5fx0rk.js} +5 -5
  14. package/dist/cli/{evidence-summary-service-rd7y6yjq.js → evidence-summary-service-zkbzsjbf.js} +10 -10
  15. package/dist/cli/{gate-evidence-kama66h5.js → gate-evidence-j4jemrv7.js} +3 -3
  16. package/dist/cli/{guardrail-explain-8fkhq0cg.js → guardrail-explain-g95j8z79.js} +30 -30
  17. package/dist/cli/{guardrail-log-gdj19fq5.js → guardrail-log-0xjg12y1.js} +3 -3
  18. package/dist/cli/{guardrail-reset-bmg6czzk.js → guardrail-reset-rgbt0zgy.js} +29 -29
  19. package/dist/cli/{hive-promoter-ychygdgc.js → hive-promoter-f0rzkbww.js} +29 -29
  20. package/dist/cli/{index-1v277wxc.js → index-0vv7vzp8.js} +1 -1
  21. package/dist/cli/{index-wgf1780e.js → index-1j14kbak.js} +1 -1
  22. package/dist/cli/{index-nawp90n7.js → index-275w8rfx.js} +3 -3
  23. package/dist/cli/{index-0tygsk8b.js → index-2nq7h5cj.js} +4 -4
  24. package/dist/cli/{index-3exe6k66.js → index-2r6d72m6.js} +2 -2
  25. package/dist/cli/{index-sz67z90q.js → index-44z8mv05.js} +1 -1
  26. package/dist/cli/{index-bn3aa5q1.js → index-5c6zse74.js} +4 -4
  27. package/dist/cli/{index-rzkmg02a.js → index-5g0nrnyd.js} +4 -4
  28. package/dist/cli/{index-p6v544jn.js → index-5ph10kdd.js} +5 -3
  29. package/dist/cli/{index-xyvsdn07.js → index-5q3hg1pk.js} +19 -0
  30. package/dist/cli/{index-2w5grmmj.js → index-6r93sy2k.js} +2 -2
  31. package/dist/cli/{index-b4kdms7x.js → index-7rpcbnp8.js} +1 -1
  32. package/dist/cli/{index-3zspah3v.js → index-8f7wgcpz.js} +1 -1
  33. package/dist/cli/{index-z9mysg5m.js → index-8x90j950.js} +1 -1
  34. package/dist/cli/{index-2hnnkj64.js → index-95k0fkhp.js} +112 -67
  35. package/dist/cli/{index-s8eac99p.js → index-9cffn82s.js} +2 -2
  36. package/dist/cli/{index-b0d8ra32.js → index-9dbxpr2j.js} +1 -1
  37. package/dist/cli/{index-dgyddtje.js → index-bcn30s7q.js} +6 -6
  38. package/dist/cli/{index-qzakbjcg.js → index-bft3404e.js} +1 -1
  39. package/dist/cli/{index-w2bhrp6z.js → index-dgv5xy0b.js} +6 -6
  40. package/dist/cli/{index-2dm42tgp.js → index-dygkt0ne.js} +31 -31
  41. package/dist/cli/{index-2m740hyt.js → index-eac47j2q.js} +1 -1
  42. package/dist/cli/{index-parkaa70.js → index-encs4mdm.js} +3 -3
  43. package/dist/cli/{index-sva5swrs.js → index-j2x2ajz7.js} +2 -2
  44. package/dist/cli/{index-pe77h482.js → index-mff4szvk.js} +2 -2
  45. package/dist/cli/{index-51dw4bjc.js → index-pmcvznag.js} +2 -2
  46. package/dist/cli/{index-12h2rtdj.js → index-q49vqmzh.js} +2 -2
  47. package/dist/cli/{index-3020n6d9.js → index-tmhwpzdg.js} +1 -1
  48. package/dist/cli/{index-0ptf66x5.js → index-v5nh2fhv.js} +2 -2
  49. package/dist/cli/{index-vtkgg2qn.js → index-vyb5xf36.js} +3 -3
  50. package/dist/cli/{index-f6nrw8am.js → index-x48h0zsw.js} +29 -29
  51. package/dist/cli/{index-th667k1y.js → index-xxvman1m.js} +3 -3
  52. package/dist/cli/{index-qaqyq25k.js → index-y46b7a5g.js} +6 -6
  53. package/dist/cli/{index-c9g3hkjz.js → index-yg4923ga.js} +3 -3
  54. package/dist/cli/index.js +30 -30
  55. package/dist/cli/{knowledge-escalator-zxd76jna.js → knowledge-escalator-s25vhfrt.js} +8 -8
  56. package/dist/cli/{knowledge-events-z8h0wmaw.js → knowledge-events-qd39qwy1.js} +6 -6
  57. package/dist/cli/{knowledge-store-g2gm13s8.js → knowledge-store-y02hfxq9.js} +1 -1
  58. package/dist/cli/{knowledge-validator-2sech2sx.js → knowledge-validator-d7ysvdmw.js} +2 -2
  59. package/dist/cli/{mcp-t88363gj.js → mcp-5py3efbs.js} +1 -1
  60. package/dist/cli/{model-preflight-akj8g1m2.js → model-preflight-2zqrjnnh.js} +29 -29
  61. package/dist/cli/{pending-delegations-bqp6b6as.js → pending-delegations-9rt59skt.js} +3 -3
  62. package/dist/cli/{pr-subscriptions-wxjvkg56.js → pr-subscriptions-q51ze9rn.js} +3 -3
  63. package/dist/cli/{pr-workflow-gate-2wcrfa6g.js → pr-workflow-gate-3vj3f93g.js} +29 -29
  64. package/dist/cli/{scan-cursor-8br4x41t.js → scan-cursor-0fr17e5q.js} +2 -2
  65. package/dist/cli/{schema-mc419qh8.js → schema-10j951xn.js} +1 -1
  66. package/dist/cli/{scope-persistence-5gyjt70q.js → scope-persistence-jewjr6zg.js} +5 -5
  67. package/dist/cli/{server-bp247fqe.js → server-0s65qjx7.js} +29 -29
  68. package/dist/cli/{skill-generator-q4afafh3.js → skill-generator-7hxqq63r.js} +9 -9
  69. package/dist/cli/{snapshot-coordination-init-b4kmrgh7.js → snapshot-coordination-init-kh4dayg5.js} +29 -29
  70. package/dist/cli/{speckit-checkoff-1v02b2dt.js → speckit-checkoff-n8s920fs.js} +3 -3
  71. package/dist/cli/{workspace-snapshot-93gzfac2.js → workspace-snapshot-veqaqrjr.js} +2 -2
  72. package/dist/cli/{worktree-collision-ownership-84m9f5an.js → worktree-collision-ownership-7cz0a2sr.js} +4 -4
  73. package/dist/cli/{worktree-isolation-xwbszhja.js → worktree-isolation-4dbza44f.js} +29 -29
  74. package/dist/config/schema.d.ts +2 -0
  75. package/dist/full-auto/code-mode-program.d.ts +31 -0
  76. package/dist/full-auto/critic-tools.d.ts +18 -0
  77. package/dist/full-auto/policy.d.ts +17 -0
  78. package/dist/hooks/code-mode-wrapper.d.ts +28 -0
  79. package/dist/hooks/full-auto-intercept.d.ts +5 -0
  80. package/dist/hooks/full-auto-permission.d.ts +25 -0
  81. package/dist/hooks/pr-workflow-gate.d.ts +21 -1
  82. package/dist/hooks/utils.d.ts +15 -0
  83. package/dist/host/v2/agents-commands.d.ts +133 -7
  84. package/dist/host/v2/hook-budget.d.ts +37 -0
  85. package/dist/host/v2/hooks.d.ts +25 -2
  86. package/dist/host/v2/model-apply.d.ts +16 -6
  87. package/dist/host/v2/setup.d.ts +38 -0
  88. package/dist/host/v2/types.d.ts +27 -3
  89. package/dist/index.d.ts +15 -0
  90. package/dist/index.js +102 -98
  91. package/opencode-swarm.schema.json +8 -0
  92. package/package.json +1 -1
@@ -17,14 +17,14 @@ import {
17
17
  protectedRoots,
18
18
  redactDecisionLineForArchive,
19
19
  stableCanonicalStringify
20
- } from "./index-qzakbjcg.js";
20
+ } from "./index-bft3404e.js";
21
21
  import {
22
22
  detectStraySwarmDirs,
23
23
  readDoctorArtifact,
24
24
  removeStraySwarmDir,
25
25
  resolvePlanParallelizationFlag,
26
26
  runConfigDoctor
27
- } from "./index-c9g3hkjz.js";
27
+ } from "./index-yg4923ga.js";
28
28
  import {
29
29
  archiveEvidence,
30
30
  checkRequirementCoverage,
@@ -36,7 +36,7 @@ import {
36
36
  sanitizeTaskId,
37
37
  saveEvidence,
38
38
  validateProjectRoot
39
- } from "./index-pe77h482.js";
39
+ } from "./index-mff4szvk.js";
40
40
  import {
41
41
  EvaluationTaskV1Schema,
42
42
  GateAuditManifestV1Schema,
@@ -88,12 +88,12 @@ import {
88
88
  import {
89
89
  buildEscalationBriefing,
90
90
  readRecentEscalations
91
- } from "./index-dgyddtje.js";
91
+ } from "./index-bcn30s7q.js";
92
92
  import {
93
93
  alreadyCuratedThisGeneration,
94
94
  claimNextScanBatch,
95
95
  resolveCohortId
96
- } from "./index-z9mysg5m.js";
96
+ } from "./index-8x90j950.js";
97
97
  import {
98
98
  CURATOR_CONSOLIDATION_PROMPT,
99
99
  CURATOR_INIT_PROMPT,
@@ -112,13 +112,13 @@ import {
112
112
  getGroupCommitWriter,
113
113
  importLegacyJsonl,
114
114
  readPriorDriftReports
115
- } from "./index-12h2rtdj.js";
115
+ } from "./index-q49vqmzh.js";
116
116
  import {
117
117
  assertNoUnsettledCoderDispatch,
118
118
  listCoderSettlementWalStates,
119
119
  recoverCoderSettlement,
120
120
  recoverStaleCoderSettlements
121
- } from "./index-qaqyq25k.js";
121
+ } from "./index-y46b7a5g.js";
122
122
  import {
123
123
  BUNDLED_PROJECT_SKILL_ROOT,
124
124
  DEFAULT_SKILL_MIN_CONFIDENCE,
@@ -141,7 +141,7 @@ import {
141
141
  skillContractDigest,
142
142
  splitSkillFrontmatter,
143
143
  syncBundledProjectSkillsIfMissingAsync
144
- } from "./index-th667k1y.js";
144
+ } from "./index-xxvman1m.js";
145
145
  import {
146
146
  fastForwardToRefAsync,
147
147
  parsePorcelainV2Snapshot,
@@ -175,7 +175,7 @@ import {
175
175
  resolveRepoTopLevelAsync,
176
176
  resolveWorkingTreeDirtyPathsAsync,
177
177
  switchPrFeedbackTrackingCandidateAsync
178
- } from "./index-1v277wxc.js";
178
+ } from "./index-0vv7vzp8.js";
179
179
  import {
180
180
  buildCorrelationId,
181
181
  buildIssueUrl,
@@ -196,13 +196,13 @@ import {
196
196
  sweepStale,
197
197
  unsubscribe,
198
198
  updateSnapshot
199
- } from "./index-wgf1780e.js";
199
+ } from "./index-1j14kbak.js";
200
200
  import {
201
201
  WORKTREE_LIFECYCLE_LOCK_FILE,
202
202
  recordWorktreeProvisioningOwner,
203
203
  removeWorktreeProvisioningOwner,
204
204
  scanWorktreeProvisioningOwnersForRecovery
205
- } from "./index-b4kdms7x.js";
205
+ } from "./index-7rpcbnp8.js";
206
206
  import {
207
207
  CHECKOUT_MUTATION_ACTION_TIMEOUT_MS,
208
208
  DEFAULT_STALE_DELEGATION_TIMEOUT_MS,
@@ -275,7 +275,7 @@ import {
275
275
  writeAtomicJson,
276
276
  writePrWorkflowAtomicJson,
277
277
  writeStateWhileLocked
278
- } from "./index-0tygsk8b.js";
278
+ } from "./index-2nq7h5cj.js";
279
279
  import {
280
280
  getLanguageForExtension
281
281
  } from "./index-pt7h91zc.js";
@@ -318,7 +318,7 @@ import {
318
318
  swarmOverwriteCandidates,
319
319
  trackedDirtyCandidates,
320
320
  transientBackoff
321
- } from "./index-rzkmg02a.js";
321
+ } from "./index-5g0nrnyd.js";
322
322
  import {
323
323
  EPIC_MODE_CONFIG_DISABLED_MESSAGE,
324
324
  PlanRecoverySupersededError,
@@ -350,7 +350,7 @@ import {
350
350
  updateEpicRecord,
351
351
  updateTaskStatus,
352
352
  withPlanLifecycleLock
353
- } from "./index-w2bhrp6z.js";
353
+ } from "./index-dgv5xy0b.js";
354
354
  import {
355
355
  containsControlChars,
356
356
  containsPathTraversal,
@@ -367,7 +367,7 @@ import {
367
367
  resolveSpeckitProjection,
368
368
  validateSpeckit,
369
369
  writeProjectedSpecSync
370
- } from "./index-vtkgg2qn.js";
370
+ } from "./index-vyb5xf36.js";
371
371
  import {
372
372
  clearWorktreeMergeStatus,
373
373
  getAllWorktreeMergeFailures,
@@ -409,7 +409,7 @@ import {
409
409
  transitionTaskWorkflowEvidenceWithStatus,
410
410
  withTaskEvidenceTransaction,
411
411
  writeWorkflowWalFile
412
- } from "./index-sva5swrs.js";
412
+ } from "./index-j2x2ajz7.js";
413
413
  import {
414
414
  isPathUnderSwarmWorktreeBase,
415
415
  listLiveLaneOwners,
@@ -418,7 +418,7 @@ import {
418
418
  recordLiveLaneOwner,
419
419
  removeWorktree,
420
420
  resolveWorktreeBaseDir
421
- } from "./index-3exe6k66.js";
421
+ } from "./index-2r6d72m6.js";
422
422
  import {
423
423
  MAX_EVENT_LOG_ENTRIES,
424
424
  _internals,
@@ -430,7 +430,7 @@ import {
430
430
  recordHiveKnowledgeEvent,
431
431
  recordKnowledgeEvent,
432
432
  resolveKnowledgeEventsPath
433
- } from "./index-0ptf66x5.js";
433
+ } from "./index-v5nh2fhv.js";
434
434
  import {
435
435
  commitDisplayedMembership,
436
436
  commitEmptyRetrieval,
@@ -443,7 +443,7 @@ import {
443
443
  queryLiveMemberships,
444
444
  reconcilePhaseClose,
445
445
  recordPhaseCloseIntent
446
- } from "./index-parkaa70.js";
446
+ } from "./index-encs4mdm.js";
447
447
  import {
448
448
  sanitizeContextText
449
449
  } from "./index-m9zzj4ee.js";
@@ -454,7 +454,7 @@ import {
454
454
  readSwarmFileAsync,
455
455
  safeHook,
456
456
  validateSwarmPath
457
- } from "./index-xyvsdn07.js";
457
+ } from "./index-5q3hg1pk.js";
458
458
  import {
459
459
  appendUnactionable,
460
460
  quarantineEntry,
@@ -465,7 +465,7 @@ import {
465
465
  validateActionableFields,
466
466
  validateLesson,
467
467
  validateSkillPath
468
- } from "./index-sz67z90q.js";
468
+ } from "./index-44z8mv05.js";
469
469
  import {
470
470
  MAX_CURATION_PROPOSALS,
471
471
  authorizeCuration,
@@ -476,7 +476,7 @@ import {
476
476
  } from "./index-rtry5xyf.js";
477
477
  import {
478
478
  resolveWorktreeIsolationConfig
479
- } from "./index-51dw4bjc.js";
479
+ } from "./index-pmcvznag.js";
480
480
  import {
481
481
  RetrospectiveEvidenceSchema
482
482
  } from "./index-g22dps7x.js";
@@ -488,7 +488,7 @@ import {
488
488
  clearScopeBindings,
489
489
  readAuthoritativeScopeBindingSet,
490
490
  readDeclaredScopeFilesFromBindings
491
- } from "./index-2m740hyt.js";
491
+ } from "./index-eac47j2q.js";
492
492
  import {
493
493
  DEFAULT_QA_GATES,
494
494
  computeProfileHash,
@@ -513,7 +513,7 @@ import {
513
513
  replayFromLedgerWithStatus,
514
514
  resolvePlanningProfile,
515
515
  takeSnapshotEvent
516
- } from "./index-s8eac99p.js";
516
+ } from "./index-9cffn82s.js";
517
517
  import {
518
518
  MAX_COORDINATION_STATE_LIST_ROWS,
519
519
  deleteCoordinationImports,
@@ -601,7 +601,7 @@ import {
601
601
  transactFile,
602
602
  transactKnowledge,
603
603
  wordBigrams
604
- } from "./index-bn3aa5q1.js";
604
+ } from "./index-5c6zse74.js";
605
605
  import {
606
606
  readTailJsonl,
607
607
  readTailJsonlDetailed,
@@ -686,7 +686,7 @@ import {
686
686
  loadPluginConfig,
687
687
  loadPluginConfigWithMeta,
688
688
  resolveEpicConfig
689
- } from "./index-3020n6d9.js";
689
+ } from "./index-tmhwpzdg.js";
690
690
  import {
691
691
  addDeferredWarning,
692
692
  advisoryWarn,
@@ -734,7 +734,7 @@ import {
734
734
  resolveContextWindow,
735
735
  resolveGeneratedAgentRole,
736
736
  stripKnownSwarmPrefix
737
- } from "./index-p6v544jn.js";
737
+ } from "./index-5ph10kdd.js";
738
738
  import {
739
739
  AGENT_TOOL_MAP,
740
740
  ALL_AGENT_NAMES,
@@ -9662,7 +9662,7 @@ function isLaneOwnedByCurrentSession(branchName, expectedSessionId) {
9662
9662
  return extracted === expectedSessionId;
9663
9663
  }
9664
9664
  async function inspectStandardWorktreeCollisionOwnership(identity) {
9665
- const collisionOwnership = await import("./worktree-collision-ownership-84m9f5an.js");
9665
+ const collisionOwnership = await import("./worktree-collision-ownership-7cz0a2sr.js");
9666
9666
  return collisionOwnership.inspectStandardWorktreeCollisionOwnership(identity);
9667
9667
  }
9668
9668
  async function runRecoveryGit(directory, args, timeoutMs = 15000) {
@@ -10090,7 +10090,7 @@ async function precreateStandardWorktreeSession(args) {
10090
10090
  const laneProfile = computeLaneRuntimeProfile(worktreeConfig.runtime_isolation, laneIndex, handle.worktreePath);
10091
10091
  if (laneProfile) {
10092
10092
  try {
10093
- const { writeLaneProfileToDiskReal } = await import("./core-mfyaj8b4.js");
10093
+ const { writeLaneProfileToDiskReal } = await import("./core-7240e0vh.js");
10094
10094
  await writeLaneProfileToDiskReal(handle.worktreePath, laneProfile.laneIndex, laneProfile.envOverrides);
10095
10095
  } catch {}
10096
10096
  }
@@ -11084,7 +11084,7 @@ async function finishStandardWorktreeDispatch(directory, dispatch, config, callI
11084
11084
  }
11085
11085
  clearWorktreeMergeStatus(statusKey);
11086
11086
  try {
11087
- const { removeLaneProfileFromDiskReal } = await import("./core-mfyaj8b4.js");
11087
+ const { removeLaneProfileFromDiskReal } = await import("./core-7240e0vh.js");
11088
11088
  await removeLaneProfileFromDiskReal(dispatch.handle.worktreePath, dispatch.laneIndex);
11089
11089
  } catch {}
11090
11090
  const state = serializationStateBySessionID.get(dispatch.parentSessionID);
@@ -13881,6 +13881,18 @@ function classifyCommand(original) {
13881
13881
  });
13882
13882
  }
13883
13883
 
13884
+ // src/full-auto/code-mode-program.ts
13885
+ var BLOCKED_NAMES = new Set([
13886
+ "constructor",
13887
+ "prototype",
13888
+ "__proto__",
13889
+ "__defineGetter__",
13890
+ "__defineSetter__",
13891
+ "__lookupGetter__",
13892
+ "__lookupSetter__"
13893
+ ]);
13894
+ var SIMPLE_ESCAPES = new Set(["n", "r", "t", '"', "'", "\\", "/"]);
13895
+
13884
13896
  // src/full-auto/policy.ts
13885
13897
  var READ_ONLY_TOOLS = new Set([
13886
13898
  "check_gate_status",
@@ -28643,7 +28655,7 @@ function clearCriticalShownIds(sessionID) {
28643
28655
  async function rehydratePrSubscriptions(sessionID, directory) {
28644
28656
  const map = new Map;
28645
28657
  try {
28646
- const { listActive: listActive2 } = await import("./pr-subscriptions-wxjvkg56.js");
28658
+ const { listActive: listActive2 } = await import("./pr-subscriptions-q51ze9rn.js");
28647
28659
  const records = await listActive2(directory);
28648
28660
  for (const record of records) {
28649
28661
  if (record.sessionID !== sessionID)
@@ -28988,7 +29000,8 @@ var PrReviewValidationBatchRecordSchema = exports_external.object({
28988
29000
  lanes: exports_external.array(exports_external.object({
28989
29001
  laneId: exports_external.string().min(1),
28990
29002
  workflowLane: exports_external.string().min(1),
28991
- reviewItemIds: exports_external.array(exports_external.string().min(1)).min(1).max(MAX_PR_REVIEW_COLLECTION_RECEIPT_ITEM_IDS).optional()
29003
+ reviewItemIds: exports_external.array(exports_external.string().min(1)).min(1).max(MAX_PR_REVIEW_COLLECTION_RECEIPT_ITEM_IDS).optional(),
29004
+ agent: exports_external.string().min(1).optional()
28992
29005
  }).strict()).min(1),
28993
29006
  validatedAt: exports_external.string().min(1)
28994
29007
  }).strict();
@@ -31704,7 +31717,25 @@ function derivePrReviewOrderUnstableItemsForState(directory, state, ctx, assigne
31704
31717
  const composition = composePrReviewPhaseVerdicts(directory, state, "reviewer", ctx);
31705
31718
  return [...composition.claims.entries()].filter(([itemId, claim]) => claim.orderAgreement === "disagree" && assigned.has(itemId)).map(([itemId]) => itemId).sort();
31706
31719
  }
31720
+ function assertCriticLaneAgents(phase, lanes, generatedAgentNames) {
31721
+ if (phase !== "critic")
31722
+ return;
31723
+ for (const lane of lanes) {
31724
+ const agent = lane.agent?.trim();
31725
+ if (!agent) {
31726
+ throw new Error(`BLOCKED: PR_REVIEW critic lane "${lane.laneId ?? lane.workflowLane ?? "(unknown)"}" must declare its agent \u2014 only the critic agent may run critic lanes, so an undeclared agent cannot be admitted`);
31727
+ }
31728
+ const role = resolveGeneratedAgentRoleStrict(agent, generatedAgentNames);
31729
+ if (role !== "critic") {
31730
+ throw new Error(`BLOCKED: PR_REVIEW critic lane "${lane.laneId ?? lane.workflowLane ?? "(unknown)"}" uses invalid role "${role}" (agent "${agent}") \u2014 PR critic lanes must use the critic agent (critic_finding_validator and other critic-family roles cannot emit [CRITIC] rows)`);
31731
+ }
31732
+ }
31733
+ }
31734
+ function resolveGeneratedAgentRoleStrict(agent, generatedAgentNames) {
31735
+ return generatedAgentNames ? resolveGeneratedAgentRole(agent, generatedAgentNames) : getCanonicalAgentRole(agent);
31736
+ }
31707
31737
  async function recordPrReviewValidationBatch(directory, sessionID, phase, lanes, options) {
31738
+ assertCriticLaneAgents(phase, lanes, options.generatedAgentNames);
31708
31739
  let state = await bindPrWorkflowHead(directory, sessionID, options.prHeadSha);
31709
31740
  if (state.mode !== "PR_REVIEW")
31710
31741
  throw wrongModeError(state, "PR_REVIEW");
@@ -32323,7 +32354,7 @@ function assertIndependentFeedbackGateSessions(directory, state, throughPhase) {
32323
32354
  }
32324
32355
  const record = matching[0];
32325
32356
  const expectedRole = PR_FEEDBACK_PHASE_ROLE[batch.phase];
32326
- const roleMatches = record.normalizedAgent === expectedRole || expectedRole === "critic" && record.normalizedAgent.startsWith("critic_");
32357
+ const roleMatches = record.normalizedAgent === expectedRole;
32327
32358
  if (!roleMatches) {
32328
32359
  throw new Error(`BLOCKED: PR_FEEDBACK ${batch.phase} requires role ${expectedRole}, received ${record.normalizedAgent || "(unknown)"}`);
32329
32360
  }
@@ -35512,6 +35543,7 @@ function normalizeWorkflowLanes(lanes) {
35512
35543
  const normalized = lanes.map((lane) => {
35513
35544
  const workflowLane = lane.workflowLane?.trim();
35514
35545
  const laneId = lane.laneId?.trim() || workflowLane;
35546
+ const agent = lane.agent?.trim();
35515
35547
  if (!workflowLane || !laneId) {
35516
35548
  throw new Error("BLOCKED: PR workflow lane validation requires every lane to have non-empty laneId and workflow_lane values");
35517
35549
  }
@@ -35539,7 +35571,8 @@ function normalizeWorkflowLanes(lanes) {
35539
35571
  laneId,
35540
35572
  workflowLane,
35541
35573
  ...reviewItemIds ? { reviewItemIds } : {},
35542
- ...ownedWorkflowLanes ? { ownedWorkflowLanes } : {}
35574
+ ...ownedWorkflowLanes ? { ownedWorkflowLanes } : {},
35575
+ ...agent ? { agent } : {}
35543
35576
  };
35544
35577
  });
35545
35578
  assertNoDuplicates(normalized.map((lane) => lane.laneId), "lane ids");
@@ -37255,6 +37288,9 @@ function analyzeLaneArtifactIntegrity(args) {
37255
37288
  if (artifact.role !== record.normalizedAgent) {
37256
37289
  return failedLaneValidation("artifact.role", record.normalizedAgent, artifact.role);
37257
37290
  }
37291
+ if (expected.mode === "swarm-pr-review:critic" && record.normalizedAgent !== "critic") {
37292
+ return failedLaneValidation("record.normalized_agent", "critic", record.normalizedAgent || "(missing)");
37293
+ }
37258
37294
  if (artifact.source !== "collect_lane_results") {
37259
37295
  return failedLaneValidation("artifact.source", "collect_lane_results", artifact.source);
37260
37296
  }
@@ -39250,7 +39286,7 @@ async function handleAttestCommand(directory, args, sessionID) {
39250
39286
  `);
39251
39287
  }
39252
39288
  const taskId = args[0];
39253
- const { executeAttestTask } = await import("./attest-task-sg8b5a5j.js");
39289
+ const { executeAttestTask } = await import("./attest-task-k7b87zk8.js");
39254
39290
  const result = await executeAttestTask({
39255
39291
  task_id: taskId,
39256
39292
  working_directory: directory,
@@ -46442,9 +46478,9 @@ function hashContent(content) {
46442
46478
  return createHash28("sha1").update(content).digest("hex");
46443
46479
  }
46444
46480
  async function loadConfigForPolicyCurator(directory) {
46445
- const { KnowledgeConfigSchema: KnowledgeConfigSchema2 } = await import("./schema-mc419qh8.js");
46481
+ const { KnowledgeConfigSchema: KnowledgeConfigSchema2 } = await import("./schema-10j951xn.js");
46446
46482
  try {
46447
- const { loadPluginConfigWithMeta: loadPluginConfigWithMeta2 } = await import("./index-nawp90n7.js");
46483
+ const { loadPluginConfigWithMeta: loadPluginConfigWithMeta2 } = await import("./index-275w8rfx.js");
46448
46484
  const { config: loadedConfig } = loadPluginConfigWithMeta2(directory);
46449
46485
  return KnowledgeConfigSchema2.parse(loadedConfig.knowledge ?? {});
46450
46486
  } catch {
@@ -49502,7 +49538,7 @@ async function resolveCuratorLLMDelegate(directory, mode, sessionId) {
49502
49538
  const seam = _internals49.createCuratorLLMDelegate;
49503
49539
  if (seam)
49504
49540
  return seam(directory, mode, sessionId);
49505
- const { createCuratorLLMDelegate } = await import("./curator-llm-factory-vya4epq6.js");
49541
+ const { createCuratorLLMDelegate } = await import("./curator-llm-factory-wcv6x9pq.js");
49506
49542
  return createCuratorLLMDelegate(directory, mode, sessionId);
49507
49543
  }
49508
49544
  async function reconcileCloseTerminalStateForPlan(directory, targetPlan, options) {
@@ -49897,7 +49933,7 @@ async function runFinalizeStage(ctx) {
49897
49933
  }
49898
49934
  }
49899
49935
  try {
49900
- const { CuratorConfigSchema: CCS } = await import("./schema-mc419qh8.js");
49936
+ const { CuratorConfigSchema: CCS } = await import("./schema-10j951xn.js");
49901
49937
  const { config: pmLoadedConfig } = _internals49.loadPluginConfigWithMeta(ctx.directory);
49902
49938
  const curatorCfg = CCS.parse(pmLoadedConfig.curator ?? {});
49903
49939
  if (curatorCfg.enabled && curatorCfg.postmortem_enabled) {
@@ -53970,7 +54006,7 @@ function adviseClosingStop(directory) {
53970
54006
  }
53971
54007
  async function writeSnapshot(directory, state) {
53972
54008
  try {
53973
- const { ensureSnapshotCoordinationReady } = await import("./snapshot-coordination-init-b4kmrgh7.js");
54009
+ const { ensureSnapshotCoordinationReady } = await import("./snapshot-coordination-init-kh4dayg5.js");
53974
54010
  await ensureSnapshotCoordinationReady(directory);
53975
54011
  if (closingStopAdvisedRoots.size > 0) {
53976
54012
  closingStopAdvisedRoots.delete(canonicalProjectKey(directory));
@@ -57199,7 +57235,7 @@ function planMerges(active, threshold, maxComparisons, maxMerges) {
57199
57235
  };
57200
57236
  }
57201
57237
  async function sweepActiveNearDuplicates(directory, options = {}) {
57202
- const { loadPluginConfigWithMeta: loadPluginConfigWithMeta2 } = await import("./index-nawp90n7.js");
57238
+ const { loadPluginConfigWithMeta: loadPluginConfigWithMeta2 } = await import("./index-275w8rfx.js");
57203
57239
  const { config } = loadPluginConfigWithMeta2(directory);
57204
57240
  const sweepConfig = config.learning?.dedup_sweep;
57205
57241
  if (sweepConfig?.enabled === false)
@@ -58323,7 +58359,7 @@ async function runCuratorPhase(directory, phase, agentsDispatched, config, knowl
58323
58359
  }
58324
58360
  if (config.skill_generation_enabled === true && skillCandidates.length > 0) {
58325
58361
  try {
58326
- const skillModule = await import("./skill-generator-q4afafh3.js");
58362
+ const skillModule = await import("./skill-generator-7hxqq63r.js");
58327
58363
  for (const cand of skillCandidates) {
58328
58364
  if (cand.confidence < (config.min_skill_confidence ?? DEFAULT_SKILL_MIN_CONFIDENCE)) {
58329
58365
  continue;
@@ -58795,7 +58831,7 @@ async function applyCuratorKnowledgeUpdates(directory, recommendations, knowledg
58795
58831
  } catch {}
58796
58832
  }
58797
58833
  if (contradictedEntries.length > 0 && knowledgeConfig.contradiction_threshold_action === "quarantine") {
58798
- const { maybeQuarantineOnContradiction } = await import("./knowledge-escalator-zxd76jna.js");
58834
+ const { maybeQuarantineOnContradiction } = await import("./knowledge-escalator-s25vhfrt.js");
58799
58835
  for (const { id } of contradictedEntries) {
58800
58836
  try {
58801
58837
  await maybeQuarantineOnContradiction(directory, id, knowledgeConfig.contradiction_quarantine_threshold, knowledgeConfig.contradiction_quarantine_window_days);
@@ -59627,7 +59663,7 @@ async function runCuratorPostMortem(directory, options = {}) {
59627
59663
  warnings.push("Failed to collect knowledge summary.");
59628
59664
  }
59629
59665
  try {
59630
- const { getScanStatus } = await import("./scan-cursor-8br4x41t.js");
59666
+ const { getScanStatus } = await import("./scan-cursor-0fr17e5q.js");
59631
59667
  const scanStatus = await getScanStatus(directory);
59632
59668
  if (scanStatus.remaining_estimate > 0) {
59633
59669
  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.`);
@@ -59799,9 +59835,9 @@ var _internals71 = {
59799
59835
  verifyPostMortemKnowledgeActions,
59800
59836
  repairPostMortemActions,
59801
59837
  loadDefaultKnowledgeConfig: async (directory) => {
59802
- const { KnowledgeConfigSchema: KnowledgeConfigSchema2 } = await import("./schema-mc419qh8.js");
59838
+ const { KnowledgeConfigSchema: KnowledgeConfigSchema2 } = await import("./schema-10j951xn.js");
59803
59839
  try {
59804
- const { loadPluginConfigWithMeta: loadPluginConfigWithMeta2 } = await import("./index-nawp90n7.js");
59840
+ const { loadPluginConfigWithMeta: loadPluginConfigWithMeta2 } = await import("./index-275w8rfx.js");
59805
59841
  const loaded = loadPluginConfigWithMeta2(directory);
59806
59842
  return KnowledgeConfigSchema2.parse(loaded.config.knowledge ?? {});
59807
59843
  } catch {
@@ -59809,11 +59845,11 @@ var _internals71 = {
59809
59845
  }
59810
59846
  },
59811
59847
  applyCuratorKnowledgeUpdates: async (directory, recommendations, knowledgeConfig, generation) => {
59812
- const { applyCuratorKnowledgeUpdates: applyCuratorKnowledgeUpdates2 } = await import("./curator-1s64jkc3.js");
59848
+ const { applyCuratorKnowledgeUpdates: applyCuratorKnowledgeUpdates2 } = await import("./curator-1jhwv0ce.js");
59813
59849
  return applyCuratorKnowledgeUpdates2(directory, recommendations, knowledgeConfig, generation);
59814
59850
  },
59815
59851
  checkHivePromotions: async (entries2, knowledgeConfig, directory) => {
59816
- const { checkHivePromotions } = await import("./hive-promoter-ychygdgc.js");
59852
+ const { checkHivePromotions } = await import("./hive-promoter-f0rzkbww.js");
59817
59853
  return checkHivePromotions(entries2, knowledgeConfig, directory);
59818
59854
  },
59819
59855
  applyProposalTriage: async (directory, triage) => {
@@ -59822,7 +59858,7 @@ var _internals71 = {
59822
59858
  activateProposal,
59823
59859
  listSkills: listSkills2,
59824
59860
  sanitizeSlug
59825
- } = await import("./skill-generator-q4afafh3.js");
59861
+ } = await import("./skill-generator-7hxqq63r.js");
59826
59862
  const result = {
59827
59863
  approved: [],
59828
59864
  rejected: [],
@@ -59864,7 +59900,7 @@ var _internals71 = {
59864
59900
  return result;
59865
59901
  },
59866
59902
  readPriorDriftReports: async (directory) => {
59867
- const { readPriorDriftReports: readPriorDriftReports2 } = await import("./curator-drift-famx6p6s.js");
59903
+ const { readPriorDriftReports: readPriorDriftReports2 } = await import("./curator-drift-r4yttpe9.js");
59868
59904
  return readPriorDriftReports2(directory);
59869
59905
  },
59870
59906
  readSwarmKnowledge: (directory) => readKnowledge(resolveSwarmKnowledgePath(directory))
@@ -70135,9 +70171,9 @@ var _internals79 = {
70135
70171
  loadPluginConfigWithMeta,
70136
70172
  loadCuratorDeps: async () => {
70137
70173
  const [{ CuratorConfigSchema }, curator, { createCuratorLLMDelegate }] = await Promise.all([
70138
- import("./schema-mc419qh8.js"),
70139
- import("./curator-1s64jkc3.js"),
70140
- import("./curator-llm-factory-vya4epq6.js")
70174
+ import("./schema-10j951xn.js"),
70175
+ import("./curator-1jhwv0ce.js"),
70176
+ import("./curator-llm-factory-wcv6x9pq.js")
70141
70177
  ]);
70142
70178
  return { CuratorConfigSchema, curator, createCuratorLLMDelegate };
70143
70179
  }
@@ -72585,7 +72621,7 @@ async function computeCurationDiagnostics(directory, entries2) {
72585
72621
  let scanCompleted = false;
72586
72622
  let scanRemaining = 0;
72587
72623
  try {
72588
- const { getScanStatus } = await import("./scan-cursor-8br4x41t.js");
72624
+ const { getScanStatus } = await import("./scan-cursor-0fr17e5q.js");
72589
72625
  const status = await getScanStatus(directory);
72590
72626
  scanGeneration = status.generation;
72591
72627
  scanCompleted = status.completed;
@@ -72595,10 +72631,10 @@ async function computeCurationDiagnostics(directory, entries2) {
72595
72631
  try {
72596
72632
  const { isLinked: isLinked2 } = await import("./knowledge-link-wfhsfyn2.js");
72597
72633
  if (isLinked2(directory)) {
72598
- const { KnowledgeConfigSchema: KnowledgeConfigSchema2 } = await import("./schema-mc419qh8.js");
72634
+ const { KnowledgeConfigSchema: KnowledgeConfigSchema2 } = await import("./schema-10j951xn.js");
72599
72635
  let config;
72600
72636
  try {
72601
- const { loadPluginConfigWithMeta: loadPluginConfigWithMeta2 } = await import("./index-nawp90n7.js");
72637
+ const { loadPluginConfigWithMeta: loadPluginConfigWithMeta2 } = await import("./index-275w8rfx.js");
72602
72638
  const loaded = loadPluginConfigWithMeta2(directory);
72603
72639
  config = KnowledgeConfigSchema2.parse(loaded.config.knowledge ?? {});
72604
72640
  } catch {
@@ -74078,7 +74114,7 @@ async function handleDoctorCommand(directory, args) {
74078
74114
  const result = runConfigDoctor(config, directory, planParallelizationEnabled);
74079
74115
  let output;
74080
74116
  if (enableAutoFix && result.hasAutoFixableIssues) {
74081
- const { runConfigDoctorWithFixes } = await import("./config-doctor-0fnrwkga.js");
74117
+ const { runConfigDoctorWithFixes } = await import("./config-doctor-8keyw62b.js");
74082
74118
  const fixResult = await runConfigDoctorWithFixes(directory, config, true, {
74083
74119
  applyLossy: true
74084
74120
  });
@@ -74116,7 +74152,7 @@ async function handleDoctorCommand(directory, args) {
74116
74152
  `;
74117
74153
  }
74118
74154
  try {
74119
- const { runModelPreflight } = await import("./model-preflight-akj8g1m2.js");
74155
+ const { runModelPreflight } = await import("./model-preflight-2zqrjnnh.js");
74120
74156
  const preflight = await runModelPreflight(config, swarmState.opencodeClient, { generatedAgentNames: swarmState.generatedAgentNames });
74121
74157
  const missingSelection = preflight.resolutions.filter((resolution) => resolution.status === "missing-selection");
74122
74158
  const unresolved = preflight.catalogAvailable ? preflight.resolutions.filter((resolution) => resolution.status === "unresolved") : [];
@@ -74150,7 +74186,7 @@ async function handleDoctorCommand(directory, args) {
74150
74186
  }
74151
74187
  } catch {}
74152
74188
  try {
74153
- const { renderKnowledgeReceiptPhaseIdSection } = await import("./doctor-knowledge-receipt-phase-id-v4y6pbek.js");
74189
+ const { renderKnowledgeReceiptPhaseIdSection } = await import("./doctor-knowledge-receipt-phase-id-1v5fx0rk.js");
74154
74190
  output += await renderKnowledgeReceiptPhaseIdSection(directory, enableAutoFix);
74155
74191
  } catch {}
74156
74192
  const strayDirs = detectStraySwarmDirs(directory);
@@ -76167,7 +76203,7 @@ async function handleEvidenceCommand(directory, args) {
76167
76203
  return formatTaskEvidenceMarkdown(evidenceData);
76168
76204
  }
76169
76205
  async function handleEvidenceSummaryCommand(directory) {
76170
- const { buildEvidenceSummary } = await import("./evidence-summary-service-rd7y6yjq.js");
76206
+ const { buildEvidenceSummary } = await import("./evidence-summary-service-zkbzsjbf.js");
76171
76207
  const artifact = await buildEvidenceSummary(directory);
76172
76208
  if (!artifact) {
76173
76209
  return "No plan found. Run `/swarm plan` to check plan status.";
@@ -77083,6 +77119,15 @@ ${line}`;
77083
77119
  return result;
77084
77120
  }
77085
77121
 
77122
+ // src/full-auto/critic-tools.ts
77123
+ var FULL_AUTO_CRITIC_DENIED_TOOLS = Object.freeze({
77124
+ write: false,
77125
+ edit: false,
77126
+ patch: false,
77127
+ bash: false,
77128
+ shell: false
77129
+ });
77130
+
77086
77131
  // src/full-auto/oversight.ts
77087
77132
  function remainingMs(deadlineMs) {
77088
77133
  return Math.max(0, deadlineMs - _internals89.now());
@@ -100596,7 +100641,7 @@ function createCuratorLLMDelegate(directory, mode = "init", sessionId) {
100596
100641
  }
100597
100642
  const sdkOpts = signal ? { signal } : {};
100598
100643
  try {
100599
- const { getSwarmAgents: getSwarmAgents2, resolveFallbackModel: resolveFallbackModel2 } = await import("./index-f6nrw8am.js");
100644
+ const { getSwarmAgents: getSwarmAgents2, resolveFallbackModel: resolveFallbackModel2 } = await import("./index-x48h0zsw.js");
100600
100645
  const createResult = await client.session.create({
100601
100646
  ...sessionId ? {
100602
100647
  body: {
@@ -102695,7 +102740,7 @@ async function cancelPrFeedbackLoopUnlocked(directory, sessionID, reason) {
102695
102740
  clearedEvents: []
102696
102741
  };
102697
102742
  try {
102698
- const { cancelPrFeedbackPublication: cancelPrFeedbackPublication2 } = await import("./pr-workflow-gate-2wcrfa6g.js");
102743
+ const { cancelPrFeedbackPublication: cancelPrFeedbackPublication2 } = await import("./pr-workflow-gate-3vj3f93g.js");
102699
102744
  await cancelPrFeedbackPublication2(directory, sessionID, reason);
102700
102745
  } catch (err) {
102701
102746
  warn(`[pr-feedback-loop] cancelPrFeedbackPublication failed (fail-open): ${err instanceof Error ? err.message : String(err)}`);
@@ -119325,7 +119370,7 @@ function buildDetailedHelp(commandName, entry) {
119325
119370
  async function handleHelpCommand(ctx) {
119326
119371
  const targetCommand = ctx.args.join(" ");
119327
119372
  if (!targetCommand) {
119328
- const { buildHelpText } = await import("./index-2dm42tgp.js");
119373
+ const { buildHelpText } = await import("./index-dygkt0ne.js");
119329
119374
  return buildHelpText();
119330
119375
  }
119331
119376
  const tokens = targetCommand.split(/\s+/);
@@ -119339,7 +119384,7 @@ async function handleHelpCommand(ctx) {
119339
119384
  > Note: \`/swarm ${resolved.key}\` is a deprecated alias for \`/swarm ${aliasTarget}\`.` : detailed;
119340
119385
  }
119341
119386
  const similar = _internals38.findSimilarCommands(targetCommand);
119342
- const { buildHelpText: fullHelp } = await import("./index-2dm42tgp.js");
119387
+ const { buildHelpText: fullHelp } = await import("./index-dygkt0ne.js");
119343
119388
  if (similar.length > 0) {
119344
119389
  return `Command '/swarm ${targetCommand}' not found.
119345
119390
 
@@ -119667,7 +119712,7 @@ var COMMAND_REGISTRY = {
119667
119712
  },
119668
119713
  "guardrail explain": {
119669
119714
  handler: async (ctx) => {
119670
- const { handleGuardrailExplain } = await import("./guardrail-explain-8fkhq0cg.js");
119715
+ const { handleGuardrailExplain } = await import("./guardrail-explain-g95j8z79.js");
119671
119716
  return handleGuardrailExplain(ctx.directory, ctx.args);
119672
119717
  },
119673
119718
  description: "Dry-run: show what the guardrails would do to a command or write target (executes nothing)",
@@ -119677,7 +119722,7 @@ var COMMAND_REGISTRY = {
119677
119722
  },
119678
119723
  "guardrail reset": {
119679
119724
  handler: async (ctx) => {
119680
- const { handleGuardrailReset } = await import("./guardrail-reset-bmg6czzk.js");
119725
+ const { handleGuardrailReset } = await import("./guardrail-reset-rgbt0zgy.js");
119681
119726
  return handleGuardrailReset(ctx.args, ctx.sessionID);
119682
119727
  },
119683
119728
  description: "Reset one exact active invocation/action circuit after repair",
@@ -119698,7 +119743,7 @@ var COMMAND_REGISTRY = {
119698
119743
  },
119699
119744
  "guardrail-log": {
119700
119745
  handler: async (ctx) => {
119701
- const { handleGuardrailLog } = await import("./guardrail-log-gdj19fq5.js");
119746
+ const { handleGuardrailLog } = await import("./guardrail-log-0xjg12y1.js");
119702
119747
  return handleGuardrailLog(ctx.directory, ctx.args);
119703
119748
  },
119704
119749
  description: "Read the guardrail decision log (use --blocks-only for blocks)",
@@ -27,7 +27,7 @@ import {
27
27
  import {
28
28
  init_loader,
29
29
  loadPluginConfig
30
- } from "./index-3020n6d9.js";
30
+ } from "./index-tmhwpzdg.js";
31
31
  import {
32
32
  criticalWarn,
33
33
  init_logger,
@@ -36,7 +36,7 @@ import {
36
36
  import {
37
37
  init_package,
38
38
  package_default
39
- } from "./index-p6v544jn.js";
39
+ } from "./index-5ph10kdd.js";
40
40
 
41
41
  // src/plan/planning-profile.ts
42
42
  init_loader();
@@ -4,7 +4,7 @@ import {
4
4
  readShellAuditTail,
5
5
  redactPath,
6
6
  redactShellCommand
7
- } from "./index-qzakbjcg.js";
7
+ } from "./index-bft3404e.js";
8
8
 
9
9
  // src/services/guardrail-log-service.ts
10
10
  var BLOCK_TYPES = new Set([