opencode-swarm 7.154.1 → 7.154.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 (79) hide show
  1. package/dist/background/completion-observer.d.ts +10 -1
  2. package/dist/background/pending-delegations.d.ts +47 -0
  3. package/dist/cli/coder-settlement-7c9h07f5.js +54 -0
  4. package/dist/cli/{config-doctor-keasv3r8.js → config-doctor-8zjz6dej.js} +2 -2
  5. package/dist/cli/{core-7aj5g3f4.js → core-dn8bn81g.js} +2 -2
  6. package/dist/cli/{curation-policy-a6tve11y.js → curation-policy-2jkbybw7.js} +4 -4
  7. package/dist/cli/{curator-drift-h57z6tm3.js → curator-drift-g6w4ga1q.js} +2 -2
  8. package/dist/cli/{curator-llm-factory-cr5ckwbd.js → curator-llm-factory-mxdjw6kz.js} +33 -31
  9. package/dist/cli/{curator-anz136hr.js → curator-v12rhct2.js} +33 -31
  10. package/dist/cli/{evidence-summary-service-6tgme7p3.js → evidence-summary-service-zzvvcaa9.js} +11 -11
  11. package/dist/cli/{gate-evidence-36nfx4vb.js → gate-evidence-16jkjre9.js} +6 -6
  12. package/dist/cli/{guardrail-explain-frb5xd5h.js → guardrail-explain-11fx66cx.js} +34 -32
  13. package/dist/cli/{guardrail-log-fvma65xm.js → guardrail-log-ahvfn58c.js} +3 -3
  14. package/dist/cli/{guardrail-reset-3qk6k334.js → guardrail-reset-zp5xe0n5.js} +33 -31
  15. package/dist/cli/{hive-promoter-v3dhtzfa.js → hive-promoter-k6y06jj8.js} +33 -31
  16. package/dist/cli/{index-c809a69b.js → index-0f4b9ywa.js} +2 -2
  17. package/dist/cli/{index-akm1dbr9.js → index-2rgm3hgq.js} +4 -4
  18. package/dist/cli/{index-1sjnqsc8.js → index-4dt91x6e.js} +1 -1
  19. package/dist/cli/{index-qm8b3aaj.js → index-4n557t8w.js} +3 -3
  20. package/dist/cli/{index-h7pamys0.js → index-6vcrkz80.js} +4 -4
  21. package/dist/cli/{index-wqp8kk0w.js → index-7fyv62b2.js} +11 -12
  22. package/dist/cli/{index-zak84bqr.js → index-7qky94rr.js} +1 -1
  23. package/dist/cli/{index-bmkxc6sa.js → index-94e20w95.js} +2 -2
  24. package/dist/cli/{index-wxpemcdj.js → index-9nw6z98k.js} +35 -33
  25. package/dist/cli/{index-4r46q7tk.js → index-a6xjn2zt.js} +5 -5
  26. package/dist/cli/{index-107cv0dr.js → index-bhjkxasn.js} +1 -1
  27. package/dist/cli/{index-97q41ds3.js → index-ckp0z9d4.js} +2 -2
  28. package/dist/cli/{index-sx5f2fq9.js → index-d7r6y724.js} +4 -4
  29. package/dist/cli/index-ddszzne4.js +42 -0
  30. package/dist/cli/{index-4cgee5vh.js → index-dtn0pne5.js} +20 -1
  31. package/dist/cli/{index-9wzgztj9.js → index-ed13peqr.js} +1 -1
  32. package/dist/cli/{index-tmgbwgsm.js → index-env8fk17.js} +1 -1
  33. package/dist/cli/{index-9znypky4.js → index-g1bh7980.js} +3 -3
  34. package/dist/cli/{index-p17hs70t.js → index-gbkdj7ay.js} +2 -2
  35. package/dist/cli/{index-9xev69y4.js → index-kck2gtxk.js} +228 -2
  36. package/dist/cli/{index-r0yavfvm.js → index-m0fy8jra.js} +2309 -2920
  37. package/dist/cli/{index-wmxke5se.js → index-n7nnz0jp.js} +6 -6
  38. package/dist/cli/{index-xsbf2mmf.js → index-q0prhdds.js} +7 -7
  39. package/dist/cli/{index-3md256qr.js → index-qdnmnq65.js} +1 -1
  40. package/dist/cli/{index-y7gyhe13.js → index-qxj63890.js} +1 -1
  41. package/dist/cli/{index-50cy1a3p.js → index-s23q9v6t.js} +6 -6
  42. package/dist/cli/{index-0vss7vdg.js → index-s5p8ryar.js} +1 -1
  43. package/dist/cli/{index-yy4yps8w.js → index-v6xkgxts.js} +2 -2
  44. package/dist/cli/{index-garsang6.js → index-vntggpez.js} +2 -2
  45. package/dist/cli/{index-155pbsan.js → index-wkagbmpt.js} +1 -1
  46. package/dist/cli/{index-fz9xcq6z.js → index-y3kw1zpm.js} +2 -1
  47. package/dist/cli/index-ymgsmjba.js +875 -0
  48. package/dist/cli/{index-2ppbt5cf.js → index-zak50rve.js} +1 -1
  49. package/dist/cli/index.js +33 -31
  50. package/dist/cli/{knowledge-escalator-1gjv97hj.js → knowledge-escalator-yew2fbxb.js} +11 -11
  51. package/dist/cli/{knowledge-events-94hfvp85.js → knowledge-events-zfg423hp.js} +9 -9
  52. package/dist/cli/{knowledge-link-fs8hgh4h.js → knowledge-link-ydv6shg2.js} +3 -3
  53. package/dist/cli/{knowledge-store-g7grbt7h.js → knowledge-store-zcv9stzz.js} +4 -4
  54. package/dist/cli/{knowledge-validator-ep0ym1e4.js → knowledge-validator-q68wx2bf.js} +6 -6
  55. package/dist/cli/{pending-delegations-0pf2dtwx.js → pending-delegations-yet1rza6.js} +15 -2
  56. package/dist/cli/{pr-subscriptions-e70phj71.js → pr-subscriptions-mp7fyh1r.js} +3 -3
  57. package/dist/cli/{runner-b7pskcxb.js → runner-s89ja08q.js} +4 -4
  58. package/dist/cli/{scan-cursor-8zps8v46.js → scan-cursor-38bzfhwf.js} +5 -5
  59. package/dist/cli/{schema-8sx9jp7v.js → schema-9hqyt4t6.js} +1 -1
  60. package/dist/cli/{scope-persistence-zacyjnx9.js → scope-persistence-dd9s9q2b.js} +6 -6
  61. package/dist/cli/{skill-generator-xs5n5j4k.js → skill-generator-b28ezazm.js} +13 -13
  62. package/dist/cli/{worktree-collision-ownership-yjk5ya71.js → worktree-collision-ownership-zw65t2p9.js} +9 -8
  63. package/dist/cli/{worktree-isolation-cpf6b8ns.js → worktree-isolation-0ag393t0.js} +33 -31
  64. package/dist/evaluation/contracts.d.ts +4 -4
  65. package/dist/evaluation/gate-ground-truth.d.ts +1 -1
  66. package/dist/hooks/final-context-accounting.d.ts +60 -0
  67. package/dist/hooks/index.d.ts +1 -0
  68. package/dist/hooks/knowledge-injector.d.ts +1 -1
  69. package/dist/hooks/system-enhancer.d.ts +13 -0
  70. package/dist/hooks/utils.d.ts +11 -0
  71. package/dist/index.js +561 -556
  72. package/dist/services/compaction-service.d.ts +9 -3
  73. package/dist/services/context-budget-service.d.ts +7 -3
  74. package/dist/services/injection-budget.d.ts +103 -26
  75. package/dist/state.d.ts +69 -0
  76. package/dist/summaries/summarizer.d.ts +34 -3
  77. package/dist/utils/canonical-root.d.ts +2 -0
  78. package/dist/workflow/coder-settlement.d.ts +14 -0
  79. package/package.json +2 -1
@@ -1,7 +1,7 @@
1
1
  // @bun
2
2
  import {
3
3
  atomicWriteFile
4
- } from "./index-107cv0dr.js";
4
+ } from "./index-bhjkxasn.js";
5
5
  import {
6
6
  init_logger,
7
7
  warn
@@ -9,7 +9,7 @@ import {
9
9
  } from "./index-y8552snf.js";
10
10
  import {
11
11
  atomicWriteFile
12
- } from "./index-107cv0dr.js";
12
+ } from "./index-bhjkxasn.js";
13
13
  import {
14
14
  assertProjectRoot,
15
15
  withEvidenceLock
@@ -2,14 +2,14 @@
2
2
  import {
3
3
  autoCommitDirty,
4
4
  cleanUntrackedFiles
5
- } from "./index-zak84bqr.js";
5
+ } from "./index-7qky94rr.js";
6
6
  import {
7
7
  isPathWithinDeclaredScope,
8
8
  unsafePathTextReason
9
9
  } from "./index-556ja8an.js";
10
10
  import {
11
11
  validateSwarmPath
12
- } from "./index-4cgee5vh.js";
12
+ } from "./index-dtn0pne5.js";
13
13
  import {
14
14
  bunSpawn,
15
15
  classifySpawnFailure
@@ -26,7 +26,7 @@ import {
26
26
  atomicWriteFile,
27
27
  taskEvidencePath,
28
28
  withTaskEvidenceLock
29
- } from "./index-107cv0dr.js";
29
+ } from "./index-bhjkxasn.js";
30
30
  import {
31
31
  assertProjectRoot
32
32
  } from "./index-xagq35tf.js";
@@ -2,10 +2,10 @@
2
2
  import {
3
3
  init_loader,
4
4
  loadPluginConfigWithMeta
5
- } from "./index-xsbf2mmf.js";
5
+ } from "./index-q0prhdds.js";
6
6
  import {
7
7
  init_schema
8
- } from "./index-fz9xcq6z.js";
8
+ } from "./index-y3kw1zpm.js";
9
9
  import {
10
10
  DEFAULT_WORKTREE_ISOLATION_CONFIG,
11
11
  init_constants
@@ -1,7 +1,10 @@
1
1
  // @bun
2
+ import {
3
+ canonicalRootKeyFresh
4
+ } from "./index-ddszzne4.js";
2
5
  import {
3
6
  validateSwarmPath
4
- } from "./index-4cgee5vh.js";
7
+ } from "./index-dtn0pne5.js";
5
8
  import {
6
9
  bunWrite
7
10
  } from "./index-r3mvsbtq.js";
@@ -17,6 +20,9 @@ import {
17
20
  init_logger,
18
21
  warn
19
22
  } from "./index-zgwm4ryv.js";
23
+ import {
24
+ __require
25
+ } from "./index-a76rekgs.js";
20
26
 
21
27
  // src/background/pending-delegations.ts
22
28
  init_zod();
@@ -387,6 +393,7 @@ var MAX_LIVE_BACKGROUND_FALLBACKS = 256;
387
393
  var MAX_LIVE_BACKGROUND_CODER_RESERVATIONS = 256;
388
394
  var MAX_BACKGROUND_OBSERVED_FILES = 5000;
389
395
  var MAX_BACKGROUND_ADVISORY_CHARS = 4000;
396
+ var LEGACY_CODER_SETTLEMENT_PENDING_ADVISORY_MARKER = "legacy coder settlement transfer is pending";
390
397
  var MAX_BACKGROUND_DELEGATION_GENERATION = 1e6;
391
398
  var MAX_RECOVERY_FALLBACK_BYTES = 1024 * 1024;
392
399
  var DELEGATION_COMPACTION_LOW_WATER_BYTES = 256 * 1024;
@@ -674,6 +681,11 @@ var RecordSchema = exports_external.object({
674
681
  terminalResult: TerminalResultSchema.optional(),
675
682
  coderSettlement: CoderSettlementSchema.optional(),
676
683
  advisoryInbox: AdvisoryInboxSchema.optional(),
684
+ legacyCoderSettlementTransfer: exports_external.object({
685
+ taskId: exports_external.string().min(1).max(256),
686
+ transitionId: exports_external.string().min(1).max(256),
687
+ updatedAt: exports_external.number().nonnegative()
688
+ }).strict().optional(),
677
689
  ingestion: DelegationIngestionSchema.optional(),
678
690
  result: ResultSchema.optional(),
679
691
  completedAt: exports_external.number().optional()
@@ -1132,6 +1144,8 @@ function isCheckpointLiveRecord(record) {
1132
1144
  return true;
1133
1145
  if (record.advisoryInbox?.state === "pending")
1134
1146
  return true;
1147
+ if (record.legacyCoderSettlementTransfer)
1148
+ return true;
1135
1149
  const settlement = record.coderSettlement;
1136
1150
  if (settlement && settlement.state !== "settled")
1137
1151
  return true;
@@ -1986,6 +2000,99 @@ async function updateCoderSettlement(directory, correlationId, input) {
1986
2000
  return null;
1987
2001
  }
1988
2002
  }
2003
+ var MAX_LEGACY_CODER_SETTLEMENT_RECONCILERS = 32;
2004
+ var RETRYABLE_LEGACY_SETTLEMENT_ERROR_CODES = new Set([
2005
+ "CODER_SETTLEMENT_LOCKED",
2006
+ "EACCES",
2007
+ "EBUSY",
2008
+ "EIO",
2009
+ "EPERM",
2010
+ "ETIMEDOUT"
2011
+ ]);
2012
+ var legacyCoderSettlementReconcilers = new Map;
2013
+ var legacyCoderSettlementReconcilerOrder = [];
2014
+ function registerLegacyCoderSettlementReconciler(directory, reconciler) {
2015
+ const key = canonicalRootKeyFresh(directory);
2016
+ if (legacyCoderSettlementReconcilers.has(key)) {
2017
+ const existingIndex = legacyCoderSettlementReconcilerOrder.indexOf(key);
2018
+ if (existingIndex >= 0) {
2019
+ legacyCoderSettlementReconcilerOrder.splice(existingIndex, 1);
2020
+ }
2021
+ legacyCoderSettlementReconcilerOrder.push(key);
2022
+ legacyCoderSettlementReconcilers.set(key, reconciler);
2023
+ return;
2024
+ }
2025
+ if (legacyCoderSettlementReconcilerOrder.length >= MAX_LEGACY_CODER_SETTLEMENT_RECONCILERS) {
2026
+ const evicted = legacyCoderSettlementReconcilerOrder.shift();
2027
+ if (evicted)
2028
+ legacyCoderSettlementReconcilers.delete(evicted);
2029
+ }
2030
+ legacyCoderSettlementReconcilerOrder.push(key);
2031
+ legacyCoderSettlementReconcilers.set(key, reconciler);
2032
+ }
2033
+ function getLegacyCoderSettlementReconciler(directory) {
2034
+ return legacyCoderSettlementReconcilers.get(canonicalRootKeyFresh(directory));
2035
+ }
2036
+ var _internals = {
2037
+ getLegacyCoderSettlementReconciler,
2038
+ getLegacyCoderSettlementReconcilerOrder: () => [
2039
+ ...legacyCoderSettlementReconcilerOrder
2040
+ ],
2041
+ resetLegacyCoderSettlementReconcilers: () => {
2042
+ legacyCoderSettlementReconcilers.clear();
2043
+ legacyCoderSettlementReconcilerOrder.length = 0;
2044
+ }
2045
+ };
2046
+ async function markLegacyCoderSettlementTransferPending(directory, correlationId, transfer) {
2047
+ return updateLegacyCoderSettlementTransfer(directory, correlationId, transfer);
2048
+ }
2049
+ async function clearLegacyCoderSettlementTransferPending(directory, correlationId) {
2050
+ return updateLegacyCoderSettlementTransfer(directory, correlationId, null);
2051
+ }
2052
+ async function updateLegacyCoderSettlementTransfer(directory, correlationId, transfer) {
2053
+ if (!correlationId)
2054
+ return null;
2055
+ let result = null;
2056
+ try {
2057
+ await withEvidenceLock(directory, BACKGROUND_DELEGATIONS_FILE, STORE_LOCK_AGENT, STORE_LOCK_TASK, async () => {
2058
+ const records = loadRecordsForWrite(directory);
2059
+ if (records === null)
2060
+ return;
2061
+ const current = findRecordForWrite(records, correlationId);
2062
+ if (!current)
2063
+ return;
2064
+ if (transfer && (current.status === "consumed" || current.legacyCoderSettlementTransfer && (current.legacyCoderSettlementTransfer.taskId !== transfer.taskId || current.legacyCoderSettlementTransfer.transitionId !== transfer.transitionId))) {
2065
+ result = current;
2066
+ return;
2067
+ }
2068
+ const updatedAt = Date.now();
2069
+ const next = transfer ? {
2070
+ ...current,
2071
+ schemaVersion: 3,
2072
+ legacyCoderSettlementTransfer: {
2073
+ ...transfer,
2074
+ updatedAt
2075
+ },
2076
+ updatedAt
2077
+ } : (() => {
2078
+ const { legacyCoderSettlementTransfer: _pending, ...rest } = current;
2079
+ return {
2080
+ ...rest,
2081
+ schemaVersion: 3,
2082
+ updatedAt
2083
+ };
2084
+ })();
2085
+ if (!RecordSchema.safeParse(next).success)
2086
+ return;
2087
+ appendRecord(directory, next);
2088
+ maybeCompactDelegationsLocked(directory);
2089
+ result = next;
2090
+ });
2091
+ } catch (error) {
2092
+ warn(`[background] legacy coder settlement transfer marker update failed: ${error instanceof Error ? error.message : String(error)}`);
2093
+ }
2094
+ return result;
2095
+ }
1989
2096
  async function claimDelegationIngestion(directory, correlationId, options) {
1990
2097
  if (!correlationId || !options.claimantId)
1991
2098
  return null;
@@ -2129,6 +2236,50 @@ async function putPendingBackgroundAdvisory(directory, correlationId, input) {
2129
2236
  return null;
2130
2237
  }
2131
2238
  }
2239
+ async function replacePendingBackgroundAdvisory(directory, correlationId, input) {
2240
+ const createdAt = input.createdAt ?? Date.now();
2241
+ const parsed = AdvisoryInboxSchema.safeParse({
2242
+ eventId: input.eventId,
2243
+ parentSessionId: input.parentSessionId,
2244
+ state: "pending",
2245
+ message: input.message,
2246
+ createdAt
2247
+ });
2248
+ if (!correlationId || !parsed.success)
2249
+ return null;
2250
+ let result = null;
2251
+ try {
2252
+ await withEvidenceLock(directory, BACKGROUND_DELEGATIONS_FILE, STORE_LOCK_AGENT, STORE_LOCK_TASK, async () => {
2253
+ const records = loadRecordsForWrite(directory);
2254
+ if (records === null)
2255
+ return;
2256
+ const current = findRecordForWrite(records, correlationId);
2257
+ const existing = current?.advisoryInbox;
2258
+ if (!current?.terminalResult || current.terminalResult.eventId !== parsed.data.eventId || current.parentSessionId !== parsed.data.parentSessionId || !existing || !existing.message.includes(LEGACY_CODER_SETTLEMENT_PENDING_ADVISORY_MARKER) || parsed.data.message.includes(LEGACY_CODER_SETTLEMENT_PENDING_ADVISORY_MARKER)) {
2259
+ if (existing && existing.eventId === parsed.data.eventId && existing.parentSessionId === parsed.data.parentSessionId && existing.message === parsed.data.message) {
2260
+ result = { advisory: existing };
2261
+ }
2262
+ return;
2263
+ }
2264
+ const next = {
2265
+ ...current,
2266
+ schemaVersion: 3,
2267
+ advisoryInbox: parsed.data,
2268
+ updatedAt: createdAt
2269
+ };
2270
+ appendRecord(directory, next);
2271
+ maybeCompactDelegationsLocked(directory);
2272
+ result = {
2273
+ advisory: parsed.data,
2274
+ replacedMessage: existing.message
2275
+ };
2276
+ });
2277
+ return result;
2278
+ } catch (err) {
2279
+ warn(`[background] replacePendingBackgroundAdvisory failed: ${err instanceof Error ? err.message : String(err)}`);
2280
+ return null;
2281
+ }
2282
+ }
2132
2283
  async function preparePendingBackgroundAdvisories(directory, parentSessionId, options) {
2133
2284
  if (!parentSessionId || !options.preparationId)
2134
2285
  return [];
@@ -2940,6 +3091,74 @@ async function releaseBackgroundCoderReservation(directory, input) {
2940
3091
  }
2941
3092
  var DEFAULT_MAINTENANCE_LOCK_TIMEOUT_MS = 5000;
2942
3093
  var DEFAULT_MAINTENANCE_BATCH = 256;
3094
+ async function reconcileLegacyCoderSettlements(directory, maxRecords, onReconciled, onAdvisoryReplaced) {
3095
+ const reconciler = onReconciled ?? getLegacyCoderSettlementReconciler(directory);
3096
+ const candidates = readDelegations(directory).filter((record) => record.normalizedAgent === "coder" && Boolean(record.legacyCoderSettlementTransfer) && Boolean(record.terminalResult)).slice(0, maxRecords);
3097
+ if (candidates.length === 0)
3098
+ return 0;
3099
+ const { transferCoderSettlementToBackground } = await import("./coder-settlement-7c9h07f5.js");
3100
+ let transferred = 0;
3101
+ for (const record of candidates) {
3102
+ try {
3103
+ const outcome = await transferCoderSettlementToBackground({
3104
+ directory,
3105
+ taskId: record.legacyCoderSettlementTransfer.taskId,
3106
+ transitionId: record.legacyCoderSettlementTransfer.transitionId
3107
+ });
3108
+ if ((outcome === "transferred" || outcome === "already-terminal" || outcome === "missing") && reconciler) {
3109
+ if (await reconciler(record)) {
3110
+ await clearLegacyCoderSettlementTransferPending(directory, record.correlationId);
3111
+ }
3112
+ }
3113
+ if (outcome === "transferred")
3114
+ transferred += 1;
3115
+ } catch (error) {
3116
+ const code = legacySettlementErrorCode(error);
3117
+ if (!RETRYABLE_LEGACY_SETTLEMENT_ERROR_CODES.has(code ?? "")) {
3118
+ const advisory = record.advisoryInbox;
3119
+ const manualMessage = `[BACKGROUND COMPLETION ${record.terminalResult?.eventId ?? record.correlationId}] coder task ${record.evidenceTaskId ?? record.planTaskId ?? "unknown"} legacy coder settlement requires manual recovery; run /swarm recover for this task (or /swarm reset-session).`;
3120
+ let advisoryRecorded = false;
3121
+ if (advisory?.state === "pending") {
3122
+ const replaced = await replacePendingBackgroundAdvisory(directory, record.correlationId, {
3123
+ eventId: advisory.eventId,
3124
+ parentSessionId: advisory.parentSessionId,
3125
+ message: manualMessage
3126
+ });
3127
+ advisoryRecorded = replaced !== null;
3128
+ if (replaced) {
3129
+ try {
3130
+ await onAdvisoryReplaced?.(record, replaced);
3131
+ } catch (callbackError) {
3132
+ warn(`[background] legacy coder settlement advisory replacement notification failed for ${record.correlationId}: ${callbackError instanceof Error ? callbackError.message : String(callbackError)}`);
3133
+ }
3134
+ }
3135
+ } else if (record.terminalResult) {
3136
+ const stored = await putPendingBackgroundAdvisory(directory, record.correlationId, {
3137
+ eventId: record.terminalResult.eventId,
3138
+ parentSessionId: record.parentSessionId,
3139
+ message: manualMessage
3140
+ });
3141
+ advisoryRecorded = stored !== null;
3142
+ }
3143
+ if (advisoryRecorded) {
3144
+ await clearLegacyCoderSettlementTransferPending(directory, record.correlationId);
3145
+ }
3146
+ warn(`[background] legacy coder settlement reconciliation requires manual recovery for ${record.correlationId}: ${code ?? "unknown transfer failure"}`);
3147
+ continue;
3148
+ }
3149
+ warn(`[background] legacy coder settlement reconciliation deferred for ${record.correlationId}: ${error instanceof Error ? error.message : String(error)}`);
3150
+ }
3151
+ }
3152
+ return transferred;
3153
+ }
3154
+ function legacySettlementErrorCode(error) {
3155
+ if (error && typeof error === "object" && "code" in error && typeof error.code === "string") {
3156
+ return error.code ?? null;
3157
+ }
3158
+ const detail = error instanceof Error ? error.message : String(error);
3159
+ const match = /^([A-Z][A-Z0-9_]*)(?::|$)/.exec(detail.trim());
3160
+ return match?.[1] ?? null;
3161
+ }
2943
3162
  async function maintainBackgroundDelegations(directory, options = {}) {
2944
3163
  const now = options.now ?? Date.now();
2945
3164
  const staleTimeoutMs = options.staleTimeoutMs ?? DEFAULT_STALE_DELEGATION_TIMEOUT_MS;
@@ -3221,10 +3440,17 @@ async function maintainBackgroundDelegations(directory, options = {}) {
3221
3440
  });
3222
3441
  return emitObservation("failure", error instanceof Error ? error.message : String(error));
3223
3442
  }
3443
+ if (!options.skipLegacyCoderSettlementReconciliation) {
3444
+ try {
3445
+ await reconcileLegacyCoderSettlements(directory, maxRecords, options.onLegacyCoderSettlementReconciled ?? getLegacyCoderSettlementReconciler(directory), options.onLegacyCoderSettlementAdvisoryReplaced);
3446
+ } catch (error) {
3447
+ warn(`[background] legacy coder settlement reconciliation pass failed: ${error instanceof Error ? error.message : String(error)}`);
3448
+ }
3449
+ }
3224
3450
  if (result.status === "failure") {
3225
3451
  return emitObservation("failure", result.reason);
3226
3452
  }
3227
3453
  return emitObservation("ok");
3228
3454
  }
3229
3455
 
3230
- export { MAX_RECOVERY_LEDGER_BYTES, readDelegationHealthArtifact, collectDelegationLedgerHealth, MAX_PR_REVIEW_COLLECTION_RECEIPT_ITEM_IDS, BACKGROUND_DELEGATIONS_FILE, BACKGROUND_DELEGATION_FALLBACK_DIR, BACKGROUND_CODER_RESERVATIONS_FILE, BACKGROUND_DELEGATIONS_CHECKPOINT_FILE, BACKGROUND_DELEGATIONS_MANIFEST_FILE, MAX_LIVE_BACKGROUND_FALLBACKS, MAX_LIVE_BACKGROUND_CODER_RESERVATIONS, MAX_BACKGROUND_OBSERVED_FILES, MAX_BACKGROUND_ADVISORY_CHARS, DELEGATION_COMPACTION_LOW_WATER_BYTES, DELEGATION_COMPACTION_HIGH_WATER_BYTES, MAX_CHECKPOINT_BYTES, MAX_CHECKPOINT_RECORDS, TOMBSTONE_MIN_AGE_MS, BACKGROUND_INGESTION_LEASE_MS, BACKGROUND_CODER_RESERVATION_LEASE_MS, BACKGROUND_CODER_RESERVATION_LEASE_MAX_MS, BACKGROUND_CODER_RESERVATION_LEASE_MIN_MS, DEFAULT_STALE_DELEGATION_TIMEOUT_MS, DEFAULT_SWEEPABLE_DELEGATION_STATUSES, _checkpointInternals, isUnsettledWorktreeOwner, compactBackgroundDelegations, readDelegations, scanDelegationsForRecovery, findByCorrelationId, recordPendingDelegationDetailed, recordPendingDelegation, buildPromptSnapshot, appendDelegationTransition, buildBackgroundCompletionEventId, claimTerminalResult, claimCoderSettlement, normalizeBackgroundObservedFiles, updateCoderSettlement, claimDelegationIngestion, recordDelegationIngestionResult, putPendingBackgroundAdvisory, preparePendingBackgroundAdvisories, acknowledgeObservedBackgroundAdvisories, releasePreparedBackgroundAdvisories, findByBatchId, findOpenAsyncLaneBatches, sweepStaleDelegations, readDelegationFallback, listDelegationFallbacks, scanDelegationFallbacksForRecovery, writeDelegationFallback, removeDelegationFallback, findDelegationForCompletion, promoteDelegationFallback, buildBackgroundCoderReservationId, scanBackgroundCoderReservationsForAdmission, reserveBackgroundCoderSlot, bindBackgroundCoderReservation, releaseBackgroundCoderReservation, maintainBackgroundDelegations };
3456
+ export { MAX_RECOVERY_LEDGER_BYTES, readDelegationHealthArtifact, collectDelegationLedgerHealth, MAX_PR_REVIEW_COLLECTION_RECEIPT_ITEM_IDS, BACKGROUND_DELEGATIONS_FILE, BACKGROUND_DELEGATION_FALLBACK_DIR, BACKGROUND_CODER_RESERVATIONS_FILE, BACKGROUND_DELEGATIONS_CHECKPOINT_FILE, BACKGROUND_DELEGATIONS_MANIFEST_FILE, MAX_LIVE_BACKGROUND_FALLBACKS, MAX_LIVE_BACKGROUND_CODER_RESERVATIONS, MAX_BACKGROUND_OBSERVED_FILES, MAX_BACKGROUND_ADVISORY_CHARS, LEGACY_CODER_SETTLEMENT_PENDING_ADVISORY_MARKER, DELEGATION_COMPACTION_LOW_WATER_BYTES, DELEGATION_COMPACTION_HIGH_WATER_BYTES, MAX_CHECKPOINT_BYTES, MAX_CHECKPOINT_RECORDS, TOMBSTONE_MIN_AGE_MS, BACKGROUND_INGESTION_LEASE_MS, BACKGROUND_CODER_RESERVATION_LEASE_MS, BACKGROUND_CODER_RESERVATION_LEASE_MAX_MS, BACKGROUND_CODER_RESERVATION_LEASE_MIN_MS, DEFAULT_STALE_DELEGATION_TIMEOUT_MS, DEFAULT_SWEEPABLE_DELEGATION_STATUSES, _checkpointInternals, isUnsettledWorktreeOwner, compactBackgroundDelegations, readDelegations, scanDelegationsForRecovery, findByCorrelationId, recordPendingDelegationDetailed, recordPendingDelegation, buildPromptSnapshot, appendDelegationTransition, buildBackgroundCompletionEventId, claimTerminalResult, claimCoderSettlement, normalizeBackgroundObservedFiles, updateCoderSettlement, registerLegacyCoderSettlementReconciler, _internals, markLegacyCoderSettlementTransferPending, clearLegacyCoderSettlementTransferPending, claimDelegationIngestion, recordDelegationIngestionResult, putPendingBackgroundAdvisory, replacePendingBackgroundAdvisory, preparePendingBackgroundAdvisories, acknowledgeObservedBackgroundAdvisories, releasePreparedBackgroundAdvisories, findByBatchId, findOpenAsyncLaneBatches, sweepStaleDelegations, readDelegationFallback, listDelegationFallbacks, scanDelegationFallbacksForRecovery, writeDelegationFallback, removeDelegationFallback, findDelegationForCompletion, promoteDelegationFallback, buildBackgroundCoderReservationId, scanBackgroundCoderReservationsForAdmission, reserveBackgroundCoderSlot, bindBackgroundCoderReservation, releaseBackgroundCoderReservation, maintainBackgroundDelegations };