opencode-swarm 7.185.0 → 7.185.1

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 (93) hide show
  1. package/README.md +5 -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/background/pr-review-trigger-receipt-reader.d.ts +35 -0
  5. package/dist/cli/{auto-checkpoint-adn8bg66.js → auto-checkpoint-2jecngee.js} +7 -7
  6. package/dist/cli/{checkpoint-dvyx8gee.js → checkpoint-qm05wdbh.js} +14 -14
  7. package/dist/cli/{coder-settlement-95dv9r28.js → coder-settlement-56prayae.js} +10 -10
  8. package/dist/cli/{config-doctor-f2jtx8y5.js → config-doctor-3b99vx74.js} +2 -2
  9. package/dist/cli/{core-xn2epqfk.js → core-cxnqsrxp.js} +3 -3
  10. package/dist/cli/{curation-policy-swnyg1jr.js → curation-policy-ytzwb080.js} +4 -4
  11. package/dist/cli/{curator-91rqz7xg.js → curator-5k3mktpe.js} +39 -39
  12. package/dist/cli/{curator-drift-qem70sry.js → curator-drift-dt4g79a4.js} +8 -8
  13. package/dist/cli/curator-llm-factory-hkk29g2y.js +81 -0
  14. package/dist/cli/{evidence-summary-service-n7ndpen0.js → evidence-summary-service-8e2fghz0.js} +17 -17
  15. package/dist/cli/{gate-evidence-ajh95p02.js → gate-evidence-vk8rebsx.js} +5 -5
  16. package/dist/cli/guardrail-explain-ma658hkw.js +82 -0
  17. package/dist/cli/{guardrail-log-b23sf549.js → guardrail-log-m6mydjet.js} +6 -6
  18. package/dist/cli/{guardrail-reset-e6njf0hv.js → guardrail-reset-w41yndke.js} +39 -39
  19. package/dist/cli/{hive-promoter-8dqvfwsx.js → hive-promoter-400xzdds.js} +39 -39
  20. package/dist/cli/{index-26nhk01d.js → index-07bk0zm9.js} +1 -1
  21. package/dist/cli/{index-sz755xt1.js → index-1fc5aj26.js} +1 -1
  22. package/dist/cli/{index-s0c1wxtt.js → index-2b3bgm20.js} +1 -1
  23. package/dist/cli/{index-zxm9h19f.js → index-2c6e1p7j.js} +3 -3
  24. package/dist/cli/{index-gemq38en.js → index-373880cv.js} +1 -1
  25. package/dist/cli/{index-cah5ffkh.js → index-5n08z6qj.js} +5 -5
  26. package/dist/cli/{index-62z1vsvf.js → index-62akgg9d.js} +1 -1
  27. package/dist/cli/{index-h5f5q60s.js → index-6sffjy74.js} +1 -1
  28. package/dist/cli/{index-m7g4dsr4.js → index-6wqv8f7d.js} +5 -5
  29. package/dist/cli/{index-s5xmvt3k.js → index-74yxwf8y.js} +1 -1
  30. package/dist/cli/{index-v5k5jw0r.js → index-7jt24hpz.js} +2 -2
  31. package/dist/cli/{index-9am1ry6w.js → index-7n3h39h9.js} +7 -7
  32. package/dist/cli/{index-97nbaxye.js → index-8nsjefpc.js} +1 -1
  33. package/dist/cli/{index-1zpgtnhp.js → index-9g61bfj9.js} +1 -1
  34. package/dist/cli/{index-vfr3z9rv.js → index-9h93zjm3.js} +1 -1
  35. package/dist/cli/{index-t9jr6zc7.js → index-afmyp3kt.js} +1 -1
  36. package/dist/cli/{index-qccnny3g.js → index-cnbpht7m.js} +3 -3
  37. package/dist/cli/{index-qqjqpmhj.js → index-cp2nerjd.js} +5 -5
  38. package/dist/cli/{index-hx9vyvx0.js → index-dryhmaft.js} +3 -3
  39. package/dist/cli/{index-359w27b1.js → index-dz5cbkrm.js} +4 -4
  40. package/dist/cli/{index-2tv5zp9x.js → index-ek5gvpvm.js} +7 -7
  41. package/dist/cli/{index-djen6c7q.js → index-ekyg4p8b.js} +1 -1
  42. package/dist/cli/{index-f3grtpy3.js → index-fa014mra.js} +3 -3
  43. package/dist/cli/{index-zkm995wa.js → index-hgfkcb1q.js} +162 -114
  44. package/dist/cli/{index-e5wczpj3.js → index-m1bhg85z.js} +2 -2
  45. package/dist/cli/{index-7jqnckzg.js → index-nen885g8.js} +1 -1
  46. package/dist/cli/{index-rcx4kb02.js → index-nhw5rt5x.js} +4 -4
  47. package/dist/cli/{index-2e7h9yw5.js → index-nw16apxs.js} +5 -5
  48. package/dist/cli/{index-tmd5j8kh.js → index-pa6fzbms.js} +4 -4
  49. package/dist/cli/{index-rp0pyywc.js → index-ppj5bjaq.js} +7 -7
  50. package/dist/cli/{index-6wy9m25t.js → index-pppjg0ct.js} +10 -10
  51. package/dist/cli/{index-fkzv0hj4.js → index-r9zc92pb.js} +41 -41
  52. package/dist/cli/{index-w7sftxdy.js → index-rr1dggfe.js} +1 -1
  53. package/dist/cli/{index-73vnyt4b.js → index-rtznwf0g.js} +39 -39
  54. package/dist/cli/{index-3fnpjy4g.js → index-s68z4a39.js} +2 -2
  55. package/dist/cli/{index-n0wyd905.js → index-s7va6n84.js} +3 -3
  56. package/dist/cli/{index-erv39311.js → index-smwybqka.js} +2 -2
  57. package/dist/cli/{index-gxjy9y0t.js → index-ss6b8jpz.js} +2 -2
  58. package/dist/cli/{index-yg15df3b.js → index-vqz0avr4.js} +2 -2
  59. package/dist/cli/{index-p544ppcp.js → index-xgdypzch.js} +1 -1
  60. package/dist/cli/{index-4ysdy8sx.js → index-ycqsnfd1.js} +4 -4
  61. package/dist/cli/{index-580t912d.js → index-yj7etak0.js} +1 -1
  62. package/dist/cli/{index-fmxty2h3.js → index-zt3taseq.js} +2 -2
  63. package/dist/cli/{index-zyz0xp2b.js → index-zxck9sr7.js} +1 -1
  64. package/dist/cli/index.js +40 -40
  65. package/dist/cli/{knowledge-escalator-xdz6vg62.js → knowledge-escalator-30bb9fyg.js} +11 -11
  66. package/dist/cli/{knowledge-events-dnca00ye.js → knowledge-events-gfbx97x0.js} +9 -9
  67. package/dist/cli/{knowledge-link-y653vvr8.js → knowledge-link-dv78fb9g.js} +3 -3
  68. package/dist/cli/{knowledge-store-yc20na25.js → knowledge-store-2ssd489f.js} +4 -4
  69. package/dist/cli/{knowledge-validator-c2kfrqdy.js → knowledge-validator-7bxvezgv.js} +6 -6
  70. package/dist/cli/{mcp-mefjep3p.js → mcp-apr65eya.js} +1 -1
  71. package/dist/cli/{model-preflight-5xcxc75n.js → model-preflight-g7b12yn2.js} +39 -39
  72. package/dist/cli/{pending-delegations-emhmdkn4.js → pending-delegations-x8q7cxr7.js} +10 -10
  73. package/dist/cli/{pr-subscriptions-amc1z05d.js → pr-subscriptions-qwr6ybcb.js} +10 -10
  74. package/dist/cli/{pr-workflow-gate-gpq41zx9.js → pr-workflow-gate-qd5tfkak.js} +39 -39
  75. package/dist/cli/{runner-ss88pbb2.js → runner-tb3eppeg.js} +4 -4
  76. package/dist/cli/{scan-cursor-71gq82ez.js → scan-cursor-1m6dj2s2.js} +5 -5
  77. package/dist/cli/{schema-108trhk6.js → schema-yvhamv41.js} +1 -1
  78. package/dist/cli/{scope-persistence-9gfgvy3p.js → scope-persistence-xdedbzdg.js} +13 -13
  79. package/dist/cli/{server-pkk6y7fa.js → server-nhdkvdt2.js} +39 -39
  80. package/dist/cli/{skill-generator-7g6xjwhr.js → skill-generator-fzvp9m8z.js} +13 -13
  81. package/dist/cli/{snapshot-coordination-init-pactfmsy.js → snapshot-coordination-init-xqxek8kn.js} +39 -39
  82. package/dist/cli/{speckit-checkoff-xyp4c36r.js → speckit-checkoff-57tf4079.js} +4 -4
  83. package/dist/cli/{workspace-snapshot-0hffyjhd.js → workspace-snapshot-kcfkk3a2.js} +3 -3
  84. package/dist/cli/{worktree-collision-ownership-g26m4c10.js → worktree-collision-ownership-80n814a8.js} +11 -11
  85. package/dist/cli/{worktree-isolation-52529c62.js → worktree-isolation-kaxkr61t.js} +39 -39
  86. package/dist/hooks/extractors.d.ts +24 -0
  87. package/dist/index.js +21 -17
  88. package/dist/pr-review/completion.d.ts +14 -1
  89. package/dist/pr-review/types.d.ts +8 -1
  90. package/dist/tools/write-pr-review-trigger-eval.d.ts +2 -0
  91. package/package.json +1 -1
  92. package/dist/cli/curator-llm-factory-tr6rabws.js +0 -81
  93. package/dist/cli/guardrail-explain-cne2701m.js +0 -82
@@ -8,13 +8,13 @@ import {
8
8
  protectedRoots,
9
9
  redactDecisionLineForArchive,
10
10
  stableCanonicalStringify
11
- } from "./index-gxjy9y0t.js";
11
+ } from "./index-ss6b8jpz.js";
12
12
  import {
13
13
  detectStraySwarmDirs,
14
14
  readDoctorArtifact,
15
15
  removeStraySwarmDir,
16
16
  runConfigDoctor
17
- } from "./index-vfr3z9rv.js";
17
+ } from "./index-9h93zjm3.js";
18
18
  import {
19
19
  archiveEvidence,
20
20
  checkRequirementCoverage,
@@ -26,7 +26,7 @@ import {
26
26
  sanitizeTaskId,
27
27
  saveEvidence,
28
28
  validateProjectRoot
29
- } from "./index-tmd5j8kh.js";
29
+ } from "./index-pa6fzbms.js";
30
30
  import {
31
31
  LANGUAGE_REGISTRY,
32
32
  _internals as _internals3,
@@ -44,7 +44,7 @@ import {
44
44
  runEvaluation,
45
45
  runExternalTool,
46
46
  withDisposableWorktree
47
- } from "./index-sz755xt1.js";
47
+ } from "./index-1fc5aj26.js";
48
48
  import {
49
49
  EvaluationTaskV1Schema,
50
50
  GateAuditManifestV1Schema,
@@ -61,7 +61,7 @@ import {
61
61
  saveGateAuditResult,
62
62
  savePromotionDecision,
63
63
  saveTaskSetSnapshot
64
- } from "./index-62z1vsvf.js";
64
+ } from "./index-62akgg9d.js";
65
65
  import {
66
66
  canonicalHash,
67
67
  canonicalJson,
@@ -77,7 +77,7 @@ import {
77
77
  alreadyCuratedThisGeneration,
78
78
  claimNextScanBatch,
79
79
  resolveCohortId
80
- } from "./index-erv39311.js";
80
+ } from "./index-smwybqka.js";
81
81
  import {
82
82
  CURATOR_CONSOLIDATION_PROMPT,
83
83
  CURATOR_INIT_PROMPT,
@@ -96,13 +96,13 @@ import {
96
96
  getGroupCommitWriter,
97
97
  importLegacyJsonl,
98
98
  readPriorDriftReports
99
- } from "./index-n0wyd905.js";
99
+ } from "./index-s7va6n84.js";
100
100
  import {
101
101
  assertNoUnsettledCoderDispatch,
102
102
  listCoderSettlementWalStates,
103
103
  recoverCoderSettlement,
104
104
  recoverStaleCoderSettlements
105
- } from "./index-2tv5zp9x.js";
105
+ } from "./index-ek5gvpvm.js";
106
106
  import {
107
107
  BUNDLED_PROJECT_SKILL_ROOT,
108
108
  DEFAULT_SKILL_MIN_CONFIDENCE,
@@ -123,11 +123,11 @@ import {
123
123
  retireSkill,
124
124
  selectCandidateEntries,
125
125
  syncBundledProjectSkillsIfMissingAsync
126
- } from "./index-359w27b1.js";
126
+ } from "./index-dz5cbkrm.js";
127
127
  import {
128
128
  buildEscalationBriefing,
129
129
  readRecentEscalations
130
- } from "./index-cah5ffkh.js";
130
+ } from "./index-5n08z6qj.js";
131
131
  import {
132
132
  parsePorcelainV2Snapshot,
133
133
  resolveCommitCountSince,
@@ -155,7 +155,7 @@ import {
155
155
  resolveRemoteUrlIdentity,
156
156
  resolveRemoteUrlIdentityAsync,
157
157
  switchPrFeedbackTrackingCandidateAsync
158
- } from "./index-3fnpjy4g.js";
158
+ } from "./index-s68z4a39.js";
159
159
  import {
160
160
  buildCorrelationId,
161
161
  buildIssueUrl,
@@ -176,12 +176,12 @@ import {
176
176
  sweepStale,
177
177
  unsubscribe,
178
178
  updateSnapshot
179
- } from "./index-qqjqpmhj.js";
179
+ } from "./index-cp2nerjd.js";
180
180
  import {
181
181
  WORKTREE_LIFECYCLE_LOCK_FILE,
182
182
  recordWorktreeProvisioningOwner,
183
183
  removeWorktreeProvisioningOwner
184
- } from "./index-yg15df3b.js";
184
+ } from "./index-vqz0avr4.js";
185
185
  import {
186
186
  getLanguageForExtension
187
187
  } from "./index-pt7h91zc.js";
@@ -194,7 +194,7 @@ import {
194
194
  checkpoint,
195
195
  createSwarmTool,
196
196
  resolveWorkingDirectory
197
- } from "./index-rcx4kb02.js";
197
+ } from "./index-nhw5rt5x.js";
198
198
  import {
199
199
  MAX_TRANSIENT_RETRIES,
200
200
  PlanRecoverySupersededError,
@@ -222,7 +222,7 @@ import {
222
222
  transientBackoff,
223
223
  updateTaskStatus,
224
224
  withPlanLifecycleLock
225
- } from "./index-6wy9m25t.js";
225
+ } from "./index-pppjg0ct.js";
226
226
  import {
227
227
  containsControlChars,
228
228
  containsPathTraversal,
@@ -238,7 +238,7 @@ import {
238
238
  resolveSpeckitProjection,
239
239
  validateSpeckit,
240
240
  writeProjectedSpecSync
241
- } from "./index-s0c1wxtt.js";
241
+ } from "./index-2b3bgm20.js";
242
242
  import {
243
243
  clearWorktreeMergeStatus,
244
244
  getAllWorktreeMergeFailures,
@@ -269,7 +269,7 @@ import {
269
269
  transitionTaskWorkflowEvidenceWithStatus,
270
270
  withTaskEvidenceTransaction,
271
271
  writeWorkflowWalFile
272
- } from "./index-qccnny3g.js";
272
+ } from "./index-cnbpht7m.js";
273
273
  import {
274
274
  isPathUnderSwarmWorktreeBase,
275
275
  listLiveLaneOwners,
@@ -278,7 +278,7 @@ import {
278
278
  recordLiveLaneOwner,
279
279
  removeWorktree,
280
280
  resolveWorktreeBaseDir
281
- } from "./index-zxm9h19f.js";
281
+ } from "./index-2c6e1p7j.js";
282
282
  import {
283
283
  DEFAULT_STALE_DELEGATION_TIMEOUT_MS,
284
284
  DELEGATION_COMPACTION_HIGH_WATER_BYTES,
@@ -312,7 +312,7 @@ import {
312
312
  scanBackgroundCoderReservationsForAdmission,
313
313
  scanDelegationsForRecovery,
314
314
  sweepStaleDelegations
315
- } from "./index-2e7h9yw5.js";
315
+ } from "./index-nw16apxs.js";
316
316
  import {
317
317
  MAX_EVENT_LOG_ENTRIES,
318
318
  _internals,
@@ -331,7 +331,7 @@ import {
331
331
  recordKnowledgeEvent,
332
332
  recordPhaseCloseIntent,
333
333
  resolveKnowledgeEventsPath
334
- } from "./index-rp0pyywc.js";
334
+ } from "./index-ppj5bjaq.js";
335
335
  import {
336
336
  estimateCharsForTokens,
337
337
  estimateTokens,
@@ -339,7 +339,7 @@ import {
339
339
  readSwarmFileAsync,
340
340
  safeHook,
341
341
  validateSwarmPath
342
- } from "./index-t9jr6zc7.js";
342
+ } from "./index-afmyp3kt.js";
343
343
  import {
344
344
  bunFile,
345
345
  bunSpawn,
@@ -359,18 +359,18 @@ import {
359
359
  validateActionableFields,
360
360
  validateLesson,
361
361
  validateSkillPath
362
- } from "./index-4ysdy8sx.js";
362
+ } from "./index-ycqsnfd1.js";
363
363
  import {
364
364
  MAX_CURATION_PROPOSALS,
365
365
  authorizeCuration,
366
366
  buildConfigFingerprintInput
367
- } from "./index-97nbaxye.js";
367
+ } from "./index-8nsjefpc.js";
368
368
  import {
369
369
  cohortConfigFingerprint
370
370
  } from "./index-rtry5xyf.js";
371
371
  import {
372
372
  resolveWorktreeIsolationConfig
373
- } from "./index-v5k5jw0r.js";
373
+ } from "./index-7jt24hpz.js";
374
374
  import {
375
375
  RetrospectiveEvidenceSchema
376
376
  } from "./index-frcemc0b.js";
@@ -382,7 +382,7 @@ import {
382
382
  clearScopeBindings,
383
383
  readAuthoritativeScopeBindingSet,
384
384
  readDeclaredScopeFilesFromBindings
385
- } from "./index-m7g4dsr4.js";
385
+ } from "./index-6wqv8f7d.js";
386
386
  import {
387
387
  clearPlanLedgerForReset,
388
388
  computePlanStructureHash,
@@ -398,7 +398,7 @@ import {
398
398
  replayFromLedgerWithStatus,
399
399
  resolvePlanningProfile,
400
400
  takeSnapshotEvent
401
- } from "./index-hx9vyvx0.js";
401
+ } from "./index-dryhmaft.js";
402
402
  import {
403
403
  CORE_EVENT_LOCKED,
404
404
  appendCoreEventSync,
@@ -408,7 +408,7 @@ import {
408
408
  hasSpecDriftAuditEvent,
409
409
  hasTaskRepairAuditEvent,
410
410
  readCoreEvents
411
- } from "./index-gemq38en.js";
411
+ } from "./index-373880cv.js";
412
412
  import {
413
413
  DEFAULT_QA_GATES,
414
414
  computeProfileHash,
@@ -416,7 +416,7 @@ import {
416
416
  getEffectiveGates,
417
417
  getProfileLookupForIdentity,
418
418
  setGatesForIdentity
419
- } from "./index-1zpgtnhp.js";
419
+ } from "./index-9g61bfj9.js";
420
420
  import {
421
421
  MAX_COORDINATION_STATE_LIST_ROWS,
422
422
  deleteCoordinationImports,
@@ -427,7 +427,7 @@ import {
427
427
  listCoordinationStates,
428
428
  transitionCoordinationState,
429
429
  withCoordinationTransaction
430
- } from "./index-7jqnckzg.js";
430
+ } from "./index-nen885g8.js";
431
431
  import {
432
432
  DURABILITY_CLASSES,
433
433
  closeAllProjectDbs,
@@ -436,7 +436,7 @@ import {
436
436
  projectDbExists,
437
437
  projectDbPath,
438
438
  withImmediateTransaction
439
- } from "./index-s5xmvt3k.js";
439
+ } from "./index-74yxwf8y.js";
440
440
  import {
441
441
  canonicalExistingFilesystemPath,
442
442
  canonicalPathForFutureIo,
@@ -456,7 +456,7 @@ import {
456
456
  observeModelLimitResolution,
457
457
  observeStoreHealth,
458
458
  readLearningHealth
459
- } from "./index-p544ppcp.js";
459
+ } from "./index-xgdypzch.js";
460
460
  import {
461
461
  appendKnowledge,
462
462
  appendRejectedLesson,
@@ -487,7 +487,7 @@ import {
487
487
  transactFile,
488
488
  transactKnowledge,
489
489
  wordBigrams
490
- } from "./index-9am1ry6w.js";
490
+ } from "./index-7n3h39h9.js";
491
491
  import {
492
492
  readTailJsonl,
493
493
  readTailJsonlDetailed,
@@ -508,10 +508,10 @@ import {
508
508
  resolveLinkDir,
509
509
  sanitizeLinkId,
510
510
  writeLinkPointer
511
- } from "./index-zyz0xp2b.js";
511
+ } from "./index-zxck9sr7.js";
512
512
  import {
513
513
  atomicWriteFile
514
- } from "./index-h5f5q60s.js";
514
+ } from "./index-6sffjy74.js";
515
515
  import {
516
516
  withEvidenceLock
517
517
  } from "./index-6cjpmvpa.js";
@@ -554,7 +554,7 @@ import {
554
554
  matchTempGrammar,
555
555
  parseTargetBasename,
556
556
  resetSwarmArtifactCache
557
- } from "./index-580t912d.js";
557
+ } from "./index-yj7etak0.js";
558
558
  import {
559
559
  PlanSchema,
560
560
  TaskStatusSchema,
@@ -568,7 +568,7 @@ import {
568
568
  loadGateOverrides,
569
569
  loadPluginConfig,
570
570
  loadPluginConfigWithMeta
571
- } from "./index-djen6c7q.js";
571
+ } from "./index-ekyg4p8b.js";
572
572
  import {
573
573
  addDeferredWarning,
574
574
  advisoryWarn,
@@ -600,7 +600,7 @@ import {
600
600
  resolveContextWindow,
601
601
  resolveGeneratedAgentRole,
602
602
  stripKnownSwarmPrefix
603
- } from "./index-w7sftxdy.js";
603
+ } from "./index-rr1dggfe.js";
604
604
  import {
605
605
  AGENT_TOOL_MAP,
606
606
  ALL_AGENT_NAMES,
@@ -770,7 +770,6 @@ init_loader();
770
770
  // src/hooks/pr-workflow-gate.ts
771
771
  init_zod();
772
772
  import { createHash as createHash23, randomUUID as randomUUID6 } from "crypto";
773
- import { readFileSync as readFileSync14, statSync as statSync10 } from "fs";
774
773
  import * as fsp5 from "fs/promises";
775
774
  import * as path28 from "path";
776
775
 
@@ -2586,6 +2585,33 @@ function parsePrReviewTriggerReceipt(input) {
2586
2585
  return parsedReceipt(schemaVersion === 1 ? 1 : 0, validated.rows);
2587
2586
  }
2588
2587
 
2588
+ // src/background/pr-review-trigger-receipt-reader.ts
2589
+ import { readFileSync as readFileSync2, statSync } from "fs";
2590
+ function readPrReviewTriggerReceiptForGate(directory, triggerEvalPath) {
2591
+ if (!triggerEvalPath)
2592
+ return { noReceipt: true };
2593
+ const triggerPath = validateSwarmPath(directory, triggerEvalPath);
2594
+ let triggerArtifact;
2595
+ try {
2596
+ const triggerStat = statSync(triggerPath);
2597
+ if (!triggerStat.isFile() || triggerStat.size > PR_REVIEW_TRIGGER_RECEIPT_MAX_BYTES) {
2598
+ throw new Error("trigger evaluation artifact exceeds its read bound");
2599
+ }
2600
+ triggerArtifact = JSON.parse(readFileSync2(triggerPath, "utf-8"));
2601
+ } catch {
2602
+ throw new Error("BLOCKED: PR_REVIEW trigger evaluation artifact is missing or invalid");
2603
+ }
2604
+ try {
2605
+ return { receipt: parsePrReviewTriggerReceipt(triggerArtifact) };
2606
+ } catch (error2) {
2607
+ throw new Error(`BLOCKED: PR_REVIEW trigger evaluation is invalid: ${error2 instanceof Error ? error2.message : String(error2)}`);
2608
+ }
2609
+ }
2610
+ function prReviewReceiptHasCoverageDegradations(directory, triggerEvalPath) {
2611
+ const read = readPrReviewTriggerReceiptForGate(directory, triggerEvalPath);
2612
+ return "noReceipt" in read ? false : read.receipt.coverageDegradations.length > 0;
2613
+ }
2614
+
2589
2615
  // src/hooks/pr-workflow-gate.ts
2590
2616
  init_constants();
2591
2617
  init_schema();
@@ -3363,7 +3389,7 @@ async function importLegacyPrWorkflowGateStateIfNeeded(directory, sessionID, all
3363
3389
  return null;
3364
3390
  throw error2;
3365
3391
  }
3366
- const legacy = allowSalvagedImport ? (await (await import("./pr-workflow-gate-gpq41zx9.js")).readPrWorkflowGateStateForRecovery(directory, sessionID))?.state ?? null : await readPrWorkflowGateStateFileFromDisk(filePath, sessionID);
3392
+ const legacy = allowSalvagedImport ? (await (await import("./pr-workflow-gate-qd5tfkak.js")).readPrWorkflowGateStateForRecovery(directory, sessionID))?.state ?? null : await readPrWorkflowGateStateFileFromDisk(filePath, sessionID);
3367
3393
  if (!legacy)
3368
3394
  return null;
3369
3395
  const namespace = workflowGateStateCoordinationNamespace(sessionID);
@@ -3450,7 +3476,7 @@ async function deleteStateWhileLocked(directory, sessionID, options = {}) {
3450
3476
  let recoveryState = null;
3451
3477
  if (!currentAuthoritative) {
3452
3478
  if (options.allowSalvagedRead) {
3453
- const { readPrWorkflowGateStateForRecovery } = await import("./pr-workflow-gate-gpq41zx9.js");
3479
+ const { readPrWorkflowGateStateForRecovery } = await import("./pr-workflow-gate-qd5tfkak.js");
3454
3480
  recoveryState = (await readPrWorkflowGateStateForRecovery(directory, normalizedSessionID))?.state ?? null;
3455
3481
  }
3456
3482
  if (!recoveryState) {
@@ -4494,7 +4520,7 @@ function rollbackPrReviewCircuitProbe(circuit, nowMs, openDurationMs) {
4494
4520
  // src/pr-review/completion.ts
4495
4521
  init_zod();
4496
4522
  import { createHash as createHash8 } from "crypto";
4497
- import { readFileSync as readFileSync2 } from "fs";
4523
+ import { readFileSync as readFileSync3 } from "fs";
4498
4524
  import * as fsp4 from "fs/promises";
4499
4525
  import * as path6 from "path";
4500
4526
 
@@ -4697,14 +4723,20 @@ var PR_REVIEW_REPORT_VERDICTS = [
4697
4723
  "REQUEST_CHANGES",
4698
4724
  "INCOMPLETE"
4699
4725
  ];
4700
- function allowedPrReviewReportVerdicts(kind, findings = []) {
4726
+ function allowedPrReviewReportVerdicts(kind, findings = [], options) {
4701
4727
  if (kind === "PARTIAL" && findings.length === 0) {
4702
4728
  return ["REQUEST_CHANGES", "INCOMPLETE"];
4703
4729
  }
4730
+ const degraded = kind === "COMPLETE" && options?.disclosedCoverageDegradation === true;
4704
4731
  const projection = evaluateFinalFindingPolicy({
4705
4732
  policyVersion: 1,
4706
4733
  finalStatus: "COMPLETE",
4707
- coverage: kind === "COMPLETE" ? { kind: "base", quality: "complete", provenance: "valid" } : kind === "PARTIAL" ? { kind: "base", quality: "partial", provenance: "valid" } : { kind: "base", quality: "none", provenance: "valid" },
4734
+ coverage: degraded ? {
4735
+ kind: "base",
4736
+ quality: "degraded",
4737
+ disclosed: true,
4738
+ provenance: "valid"
4739
+ } : kind === "COMPLETE" ? { kind: "base", quality: "complete", provenance: "valid" } : kind === "PARTIAL" ? { kind: "base", quality: "partial", provenance: "valid" } : { kind: "base", quality: "none", provenance: "valid" },
4708
4740
  findings: [...findings]
4709
4741
  });
4710
4742
  const supported = projection.permittedVerdicts.filter((value) => (value === "APPROVE" || value === "REQUEST_CHANGES" || value === "INCOMPLETE") && (kind === "COMPLETE" || value !== "APPROVE"));
@@ -5219,7 +5251,7 @@ async function admitPrReviewPartialBaseCoverage(directory, sessionID, runId, unr
5219
5251
  } catch {}
5220
5252
  };
5221
5253
  try {
5222
- const persisted = readFileSync2(absolutePath, "utf8");
5254
+ const persisted = readFileSync3(absolutePath, "utf8");
5223
5255
  if (persisted !== raw) {
5224
5256
  throw new Error("BLOCKED: partial base coverage disclosure path already contains different content");
5225
5257
  }
@@ -5323,7 +5355,9 @@ async function readPrReviewTerminalCoverageForReport(directory, sessionID) {
5323
5355
  failure_class: entry.failureClass
5324
5356
  })),
5325
5357
  liveDimensions: settlement.liveDimensions,
5326
- allowedVerdicts: allowedPrReviewReportVerdicts(settlement.kind, [])
5358
+ allowedVerdicts: allowedPrReviewReportVerdicts(settlement.kind, [], {
5359
+ disclosedCoverageDegradation: prReviewReceiptHasCoverageDegradations(directory, state.prReviewTriggerEvalPath)
5360
+ })
5327
5361
  };
5328
5362
  }
5329
5363
 
@@ -5892,6 +5926,9 @@ function reducePrReviewEvent(state, event) {
5892
5926
  if (settlement.kind === "NO_COVERAGE" && verdict !== "INCOMPLETE") {
5893
5927
  return rejected(state, "no_coverage_requires_incomplete", `a zero-coverage review must report INCOMPLETE, not ${verdict}`);
5894
5928
  }
5929
+ if (settlement.kind === "COMPLETE" && event.disclosedDegradation === true && verdict === "APPROVE") {
5930
+ return rejected(state, "degraded_disclosure_cannot_approve", "a disclosed coverage degradation (dead family) can never emit APPROVE; report REQUEST_CHANGES with the disclosed degradation or INCOMPLETE");
5931
+ }
5895
5932
  }
5896
5933
  return applied(state);
5897
5934
  }
@@ -15002,7 +15039,7 @@ function isLaneOwnedByCurrentSession(branchName, expectedSessionId) {
15002
15039
  return extracted === expectedSessionId;
15003
15040
  }
15004
15041
  async function inspectStandardWorktreeCollisionOwnership(identity) {
15005
- const collisionOwnership = await import("./worktree-collision-ownership-g26m4c10.js");
15042
+ const collisionOwnership = await import("./worktree-collision-ownership-80n814a8.js");
15006
15043
  return collisionOwnership.inspectStandardWorktreeCollisionOwnership(identity);
15007
15044
  }
15008
15045
  async function runRecoveryGit(directory, args, timeoutMs = 15000) {
@@ -15428,7 +15465,7 @@ async function precreateStandardWorktreeSession(args) {
15428
15465
  const laneProfile = computeLaneRuntimeProfile(worktreeConfig.runtime_isolation, laneIndex, handle.worktreePath);
15429
15466
  if (laneProfile) {
15430
15467
  try {
15431
- const { writeLaneProfileToDiskReal } = await import("./core-xn2epqfk.js");
15468
+ const { writeLaneProfileToDiskReal } = await import("./core-cxnqsrxp.js");
15432
15469
  await writeLaneProfileToDiskReal(handle.worktreePath, laneProfile.laneIndex, laneProfile.envOverrides);
15433
15470
  } catch {}
15434
15471
  }
@@ -16407,7 +16444,7 @@ async function finishStandardWorktreeDispatch(directory, dispatch, config, callI
16407
16444
  }
16408
16445
  clearWorktreeMergeStatus(statusKey);
16409
16446
  try {
16410
- const { removeLaneProfileFromDiskReal } = await import("./core-xn2epqfk.js");
16447
+ const { removeLaneProfileFromDiskReal } = await import("./core-cxnqsrxp.js");
16411
16448
  await removeLaneProfileFromDiskReal(dispatch.handle.worktreePath, dispatch.laneIndex);
16412
16449
  } catch {}
16413
16450
  const state = serializationStateBySessionID.get(dispatch.parentSessionID);
@@ -16676,6 +16713,7 @@ function extractCurrentPhase(planContent) {
16676
16713
  if (!planContent) {
16677
16714
  return null;
16678
16715
  }
16716
+ planContent = sanitizeContextText(planContent);
16679
16717
  const lines = planContent.split(`
16680
16718
  `);
16681
16719
  for (let i = 0;i < Math.min(20, lines.length); i++) {
@@ -16687,6 +16725,15 @@ function extractCurrentPhase(planContent) {
16687
16725
  return `Phase ${phaseNum}: ${description} [IN PROGRESS]`;
16688
16726
  }
16689
16727
  }
16728
+ for (let i = 0;i < Math.min(20, lines.length); i++) {
16729
+ const line = lines[i].trim();
16730
+ const blockedMatch = line.match(/^## Phase (\d+):?\s*(.*?)\s*\[BLOCKED\]/i);
16731
+ if (blockedMatch) {
16732
+ const phaseNum = blockedMatch[1];
16733
+ const description = blockedMatch[2]?.trim() || "";
16734
+ return `Phase ${phaseNum}: ${description} [BLOCKED]`;
16735
+ }
16736
+ }
16690
16737
  for (let i = 0;i < Math.min(3, lines.length); i++) {
16691
16738
  const line = lines[i].trim();
16692
16739
  const phaseMatch = line.match(/Phase:\s*(\d+)/i);
@@ -16709,7 +16756,7 @@ function extractCurrentPhaseFromPlan(plan) {
16709
16756
  blocked: "BLOCKED"
16710
16757
  };
16711
16758
  const statusText = statusMap[phase.status] || "PENDING";
16712
- return `Phase ${phase.id}: ${phase.name} [${statusText}]`;
16759
+ return sanitizeContextText(`Phase ${phase.id}: ${phase.name} [${statusText}]`);
16713
16760
  }
16714
16761
 
16715
16762
  // src/hooks/task-result-classifier.ts
@@ -19047,7 +19094,7 @@ ${text}`;
19047
19094
 
19048
19095
  // src/db/observability-event-store.ts
19049
19096
  import { createHash as createHash21 } from "crypto";
19050
- import { existsSync as existsSync11, readFileSync as readFileSync11, statSync as statSync7 } from "fs";
19097
+ import { existsSync as existsSync11, readFileSync as readFileSync12, statSync as statSync8 } from "fs";
19051
19098
  import { join as join20 } from "path";
19052
19099
  var MAX_OBSERVABILITY_EVENT_ROWS = 50000;
19053
19100
  var MAX_EVENT_PAYLOAD_BYTES = 16 * 1024;
@@ -19263,7 +19310,7 @@ function syncObservabilityImport(directory) {
19263
19310
  const filePath = join20(root, ".swarm", fileName);
19264
19311
  let stats;
19265
19312
  try {
19266
- const st = statSync7(filePath);
19313
+ const st = statSync8(filePath);
19267
19314
  stats = { size: st.size, mtimeMs: st.mtimeMs };
19268
19315
  } catch {
19269
19316
  continue;
@@ -19276,7 +19323,7 @@ function syncObservabilityImport(directory) {
19276
19323
  result.skippedUnchanged = false;
19277
19324
  let content;
19278
19325
  try {
19279
- content = readFileSync11(filePath, "utf-8");
19326
+ content = readFileSync12(filePath, "utf-8");
19280
19327
  } catch {
19281
19328
  continue;
19282
19329
  }
@@ -19426,9 +19473,9 @@ var _internals28 = {
19426
19473
  import {
19427
19474
  existsSync as existsSync12,
19428
19475
  mkdirSync as mkdirSync6,
19429
- readFileSync as readFileSync12,
19476
+ readFileSync as readFileSync13,
19430
19477
  renameSync as renameSync4,
19431
- statSync as statSync8,
19478
+ statSync as statSync9,
19432
19479
  writeFileSync as writeFileSync6
19433
19480
  } from "fs";
19434
19481
  import { join as join21 } from "path";
@@ -19449,7 +19496,7 @@ function statePath(directory) {
19449
19496
  }
19450
19497
  function loadState(directory) {
19451
19498
  try {
19452
- const raw = readFileSync12(statePath(directory), "utf-8");
19499
+ const raw = readFileSync13(statePath(directory), "utf-8");
19453
19500
  const parsed = JSON.parse(raw);
19454
19501
  if (parsed.v !== STATE_VERSION)
19455
19502
  return null;
@@ -19460,7 +19507,7 @@ function loadState(directory) {
19460
19507
  }
19461
19508
  function readSpoolLines(directory) {
19462
19509
  try {
19463
- const content = readFileSync12(spoolPath(directory), "utf-8");
19510
+ const content = readFileSync13(spoolPath(directory), "utf-8");
19464
19511
  return content.split(`
19465
19512
  `).filter((l) => l.length > 0);
19466
19513
  } catch {
@@ -19480,7 +19527,7 @@ function readOtlpExporterHealth(directory) {
19480
19527
  let spoolRecords = 0;
19481
19528
  let spoolBytes = 0;
19482
19529
  try {
19483
- const st = statSync8(spoolPath(directory));
19530
+ const st = statSync9(spoolPath(directory));
19484
19531
  spoolBytes = st.size;
19485
19532
  spoolRecords = readSpoolLines(directory).length;
19486
19533
  } catch {}
@@ -22436,7 +22483,7 @@ function clearHydrationOwnershipState() {
22436
22483
  }
22437
22484
 
22438
22485
  // src/session/session-start-store.ts
22439
- import { existsSync as existsSync14, mkdirSync as mkdirSync8, readFileSync as readFileSync13, writeFileSync as writeFileSync8 } from "fs";
22486
+ import { existsSync as existsSync14, mkdirSync as mkdirSync8, readFileSync as readFileSync14, writeFileSync as writeFileSync8 } from "fs";
22440
22487
  import * as path26 from "path";
22441
22488
  var SESSION_START_FILE = "session-start.jsonl";
22442
22489
  function recordSessionStart(directory, startMs) {
@@ -22455,7 +22502,7 @@ function readEarliestSessionStart(directory) {
22455
22502
  const filePath = path26.join(directory, ".swarm", "session", SESSION_START_FILE);
22456
22503
  if (!existsSync14(filePath))
22457
22504
  return null;
22458
- const content = readFileSync13(filePath, "utf-8");
22505
+ const content = readFileSync14(filePath, "utf-8");
22459
22506
  const lines = content.split(`
22460
22507
  `);
22461
22508
  const validStartMs = [];
@@ -24036,7 +24083,7 @@ function clearCriticalShownIds(sessionID) {
24036
24083
  async function rehydratePrSubscriptions(sessionID, directory) {
24037
24084
  const map = new Map;
24038
24085
  try {
24039
- const { listActive: listActive2 } = await import("./pr-subscriptions-amc1z05d.js");
24086
+ const { listActive: listActive2 } = await import("./pr-subscriptions-qwr6ybcb.js");
24040
24087
  const records = await listActive2(directory);
24041
24088
  for (const record of records) {
24042
24089
  if (record.sessionID !== sessionID)
@@ -29086,7 +29133,10 @@ async function readPrReviewFinalFindingPolicyForReport(directory, sessionID) {
29086
29133
  const settlement = derivePrReviewDimensionSettlement(directory, state, ctx.revisionDigest);
29087
29134
  const authority = await readAuthoritativeFindingPolicy(directory, state);
29088
29135
  const findings = authority.policyFindings;
29089
- const permittedVerdicts = allowedPrReviewReportVerdicts(settlement.kind, findings);
29136
+ const disclosedDegradation = prReviewReceiptHasCoverageDegradations(directory, state.prReviewTriggerEvalPath);
29137
+ const permittedVerdicts = allowedPrReviewReportVerdicts(settlement.kind, findings, {
29138
+ disclosedCoverageDegradation: disclosedDegradation
29139
+ });
29090
29140
  const policyProjection = evaluateFinalFindingPolicy({
29091
29141
  policyVersion: FINDING_POLICY_VERSION,
29092
29142
  finalStatus: "COMPLETE",
@@ -29689,6 +29739,7 @@ async function completePrWorkflow(directory, sessionID, expectedMode, prHeadSha,
29689
29739
  }
29690
29740
  const ctx = await createPrReviewGateContext2(directory, state);
29691
29741
  const settlement = derivePrReviewDimensionSettlement(directory, state, ctx.revisionDigest);
29742
+ let disclosedDegradation = settlement.kind === "COMPLETE" && prReviewReceiptHasCoverageDegradations(directory, state.prReviewTriggerEvalPath);
29692
29743
  const dispatchCoverageFinalization = (finalizationSettlement) => {
29693
29744
  const outcome = reducePrReviewEvent(state, {
29694
29745
  type: "coverage_finalization_requested",
@@ -29698,7 +29749,8 @@ async function completePrWorkflow(directory, sessionID, expectedMode, prHeadSha,
29698
29749
  unresolvedDimensions: finalizationSettlement.unresolvedDimensions,
29699
29750
  liveDimensions: finalizationSettlement.liveDimensions
29700
29751
  },
29701
- requestedVerdict: verdict
29752
+ requestedVerdict: verdict,
29753
+ disclosedDegradation
29702
29754
  });
29703
29755
  if (outcome.status === "applied")
29704
29756
  return;
@@ -29712,7 +29764,10 @@ async function completePrWorkflow(directory, sessionID, expectedMode, prHeadSha,
29712
29764
  if (code === "no_coverage_requires_incomplete") {
29713
29765
  throw new Error(`BLOCKED: PR_REVIEW NO_COVERAGE completion must report verdict INCOMPLETE; got "${verdict}". A zero-coverage report never approves and never claims a code-quality review.`);
29714
29766
  }
29715
- const allowedList = allowedPrReviewReportVerdicts(finalizationSettlement.kind, []).join(" | ");
29767
+ if (code === "degraded_disclosure_cannot_approve") {
29768
+ throw new Error(`BLOCKED: PR_REVIEW ${finalizationSettlement.kind} completion discloses a coverage degradation (dead family) and cannot report verdict APPROVE; got "${verdict}". Report REQUEST_CHANGES with the disclosed degradation surfaced in the report, or INCOMPLETE.`);
29769
+ }
29770
+ const allowedList = allowedPrReviewReportVerdicts(finalizationSettlement.kind, [], { disclosedCoverageDegradation: disclosedDegradation }).join(" | ");
29716
29771
  throw new Error(`BLOCKED: PR_REVIEW ${finalizationSettlement.kind} completion allows report_verdict ${allowedList}; got "${verdict}". Partial coverage never approves and never claims a full review.`);
29717
29772
  };
29718
29773
  dispatchCoverageFinalization(settlement);
@@ -29734,7 +29789,9 @@ async function completePrWorkflow(directory, sessionID, expectedMode, prHeadSha,
29734
29789
  });
29735
29790
  } catch {}
29736
29791
  } else {
29737
- const preAllowed = allowedPrReviewReportVerdicts(settlement.kind, []);
29792
+ const preAllowed = allowedPrReviewReportVerdicts(settlement.kind, [], {
29793
+ disclosedCoverageDegradation: disclosedDegradation
29794
+ });
29738
29795
  if (!preAllowed.includes(verdict)) {
29739
29796
  throw new Error(`BLOCKED: PR_REVIEW ${settlement.kind} completion allows report_verdict ${preAllowed.join(" | ")}; got "${verdict}". Partial coverage never approves and never claims a full review.`);
29740
29797
  }
@@ -29743,9 +29800,12 @@ async function completePrWorkflow(directory, sessionID, expectedMode, prHeadSha,
29743
29800
  if (workflowIdentity(readyState) !== workflowIdentity(state) || readyState.revision !== state.revision) {
29744
29801
  throw new Error("BLOCKED: PR_REVIEW state changed while checking terminal readiness; retry from current state");
29745
29802
  }
29803
+ if (ready.settlement.kind === "COMPLETE") {
29804
+ disclosedDegradation = prReviewReceiptHasCoverageDegradations(directory, readyState.prReviewTriggerEvalPath);
29805
+ }
29746
29806
  dispatchCoverageFinalization(ready.settlement);
29747
29807
  const finalFindingAuthority = await readAuthoritativeFindingPolicy(directory, readyState);
29748
- const policyAllowed = allowedPrReviewReportVerdicts(ready.settlement.kind, finalFindingAuthority.policyFindings);
29808
+ const policyAllowed = allowedPrReviewReportVerdicts(ready.settlement.kind, finalFindingAuthority.policyFindings, { disclosedCoverageDegradation: disclosedDegradation });
29749
29809
  if (!policyAllowed.includes(verdict)) {
29750
29810
  throw new Error(`BLOCKED: PR_REVIEW ${ready.settlement.kind} completion allows report_verdict ${policyAllowed.join(" | ")}; got "${verdict}". Final finding policy and coverage do not permit this report.`);
29751
29811
  }
@@ -30840,23 +30900,11 @@ function derivePrReviewCandidateInventory2(directory, state, ctx) {
30840
30900
  }
30841
30901
  const degradedSourceKeys = new Set;
30842
30902
  if (state.prReviewTriggerEvalPath) {
30843
- const triggerPath = validateSwarmPath(directory, state.prReviewTriggerEvalPath);
30844
- let triggerArtifact;
30845
- try {
30846
- const triggerStat = statSync10(triggerPath);
30847
- if (!triggerStat.isFile() || triggerStat.size > PR_REVIEW_TRIGGER_RECEIPT_MAX_BYTES) {
30848
- throw new Error("trigger evaluation artifact exceeds its read bound");
30849
- }
30850
- triggerArtifact = JSON.parse(readFileSync14(triggerPath, "utf-8"));
30851
- } catch {
30903
+ const receiptRead = readPrReviewTriggerReceiptForGate(directory, state.prReviewTriggerEvalPath);
30904
+ const receipt = "noReceipt" in receiptRead ? null : receiptRead.receipt;
30905
+ if (!receipt) {
30852
30906
  throw new Error("BLOCKED: PR_REVIEW trigger evaluation artifact is missing or invalid");
30853
30907
  }
30854
- let receipt;
30855
- try {
30856
- receipt = parsePrReviewTriggerReceipt(triggerArtifact);
30857
- } catch (error2) {
30858
- throw new Error(`BLOCKED: PR_REVIEW trigger evaluation is invalid: ${error2 instanceof Error ? error2.message : String(error2)}`);
30859
- }
30860
30908
  for (const row of receipt.matchedRows) {
30861
30909
  sources.push({
30862
30910
  batchId: row.source_batch_id,
@@ -40407,9 +40455,9 @@ function hashContent(content) {
40407
40455
  return createHash27("sha1").update(content).digest("hex");
40408
40456
  }
40409
40457
  async function loadConfigForPolicyCurator(directory) {
40410
- const { KnowledgeConfigSchema: KnowledgeConfigSchema2 } = await import("./schema-108trhk6.js");
40458
+ const { KnowledgeConfigSchema: KnowledgeConfigSchema2 } = await import("./schema-yvhamv41.js");
40411
40459
  try {
40412
- const { loadPluginConfigWithMeta: loadPluginConfigWithMeta2 } = await import("./index-f3grtpy3.js");
40460
+ const { loadPluginConfigWithMeta: loadPluginConfigWithMeta2 } = await import("./index-fa014mra.js");
40413
40461
  const { config: loadedConfig } = loadPluginConfigWithMeta2(directory);
40414
40462
  return KnowledgeConfigSchema2.parse(loadedConfig.knowledge ?? {});
40415
40463
  } catch {
@@ -43467,7 +43515,7 @@ async function resolveCuratorLLMDelegate(directory, mode, sessionId) {
43467
43515
  const seam = _internals38.createCuratorLLMDelegate;
43468
43516
  if (seam)
43469
43517
  return seam(directory, mode, sessionId);
43470
- const { createCuratorLLMDelegate } = await import("./curator-llm-factory-tr6rabws.js");
43518
+ const { createCuratorLLMDelegate } = await import("./curator-llm-factory-hkk29g2y.js");
43471
43519
  return createCuratorLLMDelegate(directory, mode, sessionId);
43472
43520
  }
43473
43521
  async function reconcileCloseTerminalStateForPlan(directory, targetPlan, options) {
@@ -43862,7 +43910,7 @@ async function runFinalizeStage(ctx) {
43862
43910
  }
43863
43911
  }
43864
43912
  try {
43865
- const { CuratorConfigSchema: CCS } = await import("./schema-108trhk6.js");
43913
+ const { CuratorConfigSchema: CCS } = await import("./schema-yvhamv41.js");
43866
43914
  const { config: pmLoadedConfig } = _internals38.loadPluginConfigWithMeta(ctx.directory);
43867
43915
  const curatorCfg = CCS.parse(pmLoadedConfig.curator ?? {});
43868
43916
  if (curatorCfg.enabled && curatorCfg.postmortem_enabled) {
@@ -46048,7 +46096,7 @@ function serializeAgentSession(s) {
46048
46096
  }
46049
46097
  async function writeSnapshot(directory, state) {
46050
46098
  try {
46051
- const { ensureSnapshotCoordinationReady } = await import("./snapshot-coordination-init-pactfmsy.js");
46099
+ const { ensureSnapshotCoordinationReady } = await import("./snapshot-coordination-init-xqxek8kn.js");
46052
46100
  await ensureSnapshotCoordinationReady(directory);
46053
46101
  const snapshot = {
46054
46102
  version: 3,
@@ -49226,7 +49274,7 @@ function planMerges(active, threshold, maxComparisons, maxMerges) {
49226
49274
  };
49227
49275
  }
49228
49276
  async function sweepActiveNearDuplicates(directory, options = {}) {
49229
- const { loadPluginConfigWithMeta: loadPluginConfigWithMeta2 } = await import("./index-f3grtpy3.js");
49277
+ const { loadPluginConfigWithMeta: loadPluginConfigWithMeta2 } = await import("./index-fa014mra.js");
49230
49278
  const { config } = loadPluginConfigWithMeta2(directory);
49231
49279
  const sweepConfig = config.learning?.dedup_sweep;
49232
49280
  if (sweepConfig?.enabled === false)
@@ -50350,7 +50398,7 @@ async function runCuratorPhase(directory, phase, agentsDispatched, config, knowl
50350
50398
  }
50351
50399
  if (config.skill_generation_enabled === true && skillCandidates.length > 0) {
50352
50400
  try {
50353
- const skillModule = await import("./skill-generator-7g6xjwhr.js");
50401
+ const skillModule = await import("./skill-generator-fzvp9m8z.js");
50354
50402
  for (const cand of skillCandidates) {
50355
50403
  if (cand.confidence < (config.min_skill_confidence ?? DEFAULT_SKILL_MIN_CONFIDENCE)) {
50356
50404
  continue;
@@ -50822,7 +50870,7 @@ async function applyCuratorKnowledgeUpdates(directory, recommendations, knowledg
50822
50870
  } catch {}
50823
50871
  }
50824
50872
  if (contradictedEntries.length > 0 && knowledgeConfig.contradiction_threshold_action === "quarantine") {
50825
- const { maybeQuarantineOnContradiction } = await import("./knowledge-escalator-xdz6vg62.js");
50873
+ const { maybeQuarantineOnContradiction } = await import("./knowledge-escalator-30bb9fyg.js");
50826
50874
  for (const { id } of contradictedEntries) {
50827
50875
  try {
50828
50876
  await maybeQuarantineOnContradiction(directory, id, knowledgeConfig.contradiction_quarantine_threshold, knowledgeConfig.contradiction_quarantine_window_days);
@@ -51654,7 +51702,7 @@ async function runCuratorPostMortem(directory, options = {}) {
51654
51702
  warnings.push("Failed to collect knowledge summary.");
51655
51703
  }
51656
51704
  try {
51657
- const { getScanStatus } = await import("./scan-cursor-71gq82ez.js");
51705
+ const { getScanStatus } = await import("./scan-cursor-1m6dj2s2.js");
51658
51706
  const scanStatus = await getScanStatus(directory);
51659
51707
  if (scanStatus.remaining_estimate > 0) {
51660
51708
  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.`);
@@ -51826,9 +51874,9 @@ var _internals57 = {
51826
51874
  verifyPostMortemKnowledgeActions,
51827
51875
  repairPostMortemActions,
51828
51876
  loadDefaultKnowledgeConfig: async (directory) => {
51829
- const { KnowledgeConfigSchema: KnowledgeConfigSchema2 } = await import("./schema-108trhk6.js");
51877
+ const { KnowledgeConfigSchema: KnowledgeConfigSchema2 } = await import("./schema-yvhamv41.js");
51830
51878
  try {
51831
- const { loadPluginConfigWithMeta: loadPluginConfigWithMeta2 } = await import("./index-f3grtpy3.js");
51879
+ const { loadPluginConfigWithMeta: loadPluginConfigWithMeta2 } = await import("./index-fa014mra.js");
51832
51880
  const loaded = loadPluginConfigWithMeta2(directory);
51833
51881
  return KnowledgeConfigSchema2.parse(loaded.config.knowledge ?? {});
51834
51882
  } catch {
@@ -51836,11 +51884,11 @@ var _internals57 = {
51836
51884
  }
51837
51885
  },
51838
51886
  applyCuratorKnowledgeUpdates: async (directory, recommendations, knowledgeConfig, generation) => {
51839
- const { applyCuratorKnowledgeUpdates: applyCuratorKnowledgeUpdates2 } = await import("./curator-91rqz7xg.js");
51887
+ const { applyCuratorKnowledgeUpdates: applyCuratorKnowledgeUpdates2 } = await import("./curator-5k3mktpe.js");
51840
51888
  return applyCuratorKnowledgeUpdates2(directory, recommendations, knowledgeConfig, generation);
51841
51889
  },
51842
51890
  checkHivePromotions: async (entries2, knowledgeConfig, directory) => {
51843
- const { checkHivePromotions } = await import("./hive-promoter-8dqvfwsx.js");
51891
+ const { checkHivePromotions } = await import("./hive-promoter-400xzdds.js");
51844
51892
  return checkHivePromotions(entries2, knowledgeConfig, directory);
51845
51893
  },
51846
51894
  applyProposalTriage: async (directory, triage) => {
@@ -51849,7 +51897,7 @@ var _internals57 = {
51849
51897
  activateProposal,
51850
51898
  listSkills: listSkills2,
51851
51899
  sanitizeSlug
51852
- } = await import("./skill-generator-7g6xjwhr.js");
51900
+ } = await import("./skill-generator-fzvp9m8z.js");
51853
51901
  const result = {
51854
51902
  approved: [],
51855
51903
  rejected: [],
@@ -51891,7 +51939,7 @@ var _internals57 = {
51891
51939
  return result;
51892
51940
  },
51893
51941
  readPriorDriftReports: async (directory) => {
51894
- const { readPriorDriftReports: readPriorDriftReports2 } = await import("./curator-drift-qem70sry.js");
51942
+ const { readPriorDriftReports: readPriorDriftReports2 } = await import("./curator-drift-dt4g79a4.js");
51895
51943
  return readPriorDriftReports2(directory);
51896
51944
  },
51897
51945
  readSwarmKnowledge: (directory) => readKnowledge(resolveSwarmKnowledgePath(directory))
@@ -61687,9 +61735,9 @@ var _internals67 = {
61687
61735
  loadPluginConfigWithMeta,
61688
61736
  loadCuratorDeps: async () => {
61689
61737
  const [{ CuratorConfigSchema }, curator, { createCuratorLLMDelegate }] = await Promise.all([
61690
- import("./schema-108trhk6.js"),
61691
- import("./curator-91rqz7xg.js"),
61692
- import("./curator-llm-factory-tr6rabws.js")
61738
+ import("./schema-yvhamv41.js"),
61739
+ import("./curator-5k3mktpe.js"),
61740
+ import("./curator-llm-factory-hkk29g2y.js")
61693
61741
  ]);
61694
61742
  return { CuratorConfigSchema, curator, createCuratorLLMDelegate };
61695
61743
  }
@@ -64082,7 +64130,7 @@ async function computeCurationDiagnostics(directory, entries2) {
64082
64130
  let scanCompleted = false;
64083
64131
  let scanRemaining = 0;
64084
64132
  try {
64085
- const { getScanStatus } = await import("./scan-cursor-71gq82ez.js");
64133
+ const { getScanStatus } = await import("./scan-cursor-1m6dj2s2.js");
64086
64134
  const status = await getScanStatus(directory);
64087
64135
  scanGeneration = status.generation;
64088
64136
  scanCompleted = status.completed;
@@ -64090,19 +64138,19 @@ async function computeCurationDiagnostics(directory, entries2) {
64090
64138
  } catch {}
64091
64139
  let configMatch = null;
64092
64140
  try {
64093
- const { isLinked: isLinked2 } = await import("./knowledge-link-y653vvr8.js");
64141
+ const { isLinked: isLinked2 } = await import("./knowledge-link-dv78fb9g.js");
64094
64142
  if (isLinked2(directory)) {
64095
- const { KnowledgeConfigSchema: KnowledgeConfigSchema2 } = await import("./schema-108trhk6.js");
64143
+ const { KnowledgeConfigSchema: KnowledgeConfigSchema2 } = await import("./schema-yvhamv41.js");
64096
64144
  let config;
64097
64145
  try {
64098
- const { loadPluginConfigWithMeta: loadPluginConfigWithMeta2 } = await import("./index-f3grtpy3.js");
64146
+ const { loadPluginConfigWithMeta: loadPluginConfigWithMeta2 } = await import("./index-fa014mra.js");
64099
64147
  const loaded = loadPluginConfigWithMeta2(directory);
64100
64148
  config = KnowledgeConfigSchema2.parse(loaded.config.knowledge ?? {});
64101
64149
  } catch {
64102
64150
  config = KnowledgeConfigSchema2.parse({});
64103
64151
  }
64104
64152
  const { cohortConfigFingerprint: cohortConfigFingerprint2 } = await import("./config-fingerprint-v22xh5a2.js");
64105
- const { buildConfigFingerprintInput: buildConfigFingerprintInput2, readCohortConfigFingerprint } = await import("./curation-policy-swnyg1jr.js");
64153
+ const { buildConfigFingerprintInput: buildConfigFingerprintInput2, readCohortConfigFingerprint } = await import("./curation-policy-ytzwb080.js");
64106
64154
  const currentFp = cohortConfigFingerprint2(buildConfigFingerprintInput2(config));
64107
64155
  const cohortFp = await readCohortConfigFingerprint(directory);
64108
64156
  configMatch = cohortFp === null ? null : currentFp === cohortFp;
@@ -65550,7 +65598,7 @@ async function handleDoctorCommand(directory, args) {
65550
65598
  const result = runConfigDoctor(config, directory);
65551
65599
  let output;
65552
65600
  if (enableAutoFix && result.hasAutoFixableIssues) {
65553
- const { runConfigDoctorWithFixes } = await import("./config-doctor-f2jtx8y5.js");
65601
+ const { runConfigDoctorWithFixes } = await import("./config-doctor-3b99vx74.js");
65554
65602
  const fixResult = await runConfigDoctorWithFixes(directory, config, true, {
65555
65603
  applyLossy: true
65556
65604
  });
@@ -65588,7 +65636,7 @@ async function handleDoctorCommand(directory, args) {
65588
65636
  `;
65589
65637
  }
65590
65638
  try {
65591
- const { runModelPreflight } = await import("./model-preflight-5xcxc75n.js");
65639
+ const { runModelPreflight } = await import("./model-preflight-g7b12yn2.js");
65592
65640
  const preflight = await runModelPreflight(config, swarmState.opencodeClient, { generatedAgentNames: swarmState.generatedAgentNames });
65593
65641
  const missingSelection = preflight.resolutions.filter((resolution) => resolution.status === "missing-selection");
65594
65642
  const unresolved = preflight.catalogAvailable ? preflight.resolutions.filter((resolution) => resolution.status === "unresolved") : [];
@@ -66515,7 +66563,7 @@ async function handleEvidenceCommand(directory, args) {
66515
66563
  return formatTaskEvidenceMarkdown(evidenceData);
66516
66564
  }
66517
66565
  async function handleEvidenceSummaryCommand(directory) {
66518
- const { buildEvidenceSummary } = await import("./evidence-summary-service-n7ndpen0.js");
66566
+ const { buildEvidenceSummary } = await import("./evidence-summary-service-8e2fghz0.js");
66519
66567
  const artifact = await buildEvidenceSummary(directory);
66520
66568
  if (!artifact) {
66521
66569
  return "No plan found. Run `/swarm plan` to check plan status.";
@@ -90848,7 +90896,7 @@ function createCuratorLLMDelegate(directory, mode = "init", sessionId) {
90848
90896
  }
90849
90897
  const sdkOpts = signal ? { signal } : {};
90850
90898
  try {
90851
- const { getSwarmAgents: getSwarmAgents2, resolveFallbackModel: resolveFallbackModel2 } = await import("./index-73vnyt4b.js");
90899
+ const { getSwarmAgents: getSwarmAgents2, resolveFallbackModel: resolveFallbackModel2 } = await import("./index-rtznwf0g.js");
90852
90900
  const createResult = await client.session.create({
90853
90901
  ...sessionId ? {
90854
90902
  body: {
@@ -92821,7 +92869,7 @@ async function cancelPrFeedbackLoopUnlocked(directory, sessionID, reason) {
92821
92869
  clearedEvents: []
92822
92870
  };
92823
92871
  try {
92824
- const { cancelPrFeedbackPublication: cancelPrFeedbackPublication2 } = await import("./pr-workflow-gate-gpq41zx9.js");
92872
+ const { cancelPrFeedbackPublication: cancelPrFeedbackPublication2 } = await import("./pr-workflow-gate-qd5tfkak.js");
92825
92873
  await cancelPrFeedbackPublication2(directory, sessionID, reason);
92826
92874
  } catch (err) {
92827
92875
  warn(`[pr-feedback-loop] cancelPrFeedbackPublication failed (fail-open): ${err instanceof Error ? err.message : String(err)}`);
@@ -106632,7 +106680,7 @@ async function runValidationWithTransientRetry(input, candidateContent, baseline
106632
106680
  if (!input.dispatcher) {
106633
106681
  throw new Error("no evaluation dispatcher available (cannot run validation)");
106634
106682
  }
106635
- const { createModelEvaluationExecutor: createModelEvaluationExecutor2 } = await import("./runner-ss88pbb2.js");
106683
+ const { createModelEvaluationExecutor: createModelEvaluationExecutor2 } = await import("./runner-tb3eppeg.js");
106636
106684
  const executor = createModelEvaluationExecutor2(input.dispatcher, input.sessionId);
106637
106685
  const result = await withProtectedSetIntegrity([evalInputRoot, ...protectedRoots(input.directory)], () => _internals129.evaluateCandidateV1({
106638
106686
  projectRoot: input.directory,
@@ -109261,7 +109309,7 @@ function buildDetailedHelp(commandName, entry) {
109261
109309
  async function handleHelpCommand(ctx) {
109262
109310
  const targetCommand = ctx.args.join(" ");
109263
109311
  if (!targetCommand) {
109264
- const { buildHelpText } = await import("./index-fkzv0hj4.js");
109312
+ const { buildHelpText } = await import("./index-r9zc92pb.js");
109265
109313
  return buildHelpText();
109266
109314
  }
109267
109315
  const tokens = targetCommand.split(/\s+/);
@@ -109275,7 +109323,7 @@ async function handleHelpCommand(ctx) {
109275
109323
  > Note: \`/swarm ${resolved.key}\` is a deprecated alias for \`/swarm ${aliasTarget}\`.` : detailed;
109276
109324
  }
109277
109325
  const similar = _internals27.findSimilarCommands(targetCommand);
109278
- const { buildHelpText: fullHelp } = await import("./index-fkzv0hj4.js");
109326
+ const { buildHelpText: fullHelp } = await import("./index-r9zc92pb.js");
109279
109327
  if (similar.length > 0) {
109280
109328
  return `Command '/swarm ${targetCommand}' not found.
109281
109329
 
@@ -109590,7 +109638,7 @@ var COMMAND_REGISTRY = {
109590
109638
  },
109591
109639
  "guardrail explain": {
109592
109640
  handler: async (ctx) => {
109593
- const { handleGuardrailExplain } = await import("./guardrail-explain-cne2701m.js");
109641
+ const { handleGuardrailExplain } = await import("./guardrail-explain-ma658hkw.js");
109594
109642
  return handleGuardrailExplain(ctx.directory, ctx.args);
109595
109643
  },
109596
109644
  description: "Dry-run: show what the guardrails would do to a command or write target (executes nothing)",
@@ -109600,7 +109648,7 @@ var COMMAND_REGISTRY = {
109600
109648
  },
109601
109649
  "guardrail reset": {
109602
109650
  handler: async (ctx) => {
109603
- const { handleGuardrailReset } = await import("./guardrail-reset-e6njf0hv.js");
109651
+ const { handleGuardrailReset } = await import("./guardrail-reset-w41yndke.js");
109604
109652
  return handleGuardrailReset(ctx.args, ctx.sessionID);
109605
109653
  },
109606
109654
  description: "Reset one exact active invocation/action circuit after repair",
@@ -109621,7 +109669,7 @@ var COMMAND_REGISTRY = {
109621
109669
  },
109622
109670
  "guardrail-log": {
109623
109671
  handler: async (ctx) => {
109624
- const { handleGuardrailLog } = await import("./guardrail-log-b23sf549.js");
109672
+ const { handleGuardrailLog } = await import("./guardrail-log-m6mydjet.js");
109625
109673
  return handleGuardrailLog(ctx.directory, ctx.args);
109626
109674
  },
109627
109675
  description: "Read the guardrail decision log (use --blocks-only for blocks)",