@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.cjs CHANGED
@@ -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,101 @@ 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
+
11484
+ // src/internal/providers/builtin/google.ts
11485
+ var GOOGLE = openAiCompatibleProfile({
11486
+ name: "google",
11487
+ baseUrl: "https://generativelanguage.googleapis.com/v1beta/openai",
11488
+ envVars: ["GOOGLE_API_KEY", "GEMINI_API_KEY"],
11489
+ fallbackModels: ["gemini-2.5-pro", "gemini-2.5-flash"],
11490
+ hostname: "generativelanguage.googleapis.com"
11491
+ });
11492
+
11493
+ // src/internal/providers/builtin/groq.ts
11494
+ var GROQ = openAiCompatibleProfile({
11495
+ name: "groq",
11496
+ baseUrl: "https://api.groq.com/openai/v1",
11497
+ envVars: ["GROQ_API_KEY"],
11498
+ fallbackModels: ["llama-3.3-70b-versatile", "llama-3.1-8b-instant"],
11499
+ hostname: "api.groq.com"
11500
+ });
11501
+
11502
+ // src/internal/providers/builtin/mistral.ts
11503
+ var MISTRAL = openAiCompatibleProfile({
11504
+ name: "mistral",
11505
+ baseUrl: "https://api.mistral.ai/v1",
11506
+ envVars: ["MISTRAL_API_KEY"],
11507
+ fallbackModels: ["mistral-large-latest", "codestral-latest"],
11508
+ hostname: "api.mistral.ai"
11509
+ });
11510
+
11511
+ // src/internal/providers/builtin/perplexity.ts
11512
+ var PERPLEXITY = openAiCompatibleProfile({
11513
+ name: "perplexity",
11514
+ baseUrl: "https://api.perplexity.ai",
11515
+ chatCompletionsPath: "/chat/completions",
11516
+ envVars: ["PERPLEXITY_API_KEY"],
11517
+ fallbackModels: ["sonar-pro", "sonar"],
11518
+ hostname: "api.perplexity.ai"
11519
+ });
11520
+
11521
+ // src/internal/providers/builtin/together.ts
11522
+ var TOGETHER = openAiCompatibleProfile({
11523
+ name: "together",
11524
+ aliases: ["togetherai"],
11525
+ baseUrl: "https://api.together.xyz/v1",
11526
+ envVars: ["TOGETHER_API_KEY"],
11527
+ fallbackModels: ["Qwen/Qwen2.5-7B-Instruct-Turbo"],
11528
+ hostname: "api.together.xyz"
11529
+ });
11530
+
11531
+ // src/internal/providers/builtin/xai.ts
11532
+ var XAI = openAiCompatibleProfile({
11533
+ name: "xai",
11534
+ aliases: ["grok"],
11535
+ baseUrl: "https://api.x.ai/v1",
11536
+ envVars: ["XAI_API_KEY"],
11537
+ fallbackModels: ["grok-4.5", "grok-4.3"],
11538
+ hostname: "api.x.ai"
11539
+ });
11540
+
11440
11541
  // src/internal/providers/builtin/gemini.ts
11441
11542
  var GEMINI = {
11442
11543
  name: "gemini",
@@ -11861,7 +11962,11 @@ var OPENROUTER = {
11861
11962
  baseUrl: "https://openrouter.ai/api",
11862
11963
  modelsUrl: "https://openrouter.ai/api/v1/models",
11863
11964
  hostname: "openrouter.ai",
11864
- fallbackModels: ["openai/gpt-4o-mini", "anthropic/claude-3-haiku"]
11965
+ // M45 — models refreshed (claude-3-haiku retired upstream).
11966
+ fallbackModels: ["openai/gpt-4o-mini", "anthropic/claude-haiku-4-5"],
11967
+ // M45 — OpenRouter app-attribution headers (mechanism from OpenCode's openrouter plugin, MIT; VALUES are
11968
+ // theokit's own — copying another app's referer would misattribute traffic).
11969
+ extraHeaders: { "HTTP-Referer": "https://usetheo.dev", "X-Title": "theokit" }
11865
11970
  };
11866
11971
 
11867
11972
  // src/internal/providers/builtin/vertex.ts
@@ -11910,6 +12015,15 @@ function registerBuiltins() {
11910
12015
  registerProvider(LLAMACPP);
11911
12016
  registerProvider(BEDROCK);
11912
12017
  registerProvider(VERTEX);
12018
+ registerProvider(GOOGLE);
12019
+ registerProvider(MISTRAL);
12020
+ registerProvider(GROQ);
12021
+ registerProvider(COHERE);
12022
+ registerProvider(DEEPINFRA);
12023
+ registerProvider(TOGETHER);
12024
+ registerProvider(XAI);
12025
+ registerProvider(PERPLEXITY);
12026
+ registerProvider(CEREBRAS);
11913
12027
  registerCatalogProviders();
11914
12028
  }
11915
12029
 
@@ -12177,14 +12291,16 @@ var AnthropicClient = class {
12177
12291
  // biome-ignore lint/complexity/noExcessiveCognitiveComplexity: HTTP+SSE handshake + accumulator is intentionally one block
12178
12292
  async *stream(request, signal) {
12179
12293
  const body = buildAnthropicBody(request);
12294
+ const headers = {
12295
+ "content-type": "application/json",
12296
+ "x-api-key": this.options.apiKey,
12297
+ "anthropic-version": this.options.version ?? "2023-06-01"
12298
+ };
12299
+ if (this.options.extraHeaders !== void 0) Object.assign(headers, this.options.extraHeaders);
12180
12300
  const response = await this.fetchImpl(`${this.baseUrl}/v1/messages`, {
12181
12301
  method: "POST",
12182
12302
  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
- },
12303
+ headers,
12188
12304
  body: JSON.stringify(body)
12189
12305
  });
12190
12306
  if (!response.ok) {
@@ -13061,11 +13177,13 @@ var OpenAIClient = class {
13061
13177
  constructor(options) {
13062
13178
  this.options = options;
13063
13179
  this.baseUrl = options.baseUrl ?? "https://api.openai.com";
13180
+ this.chatPath = options.chatCompletionsPath ?? (/\/v\d+[a-z]*(\/|$)/.test(new URL(this.baseUrl).pathname) ? "/chat/completions" : "/v1/chat/completions");
13064
13181
  this.fetchImpl = options.fetch ?? fetch;
13065
13182
  }
13066
13183
  options;
13067
13184
  name = "openai";
13068
13185
  baseUrl;
13186
+ chatPath;
13069
13187
  fetchImpl;
13070
13188
  /**
13071
13189
  * Whether this client recovers leaked Hermes tool-call dialect from assistant
@@ -13088,7 +13206,7 @@ var OpenAIClient = class {
13088
13206
  const providerId = this.options.providerName ?? this.name;
13089
13207
  let response;
13090
13208
  try {
13091
- response = await this.fetchImpl(`${this.baseUrl}/v1/chat/completions`, {
13209
+ response = await this.fetchImpl(`${this.baseUrl}${this.chatPath}`, {
13092
13210
  method: "POST",
13093
13211
  signal,
13094
13212
  headers,
@@ -14185,6 +14303,9 @@ function selectTransport(profile, apiKey) {
14185
14303
  if (profile.extractToolCallsFromContent === true) {
14186
14304
  opts.extractToolCallsFromContent = true;
14187
14305
  }
14306
+ if (profile.chatCompletionsPath !== void 0) {
14307
+ opts.chatCompletionsPath = profile.chatCompletionsPath;
14308
+ }
14188
14309
  if (profile.name === "openai" && process.env.OPENAI_ORGANIZATION !== void 0) {
14189
14310
  opts.organization = process.env.OPENAI_ORGANIZATION;
14190
14311
  }
@@ -14204,6 +14325,11 @@ function selectTransport(profile, apiKey) {
14204
14325
  }
14205
14326
  const opts = { apiKey };
14206
14327
  opts.baseUrl = process.env.ANTHROPIC_API_BASE_URL ?? profile.baseUrl;
14328
+ const t = applyTransform();
14329
+ assertOAuthResolved(t);
14330
+ if (t.fetch !== void 0) opts.fetch = t.fetch;
14331
+ const merged = profile.extraHeaders !== void 0 || t.headers !== void 0 ? { ...profile.extraHeaders, ...t.headers } : void 0;
14332
+ if (merged !== void 0) opts.extraHeaders = merged;
14207
14333
  return new AnthropicClient(opts);
14208
14334
  }
14209
14335
  if (profile.apiMode === "bedrock_anthropic") {