@theokit/sdk 4.13.1 → 4.14.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 (36) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/{cron-C7catiH8.d.ts → cron-DY0uC1ng.d.ts} +7 -0
  3. package/dist/{cron-DK1WVZnI.d.cts → cron-ElTj1cSH.d.cts} +7 -0
  4. package/dist/cron.cjs +159 -21
  5. package/dist/cron.cjs.map +1 -1
  6. package/dist/cron.d.cts +1 -1
  7. package/dist/cron.d.ts +1 -1
  8. package/dist/cron.js +159 -21
  9. package/dist/cron.js.map +1 -1
  10. package/dist/eval.cjs +159 -21
  11. package/dist/eval.cjs.map +1 -1
  12. package/dist/eval.js +159 -21
  13. package/dist/eval.js.map +1 -1
  14. package/dist/index.cjs +162 -21
  15. package/dist/index.cjs.map +1 -1
  16. package/dist/index.d.cts +2 -2
  17. package/dist/index.d.ts +2 -2
  18. package/dist/index.js +162 -21
  19. package/dist/index.js.map +1 -1
  20. package/dist/internal/llm/openai.d.ts +29 -0
  21. package/dist/internal/providers/builtin/cerebras.d.ts +5 -0
  22. package/dist/internal/providers/builtin/cohere.d.ts +8 -0
  23. package/dist/internal/providers/builtin/deepinfra.d.ts +2 -0
  24. package/dist/internal/providers/builtin/google.d.ts +6 -0
  25. package/dist/internal/providers/builtin/groq.d.ts +2 -0
  26. package/dist/internal/providers/builtin/mistral.d.ts +2 -0
  27. package/dist/internal/providers/builtin/openai-compatible.d.ts +1 -0
  28. package/dist/internal/providers/builtin/perplexity.d.ts +5 -0
  29. package/dist/internal/providers/builtin/together.d.ts +2 -0
  30. package/dist/internal/providers/builtin/xai.d.ts +2 -0
  31. package/dist/models.cjs +124 -5
  32. package/dist/models.cjs.map +1 -1
  33. package/dist/models.js +124 -5
  34. package/dist/models.js.map +1 -1
  35. package/dist/types/provider-profile.d.ts +7 -0
  36. package/package.json +1 -1
package/dist/eval.cjs CHANGED
@@ -751,13 +751,13 @@ function setAgentFacade(facade) {
751
751
  globalThis[FACADE_KEY] = facade;
752
752
  }
753
753
  function getAgentFacade() {
754
- const registered3 = globalThis[FACADE_KEY];
755
- if (registered3 === void 0) {
754
+ const registered2 = globalThis[FACADE_KEY];
755
+ if (registered2 === void 0) {
756
756
  throw new Error(
757
757
  "internal: Agent facade not registered. The `agent.ts` module must be loaded before internal subsystems (LocalAgent.runUntil/fork, eval, scorers, cron) invoke it."
758
758
  );
759
759
  }
760
- return registered3;
760
+ return registered2;
761
761
  }
762
762
  var FACADE_KEY;
763
763
  var init_agent_factory_registry = __esm({
@@ -11402,7 +11402,13 @@ var ANTHROPIC = {
11402
11402
  baseUrl: "https://api.anthropic.com",
11403
11403
  modelsUrl: "https://api.anthropic.com/v1/models",
11404
11404
  hostname: "api.anthropic.com",
11405
- fallbackModels: ["claude-opus-4-7", "claude-sonnet-4-6", "claude-haiku-4-5-20251001"]
11405
+ fallbackModels: ["claude-opus-4-7", "claude-sonnet-4-6", "claude-haiku-4-5-20251001"],
11406
+ // M45 — the Anthropic beta-features header (interleaved thinking + fine-grained tool streaming). An
11407
+ // Anthropic API constant, adapted verbatim from OpenCode's anthropic plugin (MIT © 2025 opencode). The
11408
+ // SANCTIONED behavior delta of M45 (ADR D4) — consumed by the anthropic transport's extraHeaders wiring.
11409
+ extraHeaders: {
11410
+ "anthropic-beta": "interleaved-thinking-2025-05-14,fine-grained-tool-streaming-2025-05-14"
11411
+ }
11406
11412
  };
11407
11413
 
11408
11414
  // src/internal/providers/builtin/bedrock.ts
@@ -11437,6 +11443,44 @@ function resolveBedrockBaseUrl(modelId) {
11437
11443
  return `https://bedrock-runtime.${region}.amazonaws.com`;
11438
11444
  }
11439
11445
 
11446
+ // src/internal/providers/builtin/openai-compatible.ts
11447
+ function openAiCompatibleProfile(p) {
11448
+ return {
11449
+ apiMode: "chat_completions",
11450
+ authType: "api_key",
11451
+ fallbackModels: [],
11452
+ ...p
11453
+ };
11454
+ }
11455
+
11456
+ // src/internal/providers/builtin/cerebras.ts
11457
+ var CEREBRAS = openAiCompatibleProfile({
11458
+ name: "cerebras",
11459
+ baseUrl: "https://api.cerebras.ai/v1",
11460
+ envVars: ["CEREBRAS_API_KEY"],
11461
+ fallbackModels: ["gpt-oss-120b", "zai-glm-4.7"],
11462
+ extraHeaders: { "X-Cerebras-3rd-Party-Integration": "theokit" },
11463
+ hostname: "api.cerebras.ai"
11464
+ });
11465
+
11466
+ // src/internal/providers/builtin/cohere.ts
11467
+ var COHERE = openAiCompatibleProfile({
11468
+ name: "cohere",
11469
+ baseUrl: "https://api.cohere.ai/compatibility/v1",
11470
+ envVars: ["COHERE_API_KEY", "CO_API_KEY"],
11471
+ fallbackModels: ["command-a-03-2025"],
11472
+ hostname: "api.cohere.ai"
11473
+ });
11474
+
11475
+ // src/internal/providers/builtin/deepinfra.ts
11476
+ var DEEPINFRA = openAiCompatibleProfile({
11477
+ name: "deepinfra",
11478
+ baseUrl: "https://api.deepinfra.com/v1/openai",
11479
+ envVars: ["DEEPINFRA_API_KEY"],
11480
+ fallbackModels: ["Qwen/Qwen3-32B"],
11481
+ hostname: "api.deepinfra.com"
11482
+ });
11483
+
11440
11484
  // src/internal/providers/builtin/gemini.ts
11441
11485
  var GEMINI = {
11442
11486
  name: "gemini",
@@ -11448,6 +11492,24 @@ var GEMINI = {
11448
11492
  fallbackModels: ["google/gemini-2.0-flash-001"]
11449
11493
  };
11450
11494
 
11495
+ // src/internal/providers/builtin/google.ts
11496
+ var GOOGLE = openAiCompatibleProfile({
11497
+ name: "google",
11498
+ baseUrl: "https://generativelanguage.googleapis.com/v1beta/openai",
11499
+ envVars: ["GOOGLE_API_KEY", "GEMINI_API_KEY", "GOOGLE_GENERATIVE_AI_API_KEY"],
11500
+ fallbackModels: ["gemini-2.5-pro", "gemini-2.5-flash"],
11501
+ hostname: "generativelanguage.googleapis.com"
11502
+ });
11503
+
11504
+ // src/internal/providers/builtin/groq.ts
11505
+ var GROQ = openAiCompatibleProfile({
11506
+ name: "groq",
11507
+ baseUrl: "https://api.groq.com/openai/v1",
11508
+ envVars: ["GROQ_API_KEY"],
11509
+ fallbackModels: ["llama-3.3-70b-versatile", "llama-3.1-8b-instant"],
11510
+ hostname: "api.groq.com"
11511
+ });
11512
+
11451
11513
  // src/internal/providers/builtin/llamacpp.ts
11452
11514
  var LLAMACPP = {
11453
11515
  name: "llamacpp",
@@ -11474,6 +11536,15 @@ var LMSTUDIO = {
11474
11536
  fallbackModels: ["loaded-model"]
11475
11537
  };
11476
11538
 
11539
+ // src/internal/providers/builtin/mistral.ts
11540
+ var MISTRAL = openAiCompatibleProfile({
11541
+ name: "mistral",
11542
+ baseUrl: "https://api.mistral.ai/v1",
11543
+ envVars: ["MISTRAL_API_KEY"],
11544
+ fallbackModels: ["mistral-large-latest", "codestral-latest"],
11545
+ hostname: "api.mistral.ai"
11546
+ });
11547
+
11477
11548
  // src/internal/providers/builtin/ollama.ts
11478
11549
  var OLLAMA = {
11479
11550
  name: "ollama",
@@ -11861,9 +11932,33 @@ var OPENROUTER = {
11861
11932
  baseUrl: "https://openrouter.ai/api",
11862
11933
  modelsUrl: "https://openrouter.ai/api/v1/models",
11863
11934
  hostname: "openrouter.ai",
11864
- fallbackModels: ["openai/gpt-4o-mini", "anthropic/claude-3-haiku"]
11935
+ // M45 — models refreshed (claude-3-haiku retired upstream).
11936
+ fallbackModels: ["openai/gpt-4o-mini", "anthropic/claude-haiku-4-5"],
11937
+ // M45 — OpenRouter app-attribution headers (mechanism from OpenCode's openrouter plugin, MIT; VALUES are
11938
+ // theokit's own — copying another app's referer would misattribute traffic).
11939
+ extraHeaders: { "HTTP-Referer": "https://usetheo.dev", "X-Title": "theokit" }
11865
11940
  };
11866
11941
 
11942
+ // src/internal/providers/builtin/perplexity.ts
11943
+ var PERPLEXITY = openAiCompatibleProfile({
11944
+ name: "perplexity",
11945
+ baseUrl: "https://api.perplexity.ai",
11946
+ chatCompletionsPath: "/chat/completions",
11947
+ envVars: ["PERPLEXITY_API_KEY"],
11948
+ fallbackModels: ["sonar-pro", "sonar"],
11949
+ hostname: "api.perplexity.ai"
11950
+ });
11951
+
11952
+ // src/internal/providers/builtin/together.ts
11953
+ var TOGETHER = openAiCompatibleProfile({
11954
+ name: "together",
11955
+ aliases: ["togetherai"],
11956
+ baseUrl: "https://api.together.xyz/v1",
11957
+ envVars: ["TOGETHER_API_KEY"],
11958
+ fallbackModels: ["Qwen/Qwen2.5-7B-Instruct-Turbo"],
11959
+ hostname: "api.together.xyz"
11960
+ });
11961
+
11867
11962
  // src/internal/providers/builtin/vertex.ts
11868
11963
  var VERTEX = {
11869
11964
  name: "vertex",
@@ -11895,11 +11990,26 @@ function stripVertexPrefix(modelId) {
11895
11990
  return modelId.replace(/^vertex\/(anthropic|google)\//, "");
11896
11991
  }
11897
11992
 
11993
+ // src/internal/providers/builtin/xai.ts
11994
+ var XAI = openAiCompatibleProfile({
11995
+ name: "xai",
11996
+ aliases: ["grok"],
11997
+ baseUrl: "https://api.x.ai/v1",
11998
+ envVars: ["XAI_API_KEY"],
11999
+ fallbackModels: ["grok-4.5", "grok-4.3"],
12000
+ hostname: "api.x.ai"
12001
+ });
12002
+
11898
12003
  // src/internal/providers/builtin/index.ts
11899
- var registered2 = false;
12004
+ var _registeredState = (() => {
12005
+ const g = globalThis;
12006
+ const sym = /* @__PURE__ */ Symbol.for("theokit-sdk.providers.builtins-registered");
12007
+ if (g[sym] === void 0) g[sym] = { done: false };
12008
+ return g[sym];
12009
+ })();
11900
12010
  function registerBuiltins() {
11901
- if (registered2) return;
11902
- registered2 = true;
12011
+ if (_registeredState.done) return;
12012
+ _registeredState.done = true;
11903
12013
  registerProvider(ANTHROPIC);
11904
12014
  registerProvider(OPENAI);
11905
12015
  registerProvider(OPENAI_CHATGPT);
@@ -11910,6 +12020,15 @@ function registerBuiltins() {
11910
12020
  registerProvider(LLAMACPP);
11911
12021
  registerProvider(BEDROCK);
11912
12022
  registerProvider(VERTEX);
12023
+ registerProvider(GOOGLE);
12024
+ registerProvider(MISTRAL);
12025
+ registerProvider(GROQ);
12026
+ registerProvider(COHERE);
12027
+ registerProvider(DEEPINFRA);
12028
+ registerProvider(TOGETHER);
12029
+ registerProvider(XAI);
12030
+ registerProvider(PERPLEXITY);
12031
+ registerProvider(CEREBRAS);
11913
12032
  registerCatalogProviders();
11914
12033
  }
11915
12034
 
@@ -12177,14 +12296,16 @@ var AnthropicClient = class {
12177
12296
  // biome-ignore lint/complexity/noExcessiveCognitiveComplexity: HTTP+SSE handshake + accumulator is intentionally one block
12178
12297
  async *stream(request, signal) {
12179
12298
  const body = buildAnthropicBody(request);
12299
+ const headers = {
12300
+ "content-type": "application/json",
12301
+ "x-api-key": this.options.apiKey,
12302
+ "anthropic-version": this.options.version ?? "2023-06-01"
12303
+ };
12304
+ if (this.options.extraHeaders !== void 0) Object.assign(headers, this.options.extraHeaders);
12180
12305
  const response = await this.fetchImpl(`${this.baseUrl}/v1/messages`, {
12181
12306
  method: "POST",
12182
12307
  signal,
12183
- headers: {
12184
- "content-type": "application/json",
12185
- "x-api-key": this.options.apiKey,
12186
- "anthropic-version": this.options.version ?? "2023-06-01"
12187
- },
12308
+ headers,
12188
12309
  body: JSON.stringify(body)
12189
12310
  });
12190
12311
  if (!response.ok) {
@@ -13057,15 +13178,24 @@ var StreamSuppressionBuffer = class {
13057
13178
  };
13058
13179
 
13059
13180
  // src/internal/llm/openai.ts
13181
+ function deriveChatPath(baseUrl) {
13182
+ try {
13183
+ return /\/v\d+[a-z]*(\/|$)/.test(new URL(baseUrl).pathname) ? "/chat/completions" : "/v1/chat/completions";
13184
+ } catch {
13185
+ return "/v1/chat/completions";
13186
+ }
13187
+ }
13060
13188
  var OpenAIClient = class {
13061
13189
  constructor(options) {
13062
13190
  this.options = options;
13063
- this.baseUrl = options.baseUrl ?? "https://api.openai.com";
13191
+ this.baseUrl = (options.baseUrl ?? "https://api.openai.com").replace(/\/+$/, "");
13192
+ this.chatPath = options.chatCompletionsPath ?? deriveChatPath(this.baseUrl);
13064
13193
  this.fetchImpl = options.fetch ?? fetch;
13065
13194
  }
13066
13195
  options;
13067
13196
  name = "openai";
13068
13197
  baseUrl;
13198
+ chatPath;
13069
13199
  fetchImpl;
13070
13200
  /**
13071
13201
  * Whether this client recovers leaked Hermes tool-call dialect from assistant
@@ -13088,7 +13218,7 @@ var OpenAIClient = class {
13088
13218
  const providerId = this.options.providerName ?? this.name;
13089
13219
  let response;
13090
13220
  try {
13091
- response = await this.fetchImpl(`${this.baseUrl}/v1/chat/completions`, {
13221
+ response = await this.fetchImpl(`${this.baseUrl}${this.chatPath}`, {
13092
13222
  method: "POST",
13093
13223
  signal,
13094
13224
  headers,
@@ -14185,6 +14315,9 @@ function selectTransport(profile, apiKey) {
14185
14315
  if (profile.extractToolCallsFromContent === true) {
14186
14316
  opts.extractToolCallsFromContent = true;
14187
14317
  }
14318
+ if (profile.chatCompletionsPath !== void 0) {
14319
+ opts.chatCompletionsPath = profile.chatCompletionsPath;
14320
+ }
14188
14321
  if (profile.name === "openai" && process.env.OPENAI_ORGANIZATION !== void 0) {
14189
14322
  opts.organization = process.env.OPENAI_ORGANIZATION;
14190
14323
  }
@@ -14204,6 +14337,11 @@ function selectTransport(profile, apiKey) {
14204
14337
  }
14205
14338
  const opts = { apiKey };
14206
14339
  opts.baseUrl = process.env.ANTHROPIC_API_BASE_URL ?? profile.baseUrl;
14340
+ const t = applyTransform();
14341
+ assertOAuthResolved(t);
14342
+ if (t.fetch !== void 0) opts.fetch = t.fetch;
14343
+ const merged = profile.extraHeaders !== void 0 || t.headers !== void 0 ? { ...profile.extraHeaders, ...t.headers } : void 0;
14344
+ if (merged !== void 0) opts.extraHeaders = merged;
14207
14345
  return new AnthropicClient(opts);
14208
14346
  }
14209
14347
  if (profile.apiMode === "bedrock_anthropic") {
@@ -14521,12 +14659,12 @@ function resolveMcpCwd(configCwd) {
14521
14659
 
14522
14660
  // src/internal/providers/register-plugin-providers.ts
14523
14661
  function registerPluginProviderProfiles(entries) {
14524
- let registered3 = 0;
14662
+ let registered2 = 0;
14525
14663
  for (const entry of entries) {
14526
14664
  registerProvider(entry.profile);
14527
- registered3 += 1;
14665
+ registered2 += 1;
14528
14666
  }
14529
- return registered3;
14667
+ return registered2;
14530
14668
  }
14531
14669
 
14532
14670
  // src/internal/local-agent/real-local-run.ts
@@ -14851,12 +14989,12 @@ var pluginProvidersAnnounced = false;
14851
14989
  function resolveRunProvider(options) {
14852
14990
  registerBuiltins();
14853
14991
  const profiles = options.pluginManager?.aggregated.providerProfiles ?? [];
14854
- const registered3 = registerPluginProviderProfiles(profiles);
14855
- if (registered3 > 0 && !pluginProvidersAnnounced) {
14992
+ const registered2 = registerPluginProviderProfiles(profiles);
14993
+ if (registered2 > 0 && !pluginProvidersAnnounced) {
14856
14994
  pluginProvidersAnnounced = true;
14857
14995
  const names = profiles.map((e) => e.profile.name).join(", ");
14858
14996
  process.stderr.write(
14859
- `[theokit-sdk] registered ${registered3} plugin provider profile(s): ${names}
14997
+ `[theokit-sdk] registered ${registered2} plugin provider profile(s): ${names}
14860
14998
  `
14861
14999
  );
14862
15000
  }