borgmcp 0.9.37 → 0.9.39

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.
@@ -13,9 +13,9 @@
13
13
  * per active cube.
14
14
  * - On every received `event: log`, a single line is appended to the
15
15
  * per-drone inbox file (same format the old poller wrote).
16
- * - On every `event: heartbeat`, we check the carried hwm against
17
- * `lastPersistedEventId`; on divergence we abort + reconnect via
18
- * `Last-Event-ID` for catchup (the §(5) detection path).
16
+ * - On every `event: heartbeat`, any carried hwm is compared against
17
+ * `lastPersistedEventId`; divergence starts a short grace timer
18
+ * before reconnect so an in-flight live broadcast can arrive first.
19
19
  * - Outer `runLoop` reconnects with exponential backoff on any
20
20
  * stream-level error, including heartbeat watchdog firing.
21
21
  *
@@ -32,8 +32,10 @@ import { acquireStreamLease, readOwnershipSnapshot, } from './stream-owner.js';
32
32
  // ------------------------------------------------------------------
33
33
  // Tuning constants
34
34
  // ------------------------------------------------------------------
35
- /** Server emits heartbeats every 20s; allow 15s grace before forcing reconnect. */
36
- const HEARTBEAT_TIMEOUT_MS = 35_000;
35
+ /** Server emits heartbeats every 20s; allow several misses before reconnecting. */
36
+ const HEARTBEAT_TIMEOUT_MS = 90_000;
37
+ /** Grace window for a heartbeat HWM that is ahead of the local cursor. */
38
+ const HWM_DIVERGENCE_GRACE_MS = 2_000;
37
39
  const RECONNECT_MIN_MS = 500;
38
40
  const RECONNECT_MAX_MS = 30_000;
39
41
  /**
@@ -117,9 +119,11 @@ export function startLogStream() {
117
119
  const defaultDeps = {
118
120
  fetchImpl: globalThis.fetch.bind(globalThis),
119
121
  appendLine: defaultAppendLine,
122
+ hasInboxEntryId: defaultHasInboxEntryId,
120
123
  getToken: getValidToken,
121
124
  wakeCodex: wakeCodexViaAppServer,
122
125
  heartbeatTimeoutMs: HEARTBEAT_TIMEOUT_MS,
126
+ hwmDivergenceGraceMs: HWM_DIVERGENCE_GRACE_MS,
123
127
  abortSignal: new AbortController().signal,
124
128
  ownerDeps: {},
125
129
  ownerStaleMs: 70_000,
@@ -227,7 +231,7 @@ async function runLoop() {
227
231
  }
228
232
  }
229
233
  export async function streamOnce(active, lastEventId, onEventId, deps = {}) {
230
- const { fetchImpl, appendLine, getToken, wakeCodex, heartbeatTimeoutMs, abortSignal, } = { ...defaultDeps, ...deps };
234
+ const { fetchImpl, appendLine, hasInboxEntryId, getToken, wakeCodex, heartbeatTimeoutMs, hwmDivergenceGraceMs, abortSignal, } = { ...defaultDeps, ...deps };
231
235
  const token = await getToken();
232
236
  const headers = {
233
237
  Authorization: `Bearer ${token}`,
@@ -268,10 +272,54 @@ export async function streamOnce(active, lastEventId, onEventId, deps = {}) {
268
272
  // disk write (or dedup-recognized replay). Heartbeat-hwm comparison
269
273
  // reads this value.
270
274
  let lastPersistedEventId = lastEventId;
275
+ let lastBroadcastHwm = null;
276
+ let pendingHwmDivergence = null;
277
+ const clearPendingHwmDivergence = () => {
278
+ if (!pendingHwmDivergence)
279
+ return;
280
+ clearTimeout(pendingHwmDivergence.timer);
281
+ pendingHwmDivergence = null;
282
+ };
283
+ const markEventPersisted = (id) => {
284
+ lastPersistedEventId = id;
285
+ streamState.lastPersistedEventId = id;
286
+ onEventId(id);
287
+ };
288
+ const markBroadcastPersisted = (hwm) => {
289
+ if (!hwm)
290
+ return;
291
+ lastBroadcastHwm =
292
+ !lastBroadcastHwm || compareBroadcastHwm(hwm, lastBroadcastHwm) > 0
293
+ ? hwm
294
+ : lastBroadcastHwm;
295
+ if (pendingHwmDivergence &&
296
+ compareBroadcastHwm(lastBroadcastHwm, pendingHwmDivergence.hwm) >= 0) {
297
+ clearPendingHwmDivergence();
298
+ }
299
+ };
300
+ const scheduleHwmDivergenceReconnect = (hwm) => {
301
+ if (pendingHwmDivergence?.hwm.id === hwm.id)
302
+ return;
303
+ clearPendingHwmDivergence();
304
+ const timer = setTimeout(() => {
305
+ if (lastBroadcastHwm && compareBroadcastHwm(lastBroadcastHwm, hwm) >= 0) {
306
+ clearPendingHwmDivergence();
307
+ return;
308
+ }
309
+ try {
310
+ ac.abort(new Error('hwm divergence — reconnect for catchup'));
311
+ }
312
+ catch {
313
+ // ignore
314
+ }
315
+ }, hwmDivergenceGraceMs);
316
+ pendingHwmDivergence = { hwm, timer };
317
+ };
271
318
  // Bounded recent-id set for replay-on-reconnect dedup per spec §(3).
272
319
  // Set + FIFO array for O(1) membership + bounded memory.
273
320
  const recentIds = new Set();
274
321
  const recentIdsOrder = [];
322
+ let isCatchingUp = lastEventId !== null;
275
323
  let response;
276
324
  try {
277
325
  response = await fetchImpl(`${active.apiUrl}/api/drone/stream`, {
@@ -304,40 +352,40 @@ export async function streamOnce(active, lastEventId, onEventId, deps = {}) {
304
352
  }
305
353
  if (event.type === 'heartbeat') {
306
354
  streamState.lastHeartbeatAt = nowIso;
307
- // First-heartbeat absorb: on a fresh session connect (no
308
- // Last-Event-ID sent), we have no cursor yet. The server
309
- // sends bookmark→heartbeat with the cube's current hwm.
310
- // Treat that hwm as the implicit starting point — anything
311
- // older was either delivered via `borg:regen` at session
312
- // start or is accepted-loss (no cross-session resume in v1,
313
- // per spec wire-protocol §Resume). Without this absorb, the
314
- // strict-equality check below would diverge on every fresh
315
- // connect to a non-empty cube and produce an immediate
316
- // reconnect loop.
317
- if (event.hwm && lastPersistedEventId === null) {
318
- lastPersistedEventId = event.hwm;
319
- streamState.lastPersistedEventId = event.hwm;
320
- onEventId(event.hwm);
355
+ // First/baseline heartbeat absorb: until this session has seen
356
+ // a broadcast entry, the server's broadcast HWM is our baseline.
357
+ // Direct messages may advance the persistence cursor past this
358
+ // value; directional comparison must not treat that mirror case
359
+ // as missed-broadcast evidence.
360
+ if (event.hwm && lastBroadcastHwm === null) {
361
+ markBroadcastPersisted(event.hwm);
362
+ if (lastPersistedEventId === null) {
363
+ markEventPersisted(event.hwm.id);
364
+ }
321
365
  continue;
322
366
  }
323
- // §(5) divergence-detection: if the server's hwm has moved
324
- // past what we've persisted, we missed at least one broadcast
325
- // for this cube. Abort the stream so the outer loop reconnects
326
- // with Last-Event-ID = lastPersistedEventId; catchup replays
327
- // the missed entries.
328
- if (event.hwm && event.hwm !== lastPersistedEventId) {
329
- try {
330
- ac.abort(new Error('hwm divergence reconnect for catchup'));
331
- }
332
- catch {
333
- // ignore
334
- }
335
- break;
367
+ if (event.hwm &&
368
+ lastBroadcastHwm &&
369
+ compareBroadcastHwm(event.hwm, lastBroadcastHwm) <= 0) {
370
+ clearPendingHwmDivergence();
371
+ continue;
372
+ }
373
+ // §(5) divergence-detection: reconnect only when the server's
374
+ // broadcast HWM is AHEAD of the client's broadcast cursor. A
375
+ // recipient persisting a direct entry legitimately advances
376
+ // lastPersistedEventId beyond the broadcast HWM; strict
377
+ // inequality would reintroduce gh#402 churn for that mirror case.
378
+ if (event.hwm &&
379
+ lastBroadcastHwm &&
380
+ compareBroadcastHwm(event.hwm, lastBroadcastHwm) > 0) {
381
+ scheduleHwmDivergenceReconnect(event.hwm);
336
382
  }
337
383
  continue;
338
384
  }
339
- if (event.type === 'bookmark')
385
+ if (event.type === 'bookmark') {
386
+ isCatchingUp = false;
340
387
  continue;
388
+ }
341
389
  if (event.type === 'log') {
342
390
  // DEDUP per §(3) recent-ids contract: an out-of-order DO
343
391
  // broadcast followed by reconnect+catchup can replay an entry
@@ -349,12 +397,8 @@ export async function streamOnce(active, lastEventId, onEventId, deps = {}) {
349
397
  // id we've actually got persisted). UUIDs are not ordinally
350
398
  // comparable with created_at, so set membership is the check.
351
399
  if (recentIds.has(event.id)) {
352
- lastPersistedEventId = event.id;
353
- // Mirror to probe-surface state so `borg:stream-status` shows
354
- // the actual cursor after a dedup-only event sequence, not a
355
- // stale one. Matches the persist + absorb branches below.
356
- streamState.lastPersistedEventId = event.id;
357
- onEventId(event.id);
400
+ markEventPersisted(event.id);
401
+ markBroadcastPersisted(broadcastHwmFromLogEvent(event));
358
402
  continue;
359
403
  }
360
404
  // OWN-DRONE FILTER: restore the silent-self property — parity
@@ -394,7 +438,12 @@ export async function streamOnce(active, lastEventId, onEventId, deps = {}) {
394
438
  // semantic takes precedence.
395
439
  if (event.data?.kind === 'ack') {
396
440
  if (event.data?.author_drone_id === active.droneId) {
397
- const line = formatInboxLine(event.data);
441
+ const line = formatInboxLine(withSseEventId(event.data, event.id));
442
+ if (isCatchingUp &&
443
+ await hasInboxEntryId(active.cubeId, active.droneId, event.id)) {
444
+ markEventPersisted(event.id);
445
+ continue;
446
+ }
398
447
  await appendLine(active.cubeId, active.droneId, line);
399
448
  wakeCodex(formatCodexWakePrompt(line));
400
449
  }
@@ -407,14 +456,11 @@ export async function streamOnce(active, lastEventId, onEventId, deps = {}) {
407
456
  if (oldId)
408
457
  recentIds.delete(oldId);
409
458
  }
410
- lastPersistedEventId = event.id;
411
- streamState.lastPersistedEventId = event.id;
412
- onEventId(event.id);
459
+ markEventPersisted(event.id);
460
+ markBroadcastPersisted(broadcastHwmFromLogEvent(event));
413
461
  continue;
414
462
  }
415
463
  if (event.data?.drone_id === active.droneId && !isHeartbeatPing) {
416
- lastPersistedEventId = event.id;
417
- streamState.lastPersistedEventId = event.id;
418
464
  recentIds.add(event.id);
419
465
  recentIdsOrder.push(event.id);
420
466
  while (recentIdsOrder.length > RECENT_IDS_CAP) {
@@ -422,7 +468,7 @@ export async function streamOnce(active, lastEventId, onEventId, deps = {}) {
422
468
  if (oldId)
423
469
  recentIds.delete(oldId);
424
470
  }
425
- onEventId(event.id);
471
+ markEventPersisted(event.id);
426
472
  continue;
427
473
  }
428
474
  // LOAD-BEARING ORDER: disk write must complete before cursor
@@ -431,7 +477,12 @@ export async function streamOnce(active, lastEventId, onEventId, deps = {}) {
431
477
  // Reversing this order would lose entries on disk-write failure
432
478
  // because Last-Event-ID would have already advanced past them.
433
479
  // This is the §(3) durability contract — do not refactor.
434
- const line = formatInboxLine(event.data);
480
+ const line = formatInboxLine(withSseEventId(event.data, event.id));
481
+ if (isCatchingUp &&
482
+ await hasInboxEntryId(active.cubeId, active.droneId, event.id)) {
483
+ markEventPersisted(event.id);
484
+ continue;
485
+ }
435
486
  await appendLine(active.cubeId, active.droneId, line);
436
487
  wakeCodex(formatCodexWakePrompt(line));
437
488
  recentIds.add(event.id);
@@ -441,9 +492,8 @@ export async function streamOnce(active, lastEventId, onEventId, deps = {}) {
441
492
  if (oldId)
442
493
  recentIds.delete(oldId);
443
494
  }
444
- lastPersistedEventId = event.id;
445
- streamState.lastPersistedEventId = event.id;
446
- onEventId(event.id);
495
+ markEventPersisted(event.id);
496
+ markBroadcastPersisted(broadcastHwmFromLogEvent(event));
447
497
  }
448
498
  }
449
499
  }
@@ -451,6 +501,7 @@ export async function streamOnce(active, lastEventId, onEventId, deps = {}) {
451
501
  abortSignal.removeEventListener('abort', abortFromExternal);
452
502
  if (watchdog)
453
503
  clearTimeout(watchdog);
504
+ clearPendingHwmDivergence();
454
505
  streamState.connected = false;
455
506
  }
456
507
  }
@@ -550,12 +601,7 @@ function parseEventBlock(block) {
550
601
  try {
551
602
  const parsed = JSON.parse(dataStr);
552
603
  ts = typeof parsed.ts === 'string' ? parsed.ts : null;
553
- hwm =
554
- typeof parsed.hwm === 'string'
555
- ? parsed.hwm
556
- : parsed.hwm === null
557
- ? null
558
- : null;
604
+ hwm = parseHeartbeatHwm(parsed.hwm);
559
605
  }
560
606
  catch {
561
607
  // fall through with nulls
@@ -575,6 +621,44 @@ function parseEventBlock(block) {
575
621
  }
576
622
  return { type: 'unknown', raw: block };
577
623
  }
624
+ function parseHeartbeatHwm(value) {
625
+ if (!value || typeof value !== 'object')
626
+ return null;
627
+ const candidate = value;
628
+ return typeof candidate.id === 'string' &&
629
+ candidate.id.length > 0 &&
630
+ typeof candidate.created_at === 'string' &&
631
+ candidate.created_at.length > 0
632
+ ? { id: candidate.id, created_at: candidate.created_at }
633
+ : null;
634
+ }
635
+ function compareBroadcastHwm(a, b) {
636
+ const aTime = Date.parse(a.created_at);
637
+ const bTime = Date.parse(b.created_at);
638
+ if (Number.isFinite(aTime) && Number.isFinite(bTime) && aTime !== bTime) {
639
+ return aTime - bTime;
640
+ }
641
+ if (a.created_at !== b.created_at) {
642
+ return a.created_at < b.created_at ? -1 : 1;
643
+ }
644
+ return a.id.localeCompare(b.id);
645
+ }
646
+ function broadcastHwmFromLogEvent(event) {
647
+ if (event.data?.visibility === 'direct' || event.data?.kind === 'ack') {
648
+ return null;
649
+ }
650
+ const createdAt = event.data?.created_at;
651
+ return typeof createdAt === 'string' && createdAt.length > 0
652
+ ? { id: event.id, created_at: createdAt }
653
+ : null;
654
+ }
655
+ function withSseEventId(entry, eventId) {
656
+ if (!entry || typeof entry !== 'object')
657
+ return { id: eventId };
658
+ if (typeof entry.id === 'string' && entry.id.length > 0)
659
+ return entry;
660
+ return { ...entry, id: eventId };
661
+ }
578
662
  /**
579
663
  * Format one inbox-file line. Preserves the long-poll inbox.ts prefix
580
664
  * shape (`<iso-ts> <drone-label> (<role-name>): ...`) so existing
@@ -597,8 +681,13 @@ export function formatInboxLine(entry) {
597
681
  const label = entry.drone_label ?? '?';
598
682
  const role = entry.role_name ?? '?';
599
683
  const rawMessage = typeof entry.message === 'string' ? entry.message : '';
600
- const idPrefix = typeof entry.id === 'string' && entry.id.length > 0
601
- ? `[entry_id: ${entry.id}] `
684
+ const entryId = typeof entry.id === 'string' && entry.id.length > 0
685
+ ? entry.id
686
+ : typeof entry.entry_id === 'string' && entry.entry_id.length > 0
687
+ ? entry.entry_id
688
+ : '';
689
+ const idPrefix = entryId
690
+ ? `[entry_id: ${entryId}] `
602
691
  : '';
603
692
  // Normalize \r\n, \r, and \n all to ` ⏎ ` so the entry fits on one
604
693
  // physical line regardless of line-ending convention in the source.
@@ -610,6 +699,19 @@ async function defaultAppendLine(cubeId, droneId, line) {
610
699
  await fs.mkdir(path.dirname(p), { recursive: true });
611
700
  await fs.appendFile(p, line + '\n', 'utf-8');
612
701
  }
702
+ async function defaultHasInboxEntryId(cubeId, droneId, entryId) {
703
+ const p = inboxPathForDrone(cubeId, droneId);
704
+ let raw;
705
+ try {
706
+ raw = await fs.readFile(p, 'utf-8');
707
+ }
708
+ catch (err) {
709
+ if (err?.code === 'ENOENT')
710
+ return false;
711
+ throw err;
712
+ }
713
+ return raw.includes(`[entry_id: ${entryId}]`);
714
+ }
613
715
  function sleep(ms) {
614
716
  return new Promise((resolve) => setTimeout(resolve, ms));
615
717
  }
@@ -1 +1 @@
1
- {"version":3,"file":"log-stream.js","sourceRoot":"","sources":["../src/log-stream.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"log-stream.js","sourceRoot":"","sources":["../src/log-stream.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AACnF,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EACL,kBAAkB,EAClB,qBAAqB,GAGtB,MAAM,mBAAmB,CAAC;AAE3B,qEAAqE;AACrE,mBAAmB;AACnB,qEAAqE;AAErE,mFAAmF;AACnF,MAAM,oBAAoB,GAAG,MAAM,CAAC;AACpC,0EAA0E;AAC1E,MAAM,uBAAuB,GAAG,KAAK,CAAC;AACtC,MAAM,gBAAgB,GAAG,GAAG,CAAC;AAC7B,MAAM,gBAAgB,GAAG,MAAM,CAAC;AAChC;;;;;;GAMG;AACH,MAAM,cAAc,GAAG,EAAE,CAAC;AAwB1B,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAElC,MAAM,WAAW,GAAiB;IAChC,SAAS,EAAE,KAAK;IAChB,kBAAkB,EAAE,IAAI;IACxB,kBAAkB,EAAE,IAAI;IACxB,eAAe,EAAE,IAAI;IACrB,oBAAoB,EAAE,IAAI;IAC1B,iBAAiB,EAAE,CAAC;IACpB,mBAAmB,EAAE,CAAC;IACtB,SAAS,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE;CAChC,CAAC;AAEF;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CAAC,KAAmB,EAAE,WAAmB,IAAI,CAAC,GAAG,EAAE,GAAG,cAAc;IACvG,IAAI,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,kBAAkB;QAAE,OAAO,WAAW,CAAC;IACpE,IAAI,CAAC,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,iBAAiB,GAAG,CAAC;QAAE,OAAO,cAAc,CAAC;IAC3E,IAAI,CAAC,KAAK,CAAC,SAAS,IAAI,CAAC,KAAK,CAAC,kBAAkB,IAAI,KAAK,CAAC,iBAAiB,KAAK,CAAC,IAAI,QAAQ,GAAG,MAAM;QAAE,OAAO,cAAc,CAAC;IAC/H,OAAO,eAAe,CAAC;AACzB,CAAC;AAED,MAAM,UAAU,eAAe;IAC7B,OAAO,EAAE,GAAG,WAAW,EAAE,aAAa,EAAE,qBAAqB,CAAC,WAAW,CAAC,EAAE,CAAC;AAC/E,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,yBAAyB;IACvC,WAAW,CAAC,SAAS,GAAG,KAAK,CAAC;IAC9B,WAAW,CAAC,kBAAkB,GAAG,IAAI,CAAC;IACtC,WAAW,CAAC,kBAAkB,GAAG,IAAI,CAAC;IACtC,WAAW,CAAC,eAAe,GAAG,IAAI,CAAC;IACnC,WAAW,CAAC,oBAAoB,GAAG,IAAI,CAAC;IACxC,WAAW,CAAC,iBAAiB,GAAG,CAAC,CAAC;IAClC,WAAW,CAAC,mBAAmB,GAAG,CAAC,CAAC;IACpC,WAAW,CAAC,SAAS,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;AAC/C,CAAC;AAED,qEAAqE;AACrE,cAAc;AACd,qEAAqE;AAErE;;;;;;;GAOG;AACH,MAAM,UAAU,cAAc;IAC5B,KAAK,CAAC,KAAK,IAAI,EAAE;QACf,OAAO,IAAI,EAAE,CAAC;YACZ,IAAI,CAAC;gBACH,MAAM,OAAO,EAAE,CAAC;gBAChB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,yEAAyE,CAAC,CAAC;YAClG,CAAC;YAAC,OAAO,GAAQ,EAAE,CAAC;gBAClB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,wCAAwC,GAAG,EAAE,OAAO,IAAI,GAAG,sBAAsB,CAAC,CAAC;YAC1G,CAAC;YACD,WAAW,CAAC,mBAAmB,IAAI,CAAC,CAAC;YACrC,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC;QACpB,CAAC;IACH,CAAC,CAAC,EAAE,CAAC;AACP,CAAC;AAqCD,MAAM,WAAW,GAAyB;IACxC,SAAS,EAAE,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC;IAC5C,UAAU,EAAE,iBAAiB;IAC7B,eAAe,EAAE,sBAAsB;IACvC,QAAQ,EAAE,aAAa;IACvB,SAAS,EAAE,qBAAqB;IAChC,kBAAkB,EAAE,oBAAoB;IACxC,oBAAoB,EAAE,uBAAuB;IAC7C,WAAW,EAAE,IAAI,eAAe,EAAE,CAAC,MAAM;IACzC,SAAS,EAAE,EAAE;IACb,YAAY,EAAE,MAAM;CACrB,CAAC;AAEF,qEAAqE;AACrE,uBAAuB;AACvB,qEAAqE;AAErE,KAAK,UAAU,OAAO;IACpB,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,IAAI,WAAW,GAAkB,IAAI,CAAC;IACtC,IAAI,aAAa,GAAkB,IAAI,CAAC;IACxC,IAAI,KAAK,GAAuB,IAAI,CAAC;IACrC,IAAI,QAAQ,GAAkB,IAAI,CAAC;IAEnC,OAAO,IAAI,EAAE,CAAC;QACZ,MAAM,MAAM,GAAG,MAAM,aAAa,EAAE,CAAC;QACrC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,IAAI,KAAK,EAAE,CAAC;gBACV,MAAM,KAAK,CAAC,OAAO,EAAE,CAAC;gBACtB,KAAK,GAAG,IAAI,CAAC;gBACb,QAAQ,GAAG,IAAI,CAAC;YAClB,CAAC;YACD,WAAW,CAAC,SAAS,GAAG,KAAK,CAAC;YAC9B,WAAW,CAAC,SAAS,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;YAC7C,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC;YAClB,SAAS;QACX,CAAC;QAED,iEAAiE;QACjE,0CAA0C;QAC1C,IAAI,MAAM,CAAC,MAAM,KAAK,aAAa,EAAE,CAAC;YACpC,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC;YAC9B,WAAW,GAAG,IAAI,CAAC;QACrB,CAAC;QAED,MAAM,YAAY,GAAG,GAAG,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QAC1D,IAAI,KAAK,IAAI,QAAQ,KAAK,YAAY,EAAE,CAAC;YACvC,MAAM,KAAK,CAAC,OAAO,EAAE,CAAC;YACtB,KAAK,GAAG,IAAI,CAAC;YACb,QAAQ,GAAG,IAAI,CAAC;QAClB,CAAC;QAED,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,KAAK,GAAG,MAAM,kBAAkB,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;YAChE,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC;QACzC,CAAC;QAED,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,WAAW,CAAC,SAAS,GAAG,KAAK,CAAC;YAC9B,WAAW,CAAC,SAAS,GAAG,MAAM,qBAAqB,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;YACnF,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC;YAClB,SAAS;QACX,CAAC;QAED,WAAW,CAAC,SAAS,GAAG,MAAM,qBAAqB,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;QAEnF,IAAI,SAAS,GAAG,KAAK,CAAC;QACtB,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;YACzC,MAAM,OAAO,GAAG,KAAK,IAAI,EAAE;gBACzB,IAAI,CAAC;oBACH,IAAI,CAAC,CAAC,MAAM,KAAM,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;wBAC9B,SAAS,GAAG,IAAI,CAAC;wBACjB,UAAU,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC,CAAC;oBACvD,CAAC;gBACH,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,SAAS,GAAG,IAAI,CAAC;oBACjB,UAAU,CAAC,KAAK,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBACxE,CAAC;YACH,CAAC,CAAC;YACF,MAAM,YAAY,GAAG,WAAW,CAC9B,GAAG,EAAE;gBACH,KAAK,OAAO,EAAE,CAAC;YACjB,CAAC,EACD,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,oBAAoB,GAAG,CAAC,CAAC,CAAC,CACrD,CAAC;YACF,IAAI,CAAC;gBACH,MAAM,UAAU,CACd,MAAM,EACN,WAAW,EACX,CAAC,EAAE,EAAE,EAAE;oBACL,WAAW,GAAG,EAAE,CAAC;gBACnB,CAAC,EACD,EAAE,WAAW,EAAE,UAAU,CAAC,MAAM,EAAE,CACnC,CAAC;YACJ,CAAC;oBAAS,CAAC;gBACT,aAAa,CAAC,YAAY,CAAC,CAAC;YAC9B,CAAC;YACD,IAAI,SAAS,EAAE,CAAC;gBACd,KAAK,GAAG,IAAI,CAAC;gBACb,QAAQ,GAAG,IAAI,CAAC;gBAChB,WAAW,CAAC,SAAS,GAAG,KAAK,CAAC;gBAC9B,WAAW,CAAC,SAAS,GAAG,MAAM,qBAAqB,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;gBACnF,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC;gBAClB,SAAS;YACX,CAAC;YACD,8DAA8D;YAC9D,OAAO,GAAG,CAAC,CAAC;YACZ,WAAW,CAAC,iBAAiB,GAAG,CAAC,CAAC;QACpC,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,IAAI,SAAS,EAAE,CAAC;gBACd,KAAK,GAAG,IAAI,CAAC;gBACb,QAAQ,GAAG,IAAI,CAAC;gBAChB,WAAW,CAAC,SAAS,GAAG,KAAK,CAAC;gBAC9B,WAAW,CAAC,SAAS,GAAG,MAAM,qBAAqB,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;gBACnF,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC;gBAClB,SAAS;YACX,CAAC;YACD,WAAW,CAAC,SAAS,GAAG,KAAK,CAAC;YAC9B,MAAM,KAAK,GACT,IAAI,CAAC,GAAG,CAAC,gBAAgB,GAAG,CAAC,IAAI,OAAO,EAAE,gBAAgB,CAAC;gBAC3D,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC;YACtB,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,sCAAsC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,OAAO,IAAI,GAAG,IAAI,CACtF,CAAC;YACF,OAAO,IAAI,CAAC,CAAC;YACb,WAAW,CAAC,iBAAiB,GAAG,OAAO,CAAC;YACxC,MAAM,KAAK,CAAC,KAAK,CAAC,CAAC;QACrB,CAAC;IACH,CAAC;AACH,CAAC;AAaD,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,MAAkB,EAClB,WAA0B,EAC1B,SAA+B,EAC/B,OAAmB,EAAE;IAErB,MAAM,EACJ,SAAS,EACT,UAAU,EACV,eAAe,EACf,QAAQ,EACR,SAAS,EACT,kBAAkB,EAClB,oBAAoB,EACpB,WAAW,GACZ,GAAG,EAAE,GAAG,WAAW,EAAE,GAAG,IAAI,EAAE,CAAC;IAEhC,MAAM,KAAK,GAAG,MAAM,QAAQ,EAAE,CAAC;IAC/B,MAAM,OAAO,GAA2B;QACtC,aAAa,EAAE,UAAU,KAAK,EAAE;QAChC,iBAAiB,EAAE,MAAM,CAAC,YAAY;QACtC,MAAM,EAAE,mBAAmB;KAC5B,CAAC;IACF,IAAI,WAAW;QAAE,OAAO,CAAC,eAAe,CAAC,GAAG,WAAW,CAAC;IAExD,MAAM,EAAE,GAAG,IAAI,eAAe,EAAE,CAAC;IACjC,MAAM,iBAAiB,GAAG,GAAG,EAAE;QAC7B,IAAI,CAAC;YACH,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,IAAI,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC;QAC9D,CAAC;QAAC,MAAM,CAAC;YACP,SAAS;QACX,CAAC;IACH,CAAC,CAAC;IACF,IAAI,WAAW,CAAC,OAAO;QAAE,iBAAiB,EAAE,CAAC;IAC7C,WAAW,CAAC,gBAAgB,CAAC,OAAO,EAAE,iBAAiB,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IACzE,6DAA6D;IAC7D,sEAAsE;IACtE,IAAI,QAAQ,GAA0B,IAAI,CAAC;IAC3C,MAAM,YAAY,GAAG,GAAG,EAAE;QACxB,IAAI,QAAQ;YAAE,YAAY,CAAC,QAAQ,CAAC,CAAC;QACrC,QAAQ,GAAG,UAAU,CAAC,GAAG,EAAE;YACzB,IAAI,CAAC;gBACH,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC,CAAC;YACpD,CAAC;YAAC,MAAM,CAAC;gBACP,SAAS;YACX,CAAC;QACH,CAAC,EAAE,kBAAkB,CAAC,CAAC;IACzB,CAAC,CAAC;IACF,YAAY,EAAE,CAAC;IAEf,mEAAmE;IACnE,oEAAoE;IACpE,oBAAoB;IACpB,IAAI,oBAAoB,GAAkB,WAAW,CAAC;IACtD,IAAI,gBAAgB,GAAwB,IAAI,CAAC;IACjD,IAAI,oBAAoB,GAEb,IAAI,CAAC;IAEhB,MAAM,yBAAyB,GAAG,GAAG,EAAE;QACrC,IAAI,CAAC,oBAAoB;YAAE,OAAO;QAClC,YAAY,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;QACzC,oBAAoB,GAAG,IAAI,CAAC;IAC9B,CAAC,CAAC;IAEF,MAAM,kBAAkB,GAAG,CAAC,EAAU,EAAE,EAAE;QACxC,oBAAoB,GAAG,EAAE,CAAC;QAC1B,WAAW,CAAC,oBAAoB,GAAG,EAAE,CAAC;QACtC,SAAS,CAAC,EAAE,CAAC,CAAC;IAChB,CAAC,CAAC;IAEF,MAAM,sBAAsB,GAAG,CAAC,GAAwB,EAAE,EAAE;QAC1D,IAAI,CAAC,GAAG;YAAE,OAAO;QACjB,gBAAgB;YACd,CAAC,gBAAgB,IAAI,mBAAmB,CAAC,GAAG,EAAE,gBAAgB,CAAC,GAAG,CAAC;gBACjE,CAAC,CAAC,GAAG;gBACL,CAAC,CAAC,gBAAgB,CAAC;QACvB,IACE,oBAAoB;YACpB,mBAAmB,CAAC,gBAAgB,EAAE,oBAAoB,CAAC,GAAG,CAAC,IAAI,CAAC,EACpE,CAAC;YACD,yBAAyB,EAAE,CAAC;QAC9B,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,8BAA8B,GAAG,CAAC,GAAiB,EAAE,EAAE;QAC3D,IAAI,oBAAoB,EAAE,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,EAAE;YAAE,OAAO;QACpD,yBAAyB,EAAE,CAAC;QAC5B,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;YAC5B,IAAI,gBAAgB,IAAI,mBAAmB,CAAC,gBAAgB,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBACxE,yBAAyB,EAAE,CAAC;gBAC5B,OAAO;YACT,CAAC;YACD,IAAI,CAAC;gBACH,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC,CAAC;YAChE,CAAC;YAAC,MAAM,CAAC;gBACP,SAAS;YACX,CAAC;QACH,CAAC,EAAE,oBAAoB,CAAC,CAAC;QACzB,oBAAoB,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC;IACxC,CAAC,CAAC;IAEF,qEAAqE;IACrE,yDAAyD;IACzD,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU,CAAC;IACpC,MAAM,cAAc,GAAa,EAAE,CAAC;IACpC,IAAI,YAAY,GAAG,WAAW,KAAK,IAAI,CAAC;IAExC,IAAI,QAAkB,CAAC;IACvB,IAAI,CAAC;QACH,QAAQ,GAAG,MAAM,SAAS,CAAC,GAAG,MAAM,CAAC,MAAM,mBAAmB,EAAE;YAC9D,MAAM,EAAE,KAAK;YACb,OAAO;YACP,MAAM,EAAE,EAAE,CAAC,MAAM;SAClB,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,QAAQ;YAAE,YAAY,CAAC,QAAQ,CAAC,CAAC;QACrC,MAAM,GAAG,CAAC;IACZ,CAAC;IAED,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QACnC,IAAI,QAAQ;YAAE,YAAY,CAAC,QAAQ,CAAC,CAAC;QACrC,MAAM,IAAI,KAAK,CAAC,eAAe,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IACpD,CAAC;IAED,WAAW,CAAC,SAAS,GAAG,IAAI,CAAC;IAE7B,IAAI,CAAC;QACH,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YAClD,YAAY,EAAE,CAAC;YACf,MAAM,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;YACxC,WAAW,CAAC,kBAAkB,GAAG,MAAM,CAAC;YACxC,mEAAmE;YACnE,iEAAiE;YACjE,8DAA8D;YAC9D,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;gBACtD,WAAW,CAAC,kBAAkB,GAAG,MAAM,CAAC;YAC1C,CAAC;YAED,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;gBAC/B,WAAW,CAAC,eAAe,GAAG,MAAM,CAAC;gBACrC,+DAA+D;gBAC/D,iEAAiE;gBACjE,+DAA+D;gBAC/D,gEAAgE;gBAChE,gCAAgC;gBAChC,IAAI,KAAK,CAAC,GAAG,IAAI,gBAAgB,KAAK,IAAI,EAAE,CAAC;oBAC3C,sBAAsB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;oBAClC,IAAI,oBAAoB,KAAK,IAAI,EAAE,CAAC;wBAClC,kBAAkB,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;oBACnC,CAAC;oBACD,SAAS;gBACX,CAAC;gBACD,IACE,KAAK,CAAC,GAAG;oBACT,gBAAgB;oBAChB,mBAAmB,CAAC,KAAK,CAAC,GAAG,EAAE,gBAAgB,CAAC,IAAI,CAAC,EACrD,CAAC;oBACD,yBAAyB,EAAE,CAAC;oBAC5B,SAAS;gBACX,CAAC;gBACD,8DAA8D;gBAC9D,6DAA6D;gBAC7D,4DAA4D;gBAC5D,wDAAwD;gBACxD,kEAAkE;gBAClE,IACE,KAAK,CAAC,GAAG;oBACT,gBAAgB;oBAChB,mBAAmB,CAAC,KAAK,CAAC,GAAG,EAAE,gBAAgB,CAAC,GAAG,CAAC,EACpD,CAAC;oBACD,8BAA8B,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBAC5C,CAAC;gBACD,SAAS;YACX,CAAC;YACD,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;gBAC9B,YAAY,GAAG,KAAK,CAAC;gBACrB,SAAS;YACX,CAAC;YACD,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;gBACzB,yDAAyD;gBACzD,8DAA8D;gBAC9D,6DAA6D;gBAC7D,2DAA2D;gBAC3D,6DAA6D;gBAC7D,2DAA2D;gBAC3D,2DAA2D;gBAC3D,4DAA4D;gBAC5D,8DAA8D;gBAC9D,IAAI,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC;oBAC5B,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;oBAC7B,sBAAsB,CAAC,wBAAwB,CAAC,KAAK,CAAC,CAAC,CAAC;oBACxD,SAAS;gBACX,CAAC;gBAED,8DAA8D;gBAC9D,2DAA2D;gBAC3D,2DAA2D;gBAC3D,wDAAwD;gBACxD,2DAA2D;gBAC3D,yDAAyD;gBACzD,2DAA2D;gBAC3D,2DAA2D;gBAC3D,4DAA4D;gBAC5D,4DAA4D;gBAC5D,0DAA0D;gBAC1D,qDAAqD;gBACrD,EAAE;gBACF,4DAA4D;gBAC5D,6DAA6D;gBAC7D,8DAA8D;gBAC9D,8DAA8D;gBAC9D,0DAA0D;gBAC1D,6DAA6D;gBAC7D,8DAA8D;gBAC9D,2DAA2D;gBAC3D,6DAA6D;gBAC7D,yDAAyD;gBACzD,gDAAgD;gBAChD,MAAM,eAAe,GACnB,OAAO,KAAK,CAAC,IAAI,EAAE,OAAO,KAAK,QAAQ;oBACvC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,kBAAkB,CAAC,CAAC;gBAEpD,+DAA+D;gBAC/D,8DAA8D;gBAC9D,4DAA4D;gBAC5D,6DAA6D;gBAC7D,+DAA+D;gBAC/D,0DAA0D;gBAC1D,8DAA8D;gBAC9D,8DAA8D;gBAC9D,6BAA6B;gBAC7B,IAAI,KAAK,CAAC,IAAI,EAAE,IAAI,KAAK,KAAK,EAAE,CAAC;oBAC/B,IAAI,KAAK,CAAC,IAAI,EAAE,eAAe,KAAK,MAAM,CAAC,OAAO,EAAE,CAAC;wBACnD,MAAM,IAAI,GAAG,eAAe,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;wBACnE,IACE,YAAY;4BACZ,MAAM,eAAe,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC,EAC9D,CAAC;4BACD,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;4BAC7B,SAAS;wBACX,CAAC;wBACD,MAAM,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;wBACtD,SAAS,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC,CAAC;oBACzC,CAAC;oBACD,2DAA2D;oBAC3D,+BAA+B;oBAC/B,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;oBACxB,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;oBAC9B,OAAO,cAAc,CAAC,MAAM,GAAG,cAAc,EAAE,CAAC;wBAC9C,MAAM,KAAK,GAAG,cAAc,CAAC,KAAK,EAAE,CAAC;wBACrC,IAAI,KAAK;4BAAE,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;oBACrC,CAAC;oBACD,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;oBAC7B,sBAAsB,CAAC,wBAAwB,CAAC,KAAK,CAAC,CAAC,CAAC;oBACxD,SAAS;gBACX,CAAC;gBAED,IAAI,KAAK,CAAC,IAAI,EAAE,QAAQ,KAAK,MAAM,CAAC,OAAO,IAAI,CAAC,eAAe,EAAE,CAAC;oBAChE,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;oBACxB,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;oBAC9B,OAAO,cAAc,CAAC,MAAM,GAAG,cAAc,EAAE,CAAC;wBAC9C,MAAM,KAAK,GAAG,cAAc,CAAC,KAAK,EAAE,CAAC;wBACrC,IAAI,KAAK;4BAAE,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;oBACrC,CAAC;oBACD,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;oBAC7B,SAAS;gBACX,CAAC;gBAED,6DAA6D;gBAC7D,8DAA8D;gBAC9D,gEAAgE;gBAChE,gEAAgE;gBAChE,+DAA+D;gBAC/D,0DAA0D;gBAC1D,MAAM,IAAI,GAAG,eAAe,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;gBACnE,IACE,YAAY;oBACZ,MAAM,eAAe,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC,EAC9D,CAAC;oBACD,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;oBAC7B,SAAS;gBACX,CAAC;gBACD,MAAM,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;gBACtD,SAAS,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC,CAAC;gBACvC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gBACxB,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gBAC9B,OAAO,cAAc,CAAC,MAAM,GAAG,cAAc,EAAE,CAAC;oBAC9C,MAAM,KAAK,GAAG,cAAc,CAAC,KAAK,EAAE,CAAC;oBACrC,IAAI,KAAK;wBAAE,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBACrC,CAAC;gBACD,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gBAC7B,sBAAsB,CAAC,wBAAwB,CAAC,KAAK,CAAC,CAAC,CAAC;YAC1D,CAAC;QACH,CAAC;IACH,CAAC;YAAS,CAAC;QACT,WAAW,CAAC,mBAAmB,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC;QAC5D,IAAI,QAAQ;YAAE,YAAY,CAAC,QAAQ,CAAC,CAAC;QACrC,yBAAyB,EAAE,CAAC;QAC5B,WAAW,CAAC,SAAS,GAAG,KAAK,CAAC;IAChC,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,MAAkB,EAClB,WAA0B,EAC1B,SAA+B,EAC/B,OAAmB,EAAE;IAErB,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,GAAG,EAAE,GAAG,WAAW,EAAE,GAAG,IAAI,EAAE,CAAC;IAChE,MAAM,KAAK,GAAG,MAAM,kBAAkB,CACpC,MAAM,CAAC,MAAM,EACb,MAAM,CAAC,OAAO,EACd,YAAY,EACZ,SAAS,CACV,CAAC;IACF,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,WAAW,CAAC,SAAS,GAAG,KAAK,CAAC;QAC9B,WAAW,CAAC,SAAS,GAAG,MAAM,qBAAqB,CACjD,MAAM,CAAC,MAAM,EACb,MAAM,CAAC,OAAO,EACd,SAAS,CACV,CAAC;QACF,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,WAAW,CAAC,SAAS,GAAG,MAAM,qBAAqB,CACjD,MAAM,CAAC,MAAM,EACb,MAAM,CAAC,OAAO,EACd,SAAS,CACV,CAAC;IACF,IAAI,CAAC;QACH,MAAM,UAAU,CAAC,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;QACvD,OAAO,UAAU,CAAC;IACpB,CAAC;YAAS,CAAC;QACT,MAAM,KAAK,CAAC,OAAO,EAAE,CAAC;IACxB,CAAC;AACH,CAAC;AAYD;;;;;GAKG;AACH,MAAM,CAAC,KAAK,SAAS,CAAC,CAAC,QAAQ,CAC7B,IAAgC;IAEhC,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;IAChC,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;IAClC,IAAI,MAAM,GAAG,EAAE,CAAC;IAEhB,IAAI,CAAC;QACH,OAAO,IAAI,EAAE,CAAC;YACZ,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;YAC5C,IAAI,IAAI,EAAE,CAAC;gBACT,IAAI,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;oBAClB,MAAM,MAAM,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;oBACvC,IAAI,MAAM;wBAAE,MAAM,MAAM,CAAC;gBAC3B,CAAC;gBACD,OAAO;YACT,CAAC;YACD,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;YAClD,gEAAgE;YAChE,+CAA+C;YAC/C,IAAI,GAAW,CAAC;YAChB,OAAO,CAAC,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;gBAC7C,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;gBACnC,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;gBAC/B,MAAM,MAAM,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;gBACtC,IAAI,MAAM;oBAAE,MAAM,MAAM,CAAC;YAC3B,CAAC;QACH,CAAC;IACH,CAAC;YAAS,CAAC;QACT,IAAI,CAAC;YACH,MAAM,CAAC,WAAW,EAAE,CAAC;QACvB,CAAC;QAAC,MAAM,CAAC;YACP,wCAAwC;QAC1C,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,eAAe,CAAC,KAAa;IACpC,IAAI,SAAS,GAAkB,IAAI,CAAC;IACpC,IAAI,EAAE,GAAkB,IAAI,CAAC;IAC7B,IAAI,SAAS,GAAa,EAAE,CAAC;IAC7B,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACrC,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC9B,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACnC,CAAC;aAAM,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;YAClC,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAC5B,CAAC;aAAM,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YACpC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QACvC,CAAC;IACH,CAAC;IACD,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACrC,IAAI,CAAC,SAAS;QAAE,OAAO,IAAI,CAAC;IAE5B,IAAI,SAAS,KAAK,KAAK,EAAE,CAAC;QACxB,IAAI,CAAC,EAAE;YAAE,OAAO,IAAI,CAAC;QACrB,IAAI,MAAW,CAAC;QAChB,IAAI,CAAC;YACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC/B,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IAC3C,CAAC;IACD,IAAI,SAAS,KAAK,WAAW,EAAE,CAAC;QAC9B,IAAI,EAAE,GAAkB,IAAI,CAAC;QAC7B,IAAI,GAAG,GAAwB,IAAI,CAAC;QACpC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACnC,EAAE,GAAG,OAAO,MAAM,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;YACtD,GAAG,GAAG,iBAAiB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACtC,CAAC;QAAC,MAAM,CAAC;YACP,0BAA0B;QAC5B,CAAC;QACD,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC;IACxC,CAAC;IACD,IAAI,SAAS,KAAK,UAAU,EAAE,CAAC;QAC7B,IAAI,KAAK,GAAkB,IAAI,CAAC;QAChC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACnC,KAAK,GAAG,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;QACjE,CAAC;QAAC,MAAM,CAAC;YACP,yBAAyB;QAC3B,CAAC;QACD,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;IACrC,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC;AACzC,CAAC;AAeD,SAAS,iBAAiB,CAAC,KAAc;IACvC,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IACrD,MAAM,SAAS,GAAG,KAA+C,CAAC;IAClE,OAAO,OAAO,SAAS,CAAC,EAAE,KAAK,QAAQ;QACrC,SAAS,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC;QACvB,OAAO,SAAS,CAAC,UAAU,KAAK,QAAQ;QACxC,SAAS,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC;QAC/B,CAAC,CAAC,EAAE,EAAE,EAAE,SAAS,CAAC,EAAE,EAAE,UAAU,EAAE,SAAS,CAAC,UAAU,EAAE;QACxD,CAAC,CAAC,IAAI,CAAC;AACX,CAAC;AAED,SAAS,mBAAmB,CAAC,CAAe,EAAE,CAAe;IAC3D,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;IACvC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;IACvC,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,KAAK,KAAK,EAAE,CAAC;QACxE,OAAO,KAAK,GAAG,KAAK,CAAC;IACvB,CAAC;IACD,IAAI,CAAC,CAAC,UAAU,KAAK,CAAC,CAAC,UAAU,EAAE,CAAC;QAClC,OAAO,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9C,CAAC;IACD,OAAO,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AAClC,CAAC;AAED,SAAS,wBAAwB,CAC/B,KAA4C;IAE5C,IAAI,KAAK,CAAC,IAAI,EAAE,UAAU,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,IAAI,KAAK,KAAK,EAAE,CAAC;QACtE,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,EAAE,UAAU,CAAC;IACzC,OAAO,OAAO,SAAS,KAAK,QAAQ,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC;QAC1D,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE;QACzC,CAAC,CAAC,IAAI,CAAC;AACX,CAAC;AAED,SAAS,cAAc,CAAC,KAAU,EAAE,OAAe;IACjD,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC;IAChE,IAAI,OAAO,KAAK,CAAC,EAAE,KAAK,QAAQ,IAAI,KAAK,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC;IACtE,OAAO,EAAE,GAAG,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC;AACnC,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,eAAe,CAAC,KAAoB;IAClD,MAAM,EAAE,GACN,OAAO,KAAK,CAAC,UAAU,KAAK,QAAQ;QAClC,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,WAAW,EAAE;QAC1C,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC/B,MAAM,KAAK,GAAG,KAAK,CAAC,WAAW,IAAI,GAAG,CAAC;IACvC,MAAM,IAAI,GAAG,KAAK,CAAC,SAAS,IAAI,GAAG,CAAC;IACpC,MAAM,UAAU,GACd,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;IACzD,MAAM,OAAO,GACX,OAAO,KAAK,CAAC,EAAE,KAAK,QAAQ,IAAI,KAAK,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC;QACjD,CAAC,CAAC,KAAK,CAAC,EAAE;QACV,CAAC,CAAC,OAAO,KAAK,CAAC,QAAQ,KAAK,QAAQ,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC;YAC/D,CAAC,CAAC,KAAK,CAAC,QAAQ;YAChB,CAAC,CAAC,EAAE,CAAC;IACX,MAAM,QAAQ,GACZ,OAAO;QACL,CAAC,CAAC,cAAc,OAAO,IAAI;QAC3B,CAAC,CAAC,EAAE,CAAC;IACT,mEAAmE;IACnE,oEAAoE;IACpE,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;IACzD,OAAO,GAAG,EAAE,IAAI,KAAK,KAAK,IAAI,MAAM,QAAQ,GAAG,OAAO,EAAE,CAAC;AAC3D,CAAC;AAED,KAAK,UAAU,iBAAiB,CAC9B,MAAc,EACd,OAAe,EACf,IAAY;IAEZ,MAAM,CAAC,GAAG,iBAAiB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC7C,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACrD,MAAM,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,IAAI,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC;AAC/C,CAAC;AAED,KAAK,UAAU,sBAAsB,CACnC,MAAc,EACd,OAAe,EACf,OAAe;IAEf,MAAM,CAAC,GAAG,iBAAiB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC7C,IAAI,GAAW,CAAC;IAChB,IAAI,CAAC;QACH,GAAG,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IACtC,CAAC;IAAC,OAAO,GAAQ,EAAE,CAAC;QAClB,IAAI,GAAG,EAAE,IAAI,KAAK,QAAQ;YAAE,OAAO,KAAK,CAAC;QACzC,MAAM,GAAG,CAAC;IACZ,CAAC;IACD,OAAO,GAAG,CAAC,QAAQ,CAAC,cAAc,OAAO,GAAG,CAAC,CAAC;AAChD,CAAC;AAED,SAAS,KAAK,CAAC,EAAU;IACvB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AAC3D,CAAC"}
@@ -9,6 +9,39 @@
9
9
  */
10
10
  import type { RemoteResponse } from './types.js';
11
11
  export declare const API_URL: string;
12
+ /**
13
+ * Parse a `Retry-After` header (delta-seconds form, which the worker
14
+ * emits — mcp-server.ts:382/583) into milliseconds. Returns null when
15
+ * absent or not a non-negative integer count of seconds. (The HTTP-date
16
+ * form is not emitted by the worker, so it is intentionally unhandled.)
17
+ */
18
+ export declare function parseRetryAfterMs(headerValue: string | null): number | null;
19
+ /**
20
+ * How long to wait before the next 429 retry. Honors the server's
21
+ * Retry-After when present (capped at `capMs` so a full-window reset
22
+ * can't wedge a CLI call); falls back to an escalating 1s·(attempt+1)
23
+ * when absent. Adds jitter (injected for tests) so co-located sibling
24
+ * drones sharing one per-IP bucket don't retry in lockstep.
25
+ */
26
+ export declare function rateLimitWaitMs(retryAfterMs: number | null, attempt: number, capMs?: number, jitter?: () => number): number;
27
+ /**
28
+ * Given an ALREADY-OBTAINED response, while it is a 429 and retries
29
+ * remain, wait per `rateLimitWaitMs` (honoring the CURRENT response's
30
+ * Retry-After) and THEN re-run `doRequest`. Takes `initialResponse`
31
+ * (not a first request) because the caller has already made the request
32
+ * and read its status — re-fetching first would ignore the first 429's
33
+ * Retry-After and double-fire an immediate extra request (CR blocker
34
+ * d3a564f5). Returns the last Response (200-class on success, or a final
35
+ * 429 if retries exhaust — the caller surfaces that). `sleep` is
36
+ * injected for deterministic tests; no fetch-global mocking required.
37
+ */
38
+ export declare function retryOn429(initialResponse: Response, doRequest: () => Promise<Response>, opts: {
39
+ maxRetries?: number;
40
+ capMs?: number;
41
+ sleep: (ms: number) => Promise<void>;
42
+ jitter?: () => number;
43
+ log?: (msg: string) => void;
44
+ }): Promise<Response>;
12
45
  /**
13
46
  * Get valid auth token (refreshes if expired).
14
47
  *
@@ -148,12 +181,16 @@ export declare function regen(sessionToken: string, apiUrl: string, opts?: {
148
181
  /**
149
182
  * Append a message to the cube's shared activity log.
150
183
  */
151
- export declare function appendLog(sessionToken: string, apiUrl: string, message: string): Promise<{
184
+ export declare function appendLog(sessionToken: string, apiUrl: string, message: string, opts?: {
185
+ visibility?: 'broadcast' | 'direct';
186
+ recipientDroneIds?: string[];
187
+ }): Promise<{
152
188
  entry: {
153
189
  id: string;
154
190
  cube_id: string;
155
191
  drone_id: string;
156
192
  message: string;
193
+ visibility: 'broadcast' | 'direct';
157
194
  created_at: string;
158
195
  };
159
196
  }>;
@@ -1 +1 @@
1
- {"version":3,"file":"remote-client.d.ts","sourceRoot":"","sources":["../src/remote-client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"remote-client.d.ts","sourceRoot":"","sources":["../src/remote-client.ts"],"names":[],"mappings":"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"}
@@ -14,6 +14,62 @@ export const API_URL = process.env.BORG_API_URL || 'https://api.borgmcp.ai';
14
14
  const MAX_RETRIES = 3;
15
15
  const INITIAL_BACKOFF_MS = 1000; // 1 second
16
16
  const MAX_BACKOFF_MS = 30000; // 30 seconds
17
+ // gh#330: honor the server's Retry-After on 429 instead of failing the
18
+ // (often required) coordination signal outright. Bounded so a CLI call
19
+ // never blocks unboundedly; capped per attempt so a large window-reset
20
+ // retryAfter can't wedge the call.
21
+ const RATE_LIMIT_MAX_RETRIES = 3;
22
+ const RATE_LIMIT_MAX_WAIT_MS = 60_000; // cap a single Retry-After honor
23
+ /**
24
+ * Parse a `Retry-After` header (delta-seconds form, which the worker
25
+ * emits — mcp-server.ts:382/583) into milliseconds. Returns null when
26
+ * absent or not a non-negative integer count of seconds. (The HTTP-date
27
+ * form is not emitted by the worker, so it is intentionally unhandled.)
28
+ */
29
+ export function parseRetryAfterMs(headerValue) {
30
+ if (headerValue == null)
31
+ return null;
32
+ const trimmed = headerValue.trim();
33
+ if (!/^\d+$/.test(trimmed))
34
+ return null;
35
+ return parseInt(trimmed, 10) * 1000;
36
+ }
37
+ /**
38
+ * How long to wait before the next 429 retry. Honors the server's
39
+ * Retry-After when present (capped at `capMs` so a full-window reset
40
+ * can't wedge a CLI call); falls back to an escalating 1s·(attempt+1)
41
+ * when absent. Adds jitter (injected for tests) so co-located sibling
42
+ * drones sharing one per-IP bucket don't retry in lockstep.
43
+ */
44
+ export function rateLimitWaitMs(retryAfterMs, attempt, capMs = RATE_LIMIT_MAX_WAIT_MS, jitter = () => Math.random() * 500) {
45
+ const base = retryAfterMs != null ? retryAfterMs : 1000 * (attempt + 1);
46
+ return Math.min(base, capMs) + jitter();
47
+ }
48
+ /**
49
+ * Given an ALREADY-OBTAINED response, while it is a 429 and retries
50
+ * remain, wait per `rateLimitWaitMs` (honoring the CURRENT response's
51
+ * Retry-After) and THEN re-run `doRequest`. Takes `initialResponse`
52
+ * (not a first request) because the caller has already made the request
53
+ * and read its status — re-fetching first would ignore the first 429's
54
+ * Retry-After and double-fire an immediate extra request (CR blocker
55
+ * d3a564f5). Returns the last Response (200-class on success, or a final
56
+ * 429 if retries exhaust — the caller surfaces that). `sleep` is
57
+ * injected for deterministic tests; no fetch-global mocking required.
58
+ */
59
+ export async function retryOn429(initialResponse, doRequest, opts) {
60
+ const maxRetries = opts.maxRetries ?? RATE_LIMIT_MAX_RETRIES;
61
+ let response = initialResponse;
62
+ let attempt = 0;
63
+ while (response.status === 429 && attempt < maxRetries) {
64
+ // Honor THIS 429's Retry-After BEFORE issuing the next request.
65
+ const waitMs = rateLimitWaitMs(parseRetryAfterMs(response.headers.get('Retry-After')), attempt, opts.capMs, opts.jitter);
66
+ opts.log?.(`rate limited (429); retrying in ${Math.round(waitMs)}ms (attempt ${attempt + 1}/${maxRetries})`);
67
+ await opts.sleep(waitMs);
68
+ attempt++;
69
+ response = await doRequest();
70
+ }
71
+ return response;
72
+ }
17
73
  /**
18
74
  * Exponential backoff delay
19
75
  */
@@ -211,7 +267,23 @@ async function authedFetch(path, init = {}) {
211
267
  if (response.status === 401) {
212
268
  throw new Error('Authentication required. Run: borg assimilate');
213
269
  }
270
+ // gh#330: honor the server's Retry-After on 429 instead of failing the
271
+ // (often required) coordination signal — borg:log / read-log / regen /
272
+ // roster / ack all route through here. Bounded + capped + jittered.
273
+ if (response.status === 429) {
274
+ response = await retryOn429(response, () => buildRequest(token), {
275
+ sleep,
276
+ log: (msg) => console.error(`${consolePrefix()}${msg}`),
277
+ });
278
+ }
214
279
  if (!response.ok) {
280
+ // Enrich the 429 message with the server's retry guidance so a
281
+ // still-exhausted limit surfaces an actionable wait, not a bare code.
282
+ if (response.status === 429) {
283
+ const retryAfter = response.headers.get('Retry-After');
284
+ const hint = retryAfter ? ` (retry after ${retryAfter}s)` : '';
285
+ throw new Error(`HTTP 429: rate limited${hint}: ${await response.text()}`);
286
+ }
215
287
  throw new Error(`HTTP ${response.status}: ${await response.text()}`);
216
288
  }
217
289
  return response;
@@ -364,13 +436,20 @@ export async function regen(sessionToken, apiUrl, opts = {}) {
364
436
  /**
365
437
  * Append a message to the cube's shared activity log.
366
438
  */
367
- export async function appendLog(sessionToken, apiUrl, message) {
439
+ export async function appendLog(sessionToken, apiUrl, message, opts = {}) {
440
+ const body = opts.visibility === 'direct'
441
+ ? {
442
+ message,
443
+ visibility: 'direct',
444
+ recipientDroneIds: opts.recipientDroneIds ?? [],
445
+ }
446
+ : { message };
368
447
  const response = await authedFetch('/api/drone/log', {
369
448
  method: 'POST',
370
449
  headers: { 'Content-Type': 'application/json' },
371
450
  droneSession: sessionToken,
372
451
  apiUrl,
373
- body: JSON.stringify({ message }),
452
+ body: JSON.stringify(body),
374
453
  });
375
454
  return await response.json();
376
455
  }