@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.
- package/CHANGELOG.md +12 -0
- package/dist/{cron-C7catiH8.d.ts → cron-DY0uC1ng.d.ts} +7 -0
- package/dist/{cron-DK1WVZnI.d.cts → cron-ElTj1cSH.d.cts} +7 -0
- package/dist/cron.cjs +159 -21
- package/dist/cron.cjs.map +1 -1
- package/dist/cron.d.cts +1 -1
- package/dist/cron.d.ts +1 -1
- package/dist/cron.js +159 -21
- package/dist/cron.js.map +1 -1
- package/dist/eval.cjs +159 -21
- package/dist/eval.cjs.map +1 -1
- package/dist/eval.js +159 -21
- package/dist/eval.js.map +1 -1
- package/dist/index.cjs +162 -21
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +162 -21
- package/dist/index.js.map +1 -1
- package/dist/internal/llm/openai.d.ts +29 -0
- package/dist/internal/providers/builtin/cerebras.d.ts +5 -0
- package/dist/internal/providers/builtin/cohere.d.ts +8 -0
- package/dist/internal/providers/builtin/deepinfra.d.ts +2 -0
- package/dist/internal/providers/builtin/google.d.ts +6 -0
- package/dist/internal/providers/builtin/groq.d.ts +2 -0
- package/dist/internal/providers/builtin/mistral.d.ts +2 -0
- package/dist/internal/providers/builtin/openai-compatible.d.ts +1 -0
- package/dist/internal/providers/builtin/perplexity.d.ts +5 -0
- package/dist/internal/providers/builtin/together.d.ts +2 -0
- package/dist/internal/providers/builtin/xai.d.ts +2 -0
- package/dist/models.cjs +124 -5
- package/dist/models.cjs.map +1 -1
- package/dist/models.js +124 -5
- package/dist/models.js.map +1 -1
- package/dist/types/provider-profile.d.ts +7 -0
- 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
|
|
755
|
-
if (
|
|
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
|
|
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
|
-
|
|
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
|
|
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 (
|
|
11902
|
-
|
|
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}
|
|
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
|
|
14662
|
+
let registered2 = 0;
|
|
14525
14663
|
for (const entry of entries) {
|
|
14526
14664
|
registerProvider(entry.profile);
|
|
14527
|
-
|
|
14665
|
+
registered2 += 1;
|
|
14528
14666
|
}
|
|
14529
|
-
return
|
|
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
|
|
14855
|
-
if (
|
|
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 ${
|
|
14997
|
+
`[theokit-sdk] registered ${registered2} plugin provider profile(s): ${names}
|
|
14860
14998
|
`
|
|
14861
14999
|
);
|
|
14862
15000
|
}
|