@dexto/core 1.6.25 → 1.6.27

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 (150) hide show
  1. package/dist/agent/DextoAgent.cjs +102 -104
  2. package/dist/agent/DextoAgent.d.ts +11 -10
  3. package/dist/agent/DextoAgent.d.ts.map +1 -1
  4. package/dist/agent/DextoAgent.js +103 -105
  5. package/dist/agent/error-codes.cjs +1 -0
  6. package/dist/agent/error-codes.d.ts +1 -0
  7. package/dist/agent/error-codes.d.ts.map +1 -1
  8. package/dist/agent/error-codes.js +1 -0
  9. package/dist/agent/errors.cjs +13 -0
  10. package/dist/agent/errors.d.ts +6 -0
  11. package/dist/agent/errors.d.ts.map +1 -1
  12. package/dist/agent/errors.js +13 -0
  13. package/dist/agent/index.d.ts +1 -0
  14. package/dist/agent/index.d.ts.map +1 -1
  15. package/dist/agent/schemas.d.ts +2 -2
  16. package/dist/agent/types.d.ts +11 -0
  17. package/dist/agent/types.d.ts.map +1 -1
  18. package/dist/approval/factory.cjs +1 -0
  19. package/dist/approval/factory.d.ts.map +1 -1
  20. package/dist/approval/factory.js +1 -0
  21. package/dist/approval/manager.cjs +345 -182
  22. package/dist/approval/manager.d.ts +45 -31
  23. package/dist/approval/manager.d.ts.map +1 -1
  24. package/dist/approval/manager.js +345 -182
  25. package/dist/approval/schemas.cjs +10 -0
  26. package/dist/approval/schemas.d.ts +305 -0
  27. package/dist/approval/schemas.d.ts.map +1 -1
  28. package/dist/approval/schemas.js +10 -0
  29. package/dist/approval/session-approval-store.cjs +91 -0
  30. package/dist/approval/session-approval-store.d.ts +55 -0
  31. package/dist/approval/session-approval-store.d.ts.map +1 -0
  32. package/dist/approval/session-approval-store.js +68 -0
  33. package/dist/events/index.cjs +210 -75
  34. package/dist/events/index.d.ts +44 -181
  35. package/dist/events/index.d.ts.map +1 -1
  36. package/dist/events/index.js +206 -74
  37. package/dist/hooks/manager.cjs +5 -2
  38. package/dist/hooks/manager.d.ts +2 -0
  39. package/dist/hooks/manager.d.ts.map +1 -1
  40. package/dist/hooks/manager.js +5 -2
  41. package/dist/hooks/types.d.ts +3 -0
  42. package/dist/hooks/types.d.ts.map +1 -1
  43. package/dist/index.browser.d.ts +1 -0
  44. package/dist/index.browser.d.ts.map +1 -1
  45. package/dist/index.cjs +3 -1
  46. package/dist/index.d.ts +1 -0
  47. package/dist/index.d.ts.map +1 -1
  48. package/dist/index.js +1 -0
  49. package/dist/llm/executor/turn-executor.cjs +15 -7
  50. package/dist/llm/executor/turn-executor.d.ts +3 -1
  51. package/dist/llm/executor/turn-executor.d.ts.map +1 -1
  52. package/dist/llm/executor/turn-executor.js +15 -7
  53. package/dist/llm/services/factory.cjs +10 -4
  54. package/dist/llm/services/factory.d.ts +2 -21
  55. package/dist/llm/services/factory.d.ts.map +1 -1
  56. package/dist/llm/services/factory.js +11 -7
  57. package/dist/llm/services/types.d.ts +33 -2
  58. package/dist/llm/services/types.d.ts.map +1 -1
  59. package/dist/llm/services/vercel.cjs +33 -11
  60. package/dist/llm/services/vercel.d.ts +6 -3
  61. package/dist/llm/services/vercel.d.ts.map +1 -1
  62. package/dist/llm/services/vercel.js +29 -8
  63. package/dist/logger/default-logger-factory.d.ts +12 -12
  64. package/dist/logger/v2/schemas.d.ts +6 -6
  65. package/dist/mcp/manager.cjs +7 -2
  66. package/dist/mcp/manager.d.ts +3 -1
  67. package/dist/mcp/manager.d.ts.map +1 -1
  68. package/dist/mcp/manager.js +7 -2
  69. package/dist/mcp/mcp-client.cjs +71 -62
  70. package/dist/mcp/mcp-client.d.ts +3 -2
  71. package/dist/mcp/mcp-client.d.ts.map +1 -1
  72. package/dist/mcp/mcp-client.js +71 -62
  73. package/dist/mcp/schemas.d.ts +10 -10
  74. package/dist/resources/handlers/filesystem-handler.cjs +22 -3
  75. package/dist/resources/handlers/filesystem-handler.d.ts.map +1 -1
  76. package/dist/resources/handlers/filesystem-handler.js +22 -3
  77. package/dist/runtime/host-runtime.cjs +163 -0
  78. package/dist/runtime/host-runtime.d.ts +23 -0
  79. package/dist/runtime/host-runtime.d.ts.map +1 -0
  80. package/dist/runtime/host-runtime.js +133 -0
  81. package/dist/runtime/index.cjs +42 -0
  82. package/dist/runtime/index.d.ts +2 -0
  83. package/dist/runtime/index.d.ts.map +1 -0
  84. package/dist/runtime/index.js +21 -0
  85. package/dist/runtime/run-context.cjs +53 -0
  86. package/dist/runtime/run-context.d.ts +13 -0
  87. package/dist/runtime/run-context.d.ts.map +1 -0
  88. package/dist/runtime/run-context.js +34 -0
  89. package/dist/session/chat-session.cjs +67 -71
  90. package/dist/session/chat-session.d.ts +25 -25
  91. package/dist/session/chat-session.d.ts.map +1 -1
  92. package/dist/session/chat-session.js +68 -72
  93. package/dist/session/error-codes.cjs +1 -0
  94. package/dist/session/error-codes.d.ts +2 -1
  95. package/dist/session/error-codes.d.ts.map +1 -1
  96. package/dist/session/error-codes.js +1 -0
  97. package/dist/session/errors.cjs +13 -0
  98. package/dist/session/errors.d.ts +6 -0
  99. package/dist/session/errors.d.ts.map +1 -1
  100. package/dist/session/errors.js +13 -0
  101. package/dist/session/message-queue-store.cjs +75 -0
  102. package/dist/session/message-queue-store.d.ts +16 -0
  103. package/dist/session/message-queue-store.d.ts.map +1 -0
  104. package/dist/session/message-queue-store.js +52 -0
  105. package/dist/session/message-queue.cjs +140 -46
  106. package/dist/session/message-queue.d.ts +18 -6
  107. package/dist/session/message-queue.d.ts.map +1 -1
  108. package/dist/session/message-queue.js +140 -46
  109. package/dist/session/session-manager.cjs +130 -25
  110. package/dist/session/session-manager.d.ts +18 -1
  111. package/dist/session/session-manager.d.ts.map +1 -1
  112. package/dist/session/session-manager.js +130 -25
  113. package/dist/session/title-generator.cjs +9 -2
  114. package/dist/session/title-generator.d.ts +2 -0
  115. package/dist/session/title-generator.d.ts.map +1 -1
  116. package/dist/session/title-generator.js +9 -2
  117. package/dist/telemetry/decorators.cjs +75 -57
  118. package/dist/telemetry/decorators.d.ts +2 -0
  119. package/dist/telemetry/decorators.d.ts.map +1 -1
  120. package/dist/telemetry/decorators.js +75 -57
  121. package/dist/telemetry/errors.cjs +2 -2
  122. package/dist/telemetry/errors.js +2 -2
  123. package/dist/telemetry/index.d.ts +1 -1
  124. package/dist/telemetry/index.d.ts.map +1 -1
  125. package/dist/telemetry/index.js +3 -1
  126. package/dist/telemetry/telemetry.cjs +62 -21
  127. package/dist/telemetry/telemetry.d.ts +14 -0
  128. package/dist/telemetry/telemetry.d.ts.map +1 -1
  129. package/dist/telemetry/telemetry.js +62 -21
  130. package/dist/telemetry/utils.cjs +9 -6
  131. package/dist/telemetry/utils.d.ts +3 -0
  132. package/dist/telemetry/utils.d.ts.map +1 -1
  133. package/dist/telemetry/utils.js +9 -6
  134. package/dist/test-utils/session-state-stores.cjs +68 -0
  135. package/dist/test-utils/session-state-stores.js +42 -0
  136. package/dist/tools/session-tool-preferences-store.cjs +86 -0
  137. package/dist/tools/session-tool-preferences-store.d.ts +29 -0
  138. package/dist/tools/session-tool-preferences-store.d.ts.map +1 -0
  139. package/dist/tools/session-tool-preferences-store.js +63 -0
  140. package/dist/tools/tool-manager.cjs +223 -68
  141. package/dist/tools/tool-manager.d.ts +29 -9
  142. package/dist/tools/tool-manager.d.ts.map +1 -1
  143. package/dist/tools/tool-manager.js +223 -68
  144. package/dist/tools/types.d.ts +7 -1
  145. package/dist/tools/types.d.ts.map +1 -1
  146. package/dist/utils/service-initializer.cjs +38 -5
  147. package/dist/utils/service-initializer.d.ts +11 -1
  148. package/dist/utils/service-initializer.d.ts.map +1 -1
  149. package/dist/utils/service-initializer.js +36 -4
  150. package/package.json +1 -1
@@ -6,6 +6,7 @@ import {
6
6
  var _DextoAgent_decorators, _init;
7
7
  import { randomUUID } from "crypto";
8
8
  import { setMaxListeners } from "events";
9
+ import { ZodError } from "zod";
9
10
  import { SkillsContributor } from "../systemPrompt/contributors.js";
10
11
  import { expandMessageReferences } from "../resources/index.js";
11
12
  import { expandBlobReferences, fileTypesToMimePatterns } from "../context/utils.js";
@@ -13,7 +14,7 @@ import { StorageManager } from "../storage/index.js";
13
14
  import { PromptManager } from "../prompts/index.js";
14
15
  import { SessionError } from "../session/index.js";
15
16
  import { InstrumentClass } from "../telemetry/decorators.js";
16
- import { trace, context, propagation } from "@opentelemetry/api";
17
+ import { trace, context } from "@opentelemetry/api";
17
18
  import { resolveAndValidateLLMConfig } from "../llm/resolver.js";
18
19
  import { validateInputForLLM } from "../llm/validation.js";
19
20
  import { LLMError } from "../llm/errors.js";
@@ -51,6 +52,7 @@ import {
51
52
  } from "../events/index.js";
52
53
  import { safeStringify } from "../utils/safe-stringify.js";
53
54
  import { deriveHeuristicTitle, generateSessionTitle } from "../session/title-generator.js";
55
+ import { createAgentRunContext } from "../runtime/run-context.js";
54
56
  const requiredServices = [
55
57
  "mcpManager",
56
58
  "toolManager",
@@ -286,6 +288,9 @@ Either:
286
288
  };
287
289
  services.toolManager.setToolExecutionContextFactory((baseContext) => ({
288
290
  ...baseContext,
291
+ ...baseContext.runContext?.hostRuntime !== void 0 && {
292
+ hostRuntime: baseContext.runContext.hostRuntime
293
+ },
289
294
  agent: this,
290
295
  storage: toolExecutionStorage,
291
296
  services: toolExecutionServices
@@ -610,7 +615,8 @@ Either:
610
615
  ...responseEvent.estimatedCost !== void 0 && {
611
616
  estimatedCost: responseEvent.estimatedCost
612
617
  },
613
- ...responseEvent.pricingStatus && { pricingStatus: responseEvent.pricingStatus }
618
+ ...responseEvent.pricingStatus && { pricingStatus: responseEvent.pricingStatus },
619
+ ...responseEvent.hostRuntime && { hostRuntime: responseEvent.hostRuntime }
614
620
  };
615
621
  }
616
622
  /**
@@ -648,8 +654,28 @@ Either:
648
654
  if (!sessionId) {
649
655
  throw AgentError.apiValidationError("sessionId is required");
650
656
  }
657
+ if (this.activeStreamControllers.has(sessionId)) {
658
+ throw AgentError.sessionBusy(sessionId);
659
+ }
651
660
  const signal = options?.signal;
652
661
  const disconnectSignal = options?.disconnectSignal ?? signal;
662
+ let runContext;
663
+ try {
664
+ runContext = createAgentRunContext({
665
+ sessionId,
666
+ hostRuntime: options?.executionContext,
667
+ parentContext: context.active()
668
+ });
669
+ } catch (error) {
670
+ if (error instanceof ZodError) {
671
+ throw AgentError.apiValidationError(
672
+ "executionContext is invalid",
673
+ zodToIssues(error)
674
+ );
675
+ }
676
+ throw error;
677
+ }
678
+ const executionContext = runContext.hostRuntime;
653
679
  let contentParts = typeof content === "string" ? [{ type: "text", text: content }] : [...content];
654
680
  const eventQueue = [];
655
681
  let completed = false;
@@ -659,23 +685,36 @@ Either:
659
685
  const cleanupSignal = controller.signal;
660
686
  this.activeStreamControllers.set(sessionId, controller);
661
687
  setMaxListeners(30, cleanupSignal);
662
- const listeners = [];
688
+ const listenerCleanups = [];
663
689
  let detachDisconnectAbortListener;
690
+ const addStreamingListener = (event, listener) => {
691
+ this.agentEventBus.on(event, listener, { signal: cleanupSignal });
692
+ listenerCleanups.push(() => {
693
+ this.agentEventBus.off(event, listener);
694
+ });
695
+ };
664
696
  const cleanupListeners = () => {
665
697
  detachDisconnectAbortListener?.();
666
698
  detachDisconnectAbortListener = void 0;
667
- if (listeners.length === 0) {
699
+ this.activeStreamControllers.delete(sessionId);
700
+ if (listenerCleanups.length === 0) {
668
701
  return;
669
702
  }
670
- for (const { event, listener } of listeners) {
671
- this.agentEventBus.off(
672
- event,
673
- listener
674
- );
703
+ for (const removeListener of listenerCleanups) {
704
+ removeListener();
675
705
  }
676
- listeners.length = 0;
677
- this.activeStreamControllers.delete(sessionId);
706
+ listenerCleanups.length = 0;
678
707
  };
708
+ try {
709
+ const existingSession = await this.sessionManager.getSession(sessionId, false);
710
+ if (existingSession?.isBusy?.()) {
711
+ throw AgentError.sessionBusy(sessionId);
712
+ }
713
+ } catch (error) {
714
+ cleanupListeners();
715
+ controller.abort();
716
+ throw error;
717
+ }
679
718
  if (disconnectSignal) {
680
719
  const abortHandler = () => {
681
720
  cleanupListeners();
@@ -688,40 +727,32 @@ Either:
688
727
  if (data.sessionId !== sessionId) return;
689
728
  eventQueue.push({ name: "llm:thinking", ...data });
690
729
  };
691
- this.agentEventBus.on("llm:thinking", thinkingListener, { signal: cleanupSignal });
692
- listeners.push({ event: "llm:thinking", listener: thinkingListener });
730
+ addStreamingListener("llm:thinking", thinkingListener);
693
731
  const chunkListener = (data) => {
694
732
  if (data.sessionId !== sessionId) return;
695
733
  eventQueue.push({ name: "llm:chunk", ...data });
696
734
  };
697
- this.agentEventBus.on("llm:chunk", chunkListener, { signal: cleanupSignal });
698
- listeners.push({ event: "llm:chunk", listener: chunkListener });
735
+ addStreamingListener("llm:chunk", chunkListener);
699
736
  const responseListener = (data) => {
700
737
  if (data.sessionId !== sessionId) return;
701
738
  eventQueue.push({ name: "llm:response", ...data });
702
739
  };
703
- this.agentEventBus.on("llm:response", responseListener, { signal: cleanupSignal });
704
- listeners.push({ event: "llm:response", listener: responseListener });
740
+ addStreamingListener("llm:response", responseListener);
705
741
  const toolCallListener = (data) => {
706
742
  if (data.sessionId !== sessionId) return;
707
743
  eventQueue.push({ name: "llm:tool-call", ...data });
708
744
  };
709
- this.agentEventBus.on("llm:tool-call", toolCallListener, { signal: cleanupSignal });
710
- listeners.push({ event: "llm:tool-call", listener: toolCallListener });
745
+ addStreamingListener("llm:tool-call", toolCallListener);
711
746
  const toolCallPartialListener = (data) => {
712
747
  if (data.sessionId !== sessionId) return;
713
748
  eventQueue.push({ name: "llm:tool-call-partial", ...data });
714
749
  };
715
- this.agentEventBus.on("llm:tool-call-partial", toolCallPartialListener, {
716
- signal: cleanupSignal
717
- });
718
- listeners.push({ event: "llm:tool-call-partial", listener: toolCallPartialListener });
750
+ addStreamingListener("llm:tool-call-partial", toolCallPartialListener);
719
751
  const toolResultListener = (data) => {
720
752
  if (data.sessionId !== sessionId) return;
721
753
  eventQueue.push({ name: "llm:tool-result", ...data });
722
754
  };
723
- this.agentEventBus.on("llm:tool-result", toolResultListener, { signal: cleanupSignal });
724
- listeners.push({ event: "llm:tool-result", listener: toolResultListener });
755
+ addStreamingListener("llm:tool-result", toolResultListener);
725
756
  const errorListener = (data) => {
726
757
  if (data.sessionId !== sessionId) return;
727
758
  if (data.recoverable !== true) {
@@ -729,117 +760,70 @@ Either:
729
760
  }
730
761
  eventQueue.push({ name: "llm:error", ...data });
731
762
  };
732
- this.agentEventBus.on("llm:error", errorListener, { signal: cleanupSignal });
733
- listeners.push({ event: "llm:error", listener: errorListener });
763
+ addStreamingListener("llm:error", errorListener);
734
764
  const unsupportedInputListener = (data) => {
735
765
  if (data.sessionId !== sessionId) return;
736
766
  eventQueue.push({ name: "llm:unsupported-input", ...data });
737
767
  };
738
- this.agentEventBus.on("llm:unsupported-input", unsupportedInputListener, {
739
- signal: cleanupSignal
740
- });
741
- listeners.push({ event: "llm:unsupported-input", listener: unsupportedInputListener });
768
+ addStreamingListener("llm:unsupported-input", unsupportedInputListener);
742
769
  const titleUpdatedListener = (data) => {
743
770
  if (data.sessionId !== sessionId) return;
744
771
  eventQueue.push({ name: "session:title-updated", ...data });
745
772
  };
746
- this.agentEventBus.on("session:title-updated", titleUpdatedListener, {
747
- signal: cleanupSignal
748
- });
749
- listeners.push({ event: "session:title-updated", listener: titleUpdatedListener });
773
+ addStreamingListener("session:title-updated", titleUpdatedListener);
750
774
  const approvalRequestListener = (data) => {
751
775
  if (data.sessionId !== sessionId) return;
752
776
  eventQueue.push({ name: "approval:request", ...data });
753
777
  };
754
- this.agentEventBus.on("approval:request", approvalRequestListener, {
755
- signal: cleanupSignal
756
- });
757
- listeners.push({ event: "approval:request", listener: approvalRequestListener });
778
+ addStreamingListener("approval:request", approvalRequestListener);
758
779
  const approvalResponseListener = (data) => {
759
780
  if (data.sessionId !== sessionId) return;
760
781
  eventQueue.push({ name: "approval:response", ...data });
761
782
  };
762
- this.agentEventBus.on("approval:response", approvalResponseListener, {
763
- signal: cleanupSignal
764
- });
765
- listeners.push({ event: "approval:response", listener: approvalResponseListener });
783
+ addStreamingListener("approval:response", approvalResponseListener);
766
784
  const toolRunningListener = (data) => {
767
785
  if (data.sessionId !== sessionId) return;
768
786
  eventQueue.push({ name: "tool:running", ...data });
769
787
  };
770
- this.agentEventBus.on("tool:running", toolRunningListener, {
771
- signal: cleanupSignal
772
- });
773
- listeners.push({ event: "tool:running", listener: toolRunningListener });
788
+ addStreamingListener("tool:running", toolRunningListener);
774
789
  const contextCompactingListener = (data) => {
775
790
  if (data.sessionId !== sessionId) return;
776
791
  eventQueue.push({ name: "context:compacting", ...data });
777
792
  };
778
- this.agentEventBus.on("context:compacting", contextCompactingListener, {
779
- signal: cleanupSignal
780
- });
781
- listeners.push({ event: "context:compacting", listener: contextCompactingListener });
793
+ addStreamingListener("context:compacting", contextCompactingListener);
782
794
  const contextCompactedListener = (data) => {
783
795
  if (data.sessionId !== sessionId) return;
784
796
  eventQueue.push({ name: "context:compacted", ...data });
785
797
  };
786
- this.agentEventBus.on("context:compacted", contextCompactedListener, {
787
- signal: cleanupSignal
788
- });
789
- listeners.push({ event: "context:compacted", listener: contextCompactedListener });
798
+ addStreamingListener("context:compacted", contextCompactedListener);
790
799
  const messageQueuedListener = (data) => {
791
800
  if (data.sessionId !== sessionId) return;
792
801
  eventQueue.push({ name: "message:queued", ...data });
793
802
  };
794
- this.agentEventBus.on("message:queued", messageQueuedListener, {
795
- signal: cleanupSignal
796
- });
797
- listeners.push({ event: "message:queued", listener: messageQueuedListener });
803
+ addStreamingListener("message:queued", messageQueuedListener);
798
804
  const messageDequeuedListener = (data) => {
799
805
  if (data.sessionId !== sessionId) return;
800
806
  eventQueue.push({ name: "message:dequeued", ...data });
801
807
  };
802
- this.agentEventBus.on("message:dequeued", messageDequeuedListener, {
803
- signal: cleanupSignal
804
- });
805
- listeners.push({ event: "message:dequeued", listener: messageDequeuedListener });
808
+ addStreamingListener("message:dequeued", messageDequeuedListener);
806
809
  const serviceEventListener = (data) => {
807
810
  if (data.sessionId !== sessionId) return;
808
811
  eventQueue.push({ name: "service:event", ...data });
809
812
  };
810
- this.agentEventBus.on("service:event", serviceEventListener, {
811
- signal: cleanupSignal
812
- });
813
- listeners.push({ event: "service:event", listener: serviceEventListener });
813
+ addStreamingListener("service:event", serviceEventListener);
814
814
  const runCompleteListener = (data) => {
815
815
  if (data.sessionId !== sessionId) return;
816
816
  sawRunCompleteEvent = true;
817
817
  eventQueue.push({ name: "run:complete", ...data });
818
818
  completed = true;
819
819
  };
820
- this.agentEventBus.on("run:complete", runCompleteListener, {
821
- signal: cleanupSignal
822
- });
823
- listeners.push({ event: "run:complete", listener: runCompleteListener });
820
+ addStreamingListener("run:complete", runCompleteListener);
824
821
  (async () => {
825
- const activeContext = context.active();
826
822
  const activeSpan = trace.getActiveSpan();
827
823
  if (activeSpan) {
828
824
  activeSpan.setAttribute("sessionId", sessionId);
829
825
  }
830
- const existingBaggage = propagation.getBaggage(activeContext);
831
- const baggageEntries = {};
832
- if (existingBaggage) {
833
- existingBaggage.getAllEntries().forEach(([key, entry]) => {
834
- baggageEntries[key] = { ...entry };
835
- });
836
- }
837
- baggageEntries.sessionId = { ...baggageEntries.sessionId, value: sessionId };
838
- const updatedContext = propagation.setBaggage(
839
- activeContext,
840
- propagation.createBaggage(baggageEntries)
841
- );
842
- await context.with(updatedContext, async () => {
826
+ await context.with(runContext.telemetryContext, async () => {
843
827
  try {
844
828
  const llmConfig = this.stateManager.getLLMConfig(sessionId);
845
829
  const textParts = contentParts.filter(
@@ -985,10 +969,10 @@ Either:
985
969
  }
986
970
  validatePromptContentParts(contentParts);
987
971
  const session = await this.sessionManager.getSession(sessionId) || await this.sessionManager.createSession(sessionId);
988
- const _streamResult = await session.stream(
989
- contentParts,
990
- signal ? { signal } : void 0
991
- );
972
+ await session.stream(contentParts, {
973
+ ...signal ? { signal } : {},
974
+ runContext
975
+ });
992
976
  this.sessionManager.incrementMessageCount(session.id).catch(
993
977
  (error) => this.logger.warn(
994
978
  `Failed to increment message count: ${error instanceof Error ? error.message : String(error)}`
@@ -1012,7 +996,8 @@ Either:
1012
996
  error,
1013
997
  recoverable: false,
1014
998
  context: "run_failed",
1015
- sessionId
999
+ sessionId,
1000
+ ...executionContext !== void 0 && { hostRuntime: executionContext }
1016
1001
  };
1017
1002
  eventQueue.push(errorEvent);
1018
1003
  }
@@ -1058,7 +1043,7 @@ Either:
1058
1043
  async isSessionBusy(sessionId) {
1059
1044
  this.ensureStarted();
1060
1045
  const session = await this.sessionManager.getSession(sessionId, false);
1061
- return session?.isBusy() ?? false;
1046
+ return session?.isBusy?.() ?? false;
1062
1047
  }
1063
1048
  /**
1064
1049
  * Queue a message for processing when a session is busy.
@@ -1312,7 +1297,12 @@ Either:
1312
1297
  this.systemPromptManager,
1313
1298
  this.resourceManager,
1314
1299
  userText,
1315
- this.logger
1300
+ this.logger,
1301
+ {
1302
+ ...this.overrides.languageModelFactory !== void 0 && {
1303
+ languageModelFactory: this.overrides.languageModelFactory
1304
+ }
1305
+ }
1316
1306
  );
1317
1307
  let title = result.title;
1318
1308
  if (!title) {
@@ -1454,8 +1444,9 @@ Either:
1454
1444
  return await this.searchService.searchSessions(query);
1455
1445
  }
1456
1446
  /**
1457
- * Resets the conversation history for a specific session.
1458
- * Keeps the session alive but the conversation history is cleared.
1447
+ * Resets the conversation and session-scoped interaction state for a specific session.
1448
+ * Keeps the session alive, but clears persisted mid-session state such as queued follow-ups,
1449
+ * approval memory, tool preferences, and session-level LLM overrides.
1459
1450
  * @param sessionId Session ID (required)
1460
1451
  */
1461
1452
  async resetConversation(sessionId) {
@@ -1742,7 +1733,12 @@ Either:
1742
1733
  throw new Error("Unreachable");
1743
1734
  }
1744
1735
  const validatedUpdates = parseResult.data;
1745
- const currentLLMConfig = sessionId ? this.stateManager.getRuntimeConfig(sessionId).llm : this.stateManager.getRuntimeConfig().llm;
1736
+ if (sessionId !== void 0 && sessionId !== "*" && sessionId.trim() === "") {
1737
+ throw AgentError.apiValidationError(
1738
+ "sessionId must be a non-empty string when provided"
1739
+ );
1740
+ }
1741
+ const currentLLMConfig = sessionId !== void 0 && sessionId !== "*" ? this.stateManager.getRuntimeConfig(sessionId).llm : this.stateManager.getRuntimeConfig().llm;
1746
1742
  const result = await resolveAndValidateLLMConfig(
1747
1743
  currentLLMConfig,
1748
1744
  validatedUpdates,
@@ -1770,14 +1766,12 @@ Either:
1770
1766
  */
1771
1767
  async performLLMSwitch(validatedConfig, sessionScope) {
1772
1768
  if (sessionScope === "*") {
1773
- this.stateManager.updateLLM(validatedConfig, sessionScope);
1774
1769
  await this.sessionManager.switchLLMForAllSessions(validatedConfig);
1775
- } else if (sessionScope) {
1770
+ } else if (sessionScope !== void 0) {
1776
1771
  const session = await this.sessionManager.getSession(sessionScope);
1777
1772
  if (!session) {
1778
1773
  throw SessionError.notFound(sessionScope);
1779
1774
  }
1780
- this.stateManager.updateLLM(validatedConfig, sessionScope);
1781
1775
  await this.sessionManager.switchLLMForSpecificSession(validatedConfig, sessionScope);
1782
1776
  } else {
1783
1777
  this.stateManager.updateLLM(validatedConfig, sessionScope);
@@ -2207,6 +2201,9 @@ Either:
2207
2201
  if (sessionId !== void 0 && (!sessionId || typeof sessionId !== "string")) {
2208
2202
  throw AgentError.apiValidationError("sessionId must be a non-empty string");
2209
2203
  }
2204
+ if (sessionId !== void 0) {
2205
+ await this.toolManager.restoreSessionState(sessionId);
2206
+ }
2210
2207
  return this.toolManager.filterToolsForSession(
2211
2208
  await this.toolManager.getAllTools(),
2212
2209
  sessionId
@@ -2232,7 +2229,7 @@ Either:
2232
2229
  /**
2233
2230
  * Set session-level disabled tools (session override).
2234
2231
  */
2235
- setSessionDisabledTools(sessionId, toolNames) {
2232
+ async setSessionDisabledTools(sessionId, toolNames) {
2236
2233
  this.ensureStarted();
2237
2234
  if (!sessionId || typeof sessionId !== "string") {
2238
2235
  throw AgentError.apiValidationError(
@@ -2242,36 +2239,37 @@ Either:
2242
2239
  if (!Array.isArray(toolNames) || toolNames.some((name) => !name || typeof name !== "string")) {
2243
2240
  throw AgentError.apiValidationError("toolNames must be an array of non-empty strings");
2244
2241
  }
2245
- this.toolManager.setSessionDisabledTools(sessionId, toolNames);
2242
+ await this.toolManager.setSessionDisabledTools(sessionId, toolNames);
2246
2243
  }
2247
2244
  /**
2248
2245
  * Clear session-level disabled tools (session override).
2249
2246
  */
2250
- clearSessionDisabledTools(sessionId) {
2247
+ async clearSessionDisabledTools(sessionId) {
2251
2248
  this.ensureStarted();
2252
2249
  if (!sessionId || typeof sessionId !== "string") {
2253
2250
  throw AgentError.apiValidationError(
2254
2251
  "sessionId is required and must be a non-empty string"
2255
2252
  );
2256
2253
  }
2257
- this.toolManager.clearSessionDisabledTools(sessionId);
2254
+ await this.toolManager.clearSessionDisabledTools(sessionId);
2258
2255
  }
2259
2256
  /**
2260
2257
  * Get session-level auto-approve tools.
2261
2258
  */
2262
- getSessionAutoApproveTools(sessionId) {
2259
+ async getSessionAutoApproveTools(sessionId) {
2263
2260
  this.ensureStarted();
2264
2261
  if (!sessionId || typeof sessionId !== "string") {
2265
2262
  throw AgentError.apiValidationError(
2266
2263
  "sessionId is required and must be a non-empty string"
2267
2264
  );
2268
2265
  }
2266
+ await this.toolManager.restoreSessionState(sessionId);
2269
2267
  return this.toolManager.getSessionUserAutoApproveTools(sessionId) ?? [];
2270
2268
  }
2271
2269
  /**
2272
2270
  * Set session-level auto-approve tools (user selection).
2273
2271
  */
2274
- setSessionAutoApproveTools(sessionId, toolNames) {
2272
+ async setSessionAutoApproveTools(sessionId, toolNames) {
2275
2273
  this.ensureStarted();
2276
2274
  if (!sessionId || typeof sessionId !== "string") {
2277
2275
  throw AgentError.apiValidationError(
@@ -2281,7 +2279,7 @@ Either:
2281
2279
  if (!Array.isArray(toolNames) || toolNames.some((name) => !name || typeof name !== "string")) {
2282
2280
  throw AgentError.apiValidationError("toolNames must be an array of non-empty strings");
2283
2281
  }
2284
- this.toolManager.setSessionUserAutoApproveTools(sessionId, toolNames);
2282
+ await this.toolManager.setSessionUserAutoApproveTools(sessionId, toolNames);
2285
2283
  }
2286
2284
  /**
2287
2285
  * Gets all connected MCP clients.
@@ -27,6 +27,7 @@ var AgentErrorCode = /* @__PURE__ */ ((AgentErrorCode2) => {
27
27
  AgentErrorCode2["STOPPED"] = "agent_stopped";
28
28
  AgentErrorCode2["INITIALIZATION_FAILED"] = "agent_initialization_failed";
29
29
  AgentErrorCode2["SWITCH_IN_PROGRESS"] = "agent_switch_in_progress";
30
+ AgentErrorCode2["SESSION_BUSY"] = "agent_session_busy";
30
31
  AgentErrorCode2["NO_CONFIG_PATH"] = "agent_no_config_path";
31
32
  AgentErrorCode2["INVALID_CONFIG"] = "agent_invalid_config";
32
33
  AgentErrorCode2["API_VALIDATION_ERROR"] = "agent_api_validation_error";
@@ -9,6 +9,7 @@ export declare enum AgentErrorCode {
9
9
  STOPPED = "agent_stopped",
10
10
  INITIALIZATION_FAILED = "agent_initialization_failed",
11
11
  SWITCH_IN_PROGRESS = "agent_switch_in_progress",
12
+ SESSION_BUSY = "agent_session_busy",
12
13
  NO_CONFIG_PATH = "agent_no_config_path",
13
14
  INVALID_CONFIG = "agent_invalid_config",
14
15
  API_VALIDATION_ERROR = "agent_api_validation_error",
@@ -1 +1 @@
1
- {"version":3,"file":"error-codes.d.ts","sourceRoot":"","sources":["../../src/agent/error-codes.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,oBAAY,cAAc;IAEtB,WAAW,sBAAsB;IACjC,eAAe,0BAA0B;IACzC,OAAO,kBAAkB;IACzB,qBAAqB,gCAAgC;IACrD,kBAAkB,6BAA6B;IAG/C,cAAc,yBAAyB;IACvC,cAAc,yBAAyB;IAGvC,oBAAoB,+BAA+B;IAGnD,aAAa,wBAAwB;CACxC"}
1
+ {"version":3,"file":"error-codes.d.ts","sourceRoot":"","sources":["../../src/agent/error-codes.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,oBAAY,cAAc;IAEtB,WAAW,sBAAsB;IACjC,eAAe,0BAA0B;IACzC,OAAO,kBAAkB;IACzB,qBAAqB,gCAAgC;IACrD,kBAAkB,6BAA6B;IAC/C,YAAY,uBAAuB;IAGnC,cAAc,yBAAyB;IACvC,cAAc,yBAAyB;IAGvC,oBAAoB,+BAA+B;IAGnD,aAAa,wBAAwB;CACxC"}
@@ -5,6 +5,7 @@ var AgentErrorCode = /* @__PURE__ */ ((AgentErrorCode2) => {
5
5
  AgentErrorCode2["STOPPED"] = "agent_stopped";
6
6
  AgentErrorCode2["INITIALIZATION_FAILED"] = "agent_initialization_failed";
7
7
  AgentErrorCode2["SWITCH_IN_PROGRESS"] = "agent_switch_in_progress";
8
+ AgentErrorCode2["SESSION_BUSY"] = "agent_session_busy";
8
9
  AgentErrorCode2["NO_CONFIG_PATH"] = "agent_no_config_path";
9
10
  AgentErrorCode2["INVALID_CONFIG"] = "agent_invalid_config";
10
11
  AgentErrorCode2["API_VALIDATION_ERROR"] = "agent_api_validation_error";
@@ -77,6 +77,19 @@ class AgentError {
77
77
  "Wait for the current switch operation to complete before starting a new one"
78
78
  );
79
79
  }
80
+ /**
81
+ * Session already processing a run
82
+ */
83
+ static sessionBusy(sessionId) {
84
+ return new import_DextoRuntimeError.DextoRuntimeError(
85
+ import_error_codes.AgentErrorCode.SESSION_BUSY,
86
+ import_types.ErrorScope.AGENT,
87
+ import_types.ErrorType.CONFLICT,
88
+ `Session '${sessionId}' is already processing a message`,
89
+ { sessionId },
90
+ "Wait for the current run to finish or queue the next message"
91
+ );
92
+ }
80
93
  /**
81
94
  * Agent initialization failed
82
95
  */
@@ -21,6 +21,12 @@ export declare class AgentError {
21
21
  * Agent switch in progress
22
22
  */
23
23
  static switchInProgress(): DextoRuntimeError<undefined>;
24
+ /**
25
+ * Session already processing a run
26
+ */
27
+ static sessionBusy(sessionId: string): DextoRuntimeError<{
28
+ sessionId: string;
29
+ }>;
24
30
  /**
25
31
  * Agent initialization failed
26
32
  */
@@ -1 +1 @@
1
- {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/agent/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AAInE;;;;GAIG;AACH,qBAAa,UAAU;IACnB;;OAEG;IACH,MAAM,CAAC,UAAU;IAWjB;;OAEG;IACH,MAAM,CAAC,cAAc;IAWrB;;OAEG;IACH,MAAM,CAAC,OAAO;IAWd;;OAEG;IACH,MAAM,CAAC,gBAAgB;IAWvB;;OAEG;IACH,MAAM,CAAC,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO;IAW7D;;OAEG;IACH,MAAM,CAAC,YAAY;IAWnB;;OAEG;IACH,MAAM,CAAC,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO;IAW5D;;OAEG;IACH,MAAM,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO;CAUzD"}
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/agent/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AAInE;;;;GAIG;AACH,qBAAa,UAAU;IACnB;;OAEG;IACH,MAAM,CAAC,UAAU;IAWjB;;OAEG;IACH,MAAM,CAAC,cAAc;IAWrB;;OAEG;IACH,MAAM,CAAC,OAAO;IAWd;;OAEG;IACH,MAAM,CAAC,gBAAgB;IAWvB;;OAEG;IACH,MAAM,CAAC,WAAW,CAAC,SAAS,EAAE,MAAM;;;IAWpC;;OAEG;IACH,MAAM,CAAC,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO;IAW7D;;OAEG;IACH,MAAM,CAAC,YAAY;IAWnB;;OAEG;IACH,MAAM,CAAC,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO;IAW5D;;OAEG;IACH,MAAM,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO;CAUzD"}
@@ -55,6 +55,19 @@ class AgentError {
55
55
  "Wait for the current switch operation to complete before starting a new one"
56
56
  );
57
57
  }
58
+ /**
59
+ * Session already processing a run
60
+ */
61
+ static sessionBusy(sessionId) {
62
+ return new DextoRuntimeError(
63
+ AgentErrorCode.SESSION_BUSY,
64
+ ErrorScope.AGENT,
65
+ ErrorType.CONFLICT,
66
+ `Session '${sessionId}' is already processing a message`,
67
+ { sessionId },
68
+ "Wait for the current run to finish or queue the next message"
69
+ );
70
+ }
58
71
  /**
59
72
  * Agent initialization failed
60
73
  */
@@ -5,6 +5,7 @@ export * from './errors.js';
5
5
  export * from './error-codes.js';
6
6
  export type { DextoAgentOptions } from './agent-options.js';
7
7
  export type { AgentRuntimeSettings, DextoAgentConfigInput } from './runtime-config.js';
8
+ export type { HostRuntimeContext, HostRuntimeIds } from '../runtime/index.js';
8
9
  export type { ContentInput, GenerateOptions, GenerateResponse, StreamOptions, AgentToolCall, } from './types.js';
9
10
  export type { StreamingEvent, StreamingEventName, STREAMING_EVENTS } from '../events/index.js';
10
11
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/agent/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EACH,eAAe,EACf,oBAAoB,EACpB,KAAK,SAAS,EACd,KAAK,kBAAkB,GAC1B,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,cAAc,aAAa,CAAC;AAC5B,cAAc,kBAAkB,CAAC;AACjC,YAAY,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,YAAY,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAGvF,YAAY,EACR,YAAY,EACZ,eAAe,EACf,gBAAgB,EAChB,aAAa,EACb,aAAa,GAChB,MAAM,YAAY,CAAC;AAGpB,YAAY,EAAE,cAAc,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/agent/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EACH,eAAe,EACf,oBAAoB,EACpB,KAAK,SAAS,EACd,KAAK,kBAAkB,GAC1B,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,cAAc,aAAa,CAAC;AAC5B,cAAc,kBAAkB,CAAC;AACjC,YAAY,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,YAAY,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AACvF,YAAY,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAG9E,YAAY,EACR,YAAY,EACZ,eAAe,EACf,gBAAgB,EAChB,aAAa,EACb,aAAa,GAChB,MAAM,YAAY,CAAC;AAGpB,YAAY,EAAE,cAAc,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC"}
@@ -773,8 +773,8 @@ export declare const AgentCardSchema: z.ZodObject<{
773
773
  }, z.ZodTypeAny, "passthrough">>>;
774
774
  }, "strict", z.ZodTypeAny, {
775
775
  description: string;
776
- name: string;
777
776
  url: string;
777
+ name: string;
778
778
  version: string;
779
779
  capabilities: {
780
780
  streaming: boolean;
@@ -934,8 +934,8 @@ export declare const AgentCardSchema: z.ZodObject<{
934
934
  }[] | undefined;
935
935
  }, {
936
936
  description: string;
937
- name: string;
938
937
  url: string;
938
+ name: string;
939
939
  version: string;
940
940
  metadata?: z.objectInputType<{
941
941
  dexto: z.ZodOptional<z.ZodObject<{
@@ -6,6 +6,7 @@
6
6
  import type { ContentPart } from '../context/types.js';
7
7
  import type { LLMTokenUsage } from '../llm/services/types.js';
8
8
  import type { LLMProvider, LLMPricingStatus } from '../llm/types.js';
9
+ import type { HostRuntimeContext } from '../runtime/index.js';
9
10
  /**
10
11
  * Re-export content part types for API consumers
11
12
  */
@@ -41,6 +42,13 @@ export interface AgentToolCall {
41
42
  * ```
42
43
  */
43
44
  export type ContentInput = string | ContentPart[];
45
+ /**
46
+ * Host-owned execution-scoped correlation IDs for a single generate/stream invocation.
47
+ *
48
+ * These values should be supplied by the host per run/attempt and are intentionally
49
+ * separate from agent/session configuration.
50
+ */
51
+ export type AgentExecutionContext = HostRuntimeContext;
44
52
  /**
45
53
  * Options for generate() and stream() methods
46
54
  */
@@ -49,6 +57,8 @@ export interface GenerateOptions {
49
57
  signal?: AbortSignal;
50
58
  /** Optional signal to stop streaming to the caller without cancelling the run itself */
51
59
  disconnectSignal?: AbortSignal;
60
+ /** Optional host-owned execution context for this single invocation */
61
+ executionContext?: AgentExecutionContext;
52
62
  }
53
63
  /**
54
64
  * Complete response from generate() method
@@ -65,6 +75,7 @@ export interface GenerateResponse {
65
75
  model?: string;
66
76
  estimatedCost?: number;
67
77
  pricingStatus?: LLMPricingStatus;
78
+ hostRuntime?: HostRuntimeContext;
68
79
  }
69
80
  /**
70
81
  * Options for stream() method (same as generate)
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/agent/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAErE;;GAEG;AACH,YAAY,EACR,WAAW,EACX,QAAQ,EACR,SAAS,EACT,QAAQ,EACR,SAAS,EACT,QAAQ,GACX,MAAM,qBAAqB,CAAC;AAC7B,YAAY,EAAE,aAAa,IAAI,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAE5E;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EACD;QACI,OAAO,EAAE,OAAO,CAAC;QACjB,IAAI,EAAE,GAAG,CAAC;KACb,GACD,SAAS,CAAC;CACnB;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,WAAW,EAAE,CAAC;AAElD;;GAEG;AACH,MAAM,WAAW,eAAe;IAC5B,mCAAmC;IACnC,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,wFAAwF;IACxF,gBAAgB,CAAC,EAAE,WAAW,CAAC;CAClC;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,KAAK,EAAE,aAAa,CAAC;IACrB,SAAS,EAAE,aAAa,EAAE,CAAC;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,WAAW,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,gBAAgB,CAAC;CACpC;AAED;;;;;GAKG;AACH,MAAM,MAAM,aAAa,GAAG,eAAe,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/agent/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACrE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAE9D;;GAEG;AACH,YAAY,EACR,WAAW,EACX,QAAQ,EACR,SAAS,EACT,QAAQ,EACR,SAAS,EACT,QAAQ,GACX,MAAM,qBAAqB,CAAC;AAC7B,YAAY,EAAE,aAAa,IAAI,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAE5E;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EACD;QACI,OAAO,EAAE,OAAO,CAAC;QACjB,IAAI,EAAE,GAAG,CAAC;KACb,GACD,SAAS,CAAC;CACnB;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,WAAW,EAAE,CAAC;AAElD;;;;;GAKG;AACH,MAAM,MAAM,qBAAqB,GAAG,kBAAkB,CAAC;AAEvD;;GAEG;AACH,MAAM,WAAW,eAAe;IAC5B,mCAAmC;IACnC,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,wFAAwF;IACxF,gBAAgB,CAAC,EAAE,WAAW,CAAC;IAC/B,uEAAuE;IACvE,gBAAgB,CAAC,EAAE,qBAAqB,CAAC;CAC5C;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,KAAK,EAAE,aAAa,CAAC;IACrB,SAAS,EAAE,aAAa,EAAE,CAAC;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,WAAW,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,gBAAgB,CAAC;IACjC,WAAW,CAAC,EAAE,kBAAkB,CAAC;CACpC;AAED;;;;;GAKG;AACH,MAAM,MAAM,aAAa,GAAG,eAAe,CAAC"}
@@ -27,6 +27,7 @@ function createApprovalRequest(details) {
27
27
  approvalId: (0, import_crypto.randomUUID)(),
28
28
  type: details.type,
29
29
  sessionId: details.sessionId,
30
+ hostRuntime: details.hostRuntime,
30
31
  timeout: details.timeout,
31
32
  timestamp: /* @__PURE__ */ new Date(),
32
33
  metadata: details.metadata
@@ -1 +1 @@
1
- {"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../src/approval/factory.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAE1E;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,sBAAsB,GAAG,eAAe,CAStF"}
1
+ {"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../src/approval/factory.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAE1E;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,sBAAsB,GAAG,eAAe,CAUtF"}
@@ -5,6 +5,7 @@ function createApprovalRequest(details) {
5
5
  approvalId: randomUUID(),
6
6
  type: details.type,
7
7
  sessionId: details.sessionId,
8
+ hostRuntime: details.hostRuntime,
8
9
  timeout: details.timeout,
9
10
  timestamp: /* @__PURE__ */ new Date(),
10
11
  metadata: details.metadata