opencode-swarm 7.135.3 → 7.135.5

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 (42) hide show
  1. package/dist/agents/explorer.d.ts +1 -1
  2. package/dist/cli/{config-doctor-4nznqeca.js → config-doctor-exj26ryt.js} +2 -2
  3. package/dist/cli/{curation-policy-81m14519.js → curation-policy-mbv3b27c.js} +2 -2
  4. package/dist/cli/{curator-e0z5gcww.js → curator-7ycd6x29.js} +13 -13
  5. package/dist/cli/{curator-llm-factory-fem13y9n.js → curator-llm-factory-4d5pzh47.js} +13 -13
  6. package/dist/cli/{explorer-15gqzxh8.js → explorer-swjc297z.js} +1 -1
  7. package/dist/cli/{guardrail-explain-wgaj23hd.js → guardrail-explain-2jrqv2zf.js} +14 -14
  8. package/dist/cli/{guardrail-log-04p1z1vt.js → guardrail-log-c843gxnm.js} +3 -3
  9. package/dist/cli/{hive-promoter-k345z42k.js → hive-promoter-epnj14q8.js} +13 -13
  10. package/dist/cli/{index-30pg2rs3.js → index-09w3ezq2.js} +1 -1
  11. package/dist/cli/{index-36v55ryg.js → index-0csbx1wc.js} +1 -1
  12. package/dist/cli/{index-dg1njnms.js → index-6mjf4vr1.js} +1 -1
  13. package/dist/cli/{index-kb7qy7an.js → index-6yk6ezvj.js} +1 -1
  14. package/dist/cli/{index-yf30m841.js → index-8et4bx6j.js} +3 -3
  15. package/dist/cli/{index-dwargd10.js → index-9s5b8wrs.js} +54 -42
  16. package/dist/cli/{index-rv7s2k9y.js → index-bx10dq60.js} +21 -4
  17. package/dist/cli/{index-a01r818w.js → index-db52969t.js} +1 -1
  18. package/dist/cli/{index-5436jxnw.js → index-gvfw2y6v.js} +2 -2
  19. package/dist/cli/{index-p9ngg568.js → index-hw6yt4rs.js} +4 -4
  20. package/dist/cli/{index-168phrs7.js → index-jnemjn16.js} +2 -2
  21. package/dist/cli/{index-p5kr35wh.js → index-k8arazbb.js} +1 -1
  22. package/dist/cli/{index-wygxzvtf.js → index-kjg6vgqs.js} +1 -1
  23. package/dist/cli/{index-y47crdg9.js → index-kq9zb1cv.js} +15 -15
  24. package/dist/cli/{index-bcmrg4t4.js → index-qyn0b2jj.js} +1 -1
  25. package/dist/cli/{index-gxxxmajn.js → index-t1gszcwg.js} +2 -2
  26. package/dist/cli/{index-f52jt0am.js → index-ym516a9a.js} +5 -5
  27. package/dist/cli/index.js +13 -13
  28. package/dist/cli/{knowledge-escalator-42ecv7m3.js → knowledge-escalator-3tjhpwjf.js} +3 -3
  29. package/dist/cli/{knowledge-events-zhna7v3g.js → knowledge-events-0akk3p15.js} +5 -1
  30. package/dist/cli/{knowledge-store-56jcfc5k.js → knowledge-store-7nvfh2n3.js} +1 -1
  31. package/dist/cli/{knowledge-validator-8zk0pnb6.js → knowledge-validator-z618vhda.js} +4 -4
  32. package/dist/cli/{scan-cursor-h3ndxd41.js → scan-cursor-5zqr3afj.js} +2 -2
  33. package/dist/cli/{schema-r6wmd7zp.js → schema-n1cj94m0.js} +1 -1
  34. package/dist/cli/{skill-generator-12cftsx4.js → skill-generator-560ksca8.js} +5 -5
  35. package/dist/hooks/curator-postmortem.d.ts +8 -0
  36. package/dist/hooks/delegate-ack-collector.d.ts +21 -0
  37. package/dist/hooks/knowledge-events.d.ts +33 -1
  38. package/dist/hooks/pr-workflow-gate.d.ts +5 -5
  39. package/dist/hooks/pr-workflow-response-gate.d.ts +32 -1
  40. package/dist/index.js +24 -23
  41. package/dist/services/knowledge-diagnostics.d.ts +2 -0
  42. package/package.json +1 -1
package/dist/cli/index.js CHANGED
@@ -6,36 +6,36 @@ import {
6
6
  getPluginConfigDir,
7
7
  getPluginLockFilePaths,
8
8
  resolveCommand
9
- } from "./index-dwargd10.js";
9
+ } from "./index-9s5b8wrs.js";
10
10
  import"./index-vm4xw9z3.js";
11
- import"./index-kb7qy7an.js";
12
- import"./index-a01r818w.js";
11
+ import"./index-6yk6ezvj.js";
12
+ import"./index-db52969t.js";
13
13
  import"./index-cggqh2dz.js";
14
14
  import"./index-4905hd2m.js";
15
15
  import"./index-134d35c1.js";
16
- import"./index-yf30m841.js";
17
- import"./index-f52jt0am.js";
18
- import"./index-36v55ryg.js";
19
- import"./index-dg1njnms.js";
16
+ import"./index-8et4bx6j.js";
17
+ import"./index-ym516a9a.js";
18
+ import"./index-0csbx1wc.js";
19
+ import"./index-6mjf4vr1.js";
20
20
  import"./index-c8s9a3zh.js";
21
21
  import"./index-9ss2m4rs.js";
22
22
  import"./index-y6a7gjtj.js";
23
23
  import"./index-mrtms113.js";
24
- import"./index-gxxxmajn.js";
25
- import"./index-30pg2rs3.js";
24
+ import"./index-t1gszcwg.js";
25
+ import"./index-09w3ezq2.js";
26
26
  import"./index-rtry5xyf.js";
27
- import"./index-p9ngg568.js";
28
- import"./index-rv7s2k9y.js";
27
+ import"./index-hw6yt4rs.js";
28
+ import"./index-bx10dq60.js";
29
29
  import"./index-ae75rja9.js";
30
30
  import"./index-dzyjb33e.js";
31
31
  import"./index-ey29aap6.js";
32
- import"./index-wygxzvtf.js";
32
+ import"./index-kjg6vgqs.js";
33
33
  import"./index-k5jrywpr.js";
34
34
  import"./index-n832052r.js";
35
35
  import {
36
36
  init_package,
37
37
  package_default
38
- } from "./index-p5kr35wh.js";
38
+ } from "./index-k8arazbb.js";
39
39
  import"./index-bk5tah7q.js";
40
40
  import"./index-8fwhhayc.js";
41
41
  import"./index-q1exe2b3.js";
@@ -8,9 +8,9 @@ import {
8
8
  maybeEscalateOnViolation,
9
9
  maybeQuarantineOnContradiction,
10
10
  readRecentEscalations
11
- } from "./index-f52jt0am.js";
12
- import"./index-p9ngg568.js";
13
- import"./index-rv7s2k9y.js";
11
+ } from "./index-ym516a9a.js";
12
+ import"./index-hw6yt4rs.js";
13
+ import"./index-bx10dq60.js";
14
14
  import"./index-ae75rja9.js";
15
15
  import"./index-dzyjb33e.js";
16
16
  import"./index-ey29aap6.js";
@@ -7,6 +7,7 @@ import {
7
7
  _internals,
8
8
  appendHiveKnowledgeEvent,
9
9
  appendKnowledgeEvent,
10
+ appendKnowledgeEventsBatch,
10
11
  applyKnowledgeVerdictFeedback,
11
12
  countEmptyTraceTerminals,
12
13
  countEntryContradictionsInWindow,
@@ -22,11 +23,12 @@ import {
22
23
  recomputeCounters,
23
24
  recordHiveKnowledgeEvent,
24
25
  recordKnowledgeEvent,
26
+ recordKnowledgeEventsBatch,
25
27
  resolveHiveEventsPath,
26
28
  resolveKnowledgeCounterBaselinePath,
27
29
  resolveKnowledgeEventsPath,
28
30
  resolveLegacyApplicationLogPath
29
- } from "./index-rv7s2k9y.js";
31
+ } from "./index-bx10dq60.js";
30
32
  import"./index-ae75rja9.js";
31
33
  import"./index-dzyjb33e.js";
32
34
  import"./index-ey29aap6.js";
@@ -42,6 +44,7 @@ export {
42
44
  resolveKnowledgeEventsPath,
43
45
  resolveKnowledgeCounterBaselinePath,
44
46
  resolveHiveEventsPath,
47
+ recordKnowledgeEventsBatch,
45
48
  recordKnowledgeEvent,
46
49
  recordHiveKnowledgeEvent,
47
50
  recomputeCounters,
@@ -57,6 +60,7 @@ export {
57
60
  countEntryContradictionsInWindow,
58
61
  countEmptyTraceTerminals,
59
62
  applyKnowledgeVerdictFeedback,
63
+ appendKnowledgeEventsBatch,
60
64
  appendKnowledgeEvent,
61
65
  appendHiveKnowledgeEvent,
62
66
  _internals,
@@ -41,7 +41,7 @@ import {
41
41
  transactKnowledge,
42
42
  transactKnowledgeWithCas,
43
43
  wordBigrams
44
- } from "./index-p9ngg568.js";
44
+ } from "./index-hw6yt4rs.js";
45
45
  import {
46
46
  resolveHiveDataDir
47
47
  } from "./index-ae75rja9.js";
@@ -23,11 +23,11 @@ import {
23
23
  validateLesson,
24
24
  validateSkillCandidatePath,
25
25
  validateSkillPath
26
- } from "./index-gxxxmajn.js";
27
- import"./index-30pg2rs3.js";
26
+ } from "./index-t1gszcwg.js";
27
+ import"./index-09w3ezq2.js";
28
28
  import"./index-rtry5xyf.js";
29
- import"./index-p9ngg568.js";
30
- import"./index-rv7s2k9y.js";
29
+ import"./index-hw6yt4rs.js";
30
+ import"./index-bx10dq60.js";
31
31
  import"./index-ae75rja9.js";
32
32
  import"./index-dzyjb33e.js";
33
33
  import"./index-ey29aap6.js";
@@ -4,8 +4,8 @@ import {
4
4
  alreadyCuratedThisGeneration,
5
5
  claimNextScanBatch,
6
6
  getScanStatus
7
- } from "./index-36v55ryg.js";
8
- import"./index-p9ngg568.js";
7
+ } from "./index-0csbx1wc.js";
8
+ import"./index-hw6yt4rs.js";
9
9
  import"./index-ae75rja9.js";
10
10
  import"./index-dzyjb33e.js";
11
11
  import"./index-ey29aap6.js";
@@ -93,7 +93,7 @@ import {
93
93
  resolveGeneratedAgentRole,
94
94
  resolveGuardrailsConfig,
95
95
  stripKnownSwarmPrefix
96
- } from "./index-p5kr35wh.js";
96
+ } from "./index-k8arazbb.js";
97
97
  import"./index-bk5tah7q.js";
98
98
  import"./index-3jcyn8g6.js";
99
99
  import"./index-bpmtbmy9.js";
@@ -33,12 +33,12 @@ import {
33
33
  sanitizeSlug,
34
34
  selectCandidateEntries,
35
35
  writeEvalStub
36
- } from "./index-yf30m841.js";
37
- import"./index-gxxxmajn.js";
38
- import"./index-30pg2rs3.js";
36
+ } from "./index-8et4bx6j.js";
37
+ import"./index-t1gszcwg.js";
38
+ import"./index-09w3ezq2.js";
39
39
  import"./index-rtry5xyf.js";
40
- import"./index-p9ngg568.js";
41
- import"./index-rv7s2k9y.js";
40
+ import"./index-hw6yt4rs.js";
41
+ import"./index-bx10dq60.js";
42
42
  import"./index-ae75rja9.js";
43
43
  import"./index-dzyjb33e.js";
44
44
  import"./index-ey29aap6.js";
@@ -36,6 +36,14 @@ interface KnowledgeEventSummary {
36
36
  applied: number;
37
37
  violated: number;
38
38
  ignored: number;
39
+ /**
40
+ * Shown to a delegate that ended its Task without any ack marker or receipt.
41
+ * Audit-only silence, NOT a verdict — kept strictly separate from
42
+ * applied/violated/ignored so it never enters an application- or
43
+ * violation-rate calculation. Surfaced so a post-mortem can say
44
+ * "entry X: shown N times, unacknowledged M times" instead of nothing.
45
+ */
46
+ unacknowledged: number;
39
47
  confidence: number;
40
48
  status: string;
41
49
  }
@@ -12,6 +12,11 @@
12
12
  * - For every CRITICAL directive that was shown but never acknowledged, emit a
13
13
  * `violated` event with reason `unacknowledged` and append an audit line to
14
14
  * `.swarm/unacknowledged-criticals.jsonl`.
15
+ * - For every NON-CRITICAL directive that was shown but never acknowledged,
16
+ * emit a neutral, audit-only `unacknowledged` event (reason
17
+ * `no_ack_marker`). Silence is not a violation for non-criticals — it is a
18
+ * visibility signal, so it is never escalated, never audited to the
19
+ * criticals file, and never mutates a counter.
15
20
  *
16
21
  * Stateless by design: it re-parses the prompt rather than relying on
17
22
  * cross-hook mutable state, so it is safe under parallel delegations. Fail-open:
@@ -31,7 +36,23 @@ export interface CollectDelegateAcksResult {
31
36
  id: string;
32
37
  type: string;
33
38
  }>;
39
+ /**
40
+ * CRITICAL directives shown to the delegate that it never acknowledged. Each
41
+ * one is a contract violation: emitted as `violated`/`unacknowledged`, audited
42
+ * to `.swarm/unacknowledged-criticals.jsonl`, and fed to the repeat-mistake
43
+ * escalator.
44
+ */
34
45
  unacknowledgedCriticals: string[];
46
+ /**
47
+ * NON-critical directives shown to the delegate that it never acknowledged.
48
+ * These are NOT contract violations — the ack contract only obliges the
49
+ * delegate to answer for criticals. Each is emitted as a neutral,
50
+ * audit-only `unacknowledged` event so silent non-critical delivery is
51
+ * visible to the curator post-mortem instead of vanishing. They are never
52
+ * escalated, never written to the criticals audit file, and never produce
53
+ * promotion evidence.
54
+ */
55
+ unacknowledgedNonCritical: string[];
35
56
  }
36
57
  /**
37
58
  * Core reconciliation used by both the runtime hook and tests. Returns a summary
@@ -74,7 +74,20 @@ export interface ReceiptEvent {
74
74
  * counter (there is no `knowledge_id` to credit; this is a trace-level
75
75
  * tombstone, not application credit).
76
76
  */
77
- | 'no_relevant';
77
+ | 'no_relevant'
78
+ /**
79
+ * A shown non-critical directive reached the end of a delegate Task with no
80
+ * ack marker and no receipt. Audit-only visibility signal; never penalizes
81
+ * the entry's outcome/violation counters.
82
+ *
83
+ * Motivation: before this event, only CRITICAL silence produced a signal (a
84
+ * `violated`/`unacknowledged` event). Non-critical silence was invisible, so
85
+ * a corpus with 1 critical entry out of 103 reported ~4% receipt compliance
86
+ * with no way to see where the other 96% went. This is the missing
87
+ * observation, NOT a verdict: the delegate filed nothing, so there is no
88
+ * terminal to credit or penalize.
89
+ */
90
+ | 'unacknowledged';
78
91
  schema_version?: number;
79
92
  event_id: string;
80
93
  trace_id: string;
@@ -213,11 +226,30 @@ export declare function newEventId(): string;
213
226
  * {@link recordKnowledgeEvent}, which swallows errors.
214
227
  */
215
228
  export declare function appendKnowledgeEvent(directory: string, event: KnowledgeEventInput): Promise<KnowledgeEvent>;
229
+ /**
230
+ * Append several events under ONE lock acquisition and ONE cap-trim pass.
231
+ * Multi-event emitters on awaited paths (e.g. the delegate ack-collector's
232
+ * per-directive `unacknowledged` loop, up to `delegate_max_inject_count`
233
+ * events per delegation) must use this instead of N sequential
234
+ * {@link appendKnowledgeEvent} calls — each of those takes the directory
235
+ * lock and re-reads the whole log for the FIFO trim, which is material on
236
+ * cold filesystems and under parallel delegations.
237
+ *
238
+ * Throws on I/O failure — hot paths should prefer
239
+ * {@link recordKnowledgeEventsBatch}, which swallows errors.
240
+ */
241
+ export declare function appendKnowledgeEventsBatch(directory: string, events: KnowledgeEventInput[]): Promise<KnowledgeEvent[]>;
216
242
  /**
217
243
  * Fail-open variant of {@link appendKnowledgeEvent} for hot paths (hooks, tool
218
244
  * execution). Never throws; logs a warning and returns null on failure.
219
245
  */
220
246
  export declare function recordKnowledgeEvent(directory: string, event: KnowledgeEventInput): Promise<KnowledgeEvent | null>;
247
+ /**
248
+ * Fail-open variant of {@link appendKnowledgeEventsBatch} for hot paths.
249
+ * Never throws; logs a warning and returns null on failure (all-or-nothing:
250
+ * the batch is a single append, so there are no partial writes to report).
251
+ */
252
+ export declare function recordKnowledgeEventsBatch(directory: string, events: KnowledgeEventInput[]): Promise<KnowledgeEvent[] | null>;
221
253
  /**
222
254
  * Append one event to the shared, cross-project hive events log. Use for audit
223
255
  * tombstones of mutations to the hive store so any project can read why a hive
@@ -30,10 +30,10 @@ export type PrReviewDepthTier = 'S' | 'M' | 'L';
30
30
  * always dispatch more lanes than a tier's floor, never fewer.
31
31
  */
32
32
  export declare const PR_REVIEW_DEPTH_TIER_THRESHOLDS: {
33
- readonly smallMaxChangedLines: 50;
34
- readonly smallMaxChangedFiles: 3;
35
- readonly mediumMaxChangedLines: 500;
36
- readonly mediumMaxChangedFiles: 20;
33
+ readonly smallMaxChangedLines: 100;
34
+ readonly smallMaxChangedFiles: 5;
35
+ readonly mediumMaxChangedLines: 1500;
36
+ readonly mediumMaxChangedFiles: 50;
37
37
  };
38
38
  /**
39
39
  * Minimum initial base-wave lane counts per depth tier. Tier L preserves the
@@ -44,7 +44,7 @@ export declare const PR_REVIEW_BASE_LANE_FLOORS: Record<PrReviewDepthTier, numbe
44
44
  /**
45
45
  * Minimum lane counts for a FULL micro (risk-family) sweep per depth tier. These
46
46
  * mirror the base floors' tier *semantics* — not their numbers — scaled to the
47
- * eleven risk families: S does not bind (a tier-S PR of ≤50 lines/≤3 files may
47
+ * eleven risk families: S does not bind (a tier-S PR of ≤100 lines/≤5 files may
48
48
  * consolidate a full sweep into one lane, exactly as base tier S permits); M
49
49
  * requires at least half the families to get independent lanes (ceil(11/2) = 6,
50
50
  * the deliberate scale-up from base M's 3 = ceil(6/2)); L requires one lane per
@@ -1,5 +1,5 @@
1
1
  import { claimPrFeedbackMonitorEvents, readPrFeedbackMonitorQueue } from '../background/pr-feedback-event-queue.js';
2
- import { readPrWorkflowGateState } from './pr-workflow-gate.js';
2
+ import { type PrReviewDepthTier, readPrWorkflowGateState } from './pr-workflow-gate.js';
3
3
  export declare const _internals: {
4
4
  readPrWorkflowGateState: typeof readPrWorkflowGateState;
5
5
  claimPrFeedbackMonitorEvents: typeof claimPrFeedbackMonitorEvents;
@@ -54,6 +54,24 @@ export declare const DEFAULT_BANNER_COOLDOWN_MS = 20000;
54
54
  * suppresses one.
55
55
  */
56
56
  export declare const MAX_FALLBACK_BANNER_INJECTIONS_PER_SESSION = 20;
57
+ /**
58
+ * Per-tier default total-wake ceilings, derived proportionally from each
59
+ * depth tier's consolidation-floor workload (base lanes + micro lanes).
60
+ *
61
+ * DERIVATION:
62
+ * Tier workloads (base + micro): S = 1+1 = 2, M = 3+6 = 9, L = 6+11 = 17
63
+ * Headroom multiplier: 6 (chosen so that L >= 100 and scales uniformly)
64
+ * Ceilings: S = 2×6 = 12, M = 9×6 = 54, L = 17×6 = 102
65
+ *
66
+ * The tier-L ceiling (102) is comfortably above the observed ~40–55 healthy
67
+ * tier-L wake count, providing generous headroom for real reviews while still
68
+ * bounding pathological loops. Tier-S is tightest because small PRs have the
69
+ * least lane work; tier-M is proportionally in between.
70
+ *
71
+ * When `totalWakeCeiling` is provided to `createPrWorkflowResponseGate`,
72
+ * it overrides these defaults.
73
+ */
74
+ export declare const DEFAULT_TOTAL_WAKE_CEILINGS: Record<PrReviewDepthTier, number>;
57
75
  /**
58
76
  * Bounded FIFO map of tracked wake budgets. Invariant 8 (session/global
59
77
  * state): module-level state must have an explicit eviction strategy. Three
@@ -71,6 +89,13 @@ interface WakeBudget {
71
89
  lastWakeAt: number;
72
90
  lastSeenRevision?: number;
73
91
  suspended: boolean;
92
+ /** Total number of wake attempts across the session lifetime. Never reset by
93
+ * revision progress — only the consecutive counter resets on progress. */
94
+ totalWakes: number;
95
+ /** Discriminator for WHY the session was suspended: 'consecutive' means
96
+ * the consecutive-unproductive budget was exhausted; 'total' means the
97
+ * absolute per-session total-wake ceiling was reached. */
98
+ suspendedReason: 'consecutive' | 'total';
74
99
  }
75
100
  /**
76
101
  * Prevent an architect from masquerading a premature text output as a terminal
@@ -99,6 +124,12 @@ export declare function createPrWorkflowResponseGate(options: {
99
124
  maxConsecutiveUnproductiveWakes?: number;
100
125
  wakeCooldownMs?: number;
101
126
  bannerCooldownMs?: number;
127
+ /** Override the per-tier default total-wake ceilings. A single number
128
+ * applies uniformly to all tiers; a partial Record allows per-tier
129
+ * overrides with unspecified tiers falling back to the defaults.
130
+ * When omitted, the context-aware defaults (DEFAULT_TOTAL_WAKE_CEILINGS)
131
+ * apply. */
132
+ totalWakeCeiling?: number | Partial<Record<PrReviewDepthTier, number>>;
102
133
  }): {
103
134
  event: (input: {
104
135
  event: unknown;