@wrongstack/core 0.292.0 → 0.293.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.
Files changed (65) hide show
  1. package/dist/coordination/index.d.ts +1 -1
  2. package/dist/coordination/index.d.ts.map +1 -1
  3. package/dist/coordination/index.js +163 -39
  4. package/dist/coordination/index.js.map +3 -3
  5. package/dist/coordination/mailbox-http-router.d.ts +38 -0
  6. package/dist/coordination/mailbox-http-router.d.ts.map +1 -1
  7. package/dist/coordination/provider-status-tracker.d.ts.map +1 -1
  8. package/dist/core/fallback-model.d.ts.map +1 -1
  9. package/dist/core/fallback-profile-manager.d.ts +0 -2
  10. package/dist/core/fallback-profile-manager.d.ts.map +1 -1
  11. package/dist/core/system-prompt-builder.d.ts.map +1 -1
  12. package/dist/defaults/index.js +351 -318
  13. package/dist/defaults/index.js.map +4 -4
  14. package/dist/execution/compaction-core.d.ts +3 -0
  15. package/dist/execution/compaction-core.d.ts.map +1 -1
  16. package/dist/execution/compactor.d.ts +4 -0
  17. package/dist/execution/compactor.d.ts.map +1 -1
  18. package/dist/execution/index.js +141 -50
  19. package/dist/execution/index.js.map +4 -4
  20. package/dist/execution/intelligent-compactor.d.ts +5 -1
  21. package/dist/execution/intelligent-compactor.d.ts.map +1 -1
  22. package/dist/execution/one-shot-llm.d.ts.map +1 -1
  23. package/dist/execution/selective-compactor.d.ts +4 -0
  24. package/dist/execution/selective-compactor.d.ts.map +1 -1
  25. package/dist/goal/phase-orchestrator.d.ts +4 -0
  26. package/dist/goal/phase-orchestrator.d.ts.map +1 -1
  27. package/dist/hooks/runner.d.ts +0 -2
  28. package/dist/hooks/runner.d.ts.map +1 -1
  29. package/dist/index.d.ts +1 -1
  30. package/dist/index.d.ts.map +1 -1
  31. package/dist/index.js +421 -248
  32. package/dist/index.js.map +4 -4
  33. package/dist/models/alibaba-token-plan-catalog.d.ts +85 -0
  34. package/dist/models/alibaba-token-plan-catalog.d.ts.map +1 -0
  35. package/dist/models/index.d.ts +1 -0
  36. package/dist/models/index.d.ts.map +1 -1
  37. package/dist/models/index.js +200 -15
  38. package/dist/models/index.js.map +4 -4
  39. package/dist/models/llm-selector.d.ts +4 -0
  40. package/dist/models/llm-selector.d.ts.map +1 -1
  41. package/dist/models/models-registry.d.ts +8 -0
  42. package/dist/models/models-registry.d.ts.map +1 -1
  43. package/dist/security/index.js +0 -23
  44. package/dist/security/index.js.map +2 -2
  45. package/dist/security/permission-policy.d.ts +0 -23
  46. package/dist/security/permission-policy.d.ts.map +1 -1
  47. package/dist/storage/config-loader.d.ts.map +1 -1
  48. package/dist/storage/index.js +6 -5
  49. package/dist/storage/index.js.map +2 -2
  50. package/dist/tools/index.js +8 -1
  51. package/dist/tools/index.js.map +2 -2
  52. package/dist/types/config.d.ts +9 -16
  53. package/dist/types/config.d.ts.map +1 -1
  54. package/dist/types/index.js +7 -4
  55. package/dist/types/index.js.map +2 -2
  56. package/dist/types/provider.d.ts.map +1 -1
  57. package/dist/utils/connectivity.d.ts +36 -0
  58. package/dist/utils/connectivity.d.ts.map +1 -0
  59. package/dist/utils/index.d.ts +1 -0
  60. package/dist/utils/index.d.ts.map +1 -1
  61. package/dist/utils/index.js +59 -11
  62. package/dist/utils/index.js.map +4 -4
  63. package/dist/utils/merge-models-payload.d.ts +9 -0
  64. package/dist/utils/merge-models-payload.d.ts.map +1 -1
  65. package/package.json +2 -2
@@ -21,7 +21,7 @@ export { type FleetStatusToolOptions, makeFleetStatusTool } from './fleet-status
21
21
  export { FleetSupervisor, type FleetSupervisorActions, type FleetSupervisorConfig, type FleetSupervisorOptions, type FleetSupervisorSource, type SupervisedSubagent, type SupervisorLogEntry, } from './fleet-supervisor.js';
22
22
  export { DEFAULT_MAX_FLEET_SPAWNS, HARD_MAX_SPAWN_DEPTH, resolveMaxSpawnDepth, } from './spawn-budget.js';
23
23
  export { GlobalMailbox, resolveProjectDir } from './global-mailbox.js';
24
- export { authorizeMailboxBearerToken, createMailboxHttpRouter, MAILBOX_HTTP_MAX_BODY_BYTES, MAILBOX_HTTP_RATE_LIMIT_PER_MINUTE, MAILBOX_HTTP_RATE_LIMIT_WINDOW_MS, MailboxHttpRateLimiter, type MailboxHttpAccessDecision, type MailboxHttpRouter, type MailboxHttpRouterOptions, } from './mailbox-http-router.js';
24
+ export { authorizeMailboxBearerToken, createMailboxHttpRouter, MAILBOX_HTTP_DEFAULT_MAX_AGE_MS, MAILBOX_HTTP_MAX_AGE_CEILING_MS, MAILBOX_HTTP_MAX_BODY_BYTES, MAILBOX_HTTP_RATE_LIMIT_PER_MINUTE, MAILBOX_HTTP_RATE_LIMIT_WINDOW_MS, MailboxHttpRateLimiter, type MailboxHttpAccessDecision, type MailboxHttpRouter, type MailboxHttpRouterOptions, } from './mailbox-http-router.js';
25
25
  export type { ICoordinator } from './icoordinator.js';
26
26
  export type { IFleetManager } from './ifleet-manager.js';
27
27
  export { LargeAnswerStore } from './large-answer-store.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/coordination/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/coordination/index.ts"],"names":[],"mappings":"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"}
@@ -8194,7 +8194,8 @@ function hashStr(s) {
8194
8194
  // src/types/provider.ts
8195
8195
  var CONTEXT_OVERFLOW_RE = /context.length|context.window|maximum context|max.*tokens?.*exceeded|prompt is too long|too long|exceeds the context|\btokens\b.*exceed|too many tokens|reduce the length|resulted in \d+ tokens|input.{0,12}too (?:large|long)|context_length_exceeded/i;
8196
8196
  var CONTENT_FILTER_RE = /content.(filter|policy|moderation)|safety (system|filter)/i;
8197
- var QUOTA_EXHAUSTED_RE = /(?:insufficient|exhausted|depleted|exceeded|no|not enough)[-_\s]*(?:quota|credit|balance)|(?:quota|credit|balance)[-_\s]*(?:exhausted|depleted|exceeded|insufficient)|billing[_\s-]*(?:hard[_\s-]*)?limit|payment required|spending limit|plan limit/i;
8197
+ var QUOTA_EXHAUSTED_RE = /(?:insufficient|exhausted|depleted|exceeded|no|not enough)[-_\s]*(?:quota|credit|balance)|(?:quota|credit|balance)[-_\s]*(?:exhausted|depleted|exceeded|insufficient)|billing[_\s-]*(?:hard[_\s-]*)?limit|payment required|spending limit|plan limit|usage[-_\s]*limit[-_\s]*(?:reached|exceeded)/i;
8198
+ var RATE_LIMIT_EXCEEDED_RE = /rate[-_\s]*limit[-_\s]*exceeded/i;
8198
8199
  function classifyProviderError(status, body, message) {
8199
8200
  const type = body?.type;
8200
8201
  const text = [message, body?.message, type, body?.raw].filter(Boolean).join("\n");
@@ -8202,6 +8203,9 @@ function classifyProviderError(status, body, message) {
8202
8203
  if (status === 408) return "timeout";
8203
8204
  if (status === 599) return "stream_hang";
8204
8205
  if (status === 402 || QUOTA_EXHAUSTED_RE.test(text)) return "quota_exhausted";
8206
+ if (status === 429 && body?.message && RATE_LIMIT_EXCEEDED_RE.test(body.message)) {
8207
+ return "quota_exhausted";
8208
+ }
8205
8209
  if (type === "rate_limit_error" || status === 429) return "rate_limit";
8206
8210
  if (type === "overloaded_error" || status === 529) return "overloaded";
8207
8211
  if (status >= 500) return "server";
@@ -17354,6 +17358,8 @@ import { timingSafeEqual } from "node:crypto";
17354
17358
  var MAILBOX_HTTP_MAX_BODY_BYTES = 256 * 1024;
17355
17359
  var MAILBOX_HTTP_RATE_LIMIT_PER_MINUTE = 120;
17356
17360
  var MAILBOX_HTTP_RATE_LIMIT_WINDOW_MS = 6e4;
17361
+ var MAILBOX_HTTP_DEFAULT_MAX_AGE_MS = 60 * 60 * 1e3;
17362
+ var MAILBOX_HTTP_MAX_AGE_CEILING_MS = 7 * 24 * 60 * 60 * 1e3;
17357
17363
  function authorizeMailboxBearerToken(request, expectedToken) {
17358
17364
  const header = request.headers.authorization;
17359
17365
  if (typeof header !== "string") return { allowed: false };
@@ -17397,6 +17403,7 @@ var MailboxHttpRateLimiter = class {
17397
17403
  };
17398
17404
  function createMailboxHttpRouter(options) {
17399
17405
  const maxBodyBytes = options.maxBodyBytes ?? MAILBOX_HTTP_MAX_BODY_BYTES;
17406
+ const defaultMaxAgeMs = options.defaultMaxAgeMs ?? void 0;
17400
17407
  const closeSseStreams = /* @__PURE__ */ new Set();
17401
17408
  return {
17402
17409
  async handle(request, response, routePath) {
@@ -17411,15 +17418,17 @@ function createMailboxHttpRouter(options) {
17411
17418
  if (!access2.allowed) {
17412
17419
  const forwardedFor = request.headers["x-forwarded-for"];
17413
17420
  const clientIp = (Array.isArray(forwardedFor) ? forwardedFor[0] : forwardedFor)?.split(",")[0]?.trim() ?? request.socket?.remoteAddress ?? "unknown";
17414
- console.warn(JSON.stringify({
17415
- level: "warn",
17416
- event: "mailbox.http_auth_failure",
17417
- message: `Mailbox HTTP auth rejected for ${request.method ?? "?"} ${request.url ?? "?"} from ${clientIp}`,
17418
- method: request.method,
17419
- url: request.url,
17420
- clientIp,
17421
- timestamp: (/* @__PURE__ */ new Date()).toISOString()
17422
- }));
17421
+ console.warn(
17422
+ JSON.stringify({
17423
+ level: "warn",
17424
+ event: "mailbox.http_auth_failure",
17425
+ message: `Mailbox HTTP auth rejected for ${request.method ?? "?"} ${request.url ?? "?"} from ${clientIp}`,
17426
+ method: request.method,
17427
+ url: request.url,
17428
+ clientIp,
17429
+ timestamp: (/* @__PURE__ */ new Date()).toISOString()
17430
+ })
17431
+ );
17423
17432
  writeJson(
17424
17433
  response,
17425
17434
  access2.status ?? 401,
@@ -17446,7 +17455,9 @@ function createMailboxHttpRouter(options) {
17446
17455
  method,
17447
17456
  url,
17448
17457
  maxBodyBytes,
17449
- closeSseStreams
17458
+ defaultMaxAgeMs,
17459
+ closeSseStreams,
17460
+ routePath
17450
17461
  );
17451
17462
  } catch (error) {
17452
17463
  const code = error instanceof MailboxHttpValidationError ? "VALIDATION_ERROR" : "INTERNAL_ERROR";
@@ -17465,85 +17476,134 @@ function createMailboxHttpRouter(options) {
17465
17476
  }
17466
17477
  };
17467
17478
  }
17468
- async function dispatchMailboxRoute(mailbox, eventEmitter, request, response, method, url, maxBodyBytes, closeSseStreams) {
17469
- if (method === "POST" && url === "/mailbox/send") {
17479
+ async function dispatchMailboxRoute(mailbox, eventEmitter, request, response, method, url, maxBodyBytes, defaultMaxAgeMs, closeSseStreams, routePath) {
17480
+ if (routePath !== void 0 && routePath.indexOf("?") === 0) {
17481
+ throw validationError(`routePath must not start with '?' (got ${JSON.stringify(routePath)})`);
17482
+ }
17483
+ const queryIndex = url.indexOf("?");
17484
+ const path20 = queryIndex === -1 ? url : url.slice(0, queryIndex);
17485
+ if (method === "POST" && path20 === "/mailbox/send") {
17470
17486
  const input = validateSend(await readJsonBody(request, maxBodyBytes));
17471
17487
  writeJson(response, 201, await mailbox.send(input));
17472
17488
  return;
17473
17489
  }
17474
- if (method === "POST" && url === "/mailbox/query") {
17490
+ if (method === "POST" && path20 === "/mailbox/query") {
17491
+ const queryContext = parseSinceMs(url, defaultMaxAgeMs);
17492
+ if ("error" in queryContext) {
17493
+ writeJson(response, 400, { error: queryContext.error });
17494
+ return;
17495
+ }
17475
17496
  const messages = await mailbox.query(validateQuery(await readJsonBody(request, maxBodyBytes)));
17476
- writeJson(response, 200, { data: messages, count: messages.length });
17497
+ const filtered = filterMailboxMessagesByTimestamp(messages, queryContext.minTimestampIso);
17498
+ writeJson(response, 200, { data: filtered, count: filtered.length });
17477
17499
  return;
17478
17500
  }
17479
- if (method === "POST" && url === "/mailbox/check") {
17501
+ if (method === "POST" && path20 === "/mailbox/check") {
17502
+ const queryContext = parseSinceMs(url, defaultMaxAgeMs);
17503
+ if ("error" in queryContext) {
17504
+ writeJson(response, 400, { error: queryContext.error });
17505
+ return;
17506
+ }
17480
17507
  const result = await checkMailbox(
17481
17508
  mailbox,
17482
- validateCheck(await readJsonBody(request, maxBodyBytes))
17509
+ validateCheck(await readJsonBody(request, maxBodyBytes)),
17510
+ queryContext.minTimestampIso
17483
17511
  );
17484
17512
  writeJson(response, 200, result);
17485
17513
  return;
17486
17514
  }
17487
- if (method === "POST" && url === "/mailbox/ack") {
17515
+ if (method === "POST" && path20 === "/mailbox/ack") {
17488
17516
  const updated = await mailbox.ack(validateAck(await readJsonBody(request, maxBodyBytes)));
17489
17517
  writeJson(response, 200, { updated });
17490
17518
  return;
17491
17519
  }
17492
- if (method === "POST" && url === "/mailbox/ack-many") {
17520
+ if (method === "POST" && path20 === "/mailbox/ack-many") {
17493
17521
  const updated = await mailbox.ackMany(
17494
17522
  validateAckMany(await readJsonBody(request, maxBodyBytes))
17495
17523
  );
17496
17524
  writeJson(response, 200, { updated, count: updated.length });
17497
17525
  return;
17498
17526
  }
17499
- if (method === "POST" && url === "/mailbox/unread-count") {
17527
+ if (method === "POST" && path20 === "/mailbox/unread-count") {
17500
17528
  const body = await readJsonBody(request, maxBodyBytes);
17501
- writeJson(response, 200, { count: await mailbox.unreadCount(requireString(body, "forAgentId")) });
17529
+ writeJson(response, 200, {
17530
+ count: await mailbox.unreadCount(requireString(body, "forAgentId"))
17531
+ });
17502
17532
  return;
17503
17533
  }
17504
- if (method === "POST" && url === "/mailbox/agents/register") {
17505
- await mailbox.registerAgent(validateAgentRegistration(await readJsonBody(request, maxBodyBytes)));
17534
+ if (method === "POST" && path20 === "/mailbox/agents/register") {
17535
+ await mailbox.registerAgent(
17536
+ validateAgentRegistration(await readJsonBody(request, maxBodyBytes))
17537
+ );
17506
17538
  writeJson(response, 200, { ok: true });
17507
17539
  return;
17508
17540
  }
17509
- if (method === "POST" && url === "/mailbox/agents/heartbeat") {
17541
+ if (method === "POST" && path20 === "/mailbox/agents/heartbeat") {
17510
17542
  await mailbox.heartbeat(validateAgentHeartbeat(await readJsonBody(request, maxBodyBytes)));
17511
17543
  writeJson(response, 200, { ok: true });
17512
17544
  return;
17513
17545
  }
17514
- if (method === "POST" && url === "/mailbox/register-client") {
17515
- await mailbox.registerClient(validateClientRegistration(await readJsonBody(request, maxBodyBytes)));
17546
+ if (method === "POST" && path20 === "/mailbox/register-client") {
17547
+ await mailbox.registerClient(
17548
+ validateClientRegistration(await readJsonBody(request, maxBodyBytes))
17549
+ );
17516
17550
  writeJson(response, 200, { ok: true });
17517
17551
  return;
17518
17552
  }
17519
- if (method === "POST" && url === "/mailbox/heartbeat") {
17520
- await mailbox.clientHeartbeat(validateClientHeartbeat(await readJsonBody(request, maxBodyBytes)));
17553
+ if (method === "POST" && path20 === "/mailbox/heartbeat") {
17554
+ await mailbox.clientHeartbeat(
17555
+ validateClientHeartbeat(await readJsonBody(request, maxBodyBytes))
17556
+ );
17521
17557
  writeJson(response, 200, { ok: true });
17522
17558
  return;
17523
17559
  }
17524
- if (method === "POST" && url === "/mailbox/purge-clients") {
17560
+ if (method === "POST" && path20 === "/mailbox/purge-clients") {
17525
17561
  writeJson(response, 200, { ok: true, purged: await mailbox.purgeClients() });
17526
17562
  return;
17527
17563
  }
17528
- if (method === "GET" && url === "/mailbox/agents") {
17564
+ if (method === "GET" && path20 === "/mailbox/agents") {
17529
17565
  const agents = await mailbox.getAgentStatuses();
17530
17566
  writeJson(response, 200, { data: agents, count: agents.length });
17531
17567
  return;
17532
17568
  }
17533
- if (method === "GET" && url === "/mailbox/agents/online") {
17569
+ if (method === "GET" && path20 === "/mailbox/agents/online") {
17534
17570
  const agents = await mailbox.getOnlineAgents();
17535
17571
  writeJson(response, 200, { data: agents, count: agents.length });
17536
17572
  return;
17537
17573
  }
17538
- if (method === "GET" && url === "/mailbox/events" && eventEmitter) {
17539
- handleSse(request, response, eventEmitter, closeSseStreams);
17574
+ if (method === "GET" && path20 === "/mailbox/events" && eventEmitter) {
17575
+ const queryContext = parseSinceMs(url, defaultMaxAgeMs);
17576
+ if ("error" in queryContext) {
17577
+ writeJson(response, 400, { error: queryContext.error });
17578
+ return;
17579
+ }
17580
+ handleSse(request, response, eventEmitter, queryContext.minTimestampIso, closeSseStreams);
17540
17581
  return;
17541
17582
  }
17542
17583
  writeJson(response, 404, {
17543
17584
  error: { code: "NOT_FOUND", message: `no route for ${method} ${url}` }
17544
17585
  });
17545
17586
  }
17546
- function handleSse(request, response, eventEmitter, closeSseStreams) {
17587
+ function extractEventTimestamp(event) {
17588
+ if (event === null || typeof event !== "object") return void 0;
17589
+ const top = event.timestamp;
17590
+ if (typeof top === "string") return top;
17591
+ const nestedKeys = ["messageSent", "ackUpdated"];
17592
+ for (const key of nestedKeys) {
17593
+ const nested = event[key];
17594
+ if (nested !== null && typeof nested === "object") {
17595
+ const inner = nested.timestamp;
17596
+ if (typeof inner === "string") return inner;
17597
+ }
17598
+ }
17599
+ return void 0;
17600
+ }
17601
+ function isEventOlderThan(event, minTimestampIso) {
17602
+ const eventTimestamp = extractEventTimestamp(event);
17603
+ if (eventTimestamp === void 0) return false;
17604
+ return eventTimestamp < minTimestampIso;
17605
+ }
17606
+ function handleSse(request, response, eventEmitter, minTimestampIso, closeSseStreams) {
17547
17607
  response.writeHead(200, {
17548
17608
  "Content-Type": "text/event-stream",
17549
17609
  "Cache-Control": "no-store",
@@ -17553,6 +17613,9 @@ function handleSse(request, response, eventEmitter, closeSseStreams) {
17553
17613
  response.write(": connected\n\n");
17554
17614
  const unsubscribe = eventEmitter.subscribe((event) => {
17555
17615
  try {
17616
+ if (minTimestampIso !== void 0 && isEventOlderThan(event, minTimestampIso)) {
17617
+ return;
17618
+ }
17556
17619
  response.write(`data: ${JSON.stringify(event)}
17557
17620
 
17558
17621
  `);
@@ -17662,6 +17725,52 @@ function optionalNumber(object, key) {
17662
17725
  }
17663
17726
  return value;
17664
17727
  }
17728
+ function parseSinceMs(url, defaultMaxAgeMs) {
17729
+ const queryStart = url.indexOf("?");
17730
+ if (queryStart === -1) return resolveDefault(defaultMaxAgeMs, Date.now());
17731
+ const params = new URLSearchParams(url.slice(queryStart + 1));
17732
+ if (!params.has("sinceMs")) return resolveDefault(defaultMaxAgeMs, Date.now());
17733
+ const raw = params.get("sinceMs");
17734
+ if (raw === null || raw === void 0 || raw === "") {
17735
+ return {
17736
+ error: {
17737
+ code: "VALIDATION_ERROR",
17738
+ message: 'query parameter "sinceMs" is required (integer in milliseconds) when present'
17739
+ }
17740
+ };
17741
+ }
17742
+ if (!/^\d+$/.test(raw)) {
17743
+ return {
17744
+ error: {
17745
+ code: "VALIDATION_ERROR",
17746
+ message: 'query parameter "sinceMs" must be a non-negative integer (milliseconds)'
17747
+ }
17748
+ };
17749
+ }
17750
+ const requestedMs = Number(raw);
17751
+ if (!Number.isFinite(requestedMs) || requestedMs > Number.MAX_SAFE_INTEGER) {
17752
+ return {
17753
+ error: {
17754
+ code: "VALIDATION_ERROR",
17755
+ message: `query parameter "sinceMs" is out of range (max ${Number.MAX_SAFE_INTEGER})`
17756
+ }
17757
+ };
17758
+ }
17759
+ const now = Date.now();
17760
+ if (requestedMs === 0) return { minTimestampIso: void 0 };
17761
+ const effectiveMs = Math.min(requestedMs, MAILBOX_HTTP_MAX_AGE_CEILING_MS);
17762
+ return { minTimestampIso: new Date(now - effectiveMs).toISOString() };
17763
+ }
17764
+ function resolveDefault(defaultMaxAgeMs, now) {
17765
+ if (defaultMaxAgeMs === void 0 || !Number.isFinite(defaultMaxAgeMs) || defaultMaxAgeMs < 0 || defaultMaxAgeMs === 0) {
17766
+ return { minTimestampIso: void 0 };
17767
+ }
17768
+ return { minTimestampIso: new Date(now - defaultMaxAgeMs).toISOString() };
17769
+ }
17770
+ function filterMailboxMessagesByTimestamp(messages, minTimestampIso) {
17771
+ if (minTimestampIso === void 0) return messages.slice();
17772
+ return messages.filter((message) => message.timestamp >= minTimestampIso);
17773
+ }
17665
17774
  function optionalBoolean(object, key) {
17666
17775
  if (typeof object !== "object" || object === null) return void 0;
17667
17776
  const value = object[key];
@@ -17782,7 +17891,7 @@ function validateQuery(body) {
17782
17891
  if (incompleteOnly !== void 0) result.incompleteOnly = incompleteOnly;
17783
17892
  return result;
17784
17893
  }
17785
- async function checkMailbox(mailbox, input) {
17894
+ async function checkMailbox(mailbox, input, minTimestampIso) {
17786
17895
  const limit = input.limit ?? 20;
17787
17896
  const markRead = input.markRead ?? true;
17788
17897
  const completed = input.completed ?? false;
@@ -17790,8 +17899,9 @@ async function checkMailbox(mailbox, input) {
17790
17899
  const batches = await Promise.all(
17791
17900
  targets.map((to) => mailbox.query({ to, unreadBy: input.agentId, limit }))
17792
17901
  );
17902
+ const withinWindow = filterMailboxMessagesByTimestamp(batches.flat(), minTimestampIso);
17793
17903
  const seen = /* @__PURE__ */ new Set();
17794
- const messages = batches.flat().filter((message) => {
17904
+ const messages = withinWindow.filter((message) => {
17795
17905
  if (seen.has(message.id) || message.from === input.agentId) return false;
17796
17906
  seen.add(message.id);
17797
17907
  return true;
@@ -19354,19 +19464,24 @@ var ProviderModelStatusTracker = class {
19354
19464
  let newState = s.state;
19355
19465
  let reason = "";
19356
19466
  const quotaExhausted = kind === "quota_exhausted" || isQuotaExhausted(kind, status, message);
19467
+ const endpointUnreachable = isEndpointUnreachable(kind, status, message);
19357
19468
  if (quotaExhausted) {
19358
19469
  newState = "blocked";
19359
19470
  reason = "quota_exhausted";
19360
19471
  s.stateExpiresAt = now + this.cfg.quotaBlockDurationMs;
19472
+ } else if (endpointUnreachable) {
19473
+ newState = "blocked";
19474
+ reason = "endpoint_unreachable";
19475
+ s.stateExpiresAt = now + this.cfg.quotaBlockDurationMs;
19361
19476
  }
19362
- if (!quotaExhausted && s.state === "healthy") {
19477
+ if (!quotaExhausted && !endpointUnreachable && s.state === "healthy") {
19363
19478
  if (s.consecutiveFailures >= this.cfg.degradedAfterFailures) {
19364
19479
  newState = "degraded";
19365
19480
  reason = `consecutive_failures_${s.consecutiveFailures}`;
19366
19481
  s.stateExpiresAt = now + this.cfg.degradedDurationMs;
19367
19482
  }
19368
19483
  }
19369
- if (!quotaExhausted && (s.state === "degraded" || s.state === "healthy")) {
19484
+ if (!quotaExhausted && !endpointUnreachable && (s.state === "degraded" || s.state === "healthy")) {
19370
19485
  if (s.rateLimitHits >= this.cfg.blockAfterRateLimitHits) {
19371
19486
  newState = "blocked";
19372
19487
  reason = `rate_limit_threshold_${this.cfg.blockAfterRateLimitHits}`;
@@ -19696,13 +19811,20 @@ function unpairKey(key) {
19696
19811
  if (idx === -1) return [key, ""];
19697
19812
  return [key.slice(0, idx), key.slice(idx + 1)];
19698
19813
  }
19699
- var QUOTA_EXHAUSTED_RE2 = /(?:insufficient|exhausted|depleted|exceeded|no|not enough)[-_\s]*(?:quota|credit|balance)|(?:quota|credit|balance)[-_\s]*(?:exhausted|depleted|exceeded|insufficient)|billing[_\s-]*(?:hard[_\s-]*)?limit|payment required|spending limit|plan limit/i;
19814
+ var QUOTA_EXHAUSTED_RE2 = /(?:insufficient|exhausted|depleted|exceeded|no|not enough)[-_\s]*(?:quota|credit|balance)|(?:quota|credit|balance)[-_\s]*(?:exhausted|depleted|exceeded|insufficient)|billing[_\s-]*(?:hard[_\s-]*)?limit|payment required|spending limit|plan limit|usage[-_\s]*limit[-_\s]*(?:reached|exceeded)|rate[-_\s]*limit[-_\s]*exceeded/i;
19700
19815
  function isQuotaExhausted(kind, status, message) {
19701
19816
  if (status === 402) return true;
19702
19817
  if (kind !== "rate_limit" && kind !== "quota_exhausted" && kind !== "invalid_request" && kind !== "auth")
19703
19818
  return false;
19704
19819
  return QUOTA_EXHAUSTED_RE2.test(message);
19705
19820
  }
19821
+ var ENDPOINT_UNREACHABLE_RE = /(?:upstream|origin|backend|endpoint)[-_\s]*(?:unreachable|refused|connect(?:ion)?[-_\s]*(?:refused|error|fail)|unavailable|down|timeout)|no[-_\s]*(?:healthy|valid)[-_\s]*upstream|cannot[-_\s]*connect|connection[-_\s]*(?:refused|reset|closed|timed?[-_\s]out)/i;
19822
+ function isEndpointUnreachable(kind, status, message) {
19823
+ if (status !== 502 && status !== 503 && status !== 0) return false;
19824
+ if (kind !== "server" && kind !== "network" && kind !== "overloaded" && kind !== "timeout")
19825
+ return false;
19826
+ return ENDPOINT_UNREACHABLE_RE.test(message);
19827
+ }
19706
19828
  function safeCount(value) {
19707
19829
  return typeof value === "number" && Number.isFinite(value) && value >= 0 ? Math.floor(value) : 0;
19708
19830
  }
@@ -22911,6 +23033,8 @@ export {
22911
23033
  MAILBOX_HEALTH_DEFAULT_FROM,
22912
23034
  MAILBOX_HEALTH_DEFAULT_INTERVAL_MS,
22913
23035
  MAILBOX_HEALTH_DEFAULT_TIMEOUT_MS,
23036
+ MAILBOX_HTTP_DEFAULT_MAX_AGE_MS,
23037
+ MAILBOX_HTTP_MAX_AGE_CEILING_MS,
22914
23038
  MAILBOX_HTTP_MAX_BODY_BYTES,
22915
23039
  MAILBOX_HTTP_RATE_LIMIT_PER_MINUTE,
22916
23040
  MAILBOX_HTTP_RATE_LIMIT_WINDOW_MS,