@ulearning/ai-sdk 0.0.0-stage → 1.0.0-next.0

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 (1133) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +12 -2
  3. package/dist/_virtual/_rolldown/runtime.js +12 -0
  4. package/dist/adapters/OpenAIRealtimeVoiceAdapter.d.ts +22 -0
  5. package/dist/adapters/OpenAIRealtimeVoiceAdapter.d.ts.map +1 -0
  6. package/dist/adapters/OpenAIRealtimeVoiceAdapter.js +296 -0
  7. package/dist/adapters/OpenAIRealtimeVoiceAdapter.js.map +1 -0
  8. package/dist/assistant-transport.d.ts +33 -0
  9. package/dist/assistant-transport.d.ts.map +1 -0
  10. package/dist/assistant-transport.js +18 -0
  11. package/dist/assistant-transport.js.map +1 -0
  12. package/dist/augmentations.d.ts +33 -0
  13. package/dist/augmentations.d.ts.map +1 -0
  14. package/dist/augmentations.js +0 -0
  15. package/dist/context/ReadonlyStore.d.ts +4 -0
  16. package/dist/context/ReadonlyStore.d.ts.map +1 -0
  17. package/dist/context/ReadonlyStore.js +7 -0
  18. package/dist/context/ReadonlyStore.js.map +1 -0
  19. package/dist/context/index.d.ts +13 -0
  20. package/dist/context/index.d.ts.map +1 -0
  21. package/dist/context/index.js +12 -0
  22. package/dist/context/providers/AttachmentByIndexProvider.d.ts +2 -0
  23. package/dist/context/providers/AttachmentByIndexProvider.d.ts.map +1 -0
  24. package/dist/context/providers/AttachmentByIndexProvider.js +2 -0
  25. package/dist/context/providers/ChainOfThoughtByIndicesProvider.d.ts +2 -0
  26. package/dist/context/providers/ChainOfThoughtByIndicesProvider.d.ts.map +1 -0
  27. package/dist/context/providers/ChainOfThoughtByIndicesProvider.js +2 -0
  28. package/dist/context/providers/MessageByIndexProvider.d.ts +2 -0
  29. package/dist/context/providers/MessageByIndexProvider.d.ts.map +1 -0
  30. package/dist/context/providers/MessageByIndexProvider.js +2 -0
  31. package/dist/context/providers/MessageProvider.d.ts +3 -0
  32. package/dist/context/providers/MessageProvider.d.ts.map +1 -0
  33. package/dist/context/providers/MessageProvider.js +25 -0
  34. package/dist/context/providers/MessageProvider.js.map +1 -0
  35. package/dist/context/providers/PartByIndexProvider.d.ts +2 -0
  36. package/dist/context/providers/PartByIndexProvider.d.ts.map +1 -0
  37. package/dist/context/providers/PartByIndexProvider.js +2 -0
  38. package/dist/context/providers/SuggestionByIndexProvider.d.ts +2 -0
  39. package/dist/context/providers/SuggestionByIndexProvider.d.ts.map +1 -0
  40. package/dist/context/providers/SuggestionByIndexProvider.js +2 -0
  41. package/dist/context/providers/TextMessagePartProvider.d.ts +2 -0
  42. package/dist/context/providers/TextMessagePartProvider.d.ts.map +1 -0
  43. package/dist/context/providers/TextMessagePartProvider.js +2 -0
  44. package/dist/context/providers/ThreadListItemProvider.d.ts +2 -0
  45. package/dist/context/providers/ThreadListItemProvider.d.ts.map +1 -0
  46. package/dist/context/providers/ThreadListItemProvider.js +2 -0
  47. package/dist/context/providers/ThreadViewportProvider.d.ts +6 -0
  48. package/dist/context/providers/ThreadViewportProvider.d.ts.map +1 -0
  49. package/dist/context/providers/ThreadViewportProvider.js +32 -0
  50. package/dist/context/providers/ThreadViewportProvider.js.map +1 -0
  51. package/dist/context/stores/ThreadViewport.d.ts +88 -0
  52. package/dist/context/stores/ThreadViewport.d.ts.map +1 -0
  53. package/dist/context/stores/ThreadViewport.js +130 -0
  54. package/dist/context/stores/ThreadViewport.js.map +1 -0
  55. package/dist/context/vue/ThreadViewportContext.d.ts +24 -0
  56. package/dist/context/vue/ThreadViewportContext.d.ts.map +1 -0
  57. package/dist/context/vue/ThreadViewportContext.js +10 -0
  58. package/dist/context/vue/ThreadViewportContext.js.map +1 -0
  59. package/dist/context/vue/utils/createContextHook.d.ts +11 -0
  60. package/dist/context/vue/utils/createContextHook.d.ts.map +1 -0
  61. package/dist/context/vue/utils/createContextHook.js +20 -0
  62. package/dist/context/vue/utils/createContextHook.js.map +1 -0
  63. package/dist/context/vue/utils/createContextStoreHook.d.ts +22 -0
  64. package/dist/context/vue/utils/createContextStoreHook.d.ts.map +1 -0
  65. package/dist/context/vue/utils/createContextStoreHook.js +48 -0
  66. package/dist/context/vue/utils/createContextStoreHook.js.map +1 -0
  67. package/dist/devtools/DevToolsHooks.d.ts +32 -0
  68. package/dist/devtools/DevToolsHooks.d.ts.map +1 -0
  69. package/dist/devtools/DevToolsHooks.js +84 -0
  70. package/dist/devtools/DevToolsHooks.js.map +1 -0
  71. package/dist/hooks/useMessageQuote.d.ts +17 -0
  72. package/dist/hooks/useMessageQuote.d.ts.map +1 -0
  73. package/dist/hooks/useMessageQuote.js +23 -0
  74. package/dist/hooks/useMessageQuote.js.map +1 -0
  75. package/dist/hooks/useMessageTiming.d.ts +17 -0
  76. package/dist/hooks/useMessageTiming.d.ts.map +1 -0
  77. package/dist/hooks/useMessageTiming.js +22 -0
  78. package/dist/hooks/useMessageTiming.js.map +1 -0
  79. package/dist/hooks/useToolCallElapsed.d.ts +22 -0
  80. package/dist/hooks/useToolCallElapsed.d.ts.map +1 -0
  81. package/dist/hooks/useToolCallElapsed.js +54 -0
  82. package/dist/hooks/useToolCallElapsed.js.map +1 -0
  83. package/dist/index.d.ts +155 -0
  84. package/dist/index.d.ts.map +1 -0
  85. package/dist/index.js +64 -0
  86. package/dist/internal.d.ts +9 -0
  87. package/dist/internal.d.ts.map +1 -0
  88. package/dist/internal.js +24 -0
  89. package/dist/internal.js.map +1 -0
  90. package/dist/legacy-runtime/AssistantRuntimeProvider.d.ts +13 -0
  91. package/dist/legacy-runtime/AssistantRuntimeProvider.d.ts.map +1 -0
  92. package/dist/legacy-runtime/AssistantRuntimeProvider.js +37 -0
  93. package/dist/legacy-runtime/AssistantRuntimeProvider.js.map +1 -0
  94. package/dist/mcp-apps/McpAppRenderer.d.ts +60 -0
  95. package/dist/mcp-apps/McpAppRenderer.d.ts.map +1 -0
  96. package/dist/mcp-apps/McpAppRenderer.js +223 -0
  97. package/dist/mcp-apps/McpAppRenderer.js.map +1 -0
  98. package/dist/mcp-apps/McpAppsRemoteHost.d.ts +3 -0
  99. package/dist/mcp-apps/McpAppsRemoteHost.d.ts.map +1 -0
  100. package/dist/mcp-apps/McpAppsRemoteHost.js +101 -0
  101. package/dist/mcp-apps/McpAppsRemoteHost.js.map +1 -0
  102. package/dist/mcp-apps/app-frame.d.ts +3 -0
  103. package/dist/mcp-apps/app-frame.d.ts.map +1 -0
  104. package/dist/mcp-apps/app-frame.js +213 -0
  105. package/dist/mcp-apps/app-frame.js.map +1 -0
  106. package/dist/mcp-apps/bridge.d.ts +18 -0
  107. package/dist/mcp-apps/bridge.d.ts.map +1 -0
  108. package/dist/mcp-apps/bridge.js +319 -0
  109. package/dist/mcp-apps/bridge.js.map +1 -0
  110. package/dist/mcp-apps/csp.d.ts +4 -0
  111. package/dist/mcp-apps/csp.d.ts.map +1 -0
  112. package/dist/mcp-apps/csp.js +92 -0
  113. package/dist/mcp-apps/csp.js.map +1 -0
  114. package/dist/mcp-apps/index.d.ts +5 -0
  115. package/dist/mcp-apps/index.d.ts.map +1 -0
  116. package/dist/mcp-apps/index.js +4 -0
  117. package/dist/mcp-apps/types.d.ts +161 -0
  118. package/dist/mcp-apps/types.d.ts.map +1 -0
  119. package/dist/mcp-apps/types.js +6 -0
  120. package/dist/mcp-apps/types.js.map +1 -0
  121. package/dist/mcp-apps/utils.d.ts +12 -0
  122. package/dist/mcp-apps/utils.d.ts.map +1 -0
  123. package/dist/mcp-apps/utils.js +18 -0
  124. package/dist/mcp-apps/utils.js.map +1 -0
  125. package/dist/model-context/frame/useAssistantFrameHost.d.ts +35 -0
  126. package/dist/model-context/frame/useAssistantFrameHost.d.ts.map +1 -0
  127. package/dist/model-context/frame/useAssistantFrameHost.js +109 -0
  128. package/dist/model-context/frame/useAssistantFrameHost.js.map +1 -0
  129. package/dist/model-context/makeAssistantVisible.d.ts +11 -0
  130. package/dist/model-context/makeAssistantVisible.d.ts.map +1 -0
  131. package/dist/model-context/makeAssistantVisible.js +102 -0
  132. package/dist/model-context/makeAssistantVisible.js.map +1 -0
  133. package/dist/primitives/actionBar/ActionBarCopy.d.ts +45 -0
  134. package/dist/primitives/actionBar/ActionBarCopy.d.ts.map +1 -0
  135. package/dist/primitives/actionBar/ActionBarCopy.js +71 -0
  136. package/dist/primitives/actionBar/ActionBarCopy.js.map +1 -0
  137. package/dist/primitives/actionBar/ActionBarEdit.d.ts +55 -0
  138. package/dist/primitives/actionBar/ActionBarEdit.d.ts.map +1 -0
  139. package/dist/primitives/actionBar/ActionBarEdit.js +47 -0
  140. package/dist/primitives/actionBar/ActionBarEdit.js.map +1 -0
  141. package/dist/primitives/actionBar/ActionBarExportMarkdown.d.ts +26 -0
  142. package/dist/primitives/actionBar/ActionBarExportMarkdown.d.ts.map +1 -0
  143. package/dist/primitives/actionBar/ActionBarExportMarkdown.js +39 -0
  144. package/dist/primitives/actionBar/ActionBarExportMarkdown.js.map +1 -0
  145. package/dist/primitives/actionBar/ActionBarFeedbackNegative.d.ts +13 -0
  146. package/dist/primitives/actionBar/ActionBarFeedbackNegative.d.ts.map +1 -0
  147. package/dist/primitives/actionBar/ActionBarFeedbackNegative.js +28 -0
  148. package/dist/primitives/actionBar/ActionBarFeedbackNegative.js.map +1 -0
  149. package/dist/primitives/actionBar/ActionBarFeedbackPositive.d.ts +13 -0
  150. package/dist/primitives/actionBar/ActionBarFeedbackPositive.d.ts.map +1 -0
  151. package/dist/primitives/actionBar/ActionBarFeedbackPositive.js +28 -0
  152. package/dist/primitives/actionBar/ActionBarFeedbackPositive.js.map +1 -0
  153. package/dist/primitives/actionBar/ActionBarInteractionContext.d.ts +7 -0
  154. package/dist/primitives/actionBar/ActionBarInteractionContext.d.ts.map +1 -0
  155. package/dist/primitives/actionBar/ActionBarInteractionContext.js +8 -0
  156. package/dist/primitives/actionBar/ActionBarInteractionContext.js.map +1 -0
  157. package/dist/primitives/actionBar/ActionBarReload.d.ts +56 -0
  158. package/dist/primitives/actionBar/ActionBarReload.d.ts.map +1 -0
  159. package/dist/primitives/actionBar/ActionBarReload.js +48 -0
  160. package/dist/primitives/actionBar/ActionBarReload.js.map +1 -0
  161. package/dist/primitives/actionBar/ActionBarRoot.d.ts +78 -0
  162. package/dist/primitives/actionBar/ActionBarRoot.d.ts.map +1 -0
  163. package/dist/primitives/actionBar/ActionBarRoot.js +69 -0
  164. package/dist/primitives/actionBar/ActionBarRoot.js.map +1 -0
  165. package/dist/primitives/actionBar/ActionBarSpeak.d.ts +17 -0
  166. package/dist/primitives/actionBar/ActionBarSpeak.d.ts.map +1 -0
  167. package/dist/primitives/actionBar/ActionBarSpeak.js +13 -0
  168. package/dist/primitives/actionBar/ActionBarSpeak.js.map +1 -0
  169. package/dist/primitives/actionBar/ActionBarStopSpeaking.d.ts +17 -0
  170. package/dist/primitives/actionBar/ActionBarStopSpeaking.d.ts.map +1 -0
  171. package/dist/primitives/actionBar/ActionBarStopSpeaking.js +13 -0
  172. package/dist/primitives/actionBar/ActionBarStopSpeaking.js.map +1 -0
  173. package/dist/primitives/actionBar/useActionBarFloatStatus.d.ts +15 -0
  174. package/dist/primitives/actionBar/useActionBarFloatStatus.d.ts.map +1 -0
  175. package/dist/primitives/actionBar/useActionBarFloatStatus.js +24 -0
  176. package/dist/primitives/actionBar/useActionBarFloatStatus.js.map +1 -0
  177. package/dist/primitives/actionBar.d.ts +10 -0
  178. package/dist/primitives/actionBar.d.ts.map +1 -0
  179. package/dist/primitives/actionBar.js +25 -0
  180. package/dist/primitives/actionBar.js.map +1 -0
  181. package/dist/primitives/actionBarMore/ActionBarMoreContent.d.ts +47 -0
  182. package/dist/primitives/actionBarMore/ActionBarMoreContent.d.ts.map +1 -0
  183. package/dist/primitives/actionBarMore/ActionBarMoreContent.js +29 -0
  184. package/dist/primitives/actionBarMore/ActionBarMoreContent.js.map +1 -0
  185. package/dist/primitives/actionBarMore/ActionBarMoreItem.d.ts +19 -0
  186. package/dist/primitives/actionBarMore/ActionBarMoreItem.d.ts.map +1 -0
  187. package/dist/primitives/actionBarMore/ActionBarMoreItem.js +24 -0
  188. package/dist/primitives/actionBarMore/ActionBarMoreItem.js.map +1 -0
  189. package/dist/primitives/actionBarMore/ActionBarMoreRoot.d.ts +10 -0
  190. package/dist/primitives/actionBarMore/ActionBarMoreRoot.d.ts.map +1 -0
  191. package/dist/primitives/actionBarMore/ActionBarMoreRoot.js +39 -0
  192. package/dist/primitives/actionBarMore/ActionBarMoreRoot.js.map +1 -0
  193. package/dist/primitives/actionBarMore/ActionBarMoreSeparator.d.ts +16 -0
  194. package/dist/primitives/actionBarMore/ActionBarMoreSeparator.d.ts.map +1 -0
  195. package/dist/primitives/actionBarMore/ActionBarMoreSeparator.js +24 -0
  196. package/dist/primitives/actionBarMore/ActionBarMoreSeparator.js.map +1 -0
  197. package/dist/primitives/actionBarMore/ActionBarMoreTrigger.d.ts +17 -0
  198. package/dist/primitives/actionBarMore/ActionBarMoreTrigger.d.ts.map +1 -0
  199. package/dist/primitives/actionBarMore/ActionBarMoreTrigger.js +24 -0
  200. package/dist/primitives/actionBarMore/ActionBarMoreTrigger.js.map +1 -0
  201. package/dist/primitives/actionBarMore/scope.d.ts +5 -0
  202. package/dist/primitives/actionBarMore/scope.d.ts.map +1 -0
  203. package/dist/primitives/actionBarMore/scope.js +7 -0
  204. package/dist/primitives/actionBarMore/scope.js.map +1 -0
  205. package/dist/primitives/actionBarMore.d.ts +6 -0
  206. package/dist/primitives/actionBarMore.d.ts.map +1 -0
  207. package/dist/primitives/actionBarMore.js +17 -0
  208. package/dist/primitives/actionBarMore.js.map +1 -0
  209. package/dist/primitives/assistantModal/AssistantModalAnchor.d.ts +17 -0
  210. package/dist/primitives/assistantModal/AssistantModalAnchor.d.ts.map +1 -0
  211. package/dist/primitives/assistantModal/AssistantModalAnchor.js +24 -0
  212. package/dist/primitives/assistantModal/AssistantModalAnchor.js.map +1 -0
  213. package/dist/primitives/assistantModal/AssistantModalContent.d.ts +50 -0
  214. package/dist/primitives/assistantModal/AssistantModalContent.d.ts.map +1 -0
  215. package/dist/primitives/assistantModal/AssistantModalContent.js +42 -0
  216. package/dist/primitives/assistantModal/AssistantModalContent.js.map +1 -0
  217. package/dist/primitives/assistantModal/AssistantModalRoot.d.ts +14 -0
  218. package/dist/primitives/assistantModal/AssistantModalRoot.d.ts.map +1 -0
  219. package/dist/primitives/assistantModal/AssistantModalRoot.js +35 -0
  220. package/dist/primitives/assistantModal/AssistantModalRoot.js.map +1 -0
  221. package/dist/primitives/assistantModal/AssistantModalTrigger.d.ts +16 -0
  222. package/dist/primitives/assistantModal/AssistantModalTrigger.d.ts.map +1 -0
  223. package/dist/primitives/assistantModal/AssistantModalTrigger.js +24 -0
  224. package/dist/primitives/assistantModal/AssistantModalTrigger.js.map +1 -0
  225. package/dist/primitives/assistantModal/popoverRenderPrimitives.d.ts +139 -0
  226. package/dist/primitives/assistantModal/popoverRenderPrimitives.d.ts.map +1 -0
  227. package/dist/primitives/assistantModal/popoverRenderPrimitives.js +9 -0
  228. package/dist/primitives/assistantModal/popoverRenderPrimitives.js.map +1 -0
  229. package/dist/primitives/assistantModal/scope.d.ts +5 -0
  230. package/dist/primitives/assistantModal/scope.d.ts.map +1 -0
  231. package/dist/primitives/assistantModal/scope.js +7 -0
  232. package/dist/primitives/assistantModal/scope.js.map +1 -0
  233. package/dist/primitives/assistantModal.d.ts +5 -0
  234. package/dist/primitives/assistantModal.d.ts.map +1 -0
  235. package/dist/primitives/assistantModal.js +15 -0
  236. package/dist/primitives/assistantModal.js.map +1 -0
  237. package/dist/primitives/attachment/AttachmentName.d.ts +5 -0
  238. package/dist/primitives/attachment/AttachmentName.d.ts.map +1 -0
  239. package/dist/primitives/attachment/AttachmentName.js +14 -0
  240. package/dist/primitives/attachment/AttachmentName.js.map +1 -0
  241. package/dist/primitives/attachment/AttachmentRemove.d.ts +17 -0
  242. package/dist/primitives/attachment/AttachmentRemove.d.ts.map +1 -0
  243. package/dist/primitives/attachment/AttachmentRemove.js +15 -0
  244. package/dist/primitives/attachment/AttachmentRemove.js.map +1 -0
  245. package/dist/primitives/attachment/AttachmentRoot.d.ts +30 -0
  246. package/dist/primitives/attachment/AttachmentRoot.d.ts.map +1 -0
  247. package/dist/primitives/attachment/AttachmentRoot.js +40 -0
  248. package/dist/primitives/attachment/AttachmentRoot.js.map +1 -0
  249. package/dist/primitives/attachment/AttachmentThumb.d.ts +12 -0
  250. package/dist/primitives/attachment/AttachmentThumb.d.ts.map +1 -0
  251. package/dist/primitives/attachment/AttachmentThumb.js +32 -0
  252. package/dist/primitives/attachment/AttachmentThumb.js.map +1 -0
  253. package/dist/primitives/attachment.d.ts +7 -0
  254. package/dist/primitives/attachment.d.ts.map +1 -0
  255. package/dist/primitives/attachment.js +15 -0
  256. package/dist/primitives/attachment.js.map +1 -0
  257. package/dist/primitives/branchPicker/BranchPickerCount.d.ts +22 -0
  258. package/dist/primitives/branchPicker/BranchPickerCount.d.ts.map +1 -0
  259. package/dist/primitives/branchPicker/BranchPickerCount.js +27 -0
  260. package/dist/primitives/branchPicker/BranchPickerCount.js.map +1 -0
  261. package/dist/primitives/branchPicker/BranchPickerNext.d.ts +34 -0
  262. package/dist/primitives/branchPicker/BranchPickerNext.d.ts.map +1 -0
  263. package/dist/primitives/branchPicker/BranchPickerNext.js +26 -0
  264. package/dist/primitives/branchPicker/BranchPickerNext.js.map +1 -0
  265. package/dist/primitives/branchPicker/BranchPickerNumber.d.ts +5 -0
  266. package/dist/primitives/branchPicker/BranchPickerNumber.d.ts.map +1 -0
  267. package/dist/primitives/branchPicker/BranchPickerNumber.js +14 -0
  268. package/dist/primitives/branchPicker/BranchPickerNumber.js.map +1 -0
  269. package/dist/primitives/branchPicker/BranchPickerPrevious.d.ts +34 -0
  270. package/dist/primitives/branchPicker/BranchPickerPrevious.d.ts.map +1 -0
  271. package/dist/primitives/branchPicker/BranchPickerPrevious.js +26 -0
  272. package/dist/primitives/branchPicker/BranchPickerPrevious.js.map +1 -0
  273. package/dist/primitives/branchPicker/BranchPickerRoot.d.ts +43 -0
  274. package/dist/primitives/branchPicker/BranchPickerRoot.d.ts.map +1 -0
  275. package/dist/primitives/branchPicker/BranchPickerRoot.js +46 -0
  276. package/dist/primitives/branchPicker/BranchPickerRoot.js.map +1 -0
  277. package/dist/primitives/branchPicker.d.ts +6 -0
  278. package/dist/primitives/branchPicker.d.ts.map +1 -0
  279. package/dist/primitives/branchPicker.js +17 -0
  280. package/dist/primitives/branchPicker.js.map +1 -0
  281. package/dist/primitives/chainOfThought/ChainOfThoughtAccordionTrigger.d.ts +30 -0
  282. package/dist/primitives/chainOfThought/ChainOfThoughtAccordionTrigger.d.ts.map +1 -0
  283. package/dist/primitives/chainOfThought/ChainOfThoughtAccordionTrigger.js +49 -0
  284. package/dist/primitives/chainOfThought/ChainOfThoughtAccordionTrigger.js.map +1 -0
  285. package/dist/primitives/chainOfThought/ChainOfThoughtParts.d.ts +2 -0
  286. package/dist/primitives/chainOfThought/ChainOfThoughtParts.d.ts.map +1 -0
  287. package/dist/primitives/chainOfThought/ChainOfThoughtParts.js +2 -0
  288. package/dist/primitives/chainOfThought/ChainOfThoughtRoot.d.ts +12 -0
  289. package/dist/primitives/chainOfThought/ChainOfThoughtRoot.d.ts.map +1 -0
  290. package/dist/primitives/chainOfThought/ChainOfThoughtRoot.js +26 -0
  291. package/dist/primitives/chainOfThought/ChainOfThoughtRoot.js.map +1 -0
  292. package/dist/primitives/chainOfThought.d.ts +4 -0
  293. package/dist/primitives/chainOfThought.d.ts.map +1 -0
  294. package/dist/primitives/chainOfThought.js +13 -0
  295. package/dist/primitives/chainOfThought.js.map +1 -0
  296. package/dist/primitives/composer/ComposerAddAttachment.d.ts +26 -0
  297. package/dist/primitives/composer/ComposerAddAttachment.d.ts.map +1 -0
  298. package/dist/primitives/composer/ComposerAddAttachment.js +56 -0
  299. package/dist/primitives/composer/ComposerAddAttachment.js.map +1 -0
  300. package/dist/primitives/composer/ComposerAttachmentDropzone.d.ts +16 -0
  301. package/dist/primitives/composer/ComposerAttachmentDropzone.d.ts.map +1 -0
  302. package/dist/primitives/composer/ComposerAttachmentDropzone.js +66 -0
  303. package/dist/primitives/composer/ComposerAttachmentDropzone.js.map +1 -0
  304. package/dist/primitives/composer/ComposerAttachments.d.ts +2 -0
  305. package/dist/primitives/composer/ComposerAttachments.d.ts.map +1 -0
  306. package/dist/primitives/composer/ComposerAttachments.js +2 -0
  307. package/dist/primitives/composer/ComposerCancel.d.ts +37 -0
  308. package/dist/primitives/composer/ComposerCancel.d.ts.map +1 -0
  309. package/dist/primitives/composer/ComposerCancel.js +32 -0
  310. package/dist/primitives/composer/ComposerCancel.js.map +1 -0
  311. package/dist/primitives/composer/ComposerCompactContext.d.ts +7 -0
  312. package/dist/primitives/composer/ComposerCompactContext.d.ts.map +1 -0
  313. package/dist/primitives/composer/ComposerCompactContext.js +8 -0
  314. package/dist/primitives/composer/ComposerCompactContext.js.map +1 -0
  315. package/dist/primitives/composer/ComposerDictate.d.ts +29 -0
  316. package/dist/primitives/composer/ComposerDictate.d.ts.map +1 -0
  317. package/dist/primitives/composer/ComposerDictate.js +25 -0
  318. package/dist/primitives/composer/ComposerDictate.js.map +1 -0
  319. package/dist/primitives/composer/ComposerDictationTranscript.d.ts +27 -0
  320. package/dist/primitives/composer/ComposerDictationTranscript.d.ts.map +1 -0
  321. package/dist/primitives/composer/ComposerDictationTranscript.js +42 -0
  322. package/dist/primitives/composer/ComposerDictationTranscript.js.map +1 -0
  323. package/dist/primitives/composer/ComposerIf.d.ts +3 -0
  324. package/dist/primitives/composer/ComposerIf.d.ts.map +1 -0
  325. package/dist/primitives/composer/ComposerIf.js +2 -0
  326. package/dist/primitives/composer/ComposerInput.d.ts +132 -0
  327. package/dist/primitives/composer/ComposerInput.d.ts.map +1 -0
  328. package/dist/primitives/composer/ComposerInput.js +239 -0
  329. package/dist/primitives/composer/ComposerInput.js.map +1 -0
  330. package/dist/primitives/composer/ComposerInputPluginContext.d.ts +40 -0
  331. package/dist/primitives/composer/ComposerInputPluginContext.d.ts.map +1 -0
  332. package/dist/primitives/composer/ComposerInputPluginContext.js +30 -0
  333. package/dist/primitives/composer/ComposerInputPluginContext.js.map +1 -0
  334. package/dist/primitives/composer/ComposerQueue.d.ts +2 -0
  335. package/dist/primitives/composer/ComposerQueue.d.ts.map +1 -0
  336. package/dist/primitives/composer/ComposerQueue.js +2 -0
  337. package/dist/primitives/composer/ComposerQuote.d.ts +58 -0
  338. package/dist/primitives/composer/ComposerQuote.d.ts.map +1 -0
  339. package/dist/primitives/composer/ComposerQuote.js +95 -0
  340. package/dist/primitives/composer/ComposerQuote.js.map +1 -0
  341. package/dist/primitives/composer/ComposerResume.d.ts +27 -0
  342. package/dist/primitives/composer/ComposerResume.d.ts.map +1 -0
  343. package/dist/primitives/composer/ComposerResume.js +24 -0
  344. package/dist/primitives/composer/ComposerResume.js.map +1 -0
  345. package/dist/primitives/composer/ComposerRoot.d.ts +56 -0
  346. package/dist/primitives/composer/ComposerRoot.d.ts.map +1 -0
  347. package/dist/primitives/composer/ComposerRoot.js +96 -0
  348. package/dist/primitives/composer/ComposerRoot.js.map +1 -0
  349. package/dist/primitives/composer/ComposerSend.d.ts +34 -0
  350. package/dist/primitives/composer/ComposerSend.d.ts.map +1 -0
  351. package/dist/primitives/composer/ComposerSend.js +28 -0
  352. package/dist/primitives/composer/ComposerSend.js.map +1 -0
  353. package/dist/primitives/composer/ComposerStopDictation.d.ts +29 -0
  354. package/dist/primitives/composer/ComposerStopDictation.d.ts.map +1 -0
  355. package/dist/primitives/composer/ComposerStopDictation.js +29 -0
  356. package/dist/primitives/composer/ComposerStopDictation.js.map +1 -0
  357. package/dist/primitives/composer/composerInputSelector.d.ts +3 -0
  358. package/dist/primitives/composer/composerInputSelector.d.ts.map +1 -0
  359. package/dist/primitives/composer/composerInputSelector.js +6 -0
  360. package/dist/primitives/composer/composerInputSelector.js.map +1 -0
  361. package/dist/primitives/composer/trigger/TriggerPopover.d.ts +63 -0
  362. package/dist/primitives/composer/trigger/TriggerPopover.d.ts.map +1 -0
  363. package/dist/primitives/composer/trigger/TriggerPopover.js +161 -0
  364. package/dist/primitives/composer/trigger/TriggerPopover.js.map +1 -0
  365. package/dist/primitives/composer/trigger/TriggerPopoverAction.d.ts +30 -0
  366. package/dist/primitives/composer/trigger/TriggerPopoverAction.d.ts.map +1 -0
  367. package/dist/primitives/composer/trigger/TriggerPopoverAction.js +49 -0
  368. package/dist/primitives/composer/trigger/TriggerPopoverAction.js.map +1 -0
  369. package/dist/primitives/composer/trigger/TriggerPopoverBack.d.ts +16 -0
  370. package/dist/primitives/composer/trigger/TriggerPopoverBack.d.ts.map +1 -0
  371. package/dist/primitives/composer/trigger/TriggerPopoverBack.js +34 -0
  372. package/dist/primitives/composer/trigger/TriggerPopoverBack.js.map +1 -0
  373. package/dist/primitives/composer/trigger/TriggerPopoverCategories.d.ts +34 -0
  374. package/dist/primitives/composer/trigger/TriggerPopoverCategories.d.ts.map +1 -0
  375. package/dist/primitives/composer/trigger/TriggerPopoverCategories.js +70 -0
  376. package/dist/primitives/composer/trigger/TriggerPopoverCategories.js.map +1 -0
  377. package/dist/primitives/composer/trigger/TriggerPopoverDirective.d.ts +27 -0
  378. package/dist/primitives/composer/trigger/TriggerPopoverDirective.d.ts.map +1 -0
  379. package/dist/primitives/composer/trigger/TriggerPopoverDirective.js +41 -0
  380. package/dist/primitives/composer/trigger/TriggerPopoverDirective.js.map +1 -0
  381. package/dist/primitives/composer/trigger/TriggerPopoverItems.d.ts +36 -0
  382. package/dist/primitives/composer/trigger/TriggerPopoverItems.d.ts.map +1 -0
  383. package/dist/primitives/composer/trigger/TriggerPopoverItems.js +71 -0
  384. package/dist/primitives/composer/trigger/TriggerPopoverItems.js.map +1 -0
  385. package/dist/primitives/composer/trigger/TriggerPopoverResource.d.ts +48 -0
  386. package/dist/primitives/composer/trigger/TriggerPopoverResource.d.ts.map +1 -0
  387. package/dist/primitives/composer/trigger/TriggerPopoverResource.js +67 -0
  388. package/dist/primitives/composer/trigger/TriggerPopoverResource.js.map +1 -0
  389. package/dist/primitives/composer/trigger/TriggerPopoverRootContext.d.ts +58 -0
  390. package/dist/primitives/composer/trigger/TriggerPopoverRootContext.d.ts.map +1 -0
  391. package/dist/primitives/composer/trigger/TriggerPopoverRootContext.js +128 -0
  392. package/dist/primitives/composer/trigger/TriggerPopoverRootContext.js.map +1 -0
  393. package/dist/primitives/composer/trigger/detectTrigger.d.ts +18 -0
  394. package/dist/primitives/composer/trigger/detectTrigger.d.ts.map +1 -0
  395. package/dist/primitives/composer/trigger/detectTrigger.js +39 -0
  396. package/dist/primitives/composer/trigger/detectTrigger.js.map +1 -0
  397. package/dist/primitives/composer/trigger/index.d.ts +20 -0
  398. package/dist/primitives/composer/trigger/index.d.ts.map +1 -0
  399. package/dist/primitives/composer/trigger/index.js +15 -0
  400. package/dist/primitives/composer/trigger/index.js.map +1 -0
  401. package/dist/primitives/composer/trigger/matchesTriggerItemQuery.d.ts +3 -0
  402. package/dist/primitives/composer/trigger/matchesTriggerItemQuery.d.ts.map +1 -0
  403. package/dist/primitives/composer/trigger/matchesTriggerItemQuery.js +8 -0
  404. package/dist/primitives/composer/trigger/matchesTriggerItemQuery.js.map +1 -0
  405. package/dist/primitives/composer/trigger/triggerDetectionResource.d.ts +17 -0
  406. package/dist/primitives/composer/trigger/triggerDetectionResource.d.ts.map +1 -0
  407. package/dist/primitives/composer/trigger/triggerDetectionResource.js +25 -0
  408. package/dist/primitives/composer/trigger/triggerDetectionResource.js.map +1 -0
  409. package/dist/primitives/composer/trigger/triggerKeyboardResource.d.ts +30 -0
  410. package/dist/primitives/composer/trigger/triggerKeyboardResource.d.ts.map +1 -0
  411. package/dist/primitives/composer/trigger/triggerKeyboardResource.js +85 -0
  412. package/dist/primitives/composer/trigger/triggerKeyboardResource.js.map +1 -0
  413. package/dist/primitives/composer/trigger/triggerNavigationResource.d.ts +23 -0
  414. package/dist/primitives/composer/trigger/triggerNavigationResource.d.ts.map +1 -0
  415. package/dist/primitives/composer/trigger/triggerNavigationResource.js +88 -0
  416. package/dist/primitives/composer/trigger/triggerNavigationResource.js.map +1 -0
  417. package/dist/primitives/composer/trigger/triggerSelectionResource.d.ts +37 -0
  418. package/dist/primitives/composer/trigger/triggerSelectionResource.d.ts.map +1 -0
  419. package/dist/primitives/composer/trigger/triggerSelectionResource.js +52 -0
  420. package/dist/primitives/composer/trigger/triggerSelectionResource.js.map +1 -0
  421. package/dist/primitives/composer/useComposerCancelWithFocus.d.ts +2 -0
  422. package/dist/primitives/composer/useComposerCancelWithFocus.d.ts.map +1 -0
  423. package/dist/primitives/composer/useComposerCancelWithFocus.js +31 -0
  424. package/dist/primitives/composer/useComposerCancelWithFocus.js.map +1 -0
  425. package/dist/primitives/composer/useComposerInputState.d.ts +11 -0
  426. package/dist/primitives/composer/useComposerInputState.d.ts.map +1 -0
  427. package/dist/primitives/composer/useComposerInputState.js +33 -0
  428. package/dist/primitives/composer/useComposerInputState.js.map +1 -0
  429. package/dist/primitives/composer/useTextareaAutosize.d.ts +13 -0
  430. package/dist/primitives/composer/useTextareaAutosize.d.ts.map +1 -0
  431. package/dist/primitives/composer/useTextareaAutosize.js +113 -0
  432. package/dist/primitives/composer/useTextareaAutosize.js.map +1 -0
  433. package/dist/primitives/composer.d.ts +73 -0
  434. package/dist/primitives/composer.d.ts.map +1 -0
  435. package/dist/primitives/composer.js +64 -0
  436. package/dist/primitives/composer.js.map +1 -0
  437. package/dist/primitives/dropdownMenuRenderPrimitives.d.ts +173 -0
  438. package/dist/primitives/dropdownMenuRenderPrimitives.d.ts.map +1 -0
  439. package/dist/primitives/dropdownMenuRenderPrimitives.js +10 -0
  440. package/dist/primitives/dropdownMenuRenderPrimitives.js.map +1 -0
  441. package/dist/primitives/error/ErrorMessage.d.ts +12 -0
  442. package/dist/primitives/error/ErrorMessage.d.ts.map +1 -0
  443. package/dist/primitives/error/ErrorMessage.js +27 -0
  444. package/dist/primitives/error/ErrorMessage.js.map +1 -0
  445. package/dist/primitives/error/ErrorRoot.d.ts +12 -0
  446. package/dist/primitives/error/ErrorRoot.d.ts.map +1 -0
  447. package/dist/primitives/error/ErrorRoot.js +27 -0
  448. package/dist/primitives/error/ErrorRoot.js.map +1 -0
  449. package/dist/primitives/error.d.ts +3 -0
  450. package/dist/primitives/error.d.ts.map +1 -0
  451. package/dist/primitives/error.js +11 -0
  452. package/dist/primitives/error.js.map +1 -0
  453. package/dist/primitives/message/MessageAttachments.d.ts +2 -0
  454. package/dist/primitives/message/MessageAttachments.d.ts.map +1 -0
  455. package/dist/primitives/message/MessageAttachments.js +2 -0
  456. package/dist/primitives/message/MessageError.d.ts +7 -0
  457. package/dist/primitives/message/MessageError.d.ts.map +1 -0
  458. package/dist/primitives/message/MessageError.js +14 -0
  459. package/dist/primitives/message/MessageError.js.map +1 -0
  460. package/dist/primitives/message/MessageIf.d.ts +27 -0
  461. package/dist/primitives/message/MessageIf.d.ts.map +1 -0
  462. package/dist/primitives/message/MessageIf.js +54 -0
  463. package/dist/primitives/message/MessageIf.js.map +1 -0
  464. package/dist/primitives/message/MessageParts.d.ts +7 -0
  465. package/dist/primitives/message/MessageParts.d.ts.map +1 -0
  466. package/dist/primitives/message/MessageParts.js +40 -0
  467. package/dist/primitives/message/MessageParts.js.map +1 -0
  468. package/dist/primitives/message/MessagePartsGrouped.d.ts +153 -0
  469. package/dist/primitives/message/MessagePartsGrouped.d.ts.map +1 -0
  470. package/dist/primitives/message/MessagePartsGrouped.js +114 -0
  471. package/dist/primitives/message/MessagePartsGrouped.js.map +1 -0
  472. package/dist/primitives/message/MessageRoot.d.ts +35 -0
  473. package/dist/primitives/message/MessageRoot.d.ts.map +1 -0
  474. package/dist/primitives/message/MessageRoot.js +104 -0
  475. package/dist/primitives/message/MessageRoot.js.map +1 -0
  476. package/dist/primitives/message.d.ts +13 -0
  477. package/dist/primitives/message.d.ts.map +1 -0
  478. package/dist/primitives/message.js +27 -0
  479. package/dist/primitives/message.js.map +1 -0
  480. package/dist/primitives/messagePart/MessagePartImage.d.ts +12 -0
  481. package/dist/primitives/messagePart/MessagePartImage.d.ts.map +1 -0
  482. package/dist/primitives/messagePart/MessagePartImage.js +27 -0
  483. package/dist/primitives/messagePart/MessagePartImage.js.map +1 -0
  484. package/dist/primitives/messagePart/MessagePartInProgress.d.ts +2 -0
  485. package/dist/primitives/messagePart/MessagePartInProgress.d.ts.map +1 -0
  486. package/dist/primitives/messagePart/MessagePartInProgress.js +2 -0
  487. package/dist/primitives/messagePart/MessagePartText.d.ts +19 -0
  488. package/dist/primitives/messagePart/MessagePartText.d.ts.map +1 -0
  489. package/dist/primitives/messagePart/MessagePartText.js +33 -0
  490. package/dist/primitives/messagePart/MessagePartText.js.map +1 -0
  491. package/dist/primitives/messagePart/useMessagePartData.d.ts +18 -0
  492. package/dist/primitives/messagePart/useMessagePartData.d.ts.map +1 -0
  493. package/dist/primitives/messagePart/useMessagePartData.js +32 -0
  494. package/dist/primitives/messagePart/useMessagePartData.js.map +1 -0
  495. package/dist/primitives/messagePart/useMessagePartFile.d.ts +19 -0
  496. package/dist/primitives/messagePart/useMessagePartFile.d.ts.map +1 -0
  497. package/dist/primitives/messagePart/useMessagePartFile.js +33 -0
  498. package/dist/primitives/messagePart/useMessagePartFile.js.map +1 -0
  499. package/dist/primitives/messagePart/useMessagePartImage.d.ts +19 -0
  500. package/dist/primitives/messagePart/useMessagePartImage.d.ts.map +1 -0
  501. package/dist/primitives/messagePart/useMessagePartImage.js +32 -0
  502. package/dist/primitives/messagePart/useMessagePartImage.js.map +1 -0
  503. package/dist/primitives/messagePart/useMessagePartReasoning.d.ts +19 -0
  504. package/dist/primitives/messagePart/useMessagePartReasoning.d.ts.map +1 -0
  505. package/dist/primitives/messagePart/useMessagePartReasoning.js +32 -0
  506. package/dist/primitives/messagePart/useMessagePartReasoning.js.map +1 -0
  507. package/dist/primitives/messagePart/useMessagePartSource.d.ts +39 -0
  508. package/dist/primitives/messagePart/useMessagePartSource.d.ts.map +1 -0
  509. package/dist/primitives/messagePart/useMessagePartSource.js +34 -0
  510. package/dist/primitives/messagePart/useMessagePartSource.js.map +1 -0
  511. package/dist/primitives/messagePart/useMessagePartText.d.ts +21 -0
  512. package/dist/primitives/messagePart/useMessagePartText.d.ts.map +1 -0
  513. package/dist/primitives/messagePart/useMessagePartText.js +32 -0
  514. package/dist/primitives/messagePart/useMessagePartText.js.map +1 -0
  515. package/dist/primitives/messagePart.d.ts +5 -0
  516. package/dist/primitives/messagePart.d.ts.map +1 -0
  517. package/dist/primitives/messagePart.js +15 -0
  518. package/dist/primitives/messagePart.js.map +1 -0
  519. package/dist/primitives/queueItem/QueueItemRemove.d.ts +25 -0
  520. package/dist/primitives/queueItem/QueueItemRemove.d.ts.map +1 -0
  521. package/dist/primitives/queueItem/QueueItemRemove.js +23 -0
  522. package/dist/primitives/queueItem/QueueItemRemove.js.map +1 -0
  523. package/dist/primitives/queueItem/QueueItemSteer.d.ts +25 -0
  524. package/dist/primitives/queueItem/QueueItemSteer.d.ts.map +1 -0
  525. package/dist/primitives/queueItem/QueueItemSteer.js +23 -0
  526. package/dist/primitives/queueItem/QueueItemSteer.js.map +1 -0
  527. package/dist/primitives/queueItem/QueueItemText.d.ts +20 -0
  528. package/dist/primitives/queueItem/QueueItemText.d.ts.map +1 -0
  529. package/dist/primitives/queueItem/QueueItemText.js +35 -0
  530. package/dist/primitives/queueItem/QueueItemText.js.map +1 -0
  531. package/dist/primitives/queueItem.d.ts +4 -0
  532. package/dist/primitives/queueItem.d.ts.map +1 -0
  533. package/dist/primitives/queueItem.js +13 -0
  534. package/dist/primitives/queueItem.js.map +1 -0
  535. package/dist/primitives/reasoning/useScrollLock.d.ts +29 -0
  536. package/dist/primitives/reasoning/useScrollLock.d.ts.map +1 -0
  537. package/dist/primitives/reasoning/useScrollLock.js +108 -0
  538. package/dist/primitives/reasoning/useScrollLock.js.map +1 -0
  539. package/dist/primitives/selectionToolbar/SelectionToolbarQuote.d.ts +13 -0
  540. package/dist/primitives/selectionToolbar/SelectionToolbarQuote.d.ts.map +1 -0
  541. package/dist/primitives/selectionToolbar/SelectionToolbarQuote.js +43 -0
  542. package/dist/primitives/selectionToolbar/SelectionToolbarQuote.js.map +1 -0
  543. package/dist/primitives/selectionToolbar/SelectionToolbarRoot.d.ts +20 -0
  544. package/dist/primitives/selectionToolbar/SelectionToolbarRoot.d.ts.map +1 -0
  545. package/dist/primitives/selectionToolbar/SelectionToolbarRoot.js +147 -0
  546. package/dist/primitives/selectionToolbar/SelectionToolbarRoot.js.map +1 -0
  547. package/dist/primitives/selectionToolbar.d.ts +3 -0
  548. package/dist/primitives/selectionToolbar.d.ts.map +1 -0
  549. package/dist/primitives/selectionToolbar.js +11 -0
  550. package/dist/primitives/selectionToolbar.js.map +1 -0
  551. package/dist/primitives/suggestion/SuggestionDescription.d.ts +13 -0
  552. package/dist/primitives/suggestion/SuggestionDescription.d.ts.map +1 -0
  553. package/dist/primitives/suggestion/SuggestionDescription.js +28 -0
  554. package/dist/primitives/suggestion/SuggestionDescription.js.map +1 -0
  555. package/dist/primitives/suggestion/SuggestionTitle.d.ts +20 -0
  556. package/dist/primitives/suggestion/SuggestionTitle.d.ts.map +1 -0
  557. package/dist/primitives/suggestion/SuggestionTitle.js +35 -0
  558. package/dist/primitives/suggestion/SuggestionTitle.js.map +1 -0
  559. package/dist/primitives/suggestion/SuggestionTrigger.d.ts +72 -0
  560. package/dist/primitives/suggestion/SuggestionTrigger.d.ts.map +1 -0
  561. package/dist/primitives/suggestion/SuggestionTrigger.js +29 -0
  562. package/dist/primitives/suggestion/SuggestionTrigger.js.map +1 -0
  563. package/dist/primitives/suggestion.d.ts +4 -0
  564. package/dist/primitives/suggestion.d.ts.map +1 -0
  565. package/dist/primitives/suggestion.js +13 -0
  566. package/dist/primitives/suggestion.js.map +1 -0
  567. package/dist/primitives/thread/ThreadEmpty.d.ts +11 -0
  568. package/dist/primitives/thread/ThreadEmpty.d.ts.map +1 -0
  569. package/dist/primitives/thread/ThreadEmpty.js +17 -0
  570. package/dist/primitives/thread/ThreadEmpty.js.map +1 -0
  571. package/dist/primitives/thread/ThreadIf.d.ts +19 -0
  572. package/dist/primitives/thread/ThreadIf.d.ts.map +1 -0
  573. package/dist/primitives/thread/ThreadIf.js +33 -0
  574. package/dist/primitives/thread/ThreadIf.js.map +1 -0
  575. package/dist/primitives/thread/ThreadLoadEarlier.d.ts +23 -0
  576. package/dist/primitives/thread/ThreadLoadEarlier.d.ts.map +1 -0
  577. package/dist/primitives/thread/ThreadLoadEarlier.js +23 -0
  578. package/dist/primitives/thread/ThreadLoadEarlier.js.map +1 -0
  579. package/dist/primitives/thread/ThreadMessages.d.ts +2 -0
  580. package/dist/primitives/thread/ThreadMessages.d.ts.map +1 -0
  581. package/dist/primitives/thread/ThreadMessages.js +2 -0
  582. package/dist/primitives/thread/ThreadRoot.d.ts +37 -0
  583. package/dist/primitives/thread/ThreadRoot.d.ts.map +1 -0
  584. package/dist/primitives/thread/ThreadRoot.js +84 -0
  585. package/dist/primitives/thread/ThreadRoot.js.map +1 -0
  586. package/dist/primitives/thread/ThreadRootElementContext.d.ts +4 -0
  587. package/dist/primitives/thread/ThreadRootElementContext.d.ts.map +1 -0
  588. package/dist/primitives/thread/ThreadRootElementContext.js +8 -0
  589. package/dist/primitives/thread/ThreadRootElementContext.js.map +1 -0
  590. package/dist/primitives/thread/ThreadScrollToBottom.d.ts +22 -0
  591. package/dist/primitives/thread/ThreadScrollToBottom.d.ts.map +1 -0
  592. package/dist/primitives/thread/ThreadScrollToBottom.js +17 -0
  593. package/dist/primitives/thread/ThreadScrollToBottom.js.map +1 -0
  594. package/dist/primitives/thread/ThreadSuggestion.d.ts +80 -0
  595. package/dist/primitives/thread/ThreadSuggestion.d.ts.map +1 -0
  596. package/dist/primitives/thread/ThreadSuggestion.js +23 -0
  597. package/dist/primitives/thread/ThreadSuggestion.js.map +1 -0
  598. package/dist/primitives/thread/ThreadSuggestions.d.ts +2 -0
  599. package/dist/primitives/thread/ThreadSuggestions.d.ts.map +1 -0
  600. package/dist/primitives/thread/ThreadSuggestions.js +2 -0
  601. package/dist/primitives/thread/ThreadViewport.d.ts +115 -0
  602. package/dist/primitives/thread/ThreadViewport.d.ts.map +1 -0
  603. package/dist/primitives/thread/ThreadViewport.js +96 -0
  604. package/dist/primitives/thread/ThreadViewport.js.map +1 -0
  605. package/dist/primitives/thread/ThreadViewportFooter.d.ts +13 -0
  606. package/dist/primitives/thread/ThreadViewportFooter.d.ts.map +1 -0
  607. package/dist/primitives/thread/ThreadViewportFooter.js +39 -0
  608. package/dist/primitives/thread/ThreadViewportFooter.js.map +1 -0
  609. package/dist/primitives/thread/topAnchor/computeTopAnchorSlack.d.ts +22 -0
  610. package/dist/primitives/thread/topAnchor/computeTopAnchorSlack.d.ts.map +1 -0
  611. package/dist/primitives/thread/topAnchor/computeTopAnchorSlack.js +51 -0
  612. package/dist/primitives/thread/topAnchor/computeTopAnchorSlack.js.map +1 -0
  613. package/dist/primitives/thread/topAnchor/createReserveObservers.d.ts +5 -0
  614. package/dist/primitives/thread/topAnchor/createReserveObservers.d.ts.map +1 -0
  615. package/dist/primitives/thread/topAnchor/createReserveObservers.js +37 -0
  616. package/dist/primitives/thread/topAnchor/createReserveObservers.js.map +1 -0
  617. package/dist/primitives/thread/topAnchor/mountTopAnchorReserve.d.ts +26 -0
  618. package/dist/primitives/thread/topAnchor/mountTopAnchorReserve.d.ts.map +1 -0
  619. package/dist/primitives/thread/topAnchor/mountTopAnchorReserve.js +139 -0
  620. package/dist/primitives/thread/topAnchor/mountTopAnchorReserve.js.map +1 -0
  621. package/dist/primitives/thread/topAnchor/topAnchorTurn.d.ts +27 -0
  622. package/dist/primitives/thread/topAnchor/topAnchorTurn.d.ts.map +1 -0
  623. package/dist/primitives/thread/topAnchor/topAnchorTurn.js +30 -0
  624. package/dist/primitives/thread/topAnchor/topAnchorTurn.js.map +1 -0
  625. package/dist/primitives/thread/topAnchor/topAnchorUtils.d.ts +15 -0
  626. package/dist/primitives/thread/topAnchor/topAnchorUtils.d.ts.map +1 -0
  627. package/dist/primitives/thread/topAnchor/topAnchorUtils.js +46 -0
  628. package/dist/primitives/thread/topAnchor/topAnchorUtils.js.map +1 -0
  629. package/dist/primitives/thread/topAnchor/useTopAnchorReserve.d.ts +8 -0
  630. package/dist/primitives/thread/topAnchor/useTopAnchorReserve.d.ts.map +1 -0
  631. package/dist/primitives/thread/topAnchor/useTopAnchorReserve.js +21 -0
  632. package/dist/primitives/thread/topAnchor/useTopAnchorReserve.js.map +1 -0
  633. package/dist/primitives/thread/useThreadViewportAutoScroll.d.ts +32 -0
  634. package/dist/primitives/thread/useThreadViewportAutoScroll.d.ts.map +1 -0
  635. package/dist/primitives/thread/useThreadViewportAutoScroll.js +74 -0
  636. package/dist/primitives/thread/useThreadViewportAutoScroll.js.map +1 -0
  637. package/dist/primitives/thread.d.ts +15 -0
  638. package/dist/primitives/thread.d.ts.map +1 -0
  639. package/dist/primitives/thread.js +33 -0
  640. package/dist/primitives/thread.js.map +1 -0
  641. package/dist/primitives/threadList/ThreadListItems.d.ts +2 -0
  642. package/dist/primitives/threadList/ThreadListItems.d.ts.map +1 -0
  643. package/dist/primitives/threadList/ThreadListItems.js +2 -0
  644. package/dist/primitives/threadList/ThreadListLoadMore.d.ts +17 -0
  645. package/dist/primitives/threadList/ThreadListLoadMore.d.ts.map +1 -0
  646. package/dist/primitives/threadList/ThreadListLoadMore.js +13 -0
  647. package/dist/primitives/threadList/ThreadListLoadMore.js.map +1 -0
  648. package/dist/primitives/threadList/ThreadListNew.d.ts +11 -0
  649. package/dist/primitives/threadList/ThreadListNew.d.ts.map +1 -0
  650. package/dist/primitives/threadList/ThreadListNew.js +29 -0
  651. package/dist/primitives/threadList/ThreadListNew.js.map +1 -0
  652. package/dist/primitives/threadList/ThreadListRoot.d.ts +12 -0
  653. package/dist/primitives/threadList/ThreadListRoot.d.ts.map +1 -0
  654. package/dist/primitives/threadList/ThreadListRoot.js +25 -0
  655. package/dist/primitives/threadList/ThreadListRoot.js.map +1 -0
  656. package/dist/primitives/threadList.d.ts +6 -0
  657. package/dist/primitives/threadList.d.ts.map +1 -0
  658. package/dist/primitives/threadList.js +16 -0
  659. package/dist/primitives/threadList.js.map +1 -0
  660. package/dist/primitives/threadListFocusGroup.d.ts +28 -0
  661. package/dist/primitives/threadListFocusGroup.d.ts.map +1 -0
  662. package/dist/primitives/threadListFocusGroup.js +64 -0
  663. package/dist/primitives/threadListFocusGroup.js.map +1 -0
  664. package/dist/primitives/threadListItem/ThreadListItemArchive.d.ts +17 -0
  665. package/dist/primitives/threadListItem/ThreadListItemArchive.d.ts.map +1 -0
  666. package/dist/primitives/threadListItem/ThreadListItemArchive.js +12 -0
  667. package/dist/primitives/threadListItem/ThreadListItemArchive.js.map +1 -0
  668. package/dist/primitives/threadListItem/ThreadListItemDelete.d.ts +17 -0
  669. package/dist/primitives/threadListItem/ThreadListItemDelete.d.ts.map +1 -0
  670. package/dist/primitives/threadListItem/ThreadListItemDelete.js +12 -0
  671. package/dist/primitives/threadListItem/ThreadListItemDelete.js.map +1 -0
  672. package/dist/primitives/threadListItem/ThreadListItemRoot.d.ts +12 -0
  673. package/dist/primitives/threadListItem/ThreadListItemRoot.d.ts.map +1 -0
  674. package/dist/primitives/threadListItem/ThreadListItemRoot.js +61 -0
  675. package/dist/primitives/threadListItem/ThreadListItemRoot.js.map +1 -0
  676. package/dist/primitives/threadListItem/ThreadListItemTitle.d.ts +2 -0
  677. package/dist/primitives/threadListItem/ThreadListItemTitle.d.ts.map +1 -0
  678. package/dist/primitives/threadListItem/ThreadListItemTitle.js +2 -0
  679. package/dist/primitives/threadListItem/ThreadListItemTrigger.d.ts +13 -0
  680. package/dist/primitives/threadListItem/ThreadListItemTrigger.d.ts.map +1 -0
  681. package/dist/primitives/threadListItem/ThreadListItemTrigger.js +35 -0
  682. package/dist/primitives/threadListItem/ThreadListItemTrigger.js.map +1 -0
  683. package/dist/primitives/threadListItem/ThreadListItemUnarchive.d.ts +17 -0
  684. package/dist/primitives/threadListItem/ThreadListItemUnarchive.d.ts.map +1 -0
  685. package/dist/primitives/threadListItem/ThreadListItemUnarchive.js +13 -0
  686. package/dist/primitives/threadListItem/ThreadListItemUnarchive.js.map +1 -0
  687. package/dist/primitives/threadListItem.d.ts +7 -0
  688. package/dist/primitives/threadListItem.d.ts.map +1 -0
  689. package/dist/primitives/threadListItem.js +19 -0
  690. package/dist/primitives/threadListItem.js.map +1 -0
  691. package/dist/primitives/threadListItemMore/ThreadListItemMoreContent.d.ts +47 -0
  692. package/dist/primitives/threadListItemMore/ThreadListItemMoreContent.d.ts.map +1 -0
  693. package/dist/primitives/threadListItemMore/ThreadListItemMoreContent.js +48 -0
  694. package/dist/primitives/threadListItemMore/ThreadListItemMoreContent.js.map +1 -0
  695. package/dist/primitives/threadListItemMore/ThreadListItemMoreItem.d.ts +19 -0
  696. package/dist/primitives/threadListItemMore/ThreadListItemMoreItem.d.ts.map +1 -0
  697. package/dist/primitives/threadListItemMore/ThreadListItemMoreItem.js +24 -0
  698. package/dist/primitives/threadListItemMore/ThreadListItemMoreItem.js.map +1 -0
  699. package/dist/primitives/threadListItemMore/ThreadListItemMoreRoot.d.ts +19 -0
  700. package/dist/primitives/threadListItemMore/ThreadListItemMoreRoot.d.ts.map +1 -0
  701. package/dist/primitives/threadListItemMore/ThreadListItemMoreRoot.js +45 -0
  702. package/dist/primitives/threadListItemMore/ThreadListItemMoreRoot.js.map +1 -0
  703. package/dist/primitives/threadListItemMore/ThreadListItemMoreSeparator.d.ts +16 -0
  704. package/dist/primitives/threadListItemMore/ThreadListItemMoreSeparator.d.ts.map +1 -0
  705. package/dist/primitives/threadListItemMore/ThreadListItemMoreSeparator.js +24 -0
  706. package/dist/primitives/threadListItemMore/ThreadListItemMoreSeparator.js.map +1 -0
  707. package/dist/primitives/threadListItemMore/ThreadListItemMoreTrigger.d.ts +17 -0
  708. package/dist/primitives/threadListItemMore/ThreadListItemMoreTrigger.d.ts.map +1 -0
  709. package/dist/primitives/threadListItemMore/ThreadListItemMoreTrigger.js +42 -0
  710. package/dist/primitives/threadListItemMore/ThreadListItemMoreTrigger.js.map +1 -0
  711. package/dist/primitives/threadListItemMore/scope.d.ts +5 -0
  712. package/dist/primitives/threadListItemMore/scope.d.ts.map +1 -0
  713. package/dist/primitives/threadListItemMore/scope.js +7 -0
  714. package/dist/primitives/threadListItemMore/scope.js.map +1 -0
  715. package/dist/primitives/threadListItemMore.d.ts +6 -0
  716. package/dist/primitives/threadListItemMore.d.ts.map +1 -0
  717. package/dist/primitives/threadListItemMore.js +17 -0
  718. package/dist/primitives/threadListItemMore.js.map +1 -0
  719. package/dist/sandbox-host/SandboxHost.d.ts +38 -0
  720. package/dist/sandbox-host/SandboxHost.d.ts.map +1 -0
  721. package/dist/sandbox-host/SandboxHost.js +146 -0
  722. package/dist/sandbox-host/SandboxHost.js.map +1 -0
  723. package/dist/unstable/useComposerInput.d.ts +87 -0
  724. package/dist/unstable/useComposerInput.d.ts.map +1 -0
  725. package/dist/unstable/useComposerInput.js +77 -0
  726. package/dist/unstable/useComposerInput.js.map +1 -0
  727. package/dist/unstable/useComposerInputHistory.d.ts +27 -0
  728. package/dist/unstable/useComposerInputHistory.d.ts.map +1 -0
  729. package/dist/unstable/useComposerInputHistory.js +125 -0
  730. package/dist/unstable/useComposerInputHistory.js.map +1 -0
  731. package/dist/unstable/useLiveCompletionAdapter.d.ts +52 -0
  732. package/dist/unstable/useLiveCompletionAdapter.d.ts.map +1 -0
  733. package/dist/unstable/useLiveCompletionAdapter.js +184 -0
  734. package/dist/unstable/useLiveCompletionAdapter.js.map +1 -0
  735. package/dist/unstable/useMentionAdapter.d.ts +95 -0
  736. package/dist/unstable/useMentionAdapter.d.ts.map +1 -0
  737. package/dist/unstable/useMentionAdapter.js +129 -0
  738. package/dist/unstable/useMentionAdapter.js.map +1 -0
  739. package/dist/unstable/useMessageStallDetection.d.ts +30 -0
  740. package/dist/unstable/useMessageStallDetection.d.ts.map +1 -0
  741. package/dist/unstable/useMessageStallDetection.js +92 -0
  742. package/dist/unstable/useMessageStallDetection.js.map +1 -0
  743. package/dist/unstable/useModelContextSnapshot.d.ts +32 -0
  744. package/dist/unstable/useModelContextSnapshot.d.ts.map +1 -0
  745. package/dist/unstable/useModelContextSnapshot.js +46 -0
  746. package/dist/unstable/useModelContextSnapshot.js.map +1 -0
  747. package/dist/unstable/useSlashCommandAdapter.d.ts +53 -0
  748. package/dist/unstable/useSlashCommandAdapter.d.ts.map +1 -0
  749. package/dist/unstable/useSlashCommandAdapter.js +84 -0
  750. package/dist/unstable/useSlashCommandAdapter.js.map +1 -0
  751. package/dist/unstable/webmcp/WebMcpRegistrationResource.d.ts +12 -0
  752. package/dist/unstable/webmcp/WebMcpRegistrationResource.d.ts.map +1 -0
  753. package/dist/unstable/webmcp/WebMcpRegistrationResource.js +47 -0
  754. package/dist/unstable/webmcp/WebMcpRegistrationResource.js.map +1 -0
  755. package/dist/unstable/webmcp/convertTools.d.ts +18 -0
  756. package/dist/unstable/webmcp/convertTools.d.ts.map +1 -0
  757. package/dist/unstable/webmcp/convertTools.js +160 -0
  758. package/dist/unstable/webmcp/convertTools.js.map +1 -0
  759. package/dist/unstable/webmcp/useWebMcpProvider.d.ts +23 -0
  760. package/dist/unstable/webmcp/useWebMcpProvider.d.ts.map +1 -0
  761. package/dist/unstable/webmcp/useWebMcpProvider.js +111 -0
  762. package/dist/unstable/webmcp/useWebMcpProvider.js.map +1 -0
  763. package/dist/unstable/webmcp/webmcp-host.d.ts +36 -0
  764. package/dist/unstable/webmcp/webmcp-host.d.ts.map +1 -0
  765. package/dist/unstable/webmcp/webmcp-host.js +28 -0
  766. package/dist/unstable/webmcp/webmcp-host.js.map +1 -0
  767. package/dist/utils/Primitive.d.ts +28 -0
  768. package/dist/utils/Primitive.d.ts.map +1 -0
  769. package/dist/utils/Primitive.js +229 -0
  770. package/dist/utils/Primitive.js.map +1 -0
  771. package/dist/utils/RequireAtLeastOne.d.ts +4 -0
  772. package/dist/utils/RequireAtLeastOne.d.ts.map +1 -0
  773. package/dist/utils/RequireAtLeastOne.js +0 -0
  774. package/dist/utils/createActionButton.d.ts +18 -0
  775. package/dist/utils/createActionButton.d.ts.map +1 -0
  776. package/dist/utils/createActionButton.js +39 -0
  777. package/dist/utils/createActionButton.js.map +1 -0
  778. package/dist/utils/getSelectionMessageId.d.ts +2 -0
  779. package/dist/utils/getSelectionMessageId.d.ts.map +1 -0
  780. package/dist/utils/getSelectionMessageId.js +84 -0
  781. package/dist/utils/getSelectionMessageId.js.map +1 -0
  782. package/dist/utils/hooks/useManagedRef.d.ts +2 -0
  783. package/dist/utils/hooks/useManagedRef.d.ts.map +1 -0
  784. package/dist/utils/hooks/useManagedRef.js +15 -0
  785. package/dist/utils/hooks/useManagedRef.js.map +1 -0
  786. package/dist/utils/hooks/useMediaQuery.d.ts +3 -0
  787. package/dist/utils/hooks/useMediaQuery.d.ts.map +1 -0
  788. package/dist/utils/hooks/useMediaQuery.js +33 -0
  789. package/dist/utils/hooks/useMediaQuery.js.map +1 -0
  790. package/dist/utils/hooks/useOnScrollToBottom.d.ts +7 -0
  791. package/dist/utils/hooks/useOnScrollToBottom.d.ts.map +1 -0
  792. package/dist/utils/hooks/useOnScrollToBottom.js +15 -0
  793. package/dist/utils/hooks/useOnScrollToBottom.js.map +1 -0
  794. package/dist/utils/hooks/useSizeHandle.d.ts +12 -0
  795. package/dist/utils/hooks/useSizeHandle.d.ts.map +1 -0
  796. package/dist/utils/hooks/useSizeHandle.js +33 -0
  797. package/dist/utils/hooks/useSizeHandle.js.map +1 -0
  798. package/dist/utils/isCompositionKey.d.ts +2 -0
  799. package/dist/utils/isCompositionKey.d.ts.map +1 -0
  800. package/dist/utils/isCompositionKey.js +5 -0
  801. package/dist/utils/isCompositionKey.js.map +1 -0
  802. package/dist/utils/smooth/SmoothContext.d.ts +117 -0
  803. package/dist/utils/smooth/SmoothContext.d.ts.map +1 -0
  804. package/dist/utils/smooth/SmoothContext.js +40 -0
  805. package/dist/utils/smooth/SmoothContext.js.map +1 -0
  806. package/dist/utils/smooth/useSmooth.d.ts +63 -0
  807. package/dist/utils/smooth/useSmooth.d.ts.map +1 -0
  808. package/dist/utils/smooth/useSmooth.js +144 -0
  809. package/dist/utils/smooth/useSmooth.js.map +1 -0
  810. package/dist/utils/useIsomorphicLayoutEffect.d.ts +2 -0
  811. package/dist/utils/useIsomorphicLayoutEffect.d.ts.map +1 -0
  812. package/dist/utils/useIsomorphicLayoutEffect.js +1 -0
  813. package/package.json +115 -3
  814. package/src/adapters/OpenAIRealtimeVoiceAdapter.test.ts +761 -0
  815. package/src/adapters/OpenAIRealtimeVoiceAdapter.ts +388 -0
  816. package/src/assistant-transport.ts +98 -0
  817. package/src/augmentations.ts +35 -0
  818. package/src/context/ReadonlyStore.ts +7 -0
  819. package/src/context/index.ts +23 -0
  820. package/src/context/providers/AttachmentByIndexProvider.tsx +6 -0
  821. package/src/context/providers/ChainOfThoughtByIndicesProvider.tsx +3 -0
  822. package/src/context/providers/MessageByIndexProvider.tsx +3 -0
  823. package/src/context/providers/MessageProvider.tsx +34 -0
  824. package/src/context/providers/PartByIndexProvider.tsx +3 -0
  825. package/src/context/providers/SuggestionByIndexProvider.tsx +6 -0
  826. package/src/context/providers/TextMessagePartProvider.tsx +3 -0
  827. package/src/context/providers/ThreadListItemProvider.tsx +6 -0
  828. package/src/context/providers/ThreadViewportProvider.tsx +49 -0
  829. package/src/context/providers/vue-providers.test.tsx +326 -0
  830. package/src/context/stores/ThreadViewport.test.ts +29 -0
  831. package/src/context/stores/ThreadViewport.ts +278 -0
  832. package/src/context/vue/ThreadViewportContext.ts +22 -0
  833. package/src/context/vue/utils/createContextHook.ts +26 -0
  834. package/src/context/vue/utils/createContextStoreHook.ts +93 -0
  835. package/src/devtools/DevToolsHooks.test.ts +40 -0
  836. package/src/devtools/DevToolsHooks.ts +142 -0
  837. package/src/hooks/message-readers.test.ts +128 -0
  838. package/src/hooks/useMessageQuote.ts +25 -0
  839. package/src/hooks/useMessageTiming.ts +26 -0
  840. package/src/hooks/useToolCallElapsed.test.tsx +172 -0
  841. package/src/hooks/useToolCallElapsed.ts +65 -0
  842. package/src/index.ts +623 -0
  843. package/src/internal.ts +33 -0
  844. package/src/legacy-runtime/AssistantRuntimeProvider.tsx +61 -0
  845. package/src/mcp-apps/McpAppRenderer.composer.test.tsx +129 -0
  846. package/src/mcp-apps/McpAppRenderer.test.tsx +906 -0
  847. package/src/mcp-apps/McpAppRenderer.tsx +411 -0
  848. package/src/mcp-apps/McpAppsRemoteHost.concurrent.test.tsx +226 -0
  849. package/src/mcp-apps/McpAppsRemoteHost.test.ts +152 -0
  850. package/src/mcp-apps/McpAppsRemoteHost.ts +160 -0
  851. package/src/mcp-apps/app-frame.test.tsx +648 -0
  852. package/src/mcp-apps/app-frame.tsx +351 -0
  853. package/src/mcp-apps/bridge.test.ts +836 -0
  854. package/src/mcp-apps/bridge.ts +538 -0
  855. package/src/mcp-apps/csp.test.ts +112 -0
  856. package/src/mcp-apps/csp.ts +124 -0
  857. package/src/mcp-apps/index.ts +23 -0
  858. package/src/mcp-apps/types.ts +176 -0
  859. package/src/mcp-apps/utils.ts +23 -0
  860. package/src/model-context/frame/SPEC_AssistantFrame.md +105 -0
  861. package/src/model-context/frame/useAssistantFrameHost.detach.test.tsx +155 -0
  862. package/src/model-context/frame/useAssistantFrameHost.reload.test.tsx +116 -0
  863. package/src/model-context/frame/useAssistantFrameHost.test.tsx +43 -0
  864. package/src/model-context/frame/useAssistantFrameHost.ts +137 -0
  865. package/src/model-context/makeAssistantVisible.test.tsx +460 -0
  866. package/src/model-context/makeAssistantVisible.tsx +184 -0
  867. package/src/model-context/registry/SPEC_ModelContextRegistry.md +40 -0
  868. package/src/primitives/actionBar/ActionBarCopy.test.tsx +28 -0
  869. package/src/primitives/actionBar/ActionBarCopy.tsx +100 -0
  870. package/src/primitives/actionBar/ActionBarEdit.ts +63 -0
  871. package/src/primitives/actionBar/ActionBarExportMarkdown.test.tsx +83 -0
  872. package/src/primitives/actionBar/ActionBarExportMarkdown.tsx +65 -0
  873. package/src/primitives/actionBar/ActionBarFeedback.test.tsx +59 -0
  874. package/src/primitives/actionBar/ActionBarFeedbackNegative.tsx +48 -0
  875. package/src/primitives/actionBar/ActionBarFeedbackPositive.tsx +48 -0
  876. package/src/primitives/actionBar/ActionBarInteractionContext.ts +13 -0
  877. package/src/primitives/actionBar/ActionBarReload.ts +64 -0
  878. package/src/primitives/actionBar/ActionBarRoot.tsx +119 -0
  879. package/src/primitives/actionBar/ActionBarSpeak.ts +25 -0
  880. package/src/primitives/actionBar/ActionBarStopSpeaking.tsx +24 -0
  881. package/src/primitives/actionBar/useActionBarFloatStatus.ts +48 -0
  882. package/src/primitives/actionBar.ts +9 -0
  883. package/src/primitives/actionBarMore/ActionBarMoreContent.tsx +45 -0
  884. package/src/primitives/actionBarMore/ActionBarMoreItem.tsx +22 -0
  885. package/src/primitives/actionBarMore/ActionBarMoreRoot.test.ts +70 -0
  886. package/src/primitives/actionBarMore/ActionBarMoreRoot.tsx +46 -0
  887. package/src/primitives/actionBarMore/ActionBarMoreSeparator.tsx +26 -0
  888. package/src/primitives/actionBarMore/ActionBarMoreTrigger.tsx +26 -0
  889. package/src/primitives/actionBarMore/scope.ts +6 -0
  890. package/src/primitives/actionBarMore.ts +5 -0
  891. package/src/primitives/assistantModal/AssistantModalAnchor.tsx +22 -0
  892. package/src/primitives/assistantModal/AssistantModalContent.tsx +85 -0
  893. package/src/primitives/assistantModal/AssistantModalRoot.test.tsx +153 -0
  894. package/src/primitives/assistantModal/AssistantModalRoot.tsx +48 -0
  895. package/src/primitives/assistantModal/AssistantModalTrigger.test.tsx +65 -0
  896. package/src/primitives/assistantModal/AssistantModalTrigger.tsx +22 -0
  897. package/src/primitives/assistantModal/popoverRenderPrimitives.ts +6 -0
  898. package/src/primitives/assistantModal/scope.ts +6 -0
  899. package/src/primitives/assistantModal.ts +4 -0
  900. package/src/primitives/attachment/AttachmentName.tsx +16 -0
  901. package/src/primitives/attachment/AttachmentRemove.ts +28 -0
  902. package/src/primitives/attachment/AttachmentRoot.tsx +52 -0
  903. package/src/primitives/attachment/AttachmentThumb.test.tsx +179 -0
  904. package/src/primitives/attachment/AttachmentThumb.tsx +41 -0
  905. package/src/primitives/attachment.ts +7 -0
  906. package/src/primitives/branchPicker/BranchPickerCount.tsx +33 -0
  907. package/src/primitives/branchPicker/BranchPickerNext.ts +42 -0
  908. package/src/primitives/branchPicker/BranchPickerNumber.tsx +16 -0
  909. package/src/primitives/branchPicker/BranchPickerPrevious.ts +42 -0
  910. package/src/primitives/branchPicker/BranchPickerRoot.tsx +64 -0
  911. package/src/primitives/branchPicker.ts +5 -0
  912. package/src/primitives/chainOfThought/ChainOfThoughtAccordionTrigger.test.tsx +116 -0
  913. package/src/primitives/chainOfThought/ChainOfThoughtAccordionTrigger.tsx +63 -0
  914. package/src/primitives/chainOfThought/ChainOfThoughtParts.tsx +3 -0
  915. package/src/primitives/chainOfThought/ChainOfThoughtRoot.tsx +33 -0
  916. package/src/primitives/chainOfThought.ts +14 -0
  917. package/src/primitives/composer/ComposerAddAttachment.test.tsx +101 -0
  918. package/src/primitives/composer/ComposerAddAttachment.thread-scope.test.tsx +225 -0
  919. package/src/primitives/composer/ComposerAddAttachment.ts +88 -0
  920. package/src/primitives/composer/ComposerAttachmentDropzone.test.tsx +351 -0
  921. package/src/primitives/composer/ComposerAttachmentDropzone.tsx +109 -0
  922. package/src/primitives/composer/ComposerAttachments.tsx +6 -0
  923. package/src/primitives/composer/ComposerCancel.focus.test.tsx +324 -0
  924. package/src/primitives/composer/ComposerCancel.ts +52 -0
  925. package/src/primitives/composer/ComposerCompactContext.tsx +10 -0
  926. package/src/primitives/composer/ComposerDictate.ts +37 -0
  927. package/src/primitives/composer/ComposerDictationTranscript.tsx +55 -0
  928. package/src/primitives/composer/ComposerDisabledThread.test.tsx +118 -0
  929. package/src/primitives/composer/ComposerIf.ts +4 -0
  930. package/src/primitives/composer/ComposerInput.focus-on-run-start.test.tsx +145 -0
  931. package/src/primitives/composer/ComposerInput.test.tsx +712 -0
  932. package/src/primitives/composer/ComposerInput.text-change.test.tsx +77 -0
  933. package/src/primitives/composer/ComposerInput.thread-scope.test.tsx +83 -0
  934. package/src/primitives/composer/ComposerInput.tsx +462 -0
  935. package/src/primitives/composer/ComposerInputPluginContext.tsx +80 -0
  936. package/src/primitives/composer/ComposerPreview.native.test.ts +157 -0
  937. package/src/primitives/composer/ComposerQueue.tsx +3 -0
  938. package/src/primitives/composer/ComposerQuote.tsx +143 -0
  939. package/src/primitives/composer/ComposerResume.ts +35 -0
  940. package/src/primitives/composer/ComposerRoot.test.tsx +429 -0
  941. package/src/primitives/composer/ComposerRoot.tsx +155 -0
  942. package/src/primitives/composer/ComposerSend.ts +43 -0
  943. package/src/primitives/composer/ComposerStopDictation.ts +43 -0
  944. package/src/primitives/composer/composerInputSelector.ts +4 -0
  945. package/src/primitives/composer/trigger/TriggerPopover.native.test.ts +309 -0
  946. package/src/primitives/composer/trigger/TriggerPopover.tsx +248 -0
  947. package/src/primitives/composer/trigger/TriggerPopoverAction.tsx +61 -0
  948. package/src/primitives/composer/trigger/TriggerPopoverBack.tsx +51 -0
  949. package/src/primitives/composer/trigger/TriggerPopoverBehavior.test.tsx +113 -0
  950. package/src/primitives/composer/trigger/TriggerPopoverCategories.tsx +123 -0
  951. package/src/primitives/composer/trigger/TriggerPopoverDirective.tsx +55 -0
  952. package/src/primitives/composer/trigger/TriggerPopoverExports.test.ts +61 -0
  953. package/src/primitives/composer/trigger/TriggerPopoverItems.tsx +121 -0
  954. package/src/primitives/composer/trigger/TriggerPopoverResource.ts +146 -0
  955. package/src/primitives/composer/trigger/TriggerPopoverRootContext.test.tsx +159 -0
  956. package/src/primitives/composer/trigger/TriggerPopoverRootContext.tsx +236 -0
  957. package/src/primitives/composer/trigger/detectTrigger.test.ts +197 -0
  958. package/src/primitives/composer/trigger/detectTrigger.ts +78 -0
  959. package/src/primitives/composer/trigger/index.ts +33 -0
  960. package/src/primitives/composer/trigger/matchesTriggerItemQuery.test.ts +52 -0
  961. package/src/primitives/composer/trigger/matchesTriggerItemQuery.ts +13 -0
  962. package/src/primitives/composer/trigger/triggerDetectionResource.ts +47 -0
  963. package/src/primitives/composer/trigger/triggerKeyboardResource.test.ts +233 -0
  964. package/src/primitives/composer/trigger/triggerKeyboardResource.ts +150 -0
  965. package/src/primitives/composer/trigger/triggerNavigationResource.ts +129 -0
  966. package/src/primitives/composer/trigger/triggerSelectionResource.test.ts +173 -0
  967. package/src/primitives/composer/trigger/triggerSelectionResource.ts +133 -0
  968. package/src/primitives/composer/useAuiState.composer.test.tsx +93 -0
  969. package/src/primitives/composer/useComposerCancelWithFocus.ts +51 -0
  970. package/src/primitives/composer/useComposerInputState.ts +58 -0
  971. package/src/primitives/composer/useTextareaAutosize.ts +140 -0
  972. package/src/primitives/composer.ts +88 -0
  973. package/src/primitives/dropdownMenuRenderPrimitives.test.tsx +64 -0
  974. package/src/primitives/dropdownMenuRenderPrimitives.ts +14 -0
  975. package/src/primitives/error/ErrorMessage.tsx +39 -0
  976. package/src/primitives/error/ErrorRoot.tsx +34 -0
  977. package/src/primitives/error.ts +2 -0
  978. package/src/primitives/message/MessageAttachments.tsx +6 -0
  979. package/src/primitives/message/MessageError.ts +13 -0
  980. package/src/primitives/message/MessageIf.test.tsx +83 -0
  981. package/src/primitives/message/MessageIf.ts +110 -0
  982. package/src/primitives/message/MessageParts.test.tsx +119 -0
  983. package/src/primitives/message/MessageParts.tsx +64 -0
  984. package/src/primitives/message/MessagePartsGrouped.test.tsx +682 -0
  985. package/src/primitives/message/MessagePartsGrouped.tool-interaction.test.tsx +97 -0
  986. package/src/primitives/message/MessagePartsGrouped.tsx +374 -0
  987. package/src/primitives/message/MessageRoot.anchors.test.ts +167 -0
  988. package/src/primitives/message/MessageRoot.test.tsx +272 -0
  989. package/src/primitives/message/MessageRoot.tsx +145 -0
  990. package/src/primitives/message.ts +15 -0
  991. package/src/primitives/messagePart/MessagePartImage.tsx +29 -0
  992. package/src/primitives/messagePart/MessagePartInProgress.ts +3 -0
  993. package/src/primitives/messagePart/MessagePartText.test.tsx +114 -0
  994. package/src/primitives/messagePart/MessagePartText.tsx +54 -0
  995. package/src/primitives/messagePart/useMessagePartData.test.ts +118 -0
  996. package/src/primitives/messagePart/useMessagePartData.ts +34 -0
  997. package/src/primitives/messagePart/useMessagePartFile.ts +42 -0
  998. package/src/primitives/messagePart/useMessagePartImage.ts +41 -0
  999. package/src/primitives/messagePart/useMessagePartReasoning.ts +42 -0
  1000. package/src/primitives/messagePart/useMessagePartSource.ts +43 -0
  1001. package/src/primitives/messagePart/useMessagePartText.ts +45 -0
  1002. package/src/primitives/messagePart.ts +4 -0
  1003. package/src/primitives/native-action-bindings.test.ts +181 -0
  1004. package/src/primitives/native-display-bindings.test.ts +159 -0
  1005. package/src/primitives/queueItem/QueueItemRemove.ts +36 -0
  1006. package/src/primitives/queueItem/QueueItemSteer.ts +36 -0
  1007. package/src/primitives/queueItem/QueueItemText.tsx +48 -0
  1008. package/src/primitives/queueItem.ts +3 -0
  1009. package/src/primitives/reasoning/useScrollLock.test.tsx +296 -0
  1010. package/src/primitives/reasoning/useScrollLock.ts +160 -0
  1011. package/src/primitives/selectionToolbar/SelectionToolbarQuote.tsx +56 -0
  1012. package/src/primitives/selectionToolbar/SelectionToolbarRoot.test.tsx +439 -0
  1013. package/src/primitives/selectionToolbar/SelectionToolbarRoot.tsx +206 -0
  1014. package/src/primitives/selectionToolbar.ts +8 -0
  1015. package/src/primitives/suggestion/SuggestionDescription.tsx +35 -0
  1016. package/src/primitives/suggestion/SuggestionTitle.tsx +43 -0
  1017. package/src/primitives/suggestion/SuggestionTrigger.ts +59 -0
  1018. package/src/primitives/suggestion.ts +3 -0
  1019. package/src/primitives/thread/ThreadEmpty.ts +19 -0
  1020. package/src/primitives/thread/ThreadIf.ts +42 -0
  1021. package/src/primitives/thread/ThreadLoadEarlier.tsx +34 -0
  1022. package/src/primitives/thread/ThreadMessages.tsx +9 -0
  1023. package/src/primitives/thread/ThreadRoot.test.tsx +419 -0
  1024. package/src/primitives/thread/ThreadRoot.tsx +119 -0
  1025. package/src/primitives/thread/ThreadRootElementContext.ts +9 -0
  1026. package/src/primitives/thread/ThreadScrollToBottom.ts +45 -0
  1027. package/src/primitives/thread/ThreadSuggestion.ts +55 -0
  1028. package/src/primitives/thread/ThreadSuggestions.tsx +7 -0
  1029. package/src/primitives/thread/ThreadViewport.thread-scope.test.tsx +58 -0
  1030. package/src/primitives/thread/ThreadViewport.tsx +219 -0
  1031. package/src/primitives/thread/ThreadViewportFooter.tsx +46 -0
  1032. package/src/primitives/thread/topAnchor/computeTopAnchorSlack.test.ts +131 -0
  1033. package/src/primitives/thread/topAnchor/computeTopAnchorSlack.ts +94 -0
  1034. package/src/primitives/thread/topAnchor/createReserveObservers.ts +50 -0
  1035. package/src/primitives/thread/topAnchor/mountTopAnchorReserve.test.ts +570 -0
  1036. package/src/primitives/thread/topAnchor/mountTopAnchorReserve.ts +221 -0
  1037. package/src/primitives/thread/topAnchor/topAnchorTurn.test.ts +115 -0
  1038. package/src/primitives/thread/topAnchor/topAnchorTurn.ts +59 -0
  1039. package/src/primitives/thread/topAnchor/topAnchorUtils.ts +58 -0
  1040. package/src/primitives/thread/topAnchor/useTopAnchorReserve.ts +23 -0
  1041. package/src/primitives/thread/useThreadViewportAutoScroll.test.tsx +1887 -0
  1042. package/src/primitives/thread/useThreadViewportAutoScroll.ts +140 -0
  1043. package/src/primitives/thread.ts +17 -0
  1044. package/src/primitives/threadList/ThreadListItems.tsx +6 -0
  1045. package/src/primitives/threadList/ThreadListLoadMore.tsx +25 -0
  1046. package/src/primitives/threadList/ThreadListNew.tsx +47 -0
  1047. package/src/primitives/threadList/ThreadListRoot.tsx +29 -0
  1048. package/src/primitives/threadList.ts +5 -0
  1049. package/src/primitives/threadListFocusGroup.ts +91 -0
  1050. package/src/primitives/threadListItem/ThreadListItemArchive.ts +23 -0
  1051. package/src/primitives/threadListItem/ThreadListItemDelete.ts +23 -0
  1052. package/src/primitives/threadListItem/ThreadListItemRoot.tsx +100 -0
  1053. package/src/primitives/threadListItem/ThreadListItemTitle.test.tsx +63 -0
  1054. package/src/primitives/threadListItem/ThreadListItemTitle.tsx +3 -0
  1055. package/src/primitives/threadListItem/ThreadListItemTrigger.tsx +51 -0
  1056. package/src/primitives/threadListItem/ThreadListItemUnarchive.test.tsx +55 -0
  1057. package/src/primitives/threadListItem/ThreadListItemUnarchive.ts +25 -0
  1058. package/src/primitives/threadListItem/ThreadListKeyboardNav.test.tsx +348 -0
  1059. package/src/primitives/threadListItem.ts +6 -0
  1060. package/src/primitives/threadListItemMore/ThreadListItemMoreContent.tsx +81 -0
  1061. package/src/primitives/threadListItemMore/ThreadListItemMoreItem.tsx +22 -0
  1062. package/src/primitives/threadListItemMore/ThreadListItemMoreRoot.tsx +79 -0
  1063. package/src/primitives/threadListItemMore/ThreadListItemMoreSeparator.tsx +26 -0
  1064. package/src/primitives/threadListItemMore/ThreadListItemMoreTrigger.tsx +62 -0
  1065. package/src/primitives/threadListItemMore/scope.ts +6 -0
  1066. package/src/primitives/threadListItemMore.ts +5 -0
  1067. package/src/sandbox-host/SandboxHost.test.tsx +579 -0
  1068. package/src/sandbox-host/SandboxHost.tsx +271 -0
  1069. package/src/tests/DataRenderers.test.tsx +218 -0
  1070. package/src/tests/MessageParts.loading.test.tsx +105 -0
  1071. package/src/tests/MessageParts.rendererOptions.test.tsx +125 -0
  1072. package/src/tests/RemoteThreadListRuntime.adapterProvider.test.tsx +187 -0
  1073. package/src/tests/RemoteThreadListRuntime.deferredProvider.test.tsx +99 -0
  1074. package/src/tests/RemoteThreadListRuntime.reloadMainThread.test.tsx +113 -0
  1075. package/src/tests/augmentations.test.ts +95 -0
  1076. package/src/tests/generative-ui.primitive.test.tsx +176 -0
  1077. package/src/tests/generative-ui.test.tsx +130 -0
  1078. package/src/tests/in-memory-thread-list.test.tsx +142 -0
  1079. package/src/tests/local-runtime-queue.test.tsx +506 -0
  1080. package/src/tests/messageAction.ts +67 -0
  1081. package/src/tests/messagePartSwitchRace.test.tsx +222 -0
  1082. package/src/tests/messagePartTypeMismatch.test.tsx +153 -0
  1083. package/src/tests/remote-thread-list-test-helpers.ts +40 -0
  1084. package/src/tests/setup.ts +5 -0
  1085. package/src/tests/threadListItemIsRunning.test.tsx +215 -0
  1086. package/src/tests/threadMessageById.test.tsx +293 -0
  1087. package/src/tests/toolCallTiming.test.tsx +324 -0
  1088. package/src/tests/vue.ts +124 -0
  1089. package/src/unstable/useComposerInput.test.tsx +201 -0
  1090. package/src/unstable/useComposerInput.ts +125 -0
  1091. package/src/unstable/useComposerInputHistory.test.tsx +207 -0
  1092. package/src/unstable/useComposerInputHistory.thread-scope.test.tsx +128 -0
  1093. package/src/unstable/useComposerInputHistory.ts +163 -0
  1094. package/src/unstable/useLiveCompletionAdapter.test.tsx +760 -0
  1095. package/src/unstable/useLiveCompletionAdapter.ts +217 -0
  1096. package/src/unstable/useMentionAdapter.test.tsx +380 -0
  1097. package/src/unstable/useMentionAdapter.ts +276 -0
  1098. package/src/unstable/useMessageStallDetection.lifecycle.test.ts +120 -0
  1099. package/src/unstable/useMessageStallDetection.test.tsx +59 -0
  1100. package/src/unstable/useMessageStallDetection.ts +147 -0
  1101. package/src/unstable/useModelContextSnapshot.test.tsx +181 -0
  1102. package/src/unstable/useModelContextSnapshot.ts +85 -0
  1103. package/src/unstable/useSlashCommandAdapter.test.tsx +172 -0
  1104. package/src/unstable/useSlashCommandAdapter.ts +145 -0
  1105. package/src/unstable/webmcp/WebMcpRegistrationResource.test.ts +150 -0
  1106. package/src/unstable/webmcp/WebMcpRegistrationResource.ts +92 -0
  1107. package/src/unstable/webmcp/__tests__/webmcp.fake.tsx +177 -0
  1108. package/src/unstable/webmcp/convertTools.test.ts +605 -0
  1109. package/src/unstable/webmcp/convertTools.ts +256 -0
  1110. package/src/unstable/webmcp/useWebMcpProvider.test.tsx +543 -0
  1111. package/src/unstable/webmcp/useWebMcpProvider.ts +185 -0
  1112. package/src/unstable/webmcp/webmcp-host.test.ts +142 -0
  1113. package/src/unstable/webmcp/webmcp-host.ts +83 -0
  1114. package/src/utils/Primitive.test.tsx +551 -0
  1115. package/src/utils/Primitive.tsx +363 -0
  1116. package/src/utils/RequireAtLeastOne.ts +7 -0
  1117. package/src/utils/createActionButton.child-cancel.test.tsx +82 -0
  1118. package/src/utils/createActionButton.test.tsx +114 -0
  1119. package/src/utils/createActionButton.tsx +75 -0
  1120. package/src/utils/getSelectionMessageId.test.ts +609 -0
  1121. package/src/utils/getSelectionMessageId.ts +133 -0
  1122. package/src/utils/hooks/useManagedRef.ts +19 -0
  1123. package/src/utils/hooks/useMediaQuery.test.tsx +60 -0
  1124. package/src/utils/hooks/useMediaQuery.ts +44 -0
  1125. package/src/utils/hooks/useOnScrollToBottom.ts +23 -0
  1126. package/src/utils/hooks/useSizeHandle.ts +39 -0
  1127. package/src/utils/isCompositionKey.ts +5 -0
  1128. package/src/utils/smooth/SmoothContext.test.tsx +224 -0
  1129. package/src/utils/smooth/SmoothContext.tsx +82 -0
  1130. package/src/utils/smooth/useSmooth.test.tsx +499 -0
  1131. package/src/utils/smooth/useSmooth.ts +266 -0
  1132. package/src/utils/useIsomorphicLayoutEffect.test.tsx +25 -0
  1133. package/src/utils/useIsomorphicLayoutEffect.ts +1 -0
@@ -0,0 +1,92 @@
1
+ "use client";
2
+ import { computed, shallowRef, toValue } from "vue";
3
+ import { useAuiState } from "@ulearning/ai-store";
4
+ import { useIsomorphicLayoutEffect, useShallowSelector } from "@ulearning/ai-store/internal";
5
+ // src/unstable/useMessageStallDetection.ts
6
+ /**
7
+ * Detects mid-run output stalls on the current message: while the message is
8
+ * running, watches its text, reasoning, and tool-argument values plus tool-result
9
+ * availability and reports a stall once they stop changing for `thresholdMs`.
10
+ * Useful for re-surfacing a "still working" indicator during tool think-time or
11
+ * provider stalls, after the first tokens have already streamed.
12
+ *
13
+ * Must be used inside a message scope.
14
+ *
15
+ * @deprecated Experimental since 2026-06-13. Not scheduled for removal; the API may change in any release.
16
+ */
17
+ function unstable_useMessageStallDetection(options = void 0) {
18
+ const thresholdMs = computed(() => toValue(options)?.thresholdMs ?? 2e3);
19
+ const activity = useAuiState(useShallowSelector((s) => {
20
+ if (!(s.message.status?.type === "running")) return [false];
21
+ const values = [true, s.message.content.length];
22
+ for (const part of s.message.content) if (part.type === "text" || part.type === "reasoning") values.push(part.type, part.text);
23
+ else if (part.type === "tool-call") values.push(part.type, part.argsText, part.result !== void 0);
24
+ else values.push(part.type);
25
+ return values;
26
+ }));
27
+ const running = computed(() => activity.value[0] === true);
28
+ let lastActivity = 0;
29
+ let lastObservedActivity;
30
+ let observing = false;
31
+ const stalled = shallowRef(false);
32
+ const now = shallowRef(0);
33
+ useIsomorphicLayoutEffect(() => {
34
+ return () => {
35
+ observing = false;
36
+ };
37
+ }, []);
38
+ useIsomorphicLayoutEffect(() => {
39
+ if (!running.value) {
40
+ observing = false;
41
+ stalled.value = false;
42
+ return;
43
+ }
44
+ if (!observing || lastObservedActivity !== activity.value) {
45
+ lastActivity = Date.now();
46
+ lastObservedActivity = activity.value;
47
+ observing = true;
48
+ }
49
+ let active = true;
50
+ const stall = () => {
51
+ if (!active) return;
52
+ now.value = Date.now();
53
+ stalled.value = true;
54
+ };
55
+ const sinceActivity = Date.now() - lastActivity;
56
+ if (sinceActivity >= thresholdMs.value) {
57
+ stall();
58
+ return;
59
+ }
60
+ stalled.value = false;
61
+ const id = setTimeout(stall, thresholdMs.value - sinceActivity);
62
+ return () => {
63
+ active = false;
64
+ clearTimeout(id);
65
+ };
66
+ }, () => [
67
+ running.value,
68
+ activity.value,
69
+ thresholdMs.value
70
+ ]);
71
+ useIsomorphicLayoutEffect(() => {
72
+ if (!stalled.value) return void 0;
73
+ let active = true;
74
+ const id = setInterval(() => {
75
+ if (active) now.value = Date.now();
76
+ }, 1e3);
77
+ return () => {
78
+ active = false;
79
+ clearInterval(id);
80
+ };
81
+ }, () => [stalled.value]);
82
+ return computed(() => !stalled.value ? {
83
+ stalled: false,
84
+ stalledForMs: 0
85
+ } : {
86
+ stalled: true,
87
+ stalledForMs: Math.max(0, now.value - lastActivity)
88
+ });
89
+ }
90
+ export { unstable_useMessageStallDetection };
91
+
92
+ //# sourceMappingURL=useMessageStallDetection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useMessageStallDetection.js","names":[],"sources":["../../src/unstable/useMessageStallDetection.ts"],"sourcesContent":["\"use client\";\n\nimport {\n computed,\n shallowRef,\n toValue,\n type ComputedRef,\n type MaybeRefOrGetter,\n} from \"vue\";\nimport { useAuiState } from \"@ulearning/ai-store\";\nimport {\n useIsomorphicLayoutEffect,\n useShallowSelector,\n} from \"@ulearning/ai-store/internal\";\n\n/** @deprecated Experimental since 2026-06-13. Not scheduled for removal; the API may change in any release. */\nexport type Unstable_MessageStallDetectionOptions = {\n /**\n * Milliseconds of unchanged message content before the message counts as\n * stalled.\n * @default 2000\n */\n thresholdMs?: number | undefined;\n};\n\n/** @deprecated Experimental since 2026-06-13. Not scheduled for removal; the API may change in any release. */\nexport type Unstable_MessageStallDetection = {\n /** True while the message is running and its content has not changed for at least `thresholdMs`. */\n stalled: boolean;\n /** Milliseconds since the last observed content change. `0` while not stalled. */\n stalledForMs: number;\n};\n\n/**\n * Detects mid-run output stalls on the current message: while the message is\n * running, watches its text, reasoning, and tool-argument values plus tool-result\n * availability and reports a stall once they stop changing for `thresholdMs`.\n * Useful for re-surfacing a \"still working\" indicator during tool think-time or\n * provider stalls, after the first tokens have already streamed.\n *\n * Must be used inside a message scope.\n *\n * @deprecated Experimental since 2026-06-13. Not scheduled for removal; the API may change in any release.\n */\nexport function unstable_useMessageStallDetection(\n options: MaybeRefOrGetter<\n Unstable_MessageStallDetectionOptions | undefined\n > = undefined,\n): ComputedRef<Unstable_MessageStallDetection> {\n const thresholdMs = computed(() => toValue(options)?.thresholdMs ?? 2000);\n\n const activity = useAuiState(\n useShallowSelector((s) => {\n const running = s.message.status?.type === \"running\";\n if (!running) return [false];\n\n const values: unknown[] = [true, s.message.content.length];\n\n for (const part of s.message.content) {\n if (part.type === \"text\" || part.type === \"reasoning\") {\n values.push(part.type, part.text);\n } else if (part.type === \"tool-call\") {\n values.push(part.type, part.argsText, part.result !== undefined);\n } else {\n values.push(part.type);\n }\n }\n return values;\n }),\n );\n\n const running = computed(() => activity.value[0] === true);\n let lastActivity = 0;\n let lastObservedActivity: readonly unknown[] | undefined;\n let observing = false;\n const stalled = shallowRef(false);\n const now = shallowRef(0);\n\n useIsomorphicLayoutEffect(() => {\n return () => {\n observing = false;\n };\n }, []);\n\n useIsomorphicLayoutEffect(\n () => {\n if (!running.value) {\n observing = false;\n stalled.value = false;\n return undefined;\n }\n\n // KeepAlive may reconnect descendant activation hooks in reverse order.\n // Observe activity and arm its timer together, so activation cannot compare\n // the threshold with a timestamp from before the scope was paused.\n if (!observing || lastObservedActivity !== activity.value) {\n lastActivity = Date.now();\n lastObservedActivity = activity.value;\n observing = true;\n }\n\n let active = true;\n const stall = () => {\n if (!active) return;\n now.value = Date.now();\n stalled.value = true;\n };\n const sinceActivity = Date.now() - lastActivity;\n if (sinceActivity >= thresholdMs.value) {\n stall();\n return undefined;\n }\n\n stalled.value = false;\n const id = setTimeout(stall, thresholdMs.value - sinceActivity);\n return () => {\n active = false;\n clearTimeout(id);\n };\n },\n () => [running.value, activity.value, thresholdMs.value],\n );\n\n useIsomorphicLayoutEffect(\n () => {\n if (!stalled.value) return undefined;\n let active = true;\n const id = setInterval(() => {\n if (active) now.value = Date.now();\n }, 1000);\n return () => {\n active = false;\n clearInterval(id);\n };\n },\n () => [stalled.value],\n );\n\n return computed(() =>\n !stalled.value\n ? { stalled: false, stalledForMs: 0 }\n : {\n stalled: true,\n stalledForMs: Math.max(0, now.value - lastActivity),\n },\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;AA4CA,SAAgB,kCACd,UAEI,KAAA,GACyC;CAC7C,MAAM,cAAc,eAAe,QAAQ,OAAO,CAAC,EAAE,eAAe,GAAI;CAExE,MAAM,WAAW,YACf,oBAAoB,MAAM;EAExB,IAAI,EADY,EAAE,QAAQ,QAAQ,SAAS,YAC7B,OAAO,CAAC,KAAK;EAE3B,MAAM,SAAoB,CAAC,MAAM,EAAE,QAAQ,QAAQ,MAAM;EAEzD,KAAK,MAAM,QAAQ,EAAE,QAAQ,SAC3B,IAAI,KAAK,SAAS,UAAU,KAAK,SAAS,aACxC,OAAO,KAAK,KAAK,MAAM,KAAK,IAAI;OAC3B,IAAI,KAAK,SAAS,aACvB,OAAO,KAAK,KAAK,MAAM,KAAK,UAAU,KAAK,WAAW,KAAA,CAAS;OAE/D,OAAO,KAAK,KAAK,IAAI;EAGzB,OAAO;CACT,CAAC,CACH;CAEA,MAAM,UAAU,eAAe,SAAS,MAAM,OAAO,IAAI;CACzD,IAAI,eAAe;CACnB,IAAI;CACJ,IAAI,YAAY;CAChB,MAAM,UAAU,WAAW,KAAK;CAChC,MAAM,MAAM,WAAW,CAAC;CAExB,gCAAgC;EAC9B,aAAa;GACX,YAAY;EACd;CACF,GAAG,CAAC,CAAC;CAEL,gCACQ;EACJ,IAAI,CAAC,QAAQ,OAAO;GAClB,YAAY;GACZ,QAAQ,QAAQ;GAChB;EACF;EAKA,IAAI,CAAC,aAAa,yBAAyB,SAAS,OAAO;GACzD,eAAe,KAAK,IAAI;GACxB,uBAAuB,SAAS;GAChC,YAAY;EACd;EAEA,IAAI,SAAS;EACb,MAAM,cAAc;GAClB,IAAI,CAAC,QAAQ;GACb,IAAI,QAAQ,KAAK,IAAI;GACrB,QAAQ,QAAQ;EAClB;EACA,MAAM,gBAAgB,KAAK,IAAI,IAAI;EACnC,IAAI,iBAAiB,YAAY,OAAO;GACtC,MAAM;GACN;EACF;EAEA,QAAQ,QAAQ;EAChB,MAAM,KAAK,WAAW,OAAO,YAAY,QAAQ,aAAa;EAC9D,aAAa;GACX,SAAS;GACT,aAAa,EAAE;EACjB;CACF,SACM;EAAC,QAAQ;EAAO,SAAS;EAAO,YAAY;CAAK,CACzD;CAEA,gCACQ;EACJ,IAAI,CAAC,QAAQ,OAAO,OAAO,KAAA;EAC3B,IAAI,SAAS;EACb,MAAM,KAAK,kBAAkB;GAC3B,IAAI,QAAQ,IAAI,QAAQ,KAAK,IAAI;EACnC,GAAG,GAAI;EACP,aAAa;GACX,SAAS;GACT,cAAc,EAAE;EAClB;CACF,SACM,CAAC,QAAQ,KAAK,CACtB;CAEA,OAAO,eACL,CAAC,QAAQ,QACL;EAAE,SAAS;EAAO,cAAc;CAAE,IAClC;EACE,SAAS;EACT,cAAc,KAAK,IAAI,GAAG,IAAI,QAAQ,YAAY;CACpD,CACN;AACF"}
@@ -0,0 +1,32 @@
1
+ import { type MaybeRefOrGetter, type ShallowRef } from "vue";
2
+ import type { AssistantClient } from "@ulearning/ai-store";
3
+ import type { Unsubscribe } from "@ulearning/ai-core";
4
+ /**
5
+ * Where a snapshot comes from and what counts as a change to it. Declared once
6
+ * per consumer at module scope: the subscription effect keys on this object, so
7
+ * an inline source without an `isEqual` re-reads itself into a render loop.
8
+ */
9
+ export type ModelContextSnapshotSource<T> = {
10
+ /** Seeds the snapshot when it starts disabled. */
11
+ readonly empty: T;
12
+ /** Projects the fields the consumer observes out of the live model context. */
13
+ read(aui: AssistantClient): T;
14
+ subscribe(aui: AssistantClient, onChange: () => void): Unsubscribe;
15
+ /**
16
+ * An equal pair keeps the previous reference. Omitted by a consumer that
17
+ * re-derives on every notification, where a caller republishing an unchanged
18
+ * tool set is how it asks to be re-run.
19
+ */
20
+ isEqual?(previous: T, next: T): boolean;
21
+ };
22
+ /**
23
+ * `getModelContext()` rebuilds its result on every call, so a projection of the
24
+ * fields a consumer observes is held in state and refreshed on notification
25
+ * rather than read during render. Keeping the previous reference for an equal
26
+ * projection is what stops a notification carrying no observable change from
27
+ * invalidating everything derived from it.
28
+ */
29
+ export declare const useModelContextSnapshot: <T>(aui: MaybeRefOrGetter<AssistantClient>, enabled: MaybeRefOrGetter<boolean>, source: MaybeRefOrGetter<ModelContextSnapshotSource<T>>) => Readonly<ShallowRef<T>>;
30
+ /** Shallow own-key comparison, for a projection whose values are records. */
31
+ export declare const shallowEqualRecords: (previous: Readonly<Record<string, unknown>>, next: Readonly<Record<string, unknown>>) => boolean;
32
+ //# sourceMappingURL=useModelContextSnapshot.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useModelContextSnapshot.d.ts","mappings":"AAEA,OAAO,EAIL,KAAK,gBAAgB,EACrB,KAAK,UAAU,EAChB,MAAM,KAAK;AAEZ,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB;AAC1D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB;AAErD;;;;;AAKA,MAAM,MAAM,0BAA0B,CAAC,CAAC,IAAI;IAC1C;IACA,QAAQ,CAAC,KAAK,EAAE,CAAC;IACjB;IACA,IAAI,CAAC,GAAG,EAAE,eAAe,GAAG,CAAC;IAC7B,SAAS,CAAC,GAAG,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,IAAI,GAAG,WAAW;IAClE;;;;;IAKA,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,OAAO;CACxC;AAED;;;;;;;AAOA,eAAO,MAAM,uBAAuB,GAAI,CAAC,EACvC,KAAK,gBAAgB,CAAC,eAAe,CAAC,EACtC,SAAS,gBAAgB,CAAC,OAAO,CAAC,EAClC,QAAQ,gBAAgB,CAAC,0BAA0B,CAAC,CAAC,CAAC,CAAC,KACtD,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CA6BxB;AAED;AACA,eAAO,MAAM,mBAAmB,GAC9B,UAAU,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EAC3C,MAAM,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,KACtC,OAMF","names":[],"ignoreList":[],"sources":["../../src/unstable/useModelContextSnapshot.ts"],"sourcesContent":[null]}
@@ -0,0 +1,46 @@
1
+ "use client";
2
+ import { shallowReadonly, shallowRef, toValue } from "vue";
3
+ import { useIsomorphicLayoutEffect } from "@ulearning/ai-store/internal";
4
+ // src/unstable/useModelContextSnapshot.ts
5
+ /**
6
+ * `getModelContext()` rebuilds its result on every call, so a projection of the
7
+ * fields a consumer observes is held in state and refreshed on notification
8
+ * rather than read during render. Keeping the previous reference for an equal
9
+ * projection is what stops a notification carrying no observable change from
10
+ * invalidating everything derived from it.
11
+ */
12
+ const useModelContextSnapshot = (aui, enabled, source) => {
13
+ const initialSource = toValue(source);
14
+ const snapshot = shallowRef(toValue(enabled) ? initialSource.read(toValue(aui)) : initialSource.empty);
15
+ useIsomorphicLayoutEffect(() => {
16
+ if (!toValue(enabled)) return void 0;
17
+ const currentSource = toValue(source);
18
+ const currentAui = toValue(aui);
19
+ let active = true;
20
+ const read = () => {
21
+ if (!active) return;
22
+ const next = currentSource.read(currentAui);
23
+ if (!currentSource.isEqual?.(snapshot.value, next)) snapshot.value = next;
24
+ };
25
+ read();
26
+ const unsubscribe = currentSource.subscribe(currentAui, read);
27
+ return () => {
28
+ active = false;
29
+ unsubscribe();
30
+ };
31
+ }, () => [
32
+ toValue(aui),
33
+ toValue(enabled),
34
+ toValue(source)
35
+ ]);
36
+ return shallowReadonly(snapshot);
37
+ };
38
+ /** Shallow own-key comparison, for a projection whose values are records. */
39
+ const shallowEqualRecords = (previous, next) => {
40
+ const keys = Object.keys(previous);
41
+ if (keys.length !== Object.keys(next).length) return false;
42
+ return keys.every((key) => Object.hasOwn(next, key) && previous[key] === next[key]);
43
+ };
44
+ export { shallowEqualRecords, useModelContextSnapshot };
45
+
46
+ //# sourceMappingURL=useModelContextSnapshot.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useModelContextSnapshot.js","names":[],"sources":["../../src/unstable/useModelContextSnapshot.ts"],"sourcesContent":["\"use client\";\n\nimport {\n shallowRef,\n shallowReadonly,\n toValue,\n type MaybeRefOrGetter,\n type ShallowRef,\n} from \"vue\";\nimport { useIsomorphicLayoutEffect } from \"@ulearning/ai-store/internal\";\nimport type { AssistantClient } from \"@ulearning/ai-store\";\nimport type { Unsubscribe } from \"@ulearning/ai-core\";\n\n/**\n * Where a snapshot comes from and what counts as a change to it. Declared once\n * per consumer at module scope: the subscription effect keys on this object, so\n * an inline source without an `isEqual` re-reads itself into a render loop.\n */\nexport type ModelContextSnapshotSource<T> = {\n /** Seeds the snapshot when it starts disabled. */\n readonly empty: T;\n /** Projects the fields the consumer observes out of the live model context. */\n read(aui: AssistantClient): T;\n subscribe(aui: AssistantClient, onChange: () => void): Unsubscribe;\n /**\n * An equal pair keeps the previous reference. Omitted by a consumer that\n * re-derives on every notification, where a caller republishing an unchanged\n * tool set is how it asks to be re-run.\n */\n isEqual?(previous: T, next: T): boolean;\n};\n\n/**\n * `getModelContext()` rebuilds its result on every call, so a projection of the\n * fields a consumer observes is held in state and refreshed on notification\n * rather than read during render. Keeping the previous reference for an equal\n * projection is what stops a notification carrying no observable change from\n * invalidating everything derived from it.\n */\nexport const useModelContextSnapshot = <T>(\n aui: MaybeRefOrGetter<AssistantClient>,\n enabled: MaybeRefOrGetter<boolean>,\n source: MaybeRefOrGetter<ModelContextSnapshotSource<T>>,\n): Readonly<ShallowRef<T>> => {\n const initialSource = toValue(source);\n const snapshot: ShallowRef<T> = shallowRef(\n toValue(enabled) ? initialSource.read(toValue(aui)) : initialSource.empty,\n );\n\n useIsomorphicLayoutEffect(\n () => {\n if (!toValue(enabled)) return undefined;\n const currentSource = toValue(source);\n const currentAui = toValue(aui);\n let active = true;\n const read = () => {\n if (!active) return;\n const next = currentSource.read(currentAui);\n if (!currentSource.isEqual?.(snapshot.value, next))\n snapshot.value = next;\n };\n read();\n const unsubscribe = currentSource.subscribe(currentAui, read);\n return () => {\n active = false;\n unsubscribe();\n };\n },\n () => [toValue(aui), toValue(enabled), toValue(source)],\n );\n\n return shallowReadonly(snapshot);\n};\n\n/** Shallow own-key comparison, for a projection whose values are records. */\nexport const shallowEqualRecords = (\n previous: Readonly<Record<string, unknown>>,\n next: Readonly<Record<string, unknown>>,\n): boolean => {\n const keys = Object.keys(previous);\n if (keys.length !== Object.keys(next).length) return false;\n return keys.every(\n (key) => Object.hasOwn(next, key) && previous[key] === next[key],\n );\n};\n"],"mappings":";;;;;;;;;;;AAuCA,MAAa,2BACX,KACA,SACA,WAC4B;CAC5B,MAAM,gBAAgB,QAAQ,MAAM;CACpC,MAAM,WAA0B,WAC9B,QAAQ,OAAO,IAAI,cAAc,KAAK,QAAQ,GAAG,CAAC,IAAI,cAAc,KACtE;CAEA,gCACQ;EACJ,IAAI,CAAC,QAAQ,OAAO,GAAG,OAAO,KAAA;EAC9B,MAAM,gBAAgB,QAAQ,MAAM;EACpC,MAAM,aAAa,QAAQ,GAAG;EAC9B,IAAI,SAAS;EACb,MAAM,aAAa;GACjB,IAAI,CAAC,QAAQ;GACb,MAAM,OAAO,cAAc,KAAK,UAAU;GAC1C,IAAI,CAAC,cAAc,UAAU,SAAS,OAAO,IAAI,GAC/C,SAAS,QAAQ;EACrB;EACA,KAAK;EACL,MAAM,cAAc,cAAc,UAAU,YAAY,IAAI;EAC5D,aAAa;GACX,SAAS;GACT,YAAY;EACd;CACF,SACM;EAAC,QAAQ,GAAG;EAAG,QAAQ,OAAO;EAAG,QAAQ,MAAM;CAAC,CACxD;CAEA,OAAO,gBAAgB,QAAQ;AACjC;;AAGA,MAAa,uBACX,UACA,SACY;CACZ,MAAM,OAAO,OAAO,KAAK,QAAQ;CACjC,IAAI,KAAK,WAAW,OAAO,KAAK,IAAI,CAAC,CAAC,QAAQ,OAAO;CACrD,OAAO,KAAK,OACT,QAAQ,OAAO,OAAO,MAAM,GAAG,KAAK,SAAS,SAAS,KAAK,IAC9D;AACF"}
@@ -0,0 +1,53 @@
1
+ import { type ComputedRef, type MaybeRefOrGetter } from "vue";
2
+ import type { Unstable_TriggerAdapter, Unstable_TriggerItem } from "@ulearning/ai-core";
3
+ import type { Unstable_IconComponent } from "./useMentionAdapter.js";
4
+ /** @deprecated Experimental since 2026-04-15. Not scheduled for removal; the API may change in any release. */
5
+ export type Unstable_SlashCommand = {
6
+ readonly id: string;
7
+ readonly label?: string | undefined;
8
+ readonly description?: string | undefined;
9
+ readonly icon?: string | undefined;
10
+ readonly execute: () => void;
11
+ };
12
+ /** @deprecated Experimental since 2026-04-06. Not scheduled for removal; the API may change in any release. */
13
+ export type Unstable_UseSlashCommandAdapterOptions = {
14
+ readonly commands: readonly Unstable_SlashCommand[];
15
+ /** Strip the trigger text from the composer after executing. @default false */
16
+ readonly removeOnExecute?: boolean | undefined;
17
+ /** Maps `metadata.icon` / `category.id` string keys to Vue components. */
18
+ readonly iconMap?: Record<string, Unstable_IconComponent>;
19
+ /** Fallback icon when no entry in `iconMap` matches. */
20
+ readonly fallbackIcon?: Unstable_IconComponent;
21
+ };
22
+ /** @deprecated Experimental since 2026-04-15. Not scheduled for removal; the API may change in any release. */
23
+ export type Unstable_SlashCommandAction = {
24
+ readonly onExecute: (item: Unstable_TriggerItem) => void;
25
+ readonly removeOnExecute?: boolean | undefined;
26
+ };
27
+ /**
28
+ * Bundles slash command definitions (with inline `execute` callbacks) into
29
+ * `{adapter, action}` that plug directly into `ComposerTriggerPopover`.
30
+ * `execute` stays in the hook closure and is never attached to the returned
31
+ * `TriggerItem`, keeping items serializable.
32
+ *
33
+ * @deprecated Experimental since 2026-04-06. Not scheduled for removal; the API may change in any release.
34
+ *
35
+ * @example
36
+ * ```tsx
37
+ * const slash = unstable_useSlashCommandAdapter({
38
+ * commands: [
39
+ * { id: "summarize", execute: () => runSummarize(), icon: "FileText" },
40
+ * { id: "translate", execute: () => runTranslate(), icon: "Languages" },
41
+ * ],
42
+ * });
43
+ *
44
+ * <ComposerTriggerPopover char="/" {...slash} />
45
+ * ```
46
+ */
47
+ export declare function unstable_useSlashCommandAdapter(options: MaybeRefOrGetter<Unstable_UseSlashCommandAdapterOptions>): ComputedRef<{
48
+ adapter: Unstable_TriggerAdapter;
49
+ action: Unstable_SlashCommandAction;
50
+ iconMap?: Record<string, Unstable_IconComponent>;
51
+ fallbackIcon?: Unstable_IconComponent;
52
+ }>;
53
+ //# sourceMappingURL=useSlashCommandAdapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useSlashCommandAdapter.d.ts","mappings":"AAEA,OAAO,EAGL,KAAK,WAAW,EAChB,KAAK,gBAAgB,EACtB,MAAM,KAAK;AAEZ,OAAO,KAAK,EACV,uBAAuB,EACvB,oBAAoB,EACrB,MAAM,oBAAoB;AAC3B,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,wBAAqB;AAGjE;AACA,MAAM,MAAM,qBAAqB,GAAG;IAClC,QAAQ,CAAC,EAAE,EAAE,MAAM;IACnB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS;IACnC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS;IACzC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS;IAClC,QAAQ,CAAC,OAAO,EAAE,MAAM,IAAI;CAC7B;AAED;AACA,MAAM,MAAM,sCAAsC,GAAG;IACnD,QAAQ,CAAC,QAAQ,EAAE,SAAS,qBAAqB,EAAE;IACnD;IACA,QAAQ,CAAC,eAAe,CAAC,EAAE,OAAO,GAAG,SAAS;IAC9C;IACA,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,sBAAsB,CAAC;IACzD;IACA,QAAQ,CAAC,YAAY,CAAC,EAAE,sBAAsB;CAC/C;AAED;AACA,MAAM,MAAM,2BAA2B,GAAG;IACxC,QAAQ,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,oBAAoB,KAAK,IAAI;IACxD,QAAQ,CAAC,eAAe,CAAC,EAAE,OAAO,GAAG,SAAS;CAC/C;AAED;;;;;;;;;;;;;;;;;;;;AAoBA,wBAAgB,+BAA+B,CAC7C,OAAO,EAAE,gBAAgB,CAAC,sCAAsC,CAAC,GAChE,WAAW,CAAC;IACb,OAAO,EAAE,uBAAuB;IAChC,MAAM,EAAE,2BAA2B;IACnC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,sBAAsB,CAAC;IAChD,YAAY,CAAC,EAAE,sBAAsB;CACtC,CAAC","names":[],"ignoreList":[],"sources":["../../src/unstable/useSlashCommandAdapter.ts"],"sourcesContent":[null]}
@@ -0,0 +1,84 @@
1
+ "use client";
2
+ import { matchesTriggerItemQuery } from "../primitives/composer/trigger/matchesTriggerItemQuery.js";
3
+ import { useIsomorphicLayoutEffect } from "../utils/useIsomorphicLayoutEffect.js";
4
+ import { computed, toValue } from "vue";
5
+ // src/unstable/useSlashCommandAdapter.ts
6
+ /**
7
+ * Bundles slash command definitions (with inline `execute` callbacks) into
8
+ * `{adapter, action}` that plug directly into `ComposerTriggerPopover`.
9
+ * `execute` stays in the hook closure and is never attached to the returned
10
+ * `TriggerItem`, keeping items serializable.
11
+ *
12
+ * @deprecated Experimental since 2026-04-06. Not scheduled for removal; the API may change in any release.
13
+ *
14
+ * @example
15
+ * ```tsx
16
+ * const slash = unstable_useSlashCommandAdapter({
17
+ * commands: [
18
+ * { id: "summarize", execute: () => runSummarize(), icon: "FileText" },
19
+ * { id: "translate", execute: () => runTranslate(), icon: "Languages" },
20
+ * ],
21
+ * });
22
+ *
23
+ * <ComposerTriggerPopover char="/" {...slash} />
24
+ * ```
25
+ */
26
+ function unstable_useSlashCommandAdapter(options) {
27
+ const commands = computed(() => toValue(options).commands);
28
+ const removeOnExecute = computed(() => toValue(options).removeOnExecute);
29
+ let committedCommands = commands.value;
30
+ let committedItems;
31
+ const items = computed(() => {
32
+ const next = commands.value.map(toItem);
33
+ return areTriggerItemsEqual(committedItems, next) ? committedItems : next;
34
+ });
35
+ useIsomorphicLayoutEffect(() => {
36
+ committedCommands = commands.value;
37
+ committedItems = items.value;
38
+ }, () => [commands.value, items.value]);
39
+ const adapter = computed(() => {
40
+ const currentItems = items.value;
41
+ return {
42
+ categories: () => [],
43
+ categoryItems: () => [],
44
+ search: (query) => {
45
+ const lower = query.toLowerCase();
46
+ return currentItems.filter((item) => matchesTriggerItemQuery(item, lower));
47
+ }
48
+ };
49
+ });
50
+ const action = computed(() => ({
51
+ onExecute: (item) => {
52
+ committedCommands.find((command) => command.id === item.id)?.execute();
53
+ },
54
+ ...removeOnExecute.value !== void 0 ? { removeOnExecute: removeOnExecute.value } : {}
55
+ }));
56
+ return computed(() => {
57
+ const current = toValue(options);
58
+ return {
59
+ adapter: adapter.value,
60
+ action: action.value,
61
+ ...current.iconMap ? { iconMap: current.iconMap } : {},
62
+ ...current.fallbackIcon ? { fallbackIcon: current.fallbackIcon } : {}
63
+ };
64
+ });
65
+ }
66
+ function toItem(cmd) {
67
+ return {
68
+ id: cmd.id,
69
+ type: "command",
70
+ label: cmd.label ?? `/${cmd.id}`,
71
+ ...cmd.description !== void 0 ? { description: cmd.description } : {},
72
+ ...cmd.icon !== void 0 ? { metadata: { icon: cmd.icon } } : {}
73
+ };
74
+ }
75
+ function areTriggerItemsEqual(previous, next) {
76
+ if (!previous || previous.length !== next.length) return false;
77
+ return previous.every((item, index) => {
78
+ const nextItem = next[index];
79
+ return nextItem !== void 0 && item.id === nextItem.id && item.label === nextItem.label && item.description === nextItem.description && item.metadata?.icon === nextItem.metadata?.icon;
80
+ });
81
+ }
82
+ export { unstable_useSlashCommandAdapter };
83
+
84
+ //# sourceMappingURL=useSlashCommandAdapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useSlashCommandAdapter.js","names":[],"sources":["../../src/unstable/useSlashCommandAdapter.ts"],"sourcesContent":["\"use client\";\n\nimport {\n computed,\n toValue,\n type ComputedRef,\n type MaybeRefOrGetter,\n} from \"vue\";\nimport { useIsomorphicLayoutEffect } from \"../utils/useIsomorphicLayoutEffect\";\nimport type {\n Unstable_TriggerAdapter,\n Unstable_TriggerItem,\n} from \"@ulearning/ai-core\";\nimport type { Unstable_IconComponent } from \"./useMentionAdapter\";\nimport { matchesTriggerItemQuery } from \"../primitives/composer/trigger/matchesTriggerItemQuery\";\n\n/** @deprecated Experimental since 2026-04-15. Not scheduled for removal; the API may change in any release. */\nexport type Unstable_SlashCommand = {\n readonly id: string;\n readonly label?: string | undefined;\n readonly description?: string | undefined;\n readonly icon?: string | undefined;\n readonly execute: () => void;\n};\n\n/** @deprecated Experimental since 2026-04-06. Not scheduled for removal; the API may change in any release. */\nexport type Unstable_UseSlashCommandAdapterOptions = {\n readonly commands: readonly Unstable_SlashCommand[];\n /** Strip the trigger text from the composer after executing. @default false */\n readonly removeOnExecute?: boolean | undefined;\n /** Maps `metadata.icon` / `category.id` string keys to Vue components. */\n readonly iconMap?: Record<string, Unstable_IconComponent>;\n /** Fallback icon when no entry in `iconMap` matches. */\n readonly fallbackIcon?: Unstable_IconComponent;\n};\n\n/** @deprecated Experimental since 2026-04-15. Not scheduled for removal; the API may change in any release. */\nexport type Unstable_SlashCommandAction = {\n readonly onExecute: (item: Unstable_TriggerItem) => void;\n readonly removeOnExecute?: boolean | undefined;\n};\n\n/**\n * Bundles slash command definitions (with inline `execute` callbacks) into\n * `{adapter, action}` that plug directly into `ComposerTriggerPopover`.\n * `execute` stays in the hook closure and is never attached to the returned\n * `TriggerItem`, keeping items serializable.\n *\n * @deprecated Experimental since 2026-04-06. Not scheduled for removal; the API may change in any release.\n *\n * @example\n * ```tsx\n * const slash = unstable_useSlashCommandAdapter({\n * commands: [\n * { id: \"summarize\", execute: () => runSummarize(), icon: \"FileText\" },\n * { id: \"translate\", execute: () => runTranslate(), icon: \"Languages\" },\n * ],\n * });\n *\n * <ComposerTriggerPopover char=\"/\" {...slash} />\n * ```\n */\nexport function unstable_useSlashCommandAdapter(\n options: MaybeRefOrGetter<Unstable_UseSlashCommandAdapterOptions>,\n): ComputedRef<{\n adapter: Unstable_TriggerAdapter;\n action: Unstable_SlashCommandAction;\n iconMap?: Record<string, Unstable_IconComponent>;\n fallbackIcon?: Unstable_IconComponent;\n}> {\n const commands = computed(() => toValue(options).commands);\n const removeOnExecute = computed(() => toValue(options).removeOnExecute);\n let committedCommands = commands.value;\n let committedItems: readonly Unstable_TriggerItem[] | undefined;\n const items = computed(() => {\n const next = commands.value.map(toItem);\n return areTriggerItemsEqual(committedItems, next) ? committedItems : next;\n });\n useIsomorphicLayoutEffect(\n () => {\n committedCommands = commands.value;\n committedItems = items.value;\n },\n () => [commands.value, items.value],\n );\n\n const adapter = computed<Unstable_TriggerAdapter>(() => {\n const currentItems = items.value;\n return {\n categories: () => [],\n categoryItems: () => [],\n search: (query: string) => {\n const lower = query.toLowerCase();\n return currentItems.filter((item) =>\n matchesTriggerItemQuery(item, lower),\n );\n },\n };\n });\n const action = computed<Unstable_SlashCommandAction>(() => ({\n onExecute: (item) => {\n committedCommands.find((command) => command.id === item.id)?.execute();\n },\n ...(removeOnExecute.value !== undefined\n ? { removeOnExecute: removeOnExecute.value }\n : {}),\n }));\n return computed(() => {\n const current = toValue(options);\n return {\n adapter: adapter.value,\n action: action.value,\n ...(current.iconMap ? { iconMap: current.iconMap } : {}),\n ...(current.fallbackIcon ? { fallbackIcon: current.fallbackIcon } : {}),\n };\n });\n}\n\nfunction toItem(cmd: Unstable_SlashCommand): Unstable_TriggerItem {\n return {\n id: cmd.id,\n type: \"command\",\n label: cmd.label ?? `/${cmd.id}`,\n ...(cmd.description !== undefined ? { description: cmd.description } : {}),\n ...(cmd.icon !== undefined ? { metadata: { icon: cmd.icon } } : {}),\n };\n}\n\nfunction areTriggerItemsEqual(\n previous: readonly Unstable_TriggerItem[] | undefined,\n next: readonly Unstable_TriggerItem[],\n): previous is readonly Unstable_TriggerItem[] {\n if (!previous || previous.length !== next.length) return false;\n\n return previous.every((item, index) => {\n const nextItem = next[index];\n return (\n nextItem !== undefined &&\n item.id === nextItem.id &&\n item.label === nextItem.label &&\n item.description === nextItem.description &&\n item.metadata?.icon === nextItem.metadata?.icon\n );\n });\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AA8DA,SAAgB,gCACd,SAMC;CACD,MAAM,WAAW,eAAe,QAAQ,OAAO,CAAC,CAAC,QAAQ;CACzD,MAAM,kBAAkB,eAAe,QAAQ,OAAO,CAAC,CAAC,eAAe;CACvE,IAAI,oBAAoB,SAAS;CACjC,IAAI;CACJ,MAAM,QAAQ,eAAe;EAC3B,MAAM,OAAO,SAAS,MAAM,IAAI,MAAM;EACtC,OAAO,qBAAqB,gBAAgB,IAAI,IAAI,iBAAiB;CACvE,CAAC;CACD,gCACQ;EACJ,oBAAoB,SAAS;EAC7B,iBAAiB,MAAM;CACzB,SACM,CAAC,SAAS,OAAO,MAAM,KAAK,CACpC;CAEA,MAAM,UAAU,eAAwC;EACtD,MAAM,eAAe,MAAM;EAC3B,OAAO;GACL,kBAAkB,CAAC;GACnB,qBAAqB,CAAC;GACtB,SAAS,UAAkB;IACzB,MAAM,QAAQ,MAAM,YAAY;IAChC,OAAO,aAAa,QAAQ,SAC1B,wBAAwB,MAAM,KAAK,CACrC;GACF;EACF;CACF,CAAC;CACD,MAAM,SAAS,gBAA6C;EAC1D,YAAY,SAAS;GACnB,kBAAkB,MAAM,YAAY,QAAQ,OAAO,KAAK,EAAE,CAAC,EAAE,QAAQ;EACvE;EACA,GAAI,gBAAgB,UAAU,KAAA,IAC1B,EAAE,iBAAiB,gBAAgB,MAAM,IACzC,CAAC;CACP,EAAE;CACF,OAAO,eAAe;EACpB,MAAM,UAAU,QAAQ,OAAO;EAC/B,OAAO;GACL,SAAS,QAAQ;GACjB,QAAQ,OAAO;GACf,GAAI,QAAQ,UAAU,EAAE,SAAS,QAAQ,QAAQ,IAAI,CAAC;GACtD,GAAI,QAAQ,eAAe,EAAE,cAAc,QAAQ,aAAa,IAAI,CAAC;EACvE;CACF,CAAC;AACH;AAEA,SAAS,OAAO,KAAkD;CAChE,OAAO;EACL,IAAI,IAAI;EACR,MAAM;EACN,OAAO,IAAI,SAAS,IAAI,IAAI;EAC5B,GAAI,IAAI,gBAAgB,KAAA,IAAY,EAAE,aAAa,IAAI,YAAY,IAAI,CAAC;EACxE,GAAI,IAAI,SAAS,KAAA,IAAY,EAAE,UAAU,EAAE,MAAM,IAAI,KAAK,EAAE,IAAI,CAAC;CACnE;AACF;AAEA,SAAS,qBACP,UACA,MAC6C;CAC7C,IAAI,CAAC,YAAY,SAAS,WAAW,KAAK,QAAQ,OAAO;CAEzD,OAAO,SAAS,OAAO,MAAM,UAAU;EACrC,MAAM,WAAW,KAAK;EACtB,OACE,aAAa,KAAA,KACb,KAAK,OAAO,SAAS,MACrB,KAAK,UAAU,SAAS,SACxB,KAAK,gBAAgB,SAAS,eAC9B,KAAK,UAAU,SAAS,SAAS,UAAU;CAE/C,CAAC;AACH"}
@@ -0,0 +1,12 @@
1
+ import type { Tool } from "@ulearning/ai-stream";
2
+ import type { WebMcpHost } from "./webmcp-host.js";
3
+ export type WebMcpRegistrationProps = {
4
+ host: WebMcpHost;
5
+ name: string;
6
+ /** Re-registers when it changes; an execute-only edit reads through instead. */
7
+ signature: string;
8
+ tool: Tool<any, any>;
9
+ getCurrentTool: (name: string) => Tool<any, any> | undefined;
10
+ };
11
+ export declare const WebMcpRegistrationResource: import("@ulearning/ai-tap").Resource<string | null, [WebMcpRegistrationProps]>;
12
+ //# sourceMappingURL=WebMcpRegistrationResource.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WebMcpRegistrationResource.d.ts","mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,sBAAsB;AAEhD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAe;AAE/C,MAAM,MAAM,uBAAuB,GAAG;IACpC,IAAI,EAAE,UAAU;IAChB,IAAI,EAAE,MAAM;IACZ;IACA,SAAS,EAAE,MAAM;IACjB,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;IACpB,cAAc,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,SAAS;CAC7D;AA+ED,eAAO,MAAM,0BAA0B,gFAAkC","names":[],"ignoreList":[],"sources":["../../../src/unstable/webmcp/WebMcpRegistrationResource.ts"],"sourcesContent":[null]}
@@ -0,0 +1,47 @@
1
+ import { toWebMcpTool } from "./convertTools.js";
2
+ import { resource, useEffect, useRef, useState } from "@ulearning/ai-tap";
3
+ // src/unstable/webmcp/WebMcpRegistrationResource.ts
4
+ const notPermitted = (error) => error?.name === "NotAllowedError";
5
+ const notPermittedMessage = (name) => `[assistant-ui] WebMCP registration for tool "${name}" was not permitted; the page's tools permission is disabled.`;
6
+ const useWebMcpRegistration = ({ host, name, signature, tool, getCurrentTool }) => {
7
+ const [refused, setRefused] = useState(false);
8
+ const fallbackToolRef = useRef(tool);
9
+ useEffect(() => {
10
+ if (refused) return void 0;
11
+ const lifecycle = new AbortController();
12
+ let live = true;
13
+ let dispose;
14
+ const refuse = (message, error) => {
15
+ if (!live) return;
16
+ live = false;
17
+ setRefused(true);
18
+ console.warn(message, error);
19
+ };
20
+ try {
21
+ dispose = host.registerTool(toWebMcpTool(name, () => getCurrentTool(name) ?? fallbackToolRef.current, lifecycle.signal), (error) => refuse(notPermitted(error) ? notPermittedMessage(name) : `[assistant-ui] WebMCP registration for tool "${name}" failed (name may already be registered).`, error));
22
+ } catch (error) {
23
+ refuse(notPermitted(error) ? notPermittedMessage(name) : `[assistant-ui] Skipping WebMCP registration for tool "${name}": registerTool failed (name may already be registered).`, error);
24
+ return;
25
+ }
26
+ return () => {
27
+ live = false;
28
+ lifecycle.abort();
29
+ try {
30
+ dispose();
31
+ } catch (error) {
32
+ console.warn(`[assistant-ui] Unregistering WebMCP tool "${name}" failed.`, error);
33
+ }
34
+ };
35
+ }, [
36
+ getCurrentTool,
37
+ host,
38
+ name,
39
+ signature,
40
+ refused
41
+ ]);
42
+ return refused ? null : name;
43
+ };
44
+ const WebMcpRegistrationResource = resource(useWebMcpRegistration);
45
+ export { WebMcpRegistrationResource };
46
+
47
+ //# sourceMappingURL=WebMcpRegistrationResource.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WebMcpRegistrationResource.js","names":[],"sources":["../../../src/unstable/webmcp/WebMcpRegistrationResource.ts"],"sourcesContent":["import { resource, useEffect, useRef, useState } from \"@ulearning/ai-tap\";\nimport type { Tool } from \"@ulearning/ai-stream\";\nimport { toWebMcpTool } from \"./convertTools\";\nimport type { WebMcpHost } from \"./webmcp-host\";\n\nexport type WebMcpRegistrationProps = {\n host: WebMcpHost;\n name: string;\n /** Re-registers when it changes; an execute-only edit reads through instead. */\n signature: string;\n tool: Tool<any, any>;\n getCurrentTool: (name: string) => Tool<any, any> | undefined;\n};\n\n// The explainer specifies NotAllowedError for a page whose tools permission is\n// off, which a cross-origin iframe without allow=\"tools\" reaches routinely. It\n// documents no rejection for a name already taken, so that stays a hedge.\nconst notPermitted = (error: unknown) =>\n (error as { name?: unknown } | null | undefined)?.name === \"NotAllowedError\";\n\nconst notPermittedMessage = (name: string) =>\n `[assistant-ui] WebMCP registration for tool \"${name}\" was not permitted; the page's tools permission is disabled.`;\n\nconst useWebMcpRegistration = ({\n host,\n name,\n signature,\n tool,\n getCurrentTool,\n}: WebMcpRegistrationProps): string | null => {\n // A refused name is remembered for as long as the tool stays in the model\n // context, so a permanent collision warns once rather than on every sync.\n const [refused, setRefused] = useState(false);\n const fallbackToolRef = useRef(tool);\n\n useEffect(() => {\n if (refused) return undefined;\n\n const lifecycle = new AbortController();\n let live = true;\n let dispose: (() => void) | undefined;\n\n const refuse = (message: string, error: unknown) => {\n if (!live) return;\n live = false;\n setRefused(true);\n console.warn(message, error);\n };\n\n try {\n dispose = host.registerTool(\n toWebMcpTool(\n name,\n () => getCurrentTool(name) ?? fallbackToolRef.current,\n lifecycle.signal,\n ),\n (error) =>\n refuse(\n notPermitted(error)\n ? notPermittedMessage(name)\n : `[assistant-ui] WebMCP registration for tool \"${name}\" failed (name may already be registered).`,\n error,\n ),\n );\n } catch (error) {\n refuse(\n notPermitted(error)\n ? notPermittedMessage(name)\n : `[assistant-ui] Skipping WebMCP registration for tool \"${name}\": registerTool failed (name may already be registered).`,\n error,\n );\n return undefined;\n }\n\n return () => {\n live = false;\n lifecycle.abort();\n try {\n dispose();\n } catch (error) {\n console.warn(\n `[assistant-ui] Unregistering WebMCP tool \"${name}\" failed.`,\n error,\n );\n }\n };\n }, [getCurrentTool, host, name, signature, refused]);\n\n return refused ? null : name;\n};\n\nexport const WebMcpRegistrationResource = resource(useWebMcpRegistration);\n"],"mappings":";;;AAiBA,MAAM,gBAAgB,UACnB,OAAiD,SAAS;AAE7D,MAAM,uBAAuB,SAC3B,gDAAgD,KAAK;AAEvD,MAAM,yBAAyB,EAC7B,MACA,MACA,WACA,MACA,qBAC4C;CAG5C,MAAM,CAAC,SAAS,cAAc,SAAS,KAAK;CAC5C,MAAM,kBAAkB,OAAO,IAAI;CAEnC,gBAAgB;EACd,IAAI,SAAS,OAAO,KAAA;EAEpB,MAAM,YAAY,IAAI,gBAAgB;EACtC,IAAI,OAAO;EACX,IAAI;EAEJ,MAAM,UAAU,SAAiB,UAAmB;GAClD,IAAI,CAAC,MAAM;GACX,OAAO;GACP,WAAW,IAAI;GACf,QAAQ,KAAK,SAAS,KAAK;EAC7B;EAEA,IAAI;GACF,UAAU,KAAK,aACb,aACE,YACM,eAAe,IAAI,KAAK,gBAAgB,SAC9C,UAAU,MACZ,IACC,UACC,OACE,aAAa,KAAK,IACd,oBAAoB,IAAI,IACxB,gDAAgD,KAAK,6CACzD,KACF,CACJ;EACF,SAAS,OAAO;GACd,OACE,aAAa,KAAK,IACd,oBAAoB,IAAI,IACxB,yDAAyD,KAAK,2DAClE,KACF;GACA;EACF;EAEA,aAAa;GACX,OAAO;GACP,UAAU,MAAM;GAChB,IAAI;IACF,QAAQ;GACV,SAAS,OAAO;IACd,QAAQ,KACN,6CAA6C,KAAK,YAClD,KACF;GACF;EACF;CACF,GAAG;EAAC;EAAgB;EAAM;EAAM;EAAW;CAAO,CAAC;CAEnD,OAAO,UAAU,OAAO;AAC1B;AAEA,MAAa,6BAA6B,SAAS,qBAAqB"}
@@ -0,0 +1,18 @@
1
+ import { type Tool } from "@ulearning/ai-stream";
2
+ import type { WebMcpCallToolResult, WebMcpToolDescriptor } from "./webmcp-host.js";
3
+ /**
4
+ * The predicate the WebMCP provider uses when no `filter` is passed: an enabled
5
+ * frontend tool with a client-side `execute`. A tool authored without a `type`
6
+ * is included, because `execute` is what distinguishes the deprecated
7
+ * type-less form from a backend or human tool. A `filter` replaces this, so
8
+ * pass it through to narrow the default set rather than widen it.
9
+ */
10
+ export declare const defaultWebMcpFilter: (_name: string, tool: Tool<any, any>) => boolean;
11
+ export declare const toWebMcpInputSchema: (tool: Tool<any, any>) => unknown;
12
+ export declare const toMcpContent: (result: unknown, options: {
13
+ tool: Tool<any, any>;
14
+ toolCallId: string;
15
+ args: Record<string, unknown>;
16
+ }) => Promise<WebMcpCallToolResult>;
17
+ export declare const toWebMcpTool: (name: string, getTool: () => Tool<any, any>, lifecycleSignal?: AbortSignal) => WebMcpToolDescriptor;
18
+ //# sourceMappingURL=convertTools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"convertTools.d.ts","mappings":"AAAA,OAAO,EAGL,KAAK,IAAI,EAEV,MAAM,sBAAsB;AAE7B,OAAO,KAAK,EACV,oBAAoB,EAEpB,oBAAoB,EACrB,MAAM,kBAAe;AAEtB;;;;;;;AAOA,eAAO,MAAM,mBAAmB,GAC9B,OAAO,MAAM,EACb,MAAM,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,KACnB,OAGa;AAEhB,eAAO,MAAM,mBAAmB,GAAI,MAAM,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,KAAG,OAGnB;AAwCxC,eAAO,MAAM,YAAY,GACvB,QAAQ,OAAO,EACf,SAAS;IACP,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;IACpB,UAAU,EAAE,MAAM;IAClB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAC9B,KACA,OAAO,CAAC,oBAAoB,CAuB9B;AA2ED,eAAO,MAAM,YAAY,GACvB,MAAM,MAAM,EACZ,SAAS,MAAM,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,EAC7B,kBAAkB,WAAW,KAC5B,oBA2ED","names":[],"ignoreList":[],"sources":["../../../src/unstable/webmcp/convertTools.ts"],"sourcesContent":[null]}
@@ -0,0 +1,160 @@
1
+ import { generateId } from "@ulearning/ai-core/internal";
2
+ import { ToolResponse, toJSONSchema } from "@ulearning/ai-stream";
3
+ // src/unstable/webmcp/convertTools.ts
4
+ /**
5
+ * The predicate the WebMCP provider uses when no `filter` is passed: an enabled
6
+ * frontend tool with a client-side `execute`. A tool authored without a `type`
7
+ * is included, because `execute` is what distinguishes the deprecated
8
+ * type-less form from a backend or human tool. A `filter` replaces this, so
9
+ * pass it through to narrow the default set rather than widen it.
10
+ */
11
+ const defaultWebMcpFilter = (_name, tool) => (tool.type === "frontend" || tool.type === void 0) && !!tool.execute && !tool.disabled;
12
+ const toWebMcpInputSchema = (tool) => tool.parameters ? toJSONSchema(tool.parameters) : {
13
+ type: "object",
14
+ properties: {}
15
+ };
16
+ const textContent = (text) => ({
17
+ type: "text",
18
+ text
19
+ });
20
+ const errorResult = (message) => ({
21
+ isError: true,
22
+ content: [textContent(message)]
23
+ });
24
+ const toText = (value) => {
25
+ if (typeof value === "string") return value;
26
+ if (typeof value === "bigint" || typeof value === "symbol") return value.toString();
27
+ return JSON.stringify(value) ?? String(value);
28
+ };
29
+ const primitiveContent = (value) => [textContent(toText(value))];
30
+ const mapModelContentPart = (part) => {
31
+ if (part.type === "text") return textContent(part.text ?? "");
32
+ if (part.type === "file") {
33
+ if (typeof part.mediaType === "string" && part.mediaType.startsWith("image/")) return {
34
+ type: "image",
35
+ data: part.data ?? "",
36
+ mimeType: part.mediaType
37
+ };
38
+ return textContent(part.data ?? "");
39
+ }
40
+ return textContent(toText(part));
41
+ };
42
+ const toMcpContent = async (result, options) => {
43
+ const response = ToolResponse.toResponse(result);
44
+ if (response.modelContent) {
45
+ const content = response.modelContent.map(mapModelContentPart);
46
+ return response.isError ? {
47
+ isError: true,
48
+ content
49
+ } : { content };
50
+ }
51
+ if (!response.isError && options.tool.toModelOutput) try {
52
+ return { content: (await options.tool.toModelOutput({
53
+ toolCallId: options.toolCallId,
54
+ input: options.args,
55
+ output: response.result
56
+ })).map(mapModelContentPart) };
57
+ } catch (e) {
58
+ console.warn("[assistant-ui] toModelOutput threw; falling back to default projection.", e);
59
+ }
60
+ const content = primitiveContent(response.result);
61
+ return response.isError ? {
62
+ isError: true,
63
+ content
64
+ } : { content };
65
+ };
66
+ const isStandardSchema = (schema) => typeof schema === "object" && schema !== null && "~standard" in schema && schema["~standard"].version === 1;
67
+ const TOOL_ABORTED = Symbol("assistant-ui.webmcp-tool-aborted");
68
+ const isThenable = (value) => typeof value?.then === "function";
69
+ const raceWithAbort = async (value, abortSignal) => {
70
+ let onAbort;
71
+ const abortPromise = new Promise((resolve) => {
72
+ onAbort = () => resolve(TOOL_ABORTED);
73
+ if (abortSignal.aborted) onAbort();
74
+ else abortSignal.addEventListener("abort", onAbort, { once: true });
75
+ });
76
+ try {
77
+ return await Promise.race([abortPromise, value]);
78
+ } finally {
79
+ abortSignal.removeEventListener("abort", onAbort);
80
+ }
81
+ };
82
+ const combineAbortSignals = (callerSignal, lifecycleSignal) => {
83
+ const controller = new AbortController();
84
+ const teardown = [];
85
+ const cleanup = () => {
86
+ while (teardown.length) teardown.pop()();
87
+ };
88
+ const abort = (reason) => {
89
+ cleanup();
90
+ controller.abort(reason);
91
+ };
92
+ const listen = (signal) => {
93
+ const onAbort = () => abort(signal.reason);
94
+ signal.addEventListener("abort", onAbort, { once: true });
95
+ teardown.push(() => signal.removeEventListener("abort", onAbort));
96
+ };
97
+ if (callerSignal.aborted) abort(callerSignal.reason);
98
+ else if (lifecycleSignal.aborted) abort(lifecycleSignal.reason);
99
+ else {
100
+ listen(callerSignal);
101
+ listen(lifecycleSignal);
102
+ }
103
+ return {
104
+ signal: controller.signal,
105
+ cleanup
106
+ };
107
+ };
108
+ const toWebMcpTool = (name, getTool, lifecycleSignal) => ({
109
+ name,
110
+ description: getTool().description ?? "",
111
+ inputSchema: toWebMcpInputSchema(getTool()),
112
+ execute: async (rawArgs, context) => {
113
+ if (lifecycleSignal?.aborted) return errorResult(`Tool "${name}" is no longer registered`);
114
+ const tool = getTool();
115
+ let args = rawArgs ?? {};
116
+ const toolCallId = generateId();
117
+ let cleanup;
118
+ try {
119
+ const callerSignal = context?.signal;
120
+ let abortSignal;
121
+ if (callerSignal && lifecycleSignal) {
122
+ const combined = combineAbortSignals(callerSignal, lifecycleSignal);
123
+ abortSignal = combined.signal;
124
+ cleanup = combined.cleanup;
125
+ } else abortSignal = callerSignal ?? lifecycleSignal;
126
+ if (abortSignal?.aborted) return errorResult("Tool execution was cancelled.");
127
+ let executeFn = tool.execute;
128
+ if (isStandardSchema(tool.parameters)) {
129
+ const result = tool.parameters["~standard"].validate(args);
130
+ const validation = isThenable(result) ? abortSignal ? await raceWithAbort(result, abortSignal) : await result : result;
131
+ if (validation === TOOL_ABORTED) return errorResult("Tool execution was cancelled.");
132
+ if (validation.issues) {
133
+ const issues = validation.issues;
134
+ executeFn = tool.experimental_onSchemaValidationError ?? (() => {
135
+ throw new Error(`Function parameter validation failed. ${JSON.stringify(issues)}`);
136
+ });
137
+ } else args = validation.value;
138
+ }
139
+ if (abortSignal?.aborted) return errorResult("Tool execution was cancelled.");
140
+ if (!executeFn) return errorResult(`Tool "${name}" has no client-side implementation.`);
141
+ const result = await executeFn(args, {
142
+ toolCallId,
143
+ abortSignal: abortSignal ?? new AbortController().signal,
144
+ human: () => Promise.reject(/* @__PURE__ */ new Error("human input not supported in WebMCP context"))
145
+ });
146
+ return await toMcpContent(result, {
147
+ tool,
148
+ toolCallId,
149
+ args
150
+ });
151
+ } catch (e) {
152
+ return errorResult(e instanceof Error ? e.message : String(e));
153
+ } finally {
154
+ cleanup?.();
155
+ }
156
+ }
157
+ });
158
+ export { defaultWebMcpFilter, toMcpContent, toWebMcpInputSchema, toWebMcpTool };
159
+
160
+ //# sourceMappingURL=convertTools.js.map