@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.js CHANGED
@@ -748,13 +748,13 @@ function setAgentFacade(facade) {
748
748
  globalThis[FACADE_KEY] = facade;
749
749
  }
750
750
  function getAgentFacade() {
751
- const registered3 = globalThis[FACADE_KEY];
752
- if (registered3 === void 0) {
751
+ const registered2 = globalThis[FACADE_KEY];
752
+ if (registered2 === void 0) {
753
753
  throw new Error(
754
754
  "internal: Agent facade not registered. The `agent.ts` module must be loaded before internal subsystems (LocalAgent.runUntil/fork, eval, scorers, cron) invoke it."
755
755
  );
756
756
  }
757
- return registered3;
757
+ return registered2;
758
758
  }
759
759
  var FACADE_KEY;
760
760
  var init_agent_factory_registry = __esm({
@@ -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,44 @@ 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
+
11437
11481
  // src/internal/providers/builtin/gemini.ts
11438
11482
  var GEMINI = {
11439
11483
  name: "gemini",
@@ -11445,6 +11489,24 @@ var GEMINI = {
11445
11489
  fallbackModels: ["google/gemini-2.0-flash-001"]
11446
11490
  };
11447
11491
 
11492
+ // src/internal/providers/builtin/google.ts
11493
+ var GOOGLE = openAiCompatibleProfile({
11494
+ name: "google",
11495
+ baseUrl: "https://generativelanguage.googleapis.com/v1beta/openai",
11496
+ envVars: ["GOOGLE_API_KEY", "GEMINI_API_KEY", "GOOGLE_GENERATIVE_AI_API_KEY"],
11497
+ fallbackModels: ["gemini-2.5-pro", "gemini-2.5-flash"],
11498
+ hostname: "generativelanguage.googleapis.com"
11499
+ });
11500
+
11501
+ // src/internal/providers/builtin/groq.ts
11502
+ var GROQ = openAiCompatibleProfile({
11503
+ name: "groq",
11504
+ baseUrl: "https://api.groq.com/openai/v1",
11505
+ envVars: ["GROQ_API_KEY"],
11506
+ fallbackModels: ["llama-3.3-70b-versatile", "llama-3.1-8b-instant"],
11507
+ hostname: "api.groq.com"
11508
+ });
11509
+
11448
11510
  // src/internal/providers/builtin/llamacpp.ts
11449
11511
  var LLAMACPP = {
11450
11512
  name: "llamacpp",
@@ -11471,6 +11533,15 @@ var LMSTUDIO = {
11471
11533
  fallbackModels: ["loaded-model"]
11472
11534
  };
11473
11535
 
11536
+ // src/internal/providers/builtin/mistral.ts
11537
+ var MISTRAL = openAiCompatibleProfile({
11538
+ name: "mistral",
11539
+ baseUrl: "https://api.mistral.ai/v1",
11540
+ envVars: ["MISTRAL_API_KEY"],
11541
+ fallbackModels: ["mistral-large-latest", "codestral-latest"],
11542
+ hostname: "api.mistral.ai"
11543
+ });
11544
+
11474
11545
  // src/internal/providers/builtin/ollama.ts
11475
11546
  var OLLAMA = {
11476
11547
  name: "ollama",
@@ -11858,9 +11929,33 @@ var OPENROUTER = {
11858
11929
  baseUrl: "https://openrouter.ai/api",
11859
11930
  modelsUrl: "https://openrouter.ai/api/v1/models",
11860
11931
  hostname: "openrouter.ai",
11861
- fallbackModels: ["openai/gpt-4o-mini", "anthropic/claude-3-haiku"]
11932
+ // M45 — models refreshed (claude-3-haiku retired upstream).
11933
+ fallbackModels: ["openai/gpt-4o-mini", "anthropic/claude-haiku-4-5"],
11934
+ // M45 — OpenRouter app-attribution headers (mechanism from OpenCode's openrouter plugin, MIT; VALUES are
11935
+ // theokit's own — copying another app's referer would misattribute traffic).
11936
+ extraHeaders: { "HTTP-Referer": "https://usetheo.dev", "X-Title": "theokit" }
11862
11937
  };
11863
11938
 
11939
+ // src/internal/providers/builtin/perplexity.ts
11940
+ var PERPLEXITY = openAiCompatibleProfile({
11941
+ name: "perplexity",
11942
+ baseUrl: "https://api.perplexity.ai",
11943
+ chatCompletionsPath: "/chat/completions",
11944
+ envVars: ["PERPLEXITY_API_KEY"],
11945
+ fallbackModels: ["sonar-pro", "sonar"],
11946
+ hostname: "api.perplexity.ai"
11947
+ });
11948
+
11949
+ // src/internal/providers/builtin/together.ts
11950
+ var TOGETHER = openAiCompatibleProfile({
11951
+ name: "together",
11952
+ aliases: ["togetherai"],
11953
+ baseUrl: "https://api.together.xyz/v1",
11954
+ envVars: ["TOGETHER_API_KEY"],
11955
+ fallbackModels: ["Qwen/Qwen2.5-7B-Instruct-Turbo"],
11956
+ hostname: "api.together.xyz"
11957
+ });
11958
+
11864
11959
  // src/internal/providers/builtin/vertex.ts
11865
11960
  var VERTEX = {
11866
11961
  name: "vertex",
@@ -11892,11 +11987,26 @@ function stripVertexPrefix(modelId) {
11892
11987
  return modelId.replace(/^vertex\/(anthropic|google)\//, "");
11893
11988
  }
11894
11989
 
11990
+ // src/internal/providers/builtin/xai.ts
11991
+ var XAI = openAiCompatibleProfile({
11992
+ name: "xai",
11993
+ aliases: ["grok"],
11994
+ baseUrl: "https://api.x.ai/v1",
11995
+ envVars: ["XAI_API_KEY"],
11996
+ fallbackModels: ["grok-4.5", "grok-4.3"],
11997
+ hostname: "api.x.ai"
11998
+ });
11999
+
11895
12000
  // src/internal/providers/builtin/index.ts
11896
- var registered2 = false;
12001
+ var _registeredState = (() => {
12002
+ const g = globalThis;
12003
+ const sym = /* @__PURE__ */ Symbol.for("theokit-sdk.providers.builtins-registered");
12004
+ if (g[sym] === void 0) g[sym] = { done: false };
12005
+ return g[sym];
12006
+ })();
11897
12007
  function registerBuiltins() {
11898
- if (registered2) return;
11899
- registered2 = true;
12008
+ if (_registeredState.done) return;
12009
+ _registeredState.done = true;
11900
12010
  registerProvider(ANTHROPIC);
11901
12011
  registerProvider(OPENAI);
11902
12012
  registerProvider(OPENAI_CHATGPT);
@@ -11907,6 +12017,15 @@ function registerBuiltins() {
11907
12017
  registerProvider(LLAMACPP);
11908
12018
  registerProvider(BEDROCK);
11909
12019
  registerProvider(VERTEX);
12020
+ registerProvider(GOOGLE);
12021
+ registerProvider(MISTRAL);
12022
+ registerProvider(GROQ);
12023
+ registerProvider(COHERE);
12024
+ registerProvider(DEEPINFRA);
12025
+ registerProvider(TOGETHER);
12026
+ registerProvider(XAI);
12027
+ registerProvider(PERPLEXITY);
12028
+ registerProvider(CEREBRAS);
11910
12029
  registerCatalogProviders();
11911
12030
  }
11912
12031
 
@@ -12174,14 +12293,16 @@ var AnthropicClient = class {
12174
12293
  // biome-ignore lint/complexity/noExcessiveCognitiveComplexity: HTTP+SSE handshake + accumulator is intentionally one block
12175
12294
  async *stream(request, signal) {
12176
12295
  const body = buildAnthropicBody(request);
12296
+ const headers = {
12297
+ "content-type": "application/json",
12298
+ "x-api-key": this.options.apiKey,
12299
+ "anthropic-version": this.options.version ?? "2023-06-01"
12300
+ };
12301
+ if (this.options.extraHeaders !== void 0) Object.assign(headers, this.options.extraHeaders);
12177
12302
  const response = await this.fetchImpl(`${this.baseUrl}/v1/messages`, {
12178
12303
  method: "POST",
12179
12304
  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
- },
12305
+ headers,
12185
12306
  body: JSON.stringify(body)
12186
12307
  });
12187
12308
  if (!response.ok) {
@@ -13054,15 +13175,24 @@ var StreamSuppressionBuffer = class {
13054
13175
  };
13055
13176
 
13056
13177
  // src/internal/llm/openai.ts
13178
+ function deriveChatPath(baseUrl) {
13179
+ try {
13180
+ return /\/v\d+[a-z]*(\/|$)/.test(new URL(baseUrl).pathname) ? "/chat/completions" : "/v1/chat/completions";
13181
+ } catch {
13182
+ return "/v1/chat/completions";
13183
+ }
13184
+ }
13057
13185
  var OpenAIClient = class {
13058
13186
  constructor(options) {
13059
13187
  this.options = options;
13060
- this.baseUrl = options.baseUrl ?? "https://api.openai.com";
13188
+ this.baseUrl = (options.baseUrl ?? "https://api.openai.com").replace(/\/+$/, "");
13189
+ this.chatPath = options.chatCompletionsPath ?? deriveChatPath(this.baseUrl);
13061
13190
  this.fetchImpl = options.fetch ?? fetch;
13062
13191
  }
13063
13192
  options;
13064
13193
  name = "openai";
13065
13194
  baseUrl;
13195
+ chatPath;
13066
13196
  fetchImpl;
13067
13197
  /**
13068
13198
  * Whether this client recovers leaked Hermes tool-call dialect from assistant
@@ -13085,7 +13215,7 @@ var OpenAIClient = class {
13085
13215
  const providerId = this.options.providerName ?? this.name;
13086
13216
  let response;
13087
13217
  try {
13088
- response = await this.fetchImpl(`${this.baseUrl}/v1/chat/completions`, {
13218
+ response = await this.fetchImpl(`${this.baseUrl}${this.chatPath}`, {
13089
13219
  method: "POST",
13090
13220
  signal,
13091
13221
  headers,
@@ -14182,6 +14312,9 @@ function selectTransport(profile, apiKey) {
14182
14312
  if (profile.extractToolCallsFromContent === true) {
14183
14313
  opts.extractToolCallsFromContent = true;
14184
14314
  }
14315
+ if (profile.chatCompletionsPath !== void 0) {
14316
+ opts.chatCompletionsPath = profile.chatCompletionsPath;
14317
+ }
14185
14318
  if (profile.name === "openai" && process.env.OPENAI_ORGANIZATION !== void 0) {
14186
14319
  opts.organization = process.env.OPENAI_ORGANIZATION;
14187
14320
  }
@@ -14201,6 +14334,11 @@ function selectTransport(profile, apiKey) {
14201
14334
  }
14202
14335
  const opts = { apiKey };
14203
14336
  opts.baseUrl = process.env.ANTHROPIC_API_BASE_URL ?? profile.baseUrl;
14337
+ const t = applyTransform();
14338
+ assertOAuthResolved(t);
14339
+ if (t.fetch !== void 0) opts.fetch = t.fetch;
14340
+ const merged = profile.extraHeaders !== void 0 || t.headers !== void 0 ? { ...profile.extraHeaders, ...t.headers } : void 0;
14341
+ if (merged !== void 0) opts.extraHeaders = merged;
14204
14342
  return new AnthropicClient(opts);
14205
14343
  }
14206
14344
  if (profile.apiMode === "bedrock_anthropic") {
@@ -14518,12 +14656,12 @@ function resolveMcpCwd(configCwd) {
14518
14656
 
14519
14657
  // src/internal/providers/register-plugin-providers.ts
14520
14658
  function registerPluginProviderProfiles(entries) {
14521
- let registered3 = 0;
14659
+ let registered2 = 0;
14522
14660
  for (const entry of entries) {
14523
14661
  registerProvider(entry.profile);
14524
- registered3 += 1;
14662
+ registered2 += 1;
14525
14663
  }
14526
- return registered3;
14664
+ return registered2;
14527
14665
  }
14528
14666
 
14529
14667
  // src/internal/local-agent/real-local-run.ts
@@ -14848,12 +14986,12 @@ var pluginProvidersAnnounced = false;
14848
14986
  function resolveRunProvider(options) {
14849
14987
  registerBuiltins();
14850
14988
  const profiles = options.pluginManager?.aggregated.providerProfiles ?? [];
14851
- const registered3 = registerPluginProviderProfiles(profiles);
14852
- if (registered3 > 0 && !pluginProvidersAnnounced) {
14989
+ const registered2 = registerPluginProviderProfiles(profiles);
14990
+ if (registered2 > 0 && !pluginProvidersAnnounced) {
14853
14991
  pluginProvidersAnnounced = true;
14854
14992
  const names = profiles.map((e) => e.profile.name).join(", ");
14855
14993
  process.stderr.write(
14856
- `[theokit-sdk] registered ${registered3} plugin provider profile(s): ${names}
14994
+ `[theokit-sdk] registered ${registered2} plugin provider profile(s): ${names}
14857
14995
  `
14858
14996
  );
14859
14997
  }