@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 +84 -0
- package/dist/cloud/poll-cursor.d.ts +9 -0
- package/dist/cloud/poll-cursor.d.ts.map +1 -0
- package/dist/cloud/poll-cursor.js +76 -0
- package/dist/cloud/poll-cursor.js.map +1 -0
- package/dist/cloud/ws-client.d.ts +34 -0
- package/dist/cloud/ws-client.d.ts.map +1 -1
- package/dist/cloud/ws-client.js +68 -6
- package/dist/cloud/ws-client.js.map +1 -1
- package/dist/tools/health-check.d.ts.map +1 -1
- package/dist/tools/health-check.js +36 -1
- package/dist/tools/health-check.js.map +1 -1
- package/package.json +2 -2
- package/server.json +2 -2
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":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"ws-client.d.ts","sourceRoot":"","sources":["../../src/cloud/ws-client.ts"],"names":[],"mappings":"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"}
|
package/dist/cloud/ws-client.js
CHANGED
|
@@ -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.
|
|
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.
|
|
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.
|
|
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.
|
|
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
|
-
|
|
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,
|
|
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":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@essentialai/cogent-bridge",
|
|
3
|
-
"version": "3.23.
|
|
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.
|
|
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.
|
|
15
|
+
"version": "3.23.9",
|
|
16
16
|
"runtimeHint": "npx",
|
|
17
17
|
"transport": {
|
|
18
18
|
"type": "stdio"
|