opencode-swarm 7.200.13 → 7.200.15

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 (75) hide show
  1. package/.opencode/skills/issue-tracer/references/full-resolution-contract.md +3 -2
  2. package/.opencode/skills/issue-tracer/scripts/scan-deferred.sh +23 -1
  3. package/binaries/win32-arm64/swarm-sandbox-runner.exe +0 -0
  4. package/binaries/win32-x64/swarm-sandbox-runner.exe +0 -0
  5. package/dist/cli/{attest-task-pvwft49v.js → attest-task-13n2h0e1.js} +26 -26
  6. package/dist/cli/{auto-checkpoint-d42tskyk.js → auto-checkpoint-y2jb8xkz.js} +4 -4
  7. package/dist/cli/{checkpoint-ga9vbvb1.js → checkpoint-7xvxfjhy.js} +8 -8
  8. package/dist/cli/{coder-settlement-rbhdzxs0.js → coder-settlement-mqsna865.js} +4 -4
  9. package/dist/cli/{config-doctor-qh3aba3c.js → config-doctor-pe9djgym.js} +7 -7
  10. package/dist/cli/{core-vx7fxf4y.js → core-t8zhsb11.js} +1 -1
  11. package/dist/cli/{curator-0nv1asjc.js → curator-3b444fw3.js} +26 -26
  12. package/dist/cli/{curator-drift-4e5nsjec.js → curator-drift-v9hvnz2a.js} +5 -5
  13. package/dist/cli/{curator-llm-factory-cn47pa0k.js → curator-llm-factory-5ztranbp.js} +26 -26
  14. package/dist/cli/{doctor-knowledge-receipt-phase-id-5qs5w6jz.js → doctor-knowledge-receipt-phase-id-s4g7pgd3.js} +4 -4
  15. package/dist/cli/{evidence-summary-service-fbhdnww1.js → evidence-summary-service-pgwm6747.js} +10 -10
  16. package/dist/cli/{gate-evidence-44bzkpnp.js → gate-evidence-05fvtj4j.js} +3 -3
  17. package/dist/cli/{guardrail-explain-ga6m57w3.js → guardrail-explain-6e3eht7f.js} +27 -27
  18. package/dist/cli/{guardrail-log-aekacstp.js → guardrail-log-rdpa9rfm.js} +3 -3
  19. package/dist/cli/{guardrail-reset-ezjd8vtv.js → guardrail-reset-g9hbj2bk.js} +26 -26
  20. package/dist/cli/{hive-promoter-r8z673jn.js → hive-promoter-qxywg2vf.js} +26 -26
  21. package/dist/cli/{index-0g2nvyn9.js → index-07rj0h20.js} +28 -28
  22. package/dist/cli/{index-q0gtj1px.js → index-0gxy6qap.js} +2 -2
  23. package/dist/cli/{index-h59n1rx5.js → index-2c9xt9f0.js} +2 -2
  24. package/dist/cli/{index-fh22ndnh.js → index-2xcfy4g4.js} +1 -1
  25. package/dist/cli/{index-1nnrz6yd.js → index-3d8mmbp9.js} +6 -6
  26. package/dist/cli/{index-a01knv2b.js → index-96mjkc9j.js} +542 -126
  27. package/dist/cli/{index-hs96g7xz.js → index-cbs6exys.js} +1 -1
  28. package/dist/cli/{index-x9gyt21k.js → index-cggcjczk.js} +2 -2
  29. package/dist/cli/{index-cc2vkpg7.js → index-cv1z42ha.js} +1 -1
  30. package/dist/cli/{index-nfjwshs6.js → index-ee4w3zhd.js} +1 -1
  31. package/dist/cli/{index-3jewj7q3.js → index-f1sz03jx.js} +1 -1
  32. package/dist/cli/{index-h8ta8mva.js → index-fjaxc27j.js} +1 -1
  33. package/dist/cli/{index-fxnj2qd5.js → index-ggd2g5ex.js} +1 -1
  34. package/dist/cli/{index-8kta0a96.js → index-gjch3wxw.js} +2 -2
  35. package/dist/cli/{index-v4g6rm68.js → index-h13edr0f.js} +3 -3
  36. package/dist/cli/{index-6tpmpc0f.js → index-hwvkqk5r.js} +1 -1
  37. package/dist/cli/{index-6xaft4r3.js → index-kymv0w7t.js} +1 -1
  38. package/dist/cli/{index-dkg8meb8.js → index-mc50qyz3.js} +3 -3
  39. package/dist/cli/{index-8az4qgz7.js → index-my4cv7m6.js} +2 -2
  40. package/dist/cli/{index-krrn8eg3.js → index-n7xg4fjt.js} +1 -1
  41. package/dist/cli/{index-9zw7mh20.js → index-p2n9qm7q.js} +3 -3
  42. package/dist/cli/{index-9v10n049.js → index-qvssp1bp.js} +2 -2
  43. package/dist/cli/{index-xfdx40ba.js → index-r7wpsgw3.js} +5 -5
  44. package/dist/cli/{index-165v1k07.js → index-ts82c4a1.js} +3 -3
  45. package/dist/cli/{index-6kdyc1s7.js → index-v1kp2xbf.js} +1 -1
  46. package/dist/cli/{index-sx4fm1d2.js → index-v7xt2k5h.js} +1 -1
  47. package/dist/cli/{index-pxf512yn.js → index-vgpxjc8z.js} +3 -3
  48. package/dist/cli/{index-qg38v82w.js → index-whghb75j.js} +4 -4
  49. package/dist/cli/{index-7811ftfy.js → index-wzj595cj.js} +5 -5
  50. package/dist/cli/{index-ffz00br0.js → index-x5ra65kg.js} +3 -3
  51. package/dist/cli/{index-1w9mc5ck.js → index-ywj6k8bg.js} +26 -26
  52. package/dist/cli/index.js +27 -27
  53. package/dist/cli/{knowledge-escalator-t29wynav.js → knowledge-escalator-xz78pa2x.js} +7 -7
  54. package/dist/cli/{knowledge-events-pqn56zk8.js → knowledge-events-2xkc3qbp.js} +5 -5
  55. package/dist/cli/{knowledge-store-tset38av.js → knowledge-store-1qgnnszb.js} +1 -1
  56. package/dist/cli/{knowledge-validator-6p132rab.js → knowledge-validator-ara710n2.js} +2 -2
  57. package/dist/cli/{mcp-j2zpg3pg.js → mcp-hxr8h6x9.js} +1 -1
  58. package/dist/cli/{model-preflight-0n10a18z.js → model-preflight-hmv22dqg.js} +26 -26
  59. package/dist/cli/{pending-delegations-qsvc60qb.js → pending-delegations-y5wbwx00.js} +2 -2
  60. package/dist/cli/{pr-subscriptions-zx205zj2.js → pr-subscriptions-r8fnmq1t.js} +1 -1
  61. package/dist/cli/{pr-workflow-gate-04ypha5r.js → pr-workflow-gate-dwpjb4v7.js} +26 -26
  62. package/dist/cli/{scan-cursor-6zb8bjmp.js → scan-cursor-mvfbz4e8.js} +2 -2
  63. package/dist/cli/{schema-9spe6r4w.js → schema-5hh36kba.js} +1 -1
  64. package/dist/cli/{scope-persistence-7b330a4k.js → scope-persistence-j066dccb.js} +5 -5
  65. package/dist/cli/{server-q54h8edd.js → server-xm9gsb3c.js} +26 -26
  66. package/dist/cli/{skill-generator-k6gtr0fh.js → skill-generator-80v3t2tj.js} +8 -8
  67. package/dist/cli/{snapshot-coordination-init-namz3ae3.js → snapshot-coordination-init-4c17fxg2.js} +26 -26
  68. package/dist/cli/{speckit-checkoff-40evtzf3.js → speckit-checkoff-gr031jmq.js} +3 -3
  69. package/dist/cli/{workflow-wal-file-qjez91sg.js → workflow-wal-file-w219pevg.js} +2 -2
  70. package/dist/cli/{worktree-collision-ownership-k471ygv7.js → worktree-collision-ownership-bdthy28h.js} +2 -2
  71. package/dist/cli/{worktree-isolation-5tbcb2j9.js → worktree-isolation-bs924rz9.js} +26 -26
  72. package/dist/index.js +32 -15
  73. package/dist/memory/memory-family-migration.d.ts +57 -3
  74. package/dist/utils/ephemeral-session-teardown.d.ts +24 -5
  75. package/package.json +1 -1
@@ -63,14 +63,67 @@ export interface MemoryFamilyMigrationCounts {
63
63
  filename: string;
64
64
  merged: number;
65
65
  skipped: number;
66
+ /** Same-id rows replaced by a strictly newer version (#3520 PRR-002 truthfulness). */
67
+ superseded: number;
66
68
  }>;
69
+ /**
70
+ * #2958 tombstone / recency audit, one entry per member that had anything
71
+ * to report (members whose three fields are all empty are omitted). Every
72
+ * emitted entry carries all three fields.
73
+ */
74
+ readonly audit: ReadonlyArray<MemoryFamilyMemberAudit>;
67
75
  }
68
- /** Id-keyed union of two append-only JSONL arrays (idempotent on retry). */
69
- declare function appendUnionById<T>(destination: T[], source: T[]): {
76
+ /** Per-member divergence audit (#2958). */
77
+ export interface MemoryFamilyMemberAudit {
78
+ readonly filename: string;
79
+ /** Destination-deleted ids a newer live source row resurrected. */
80
+ readonly resurrectedIds: readonly string[];
81
+ /**
82
+ * Collisions resolved by recency OTHER THAN resurrections: source-newer
83
+ * wins (live or tombstone) plus destination-tombstone suppressions.
84
+ * Destination-newer keep-rows are not supersessions (nothing moved), and
85
+ * resurrections are reported solely via {@link resurrectedIds} so no
86
+ * event renders twice.
87
+ */
88
+ readonly supersededCount: number;
89
+ /** Collisions with no usable recency signal (destination kept, reported). */
90
+ readonly unresolvedCollisions: readonly string[];
91
+ }
92
+ /** Options for {@link appendUnionById}. */
93
+ export interface AppendUnionByIdOptions {
94
+ /**
95
+ * Member filename — selects the member's recency rules
96
+ * ({@link MEMBER_RECENCY_KEYS}). Defaults to the memories shape.
97
+ */
98
+ memberFilename?: string;
99
+ }
100
+ /** Result of {@link appendUnionById} (#2958 recency-aware union). */
101
+ export interface AppendUnionByIdResult<T> {
70
102
  merged: T[];
71
103
  added: number;
72
104
  skipped: number;
73
- };
105
+ /** Source rows that superseded an older destination row for a shared id. */
106
+ superseded: number;
107
+ /** Shared ids with no usable recency signal (destination kept, reported). */
108
+ unresolvedCollisions: readonly string[];
109
+ /** Destination tombstones resurrected by a newer live source row. */
110
+ resurrectedIds: readonly string[];
111
+ }
112
+ /**
113
+ * Id-keyed union of two append-only JSONL arrays — recency-aware (#2958).
114
+ *
115
+ * For a shared id the union compares the source row against the EFFECTIVE last
116
+ * destination row (load is last-row-wins; the map is updated as rows append,
117
+ * so a multi-row source history resolves against the merge's own state). A
118
+ * strictly newer source row is APPENDED (files stay append-only — never
119
+ * rewritten in place); destination-newer or equal keeps today's skip; a
120
+ * byte-equal retry is benign dedup; a collision with no usable recency signal
121
+ * keeps the destination row AND is reported in `unresolvedCollisions`.
122
+ * Proposals use reviewed-outranks-unreviewed ordering (a curator review is a
123
+ * lifecycle advancement); tombstoned destination memories resurrected by a
124
+ * newer live source row are reported in `resurrectedIds`.
125
+ */
126
+ declare function appendUnionById<T>(destination: T[], source: T[], options?: AppendUnionByIdOptions): AppendUnionByIdResult<T>;
74
127
  /**
75
128
  * Outcome event ids are retry identities, not generic append-only row ids.
76
129
  * Apply the provider's shared semantic collision rules while retaining the
@@ -110,6 +163,7 @@ declare function stageSqliteDb(sourceStoragePath: string, destDir: string): {
110
163
  declare function mergeStagedSqlite(destStoragePath: string, stagedPath: string): Promise<{
111
164
  merged: number;
112
165
  skipped: number;
166
+ audit: MemoryFamilyMemberAudit;
113
167
  }>;
114
168
  /** Best-effort row count via a direct DB open (does not enter the pool). */
115
169
  declare function countRowsSafe(dbPath: string): Promise<number>;
@@ -128,12 +128,30 @@ export type EphemeralTeardownVerification = {
128
128
  reason: string;
129
129
  };
130
130
  /**
131
- * Bounded existence check via `session.get`. `get` throwing (session-gone
132
- * errors surface as rejections on the SDK surface) or returning an empty body
133
- * both mean the session is gone (mirrors the reason-forwarding resolver
134
- * precedent in `src/hooks/pr-workflow-session-resolver.ts`).
131
+ * Existence verdict for the post-delete verify (`session.get`).
132
+ *
133
+ * - `'gone'` — confirmed-gone signal only: an empty body (`data` undefined or
134
+ * null with no transport-class error envelope), or — for hosts configured
135
+ * `throwOnError: true` — a rejection that is neither the verify deadline
136
+ * error (compared by identity) nor transport-class.
137
+ * - `'unreadable'` — the verify timed out (the locally constructed deadline
138
+ * error, distinguished by identity) or the call failed with a transport-class
139
+ * error (whatwg fetch `TypeError`, connection-reset family). Never a death
140
+ * claim: under the installed SDK's `throwOnError` default-off, session-gone
141
+ * surfaces through the body check, so nearly every rejection/envelope-error
142
+ * reaching these paths is an unproven-death signal (issue #2964).
143
+ * - `'alive'` — non-empty body, or `get` unavailable (cannot disprove).
144
+ */
145
+ type SessionExistence = 'alive' | 'gone' | 'unreadable';
146
+ /**
147
+ * Whether an error looks like a transient transport failure rather than a
148
+ * host-level answer: a whatwg fetch network `TypeError`, a Node/Deno
149
+ * connection error code, or an SDK abort. Used both for rejections of
150
+ * `session.get` and for transport errors normalized into `{data: null, error}`
151
+ * envelopes by the v2 session shim (`src/host/v2/session-client.ts`).
135
152
  */
136
- declare function sessionExists(session: EphemeralSessionLifecycle, sessionId: string, verifyTimeoutMs: number): Promise<boolean>;
153
+ declare function isTransientTransportError(err: unknown): boolean;
154
+ declare function sessionExists(session: EphemeralSessionLifecycle, sessionId: string, verifyTimeoutMs: number): Promise<SessionExistence>;
137
155
  /**
138
156
  * Verified teardown (issue #2599): bounded abort → bounded delete → bounded
139
157
  * existence check, retrying the delete a bounded number of times when the
@@ -146,6 +164,7 @@ export declare const _internals: {
146
164
  boundedAbort: typeof boundedAbortEphemeralSession;
147
165
  boundedDelete: typeof boundedDeleteEphemeralSession;
148
166
  sessionExists: typeof sessionExists;
167
+ isTransientTransportError: typeof isTransientTransportError;
149
168
  log: typeof log;
150
169
  };
151
170
  export {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "opencode-swarm",
3
- "version": "7.200.13",
3
+ "version": "7.200.15",
4
4
  "description": "Architect-centric agentic swarm plugin for OpenCode - hub-and-spoke orchestration with SME consultation, code generation, and QA review",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",