@spinabot/brigade 1.13.0 → 1.15.0
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/convex/logs.d.ts +9 -9
- package/convex/memory.d.ts +21 -21
- package/convex/schema.d.ts +11 -11
- package/convex/skills.d.ts +3 -3
- package/dist/buildstamp.json +1 -1
- package/dist/cli/commands/config-cmd.d.ts +12 -19
- package/dist/cli/commands/config-cmd.d.ts.map +1 -1
- package/dist/cli/commands/config-cmd.js +14 -197
- package/dist/cli/commands/config-cmd.js.map +1 -1
- package/dist/cli/commands/connect-transcript.d.ts +39 -0
- package/dist/cli/commands/connect-transcript.d.ts.map +1 -0
- package/dist/cli/commands/connect-transcript.js +60 -0
- package/dist/cli/commands/connect-transcript.js.map +1 -0
- package/dist/cli/commands/connect.d.ts.map +1 -1
- package/dist/cli/commands/connect.js +297 -169
- package/dist/cli/commands/connect.js.map +1 -1
- package/dist/core/agents-crud-ops.d.ts +15 -0
- package/dist/core/agents-crud-ops.d.ts.map +1 -0
- package/dist/core/agents-crud-ops.js +27 -0
- package/dist/core/agents-crud-ops.js.map +1 -0
- package/dist/core/agents-ops.d.ts +43 -0
- package/dist/core/agents-ops.d.ts.map +1 -0
- package/dist/core/agents-ops.js +117 -0
- package/dist/core/agents-ops.js.map +1 -0
- package/dist/core/channels-ops.d.ts +30 -0
- package/dist/core/channels-ops.d.ts.map +1 -0
- package/dist/core/channels-ops.js +52 -0
- package/dist/core/channels-ops.js.map +1 -0
- package/dist/core/config-ops.d.ts +77 -0
- package/dist/core/config-ops.d.ts.map +1 -0
- package/dist/core/config-ops.js +241 -0
- package/dist/core/config-ops.js.map +1 -0
- package/dist/core/exec-ops.d.ts +48 -0
- package/dist/core/exec-ops.d.ts.map +1 -0
- package/dist/core/exec-ops.js +101 -0
- package/dist/core/exec-ops.js.map +1 -0
- package/dist/core/integrations-ops.d.ts +25 -0
- package/dist/core/integrations-ops.d.ts.map +1 -0
- package/dist/core/integrations-ops.js +40 -0
- package/dist/core/integrations-ops.js.map +1 -0
- package/dist/core/memory-ops.d.ts +20 -0
- package/dist/core/memory-ops.d.ts.map +1 -0
- package/dist/core/memory-ops.js +40 -0
- package/dist/core/memory-ops.js.map +1 -0
- package/dist/core/pairing-ops.d.ts +33 -0
- package/dist/core/pairing-ops.d.ts.map +1 -0
- package/dist/core/pairing-ops.js +78 -0
- package/dist/core/pairing-ops.js.map +1 -0
- package/dist/core/provider-ops.d.ts +17 -0
- package/dist/core/provider-ops.d.ts.map +1 -0
- package/dist/core/provider-ops.js +29 -0
- package/dist/core/provider-ops.js.map +1 -0
- package/dist/core/server.d.ts.map +1 -1
- package/dist/core/server.js +261 -14
- package/dist/core/server.js.map +1 -1
- package/dist/core/sessions-ops.d.ts +25 -0
- package/dist/core/sessions-ops.d.ts.map +1 -0
- package/dist/core/sessions-ops.js +77 -0
- package/dist/core/sessions-ops.js.map +1 -0
- package/dist/core/skills-ops.d.ts +14 -0
- package/dist/core/skills-ops.d.ts.map +1 -0
- package/dist/core/skills-ops.js +28 -0
- package/dist/core/skills-ops.js.map +1 -0
- package/dist/protocol/errors.d.ts +14 -0
- package/dist/protocol/errors.d.ts.map +1 -1
- package/dist/protocol/errors.js +14 -0
- package/dist/protocol/errors.js.map +1 -1
- package/dist/protocol/handshake.d.ts +10 -0
- package/dist/protocol/handshake.d.ts.map +1 -1
- package/dist/protocol/methods.d.ts +478 -0
- package/dist/protocol/methods.d.ts.map +1 -1
- package/dist/protocol/stream-seq.d.ts +30 -0
- package/dist/protocol/stream-seq.d.ts.map +1 -0
- package/dist/protocol/stream-seq.js +38 -0
- package/dist/protocol/stream-seq.js.map +1 -0
- package/dist/protocol.d.ts +265 -6
- package/dist/protocol.d.ts.map +1 -1
- package/dist/protocol.js +95 -5
- package/dist/protocol.js.map +1 -1
- package/dist/tui/client.d.ts +67 -2
- package/dist/tui/client.d.ts.map +1 -1
- package/dist/tui/client.js +106 -2
- package/dist/tui/client.js.map +1 -1
- package/package.json +1 -1
package/dist/tui/client.js
CHANGED
|
@@ -19,6 +19,7 @@
|
|
|
19
19
|
import { EventEmitter } from "node:events";
|
|
20
20
|
import WebSocket from "ws";
|
|
21
21
|
import { DEFAULT_PORT, isFrame, TICK_INTERVAL_MS, } from "../protocol.js";
|
|
22
|
+
import { isSeqGap } from "../protocol/stream-seq.js";
|
|
22
23
|
import { clientAuthHeaders } from "../core/gateway-auth.js";
|
|
23
24
|
/**
|
|
24
25
|
* Brigade gateway client. Construct → `await client.connect()` → use.
|
|
@@ -48,6 +49,20 @@ export class BrigadeClient extends EventEmitter {
|
|
|
48
49
|
/** Last time we received any frame from the server. Tick watchdog reads this. */
|
|
49
50
|
lastFrameAt = 0;
|
|
50
51
|
tickWatchTimer;
|
|
52
|
+
/**
|
|
53
|
+
* Last `seq` seen per session on the ordered `pi` stream. Used to detect a
|
|
54
|
+
* gap: when a frame's seq isn't `last + 1`, a frame was dropped or reordered
|
|
55
|
+
* (or the gateway restarted and reset its counters), so we emit `"resync"`
|
|
56
|
+
* and the consumer issues a `resume` to backfill from the transcript. Keyed
|
|
57
|
+
* by sessionId (= sessionKey), the same key `resume` syncs. Survives
|
|
58
|
+
* reconnects so the cursor stays meaningful across a blip.
|
|
59
|
+
*/
|
|
60
|
+
lastSeqBySession = new Map();
|
|
61
|
+
/** The most recent HelloOk frame (server connId, build version, epoch,
|
|
62
|
+
* advertised methods/events, policy limits). Undefined until first connect. */
|
|
63
|
+
lastHelloOk;
|
|
64
|
+
/** Connection lifecycle state, mirrored by the "connection-state" event. */
|
|
65
|
+
connState = "connecting";
|
|
51
66
|
/** Reconnect state. */
|
|
52
67
|
reconnectAttempt = 0;
|
|
53
68
|
reconnectTimer;
|
|
@@ -84,6 +99,26 @@ export class BrigadeClient extends EventEmitter {
|
|
|
84
99
|
}
|
|
85
100
|
this.ws = undefined;
|
|
86
101
|
this.connected = false;
|
|
102
|
+
this.setConnState("closed");
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Server handshake info from the last `HelloOk` — connId, build version,
|
|
106
|
+
* `epoch` (session generation), the advertised `features.{methods,events}`,
|
|
107
|
+
* and `policy` limits. Undefined before the first connect. A web/mobile
|
|
108
|
+
* client reads this to discover what it can call/subscribe to + the limits.
|
|
109
|
+
*/
|
|
110
|
+
get server() {
|
|
111
|
+
return this.lastHelloOk;
|
|
112
|
+
}
|
|
113
|
+
/** Current connection lifecycle state (also pushed via "connection-state"). */
|
|
114
|
+
get connectionState() {
|
|
115
|
+
return this.connState;
|
|
116
|
+
}
|
|
117
|
+
setConnState(state) {
|
|
118
|
+
if (this.connState === state)
|
|
119
|
+
return;
|
|
120
|
+
this.connState = state;
|
|
121
|
+
super.emit("connection-state", state);
|
|
87
122
|
}
|
|
88
123
|
/** True if the underlying socket is currently OPEN. */
|
|
89
124
|
get isConnected() {
|
|
@@ -127,13 +162,34 @@ export class BrigadeClient extends EventEmitter {
|
|
|
127
162
|
}
|
|
128
163
|
});
|
|
129
164
|
}
|
|
130
|
-
/** Type-aware event subscription. Returns `this` for chaining (matches EventEmitter). */
|
|
131
165
|
on(event, listener) {
|
|
132
166
|
return super.on(event, listener);
|
|
133
167
|
}
|
|
134
168
|
off(event, listener) {
|
|
135
169
|
return super.off(event, listener);
|
|
136
170
|
}
|
|
171
|
+
/**
|
|
172
|
+
* Resume a session: fetch its committed transcript + head seq + header
|
|
173
|
+
* snapshot, and sync the local seq cursor so live frames continue cleanly
|
|
174
|
+
* from `headSeq + 1`. Call this on connect, on reconnect, and on a
|
|
175
|
+
* `"resync"` event. The consumer renders the returned `messages` through
|
|
176
|
+
* its identity-keyed applier (idempotent), so overlapping with live frames
|
|
177
|
+
* is harmless. This is the reliable-streaming recovery primitive — the
|
|
178
|
+
* transcript is the source of truth, so a dropped/reordered/missed frame
|
|
179
|
+
* always self-heals here.
|
|
180
|
+
*/
|
|
181
|
+
async resume(params) {
|
|
182
|
+
// NOTE: we deliberately do NOT write `lastSeqBySession` here. The seq
|
|
183
|
+
// cursor is owned by `dispatchFrame`, which advances it to each live
|
|
184
|
+
// frame's seq as it arrives — so after a gap the cursor already reflects
|
|
185
|
+
// the last frame actually received, and the next contiguous frame won't
|
|
186
|
+
// re-trigger. Writing `headSeq` here (a snapshot that can LAG the live
|
|
187
|
+
// frames still streaming during the resume round-trip) would rewind the
|
|
188
|
+
// cursor below an already-applied frame, making the next live frame look
|
|
189
|
+
// like a fresh gap → a resync/resume storm on a busy session. resume()
|
|
190
|
+
// recovers CONTENT (the transcript); the cursor is pure live bookkeeping.
|
|
191
|
+
return this.request("resume", params);
|
|
192
|
+
}
|
|
137
193
|
/* ─────────────────────────── socket lifecycle ─────────────────────────── */
|
|
138
194
|
openSocket() {
|
|
139
195
|
return new Promise((resolve, reject) => {
|
|
@@ -144,6 +200,7 @@ export class BrigadeClient extends EventEmitter {
|
|
|
144
200
|
this.connected = true;
|
|
145
201
|
this.reconnectAttempt = 0;
|
|
146
202
|
this.lastFrameAt = Date.now();
|
|
203
|
+
this.setConnState("connected");
|
|
147
204
|
resolved = true;
|
|
148
205
|
resolve();
|
|
149
206
|
});
|
|
@@ -183,8 +240,10 @@ export class BrigadeClient extends EventEmitter {
|
|
|
183
240
|
}
|
|
184
241
|
if (!resolved)
|
|
185
242
|
reject(new Error("socket closed before open"));
|
|
186
|
-
if (!this.closed)
|
|
243
|
+
if (!this.closed) {
|
|
244
|
+
this.setConnState("reconnecting");
|
|
187
245
|
this.scheduleReconnect();
|
|
246
|
+
}
|
|
188
247
|
});
|
|
189
248
|
ws.on("error", (err) => {
|
|
190
249
|
if (!resolved) {
|
|
@@ -230,10 +289,55 @@ export class BrigadeClient extends EventEmitter {
|
|
|
230
289
|
return;
|
|
231
290
|
}
|
|
232
291
|
if (frame.type === "event") {
|
|
292
|
+
// Gap detection on the ordered stream. The server stamps a per-session
|
|
293
|
+
// monotonic `seq` on every ordered frame — `pi` (top-level),
|
|
294
|
+
// `approval-request`, and `system-event` — all sharing one counter, so
|
|
295
|
+
// any frame carrying a `seq` is part of it. If the next seq isn't
|
|
296
|
+
// `last + 1` we missed a frame (dropped by backpressure, reordered, or
|
|
297
|
+
// a gateway restart); emit `"resync"` so the consumer `resume`s and
|
|
298
|
+
// backfills (transcript + pending approvals + recent system-events).
|
|
299
|
+
// Frames without `seq` (state/error/log + sub-agent pi) are unordered
|
|
300
|
+
// side-channels and skip the check.
|
|
301
|
+
if (typeof frame.seq === "number") {
|
|
302
|
+
const sid = frame.payload?.sessionId;
|
|
303
|
+
if (sid) {
|
|
304
|
+
const last = this.lastSeqBySession.get(sid);
|
|
305
|
+
this.lastSeqBySession.set(sid, frame.seq);
|
|
306
|
+
if (isSeqGap(last, frame.seq)) {
|
|
307
|
+
super.emit("resync", { sessionId: sid, lastSeq: last, gotSeq: frame.seq });
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
}
|
|
233
311
|
// Re-emit with the typed event name so on() handlers fire.
|
|
234
312
|
super.emit(frame.event, frame.payload);
|
|
235
313
|
return;
|
|
236
314
|
}
|
|
315
|
+
if (frame.type === "hello-ok") {
|
|
316
|
+
// Server handshake (connId / build version / epoch / advertised
|
|
317
|
+
// methods+events / policy limits). If the `epoch` changed since the
|
|
318
|
+
// last HelloOk, the gateway restarted and its per-session seq counters
|
|
319
|
+
// reset — invalidate our cursors so the fresh low seqs aren't misread
|
|
320
|
+
// as a backwards gap; the consumer's reconnect → `resume` rebuilds.
|
|
321
|
+
const prevEpoch = this.lastHelloOk?.server.epoch;
|
|
322
|
+
this.lastHelloOk = frame;
|
|
323
|
+
if (prevEpoch !== undefined && prevEpoch !== frame.server.epoch) {
|
|
324
|
+
this.lastSeqBySession.clear();
|
|
325
|
+
}
|
|
326
|
+
super.emit("hello", frame);
|
|
327
|
+
return;
|
|
328
|
+
}
|
|
329
|
+
if (frame.type === "tick") {
|
|
330
|
+
// Keepalive — `lastFrameAt` already bumped in the message handler;
|
|
331
|
+
// receiving it is enough to keep the tick watchdog satisfied.
|
|
332
|
+
return;
|
|
333
|
+
}
|
|
334
|
+
if (frame.type === "shutdown") {
|
|
335
|
+
// Graceful shutdown notice — surface it so the consumer can show a
|
|
336
|
+
// "gateway restarting" line instead of a bare disconnect. The socket
|
|
337
|
+
// close that follows still drives the normal reconnect+resume path.
|
|
338
|
+
super.emit("shutdown", frame);
|
|
339
|
+
return;
|
|
340
|
+
}
|
|
237
341
|
// type === "req" — server doesn't make requests of clients in v1; ignore.
|
|
238
342
|
}
|
|
239
343
|
/* ─────────────────────────── tick watchdog ─────────────────────────── */
|
package/dist/tui/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/tui/client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,OAAO,SAAS,MAAM,IAAI,CAAC;AAE3B,OAAO,EACN,YAAY,EAIZ,OAAO,
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/tui/client.ts"],"names":[],"mappings":"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"}
|