opencode-swarm 7.144.2 → 7.144.4

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 (80) hide show
  1. package/.opencode/skills/swarm-pr-review/SKILL.md +3 -1
  2. package/.opencode/skills/swarm-pr-review/references/lane-output-recoverability.md +124 -0
  3. package/.opencode/skills/swarm-pr-review/references/prompt-templates.md +2 -0
  4. package/README.md +3 -1
  5. package/dist/background/pending-delegations.d.ts +34 -0
  6. package/dist/cli/{config-doctor-7dfvxwjb.js → config-doctor-rw9zrjk6.js} +3 -3
  7. package/dist/cli/{core-dwmwdc4y.js → core-zjx9aqaf.js} +3 -3
  8. package/dist/cli/{curation-policy-pkb2eeb1.js → curation-policy-0wbrh11c.js} +5 -5
  9. package/dist/cli/curator-drift-2jbjv03a.js +1 -1
  10. package/dist/cli/{curator-w213v33y.js → curator-g54a7wv0.js} +33 -33
  11. package/dist/cli/{curator-llm-factory-rrs1q4hg.js → curator-llm-factory-xgb4pxmm.js} +33 -33
  12. package/dist/cli/{evidence-summary-service-t7n2h1he.js → evidence-summary-service-fnr5y54e.js} +14 -14
  13. package/dist/cli/{gate-evidence-xvxn603y.js → gate-evidence-2xt1x07r.js} +7 -7
  14. package/dist/cli/{guardrail-explain-v1mwsnkq.js → guardrail-explain-6wcgr9tz.js} +34 -34
  15. package/dist/cli/{guardrail-log-dn03dpz2.js → guardrail-log-5w4b9zrw.js} +4 -4
  16. package/dist/cli/{hive-promoter-asjtj7ga.js → hive-promoter-x63ehffd.js} +35 -35
  17. package/dist/cli/{index-ckrasab9.js → index-03pv47h2.js} +9 -9
  18. package/dist/cli/{index-4q9vfav6.js → index-1csyxv0f.js} +1 -1
  19. package/dist/cli/{index-s2rcz51a.js → index-1jsmmx7y.js} +66 -34
  20. package/dist/cli/{index-jsfghpy2.js → index-2m7mavaz.js} +2 -2
  21. package/dist/cli/{index-p3tnmkvc.js → index-4w5qdbk7.js} +12 -12
  22. package/dist/cli/{index-dhh2j2nd.js → index-8j0va7jp.js} +2 -2
  23. package/dist/cli/{index-y95nwsge.js → index-9qq7c18c.js} +1 -1
  24. package/dist/cli/{index-qpt8ahph.js → index-az8etqpp.js} +12 -12
  25. package/dist/cli/{index-gdd4jt6b.js → index-bt9aa01f.js} +1 -1
  26. package/dist/cli/{index-333kvewd.js → index-btmsqv7p.js} +4 -4
  27. package/dist/cli/{index-d55crzd4.js → index-cz25e8xp.js} +7 -7
  28. package/dist/cli/{index-g2ajae1z.js → index-d12jd5mn.js} +2 -2
  29. package/dist/cli/{index-tq5s07ta.js → index-dty5qgk2.js} +1 -1
  30. package/dist/cli/{index-k31en0ja.js → index-f9vvg5xb.js} +3 -3
  31. package/dist/cli/{index-k92cagmt.js → index-fqcjragy.js} +2 -2
  32. package/dist/cli/{index-jb4tchvy.js → index-h98t1m88.js} +2 -2
  33. package/dist/cli/{index-4fda8kkw.js → index-jabkn643.js} +30 -5
  34. package/dist/cli/{index-erfnw81g.js → index-mazgg5s2.js} +1 -1
  35. package/dist/cli/{index-m6wv2qdr.js → index-nckg4gxb.js} +2 -2
  36. package/dist/cli/{index-tg9fn2dy.js → index-p7cm3gtj.js} +38 -36
  37. package/dist/cli/{index-dg2w0wr4.js → index-psvxq93b.js} +3 -3
  38. package/dist/cli/{index-zr370283.js → index-pw83zgny.js} +3 -3
  39. package/dist/cli/{index-nretd4qn.js → index-q4ed1jk7.js} +1539 -963
  40. package/dist/cli/{index-hqvt3mhk.js → index-q67jb94n.js} +1 -1
  41. package/dist/cli/{index-whezv7vc.js → index-v3y3qg48.js} +1 -1
  42. package/dist/cli/{index-av0f6mm0.js → index-x6tp0hfr.js} +9 -9
  43. package/dist/cli/{index-h3z64mhz.js → index-y8j8ehc8.js} +2 -2
  44. package/dist/cli/{index-ne8cfgw5.js → index-yts89pqg.js} +4 -4
  45. package/dist/cli/{index-w7x7qxz2.js → index-ywn7vtxp.js} +1 -1
  46. package/dist/cli/{index-g1c5fgaw.js → index-z6v7kwpa.js} +4 -4
  47. package/dist/cli/{index-7ca3a6gj.js → index-zb0xcz9t.js} +10 -10
  48. package/dist/cli/index.js +34 -34
  49. package/dist/cli/{knowledge-escalator-cg19dhe5.js → knowledge-escalator-ypg14d5r.js} +13 -13
  50. package/dist/cli/{knowledge-events-yzvysaqd.js → knowledge-events-nkrym4wb.js} +11 -11
  51. package/dist/cli/{knowledge-link-fn5j3r4q.js → knowledge-link-e4qgqmpx.js} +4 -4
  52. package/dist/cli/{knowledge-store-6f77xpmm.js → knowledge-store-vh3nhtg2.js} +6 -6
  53. package/dist/cli/{knowledge-validator-4b28zdxa.js → knowledge-validator-jrxvexv6.js} +8 -8
  54. package/dist/cli/{pending-delegations-thy8g30k.js → pending-delegations-pw79c8ds.js} +3 -3
  55. package/dist/cli/{pr-subscriptions-jyav582d.js → pr-subscriptions-fk628bhc.js} +3 -3
  56. package/dist/cli/{runner-pde6b5sx.js → runner-b02sz2vx.js} +5 -5
  57. package/dist/cli/{scan-cursor-nqbb1xt6.js → scan-cursor-fp7w5jmc.js} +7 -7
  58. package/dist/cli/{schema-jj2pb6zp.js → schema-rptwqbm4.js} +2 -2
  59. package/dist/cli/{scope-persistence-63nasq0z.js → scope-persistence-0bkaxawa.js} +7 -7
  60. package/dist/cli/{skill-generator-nsymtdqm.js → skill-generator-nh8b4gjv.js} +16 -16
  61. package/dist/cli/{telemetry-xyfb5vm8.js → telemetry-cybx6cfz.js} +1 -1
  62. package/dist/cli/{worktree-collision-ownership-j6d33p49.js → worktree-collision-ownership-hqd9ypsz.js} +6 -6
  63. package/dist/cli/{worktree-isolation-g54kxw6x.js → worktree-isolation-canf3rj8.js} +33 -33
  64. package/dist/commands/index.d.ts +1 -0
  65. package/dist/commands/recover.d.ts +17 -0
  66. package/dist/commands/registry.d.ts +10 -2
  67. package/dist/commands/reset-session.d.ts +2 -0
  68. package/dist/hooks/context-budget.d.ts +4 -0
  69. package/dist/hooks/context-usage.d.ts +48 -0
  70. package/dist/hooks/pr-workflow-gate.d.ts +160 -4
  71. package/dist/index.js +556 -550
  72. package/dist/observability/catalog.d.ts +8 -6
  73. package/dist/sast/semgrep.d.ts +3 -2
  74. package/dist/telemetry.d.ts +17 -1
  75. package/dist/tools/context-status.d.ts +9 -3
  76. package/dist/tools/dispatch-lanes.d.ts +27 -2
  77. package/dist/tools/pre-check-batch.d.ts +9 -0
  78. package/dist/tools/sast-scan.d.ts +3 -0
  79. package/dist/workflow/coder-settlement.d.ts +74 -0
  80. package/package.json +1 -1
@@ -915,6 +915,8 @@ or synthesis begins, whichever layer enforces it.
915
915
 
916
916
  Inline `output` is delivered on the first poll that observes a lane settled; subsequent polls carry `output_omitted_repeat: true` with metadata and `output_ref`, and full text is retrieved via `retrieve_lane_output`.
917
917
 
918
+ Host transport metadata is not stronger than the durable artifact. A truncated inline preview is accepted when its full `output_ref` artifact passes every identity, digest, revision, ownership, and row-coverage check. If the host status call times out, collection treats readiness as unknown and may inspect messages under a separate bounded budget, but it settles the lane only when the latest assistant message carries terminal proof. Only base and micro discovery lanes may retain independently validated positive `[CANDIDATE]` coverage from an incomplete transcript; council, reviewer, and critic outputs remain fail-closed and require retry. Incompleteness can never establish `[CLEAN]`, including for sibling dimensions in a consolidated lane. Every accepted transport recovery is disclosed in `salvaged_workflow_lanes`, with typed per-lane reasons in `salvaged_workflow_lane_recoveries`. See `references/lane-output-recoverability.md`.
919
+
918
920
  Before Phase 4 or synthesis, all base lanes must be settled. `dispatch_lanes_async` accepts a maximum of 8 lanes per call; base lanes (6) and micro-lanes (Phase 4) are dispatched in separate calls by design. Do not let one lane's conclusions bias another lane.
919
921
 
920
922
  **COVERAGE GATE — zero tolerance for unclosed gaps.** After `collect_lane_results`, verify every lane produced validated output. Two failure modes exist:
@@ -991,7 +993,7 @@ candidate parser rather than preview-text extraction:
991
993
  4. Stage reviewer-sized chunks, but do not dispatch reviewers yet. Phase 4 must
992
994
  complete trigger accounting and settle every launched micro-lane first.
993
995
 
994
- If a lane has `output_degraded: true`, `transcript_incomplete: true`, or no usable `output_ref`, apply the COVERAGE GATE (Phase 3). Do not use blocking or direct-Task fallbacks while the controller is active, mark affected candidates UNVERIFIED to proceed, or infer candidate absence from a preview. Under Profiles B/C, a truncated, empty, or attestation-free subagent report is the same lane-output failure and takes the same COVERAGE GATE.
996
+ If a lane has `output_degraded: true`, no usable `output_ref`, or `transcript_incomplete: true` without typed positive-candidate recovery, apply the COVERAGE GATE (Phase 3). An incomplete base or micro discovery lane may proceed only when it is explicitly named by a `salvaged_workflow_lane_recoveries` entry whose `kind` is `transcript-incomplete-terminal-candidate`; that recovery validates the retained positive `[CANDIDATE]` row only. Council, reviewer, and critic lanes never qualify for this incomplete-transcript recovery and must retry. Recovery never validates `[CLEAN]`, candidate absence, an unowned sibling lane, or an incomplete lane with no matching entry. Do not use blocking or direct-Task fallbacks while the controller is active, mark affected candidates UNVERIFIED to proceed, or infer candidate absence from a preview. Under Profiles B/C, which have no typed recovery validation, a truncated, incomplete, empty, or attestation-free subagent report is the same lane-output failure and takes the same COVERAGE GATE.
995
997
 
996
998
  After candidate parsing and before reviewer dispatch, persist the post-explorer
997
999
  candidate ledger using the Review Finding Persistence contract. This is the
@@ -25,6 +25,34 @@ do not. The per-obligation CLEAN rules: a `[CLEAN]` conflicts with `[CANDIDATE]`
25
25
  rows only for the SAME lane; a valid CLEAN for a different lane in an unscoped
26
26
  parse is skipped, not an error; duplicates for the same lane still fail.
27
27
 
28
+ ## Host-transport recovery (recorded as salvage)
29
+
30
+ Collection preserves a strict evidence hierarchy: the complete immutable
31
+ `output_ref` artifact outranks its bounded inline preview. Consequently,
32
+ `result.truncated` is not a failure when that artifact still passes identity,
33
+ digest, exact-head, scope, ownership, and row-coverage validation. The affected
34
+ workflow lane is recorded in `salvaged_workflow_lanes` even when no parser repair
35
+ was necessary. That compatibility list is paired with typed per-lane metadata in
36
+ `salvaged_workflow_lane_recoveries`.
37
+
38
+ A host `session.status` timeout means readiness is **unknown**, not busy and not
39
+ complete. Status and message calls receive separate fair bounded budgets so one
40
+ lane cannot starve later lanes. For unknown readiness, a readable transcript is
41
+ accepted only when the newest assistant message proves terminal completion; a
42
+ mid-run snapshot remains pending. Invalid output also remains pending while
43
+ readiness is unknown, because the agent may still be producing its protocol row.
44
+
45
+ When the host message window is incomplete, independently validated positive
46
+ `[CANDIDATE]` rows may be recovered only for base and micro discovery lanes;
47
+ their exact owned workflow lanes are marked salvaged. Council, reviewer, and
48
+ critic outputs remain fail-closed and require retry when incomplete. `[CLEAN]`
49
+ is absence evidence and therefore requires a complete transcript. One positive
50
+ row in a consolidated lane never salvages a sibling dimension whose only
51
+ evidence is `[CLEAN]` or missing. Recovery reasons are lane-scoped and use four
52
+ kinds: `parser-normalization`, `parser-row-recovery`,
53
+ `truncated-preview-durable-artifact`, and
54
+ `transcript-incomplete-terminal-candidate`.
55
+
28
56
  ## Verdict-row pipe tolerance and its fidelity boundary
29
57
 
30
58
  `[REVIEWED]` (10-field), `[CRITIC]` (6-field), and `[FEEDBACK-VERIFIED]`
@@ -136,6 +164,102 @@ A lane with a **recent** `updatedAt` still blocks — a check that can run and
136
164
  reports "still progressing" is not softened. Collect it with
137
165
  `collect_lane_results`, or wait for the horizon.
138
166
 
167
+ ### A live session past the horizon is retained, not discarded
168
+
169
+ Nothing heartbeats `updatedAt`, so age alone cannot tell a dead lane from a slow
170
+ one. Before settling anything, the gate now runs a **liveness probe** over the
171
+ stale candidates: if the host affirmatively reports a lane's session as `busy` or
172
+ `retry`, that lane is **retained** — it keeps blocking, its record stays
173
+ `pending`/`running`, and its transcript stays collectable.
174
+
175
+ The probe is deliberately **fail-open**. For its error and no-data cases that is
176
+ the inverse of the collector's readiness check, which refuses to collect a lane it
177
+ cannot verify; the two agree rather than invert on a host that exposes no
178
+ `session.status` at all, where the collector proceeds and the probe reports
179
+ `probe-unavailable`. Only a probe that RAN and named a live session may contradict
180
+ staleness. Every other outcome settles exactly as age alone would, and says why:
181
+
182
+ | Outcome | `probe_status` |
183
+ | --- | --- |
184
+ | No session handle, or the host exposes no `status` | `probe-unavailable` |
185
+ | The call threw | `probe-error` |
186
+ | The call exceeded the 5s probe deadline | `probe-timeout` |
187
+ | The response carried an `error` | `probe-error` |
188
+ | The response carried no `data` | `probe-no-data` |
189
+
190
+ Where it surfaces: `probe_retained_lanes` on the `complete_pr_workflow` response,
191
+ `probe_status` on both tool responses, `probedAliveLanes` / `probeStatus` on the
192
+ `pr_workflow_lanes_presumed_stale` record, and `probeRetainedLanes` /
193
+ `probeStatus` / `probeRetentionOverrideLanes` on the `pr_workflow_aborted` event.
194
+ Note that the event's `openLanes` now counts fresh open lanes PLUS probe-retained
195
+ lanes, so a successful force abort can record a non-zero value where it always
196
+ recorded `0` before. The settled-lane disclosure
197
+ appends either `liveness probe found no live session` or `settled despite
198
+ liveness probe failure (<reason>)`, so "re-verified" and "not re-verified" are
199
+ never confused.
200
+
201
+ **Retention has one override, and it is human-only.** A session that never goes
202
+ idle would otherwise make the workflow permanently unexitable. `/swarm
203
+ abort-pr-workflow` (the `force` path, not agent-callable) clears the gate when
204
+ probe-retained lanes are the ONLY thing still blocking, and discloses exactly
205
+ which lanes it overrode — those sessions are not stopped and their output is not
206
+ collected. A lane with a fresh `updatedAt` is never overridden.
207
+
208
+ On that override path only, the overridden lanes' delegation records are also
209
+ finalized to `stale` — immediately **after** the gate clears, never before.
210
+ Without that finalization the session would be left un-restartable:
211
+ `prepare_pr_workflow_checkout` refuses while any `pending` / `running`
212
+ `swarm-pr-*` record of the session exists, with no age filter, and an overridden
213
+ lane never terminates on its own. So an override is the one case where a retained
214
+ lane's record does NOT stay `pending` and its transcript stops being collectable,
215
+ and the disclosure says so explicitly.
216
+
217
+ The ordering matters for recoverability, which is what this document is about.
218
+ The clear is CAS-guarded and can legitimately lose its compare-and-swap and
219
+ throw; the finalization is irreversible. Doing the irreversible half second means
220
+ a failed clear abandons no RETAINED lane and the operator's retry is a real
221
+ override — so **a `pr_workflow_abort_not_completed` retraction in
222
+ `.swarm/events.jsonl` means the lanes named in `probeRetentionOverrideLanes` were
223
+ not finalized by the override, and their output is still collectable**
224
+ (`probeRetentionOverrideFinalized: false`).
225
+
226
+ Read that scope literally. It does NOT mean the abort finalized nothing:
227
+ settlement durably sweeps the same batch's probe-DEAD lanes to `stale` *before*
228
+ the clear is attempted, so those are already terminal when the retraction is
229
+ written. Nor does it guarantee the named lanes are still `pending` by the time
230
+ you read the record — a concurrent force abort for the same session can clear and
231
+ finalize them, and that is itself one of the ways this CAS loses. Treat
232
+ `.swarm/delegations.jsonl` as the authority and re-read it rather than inferring
233
+ record state from the retraction alone.
234
+
235
+ The override's disclosure separates three facts that used to be conflated, and
236
+ every one of them is a POSITIVE observation rather than an inference from
237
+ absence:
238
+
239
+ 1. Which overridden records went terminal `stale` — named by `correlationId`.
240
+ Only these have output that is no longer collectable.
241
+ 2. Which overridden records the sweep left INTACT because they had already moved
242
+ on — named as `correlationId (status)` with the status actually observed on
243
+ disk. **This abort did not discard them, so check `collect_lane_results`
244
+ before assuming that work is gone.** The clause deliberately stops at "left
245
+ intact" rather than promising collectable output: an `error` or
246
+ `ingestion_error` record comes back as `failed` with no result text, and an
247
+ `ingesting` one is filtered out of `lane_results` until it settles, so the
248
+ status is what tells you whether there is anything to read. An earlier
249
+ version inferred (1) from a lane's absence from the still-open set, and a
250
+ raced-to-`completed` lane is absent for the opposite reason a finalized one
251
+ is, so it was reported as gone while its transcript sat on disk.
252
+ 3. Whether the session can start a new PR workflow. This is read back over EVERY
253
+ still-open `swarm-pr-*` record of the session, not just the overridden ones —
254
+ because the ordinary settlement sweep swallows a store-lock timeout and
255
+ returns `0`, so a lane the abort reported as settled can still be `pending` on
256
+ disk and refuse the next checkout preparation. When that happens the
257
+ disclosure names the blocking `correlationId`s instead of claiming
258
+ restartability.
259
+
260
+ `.swarm/delegations.jsonl` remains the authority on which rows actually went
261
+ terminal.
262
+
139
263
  ### A corrupted gate state no longer defeats abort
140
264
 
141
265
  If the durable gate-state file fails schema validation but is still valid JSON,
@@ -65,6 +65,7 @@ Use this template when dispatching a base explorer:
65
65
  ```text
66
66
  You are a base explorer. Optimize for recall, not final judgment.
67
67
  Return candidates only. Do not use CONFIRMED, DISPROVED, or PRE_EXISTING.
68
+ Do not narrate progress or repeat the prompt. Keep the complete final response at or below 12,000 characters; spend that budget on evidence-bearing rows and the minimum prose needed to make them auditable.
68
69
 
69
70
  Lane:
70
71
  Scope:
@@ -105,6 +106,7 @@ Use this template when dispatching a micro-lane or council explorer:
105
106
  ```text
106
107
  You are a micro-lane or council explorer. Optimize for recall, not final judgment.
107
108
  Return candidates only. Do not use CONFIRMED, DISPROVED, or PRE_EXISTING.
109
+ Do not narrate progress or repeat the prompt. Keep the complete final response at or below 12,000 characters; spend that budget on evidence-bearing rows and the minimum prose needed to make them auditable.
108
110
 
109
111
  Micro/council lane:
110
112
  Scope:
package/README.md CHANGED
@@ -238,12 +238,14 @@ several places depending on your platform and OpenCode version:
238
238
  `~/.config/opencode/node_modules/opencode-swarm/`
239
239
  - Package cache layout:
240
240
  `~/.cache/opencode/packages/opencode-swarm@latest/`
241
+ - Older bare package cache layout:
242
+ `~/.cache/opencode/packages/opencode-swarm/`
241
243
  - Platform-specific macOS / Windows cache roots:
242
244
  `~/Library/Caches/opencode/...`, `%LOCALAPPDATA%\opencode\...`, or `%APPDATA%\opencode\...`
243
245
 
244
246
  The updater also clears known OpenCode lock files (`bun.lock`, `bun.lockb`, and `package-lock.json`) so the next start resolves the latest package.
245
247
 
246
- To upgrade to the latest published version (clears both layouts automatically):
248
+ To upgrade to the latest published version (clears all known layouts automatically):
247
249
 
248
250
  ```bash
249
251
  bunx opencode-swarm update # cache-only refresh, then restart opencode
@@ -212,6 +212,12 @@ export interface BackgroundPromptSnapshot {
212
212
  truncated: boolean;
213
213
  digest: string;
214
214
  }
215
+ export type BackgroundDelegationRecoveryKind = 'parser-normalization' | 'parser-row-recovery' | 'truncated-preview-durable-artifact' | 'transcript-incomplete-terminal-candidate';
216
+ export interface BackgroundDelegationWorkflowLaneRecovery {
217
+ workflowLane: string;
218
+ kind: BackgroundDelegationRecoveryKind;
219
+ reason: string;
220
+ }
215
221
  export interface BackgroundDelegationResult {
216
222
  text?: string;
217
223
  error?: string;
@@ -231,6 +237,13 @@ export interface BackgroundDelegationResult {
231
237
  * a well-formed one after the fact, which is where post-mortems actually look.
232
238
  */
233
239
  salvagedWorkflowLanes?: string[];
240
+ /**
241
+ * Per-workflow-lane recovery disclosures retained on the durable ledger.
242
+ * Unlike `salvagedWorkflowLanes`, which is the compatibility list surface,
243
+ * this captures the exact recovery class and human-readable reason so
244
+ * transport recovery is not collapsed into the same bucket as parser repair.
245
+ */
246
+ salvagedWorkflowLaneRecoveries?: BackgroundDelegationWorkflowLaneRecovery[];
234
247
  }
235
248
  export interface BackgroundTerminalResult {
236
249
  /** Stable identity derived from trusted correlation + immutable result metadata. */
@@ -435,6 +448,7 @@ export declare function appendDelegationTransition(directory: string, correlatio
435
448
  status: BackgroundDelegationStatus;
436
449
  result?: BackgroundDelegationResult;
437
450
  completedAt?: number;
451
+ expectedCurrentStatuses?: readonly BackgroundDelegationStatus[];
438
452
  }): Promise<BackgroundDelegationRecord | null>;
439
453
  export interface BuildBackgroundCompletionEventIdInput {
440
454
  correlationId: string;
@@ -544,9 +558,29 @@ export declare function findOpenAsyncLaneBatches(directory: string): BackgroundD
544
558
  * The sweep is directory-wide with no session or mode filter, so a caller whose
545
559
  * own decision covers only some status classes must narrow accordingly rather
546
560
  * than finalizing records it never reasoned about.
561
+ *
562
+ * `options.excludeCorrelationIds` (issue #2251) is the per-record counterpart:
563
+ * status narrowing cannot express "this specific overdue record was verified
564
+ * alive". Both filters are AND-ed — an excluded record is spared regardless of
565
+ * status or age.
566
+ *
567
+ * `options.includeCorrelationIds` (issue #2251) inverts that: the sweep visits
568
+ * ONLY the named records. It exists so a caller that decided something about a
569
+ * specific, already-identified handful of lanes can finalize exactly those
570
+ * without a directory-wide pass that would also finalize other sessions' records
571
+ * and retryable `ingestion_error` records it never reasoned about. Passing an
572
+ * empty set sweeps nothing.
573
+ *
574
+ * Narrowing to a record does NOT force it terminal: the status and age filters
575
+ * still apply, so a named record that has since reached a terminal status (a
576
+ * lane that completed between the caller's decision and this call) is spared and
577
+ * its collected output survives. That is deliberate — an unconditional write
578
+ * here would re-introduce the very discard this subsystem exists to prevent.
547
579
  */
548
580
  export declare function sweepStaleDelegations(directory: string, timeoutMs: number, options?: {
549
581
  statuses?: ReadonlySet<SweepableDelegationStatus>;
582
+ excludeCorrelationIds?: ReadonlySet<string>;
583
+ includeCorrelationIds?: ReadonlySet<string>;
550
584
  }): Promise<number>;
551
585
  export interface BackgroundDelegationFallbackArtifact {
552
586
  schemaVersion: 1;
@@ -12,10 +12,10 @@ import {
12
12
  shouldRunOnStartup,
13
13
  writeBackupArtifact,
14
14
  writeDoctorArtifact
15
- } from "./index-jb4tchvy.js";
16
- import"./index-h3z64mhz.js";
17
- import"./index-whezv7vc.js";
15
+ } from "./index-h98t1m88.js";
18
16
  import"./index-z6xqpmqg.js";
17
+ import"./index-y8j8ehc8.js";
18
+ import"./index-v3y3qg48.js";
19
19
  import"./index-zjygnfay.js";
20
20
  import"./index-bk5tah7q.js";
21
21
  import"./index-bpmtbmy9.js";
@@ -14,10 +14,10 @@ import {
14
14
  resolveWorktreeBaseDir,
15
15
  shortenWorktreePath,
16
16
  writeLaneProfileToDiskReal
17
- } from "./index-dhh2j2nd.js";
18
- import"./index-4rhhvd1a.js";
19
- import"./index-whezv7vc.js";
17
+ } from "./index-8j0va7jp.js";
20
18
  import"./index-z6xqpmqg.js";
19
+ import"./index-4rhhvd1a.js";
20
+ import"./index-v3y3qg48.js";
21
21
  import"./index-zjygnfay.js";
22
22
  import"./index-4nt52yr9.js";
23
23
  import"./index-zgwm4ryv.js";
@@ -4,14 +4,14 @@ import {
4
4
  authorizeCuration,
5
5
  buildConfigFingerprintInput,
6
6
  readCohortConfigFingerprint
7
- } from "./index-tq5s07ta.js";
7
+ } from "./index-dty5qgk2.js";
8
8
  import"./index-rtry5xyf.js";
9
- import"./index-w7x7qxz2.js";
10
- import"./index-erfnw81g.js";
9
+ import"./index-ywn7vtxp.js";
10
+ import"./index-mazgg5s2.js";
11
11
  import"./index-ed5ykebp.js";
12
- import"./index-k31en0ja.js";
12
+ import"./index-f9vvg5xb.js";
13
+ import"./index-1jsmmx7y.js";
13
14
  import"./index-7g4c7s5r.js";
14
- import"./index-s2rcz51a.js";
15
15
  import"./index-bpmtbmy9.js";
16
16
  import"./index-4nt52yr9.js";
17
17
  import"./index-zgwm4ryv.js";
@@ -10,8 +10,8 @@ import {
10
10
  readSwarmFileAsync,
11
11
  validateSwarmPath
12
12
  } from "./index-rn0eq85g.js";
13
- import"./index-4rhhvd1a.js";
14
13
  import"./index-z6xqpmqg.js";
14
+ import"./index-4rhhvd1a.js";
15
15
  import"./index-zjygnfay.js";
16
16
  import {
17
17
  invalidateCachedArtifact
@@ -14,58 +14,58 @@ import {
14
14
  runCuratorInit,
15
15
  runCuratorPhase,
16
16
  writeCuratorSummary
17
- } from "./index-nretd4qn.js";
18
- import"./index-g2ajae1z.js";
19
- import"./index-jb4tchvy.js";
20
- import"./index-qpt8ahph.js";
17
+ } from "./index-q4ed1jk7.js";
18
+ import"./index-d12jd5mn.js";
19
+ import"./index-h98t1m88.js";
20
+ import"./index-az8etqpp.js";
21
21
  import"./index-134d35c1.js";
22
22
  import"./index-b6e016tv.js";
23
- import"./index-4q9vfav6.js";
24
- import"./index-k92cagmt.js";
23
+ import"./index-1csyxv0f.js";
24
+ import"./index-fqcjragy.js";
25
25
  import"./index-y8552snf.js";
26
- import"./index-m6wv2qdr.js";
26
+ import"./index-nckg4gxb.js";
27
27
  import"./index-70ha9e09.js";
28
28
  import"./index-c8s9a3zh.js";
29
29
  import"./index-9ss2m4rs.js";
30
- import"./index-d55crzd4.js";
31
30
  import"./index-74hpm6sh.js";
32
- import"./index-7ca3a6gj.js";
33
- import"./index-av0f6mm0.js";
34
- import"./index-zr370283.js";
35
- import"./index-g1c5fgaw.js";
36
- import"./index-556ja8an.js";
37
- import"./index-gdd4jt6b.js";
31
+ import"./index-bt9aa01f.js";
32
+ import"./index-zb0xcz9t.js";
33
+ import"./index-x6tp0hfr.js";
34
+ import"./index-yts89pqg.js";
35
+ import"./index-dty5qgk2.js";
36
+ import"./index-rtry5xyf.js";
38
37
  import"./index-zsrtt42s.js";
38
+ import"./index-jabkn643.js";
39
39
  import"./index-k3cxyk66.js";
40
- import"./index-4fda8kkw.js";
41
- import"./index-dhh2j2nd.js";
42
- import"./index-8fwhhayc.js";
43
- import"./index-q1exe2b3.js";
40
+ import"./index-cz25e8xp.js";
41
+ import"./index-8j0va7jp.js";
42
+ import"./index-pw83zgny.js";
43
+ import"./index-z6v7kwpa.js";
44
+ import"./index-556ja8an.js";
44
45
  import"./index-7sy3aa9m.js";
45
46
  import"./index-wx8zdh4a.js";
46
- import"./index-p3tnmkvc.js";
47
- import"./index-dg2w0wr4.js";
47
+ import"./index-8fwhhayc.js";
48
+ import"./index-q1exe2b3.js";
49
+ import"./index-03pv47h2.js";
50
+ import"./index-4w5qdbk7.js";
51
+ import"./index-psvxq93b.js";
48
52
  import"./index-gprxjmm7.js";
49
53
  import"./index-n832052r.js";
50
- import"./index-y95nwsge.js";
51
- import"./index-h3z64mhz.js";
52
54
  import"./index-rn0eq85g.js";
53
- import"./index-4rhhvd1a.js";
54
- import"./index-whezv7vc.js";
55
55
  import"./index-z6xqpmqg.js";
56
+ import"./index-9qq7c18c.js";
57
+ import"./index-y8j8ehc8.js";
58
+ import"./index-4rhhvd1a.js";
59
+ import"./index-v3y3qg48.js";
56
60
  import"./index-zjygnfay.js";
57
- import"./index-ne8cfgw5.js";
58
- import"./index-tq5s07ta.js";
59
- import"./index-rtry5xyf.js";
60
- import"./index-ckrasab9.js";
61
61
  import"./index-ae75rja9.js";
62
- import"./index-w7x7qxz2.js";
63
- import"./index-erfnw81g.js";
64
- import"./index-bk5tah7q.js";
62
+ import"./index-ywn7vtxp.js";
63
+ import"./index-mazgg5s2.js";
65
64
  import"./index-ed5ykebp.js";
66
- import"./index-k31en0ja.js";
65
+ import"./index-bk5tah7q.js";
66
+ import"./index-f9vvg5xb.js";
67
+ import"./index-1jsmmx7y.js";
67
68
  import"./index-7g4c7s5r.js";
68
- import"./index-s2rcz51a.js";
69
69
  import"./index-bpmtbmy9.js";
70
70
  import"./index-4nt52yr9.js";
71
71
  import"./index-zgwm4ryv.js";
@@ -1,58 +1,58 @@
1
1
  // @bun
2
2
  import {
3
3
  createCuratorLLMDelegate
4
- } from "./index-nretd4qn.js";
5
- import"./index-g2ajae1z.js";
6
- import"./index-jb4tchvy.js";
7
- import"./index-qpt8ahph.js";
4
+ } from "./index-q4ed1jk7.js";
5
+ import"./index-d12jd5mn.js";
6
+ import"./index-h98t1m88.js";
7
+ import"./index-az8etqpp.js";
8
8
  import"./index-134d35c1.js";
9
9
  import"./index-b6e016tv.js";
10
- import"./index-4q9vfav6.js";
11
- import"./index-k92cagmt.js";
10
+ import"./index-1csyxv0f.js";
11
+ import"./index-fqcjragy.js";
12
12
  import"./index-y8552snf.js";
13
- import"./index-m6wv2qdr.js";
13
+ import"./index-nckg4gxb.js";
14
14
  import"./index-70ha9e09.js";
15
15
  import"./index-c8s9a3zh.js";
16
16
  import"./index-9ss2m4rs.js";
17
- import"./index-d55crzd4.js";
18
17
  import"./index-74hpm6sh.js";
19
- import"./index-7ca3a6gj.js";
20
- import"./index-av0f6mm0.js";
21
- import"./index-zr370283.js";
22
- import"./index-g1c5fgaw.js";
23
- import"./index-556ja8an.js";
24
- import"./index-gdd4jt6b.js";
18
+ import"./index-bt9aa01f.js";
19
+ import"./index-zb0xcz9t.js";
20
+ import"./index-x6tp0hfr.js";
21
+ import"./index-yts89pqg.js";
22
+ import"./index-dty5qgk2.js";
23
+ import"./index-rtry5xyf.js";
25
24
  import"./index-zsrtt42s.js";
25
+ import"./index-jabkn643.js";
26
26
  import"./index-k3cxyk66.js";
27
- import"./index-4fda8kkw.js";
28
- import"./index-dhh2j2nd.js";
29
- import"./index-8fwhhayc.js";
30
- import"./index-q1exe2b3.js";
27
+ import"./index-cz25e8xp.js";
28
+ import"./index-8j0va7jp.js";
29
+ import"./index-pw83zgny.js";
30
+ import"./index-z6v7kwpa.js";
31
+ import"./index-556ja8an.js";
31
32
  import"./index-7sy3aa9m.js";
32
33
  import"./index-wx8zdh4a.js";
33
- import"./index-p3tnmkvc.js";
34
- import"./index-dg2w0wr4.js";
34
+ import"./index-8fwhhayc.js";
35
+ import"./index-q1exe2b3.js";
36
+ import"./index-03pv47h2.js";
37
+ import"./index-4w5qdbk7.js";
38
+ import"./index-psvxq93b.js";
35
39
  import"./index-gprxjmm7.js";
36
40
  import"./index-n832052r.js";
37
- import"./index-y95nwsge.js";
38
- import"./index-h3z64mhz.js";
39
41
  import"./index-rn0eq85g.js";
40
- import"./index-4rhhvd1a.js";
41
- import"./index-whezv7vc.js";
42
42
  import"./index-z6xqpmqg.js";
43
+ import"./index-9qq7c18c.js";
44
+ import"./index-y8j8ehc8.js";
45
+ import"./index-4rhhvd1a.js";
46
+ import"./index-v3y3qg48.js";
43
47
  import"./index-zjygnfay.js";
44
- import"./index-ne8cfgw5.js";
45
- import"./index-tq5s07ta.js";
46
- import"./index-rtry5xyf.js";
47
- import"./index-ckrasab9.js";
48
48
  import"./index-ae75rja9.js";
49
- import"./index-w7x7qxz2.js";
50
- import"./index-erfnw81g.js";
51
- import"./index-bk5tah7q.js";
49
+ import"./index-ywn7vtxp.js";
50
+ import"./index-mazgg5s2.js";
52
51
  import"./index-ed5ykebp.js";
53
- import"./index-k31en0ja.js";
52
+ import"./index-bk5tah7q.js";
53
+ import"./index-f9vvg5xb.js";
54
+ import"./index-1jsmmx7y.js";
54
55
  import"./index-7g4c7s5r.js";
55
- import"./index-s2rcz51a.js";
56
56
  import"./index-bpmtbmy9.js";
57
57
  import"./index-4nt52yr9.js";
58
58
  import"./index-zgwm4ryv.js";
@@ -6,32 +6,32 @@ import {
6
6
  loadPlanJsonOnly,
7
7
  mergeDurableGateEntriesFromEvidence,
8
8
  readDurableGateEvidence
9
- } from "./index-qpt8ahph.js";
9
+ } from "./index-az8etqpp.js";
10
10
  import"./index-134d35c1.js";
11
- import"./index-k92cagmt.js";
11
+ import"./index-fqcjragy.js";
12
12
  import"./index-y8552snf.js";
13
13
  import"./index-9ss2m4rs.js";
14
- import"./index-d55crzd4.js";
15
- import"./index-g1c5fgaw.js";
16
- import"./index-556ja8an.js";
17
14
  import"./index-zsrtt42s.js";
18
- import"./index-dhh2j2nd.js";
15
+ import"./index-cz25e8xp.js";
16
+ import"./index-8j0va7jp.js";
17
+ import"./index-z6v7kwpa.js";
18
+ import"./index-556ja8an.js";
19
19
  import"./index-q1exe2b3.js";
20
20
  import"./index-gprxjmm7.js";
21
21
  import"./index-n832052r.js";
22
- import"./index-y95nwsge.js";
23
- import"./index-h3z64mhz.js";
24
22
  import"./index-rn0eq85g.js";
25
- import"./index-4rhhvd1a.js";
26
- import"./index-whezv7vc.js";
27
23
  import"./index-z6xqpmqg.js";
24
+ import"./index-9qq7c18c.js";
25
+ import"./index-y8j8ehc8.js";
26
+ import"./index-4rhhvd1a.js";
27
+ import"./index-v3y3qg48.js";
28
28
  import"./index-zjygnfay.js";
29
- import"./index-erfnw81g.js";
30
- import"./index-bk5tah7q.js";
29
+ import"./index-mazgg5s2.js";
31
30
  import"./index-ed5ykebp.js";
32
- import"./index-k31en0ja.js";
31
+ import"./index-bk5tah7q.js";
32
+ import"./index-f9vvg5xb.js";
33
+ import"./index-1jsmmx7y.js";
33
34
  import"./index-7g4c7s5r.js";
34
- import"./index-s2rcz51a.js";
35
35
  import"./index-bpmtbmy9.js";
36
36
  import"./index-4nt52yr9.js";
37
37
  import {
@@ -17,19 +17,19 @@ import {
17
17
  reduceTaskWorkflowSnapshot,
18
18
  transitionTaskWorkflowEvidence,
19
19
  withTaskEvidenceTransaction
20
- } from "./index-d55crzd4.js";
20
+ } from "./index-cz25e8xp.js";
21
+ import"./index-8j0va7jp.js";
21
22
  import"./index-556ja8an.js";
22
- import"./index-dhh2j2nd.js";
23
23
  import"./index-rn0eq85g.js";
24
- import"./index-4rhhvd1a.js";
25
- import"./index-whezv7vc.js";
26
24
  import"./index-z6xqpmqg.js";
25
+ import"./index-4rhhvd1a.js";
26
+ import"./index-v3y3qg48.js";
27
27
  import"./index-zjygnfay.js";
28
- import"./index-erfnw81g.js";
28
+ import"./index-mazgg5s2.js";
29
29
  import"./index-ed5ykebp.js";
30
- import"./index-k31en0ja.js";
30
+ import"./index-f9vvg5xb.js";
31
+ import"./index-1jsmmx7y.js";
31
32
  import"./index-7g4c7s5r.js";
32
- import"./index-s2rcz51a.js";
33
33
  import"./index-bpmtbmy9.js";
34
34
  import"./index-4nt52yr9.js";
35
35
  import"./index-zgwm4ryv.js";