@theokit/sdk 4.16.4 → 4.16.5

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/dist/index.cjs CHANGED
@@ -1760,212 +1760,6 @@ var init_session_summary_writer = __esm({
1760
1760
  MAX_TURN_CHARS = 2e3;
1761
1761
  }
1762
1762
  });
1763
-
1764
- // src/internal/session/agent-session-store.ts
1765
- function seedTranscript(prior, opts) {
1766
- return SessionTranscript.fromRecords(prior, opts);
1767
- }
1768
- function mapAgentTurn(steps) {
1769
- const assistant = {};
1770
- const toolResults = [];
1771
- const toolCalls = [];
1772
- for (const step of steps) {
1773
- if (step.type === "thinkingMessage") assistant.thinking = step.message.text;
1774
- else if (step.type === "assistantMessage") assistant.text = step.message.text;
1775
- else if (step.type === "toolCall")
1776
- toolCalls.push({
1777
- id: step.message.callId,
1778
- name: step.message.name,
1779
- input: step.message.args ?? {}
1780
- });
1781
- else
1782
- toolResults.push({
1783
- toolUseId: step.message.callId,
1784
- content: step.message.result,
1785
- isError: step.message.isError
1786
- });
1787
- }
1788
- if (toolCalls.length > 0) assistant.toolCalls = toolCalls;
1789
- return { assistant, toolResults };
1790
- }
1791
- function hasAssistantContent(a) {
1792
- return a.text !== void 0 || a.thinking !== void 0 || (a.toolCalls?.length ?? 0) > 0;
1793
- }
1794
- function appendConversation(transcript, conversation) {
1795
- for (const ct of conversation) {
1796
- if (ct.type !== "agentConversationTurn") continue;
1797
- const { assistant, toolResults } = mapAgentTurn(ct.turn.steps);
1798
- if (hasAssistantContent(assistant)) transcript.appendAssistantTurn(assistant);
1799
- if (toolResults.length > 0) transcript.appendToolResults(toolResults);
1800
- }
1801
- }
1802
- async function readSessionMessages(store, agentId) {
1803
- const records = await store.readRecords(agentId);
1804
- return reconstructMessages(records).map(narrowToSessionMessage);
1805
- }
1806
- function partToText(p) {
1807
- if (p.type === "text") return p.text ?? "";
1808
- if (p.type === "tool_use") return `[tool call] ${p.name ?? ""}`;
1809
- if (p.type === "tool_result") {
1810
- const body = typeof p.content === "string" ? p.content : JSON.stringify(p.content);
1811
- return `[tool result] ${body}`;
1812
- }
1813
- return "";
1814
- }
1815
- function narrowToSessionMessage(m) {
1816
- const role = m.role === "user" ? "user" : "assistant";
1817
- const text = m.content.map(partToText).filter((s) => s.length > 0).join("\n");
1818
- return { role, text };
1819
- }
1820
- function deltaRecords(transcript, priorLength) {
1821
- return transcript.records().slice(priorLength);
1822
- }
1823
- async function persistTurn(store, loc, sessionId, turn) {
1824
- const prior = await store.readRecords(loc.agentId);
1825
- const transcript = seedTranscript(prior, { cwd: loc.cwd, sessionId, model: loc.model });
1826
- transcript.appendUserTurn(turn.userText);
1827
- appendConversation(transcript, turn.conversation);
1828
- await store.appendRecords(loc.agentId, deltaRecords(transcript, prior.length));
1829
- }
1830
- var init_agent_session_store = __esm({
1831
- "src/internal/session/agent-session-store.ts"() {
1832
- init_session_transcript();
1833
- }
1834
- });
1835
-
1836
- // src/compaction.ts
1837
- function estimateTokens(text) {
1838
- return Math.ceil(text.length / 4);
1839
- }
1840
- var init_compaction = __esm({
1841
- "src/compaction.ts"() {
1842
- }
1843
- });
1844
-
1845
- // src/internal/runtime/compression/compression-summarizer.ts
1846
- var compression_summarizer_exports = {};
1847
- __export(compression_summarizer_exports, {
1848
- CompressionFailedError: () => CompressionFailedError,
1849
- buildCompressionPrompt: () => buildCompressionPrompt,
1850
- compressConversationWindow: () => compressConversationWindow
1851
- });
1852
- function buildCompressionPrompt(messages) {
1853
- const formatted = messages.map((m) => `[${m.role}]: ${m.content}`).join("\n\n");
1854
- return `Summarize the following ${messages.length} conversation messages into a concise summary that preserves ALL facts, decisions, user preferences, and context needed for the conversation to continue naturally. The summary will replace these messages in the context window. Be thorough but concise.
1855
-
1856
- --- CONVERSATION TO SUMMARIZE ---
1857
- ${formatted}
1858
- --- END ---`;
1859
- }
1860
- async function compressConversationWindow(opts) {
1861
- const userPrompt = buildCompressionPrompt(opts.messages);
1862
- let summary;
1863
- try {
1864
- summary = await opts.callLlm(opts.model, COMPRESSION_SYSTEM, userPrompt);
1865
- } catch (cause) {
1866
- throw new CompressionFailedError(
1867
- `Compression LLM call failed: ${cause instanceof Error ? cause.message : String(cause)}`,
1868
- { cause: cause instanceof Error ? cause : void 0 }
1869
- );
1870
- }
1871
- if (!summary || summary.trim().length === 0) {
1872
- throw new CompressionFailedError(
1873
- "Compression LLM returned empty summary \u2014 reduction ineffective."
1874
- );
1875
- }
1876
- return {
1877
- role: "system",
1878
- content: `[Compressed conversation summary]: ${summary.trim()}`
1879
- };
1880
- }
1881
- var CompressionFailedError, COMPRESSION_SYSTEM;
1882
- var init_compression_summarizer = __esm({
1883
- "src/internal/runtime/compression/compression-summarizer.ts"() {
1884
- CompressionFailedError = class extends Error {
1885
- name = "CompressionFailedError";
1886
- };
1887
- COMPRESSION_SYSTEM = "You are a conversation summarizer. Produce a concise factual summary. Preserve all decisions, preferences, code snippets, and action items. Do not add commentary or opinions. Output ONLY the summary text.";
1888
- }
1889
- });
1890
-
1891
- // src/internal/runtime/compression/compression-model-registry.ts
1892
- var compression_model_registry_exports = {};
1893
- __export(compression_model_registry_exports, {
1894
- CompressionModelUnresolvedError: () => CompressionModelUnresolvedError,
1895
- resolveCompressionModel: () => resolveCompressionModel
1896
- });
1897
- function resolveCompressionModel(agentModel) {
1898
- const exact = EXACT_REGISTRY.get(agentModel);
1899
- if (exact !== void 0) return exact;
1900
- const wildcard = matchWildcard(agentModel);
1901
- if (wildcard !== null) return wildcard;
1902
- if (isNoAuthProvider(agentModel)) return agentModel;
1903
- throw new CompressionModelUnresolvedError(agentModel);
1904
- }
1905
- function matchWildcard(agentModel) {
1906
- for (const [pattern, replacement] of WILDCARD_REGISTRY) {
1907
- const prefix = pattern.endsWith("*") ? pattern.slice(0, -1) : pattern;
1908
- if (!agentModel.startsWith(prefix)) continue;
1909
- const suffix = agentModel.slice(prefix.length);
1910
- const replPrefix = replacement.endsWith("*") ? replacement.slice(0, -1) : replacement;
1911
- return `${replPrefix}${suffix}`;
1912
- }
1913
- return null;
1914
- }
1915
- function isNoAuthProvider(agentModel) {
1916
- const slashIdx = agentModel.indexOf("/");
1917
- if (slashIdx <= 0) return false;
1918
- return NO_AUTH_PROVIDERS.has(agentModel.slice(0, slashIdx));
1919
- }
1920
- var EXACT_REGISTRY, WILDCARD_REGISTRY, NO_AUTH_PROVIDERS, CompressionModelUnresolvedError;
1921
- var init_compression_model_registry = __esm({
1922
- "src/internal/runtime/compression/compression-model-registry.ts"() {
1923
- EXACT_REGISTRY = /* @__PURE__ */ new Map([
1924
- // OpenAI family
1925
- ["openai/gpt-4o", "openai/gpt-4o-mini"],
1926
- ["openai/gpt-4-turbo", "openai/gpt-4o-mini"],
1927
- ["openai/gpt-4", "openai/gpt-4o-mini"],
1928
- ["openai/o1-preview", "openai/gpt-4o-mini"],
1929
- ["openai/o1", "openai/gpt-4o-mini"],
1930
- ["openai/o3", "openai/gpt-4o-mini"],
1931
- ["openai/o3-mini", "openai/gpt-4o-mini"],
1932
- // Anthropic family
1933
- ["anthropic/claude-opus-4", "anthropic/claude-3-5-haiku-latest"],
1934
- ["anthropic/claude-sonnet-4", "anthropic/claude-3-5-haiku-latest"],
1935
- ["anthropic/claude-3-5-sonnet", "anthropic/claude-3-5-haiku-latest"],
1936
- ["anthropic/claude-3-5-sonnet-latest", "anthropic/claude-3-5-haiku-latest"],
1937
- ["anthropic/claude-3-opus", "anthropic/claude-3-haiku"],
1938
- ["anthropic/claude-3-sonnet", "anthropic/claude-3-haiku"],
1939
- // Vertex (Gemini + Anthropic-on-Vertex)
1940
- ["vertex/gemini-1.5-pro", "vertex/gemini-1.5-flash"],
1941
- ["vertex/gemini-2.0-pro", "vertex/gemini-1.5-flash"],
1942
- ["vertex/claude-3-5-sonnet", "vertex/claude-3-5-haiku"],
1943
- ["vertex/claude-3-opus", "vertex/claude-3-haiku"],
1944
- // OpenRouter (preserve openrouter prefix, swap tier within same vendor)
1945
- ["openrouter/openai/gpt-4o", "openrouter/openai/gpt-4o-mini"],
1946
- ["openrouter/openai/gpt-4-turbo", "openrouter/openai/gpt-4o-mini"],
1947
- ["openrouter/anthropic/claude-3-5-sonnet", "openrouter/anthropic/claude-3-5-haiku"],
1948
- ["openrouter/anthropic/claude-opus-4", "openrouter/anthropic/claude-3-5-haiku"]
1949
- ]);
1950
- WILDCARD_REGISTRY = [
1951
- // Bedrock Anthropic: us.anthropic.claude-sonnet-* → us.anthropic.claude-3-haiku-*
1952
- ["bedrock/anthropic.claude-sonnet*", "bedrock/anthropic.claude-3-haiku*"],
1953
- ["bedrock/anthropic.claude-opus*", "bedrock/anthropic.claude-3-haiku*"],
1954
- ["bedrock/anthropic.claude-3-5-sonnet*", "bedrock/anthropic.claude-3-5-haiku*"]
1955
- ];
1956
- NO_AUTH_PROVIDERS = /* @__PURE__ */ new Set(["ollama", "lmstudio", "llamacpp"]);
1957
- CompressionModelUnresolvedError = class extends Error {
1958
- name = "CompressionModelUnresolvedError";
1959
- agentModel;
1960
- constructor(agentModel) {
1961
- super(
1962
- `Could not resolve a same-family-cheaper-tier compression model for "${agentModel}". Provide Agent.create({compression: {model: "<your-cheaper-model>"}}) OR add "${agentModel}" to the compression-model-registry (see ADR D440).`
1963
- );
1964
- this.agentModel = agentModel;
1965
- }
1966
- };
1967
- }
1968
- });
1969
1763
  var MODALITIES, costSchema, limitSchema, modalitiesSchema, catalogModelSchema;
1970
1764
  var init_catalog_schema = __esm({
1971
1765
  "src/internal/providers/catalog-schema.ts"() {
@@ -2036,10 +1830,6 @@ function getProviderProfile(name) {
2036
1830
  function listProviders() {
2037
1831
  return Array.from(REGISTRY.values());
2038
1832
  }
2039
- function _resetProvidersForTests() {
2040
- REGISTRY.clear();
2041
- ALIASES.clear();
2042
- }
2043
1833
  var REGISTRY, ALIASES;
2044
1834
  var init_registry = __esm({
2045
1835
  "src/internal/providers/registry.ts"() {
@@ -2050,19 +1840,6 @@ var init_registry = __esm({
2050
1840
  ALIASES = globalSingleton("theokit-sdk.providers.aliases", () => /* @__PURE__ */ new Map());
2051
1841
  }
2052
1842
  });
2053
-
2054
- // src/internal/providers/catalog-loader.ts
2055
- var catalog_loader_exports = {};
2056
- __export(catalog_loader_exports, {
2057
- _resetModelInfoIndexForTests: () => _resetModelInfoIndexForTests,
2058
- getCatalogCapabilities: () => getCatalogCapabilities,
2059
- getCatalogModelInfo: () => getCatalogModelInfo,
2060
- isPatchedModelKey: () => isPatchedModelKey,
2061
- listModelInfoKeys: () => listModelInfoKeys,
2062
- loadProviderCatalog: () => loadProviderCatalog,
2063
- patchModelInfo: () => patchModelInfo,
2064
- registerCatalogProviders: () => registerCatalogProviders
2065
- });
2066
1843
  function globalSingleton2(key2, create) {
2067
1844
  const g = globalThis;
2068
1845
  const sym = Symbol.for(key2);
@@ -2076,16 +1853,6 @@ function getCatalogModelInfo(key2) {
2076
1853
  function isPatchedModelKey(key2) {
2077
1854
  return patchedModelKeys.has(key2);
2078
1855
  }
2079
- function patchModelInfo(key2, model) {
2080
- ensureModelIndexLoaded();
2081
- const existing = modelInfoIndex.get(key2);
2082
- modelInfoIndex.set(key2, existing === void 0 ? model : { ...existing, ...model });
2083
- patchedModelKeys.add(key2);
2084
- }
2085
- function listModelInfoKeys() {
2086
- ensureModelIndexLoaded();
2087
- return [...modelInfoIndex.keys()];
2088
- }
2089
1856
  function ensureModelIndexLoaded() {
2090
1857
  if (indexState.loaded) return;
2091
1858
  indexState.loaded = true;
@@ -2119,11 +1886,6 @@ function indexEntryModels(entry) {
2119
1886
  }
2120
1887
  }
2121
1888
  }
2122
- function _resetModelInfoIndexForTests() {
2123
- modelInfoIndex.clear();
2124
- patchedModelKeys.clear();
2125
- indexState.loaded = false;
2126
- }
2127
1889
  function validateEntry(raw) {
2128
1890
  if (typeof raw.id !== "string" || typeof raw.displayName !== "string" || typeof raw.apiMode !== "string" || typeof raw.authType !== "string" || typeof raw.baseUrl !== "string" || !Array.isArray(raw.envVars) || !Array.isArray(raw.fallbackModels) || raw.capabilities == null || typeof raw.capabilities !== "object") {
2129
1891
  return null;
@@ -2134,12 +1896,6 @@ function loadProviderCatalog(opts) {
2134
1896
  const catalogPath = path.join(__dirname_resolved, "provider-catalog.json");
2135
1897
  const rawText = fs.readFileSync(catalogPath, "utf-8");
2136
1898
  let entries = JSON.parse(rawText);
2137
- if (opts?._testInjectMalformed) {
2138
- entries = [
2139
- ...entries,
2140
- { id: "malformed-provider", displayName: "Bad" }
2141
- ];
2142
- }
2143
1899
  const result = {};
2144
1900
  for (const raw of entries) {
2145
1901
  const validated = validateEntry(raw);
@@ -2168,7 +1924,7 @@ function getCatalogCapabilities(providerId) {
2168
1924
  return _capabilitiesCache[providerId];
2169
1925
  }
2170
1926
  function registerCatalogProviders(opts) {
2171
- const catalog = loadProviderCatalog(opts);
1927
+ const catalog = loadProviderCatalog();
2172
1928
  for (const entry of Object.values(catalog)) {
2173
1929
  if (getProviderProfile(entry.id) !== void 0) continue;
2174
1930
  if (entry.aliases?.some((a) => getProviderProfile(a) !== void 0)) continue;
@@ -2209,6 +1965,15 @@ var init_catalog_loader = __esm({
2209
1965
  }
2210
1966
  });
2211
1967
 
1968
+ // src/compaction.ts
1969
+ function estimateTokens(text) {
1970
+ return Math.ceil(text.length / 4);
1971
+ }
1972
+ var init_compaction = __esm({
1973
+ "src/compaction.ts"() {
1974
+ }
1975
+ });
1976
+
2212
1977
  // src/internal/providers/builtin/anthropic.ts
2213
1978
  var ANTHROPIC;
2214
1979
  var init_anthropic = __esm({
@@ -2972,9 +2737,6 @@ function registerBuiltins() {
2972
2737
  registerProvider(CEREBRAS);
2973
2738
  registerCatalogProviders();
2974
2739
  }
2975
- function _resetBuiltinsRegistered() {
2976
- _registeredState.done = false;
2977
- }
2978
2740
  var _registeredState;
2979
2741
  var init_builtin = __esm({
2980
2742
  "src/internal/providers/builtin/index.ts"() {
@@ -3101,9 +2863,6 @@ async function loadOne(dir, entryName) {
3101
2863
  }
3102
2864
  }
3103
2865
  }
3104
- function _resetDiscovery() {
3105
- discoveryState.done = false;
3106
- }
3107
2866
  var discoveryState;
3108
2867
  var init_discovery = __esm({
3109
2868
  "src/internal/providers/discovery.ts"() {
@@ -3115,21 +2874,6 @@ var init_discovery = __esm({
3115
2874
  });
3116
2875
 
3117
2876
  // src/internal/providers/index.ts
3118
- var providers_exports = {};
3119
- __export(providers_exports, {
3120
- ANTHROPIC: () => ANTHROPIC,
3121
- GEMINI: () => GEMINI,
3122
- OPENAI: () => OPENAI,
3123
- OPENROUTER: () => OPENROUTER,
3124
- _resetBuiltinsRegistered: () => _resetBuiltinsRegistered,
3125
- _resetDiscovery: () => _resetDiscovery,
3126
- _resetProvidersForTests: () => _resetProvidersForTests,
3127
- discoverProviderPlugins: () => discoverProviderPlugins,
3128
- getProviderProfile: () => getProviderProfile,
3129
- listProviders: () => listProviders,
3130
- registerBuiltins: () => registerBuiltins,
3131
- registerProvider: () => registerProvider
3132
- });
3133
2877
  var init_providers = __esm({
3134
2878
  "src/internal/providers/index.ts"() {
3135
2879
  init_builtin();
@@ -5874,12 +5618,6 @@ var init_vertex_router = __esm({
5874
5618
  });
5875
5619
 
5876
5620
  // src/internal/llm/router.ts
5877
- var router_exports = {};
5878
- __export(router_exports, {
5879
- _resetCredentialPoolWarnings: () => _resetCredentialPoolWarnings,
5880
- _resetNoAuthApiKeyWarnings: () => _resetNoAuthApiKeyWarnings,
5881
- resolveProviderChain: () => resolveProviderChain
5882
- });
5883
5621
  function resolveProviderChain(options) {
5884
5622
  registerBuiltins();
5885
5623
  return buildChain(options);
@@ -5977,9 +5715,6 @@ function warnNoAuthApiKeysIgnoredOnce(provider) {
5977
5715
  `
5978
5716
  );
5979
5717
  }
5980
- function _resetNoAuthApiKeyWarnings() {
5981
- warnedNoAuthApiKeys.clear();
5982
- }
5983
5718
  function sentinelForNoAuth(profile) {
5984
5719
  return profile.authType === "none" ? profile.name : void 0;
5985
5720
  }
@@ -6010,9 +5745,6 @@ function warnUnknownProvidersInApiKeys(apiKeys) {
6010
5745
  }
6011
5746
  }
6012
5747
  }
6013
- function _resetCredentialPoolWarnings() {
6014
- warnedProviders.clear();
6015
- }
6016
5748
  function resolveApiKey2(envVars) {
6017
5749
  for (const v of envVars) {
6018
5750
  const value = process.env[v];
@@ -6091,66 +5823,343 @@ function selectTransport(profile, apiKey) {
6091
5823
  providerName: profile.name
6092
5824
  });
6093
5825
  }
6094
- throw new exports.ConfigurationError(
6095
- `Provider "${profile.name}" requires apiMode "${profile.apiMode}" but no transport is registered. Install a third-party transport plugin (@theokit-transport-${profile.apiMode}) or use a provider with apiMode "chat_completions" or "anthropic_messages".`,
6096
- { code: "transport_unavailable" }
6097
- );
5826
+ throw new exports.ConfigurationError(
5827
+ `Provider "${profile.name}" requires apiMode "${profile.apiMode}" but no transport is registered. Install a third-party transport plugin (@theokit-transport-${profile.apiMode}) or use a provider with apiMode "chat_completions" or "anthropic_messages".`,
5828
+ { code: "transport_unavailable" }
5829
+ );
5830
+ }
5831
+ var warnedNoAuthApiKeys, warnedProviders;
5832
+ var init_router = __esm({
5833
+ "src/internal/llm/router.ts"() {
5834
+ init_errors();
5835
+ init_providers();
5836
+ init_anthropic3();
5837
+ init_bedrock_anthropic();
5838
+ init_credential_pool();
5839
+ init_credential_pool_context();
5840
+ init_fault_injection();
5841
+ init_ollama_native();
5842
+ init_openai2();
5843
+ init_pool_aware_client();
5844
+ init_responses();
5845
+ init_vertex_router();
5846
+ warnedNoAuthApiKeys = /* @__PURE__ */ new Set();
5847
+ warnedProviders = /* @__PURE__ */ new Set();
5848
+ }
5849
+ });
5850
+
5851
+ // src/internal/local-agent/real-local-run-provider.ts
5852
+ function inferProviderFromApiKey(apiKey) {
5853
+ if (apiKey === void 0 || apiKey.length === 0) return void 0;
5854
+ const byPrefix = [
5855
+ { provider: "openrouter", prefix: "sk-or-" },
5856
+ { provider: "anthropic", prefix: "sk-ant-" },
5857
+ { provider: "openai", prefix: "sk-" }
5858
+ ];
5859
+ for (const { provider, prefix } of byPrefix) {
5860
+ if (apiKey.startsWith(prefix) && getProviderProfile(provider) !== void 0) {
5861
+ return provider;
5862
+ }
5863
+ }
5864
+ return void 0;
5865
+ }
5866
+ function detectPrimaryProvider() {
5867
+ if (process.env.ANTHROPIC_API_KEY !== void 0 && process.env.ANTHROPIC_API_KEY.length > 0) {
5868
+ return "anthropic";
5869
+ }
5870
+ if (process.env.OPENAI_API_KEY !== void 0 && process.env.OPENAI_API_KEY.length > 0) {
5871
+ return "openai";
5872
+ }
5873
+ if (process.env.OPENROUTER_API_KEY !== void 0 && process.env.OPENROUTER_API_KEY.length > 0) {
5874
+ return "openrouter";
5875
+ }
5876
+ return "openai";
5877
+ }
5878
+ var init_real_local_run_provider = __esm({
5879
+ "src/internal/local-agent/real-local-run-provider.ts"() {
5880
+ init_providers();
5881
+ }
5882
+ });
5883
+
5884
+ // src/internal/runtime/compression/compression-model-registry.ts
5885
+ function resolveCompressionModel(agentModel) {
5886
+ const exact = EXACT_REGISTRY.get(agentModel);
5887
+ if (exact !== void 0) return exact;
5888
+ const wildcard = matchWildcard(agentModel);
5889
+ if (wildcard !== null) return wildcard;
5890
+ if (isNoAuthProvider(agentModel)) return agentModel;
5891
+ throw new CompressionModelUnresolvedError(agentModel);
5892
+ }
5893
+ function matchWildcard(agentModel) {
5894
+ for (const [pattern, replacement] of WILDCARD_REGISTRY) {
5895
+ const prefix = pattern.endsWith("*") ? pattern.slice(0, -1) : pattern;
5896
+ if (!agentModel.startsWith(prefix)) continue;
5897
+ const suffix = agentModel.slice(prefix.length);
5898
+ const replPrefix = replacement.endsWith("*") ? replacement.slice(0, -1) : replacement;
5899
+ return `${replPrefix}${suffix}`;
5900
+ }
5901
+ return null;
5902
+ }
5903
+ function isNoAuthProvider(agentModel) {
5904
+ const slashIdx = agentModel.indexOf("/");
5905
+ if (slashIdx <= 0) return false;
5906
+ return NO_AUTH_PROVIDERS.has(agentModel.slice(0, slashIdx));
5907
+ }
5908
+ var EXACT_REGISTRY, WILDCARD_REGISTRY, NO_AUTH_PROVIDERS, CompressionModelUnresolvedError;
5909
+ var init_compression_model_registry = __esm({
5910
+ "src/internal/runtime/compression/compression-model-registry.ts"() {
5911
+ EXACT_REGISTRY = /* @__PURE__ */ new Map([
5912
+ // OpenAI family
5913
+ ["openai/gpt-4o", "openai/gpt-4o-mini"],
5914
+ ["openai/gpt-4-turbo", "openai/gpt-4o-mini"],
5915
+ ["openai/gpt-4", "openai/gpt-4o-mini"],
5916
+ ["openai/o1-preview", "openai/gpt-4o-mini"],
5917
+ ["openai/o1", "openai/gpt-4o-mini"],
5918
+ ["openai/o3", "openai/gpt-4o-mini"],
5919
+ ["openai/o3-mini", "openai/gpt-4o-mini"],
5920
+ // Anthropic family
5921
+ ["anthropic/claude-opus-4", "anthropic/claude-3-5-haiku-latest"],
5922
+ ["anthropic/claude-sonnet-4", "anthropic/claude-3-5-haiku-latest"],
5923
+ ["anthropic/claude-3-5-sonnet", "anthropic/claude-3-5-haiku-latest"],
5924
+ ["anthropic/claude-3-5-sonnet-latest", "anthropic/claude-3-5-haiku-latest"],
5925
+ ["anthropic/claude-3-opus", "anthropic/claude-3-haiku"],
5926
+ ["anthropic/claude-3-sonnet", "anthropic/claude-3-haiku"],
5927
+ // Vertex (Gemini + Anthropic-on-Vertex)
5928
+ ["vertex/gemini-1.5-pro", "vertex/gemini-1.5-flash"],
5929
+ ["vertex/gemini-2.0-pro", "vertex/gemini-1.5-flash"],
5930
+ ["vertex/claude-3-5-sonnet", "vertex/claude-3-5-haiku"],
5931
+ ["vertex/claude-3-opus", "vertex/claude-3-haiku"],
5932
+ // OpenRouter (preserve openrouter prefix, swap tier within same vendor)
5933
+ ["openrouter/openai/gpt-4o", "openrouter/openai/gpt-4o-mini"],
5934
+ ["openrouter/openai/gpt-4-turbo", "openrouter/openai/gpt-4o-mini"],
5935
+ ["openrouter/anthropic/claude-3-5-sonnet", "openrouter/anthropic/claude-3-5-haiku"],
5936
+ ["openrouter/anthropic/claude-opus-4", "openrouter/anthropic/claude-3-5-haiku"]
5937
+ ]);
5938
+ WILDCARD_REGISTRY = [
5939
+ // Bedrock Anthropic: us.anthropic.claude-sonnet-* → us.anthropic.claude-3-haiku-*
5940
+ ["bedrock/anthropic.claude-sonnet*", "bedrock/anthropic.claude-3-haiku*"],
5941
+ ["bedrock/anthropic.claude-opus*", "bedrock/anthropic.claude-3-haiku*"],
5942
+ ["bedrock/anthropic.claude-3-5-sonnet*", "bedrock/anthropic.claude-3-5-haiku*"]
5943
+ ];
5944
+ NO_AUTH_PROVIDERS = /* @__PURE__ */ new Set(["ollama", "lmstudio", "llamacpp"]);
5945
+ CompressionModelUnresolvedError = class extends Error {
5946
+ name = "CompressionModelUnresolvedError";
5947
+ agentModel;
5948
+ constructor(agentModel) {
5949
+ super(
5950
+ `Could not resolve a same-family-cheaper-tier compression model for "${agentModel}". Provide Agent.create({compression: {model: "<your-cheaper-model>"}}) OR add "${agentModel}" to the compression-model-registry (see ADR D440).`
5951
+ );
5952
+ this.agentModel = agentModel;
5953
+ }
5954
+ };
5955
+ }
5956
+ });
5957
+
5958
+ // src/internal/runtime/compression/compression-summarizer.ts
5959
+ function buildCompressionPrompt(messages) {
5960
+ const formatted = messages.map((m) => `[${m.role}]: ${m.content}`).join("\n\n");
5961
+ return `Summarize the following ${messages.length} conversation messages into a concise summary that preserves ALL facts, decisions, user preferences, and context needed for the conversation to continue naturally. The summary will replace these messages in the context window. Be thorough but concise.
5962
+
5963
+ --- CONVERSATION TO SUMMARIZE ---
5964
+ ${formatted}
5965
+ --- END ---`;
5966
+ }
5967
+ async function compressConversationWindow(opts) {
5968
+ const userPrompt = buildCompressionPrompt(opts.messages);
5969
+ let summary;
5970
+ try {
5971
+ summary = await opts.callLlm(opts.model, COMPRESSION_SYSTEM, userPrompt);
5972
+ } catch (cause) {
5973
+ throw new CompressionFailedError(
5974
+ `Compression LLM call failed: ${cause instanceof Error ? cause.message : String(cause)}`,
5975
+ { cause: cause instanceof Error ? cause : void 0 }
5976
+ );
5977
+ }
5978
+ if (!summary || summary.trim().length === 0) {
5979
+ throw new CompressionFailedError(
5980
+ "Compression LLM returned empty summary \u2014 reduction ineffective."
5981
+ );
5982
+ }
5983
+ return {
5984
+ role: "system",
5985
+ content: `[Compressed conversation summary]: ${summary.trim()}`
5986
+ };
5987
+ }
5988
+ var CompressionFailedError, COMPRESSION_SYSTEM;
5989
+ var init_compression_summarizer = __esm({
5990
+ "src/internal/runtime/compression/compression-summarizer.ts"() {
5991
+ CompressionFailedError = class extends Error {
5992
+ name = "CompressionFailedError";
5993
+ };
5994
+ COMPRESSION_SYSTEM = "You are a conversation summarizer. Produce a concise factual summary. Preserve all decisions, preferences, code snippets, and action items. Do not add commentary or opinions. Output ONLY the summary text.";
5995
+ }
5996
+ });
5997
+
5998
+ // src/internal/session/agent-session-store.ts
5999
+ function seedTranscript(prior, opts) {
6000
+ return SessionTranscript.fromRecords(prior, opts);
6001
+ }
6002
+ function mapAgentTurn(steps) {
6003
+ const assistant = {};
6004
+ const toolResults = [];
6005
+ const toolCalls = [];
6006
+ for (const step of steps) {
6007
+ if (step.type === "thinkingMessage") assistant.thinking = step.message.text;
6008
+ else if (step.type === "assistantMessage") assistant.text = step.message.text;
6009
+ else if (step.type === "toolCall")
6010
+ toolCalls.push({
6011
+ id: step.message.callId,
6012
+ name: step.message.name,
6013
+ input: step.message.args ?? {}
6014
+ });
6015
+ else
6016
+ toolResults.push({
6017
+ toolUseId: step.message.callId,
6018
+ content: step.message.result,
6019
+ isError: step.message.isError
6020
+ });
6021
+ }
6022
+ if (toolCalls.length > 0) assistant.toolCalls = toolCalls;
6023
+ return { assistant, toolResults };
6024
+ }
6025
+ function hasAssistantContent(a) {
6026
+ return a.text !== void 0 || a.thinking !== void 0 || (a.toolCalls?.length ?? 0) > 0;
6027
+ }
6028
+ function appendConversation(transcript, conversation) {
6029
+ for (const ct of conversation) {
6030
+ if (ct.type !== "agentConversationTurn") continue;
6031
+ const { assistant, toolResults } = mapAgentTurn(ct.turn.steps);
6032
+ if (hasAssistantContent(assistant)) transcript.appendAssistantTurn(assistant);
6033
+ if (toolResults.length > 0) transcript.appendToolResults(toolResults);
6034
+ }
6035
+ }
6036
+ async function readSessionMessages(store, agentId) {
6037
+ const records = await store.readRecords(agentId);
6038
+ return reconstructMessages(records).map(narrowToSessionMessage);
6039
+ }
6040
+ function partToText(p) {
6041
+ if (p.type === "text") return p.text ?? "";
6042
+ if (p.type === "tool_use") return `[tool call] ${p.name ?? ""}`;
6043
+ if (p.type === "tool_result") {
6044
+ const body = typeof p.content === "string" ? p.content : JSON.stringify(p.content);
6045
+ return `[tool result] ${body}`;
6046
+ }
6047
+ return "";
6098
6048
  }
6099
- var warnedNoAuthApiKeys, warnedProviders;
6100
- var init_router = __esm({
6101
- "src/internal/llm/router.ts"() {
6102
- init_errors();
6103
- init_providers();
6104
- init_anthropic3();
6105
- init_bedrock_anthropic();
6106
- init_credential_pool();
6107
- init_credential_pool_context();
6108
- init_fault_injection();
6109
- init_ollama_native();
6110
- init_openai2();
6111
- init_pool_aware_client();
6112
- init_responses();
6113
- init_vertex_router();
6114
- warnedNoAuthApiKeys = /* @__PURE__ */ new Set();
6115
- warnedProviders = /* @__PURE__ */ new Set();
6049
+ function narrowToSessionMessage(m) {
6050
+ const role = m.role === "user" ? "user" : "assistant";
6051
+ const text = m.content.map(partToText).filter((s) => s.length > 0).join("\n");
6052
+ return { role, text };
6053
+ }
6054
+ function deltaRecords(transcript, priorLength) {
6055
+ return transcript.records().slice(priorLength);
6056
+ }
6057
+ async function persistTurn(store, loc, sessionId, turn) {
6058
+ const prior = await store.readRecords(loc.agentId);
6059
+ const transcript = seedTranscript(prior, { cwd: loc.cwd, sessionId, model: loc.model });
6060
+ transcript.appendUserTurn(turn.userText);
6061
+ appendConversation(transcript, turn.conversation);
6062
+ await store.appendRecords(loc.agentId, deltaRecords(transcript, prior.length));
6063
+ }
6064
+ var init_agent_session_store = __esm({
6065
+ "src/internal/session/agent-session-store.ts"() {
6066
+ init_session_transcript();
6116
6067
  }
6117
6068
  });
6118
6069
 
6119
- // src/internal/local-agent/real-local-run-provider.ts
6120
- var real_local_run_provider_exports = {};
6121
- __export(real_local_run_provider_exports, {
6122
- detectPrimaryProvider: () => detectPrimaryProvider,
6123
- inferProviderFromApiKey: () => inferProviderFromApiKey
6124
- });
6125
- function inferProviderFromApiKey(apiKey) {
6126
- if (apiKey === void 0 || apiKey.length === 0) return void 0;
6127
- const byPrefix = [
6128
- { provider: "openrouter", prefix: "sk-or-" },
6129
- { provider: "anthropic", prefix: "sk-ant-" },
6130
- { provider: "openai", prefix: "sk-" }
6131
- ];
6132
- for (const { provider, prefix } of byPrefix) {
6133
- if (apiKey.startsWith(prefix) && getProviderProfile(provider) !== void 0) {
6134
- return provider;
6070
+ // src/internal/session/agent-session.ts
6071
+ function transcriptKey(cwd, agentId) {
6072
+ return `${cwd}::${agentId}`;
6073
+ }
6074
+ function appendSessionMessage(agentId, message) {
6075
+ const existing = sessions.get(agentId) ?? [];
6076
+ existing.push(message);
6077
+ sessions.set(agentId, existing);
6078
+ }
6079
+ function getSessionMessages(agentId) {
6080
+ return sessions.get(agentId) ?? [];
6081
+ }
6082
+ function persistTurnToTranscript(store, loc, sessionId, turn, onCompact) {
6083
+ const key2 = transcriptKey(loc.cwd, loc.agentId);
6084
+ const chained = (pendingWrites.get(key2) ?? Promise.resolve()).then(async () => {
6085
+ try {
6086
+ await persistTurn(store, loc, sessionId, turn);
6087
+ const count = (recordCounts.get(key2) ?? 0) + 1;
6088
+ recordCounts.set(key2, count);
6089
+ if (turn.autoCompact !== void 0) {
6090
+ const { autoCompactIfNeeded: autoCompactIfNeeded2 } = await Promise.resolve().then(() => (init_compact_session(), compact_session_exports));
6091
+ const fired = await autoCompactIfNeeded2({
6092
+ store,
6093
+ loc,
6094
+ sessionId,
6095
+ usageTotal: turn.autoCompact.usageTotal,
6096
+ contextWindow: turn.autoCompact.contextWindow,
6097
+ turnCount: count,
6098
+ summarize: turn.autoCompact.summarize
6099
+ });
6100
+ if (fired) onCompact?.();
6101
+ }
6102
+ } catch (cause) {
6103
+ const msg = cause instanceof Error ? cause.message : String(cause);
6104
+ process.stderr.write(
6105
+ `[theokit-sdk] session transcript write failed (${loc.agentId}): ${msg}
6106
+ `
6107
+ );
6135
6108
  }
6136
- }
6137
- return void 0;
6109
+ });
6110
+ pendingWrites.set(
6111
+ key2,
6112
+ chained.then(
6113
+ () => void 0,
6114
+ () => void 0
6115
+ )
6116
+ );
6138
6117
  }
6139
- function detectPrimaryProvider() {
6140
- if (process.env.ANTHROPIC_API_KEY !== void 0 && process.env.ANTHROPIC_API_KEY.length > 0) {
6141
- return "anthropic";
6142
- }
6143
- if (process.env.OPENAI_API_KEY !== void 0 && process.env.OPENAI_API_KEY.length > 0) {
6144
- return "openai";
6118
+ async function hydrateSession(agentId, loc) {
6119
+ const key2 = transcriptKey(loc.cwd, agentId);
6120
+ if (hydratedKeys.has(key2)) return;
6121
+ hydratedKeys.add(key2);
6122
+ const persisted = await readSessionMessages(loc.store, agentId);
6123
+ if (persisted.length === 0) return;
6124
+ if (!sessions.has(agentId) || sessions.get(agentId)?.length === 0) {
6125
+ sessions.set(agentId, persisted);
6145
6126
  }
6146
- if (process.env.OPENROUTER_API_KEY !== void 0 && process.env.OPENROUTER_API_KEY.length > 0) {
6147
- return "openrouter";
6127
+ }
6128
+ async function flushSessionWrites() {
6129
+ while (pendingWrites.size > 0) {
6130
+ const all = Array.from(pendingWrites.values());
6131
+ pendingWrites.clear();
6132
+ await Promise.all(all);
6148
6133
  }
6149
- return "openai";
6150
6134
  }
6151
- var init_real_local_run_provider = __esm({
6152
- "src/internal/local-agent/real-local-run-provider.ts"() {
6153
- init_providers();
6135
+ function clearSession(agentId) {
6136
+ sessions.delete(agentId);
6137
+ }
6138
+ function invalidateSessionCache(cwd, agentId) {
6139
+ sessions.delete(agentId);
6140
+ hydratedKeys.delete(transcriptKey(cwd, agentId));
6141
+ }
6142
+ function enqueueSessionWrite(cwd, agentId, fn) {
6143
+ const key2 = transcriptKey(cwd, agentId);
6144
+ const prior = pendingWrites.get(key2) ?? Promise.resolve();
6145
+ const result = prior.then(fn);
6146
+ pendingWrites.set(
6147
+ key2,
6148
+ result.then(
6149
+ () => void 0,
6150
+ () => void 0
6151
+ )
6152
+ );
6153
+ return result;
6154
+ }
6155
+ var sessions, hydratedKeys, pendingWrites, recordCounts;
6156
+ var init_agent_session = __esm({
6157
+ "src/internal/session/agent-session.ts"() {
6158
+ init_agent_session_store();
6159
+ sessions = /* @__PURE__ */ new Map();
6160
+ hydratedKeys = /* @__PURE__ */ new Set();
6161
+ pendingWrites = /* @__PURE__ */ new Map();
6162
+ recordCounts = /* @__PURE__ */ new Map();
6154
6163
  }
6155
6164
  });
6156
6165
 
@@ -6215,35 +6224,29 @@ ${summaryBody}`;
6215
6224
  transcript.appendUserTurn(summary);
6216
6225
  const delta = transcript.records().slice(prior.length);
6217
6226
  await opts.store.appendRecords(opts.loc.agentId, delta);
6218
- const { invalidateSessionCache: invalidateSessionCache2 } = await Promise.resolve().then(() => (init_agent_session(), agent_session_exports));
6219
- invalidateSessionCache2(opts.loc.cwd, opts.loc.agentId);
6227
+ invalidateSessionCache(opts.loc.cwd, opts.loc.agentId);
6220
6228
  const postTokens = estimateTokens([...preserved, summary].join("\n"));
6221
6229
  return { preTokens, postTokens };
6222
6230
  }
6223
6231
  function buildDefaultSummarizer(opts) {
6224
6232
  return async (messages) => {
6225
- const { compressConversationWindow: compressConversationWindow2 } = await Promise.resolve().then(() => (init_compression_summarizer(), compression_summarizer_exports));
6226
- const { resolveCompressionModel: resolveCompressionModel2 } = await Promise.resolve().then(() => (init_compression_model_registry(), compression_model_registry_exports));
6227
- const { resolveProviderChain: resolveProviderChain2 } = await Promise.resolve().then(() => (init_router(), router_exports));
6228
- const { inferProviderFromApiKey: inferProviderFromApiKey2, detectPrimaryProvider: detectPrimaryProvider2 } = await Promise.resolve().then(() => (init_real_local_run_provider(), real_local_run_provider_exports));
6229
- const keyProvider = inferProviderFromApiKey2(opts.apiKey);
6233
+ const keyProvider = inferProviderFromApiKey(opts.apiKey);
6230
6234
  const modelPrefix = opts.agentModel.includes("/") ? opts.agentModel.slice(0, opts.agentModel.indexOf("/")) : void 0;
6231
- const { registerBuiltins: registerBuiltins2, getProviderProfile: getProviderProfile2 } = await Promise.resolve().then(() => (init_providers(), providers_exports));
6232
- registerBuiltins2();
6233
- const prefixProfile = modelPrefix !== void 0 ? getProviderProfile2(modelPrefix) : void 0;
6234
- const provider = prefixProfile !== void 0 ? modelPrefix : keyProvider ?? detectPrimaryProvider2();
6235
+ registerBuiltins();
6236
+ const prefixProfile = modelPrefix !== void 0 ? getProviderProfile(modelPrefix) : void 0;
6237
+ const provider = prefixProfile !== void 0 ? modelPrefix : keyProvider ?? detectPrimaryProvider();
6235
6238
  let model;
6236
6239
  if (provider !== modelPrefix) {
6237
6240
  model = opts.agentModel;
6238
6241
  } else {
6239
6242
  try {
6240
- model = resolveCompressionModel2(opts.agentModel);
6243
+ model = resolveCompressionModel(opts.agentModel);
6241
6244
  } catch {
6242
6245
  model = opts.agentModel;
6243
6246
  }
6244
6247
  }
6245
6248
  const callLlm = async (m, system, user) => {
6246
- const chain = resolveProviderChain2({
6249
+ const chain = resolveProviderChain({
6247
6250
  primary: provider,
6248
6251
  ...opts.apiKey !== void 0 ? { apiKeys: { [provider]: [opts.apiKey] } } : {}
6249
6252
  });
@@ -6263,7 +6266,7 @@ function buildDefaultSummarizer(opts) {
6263
6266
  }
6264
6267
  return text;
6265
6268
  };
6266
- const summary = await compressConversationWindow2({ messages: [...messages], model, callLlm });
6269
+ const summary = await compressConversationWindow({ messages: [...messages], model, callLlm });
6267
6270
  return summary.content;
6268
6271
  };
6269
6272
  }
@@ -6297,6 +6300,12 @@ var COMPACT_SUMMARY_MARKER, COMPACT_USER_MESSAGE_MAX_TOKENS, autoCompactAttempts
6297
6300
  var init_compact_session = __esm({
6298
6301
  "src/internal/session/compact-session.ts"() {
6299
6302
  init_compaction();
6303
+ init_router();
6304
+ init_real_local_run_provider();
6305
+ init_providers();
6306
+ init_compression_model_registry();
6307
+ init_compression_summarizer();
6308
+ init_agent_session();
6300
6309
  init_session_transcript();
6301
6310
  COMPACT_SUMMARY_MARKER = "[[theokit:compact-summary]]";
6302
6311
  COMPACT_USER_MESSAGE_MAX_TOKENS = 2e4;
@@ -6308,122 +6317,6 @@ var init_compact_session = __esm({
6308
6317
  })();
6309
6318
  }
6310
6319
  });
6311
-
6312
- // src/internal/session/agent-session.ts
6313
- var agent_session_exports = {};
6314
- __export(agent_session_exports, {
6315
- appendSessionMessage: () => appendSessionMessage,
6316
- clearAllSessions: () => clearAllSessions,
6317
- clearSession: () => clearSession,
6318
- enqueueSessionWrite: () => enqueueSessionWrite,
6319
- flushSessionWrites: () => flushSessionWrites,
6320
- getSessionMessages: () => getSessionMessages,
6321
- hydrateSession: () => hydrateSession,
6322
- invalidateSessionCache: () => invalidateSessionCache,
6323
- persistTurnToTranscript: () => persistTurnToTranscript
6324
- });
6325
- function transcriptKey(cwd, agentId) {
6326
- return `${cwd}::${agentId}`;
6327
- }
6328
- function appendSessionMessage(agentId, message) {
6329
- const existing = sessions.get(agentId) ?? [];
6330
- existing.push(message);
6331
- sessions.set(agentId, existing);
6332
- }
6333
- function getSessionMessages(agentId) {
6334
- return sessions.get(agentId) ?? [];
6335
- }
6336
- function persistTurnToTranscript(store, loc, sessionId, turn, onCompact) {
6337
- const key2 = transcriptKey(loc.cwd, loc.agentId);
6338
- const chained = (pendingWrites.get(key2) ?? Promise.resolve()).then(async () => {
6339
- try {
6340
- await persistTurn(store, loc, sessionId, turn);
6341
- const count = (recordCounts.get(key2) ?? 0) + 1;
6342
- recordCounts.set(key2, count);
6343
- if (turn.autoCompact !== void 0) {
6344
- const { autoCompactIfNeeded: autoCompactIfNeeded2 } = await Promise.resolve().then(() => (init_compact_session(), compact_session_exports));
6345
- const fired = await autoCompactIfNeeded2({
6346
- store,
6347
- loc,
6348
- sessionId,
6349
- usageTotal: turn.autoCompact.usageTotal,
6350
- contextWindow: turn.autoCompact.contextWindow,
6351
- turnCount: count,
6352
- summarize: turn.autoCompact.summarize
6353
- });
6354
- if (fired) onCompact?.();
6355
- }
6356
- } catch (cause) {
6357
- const msg = cause instanceof Error ? cause.message : String(cause);
6358
- process.stderr.write(
6359
- `[theokit-sdk] session transcript write failed (${loc.agentId}): ${msg}
6360
- `
6361
- );
6362
- }
6363
- });
6364
- pendingWrites.set(
6365
- key2,
6366
- chained.then(
6367
- () => void 0,
6368
- () => void 0
6369
- )
6370
- );
6371
- }
6372
- async function hydrateSession(agentId, loc) {
6373
- const key2 = transcriptKey(loc.cwd, agentId);
6374
- if (hydratedKeys.has(key2)) return;
6375
- hydratedKeys.add(key2);
6376
- const persisted = await readSessionMessages(loc.store, agentId);
6377
- if (persisted.length === 0) return;
6378
- if (!sessions.has(agentId) || sessions.get(agentId)?.length === 0) {
6379
- sessions.set(agentId, persisted);
6380
- }
6381
- }
6382
- async function flushSessionWrites() {
6383
- while (pendingWrites.size > 0) {
6384
- const all = Array.from(pendingWrites.values());
6385
- pendingWrites.clear();
6386
- await Promise.all(all);
6387
- }
6388
- }
6389
- function clearSession(agentId) {
6390
- sessions.delete(agentId);
6391
- }
6392
- function invalidateSessionCache(cwd, agentId) {
6393
- sessions.delete(agentId);
6394
- hydratedKeys.delete(transcriptKey(cwd, agentId));
6395
- }
6396
- function enqueueSessionWrite(cwd, agentId, fn) {
6397
- const key2 = transcriptKey(cwd, agentId);
6398
- const prior = pendingWrites.get(key2) ?? Promise.resolve();
6399
- const result = prior.then(fn);
6400
- pendingWrites.set(
6401
- key2,
6402
- result.then(
6403
- () => void 0,
6404
- () => void 0
6405
- )
6406
- );
6407
- return result;
6408
- }
6409
- function clearAllSessions() {
6410
- sessions.clear();
6411
- hydratedKeys.clear();
6412
- recordCounts.clear();
6413
- const g = globalThis;
6414
- const sym = /* @__PURE__ */ Symbol.for("theokit-sdk.session.auto-compact-attempts");
6415
- g[sym]?.clear();
6416
- }
6417
- var sessions, hydratedKeys, pendingWrites, recordCounts;
6418
- var init_agent_session = __esm({
6419
- "src/internal/session/agent-session.ts"() {
6420
- init_agent_session_store();
6421
- sessions = /* @__PURE__ */ new Map();
6422
- hydratedKeys = /* @__PURE__ */ new Set();
6423
- pendingWrites = /* @__PURE__ */ new Map();
6424
- recordCounts = /* @__PURE__ */ new Map();
6425
- }
6426
- });
6427
6320
  async function withToolWhitelist(whitelist, fn) {
6428
6321
  return toolWhitelistStore.run(whitelist, fn);
6429
6322
  }
@@ -13243,6 +13136,8 @@ function parseDecisionFromStdout(stdout) {
13243
13136
  // src/internal/runtime/lifecycle/post-run-lifecycle.ts
13244
13137
  init_run_events();
13245
13138
  init_session_summary_writer();
13139
+ init_catalog_loader();
13140
+ init_compact_session();
13246
13141
 
13247
13142
  // src/internal/runtime/memory/memory-path-selector.ts
13248
13143
  var PORT_MEMORY_PATH_ENV_VAR = "THEOKIT_PORT_MEMORY_PATH";
@@ -13291,9 +13186,7 @@ async function runPostRunLifecycle(inputs) {
13291
13186
  appendSessionMessage(agentId, { role: "assistant", text: result.result });
13292
13187
  }
13293
13188
  const conversation = await safeConversation(run);
13294
- const { getCatalogModelInfo: getCatalogModelInfo2 } = await Promise.resolve().then(() => (init_catalog_loader(), catalog_loader_exports));
13295
- const { buildDefaultSummarizer: buildDefaultSummarizer2 } = await Promise.resolve().then(() => (init_compact_session(), compact_session_exports));
13296
- const contextWindow = getCatalogModelInfo2(model)?.limit?.context;
13189
+ const contextWindow = getCatalogModelInfo(model)?.limit?.context;
13297
13190
  if (contextWindow === void 0) {
13298
13191
  const g = globalThis;
13299
13192
  const sym = /* @__PURE__ */ Symbol.for("theokit-sdk.compact.no-cw-warned");
@@ -13318,7 +13211,7 @@ async function runPostRunLifecycle(inputs) {
13318
13211
  autoCompact: {
13319
13212
  usageTotal: usageForTrigger,
13320
13213
  contextWindow,
13321
- summarize: buildDefaultSummarizer2({
13214
+ summarize: buildDefaultSummarizer({
13322
13215
  agentModel: model,
13323
13216
  ...inputs.apiKey !== void 0 ? { apiKey: inputs.apiKey } : {}
13324
13217
  })
@@ -21313,6 +21206,7 @@ async function getRegisteredAgentOrThrow(agentId) {
21313
21206
  // src/agent.ts
21314
21207
  init_errors();
21315
21208
  init_discovery();
21209
+ init_agent_session();
21316
21210
  init_agent_factory_registry();
21317
21211
  var streamObjectImport;
21318
21212
  var Agent = class _Agent {
@@ -21615,8 +21509,7 @@ var Agent = class _Agent {
21615
21509
  const { defaultBaseDir: defaultBaseDir2, expandTilde: expandTilde2 } = await Promise.resolve().then(() => (init_session_transcript(), session_transcript_exports));
21616
21510
  const baseDir = reg.options.local?.baseDir !== void 0 ? expandTilde2(reg.options.local.baseDir) : defaultBaseDir2();
21617
21511
  const store = new FsSessionStore2({ baseDir, cwd });
21618
- const { enqueueSessionWrite: enqueueSessionWrite2 } = await Promise.resolve().then(() => (init_agent_session(), agent_session_exports));
21619
- return enqueueSessionWrite2(cwd, agentId, () => compactSessionTranscript2({
21512
+ return enqueueSessionWrite(cwd, agentId, () => compactSessionTranscript2({
21620
21513
  store,
21621
21514
  loc: { cwd, agentId, model },
21622
21515
  sessionId: agentId,