@assistant-ui/react 0.15.31 → 0.15.32

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 (211) hide show
  1. package/dist/_virtual/_rolldown/runtime.js +1 -2
  2. package/dist/adapters/OpenAIRealtimeVoiceAdapter.js +1 -2
  3. package/dist/assistant-transport.js +1 -2
  4. package/dist/cloud-renderer/CloudRendererHost.js +1 -2
  5. package/dist/context/ReadonlyStore.js +1 -2
  6. package/dist/context/providers/MessageProvider.js +1 -2
  7. package/dist/context/providers/ThreadViewportProvider.js +1 -2
  8. package/dist/context/react/ThreadViewportContext.js +1 -2
  9. package/dist/context/react/utils/createContextHook.js +1 -2
  10. package/dist/context/react/utils/createContextStoreHook.js +1 -2
  11. package/dist/context/stores/ThreadViewport.js +1 -2
  12. package/dist/devtools/DevToolsHooks.js +1 -2
  13. package/dist/hooks/useMessageQuote.js +1 -2
  14. package/dist/hooks/useMessageTiming.js +1 -2
  15. package/dist/hooks/useToolCallElapsed.js +1 -2
  16. package/dist/internal.js +1 -2
  17. package/dist/legacy-runtime/AssistantRuntimeProvider.js +1 -2
  18. package/dist/mcp-apps/McpAppRenderer.d.ts.map +1 -1
  19. package/dist/mcp-apps/McpAppRenderer.js +3 -3
  20. package/dist/mcp-apps/McpAppRenderer.js.map +1 -1
  21. package/dist/mcp-apps/McpAppsRemoteHost.js +1 -2
  22. package/dist/mcp-apps/app-frame.js +1 -2
  23. package/dist/mcp-apps/bridge.js +1 -2
  24. package/dist/mcp-apps/csp.js +1 -2
  25. package/dist/mcp-apps/types.js +1 -2
  26. package/dist/mcp-apps/utils.js +1 -2
  27. package/dist/model-context/frame/useAssistantFrameHost.js +1 -2
  28. package/dist/model-context/makeAssistantVisible.js +1 -2
  29. package/dist/primitives/actionBar/ActionBarCopy.js +1 -2
  30. package/dist/primitives/actionBar/ActionBarEdit.js +1 -2
  31. package/dist/primitives/actionBar/ActionBarExportMarkdown.js +1 -2
  32. package/dist/primitives/actionBar/ActionBarFeedbackNegative.js +1 -2
  33. package/dist/primitives/actionBar/ActionBarFeedbackPositive.js +1 -2
  34. package/dist/primitives/actionBar/ActionBarInteractionContext.js +1 -2
  35. package/dist/primitives/actionBar/ActionBarReload.js +1 -2
  36. package/dist/primitives/actionBar/ActionBarRoot.js +1 -2
  37. package/dist/primitives/actionBar/ActionBarSpeak.js +1 -2
  38. package/dist/primitives/actionBar/ActionBarStopSpeaking.js +1 -2
  39. package/dist/primitives/actionBar/useActionBarFloatStatus.js +1 -2
  40. package/dist/primitives/actionBar.js +1 -2
  41. package/dist/primitives/actionBarMore/ActionBarMoreContent.js +1 -2
  42. package/dist/primitives/actionBarMore/ActionBarMoreItem.js +1 -2
  43. package/dist/primitives/actionBarMore/ActionBarMoreRoot.js +1 -2
  44. package/dist/primitives/actionBarMore/ActionBarMoreSeparator.js +1 -2
  45. package/dist/primitives/actionBarMore/ActionBarMoreTrigger.js +1 -2
  46. package/dist/primitives/actionBarMore/scope.js +1 -2
  47. package/dist/primitives/actionBarMore.js +1 -2
  48. package/dist/primitives/assistantModal/AssistantModalAnchor.js +1 -2
  49. package/dist/primitives/assistantModal/AssistantModalContent.js +1 -2
  50. package/dist/primitives/assistantModal/AssistantModalRoot.js +1 -2
  51. package/dist/primitives/assistantModal/AssistantModalTrigger.js +1 -2
  52. package/dist/primitives/assistantModal/popoverRenderPrimitives.js +1 -2
  53. package/dist/primitives/assistantModal/scope.js +1 -2
  54. package/dist/primitives/assistantModal.js +1 -2
  55. package/dist/primitives/attachment/AttachmentName.js +1 -2
  56. package/dist/primitives/attachment/AttachmentRemove.js +1 -2
  57. package/dist/primitives/attachment/AttachmentRoot.js +1 -2
  58. package/dist/primitives/attachment/AttachmentThumb.js +1 -2
  59. package/dist/primitives/attachment.js +1 -2
  60. package/dist/primitives/branchPicker/BranchPickerCount.js +1 -2
  61. package/dist/primitives/branchPicker/BranchPickerNext.js +1 -2
  62. package/dist/primitives/branchPicker/BranchPickerNumber.js +1 -2
  63. package/dist/primitives/branchPicker/BranchPickerPrevious.js +1 -2
  64. package/dist/primitives/branchPicker/BranchPickerRoot.js +1 -2
  65. package/dist/primitives/branchPicker.js +1 -2
  66. package/dist/primitives/chainOfThought/ChainOfThoughtAccordionTrigger.d.ts +5 -4
  67. package/dist/primitives/chainOfThought/ChainOfThoughtAccordionTrigger.d.ts.map +1 -1
  68. package/dist/primitives/chainOfThought/ChainOfThoughtAccordionTrigger.js +57 -20
  69. package/dist/primitives/chainOfThought/ChainOfThoughtAccordionTrigger.js.map +1 -1
  70. package/dist/primitives/chainOfThought/ChainOfThoughtRoot.js +1 -2
  71. package/dist/primitives/chainOfThought.js +1 -2
  72. package/dist/primitives/composer/ComposerAddAttachment.js +1 -2
  73. package/dist/primitives/composer/ComposerAttachmentDropzone.js +1 -2
  74. package/dist/primitives/composer/ComposerCancel.js +1 -2
  75. package/dist/primitives/composer/ComposerCompactContext.js +1 -2
  76. package/dist/primitives/composer/ComposerDictate.js +1 -2
  77. package/dist/primitives/composer/ComposerDictationTranscript.js +1 -2
  78. package/dist/primitives/composer/ComposerInput.js +1 -2
  79. package/dist/primitives/composer/ComposerInputPluginContext.js +1 -2
  80. package/dist/primitives/composer/ComposerQuote.js +1 -2
  81. package/dist/primitives/composer/ComposerResume.js +1 -2
  82. package/dist/primitives/composer/ComposerRoot.js +1 -2
  83. package/dist/primitives/composer/ComposerSend.js +1 -2
  84. package/dist/primitives/composer/ComposerStopDictation.js +1 -2
  85. package/dist/primitives/composer/composerInputSelector.js +1 -2
  86. package/dist/primitives/composer/trigger/TriggerPopover.js +1 -2
  87. package/dist/primitives/composer/trigger/TriggerPopoverAction.js +1 -2
  88. package/dist/primitives/composer/trigger/TriggerPopoverBack.js +1 -2
  89. package/dist/primitives/composer/trigger/TriggerPopoverCategories.js +1 -2
  90. package/dist/primitives/composer/trigger/TriggerPopoverDirective.js +1 -2
  91. package/dist/primitives/composer/trigger/TriggerPopoverItems.js +1 -2
  92. package/dist/primitives/composer/trigger/TriggerPopoverResource.js +1 -2
  93. package/dist/primitives/composer/trigger/TriggerPopoverRootContext.js +1 -2
  94. package/dist/primitives/composer/trigger/detectTrigger.js +1 -2
  95. package/dist/primitives/composer/trigger/index.js +1 -2
  96. package/dist/primitives/composer/trigger/matchesTriggerItemQuery.js +1 -2
  97. package/dist/primitives/composer/trigger/triggerDetectionResource.js +1 -2
  98. package/dist/primitives/composer/trigger/triggerKeyboardResource.js +1 -2
  99. package/dist/primitives/composer/trigger/triggerNavigationResource.js +1 -2
  100. package/dist/primitives/composer/trigger/triggerSelectionResource.js +1 -2
  101. package/dist/primitives/composer/useComposerCancelWithFocus.js +1 -2
  102. package/dist/primitives/composer/useComposerInputState.js +1 -2
  103. package/dist/primitives/composer.js +1 -2
  104. package/dist/primitives/dropdownMenuRenderPrimitives.js +1 -2
  105. package/dist/primitives/error/ErrorMessage.js +1 -2
  106. package/dist/primitives/error/ErrorRoot.js +1 -2
  107. package/dist/primitives/error.js +1 -2
  108. package/dist/primitives/message/MessageError.js +1 -2
  109. package/dist/primitives/message/MessageIf.js +1 -2
  110. package/dist/primitives/message/MessageParts.js +1 -2
  111. package/dist/primitives/message/MessagePartsGrouped.js +1 -2
  112. package/dist/primitives/message/MessageRoot.js +1 -2
  113. package/dist/primitives/message.js +1 -2
  114. package/dist/primitives/messagePart/MessagePartImage.js +1 -2
  115. package/dist/primitives/messagePart/MessagePartText.js +1 -2
  116. package/dist/primitives/messagePart/useMessagePartData.js +1 -2
  117. package/dist/primitives/messagePart/useMessagePartFile.js +1 -2
  118. package/dist/primitives/messagePart/useMessagePartImage.js +1 -2
  119. package/dist/primitives/messagePart/useMessagePartReasoning.js +1 -2
  120. package/dist/primitives/messagePart/useMessagePartSource.js +1 -2
  121. package/dist/primitives/messagePart/useMessagePartText.js +1 -2
  122. package/dist/primitives/messagePart.js +1 -2
  123. package/dist/primitives/queueItem/QueueItemRemove.js +1 -2
  124. package/dist/primitives/queueItem/QueueItemSteer.js +1 -2
  125. package/dist/primitives/queueItem/QueueItemText.js +1 -2
  126. package/dist/primitives/queueItem.js +1 -2
  127. package/dist/primitives/reasoning/useScrollLock.d.ts.map +1 -1
  128. package/dist/primitives/reasoning/useScrollLock.js +41 -25
  129. package/dist/primitives/reasoning/useScrollLock.js.map +1 -1
  130. package/dist/primitives/selectionToolbar/SelectionToolbarQuote.js +1 -2
  131. package/dist/primitives/selectionToolbar/SelectionToolbarRoot.js +1 -2
  132. package/dist/primitives/selectionToolbar.js +1 -2
  133. package/dist/primitives/suggestion/SuggestionDescription.js +1 -2
  134. package/dist/primitives/suggestion/SuggestionTitle.js +1 -2
  135. package/dist/primitives/suggestion/SuggestionTrigger.js +1 -2
  136. package/dist/primitives/suggestion.js +1 -2
  137. package/dist/primitives/thread/ThreadEmpty.js +1 -2
  138. package/dist/primitives/thread/ThreadIf.js +1 -2
  139. package/dist/primitives/thread/ThreadLoadEarlier.js +1 -2
  140. package/dist/primitives/thread/ThreadRoot.js +1 -2
  141. package/dist/primitives/thread/ThreadRootElementContext.js +1 -2
  142. package/dist/primitives/thread/ThreadScrollToBottom.js +1 -2
  143. package/dist/primitives/thread/ThreadSuggestion.js +1 -2
  144. package/dist/primitives/thread/ThreadViewport.js +1 -2
  145. package/dist/primitives/thread/ThreadViewportFooter.js +1 -2
  146. package/dist/primitives/thread/topAnchor/computeTopAnchorSlack.js +1 -2
  147. package/dist/primitives/thread/topAnchor/createReserveObservers.js +1 -2
  148. package/dist/primitives/thread/topAnchor/mountTopAnchorReserve.js +1 -2
  149. package/dist/primitives/thread/topAnchor/topAnchorTurn.js +1 -2
  150. package/dist/primitives/thread/topAnchor/topAnchorUtils.js +1 -2
  151. package/dist/primitives/thread/topAnchor/useTopAnchorReserve.js +1 -2
  152. package/dist/primitives/thread/useThreadViewportAutoScroll.js +1 -2
  153. package/dist/primitives/thread.js +1 -2
  154. package/dist/primitives/threadList/ThreadListLoadMore.js +1 -2
  155. package/dist/primitives/threadList/ThreadListNew.js +1 -2
  156. package/dist/primitives/threadList/ThreadListRoot.js +1 -2
  157. package/dist/primitives/threadList.js +1 -2
  158. package/dist/primitives/threadListFocusGroup.js +1 -2
  159. package/dist/primitives/threadListItem/ThreadListItemArchive.js +1 -2
  160. package/dist/primitives/threadListItem/ThreadListItemDelete.js +1 -2
  161. package/dist/primitives/threadListItem/ThreadListItemRoot.d.ts.map +1 -1
  162. package/dist/primitives/threadListItem/ThreadListItemRoot.js +2 -3
  163. package/dist/primitives/threadListItem/ThreadListItemRoot.js.map +1 -1
  164. package/dist/primitives/threadListItem/ThreadListItemTrigger.js +1 -2
  165. package/dist/primitives/threadListItem/ThreadListItemUnarchive.js +1 -2
  166. package/dist/primitives/threadListItem.js +1 -2
  167. package/dist/primitives/threadListItemMore/ThreadListItemMoreContent.js +1 -2
  168. package/dist/primitives/threadListItemMore/ThreadListItemMoreItem.js +1 -2
  169. package/dist/primitives/threadListItemMore/ThreadListItemMoreRoot.js +1 -2
  170. package/dist/primitives/threadListItemMore/ThreadListItemMoreSeparator.js +1 -2
  171. package/dist/primitives/threadListItemMore/ThreadListItemMoreTrigger.js +1 -2
  172. package/dist/primitives/threadListItemMore/scope.js +1 -2
  173. package/dist/primitives/threadListItemMore.js +1 -2
  174. package/dist/sandbox-host/SandboxHost.js +1 -2
  175. package/dist/unstable/useComposerInput.js +1 -2
  176. package/dist/unstable/useComposerInputHistory.js +1 -2
  177. package/dist/unstable/useLiveCompletionAdapter.js +1 -2
  178. package/dist/unstable/useMentionAdapter.js +1 -2
  179. package/dist/unstable/useMessageStallDetection.js +1 -2
  180. package/dist/unstable/useModelContextSnapshot.js +1 -2
  181. package/dist/unstable/useSlashCommandAdapter.js +1 -2
  182. package/dist/unstable/webmcp/WebMcpRegistrationResource.js +1 -2
  183. package/dist/unstable/webmcp/convertTools.js +1 -2
  184. package/dist/unstable/webmcp/useWebMcpProvider.js +1 -2
  185. package/dist/unstable/webmcp/webmcp-host.js +1 -2
  186. package/dist/utils/Primitive.js +1 -2
  187. package/dist/utils/createActionButton.js +1 -2
  188. package/dist/utils/getSelectionMessageId.js +1 -2
  189. package/dist/utils/hooks/useManagedRef.js +1 -2
  190. package/dist/utils/hooks/useMediaQuery.js +1 -2
  191. package/dist/utils/hooks/useOnScrollToBottom.js +1 -2
  192. package/dist/utils/hooks/useSizeHandle.js +1 -2
  193. package/dist/utils/isCompositionKey.js +1 -2
  194. package/dist/utils/smooth/SmoothContext.js +1 -2
  195. package/dist/utils/smooth/useSmooth.d.ts.map +1 -1
  196. package/dist/utils/smooth/useSmooth.js +11 -4
  197. package/dist/utils/smooth/useSmooth.js.map +1 -1
  198. package/dist/utils/useIsomorphicLayoutEffect.js +0 -1
  199. package/package.json +6 -6
  200. package/src/mcp-apps/McpAppRenderer.composer.test.tsx +111 -0
  201. package/src/mcp-apps/McpAppRenderer.test.tsx +24 -23
  202. package/src/mcp-apps/McpAppRenderer.tsx +9 -1
  203. package/src/primitives/chainOfThought/ChainOfThoughtAccordionTrigger.test.tsx +91 -0
  204. package/src/primitives/chainOfThought/ChainOfThoughtAccordionTrigger.tsx +54 -0
  205. package/src/primitives/reasoning/useScrollLock.test.tsx +71 -2
  206. package/src/primitives/reasoning/useScrollLock.ts +78 -51
  207. package/src/primitives/threadListItem/ThreadListItemRoot.tsx +4 -1
  208. package/src/primitives/threadListItem/ThreadListKeyboardNav.test.tsx +25 -0
  209. package/src/utils/smooth/useSmooth.test.tsx +113 -4
  210. package/src/utils/smooth/useSmooth.ts +16 -2
  211. package/src/primitives/chainOfThought/ChainOfThoughtAccordionTrigger.ts +0 -49
@@ -1,4 +1,4 @@
1
- //#region \0rolldown/runtime.js
1
+ // \0rolldown/runtime.js
2
2
  var __defProp = Object.defineProperty;
3
3
  var __exportAll = (all, no_symbols) => {
4
4
  let target = {};
@@ -9,5 +9,4 @@ var __exportAll = (all, no_symbols) => {
9
9
  if (!no_symbols) __defProp(target, Symbol.toStringTag, { value: "Module" });
10
10
  return target;
11
11
  };
12
- //#endregion
13
12
  export { __exportAll };
@@ -1,5 +1,5 @@
1
1
  import { createVoiceSession } from "@assistant-ui/core";
2
- //#region src/adapters/OpenAIRealtimeVoiceAdapter.ts
2
+ // src/adapters/OpenAIRealtimeVoiceAdapter.ts
3
3
  const asRecord = (value) => value !== null && typeof value === "object" && !Array.isArray(value) ? value : void 0;
4
4
  /**
5
5
  * Connects browser microphone audio directly to OpenAI Realtime over WebRTC.
@@ -291,7 +291,6 @@ var OpenAIRealtimeVoiceAdapter = class {
291
291
  });
292
292
  }
293
293
  };
294
- //#endregion
295
294
  export { OpenAIRealtimeVoiceAdapter };
296
295
 
297
296
  //# sourceMappingURL=OpenAIRealtimeVoiceAdapter.js.map
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
  import { c } from "@assistant-ui/tap/react-shim/compiler-runtime";
3
3
  import { useAssistantTransportRuntime as useAssistantTransportRuntime$1, useAssistantTransportSendCommand as useAssistantTransportSendCommand$1, useAssistantTransportState as useAssistantTransportState$1 } from "@assistant-ui/core/react";
4
- //#region src/assistant-transport.ts
4
+ // src/assistant-transport.ts
5
5
  const useAssistantTransportRuntime = (options) => {
6
6
  return useAssistantTransportRuntime$1(options);
7
7
  };
@@ -21,7 +21,6 @@ const useAssistantTransportSendCommand = () => {
21
21
  function useAssistantTransportState(selector = (state) => state) {
22
22
  return useAssistantTransportState$1(selector);
23
23
  }
24
- //#endregion
25
24
  export { useAssistantTransportRuntime, useAssistantTransportSendCommand, useAssistantTransportState };
26
25
 
27
26
  //# sourceMappingURL=assistant-transport.js.map
@@ -6,7 +6,7 @@ import { Component, useEffect, useRef, useState, useSyncExternalStore } from "@a
6
6
  import { AuiConfig, AuiProvider, useAui } from "@assistant-ui/store";
7
7
  import { resource } from "@assistant-ui/tap";
8
8
  import { jsx } from "react/jsx-runtime";
9
- //#region src/cloud-renderer/CloudRendererHost.tsx
9
+ // src/cloud-renderer/CloudRendererHost.tsx
10
10
  const CHANNEL = "assistant-ui/cloud-renderer";
11
11
  const toOrigin = (value) => {
12
12
  try {
@@ -284,7 +284,6 @@ function _temp2(origin, message) {
284
284
  function _temp(value) {
285
285
  return toOrigin(value) ?? [];
286
286
  }
287
- //#endregion
288
287
  export { CloudRendererHost };
289
288
 
290
289
  //# sourceMappingURL=CloudRendererHost.js.map
@@ -1,8 +1,7 @@
1
- //#region src/context/ReadonlyStore.ts
1
+ // src/context/ReadonlyStore.ts
2
2
  const writableStore = (store) => {
3
3
  return store;
4
4
  };
5
- //#endregion
6
5
  export { writableStore };
7
6
 
8
7
  //# sourceMappingURL=ReadonlyStore.js.map
@@ -3,7 +3,7 @@ import { c } from "@assistant-ui/tap/react-shim/compiler-runtime";
3
3
  import { AuiConfig, AuiProvider, useAui } from "@assistant-ui/store";
4
4
  import { jsx } from "react/jsx-runtime";
5
5
  import { ThreadMessageClient } from "@assistant-ui/core/store";
6
- //#region src/context/providers/MessageProvider.tsx
6
+ // src/context/providers/MessageProvider.tsx
7
7
  const MessageProvider = (t0) => {
8
8
  const $ = c(4);
9
9
  const { children, ...props } = t0;
@@ -23,7 +23,6 @@ const MessageProvider = (t0) => {
23
23
  } else t1 = $[3];
24
24
  return t1;
25
25
  };
26
- //#endregion
27
26
  export { MessageProvider };
28
27
 
29
28
  //# sourceMappingURL=MessageProvider.js.map
@@ -5,7 +5,7 @@ import { writableStore } from "../ReadonlyStore.js";
5
5
  import { c } from "@assistant-ui/tap/react-shim/compiler-runtime";
6
6
  import { useEffect, useState } from "@assistant-ui/tap/react-shim";
7
7
  import { jsx } from "react/jsx-runtime";
8
- //#region src/context/providers/ThreadViewportProvider.tsx
8
+ // src/context/providers/ThreadViewportProvider.tsx
9
9
  const useThreadViewportStoreValue = (options) => {
10
10
  const $ = c(11);
11
11
  let t0;
@@ -87,7 +87,6 @@ const ThreadPrimitiveViewportProvider = (t0) => {
87
87
  } else t4 = $[6];
88
88
  return t4;
89
89
  };
90
- //#endregion
91
90
  export { ThreadPrimitiveViewportProvider };
92
91
 
93
92
  //# sourceMappingURL=ThreadViewportProvider.js.map
@@ -2,11 +2,10 @@
2
2
  import { createContextHook } from "./utils/createContextHook.js";
3
3
  import { createContextStoreHook } from "./utils/createContextStoreHook.js";
4
4
  import { createContext } from "@assistant-ui/tap/react-shim";
5
- //#region src/context/react/ThreadViewportContext.ts
5
+ // src/context/react/ThreadViewportContext.ts
6
6
  const ThreadViewportContext = createContext(null);
7
7
  const useThreadViewportContext = createContextHook(ThreadViewportContext, "ThreadPrimitive.Viewport");
8
8
  const { useThreadViewport, useThreadViewportStore } = createContextStoreHook(useThreadViewportContext, "useThreadViewport");
9
- //#endregion
10
9
  export { ThreadViewportContext, useThreadViewport, useThreadViewportStore };
11
10
 
12
11
  //# sourceMappingURL=ThreadViewportContext.js.map
@@ -1,6 +1,6 @@
1
1
  "use client";
2
2
  import { useContext } from "@assistant-ui/tap/react-shim";
3
- //#region src/context/react/utils/createContextHook.ts
3
+ // src/context/react/utils/createContextHook.ts
4
4
  /**
5
5
  * Creates a context hook with optional support.
6
6
  * @param context - The React context to consume.
@@ -15,7 +15,6 @@ function createContextHook(context, providerName) {
15
15
  }
16
16
  return useContextHook;
17
17
  }
18
- //#endregion
19
18
  export { createContextHook };
20
19
 
21
20
  //# sourceMappingURL=createContextHook.js.map
@@ -1,4 +1,4 @@
1
- //#region src/context/react/utils/createContextStoreHook.ts
1
+ // src/context/react/utils/createContextStoreHook.ts
2
2
  /**
3
3
  * Creates hooks for accessing a store within a context.
4
4
  * @param contextHook - The hook to access the context.
@@ -28,7 +28,6 @@ function createContextStoreHook(contextHook, contextKey) {
28
28
  [`${contextKey}Store`]: useStoreStoreHook
29
29
  };
30
30
  }
31
- //#endregion
32
31
  export { createContextStoreHook };
33
32
 
34
33
  //# sourceMappingURL=createContextStoreHook.js.map
@@ -2,7 +2,7 @@
2
2
  import { create } from "zustand";
3
3
  import { notifyEventListeners } from "@assistant-ui/core/internal";
4
4
  import { createThreadViewportAutoScroll } from "@assistant-ui/store/client";
5
- //#region src/context/stores/ThreadViewport.ts
5
+ // src/context/stores/ThreadViewport.ts
6
6
  const createSizeRegistry = (onChange) => {
7
7
  const entries = /* @__PURE__ */ new Map();
8
8
  const recalculate = () => {
@@ -125,7 +125,6 @@ const makeThreadViewportStore = (options = {}) => {
125
125
  viewportAutoScroll.set(store, autoScroll);
126
126
  return store;
127
127
  };
128
- //#endregion
129
128
  export { getThreadViewportAutoScroll, makeThreadViewportStore };
130
129
 
131
130
  //# sourceMappingURL=ThreadViewport.js.map
@@ -1,5 +1,5 @@
1
1
  import { notifyEventListeners } from "@assistant-ui/core/internal";
2
- //#region src/devtools/DevToolsHooks.ts
2
+ // src/devtools/DevToolsHooks.ts
3
3
  let cachedHook;
4
4
  const getHook = () => {
5
5
  if (cachedHook) return cachedHook;
@@ -79,7 +79,6 @@ var DevToolsProviderApi = class DevToolsProviderApi {
79
79
  };
80
80
  }
81
81
  };
82
- //#endregion
83
82
  export { DevToolsHooks, DevToolsProviderApi };
84
83
 
85
84
  //# sourceMappingURL=DevToolsHooks.js.map
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
  import { getMessageQuote } from "@assistant-ui/core/react";
3
3
  import { useAuiState } from "@assistant-ui/store";
4
- //#region src/hooks/useMessageQuote.ts
4
+ // src/hooks/useMessageQuote.ts
5
5
  /**
6
6
  * Hook that returns the quote info for the current message, if any.
7
7
  *
@@ -19,7 +19,6 @@ import { useAuiState } from "@assistant-ui/store";
19
19
  const useMessageQuote = () => {
20
20
  return useAuiState(getMessageQuote);
21
21
  };
22
- //#endregion
23
22
  export { useMessageQuote };
24
23
 
25
24
  //# sourceMappingURL=useMessageQuote.js.map
@@ -1,6 +1,6 @@
1
1
  "use client";
2
2
  import { useAuiState } from "@assistant-ui/store";
3
- //#region src/hooks/useMessageTiming.ts
3
+ // src/hooks/useMessageTiming.ts
4
4
  /**
5
5
  * Hook that returns timing information for the current assistant message.
6
6
  *
@@ -21,7 +21,6 @@ const useMessageTiming = () => {
21
21
  function _temp(s) {
22
22
  return s.message.role === "assistant" ? s.message.metadata?.timing : void 0;
23
23
  }
24
- //#endregion
25
24
  export { useMessageTiming };
26
25
 
27
26
  //# sourceMappingURL=useMessageTiming.js.map
@@ -3,7 +3,7 @@ import { useIsomorphicLayoutEffect } from "../utils/useIsomorphicLayoutEffect.js
3
3
  import { c } from "@assistant-ui/tap/react-shim/compiler-runtime";
4
4
  import { useState } from "@assistant-ui/tap/react-shim";
5
5
  import { useAuiState } from "@assistant-ui/store";
6
- //#region src/hooks/useToolCallElapsed.ts
6
+ // src/hooks/useToolCallElapsed.ts
7
7
  /**
8
8
  * Hook that returns the elapsed wall-clock time of the current tool call in
9
9
  * milliseconds, ticking once per second while the call runs.
@@ -61,7 +61,6 @@ function _temp2(s_0) {
61
61
  const part_0 = s_0.optional.part;
62
62
  return part_0?.type === "tool-call" && part_0.status.type === "running";
63
63
  }
64
- //#endregion
65
64
  export { useToolCallElapsed };
66
65
 
67
66
  //# sourceMappingURL=useToolCallElapsed.js.map
package/dist/internal.js CHANGED
@@ -4,7 +4,7 @@ import { useSmoothStatus, withSmoothContextProvider } from "./utils/smooth/Smoot
4
4
  import { useSmooth } from "./utils/smooth/useSmooth.js";
5
5
  import { splitLocalRuntimeOptions } from "@assistant-ui/core/react";
6
6
  import { AssistantRuntimeImpl, BaseAssistantRuntimeCore, CompositeContextProvider, DefaultThreadComposerRuntimeCore, MessageRepository, ThreadRuntimeImpl, getAutoStatus } from "@assistant-ui/core/internal";
7
- //#region src/internal.ts
7
+ // src/internal.ts
8
8
  var internal_exports = /* @__PURE__ */ __exportAll({
9
9
  AssistantRuntimeImpl: () => AssistantRuntimeImpl,
10
10
  BaseAssistantRuntimeCore: () => BaseAssistantRuntimeCore,
@@ -19,7 +19,6 @@ var internal_exports = /* @__PURE__ */ __exportAll({
19
19
  useSmoothStatus: () => useSmoothStatus,
20
20
  withSmoothContextProvider: () => withSmoothContextProvider
21
21
  });
22
- //#endregion
23
22
  export { AssistantRuntimeImpl, BaseAssistantRuntimeCore, CompositeContextProvider, DefaultThreadComposerRuntimeCore, MessageRepository, ThreadRuntimeImpl, getAutoStatus, internal_exports, splitLocalRuntimeOptions, useComposerInputPluginRegistryOptional, useSmooth, useSmoothStatus, withSmoothContextProvider };
24
23
 
25
24
  //# sourceMappingURL=internal.js.map
@@ -6,7 +6,7 @@ import { AssistantProviderBase } from "@assistant-ui/core/react";
6
6
  import { memo, useEffect } from "@assistant-ui/tap/react-shim";
7
7
  import { useAui } from "@assistant-ui/store";
8
8
  import { jsx, jsxs } from "react/jsx-runtime";
9
- //#region src/legacy-runtime/AssistantRuntimeProvider.tsx
9
+ // src/legacy-runtime/AssistantRuntimeProvider.tsx
10
10
  const DevToolsRegistration = () => {
11
11
  const $ = c(3);
12
12
  const aui = useAui();
@@ -60,7 +60,6 @@ const AssistantRuntimeProviderImpl = (t0) => {
60
60
  return t4;
61
61
  };
62
62
  const AssistantRuntimeProvider = memo(AssistantRuntimeProviderImpl);
63
- //#endregion
64
63
  export { AssistantRuntimeProvider, AssistantRuntimeProviderImpl };
65
64
 
66
65
  //# sourceMappingURL=AssistantRuntimeProvider.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"McpAppRenderer.d.ts","sourceRoot":"","sources":["../../src/mcp-apps/McpAppRenderer.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAwC,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAE7E,OAAO,KAAK,EAGV,mBAAmB,EACpB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EACV,4BAA4B,EAE7B,MAAM,0BAA0B,CAAC;AAIlC,OAAO,EAAyB,KAAK,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEhF,OAAO,KAAK,EACV,oBAAoB,EACpB,iBAAiB,EACjB,cAAc,EAEd,mBAAmB,EACnB,WAAW,EACZ,mBAAgB;AAIjB;;;GAGG;AACH,MAAM,MAAM,iBAAiB,GAAG;IAC9B,uEAAuE;IACvE,OAAO,CAAC,EAAE,mBAAmB,CAAC;IAC9B;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,yEAAyE;IACzE,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B,2GAA2G;IAC3G,WAAW,CAAC,EAAE,iBAAiB,CAAC;IAChC;;;;;;;OAOG;IACH,QAAQ,CAAC,EAAE,IAAI,CACb,oBAAoB,EACpB,UAAU,GAAG,cAAc,GAAG,eAAe,CAC9C,CAAC;IACF,wGAAwG;IACxG,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,sEAAsE;IACtE,eAAe,CAAC,EAAE,SAAS,CAAC;IAC5B,uEAAuE;IACvE,aAAa,CAAC,EAAE,SAAS,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,KAAK,SAAS,CAAC,CAAC;CAC3D,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG,iBAAiB,GAAG;IACtD;;;;OAIG;IACH,IAAI,EAAE,eAAe,CAAC,WAAW,CAAC,CAAC;IACnC;;;;;;;;;OASG;IACH,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,mBAAmB,KAAK,iBAAiB,CAAC;CAC5D,CAAC;AAySF,eAAO,MAAM,cAAc;qBA3BL,4BAA4B;oCA2BO,CAAC"}
1
+ {"version":3,"file":"McpAppRenderer.d.ts","sourceRoot":"","sources":["../../src/mcp-apps/McpAppRenderer.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAwC,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAE7E,OAAO,KAAK,EAGV,mBAAmB,EACpB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EACV,4BAA4B,EAE7B,MAAM,0BAA0B,CAAC;AAIlC,OAAO,EAAyB,KAAK,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEhF,OAAO,KAAK,EACV,oBAAoB,EACpB,iBAAiB,EACjB,cAAc,EAEd,mBAAmB,EACnB,WAAW,EACZ,mBAAgB;AAIjB;;;GAGG;AACH,MAAM,MAAM,iBAAiB,GAAG;IAC9B,uEAAuE;IACvE,OAAO,CAAC,EAAE,mBAAmB,CAAC;IAC9B;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,yEAAyE;IACzE,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B,2GAA2G;IAC3G,WAAW,CAAC,EAAE,iBAAiB,CAAC;IAChC;;;;;;;OAOG;IACH,QAAQ,CAAC,EAAE,IAAI,CACb,oBAAoB,EACpB,UAAU,GAAG,cAAc,GAAG,eAAe,CAC9C,CAAC;IACF,wGAAwG;IACxG,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,sEAAsE;IACtE,eAAe,CAAC,EAAE,SAAS,CAAC;IAC5B,uEAAuE;IACvE,aAAa,CAAC,EAAE,SAAS,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,KAAK,SAAS,CAAC,CAAC;CAC3D,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG,iBAAiB,GAAG;IACtD;;;;OAIG;IACH,IAAI,EAAE,eAAe,CAAC,WAAW,CAAC,CAAC;IACnC;;;;;;;;;OASG;IACH,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,mBAAmB,KAAK,iBAAiB,CAAC;CAC5D,CAAC;AAiTF,eAAO,MAAM,cAAc;qBA3BL,4BAA4B;oCA2BO,CAAC"}
@@ -8,7 +8,7 @@ import { resource, useResource } from "@assistant-ui/tap";
8
8
  import { create } from "zustand";
9
9
  import { isRecord } from "@assistant-ui/core/internal";
10
10
  import { Fragment, jsx } from "react/jsx-runtime";
11
- //#region src/mcp-apps/McpAppRenderer.tsx
11
+ // src/mcp-apps/McpAppRenderer.tsx
12
12
  const isSameOptions = (a, b) => {
13
13
  const aKeys = Object.keys(a).filter((key) => key !== "host");
14
14
  const bKeys = Object.keys(b).filter((key) => key !== "host");
@@ -123,7 +123,8 @@ function InlineRenderer({ part, useRendererStore }) {
123
123
  ok: false,
124
124
  reason: result.reason
125
125
  };
126
- aui.thread.append({ content: result.content });
126
+ const composer = aui.thread.composer();
127
+ composer.setText([composer.getState().text, result.content.map((part_0) => part_0.text).join("\n")].filter((part_1) => part_1.trim()).join(" "));
127
128
  return { ok: true };
128
129
  }),
129
130
  callTool: (params_0) => useRendererStore.getState().host.callTool({
@@ -205,7 +206,6 @@ const useMcpAppRenderer = (options) => {
205
206
  }, [useRendererStore]) };
206
207
  };
207
208
  const McpAppRenderer = resource(useMcpAppRenderer);
208
- //#endregion
209
209
  export { McpAppRenderer };
210
210
 
211
211
  //# sourceMappingURL=McpAppRenderer.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"McpAppRenderer.js","names":["useEffect","useMemo","useRef","useState","ReactNode","useIsomorphicLayoutEffect","McpAppMetadata","TextMessagePart","ToolCallMessagePart","ToolCallMessagePartComponent","ToolCallMessagePartProps","useAui","create","StoreApi","UseBoundStore","useResource","resource","ResourceElement","McpAppFrame","McpAppBridgeHandlers","McpAppHostContext","McpAppHostInfo","McpAppResource","McpAppSandboxConfig","McpAppsHost","getMcpAppFromToolPart","isRecord","McpAppPartOptions","sandbox","maxHeight","hostInfo","hostContext","handlers","Omit","fallback","loadingFallback","errorFallback","error","Error","McpAppRendererOptions","host","forPart","part","LoadedResourceState","resourceUri","serverId","RendererState","options","UseRendererStore","isSameOptions","a","b","aKeys","Object","keys","filter","key","bKeys","length","aValues","Record","bValues","every","hasOwn","is","getInput","status","type","argsText","args","undefined","defaultOpenLink","url","window","open","extractSendMessageTexts","params","obj","content","Array","isArray","index","Number","isInteger","String","map","block","text","extractSendMessageContent","reason","texts","resolvePartOptions","overrides","InlineRenderer","useRendererStore","aui","rendererOptions","state","opts","app","cachedAppRef","current","appForRender","loadedResource","setLoadedResource","callerHandlers","cancelled","targetHost","targetUri","targetServerId","loadResource","Promise","resolve","getState","res","uri","bridgeHandlers","openLink","sendMessage","result","isError","ok","thread","append","callTool","readResource","listResources","loadedResourceForApp","appResource","useMcpAppRenderer","render","setState","prev","Render","props","displayName","McpAppRenderer"],"sources":["../../src/mcp-apps/McpAppRenderer.tsx"],"sourcesContent":["\"use client\";\n\nimport { useEffect, useMemo, useRef, useState, type ReactNode } from \"react\";\nimport { useIsomorphicLayoutEffect } from \"../utils/useIsomorphicLayoutEffect\";\nimport type {\n McpAppMetadata,\n TextMessagePart,\n ToolCallMessagePart,\n} from \"@assistant-ui/core\";\nimport type {\n ToolCallMessagePartComponent,\n ToolCallMessagePartProps,\n} from \"@assistant-ui/core/react\";\nimport { useAui } from \"@assistant-ui/store\";\nimport { create, type StoreApi, type UseBoundStore } from \"zustand\";\n\nimport { useResource, resource, type ResourceElement } from \"@assistant-ui/tap\";\nimport { McpAppFrame } from \"./app-frame\";\nimport type {\n McpAppBridgeHandlers,\n McpAppHostContext,\n McpAppHostInfo,\n McpAppResource,\n McpAppSandboxConfig,\n McpAppsHost,\n} from \"./types\";\nimport { getMcpAppFromToolPart } from \"./utils\";\nimport { isRecord } from \"@assistant-ui/core/internal\";\n\n/**\n * Options that apply to a single MCP app. `McpAppRenderer` takes them as\n * thread-wide defaults, and its `forPart` resolver overrides them for one part.\n */\nexport type McpAppPartOptions = {\n /** Sandbox + container styling. Passes through to SafeContentFrame. */\n sandbox?: McpAppSandboxConfig;\n /**\n * Upper bound (in pixels) applied to the widget-driven auto-resize height.\n * Defaults to 800.\n */\n maxHeight?: number;\n /** Identifies the host to the widget in the `ui/initialize` response. */\n hostInfo?: McpAppHostInfo;\n /** Delivered to the widget on initialize and pushed via `notifications/host_context/changed` on change. */\n hostContext?: McpAppHostContext;\n /**\n * Optional widget interaction and lifecycle handlers. Data-plane handlers\n * (`callTool`, `readResource`, `listResources`) always use `host`.\n *\n * Which handlers a widget may call is captured when its frame mounts, so a\n * `forPart` resolver returns the same handler keys for a part on every\n * render even when the implementations change.\n */\n handlers?: Omit<\n McpAppBridgeHandlers,\n \"callTool\" | \"readResource\" | \"listResources\"\n >;\n /** Rendered when no MCP app is on the part, or while load is in flight / failed (unless overridden). */\n fallback?: ReactNode;\n /** Rendered while the resource is loading. Defaults to `fallback`. */\n loadingFallback?: ReactNode;\n /** Rendered when the resource load rejects. Defaults to `fallback`. */\n errorFallback?: ReactNode | ((error: Error) => ReactNode);\n};\n\nexport type McpAppRendererOptions = McpAppPartOptions & {\n /**\n * Provides the data-plane operations the widget can request\n * (`loadResource`, `callTool`, `readResource`, `listResources`). Use\n * `McpAppsRemoteHost({ url })` for the default HTTP-route convention.\n */\n host: ResourceElement<McpAppsHost>;\n /**\n * Resolves the options for one part. Each returned value replaces the\n * thread-wide option of the same name, so a host can give every MCP app its\n * own display mode and answer `requestDisplayMode` for the part that asked.\n *\n * `handlers` is the exception and merges per key. Its keys are capabilities\n * negotiated with the widget rather than data, so replacing the whole bag to\n * add one handler would withdraw the others from that part's widget with\n * nothing to observe it by.\n */\n forPart?: (part: ToolCallMessagePart) => McpAppPartOptions;\n};\n\ntype LoadedResourceState = {\n host: McpAppsHost;\n resourceUri: string;\n serverId?: string;\n resource?: McpAppResource;\n error?: Error;\n};\n\ntype RendererState = {\n host: McpAppsHost;\n options: McpAppRendererOptions;\n};\n\ntype UseRendererStore = UseBoundStore<StoreApi<RendererState>>;\n\n// Callers pass options as an object literal, so the resource hands this a fresh\n// identity on every run; comparing the values keeps an unchanged run from\n// re-rendering every mounted part. `host` is excluded because it is an element\n// rebuilt on every run, and the store carries the resolved host separately.\nconst isSameOptions = (\n a: McpAppRendererOptions,\n b: McpAppRendererOptions,\n): boolean => {\n const aKeys = Object.keys(a).filter((key) => key !== \"host\");\n const bKeys = Object.keys(b).filter((key) => key !== \"host\");\n if (aKeys.length !== bKeys.length) return false;\n const aValues = a as Record<string, unknown>;\n const bValues = b as Record<string, unknown>;\n return aKeys.every(\n (key) =>\n Object.hasOwn(bValues, key) && Object.is(aValues[key], bValues[key]),\n );\n};\n\nfunction getInput(part: {\n status: { type: string };\n argsText: string;\n args: unknown;\n}): unknown {\n if (\n part.status.type === \"running\" &&\n (part.argsText === \"\" || part.argsText === \"{}\")\n ) {\n return undefined;\n }\n return part.args;\n}\n\nconst defaultOpenLink = ({ url }: { url: string }) => {\n window.open(url, \"_blank\", \"noopener,noreferrer\");\n};\n\nfunction extractSendMessageTexts(params: unknown): string[] | undefined {\n if (typeof params === \"string\") return [params];\n if (!params || typeof params !== \"object\") return undefined;\n const obj = params as Record<string, unknown>;\n if (typeof obj[\"prompt\"] === \"string\") return [obj[\"prompt\"]];\n if (typeof obj[\"text\"] === \"string\") return [obj[\"text\"]];\n if (typeof obj[\"message\"] === \"string\") return [obj[\"message\"]];\n const content = obj[\"content\"];\n if (Array.isArray(content)) {\n return Object.keys(content)\n .filter((key) => {\n const index = Number(key);\n return (\n Number.isInteger(index) &&\n index >= 0 &&\n index < content.length &&\n String(index) === key\n );\n })\n .map((key) => content[Number(key)])\n .filter(\n (block): block is { type: \"text\"; text: string } =>\n isRecord(block) &&\n block[\"type\"] === \"text\" &&\n typeof block[\"text\"] === \"string\",\n )\n .map((block) => block.text);\n }\n return undefined;\n}\n\nfunction extractSendMessageContent(\n params: unknown,\n): { content: TextMessagePart[] } | { reason: string } {\n const texts = extractSendMessageTexts(params);\n if (!texts) return { reason: \"unrecognised params shape\" };\n const content = texts\n .filter((text) => text !== \"\")\n .map((text): TextMessagePart => ({ type: \"text\", text }));\n if (content.length === 0) {\n return { reason: \"no text content to append\" };\n }\n return { content };\n}\n\nfunction resolvePartOptions(\n options: McpAppRendererOptions,\n part: ToolCallMessagePartProps,\n): McpAppRendererOptions {\n const overrides = options.forPart?.(part);\n if (!overrides) return options;\n const handlers =\n options.handlers && overrides.handlers\n ? { ...options.handlers, ...overrides.handlers }\n : (overrides.handlers ?? options.handlers);\n return {\n ...options,\n ...overrides,\n ...(handlers === undefined ? {} : { handlers }),\n };\n}\n\nfunction InlineRenderer({\n part,\n useRendererStore,\n}: {\n part: ToolCallMessagePartProps;\n useRendererStore: UseRendererStore;\n}) {\n const aui = useAui();\n const rendererOptions = useRendererStore((state) => state.options);\n const opts = resolvePartOptions(rendererOptions, part);\n const app = getMcpAppFromToolPart(part);\n const cachedAppRef = useRef<McpAppMetadata | undefined>(undefined);\n useIsomorphicLayoutEffect(() => {\n if (app != null) cachedAppRef.current = app;\n }, [app]);\n const appForRender = app ?? cachedAppRef.current;\n\n const [loadedResource, setLoadedResource] = useState<LoadedResourceState>();\n\n const host = useRendererStore((state) => state.host);\n const resourceUri = appForRender?.resourceUri;\n const serverId = appForRender?.serverId;\n const callerHandlers = opts.handlers;\n useEffect(() => {\n if (resourceUri == null) return;\n let cancelled = false;\n const targetHost = host;\n const targetUri = resourceUri;\n const targetServerId = serverId;\n\n // Host changes are published later in this passive flush. Defer until that\n // publication lands, then verify this effect still owns the current host.\n const loadResource = async () => {\n await Promise.resolve();\n if (cancelled || useRendererStore.getState().host !== targetHost) return;\n try {\n const res = await targetHost.loadResource({\n uri: targetUri,\n ...(targetServerId ? { serverId: targetServerId } : {}),\n });\n if (!cancelled)\n setLoadedResource({\n host: targetHost,\n resourceUri: targetUri,\n ...(targetServerId !== undefined\n ? { serverId: targetServerId }\n : {}),\n resource: res,\n });\n } catch (error: unknown) {\n if (!cancelled) {\n setLoadedResource({\n host: targetHost,\n resourceUri: targetUri,\n ...(targetServerId !== undefined\n ? { serverId: targetServerId }\n : {}),\n error: error instanceof Error ? error : new Error(String(error)),\n });\n }\n }\n };\n void loadResource();\n\n return () => {\n cancelled = true;\n };\n }, [host, resourceUri, serverId, useRendererStore]);\n\n const bridgeHandlers = useMemo<McpAppBridgeHandlers>(\n () => ({\n ...callerHandlers,\n openLink: callerHandlers?.openLink ?? defaultOpenLink,\n sendMessage:\n callerHandlers?.sendMessage ??\n ((params) => {\n const result = extractSendMessageContent(params);\n if (\"reason\" in result) {\n return { isError: true, ok: false, reason: result.reason };\n }\n aui.thread.append({ content: result.content });\n return { ok: true };\n }),\n callTool: (params) =>\n useRendererStore.getState().host.callTool({\n ...params,\n ...(serverId ? { serverId } : {}),\n }),\n readResource: (params) =>\n useRendererStore.getState().host.readResource({\n ...params,\n ...(serverId ? { serverId } : {}),\n }),\n listResources: (params) => {\n if (!serverId) {\n return useRendererStore.getState().host.listResources(params);\n }\n return useRendererStore.getState().host.listResources({\n ...(isRecord(params) ? params : {}),\n serverId,\n });\n },\n }),\n [aui, callerHandlers, serverId, useRendererStore],\n );\n\n const loadedResourceForApp =\n loadedResource?.host === host &&\n loadedResource?.resourceUri === appForRender?.resourceUri &&\n loadedResource?.serverId === appForRender?.serverId\n ? loadedResource\n : undefined;\n const appResource = loadedResourceForApp?.resource;\n const error = loadedResourceForApp?.error;\n\n const fallback = opts.fallback ?? null;\n if (appForRender == null) {\n return <>{fallback}</>;\n }\n if (error != null) {\n const errorFallback = opts.errorFallback;\n if (errorFallback === undefined) return <>{fallback}</>;\n if (typeof errorFallback === \"function\") return <>{errorFallback(error)}</>;\n return <>{errorFallback}</>;\n }\n if (appResource == null) {\n return <>{opts.loadingFallback ?? fallback}</>;\n }\n\n return (\n <McpAppFrame\n app={appForRender}\n resource={appResource}\n input={getInput(part)}\n output={part.result}\n sandbox={opts.sandbox}\n handlers={bridgeHandlers}\n hostInfo={opts.hostInfo}\n hostContext={opts.hostContext}\n maxHeight={opts.maxHeight}\n />\n );\n}\n\n/**\n * Creates a tool-call renderer for MCP Apps embedded in assistant messages.\n *\n * Compose this into the `Tools` resource through its `mcpApp` option. When a\n * tool-call part carries `mcp.app` metadata for a `ui://` resource, the\n * renderer loads that resource from the configured host and displays it in a\n * sandboxed frame.\n */\nconst useMcpAppRenderer = (\n options: McpAppRendererOptions,\n): { readonly render: ToolCallMessagePartComponent } => {\n const host = useResource(options.host);\n\n // The rendered component identity has to stay stable, or every part remounts\n // its frame; options reach the parts through the store instead of props.\n const [useRendererStore] = useState(() =>\n create<RendererState>(() => ({ host, options })),\n );\n useEffect(() => {\n useRendererStore.setState((prev) =>\n prev.host === host && isSameOptions(prev.options, options)\n ? prev\n : { host, options },\n );\n }, [host, options, useRendererStore]);\n\n const render = useMemo((): ToolCallMessagePartComponent => {\n const Render: ToolCallMessagePartComponent = (props) => (\n <InlineRenderer part={props} useRendererStore={useRendererStore} />\n );\n Render.displayName = \"McpAppRenderer\";\n return Render;\n }, [useRendererStore]);\n\n return { render };\n};\n\nexport const McpAppRenderer = resource(useMcpAppRenderer);\n"],"mappings":";;;;;;;;;;;AAwGA,MAAMiD,iBACJC,GACAC,MACY;CACZ,MAAMC,QAAQC,OAAOC,KAAKJ,CAAC,CAAC,CAACK,QAAQC,QAAQA,QAAQ,MAAM;CAC3D,MAAMC,QAAQJ,OAAOC,KAAKH,CAAC,CAAC,CAACI,QAAQC,QAAQA,QAAQ,MAAM;CAC3D,IAAIJ,MAAMM,WAAWD,MAAMC,QAAQ,OAAO;CAC1C,MAAMC,UAAUT;CAChB,MAAMW,UAAUV;CAChB,OAAOC,MAAMU,OACVN,QACCH,OAAOU,OAAOF,SAASL,GAAG,KAAKH,OAAOW,GAAGL,QAAQH,MAAMK,QAAQL,IAAI,CACvE;AACF;AAEA,SAASS,SAASvB,MAIN;CACV,IACEA,KAAKwB,OAAOC,SAAS,cACpBzB,KAAK0B,aAAa,MAAM1B,KAAK0B,aAAa,OAE3C;CAEF,OAAO1B,KAAK2B;AACd;AAEA,MAAME,mBAAmB,EAAEC,UAA2B;CACpDC,OAAOC,KAAKF,KAAK,UAAU,qBAAqB;AAClD;AAEA,SAASG,wBAAwBC,QAAuC;CACtE,IAAI,OAAOA,WAAW,UAAU,OAAO,CAACA,MAAM;CAC9C,IAAI,CAACA,UAAU,OAAOA,WAAW,UAAU,OAAON,KAAAA;CAClD,MAAMO,MAAMD;CACZ,IAAI,OAAOC,IAAI,cAAc,UAAU,OAAO,CAACA,IAAI,SAAS;CAC5D,IAAI,OAAOA,IAAI,YAAY,UAAU,OAAO,CAACA,IAAI,OAAO;CACxD,IAAI,OAAOA,IAAI,eAAe,UAAU,OAAO,CAACA,IAAI,UAAU;CAC9D,MAAMC,UAAUD,IAAI;CACpB,IAAIE,MAAMC,QAAQF,OAAO,GACvB,OAAOzB,OAAOC,KAAKwB,OAAO,CAAC,CACxBvB,QAAQC,QAAQ;EACf,MAAMyB,QAAQC,OAAO1B,GAAG;EACxB,OACE0B,OAAOC,UAAUF,KAAK,KACtBA,SAAS,KACTA,QAAQH,QAAQpB,UAChB0B,OAAOH,KAAK,MAAMzB;CAEtB,CAAC,CAAC,CACD6B,KAAK7B,QAAQsB,QAAQI,OAAO1B,GAAG,EAAE,CAAC,CAClCD,QACE+B,UACC5D,SAAS4D,KAAK,KACdA,MAAM,YAAY,UAClB,OAAOA,MAAM,YAAY,QAC7B,CAAC,CACAD,KAAKC,UAAUA,MAAMC,IAAI;AAGhC;AAEA,SAASC,0BACPZ,QACqD;CACrD,MAAMc,QAAQf,wBAAwBC,MAAM;CAC5C,IAAI,CAACc,OAAO,OAAO,EAAED,QAAQ,4BAA4B;CACzD,MAAMX,UAAUY,MACbnC,QAAQgC,SAASA,SAAS,EAAE,CAAC,CAC7BF,KAAKE,UAA2B;EAAEpB,MAAM;EAAQoB;CAAK,EAAE;CAC1D,IAAIT,QAAQpB,WAAW,GACrB,OAAO,EAAE+B,QAAQ,4BAA4B;CAE/C,OAAO,EAAEX,QAAQ;AACnB;AAEA,SAASa,mBACP5C,SACAL,MACuB;CACvB,MAAMkD,YAAY7C,QAAQN,UAAUC,IAAI;CACxC,IAAI,CAACkD,WAAW,OAAO7C;CACvB,MAAMf,WACJe,QAAQf,YAAY4D,UAAU5D,WAC1B;EAAE,GAAGe,QAAQf;EAAU,GAAG4D,UAAU5D;CAAS,IAC5C4D,UAAU5D,YAAYe,QAAQf;CACrC,OAAO;EACL,GAAGe;EACH,GAAG6C;EACH,GAAI5D,aAAasC,KAAAA,IAAY,CAAC,IAAI,EAAEtC,SAAS;CAC/C;AACF;AAEA,SAAS6D,eAAe,EACtBnD,MACAoD,oBAIC;CACD,MAAMC,MAAMpF,OAAO;CAEnB,MAAMuF,OAAOP,mBADWG,kBAAkBG,UAAUA,MAAMlD,OAC1BiD,GAAiBtD,IAAI;CACrD,MAAMyD,MAAM1E,sBAAsBiB,IAAI;CACtC,MAAM0D,eAAelG,OAAmCoE,KAAAA,CAAS;CACjEjE,gCAAgC;EAC9B,IAAI8F,OAAO,MAAMC,aAAaC,UAAUF;CAC1C,GAAG,CAACA,GAAG,CAAC;CACR,MAAMG,eAAeH,OAAOC,aAAaC;CAEzC,MAAM,CAACE,gBAAgBC,qBAAqBrG,SAA8B;CAE1E,MAAMqC,OAAOsD,kBAAkBG,YAAUA,QAAMzD,IAAI;CACnD,MAAMI,cAAc0D,cAAc1D;CAClC,MAAMC,WAAWyD,cAAczD;CAC/B,MAAM4D,iBAAiBP,KAAKlE;CAC5BhC,gBAAgB;EACd,IAAI4C,eAAe,MAAM;EACzB,IAAI8D,YAAY;EAChB,MAAMC,aAAanE;EACnB,MAAMoE,YAAYhE;EAClB,MAAMiE,iBAAiBhE;EAIvB,MAAMiE,eAAe,YAAY;GAC/B,MAAMC,QAAQC,QAAQ;GACtB,IAAIN,aAAaZ,iBAAiBmB,SAAS,CAAC,CAACzE,SAASmE,YAAY;GAClE,IAAI;IACF,MAAMO,MAAM,MAAMP,WAAWG,aAAa;KACxCK,KAAKP;KACL,GAAIC,iBAAiB,EAAEhE,UAAUgE,eAAe,IAAI,CAAC;IACvD,CAAC;IACD,IAAI,CAACH,WACHF,kBAAkB;KAChBhE,MAAMmE;KACN/D,aAAagE;KACb,GAAIC,mBAAmBvC,KAAAA,IACnB,EAAEzB,UAAUgE,eAAe,IAC3B,CAAC;KACL7F,UAAUkG;IACZ,CAAC;GACL,SAAS7E,OAAgB;IACvB,IAAI,CAACqE,WACHF,kBAAkB;KAChBhE,MAAMmE;KACN/D,aAAagE;KACb,GAAIC,mBAAmBvC,KAAAA,IACnB,EAAEzB,UAAUgE,eAAe,IAC3B,CAAC;KACLxE,OAAOA,iBAAiBC,QAAQD,QAAQ,IAAIC,MAAM8C,OAAO/C,KAAK,CAAC;IACjE,CAAC;GAEL;EACF;EACA,aAAkB;EAElB,aAAa;GACXqE,YAAY;EACd;CACF,GAAG;EAAClE;EAAMI;EAAaC;EAAUiD;CAAgB,CAAC;CAElD,MAAMsB,iBAAiBnH,eACd;EACL,GAAGwG;EACHY,UAAUZ,gBAAgBY,YAAY9C;EACtC+C,aACEb,gBAAgBa,iBACd1C,WAAW;GACX,MAAM2C,SAAS/B,0BAA0BZ,MAAM;GAC/C,IAAI,YAAY2C,QACd,OAAO;IAAEC,SAAS;IAAMC,IAAI;IAAOhC,QAAQ8B,OAAO9B;GAAO;GAE3DM,IAAI2B,OAAOC,OAAO,EAAE7C,SAASyC,OAAOzC,QAAQ,CAAC;GAC7C,OAAO,EAAE2C,IAAI,KAAK;EACpB;EACFG,WAAWhD,aACTkB,iBAAiBmB,SAAS,CAAC,CAACzE,KAAKoF,SAAS;GACxC,GAAGhD;GACH,GAAI/B,WAAW,EAAEA,SAAS,IAAI,CAAC;EACjC,CAAC;EACHgF,eAAejD,aACbkB,iBAAiBmB,SAAS,CAAC,CAACzE,KAAKqF,aAAa;GAC5C,GAAGjD;GACH,GAAI/B,WAAW,EAAEA,SAAS,IAAI,CAAC;EACjC,CAAC;EACHiF,gBAAgBlD,aAAW;GACzB,IAAI,CAAC/B,UACH,OAAOiD,iBAAiBmB,SAAS,CAAC,CAACzE,KAAKsF,cAAclD,QAAM;GAE9D,OAAOkB,iBAAiBmB,SAAS,CAAC,CAACzE,KAAKsF,cAAc;IACpD,GAAIpG,SAASkD,QAAM,IAAIA,WAAS,CAAC;IACjC/B;GACF,CAAC;EACH;CACF,IACA;EAACkD;EAAKU;EAAgB5D;EAAUiD;CAAgB,CAClD;CAEA,MAAMiC,uBACJxB,gBAAgB/D,SAASA,QACzB+D,gBAAgB3D,gBAAgB0D,cAAc1D,eAC9C2D,gBAAgB1D,aAAayD,cAAczD,WACvC0D,iBACAjC,KAAAA;CACN,MAAM0D,cAAcD,sBAAsB/G;CAC1C,MAAMqB,UAAQ0F,sBAAsB1F;CAEpC,MAAMH,WAAWgE,KAAKhE,YAAY;CAClC,IAAIoE,gBAAgB,MAClB,OAAO,oBAAA,UAAA,EAAA,UAAGpE,SAAS,CAAA;CAErB,IAAIG,WAAS,MAAM;EACjB,MAAMD,gBAAgB8D,KAAK9D;EAC3B,IAAIA,kBAAkBkC,KAAAA,GAAW,OAAO,oBAAA,UAAA,EAAA,UAAGpC,SAAS,CAAA;EACpD,IAAI,OAAOE,kBAAkB,YAAY,OAAO,oBAAA,UAAA,EAAA,UAAGA,cAAcC,OAAK,EAAE,CAAA;EACxE,OAAO,oBAAA,UAAA,EAAA,UAAGD,cAAc,CAAA;CAC1B;CACA,IAAI4F,eAAe,MACjB,OAAO,oBAAA,UAAA,EAAA,UAAG9B,KAAK/D,mBAAmBD,SAAS,CAAA;CAG7C,OACE,oBAAC,aAAD;EACE,KAAKoE;EACL,UAAU0B;EACV,OAAO/D,SAASvB,IAAI;EACpB,QAAQA,KAAK6E;EACb,SAASrB,KAAKtE;EACd,UAAUwF;EACV,UAAUlB,KAAKpE;EACf,aAAaoE,KAAKnE;EAClB,WAAWmE,KAAKrE;CAAU,CAAA;AAGhC;;;;;;;;;AAUA,MAAMoG,qBACJlF,YACsD;CACtD,MAAMP,OAAOzB,YAAYgC,QAAQP,IAAI;CAIrC,MAAM,CAACsD,oBAAoB3F,eACzBS,cAA6B;EAAE4B;EAAMO;CAAQ,EAAE,CACjD;CACA/C,gBAAgB;EACd8F,iBAAiBqC,UAAUC,SACzBA,KAAK5F,SAASA,QAAQS,cAAcmF,KAAKrF,SAASA,OAAO,IACrDqF,OACA;GAAE5F;GAAMO;EAAQ,CACtB;CACF,GAAG;EAACP;EAAMO;EAAS+C;CAAgB,CAAC;CAUpC,OAAO,EAAEoC,QARMjI,cAA4C;EACzD,MAAMoI,UAAwCC,UAC5C,oBAAC,gBAAD;GAAgB,MAAMA;GAAyBxC;EAAiB,CAAA;EAElEuC,OAAOE,cAAc;EACrB,OAAOF;CACT,GAAG,CAACvC,gBAAgB,CAEXoC,EAAO;AAClB;AAEA,MAAaM,iBAAiBxH,SAASiH,iBAAiB"}
1
+ {"version":3,"file":"McpAppRenderer.js","names":["useEffect","useMemo","useRef","useState","ReactNode","useIsomorphicLayoutEffect","McpAppMetadata","TextMessagePart","ToolCallMessagePart","ToolCallMessagePartComponent","ToolCallMessagePartProps","useAui","create","StoreApi","UseBoundStore","useResource","resource","ResourceElement","McpAppFrame","McpAppBridgeHandlers","McpAppHostContext","McpAppHostInfo","McpAppResource","McpAppSandboxConfig","McpAppsHost","getMcpAppFromToolPart","isRecord","McpAppPartOptions","sandbox","maxHeight","hostInfo","hostContext","handlers","Omit","fallback","loadingFallback","errorFallback","error","Error","McpAppRendererOptions","host","forPart","part","LoadedResourceState","resourceUri","serverId","RendererState","options","UseRendererStore","isSameOptions","a","b","aKeys","Object","keys","filter","key","bKeys","length","aValues","Record","bValues","every","hasOwn","is","getInput","status","type","argsText","args","undefined","defaultOpenLink","url","window","open","extractSendMessageTexts","params","obj","content","Array","isArray","index","Number","isInteger","String","map","block","text","extractSendMessageContent","reason","texts","resolvePartOptions","overrides","InlineRenderer","useRendererStore","aui","rendererOptions","state","opts","app","cachedAppRef","current","appForRender","loadedResource","setLoadedResource","callerHandlers","cancelled","targetHost","targetUri","targetServerId","loadResource","Promise","resolve","getState","res","uri","bridgeHandlers","openLink","sendMessage","result","isError","ok","composer","thread","setText","join","trim","callTool","readResource","listResources","loadedResourceForApp","appResource","useMcpAppRenderer","render","setState","prev","Render","props","displayName","McpAppRenderer"],"sources":["../../src/mcp-apps/McpAppRenderer.tsx"],"sourcesContent":["\"use client\";\n\nimport { useEffect, useMemo, useRef, useState, type ReactNode } from \"react\";\nimport { useIsomorphicLayoutEffect } from \"../utils/useIsomorphicLayoutEffect\";\nimport type {\n McpAppMetadata,\n TextMessagePart,\n ToolCallMessagePart,\n} from \"@assistant-ui/core\";\nimport type {\n ToolCallMessagePartComponent,\n ToolCallMessagePartProps,\n} from \"@assistant-ui/core/react\";\nimport { useAui } from \"@assistant-ui/store\";\nimport { create, type StoreApi, type UseBoundStore } from \"zustand\";\n\nimport { useResource, resource, type ResourceElement } from \"@assistant-ui/tap\";\nimport { McpAppFrame } from \"./app-frame\";\nimport type {\n McpAppBridgeHandlers,\n McpAppHostContext,\n McpAppHostInfo,\n McpAppResource,\n McpAppSandboxConfig,\n McpAppsHost,\n} from \"./types\";\nimport { getMcpAppFromToolPart } from \"./utils\";\nimport { isRecord } from \"@assistant-ui/core/internal\";\n\n/**\n * Options that apply to a single MCP app. `McpAppRenderer` takes them as\n * thread-wide defaults, and its `forPart` resolver overrides them for one part.\n */\nexport type McpAppPartOptions = {\n /** Sandbox + container styling. Passes through to SafeContentFrame. */\n sandbox?: McpAppSandboxConfig;\n /**\n * Upper bound (in pixels) applied to the widget-driven auto-resize height.\n * Defaults to 800.\n */\n maxHeight?: number;\n /** Identifies the host to the widget in the `ui/initialize` response. */\n hostInfo?: McpAppHostInfo;\n /** Delivered to the widget on initialize and pushed via `notifications/host_context/changed` on change. */\n hostContext?: McpAppHostContext;\n /**\n * Optional widget interaction and lifecycle handlers. Data-plane handlers\n * (`callTool`, `readResource`, `listResources`) always use `host`.\n *\n * Which handlers a widget may call is captured when its frame mounts, so a\n * `forPart` resolver returns the same handler keys for a part on every\n * render even when the implementations change.\n */\n handlers?: Omit<\n McpAppBridgeHandlers,\n \"callTool\" | \"readResource\" | \"listResources\"\n >;\n /** Rendered when no MCP app is on the part, or while load is in flight / failed (unless overridden). */\n fallback?: ReactNode;\n /** Rendered while the resource is loading. Defaults to `fallback`. */\n loadingFallback?: ReactNode;\n /** Rendered when the resource load rejects. Defaults to `fallback`. */\n errorFallback?: ReactNode | ((error: Error) => ReactNode);\n};\n\nexport type McpAppRendererOptions = McpAppPartOptions & {\n /**\n * Provides the data-plane operations the widget can request\n * (`loadResource`, `callTool`, `readResource`, `listResources`). Use\n * `McpAppsRemoteHost({ url })` for the default HTTP-route convention.\n */\n host: ResourceElement<McpAppsHost>;\n /**\n * Resolves the options for one part. Each returned value replaces the\n * thread-wide option of the same name, so a host can give every MCP app its\n * own display mode and answer `requestDisplayMode` for the part that asked.\n *\n * `handlers` is the exception and merges per key. Its keys are capabilities\n * negotiated with the widget rather than data, so replacing the whole bag to\n * add one handler would withdraw the others from that part's widget with\n * nothing to observe it by.\n */\n forPart?: (part: ToolCallMessagePart) => McpAppPartOptions;\n};\n\ntype LoadedResourceState = {\n host: McpAppsHost;\n resourceUri: string;\n serverId?: string;\n resource?: McpAppResource;\n error?: Error;\n};\n\ntype RendererState = {\n host: McpAppsHost;\n options: McpAppRendererOptions;\n};\n\ntype UseRendererStore = UseBoundStore<StoreApi<RendererState>>;\n\n// Callers pass options as an object literal, so the resource hands this a fresh\n// identity on every run; comparing the values keeps an unchanged run from\n// re-rendering every mounted part. `host` is excluded because it is an element\n// rebuilt on every run, and the store carries the resolved host separately.\nconst isSameOptions = (\n a: McpAppRendererOptions,\n b: McpAppRendererOptions,\n): boolean => {\n const aKeys = Object.keys(a).filter((key) => key !== \"host\");\n const bKeys = Object.keys(b).filter((key) => key !== \"host\");\n if (aKeys.length !== bKeys.length) return false;\n const aValues = a as Record<string, unknown>;\n const bValues = b as Record<string, unknown>;\n return aKeys.every(\n (key) =>\n Object.hasOwn(bValues, key) && Object.is(aValues[key], bValues[key]),\n );\n};\n\nfunction getInput(part: {\n status: { type: string };\n argsText: string;\n args: unknown;\n}): unknown {\n if (\n part.status.type === \"running\" &&\n (part.argsText === \"\" || part.argsText === \"{}\")\n ) {\n return undefined;\n }\n return part.args;\n}\n\nconst defaultOpenLink = ({ url }: { url: string }) => {\n window.open(url, \"_blank\", \"noopener,noreferrer\");\n};\n\nfunction extractSendMessageTexts(params: unknown): string[] | undefined {\n if (typeof params === \"string\") return [params];\n if (!params || typeof params !== \"object\") return undefined;\n const obj = params as Record<string, unknown>;\n if (typeof obj[\"prompt\"] === \"string\") return [obj[\"prompt\"]];\n if (typeof obj[\"text\"] === \"string\") return [obj[\"text\"]];\n if (typeof obj[\"message\"] === \"string\") return [obj[\"message\"]];\n const content = obj[\"content\"];\n if (Array.isArray(content)) {\n return Object.keys(content)\n .filter((key) => {\n const index = Number(key);\n return (\n Number.isInteger(index) &&\n index >= 0 &&\n index < content.length &&\n String(index) === key\n );\n })\n .map((key) => content[Number(key)])\n .filter(\n (block): block is { type: \"text\"; text: string } =>\n isRecord(block) &&\n block[\"type\"] === \"text\" &&\n typeof block[\"text\"] === \"string\",\n )\n .map((block) => block.text);\n }\n return undefined;\n}\n\nfunction extractSendMessageContent(\n params: unknown,\n): { content: TextMessagePart[] } | { reason: string } {\n const texts = extractSendMessageTexts(params);\n if (!texts) return { reason: \"unrecognised params shape\" };\n const content = texts\n .filter((text) => text !== \"\")\n .map((text): TextMessagePart => ({ type: \"text\", text }));\n if (content.length === 0) {\n return { reason: \"no text content to append\" };\n }\n return { content };\n}\n\nfunction resolvePartOptions(\n options: McpAppRendererOptions,\n part: ToolCallMessagePartProps,\n): McpAppRendererOptions {\n const overrides = options.forPart?.(part);\n if (!overrides) return options;\n const handlers =\n options.handlers && overrides.handlers\n ? { ...options.handlers, ...overrides.handlers }\n : (overrides.handlers ?? options.handlers);\n return {\n ...options,\n ...overrides,\n ...(handlers === undefined ? {} : { handlers }),\n };\n}\n\nfunction InlineRenderer({\n part,\n useRendererStore,\n}: {\n part: ToolCallMessagePartProps;\n useRendererStore: UseRendererStore;\n}) {\n const aui = useAui();\n const rendererOptions = useRendererStore((state) => state.options);\n const opts = resolvePartOptions(rendererOptions, part);\n const app = getMcpAppFromToolPart(part);\n const cachedAppRef = useRef<McpAppMetadata | undefined>(undefined);\n useIsomorphicLayoutEffect(() => {\n if (app != null) cachedAppRef.current = app;\n }, [app]);\n const appForRender = app ?? cachedAppRef.current;\n\n const [loadedResource, setLoadedResource] = useState<LoadedResourceState>();\n\n const host = useRendererStore((state) => state.host);\n const resourceUri = appForRender?.resourceUri;\n const serverId = appForRender?.serverId;\n const callerHandlers = opts.handlers;\n useEffect(() => {\n if (resourceUri == null) return;\n let cancelled = false;\n const targetHost = host;\n const targetUri = resourceUri;\n const targetServerId = serverId;\n\n // Host changes are published later in this passive flush. Defer until that\n // publication lands, then verify this effect still owns the current host.\n const loadResource = async () => {\n await Promise.resolve();\n if (cancelled || useRendererStore.getState().host !== targetHost) return;\n try {\n const res = await targetHost.loadResource({\n uri: targetUri,\n ...(targetServerId ? { serverId: targetServerId } : {}),\n });\n if (!cancelled)\n setLoadedResource({\n host: targetHost,\n resourceUri: targetUri,\n ...(targetServerId !== undefined\n ? { serverId: targetServerId }\n : {}),\n resource: res,\n });\n } catch (error: unknown) {\n if (!cancelled) {\n setLoadedResource({\n host: targetHost,\n resourceUri: targetUri,\n ...(targetServerId !== undefined\n ? { serverId: targetServerId }\n : {}),\n error: error instanceof Error ? error : new Error(String(error)),\n });\n }\n }\n };\n void loadResource();\n\n return () => {\n cancelled = true;\n };\n }, [host, resourceUri, serverId, useRendererStore]);\n\n const bridgeHandlers = useMemo<McpAppBridgeHandlers>(\n () => ({\n ...callerHandlers,\n openLink: callerHandlers?.openLink ?? defaultOpenLink,\n sendMessage:\n callerHandlers?.sendMessage ??\n ((params) => {\n const result = extractSendMessageContent(params);\n if (\"reason\" in result) {\n return { isError: true, ok: false, reason: result.reason };\n }\n const composer = aui.thread.composer();\n composer.setText(\n [\n composer.getState().text,\n result.content.map((part) => part.text).join(\"\\n\"),\n ]\n .filter((part) => part.trim())\n .join(\" \"),\n );\n return { ok: true };\n }),\n callTool: (params) =>\n useRendererStore.getState().host.callTool({\n ...params,\n ...(serverId ? { serverId } : {}),\n }),\n readResource: (params) =>\n useRendererStore.getState().host.readResource({\n ...params,\n ...(serverId ? { serverId } : {}),\n }),\n listResources: (params) => {\n if (!serverId) {\n return useRendererStore.getState().host.listResources(params);\n }\n return useRendererStore.getState().host.listResources({\n ...(isRecord(params) ? params : {}),\n serverId,\n });\n },\n }),\n [aui, callerHandlers, serverId, useRendererStore],\n );\n\n const loadedResourceForApp =\n loadedResource?.host === host &&\n loadedResource?.resourceUri === appForRender?.resourceUri &&\n loadedResource?.serverId === appForRender?.serverId\n ? loadedResource\n : undefined;\n const appResource = loadedResourceForApp?.resource;\n const error = loadedResourceForApp?.error;\n\n const fallback = opts.fallback ?? null;\n if (appForRender == null) {\n return <>{fallback}</>;\n }\n if (error != null) {\n const errorFallback = opts.errorFallback;\n if (errorFallback === undefined) return <>{fallback}</>;\n if (typeof errorFallback === \"function\") return <>{errorFallback(error)}</>;\n return <>{errorFallback}</>;\n }\n if (appResource == null) {\n return <>{opts.loadingFallback ?? fallback}</>;\n }\n\n return (\n <McpAppFrame\n app={appForRender}\n resource={appResource}\n input={getInput(part)}\n output={part.result}\n sandbox={opts.sandbox}\n handlers={bridgeHandlers}\n hostInfo={opts.hostInfo}\n hostContext={opts.hostContext}\n maxHeight={opts.maxHeight}\n />\n );\n}\n\n/**\n * Creates a tool-call renderer for MCP Apps embedded in assistant messages.\n *\n * Compose this into the `Tools` resource through its `mcpApp` option. When a\n * tool-call part carries `mcp.app` metadata for a `ui://` resource, the\n * renderer loads that resource from the configured host and displays it in a\n * sandboxed frame.\n */\nconst useMcpAppRenderer = (\n options: McpAppRendererOptions,\n): { readonly render: ToolCallMessagePartComponent } => {\n const host = useResource(options.host);\n\n // The rendered component identity has to stay stable, or every part remounts\n // its frame; options reach the parts through the store instead of props.\n const [useRendererStore] = useState(() =>\n create<RendererState>(() => ({ host, options })),\n );\n useEffect(() => {\n useRendererStore.setState((prev) =>\n prev.host === host && isSameOptions(prev.options, options)\n ? prev\n : { host, options },\n );\n }, [host, options, useRendererStore]);\n\n const render = useMemo((): ToolCallMessagePartComponent => {\n const Render: ToolCallMessagePartComponent = (props) => (\n <InlineRenderer part={props} useRendererStore={useRendererStore} />\n );\n Render.displayName = \"McpAppRenderer\";\n return Render;\n }, [useRendererStore]);\n\n return { render };\n};\n\nexport const McpAppRenderer = resource(useMcpAppRenderer);\n"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { useEffect, useMemo, useRef } from "@assistant-ui/tap/react-shim";
2
2
  import { resource } from "@assistant-ui/tap";
3
- //#region src/mcp-apps/McpAppsRemoteHost.ts
3
+ // src/mcp-apps/McpAppsRemoteHost.ts
4
4
  const truncateBody = (body) => body.length > 500 ? `${body.slice(0, 500)}...` : body;
5
5
  const extractErrorBody = (body) => {
6
6
  const trimmed = body.trim();
@@ -97,7 +97,6 @@ const useMcpAppsRemoteHost = (options) => {
97
97
  return hostState.host;
98
98
  };
99
99
  const McpAppsRemoteHost = resource(useMcpAppsRemoteHost);
100
- //#endregion
101
100
  export { McpAppsRemoteHost };
102
101
 
103
102
  //# sourceMappingURL=McpAppsRemoteHost.js.map
@@ -7,7 +7,7 @@ import { c } from "@assistant-ui/tap/react-shim/compiler-runtime";
7
7
  import { useEffect, useRef } from "@assistant-ui/tap/react-shim";
8
8
  import { isRecord } from "@assistant-ui/core/internal";
9
9
  import { jsx } from "react/jsx-runtime";
10
- //#region src/mcp-apps/app-frame.tsx
10
+ // src/mcp-apps/app-frame.tsx
11
11
  const DEFAULT_PRODUCT = "assistant-ui-mcp-app";
12
12
  const INIT_TIMEOUT_MS = 5e3;
13
13
  const DEFAULT_MAX_HEIGHT = 800;
@@ -305,7 +305,6 @@ function _temp2(b_1, v_0) {
305
305
  function _temp(b_0, v) {
306
306
  return b_0.notifyToolInput(v);
307
307
  }
308
- //#endregion
309
308
  export { McpAppFrame };
310
309
 
311
310
  //# sourceMappingURL=app-frame.js.map
@@ -1,6 +1,6 @@
1
1
  import "./types.js";
2
2
  import { invokeUserCallback, isRecord } from "@assistant-ui/core/internal";
3
- //#region src/mcp-apps/bridge.ts
3
+ // src/mcp-apps/bridge.ts
4
4
  const VALID_DISPLAY_MODES = [
5
5
  "inline",
6
6
  "fullscreen",
@@ -314,7 +314,6 @@ function createMcpAppBridge(opts) {
314
314
  }
315
315
  };
316
316
  }
317
- //#endregion
318
317
  export { createMcpAppBridge };
319
318
 
320
319
  //# sourceMappingURL=bridge.js.map
@@ -1,4 +1,4 @@
1
- //#region src/mcp-apps/csp.ts
1
+ // src/mcp-apps/csp.ts
2
2
  const isAllowedOrigin = (value, allowWebSocket) => {
3
3
  if (!(allowWebSocket ? /^(?:https?|wss?):\/\//i : /^https?:\/\//i).test(value) || /[\s;'"`,]/.test(value)) return false;
4
4
  try {
@@ -87,7 +87,6 @@ const applyMcpAppCsp = (html, csp) => {
87
87
  const insertionPoint = findDoctypeEnd(normalizedHtml);
88
88
  return `${normalizedHtml.slice(0, insertionPoint)}${meta}${normalizedHtml.slice(insertionPoint)}`;
89
89
  };
90
- //#endregion
91
90
  export { applyMcpAppCsp, buildMcpAppCsp };
92
91
 
93
92
  //# sourceMappingURL=csp.js.map
@@ -1,7 +1,6 @@
1
- //#region src/mcp-apps/types.ts
1
+ // src/mcp-apps/types.ts
2
2
  const MCP_APP_MIME_TYPE = "text/html;profile=mcp-app";
3
3
  const MCP_APP_PROTOCOL_VERSION = "0.1";
4
- //#endregion
5
4
  export { MCP_APP_MIME_TYPE, MCP_APP_PROTOCOL_VERSION };
6
5
 
7
6
  //# sourceMappingURL=types.js.map
@@ -1,5 +1,5 @@
1
1
  import { isMcpAppUri } from "@assistant-ui/core";
2
- //#region src/mcp-apps/utils.ts
2
+ // src/mcp-apps/utils.ts
3
3
  /**
4
4
  * Returns MCP app metadata for a tool-call part that points at a `ui://`
5
5
  * resource.
@@ -13,7 +13,6 @@ function getMcpAppFromToolPart(part) {
13
13
  if (!isMcpAppUri(app.resourceUri)) return void 0;
14
14
  return app;
15
15
  }
16
- //#endregion
17
16
  export { getMcpAppFromToolPart };
18
17
 
19
18
  //# sourceMappingURL=utils.js.map
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
  import { AssistantFrameHost } from "@assistant-ui/core";
3
3
  import { useEffect } from "@assistant-ui/tap/react-shim";
4
- //#region src/model-context/frame/useAssistantFrameHost.ts
4
+ // src/model-context/frame/useAssistantFrameHost.ts
5
5
  /**
6
6
  * React hook that manages the lifecycle of an AssistantFrameHost and its binding to the current AssistantRuntime.
7
7
  *
@@ -91,7 +91,6 @@ const useAssistantFrameHost = ({ iframeRef, targetOrigin, register }) => {
91
91
  register
92
92
  ]);
93
93
  };
94
- //#endregion
95
94
  export { useAssistantFrameHost };
96
95
 
97
96
  //# sourceMappingURL=useAssistantFrameHost.js.map
@@ -5,7 +5,7 @@ import { createContext, forwardRef, useContext, useEffect, useId, useRef } from
5
5
  import { useAui } from "@assistant-ui/store";
6
6
  import { jsx } from "react/jsx-runtime";
7
7
  import { useComposedRefs } from "radix-ui/internal";
8
- //#region src/model-context/makeAssistantVisible.tsx
8
+ // src/model-context/makeAssistantVisible.tsx
9
9
  const DEFAULT_ACTION_SETTLE_DELAY_MS = 2e3;
10
10
  const MAX_ACTION_SETTLE_DELAY_MS = 2147483647;
11
11
  const waitForSettle = async (settleDelayMs) => {
@@ -144,7 +144,6 @@ const makeAssistantVisible = (Component, config) => {
144
144
  ReadableComponent.displayName = Component.displayName;
145
145
  return ReadableComponent;
146
146
  };
147
- //#endregion
148
147
  export { makeAssistantVisible as default, makeAssistantVisible };
149
148
 
150
149
  //# sourceMappingURL=makeAssistantVisible.js.map
@@ -6,7 +6,7 @@ import { forwardRef } from "@assistant-ui/tap/react-shim";
6
6
  import { useAuiState } from "@assistant-ui/store";
7
7
  import { jsx } from "react/jsx-runtime";
8
8
  import { composeEventHandlers } from "radix-ui/internal";
9
- //#region src/primitives/actionBar/ActionBarCopy.tsx
9
+ // src/primitives/actionBar/ActionBarCopy.tsx
10
10
  /**
11
11
  * Hook that provides copy functionality for action bar buttons.
12
12
  *
@@ -144,7 +144,6 @@ function _temp(text) {
144
144
  function _temp2(s) {
145
145
  return s.message.isCopied;
146
146
  }
147
- //#endregion
148
147
  export { ActionBarPrimitiveCopy };
149
148
 
150
149
  //# sourceMappingURL=ActionBarCopy.js.map
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
  import { createActionButton } from "../../utils/createActionButton.js";
3
3
  import { useActionBarEdit } from "@assistant-ui/core/react";
4
- //#region src/primitives/actionBar/ActionBarEdit.ts
4
+ // src/primitives/actionBar/ActionBarEdit.ts
5
5
  /**
6
6
  * Hook that provides edit functionality for action bar buttons.
7
7
  *
@@ -42,7 +42,6 @@ const useActionBarEdit$1 = () => {
42
42
  * ```
43
43
  */
44
44
  const ActionBarPrimitiveEdit = createActionButton("ActionBarPrimitive.Edit", useActionBarEdit$1);
45
- //#endregion
46
45
  export { ActionBarPrimitiveEdit };
47
46
 
48
47
  //# sourceMappingURL=ActionBarEdit.js.map
@@ -5,7 +5,7 @@ import { forwardRef } from "@assistant-ui/tap/react-shim";
5
5
  import { useAui, useAuiState } from "@assistant-ui/store";
6
6
  import { jsx } from "react/jsx-runtime";
7
7
  import { composeEventHandlers } from "radix-ui/internal";
8
- //#region src/primitives/actionBar/ActionBarExportMarkdown.tsx
8
+ // src/primitives/actionBar/ActionBarExportMarkdown.tsx
9
9
  const useActionBarExportMarkdown = (t0) => {
10
10
  const $ = c(6);
11
11
  let t1;
@@ -122,7 +122,6 @@ function _temp2(s) {
122
122
  function _temp3(error) {
123
123
  console.error("[assistant-ui] markdown export failed:", error);
124
124
  }
125
- //#endregion
126
125
  export { ActionBarPrimitiveExportMarkdown };
127
126
 
128
127
  //# sourceMappingURL=ActionBarExportMarkdown.js.map
@@ -6,7 +6,7 @@ import { forwardRef } from "@assistant-ui/tap/react-shim";
6
6
  import { useAuiState } from "@assistant-ui/store";
7
7
  import { jsx } from "react/jsx-runtime";
8
8
  import { composeEventHandlers } from "radix-ui/internal";
9
- //#region src/primitives/actionBar/ActionBarFeedbackNegative.tsx
9
+ // src/primitives/actionBar/ActionBarFeedbackNegative.tsx
10
10
  const useActionBarFeedbackNegative$1 = () => {
11
11
  const { submit } = useActionBarFeedbackNegative();
12
12
  return submit;
@@ -76,7 +76,6 @@ ActionBarPrimitiveFeedbackNegative.displayName = "ActionBarPrimitive.FeedbackNeg
76
76
  function _temp(s) {
77
77
  return s.message.metadata.submittedFeedback?.type === "negative";
78
78
  }
79
- //#endregion
80
79
  export { ActionBarPrimitiveFeedbackNegative };
81
80
 
82
81
  //# sourceMappingURL=ActionBarFeedbackNegative.js.map