@theokit/sdk 4.13.1 → 4.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/CHANGELOG.md +6 -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 +134 -8
  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 +134 -8
  9. package/dist/cron.js.map +1 -1
  10. package/dist/eval.cjs +134 -8
  11. package/dist/eval.cjs.map +1 -1
  12. package/dist/eval.js +134 -8
  13. package/dist/eval.js.map +1 -1
  14. package/dist/index.cjs +134 -8
  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 +134 -8
  19. package/dist/index.js.map +1 -1
  20. package/dist/internal/llm/openai.d.ts +1 -0
  21. package/dist/internal/providers/builtin/cerebras.d.ts +5 -0
  22. package/dist/internal/providers/builtin/cohere.d.ts +6 -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 +116 -2
  32. package/dist/models.cjs.map +1 -1
  33. package/dist/models.js +116 -2
  34. package/dist/models.js.map +1 -1
  35. package/dist/provider-catalog.json +467 -143
  36. package/dist/types/provider-profile.d.ts +7 -0
  37. package/package.json +1 -1
package/dist/eval.js CHANGED
@@ -11399,7 +11399,13 @@ var ANTHROPIC = {
11399
11399
  baseUrl: "https://api.anthropic.com",
11400
11400
  modelsUrl: "https://api.anthropic.com/v1/models",
11401
11401
  hostname: "api.anthropic.com",
11402
- fallbackModels: ["claude-opus-4-7", "claude-sonnet-4-6", "claude-haiku-4-5-20251001"]
11402
+ fallbackModels: ["claude-opus-4-7", "claude-sonnet-4-6", "claude-haiku-4-5-20251001"],
11403
+ // M45 — the Anthropic beta-features header (interleaved thinking + fine-grained tool streaming). An
11404
+ // Anthropic API constant, adapted verbatim from OpenCode's anthropic plugin (MIT © 2025 opencode). The
11405
+ // SANCTIONED behavior delta of M45 (ADR D4) — consumed by the anthropic transport's extraHeaders wiring.
11406
+ extraHeaders: {
11407
+ "anthropic-beta": "interleaved-thinking-2025-05-14,fine-grained-tool-streaming-2025-05-14"
11408
+ }
11403
11409
  };
11404
11410
 
11405
11411
  // src/internal/providers/builtin/bedrock.ts
@@ -11434,6 +11440,101 @@ function resolveBedrockBaseUrl(modelId) {
11434
11440
  return `https://bedrock-runtime.${region}.amazonaws.com`;
11435
11441
  }
11436
11442
 
11443
+ // src/internal/providers/builtin/openai-compatible.ts
11444
+ function openAiCompatibleProfile(p) {
11445
+ return {
11446
+ apiMode: "chat_completions",
11447
+ authType: "api_key",
11448
+ fallbackModels: [],
11449
+ ...p
11450
+ };
11451
+ }
11452
+
11453
+ // src/internal/providers/builtin/cerebras.ts
11454
+ var CEREBRAS = openAiCompatibleProfile({
11455
+ name: "cerebras",
11456
+ baseUrl: "https://api.cerebras.ai/v1",
11457
+ envVars: ["CEREBRAS_API_KEY"],
11458
+ fallbackModels: ["gpt-oss-120b", "zai-glm-4.7"],
11459
+ extraHeaders: { "X-Cerebras-3rd-Party-Integration": "theokit" },
11460
+ hostname: "api.cerebras.ai"
11461
+ });
11462
+
11463
+ // src/internal/providers/builtin/cohere.ts
11464
+ var COHERE = openAiCompatibleProfile({
11465
+ name: "cohere",
11466
+ baseUrl: "https://api.cohere.ai/compatibility/v1",
11467
+ envVars: ["COHERE_API_KEY", "CO_API_KEY"],
11468
+ fallbackModels: ["command-a-03-2025"],
11469
+ hostname: "api.cohere.ai"
11470
+ });
11471
+
11472
+ // src/internal/providers/builtin/deepinfra.ts
11473
+ var DEEPINFRA = openAiCompatibleProfile({
11474
+ name: "deepinfra",
11475
+ baseUrl: "https://api.deepinfra.com/v1/openai",
11476
+ envVars: ["DEEPINFRA_API_KEY"],
11477
+ fallbackModels: ["Qwen/Qwen3-32B"],
11478
+ hostname: "api.deepinfra.com"
11479
+ });
11480
+
11481
+ // src/internal/providers/builtin/google.ts
11482
+ var GOOGLE = openAiCompatibleProfile({
11483
+ name: "google",
11484
+ baseUrl: "https://generativelanguage.googleapis.com/v1beta/openai",
11485
+ envVars: ["GOOGLE_API_KEY", "GEMINI_API_KEY"],
11486
+ fallbackModels: ["gemini-2.5-pro", "gemini-2.5-flash"],
11487
+ hostname: "generativelanguage.googleapis.com"
11488
+ });
11489
+
11490
+ // src/internal/providers/builtin/groq.ts
11491
+ var GROQ = openAiCompatibleProfile({
11492
+ name: "groq",
11493
+ baseUrl: "https://api.groq.com/openai/v1",
11494
+ envVars: ["GROQ_API_KEY"],
11495
+ fallbackModels: ["llama-3.3-70b-versatile", "llama-3.1-8b-instant"],
11496
+ hostname: "api.groq.com"
11497
+ });
11498
+
11499
+ // src/internal/providers/builtin/mistral.ts
11500
+ var MISTRAL = openAiCompatibleProfile({
11501
+ name: "mistral",
11502
+ baseUrl: "https://api.mistral.ai/v1",
11503
+ envVars: ["MISTRAL_API_KEY"],
11504
+ fallbackModels: ["mistral-large-latest", "codestral-latest"],
11505
+ hostname: "api.mistral.ai"
11506
+ });
11507
+
11508
+ // src/internal/providers/builtin/perplexity.ts
11509
+ var PERPLEXITY = openAiCompatibleProfile({
11510
+ name: "perplexity",
11511
+ baseUrl: "https://api.perplexity.ai",
11512
+ chatCompletionsPath: "/chat/completions",
11513
+ envVars: ["PERPLEXITY_API_KEY"],
11514
+ fallbackModels: ["sonar-pro", "sonar"],
11515
+ hostname: "api.perplexity.ai"
11516
+ });
11517
+
11518
+ // src/internal/providers/builtin/together.ts
11519
+ var TOGETHER = openAiCompatibleProfile({
11520
+ name: "together",
11521
+ aliases: ["togetherai"],
11522
+ baseUrl: "https://api.together.xyz/v1",
11523
+ envVars: ["TOGETHER_API_KEY"],
11524
+ fallbackModels: ["Qwen/Qwen2.5-7B-Instruct-Turbo"],
11525
+ hostname: "api.together.xyz"
11526
+ });
11527
+
11528
+ // src/internal/providers/builtin/xai.ts
11529
+ var XAI = openAiCompatibleProfile({
11530
+ name: "xai",
11531
+ aliases: ["grok"],
11532
+ baseUrl: "https://api.x.ai/v1",
11533
+ envVars: ["XAI_API_KEY"],
11534
+ fallbackModels: ["grok-4.5", "grok-4.3"],
11535
+ hostname: "api.x.ai"
11536
+ });
11537
+
11437
11538
  // src/internal/providers/builtin/gemini.ts
11438
11539
  var GEMINI = {
11439
11540
  name: "gemini",
@@ -11858,7 +11959,11 @@ var OPENROUTER = {
11858
11959
  baseUrl: "https://openrouter.ai/api",
11859
11960
  modelsUrl: "https://openrouter.ai/api/v1/models",
11860
11961
  hostname: "openrouter.ai",
11861
- fallbackModels: ["openai/gpt-4o-mini", "anthropic/claude-3-haiku"]
11962
+ // M45 — models refreshed (claude-3-haiku retired upstream).
11963
+ fallbackModels: ["openai/gpt-4o-mini", "anthropic/claude-haiku-4-5"],
11964
+ // M45 — OpenRouter app-attribution headers (mechanism from OpenCode's openrouter plugin, MIT; VALUES are
11965
+ // theokit's own — copying another app's referer would misattribute traffic).
11966
+ extraHeaders: { "HTTP-Referer": "https://usetheo.dev", "X-Title": "theokit" }
11862
11967
  };
11863
11968
 
11864
11969
  // src/internal/providers/builtin/vertex.ts
@@ -11907,6 +12012,15 @@ function registerBuiltins() {
11907
12012
  registerProvider(LLAMACPP);
11908
12013
  registerProvider(BEDROCK);
11909
12014
  registerProvider(VERTEX);
12015
+ registerProvider(GOOGLE);
12016
+ registerProvider(MISTRAL);
12017
+ registerProvider(GROQ);
12018
+ registerProvider(COHERE);
12019
+ registerProvider(DEEPINFRA);
12020
+ registerProvider(TOGETHER);
12021
+ registerProvider(XAI);
12022
+ registerProvider(PERPLEXITY);
12023
+ registerProvider(CEREBRAS);
11910
12024
  registerCatalogProviders();
11911
12025
  }
11912
12026
 
@@ -12174,14 +12288,16 @@ var AnthropicClient = class {
12174
12288
  // biome-ignore lint/complexity/noExcessiveCognitiveComplexity: HTTP+SSE handshake + accumulator is intentionally one block
12175
12289
  async *stream(request, signal) {
12176
12290
  const body = buildAnthropicBody(request);
12291
+ const headers = {
12292
+ "content-type": "application/json",
12293
+ "x-api-key": this.options.apiKey,
12294
+ "anthropic-version": this.options.version ?? "2023-06-01"
12295
+ };
12296
+ if (this.options.extraHeaders !== void 0) Object.assign(headers, this.options.extraHeaders);
12177
12297
  const response = await this.fetchImpl(`${this.baseUrl}/v1/messages`, {
12178
12298
  method: "POST",
12179
12299
  signal,
12180
- headers: {
12181
- "content-type": "application/json",
12182
- "x-api-key": this.options.apiKey,
12183
- "anthropic-version": this.options.version ?? "2023-06-01"
12184
- },
12300
+ headers,
12185
12301
  body: JSON.stringify(body)
12186
12302
  });
12187
12303
  if (!response.ok) {
@@ -13058,11 +13174,13 @@ var OpenAIClient = class {
13058
13174
  constructor(options) {
13059
13175
  this.options = options;
13060
13176
  this.baseUrl = options.baseUrl ?? "https://api.openai.com";
13177
+ this.chatPath = options.chatCompletionsPath ?? (/\/v\d+[a-z]*(\/|$)/.test(new URL(this.baseUrl).pathname) ? "/chat/completions" : "/v1/chat/completions");
13061
13178
  this.fetchImpl = options.fetch ?? fetch;
13062
13179
  }
13063
13180
  options;
13064
13181
  name = "openai";
13065
13182
  baseUrl;
13183
+ chatPath;
13066
13184
  fetchImpl;
13067
13185
  /**
13068
13186
  * Whether this client recovers leaked Hermes tool-call dialect from assistant
@@ -13085,7 +13203,7 @@ var OpenAIClient = class {
13085
13203
  const providerId = this.options.providerName ?? this.name;
13086
13204
  let response;
13087
13205
  try {
13088
- response = await this.fetchImpl(`${this.baseUrl}/v1/chat/completions`, {
13206
+ response = await this.fetchImpl(`${this.baseUrl}${this.chatPath}`, {
13089
13207
  method: "POST",
13090
13208
  signal,
13091
13209
  headers,
@@ -14182,6 +14300,9 @@ function selectTransport(profile, apiKey) {
14182
14300
  if (profile.extractToolCallsFromContent === true) {
14183
14301
  opts.extractToolCallsFromContent = true;
14184
14302
  }
14303
+ if (profile.chatCompletionsPath !== void 0) {
14304
+ opts.chatCompletionsPath = profile.chatCompletionsPath;
14305
+ }
14185
14306
  if (profile.name === "openai" && process.env.OPENAI_ORGANIZATION !== void 0) {
14186
14307
  opts.organization = process.env.OPENAI_ORGANIZATION;
14187
14308
  }
@@ -14201,6 +14322,11 @@ function selectTransport(profile, apiKey) {
14201
14322
  }
14202
14323
  const opts = { apiKey };
14203
14324
  opts.baseUrl = process.env.ANTHROPIC_API_BASE_URL ?? profile.baseUrl;
14325
+ const t = applyTransform();
14326
+ assertOAuthResolved(t);
14327
+ if (t.fetch !== void 0) opts.fetch = t.fetch;
14328
+ const merged = profile.extraHeaders !== void 0 || t.headers !== void 0 ? { ...profile.extraHeaders, ...t.headers } : void 0;
14329
+ if (merged !== void 0) opts.extraHeaders = merged;
14204
14330
  return new AnthropicClient(opts);
14205
14331
  }
14206
14332
  if (profile.apiMode === "bedrock_anthropic") {