@theokit/sdk 4.30.0 → 4.31.1

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 (113) hide show
  1. package/CHANGELOG.md +57 -0
  2. package/dist/{agent-Ekv8y7_c.d.ts → agent-BJbGi8-R.d.ts} +1 -1
  3. package/dist/{agent-LD76RI74.cjs → agent-BKNJIOEY.cjs} +9 -9
  4. package/dist/{agent-LD76RI74.cjs.map → agent-BKNJIOEY.cjs.map} +1 -1
  5. package/dist/{agent-Bzg2_uGr.d.cts → agent-CbZPGFfM.d.cts} +1 -1
  6. package/dist/{agent-7YUGJJTU.js → agent-HW7OY2W3.js} +8 -8
  7. package/dist/{agent-7YUGJJTU.js.map → agent-HW7OY2W3.js.map} +1 -1
  8. package/dist/agent.d.ts +15 -2
  9. package/dist/{chunk-ISZ3MBUD.js → chunk-CCRWSZ2F.js} +57 -20
  10. package/dist/chunk-CCRWSZ2F.js.map +1 -0
  11. package/dist/chunk-CJVMDRQB.cjs +169 -0
  12. package/dist/chunk-CJVMDRQB.cjs.map +1 -0
  13. package/dist/{chunk-YU6KON2I.cjs → chunk-E2YEDATX.cjs} +6 -6
  14. package/dist/{chunk-YU6KON2I.cjs.map → chunk-E2YEDATX.cjs.map} +1 -1
  15. package/dist/{chunk-NG6B2PMA.cjs → chunk-GQBXBHZ2.cjs} +5 -5
  16. package/dist/{chunk-NG6B2PMA.cjs.map → chunk-GQBXBHZ2.cjs.map} +1 -1
  17. package/dist/{chunk-2HRYBRD7.cjs → chunk-IOOSAZZH.cjs} +8 -9
  18. package/dist/chunk-IOOSAZZH.cjs.map +1 -0
  19. package/dist/{chunk-2MF3IE2D.cjs → chunk-NZCFLEHO.cjs} +136 -25
  20. package/dist/chunk-NZCFLEHO.cjs.map +1 -0
  21. package/dist/{chunk-U6QGZHPN.js → chunk-RPKTXBPK.js} +5 -6
  22. package/dist/chunk-RPKTXBPK.js.map +1 -0
  23. package/dist/{chunk-GWMQ5CS3.cjs → chunk-S6F3FKFR.cjs} +87 -50
  24. package/dist/chunk-S6F3FKFR.cjs.map +1 -0
  25. package/dist/{chunk-SQLZ7ONU.js → chunk-SJLOIZ4Z.js} +4 -4
  26. package/dist/{chunk-SQLZ7ONU.js.map → chunk-SJLOIZ4Z.js.map} +1 -1
  27. package/dist/{chunk-4SXHEZIV.cjs → chunk-U2FO3MRG.cjs} +9 -3
  28. package/dist/chunk-U2FO3MRG.cjs.map +1 -0
  29. package/dist/chunk-UAYYNWYJ.js +163 -0
  30. package/dist/chunk-UAYYNWYJ.js.map +1 -0
  31. package/dist/{chunk-ZZWTY3RX.js → chunk-VGUOUAM2.js} +9 -4
  32. package/dist/chunk-VGUOUAM2.js.map +1 -0
  33. package/dist/{chunk-5YCAR23S.js → chunk-WYPHQ7NM.js} +3 -3
  34. package/dist/{chunk-5YCAR23S.js.map → chunk-WYPHQ7NM.js.map} +1 -1
  35. package/dist/{chunk-NRSH7RJY.js → chunk-XDNGF5BY.js} +133 -22
  36. package/dist/chunk-XDNGF5BY.js.map +1 -0
  37. package/dist/{compact-session-OO7NVWPB.cjs → compact-session-42BK7RE3.cjs} +12 -12
  38. package/dist/{compact-session-OO7NVWPB.cjs.map → compact-session-42BK7RE3.cjs.map} +1 -1
  39. package/dist/{compact-session-OO2GD76G.js → compact-session-QMBOCFVQ.js} +4 -4
  40. package/dist/{compact-session-OO2GD76G.js.map → compact-session-QMBOCFVQ.js.map} +1 -1
  41. package/dist/{cron-D0Z29gI-.d.ts → cron-BU9qD5B6.d.ts} +2 -2
  42. package/dist/{cron-CjzvXGT2.d.cts → cron-BwojPwEs.d.cts} +2 -2
  43. package/dist/cron.cjs +8 -8
  44. package/dist/cron.d.cts +3 -3
  45. package/dist/cron.d.ts +3 -3
  46. package/dist/cron.js +7 -7
  47. package/dist/{errors-DHZtSNnj.d.ts → errors-Cua4WC9H.d.ts} +1 -1
  48. package/dist/{errors-BdL-buYn.d.cts → errors-DyVbXdR4.d.cts} +1 -1
  49. package/dist/errors.d.cts +2 -2
  50. package/dist/errors.d.ts +2 -2
  51. package/dist/eval.cjs +11 -12
  52. package/dist/eval.cjs.map +1 -1
  53. package/dist/eval.js +7 -8
  54. package/dist/eval.js.map +1 -1
  55. package/dist/fs-session-store-IIP7ZBYE.cjs +17 -0
  56. package/dist/{fs-session-store-KAUQYSGI.cjs.map → fs-session-store-IIP7ZBYE.cjs.map} +1 -1
  57. package/dist/fs-session-store-T7YPW5A4.js +8 -0
  58. package/dist/{fs-session-store-ZKB5NN37.js.map → fs-session-store-T7YPW5A4.js.map} +1 -1
  59. package/dist/index.cjs +29 -29
  60. package/dist/index.d.cts +23 -10
  61. package/dist/index.d.ts +23 -10
  62. package/dist/index.js +9 -9
  63. package/dist/{inject-session-6MJUSGZP.cjs → inject-session-6ZMCA2NE.cjs} +6 -6
  64. package/dist/{inject-session-6MJUSGZP.cjs.map → inject-session-6ZMCA2NE.cjs.map} +1 -1
  65. package/dist/{inject-session-KOFHS5K3.js → inject-session-YA3GQE4G.js} +4 -4
  66. package/dist/{inject-session-KOFHS5K3.js.map → inject-session-YA3GQE4G.js.map} +1 -1
  67. package/dist/internal/llm/abort-error.d.ts +1 -0
  68. package/dist/internal/llm/retrying-client.d.ts +53 -0
  69. package/dist/internal/llm/transport-error.d.ts +9 -0
  70. package/dist/internal/persistence/index.cjs +18 -19
  71. package/dist/internal/persistence/index.cjs.map +1 -1
  72. package/dist/internal/persistence/index.js +1 -2
  73. package/dist/internal/persistence/index.js.map +1 -1
  74. package/dist/internal/persistence/session-transcript.d.cts +13 -1
  75. package/dist/internal/persistence/session-transcript.d.ts +13 -1
  76. package/dist/internal/runtime/lifecycle/post-run-lifecycle.d.ts +1 -1
  77. package/dist/persistence.cjs +17 -14
  78. package/dist/persistence.cjs.map +1 -1
  79. package/dist/persistence.d.cts +1 -1
  80. package/dist/persistence.d.ts +1 -1
  81. package/dist/persistence.js +2 -3
  82. package/dist/persistence.js.map +1 -1
  83. package/dist/{run-OJbGyweZ.d.cts → run-CwEJtLPE.d.cts} +8 -0
  84. package/dist/{run-OJbGyweZ.d.ts → run-CwEJtLPE.d.ts} +8 -0
  85. package/dist/server/errors-envelope.d.cts +3 -3
  86. package/dist/server/errors-envelope.d.ts +3 -3
  87. package/dist/{session-transcript-T7LGJUGW.js → session-transcript-5VZUWEJ5.js} +3 -3
  88. package/dist/{session-transcript-T7LGJUGW.js.map → session-transcript-5VZUWEJ5.js.map} +1 -1
  89. package/dist/session-transcript-T4SB66I7.cjs +50 -0
  90. package/dist/{session-transcript-LPNZR3YS.cjs.map → session-transcript-T4SB66I7.cjs.map} +1 -1
  91. package/dist/subagents-loader.d.cts +2 -2
  92. package/dist/subagents-loader.d.ts +2 -2
  93. package/dist/types/agent-prims.d.ts +8 -0
  94. package/package.json +1 -1
  95. package/dist/chunk-2HRYBRD7.cjs.map +0 -1
  96. package/dist/chunk-2MF3IE2D.cjs.map +0 -1
  97. package/dist/chunk-4SXHEZIV.cjs.map +0 -1
  98. package/dist/chunk-C7PICHRF.cjs +0 -68
  99. package/dist/chunk-C7PICHRF.cjs.map +0 -1
  100. package/dist/chunk-GWMQ5CS3.cjs.map +0 -1
  101. package/dist/chunk-HK7ZHSAX.cjs +0 -85
  102. package/dist/chunk-HK7ZHSAX.cjs.map +0 -1
  103. package/dist/chunk-HZQEDNF6.js +0 -66
  104. package/dist/chunk-HZQEDNF6.js.map +0 -1
  105. package/dist/chunk-ISZ3MBUD.js.map +0 -1
  106. package/dist/chunk-NRSH7RJY.js.map +0 -1
  107. package/dist/chunk-R6ZP6KNB.js +0 -80
  108. package/dist/chunk-R6ZP6KNB.js.map +0 -1
  109. package/dist/chunk-U6QGZHPN.js.map +0 -1
  110. package/dist/chunk-ZZWTY3RX.js.map +0 -1
  111. package/dist/fs-session-store-KAUQYSGI.cjs +0 -17
  112. package/dist/fs-session-store-ZKB5NN37.js +0 -8
  113. package/dist/session-transcript-LPNZR3YS.cjs +0 -46
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/internal/persistence/fs-session-store.ts"],"names":["readTranscript","transcriptPath","path","mkdir","dirname","withFileLock","appendJsonl"],"mappings":";;;;;;;AAyCO,IAAM,iBAAN,MAA6C;AAAA,EACzC,QAAA;AAAA,EACA,IAAA;AAAA,EAET,YAAY,OAAA,EAAgC;AAC1C,IAAA,IAAA,CAAK,WAAW,OAAA,CAAQ,OAAA;AACxB,IAAA,IAAA,CAAK,OAAO,OAAA,CAAQ,GAAA;AAAA,EACtB;AAAA,EAEA,MAAM,YAAY,OAAA,EAA2C;AAC3D,IAAA,OAAOA,iCAAeC,gCAAA,CAAe,IAAA,CAAK,UAAU,IAAA,CAAK,IAAA,EAAM,OAAO,CAAC,CAAA;AAAA,EACzE;AAAA,EAEA,MAAM,aAAA,CAAc,OAAA,EAAiB,OAAA,EAAkD;AAErF,IAAA,IAAI,OAAA,CAAQ,WAAW,CAAA,EAAG;AAC1B,IAAA,MAAMC,SAAOD,gCAAA,CAAe,IAAA,CAAK,QAAA,EAAU,IAAA,CAAK,MAAM,OAAO,CAAA;AAE7D,IAAA,MAAME,eAAMC,YAAA,CAAQF,MAAI,GAAG,EAAE,SAAA,EAAW,MAAM,CAAA;AAC9C,IAAA,MAAMG,8BAAA,CAAaH,QAAM,YAAY;AAyBnC,MAAA,KAAA,MAAW,MAAA,IAAU,OAAA,EAASI,6BAAA,CAAYJ,MAAA,EAAM,MAAM,CAAA;AAAA,IACxD,CAAC,CAAA;AAAA,EACH;AACF","file":"chunk-IOOSAZZH.cjs","sourcesContent":["/**\n * SE41 — `FsSessionStore`, the DEFAULT reference implementation of the pluggable\n * {@link SessionStore} seam. It reads and append-writes the native Claude-shaped\n * `.jsonl` transcript at `<baseDir>/projects/<encoded-cwd>/<agentId>.jsonl` — the\n * exact on-disk format SE40 introduced (the file the Claude Code CLI can\n * `--continue`). Omitting `local.sessionStore` resolves to this store, so the\n * default persistence path is byte-identical to SE40 behavior.\n *\n * `readRecords` is `readTranscript(transcriptPath(...))` (a missing session →\n * `[]`, not an error — a fresh agent has no history). `appendRecords` is a TRUE\n * append: it reads the prior records, concatenates the new-turn delta, and\n * rewrites the whole line set atomically under the SE40 cross-process file lock\n * (`writeTranscript` never shrinks — the native format is an append-only\n * `parentUuid` DAG). The parent dir is created BEFORE acquiring the lock because\n * the lock's companion `<path>.lock` file needs an existing parent dir (the SE40\n * `mkdir(dirname)`-before-lock fix).\n *\n * @internal\n */\n\nimport { mkdir } from \"node:fs/promises\";\nimport { dirname } from \"node:path\";\n\nimport type { SessionStore } from \"../../types/session-store.js\";\nimport { withFileLock } from \"./file-lock.js\";\nimport { appendJsonl } from \"./jsonl.js\";\nimport { readTranscript, type SessionRecord, transcriptPath } from \"./session-transcript.js\";\n\n/** Options identifying the on-disk transcript location for the FS default store. */\nexport interface FsSessionStoreOptions {\n /** Transcript base dir (`~/.theokit` default, `~/.claude` for CLI interop) — already `~`-expanded. */\n baseDir: string;\n /** The workspace cwd whose encoded form is the transcript project dir. */\n cwd: string;\n}\n\n/**\n * The default `SessionStore` — reads/append-writes the native `.jsonl` transcript.\n *\n * @internal\n */\nexport class FsSessionStore implements SessionStore {\n readonly #baseDir: string;\n readonly #cwd: string;\n\n constructor(options: FsSessionStoreOptions) {\n this.#baseDir = options.baseDir;\n this.#cwd = options.cwd;\n }\n\n async readRecords(agentId: string): Promise<SessionRecord[]> {\n return readTranscript(transcriptPath(this.#baseDir, this.#cwd, agentId));\n }\n\n async appendRecords(agentId: string, records: readonly SessionRecord[]): Promise<void> {\n // Empty delta → nothing to persist (avoids an unnecessary lock + rewrite).\n if (records.length === 0) return;\n const path = transcriptPath(this.#baseDir, this.#cwd, agentId);\n // mkdir BEFORE the lock: withFileLock's companion `<path>.lock` needs the parent dir.\n await mkdir(dirname(path), { recursive: true });\n await withFileLock(path, async () => {\n // M93 — acrescenta o DELTA em vez de reescrever o arquivo inteiro.\n //\n // Antes: `readTranscript` + `writeTranscript` de tudo, por turno. O(n) de I/O **e** de parse a\n // cada turno, O(n²) por sessão — a nota do consumidor em `agents/lib/session/backtrack.ts`\n // registra 1,4 MB / 3000 linhas em 200 turnos.\n //\n // Correto porque o formato **já é append-only**: o DAG de `parentUuid` não depende da ordem de\n // linha, e cada registro carrega o próprio pai. `appendJsonl` **já existia no pacote** e tinha um\n // único chamador (`eval/runner.ts`) — a primitiva estava lá, o store é que a ignorava (rung 4).\n //\n // O `withFileLock` permanece — mas a afirmação anterior de que \"ele é o que serializa dois\n // `appendRecords` concorrentes\" era forte demais, e a revisão adversarial do M93 mediu isso:\n // removê-lo não reprova nenhum teste. A razão é o próprio parágrafo acima — o DAG de\n // `parentUuid` não depende da ordem de linha, então dois lotes intercalados reconstroem igual.\n // O trabalho que o lock fazia (proteger um read-modify-write) sumiu junto com o rewrite.\n //\n // O que ele ainda cobre é a janela TOCTOU de `precisaDeQuebraAntes` (ler o último byte, depois\n // escrever): sem ele, dois processos podem ambos concluir \"falta \\n\" e produzir uma linha em\n // branco — que o leitor descarta, isto é, benigno. Fica como **defesa declarada, não\n // mecanizada** (a disciplina de `error-handling.md § 4`: enumerar o resíduo em vez de deixar a\n // ausência de teste passar por cobertura).\n //\n // `writeTranscript` continua existindo para **compactação**, a única operação que legitimamente\n // reescreve o arquivo.\n for (const record of records) appendJsonl(path, record);\n });\n }\n}\n"]}
@@ -3,7 +3,7 @@
3
3
  var chunkLUSXDZPV_cjs = require('./chunk-LUSXDZPV.cjs');
4
4
  var chunkIT3PWBW4_cjs = require('./chunk-IT3PWBW4.cjs');
5
5
  var chunk6JSIEDKL_cjs = require('./chunk-6JSIEDKL.cjs');
6
- var chunk4SXHEZIV_cjs = require('./chunk-4SXHEZIV.cjs');
6
+ var chunkU2FO3MRG_cjs = require('./chunk-U2FO3MRG.cjs');
7
7
  var chunkEVADEGM7_cjs = require('./chunk-EVADEGM7.cjs');
8
8
  var chunkD42XHI4O_cjs = require('./chunk-D42XHI4O.cjs');
9
9
  var chunkA44COQJJ_cjs = require('./chunk-A44COQJJ.cjs');
@@ -475,6 +475,22 @@ function releaseReader(reader) {
475
475
  }
476
476
  }
477
477
 
478
+ // src/internal/llm/transport-error.ts
479
+ function ehAbort(err) {
480
+ if (typeof err !== "object" || err === null) return false;
481
+ const nome = err.name;
482
+ return nome === "AbortError" || nome === "TimeoutError";
483
+ }
484
+ function wrapTransportError(err, ctx) {
485
+ if (ehAbort(err)) return err;
486
+ if (err instanceof chunkA44COQJJ_cjs.NetworkError) return err;
487
+ const detalhe = err instanceof Error ? err.message : String(err);
488
+ return new chunkA44COQJJ_cjs.NetworkError(`${ctx.providerId} transport failure on ${ctx.endpoint}: ${detalhe}`, {
489
+ code: "transport_failure",
490
+ cause: err
491
+ });
492
+ }
493
+
478
494
  // src/internal/llm/anthropic.ts
479
495
  var AnthropicClient = class {
480
496
  constructor(options) {
@@ -495,12 +511,17 @@ var AnthropicClient = class {
495
511
  "anthropic-version": this.options.version ?? "2023-06-01"
496
512
  };
497
513
  if (this.options.extraHeaders !== void 0) Object.assign(headers, this.options.extraHeaders);
498
- const response = await this.fetchImpl(`${this.baseUrl}/v1/messages`, {
499
- method: "POST",
500
- signal,
501
- headers,
502
- body: JSON.stringify(body)
503
- });
514
+ let response;
515
+ try {
516
+ response = await this.fetchImpl(`${this.baseUrl}/v1/messages`, {
517
+ method: "POST",
518
+ signal,
519
+ headers,
520
+ body: JSON.stringify(body)
521
+ });
522
+ } catch (fetchErr) {
523
+ throw wrapTransportError(fetchErr, { providerId: this.name, endpoint: "/v1/messages" });
524
+ }
504
525
  if (!response.ok) {
505
526
  const text = await response.text().catch(() => "");
506
527
  let body2 = text;
@@ -705,7 +726,7 @@ async function resolveBedrockToken(region) {
705
726
  return cachedToken.value;
706
727
  }
707
728
  try {
708
- const r = module$1.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('chunk-2MF3IE2D.cjs', document.baseURI).href)));
729
+ const r = module$1.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('chunk-NZCFLEHO.cjs', document.baseURI).href)));
709
730
  const gen = r("@aws/bedrock-token-generator");
710
731
  if (typeof gen.getToken !== "function") return void 0;
711
732
  const providers = r("@aws-sdk/credential-providers");
@@ -1465,7 +1486,7 @@ var OpenAIClient = class {
1465
1486
  endpoint: "/v1/chat/completions"
1466
1487
  });
1467
1488
  if (mapped !== void 0) throw mapped;
1468
- throw fetchErr;
1489
+ throw wrapTransportError(fetchErr, { providerId, endpoint: "/v1/chat/completions" });
1469
1490
  }
1470
1491
  if (!response.ok) {
1471
1492
  const text = await response.text().catch(() => "");
@@ -2121,6 +2142,92 @@ var ResponsesApiClient = class {
2121
2142
  }
2122
2143
  };
2123
2144
 
2145
+ // src/internal/llm/abort-error.ts
2146
+ function abortError2(signal) {
2147
+ if (signal.reason instanceof Error) return signal.reason;
2148
+ return new Error(signal.reason !== void 0 ? String(signal.reason) : "aborted");
2149
+ }
2150
+
2151
+ // src/internal/llm/retrying-client.ts
2152
+ var MAX_TENTATIVAS = 3;
2153
+ function ehTransitorio(err) {
2154
+ if (!chunkA44COQJJ_cjs.isTransientError(err)) return false;
2155
+ if (err instanceof chunkA44COQJJ_cjs.CredentialPoolExhaustedError) return false;
2156
+ if (err instanceof chunkA44COQJJ_cjs.TheokitAgentError && err.code === "circuit_open") return false;
2157
+ if (err instanceof chunkA44COQJJ_cjs.RateLimitError && err.metadata?.statusCode === 402) return false;
2158
+ return true;
2159
+ }
2160
+ function dicaDeRetryAfterMs(err) {
2161
+ if (!(err instanceof chunkA44COQJJ_cjs.RateLimitError)) return void 0;
2162
+ const segundos = err.metadata?.retryAfter;
2163
+ return typeof segundos === "number" && segundos > 0 ? segundos * 1e3 : void 0;
2164
+ }
2165
+ async function* consumir(gen, estado) {
2166
+ let passo = await gen.next();
2167
+ while (passo.done !== true) {
2168
+ estado.emitiu = true;
2169
+ yield passo.value;
2170
+ passo = await gen.next();
2171
+ }
2172
+ return passo.value;
2173
+ }
2174
+ function podeReexecutar(err, emitiu, tentativa) {
2175
+ if (emitiu) return false;
2176
+ if (tentativa === MAX_TENTATIVAS - 1) return false;
2177
+ return ehTransitorio(err);
2178
+ }
2179
+ var RetryingLlmClient = class {
2180
+ #inner;
2181
+ #rng;
2182
+ constructor(inner, opts) {
2183
+ this.#inner = inner;
2184
+ this.#rng = opts?.rng;
2185
+ }
2186
+ /**
2187
+ * O cliente decorado. Público pela mesma convenção de `FaultInjectingLlmClient.inner`: os testes
2188
+ * de fiação do router afirmam `instanceof PoolAwareLlmClient` e precisam enxergar através dos
2189
+ * decorators. Sem isto, adicionar um decorator quebra testes cuja intenção continua válida — que
2190
+ * foi exatamente o que o M93 fez com 4 testes pré-existentes.
2191
+ */
2192
+ get inner() {
2193
+ return this.#inner;
2194
+ }
2195
+ get name() {
2196
+ return this.#inner.name;
2197
+ }
2198
+ /**
2199
+ * Espera o backoff da tentativa `n`, honrando o `Retry-After` do provider quando ele veio.
2200
+ *
2201
+ * Método próprio porque o `stream` é um gerador com laço aninhado, e embutir aqui a montagem
2202
+ * condicional das opções levava a complexidade cognitiva a 19 (teto do projeto: 10). O corpo do
2203
+ * `stream` fica sendo só a máquina de tentativas.
2204
+ */
2205
+ async #esperarBackoff(err, tentativa, signal) {
2206
+ const dica = dicaDeRetryAfterMs(err);
2207
+ const ms = chunkLUSXDZPV_cjs.computeBackoffMs({
2208
+ attempt: tentativa,
2209
+ ...dica !== void 0 ? { retryAfterMs: dica } : {},
2210
+ ...this.#rng !== void 0 ? { rng: this.#rng } : {}
2211
+ });
2212
+ await chunkLUSXDZPV_cjs.sleepWithAbort(ms, signal);
2213
+ }
2214
+ async *stream(request, signal) {
2215
+ let ultimoErro;
2216
+ for (let tentativa = 0; tentativa < MAX_TENTATIVAS; tentativa++) {
2217
+ if (signal.aborted) throw ultimoErro ?? abortError2(signal);
2218
+ const estado = { emitiu: false };
2219
+ try {
2220
+ return yield* consumir(this.#inner.stream(request, signal), estado);
2221
+ } catch (err) {
2222
+ ultimoErro = err;
2223
+ if (!podeReexecutar(err, estado.emitiu, tentativa)) throw err;
2224
+ await this.#esperarBackoff(err, tentativa, signal);
2225
+ }
2226
+ }
2227
+ throw ultimoErro ?? new Error("retry esgotado sem erro registrado");
2228
+ }
2229
+ };
2230
+
2124
2231
  // src/internal/error-mappers/vertex.ts
2125
2232
  var VERTEX_RULES = [
2126
2233
  { test: (s, e) => s === 429 || e === "RESOURCE_EXHAUSTED", code: "rate_limit" },
@@ -2202,7 +2309,7 @@ async function resolveVertexAccessToken() {
2202
2309
  async function getAuthClientOrThrow() {
2203
2310
  let mod;
2204
2311
  try {
2205
- const r = module$1.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('chunk-2MF3IE2D.cjs', document.baseURI).href)));
2312
+ const r = module$1.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('chunk-NZCFLEHO.cjs', document.baseURI).href)));
2206
2313
  mod = r("google-auth-library");
2207
2314
  } catch (err) {
2208
2315
  const isModuleMissing = err instanceof Error && (err.message.includes("Cannot find module") || err.code === "MODULE_NOT_FOUND");
@@ -2382,11 +2489,13 @@ function buildClient(name, routerOptions) {
2382
2489
  const resilience = routerOptions.onRateLimit !== void 0 ? { onRateLimit: routerOptions.onRateLimit } : {};
2383
2490
  const ambient = chunkLUSXDZPV_cjs.currentCredentialPool(name);
2384
2491
  if (ambient !== void 0) {
2385
- return new PoolAwareLlmClient(
2386
- ambient,
2387
- (apiKey) => selectTransport(profile, apiKey),
2388
- void 0,
2389
- resilience
2492
+ return new RetryingLlmClient(
2493
+ new PoolAwareLlmClient(
2494
+ ambient,
2495
+ (apiKey) => selectTransport(profile, apiKey),
2496
+ void 0,
2497
+ resilience
2498
+ )
2390
2499
  );
2391
2500
  }
2392
2501
  const poolKeys = filterPoolKeys(routerOptions.apiKeys?.[name]);
@@ -2412,16 +2521,18 @@ function buildPoolOrSingle(args) {
2412
2521
  );
2413
2522
  const pool = new chunkLUSXDZPV_cjs.CredentialPool(name, entries, strategy);
2414
2523
  const resilience = routerOptions.onRateLimit !== void 0 ? { onRateLimit: routerOptions.onRateLimit } : {};
2415
- return new PoolAwareLlmClient(
2416
- pool,
2417
- (apiKey2) => selectTransport(profile, apiKey2),
2418
- void 0,
2419
- resilience
2524
+ return new RetryingLlmClient(
2525
+ new PoolAwareLlmClient(
2526
+ pool,
2527
+ (apiKey2) => selectTransport(profile, apiKey2),
2528
+ void 0,
2529
+ resilience
2530
+ )
2420
2531
  );
2421
2532
  }
2422
2533
  const apiKey = poolKeys?.[0] ?? resolveApiKey(profile.envVars) ?? sentinelForNoAuth(profile) ?? sentinelForLazyAuth(profile);
2423
2534
  if (apiKey === void 0) return void 0;
2424
- return selectTransport(profile, apiKey);
2535
+ return new RetryingLlmClient(selectTransport(profile, apiKey));
2425
2536
  }
2426
2537
  function resolveBaseUrlEnvOverride(providerName) {
2427
2538
  switch (providerName) {
@@ -2709,7 +2820,7 @@ function plainText(content) {
2709
2820
  }
2710
2821
  async function compactSessionTranscript(opts) {
2711
2822
  const prior = await opts.store.readRecords(opts.loc.agentId);
2712
- const history = chunk4SXHEZIV_cjs.reconstructMessages(prior);
2823
+ const history = chunkU2FO3MRG_cjs.reconstructMessages(prior);
2713
2824
  const compressible = [];
2714
2825
  for (const m of history) {
2715
2826
  const text = plainText(m.content);
@@ -2738,7 +2849,7 @@ async function compactSessionTranscript(opts) {
2738
2849
  }
2739
2850
  const summary = `${COMPACT_SUMMARY_MARKER}
2740
2851
  ${summaryBody}`;
2741
- const transcript = chunk4SXHEZIV_cjs.SessionTranscript.fromRecords(prior, {
2852
+ const transcript = chunkU2FO3MRG_cjs.SessionTranscript.fromRecords(prior, {
2742
2853
  cwd: opts.loc.cwd,
2743
2854
  sessionId: opts.sessionId,
2744
2855
  model: opts.loc.model ?? "unknown"
@@ -2859,5 +2970,5 @@ exports.resolveProviderChain = resolveProviderChain;
2859
2970
  exports.resolveSummarizerRoute = resolveSummarizerRoute;
2860
2971
  exports.shouldAutoCompact = shouldAutoCompact;
2861
2972
  exports.tryFirstEvent = tryFirstEvent;
2862
- //# sourceMappingURL=chunk-2MF3IE2D.cjs.map
2863
- //# sourceMappingURL=chunk-2MF3IE2D.cjs.map
2973
+ //# sourceMappingURL=chunk-NZCFLEHO.cjs.map
2974
+ //# sourceMappingURL=chunk-NZCFLEHO.cjs.map