@theokit/sdk 4.31.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 (100) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/dist/{agent-Ekv8y7_c.d.ts → agent-BJbGi8-R.d.ts} +1 -1
  3. package/dist/{agent-6GQBOHHA.cjs → agent-BKNJIOEY.cjs} +9 -9
  4. package/dist/{agent-6GQBOHHA.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-DY5LGZ5E.js → agent-HW7OY2W3.js} +8 -8
  7. package/dist/{agent-DY5LGZ5E.js.map → agent-HW7OY2W3.js.map} +1 -1
  8. package/dist/{chunk-FZ75EZR5.js → chunk-CCRWSZ2F.js} +35 -28
  9. package/dist/chunk-CCRWSZ2F.js.map +1 -0
  10. package/dist/{chunk-WQEQCJTZ.cjs → chunk-CJVMDRQB.cjs} +26 -3
  11. package/dist/chunk-CJVMDRQB.cjs.map +1 -0
  12. package/dist/{chunk-XJT5VACT.cjs → chunk-E2YEDATX.cjs} +6 -6
  13. package/dist/{chunk-XJT5VACT.cjs.map → chunk-E2YEDATX.cjs.map} +1 -1
  14. package/dist/{chunk-FDGRQQWX.cjs → chunk-GQBXBHZ2.cjs} +5 -5
  15. package/dist/{chunk-FDGRQQWX.cjs.map → chunk-GQBXBHZ2.cjs.map} +1 -1
  16. package/dist/{chunk-U447MTG4.cjs → chunk-IOOSAZZH.cjs} +8 -8
  17. package/dist/chunk-IOOSAZZH.cjs.map +1 -0
  18. package/dist/{chunk-UKNMWCPZ.cjs → chunk-NZCFLEHO.cjs} +133 -70
  19. package/dist/chunk-NZCFLEHO.cjs.map +1 -0
  20. package/dist/{chunk-PORDVVJS.js → chunk-RPKTXBPK.js} +4 -4
  21. package/dist/chunk-RPKTXBPK.js.map +1 -0
  22. package/dist/{chunk-CYTAM3E6.cjs → chunk-S6F3FKFR.cjs} +65 -58
  23. package/dist/chunk-S6F3FKFR.cjs.map +1 -0
  24. package/dist/{chunk-VUXLNVX7.js → chunk-SJLOIZ4Z.js} +4 -4
  25. package/dist/{chunk-VUXLNVX7.js.map → chunk-SJLOIZ4Z.js.map} +1 -1
  26. package/dist/{chunk-4SXHEZIV.cjs → chunk-U2FO3MRG.cjs} +9 -3
  27. package/dist/chunk-U2FO3MRG.cjs.map +1 -0
  28. package/dist/{chunk-ICSCKB3N.js → chunk-UAYYNWYJ.js} +27 -4
  29. package/dist/chunk-UAYYNWYJ.js.map +1 -0
  30. package/dist/{chunk-ZZWTY3RX.js → chunk-VGUOUAM2.js} +9 -4
  31. package/dist/chunk-VGUOUAM2.js.map +1 -0
  32. package/dist/{chunk-4JWZRASX.js → chunk-WYPHQ7NM.js} +3 -3
  33. package/dist/{chunk-4JWZRASX.js.map → chunk-WYPHQ7NM.js.map} +1 -1
  34. package/dist/{chunk-TLG444A6.js → chunk-XDNGF5BY.js} +130 -67
  35. package/dist/chunk-XDNGF5BY.js.map +1 -0
  36. package/dist/{compact-session-2BFNMENR.cjs → compact-session-42BK7RE3.cjs} +12 -12
  37. package/dist/{compact-session-2BFNMENR.cjs.map → compact-session-42BK7RE3.cjs.map} +1 -1
  38. package/dist/{compact-session-2JONXHLR.js → compact-session-QMBOCFVQ.js} +4 -4
  39. package/dist/{compact-session-2JONXHLR.js.map → compact-session-QMBOCFVQ.js.map} +1 -1
  40. package/dist/{cron-D0Z29gI-.d.ts → cron-BU9qD5B6.d.ts} +2 -2
  41. package/dist/{cron-CjzvXGT2.d.cts → cron-BwojPwEs.d.cts} +2 -2
  42. package/dist/cron.cjs +8 -8
  43. package/dist/cron.d.cts +3 -3
  44. package/dist/cron.d.ts +3 -3
  45. package/dist/cron.js +7 -7
  46. package/dist/{errors-DHZtSNnj.d.ts → errors-Cua4WC9H.d.ts} +1 -1
  47. package/dist/{errors-BdL-buYn.d.cts → errors-DyVbXdR4.d.cts} +1 -1
  48. package/dist/errors.d.cts +2 -2
  49. package/dist/errors.d.ts +2 -2
  50. package/dist/eval.cjs +11 -11
  51. package/dist/eval.js +7 -7
  52. package/dist/fs-session-store-IIP7ZBYE.cjs +17 -0
  53. package/dist/{fs-session-store-26WVVMC4.cjs.map → fs-session-store-IIP7ZBYE.cjs.map} +1 -1
  54. package/dist/fs-session-store-T7YPW5A4.js +8 -0
  55. package/dist/{fs-session-store-7AEI4STY.js.map → fs-session-store-T7YPW5A4.js.map} +1 -1
  56. package/dist/index.cjs +29 -29
  57. package/dist/index.d.cts +8 -8
  58. package/dist/index.d.ts +8 -8
  59. package/dist/index.js +9 -9
  60. package/dist/{inject-session-MIFEKATN.cjs → inject-session-6ZMCA2NE.cjs} +6 -6
  61. package/dist/{inject-session-MIFEKATN.cjs.map → inject-session-6ZMCA2NE.cjs.map} +1 -1
  62. package/dist/{inject-session-NNSCCIVP.js → inject-session-YA3GQE4G.js} +4 -4
  63. package/dist/{inject-session-NNSCCIVP.js.map → inject-session-YA3GQE4G.js.map} +1 -1
  64. package/dist/internal/llm/abort-error.d.ts +1 -0
  65. package/dist/internal/llm/retrying-client.d.ts +27 -3
  66. package/dist/internal/llm/transport-error.d.ts +9 -0
  67. package/dist/internal/persistence/index.cjs +6 -6
  68. package/dist/internal/persistence/index.js +1 -1
  69. package/dist/internal/persistence/session-transcript.d.cts +13 -1
  70. package/dist/internal/persistence/session-transcript.d.ts +13 -1
  71. package/dist/internal/runtime/lifecycle/post-run-lifecycle.d.ts +1 -1
  72. package/dist/persistence.cjs +13 -9
  73. package/dist/persistence.d.cts +1 -1
  74. package/dist/persistence.d.ts +1 -1
  75. package/dist/persistence.js +2 -2
  76. package/dist/{run-OJbGyweZ.d.ts → run-CwEJtLPE.d.cts} +8 -0
  77. package/dist/{run-OJbGyweZ.d.cts → run-CwEJtLPE.d.ts} +8 -0
  78. package/dist/server/errors-envelope.d.cts +3 -3
  79. package/dist/server/errors-envelope.d.ts +3 -3
  80. package/dist/{session-transcript-T7LGJUGW.js → session-transcript-5VZUWEJ5.js} +3 -3
  81. package/dist/{session-transcript-T7LGJUGW.js.map → session-transcript-5VZUWEJ5.js.map} +1 -1
  82. package/dist/session-transcript-T4SB66I7.cjs +50 -0
  83. package/dist/{session-transcript-LPNZR3YS.cjs.map → session-transcript-T4SB66I7.cjs.map} +1 -1
  84. package/dist/subagents-loader.d.cts +2 -2
  85. package/dist/subagents-loader.d.ts +2 -2
  86. package/dist/types/agent-prims.d.ts +8 -0
  87. package/package.json +1 -1
  88. package/dist/chunk-4SXHEZIV.cjs.map +0 -1
  89. package/dist/chunk-CYTAM3E6.cjs.map +0 -1
  90. package/dist/chunk-FZ75EZR5.js.map +0 -1
  91. package/dist/chunk-ICSCKB3N.js.map +0 -1
  92. package/dist/chunk-PORDVVJS.js.map +0 -1
  93. package/dist/chunk-TLG444A6.js.map +0 -1
  94. package/dist/chunk-U447MTG4.cjs.map +0 -1
  95. package/dist/chunk-UKNMWCPZ.cjs.map +0 -1
  96. package/dist/chunk-WQEQCJTZ.cjs.map +0 -1
  97. package/dist/chunk-ZZWTY3RX.js.map +0 -1
  98. package/dist/fs-session-store-26WVVMC4.cjs +0 -17
  99. package/dist/fs-session-store-7AEI4STY.js +0 -8
  100. package/dist/session-transcript-LPNZR3YS.cjs +0 -46
@@ -1,10 +1,10 @@
1
1
  import { currentCredentialPool, computeBackoffMs, sleepWithAbort, newPooledCredential, CredentialPool } from './chunk-6CLRANZA.js';
2
2
  import { invalidateSessionCache } from './chunk-EEZ7CFMM.js';
3
3
  import { tryJson, isPlainObject, sanitizeToolInput } from './chunk-U54XCYG3.js';
4
- import { reconstructMessages, SessionTranscript } from './chunk-ZZWTY3RX.js';
4
+ import { reconstructMessages, SessionTranscript } from './chunk-VGUOUAM2.js';
5
5
  import { estimateTokens } from './chunk-WA3FO4R7.js';
6
6
  import { globalSingleton, registerProvider, registerBuiltins, getProviderProfile, inferModelDialect, inferRegionFromModelId, stripBedrockPrefix, resolveBedrockBaseUrl, resolveVertexBaseUrl, stripVertexPrefix } from './chunk-KAP4GJHO.js';
7
- import { NetworkError, AuthenticationError, RateLimitError, ConfigurationError, UnknownAgentError, CredentialPoolExhaustedError } from './chunk-WLKFWQSJ.js';
7
+ import { NetworkError, AuthenticationError, RateLimitError, ConfigurationError, UnknownAgentError, CredentialPoolExhaustedError, isTransientError, TheokitAgentError } from './chunk-WLKFWQSJ.js';
8
8
  import { redactSecrets } from './chunk-JTFYYKDT.js';
9
9
  import { existsSync, readFileSync } from 'fs';
10
10
  import { readdir } from 'fs/promises';
@@ -472,6 +472,22 @@ function releaseReader(reader) {
472
472
  }
473
473
  }
474
474
 
475
+ // src/internal/llm/transport-error.ts
476
+ function ehAbort(err) {
477
+ if (typeof err !== "object" || err === null) return false;
478
+ const nome = err.name;
479
+ return nome === "AbortError" || nome === "TimeoutError";
480
+ }
481
+ function wrapTransportError(err, ctx) {
482
+ if (ehAbort(err)) return err;
483
+ if (err instanceof NetworkError) return err;
484
+ const detalhe = err instanceof Error ? err.message : String(err);
485
+ return new NetworkError(`${ctx.providerId} transport failure on ${ctx.endpoint}: ${detalhe}`, {
486
+ code: "transport_failure",
487
+ cause: err
488
+ });
489
+ }
490
+
475
491
  // src/internal/llm/anthropic.ts
476
492
  var AnthropicClient = class {
477
493
  constructor(options) {
@@ -492,12 +508,17 @@ var AnthropicClient = class {
492
508
  "anthropic-version": this.options.version ?? "2023-06-01"
493
509
  };
494
510
  if (this.options.extraHeaders !== void 0) Object.assign(headers, this.options.extraHeaders);
495
- const response = await this.fetchImpl(`${this.baseUrl}/v1/messages`, {
496
- method: "POST",
497
- signal,
498
- headers,
499
- body: JSON.stringify(body)
500
- });
511
+ let response;
512
+ try {
513
+ response = await this.fetchImpl(`${this.baseUrl}/v1/messages`, {
514
+ method: "POST",
515
+ signal,
516
+ headers,
517
+ body: JSON.stringify(body)
518
+ });
519
+ } catch (fetchErr) {
520
+ throw wrapTransportError(fetchErr, { providerId: this.name, endpoint: "/v1/messages" });
521
+ }
501
522
  if (!response.ok) {
502
523
  const text = await response.text().catch(() => "");
503
524
  let body2 = text;
@@ -1462,7 +1483,7 @@ var OpenAIClient = class {
1462
1483
  endpoint: "/v1/chat/completions"
1463
1484
  });
1464
1485
  if (mapped !== void 0) throw mapped;
1465
- throw fetchErr;
1486
+ throw wrapTransportError(fetchErr, { providerId, endpoint: "/v1/chat/completions" });
1466
1487
  }
1467
1488
  if (!response.ok) {
1468
1489
  const text = await response.text().catch(() => "");
@@ -1923,60 +1944,6 @@ function abortError(signal) {
1923
1944
  return new Error("AbortError");
1924
1945
  }
1925
1946
 
1926
- // src/internal/llm/retrying-client.ts
1927
- var MAX_TENTATIVAS = 3;
1928
- function ehTransitorio(err) {
1929
- if (err instanceof AuthenticationError) return false;
1930
- if (err instanceof RateLimitError) {
1931
- const status = err.metadata?.statusCode ?? 429;
1932
- return status !== 402;
1933
- }
1934
- return err instanceof Error && !/\b4\d\d\b/.test(err.message);
1935
- }
1936
- function dicaDeRetryAfterMs(err) {
1937
- if (!(err instanceof RateLimitError)) return void 0;
1938
- const segundos = err.metadata?.retryAfter;
1939
- return typeof segundos === "number" && segundos > 0 ? segundos * 1e3 : void 0;
1940
- }
1941
- var RetryingLlmClient = class {
1942
- #inner;
1943
- #rng;
1944
- constructor(inner, opts) {
1945
- this.#inner = inner;
1946
- this.#rng = opts?.rng;
1947
- }
1948
- get name() {
1949
- return this.#inner.name;
1950
- }
1951
- async *stream(request, signal) {
1952
- let ultimoErro;
1953
- for (let tentativa = 0; tentativa < MAX_TENTATIVAS; tentativa++) {
1954
- if (signal.aborted) throw ultimoErro ?? new Error("aborted");
1955
- try {
1956
- const gen = this.#inner.stream(request, signal);
1957
- let passo = await gen.next();
1958
- while (passo.done !== true) {
1959
- yield passo.value;
1960
- passo = await gen.next();
1961
- }
1962
- return passo.value;
1963
- } catch (err) {
1964
- ultimoErro = err;
1965
- const ultima = tentativa === MAX_TENTATIVAS - 1;
1966
- if (ultima || !ehTransitorio(err)) throw err;
1967
- const dica = dicaDeRetryAfterMs(err);
1968
- const ms = computeBackoffMs({
1969
- attempt: tentativa,
1970
- ...dica !== void 0 ? { retryAfterMs: dica } : {},
1971
- ...this.#rng !== void 0 ? { rng: this.#rng } : {}
1972
- });
1973
- await sleepWithAbort(ms, signal);
1974
- }
1975
- }
1976
- throw ultimoErro ?? new Error("retry esgotado sem erro registrado");
1977
- }
1978
- };
1979
-
1980
1947
  // src/internal/llm/responses.ts
1981
1948
  function messageToInputItems(message) {
1982
1949
  const items = [];
@@ -2172,6 +2139,92 @@ var ResponsesApiClient = class {
2172
2139
  }
2173
2140
  };
2174
2141
 
2142
+ // src/internal/llm/abort-error.ts
2143
+ function abortError2(signal) {
2144
+ if (signal.reason instanceof Error) return signal.reason;
2145
+ return new Error(signal.reason !== void 0 ? String(signal.reason) : "aborted");
2146
+ }
2147
+
2148
+ // src/internal/llm/retrying-client.ts
2149
+ var MAX_TENTATIVAS = 3;
2150
+ function ehTransitorio(err) {
2151
+ if (!isTransientError(err)) return false;
2152
+ if (err instanceof CredentialPoolExhaustedError) return false;
2153
+ if (err instanceof TheokitAgentError && err.code === "circuit_open") return false;
2154
+ if (err instanceof RateLimitError && err.metadata?.statusCode === 402) return false;
2155
+ return true;
2156
+ }
2157
+ function dicaDeRetryAfterMs(err) {
2158
+ if (!(err instanceof RateLimitError)) return void 0;
2159
+ const segundos = err.metadata?.retryAfter;
2160
+ return typeof segundos === "number" && segundos > 0 ? segundos * 1e3 : void 0;
2161
+ }
2162
+ async function* consumir(gen, estado) {
2163
+ let passo = await gen.next();
2164
+ while (passo.done !== true) {
2165
+ estado.emitiu = true;
2166
+ yield passo.value;
2167
+ passo = await gen.next();
2168
+ }
2169
+ return passo.value;
2170
+ }
2171
+ function podeReexecutar(err, emitiu, tentativa) {
2172
+ if (emitiu) return false;
2173
+ if (tentativa === MAX_TENTATIVAS - 1) return false;
2174
+ return ehTransitorio(err);
2175
+ }
2176
+ var RetryingLlmClient = class {
2177
+ #inner;
2178
+ #rng;
2179
+ constructor(inner, opts) {
2180
+ this.#inner = inner;
2181
+ this.#rng = opts?.rng;
2182
+ }
2183
+ /**
2184
+ * O cliente decorado. Público pela mesma convenção de `FaultInjectingLlmClient.inner`: os testes
2185
+ * de fiação do router afirmam `instanceof PoolAwareLlmClient` e precisam enxergar através dos
2186
+ * decorators. Sem isto, adicionar um decorator quebra testes cuja intenção continua válida — que
2187
+ * foi exatamente o que o M93 fez com 4 testes pré-existentes.
2188
+ */
2189
+ get inner() {
2190
+ return this.#inner;
2191
+ }
2192
+ get name() {
2193
+ return this.#inner.name;
2194
+ }
2195
+ /**
2196
+ * Espera o backoff da tentativa `n`, honrando o `Retry-After` do provider quando ele veio.
2197
+ *
2198
+ * Método próprio porque o `stream` é um gerador com laço aninhado, e embutir aqui a montagem
2199
+ * condicional das opções levava a complexidade cognitiva a 19 (teto do projeto: 10). O corpo do
2200
+ * `stream` fica sendo só a máquina de tentativas.
2201
+ */
2202
+ async #esperarBackoff(err, tentativa, signal) {
2203
+ const dica = dicaDeRetryAfterMs(err);
2204
+ const ms = computeBackoffMs({
2205
+ attempt: tentativa,
2206
+ ...dica !== void 0 ? { retryAfterMs: dica } : {},
2207
+ ...this.#rng !== void 0 ? { rng: this.#rng } : {}
2208
+ });
2209
+ await sleepWithAbort(ms, signal);
2210
+ }
2211
+ async *stream(request, signal) {
2212
+ let ultimoErro;
2213
+ for (let tentativa = 0; tentativa < MAX_TENTATIVAS; tentativa++) {
2214
+ if (signal.aborted) throw ultimoErro ?? abortError2(signal);
2215
+ const estado = { emitiu: false };
2216
+ try {
2217
+ return yield* consumir(this.#inner.stream(request, signal), estado);
2218
+ } catch (err) {
2219
+ ultimoErro = err;
2220
+ if (!podeReexecutar(err, estado.emitiu, tentativa)) throw err;
2221
+ await this.#esperarBackoff(err, tentativa, signal);
2222
+ }
2223
+ }
2224
+ throw ultimoErro ?? new Error("retry esgotado sem erro registrado");
2225
+ }
2226
+ };
2227
+
2175
2228
  // src/internal/error-mappers/vertex.ts
2176
2229
  var VERTEX_RULES = [
2177
2230
  { test: (s, e) => s === 429 || e === "RESOURCE_EXHAUSTED", code: "rate_limit" },
@@ -2434,7 +2487,12 @@ function buildClient(name, routerOptions) {
2434
2487
  const ambient = currentCredentialPool(name);
2435
2488
  if (ambient !== void 0) {
2436
2489
  return new RetryingLlmClient(
2437
- new PoolAwareLlmClient(ambient, (apiKey) => selectTransport(profile, apiKey), void 0, resilience)
2490
+ new PoolAwareLlmClient(
2491
+ ambient,
2492
+ (apiKey) => selectTransport(profile, apiKey),
2493
+ void 0,
2494
+ resilience
2495
+ )
2438
2496
  );
2439
2497
  }
2440
2498
  const poolKeys = filterPoolKeys(routerOptions.apiKeys?.[name]);
@@ -2461,7 +2519,12 @@ function buildPoolOrSingle(args) {
2461
2519
  const pool = new CredentialPool(name, entries, strategy);
2462
2520
  const resilience = routerOptions.onRateLimit !== void 0 ? { onRateLimit: routerOptions.onRateLimit } : {};
2463
2521
  return new RetryingLlmClient(
2464
- new PoolAwareLlmClient(pool, (apiKey2) => selectTransport(profile, apiKey2), void 0, resilience)
2522
+ new PoolAwareLlmClient(
2523
+ pool,
2524
+ (apiKey2) => selectTransport(profile, apiKey2),
2525
+ void 0,
2526
+ resilience
2527
+ )
2465
2528
  );
2466
2529
  }
2467
2530
  const apiKey = poolKeys?.[0] ?? resolveApiKey(profile.envVars) ?? sentinelForNoAuth(profile) ?? sentinelForLazyAuth(profile);
@@ -2885,5 +2948,5 @@ async function autoCompactIfNeeded(opts) {
2885
2948
  }
2886
2949
 
2887
2950
  export { COMPACT_SUMMARY_MARKER, COMPACT_USER_MESSAGE_MAX_TOKENS, CircuitBreaker, autoCompactIfNeeded, buildDefaultSummarizer, compactSessionTranscript, detectPrimaryProvider, discoverProviderPlugins, inferProviderFromApiKey, isCompactSummary, mapOllamaHttpError, mapOllamaTransportError, mapOpenAICompatibleError, parseSseStream, relayStream, renderToolResultContentText, resolveProviderChain, resolveSummarizerRoute, shouldAutoCompact, tryFirstEvent };
2888
- //# sourceMappingURL=chunk-TLG444A6.js.map
2889
- //# sourceMappingURL=chunk-TLG444A6.js.map
2951
+ //# sourceMappingURL=chunk-XDNGF5BY.js.map
2952
+ //# sourceMappingURL=chunk-XDNGF5BY.js.map