@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/index.cjs CHANGED
@@ -14003,7 +14003,13 @@ var ANTHROPIC = {
14003
14003
  baseUrl: "https://api.anthropic.com",
14004
14004
  modelsUrl: "https://api.anthropic.com/v1/models",
14005
14005
  hostname: "api.anthropic.com",
14006
- fallbackModels: ["claude-opus-4-7", "claude-sonnet-4-6", "claude-haiku-4-5-20251001"]
14006
+ fallbackModels: ["claude-opus-4-7", "claude-sonnet-4-6", "claude-haiku-4-5-20251001"],
14007
+ // M45 — the Anthropic beta-features header (interleaved thinking + fine-grained tool streaming). An
14008
+ // Anthropic API constant, adapted verbatim from OpenCode's anthropic plugin (MIT © 2025 opencode). The
14009
+ // SANCTIONED behavior delta of M45 (ADR D4) — consumed by the anthropic transport's extraHeaders wiring.
14010
+ extraHeaders: {
14011
+ "anthropic-beta": "interleaved-thinking-2025-05-14,fine-grained-tool-streaming-2025-05-14"
14012
+ }
14007
14013
  };
14008
14014
 
14009
14015
  // src/internal/providers/builtin/bedrock.ts
@@ -14038,6 +14044,101 @@ function resolveBedrockBaseUrl(modelId) {
14038
14044
  return `https://bedrock-runtime.${region}.amazonaws.com`;
14039
14045
  }
14040
14046
 
14047
+ // src/internal/providers/builtin/openai-compatible.ts
14048
+ function openAiCompatibleProfile(p) {
14049
+ return {
14050
+ apiMode: "chat_completions",
14051
+ authType: "api_key",
14052
+ fallbackModels: [],
14053
+ ...p
14054
+ };
14055
+ }
14056
+
14057
+ // src/internal/providers/builtin/cerebras.ts
14058
+ var CEREBRAS = openAiCompatibleProfile({
14059
+ name: "cerebras",
14060
+ baseUrl: "https://api.cerebras.ai/v1",
14061
+ envVars: ["CEREBRAS_API_KEY"],
14062
+ fallbackModels: ["gpt-oss-120b", "zai-glm-4.7"],
14063
+ extraHeaders: { "X-Cerebras-3rd-Party-Integration": "theokit" },
14064
+ hostname: "api.cerebras.ai"
14065
+ });
14066
+
14067
+ // src/internal/providers/builtin/cohere.ts
14068
+ var COHERE = openAiCompatibleProfile({
14069
+ name: "cohere",
14070
+ baseUrl: "https://api.cohere.ai/compatibility/v1",
14071
+ envVars: ["COHERE_API_KEY", "CO_API_KEY"],
14072
+ fallbackModels: ["command-a-03-2025"],
14073
+ hostname: "api.cohere.ai"
14074
+ });
14075
+
14076
+ // src/internal/providers/builtin/deepinfra.ts
14077
+ var DEEPINFRA = openAiCompatibleProfile({
14078
+ name: "deepinfra",
14079
+ baseUrl: "https://api.deepinfra.com/v1/openai",
14080
+ envVars: ["DEEPINFRA_API_KEY"],
14081
+ fallbackModels: ["Qwen/Qwen3-32B"],
14082
+ hostname: "api.deepinfra.com"
14083
+ });
14084
+
14085
+ // src/internal/providers/builtin/google.ts
14086
+ var GOOGLE = openAiCompatibleProfile({
14087
+ name: "google",
14088
+ baseUrl: "https://generativelanguage.googleapis.com/v1beta/openai",
14089
+ envVars: ["GOOGLE_API_KEY", "GEMINI_API_KEY"],
14090
+ fallbackModels: ["gemini-2.5-pro", "gemini-2.5-flash"],
14091
+ hostname: "generativelanguage.googleapis.com"
14092
+ });
14093
+
14094
+ // src/internal/providers/builtin/groq.ts
14095
+ var GROQ = openAiCompatibleProfile({
14096
+ name: "groq",
14097
+ baseUrl: "https://api.groq.com/openai/v1",
14098
+ envVars: ["GROQ_API_KEY"],
14099
+ fallbackModels: ["llama-3.3-70b-versatile", "llama-3.1-8b-instant"],
14100
+ hostname: "api.groq.com"
14101
+ });
14102
+
14103
+ // src/internal/providers/builtin/mistral.ts
14104
+ var MISTRAL = openAiCompatibleProfile({
14105
+ name: "mistral",
14106
+ baseUrl: "https://api.mistral.ai/v1",
14107
+ envVars: ["MISTRAL_API_KEY"],
14108
+ fallbackModels: ["mistral-large-latest", "codestral-latest"],
14109
+ hostname: "api.mistral.ai"
14110
+ });
14111
+
14112
+ // src/internal/providers/builtin/perplexity.ts
14113
+ var PERPLEXITY = openAiCompatibleProfile({
14114
+ name: "perplexity",
14115
+ baseUrl: "https://api.perplexity.ai",
14116
+ chatCompletionsPath: "/chat/completions",
14117
+ envVars: ["PERPLEXITY_API_KEY"],
14118
+ fallbackModels: ["sonar-pro", "sonar"],
14119
+ hostname: "api.perplexity.ai"
14120
+ });
14121
+
14122
+ // src/internal/providers/builtin/together.ts
14123
+ var TOGETHER = openAiCompatibleProfile({
14124
+ name: "together",
14125
+ aliases: ["togetherai"],
14126
+ baseUrl: "https://api.together.xyz/v1",
14127
+ envVars: ["TOGETHER_API_KEY"],
14128
+ fallbackModels: ["Qwen/Qwen2.5-7B-Instruct-Turbo"],
14129
+ hostname: "api.together.xyz"
14130
+ });
14131
+
14132
+ // src/internal/providers/builtin/xai.ts
14133
+ var XAI = openAiCompatibleProfile({
14134
+ name: "xai",
14135
+ aliases: ["grok"],
14136
+ baseUrl: "https://api.x.ai/v1",
14137
+ envVars: ["XAI_API_KEY"],
14138
+ fallbackModels: ["grok-4.5", "grok-4.3"],
14139
+ hostname: "api.x.ai"
14140
+ });
14141
+
14041
14142
  // src/internal/providers/builtin/gemini.ts
14042
14143
  var GEMINI = {
14043
14144
  name: "gemini",
@@ -14462,7 +14563,11 @@ var OPENROUTER = {
14462
14563
  baseUrl: "https://openrouter.ai/api",
14463
14564
  modelsUrl: "https://openrouter.ai/api/v1/models",
14464
14565
  hostname: "openrouter.ai",
14465
- fallbackModels: ["openai/gpt-4o-mini", "anthropic/claude-3-haiku"]
14566
+ // M45 — models refreshed (claude-3-haiku retired upstream).
14567
+ fallbackModels: ["openai/gpt-4o-mini", "anthropic/claude-haiku-4-5"],
14568
+ // M45 — OpenRouter app-attribution headers (mechanism from OpenCode's openrouter plugin, MIT; VALUES are
14569
+ // theokit's own — copying another app's referer would misattribute traffic).
14570
+ extraHeaders: { "HTTP-Referer": "https://usetheo.dev", "X-Title": "theokit" }
14466
14571
  };
14467
14572
 
14468
14573
  // src/internal/providers/builtin/vertex.ts
@@ -14511,6 +14616,15 @@ function registerBuiltins() {
14511
14616
  registerProvider(LLAMACPP);
14512
14617
  registerProvider(BEDROCK);
14513
14618
  registerProvider(VERTEX);
14619
+ registerProvider(GOOGLE);
14620
+ registerProvider(MISTRAL);
14621
+ registerProvider(GROQ);
14622
+ registerProvider(COHERE);
14623
+ registerProvider(DEEPINFRA);
14624
+ registerProvider(TOGETHER);
14625
+ registerProvider(XAI);
14626
+ registerProvider(PERPLEXITY);
14627
+ registerProvider(CEREBRAS);
14514
14628
  registerCatalogProviders();
14515
14629
  }
14516
14630
 
@@ -14779,14 +14893,16 @@ var AnthropicClient = class {
14779
14893
  // biome-ignore lint/complexity/noExcessiveCognitiveComplexity: HTTP+SSE handshake + accumulator is intentionally one block
14780
14894
  async *stream(request, signal) {
14781
14895
  const body = buildAnthropicBody(request);
14896
+ const headers = {
14897
+ "content-type": "application/json",
14898
+ "x-api-key": this.options.apiKey,
14899
+ "anthropic-version": this.options.version ?? "2023-06-01"
14900
+ };
14901
+ if (this.options.extraHeaders !== void 0) Object.assign(headers, this.options.extraHeaders);
14782
14902
  const response = await this.fetchImpl(`${this.baseUrl}/v1/messages`, {
14783
14903
  method: "POST",
14784
14904
  signal,
14785
- headers: {
14786
- "content-type": "application/json",
14787
- "x-api-key": this.options.apiKey,
14788
- "anthropic-version": this.options.version ?? "2023-06-01"
14789
- },
14905
+ headers,
14790
14906
  body: JSON.stringify(body)
14791
14907
  });
14792
14908
  if (!response.ok) {
@@ -15663,11 +15779,13 @@ var OpenAIClient = class {
15663
15779
  constructor(options) {
15664
15780
  this.options = options;
15665
15781
  this.baseUrl = options.baseUrl ?? "https://api.openai.com";
15782
+ this.chatPath = options.chatCompletionsPath ?? (/\/v\d+[a-z]*(\/|$)/.test(new URL(this.baseUrl).pathname) ? "/chat/completions" : "/v1/chat/completions");
15666
15783
  this.fetchImpl = options.fetch ?? fetch;
15667
15784
  }
15668
15785
  options;
15669
15786
  name = "openai";
15670
15787
  baseUrl;
15788
+ chatPath;
15671
15789
  fetchImpl;
15672
15790
  /**
15673
15791
  * Whether this client recovers leaked Hermes tool-call dialect from assistant
@@ -15690,7 +15808,7 @@ var OpenAIClient = class {
15690
15808
  const providerId = this.options.providerName ?? this.name;
15691
15809
  let response;
15692
15810
  try {
15693
- response = await this.fetchImpl(`${this.baseUrl}/v1/chat/completions`, {
15811
+ response = await this.fetchImpl(`${this.baseUrl}${this.chatPath}`, {
15694
15812
  method: "POST",
15695
15813
  signal,
15696
15814
  headers,
@@ -16787,6 +16905,9 @@ function selectTransport(profile, apiKey) {
16787
16905
  if (profile.extractToolCallsFromContent === true) {
16788
16906
  opts.extractToolCallsFromContent = true;
16789
16907
  }
16908
+ if (profile.chatCompletionsPath !== void 0) {
16909
+ opts.chatCompletionsPath = profile.chatCompletionsPath;
16910
+ }
16790
16911
  if (profile.name === "openai" && process.env.OPENAI_ORGANIZATION !== void 0) {
16791
16912
  opts.organization = process.env.OPENAI_ORGANIZATION;
16792
16913
  }
@@ -16806,6 +16927,11 @@ function selectTransport(profile, apiKey) {
16806
16927
  }
16807
16928
  const opts = { apiKey };
16808
16929
  opts.baseUrl = process.env.ANTHROPIC_API_BASE_URL ?? profile.baseUrl;
16930
+ const t = applyTransform();
16931
+ assertOAuthResolved(t);
16932
+ if (t.fetch !== void 0) opts.fetch = t.fetch;
16933
+ const merged = profile.extraHeaders !== void 0 || t.headers !== void 0 ? { ...profile.extraHeaders, ...t.headers } : void 0;
16934
+ if (merged !== void 0) opts.extraHeaders = merged;
16809
16935
  return new AnthropicClient(opts);
16810
16936
  }
16811
16937
  if (profile.apiMode === "bedrock_anthropic") {