@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.js
CHANGED
|
@@ -748,13 +748,13 @@ function setAgentFacade(facade) {
|
|
|
748
748
|
globalThis[FACADE_KEY] = facade;
|
|
749
749
|
}
|
|
750
750
|
function getAgentFacade() {
|
|
751
|
-
const
|
|
752
|
-
if (
|
|
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
|
|
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
|
-
|
|
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
|
|
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 (
|
|
11899
|
-
|
|
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}
|
|
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
|
|
14659
|
+
let registered2 = 0;
|
|
14522
14660
|
for (const entry of entries) {
|
|
14523
14661
|
registerProvider(entry.profile);
|
|
14524
|
-
|
|
14662
|
+
registered2 += 1;
|
|
14525
14663
|
}
|
|
14526
|
-
return
|
|
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
|
|
14852
|
-
if (
|
|
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 ${
|
|
14994
|
+
`[theokit-sdk] registered ${registered2} plugin provider profile(s): ${names}
|
|
14857
14995
|
`
|
|
14858
14996
|
);
|
|
14859
14997
|
}
|