jangada-ai 1.0.2 → 1.0.4

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 (39) hide show
  1. package/dist/{anthropic-BIKZUdHL.js → anthropic-BkjBgjzE.js} +4 -4
  2. package/dist/{anthropic-6sRl3i7z.cjs → anthropic-tfJwKydD.cjs} +4 -4
  3. package/dist/{base-B9vWogrC.js → base-C5ATrYPo.js} +2 -2
  4. package/dist/{base-8ZFKIzBj.cjs → base-D_vFDbHM.cjs} +2 -2
  5. package/dist/{bedrock-Cjek46Mw.cjs → bedrock-CkucrX50.cjs} +3 -3
  6. package/dist/{bedrock-oWZQlwCt.js → bedrock-G7_ljnr2.js} +3 -3
  7. package/dist/{client-Bb1r1q6G.cjs → client-BL8R_mzp.cjs} +3 -3
  8. package/dist/{client-BALmyl1D.js → client-DZpdYalG.js} +3 -3
  9. package/dist/{errors-BJIPDLwX.cjs → errors-BqivrjKZ.cjs} +20 -2
  10. package/dist/{errors-hp-4UePr.js → errors-KpUEVi-c.js} +20 -2
  11. package/dist/eval/index.cjs +1 -1
  12. package/dist/eval/index.js +1 -1
  13. package/dist/{gemini-VIK6GzRx.js → gemini-CUwnzJxK.js} +5 -5
  14. package/dist/{gemini-CqWTQz_y.cjs → gemini-CdN6pmdE.cjs} +5 -5
  15. package/dist/index.cjs +19 -22
  16. package/dist/index.d.cts +2 -4
  17. package/dist/index.d.ts +2 -4
  18. package/dist/index.js +19 -22
  19. package/dist/mcp/index.cjs +2 -2
  20. package/dist/mcp/index.js +2 -2
  21. package/dist/{mistral-DD9PTIYO.cjs → mistral-BEUTwkgk.cjs} +4 -4
  22. package/dist/{mistral-rbVDtlHt.js → mistral-D8s4L9F4.js} +4 -4
  23. package/dist/node/index.cjs +1 -1
  24. package/dist/node/index.js +1 -1
  25. package/dist/{ollama-DvKNKF2I.cjs → ollama-BmQl_4JI.cjs} +4 -4
  26. package/dist/{ollama-CtOa_75e.js → ollama-pUclkwVX.js} +4 -4
  27. package/dist/{openai-compat-CJRRaqmi.js → openai-compat-B1z86xIs.js} +5 -5
  28. package/dist/{openai-compat-uVcRxBHu.cjs → openai-compat-ByFDerqO.cjs} +5 -5
  29. package/dist/prebuilt/index.cjs +2 -2
  30. package/dist/prebuilt/index.js +2 -2
  31. package/dist/rag/index.cjs +1 -1
  32. package/dist/rag/index.js +1 -1
  33. package/dist/{schema-DCaQOk49.js → schema-CbsM_8LN.js} +1 -1
  34. package/dist/{schema-qS-xTTIs.cjs → schema-CdxlpDZe.cjs} +1 -1
  35. package/dist/{server-uzd_KbIF.cjs → server-B7zpcfX7.cjs} +2 -2
  36. package/dist/{server-q2tlgVLB.js → server-CzUhVb5m.js} +2 -2
  37. package/dist/{version-3n0cxDMH.cjs → version-B-zy_KoD.cjs} +2 -2
  38. package/dist/{version-DgKb-29E.js → version-Ci5H2ETD.js} +2 -2
  39. package/package.json +1 -1
@@ -1,8 +1,8 @@
1
- import { _ as UnsupportedError, d as ProviderError, l as OutputValidationError, m as ServerError, s as LLMError, v as classify } from "./errors-hp-4UePr.js";
2
- import { s as splitMcp } from "./client-BALmyl1D.js";
1
+ import { _ as UnsupportedError, d as ProviderError, l as OutputValidationError, m as ServerError, s as LLMError, v as classify } from "./errors-KpUEVi-c.js";
2
+ import { s as splitMcp } from "./client-DZpdYalG.js";
3
3
  import { a as ToolCall, n as Completion, o as imageBase64 } from "./message-0wKCrEp2.js";
4
- import { c as NativeTool, i as splitTools } from "./version-DgKb-29E.js";
5
- import { n as applyProfile, t as Provider } from "./base-B9vWogrC.js";
4
+ import { c as NativeTool, i as splitTools } from "./version-Ci5H2ETD.js";
5
+ import { n as applyProfile, t as Provider } from "./base-C5ATrYPo.js";
6
6
  // src/providers/anthropic.ts
7
7
  /**
8
8
  * Provider Anthropic (Claude): texto, vision, tools, tools nativas (server tools),
@@ -1,8 +1,8 @@
1
- const require_errors = require("./errors-BJIPDLwX.cjs");
2
- const require_client = require("./client-Bb1r1q6G.cjs");
1
+ const require_errors = require("./errors-BqivrjKZ.cjs");
2
+ const require_client = require("./client-BL8R_mzp.cjs");
3
3
  const require_message = require("./message-DCvWw0dF.cjs");
4
- const require_version = require("./version-3n0cxDMH.cjs");
5
- const require_base = require("./base-8ZFKIzBj.cjs");
4
+ const require_version = require("./version-B-zy_KoD.cjs");
5
+ const require_base = require("./base-D_vFDbHM.cjs");
6
6
  // src/providers/anthropic.ts
7
7
  /**
8
8
  * Provider Anthropic (Claude): texto, vision, tools, tools nativas (server tools),
@@ -1,5 +1,5 @@
1
- import { _ as UnsupportedError, g as TruncatedError } from "./errors-hp-4UePr.js";
2
- import { c as NativeTool } from "./version-DgKb-29E.js";
1
+ import { _ as UnsupportedError, g as TruncatedError } from "./errors-KpUEVi-c.js";
2
+ import { c as NativeTool } from "./version-Ci5H2ETD.js";
3
3
  import { n as getEnv } from "./env-BH4ulZ4_.js";
4
4
  // src/profiles.ts
5
5
  const RULES = [];
@@ -1,5 +1,5 @@
1
- const require_errors = require("./errors-BJIPDLwX.cjs");
2
- const require_version = require("./version-3n0cxDMH.cjs");
1
+ const require_errors = require("./errors-BqivrjKZ.cjs");
2
+ const require_version = require("./version-B-zy_KoD.cjs");
3
3
  const require_env = require("./env-B1ffNsxb.cjs");
4
4
  // src/profiles.ts
5
5
  const RULES = [];
@@ -1,8 +1,8 @@
1
- const require_errors = require("./errors-BJIPDLwX.cjs");
1
+ const require_errors = require("./errors-BqivrjKZ.cjs");
2
2
  const require_env = require("./env-B1ffNsxb.cjs");
3
3
  const require_message = require("./message-DCvWw0dF.cjs");
4
- const require_base = require("./base-8ZFKIzBj.cjs");
5
- const require_version = require("./version-3n0cxDMH.cjs");
4
+ const require_base = require("./base-D_vFDbHM.cjs");
5
+ const require_version = require("./version-B-zy_KoD.cjs");
6
6
  // src/providers/bedrock.ts
7
7
  /**
8
8
  * Provider AWS Bedrock via Converse API (`@aws-sdk/client-bedrock-runtime`, peer
@@ -1,8 +1,8 @@
1
- import { _ as UnsupportedError, d as ProviderError, l as OutputValidationError, m as ServerError, s as LLMError, v as classify } from "./errors-hp-4UePr.js";
1
+ import { _ as UnsupportedError, d as ProviderError, l as OutputValidationError, m as ServerError, s as LLMError, v as classify } from "./errors-KpUEVi-c.js";
2
2
  import { n as getEnv } from "./env-BH4ulZ4_.js";
3
3
  import { a as ToolCall, n as Completion } from "./message-0wKCrEp2.js";
4
- import { n as applyProfile, t as Provider } from "./base-B9vWogrC.js";
5
- import { i as splitTools } from "./version-DgKb-29E.js";
4
+ import { n as applyProfile, t as Provider } from "./base-C5ATrYPo.js";
5
+ import { i as splitTools } from "./version-Ci5H2ETD.js";
6
6
  // src/providers/bedrock.ts
7
7
  /**
8
8
  * Provider AWS Bedrock via Converse API (`@aws-sdk/client-bedrock-runtime`, peer
@@ -1,7 +1,7 @@
1
- const require_errors = require("./errors-BJIPDLwX.cjs");
1
+ const require_errors = require("./errors-BqivrjKZ.cjs");
2
2
  const require_context = require("./context-BWyYfOyr.cjs");
3
3
  const require_message = require("./message-DCvWw0dF.cjs");
4
- const require_version = require("./version-3n0cxDMH.cjs");
4
+ const require_version = require("./version-B-zy_KoD.cjs");
5
5
  // src/mcp/client.ts
6
6
  function get(obj, key) {
7
7
  return obj !== null && typeof obj === "object" ? obj[key] : void 0;
@@ -467,7 +467,7 @@ var MCPClient = class {
467
467
  const sdk = await loadSdk();
468
468
  const info = this.#options.clientInfo ?? {
469
469
  name: "jangada",
470
- version: "1.0.2"
470
+ version: "1.0.4"
471
471
  };
472
472
  const client = new sdk.Client(info, { capabilities: this.capabilities() });
473
473
  this.registerCallbacks(client, sdk);
@@ -1,7 +1,7 @@
1
- import { s as LLMError, t as APIConnectionError } from "./errors-hp-4UePr.js";
1
+ import { s as LLMError, t as APIConnectionError } from "./errors-KpUEVi-c.js";
2
2
  import { o as warn } from "./context-CvNVqdqz.js";
3
3
  import { c as textPart, i as Message, r as Image } from "./message-0wKCrEp2.js";
4
- import { n as Tool } from "./version-DgKb-29E.js";
4
+ import { n as Tool } from "./version-Ci5H2ETD.js";
5
5
  // src/mcp/client.ts
6
6
  function get(obj, key) {
7
7
  return obj !== null && typeof obj === "object" ? obj[key] : void 0;
@@ -467,7 +467,7 @@ var MCPClient = class {
467
467
  const sdk = await loadSdk();
468
468
  const info = this.#options.clientInfo ?? {
469
469
  name: "jangada",
470
- version: "1.0.2"
470
+ version: "1.0.4"
471
471
  };
472
472
  const client = new sdk.Client(info, { capabilities: this.capabilities() });
473
473
  this.registerCallbacks(client, sdk);
@@ -130,8 +130,26 @@ function nameOf(err) {
130
130
  return "Error";
131
131
  }
132
132
  function messageOf(err) {
133
- if (err instanceof Error) return err.message;
134
- return String(err);
133
+ const msg = err instanceof Error ? err.message : String(err);
134
+ const detalhe = bodyMessage(err);
135
+ return detalhe && !msg.includes(detalhe) ? `${msg} (${detalhe})` : msg;
136
+ }
137
+ /**
138
+ * Motivo do erro que alguns SDKs só deixam no corpo cru da resposta (ex.: a
139
+ * Interactions API do `@google/genai`, cuja `message` vem sem o motivo).
140
+ * Lê `body` em texto JSON (objeto ou lista) e devolve `error.message`.
141
+ */
142
+ function bodyMessage(err) {
143
+ const body = err && typeof err === "object" ? err.body : void 0;
144
+ if (typeof body !== "string" || !body.trim()) return null;
145
+ try {
146
+ let j = JSON.parse(body);
147
+ if (Array.isArray(j)) j = j[0];
148
+ const m = j?.error?.message;
149
+ return typeof m === "string" && m ? m : null;
150
+ } catch {
151
+ return null;
152
+ }
135
153
  }
136
154
  /**
137
155
  * Converte um erro nativo de SDK num `LLMError` normalizado.
@@ -130,8 +130,26 @@ function nameOf(err) {
130
130
  return "Error";
131
131
  }
132
132
  function messageOf(err) {
133
- if (err instanceof Error) return err.message;
134
- return String(err);
133
+ const msg = err instanceof Error ? err.message : String(err);
134
+ const detalhe = bodyMessage(err);
135
+ return detalhe && !msg.includes(detalhe) ? `${msg} (${detalhe})` : msg;
136
+ }
137
+ /**
138
+ * Motivo do erro que alguns SDKs só deixam no corpo cru da resposta (ex.: a
139
+ * Interactions API do `@google/genai`, cuja `message` vem sem o motivo).
140
+ * Lê `body` em texto JSON (objeto ou lista) e devolve `error.message`.
141
+ */
142
+ function bodyMessage(err) {
143
+ const body = err && typeof err === "object" ? err.body : void 0;
144
+ if (typeof body !== "string" || !body.trim()) return null;
145
+ try {
146
+ let j = JSON.parse(body);
147
+ if (Array.isArray(j)) j = j[0];
148
+ const m = j?.error?.message;
149
+ return typeof m === "string" && m ? m : null;
150
+ } catch {
151
+ return null;
152
+ }
135
153
  }
136
154
  /**
137
155
  * Converte um erro nativo de SDK num `LLMError` normalizado.
@@ -1,6 +1,6 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
2
  const require_env = require("../env-B1ffNsxb.cjs");
3
- const require_schema = require("../schema-qS-xTTIs.cjs");
3
+ const require_schema = require("../schema-CdxlpDZe.cjs");
4
4
  // src/eval/index.ts
5
5
  function toExample(item) {
6
6
  if (!item || typeof item !== "object") throw new TypeError(`exemplo deve ser um objeto { inputs, reference, metadata }`);
@@ -1,5 +1,5 @@
1
1
  import { n as getEnv } from "../env-BH4ulZ4_.js";
2
- import { t as jsonSchema } from "../schema-DCaQOk49.js";
2
+ import { t as jsonSchema } from "../schema-CbsM_8LN.js";
3
3
  // src/eval/index.ts
4
4
  function toExample(item) {
5
5
  if (!item || typeof item !== "object") throw new TypeError(`exemplo deve ser um objeto { inputs, reference, metadata }`);
@@ -1,10 +1,10 @@
1
- import { _ as UnsupportedError, i as BadRequestError, m as ServerError, v as classify } from "./errors-hp-4UePr.js";
1
+ import { _ as UnsupportedError, i as BadRequestError, m as ServerError, v as classify } from "./errors-KpUEVi-c.js";
2
2
  import { a as ToolCall, l as bytesToBase64, n as Completion, o as imageBase64 } from "./message-0wKCrEp2.js";
3
3
  import { n as getEnv } from "./env-BH4ulZ4_.js";
4
- import { a as mcpTools, l as toolResultText, s as splitMcp, t as MCPClient, u as toolSourceFromSession } from "./client-BALmyl1D.js";
5
- import { n as applyProfile, t as Provider } from "./base-B9vWogrC.js";
6
- import { n as parseJsonText } from "./schema-DCaQOk49.js";
7
- import { i as splitTools } from "./version-DgKb-29E.js";
4
+ import { a as mcpTools, l as toolResultText, s as splitMcp, t as MCPClient, u as toolSourceFromSession } from "./client-DZpdYalG.js";
5
+ import { n as applyProfile, t as Provider } from "./base-C5ATrYPo.js";
6
+ import { n as parseJsonText } from "./schema-CbsM_8LN.js";
7
+ import { i as splitTools } from "./version-Ci5H2ETD.js";
8
8
  import { t as cleanGeminiSchema } from "./gemini-schema-BLKtypnG.js";
9
9
  // src/providers/gemini.ts
10
10
  /**
@@ -1,10 +1,10 @@
1
- const require_errors = require("./errors-BJIPDLwX.cjs");
1
+ const require_errors = require("./errors-BqivrjKZ.cjs");
2
2
  const require_message = require("./message-DCvWw0dF.cjs");
3
3
  const require_env = require("./env-B1ffNsxb.cjs");
4
- const require_client = require("./client-Bb1r1q6G.cjs");
5
- const require_base = require("./base-8ZFKIzBj.cjs");
6
- const require_schema = require("./schema-qS-xTTIs.cjs");
7
- const require_version = require("./version-3n0cxDMH.cjs");
4
+ const require_client = require("./client-BL8R_mzp.cjs");
5
+ const require_base = require("./base-D_vFDbHM.cjs");
6
+ const require_schema = require("./schema-CdxlpDZe.cjs");
7
+ const require_version = require("./version-B-zy_KoD.cjs");
8
8
  const require_gemini_schema = require("./gemini-schema-BwcTPvV1.cjs");
9
9
  // src/providers/gemini.ts
10
10
  /**
package/dist/index.cjs CHANGED
@@ -1,15 +1,15 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_client = require("./client-Bb1r1q6G.cjs");
2
+ const require_client = require("./client-BL8R_mzp.cjs");
3
3
  const require_message = require("./message-DCvWw0dF.cjs");
4
- const require_version = require("./version-3n0cxDMH.cjs");
5
- const require_schema = require("./schema-qS-xTTIs.cjs");
6
- const require_errors = require("./errors-BJIPDLwX.cjs");
4
+ const require_version = require("./version-B-zy_KoD.cjs");
5
+ const require_schema = require("./schema-CdxlpDZe.cjs");
6
+ const require_errors = require("./errors-BqivrjKZ.cjs");
7
7
  const require_files = require("./files-DhchXoMT.cjs");
8
8
  const require_observability = require("./observability-D1Eiz3hh.cjs");
9
9
  const require_env = require("./env-B1ffNsxb.cjs");
10
10
  const require_context = require("./context-BWyYfOyr.cjs");
11
11
  const require_gemini_schema = require("./gemini-schema-BwcTPvV1.cjs");
12
- const require_base = require("./base-8ZFKIzBj.cjs");
12
+ const require_base = require("./base-D_vFDbHM.cjs");
13
13
  // src/providers/registry.ts
14
14
  const REGISTRY = /* @__PURE__ */ new Map();
15
15
  /** Registra (ou sobrescreve) um provider. */
@@ -34,17 +34,17 @@ function availableProviders() {
34
34
  * Registro dos providers embutidos. O módulo de cada adapter só é carregado quando
35
35
  * o provider é usado; o SDK, só quando o cliente é criado.
36
36
  */
37
- registerProvider("openai", async () => (await Promise.resolve().then(() => require("./openai-compat-uVcRxBHu.cjs"))).OpenAIProvider);
38
- registerProvider("azure", async () => (await Promise.resolve().then(() => require("./openai-compat-uVcRxBHu.cjs"))).AzureOpenAIProvider);
39
- registerProvider("groq", async () => (await Promise.resolve().then(() => require("./openai-compat-uVcRxBHu.cjs"))).GroqProvider);
40
- registerProvider("openrouter", async () => (await Promise.resolve().then(() => require("./openai-compat-uVcRxBHu.cjs"))).OpenRouterProvider);
41
- registerProvider("deepseek", async () => (await Promise.resolve().then(() => require("./openai-compat-uVcRxBHu.cjs"))).DeepSeekProvider);
42
- registerProvider("anthropic", async () => (await Promise.resolve().then(() => require("./anthropic-6sRl3i7z.cjs"))).AnthropicProvider);
43
- registerProvider("gemini", async () => (await Promise.resolve().then(() => require("./gemini-CqWTQz_y.cjs"))).GeminiProvider);
44
- registerProvider("vertex", async () => (await Promise.resolve().then(() => require("./gemini-CqWTQz_y.cjs"))).VertexProvider);
45
- registerProvider("ollama", async () => (await Promise.resolve().then(() => require("./ollama-DvKNKF2I.cjs"))).OllamaProvider);
46
- registerProvider("bedrock", async () => (await Promise.resolve().then(() => require("./bedrock-Cjek46Mw.cjs"))).BedrockProvider);
47
- registerProvider("mistral", async () => (await Promise.resolve().then(() => require("./mistral-DD9PTIYO.cjs"))).MistralProvider);
37
+ registerProvider("openai", async () => (await Promise.resolve().then(() => require("./openai-compat-ByFDerqO.cjs"))).OpenAIProvider);
38
+ registerProvider("azure", async () => (await Promise.resolve().then(() => require("./openai-compat-ByFDerqO.cjs"))).AzureOpenAIProvider);
39
+ registerProvider("groq", async () => (await Promise.resolve().then(() => require("./openai-compat-ByFDerqO.cjs"))).GroqProvider);
40
+ registerProvider("openrouter", async () => (await Promise.resolve().then(() => require("./openai-compat-ByFDerqO.cjs"))).OpenRouterProvider);
41
+ registerProvider("deepseek", async () => (await Promise.resolve().then(() => require("./openai-compat-ByFDerqO.cjs"))).DeepSeekProvider);
42
+ registerProvider("anthropic", async () => (await Promise.resolve().then(() => require("./anthropic-tfJwKydD.cjs"))).AnthropicProvider);
43
+ registerProvider("gemini", async () => (await Promise.resolve().then(() => require("./gemini-CdN6pmdE.cjs"))).GeminiProvider);
44
+ registerProvider("vertex", async () => (await Promise.resolve().then(() => require("./gemini-CdN6pmdE.cjs"))).VertexProvider);
45
+ registerProvider("ollama", async () => (await Promise.resolve().then(() => require("./ollama-BmQl_4JI.cjs"))).OllamaProvider);
46
+ registerProvider("bedrock", async () => (await Promise.resolve().then(() => require("./bedrock-CkucrX50.cjs"))).BedrockProvider);
47
+ registerProvider("mistral", async () => (await Promise.resolve().then(() => require("./mistral-BEUTwkgk.cjs"))).MistralProvider);
48
48
  // src/agents.ts
49
49
  /** Memória de longo prazo sobre um RAG: `recall` busca; `remember` indexa. Best-effort. */
50
50
  var RAGMemory = class {
@@ -2890,6 +2890,7 @@ var LLM = class LLM {
2890
2890
  let err;
2891
2891
  for (let attempt = 0; attempt <= cand.maxRetries; attempt++) {
2892
2892
  signal?.throwIfAborted();
2893
+ const t0 = performance.now();
2893
2894
  let it;
2894
2895
  let first;
2895
2896
  try {
@@ -2909,7 +2910,6 @@ var LLM = class LLM {
2909
2910
  break;
2910
2911
  }
2911
2912
  if (first.done) return;
2912
- const t0 = performance.now();
2913
2913
  const pedacos = [first.value];
2914
2914
  yield first.value;
2915
2915
  while (true) {
@@ -3787,10 +3787,7 @@ var InteractionFunctionCall = class {
3787
3787
  type: "function_result",
3788
3788
  name: this.name,
3789
3789
  call_id: this.id,
3790
- result: [{
3791
- type: "text",
3792
- text: outputText(output)
3793
- }]
3790
+ result: outputText(output)
3794
3791
  };
3795
3792
  if (options.isError) out.is_error = true;
3796
3793
  return out;
@@ -4341,7 +4338,7 @@ var GeminiInteractions = class GeminiInteractions {
4341
4338
  * lib não puxa o adapter para o bundle principal.
4342
4339
  */
4343
4340
  provider() {
4344
- this.providerPromise ??= Promise.resolve().then(() => require("./gemini-CqWTQz_y.cjs")).then((m) => {
4341
+ this.providerPromise ??= Promise.resolve().then(() => require("./gemini-CdN6pmdE.cjs")).then((m) => {
4345
4342
  const Base = this.options.vertexai ? m.VertexProvider : m.GeminiProvider;
4346
4343
  class Interactions extends Base {
4347
4344
  nativeClient() {
package/dist/index.d.cts CHANGED
@@ -357,10 +357,8 @@ interface InteractionFunctionResult {
357
357
  type: "function_result";
358
358
  name: string;
359
359
  call_id: string;
360
- result: Array<{
361
- type: "text";
362
- text: string;
363
- }>;
360
+ /** Texto simples: a lista de partes conta como resposta "multimodal", que o gemini-2.5-flash recusa. */
361
+ result: string;
364
362
  is_error?: true;
365
363
  }
366
364
  /** Pedido de função do modelo (step `function_call`). */
package/dist/index.d.ts CHANGED
@@ -357,10 +357,8 @@ interface InteractionFunctionResult {
357
357
  type: "function_result";
358
358
  name: string;
359
359
  call_id: string;
360
- result: Array<{
361
- type: "text";
362
- text: string;
363
- }>;
360
+ /** Texto simples: a lista de partes conta como resposta "multimodal", que o gemini-2.5-flash recusa. */
361
+ result: string;
364
362
  is_error?: true;
365
363
  }
366
364
  /** Pedido de função do modelo (step `function_call`). */
package/dist/index.js CHANGED
@@ -1,14 +1,14 @@
1
- import { a as mcpTools, l as toolResultText, n as MCPServer, o as runAgent, s as splitMcp, t as MCPClient } from "./client-BALmyl1D.js";
1
+ import { a as mcpTools, l as toolResultText, n as MCPServer, o as runAgent, s as splitMcp, t as MCPClient } from "./client-DZpdYalG.js";
2
2
  import { a as ToolCall, c as textPart, i as Message, l as bytesToBase64, n as Completion, o as imageBase64, r as Image, s as imageDataUri, t as Audio } from "./message-0wKCrEp2.js";
3
- import { _ as webFetch, a as toTool, c as NativeTool, d as fileSearch, f as googleMaps, g as urlContext, h as nativeTool, i as splitTools, l as codeExecution, m as isNative, n as Tool, o as tool, p as imageGeneration, r as normalizeTools, s as NATIVE_TOOL_KINDS, t as VERSION, u as computerUse, v as webSearch } from "./version-DgKb-29E.js";
4
- import { n as parseJsonText, r as resolveSchema, t as jsonSchema } from "./schema-DCaQOk49.js";
5
- import { _ as UnsupportedError, a as DEFAULT_FAILOVER, c as NotFoundError, d as ProviderError, f as RateLimitError, g as TruncatedError, h as TRANSIENT, i as BadRequestError, l as OutputValidationError, m as ServerError, n as APITimeoutError, o as GuardrailError, p as SchemaValidationError, r as AuthError, s as LLMError, t as APIConnectionError, u as OverloadedError, v as classify, y as isInstanceOfAny } from "./errors-hp-4UePr.js";
3
+ import { _ as webFetch, a as toTool, c as NativeTool, d as fileSearch, f as googleMaps, g as urlContext, h as nativeTool, i as splitTools, l as codeExecution, m as isNative, n as Tool, o as tool, p as imageGeneration, r as normalizeTools, s as NATIVE_TOOL_KINDS, t as VERSION, u as computerUse, v as webSearch } from "./version-Ci5H2ETD.js";
4
+ import { n as parseJsonText, r as resolveSchema, t as jsonSchema } from "./schema-CbsM_8LN.js";
5
+ import { _ as UnsupportedError, a as DEFAULT_FAILOVER, c as NotFoundError, d as ProviderError, f as RateLimitError, g as TruncatedError, h as TRANSIENT, i as BadRequestError, l as OutputValidationError, m as ServerError, n as APITimeoutError, o as GuardrailError, p as SchemaValidationError, r as AuthError, s as LLMError, t as APIConnectionError, u as OverloadedError, v as classify, y as isInstanceOfAny } from "./errors-KpUEVi-c.js";
6
6
  import { i as toParts, n as Document, r as DocumentError, t as DEFAULT_MAX_PDF_PAGES } from "./files-lcQv3hAq.js";
7
7
  import { a as feedback, i as droppedCount, l as summarizeInput, n as autoReportError, o as flushObservability, r as detectCapabilities, s as observabilitySession, t as autoReport } from "./observability-DQW4up31.js";
8
8
  import { n as getEnv, t as envFlag } from "./env-BH4ulZ4_.js";
9
9
  import { i as requestHeaders, n as currentUser, o as warn } from "./context-CvNVqdqz.js";
10
10
  import { t as cleanGeminiSchema } from "./gemini-schema-BLKtypnG.js";
11
- import { i as registerProfile, n as applyProfile, r as registerAlias, t as Provider } from "./base-B9vWogrC.js";
11
+ import { i as registerProfile, n as applyProfile, r as registerAlias, t as Provider } from "./base-C5ATrYPo.js";
12
12
  // src/providers/registry.ts
13
13
  const REGISTRY = /* @__PURE__ */ new Map();
14
14
  /** Registra (ou sobrescreve) um provider. */
@@ -33,17 +33,17 @@ function availableProviders() {
33
33
  * Registro dos providers embutidos. O módulo de cada adapter só é carregado quando
34
34
  * o provider é usado; o SDK, só quando o cliente é criado.
35
35
  */
36
- registerProvider("openai", async () => (await import("./openai-compat-CJRRaqmi.js")).OpenAIProvider);
37
- registerProvider("azure", async () => (await import("./openai-compat-CJRRaqmi.js")).AzureOpenAIProvider);
38
- registerProvider("groq", async () => (await import("./openai-compat-CJRRaqmi.js")).GroqProvider);
39
- registerProvider("openrouter", async () => (await import("./openai-compat-CJRRaqmi.js")).OpenRouterProvider);
40
- registerProvider("deepseek", async () => (await import("./openai-compat-CJRRaqmi.js")).DeepSeekProvider);
41
- registerProvider("anthropic", async () => (await import("./anthropic-BIKZUdHL.js")).AnthropicProvider);
42
- registerProvider("gemini", async () => (await import("./gemini-VIK6GzRx.js")).GeminiProvider);
43
- registerProvider("vertex", async () => (await import("./gemini-VIK6GzRx.js")).VertexProvider);
44
- registerProvider("ollama", async () => (await import("./ollama-CtOa_75e.js")).OllamaProvider);
45
- registerProvider("bedrock", async () => (await import("./bedrock-oWZQlwCt.js")).BedrockProvider);
46
- registerProvider("mistral", async () => (await import("./mistral-rbVDtlHt.js")).MistralProvider);
36
+ registerProvider("openai", async () => (await import("./openai-compat-B1z86xIs.js")).OpenAIProvider);
37
+ registerProvider("azure", async () => (await import("./openai-compat-B1z86xIs.js")).AzureOpenAIProvider);
38
+ registerProvider("groq", async () => (await import("./openai-compat-B1z86xIs.js")).GroqProvider);
39
+ registerProvider("openrouter", async () => (await import("./openai-compat-B1z86xIs.js")).OpenRouterProvider);
40
+ registerProvider("deepseek", async () => (await import("./openai-compat-B1z86xIs.js")).DeepSeekProvider);
41
+ registerProvider("anthropic", async () => (await import("./anthropic-BkjBgjzE.js")).AnthropicProvider);
42
+ registerProvider("gemini", async () => (await import("./gemini-CUwnzJxK.js")).GeminiProvider);
43
+ registerProvider("vertex", async () => (await import("./gemini-CUwnzJxK.js")).VertexProvider);
44
+ registerProvider("ollama", async () => (await import("./ollama-pUclkwVX.js")).OllamaProvider);
45
+ registerProvider("bedrock", async () => (await import("./bedrock-G7_ljnr2.js")).BedrockProvider);
46
+ registerProvider("mistral", async () => (await import("./mistral-D8s4L9F4.js")).MistralProvider);
47
47
  // src/agents.ts
48
48
  /** Memória de longo prazo sobre um RAG: `recall` busca; `remember` indexa. Best-effort. */
49
49
  var RAGMemory = class {
@@ -2889,6 +2889,7 @@ var LLM = class LLM {
2889
2889
  let err;
2890
2890
  for (let attempt = 0; attempt <= cand.maxRetries; attempt++) {
2891
2891
  signal?.throwIfAborted();
2892
+ const t0 = performance.now();
2892
2893
  let it;
2893
2894
  let first;
2894
2895
  try {
@@ -2908,7 +2909,6 @@ var LLM = class LLM {
2908
2909
  break;
2909
2910
  }
2910
2911
  if (first.done) return;
2911
- const t0 = performance.now();
2912
2912
  const pedacos = [first.value];
2913
2913
  yield first.value;
2914
2914
  while (true) {
@@ -3786,10 +3786,7 @@ var InteractionFunctionCall = class {
3786
3786
  type: "function_result",
3787
3787
  name: this.name,
3788
3788
  call_id: this.id,
3789
- result: [{
3790
- type: "text",
3791
- text: outputText(output)
3792
- }]
3789
+ result: outputText(output)
3793
3790
  };
3794
3791
  if (options.isError) out.is_error = true;
3795
3792
  return out;
@@ -4340,7 +4337,7 @@ var GeminiInteractions = class GeminiInteractions {
4340
4337
  * lib não puxa o adapter para o bundle principal.
4341
4338
  */
4342
4339
  provider() {
4343
- this.providerPromise ??= import("./gemini-VIK6GzRx.js").then((m) => {
4340
+ this.providerPromise ??= import("./gemini-CUwnzJxK.js").then((m) => {
4344
4341
  const Base = this.options.vertexai ? m.VertexProvider : m.GeminiProvider;
4345
4342
  class Interactions extends Base {
4346
4343
  nativeClient() {
@@ -1,6 +1,6 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_client = require("../client-Bb1r1q6G.cjs");
3
- const require_server = require("../server-uzd_KbIF.cjs");
2
+ const require_client = require("../client-BL8R_mzp.cjs");
3
+ const require_server = require("../server-B7zpcfX7.cjs");
4
4
  const require_context = require("../context-BWyYfOyr.cjs");
5
5
  exports.CodeMode = require_server.CodeMode;
6
6
  exports.DEFAULT_LIMITS = require_server.DEFAULT_LIMITS;
package/dist/mcp/index.js CHANGED
@@ -1,4 +1,4 @@
1
- import { a as mcpTools, c as toRoot, i as mcpContentToParts, l as toolResultText, n as MCPServer, o as runAgent, r as makeSamplingHandler, s as splitMcp, t as MCPClient, u as toolSourceFromSession } from "../client-BALmyl1D.js";
2
- import { a as asCodeMode, i as DEFAULT_LIMITS, n as buildMcpServer, r as CodeMode, t as buildMcpHandler } from "../server-q2tlgVLB.js";
1
+ import { a as mcpTools, c as toRoot, i as mcpContentToParts, l as toolResultText, n as MCPServer, o as runAgent, r as makeSamplingHandler, s as splitMcp, t as MCPClient, u as toolSourceFromSession } from "../client-DZpdYalG.js";
2
+ import { a as asCodeMode, i as DEFAULT_LIMITS, n as buildMcpServer, r as CodeMode, t as buildMcpHandler } from "../server-CzUhVb5m.js";
3
3
  import { i as requestHeaders, n as currentUser } from "../context-CvNVqdqz.js";
4
4
  export { CodeMode, DEFAULT_LIMITS, MCPClient, MCPServer, asCodeMode, buildMcpHandler, buildMcpServer, currentUser, makeSamplingHandler, mcpContentToParts, mcpTools, requestHeaders, runAgent, splitMcp, toRoot, toolResultText, toolSourceFromSession };
@@ -1,8 +1,8 @@
1
- const require_errors = require("./errors-BJIPDLwX.cjs");
1
+ const require_errors = require("./errors-BqivrjKZ.cjs");
2
2
  const require_message = require("./message-DCvWw0dF.cjs");
3
- const require_version = require("./version-3n0cxDMH.cjs");
4
- const require_base = require("./base-8ZFKIzBj.cjs");
5
- const require_schema = require("./schema-qS-xTTIs.cjs");
3
+ const require_version = require("./version-B-zy_KoD.cjs");
4
+ const require_base = require("./base-D_vFDbHM.cjs");
5
+ const require_schema = require("./schema-CdxlpDZe.cjs");
6
6
  // src/providers/mistral.ts
7
7
  /**
8
8
  * Provider Mistral (SDK oficial `@mistralai/mistralai`, peer dependency opcional):
@@ -1,8 +1,8 @@
1
- import { _ as UnsupportedError, m as ServerError, s as LLMError, v as classify } from "./errors-hp-4UePr.js";
1
+ import { _ as UnsupportedError, m as ServerError, s as LLMError, v as classify } from "./errors-KpUEVi-c.js";
2
2
  import { a as ToolCall, l as bytesToBase64, n as Completion, s as imageDataUri } from "./message-0wKCrEp2.js";
3
- import { c as NativeTool, i as splitTools } from "./version-DgKb-29E.js";
4
- import { n as applyProfile, t as Provider } from "./base-B9vWogrC.js";
5
- import { n as parseJsonText } from "./schema-DCaQOk49.js";
3
+ import { c as NativeTool, i as splitTools } from "./version-Ci5H2ETD.js";
4
+ import { n as applyProfile, t as Provider } from "./base-C5ATrYPo.js";
5
+ import { n as parseJsonText } from "./schema-CbsM_8LN.js";
6
6
  // src/providers/mistral.ts
7
7
  /**
8
8
  * Provider Mistral (SDK oficial `@mistralai/mistralai`, peer dependency opcional):
@@ -3,7 +3,7 @@ const require_env = require("../env-B1ffNsxb.cjs");
3
3
  const require_server = require("../server-C0wyAefS.cjs");
4
4
  const require_files = require("../files-DhchXoMT.cjs");
5
5
  const require_message = require("../message-DCvWw0dF.cjs");
6
- const require_server$1 = require("../server-uzd_KbIF.cjs");
6
+ const require_server$1 = require("../server-B7zpcfX7.cjs");
7
7
  const require_observability = require("../observability-D1Eiz3hh.cjs");
8
8
  let node_fs = require("node:fs");
9
9
  let node_os = require("node:os");
@@ -2,7 +2,7 @@ import { t as envFlag } from "../env-BH4ulZ4_.js";
2
2
  import { t as buildA2aHandler } from "../server-zdrObsBn.js";
3
3
  import { n as Document } from "../files-lcQv3hAq.js";
4
4
  import { r as Image, t as Audio } from "../message-0wKCrEp2.js";
5
- import { n as buildMcpServer, t as buildMcpHandler } from "../server-q2tlgVLB.js";
5
+ import { n as buildMcpServer, t as buildMcpHandler } from "../server-CzUhVb5m.js";
6
6
  import { c as setSessionGetter, o as flushObservability, s as observabilitySession } from "../observability-DQW4up31.js";
7
7
  import { existsSync, readFileSync, statSync } from "node:fs";
8
8
  import { homedir } from "node:os";
@@ -1,9 +1,9 @@
1
- const require_errors = require("./errors-BJIPDLwX.cjs");
1
+ const require_errors = require("./errors-BqivrjKZ.cjs");
2
2
  const require_message = require("./message-DCvWw0dF.cjs");
3
3
  const require_env = require("./env-B1ffNsxb.cjs");
4
- const require_version = require("./version-3n0cxDMH.cjs");
5
- const require_base = require("./base-8ZFKIzBj.cjs");
6
- const require_schema = require("./schema-qS-xTTIs.cjs");
4
+ const require_version = require("./version-B-zy_KoD.cjs");
5
+ const require_base = require("./base-D_vFDbHM.cjs");
6
+ const require_schema = require("./schema-CdxlpDZe.cjs");
7
7
  const CLOUD_HOST = "https://ollama.com";
8
8
  const TOP_LEVEL = /* @__PURE__ */ new Set([
9
9
  "think",
@@ -1,9 +1,9 @@
1
- import { _ as UnsupportedError, c as NotFoundError, m as ServerError, s as LLMError, t as APIConnectionError, v as classify } from "./errors-hp-4UePr.js";
1
+ import { _ as UnsupportedError, c as NotFoundError, m as ServerError, s as LLMError, t as APIConnectionError, v as classify } from "./errors-KpUEVi-c.js";
2
2
  import { a as ToolCall, l as bytesToBase64, n as Completion } from "./message-0wKCrEp2.js";
3
3
  import { n as getEnv } from "./env-BH4ulZ4_.js";
4
- import { c as NativeTool, i as splitTools, n as Tool } from "./version-DgKb-29E.js";
5
- import { n as applyProfile, t as Provider } from "./base-B9vWogrC.js";
6
- import { n as parseJsonText } from "./schema-DCaQOk49.js";
4
+ import { c as NativeTool, i as splitTools, n as Tool } from "./version-Ci5H2ETD.js";
5
+ import { n as applyProfile, t as Provider } from "./base-C5ATrYPo.js";
6
+ import { n as parseJsonText } from "./schema-CbsM_8LN.js";
7
7
  const CLOUD_HOST = "https://ollama.com";
8
8
  const TOP_LEVEL = /* @__PURE__ */ new Set([
9
9
  "think",
@@ -1,10 +1,10 @@
1
- import { _ as UnsupportedError, l as OutputValidationError, m as ServerError, v as classify } from "./errors-hp-4UePr.js";
1
+ import { _ as UnsupportedError, l as OutputValidationError, m as ServerError, v as classify } from "./errors-KpUEVi-c.js";
2
2
  import { n as getEnv } from "./env-BH4ulZ4_.js";
3
- import { s as splitMcp } from "./client-BALmyl1D.js";
3
+ import { s as splitMcp } from "./client-DZpdYalG.js";
4
4
  import { a as ToolCall, n as Completion, s as imageDataUri } from "./message-0wKCrEp2.js";
5
- import { n as applyProfile, t as Provider } from "./base-B9vWogrC.js";
6
- import { n as parseJsonText } from "./schema-DCaQOk49.js";
7
- import { c as NativeTool, i as splitTools } from "./version-DgKb-29E.js";
5
+ import { n as applyProfile, t as Provider } from "./base-C5ATrYPo.js";
6
+ import { n as parseJsonText } from "./schema-CbsM_8LN.js";
7
+ import { c as NativeTool, i as splitTools } from "./version-Ci5H2ETD.js";
8
8
  // src/providers/openai-responses.ts
9
9
  /**
10
10
  * Responses API da OpenAI (e do Azure): o único endpoint com as tools nativas
@@ -1,10 +1,10 @@
1
- const require_errors = require("./errors-BJIPDLwX.cjs");
1
+ const require_errors = require("./errors-BqivrjKZ.cjs");
2
2
  const require_env = require("./env-B1ffNsxb.cjs");
3
- const require_client = require("./client-Bb1r1q6G.cjs");
3
+ const require_client = require("./client-BL8R_mzp.cjs");
4
4
  const require_message = require("./message-DCvWw0dF.cjs");
5
- const require_base = require("./base-8ZFKIzBj.cjs");
6
- const require_schema = require("./schema-qS-xTTIs.cjs");
7
- const require_version = require("./version-3n0cxDMH.cjs");
5
+ const require_base = require("./base-D_vFDbHM.cjs");
6
+ const require_schema = require("./schema-CdxlpDZe.cjs");
7
+ const require_version = require("./version-B-zy_KoD.cjs");
8
8
  // src/providers/openai-responses.ts
9
9
  /**
10
10
  * Responses API da OpenAI (e do Azure): o único endpoint com as tools nativas
@@ -1,7 +1,7 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_version = require("../version-3n0cxDMH.cjs");
2
+ const require_version = require("../version-B-zy_KoD.cjs");
3
3
  const require_env = require("../env-B1ffNsxb.cjs");
4
- const require_schema = require("../schema-qS-xTTIs.cjs");
4
+ const require_schema = require("../schema-CdxlpDZe.cjs");
5
5
  // src/prebuilt/http.ts
6
6
  /**
7
7
  * HTTP das ferramentas pré-prontas, com `fetch` global (roda em Node, Bun, Deno e edge).
@@ -1,6 +1,6 @@
1
- import { o as tool, t as VERSION } from "../version-DgKb-29E.js";
1
+ import { o as tool, t as VERSION } from "../version-Ci5H2ETD.js";
2
2
  import { n as getEnv, t as envFlag } from "../env-BH4ulZ4_.js";
3
- import { t as jsonSchema } from "../schema-DCaQOk49.js";
3
+ import { t as jsonSchema } from "../schema-CbsM_8LN.js";
4
4
  // src/prebuilt/http.ts
5
5
  /**
6
6
  * HTTP das ferramentas pré-prontas, com `fetch` global (roda em Node, Bun, Deno e edge).
@@ -1,6 +1,6 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
2
  const require_files = require("../files-DhchXoMT.cjs");
3
- const require_errors = require("../errors-BJIPDLwX.cjs");
3
+ const require_errors = require("../errors-BqivrjKZ.cjs");
4
4
  const require_env = require("../env-B1ffNsxb.cjs");
5
5
  // src/rag/store.ts
6
6
  /** Tokenização para busca lexical: minúsculas, sem pontuação. */
package/dist/rag/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { i as toParts } from "../files-lcQv3hAq.js";
2
- import { v as classify } from "../errors-hp-4UePr.js";
2
+ import { v as classify } from "../errors-KpUEVi-c.js";
3
3
  import { n as getEnv } from "../env-BH4ulZ4_.js";
4
4
  // src/rag/store.ts
5
5
  /** Tokenização para busca lexical: minúsculas, sem pontuação. */
@@ -1,4 +1,4 @@
1
- import { p as SchemaValidationError } from "./errors-hp-4UePr.js";
1
+ import { p as SchemaValidationError } from "./errors-KpUEVi-c.js";
2
2
  // src/schema.ts
3
3
  /**
4
4
  * Schemas de structured output, sem depender de nenhuma lib de validação.
@@ -1,4 +1,4 @@
1
- const require_errors = require("./errors-BJIPDLwX.cjs");
1
+ const require_errors = require("./errors-BqivrjKZ.cjs");
2
2
  // src/schema.ts
3
3
  /**
4
4
  * Schemas de structured output, sem depender de nenhuma lib de validação.
@@ -1,5 +1,5 @@
1
1
  const require_context = require("./context-BWyYfOyr.cjs");
2
- const require_version = require("./version-3n0cxDMH.cjs");
2
+ const require_version = require("./version-B-zy_KoD.cjs");
3
3
  // src/mcp/invoke.ts
4
4
  /** Nomes liberados nesta requisição (`null` = todos). */
5
5
  async function allowedNames(filter, ctx) {
@@ -600,7 +600,7 @@ async function prepare(sync, options) {
600
600
  always,
601
601
  serverInfo: {
602
602
  name: options.name ?? "jangada",
603
- version: options.version ?? "1.0.2",
603
+ version: options.version ?? "1.0.4",
604
604
  ...identity(sdk, options)
605
605
  }
606
606
  };
@@ -1,5 +1,5 @@
1
1
  import { a as runWithRequestContext, o as warn, r as normalizeHeaders, t as EMPTY_CONTEXT } from "./context-CvNVqdqz.js";
2
- import { a as toTool, c as NativeTool, n as Tool } from "./version-DgKb-29E.js";
2
+ import { a as toTool, c as NativeTool, n as Tool } from "./version-Ci5H2ETD.js";
3
3
  // src/mcp/invoke.ts
4
4
  /** Nomes liberados nesta requisição (`null` = todos). */
5
5
  async function allowedNames(filter, ctx) {
@@ -600,7 +600,7 @@ async function prepare(sync, options) {
600
600
  always,
601
601
  serverInfo: {
602
602
  name: options.name ?? "jangada",
603
- version: options.version ?? "1.0.2",
603
+ version: options.version ?? "1.0.4",
604
604
  ...identity(sdk, options)
605
605
  }
606
606
  };
@@ -1,4 +1,4 @@
1
- const require_schema = require("./schema-qS-xTTIs.cjs");
1
+ const require_schema = require("./schema-CdxlpDZe.cjs");
2
2
  // src/native-tools.ts
3
3
  const NATIVE_TOOL_KINDS = [
4
4
  "web_search",
@@ -181,7 +181,7 @@ function splitTools(tools) {
181
181
  }
182
182
  // src/version.ts
183
183
  /** Versão do pacote `jangada-ai` (npm). Atualizada a cada release junto do `package.json`. */
184
- const VERSION = "1.0.2";
184
+ const VERSION = "1.0.4";
185
185
  Object.defineProperty(exports, "NATIVE_TOOL_KINDS", {
186
186
  enumerable: true,
187
187
  get: function() {
@@ -1,4 +1,4 @@
1
- import { r as resolveSchema } from "./schema-DCaQOk49.js";
1
+ import { r as resolveSchema } from "./schema-CbsM_8LN.js";
2
2
  // src/native-tools.ts
3
3
  const NATIVE_TOOL_KINDS = [
4
4
  "web_search",
@@ -181,5 +181,5 @@ function splitTools(tools) {
181
181
  }
182
182
  // src/version.ts
183
183
  /** Versão do pacote `jangada-ai` (npm). Atualizada a cada release junto do `package.json`. */
184
- const VERSION = "1.0.2";
184
+ const VERSION = "1.0.4";
185
185
  export { webFetch as _, toTool as a, NativeTool as c, fileSearch as d, googleMaps as f, urlContext as g, nativeTool as h, splitTools as i, codeExecution as l, isNative as m, Tool as n, tool as o, imageGeneration as p, normalizeTools as r, NATIVE_TOOL_KINDS as s, VERSION as t, computerUse as u, webSearch as v };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "jangada-ai",
3
- "version": "1.0.2",
3
+ "version": "1.0.4",
4
4
  "description": "Camada fina e adaptável sobre SDKs de LLM em TypeScript: troque provider, modelo e chave sem mudar o resto do código",
5
5
  "type": "module",
6
6
  "license": "MIT",