@theokit/sdk 5.11.0 → 5.11.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/dist/{agent-GWKRARAL.js → agent-DFV52V6E.js} +7 -7
  3. package/dist/{agent-GWKRARAL.js.map → agent-DFV52V6E.js.map} +1 -1
  4. package/dist/{agent-5DOR5T3E.cjs → agent-OKP4LHG2.cjs} +8 -8
  5. package/dist/{agent-5DOR5T3E.cjs.map → agent-OKP4LHG2.cjs.map} +1 -1
  6. package/dist/{chunk-5OHB5HJF.cjs → chunk-35KBC4BX.cjs} +133 -93
  7. package/dist/chunk-35KBC4BX.cjs.map +1 -0
  8. package/dist/{chunk-N7ZIPW2N.cjs → chunk-3JANYJYS.cjs} +3 -3
  9. package/dist/{chunk-N7ZIPW2N.cjs.map → chunk-3JANYJYS.cjs.map} +1 -1
  10. package/dist/{chunk-Z5BAFHPU.js → chunk-6G4IRQUD.js} +3 -3
  11. package/dist/{chunk-Z5BAFHPU.js.map → chunk-6G4IRQUD.js.map} +1 -1
  12. package/dist/{chunk-74OA5DIM.js → chunk-BBJ77S62.js} +3 -3
  13. package/dist/{chunk-74OA5DIM.js.map → chunk-BBJ77S62.js.map} +1 -1
  14. package/dist/{chunk-5H2GJXGC.cjs → chunk-EQ5NCH2Y.cjs} +4 -4
  15. package/dist/{chunk-5H2GJXGC.cjs.map → chunk-EQ5NCH2Y.cjs.map} +1 -1
  16. package/dist/{chunk-TE6XVTOA.js → chunk-JLIRFWUG.js} +47 -17
  17. package/dist/chunk-JLIRFWUG.js.map +1 -0
  18. package/dist/{chunk-YEHQ3SIC.cjs → chunk-JV7JA7BM.cjs} +5 -5
  19. package/dist/{chunk-YEHQ3SIC.cjs.map → chunk-JV7JA7BM.cjs.map} +1 -1
  20. package/dist/{chunk-4PHSVR2R.js → chunk-MHIBYKWA.js} +83 -43
  21. package/dist/chunk-MHIBYKWA.js.map +1 -0
  22. package/dist/{chunk-WPO3VCY4.cjs → chunk-N7KS3TIR.cjs} +47 -17
  23. package/dist/chunk-N7KS3TIR.cjs.map +1 -0
  24. package/dist/{chunk-BZKF7TXX.cjs → chunk-P5N3Q2NH.cjs} +22 -22
  25. package/dist/{chunk-BZKF7TXX.cjs.map → chunk-P5N3Q2NH.cjs.map} +1 -1
  26. package/dist/{chunk-7Y23B7XX.js → chunk-Q34EBNYG.js} +3 -3
  27. package/dist/{chunk-7Y23B7XX.js.map → chunk-Q34EBNYG.js.map} +1 -1
  28. package/dist/{chunk-HI3W37FY.js → chunk-U27XHOEF.js} +3 -3
  29. package/dist/{chunk-HI3W37FY.js.map → chunk-U27XHOEF.js.map} +1 -1
  30. package/dist/{compact-session-F2UDGZCN.js → compact-session-4HAUP3HK.js} +4 -4
  31. package/dist/{compact-session-F2UDGZCN.js.map → compact-session-4HAUP3HK.js.map} +1 -1
  32. package/dist/{compact-session-2AETONOS.cjs → compact-session-Y56D3S57.cjs} +13 -13
  33. package/dist/{compact-session-2AETONOS.cjs.map → compact-session-Y56D3S57.cjs.map} +1 -1
  34. package/dist/cron.cjs +7 -7
  35. package/dist/cron.js +6 -6
  36. package/dist/eval.cjs +6 -6
  37. package/dist/eval.js +5 -5
  38. package/dist/index.cjs +33 -33
  39. package/dist/index.js +9 -9
  40. package/dist/{inject-session-E5UDFVLI.js → inject-session-LJX5JGV5.js} +3 -3
  41. package/dist/{inject-session-E5UDFVLI.js.map → inject-session-LJX5JGV5.js.map} +1 -1
  42. package/dist/{inject-session-W4UKACYJ.cjs → inject-session-R73PRM7B.cjs} +4 -4
  43. package/dist/{inject-session-W4UKACYJ.cjs.map → inject-session-R73PRM7B.cjs.map} +1 -1
  44. package/dist/internal/error-mappers/openai-compatible.d.ts +3 -1
  45. package/dist/internal/memory/adapters/index.cjs +3 -3
  46. package/dist/internal/memory/adapters/index.js +2 -2
  47. package/docs/error-codes.md +6 -3
  48. package/package.json +1 -1
  49. package/dist/chunk-4PHSVR2R.js.map +0 -1
  50. package/dist/chunk-5OHB5HJF.cjs.map +0 -1
  51. package/dist/chunk-TE6XVTOA.js.map +0 -1
  52. package/dist/chunk-WPO3VCY4.cjs.map +0 -1
@@ -1,15 +1,15 @@
1
1
  'use strict';
2
2
 
3
3
  var chunkJ6GXS5A2_cjs = require('./chunk-J6GXS5A2.cjs');
4
- var chunkN7ZIPW2N_cjs = require('./chunk-N7ZIPW2N.cjs');
4
+ var chunk3JANYJYS_cjs = require('./chunk-3JANYJYS.cjs');
5
5
  var chunkL3C6CCBG_cjs = require('./chunk-L3C6CCBG.cjs');
6
6
  var chunkKIKKTW5O_cjs = require('./chunk-KIKKTW5O.cjs');
7
7
  var chunkBV2MWEMV_cjs = require('./chunk-BV2MWEMV.cjs');
8
- var chunkYEHQ3SIC_cjs = require('./chunk-YEHQ3SIC.cjs');
8
+ var chunkJV7JA7BM_cjs = require('./chunk-JV7JA7BM.cjs');
9
9
  var chunkTMKTSYDS_cjs = require('./chunk-TMKTSYDS.cjs');
10
10
  var chunkZD66GFH5_cjs = require('./chunk-ZD66GFH5.cjs');
11
11
  var chunkNQVWSSX2_cjs = require('./chunk-NQVWSSX2.cjs');
12
- var chunkBZKF7TXX_cjs = require('./chunk-BZKF7TXX.cjs');
12
+ var chunkP5N3Q2NH_cjs = require('./chunk-P5N3Q2NH.cjs');
13
13
  var chunk2ZPEDVLM_cjs = require('./chunk-2ZPEDVLM.cjs');
14
14
  var chunkXKZFIP7Z_cjs = require('./chunk-XKZFIP7Z.cjs');
15
15
  var chunkN6OEX5TN_cjs = require('./chunk-N6OEX5TN.cjs');
@@ -1567,7 +1567,7 @@ function createRealCloudRun(options) {
1567
1567
  conversation: []
1568
1568
  };
1569
1569
  const apiKey = chunk6LHQPOMI_cjs.resolveApiKey(options.agentOptions.apiKey);
1570
- const baseUrl = chunkBZKF7TXX_cjs.getConfiguredBaseUrl();
1570
+ const baseUrl = chunkP5N3Q2NH_cjs.getConfiguredBaseUrl();
1571
1571
  const handle = new RealCloudRun(
1572
1572
  {
1573
1573
  id,
@@ -1650,7 +1650,7 @@ var RealCloudRun = class extends FixtureRunBase {
1650
1650
  async consumeStream(response) {
1651
1651
  let finalStatus = "finished";
1652
1652
  let finalText = "";
1653
- for await (const record of chunkBZKF7TXX_cjs.parseSseStream(response.body, this.controller.signal)) {
1653
+ for await (const record of chunkP5N3Q2NH_cjs.parseSseStream(response.body, this.controller.signal)) {
1654
1654
  const parsed = safeParse(record.data);
1655
1655
  if (parsed === void 0) continue;
1656
1656
  const update = this.applyRecord(record.event, parsed);
@@ -1817,7 +1817,7 @@ var CloudAgent = class _CloudAgent {
1817
1817
  */
1818
1818
  isFixtureMode() {
1819
1819
  const apiKey = chunk6LHQPOMI_cjs.resolveApiKey(this.options.apiKey);
1820
- return chunkBZKF7TXX_cjs.isFixtureApiKey(apiKey) && chunkBZKF7TXX_cjs.getConfiguredBaseUrl() === void 0;
1820
+ return chunkP5N3Q2NH_cjs.isFixtureApiKey(apiKey) && chunkP5N3Q2NH_cjs.getConfiguredBaseUrl() === void 0;
1821
1821
  }
1822
1822
  // SE9 — integrated structured output; delegates to the shared helper.
1823
1823
  generate(message, options) {
@@ -1869,7 +1869,7 @@ var CloudAgent = class _CloudAgent {
1869
1869
  const userText = typeof message === "string" ? message : message.text;
1870
1870
  const systemPrompt = await this.resolveSystemPromptForSend(userText, options);
1871
1871
  const apiKey = chunk6LHQPOMI_cjs.resolveApiKey(this.options.apiKey);
1872
- const useRealRuntime = apiKey !== void 0 && !chunkBZKF7TXX_cjs.isFixtureApiKey(apiKey) && chunkBZKF7TXX_cjs.getConfiguredBaseUrl() !== void 0;
1872
+ const useRealRuntime = apiKey !== void 0 && !chunkP5N3Q2NH_cjs.isFixtureApiKey(apiKey) && chunkP5N3Q2NH_cjs.getConfiguredBaseUrl() !== void 0;
1873
1873
  return useRealRuntime ? createRealCloudRun({
1874
1874
  agentId: this.agentId,
1875
1875
  model: this.model ?? { id: DEFAULT_AGENTIC_MODEL_ID },
@@ -2934,7 +2934,7 @@ async function runPostRunLifecycle(inputs) {
2934
2934
  try {
2935
2935
  const partial = await safeConversation(run);
2936
2936
  if (partial !== void 0) {
2937
- chunkN7ZIPW2N_cjs.persistTurnToTranscript(sessionStore, { cwd: workspaceCwd, agentId, model }, agentId, {
2937
+ chunk3JANYJYS_cjs.persistTurnToTranscript(sessionStore, { cwd: workspaceCwd, agentId, model }, agentId, {
2938
2938
  userText,
2939
2939
  conversation: partial
2940
2940
  });
@@ -2944,11 +2944,11 @@ async function runPostRunLifecycle(inputs) {
2944
2944
  chunk6LHQPOMI_cjs.diag(`[theokit-sdk] partial transcript write failed (${agentId}): ${msg}
2945
2945
  `);
2946
2946
  }
2947
- await chunkN7ZIPW2N_cjs.flushSessionWrites();
2947
+ await chunk3JANYJYS_cjs.flushSessionWrites();
2948
2948
  return;
2949
2949
  }
2950
2950
  if (result.result !== void 0) {
2951
- chunkN7ZIPW2N_cjs.appendSessionMessage(agentId, { role: "assistant", text: result.result });
2951
+ chunk3JANYJYS_cjs.appendSessionMessage(agentId, { role: "assistant", text: result.result });
2952
2952
  }
2953
2953
  const conversation = await safeConversation(run);
2954
2954
  const resolvedWindow = resolveWindowForRun(model, contextWindow);
@@ -2959,7 +2959,7 @@ async function runPostRunLifecycle(inputs) {
2959
2959
  }
2960
2960
  const lastRequestUsage = result.usage?.requests?.at(-1)?.totalTokens;
2961
2961
  const usageForTrigger = lastRequestUsage ?? result.usage?.totalTokens;
2962
- chunkN7ZIPW2N_cjs.persistTurnToTranscript(
2962
+ chunk3JANYJYS_cjs.persistTurnToTranscript(
2963
2963
  sessionStore,
2964
2964
  { cwd: workspaceCwd, agentId, model },
2965
2965
  agentId,
@@ -2971,7 +2971,7 @@ async function runPostRunLifecycle(inputs) {
2971
2971
  // The EFFECTIVE window (after override, clamp and margin) — not the declared one. Swapping for
2972
2972
  // `contextWindow` here would budget against a number the clamp already rejected.
2973
2973
  contextWindow: effectiveWindow,
2974
- summarize: chunkBZKF7TXX_cjs.buildDefaultSummarizer({
2974
+ summarize: chunkP5N3Q2NH_cjs.buildDefaultSummarizer({
2975
2975
  agentModel: model,
2976
2976
  ...inputs.apiKey !== void 0 ? { apiKey: inputs.apiKey } : {}
2977
2977
  })
@@ -3013,7 +3013,7 @@ async function runPostRunLifecycle(inputs) {
3013
3013
  agentId,
3014
3014
  runId: result.id
3015
3015
  });
3016
- await chunkN7ZIPW2N_cjs.flushSessionWrites();
3016
+ await chunk3JANYJYS_cjs.flushSessionWrites();
3017
3017
  }
3018
3018
  async function safeConversation(run) {
3019
3019
  try {
@@ -3644,7 +3644,7 @@ var HISTOGRAM_NAMES = {
3644
3644
  };
3645
3645
  function safeRequire(moduleName) {
3646
3646
  try {
3647
- const r = module$1.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('chunk-5OHB5HJF.cjs', document.baseURI).href)));
3647
+ const r = module$1.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('chunk-35KBC4BX.cjs', document.baseURI).href)));
3648
3648
  return r(moduleName);
3649
3649
  } catch {
3650
3650
  return void 0;
@@ -3887,7 +3887,7 @@ var cachedOtel;
3887
3887
  function loadOtel() {
3888
3888
  if (cachedOtel === void 0) {
3889
3889
  try {
3890
- const r = module$1.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('chunk-5OHB5HJF.cjs', document.baseURI).href)));
3890
+ const r = module$1.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('chunk-35KBC4BX.cjs', document.baseURI).href)));
3891
3891
  const mod = r("@opentelemetry/api");
3892
3892
  cachedOtel = mod;
3893
3893
  } catch {
@@ -5973,6 +5973,7 @@ function registerLoopError(ctx, cause) {
5973
5973
  async function consumeStreamEvent(inputs, reasoning, event) {
5974
5974
  if (event.type === "text_delta") {
5975
5975
  const text = event.text ?? "";
5976
+ if (text.length > 0) await closeReasoningOnce(inputs, reasoning);
5976
5977
  await emitTextDeltaCallback(inputs, text);
5977
5978
  return text;
5978
5979
  }
@@ -5985,7 +5986,14 @@ async function consumeStreamEvent(inputs, reasoning, event) {
5985
5986
  return "";
5986
5987
  }
5987
5988
  async function runCollectorLoop(generator, inputs, ctx, partial) {
5988
- const reasoning = { text: "", startedAt: void 0, signature: void 0 };
5989
+ const reasoning = {
5990
+ text: "",
5991
+ startedAt: void 0,
5992
+ lastAt: void 0,
5993
+ signature: void 0,
5994
+ closed: false,
5995
+ durationMs: 0
5996
+ };
5989
5997
  let errored = false;
5990
5998
  let finishValue;
5991
5999
  let thinking;
@@ -6014,17 +6022,24 @@ async function consumeReasoningDelta(inputs, reasoning, delta) {
6014
6022
  await accumulateReasoning(inputs, reasoning, delta.text);
6015
6023
  }
6016
6024
  async function accumulateReasoning(inputs, reasoning, text) {
6017
- if (reasoning.startedAt === void 0) reasoning.startedAt = Date.now();
6025
+ const now = Date.now();
6026
+ if (reasoning.startedAt === void 0) reasoning.startedAt = now;
6027
+ if (!reasoning.closed) reasoning.lastAt = now;
6018
6028
  reasoning.text += text;
6019
6029
  await emitReasoningDeltaCallback(inputs, text);
6020
6030
  }
6031
+ async function closeReasoningOnce(inputs, reasoning) {
6032
+ if (reasoning.closed || reasoning.text.length === 0) return;
6033
+ reasoning.closed = true;
6034
+ reasoning.durationMs = (reasoning.lastAt ?? 0) - (reasoning.startedAt ?? 0);
6035
+ await emitThinkingCompletedCallback(inputs, reasoning.durationMs);
6036
+ }
6021
6037
  async function finalizeReasoning(inputs, ctx, reasoning) {
6022
6038
  if (reasoning.text.length === 0) return void 0;
6023
- const thinkingDurationMs = reasoning.startedAt === void 0 ? 0 : Date.now() - reasoning.startedAt;
6039
+ await closeReasoningOnce(inputs, reasoning);
6024
6040
  ctx.events.push(
6025
- buildThinkingEvent(inputs, reasoning.text, thinkingDurationMs, reasoning.signature)
6041
+ buildThinkingEvent(inputs, reasoning.text, reasoning.durationMs, reasoning.signature)
6026
6042
  );
6027
- await emitThinkingCompletedCallback(inputs, thinkingDurationMs);
6028
6043
  return {
6029
6044
  type: "thinking",
6030
6045
  text: reasoning.text,
@@ -6669,7 +6684,7 @@ function applyToolResultGuard(parts, opts) {
6669
6684
  (p) => (
6670
6685
  // SE7 — guard the TEXT of a tool result (string or the text blocks of a
6671
6686
  // structured content); image blocks pass through untouched.
6672
- p.type === "tool_result" ? { ...p, content: chunkBZKF7TXX_cjs.renderToolResultContentText(p.content, (t) => guardText(t, opts)) } : p
6687
+ p.type === "tool_result" ? { ...p, content: chunkP5N3Q2NH_cjs.renderToolResultContentText(p.content, (t) => guardText(t, opts)) } : p
6673
6688
  )
6674
6689
  );
6675
6690
  }
@@ -6954,6 +6969,32 @@ async function inspectDoomLoop(inputs, ctx, toolCalls) {
6954
6969
  return "continue";
6955
6970
  }
6956
6971
 
6972
+ // src/internal/concurrency/abort-utils.ts
6973
+ function anySignal(signals) {
6974
+ const filtered = signals.filter((s) => s !== void 0);
6975
+ if (filtered.length === 0) {
6976
+ return new AbortController().signal;
6977
+ }
6978
+ if (filtered.length === 1) {
6979
+ return filtered[0];
6980
+ }
6981
+ if (typeof AbortSignal.any === "function") {
6982
+ return AbortSignal.any(filtered);
6983
+ }
6984
+ return ponyfillAny(filtered);
6985
+ }
6986
+ function ponyfillAny(signals) {
6987
+ const ctrl = new AbortController();
6988
+ for (const s of signals) {
6989
+ if (s.aborted) {
6990
+ ctrl.abort(s.reason);
6991
+ return ctrl.signal;
6992
+ }
6993
+ s.addEventListener("abort", () => ctrl.abort(s.reason), { once: true });
6994
+ }
6995
+ return ctrl.signal;
6996
+ }
6997
+
6957
6998
  // src/internal/llm/fallback-client.ts
6958
6999
  var FallbackLlmClient = class {
6959
7000
  constructor(clients) {
@@ -6964,13 +7005,13 @@ var FallbackLlmClient = class {
6964
7005
  async *stream(request, signal) {
6965
7006
  let lastError;
6966
7007
  for (const client of this.clients) {
6967
- if (signal.aborted) throw chunkBZKF7TXX_cjs.abortError(signal);
6968
- const attempt = await chunkBZKF7TXX_cjs.tryFirstEvent(client, request, signal, true);
7008
+ if (signal.aborted) throw chunkP5N3Q2NH_cjs.abortError(signal);
7009
+ const attempt = await chunkP5N3Q2NH_cjs.tryFirstEvent(client, request, signal, true);
6969
7010
  if (attempt.kind === "handshake_error") {
6970
7011
  lastError = attempt.error;
6971
7012
  continue;
6972
7013
  }
6973
- return yield* chunkBZKF7TXX_cjs.relayStream(attempt.generator, attempt.firstResult);
7014
+ return yield* chunkP5N3Q2NH_cjs.relayStream(attempt.generator, attempt.firstResult);
6974
7015
  }
6975
7016
  if (lastError !== void 0) throw lastError;
6976
7017
  throw new chunkUNFBHV46_cjs.NetworkError("FallbackLlmClient has no providers configured", {
@@ -7606,9 +7647,9 @@ function buildLoopInputs(options, runId, userText, userImages) {
7606
7647
  { code: "invalid_max_iterations" }
7607
7648
  );
7608
7649
  }
7609
- const { primary, effectiveModelId } = chunkBZKF7TXX_cjs.resolveRunProvider(options);
7650
+ const { primary, effectiveModelId } = chunkP5N3Q2NH_cjs.resolveRunProvider(options);
7610
7651
  const fallback = options.agentOptions.providers?.fallback;
7611
- const apiKeys = chunkBZKF7TXX_cjs.mergeExplicitApiKey(
7652
+ const apiKeys = chunkP5N3Q2NH_cjs.mergeExplicitApiKey(
7612
7653
  options.agentOptions.providers?.apiKeys,
7613
7654
  primary,
7614
7655
  options.agentOptions.apiKey
@@ -7617,7 +7658,7 @@ function buildLoopInputs(options, runId, userText, userImages) {
7617
7658
  const extractToolCallsFromContent = options.agentOptions.providers?.routes?.[0]?.extractToolCallsFromContent;
7618
7659
  const rateLimitSink = options.sendOptions.onRunEvent;
7619
7660
  const modelBaseUrl = options.model?.url;
7620
- const chain = chunkBZKF7TXX_cjs.resolveProviderChain({
7661
+ const chain = chunkP5N3Q2NH_cjs.resolveProviderChain({
7621
7662
  primary,
7622
7663
  ...modelBaseUrl !== void 0 ? { baseUrl: modelBaseUrl } : {},
7623
7664
  ...fallback !== void 0 ? { fallback } : {},
@@ -7708,6 +7749,13 @@ var RealLocalRun = class extends FixtureRunBase {
7708
7749
  ownsMcpClients;
7709
7750
  /** theokit#148 — what a delegated child inherits from this parent, scoped to the loop. */
7710
7751
  inheritedCredentials;
7752
+ /**
7753
+ * B-495 — the run's own abort, composed into the signal the loop hands to the LLM fetch and the
7754
+ * tool executors, so `cancel()` stops the request and not only the status. A TypeScript `private`
7755
+ * field, never a JS `#private` one: the run wrappers are Proxies that call `cancel()` with `this`
7756
+ * bound to the Proxy, where reading a `#private` field throws.
7757
+ */
7758
+ cancelController = new AbortController();
7711
7759
  constructor(options, buildInputs, ownsMcpClients, inheritedCredentials) {
7712
7760
  super(options);
7713
7761
  this.buildInputs = buildInputs;
@@ -7719,6 +7767,11 @@ var RealLocalRun = class extends FixtureRunBase {
7719
7767
  void this.driveLoop();
7720
7768
  }, 0);
7721
7769
  }
7770
+ cancel() {
7771
+ if (this.terminated) return Promise.resolve();
7772
+ this.cancelController.abort();
7773
+ return super.cancel();
7774
+ }
7722
7775
  notifyImmediately() {
7723
7776
  return true;
7724
7777
  }
@@ -7762,7 +7815,9 @@ var RealLocalRun = class extends FixtureRunBase {
7762
7815
  liveDelivered = /* @__PURE__ */ new Set();
7763
7816
  async executeAgentLoop(inputs) {
7764
7817
  let textStreamedSinceLastMessage = false;
7818
+ inputs.signal = anySignal([inputs.signal, this.cancelController.signal]);
7765
7819
  inputs.onLoopEvent = (event) => {
7820
+ if (this.terminated) return;
7766
7821
  this.liveDelivered.add(event);
7767
7822
  this.script.events.push(event);
7768
7823
  const carriesText = event.type === "assistant" && event.message.content.some((b) => b.type === "text");
@@ -7778,11 +7833,13 @@ var RealLocalRun = class extends FixtureRunBase {
7778
7833
  };
7779
7834
  const callerOnDelta = inputs.onDelta;
7780
7835
  inputs.onDelta = (delta) => {
7836
+ if (this.terminated) return;
7781
7837
  callerOnDelta?.(delta);
7782
7838
  if (delta.update.type === "text-delta") textStreamedSinceLastMessage = true;
7783
7839
  this.pushTimeline({ kind: "delta", update: delta.update });
7784
7840
  };
7785
7841
  try {
7842
+ if (this.terminated) return;
7786
7843
  const runLoop = () => inputs.activeTools !== void 0 ? chunkIJ7M6GOG_cjs.withToolWhitelist(new Set(inputs.activeTools), () => runAgentLoop(inputs)) : runAgentLoop(inputs);
7787
7844
  const output = await chunkJW3GVLM6_cjs.withInheritedSubAgentCredentials(this.inheritedCredentials, runLoop);
7788
7845
  this.applyAgentLoopOutput(output);
@@ -7791,11 +7848,7 @@ var RealLocalRun = class extends FixtureRunBase {
7791
7848
  this.emitErrorEvent(cause, "Agent loop failed", "", "agent_loop_failed");
7792
7849
  this.transitionTo("error");
7793
7850
  } finally {
7794
- if (this.ownsMcpClients) {
7795
- for (const client of inputs.mcp.values()) {
7796
- await client.close().catch(() => void 0);
7797
- }
7798
- }
7851
+ if (this.ownsMcpClients) await closeOwnedMcpClients(inputs);
7799
7852
  }
7800
7853
  }
7801
7854
  /**
@@ -7807,6 +7860,7 @@ var RealLocalRun = class extends FixtureRunBase {
7807
7860
  * Finding-B fix (sdk-error-packaging v1.1): set-once errorDetail copy.
7808
7861
  */
7809
7862
  applyAgentLoopOutput(output) {
7863
+ if (this.terminated) return;
7810
7864
  this.deliverUndeliveredEvents(output.events);
7811
7865
  this.script.conversation.push(...output.conversation);
7812
7866
  if (output.result.length > 0) this.script.result = output.result;
@@ -7854,6 +7908,18 @@ var RealLocalRun = class extends FixtureRunBase {
7854
7908
  this.notifyNewEvents();
7855
7909
  }
7856
7910
  };
7911
+ async function closeOwnedMcpClients(inputs) {
7912
+ for (const [name, client] of inputs.mcp.entries()) {
7913
+ try {
7914
+ await client.close();
7915
+ } catch (cause) {
7916
+ const why = cause instanceof Error ? cause.message : String(cause);
7917
+ chunk6LHQPOMI_cjs.diagFailure(
7918
+ `[theokit-sdk] MCP server ${name} failed to close; its process may still be running: ${why}`
7919
+ );
7920
+ }
7921
+ }
7922
+ }
7857
7923
 
7858
7924
  // src/internal/local-agent/local-agent-dispatch.ts
7859
7925
  function buildRealRunOptions(args) {
@@ -7877,7 +7943,7 @@ function buildRealRunOptions(args) {
7877
7943
  };
7878
7944
  }
7879
7945
  async function createFixtureRunHelper(args) {
7880
- const sessionMessages = chunkN7ZIPW2N_cjs.getSessionMessages(args.inputs.agentId);
7946
+ const sessionMessages = chunk3JANYJYS_cjs.getSessionMessages(args.inputs.agentId);
7881
7947
  const projectMcpServers = args.inputs.settingSourcesIncludeProject ? await readProjectMcpServers(args.inputs.workspaceCwd) : {};
7882
7948
  return createLocalRun({
7883
7949
  agentId: args.inputs.agentId,
@@ -7896,7 +7962,7 @@ async function createFixtureRunHelper(args) {
7896
7962
  }
7897
7963
  async function dispatchLocalRun(args) {
7898
7964
  const apiKey = chunk6LHQPOMI_cjs.resolveApiKey(args.inputs.options.apiKey);
7899
- if (chunkBZKF7TXX_cjs.shouldUseRealLocalRuntime(apiKey)) {
7965
+ if (chunkP5N3Q2NH_cjs.shouldUseRealLocalRuntime(apiKey)) {
7900
7966
  return createRealLocalRun(
7901
7967
  buildRealRunOptions({
7902
7968
  inputs: args.inputs,
@@ -8152,10 +8218,10 @@ async function disposeLocalAgentSession(agent) {
8152
8218
  agent.lifecycleAbortController.abort();
8153
8219
  await chunkZF2LDKQQ_cjs.withCwdMutex(`agent-send:${agent.agentId}`, () => Promise.resolve());
8154
8220
  disposeSessionMcpClients(agent.agentId);
8155
- await chunkN7ZIPW2N_cjs.flushSessionWrites();
8221
+ await chunk3JANYJYS_cjs.flushSessionWrites();
8156
8222
  await flushRegistrySaves(agent.workspaceCwd);
8157
8223
  await disposeSessionStore(agent.sessionStore);
8158
- chunkN7ZIPW2N_cjs.discardSession(agent.workspaceCwd, agent.agentId);
8224
+ chunk3JANYJYS_cjs.discardSession(agent.workspaceCwd, agent.agentId);
8159
8225
  }
8160
8226
  async function reloadLocalAgent(agent) {
8161
8227
  if (agent.context !== void 0) await agent.context.refresh();
@@ -8510,7 +8576,7 @@ var openAiMemoryEmbeddingProviderAdapter = {
8510
8576
  transport: "remote",
8511
8577
  authProviderId: "openai",
8512
8578
  autoSelectPriority: 20,
8513
- create: (options) => chunkYEHQ3SIC_cjs.createOpenAiCompatibleRuntime(
8579
+ create: (options) => chunkJV7JA7BM_cjs.createOpenAiCompatibleRuntime(
8514
8580
  {
8515
8581
  id: "openai",
8516
8582
  defaultBaseUrl: "https://api.openai.com",
@@ -8532,7 +8598,7 @@ var azureOpenAiMemoryEmbeddingProviderAdapter = {
8532
8598
  transport: "remote",
8533
8599
  authProviderId: "azure-openai",
8534
8600
  autoSelectPriority: 25,
8535
- create: (options) => chunkYEHQ3SIC_cjs.createOpenAiCompatibleRuntime(
8601
+ create: (options) => chunkJV7JA7BM_cjs.createOpenAiCompatibleRuntime(
8536
8602
  {
8537
8603
  id: "azure-openai",
8538
8604
  defaultBaseUrl: "https://your-resource.openai.azure.com",
@@ -8568,7 +8634,7 @@ var cohereMemoryEmbeddingProviderAdapter = {
8568
8634
  transport: "remote",
8569
8635
  authProviderId: "cohere",
8570
8636
  autoSelectPriority: 30,
8571
- create: (options) => chunkYEHQ3SIC_cjs.createOpenAiCompatibleRuntime(
8637
+ create: (options) => chunkJV7JA7BM_cjs.createOpenAiCompatibleRuntime(
8572
8638
  {
8573
8639
  id: "cohere",
8574
8640
  defaultBaseUrl: "https://api.cohere.com",
@@ -8614,7 +8680,7 @@ var deepinfraMemoryEmbeddingProviderAdapter = {
8614
8680
  transport: "remote",
8615
8681
  authProviderId: "deepinfra",
8616
8682
  autoSelectPriority: 13,
8617
- create: (options) => chunkYEHQ3SIC_cjs.createOpenAiCompatibleRuntime(
8683
+ create: (options) => chunkJV7JA7BM_cjs.createOpenAiCompatibleRuntime(
8618
8684
  {
8619
8685
  id: "deepinfra",
8620
8686
  defaultBaseUrl: "https://api.deepinfra.com",
@@ -8640,7 +8706,7 @@ var geminiMemoryEmbeddingProviderAdapter = {
8640
8706
  transport: "remote",
8641
8707
  authProviderId: "gemini",
8642
8708
  autoSelectPriority: 30,
8643
- create: (options) => chunkYEHQ3SIC_cjs.createOpenAiCompatibleRuntime(
8709
+ create: (options) => chunkJV7JA7BM_cjs.createOpenAiCompatibleRuntime(
8644
8710
  {
8645
8711
  id: "gemini",
8646
8712
  defaultBaseUrl: "https://generativelanguage.googleapis.com",
@@ -8668,7 +8734,7 @@ var jinaMemoryEmbeddingProviderAdapter = {
8668
8734
  transport: "remote",
8669
8735
  authProviderId: "jina",
8670
8736
  autoSelectPriority: 35,
8671
- create: (options) => chunkYEHQ3SIC_cjs.createOpenAiCompatibleRuntime(
8737
+ create: (options) => chunkJV7JA7BM_cjs.createOpenAiCompatibleRuntime(
8672
8738
  {
8673
8739
  id: "jina",
8674
8740
  defaultBaseUrl: "https://api.jina.ai",
@@ -8691,7 +8757,7 @@ var mistralMemoryEmbeddingProviderAdapter = {
8691
8757
  transport: "remote",
8692
8758
  authProviderId: "mistral",
8693
8759
  autoSelectPriority: 18,
8694
- create: (options) => chunkYEHQ3SIC_cjs.createOpenAiCompatibleRuntime(
8760
+ create: (options) => chunkJV7JA7BM_cjs.createOpenAiCompatibleRuntime(
8695
8761
  {
8696
8762
  id: "mistral",
8697
8763
  defaultBaseUrl: "https://api.mistral.ai",
@@ -8733,7 +8799,7 @@ var ollamaMemoryEmbeddingProviderAdapter = {
8733
8799
  autoSelectPriority: 10,
8734
8800
  create: (options) => {
8735
8801
  const apiKey = options.apiKey ?? process.env.OLLAMA_API_KEY ?? OLLAMA_LOCAL_SENTINEL_KEY;
8736
- return chunkYEHQ3SIC_cjs.createOpenAiCompatibleRuntime(
8802
+ return chunkJV7JA7BM_cjs.createOpenAiCompatibleRuntime(
8737
8803
  {
8738
8804
  id: "ollama",
8739
8805
  defaultBaseUrl: "http://localhost:11434",
@@ -8761,7 +8827,7 @@ var openRouterMemoryEmbeddingProviderAdapter = {
8761
8827
  transport: "remote",
8762
8828
  authProviderId: "openrouter",
8763
8829
  autoSelectPriority: 15,
8764
- create: (options) => chunkYEHQ3SIC_cjs.createOpenAiCompatibleRuntime(
8830
+ create: (options) => chunkJV7JA7BM_cjs.createOpenAiCompatibleRuntime(
8765
8831
  {
8766
8832
  id: "openrouter",
8767
8833
  defaultBaseUrl: "https://openrouter.ai/api",
@@ -8789,7 +8855,7 @@ var voyageMemoryEmbeddingProviderAdapter = {
8789
8855
  transport: "remote",
8790
8856
  authProviderId: "voyage",
8791
8857
  autoSelectPriority: 14,
8792
- create: (options) => chunkYEHQ3SIC_cjs.createOpenAiCompatibleRuntime(
8858
+ create: (options) => chunkJV7JA7BM_cjs.createOpenAiCompatibleRuntime(
8793
8859
  {
8794
8860
  id: "voyage",
8795
8861
  defaultBaseUrl: "https://api.voyageai.com",
@@ -9019,7 +9085,7 @@ var LocalAgentMemory = class {
9019
9085
  async runActiveMemoryIfEnabled(userText, priorMessages, telemetry) {
9020
9086
  const cfg = this.options.memory?.activeRecall;
9021
9087
  if (cfg?.enabled !== true || this.index === void 0) return void 0;
9022
- if (this.breaker === void 0) this.breaker = new chunkBZKF7TXX_cjs.CircuitBreaker();
9088
+ if (this.breaker === void 0) this.breaker = new chunkP5N3Q2NH_cjs.CircuitBreaker();
9023
9089
  if (this.cache === void 0) this.cache = new ActiveMemoryCache();
9024
9090
  const result = await runActiveMemory({
9025
9091
  userText,
@@ -9334,8 +9400,8 @@ async function localAgentUsePersonality(agent, name, opts) {
9334
9400
  registry,
9335
9401
  store: agent.personalityStore,
9336
9402
  invalidateCache: (reason) => agent.invalidateCache(reason),
9337
- appendSessionMessage: (msg) => chunkN7ZIPW2N_cjs.appendSessionMessage(agent.agentId, msg),
9338
- clearSession: () => chunkN7ZIPW2N_cjs.clearSession(agent.agentId),
9403
+ appendSessionMessage: (msg) => chunk3JANYJYS_cjs.appendSessionMessage(agent.agentId, msg),
9404
+ clearSession: () => chunk3JANYJYS_cjs.clearSession(agent.agentId),
9339
9405
  opts: opts ?? {}
9340
9406
  })
9341
9407
  );
@@ -9408,32 +9474,6 @@ async function persistMemoryFactIfWritePrompt(workspaceCwd, memoryConfig, userTe
9408
9474
  }
9409
9475
  }
9410
9476
 
9411
- // src/internal/concurrency/abort-utils.ts
9412
- function anySignal(signals) {
9413
- const filtered = signals.filter((s) => s !== void 0);
9414
- if (filtered.length === 0) {
9415
- return new AbortController().signal;
9416
- }
9417
- if (filtered.length === 1) {
9418
- return filtered[0];
9419
- }
9420
- if (typeof AbortSignal.any === "function") {
9421
- return AbortSignal.any(filtered);
9422
- }
9423
- return ponyfillAny(filtered);
9424
- }
9425
- function ponyfillAny(signals) {
9426
- const ctrl = new AbortController();
9427
- for (const s of signals) {
9428
- if (s.aborted) {
9429
- ctrl.abort(s.reason);
9430
- return ctrl.signal;
9431
- }
9432
- s.addEventListener("abort", () => ctrl.abort(s.reason), { once: true });
9433
- }
9434
- return ctrl.signal;
9435
- }
9436
-
9437
9477
  // src/internal/runtime/lifecycle/wrap-completion-check-run.ts
9438
9478
  function wrapRunWithCompletionCheck(args) {
9439
9479
  const check = args.completionCheck;
@@ -9889,7 +9929,7 @@ async function executeSendLocked(inputs, message, options) {
9889
9929
  if (inputs.options.onBeforeSend !== void 0) {
9890
9930
  await inputs.options.onBeforeSend({
9891
9931
  conversationId: inputs.agentId,
9892
- previousMessageCount: chunkN7ZIPW2N_cjs.getSessionMessages(inputs.agentId).length
9932
+ previousMessageCount: chunk3JANYJYS_cjs.getSessionMessages(inputs.agentId).length
9893
9933
  });
9894
9934
  }
9895
9935
  await inputs.runPreHook(userText);
@@ -9901,8 +9941,8 @@ async function executeSendLocked(inputs, message, options) {
9901
9941
  userText,
9902
9942
  sendOptions: options
9903
9943
  });
9904
- const priorMessages = [...chunkN7ZIPW2N_cjs.getSessionMessages(inputs.agentId)];
9905
- chunkN7ZIPW2N_cjs.appendSessionMessage(inputs.agentId, { role: "user", text: userText });
9944
+ const priorMessages = [...chunk3JANYJYS_cjs.getSessionMessages(inputs.agentId)];
9945
+ chunk3JANYJYS_cjs.appendSessionMessage(inputs.agentId, { role: "user", text: userText });
9906
9946
  await persistMemoryFactIfWritePrompt(inputs.workspaceCwd, inputs.options.memory, userText);
9907
9947
  const memoryFacts = await readMemoryForSend(inputs.workspaceCwd, inputs.options.memory, userText);
9908
9948
  const memoryTools = void 0;
@@ -10208,7 +10248,7 @@ var LocalAgent = class {
10208
10248
  );
10209
10249
  await acquireLeaseIfPossible(this.sessionStore, this.agentId);
10210
10250
  try {
10211
- await chunkN7ZIPW2N_cjs.hydrateSession(this.agentId, { store: this.sessionStore, cwd: this.workspaceCwd });
10251
+ await chunk3JANYJYS_cjs.hydrateSession(this.agentId, { store: this.sessionStore, cwd: this.workspaceCwd });
10212
10252
  await this.personalityStore.hydrate(this.agentId);
10213
10253
  } catch (err) {
10214
10254
  await releaseLeaseIfPossible(this.sessionStore, this.agentId);
@@ -10549,15 +10589,15 @@ async function maybeInjectHandoffTools(options) {
10549
10589
  };
10550
10590
  }
10551
10591
  function keyWillFlowToProvider(apiKey, provider) {
10552
- if (chunkBZKF7TXX_cjs.isFixtureApiKey(apiKey)) return false;
10553
- if (chunkBZKF7TXX_cjs.getConfiguredBaseUrl() !== void 0) return false;
10592
+ if (chunkP5N3Q2NH_cjs.isFixtureApiKey(apiKey)) return false;
10593
+ if (chunkP5N3Q2NH_cjs.getConfiguredBaseUrl() !== void 0) return false;
10554
10594
  if (provider === void 0) return false;
10555
10595
  const profile = chunkSGC7LSHF_cjs.getProviderProfile(provider);
10556
10596
  if (profile === void 0) return false;
10557
10597
  return profile.authType !== "none";
10558
10598
  }
10559
10599
  function missingApiKeyMessage() {
10560
- const present = chunkBZKF7TXX_cjs.presentProviderCredentialEnvVars();
10600
+ const present = chunkP5N3Q2NH_cjs.presentProviderCredentialEnvVars();
10561
10601
  const base = `Missing API key \u2014 set ${chunk6LHQPOMI_cjs.API_KEY_ENV_VAR}, or pass \`apiKey\` to Agent.create()`;
10562
10602
  if (present.length === 0) return `${base}.`;
10563
10603
  return `${base}. ${present.join(" and ")} ${present.length === 1 ? "is" : "are"} set, but a provider credential is not read from the environment automatically \u2014 pass it explicitly, e.g. \`Agent.create({ apiKey: process.env.${present[0]}, ... })\`.`;
@@ -10577,7 +10617,7 @@ async function createLocalAgent(options) {
10577
10617
  }
10578
10618
  } else {
10579
10619
  const willFlowToProvider = keyWillFlowToProvider(apiKey, provider);
10580
- const shape = chunkBZKF7TXX_cjs.validateApiKeyShape(apiKey, {
10620
+ const shape = chunkP5N3Q2NH_cjs.validateApiKeyShape(apiKey, {
10581
10621
  strict: willFlowToProvider,
10582
10622
  ...willFlowToProvider ? { provider } : {}
10583
10623
  });
@@ -10596,15 +10636,15 @@ async function createCloudAgent(options) {
10596
10636
  code: "missing_api_key"
10597
10637
  });
10598
10638
  }
10599
- const shape = chunkBZKF7TXX_cjs.validateApiKeyShape(apiKey);
10639
+ const shape = chunkP5N3Q2NH_cjs.validateApiKeyShape(apiKey);
10600
10640
  if (shape.malformed) {
10601
10641
  throw new chunkUNFBHV46_cjs.AuthenticationError(shape.message, { code: "malformed_api_key" });
10602
10642
  }
10603
- const baseUrl = chunkBZKF7TXX_cjs.getConfiguredBaseUrl();
10643
+ const baseUrl = chunkP5N3Q2NH_cjs.getConfiguredBaseUrl();
10604
10644
  if (baseUrl === void 0) {
10605
10645
  return new CloudAgent(options);
10606
10646
  }
10607
- const response = await chunkBZKF7TXX_cjs.httpRequest("/v1/agents", {
10647
+ const response = await chunkP5N3Q2NH_cjs.httpRequest("/v1/agents", {
10608
10648
  apiKey,
10609
10649
  method: "POST",
10610
10650
  body: {
@@ -10629,7 +10669,7 @@ function resolveAgentPersistenceCwd(options) {
10629
10669
  return process.cwd();
10630
10670
  }
10631
10671
  async function rehydrateExistingAgent(agentId, existing, options) {
10632
- await chunkBZKF7TXX_cjs.discoverProviderPlugins();
10672
+ await chunkP5N3Q2NH_cjs.discoverProviderPlugins();
10633
10673
  await validateRehydratedAgent(agentId, existing);
10634
10674
  const mergedLocal = options.local !== void 0 && existing.options.local !== void 0 ? { ...existing.options.local, ...options.local } : options.local ?? existing.options.local;
10635
10675
  const mergedMemory = mergeResumedMemory(existing.options.memory, options.memory);
@@ -10789,7 +10829,7 @@ var Agent = class _Agent {
10789
10829
  pluginCount: enabledPluginNames(options.plugins).length
10790
10830
  });
10791
10831
  try {
10792
- await chunkBZKF7TXX_cjs.discoverProviderPlugins();
10832
+ await chunkP5N3Q2NH_cjs.discoverProviderPlugins();
10793
10833
  const agent = await runCreateUnderSpan(options, span);
10794
10834
  return agent;
10795
10835
  } catch (err) {
@@ -11087,9 +11127,9 @@ var Agent = class _Agent {
11087
11127
  */
11088
11128
  static async compact(agentId, options = {}) {
11089
11129
  const reg = await requireLocalAgent(agentId, "compact");
11090
- const { compactSessionTranscript, buildDefaultSummarizer: buildDefaultSummarizer2 } = await import('./compact-session-2AETONOS.cjs');
11130
+ const { compactSessionTranscript, buildDefaultSummarizer: buildDefaultSummarizer2 } = await import('./compact-session-Y56D3S57.cjs');
11091
11131
  const { cwd, model, store } = await openLocalStore(reg);
11092
- return chunkN7ZIPW2N_cjs.enqueueSessionWrite(
11132
+ return chunk3JANYJYS_cjs.enqueueSessionWrite(
11093
11133
  cwd,
11094
11134
  agentId,
11095
11135
  () => compactSessionTranscript({
@@ -11117,7 +11157,7 @@ var Agent = class _Agent {
11117
11157
  */
11118
11158
  static async injectSessionTurn(agentId, turn) {
11119
11159
  const reg = await requireLocalAgent(agentId, "injectSessionTurn");
11120
- const { injectSessionTurn } = await import('./inject-session-W4UKACYJ.cjs');
11160
+ const { injectSessionTurn } = await import('./inject-session-R73PRM7B.cjs');
11121
11161
  const { cwd, model, store } = await openLocalStore(reg);
11122
11162
  await injectSessionTurn({
11123
11163
  store,
@@ -11288,5 +11328,5 @@ exports.managedSettingsPathFor = managedSettingsPathFor;
11288
11328
  exports.openRouterMemoryEmbeddingProviderAdapter = openRouterMemoryEmbeddingProviderAdapter;
11289
11329
  exports.readManagedSettings = readManagedSettings;
11290
11330
  exports.resolveSessionDir = resolveSessionDir;
11291
- //# sourceMappingURL=chunk-5OHB5HJF.cjs.map
11292
- //# sourceMappingURL=chunk-5OHB5HJF.cjs.map
11331
+ //# sourceMappingURL=chunk-35KBC4BX.cjs.map
11332
+ //# sourceMappingURL=chunk-35KBC4BX.cjs.map