@essentialai/cogent-bridge 3.23.7 → 3.23.9

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.
package/CHANGELOG.md CHANGED
@@ -1,3 +1,87 @@
1
+ ## 3.23.9 — 2026-09-06
2
+
3
+ ### Fixed — `cogent_health_check` described the RELAY, not this bridge
4
+
5
+ Reported by marvin-mobile after losing a day to it: an agent shows `autoRelay.registered: true`
6
+ beside `wsConnected: false` and still answers `healthy: true`.
7
+
8
+ `healthy` was computed as `resp.status === "ok"` from the relay's `GET /api/health`. It reports
9
+ whether **the relay** is up; it never described **this bridge**. So a peer with no delivery path at
10
+ all was listed in the roster, looked live, and answered healthy.
11
+
12
+ **The reporter's proposed condition would have been wrong, and this does not implement it.**
13
+ `wsConnected: false` is not unreachable — the poll fallback still delivers, which is how their own
14
+ messages were arriving; marking that broken would fire on every ordinary reconnect. The condition
15
+ is whether **any** path delivers.
16
+
17
+ **The data to answer that did not exist.** A poll failure was caught and only `logger.warn`'d, so
18
+ the bridge could not know whether its fallback worked — the same evidence-captured-then-discarded
19
+ shape as 3.21.4 and 3.21.6. `ws-client` now records `lastPollOkAt` / `lastPollError` and keeps a
20
+ **sticky** `lastWsError`, because a 401 is auth-dead and never self-recovers, unlike a reconnect.
21
+
22
+ `health_check` now reports `transport.deliveryPath` (`websocket|poll|none|unknown`) and
23
+ `transport.lastWsError`, and `healthy` is false **only** when a REGISTERED cloud peer has no working
24
+ path, with `unhealthyReason` naming which side failed. A poll that has not completed a cycle yet is
25
+ *unknown*, not failed.
26
+
27
+ ### Fixed — the wake matrix accepted a NON-ANSWER as a wake (gate false pass)
28
+
29
+ Found by two gates disagreeing about one agent in the same hour: the Slack round-trip failed gemini
30
+ for being unable to answer while the wake matrix printed a green cell for it.
31
+
32
+ `wakeVerdict` asserted a reply **existed** — not that it **answered**. The question was "please reply
33
+ with OK to confirm", which any reply satisfies, so on a box with no `gemini` binary the poll-agent
34
+ answered `⚠️ Gemini unavailable: spawn gemini ENOENT` and **every gemini cell went green**. That is
35
+ COG-20 verbatim — "replied" mistaken for "answered" — in the gate that was never given the treatment
36
+ the Slack gate got. The matrix now asks `what is A x B?` and requires the product.
37
+
38
+ ### Fixed — gates blamed Cogent for a vendor CLI that never ran
39
+
40
+ `classifyFailure` had no pattern for a missing binary, so `spawn gemini ENOENT` fell through to
41
+ "break" and the Slack gate printed *"a customer-visible Slack regression — do NOT ship past it"*.
42
+ Calling an un-run test a product failure states a conclusion the run does not support, exactly as a
43
+ false pass does. New `missing-cli` class; `allExternalAccount` counts it alongside quota/auth; one
44
+ real break still contaminates the set and is never excused.
45
+
46
+ ### Added — every agent type is covered by the Slack gate, not just claude
47
+
48
+ `slack-roundtrip-test` hardcoded `COGENT_PLATFORM: "cc"` and printed "ALL PASS" while proving **one**
49
+ of the three supported agent types. Per-agent-type session creation and spawning moved to
50
+ `scripts/agent-spawn-lib.mjs`, shared with the wake matrix — it lived privately inside
51
+ `wake-matrix-test.mjs`, which is *why* the Slack gate could only ever run claude. The gate now runs
52
+ `--agent claude,codex,gemini`, reports per-agent legs, and separates **proven / BLOCKED / PRODUCT**,
53
+ exiting 2 for blocked-only: coverage not achieved, never "fine".
54
+
55
+ ## 3.23.8 — 2026-09-06
56
+
57
+ ### A bridge restart no longer replays the channel's history
58
+
59
+ `lastMessageId` lived only in memory, and so did the `seenIds` dedup set. The relay's poll route
60
+ states the consequence: *"If lastMessageId is not provided (first poll), returns all messages."* So
61
+ every restart re-fetched the whole channel. Answered frames are skipped (`response !== null`), but
62
+ **broadcasts and unanswered frames are not** — they were re-injected on every restart.
63
+
64
+ Observed live: minutes after a restart, a machine was running
65
+ `claude --resume … -p "[Cogent Bridge: broadcast from Cogent_Master …]"` for a broadcast sent DAYS
66
+ earlier. A peer independently reported 410 replayed items and one frame arriving three times,
67
+ correlating with **restarts** rather than socket state — which is why the ack-based theory did not
68
+ fit: the relay treats `delivery_ack` purely as a sender notification and does not use it to decide
69
+ redelivery.
70
+
71
+ The cursor is now persisted per `(sessionId, peerId)` and restored on connect. **Persisted rather
72
+ than primed-and-discarded**: priming would also stop the replay but would silently drop messages
73
+ that genuinely arrived while an agent was down. A durable cursor resumes exactly where it left off —
74
+ nothing replayed, nothing lost. Best-effort throughout: an unreadable cursor degrades to exactly the
75
+ old behaviour.
76
+
77
+ `src/watch/index.ts:85` already primed correctly. The bridge never got that treatment — same
78
+ codebase, two clients, one primes.
79
+
80
+ **The gate had to be corrected too.** Its first version passed with the cursor deliberately broken,
81
+ because a healthy WebSocket means the poll fallback never runs. The production replay happened
82
+ precisely *because* the socket was 401-looping. The gate now fronts the relay with an HTTP-only
83
+ proxy that refuses WebSocket upgrades, reproducing that condition instead of the happy path.
84
+
1
85
  ## 3.23.7 — 2026-09-06 (client) + relay 3.14.1
2
86
 
3
87
  ### An agent locked out of its own peerId now recovers itself
@@ -0,0 +1,9 @@
1
+ /** `~/.cogent/poll-cursors/<sessionId>.<peerId>.json` */
2
+ export declare function pollCursorPath(sessionId: string, peerId: string): string;
3
+ /** The last message this peer consumed on this channel, or null when there is no record. */
4
+ export declare function loadPollCursor(sessionId: string, peerId: string): string | null;
5
+ /** Record the last consumed message. Best-effort; a failure only costs a replay next restart. */
6
+ export declare function savePollCursor(sessionId: string, peerId: string, lastMessageId: string): void;
7
+ /** Forget the cursor for this identity. Used when a peer deregisters from a channel for good. */
8
+ export declare function clearPollCursor(sessionId: string, peerId: string): void;
9
+ //# sourceMappingURL=poll-cursor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"poll-cursor.d.ts","sourceRoot":"","sources":["../../src/cloud/poll-cursor.ts"],"names":[],"mappings":"AAuCA,yDAAyD;AACzD,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAExE;AAOD,4FAA4F;AAC5F,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAQ/E;AAED,iGAAiG;AACjG,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,IAAI,CAY7F;AAED,iGAAiG;AACjG,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAMvE"}
@@ -0,0 +1,76 @@
1
+ /**
2
+ * DURABLE POLL CURSOR — a bridge restart must not replay the channel's history.
3
+ *
4
+ * ── THE DEFECT (measured 2026-09-06) ────────────────────────────────────────────────────
5
+ * `lastMessageId` lived ONLY in memory (message-inbox.ts, ws-client.ts), and so did the 1000-id
6
+ * `seenIds` dedup set. The relay's poll route is explicit about the consequence: "If lastMessageId
7
+ * is not provided (first poll), returns all messages."
8
+ *
9
+ * So every bridge restart re-fetched the ENTIRE channel from the beginning. Answered frames are
10
+ * skipped (auto-relay returns on `response !== null`), but broadcasts and unanswered frames are
11
+ * not — they were re-injected on every restart. Observed directly: minutes after a restart this
12
+ * machine was running `claude --resume … -p "[Cogent Bridge: broadcast from Cogent_Master …]"` for
13
+ * a broadcast sent DAYS earlier. A peer independently reported 410 replayed items and one frame
14
+ * arriving three times, correlating with restarts rather than with socket state.
15
+ *
16
+ * `src/watch/index.ts:85` already primes correctly ("seed lastMessageId + seen from the backlog
17
+ * without notifying"). The bridge never got that treatment — same codebase, two clients, one primes.
18
+ *
19
+ * ── WHY PERSIST RATHER THAN PRIME-AND-DISCARD ───────────────────────────────────────────
20
+ * Priming (fetch the backlog, throw it away, start from now) is simpler and would also stop the
21
+ * replay — but it SILENTLY DROPS messages that genuinely arrived while the agent was down, which
22
+ * is the failure mode this codebase treats as worst. A durable cursor resumes exactly where the
23
+ * agent left off: nothing replayed, nothing lost.
24
+ *
25
+ * Keyed on (sessionId, peerId): the cursor is a position in ONE channel's stream for ONE identity.
26
+ * Not cwd — the same checkout can serve different channels over time, and the relay session is what
27
+ * the cursor is actually a position in.
28
+ *
29
+ * Best-effort throughout. A cursor that cannot be read means "start from the beginning", which is
30
+ * exactly today's behaviour; a cursor that cannot be written means the next restart replays. Either
31
+ * degrades to the status quo and never blocks message flow.
32
+ */
33
+ import fs from "node:fs";
34
+ import os from "node:os";
35
+ import path from "node:path";
36
+ import { logger } from "../logger.js";
37
+ const safe = (s) => String(s).replace(/[^A-Za-z0-9._-]/g, "_");
38
+ /** `~/.cogent/poll-cursors/<sessionId>.<peerId>.json` */
39
+ export function pollCursorPath(sessionId, peerId) {
40
+ return path.join(os.homedir(), ".cogent", "poll-cursors", `${safe(sessionId)}.${safe(peerId)}.json`);
41
+ }
42
+ /** The last message this peer consumed on this channel, or null when there is no record. */
43
+ export function loadPollCursor(sessionId, peerId) {
44
+ if (!sessionId || !peerId)
45
+ return null;
46
+ try {
47
+ const raw = JSON.parse(fs.readFileSync(pollCursorPath(sessionId, peerId), "utf-8"));
48
+ return typeof raw?.lastMessageId === "string" && raw.lastMessageId ? raw.lastMessageId : null;
49
+ }
50
+ catch {
51
+ return null; // absent or corrupt — start from the beginning, i.e. the old behaviour
52
+ }
53
+ }
54
+ /** Record the last consumed message. Best-effort; a failure only costs a replay next restart. */
55
+ export function savePollCursor(sessionId, peerId, lastMessageId) {
56
+ if (!sessionId || !peerId || !lastMessageId)
57
+ return;
58
+ const p = pollCursorPath(sessionId, peerId);
59
+ try {
60
+ fs.mkdirSync(path.dirname(p), { recursive: true });
61
+ fs.writeFileSync(p, JSON.stringify({ lastMessageId, updatedAt: new Date().toISOString() }));
62
+ }
63
+ catch (err) {
64
+ logger.debug(`poll-cursor: could not persist (${err.message})`);
65
+ }
66
+ }
67
+ /** Forget the cursor for this identity. Used when a peer deregisters from a channel for good. */
68
+ export function clearPollCursor(sessionId, peerId) {
69
+ try {
70
+ fs.unlinkSync(pollCursorPath(sessionId, peerId));
71
+ }
72
+ catch {
73
+ /* never existed, or already gone */
74
+ }
75
+ }
76
+ //# sourceMappingURL=poll-cursor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"poll-cursor.js","sourceRoot":"","sources":["../../src/cloud/poll-cursor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAEtC,MAAM,IAAI,GAAG,CAAC,CAAS,EAAU,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,kBAAkB,EAAE,GAAG,CAAC,CAAC;AAE/E,yDAAyD;AACzD,MAAM,UAAU,cAAc,CAAC,SAAiB,EAAE,MAAc;IAC9D,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,cAAc,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AACvG,CAAC;AAOD,4FAA4F;AAC5F,MAAM,UAAU,cAAc,CAAC,SAAiB,EAAE,MAAc;IAC9D,IAAI,CAAC,SAAS,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IACvC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,cAAc,CAAC,SAAS,EAAE,MAAM,CAAC,EAAE,OAAO,CAAC,CAAe,CAAC;QAClG,OAAO,OAAO,GAAG,EAAE,aAAa,KAAK,QAAQ,IAAI,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC;IAChG,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC,CAAC,uEAAuE;IACtF,CAAC;AACH,CAAC;AAED,iGAAiG;AACjG,MAAM,UAAU,cAAc,CAAC,SAAiB,EAAE,MAAc,EAAE,aAAqB;IACrF,IAAI,CAAC,SAAS,IAAI,CAAC,MAAM,IAAI,CAAC,aAAa;QAAE,OAAO;IACpD,MAAM,CAAC,GAAG,cAAc,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IAC5C,IAAI,CAAC;QACH,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACnD,EAAE,CAAC,aAAa,CACd,CAAC,EACD,IAAI,CAAC,SAAS,CAAC,EAAE,aAAa,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAuB,CAAC,CAC5F,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,CAAC,KAAK,CAAC,mCAAoC,GAAa,CAAC,OAAO,GAAG,CAAC,CAAC;IAC7E,CAAC;AACH,CAAC;AAED,iGAAiG;AACjG,MAAM,UAAU,eAAe,CAAC,SAAiB,EAAE,MAAc;IAC/D,IAAI,CAAC;QACH,EAAE,CAAC,UAAU,CAAC,cAAc,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC;IACnD,CAAC;IAAC,MAAM,CAAC;QACP,oCAAoC;IACtC,CAAC;AACH,CAAC"}
@@ -66,8 +66,32 @@ export declare class CloudWsClient {
66
66
  private readonly backoff;
67
67
  private reconnectTimer;
68
68
  private pollTimer;
69
+ /**
70
+ * DELIVERY-PATH EVIDENCE. Before 3.23.9 a poll failure was caught and only logger.warn'd, so the
71
+ * bridge had no idea whether its FALLBACK delivery path worked — and `healthy` could not be
72
+ * computed honestly because the data did not exist. Captured evidence that nothing reads is the
73
+ * defect shape this codebase keeps hitting.
74
+ */
75
+ private lastPollOkAt;
76
+ private lastPollError;
77
+ private lastWsErrorSticky;
69
78
  private pingTimer;
70
79
  private lastMessageId;
80
+ /**
81
+ * Advance the poll cursor AND persist it.
82
+ *
83
+ * Every assignment must go through here. `lastMessageId` was in-memory only, so a restart sent
84
+ * no cursor and the relay replayed the whole channel ("If lastMessageId is not provided (first
85
+ * poll), returns all messages") — re-injecting days-old broadcasts on every restart.
86
+ */
87
+ private advanceCursor;
88
+ /**
89
+ * Seed the cursor from disk when this process has not consumed anything yet.
90
+ *
91
+ * Only ever fills a NULL cursor: a live in-memory position is always newer than the stored one,
92
+ * so it must never be overwritten by a restore.
93
+ */
94
+ private restoreCursor;
71
95
  private lastWsError;
72
96
  private connectionGeneration;
73
97
  private opts;
@@ -121,6 +145,16 @@ export declare class CloudWsClient {
121
145
  * ISO string. Survives reconnects, same as `getLastFrameAt()`.
122
146
  * Audit L2.
123
147
  */
148
+ /**
149
+ * What this bridge's DELIVERY situation actually is — the input `healthy` needs in order to
150
+ * describe THIS BRIDGE rather than the relay's uptime.
151
+ */
152
+ getDeliveryDiagnostics(): {
153
+ pollActive: boolean;
154
+ lastPollOkAt: number | null;
155
+ lastPollError: string | null;
156
+ lastWsError: string | null;
157
+ };
124
158
  getLastFrameAtMs(): number | null;
125
159
  /**
126
160
  * Update the last seen message ID (e.g., from HttpBackend operations).
@@ -1 +1 @@
1
- {"version":3,"file":"ws-client.d.ts","sourceRoot":"","sources":["../../src/cloud/ws-client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ws-client.d.ts","sourceRoot":"","sources":["../../src/cloud/ws-client.ts"],"names":[],"mappings":"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"}
@@ -2,6 +2,7 @@ import WebSocket from "ws";
2
2
  import { ExponentialBackoff } from "./backoff.js";
3
3
  import { WsCloseCode } from "./ws-frames.js";
4
4
  import { logger } from "../logger.js";
5
+ import { loadPollCursor, savePollCursor } from "./poll-cursor.js";
5
6
  /**
6
7
  * WebSocket client with reconnection logic and poll fallback.
7
8
  *
@@ -19,8 +20,46 @@ export class CloudWsClient {
19
20
  backoff;
20
21
  reconnectTimer = null;
21
22
  pollTimer = null;
23
+ /**
24
+ * DELIVERY-PATH EVIDENCE. Before 3.23.9 a poll failure was caught and only logger.warn'd, so the
25
+ * bridge had no idea whether its FALLBACK delivery path worked — and `healthy` could not be
26
+ * computed honestly because the data did not exist. Captured evidence that nothing reads is the
27
+ * defect shape this codebase keeps hitting.
28
+ */
29
+ lastPollOkAt = null;
30
+ lastPollError = null;
31
+ lastWsErrorSticky = null;
22
32
  pingTimer = null;
23
33
  lastMessageId = null;
34
+ /**
35
+ * Advance the poll cursor AND persist it.
36
+ *
37
+ * Every assignment must go through here. `lastMessageId` was in-memory only, so a restart sent
38
+ * no cursor and the relay replayed the whole channel ("If lastMessageId is not provided (first
39
+ * poll), returns all messages") — re-injecting days-old broadcasts on every restart.
40
+ */
41
+ advanceCursor(id) {
42
+ if (!id)
43
+ return;
44
+ this.lastMessageId = id;
45
+ savePollCursor(this.opts.sessionId, this.opts.peerId, id);
46
+ }
47
+ /**
48
+ * Seed the cursor from disk when this process has not consumed anything yet.
49
+ *
50
+ * Only ever fills a NULL cursor: a live in-memory position is always newer than the stored one,
51
+ * so it must never be overwritten by a restore.
52
+ */
53
+ restoreCursor() {
54
+ if (this.lastMessageId)
55
+ return;
56
+ const stored = loadPollCursor(this.opts.sessionId, this.opts.peerId);
57
+ if (stored) {
58
+ this.lastMessageId = stored;
59
+ logger.info(`CloudWsClient: resuming from stored poll cursor (${stored.slice(0, 8)}…) — the channel ` +
60
+ `backlog before it has already been consumed and will not be replayed.`);
61
+ }
62
+ }
24
63
  lastWsError = null;
25
64
  connectionGeneration = 0;
26
65
  opts;
@@ -43,6 +82,7 @@ export class CloudWsClient {
43
82
  * Guards against empty peerId -- call setPeerId() first.
44
83
  */
45
84
  connect() {
85
+ this.restoreCursor();
46
86
  if (!this.opts.peerId) {
47
87
  logger.warn("CloudWsClient: Cannot connect WebSocket without peerId. Call setPeerId() first.");
48
88
  return;
@@ -70,6 +110,7 @@ export class CloudWsClient {
70
110
  ws.on("open", () => {
71
111
  if (generation !== this.connectionGeneration || this.ws !== ws)
72
112
  return;
113
+ this.lastWsErrorSticky = null; // a successful open clears the standing complaint
73
114
  this.setState("connected");
74
115
  this.backoff.reset();
75
116
  this.stopPolling();
@@ -160,6 +201,10 @@ export class CloudWsClient {
160
201
  if (generation !== this.connectionGeneration || this.ws !== ws)
161
202
  return;
162
203
  this.lastWsError = err.message;
204
+ // A 401 here is auth-dead and never self-recovers — categorically different from a socket
205
+ // that is merely reconnecting. lastWsError is cleared by the close handler's eviction check,
206
+ // so keep a copy that survives for diagnosis.
207
+ this.lastWsErrorSticky = err.message;
163
208
  logger.error(`CloudWsClient: WebSocket error: ${err.message}`);
164
209
  // Don't change state here -- the "close" event follows and handles it
165
210
  });
@@ -231,6 +276,18 @@ export class CloudWsClient {
231
276
  * ISO string. Survives reconnects, same as `getLastFrameAt()`.
232
277
  * Audit L2.
233
278
  */
279
+ /**
280
+ * What this bridge's DELIVERY situation actually is — the input `healthy` needs in order to
281
+ * describe THIS BRIDGE rather than the relay's uptime.
282
+ */
283
+ getDeliveryDiagnostics() {
284
+ return {
285
+ pollActive: this.pollTimer !== null,
286
+ lastPollOkAt: this.lastPollOkAt,
287
+ lastPollError: this.lastPollError,
288
+ lastWsError: this.lastWsErrorSticky,
289
+ };
290
+ }
234
291
  getLastFrameAtMs() {
235
292
  return this.lastFrameAt;
236
293
  }
@@ -238,7 +295,7 @@ export class CloudWsClient {
238
295
  * Update the last seen message ID (e.g., from HttpBackend operations).
239
296
  */
240
297
  updateLastMessageId(id) {
241
- this.lastMessageId = id;
298
+ this.advanceCursor(id);
242
299
  }
243
300
  /**
244
301
  * Update the auth token for reconnection.
@@ -317,13 +374,13 @@ export class CloudWsClient {
317
374
  switch (frame.type) {
318
375
  case "message":
319
376
  this.opts.onMessage(frame.payload);
320
- this.lastMessageId = frame.payload.id;
377
+ this.advanceCursor(frame.payload.id);
321
378
  break;
322
379
  case "queued_messages": {
323
380
  const msgs = frame.payload.messages;
324
381
  this.opts.onMessages(msgs);
325
382
  if (msgs.length > 0) {
326
- this.lastMessageId = msgs[msgs.length - 1].id;
383
+ this.advanceCursor(msgs[msgs.length - 1].id);
327
384
  }
328
385
  break;
329
386
  }
@@ -354,6 +411,7 @@ export class CloudWsClient {
354
411
  startPolling() {
355
412
  if (this.pollTimer)
356
413
  return;
414
+ this.restoreCursor();
357
415
  const poll = async () => {
358
416
  try {
359
417
  const path = `/api/sessions/${this.opts.sessionId}/poll`;
@@ -366,12 +424,16 @@ export class CloudWsClient {
366
424
  const result = await this.opts.http.get(path, query);
367
425
  if (result.messages && result.messages.length > 0) {
368
426
  this.opts.onMessages(result.messages);
369
- this.lastMessageId =
370
- result.messages[result.messages.length - 1].id;
427
+ this.advanceCursor(result.messages[result.messages.length - 1].id);
371
428
  }
429
+ // A COMPLETED poll is the proof that the fallback path delivers, whether or not it
430
+ // carried messages. Recorded, not just logged.
431
+ this.lastPollOkAt = Date.now();
432
+ this.lastPollError = null;
372
433
  }
373
434
  catch (err) {
374
- logger.warn(`CloudWsClient: Poll failed: ${err instanceof Error ? err.message : String(err)}`);
435
+ this.lastPollError = err instanceof Error ? err.message : String(err);
436
+ logger.warn(`CloudWsClient: Poll failed: ${this.lastPollError}`);
375
437
  }
376
438
  };
377
439
  // Poll immediately, then at interval
@@ -1 +1 @@
1
- {"version":3,"file":"ws-client.js","sourceRoot":"","sources":["../../src/cloud/ws-client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ws-client.js","sourceRoot":"","sources":["../../src/cloud/ws-client.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"health-check.d.ts","sourceRoot":"","sources":["../../src/tools/health-check.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAWpE,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAgJ/D"}
1
+ {"version":3,"file":"health-check.d.ts","sourceRoot":"","sources":["../../src/tools/health-check.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAWpE,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA0L/D"}
@@ -27,12 +27,14 @@ export function registerHealthCheckTool(server) {
27
27
  // hasn't run, defaults are wsConnected=false / wsLastFrameAt=null --
28
28
  // the field is always present so consumers don't need a mode switch.
29
29
  let wsConnected = false;
30
+ let delivery = null;
30
31
  let wsLastFrameAt = null;
31
32
  let wsLastFrameAtMs = null;
32
33
  try {
33
34
  const startup = await import("../startup.js");
34
35
  if (startup.cloudWsClient) {
35
36
  wsConnected = startup.cloudWsClient.isConnected();
37
+ delivery = startup.cloudWsClient.getDeliveryDiagnostics?.() ?? null;
36
38
  wsLastFrameAt = startup.cloudWsClient.getLastFrameAt();
37
39
  wsLastFrameAtMs = startup.cloudWsClient.getLastFrameAtMs();
38
40
  }
@@ -100,8 +102,41 @@ export function registerHealthCheckTool(server) {
100
102
  // on a stale build (the recurring "/cogent map is out of date" pain). The nudge
101
103
  // is computed once at startup (best-effort, never blocks); null when current.
102
104
  const updateAvailable = getLastNudge();
105
+ /**
106
+ * 🔴 `healthy` USED TO MEAN "THE RELAY IS UP" (http-backend: `resp.status === "ok"`).
107
+ * It never described THIS BRIDGE, so an agent with no delivery path at all still answered
108
+ * `healthy: true`, was listed in the roster and looked live. Reported by marvin-mobile on
109
+ * 2026-09-06 after losing a day to it.
110
+ *
111
+ * `wsConnected: false` alone is NOT unreachable — the poll fallback delivers, and that is
112
+ * how the reporter's own messages were arriving. Marking a working degraded mode "broken"
113
+ * would fire on every ordinary reconnect. The condition is: is ANY path delivering?
114
+ */
115
+ const relayHealthy = result.healthy !== false;
116
+ let deliveryPath = "unknown";
117
+ if (cloud && delivery) {
118
+ deliveryPath = wsConnected
119
+ ? "websocket"
120
+ // A poll that has not completed a cycle yet is UNKNOWN, not failed — do not alarm on it.
121
+ : delivery.pollActive && !delivery.lastPollError
122
+ ? "poll"
123
+ : "none";
124
+ }
125
+ else if (cloud && wsConnected) {
126
+ deliveryPath = "websocket";
127
+ }
128
+ const registered = autoRelay.getDiagnostics().registered;
129
+ // Only a REGISTERED cloud peer has anything addressed to it; an unregistered bridge with no
130
+ // socket is idle, not broken.
131
+ const deliveryBroken = cloud && registered && deliveryPath === "none";
132
+ const unhealthyReason = deliveryBroken
133
+ ? `registered as a cloud peer but NO delivery path is working (websocket down${delivery?.lastWsError ? `: ${delivery.lastWsError}` : ""}; poll ${delivery?.lastPollError ? `failing: ${delivery.lastPollError}` : "inactive"}) — ` +
134
+ `messages addressed to this peer cannot reach it`
135
+ : null;
103
136
  const enriched = {
104
137
  ...JSON.parse(JSON.stringify(result)),
138
+ healthy: relayHealthy && !deliveryBroken,
139
+ ...(unhealthyReason ? { unhealthyReason } : {}),
105
140
  clientVersion: SERVER_VERSION,
106
141
  ...(updateAvailable ? { updateAvailable } : {}),
107
142
  runtimeMode: cloud ? "cloud" : "local",
@@ -123,7 +158,7 @@ export function registerHealthCheckTool(server) {
123
158
  // on HttpBackend; null when the /api/health fetch fails. Keep the
124
159
  // key cloud-gated for shape consistency with wsHealth (local mode
125
160
  // never has an upstream relay version to report).
126
- ...(cloud ? { wsHealth, relayVersion } : {}),
161
+ ...(cloud ? { wsHealth, relayVersion, deliveryPath, lastWsError: delivery?.lastWsError ?? null } : {}),
127
162
  },
128
163
  autoRelay: autoRelay.getDiagnostics(),
129
164
  };
@@ -1 +1 @@
1
- {"version":3,"file":"health-check.js","sourceRoot":"","sources":["../../src/tools/health-check.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"health-check.js","sourceRoot":"","sources":["../../src/tools/health-check.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC1D,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAItD,MAAM,UAAU,uBAAuB,CAAC,MAAiB;IACvD,MAAM,CAAC,YAAY,CACjB,qBAAqB,EACrB;QACE,KAAK,EAAE,cAAc;QACrB,WAAW,EACT,6EAA6E;YAC7E,wFAAwF;QAC1F,WAAW,EAAE,EAAE;QACf,WAAW,EAAE;YACX,YAAY,EAAE,IAAI;YAClB,eAAe,EAAE,KAAK;YACtB,cAAc,EAAE,IAAI;YACpB,aAAa,EAAE,KAAK;SACrB;KACF,EACD,KAAK,IAAI,EAAE;QACT,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;YAC7B,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,WAAW,EAAE,CAAC;YAE3C,gEAAgE;YAChE,qEAAqE;YACrE,oEAAoE;YACpE,qEAAqE;YACrE,qEAAqE;YACrE,IAAI,WAAW,GAAG,KAAK,CAAC;YACxB,IAAI,QAAQ,GAKD,IAAI,CAAC;YAChB,IAAI,aAAa,GAAkB,IAAI,CAAC;YACxC,IAAI,eAAe,GAAkB,IAAI,CAAC;YAC1C,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,CAAC;gBAC9C,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;oBAC1B,WAAW,GAAG,OAAO,CAAC,aAAa,CAAC,WAAW,EAAE,CAAC;oBAClD,QAAQ,GAAG,OAAO,CAAC,aAAa,CAAC,sBAAsB,EAAE,EAAE,IAAI,IAAI,CAAC;oBACpE,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC,cAAc,EAAE,CAAC;oBACvD,eAAe,GAAG,OAAO,CAAC,aAAa,CAAC,gBAAgB,EAAE,CAAC;gBAC7D,CAAC;YACH,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,kEAAkE;gBAClE,qEAAqE;gBACrE,kEAAkE;gBAClE,YAAY;gBACZ,MAAM,CAAC,KAAK,CACV,6CACE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CACjD,EAAE,CACH,CAAC;YACJ,CAAC;YAED,MAAM,KAAK,GAAG,WAAW,EAAE,CAAC;YAE5B,sFAAsF;YACtF,iFAAiF;YACjF,8EAA8E;YAC9E,0EAA0E;YAC1E,iFAAiF;YACjF,8EAA8E;YAC9E,gFAAgF;YAChF,6EAA6E;YAC7E,+CAA+C;YAC/C,IAAI,QAAQ,GAAa,OAAO,CAAC;YACjC,IAAI,KAAK,EAAE,CAAC;gBACV,MAAM,SAAS,GAAG,SAAS,EAAE,CAAC,kBAAkB,CAAC;gBACjD,MAAM,KAAK,GACT,eAAe,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,eAAe,CAAC;gBACjE,IAAI,CAAC,WAAW,EAAE,CAAC;oBACjB,uEAAuE;oBACvE,wEAAwE;oBACxE,0CAA0C;oBAC1C,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,IAAI,SAAS,EAAE,CAAC;wBACzC,QAAQ,GAAG,cAAc,CAAC;oBAC5B,CAAC;yBAAM,CAAC;wBACN,QAAQ,GAAG,cAAc,CAAC;oBAC5B,CAAC;gBACH,CAAC;qBAAM,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,GAAG,SAAS,EAAE,CAAC;oBAC/C,QAAQ,GAAG,OAAO,CAAC;gBACrB,CAAC;qBAAM,CAAC;oBACN,QAAQ,GAAG,OAAO,CAAC;gBACrB,CAAC;YACH,CAAC;YAED,kEAAkE;YAClE,mEAAmE;YACnE,mEAAmE;YACnE,oEAAoE;YACpE,kEAAkE;YAClE,sCAAsC;YACtC,IAAI,YAAY,GAAkB,IAAI,CAAC;YACvC,IAAI,KAAK,IAAI,OAAO,OAAO,CAAC,eAAe,KAAK,UAAU,EAAE,CAAC;gBAC3D,IAAI,CAAC;oBACH,YAAY,GAAG,CAAC,MAAM,OAAO,CAAC,eAAe,EAAE,CAAC,IAAI,IAAI,CAAC;gBAC3D,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,6DAA6D;oBAC7D,+DAA+D;oBAC/D,yCAAyC;oBACzC,MAAM,CAAC,KAAK,CACV,wCACE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CACjD,EAAE,CACH,CAAC;oBACF,YAAY,GAAG,IAAI,CAAC;gBACtB,CAAC;YACH,CAAC;YAED,2EAA2E;YAC3E,6EAA6E;YAC7E,gFAAgF;YAChF,8EAA8E;YAC9E,MAAM,eAAe,GAAG,YAAY,EAAE,CAAC;YAEvC;;;;;;;;;eASG;YACH,MAAM,YAAY,GAAI,MAAgC,CAAC,OAAO,KAAK,KAAK,CAAC;YACzE,IAAI,YAAY,GAA8C,SAAS,CAAC;YACxE,IAAI,KAAK,IAAI,QAAQ,EAAE,CAAC;gBACtB,YAAY,GAAG,WAAW;oBACxB,CAAC,CAAC,WAAW;oBACb,yFAAyF;oBACzF,CAAC,CAAC,QAAQ,CAAC,UAAU,IAAI,CAAC,QAAQ,CAAC,aAAa;wBAC9C,CAAC,CAAC,MAAM;wBACR,CAAC,CAAC,MAAM,CAAC;YACf,CAAC;iBAAM,IAAI,KAAK,IAAI,WAAW,EAAE,CAAC;gBAChC,YAAY,GAAG,WAAW,CAAC;YAC7B,CAAC;YACD,MAAM,UAAU,GAAG,SAAS,CAAC,cAAc,EAAE,CAAC,UAAU,CAAC;YACzD,4FAA4F;YAC5F,8BAA8B;YAC9B,MAAM,cAAc,GAAG,KAAK,IAAI,UAAU,IAAI,YAAY,KAAK,MAAM,CAAC;YACtE,MAAM,eAAe,GAAG,cAAc;gBACpC,CAAC,CAAC,6EACE,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EACxD,UAAU,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC,YAAY,QAAQ,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,UAAU,MAAM;oBAC3F,iDAAiD;gBACnD,CAAC,CAAC,IAAI,CAAC;YAET,MAAM,QAAQ,GAAG;gBACf,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAA4B;gBAChE,OAAO,EAAE,YAAY,IAAI,CAAC,cAAc;gBACxC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC/C,aAAa,EAAE,cAAc;gBAC7B,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC/C,WAAW,EAAE,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO;gBACtC,iEAAiE;gBACjE,mEAAmE;gBACnE,SAAS,EAAE;oBACT,gEAAgE;oBAChE,iEAAiE;oBACjE,yDAAyD;oBACzD,6BAA6B;oBAC7B,YAAY,EAAE,KAAK;oBACnB,WAAW;oBACX,aAAa;oBACb,OAAO,EACL,eAAe,KAAK,IAAI;wBACtB,CAAC,CAAC,IAAI;wBACN,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,eAAe;oBAClC,wEAAwE;oBACxE,oEAAoE;oBACpE,kEAAkE;oBAClE,kEAAkE;oBAClE,kDAAkD;oBAClD,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,QAAQ,EAAE,WAAW,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBACvG;gBACD,SAAS,EAAE,SAAS,CAAC,cAAc,EAAE;aACtC,CAAC;YACF,OAAO,aAAa,CAAC,QAAQ,CAAC,CAAC;QACjC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,CAAC,KAAK,CAAC,qBAAqB,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;YACpD,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@essentialai/cogent-bridge",
3
- "version": "3.23.7",
3
+ "version": "3.23.9",
4
4
  "description": "Cogent Bridge — cross-agent comms for Claude Code, OpenAI Codex and Slack. Codex users: install with `curl -fsSL https://cogent.tools/install.sh | sh`, then start with `cogent-codex` for real-time peer wake.",
5
5
  "type": "module",
6
6
  "workspaces": [
@@ -41,7 +41,7 @@
41
41
  "typecheck": "node node_modules/typescript/bin/tsc -p tsconfig.test.json --noEmit",
42
42
  "test:all": "node scripts/test-all.mjs",
43
43
  "secret-scan": "node scripts/secret-scan.mjs",
44
- "verify": "npm run typecheck && npm run test:all && node scripts/artifact-staleness-test.mjs && node scripts/dist-blackbox-test.mjs"
44
+ "verify": "npm run typecheck && npm run test:all && node scripts/artifact-staleness-test.mjs && node scripts/dist-blackbox-test.mjs && node scripts/gate-runbook-coverage-test.mjs && node scripts/gate-proof-coverage-test.mjs"
45
45
  },
46
46
  "keywords": [
47
47
  "mcp",
package/server.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "name": "io.github.eaisdevelopment/cogent",
4
4
  "title": "Cogent Bridge from Essential AI Solutions (essentialai.uk)",
5
5
  "description": "MCP bridge for inter-session communication between Claude Code instances",
6
- "version": "3.23.7",
6
+ "version": "3.23.9",
7
7
  "repository": {
8
8
  "url": "https://github.com/eaisdevelopment/cogent",
9
9
  "source": "github"
@@ -12,7 +12,7 @@
12
12
  {
13
13
  "registryType": "npm",
14
14
  "identifier": "@essentialai/cogent-bridge",
15
- "version": "3.23.7",
15
+ "version": "3.23.9",
16
16
  "runtimeHint": "npx",
17
17
  "transport": {
18
18
  "type": "stdio"