@assistant-ui/react 0.14.16 → 0.14.19

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 (380) hide show
  1. package/dist/client/ExternalThread.d.ts +5 -3
  2. package/dist/client/ExternalThread.d.ts.map +1 -1
  3. package/dist/client/ExternalThread.js +745 -255
  4. package/dist/client/ExternalThread.js.map +1 -1
  5. package/dist/client/InMemoryThreadList.d.ts +1 -1
  6. package/dist/client/InMemoryThreadList.d.ts.map +1 -1
  7. package/dist/client/InMemoryThreadList.js +299 -113
  8. package/dist/client/InMemoryThreadList.js.map +1 -1
  9. package/dist/client/SingleThreadList.d.ts +1 -6
  10. package/dist/client/SingleThreadList.d.ts.map +1 -1
  11. package/dist/client/SingleThreadList.js +143 -55
  12. package/dist/client/SingleThreadList.js.map +1 -1
  13. package/dist/context/ReadonlyStore.js.map +1 -1
  14. package/dist/context/providers/MessageProvider.js +38 -5
  15. package/dist/context/providers/MessageProvider.js.map +1 -1
  16. package/dist/context/providers/ThreadViewportProvider.js +76 -20
  17. package/dist/context/providers/ThreadViewportProvider.js.map +1 -1
  18. package/dist/context/react/ThreadViewportContext.js.map +1 -1
  19. package/dist/context/react/utils/createContextHook.js.map +1 -1
  20. package/dist/context/react/utils/createContextStoreHook.js +17 -2
  21. package/dist/context/react/utils/createContextStoreHook.js.map +1 -1
  22. package/dist/context/react/utils/createStateHookForRuntime.js.map +1 -1
  23. package/dist/context/react/utils/ensureBinding.js.map +1 -1
  24. package/dist/context/react/utils/useRuntimeState.js +18 -2
  25. package/dist/context/react/utils/useRuntimeState.js.map +1 -1
  26. package/dist/context/stores/ThreadViewport.js.map +1 -1
  27. package/dist/devtools/DevToolsHooks.js.map +1 -1
  28. package/dist/hooks/useMessageQuote.js.map +1 -1
  29. package/dist/hooks/useMessageTiming.js +4 -1
  30. package/dist/hooks/useMessageTiming.js.map +1 -1
  31. package/dist/hooks/useToolCallElapsed.d.ts +23 -0
  32. package/dist/hooks/useToolCallElapsed.d.ts.map +1 -0
  33. package/dist/hooks/useToolCallElapsed.js +72 -0
  34. package/dist/hooks/useToolCallElapsed.js.map +1 -0
  35. package/dist/index.d.ts +6 -2
  36. package/dist/index.js +5 -1
  37. package/dist/internal.js.map +1 -1
  38. package/dist/legacy-runtime/AssistantRuntimeProvider.js +46 -10
  39. package/dist/legacy-runtime/AssistantRuntimeProvider.js.map +1 -1
  40. package/dist/legacy-runtime/cloud/auiV0.js.map +1 -1
  41. package/dist/legacy-runtime/cloud/useCloudThreadListRuntime.js +27 -6
  42. package/dist/legacy-runtime/cloud/useCloudThreadListRuntime.js.map +1 -1
  43. package/dist/legacy-runtime/hooks/AssistantContext.js +13 -2
  44. package/dist/legacy-runtime/hooks/AssistantContext.js.map +1 -1
  45. package/dist/legacy-runtime/hooks/AttachmentContext.js +9 -1
  46. package/dist/legacy-runtime/hooks/AttachmentContext.js.map +1 -1
  47. package/dist/legacy-runtime/hooks/ComposerContext.js +9 -1
  48. package/dist/legacy-runtime/hooks/ComposerContext.js.map +1 -1
  49. package/dist/legacy-runtime/hooks/MessageContext.js +12 -2
  50. package/dist/legacy-runtime/hooks/MessageContext.js.map +1 -1
  51. package/dist/legacy-runtime/hooks/MessagePartContext.js +9 -1
  52. package/dist/legacy-runtime/hooks/MessagePartContext.js.map +1 -1
  53. package/dist/legacy-runtime/hooks/ThreadContext.js +33 -5
  54. package/dist/legacy-runtime/hooks/ThreadContext.js.map +1 -1
  55. package/dist/legacy-runtime/hooks/ThreadListItemContext.js +9 -1
  56. package/dist/legacy-runtime/hooks/ThreadListItemContext.js.map +1 -1
  57. package/dist/legacy-runtime/runtime-cores/assistant-transport/commandQueue.js +3 -3
  58. package/dist/legacy-runtime/runtime-cores/assistant-transport/commandQueue.js.map +1 -1
  59. package/dist/legacy-runtime/runtime-cores/assistant-transport/replayBoundaryStream.js +71 -31
  60. package/dist/legacy-runtime/runtime-cores/assistant-transport/replayBoundaryStream.js.map +1 -1
  61. package/dist/legacy-runtime/runtime-cores/assistant-transport/runManager.js.map +1 -1
  62. package/dist/legacy-runtime/runtime-cores/assistant-transport/useAssistantTransportRuntime.js +24 -16
  63. package/dist/legacy-runtime/runtime-cores/assistant-transport/useAssistantTransportRuntime.js.map +1 -1
  64. package/dist/legacy-runtime/runtime-cores/assistant-transport/useConvertedState.js +17 -12
  65. package/dist/legacy-runtime/runtime-cores/assistant-transport/useConvertedState.js.map +1 -1
  66. package/dist/legacy-runtime/runtime-cores/assistant-transport/useLatestRef.js +17 -3
  67. package/dist/legacy-runtime/runtime-cores/assistant-transport/useLatestRef.js.map +1 -1
  68. package/dist/mcp-apps/McpAppRenderer.d.ts +2 -10
  69. package/dist/mcp-apps/McpAppRenderer.d.ts.map +1 -1
  70. package/dist/mcp-apps/McpAppRenderer.js +9 -8
  71. package/dist/mcp-apps/McpAppRenderer.js.map +1 -1
  72. package/dist/mcp-apps/McpAppsRemoteHost.d.ts +1 -8
  73. package/dist/mcp-apps/McpAppsRemoteHost.d.ts.map +1 -1
  74. package/dist/mcp-apps/McpAppsRemoteHost.js +6 -5
  75. package/dist/mcp-apps/McpAppsRemoteHost.js.map +1 -1
  76. package/dist/mcp-apps/app-frame.js +33 -14
  77. package/dist/mcp-apps/app-frame.js.map +1 -1
  78. package/dist/mcp-apps/bridge.js.map +1 -1
  79. package/dist/mcp-apps/types.js.map +1 -1
  80. package/dist/mcp-apps/utils.js.map +1 -1
  81. package/dist/model-context/frame/useAssistantFrameHost.js +32 -14
  82. package/dist/model-context/frame/useAssistantFrameHost.js.map +1 -1
  83. package/dist/model-context/makeAssistantVisible.js +64 -26
  84. package/dist/model-context/makeAssistantVisible.js.map +1 -1
  85. package/dist/primitives/actionBar/ActionBarCopy.js +94 -20
  86. package/dist/primitives/actionBar/ActionBarCopy.js.map +1 -1
  87. package/dist/primitives/actionBar/ActionBarEdit.js.map +1 -1
  88. package/dist/primitives/actionBar/ActionBarExportMarkdown.js +105 -37
  89. package/dist/primitives/actionBar/ActionBarExportMarkdown.js.map +1 -1
  90. package/dist/primitives/actionBar/ActionBarFeedbackNegative.js +60 -11
  91. package/dist/primitives/actionBar/ActionBarFeedbackNegative.js.map +1 -1
  92. package/dist/primitives/actionBar/ActionBarFeedbackPositive.js +60 -11
  93. package/dist/primitives/actionBar/ActionBarFeedbackPositive.js.map +1 -1
  94. package/dist/primitives/actionBar/ActionBarInteractionContext.js +3 -1
  95. package/dist/primitives/actionBar/ActionBarInteractionContext.js.map +1 -1
  96. package/dist/primitives/actionBar/ActionBarReload.js.map +1 -1
  97. package/dist/primitives/actionBar/ActionBarRoot.js +84 -25
  98. package/dist/primitives/actionBar/ActionBarRoot.js.map +1 -1
  99. package/dist/primitives/actionBar/ActionBarSpeak.js.map +1 -1
  100. package/dist/primitives/actionBar/ActionBarStopSpeaking.js +45 -14
  101. package/dist/primitives/actionBar/ActionBarStopSpeaking.js.map +1 -1
  102. package/dist/primitives/actionBar/useActionBarFloatStatus.js +22 -10
  103. package/dist/primitives/actionBar/useActionBarFloatStatus.js.map +1 -1
  104. package/dist/primitives/actionBar.js.map +1 -1
  105. package/dist/primitives/actionBarMore/ActionBarMoreContent.js +44 -7
  106. package/dist/primitives/actionBarMore/ActionBarMoreContent.js.map +1 -1
  107. package/dist/primitives/actionBarMore/ActionBarMoreItem.js +28 -6
  108. package/dist/primitives/actionBarMore/ActionBarMoreItem.js.map +1 -1
  109. package/dist/primitives/actionBarMore/ActionBarMoreRoot.js +103 -36
  110. package/dist/primitives/actionBarMore/ActionBarMoreRoot.js.map +1 -1
  111. package/dist/primitives/actionBarMore/ActionBarMoreSeparator.js +28 -6
  112. package/dist/primitives/actionBarMore/ActionBarMoreSeparator.js.map +1 -1
  113. package/dist/primitives/actionBarMore/ActionBarMoreTrigger.js +28 -6
  114. package/dist/primitives/actionBarMore/ActionBarMoreTrigger.js.map +1 -1
  115. package/dist/primitives/actionBarMore/scope.js.map +1 -1
  116. package/dist/primitives/actionBarMore.js.map +1 -1
  117. package/dist/primitives/assistantModal/AssistantModalAnchor.js +27 -6
  118. package/dist/primitives/assistantModal/AssistantModalAnchor.js.map +1 -1
  119. package/dist/primitives/assistantModal/AssistantModalContent.js +71 -10
  120. package/dist/primitives/assistantModal/AssistantModalContent.js.map +1 -1
  121. package/dist/primitives/assistantModal/AssistantModalRoot.js +93 -26
  122. package/dist/primitives/assistantModal/AssistantModalRoot.js.map +1 -1
  123. package/dist/primitives/assistantModal/AssistantModalTrigger.js +27 -6
  124. package/dist/primitives/assistantModal/AssistantModalTrigger.js.map +1 -1
  125. package/dist/primitives/assistantModal/scope.js.map +1 -1
  126. package/dist/primitives/assistantModal.js.map +1 -1
  127. package/dist/primitives/attachment/AttachmentName.js +13 -1
  128. package/dist/primitives/attachment/AttachmentName.js.map +1 -1
  129. package/dist/primitives/attachment/AttachmentRemove.js +11 -4
  130. package/dist/primitives/attachment/AttachmentRemove.js.map +1 -1
  131. package/dist/primitives/attachment/AttachmentRoot.js +13 -4
  132. package/dist/primitives/attachment/AttachmentRoot.js.map +1 -1
  133. package/dist/primitives/attachment/AttachmentThumb.js +20 -9
  134. package/dist/primitives/attachment/AttachmentThumb.js.map +1 -1
  135. package/dist/primitives/attachment.js.map +1 -1
  136. package/dist/primitives/branchPicker/BranchPickerCount.js +14 -2
  137. package/dist/primitives/branchPicker/BranchPickerCount.js.map +1 -1
  138. package/dist/primitives/branchPicker/BranchPickerNext.js.map +1 -1
  139. package/dist/primitives/branchPicker/BranchPickerNumber.js +14 -2
  140. package/dist/primitives/branchPicker/BranchPickerNumber.js.map +1 -1
  141. package/dist/primitives/branchPicker/BranchPickerPrevious.js.map +1 -1
  142. package/dist/primitives/branchPicker/BranchPickerRoot.js +34 -6
  143. package/dist/primitives/branchPicker/BranchPickerRoot.js.map +1 -1
  144. package/dist/primitives/branchPicker.js.map +1 -1
  145. package/dist/primitives/chainOfThought/ChainOfThoughtAccordionTrigger.js +16 -5
  146. package/dist/primitives/chainOfThought/ChainOfThoughtAccordionTrigger.js.map +1 -1
  147. package/dist/primitives/chainOfThought/ChainOfThoughtRoot.js +13 -4
  148. package/dist/primitives/chainOfThought/ChainOfThoughtRoot.js.map +1 -1
  149. package/dist/primitives/chainOfThought.js.map +1 -1
  150. package/dist/primitives/composer/ComposerAddAttachment.js +37 -24
  151. package/dist/primitives/composer/ComposerAddAttachment.js.map +1 -1
  152. package/dist/primitives/composer/ComposerAttachmentDropzone.js +124 -49
  153. package/dist/primitives/composer/ComposerAttachmentDropzone.js.map +1 -1
  154. package/dist/primitives/composer/ComposerCancel.js.map +1 -1
  155. package/dist/primitives/composer/ComposerDictate.js.map +1 -1
  156. package/dist/primitives/composer/ComposerDictationTranscript.js +32 -7
  157. package/dist/primitives/composer/ComposerDictationTranscript.js.map +1 -1
  158. package/dist/primitives/composer/ComposerInput.js +29 -29
  159. package/dist/primitives/composer/ComposerInput.js.map +1 -1
  160. package/dist/primitives/composer/ComposerInputPluginContext.js +71 -25
  161. package/dist/primitives/composer/ComposerInputPluginContext.js.map +1 -1
  162. package/dist/primitives/composer/ComposerQuote.js +92 -23
  163. package/dist/primitives/composer/ComposerQuote.js.map +1 -1
  164. package/dist/primitives/composer/ComposerRoot.js +45 -11
  165. package/dist/primitives/composer/ComposerRoot.js.map +1 -1
  166. package/dist/primitives/composer/ComposerSend.js +9 -2
  167. package/dist/primitives/composer/ComposerSend.js.map +1 -1
  168. package/dist/primitives/composer/ComposerStopDictation.js +15 -5
  169. package/dist/primitives/composer/ComposerStopDictation.js.map +1 -1
  170. package/dist/primitives/composer/trigger/TriggerPopover.d.ts.map +1 -1
  171. package/dist/primitives/composer/trigger/TriggerPopover.js +215 -75
  172. package/dist/primitives/composer/trigger/TriggerPopover.js.map +1 -1
  173. package/dist/primitives/composer/trigger/TriggerPopoverAction.js.map +1 -1
  174. package/dist/primitives/composer/trigger/TriggerPopoverBack.js +35 -7
  175. package/dist/primitives/composer/trigger/TriggerPopoverBack.js.map +1 -1
  176. package/dist/primitives/composer/trigger/TriggerPopoverCategories.js +134 -28
  177. package/dist/primitives/composer/trigger/TriggerPopoverCategories.js.map +1 -1
  178. package/dist/primitives/composer/trigger/TriggerPopoverDirective.js.map +1 -1
  179. package/dist/primitives/composer/trigger/TriggerPopoverItems.js +132 -28
  180. package/dist/primitives/composer/trigger/TriggerPopoverItems.js.map +1 -1
  181. package/dist/primitives/composer/trigger/TriggerPopoverResource.d.ts +2 -10
  182. package/dist/primitives/composer/trigger/TriggerPopoverResource.d.ts.map +1 -1
  183. package/dist/primitives/composer/trigger/TriggerPopoverResource.js +126 -53
  184. package/dist/primitives/composer/trigger/TriggerPopoverResource.js.map +1 -1
  185. package/dist/primitives/composer/trigger/TriggerPopoverRootContext.js +181 -78
  186. package/dist/primitives/composer/trigger/TriggerPopoverRootContext.js.map +1 -1
  187. package/dist/primitives/composer/trigger/detectTrigger.js.map +1 -1
  188. package/dist/primitives/composer/trigger/index.js.map +1 -1
  189. package/dist/primitives/composer/trigger/triggerDetectionResource.d.ts +2 -6
  190. package/dist/primitives/composer/trigger/triggerDetectionResource.d.ts.map +1 -1
  191. package/dist/primitives/composer/trigger/triggerDetectionResource.js +30 -15
  192. package/dist/primitives/composer/trigger/triggerDetectionResource.js.map +1 -1
  193. package/dist/primitives/composer/trigger/triggerKeyboardResource.d.ts +2 -17
  194. package/dist/primitives/composer/trigger/triggerKeyboardResource.d.ts.map +1 -1
  195. package/dist/primitives/composer/trigger/triggerKeyboardResource.js +117 -59
  196. package/dist/primitives/composer/trigger/triggerKeyboardResource.js.map +1 -1
  197. package/dist/primitives/composer/trigger/triggerNavigationResource.d.ts +2 -10
  198. package/dist/primitives/composer/trigger/triggerNavigationResource.d.ts.map +1 -1
  199. package/dist/primitives/composer/trigger/triggerNavigationResource.js +204 -71
  200. package/dist/primitives/composer/trigger/triggerNavigationResource.js.map +1 -1
  201. package/dist/primitives/composer/trigger/triggerSelectionResource.d.ts +2 -10
  202. package/dist/primitives/composer/trigger/triggerSelectionResource.d.ts.map +1 -1
  203. package/dist/primitives/composer/trigger/triggerSelectionResource.js +51 -14
  204. package/dist/primitives/composer/trigger/triggerSelectionResource.js.map +1 -1
  205. package/dist/primitives/composer.js.map +1 -1
  206. package/dist/primitives/dropdownMenuRenderPrimitives.js.map +1 -1
  207. package/dist/primitives/error/ErrorMessage.js +28 -6
  208. package/dist/primitives/error/ErrorMessage.js.map +1 -1
  209. package/dist/primitives/error/ErrorRoot.js +14 -5
  210. package/dist/primitives/error/ErrorRoot.js.map +1 -1
  211. package/dist/primitives/error.js.map +1 -1
  212. package/dist/primitives/message/MessageError.js +2 -1
  213. package/dist/primitives/message/MessageError.js.map +1 -1
  214. package/dist/primitives/message/MessageIf.js +50 -20
  215. package/dist/primitives/message/MessageIf.js.map +1 -1
  216. package/dist/primitives/message/MessageParts.js +41 -7
  217. package/dist/primitives/message/MessageParts.js.map +1 -1
  218. package/dist/primitives/message/MessagePartsGrouped.js +399 -94
  219. package/dist/primitives/message/MessagePartsGrouped.js.map +1 -1
  220. package/dist/primitives/message/MessageRoot.js +197 -65
  221. package/dist/primitives/message/MessageRoot.js.map +1 -1
  222. package/dist/primitives/message.js.map +1 -1
  223. package/dist/primitives/messagePart/MessagePartImage.js +15 -5
  224. package/dist/primitives/messagePart/MessagePartImage.js.map +1 -1
  225. package/dist/primitives/messagePart/MessagePartText.d.ts +5 -2
  226. package/dist/primitives/messagePart/MessagePartText.d.ts.map +1 -1
  227. package/dist/primitives/messagePart/MessagePartText.js +35 -7
  228. package/dist/primitives/messagePart/MessagePartText.js.map +1 -1
  229. package/dist/primitives/messagePart/useMessagePartData.js +5 -4
  230. package/dist/primitives/messagePart/useMessagePartData.js.map +1 -1
  231. package/dist/primitives/messagePart/useMessagePartFile.js +5 -4
  232. package/dist/primitives/messagePart/useMessagePartFile.js.map +1 -1
  233. package/dist/primitives/messagePart/useMessagePartImage.js +5 -4
  234. package/dist/primitives/messagePart/useMessagePartImage.js.map +1 -1
  235. package/dist/primitives/messagePart/useMessagePartReasoning.js +5 -4
  236. package/dist/primitives/messagePart/useMessagePartReasoning.js.map +1 -1
  237. package/dist/primitives/messagePart/useMessagePartSource.js +5 -4
  238. package/dist/primitives/messagePart/useMessagePartSource.js.map +1 -1
  239. package/dist/primitives/messagePart/useMessagePartText.js +5 -4
  240. package/dist/primitives/messagePart/useMessagePartText.js.map +1 -1
  241. package/dist/primitives/messagePart.js.map +1 -1
  242. package/dist/primitives/queueItem/QueueItemRemove.js +11 -4
  243. package/dist/primitives/queueItem/QueueItemRemove.js.map +1 -1
  244. package/dist/primitives/queueItem/QueueItemSteer.js +11 -4
  245. package/dist/primitives/queueItem/QueueItemSteer.js.map +1 -1
  246. package/dist/primitives/queueItem/QueueItemText.js +20 -6
  247. package/dist/primitives/queueItem/QueueItemText.js.map +1 -1
  248. package/dist/primitives/queueItem.js.map +1 -1
  249. package/dist/primitives/reasoning/useScrollLock.js +61 -34
  250. package/dist/primitives/reasoning/useScrollLock.js.map +1 -1
  251. package/dist/primitives/selectionToolbar/SelectionToolbarQuote.js +56 -16
  252. package/dist/primitives/selectionToolbar/SelectionToolbarQuote.js.map +1 -1
  253. package/dist/primitives/selectionToolbar/SelectionToolbarRoot.js +120 -59
  254. package/dist/primitives/selectionToolbar/SelectionToolbarRoot.js.map +1 -1
  255. package/dist/primitives/selectionToolbar.js.map +1 -1
  256. package/dist/primitives/suggestion/SuggestionDescription.js +20 -6
  257. package/dist/primitives/suggestion/SuggestionDescription.js.map +1 -1
  258. package/dist/primitives/suggestion/SuggestionTitle.js +20 -6
  259. package/dist/primitives/suggestion/SuggestionTitle.js.map +1 -1
  260. package/dist/primitives/suggestion/SuggestionTrigger.js +39 -26
  261. package/dist/primitives/suggestion/SuggestionTrigger.js.map +1 -1
  262. package/dist/primitives/suggestion.js.map +1 -1
  263. package/dist/primitives/thread/ThreadEmpty.js +6 -2
  264. package/dist/primitives/thread/ThreadEmpty.js.map +1 -1
  265. package/dist/primitives/thread/ThreadIf.js +32 -10
  266. package/dist/primitives/thread/ThreadIf.js.map +1 -1
  267. package/dist/primitives/thread/ThreadRoot.js +13 -4
  268. package/dist/primitives/thread/ThreadRoot.js.map +1 -1
  269. package/dist/primitives/thread/ThreadScrollToBottom.js +24 -6
  270. package/dist/primitives/thread/ThreadScrollToBottom.js.map +1 -1
  271. package/dist/primitives/thread/ThreadSuggestion.js +18 -6
  272. package/dist/primitives/thread/ThreadSuggestion.js.map +1 -1
  273. package/dist/primitives/thread/ThreadViewport.js +185 -47
  274. package/dist/primitives/thread/ThreadViewport.js.map +1 -1
  275. package/dist/primitives/thread/ThreadViewportFooter.js +22 -9
  276. package/dist/primitives/thread/ThreadViewportFooter.js.map +1 -1
  277. package/dist/primitives/thread/topAnchor/computeTopAnchorSlack.js.map +1 -1
  278. package/dist/primitives/thread/topAnchor/createReserveObservers.js.map +1 -1
  279. package/dist/primitives/thread/topAnchor/mountTopAnchorReserve.js.map +1 -1
  280. package/dist/primitives/thread/topAnchor/topAnchorTurn.js.map +1 -1
  281. package/dist/primitives/thread/topAnchor/topAnchorUtils.js.map +1 -1
  282. package/dist/primitives/thread/topAnchor/useTopAnchorReserve.js +19 -4
  283. package/dist/primitives/thread/topAnchor/useTopAnchorReserve.js.map +1 -1
  284. package/dist/primitives/thread/useThreadViewportAutoScroll.d.ts.map +1 -1
  285. package/dist/primitives/thread/useThreadViewportAutoScroll.js +21 -16
  286. package/dist/primitives/thread/useThreadViewportAutoScroll.js.map +1 -1
  287. package/dist/primitives/thread.js.map +1 -1
  288. package/dist/primitives/threadList/ThreadListLoadMore.js.map +1 -1
  289. package/dist/primitives/threadList/ThreadListNew.js +53 -11
  290. package/dist/primitives/threadList/ThreadListNew.js.map +1 -1
  291. package/dist/primitives/threadList/ThreadListRoot.js +13 -4
  292. package/dist/primitives/threadList/ThreadListRoot.js.map +1 -1
  293. package/dist/primitives/threadList.js.map +1 -1
  294. package/dist/primitives/threadListItem/ThreadListItemArchive.js.map +1 -1
  295. package/dist/primitives/threadListItem/ThreadListItemDelete.js.map +1 -1
  296. package/dist/primitives/threadListItem/ThreadListItemRoot.js +26 -7
  297. package/dist/primitives/threadListItem/ThreadListItemRoot.js.map +1 -1
  298. package/dist/primitives/threadListItem/ThreadListItemTrigger.js.map +1 -1
  299. package/dist/primitives/threadListItem/ThreadListItemUnarchive.js.map +1 -1
  300. package/dist/primitives/threadListItem.js.map +1 -1
  301. package/dist/primitives/threadListItemMore/ThreadListItemMoreContent.js +44 -7
  302. package/dist/primitives/threadListItemMore/ThreadListItemMoreContent.js.map +1 -1
  303. package/dist/primitives/threadListItemMore/ThreadListItemMoreItem.js +28 -6
  304. package/dist/primitives/threadListItemMore/ThreadListItemMoreItem.js.map +1 -1
  305. package/dist/primitives/threadListItemMore/ThreadListItemMoreRoot.js +25 -5
  306. package/dist/primitives/threadListItemMore/ThreadListItemMoreRoot.js.map +1 -1
  307. package/dist/primitives/threadListItemMore/ThreadListItemMoreSeparator.js +28 -6
  308. package/dist/primitives/threadListItemMore/ThreadListItemMoreSeparator.js.map +1 -1
  309. package/dist/primitives/threadListItemMore/ThreadListItemMoreTrigger.js +28 -6
  310. package/dist/primitives/threadListItemMore/ThreadListItemMoreTrigger.js.map +1 -1
  311. package/dist/primitives/threadListItemMore/scope.js.map +1 -1
  312. package/dist/primitives/threadListItemMore.js.map +1 -1
  313. package/dist/sandbox-host/SandboxHost.js.map +1 -1
  314. package/dist/tests/remote-thread-list-test-helpers.js.map +1 -1
  315. package/dist/tests/setup.js.map +1 -1
  316. package/dist/unstable/useComposerInputHistory.d.ts +30 -0
  317. package/dist/unstable/useComposerInputHistory.d.ts.map +1 -0
  318. package/dist/unstable/useComposerInputHistory.js +117 -0
  319. package/dist/unstable/useComposerInputHistory.js.map +1 -0
  320. package/dist/unstable/useMentionAdapter.js.map +1 -1
  321. package/dist/unstable/useMessageStallDetection.d.ts +29 -0
  322. package/dist/unstable/useMessageStallDetection.d.ts.map +1 -0
  323. package/dist/unstable/useMessageStallDetection.js +69 -0
  324. package/dist/unstable/useMessageStallDetection.js.map +1 -0
  325. package/dist/unstable/useSlashCommandAdapter.js.map +1 -1
  326. package/dist/utils/Primitive.js +57 -12
  327. package/dist/utils/Primitive.js.map +1 -1
  328. package/dist/utils/createActionButton.js +23 -7
  329. package/dist/utils/createActionButton.js.map +1 -1
  330. package/dist/utils/getSelectionMessageId.js.map +1 -1
  331. package/dist/utils/hooks/useManagedRef.js +16 -8
  332. package/dist/utils/hooks/useManagedRef.js.map +1 -1
  333. package/dist/utils/hooks/useMediaQuery.js +25 -10
  334. package/dist/utils/hooks/useMediaQuery.js.map +1 -1
  335. package/dist/utils/hooks/useOnResizeContent.js +29 -19
  336. package/dist/utils/hooks/useOnResizeContent.js.map +1 -1
  337. package/dist/utils/hooks/useOnScrollToBottom.js +20 -4
  338. package/dist/utils/hooks/useOnScrollToBottom.js.map +1 -1
  339. package/dist/utils/hooks/useSizeHandle.js +23 -15
  340. package/dist/utils/hooks/useSizeHandle.js.map +1 -1
  341. package/dist/utils/json/is-json-equal.js.map +1 -1
  342. package/dist/utils/json/is-json.js.map +1 -1
  343. package/dist/utils/smooth/SmoothContext.js +41 -11
  344. package/dist/utils/smooth/SmoothContext.js.map +1 -1
  345. package/dist/utils/smooth/useSmooth.d.ts +40 -2
  346. package/dist/utils/smooth/useSmooth.d.ts.map +1 -1
  347. package/dist/utils/smooth/useSmooth.js +52 -13
  348. package/dist/utils/smooth/useSmooth.js.map +1 -1
  349. package/dist/utils/useToolArgsFieldStatus.d.ts +2 -2
  350. package/dist/utils/useToolArgsFieldStatus.d.ts.map +1 -1
  351. package/dist/utils/useToolArgsFieldStatus.js +13 -5
  352. package/dist/utils/useToolArgsFieldStatus.js.map +1 -1
  353. package/package.json +6 -6
  354. package/src/client/ExternalThread.ts +146 -74
  355. package/src/client/InMemoryThreadList.ts +23 -21
  356. package/src/client/SingleThreadList.ts +29 -27
  357. package/src/hooks/useToolCallElapsed.ts +52 -0
  358. package/src/index.ts +19 -0
  359. package/src/mcp-apps/McpAppRenderer.tsx +5 -3
  360. package/src/mcp-apps/McpAppsRemoteHost.ts +5 -3
  361. package/src/primitives/composer/ComposerInput.test.tsx +1 -1
  362. package/src/primitives/composer/ComposerInput.tsx +3 -3
  363. package/src/primitives/composer/trigger/TriggerPopover.tsx +4 -5
  364. package/src/primitives/composer/trigger/TriggerPopoverResource.ts +5 -3
  365. package/src/primitives/composer/trigger/triggerDetectionResource.ts +21 -21
  366. package/src/primitives/composer/trigger/triggerKeyboardResource.test.ts +5 -4
  367. package/src/primitives/composer/trigger/triggerKeyboardResource.ts +99 -101
  368. package/src/primitives/composer/trigger/triggerNavigationResource.ts +92 -98
  369. package/src/primitives/composer/trigger/triggerSelectionResource.ts +76 -76
  370. package/src/primitives/messagePart/MessagePartText.tsx +3 -2
  371. package/src/primitives/reasoning/useScrollLock.ts +25 -2
  372. package/src/primitives/thread/useThreadViewportAutoScroll.ts +8 -0
  373. package/src/tests/external-thread-branches.test.tsx +160 -0
  374. package/src/tests/shouldContinue.test.ts +33 -0
  375. package/src/tests/toolCallTiming.test.tsx +221 -0
  376. package/src/unstable/useComposerInputHistory.test.tsx +201 -0
  377. package/src/unstable/useComposerInputHistory.ts +160 -0
  378. package/src/unstable/useMessageStallDetection.ts +91 -0
  379. package/src/utils/smooth/useSmooth.test.tsx +95 -0
  380. package/src/utils/smooth/useSmooth.ts +82 -10
@@ -1,53 +1,133 @@
1
1
  import { SingleThreadList } from "./SingleThreadList.js";
2
2
  import { Derived, attachTransformScopes, useClientLookup, useClientResource } from "@assistant-ui/store";
3
+ import { c } from "@assistant-ui/tap/react-shim/compiler-runtime";
3
4
  import { DataRenderers, Tools } from "@assistant-ui/core/react";
4
- import { useEffect, useEffectEvent, useMemo, useState } from "@assistant-ui/tap/react-shim";
5
+ import { useEffect, useEffectEvent, useState } from "@assistant-ui/tap/react-shim";
5
6
  import { ModelContext, Suggestions } from "@assistant-ui/core/store";
6
7
  import { resource, withKey } from "@assistant-ui/tap";
8
+ import { getThreadMessageText, resolveToolApprovalResponse } from "@assistant-ui/core/internal";
7
9
  //#region src/client/ExternalThread.ts
8
10
  const EMPTY_QUEUE_ITEMS = [];
9
- const MessageClient = resource(function MessageClient({ message, index, onEdit, onReload, queue }) {
11
+ const EMPTY_BRANCH_IDS = [];
12
+ const useMessageClient = (t0) => {
13
+ const $ = c(62);
14
+ const { message, index, onEdit, onReload, queue, branches, onRespondToToolApproval } = t0;
10
15
  const [isCopied, setIsCopied] = useState(false);
11
16
  const [isHovering, setIsHovering] = useState(false);
12
17
  const [isEditing, setIsEditing] = useState(false);
13
- const partClients = useClientLookup(() => message.content.map((part, idx) => withKey(idx, PartResource({ part }))), [message.content]);
14
- const attachmentClients = useClientLookup(() => (message.attachments ?? []).map((attachment) => withKey(attachment.id, AttachmentResource({
15
- attachment,
16
- onRemove: () => {}
17
- }))), [message.attachments]);
18
- const handleBeginEdit = () => {
19
- setIsEditing(true);
20
- };
21
- const handleCancelEdit = () => {
22
- setIsEditing(false);
23
- };
24
- const handleSendEdit = (msg) => {
25
- queue?.clear("edit");
26
- onEdit?.({
27
- ...msg,
28
- parentId: message.id,
29
- sourceId: message.id
18
+ let t1;
19
+ if ($[0] !== message.content || $[1] !== onRespondToToolApproval) {
20
+ let t2;
21
+ if ($[3] !== onRespondToToolApproval) {
22
+ t2 = (part, idx) => withKey(idx, PartResource({
23
+ part,
24
+ onRespondToToolApproval
25
+ }));
26
+ $[3] = onRespondToToolApproval;
27
+ $[4] = t2;
28
+ } else t2 = $[4];
29
+ t1 = message.content.map(t2);
30
+ $[0] = message.content;
31
+ $[1] = onRespondToToolApproval;
32
+ $[2] = t1;
33
+ } else t1 = $[2];
34
+ const partClients = useClientLookup(t1);
35
+ let t2;
36
+ if ($[5] !== message.attachments) {
37
+ t2 = message.attachments ?? [];
38
+ $[5] = message.attachments;
39
+ $[6] = t2;
40
+ } else t2 = $[6];
41
+ let t3;
42
+ if ($[7] !== t2) {
43
+ t3 = t2.map(_temp2);
44
+ $[7] = t2;
45
+ $[8] = t3;
46
+ } else t3 = $[8];
47
+ const attachmentClients = useClientLookup(t3);
48
+ let t4;
49
+ if ($[9] === Symbol.for("react.memo_cache_sentinel")) {
50
+ t4 = () => {
51
+ setIsEditing(true);
52
+ };
53
+ $[9] = t4;
54
+ } else t4 = $[9];
55
+ const handleBeginEdit = t4;
56
+ let t5;
57
+ if ($[10] === Symbol.for("react.memo_cache_sentinel")) {
58
+ t5 = () => {
59
+ setIsEditing(false);
60
+ };
61
+ $[10] = t5;
62
+ } else t5 = $[10];
63
+ const handleCancelEdit = t5;
64
+ let t6;
65
+ if ($[11] !== message.id || $[12] !== onEdit || $[13] !== queue) {
66
+ t6 = (msg) => {
67
+ queue?.clear("edit");
68
+ onEdit?.({
69
+ ...msg,
70
+ parentId: message.id,
71
+ sourceId: message.id
72
+ });
73
+ setIsEditing(false);
74
+ };
75
+ $[11] = message.id;
76
+ $[12] = onEdit;
77
+ $[13] = queue;
78
+ $[14] = t6;
79
+ } else t6 = $[14];
80
+ const handleSendEdit = t6;
81
+ let t7;
82
+ if ($[15] !== handleSendEdit || $[16] !== isEditing || $[17] !== message || $[18] !== queue) {
83
+ t7 = ComposerClientResource({
84
+ type: "edit",
85
+ isEditing,
86
+ canCancel: true,
87
+ onCancel: handleCancelEdit,
88
+ onBeginEdit: handleBeginEdit,
89
+ onSend: handleSendEdit,
90
+ message,
91
+ queue
30
92
  });
31
- setIsEditing(false);
32
- };
33
- const composerClient = useClientResource(ComposerClientResource({
34
- type: "edit",
35
- isEditing,
36
- canCancel: true,
37
- onCancel: handleCancelEdit,
38
- onBeginEdit: handleBeginEdit,
39
- onSend: handleSendEdit,
40
- message,
41
- queue
42
- }));
43
- const state = useMemo(() => {
44
- return {
93
+ $[15] = handleSendEdit;
94
+ $[16] = isEditing;
95
+ $[17] = message;
96
+ $[18] = queue;
97
+ $[19] = t7;
98
+ } else t7 = $[19];
99
+ const composerClient = useClientResource(t7);
100
+ let branchIds;
101
+ let t8;
102
+ if ($[20] !== branches || $[21] !== message.id) {
103
+ branchIds = branches?.getBranches(message.id) ?? EMPTY_BRANCH_IDS;
104
+ t8 = branchIds.indexOf(message.id);
105
+ $[20] = branches;
106
+ $[21] = message.id;
107
+ $[22] = branchIds;
108
+ $[23] = t8;
109
+ } else {
110
+ branchIds = $[22];
111
+ t8 = $[23];
112
+ }
113
+ const branchIndex = t8;
114
+ const branchNumber = branchIndex === -1 ? 1 : branchIndex + 1;
115
+ const branchCount = branchIndex === -1 ? 1 : branchIds.length;
116
+ let t9;
117
+ if ($[24] !== message.attachments) {
118
+ t9 = message.attachments ?? [];
119
+ $[24] = message.attachments;
120
+ $[25] = t9;
121
+ } else t9 = $[25];
122
+ let t10;
123
+ if ($[26] !== branchCount || $[27] !== branchNumber || $[28] !== composerClient.state || $[29] !== index || $[30] !== isCopied || $[31] !== isHovering || $[32] !== message || $[33] !== partClients.state || $[34] !== t9) {
124
+ t10 = {
45
125
  ...message,
46
- attachments: message.attachments ?? [],
126
+ attachments: t9,
47
127
  parentId: null,
48
128
  isLast: false,
49
- branchNumber: 1,
50
- branchCount: 1,
129
+ branchNumber,
130
+ branchCount,
51
131
  speech: void 0,
52
132
  parts: partClients.state,
53
133
  isCopied,
@@ -55,103 +135,273 @@ const MessageClient = resource(function MessageClient({ message, index, onEdit,
55
135
  index,
56
136
  composer: composerClient.state
57
137
  };
58
- }, [
59
- message,
60
- isCopied,
61
- isHovering,
62
- index,
63
- composerClient.state,
64
- partClients.state
65
- ]);
66
- return {
67
- getState: () => state,
68
- composer: () => composerClient.methods,
69
- reload: () => {
138
+ $[26] = branchCount;
139
+ $[27] = branchNumber;
140
+ $[28] = composerClient.state;
141
+ $[29] = index;
142
+ $[30] = isCopied;
143
+ $[31] = isHovering;
144
+ $[32] = message;
145
+ $[33] = partClients.state;
146
+ $[34] = t9;
147
+ $[35] = t10;
148
+ } else t10 = $[35];
149
+ const state = t10;
150
+ let t11;
151
+ if ($[36] !== state) {
152
+ t11 = () => state;
153
+ $[36] = state;
154
+ $[37] = t11;
155
+ } else t11 = $[37];
156
+ let t12;
157
+ if ($[38] !== composerClient.methods) {
158
+ t12 = () => composerClient.methods;
159
+ $[38] = composerClient.methods;
160
+ $[39] = t12;
161
+ } else t12 = $[39];
162
+ let t13;
163
+ if ($[40] !== onReload) {
164
+ t13 = () => {
70
165
  onReload?.();
71
- },
72
- speak: () => {},
73
- stopSpeaking: () => {},
74
- submitFeedback: () => {},
75
- switchToBranch: () => {},
76
- getCopyText: () => message.content.map((c) => "text" in c ? c.text : "").join(""),
77
- part: (selector) => {
166
+ };
167
+ $[40] = onReload;
168
+ $[41] = t13;
169
+ } else t13 = $[41];
170
+ let t14;
171
+ if ($[42] !== branchIds || $[43] !== branchIndex || $[44] !== branches || $[45] !== message.id) {
172
+ t14 = (t15) => {
173
+ const { position, branchId } = t15;
174
+ if (!branches) return;
175
+ const target = branchId ?? (branchIndex === -1 ? void 0 : position === "previous" ? branchIds[branchIndex - 1] : position === "next" ? branchIds[branchIndex + 1] : void 0);
176
+ if (target !== void 0 && target !== message.id) branches.switchToBranch(target);
177
+ };
178
+ $[42] = branchIds;
179
+ $[43] = branchIndex;
180
+ $[44] = branches;
181
+ $[45] = message.id;
182
+ $[46] = t14;
183
+ } else t14 = $[46];
184
+ let t15;
185
+ if ($[47] !== message) {
186
+ t15 = () => getThreadMessageText(message);
187
+ $[47] = message;
188
+ $[48] = t15;
189
+ } else t15 = $[48];
190
+ let t16;
191
+ if ($[49] !== partClients || $[50] !== state) {
192
+ t16 = (selector) => {
78
193
  if ("index" in selector) return partClients.get(selector);
79
194
  const partIndex = state.parts.findIndex((p) => p.type === "tool-call" && p.toolCallId === selector.toolCallId);
80
195
  return partClients.get({ index: partIndex });
81
- },
82
- attachment: (selector) => {
83
- if ("id" in selector) return attachmentClients.get({ key: selector.id });
84
- return attachmentClients.get(selector);
85
- },
86
- setIsCopied,
87
- setIsHovering
88
- };
89
- });
90
- const PartResource = resource(function PartResource({ part }) {
91
- const state = useMemo(() => ({
92
- ...part,
93
- status: { type: "complete" }
94
- }), [part]);
95
- return {
96
- getState: () => state,
97
- addToolResult: () => {},
98
- resumeToolCall: () => {},
99
- respondToToolApproval: () => {}
100
- };
101
- });
102
- const AttachmentResource = resource(function AttachmentResource({ attachment, onRemove }) {
196
+ };
197
+ $[49] = partClients;
198
+ $[50] = state;
199
+ $[51] = t16;
200
+ } else t16 = $[51];
201
+ let t17;
202
+ if ($[52] !== attachmentClients) {
203
+ t17 = (selector_0) => {
204
+ if ("id" in selector_0) return attachmentClients.get({ key: selector_0.id });
205
+ return attachmentClients.get(selector_0);
206
+ };
207
+ $[52] = attachmentClients;
208
+ $[53] = t17;
209
+ } else t17 = $[53];
210
+ let t18;
211
+ if ($[54] !== t11 || $[55] !== t12 || $[56] !== t13 || $[57] !== t14 || $[58] !== t15 || $[59] !== t16 || $[60] !== t17) {
212
+ t18 = {
213
+ getState: t11,
214
+ composer: t12,
215
+ delete: _temp3,
216
+ reload: t13,
217
+ speak: _temp4,
218
+ stopSpeaking: _temp5,
219
+ submitFeedback: _temp6,
220
+ switchToBranch: t14,
221
+ getCopyText: t15,
222
+ part: t16,
223
+ attachment: t17,
224
+ setIsCopied,
225
+ setIsHovering
226
+ };
227
+ $[54] = t11;
228
+ $[55] = t12;
229
+ $[56] = t13;
230
+ $[57] = t14;
231
+ $[58] = t15;
232
+ $[59] = t16;
233
+ $[60] = t17;
234
+ $[61] = t18;
235
+ } else t18 = $[61];
236
+ return t18;
237
+ };
238
+ const MessageClient = resource(useMessageClient);
239
+ const usePartResource = (t0) => {
240
+ const $ = c(11);
241
+ const { part, onRespondToToolApproval } = t0;
242
+ let t1;
243
+ if ($[0] === Symbol.for("react.memo_cache_sentinel")) {
244
+ t1 = { type: "complete" };
245
+ $[0] = t1;
246
+ } else t1 = $[0];
247
+ let t2;
248
+ if ($[1] !== part) {
249
+ t2 = {
250
+ ...part,
251
+ status: t1
252
+ };
253
+ $[1] = part;
254
+ $[2] = t2;
255
+ } else t2 = $[2];
256
+ const state = t2;
257
+ let t3;
258
+ if ($[3] !== state) {
259
+ t3 = () => state;
260
+ $[3] = state;
261
+ $[4] = t3;
262
+ } else t3 = $[4];
263
+ let t4;
264
+ if ($[5] !== onRespondToToolApproval || $[6] !== part) {
265
+ t4 = (response) => {
266
+ if (!onRespondToToolApproval) throw new Error("Runtime does not support tool approvals.");
267
+ if (part.type !== "tool-call") throw new Error("Tried to respond to tool approval on non-tool message part");
268
+ if (!part.approval || part.approval.approved !== void 0 || part.approval.resolution !== void 0) throw new Error("Tool call has no pending approval");
269
+ onRespondToToolApproval(resolveToolApprovalResponse(part.approval, response));
270
+ };
271
+ $[5] = onRespondToToolApproval;
272
+ $[6] = part;
273
+ $[7] = t4;
274
+ } else t4 = $[7];
275
+ let t5;
276
+ if ($[8] !== t3 || $[9] !== t4) {
277
+ t5 = {
278
+ getState: t3,
279
+ addToolResult: _temp7,
280
+ resumeToolCall: _temp8,
281
+ respondToToolApproval: t4
282
+ };
283
+ $[8] = t3;
284
+ $[9] = t4;
285
+ $[10] = t5;
286
+ } else t5 = $[10];
287
+ return t5;
288
+ };
289
+ const PartResource = resource(usePartResource);
290
+ const useAttachmentResource = ({ attachment, onRemove }) => {
103
291
  return {
104
292
  getState: () => attachment,
105
293
  remove: async () => {
106
294
  onRemove?.();
107
295
  }
108
296
  };
109
- });
110
- const QueueItemClient = resource(function QueueItemClient({ item, onSteer, onRemove }) {
297
+ };
298
+ const AttachmentResource = resource(useAttachmentResource);
299
+ const useQueueItemClient = ({ item, onSteer, onRemove }) => {
111
300
  return {
112
301
  getState: () => item,
113
302
  steer: onSteer,
114
303
  remove: onRemove
115
304
  };
116
- });
117
- const ComposerClientResource = resource(function ComposerClientResource({ type, isEditing, canCancel, isSendDisabled = false, onCancel, onBeginEdit, onSend, message, queue }) {
305
+ };
306
+ const QueueItemClient = resource(useQueueItemClient);
307
+ const useComposerClientResource = (t0) => {
308
+ const $ = c(60);
309
+ const { type, isEditing, canCancel, isSendDisabled: t1, onCancel, onBeginEdit, onSend, message, queue } = t0;
310
+ const isSendDisabled = t1 === void 0 ? false : t1;
118
311
  const [text, setText] = useState("");
119
312
  const [role, setRole] = useState("user");
120
- const [runConfig, setRunConfig] = useState({});
121
- const [attachments, setAttachments] = useState([]);
313
+ let t2;
314
+ if ($[0] === Symbol.for("react.memo_cache_sentinel")) {
315
+ t2 = {};
316
+ $[0] = t2;
317
+ } else t2 = $[0];
318
+ const [runConfig, setRunConfig] = useState(t2);
319
+ let t3;
320
+ if ($[1] === Symbol.for("react.memo_cache_sentinel")) {
321
+ t3 = [];
322
+ $[1] = t3;
323
+ } else t3 = $[1];
324
+ const [attachments, setAttachments] = useState(t3);
122
325
  const [quote, setQuote] = useState(void 0);
123
- const updateFromMessage = useEffectEvent(() => {
124
- if (message) {
125
- setText(message.content.filter((part) => part.type === "text").map((part) => "text" in part ? part.text : "").join("\n\n"));
126
- setRole(message.role);
127
- setAttachments(message.attachments ?? []);
128
- }
129
- });
130
- useEffect(() => {
131
- if (isEditing) updateFromMessage();
132
- }, [isEditing]);
133
- const attachmentClients = useClientLookup(() => attachments.map((attachment, idx) => withKey(attachment.id, AttachmentResource({
134
- attachment,
135
- onRemove: () => {
136
- setAttachments(attachments.filter((_, i) => i !== idx));
137
- }
138
- }))), [attachments]);
326
+ let t4;
327
+ if ($[2] !== message) {
328
+ t4 = () => {
329
+ if (message) {
330
+ setText(message.content.filter(_temp9).map(_temp0).join("\n\n"));
331
+ setRole(message.role);
332
+ setAttachments(message.attachments ?? []);
333
+ }
334
+ };
335
+ $[2] = message;
336
+ $[3] = t4;
337
+ } else t4 = $[3];
338
+ const updateFromMessage = useEffectEvent(t4);
339
+ let t5;
340
+ if ($[4] !== isEditing || $[5] !== updateFromMessage) {
341
+ t5 = () => {
342
+ if (isEditing) updateFromMessage();
343
+ };
344
+ $[4] = isEditing;
345
+ $[5] = updateFromMessage;
346
+ $[6] = t5;
347
+ } else t5 = $[6];
348
+ let t6;
349
+ if ($[7] !== isEditing) {
350
+ t6 = [isEditing];
351
+ $[7] = isEditing;
352
+ $[8] = t6;
353
+ } else t6 = $[8];
354
+ useEffect(t5, t6);
355
+ let t7;
356
+ if ($[9] !== attachments) {
357
+ t7 = attachments.map((attachment, idx) => withKey(attachment.id, AttachmentResource({
358
+ attachment,
359
+ onRemove: () => {
360
+ setAttachments(attachments.filter((_, i) => i !== idx));
361
+ }
362
+ })));
363
+ $[9] = attachments;
364
+ $[10] = t7;
365
+ } else t7 = $[10];
366
+ const attachmentClients = useClientLookup(t7);
139
367
  const queueItems = queue?.items ?? EMPTY_QUEUE_ITEMS;
140
- const queueItemClients = useClientLookup(() => queueItems.map((item) => withKey(item.id, QueueItemClient({
141
- item,
142
- onSteer: () => queue?.steer(item.id),
143
- onRemove: () => queue?.remove(item.id)
144
- }))), [queueItems]);
145
- const state = useMemo(() => {
146
- const isEmpty = !text.trim() && !attachments.length;
147
- return {
368
+ let t8;
369
+ if ($[11] !== queue || $[12] !== queueItems) {
370
+ let t9;
371
+ if ($[14] !== queue) {
372
+ t9 = (item) => withKey(item.id, QueueItemClient({
373
+ item,
374
+ onSteer: () => queue?.steer(item.id),
375
+ onRemove: () => queue?.remove(item.id)
376
+ }));
377
+ $[14] = queue;
378
+ $[15] = t9;
379
+ } else t9 = $[15];
380
+ t8 = queueItems.map(t9);
381
+ $[11] = queue;
382
+ $[12] = queueItems;
383
+ $[13] = t8;
384
+ } else t8 = $[13];
385
+ const queueItemClients = useClientLookup(t8);
386
+ let t9;
387
+ if ($[16] !== attachments.length || $[17] !== text) {
388
+ t9 = !text.trim() && !attachments.length;
389
+ $[16] = attachments.length;
390
+ $[17] = text;
391
+ $[18] = t9;
392
+ } else t9 = $[18];
393
+ const isEmpty = t9;
394
+ const t10 = isEditing && !isEmpty && !isSendDisabled;
395
+ let t11;
396
+ if ($[19] !== attachmentClients.state || $[20] !== canCancel || $[21] !== isEditing || $[22] !== isEmpty || $[23] !== queueItems || $[24] !== quote || $[25] !== role || $[26] !== runConfig || $[27] !== t10 || $[28] !== text || $[29] !== type) {
397
+ t11 = {
148
398
  text,
149
399
  role,
150
400
  attachments: attachmentClients.state,
151
401
  runConfig,
152
402
  isEditing,
153
403
  canCancel,
154
- canSend: isEditing && !isEmpty && !isSendDisabled,
404
+ canSend: t10,
155
405
  attachmentAccept: "*",
156
406
  isEmpty,
157
407
  type,
@@ -159,25 +409,29 @@ const ComposerClientResource = resource(function ComposerClientResource({ type,
159
409
  quote,
160
410
  queue: queueItems
161
411
  };
162
- }, [
163
- text,
164
- role,
165
- attachmentClients.state,
166
- runConfig,
167
- isEditing,
168
- canCancel,
169
- isSendDisabled,
170
- type,
171
- attachments.length,
172
- quote,
173
- queueItems
174
- ]);
175
- return {
176
- getState: () => state,
177
- setText,
178
- setRole,
179
- setRunConfig,
180
- addAttachment: async (fileOrAttachment) => {
412
+ $[19] = attachmentClients.state;
413
+ $[20] = canCancel;
414
+ $[21] = isEditing;
415
+ $[22] = isEmpty;
416
+ $[23] = queueItems;
417
+ $[24] = quote;
418
+ $[25] = role;
419
+ $[26] = runConfig;
420
+ $[27] = t10;
421
+ $[28] = text;
422
+ $[29] = type;
423
+ $[30] = t11;
424
+ } else t11 = $[30];
425
+ const state = t11;
426
+ let t12;
427
+ if ($[31] !== state) {
428
+ t12 = () => state;
429
+ $[31] = state;
430
+ $[32] = t12;
431
+ } else t12 = $[32];
432
+ let t13;
433
+ if ($[33] !== attachments) {
434
+ t13 = async (fileOrAttachment) => {
181
435
  if (fileOrAttachment instanceof File) {
182
436
  const newAttachment = {
183
437
  id: Math.random().toString(36).substring(7),
@@ -190,7 +444,7 @@ const ComposerClientResource = resource(function ComposerClientResource({ type,
190
444
  };
191
445
  setAttachments([...attachments, newAttachment]);
192
446
  } else {
193
- const newAttachment = {
447
+ const newAttachment_0 = {
194
448
  id: fileOrAttachment.id ?? Math.random().toString(36).substring(7),
195
449
  type: fileOrAttachment.type ?? "document",
196
450
  name: fileOrAttachment.name,
@@ -198,24 +452,42 @@ const ComposerClientResource = resource(function ComposerClientResource({ type,
198
452
  content: fileOrAttachment.content,
199
453
  status: { type: "complete" }
200
454
  };
201
- setAttachments([...attachments, newAttachment]);
455
+ setAttachments([...attachments, newAttachment_0]);
202
456
  }
203
- },
204
- clearAttachments: async () => {
457
+ };
458
+ $[33] = attachments;
459
+ $[34] = t13;
460
+ } else t13 = $[34];
461
+ let t14;
462
+ if ($[35] === Symbol.for("react.memo_cache_sentinel")) {
463
+ t14 = async () => {
205
464
  setAttachments([]);
206
- },
207
- attachment: (selector) => {
465
+ };
466
+ $[35] = t14;
467
+ } else t14 = $[35];
468
+ let t15;
469
+ if ($[36] !== attachmentClients) {
470
+ t15 = (selector) => {
208
471
  if ("id" in selector) return attachmentClients.get({ key: selector.id });
209
472
  return attachmentClients.get(selector);
210
- },
211
- reset: async () => {
473
+ };
474
+ $[36] = attachmentClients;
475
+ $[37] = t15;
476
+ } else t15 = $[37];
477
+ let t16;
478
+ if ($[38] === Symbol.for("react.memo_cache_sentinel")) {
479
+ t16 = async () => {
212
480
  setText("");
213
481
  setRole("user");
214
482
  setRunConfig({});
215
483
  setAttachments([]);
216
484
  setQuote(void 0);
217
- },
218
- send: (opts) => {
485
+ };
486
+ $[38] = t16;
487
+ } else t16 = $[38];
488
+ let t17;
489
+ if ($[39] !== attachments || $[40] !== onSend || $[41] !== queue || $[42] !== quote || $[43] !== role || $[44] !== runConfig || $[45] !== state || $[46] !== text) {
490
+ t17 = (opts) => {
219
491
  if (!state.canSend) return;
220
492
  const currentQuote = quote;
221
493
  const composedMessage = {
@@ -237,102 +509,237 @@ const ComposerClientResource = resource(function ComposerClientResource({ type,
237
509
  setText("");
238
510
  setAttachments([]);
239
511
  setQuote(void 0);
240
- },
241
- cancel: onCancel,
242
- beginEdit: () => {
512
+ };
513
+ $[39] = attachments;
514
+ $[40] = onSend;
515
+ $[41] = queue;
516
+ $[42] = quote;
517
+ $[43] = role;
518
+ $[44] = runConfig;
519
+ $[45] = state;
520
+ $[46] = text;
521
+ $[47] = t17;
522
+ } else t17 = $[47];
523
+ let t18;
524
+ if ($[48] !== onBeginEdit) {
525
+ t18 = () => {
243
526
  onBeginEdit?.();
244
- },
245
- startDictation: () => {},
246
- stopDictation: () => {},
247
- setQuote,
248
- queueItem: (selector) => {
249
- return queueItemClients.get(selector);
250
- }
251
- };
252
- });
253
- const ExternalThread = resource(function ExternalThread({ messages, isRunning = false, isSendDisabled = false, onNew, onEdit, onReload, onStartRun, onCancel, queue }) {
254
- const handleReload = (messageId) => {
255
- const messageIndex = messages.findIndex((m) => m.id === messageId);
256
- if (messageIndex === -1) return;
257
- const parentId = messageIndex > 0 ? messages[messageIndex - 1].id : null;
258
- queue?.clear("reload");
259
- onReload?.(parentId);
260
- };
261
- const messageClients = useClientLookup(() => messages.map((msg, index) => {
262
- const props = {
263
- message: msg,
264
- index,
265
- onReload: () => handleReload(msg.id),
266
- queue
267
527
  };
268
- if (onEdit) props.onEdit = onEdit;
269
- return withKey(msg.id, MessageClient(props));
270
- }), [
271
- messages,
272
- onEdit,
273
- queue
274
- ]);
275
- const handleCancelRun = () => {
276
- queue?.clear("cancel-run");
277
- onCancel?.();
278
- };
279
- const handleSendNew = (message) => {
280
- onNew?.(message);
281
- };
282
- const composerClient = useClientResource(ComposerClientResource({
283
- type: "thread",
284
- isEditing: true,
285
- canCancel: isRunning,
286
- isSendDisabled,
287
- onCancel: handleCancelRun,
288
- onSend: handleSendNew,
289
- queue
290
- }));
528
+ $[48] = onBeginEdit;
529
+ $[49] = t18;
530
+ } else t18 = $[49];
531
+ let t19;
532
+ if ($[50] !== queueItemClients) {
533
+ t19 = (selector_0) => queueItemClients.get(selector_0);
534
+ $[50] = queueItemClients;
535
+ $[51] = t19;
536
+ } else t19 = $[51];
537
+ let t20;
538
+ if ($[52] !== onCancel || $[53] !== t12 || $[54] !== t13 || $[55] !== t15 || $[56] !== t17 || $[57] !== t18 || $[58] !== t19) {
539
+ t20 = {
540
+ getState: t12,
541
+ setText,
542
+ setRole,
543
+ setRunConfig,
544
+ addAttachment: t13,
545
+ clearAttachments: t14,
546
+ attachment: t15,
547
+ reset: t16,
548
+ send: t17,
549
+ cancel: onCancel,
550
+ beginEdit: t18,
551
+ startDictation: _temp1,
552
+ stopDictation: _temp10,
553
+ setQuote,
554
+ queueItem: t19
555
+ };
556
+ $[52] = onCancel;
557
+ $[53] = t12;
558
+ $[54] = t13;
559
+ $[55] = t15;
560
+ $[56] = t17;
561
+ $[57] = t18;
562
+ $[58] = t19;
563
+ $[59] = t20;
564
+ } else t20 = $[59];
565
+ return t20;
566
+ };
567
+ const ComposerClientResource = resource(useComposerClientResource);
568
+ const useExternalThread = (t0) => {
569
+ const $ = c(61);
570
+ const { messages, isRunning: t1, isSendDisabled: t2, onNew, onEdit, onReload, onStartRun, onCancel, queue, branches, onRespondToToolApproval } = t0;
571
+ const isRunning = t1 === void 0 ? false : t1;
572
+ const isSendDisabled = t2 === void 0 ? false : t2;
573
+ let t3;
574
+ if ($[0] !== messages || $[1] !== onReload || $[2] !== queue) {
575
+ t3 = (messageId) => {
576
+ const messageIndex = messages.findIndex((m) => m.id === messageId);
577
+ if (messageIndex === -1) return;
578
+ const parentId = messageIndex > 0 ? messages[messageIndex - 1].id : null;
579
+ queue?.clear("reload");
580
+ onReload?.(parentId);
581
+ };
582
+ $[0] = messages;
583
+ $[1] = onReload;
584
+ $[2] = queue;
585
+ $[3] = t3;
586
+ } else t3 = $[3];
587
+ const handleReload = t3;
588
+ let t4;
589
+ if ($[4] !== branches || $[5] !== handleReload || $[6] !== messages || $[7] !== onEdit || $[8] !== onRespondToToolApproval || $[9] !== queue) {
590
+ let t5;
591
+ if ($[11] !== branches || $[12] !== handleReload || $[13] !== onEdit || $[14] !== onRespondToToolApproval || $[15] !== queue) {
592
+ t5 = (msg, index) => {
593
+ const props = {
594
+ message: msg,
595
+ index,
596
+ onReload: () => handleReload(msg.id),
597
+ queue,
598
+ branches,
599
+ onRespondToToolApproval
600
+ };
601
+ if (onEdit) props.onEdit = onEdit;
602
+ return withKey(msg.id, MessageClient(props));
603
+ };
604
+ $[11] = branches;
605
+ $[12] = handleReload;
606
+ $[13] = onEdit;
607
+ $[14] = onRespondToToolApproval;
608
+ $[15] = queue;
609
+ $[16] = t5;
610
+ } else t5 = $[16];
611
+ t4 = messages.map(t5);
612
+ $[4] = branches;
613
+ $[5] = handleReload;
614
+ $[6] = messages;
615
+ $[7] = onEdit;
616
+ $[8] = onRespondToToolApproval;
617
+ $[9] = queue;
618
+ $[10] = t4;
619
+ } else t4 = $[10];
620
+ const messageClients = useClientLookup(t4);
621
+ let t5;
622
+ if ($[17] !== onCancel || $[18] !== queue) {
623
+ t5 = () => {
624
+ queue?.clear("cancel-run");
625
+ onCancel?.();
626
+ };
627
+ $[17] = onCancel;
628
+ $[18] = queue;
629
+ $[19] = t5;
630
+ } else t5 = $[19];
631
+ const handleCancelRun = t5;
632
+ let t6;
633
+ if ($[20] !== onNew) {
634
+ t6 = (message) => {
635
+ onNew?.(message);
636
+ };
637
+ $[20] = onNew;
638
+ $[21] = t6;
639
+ } else t6 = $[21];
640
+ const handleSendNew = t6;
641
+ let t7;
642
+ if ($[22] !== handleCancelRun || $[23] !== handleSendNew || $[24] !== isRunning || $[25] !== isSendDisabled || $[26] !== queue) {
643
+ t7 = ComposerClientResource({
644
+ type: "thread",
645
+ isEditing: true,
646
+ canCancel: isRunning,
647
+ isSendDisabled,
648
+ onCancel: handleCancelRun,
649
+ onSend: handleSendNew,
650
+ queue
651
+ });
652
+ $[22] = handleCancelRun;
653
+ $[23] = handleSendNew;
654
+ $[24] = isRunning;
655
+ $[25] = isSendDisabled;
656
+ $[26] = queue;
657
+ $[27] = t7;
658
+ } else t7 = $[27];
659
+ const composerClient = useClientResource(t7);
291
660
  const hasQueue = !!queue;
292
- const state = useMemo(() => {
293
- const messageStates = messageClients.state.map((s, idx, arr) => ({
294
- ...s,
295
- isLast: idx === arr.length - 1
296
- }));
297
- return {
298
- isEmpty: messages.length === 0,
661
+ const hasBranches = !!branches;
662
+ let t8;
663
+ if ($[28] !== messageClients.state) {
664
+ t8 = messageClients.state.map(_temp11);
665
+ $[28] = messageClients.state;
666
+ $[29] = t8;
667
+ } else t8 = $[29];
668
+ const messageStates = t8;
669
+ const t9 = messages.length === 0;
670
+ let t10;
671
+ if ($[30] !== hasBranches || $[31] !== hasQueue || $[32] !== isRunning) {
672
+ t10 = {
673
+ edit: false,
674
+ delete: false,
675
+ reload: false,
676
+ cancel: isRunning,
677
+ speech: false,
678
+ attachments: false,
679
+ feedback: false,
680
+ voice: false,
681
+ switchToBranch: hasBranches,
682
+ switchBranchDuringRun: false,
683
+ unstable_copy: false,
684
+ dictation: false,
685
+ queue: hasQueue
686
+ };
687
+ $[30] = hasBranches;
688
+ $[31] = hasQueue;
689
+ $[32] = isRunning;
690
+ $[33] = t10;
691
+ } else t10 = $[33];
692
+ let t11;
693
+ let t12;
694
+ if ($[34] === Symbol.for("react.memo_cache_sentinel")) {
695
+ t11 = {};
696
+ t12 = [];
697
+ $[34] = t11;
698
+ $[35] = t12;
699
+ } else {
700
+ t11 = $[34];
701
+ t12 = $[35];
702
+ }
703
+ let t13;
704
+ if ($[36] !== composerClient.state || $[37] !== isRunning || $[38] !== messageStates || $[39] !== t10 || $[40] !== t9) {
705
+ t13 = {
706
+ isEmpty: t9,
299
707
  isDisabled: false,
300
708
  isLoading: false,
301
709
  isRunning,
302
- capabilities: {
303
- edit: false,
304
- reload: false,
305
- cancel: isRunning,
306
- speech: false,
307
- attachments: false,
308
- feedback: false,
309
- voice: false,
310
- switchToBranch: false,
311
- switchBranchDuringRun: false,
312
- unstable_copy: false,
313
- dictation: false,
314
- queue: hasQueue
315
- },
710
+ capabilities: t10,
316
711
  messages: messageStates,
317
- state: {},
318
- suggestions: [],
712
+ state: t11,
713
+ suggestions: t12,
319
714
  extras: void 0,
320
715
  speech: void 0,
321
716
  voice: void 0,
322
717
  composer: composerClient.state
323
718
  };
324
- }, [
325
- messages,
326
- isRunning,
327
- hasQueue,
328
- messageClients.state,
329
- composerClient.state
330
- ]);
331
- return {
332
- getState: () => state,
333
- composer: () => composerClient.methods,
334
- append: (message) => {
335
- const appendMessage = typeof message === "string" ? {
719
+ $[36] = composerClient.state;
720
+ $[37] = isRunning;
721
+ $[38] = messageStates;
722
+ $[39] = t10;
723
+ $[40] = t9;
724
+ $[41] = t13;
725
+ } else t13 = $[41];
726
+ const state = t13;
727
+ let t14;
728
+ if ($[42] !== state) {
729
+ t14 = () => state;
730
+ $[42] = state;
731
+ $[43] = t14;
732
+ } else t14 = $[43];
733
+ let t15;
734
+ if ($[44] !== composerClient.methods) {
735
+ t15 = () => composerClient.methods;
736
+ $[44] = composerClient.methods;
737
+ $[45] = t15;
738
+ } else t15 = $[45];
739
+ let t16;
740
+ if ($[46] !== messages || $[47] !== onNew || $[48] !== queue) {
741
+ t16 = (message_0) => {
742
+ const appendMessage = typeof message_0 === "string" ? {
336
743
  createdAt: /* @__PURE__ */ new Date(),
337
744
  parentId: messages.at(-1)?.id ?? null,
338
745
  sourceId: null,
@@ -340,50 +747,81 @@ const ExternalThread = resource(function ExternalThread({ messages, isRunning =
340
747
  role: "user",
341
748
  content: [{
342
749
  type: "text",
343
- text: message
750
+ text: message_0
344
751
  }],
345
752
  attachments: [],
346
753
  metadata: { custom: {} }
347
754
  } : {
348
- createdAt: message.createdAt ?? /* @__PURE__ */ new Date(),
349
- parentId: message.parentId ?? messages.at(-1)?.id ?? null,
350
- sourceId: message.sourceId ?? null,
351
- role: message.role ?? "user",
352
- content: message.content,
353
- attachments: message.attachments ?? [],
354
- metadata: message.metadata ?? { custom: {} },
355
- runConfig: message.runConfig ?? {},
356
- startRun: message.startRun
755
+ createdAt: message_0.createdAt ?? /* @__PURE__ */ new Date(),
756
+ parentId: message_0.parentId ?? messages.at(-1)?.id ?? null,
757
+ sourceId: message_0.sourceId ?? null,
758
+ role: message_0.role ?? "user",
759
+ content: message_0.content,
760
+ attachments: message_0.attachments ?? [],
761
+ metadata: message_0.metadata ?? { custom: {} },
762
+ runConfig: message_0.runConfig ?? {},
763
+ startRun: message_0.startRun
357
764
  };
358
765
  if (queue) queue.enqueue(appendMessage, { steer: false });
359
766
  else onNew?.(appendMessage);
360
- },
361
- startRun: () => {
767
+ };
768
+ $[46] = messages;
769
+ $[47] = onNew;
770
+ $[48] = queue;
771
+ $[49] = t16;
772
+ } else t16 = $[49];
773
+ let t17;
774
+ if ($[50] !== onStartRun) {
775
+ t17 = () => {
362
776
  onStartRun?.();
363
- },
364
- resumeRun: () => {},
365
- cancelRun: handleCancelRun,
366
- getModelContext: () => ({
367
- tools: {},
368
- config: {}
369
- }),
370
- export: () => ({ messages: [] }),
371
- import: () => {},
372
- reset: () => {},
373
- message: (selector) => {
777
+ };
778
+ $[50] = onStartRun;
779
+ $[51] = t17;
780
+ } else t17 = $[51];
781
+ let t18;
782
+ if ($[52] !== messageClients) {
783
+ t18 = (selector) => {
374
784
  if ("id" in selector) return messageClients.get({ key: selector.id });
375
785
  return messageClients.get(selector);
376
- },
377
- stopSpeaking: () => {},
378
- connectVoice: () => {},
379
- disconnectVoice: () => {},
380
- getVoiceVolume: () => 0,
381
- subscribeVoiceVolume: () => () => {},
382
- muteVoice: () => {},
383
- unmuteVoice: () => {}
384
- };
385
- });
386
- attachTransformScopes(ExternalThread, (scopes, parent) => {
786
+ };
787
+ $[52] = messageClients;
788
+ $[53] = t18;
789
+ } else t18 = $[53];
790
+ let t19;
791
+ if ($[54] !== handleCancelRun || $[55] !== t14 || $[56] !== t15 || $[57] !== t16 || $[58] !== t17 || $[59] !== t18) {
792
+ t19 = {
793
+ getState: t14,
794
+ composer: t15,
795
+ append: t16,
796
+ deleteMessage: _temp12,
797
+ startRun: t17,
798
+ resumeRun: _temp13,
799
+ cancelRun: handleCancelRun,
800
+ getModelContext: _temp14,
801
+ export: _temp15,
802
+ import: _temp16,
803
+ reset: _temp17,
804
+ message: t18,
805
+ stopSpeaking: _temp18,
806
+ connectVoice: _temp19,
807
+ disconnectVoice: _temp20,
808
+ getVoiceVolume: _temp21,
809
+ subscribeVoiceVolume: _temp23,
810
+ muteVoice: _temp24,
811
+ unmuteVoice: _temp25
812
+ };
813
+ $[54] = handleCancelRun;
814
+ $[55] = t14;
815
+ $[56] = t15;
816
+ $[57] = t16;
817
+ $[58] = t17;
818
+ $[59] = t18;
819
+ $[60] = t19;
820
+ } else t19 = $[60];
821
+ return t19;
822
+ };
823
+ const ExternalThread = resource(useExternalThread);
824
+ attachTransformScopes(useExternalThread, (scopes, parent) => {
387
825
  if (!scopes.threads && parent.threads.source === null) {
388
826
  const threadElement = scopes.thread;
389
827
  scopes.threads = SingleThreadList({ thread: threadElement });
@@ -408,6 +846,58 @@ attachTransformScopes(ExternalThread, (scopes, parent) => {
408
846
  if (!scopes.dataRenderers && parent.dataRenderers.source === null) scopes.dataRenderers = DataRenderers();
409
847
  if (!scopes.suggestions && parent.suggestions.source === null) scopes.suggestions = Suggestions();
410
848
  });
849
+ function _temp() {}
850
+ function _temp2(attachment) {
851
+ return withKey(attachment.id, AttachmentResource({
852
+ attachment,
853
+ onRemove: _temp
854
+ }));
855
+ }
856
+ function _temp3() {}
857
+ function _temp4() {}
858
+ function _temp5() {}
859
+ function _temp6() {}
860
+ function _temp7() {}
861
+ function _temp8() {}
862
+ function _temp9(part) {
863
+ return part.type === "text";
864
+ }
865
+ function _temp0(part_0) {
866
+ return "text" in part_0 ? part_0.text : "";
867
+ }
868
+ function _temp1() {}
869
+ function _temp10() {}
870
+ function _temp11(s, idx, arr) {
871
+ return {
872
+ ...s,
873
+ isLast: idx === arr.length - 1
874
+ };
875
+ }
876
+ function _temp12() {}
877
+ function _temp13() {}
878
+ function _temp14() {
879
+ return {
880
+ tools: {},
881
+ config: {}
882
+ };
883
+ }
884
+ function _temp15() {
885
+ return { messages: [] };
886
+ }
887
+ function _temp16() {}
888
+ function _temp17() {}
889
+ function _temp18() {}
890
+ function _temp19() {}
891
+ function _temp20() {}
892
+ function _temp21() {
893
+ return 0;
894
+ }
895
+ function _temp22() {}
896
+ function _temp23() {
897
+ return _temp22;
898
+ }
899
+ function _temp24() {}
900
+ function _temp25() {}
411
901
  //#endregion
412
902
  export { ExternalThread };
413
903