@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/index.cjs
CHANGED
|
@@ -758,13 +758,13 @@ function setAgentFacade(facade) {
|
|
|
758
758
|
globalThis[FACADE_KEY] = facade;
|
|
759
759
|
}
|
|
760
760
|
function getAgentFacade() {
|
|
761
|
-
const
|
|
762
|
-
if (
|
|
761
|
+
const registered2 = globalThis[FACADE_KEY];
|
|
762
|
+
if (registered2 === void 0) {
|
|
763
763
|
throw new Error(
|
|
764
764
|
"internal: Agent facade not registered. The `agent.ts` module must be loaded before internal subsystems (LocalAgent.runUntil/fork, eval, scorers, cron) invoke it."
|
|
765
765
|
);
|
|
766
766
|
}
|
|
767
|
-
return
|
|
767
|
+
return registered2;
|
|
768
768
|
}
|
|
769
769
|
var FACADE_KEY;
|
|
770
770
|
var init_agent_factory_registry = __esm({
|
|
@@ -13247,6 +13247,9 @@ function getCatalogCapabilities(providerId) {
|
|
|
13247
13247
|
_capabilitiesCache = {};
|
|
13248
13248
|
for (const entry of Object.values(catalog)) {
|
|
13249
13249
|
_capabilitiesCache[entry.id] = entry.capabilities;
|
|
13250
|
+
for (const alias of entry.aliases ?? []) {
|
|
13251
|
+
if (_capabilitiesCache[alias] === void 0) _capabilitiesCache[alias] = entry.capabilities;
|
|
13252
|
+
}
|
|
13250
13253
|
}
|
|
13251
13254
|
}
|
|
13252
13255
|
return _capabilitiesCache[providerId];
|
|
@@ -14003,7 +14006,13 @@ var ANTHROPIC = {
|
|
|
14003
14006
|
baseUrl: "https://api.anthropic.com",
|
|
14004
14007
|
modelsUrl: "https://api.anthropic.com/v1/models",
|
|
14005
14008
|
hostname: "api.anthropic.com",
|
|
14006
|
-
fallbackModels: ["claude-opus-4-7", "claude-sonnet-4-6", "claude-haiku-4-5-20251001"]
|
|
14009
|
+
fallbackModels: ["claude-opus-4-7", "claude-sonnet-4-6", "claude-haiku-4-5-20251001"],
|
|
14010
|
+
// M45 — the Anthropic beta-features header (interleaved thinking + fine-grained tool streaming). An
|
|
14011
|
+
// Anthropic API constant, adapted verbatim from OpenCode's anthropic plugin (MIT © 2025 opencode). The
|
|
14012
|
+
// SANCTIONED behavior delta of M45 (ADR D4) — consumed by the anthropic transport's extraHeaders wiring.
|
|
14013
|
+
extraHeaders: {
|
|
14014
|
+
"anthropic-beta": "interleaved-thinking-2025-05-14,fine-grained-tool-streaming-2025-05-14"
|
|
14015
|
+
}
|
|
14007
14016
|
};
|
|
14008
14017
|
|
|
14009
14018
|
// src/internal/providers/builtin/bedrock.ts
|
|
@@ -14038,6 +14047,44 @@ function resolveBedrockBaseUrl(modelId) {
|
|
|
14038
14047
|
return `https://bedrock-runtime.${region}.amazonaws.com`;
|
|
14039
14048
|
}
|
|
14040
14049
|
|
|
14050
|
+
// src/internal/providers/builtin/openai-compatible.ts
|
|
14051
|
+
function openAiCompatibleProfile(p) {
|
|
14052
|
+
return {
|
|
14053
|
+
apiMode: "chat_completions",
|
|
14054
|
+
authType: "api_key",
|
|
14055
|
+
fallbackModels: [],
|
|
14056
|
+
...p
|
|
14057
|
+
};
|
|
14058
|
+
}
|
|
14059
|
+
|
|
14060
|
+
// src/internal/providers/builtin/cerebras.ts
|
|
14061
|
+
var CEREBRAS = openAiCompatibleProfile({
|
|
14062
|
+
name: "cerebras",
|
|
14063
|
+
baseUrl: "https://api.cerebras.ai/v1",
|
|
14064
|
+
envVars: ["CEREBRAS_API_KEY"],
|
|
14065
|
+
fallbackModels: ["gpt-oss-120b", "zai-glm-4.7"],
|
|
14066
|
+
extraHeaders: { "X-Cerebras-3rd-Party-Integration": "theokit" },
|
|
14067
|
+
hostname: "api.cerebras.ai"
|
|
14068
|
+
});
|
|
14069
|
+
|
|
14070
|
+
// src/internal/providers/builtin/cohere.ts
|
|
14071
|
+
var COHERE = openAiCompatibleProfile({
|
|
14072
|
+
name: "cohere",
|
|
14073
|
+
baseUrl: "https://api.cohere.ai/compatibility/v1",
|
|
14074
|
+
envVars: ["COHERE_API_KEY", "CO_API_KEY"],
|
|
14075
|
+
fallbackModels: ["command-a-03-2025"],
|
|
14076
|
+
hostname: "api.cohere.ai"
|
|
14077
|
+
});
|
|
14078
|
+
|
|
14079
|
+
// src/internal/providers/builtin/deepinfra.ts
|
|
14080
|
+
var DEEPINFRA = openAiCompatibleProfile({
|
|
14081
|
+
name: "deepinfra",
|
|
14082
|
+
baseUrl: "https://api.deepinfra.com/v1/openai",
|
|
14083
|
+
envVars: ["DEEPINFRA_API_KEY"],
|
|
14084
|
+
fallbackModels: ["Qwen/Qwen3-32B"],
|
|
14085
|
+
hostname: "api.deepinfra.com"
|
|
14086
|
+
});
|
|
14087
|
+
|
|
14041
14088
|
// src/internal/providers/builtin/gemini.ts
|
|
14042
14089
|
var GEMINI = {
|
|
14043
14090
|
name: "gemini",
|
|
@@ -14049,6 +14096,24 @@ var GEMINI = {
|
|
|
14049
14096
|
fallbackModels: ["google/gemini-2.0-flash-001"]
|
|
14050
14097
|
};
|
|
14051
14098
|
|
|
14099
|
+
// src/internal/providers/builtin/google.ts
|
|
14100
|
+
var GOOGLE = openAiCompatibleProfile({
|
|
14101
|
+
name: "google",
|
|
14102
|
+
baseUrl: "https://generativelanguage.googleapis.com/v1beta/openai",
|
|
14103
|
+
envVars: ["GOOGLE_API_KEY", "GEMINI_API_KEY", "GOOGLE_GENERATIVE_AI_API_KEY"],
|
|
14104
|
+
fallbackModels: ["gemini-2.5-pro", "gemini-2.5-flash"],
|
|
14105
|
+
hostname: "generativelanguage.googleapis.com"
|
|
14106
|
+
});
|
|
14107
|
+
|
|
14108
|
+
// src/internal/providers/builtin/groq.ts
|
|
14109
|
+
var GROQ = openAiCompatibleProfile({
|
|
14110
|
+
name: "groq",
|
|
14111
|
+
baseUrl: "https://api.groq.com/openai/v1",
|
|
14112
|
+
envVars: ["GROQ_API_KEY"],
|
|
14113
|
+
fallbackModels: ["llama-3.3-70b-versatile", "llama-3.1-8b-instant"],
|
|
14114
|
+
hostname: "api.groq.com"
|
|
14115
|
+
});
|
|
14116
|
+
|
|
14052
14117
|
// src/internal/providers/builtin/llamacpp.ts
|
|
14053
14118
|
var LLAMACPP = {
|
|
14054
14119
|
name: "llamacpp",
|
|
@@ -14075,6 +14140,15 @@ var LMSTUDIO = {
|
|
|
14075
14140
|
fallbackModels: ["loaded-model"]
|
|
14076
14141
|
};
|
|
14077
14142
|
|
|
14143
|
+
// src/internal/providers/builtin/mistral.ts
|
|
14144
|
+
var MISTRAL = openAiCompatibleProfile({
|
|
14145
|
+
name: "mistral",
|
|
14146
|
+
baseUrl: "https://api.mistral.ai/v1",
|
|
14147
|
+
envVars: ["MISTRAL_API_KEY"],
|
|
14148
|
+
fallbackModels: ["mistral-large-latest", "codestral-latest"],
|
|
14149
|
+
hostname: "api.mistral.ai"
|
|
14150
|
+
});
|
|
14151
|
+
|
|
14078
14152
|
// src/internal/providers/builtin/ollama.ts
|
|
14079
14153
|
var OLLAMA = {
|
|
14080
14154
|
name: "ollama",
|
|
@@ -14462,9 +14536,33 @@ var OPENROUTER = {
|
|
|
14462
14536
|
baseUrl: "https://openrouter.ai/api",
|
|
14463
14537
|
modelsUrl: "https://openrouter.ai/api/v1/models",
|
|
14464
14538
|
hostname: "openrouter.ai",
|
|
14465
|
-
|
|
14539
|
+
// M45 — models refreshed (claude-3-haiku retired upstream).
|
|
14540
|
+
fallbackModels: ["openai/gpt-4o-mini", "anthropic/claude-haiku-4-5"],
|
|
14541
|
+
// M45 — OpenRouter app-attribution headers (mechanism from OpenCode's openrouter plugin, MIT; VALUES are
|
|
14542
|
+
// theokit's own — copying another app's referer would misattribute traffic).
|
|
14543
|
+
extraHeaders: { "HTTP-Referer": "https://usetheo.dev", "X-Title": "theokit" }
|
|
14466
14544
|
};
|
|
14467
14545
|
|
|
14546
|
+
// src/internal/providers/builtin/perplexity.ts
|
|
14547
|
+
var PERPLEXITY = openAiCompatibleProfile({
|
|
14548
|
+
name: "perplexity",
|
|
14549
|
+
baseUrl: "https://api.perplexity.ai",
|
|
14550
|
+
chatCompletionsPath: "/chat/completions",
|
|
14551
|
+
envVars: ["PERPLEXITY_API_KEY"],
|
|
14552
|
+
fallbackModels: ["sonar-pro", "sonar"],
|
|
14553
|
+
hostname: "api.perplexity.ai"
|
|
14554
|
+
});
|
|
14555
|
+
|
|
14556
|
+
// src/internal/providers/builtin/together.ts
|
|
14557
|
+
var TOGETHER = openAiCompatibleProfile({
|
|
14558
|
+
name: "together",
|
|
14559
|
+
aliases: ["togetherai"],
|
|
14560
|
+
baseUrl: "https://api.together.xyz/v1",
|
|
14561
|
+
envVars: ["TOGETHER_API_KEY"],
|
|
14562
|
+
fallbackModels: ["Qwen/Qwen2.5-7B-Instruct-Turbo"],
|
|
14563
|
+
hostname: "api.together.xyz"
|
|
14564
|
+
});
|
|
14565
|
+
|
|
14468
14566
|
// src/internal/providers/builtin/vertex.ts
|
|
14469
14567
|
var VERTEX = {
|
|
14470
14568
|
name: "vertex",
|
|
@@ -14496,11 +14594,26 @@ function stripVertexPrefix(modelId) {
|
|
|
14496
14594
|
return modelId.replace(/^vertex\/(anthropic|google)\//, "");
|
|
14497
14595
|
}
|
|
14498
14596
|
|
|
14597
|
+
// src/internal/providers/builtin/xai.ts
|
|
14598
|
+
var XAI = openAiCompatibleProfile({
|
|
14599
|
+
name: "xai",
|
|
14600
|
+
aliases: ["grok"],
|
|
14601
|
+
baseUrl: "https://api.x.ai/v1",
|
|
14602
|
+
envVars: ["XAI_API_KEY"],
|
|
14603
|
+
fallbackModels: ["grok-4.5", "grok-4.3"],
|
|
14604
|
+
hostname: "api.x.ai"
|
|
14605
|
+
});
|
|
14606
|
+
|
|
14499
14607
|
// src/internal/providers/builtin/index.ts
|
|
14500
|
-
var
|
|
14608
|
+
var _registeredState = (() => {
|
|
14609
|
+
const g = globalThis;
|
|
14610
|
+
const sym = /* @__PURE__ */ Symbol.for("theokit-sdk.providers.builtins-registered");
|
|
14611
|
+
if (g[sym] === void 0) g[sym] = { done: false };
|
|
14612
|
+
return g[sym];
|
|
14613
|
+
})();
|
|
14501
14614
|
function registerBuiltins() {
|
|
14502
|
-
if (
|
|
14503
|
-
|
|
14615
|
+
if (_registeredState.done) return;
|
|
14616
|
+
_registeredState.done = true;
|
|
14504
14617
|
registerProvider(ANTHROPIC);
|
|
14505
14618
|
registerProvider(OPENAI);
|
|
14506
14619
|
registerProvider(OPENAI_CHATGPT);
|
|
@@ -14511,6 +14624,15 @@ function registerBuiltins() {
|
|
|
14511
14624
|
registerProvider(LLAMACPP);
|
|
14512
14625
|
registerProvider(BEDROCK);
|
|
14513
14626
|
registerProvider(VERTEX);
|
|
14627
|
+
registerProvider(GOOGLE);
|
|
14628
|
+
registerProvider(MISTRAL);
|
|
14629
|
+
registerProvider(GROQ);
|
|
14630
|
+
registerProvider(COHERE);
|
|
14631
|
+
registerProvider(DEEPINFRA);
|
|
14632
|
+
registerProvider(TOGETHER);
|
|
14633
|
+
registerProvider(XAI);
|
|
14634
|
+
registerProvider(PERPLEXITY);
|
|
14635
|
+
registerProvider(CEREBRAS);
|
|
14514
14636
|
registerCatalogProviders();
|
|
14515
14637
|
}
|
|
14516
14638
|
|
|
@@ -14779,14 +14901,16 @@ var AnthropicClient = class {
|
|
|
14779
14901
|
// biome-ignore lint/complexity/noExcessiveCognitiveComplexity: HTTP+SSE handshake + accumulator is intentionally one block
|
|
14780
14902
|
async *stream(request, signal) {
|
|
14781
14903
|
const body = buildAnthropicBody(request);
|
|
14904
|
+
const headers = {
|
|
14905
|
+
"content-type": "application/json",
|
|
14906
|
+
"x-api-key": this.options.apiKey,
|
|
14907
|
+
"anthropic-version": this.options.version ?? "2023-06-01"
|
|
14908
|
+
};
|
|
14909
|
+
if (this.options.extraHeaders !== void 0) Object.assign(headers, this.options.extraHeaders);
|
|
14782
14910
|
const response = await this.fetchImpl(`${this.baseUrl}/v1/messages`, {
|
|
14783
14911
|
method: "POST",
|
|
14784
14912
|
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
|
-
},
|
|
14913
|
+
headers,
|
|
14790
14914
|
body: JSON.stringify(body)
|
|
14791
14915
|
});
|
|
14792
14916
|
if (!response.ok) {
|
|
@@ -15659,15 +15783,24 @@ var StreamSuppressionBuffer = class {
|
|
|
15659
15783
|
};
|
|
15660
15784
|
|
|
15661
15785
|
// src/internal/llm/openai.ts
|
|
15786
|
+
function deriveChatPath(baseUrl) {
|
|
15787
|
+
try {
|
|
15788
|
+
return /\/v\d+[a-z]*(\/|$)/.test(new URL(baseUrl).pathname) ? "/chat/completions" : "/v1/chat/completions";
|
|
15789
|
+
} catch {
|
|
15790
|
+
return "/v1/chat/completions";
|
|
15791
|
+
}
|
|
15792
|
+
}
|
|
15662
15793
|
var OpenAIClient = class {
|
|
15663
15794
|
constructor(options) {
|
|
15664
15795
|
this.options = options;
|
|
15665
|
-
this.baseUrl = options.baseUrl ?? "https://api.openai.com";
|
|
15796
|
+
this.baseUrl = (options.baseUrl ?? "https://api.openai.com").replace(/\/+$/, "");
|
|
15797
|
+
this.chatPath = options.chatCompletionsPath ?? deriveChatPath(this.baseUrl);
|
|
15666
15798
|
this.fetchImpl = options.fetch ?? fetch;
|
|
15667
15799
|
}
|
|
15668
15800
|
options;
|
|
15669
15801
|
name = "openai";
|
|
15670
15802
|
baseUrl;
|
|
15803
|
+
chatPath;
|
|
15671
15804
|
fetchImpl;
|
|
15672
15805
|
/**
|
|
15673
15806
|
* Whether this client recovers leaked Hermes tool-call dialect from assistant
|
|
@@ -15690,7 +15823,7 @@ var OpenAIClient = class {
|
|
|
15690
15823
|
const providerId = this.options.providerName ?? this.name;
|
|
15691
15824
|
let response;
|
|
15692
15825
|
try {
|
|
15693
|
-
response = await this.fetchImpl(`${this.baseUrl}
|
|
15826
|
+
response = await this.fetchImpl(`${this.baseUrl}${this.chatPath}`, {
|
|
15694
15827
|
method: "POST",
|
|
15695
15828
|
signal,
|
|
15696
15829
|
headers,
|
|
@@ -16787,6 +16920,9 @@ function selectTransport(profile, apiKey) {
|
|
|
16787
16920
|
if (profile.extractToolCallsFromContent === true) {
|
|
16788
16921
|
opts.extractToolCallsFromContent = true;
|
|
16789
16922
|
}
|
|
16923
|
+
if (profile.chatCompletionsPath !== void 0) {
|
|
16924
|
+
opts.chatCompletionsPath = profile.chatCompletionsPath;
|
|
16925
|
+
}
|
|
16790
16926
|
if (profile.name === "openai" && process.env.OPENAI_ORGANIZATION !== void 0) {
|
|
16791
16927
|
opts.organization = process.env.OPENAI_ORGANIZATION;
|
|
16792
16928
|
}
|
|
@@ -16806,6 +16942,11 @@ function selectTransport(profile, apiKey) {
|
|
|
16806
16942
|
}
|
|
16807
16943
|
const opts = { apiKey };
|
|
16808
16944
|
opts.baseUrl = process.env.ANTHROPIC_API_BASE_URL ?? profile.baseUrl;
|
|
16945
|
+
const t = applyTransform();
|
|
16946
|
+
assertOAuthResolved(t);
|
|
16947
|
+
if (t.fetch !== void 0) opts.fetch = t.fetch;
|
|
16948
|
+
const merged = profile.extraHeaders !== void 0 || t.headers !== void 0 ? { ...profile.extraHeaders, ...t.headers } : void 0;
|
|
16949
|
+
if (merged !== void 0) opts.extraHeaders = merged;
|
|
16809
16950
|
return new AnthropicClient(opts);
|
|
16810
16951
|
}
|
|
16811
16952
|
if (profile.apiMode === "bedrock_anthropic") {
|
|
@@ -17124,12 +17265,12 @@ function resolveMcpCwd(configCwd) {
|
|
|
17124
17265
|
|
|
17125
17266
|
// src/internal/providers/register-plugin-providers.ts
|
|
17126
17267
|
function registerPluginProviderProfiles(entries) {
|
|
17127
|
-
let
|
|
17268
|
+
let registered2 = 0;
|
|
17128
17269
|
for (const entry of entries) {
|
|
17129
17270
|
registerProvider(entry.profile);
|
|
17130
|
-
|
|
17271
|
+
registered2 += 1;
|
|
17131
17272
|
}
|
|
17132
|
-
return
|
|
17273
|
+
return registered2;
|
|
17133
17274
|
}
|
|
17134
17275
|
|
|
17135
17276
|
// src/internal/local-agent/real-local-run.ts
|
|
@@ -17454,12 +17595,12 @@ var pluginProvidersAnnounced = false;
|
|
|
17454
17595
|
function resolveRunProvider(options) {
|
|
17455
17596
|
registerBuiltins();
|
|
17456
17597
|
const profiles = options.pluginManager?.aggregated.providerProfiles ?? [];
|
|
17457
|
-
const
|
|
17458
|
-
if (
|
|
17598
|
+
const registered2 = registerPluginProviderProfiles(profiles);
|
|
17599
|
+
if (registered2 > 0 && !pluginProvidersAnnounced) {
|
|
17459
17600
|
pluginProvidersAnnounced = true;
|
|
17460
17601
|
const names = profiles.map((e) => e.profile.name).join(", ");
|
|
17461
17602
|
process.stderr.write(
|
|
17462
|
-
`[theokit-sdk] registered ${
|
|
17603
|
+
`[theokit-sdk] registered ${registered2} plugin provider profile(s): ${names}
|
|
17463
17604
|
`
|
|
17464
17605
|
);
|
|
17465
17606
|
}
|