@assistant-ui/core 0.3.20 → 0.3.21

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 (905) hide show
  1. package/dist/adapters/attachment.d.ts +42 -34
  2. package/dist/adapters/attachment.d.ts.map +1 -1
  3. package/dist/adapters/attachment.js +51 -21
  4. package/dist/adapters/attachment.js.map +1 -1
  5. package/dist/adapters/directive-formatter.d.ts +1 -3
  6. package/dist/adapters/directive-formatter.d.ts.map +1 -1
  7. package/dist/adapters/feedback.d.ts +6 -7
  8. package/dist/adapters/feedback.d.ts.map +1 -1
  9. package/dist/adapters/index.d.ts +14 -9
  10. package/dist/adapters/index.d.ts.map +1 -0
  11. package/dist/adapters/index.js +1 -1
  12. package/dist/adapters/speech.d.ts +57 -58
  13. package/dist/adapters/speech.d.ts.map +1 -1
  14. package/dist/adapters/speech.js +16 -2
  15. package/dist/adapters/speech.js.map +1 -1
  16. package/dist/adapters/suggestion.d.ts +14 -16
  17. package/dist/adapters/suggestion.d.ts.map +1 -1
  18. package/dist/adapters/thread-history.d.ts +54 -51
  19. package/dist/adapters/thread-history.d.ts.map +1 -1
  20. package/dist/adapters/trigger.d.ts +7 -9
  21. package/dist/adapters/trigger.d.ts.map +1 -1
  22. package/dist/adapters/voice.d.ts +46 -40
  23. package/dist/adapters/voice.d.ts.map +1 -1
  24. package/dist/adapters/voice.js +17 -3
  25. package/dist/adapters/voice.js.map +1 -1
  26. package/dist/index.d.ts +70 -56
  27. package/dist/index.d.ts.map +1 -0
  28. package/dist/index.js +6 -6
  29. package/dist/index.js.map +1 -1
  30. package/dist/internal/duplicate-detection.d.ts +0 -2
  31. package/dist/internal/duplicate-detection.d.ts.map +1 -1
  32. package/dist/internal.d.ts +27 -58
  33. package/dist/internal.d.ts.map +1 -0
  34. package/dist/internal.js +8 -6
  35. package/dist/model-context/frame/host.d.ts +19 -21
  36. package/dist/model-context/frame/host.d.ts.map +1 -1
  37. package/dist/model-context/frame/host.js +3 -1
  38. package/dist/model-context/frame/host.js.map +1 -1
  39. package/dist/model-context/frame/provider.d.ts +27 -28
  40. package/dist/model-context/frame/provider.d.ts.map +1 -1
  41. package/dist/model-context/frame/provider.js +6 -0
  42. package/dist/model-context/frame/provider.js.map +1 -1
  43. package/dist/model-context/frame/types.d.ts +19 -21
  44. package/dist/model-context/frame/types.d.ts.map +1 -1
  45. package/dist/model-context/frame/validate.d.ts +3 -0
  46. package/dist/model-context/frame/validate.d.ts.map +1 -0
  47. package/dist/model-context/frame/validate.js +26 -0
  48. package/dist/model-context/frame/validate.js.map +1 -0
  49. package/dist/model-context/interactable-composer-metadata.d.ts +42 -29
  50. package/dist/model-context/interactable-composer-metadata.d.ts.map +1 -1
  51. package/dist/model-context/interactable-composer-metadata.js +30 -6
  52. package/dist/model-context/interactable-composer-metadata.js.map +1 -1
  53. package/dist/model-context/registry-handles.d.ts +6 -8
  54. package/dist/model-context/registry-handles.d.ts.map +1 -1
  55. package/dist/model-context/registry.d.ts +14 -16
  56. package/dist/model-context/registry.d.ts.map +1 -1
  57. package/dist/model-context/tool-call-text.d.ts +13 -14
  58. package/dist/model-context/tool-call-text.d.ts.map +1 -1
  59. package/dist/model-context/tool.d.ts +10 -11
  60. package/dist/model-context/tool.d.ts.map +1 -1
  61. package/dist/model-context/types.d.ts +32 -34
  62. package/dist/model-context/types.d.ts.map +1 -1
  63. package/dist/react/AssistantProvider.d.ts +6 -8
  64. package/dist/react/AssistantProvider.d.ts.map +1 -1
  65. package/dist/react/AssistantRuntimeProvider.d.ts +23 -25
  66. package/dist/react/AssistantRuntimeProvider.d.ts.map +1 -1
  67. package/dist/react/RuntimeAdapter.d.ts +2 -5
  68. package/dist/react/RuntimeAdapter.d.ts.map +1 -1
  69. package/dist/react/adapters/LocalStorageThreadListAdapter.d.ts +24 -18
  70. package/dist/react/adapters/LocalStorageThreadListAdapter.d.ts.map +1 -1
  71. package/dist/react/adapters/LocalStorageThreadListAdapter.js +58 -25
  72. package/dist/react/adapters/LocalStorageThreadListAdapter.js.map +1 -1
  73. package/dist/react/adapters/TitleGenerationAdapter.d.ts +2 -4
  74. package/dist/react/adapters/TitleGenerationAdapter.d.ts.map +1 -1
  75. package/dist/react/client/AdaptedRemoteThread.d.ts +5 -7
  76. package/dist/react/client/AdaptedRemoteThread.d.ts.map +1 -1
  77. package/dist/react/client/DataRenderers.d.ts +1 -3
  78. package/dist/react/client/DataRenderers.d.ts.map +1 -1
  79. package/dist/react/client/InMemoryThreadList.d.ts +6 -8
  80. package/dist/react/client/InMemoryThreadList.d.ts.map +1 -1
  81. package/dist/react/client/Interactables.d.ts +2 -4
  82. package/dist/react/client/Interactables.d.ts.map +1 -1
  83. package/dist/react/client/Interactables.js +306 -101
  84. package/dist/react/client/Interactables.js.map +1 -1
  85. package/dist/react/client/RemoteThreadList.d.ts +32 -34
  86. package/dist/react/client/RemoteThreadList.d.ts.map +1 -1
  87. package/dist/react/client/RemoteThreadList.js +2 -1
  88. package/dist/react/client/RemoteThreadList.js.map +1 -1
  89. package/dist/react/client/Tools.d.ts +9 -11
  90. package/dist/react/client/Tools.d.ts.map +1 -1
  91. package/dist/react/client/Tools.js +4 -8
  92. package/dist/react/client/Tools.js.map +1 -1
  93. package/dist/react/client/interactable-model-context.d.ts +9 -10
  94. package/dist/react/client/interactable-model-context.d.ts.map +1 -1
  95. package/dist/react/client/interactable-model-context.js +32 -22
  96. package/dist/react/client/interactable-model-context.js.map +1 -1
  97. package/dist/react/index.d.ts +160 -122
  98. package/dist/react/index.d.ts.map +1 -0
  99. package/dist/react/index.js +5 -5
  100. package/dist/react/interactables-legacy/Interactables.d.ts +1 -3
  101. package/dist/react/interactables-legacy/Interactables.d.ts.map +1 -1
  102. package/dist/react/interactables-legacy/Interactables.js +15 -8
  103. package/dist/react/interactables-legacy/Interactables.js.map +1 -1
  104. package/dist/react/interactables-legacy/interactable-model-context.d.ts +6 -8
  105. package/dist/react/interactables-legacy/interactable-model-context.d.ts.map +1 -1
  106. package/dist/react/interactables-legacy/interactable-model-context.js +13 -14
  107. package/dist/react/interactables-legacy/interactable-model-context.js.map +1 -1
  108. package/dist/react/interactables-legacy/scopes.d.ts +33 -36
  109. package/dist/react/interactables-legacy/scopes.d.ts.map +1 -1
  110. package/dist/react/interactables-legacy/useAssistantInteractable.d.ts +6 -8
  111. package/dist/react/interactables-legacy/useAssistantInteractable.d.ts.map +1 -1
  112. package/dist/react/interactables-legacy/useInteractableState.d.ts +6 -7
  113. package/dist/react/interactables-legacy/useInteractableState.d.ts.map +1 -1
  114. package/dist/react/interactables-shared/useInteractablePersistenceQueue.d.ts +23 -13
  115. package/dist/react/interactables-shared/useInteractablePersistenceQueue.d.ts.map +1 -1
  116. package/dist/react/interactables-shared/useInteractablePersistenceQueue.js +54 -25
  117. package/dist/react/interactables-shared/useInteractablePersistenceQueue.js.map +1 -1
  118. package/dist/react/model-context/define-mcp-toolkit.d.ts +11 -13
  119. package/dist/react/model-context/define-mcp-toolkit.d.ts.map +1 -1
  120. package/dist/react/model-context/define-toolkit.d.ts +12 -4
  121. package/dist/react/model-context/define-toolkit.d.ts.map +1 -1
  122. package/dist/react/model-context/external-tool.d.ts +0 -2
  123. package/dist/react/model-context/external-tool.d.ts.map +1 -1
  124. package/dist/react/model-context/human-tool.d.ts +0 -2
  125. package/dist/react/model-context/human-tool.d.ts.map +1 -1
  126. package/dist/react/model-context/interactableTool.d.ts +23 -25
  127. package/dist/react/model-context/interactableTool.d.ts.map +1 -1
  128. package/dist/react/model-context/makeAssistantDataUI.d.ts +4 -6
  129. package/dist/react/model-context/makeAssistantDataUI.d.ts.map +1 -1
  130. package/dist/react/model-context/makeAssistantTool.d.ts +4 -6
  131. package/dist/react/model-context/makeAssistantTool.d.ts.map +1 -1
  132. package/dist/react/model-context/makeAssistantToolUI.d.ts +4 -6
  133. package/dist/react/model-context/makeAssistantToolUI.d.ts.map +1 -1
  134. package/dist/react/model-context/provider-tool.d.ts +3 -4
  135. package/dist/react/model-context/provider-tool.d.ts.map +1 -1
  136. package/dist/react/model-context/stub-tool.d.ts +0 -2
  137. package/dist/react/model-context/stub-tool.d.ts.map +1 -1
  138. package/dist/react/model-context/toolbox.d.ts +37 -24
  139. package/dist/react/model-context/toolbox.d.ts.map +1 -1
  140. package/dist/react/model-context/useAssistantContext.d.ts +2 -5
  141. package/dist/react/model-context/useAssistantContext.d.ts.map +1 -1
  142. package/dist/react/model-context/useAssistantDataUI.d.ts +5 -7
  143. package/dist/react/model-context/useAssistantDataUI.d.ts.map +1 -1
  144. package/dist/react/model-context/useAssistantInstructions.d.ts +2 -5
  145. package/dist/react/model-context/useAssistantInstructions.d.ts.map +1 -1
  146. package/dist/react/model-context/useAssistantTool.d.ts +8 -11
  147. package/dist/react/model-context/useAssistantTool.d.ts.map +1 -1
  148. package/dist/react/model-context/useAssistantToolUI.d.ts +11 -13
  149. package/dist/react/model-context/useAssistantToolUI.d.ts.map +1 -1
  150. package/dist/react/model-context/useAuiToolOverrides.d.ts +2 -3
  151. package/dist/react/model-context/useAuiToolOverrides.d.ts.map +1 -1
  152. package/dist/react/model-context/useInlineRender.d.ts +2 -4
  153. package/dist/react/model-context/useInlineRender.d.ts.map +1 -1
  154. package/dist/react/model-context/useInteractable.d.ts +37 -36
  155. package/dist/react/model-context/useInteractable.d.ts.map +1 -1
  156. package/dist/react/model-context/useInteractableState.d.ts +10 -8
  157. package/dist/react/model-context/useInteractableState.d.ts.map +1 -1
  158. package/dist/react/model-context/useInteractableVersions.d.ts +3 -5
  159. package/dist/react/model-context/useInteractableVersions.d.ts.map +1 -1
  160. package/dist/react/model-context/useToolArgsStatus.d.ts +5 -6
  161. package/dist/react/model-context/useToolArgsStatus.d.ts.map +1 -1
  162. package/dist/react/primitive-hooks/useActionBarCopy.d.ts +6 -8
  163. package/dist/react/primitive-hooks/useActionBarCopy.d.ts.map +1 -1
  164. package/dist/react/primitive-hooks/useActionBarEdit.d.ts +2 -4
  165. package/dist/react/primitive-hooks/useActionBarEdit.d.ts.map +1 -1
  166. package/dist/react/primitive-hooks/useActionBarFeedback.d.ts +4 -6
  167. package/dist/react/primitive-hooks/useActionBarFeedback.d.ts.map +1 -1
  168. package/dist/react/primitive-hooks/useActionBarReload.d.ts +2 -4
  169. package/dist/react/primitive-hooks/useActionBarReload.d.ts.map +1 -1
  170. package/dist/react/primitive-hooks/useActionBarSpeak.d.ts +2 -4
  171. package/dist/react/primitive-hooks/useActionBarSpeak.d.ts.map +1 -1
  172. package/dist/react/primitive-hooks/useActionBarStopSpeaking.d.ts +2 -4
  173. package/dist/react/primitive-hooks/useActionBarStopSpeaking.d.ts.map +1 -1
  174. package/dist/react/primitive-hooks/useBranchPickerNext.d.ts +2 -4
  175. package/dist/react/primitive-hooks/useBranchPickerNext.d.ts.map +1 -1
  176. package/dist/react/primitive-hooks/useBranchPickerPrevious.d.ts +2 -4
  177. package/dist/react/primitive-hooks/useBranchPickerPrevious.d.ts.map +1 -1
  178. package/dist/react/primitive-hooks/useComposerAddAttachment.d.ts +3 -5
  179. package/dist/react/primitive-hooks/useComposerAddAttachment.d.ts.map +1 -1
  180. package/dist/react/primitive-hooks/useComposerCancel.d.ts +2 -4
  181. package/dist/react/primitive-hooks/useComposerCancel.d.ts.map +1 -1
  182. package/dist/react/primitive-hooks/useComposerDictate.d.ts +2 -4
  183. package/dist/react/primitive-hooks/useComposerDictate.d.ts.map +1 -1
  184. package/dist/react/primitive-hooks/useComposerSend.d.ts +3 -5
  185. package/dist/react/primitive-hooks/useComposerSend.d.ts.map +1 -1
  186. package/dist/react/primitive-hooks/useEditComposerCancel.d.ts +1 -3
  187. package/dist/react/primitive-hooks/useEditComposerCancel.d.ts.map +1 -1
  188. package/dist/react/primitive-hooks/useEditComposerSend.d.ts +2 -4
  189. package/dist/react/primitive-hooks/useEditComposerSend.d.ts.map +1 -1
  190. package/dist/react/primitive-hooks/useMessageBranching.d.ts +4 -6
  191. package/dist/react/primitive-hooks/useMessageBranching.d.ts.map +1 -1
  192. package/dist/react/primitive-hooks/useMessageError.d.ts +0 -2
  193. package/dist/react/primitive-hooks/useMessageError.d.ts.map +1 -1
  194. package/dist/react/primitive-hooks/useMessageReload.d.ts +2 -4
  195. package/dist/react/primitive-hooks/useMessageReload.d.ts.map +1 -1
  196. package/dist/react/primitive-hooks/useSuggestionTrigger.d.ts +6 -8
  197. package/dist/react/primitive-hooks/useSuggestionTrigger.d.ts.map +1 -1
  198. package/dist/react/primitive-hooks/useSuggestionTrigger.js +4 -4
  199. package/dist/react/primitive-hooks/useSuggestionTrigger.js.map +1 -1
  200. package/dist/react/primitive-hooks/useThreadIsEmpty.d.ts +0 -2
  201. package/dist/react/primitive-hooks/useThreadIsEmpty.d.ts.map +1 -1
  202. package/dist/react/primitive-hooks/useThreadIsRunning.d.ts +0 -2
  203. package/dist/react/primitive-hooks/useThreadIsRunning.d.ts.map +1 -1
  204. package/dist/react/primitive-hooks/useThreadListItemArchive.d.ts +1 -3
  205. package/dist/react/primitive-hooks/useThreadListItemArchive.d.ts.map +1 -1
  206. package/dist/react/primitive-hooks/useThreadListItemDelete.d.ts +1 -3
  207. package/dist/react/primitive-hooks/useThreadListItemDelete.d.ts.map +1 -1
  208. package/dist/react/primitive-hooks/useThreadListItemTrigger.d.ts +1 -3
  209. package/dist/react/primitive-hooks/useThreadListItemTrigger.d.ts.map +1 -1
  210. package/dist/react/primitive-hooks/useThreadListItemUnarchive.d.ts +1 -3
  211. package/dist/react/primitive-hooks/useThreadListItemUnarchive.d.ts.map +1 -1
  212. package/dist/react/primitive-hooks/useThreadListLoadMore.d.ts +2 -4
  213. package/dist/react/primitive-hooks/useThreadListLoadMore.d.ts.map +1 -1
  214. package/dist/react/primitive-hooks/useThreadListNew.d.ts +1 -3
  215. package/dist/react/primitive-hooks/useThreadListNew.d.ts.map +1 -1
  216. package/dist/react/primitive-hooks/useThreadMessageIds.d.ts +0 -2
  217. package/dist/react/primitive-hooks/useThreadMessageIds.d.ts.map +1 -1
  218. package/dist/react/primitive-hooks/useThreadMessages.d.ts +1 -3
  219. package/dist/react/primitive-hooks/useThreadMessages.d.ts.map +1 -1
  220. package/dist/react/primitive-hooks/useVoice.d.ts +5 -7
  221. package/dist/react/primitive-hooks/useVoice.d.ts.map +1 -1
  222. package/dist/react/primitives/chainOfThought/ChainOfThoughtParts.d.ts +25 -26
  223. package/dist/react/primitives/chainOfThought/ChainOfThoughtParts.d.ts.map +1 -1
  224. package/dist/react/primitives/composer/ComposerAttachments.d.ts +22 -23
  225. package/dist/react/primitives/composer/ComposerAttachments.d.ts.map +1 -1
  226. package/dist/react/primitives/composer/ComposerIf.d.ts +10 -9
  227. package/dist/react/primitives/composer/ComposerIf.d.ts.map +1 -1
  228. package/dist/react/primitives/composer/ComposerQueue.d.ts +11 -14
  229. package/dist/react/primitives/composer/ComposerQueue.d.ts.map +1 -1
  230. package/dist/react/primitives/generativeUI/GenerativeUI.d.ts +26 -28
  231. package/dist/react/primitives/generativeUI/GenerativeUI.d.ts.map +1 -1
  232. package/dist/react/primitives/generativeUI/GenerativeUI.js +16 -6
  233. package/dist/react/primitives/generativeUI/GenerativeUI.js.map +1 -1
  234. package/dist/react/primitives/message/MessageAttachments.d.ts +26 -23
  235. package/dist/react/primitives/message/MessageAttachments.d.ts.map +1 -1
  236. package/dist/react/primitives/message/MessageAttachments.js +14 -15
  237. package/dist/react/primitives/message/MessageAttachments.js.map +1 -1
  238. package/dist/react/primitives/message/MessageGroupedParts.d.ts +120 -117
  239. package/dist/react/primitives/message/MessageGroupedParts.d.ts.map +1 -1
  240. package/dist/react/primitives/message/MessageGroupedParts.js +3 -3
  241. package/dist/react/primitives/message/MessageGroupedParts.js.map +1 -1
  242. package/dist/react/primitives/message/MessageParts.d.ts +199 -185
  243. package/dist/react/primitives/message/MessageParts.d.ts.map +1 -1
  244. package/dist/react/primitives/message/MessageParts.js +124 -82
  245. package/dist/react/primitives/message/MessageParts.js.map +1 -1
  246. package/dist/react/primitives/message/MessageQuote.d.ts +6 -8
  247. package/dist/react/primitives/message/MessageQuote.d.ts.map +1 -1
  248. package/dist/react/primitives/messagePart/MessagePartInProgress.d.ts +2 -4
  249. package/dist/react/primitives/messagePart/MessagePartInProgress.d.ts.map +1 -1
  250. package/dist/react/primitives/part/PartMessages.d.ts +13 -15
  251. package/dist/react/primitives/part/PartMessages.d.ts.map +1 -1
  252. package/dist/react/primitives/thread/ThreadMessages.d.ts +54 -56
  253. package/dist/react/primitives/thread/ThreadMessages.d.ts.map +1 -1
  254. package/dist/react/primitives/thread/ThreadSuggestions.d.ts +20 -21
  255. package/dist/react/primitives/thread/ThreadSuggestions.d.ts.map +1 -1
  256. package/dist/react/primitives/thread/ThreadSuggestions.js +24 -5
  257. package/dist/react/primitives/thread/ThreadSuggestions.js.map +1 -1
  258. package/dist/react/primitives/threadList/ThreadListItems.d.ts +22 -23
  259. package/dist/react/primitives/threadList/ThreadListItems.d.ts.map +1 -1
  260. package/dist/react/primitives/threadListItem/ThreadListItemTitle.d.ts +4 -6
  261. package/dist/react/primitives/threadListItem/ThreadListItemTitle.d.ts.map +1 -1
  262. package/dist/react/providers/AttachmentByIndexProvider.d.ts +3 -5
  263. package/dist/react/providers/AttachmentByIndexProvider.d.ts.map +1 -1
  264. package/dist/react/providers/ChainOfThoughtByIndicesProvider.d.ts +3 -5
  265. package/dist/react/providers/ChainOfThoughtByIndicesProvider.d.ts.map +1 -1
  266. package/dist/react/providers/ChainOfThoughtPartByIndexProvider.d.ts +2 -4
  267. package/dist/react/providers/ChainOfThoughtPartByIndexProvider.d.ts.map +1 -1
  268. package/dist/react/providers/MessageByIdProvider.d.ts +2 -4
  269. package/dist/react/providers/MessageByIdProvider.d.ts.map +1 -1
  270. package/dist/react/providers/MessageByIndexProvider.d.ts +2 -4
  271. package/dist/react/providers/MessageByIndexProvider.d.ts.map +1 -1
  272. package/dist/react/providers/PartByIndexProvider.d.ts +2 -4
  273. package/dist/react/providers/PartByIndexProvider.d.ts.map +1 -1
  274. package/dist/react/providers/QueueItemByIndexProvider.d.ts +2 -4
  275. package/dist/react/providers/QueueItemByIndexProvider.d.ts.map +1 -1
  276. package/dist/react/providers/ReadonlyThreadProvider.d.ts +5 -7
  277. package/dist/react/providers/ReadonlyThreadProvider.d.ts.map +1 -1
  278. package/dist/react/providers/ReadonlyThreadProvider.js.map +1 -1
  279. package/dist/react/providers/SuggestionByIndexProvider.d.ts +2 -4
  280. package/dist/react/providers/SuggestionByIndexProvider.d.ts.map +1 -1
  281. package/dist/react/providers/TextMessagePartProvider.d.ts +3 -5
  282. package/dist/react/providers/TextMessagePartProvider.d.ts.map +1 -1
  283. package/dist/react/providers/TextMessagePartProvider.js +5 -1
  284. package/dist/react/providers/TextMessagePartProvider.js.map +1 -1
  285. package/dist/react/providers/ThreadListItemByIndexProvider.d.ts +3 -5
  286. package/dist/react/providers/ThreadListItemByIndexProvider.d.ts.map +1 -1
  287. package/dist/react/providers/ThreadListItemRuntimeProvider.d.ts +3 -6
  288. package/dist/react/providers/ThreadListItemRuntimeProvider.d.ts.map +1 -1
  289. package/dist/react/runtimes/RemoteThreadListHookInstanceManager.d.ts +209 -219
  290. package/dist/react/runtimes/RemoteThreadListHookInstanceManager.d.ts.map +1 -1
  291. package/dist/react/runtimes/RemoteThreadListHookInstanceManager.js +53 -39
  292. package/dist/react/runtimes/RemoteThreadListHookInstanceManager.js.map +1 -1
  293. package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.d.ts +185 -196
  294. package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.d.ts.map +1 -1
  295. package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.js +13 -4
  296. package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.js.map +1 -1
  297. package/dist/react/runtimes/RemoteThreadResource.d.ts +14 -19
  298. package/dist/react/runtimes/RemoteThreadResource.d.ts.map +1 -1
  299. package/dist/react/runtimes/RemoteThreadResource.js +3 -1
  300. package/dist/react/runtimes/RemoteThreadResource.js.map +1 -1
  301. package/dist/react/runtimes/RuntimeAdapterProvider.d.ts +8 -9
  302. package/dist/react/runtimes/RuntimeAdapterProvider.d.ts.map +1 -1
  303. package/dist/react/runtimes/assistant-transport/commandQueue.d.ts +9 -11
  304. package/dist/react/runtimes/assistant-transport/commandQueue.d.ts.map +1 -1
  305. package/dist/react/runtimes/assistant-transport/replayBoundaryStream.d.ts +4 -5
  306. package/dist/react/runtimes/assistant-transport/replayBoundaryStream.d.ts.map +1 -1
  307. package/dist/react/runtimes/assistant-transport/replayBoundaryStream.js +9 -2
  308. package/dist/react/runtimes/assistant-transport/replayBoundaryStream.js.map +1 -1
  309. package/dist/react/runtimes/assistant-transport/runManager.d.ts +7 -9
  310. package/dist/react/runtimes/assistant-transport/runManager.d.ts.map +1 -1
  311. package/dist/react/runtimes/assistant-transport/runManager.js +4 -1
  312. package/dist/react/runtimes/assistant-transport/runManager.js.map +1 -1
  313. package/dist/react/runtimes/assistant-transport/types.d.ts +106 -100
  314. package/dist/react/runtimes/assistant-transport/types.d.ts.map +1 -1
  315. package/dist/react/runtimes/assistant-transport/useAssistantTransportRuntime.d.ts +3 -5
  316. package/dist/react/runtimes/assistant-transport/useAssistantTransportRuntime.d.ts.map +1 -1
  317. package/dist/react/runtimes/assistant-transport/useAssistantTransportRuntime.js +17 -6
  318. package/dist/react/runtimes/assistant-transport/useAssistantTransportRuntime.js.map +1 -1
  319. package/dist/react/runtimes/assistant-transport/useConvertedState.d.ts +2 -4
  320. package/dist/react/runtimes/assistant-transport/useConvertedState.d.ts.map +1 -1
  321. package/dist/react/runtimes/assistant-transport/useLatestRef.d.ts +1 -3
  322. package/dist/react/runtimes/assistant-transport/useLatestRef.d.ts.map +1 -1
  323. package/dist/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.d.ts +5 -7
  324. package/dist/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.d.ts.map +1 -1
  325. package/dist/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.js +410 -213
  326. package/dist/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.js.map +1 -1
  327. package/dist/react/runtimes/cloud/CloudFileAttachmentAdapter.d.ts +14 -16
  328. package/dist/react/runtimes/cloud/CloudFileAttachmentAdapter.d.ts.map +1 -1
  329. package/dist/react/runtimes/cloud/CloudFileAttachmentAdapter.js +8 -4
  330. package/dist/react/runtimes/cloud/CloudFileAttachmentAdapter.js.map +1 -1
  331. package/dist/react/runtimes/cloud/auiV0.d.ts +136 -123
  332. package/dist/react/runtimes/cloud/auiV0.d.ts.map +1 -1
  333. package/dist/react/runtimes/cloud/auiV0.js +60 -9
  334. package/dist/react/runtimes/cloud/auiV0.js.map +1 -1
  335. package/dist/react/runtimes/cloud/createCloudThreadListAdapter.d.ts +9 -10
  336. package/dist/react/runtimes/cloud/createCloudThreadListAdapter.d.ts.map +1 -1
  337. package/dist/react/runtimes/cloud/createCloudThreadListAdapterCreateFallback.d.ts +4 -5
  338. package/dist/react/runtimes/cloud/createCloudThreadListAdapterCreateFallback.d.ts.map +1 -1
  339. package/dist/react/runtimes/cloud/sdkIdentity.d.ts +1 -3
  340. package/dist/react/runtimes/cloud/sdkIdentity.d.ts.map +1 -1
  341. package/dist/react/runtimes/cloud/sdkIdentity.js +1 -1
  342. package/dist/react/runtimes/cloud/useCloudThreadListAdapter.d.ts +2 -4
  343. package/dist/react/runtimes/cloud/useCloudThreadListAdapter.d.ts.map +1 -1
  344. package/dist/react/runtimes/cloud/useCloudThreadListRuntime.d.ts +8 -9
  345. package/dist/react/runtimes/cloud/useCloudThreadListRuntime.d.ts.map +1 -1
  346. package/dist/react/runtimes/createMessageConverter.d.ts +14 -17
  347. package/dist/react/runtimes/createMessageConverter.d.ts.map +1 -1
  348. package/dist/react/runtimes/createMessageConverter.js.map +1 -1
  349. package/dist/react/runtimes/createRuntimeExtras.d.ts +11 -13
  350. package/dist/react/runtimes/createRuntimeExtras.d.ts.map +1 -1
  351. package/dist/react/runtimes/external-message-converter.d.ts +14 -18
  352. package/dist/react/runtimes/external-message-converter.d.ts.map +1 -1
  353. package/dist/react/runtimes/external-store-history-copy.d.ts +25 -0
  354. package/dist/react/runtimes/external-store-history-copy.d.ts.map +1 -0
  355. package/dist/react/runtimes/external-store-history-copy.js +148 -0
  356. package/dist/react/runtimes/external-store-history-copy.js.map +1 -0
  357. package/dist/react/runtimes/useExternalStoreRuntime.d.ts +2 -4
  358. package/dist/react/runtimes/useExternalStoreRuntime.d.ts.map +1 -1
  359. package/dist/react/runtimes/useExternalStoreRuntime.js +72 -35
  360. package/dist/react/runtimes/useExternalStoreRuntime.js.map +1 -1
  361. package/dist/react/runtimes/useExternalStoreSharedOptions.d.ts +1 -3
  362. package/dist/react/runtimes/useExternalStoreSharedOptions.d.ts.map +1 -1
  363. package/dist/react/runtimes/useLocalRuntime.d.ts +26 -37
  364. package/dist/react/runtimes/useLocalRuntime.d.ts.map +1 -1
  365. package/dist/react/runtimes/useLocalRuntime.js +142 -34
  366. package/dist/react/runtimes/useLocalRuntime.js.map +1 -1
  367. package/dist/react/runtimes/useRemoteThreadListRuntime.d.ts +2 -4
  368. package/dist/react/runtimes/useRemoteThreadListRuntime.d.ts.map +1 -1
  369. package/dist/react/runtimes/useRuntimeAdapters.d.ts +1 -3
  370. package/dist/react/runtimes/useRuntimeAdapters.d.ts.map +1 -1
  371. package/dist/react/runtimes/useStreamingTiming.d.ts +3 -5
  372. package/dist/react/runtimes/useStreamingTiming.d.ts.map +1 -1
  373. package/dist/react/types/MessagePartComponentTypes.d.ts +46 -43
  374. package/dist/react/types/MessagePartComponentTypes.d.ts.map +1 -1
  375. package/dist/react/types/scopes/dataRenderers.d.ts +8 -11
  376. package/dist/react/types/scopes/dataRenderers.d.ts.map +1 -1
  377. package/dist/react/types/scopes/interactables.d.ts +50 -49
  378. package/dist/react/types/scopes/interactables.d.ts.map +1 -1
  379. package/dist/react/types/scopes/tools.d.ts +17 -19
  380. package/dist/react/types/scopes/tools.d.ts.map +1 -1
  381. package/dist/react/types/store-augmentation.d.ts +10 -11
  382. package/dist/react/types/store-augmentation.d.ts.map +1 -1
  383. package/dist/react/utils/getMessageQuote.d.ts +5 -6
  384. package/dist/react/utils/getMessageQuote.d.ts.map +1 -1
  385. package/dist/react/utils/groupParts.d.ts +28 -29
  386. package/dist/react/utils/groupParts.d.ts.map +1 -1
  387. package/dist/react/utils/useJSONEqual.d.ts +1 -3
  388. package/dist/react/utils/useJSONEqual.d.ts.map +1 -1
  389. package/dist/react/utils/useJSONSchemaDependency.d.ts +2 -4
  390. package/dist/react/utils/useJSONSchemaDependency.d.ts.map +1 -1
  391. package/dist/runtime/api/assistant-runtime.d.ts +26 -28
  392. package/dist/runtime/api/assistant-runtime.d.ts.map +1 -1
  393. package/dist/runtime/api/attachment-runtime.d.ts +46 -43
  394. package/dist/runtime/api/attachment-runtime.d.ts.map +1 -1
  395. package/dist/runtime/api/attachment-runtime.js.map +1 -1
  396. package/dist/runtime/api/bindings.d.ts +31 -30
  397. package/dist/runtime/api/bindings.d.ts.map +1 -1
  398. package/dist/runtime/api/composer-runtime.d.ts +207 -193
  399. package/dist/runtime/api/composer-runtime.d.ts.map +1 -1
  400. package/dist/runtime/api/composer-runtime.js +4 -0
  401. package/dist/runtime/api/composer-runtime.js.map +1 -1
  402. package/dist/runtime/api/message-part-runtime.d.ts +28 -26
  403. package/dist/runtime/api/message-part-runtime.d.ts.map +1 -1
  404. package/dist/runtime/api/message-part-runtime.js +22 -0
  405. package/dist/runtime/api/message-part-runtime.js.map +1 -1
  406. package/dist/runtime/api/message-runtime.d.ts +87 -84
  407. package/dist/runtime/api/message-runtime.d.ts.map +1 -1
  408. package/dist/runtime/api/message-runtime.js +1 -1
  409. package/dist/runtime/api/message-runtime.js.map +1 -1
  410. package/dist/runtime/api/paths.d.ts +48 -50
  411. package/dist/runtime/api/paths.d.ts.map +1 -1
  412. package/dist/runtime/api/thread-list-item-runtime.d.ts +64 -66
  413. package/dist/runtime/api/thread-list-item-runtime.d.ts.map +1 -1
  414. package/dist/runtime/api/thread-list-item-runtime.js.map +1 -1
  415. package/dist/runtime/api/thread-list-runtime.d.ts +73 -76
  416. package/dist/runtime/api/thread-list-runtime.d.ts.map +1 -1
  417. package/dist/runtime/api/thread-list-runtime.js.map +1 -1
  418. package/dist/runtime/api/thread-runtime.d.ts +299 -300
  419. package/dist/runtime/api/thread-runtime.d.ts.map +1 -1
  420. package/dist/runtime/api/thread-runtime.js +2 -1
  421. package/dist/runtime/api/thread-runtime.js.map +1 -1
  422. package/dist/runtime/base/base-assistant-runtime-core.d.ts +8 -10
  423. package/dist/runtime/base/base-assistant-runtime-core.d.ts.map +1 -1
  424. package/dist/runtime/base/base-composer-runtime-core.d.ts +149 -99
  425. package/dist/runtime/base/base-composer-runtime-core.d.ts.map +1 -1
  426. package/dist/runtime/base/base-composer-runtime-core.js +400 -122
  427. package/dist/runtime/base/base-composer-runtime-core.js.map +1 -1
  428. package/dist/runtime/base/base-thread-runtime-core.d.ts +120 -108
  429. package/dist/runtime/base/base-thread-runtime-core.d.ts.map +1 -1
  430. package/dist/runtime/base/base-thread-runtime-core.js +109 -41
  431. package/dist/runtime/base/base-thread-runtime-core.js.map +1 -1
  432. package/dist/runtime/base/default-edit-composer-runtime-core.d.ts +29 -29
  433. package/dist/runtime/base/default-edit-composer-runtime-core.d.ts.map +1 -1
  434. package/dist/runtime/base/default-edit-composer-runtime-core.js +10 -1
  435. package/dist/runtime/base/default-edit-composer-runtime-core.js.map +1 -1
  436. package/dist/runtime/base/default-thread-composer-runtime-core.d.ts +27 -29
  437. package/dist/runtime/base/default-thread-composer-runtime-core.d.ts.map +1 -1
  438. package/dist/runtime/base/default-thread-composer-runtime-core.js +21 -6
  439. package/dist/runtime/base/default-thread-composer-runtime-core.js.map +1 -1
  440. package/dist/runtime/branch/external-thread-branch-adapter.d.ts +14 -16
  441. package/dist/runtime/branch/external-thread-branch-adapter.d.ts.map +1 -1
  442. package/dist/runtime/interfaces/assistant-runtime-core.d.ts +7 -9
  443. package/dist/runtime/interfaces/assistant-runtime-core.d.ts.map +1 -1
  444. package/dist/runtime/interfaces/composer-runtime-core.d.ts +88 -72
  445. package/dist/runtime/interfaces/composer-runtime-core.d.ts.map +1 -1
  446. package/dist/runtime/interfaces/thread-list-runtime-core.d.ts +63 -65
  447. package/dist/runtime/interfaces/thread-list-runtime-core.d.ts.map +1 -1
  448. package/dist/runtime/interfaces/thread-runtime-core.d.ts +210 -197
  449. package/dist/runtime/interfaces/thread-runtime-core.d.ts.map +1 -1
  450. package/dist/runtime/internal.d.ts +25 -20
  451. package/dist/runtime/internal.d.ts.map +1 -0
  452. package/dist/runtime/queue/external-thread-queue-adapter.d.ts +35 -37
  453. package/dist/runtime/queue/external-thread-queue-adapter.d.ts.map +1 -1
  454. package/dist/runtime/queue/message-queue.d.ts +29 -31
  455. package/dist/runtime/queue/message-queue.d.ts.map +1 -1
  456. package/dist/runtime/queue/message-queue.js +1 -1
  457. package/dist/runtime/queue/queue-item.d.ts +5 -7
  458. package/dist/runtime/queue/queue-item.d.ts.map +1 -1
  459. package/dist/runtime/utils/abortable-thread-load.d.ts +7 -8
  460. package/dist/runtime/utils/abortable-thread-load.d.ts.map +1 -1
  461. package/dist/runtime/utils/attachment-add-operations.d.ts +13 -11
  462. package/dist/runtime/utils/attachment-add-operations.d.ts.map +1 -1
  463. package/dist/runtime/utils/attachment-add-operations.js +24 -2
  464. package/dist/runtime/utils/attachment-add-operations.js.map +1 -1
  465. package/dist/runtime/utils/attachment-send-operations.d.ts +12 -0
  466. package/dist/runtime/utils/attachment-send-operations.d.ts.map +1 -0
  467. package/dist/runtime/utils/attachment-send-operations.js +34 -0
  468. package/dist/runtime/utils/attachment-send-operations.js.map +1 -0
  469. package/dist/runtime/utils/auto-status.d.ts +4 -5
  470. package/dist/runtime/utils/auto-status.d.ts.map +1 -1
  471. package/dist/runtime/utils/auto-status.js +3 -5
  472. package/dist/runtime/utils/auto-status.js.map +1 -1
  473. package/dist/runtime/utils/chat-model-adapter.d.ts +26 -27
  474. package/dist/runtime/utils/chat-model-adapter.d.ts.map +1 -1
  475. package/dist/runtime/utils/external-message-conversion.d.ts +32 -32
  476. package/dist/runtime/utils/external-message-conversion.d.ts.map +1 -1
  477. package/dist/runtime/utils/external-message-conversion.js +3 -3
  478. package/dist/runtime/utils/external-message-conversion.js.map +1 -1
  479. package/dist/runtime/utils/external-store-message.d.ts +2 -4
  480. package/dist/runtime/utils/external-store-message.d.ts.map +1 -1
  481. package/dist/runtime/utils/message-repository-session.d.ts +21 -23
  482. package/dist/runtime/utils/message-repository-session.d.ts.map +1 -1
  483. package/dist/runtime/utils/message-repository.d.ts +50 -51
  484. package/dist/runtime/utils/message-repository.d.ts.map +1 -1
  485. package/dist/runtime/utils/message-repository.js +8 -7
  486. package/dist/runtime/utils/message-repository.js.map +1 -1
  487. package/dist/runtime/utils/pending-tool-calls.d.ts +10 -11
  488. package/dist/runtime/utils/pending-tool-calls.d.ts.map +1 -1
  489. package/dist/runtime/utils/resolveToolApprovalResponse.d.ts +6 -8
  490. package/dist/runtime/utils/resolveToolApprovalResponse.d.ts.map +1 -1
  491. package/dist/runtime/utils/runtime-extras-brand.d.ts +4 -6
  492. package/dist/runtime/utils/runtime-extras-brand.d.ts.map +1 -1
  493. package/dist/runtime/utils/stored-message-parts.d.ts +5 -5
  494. package/dist/runtime/utils/stored-message-parts.d.ts.map +1 -1
  495. package/dist/runtime/utils/stored-message-parts.js +22 -2
  496. package/dist/runtime/utils/stored-message-parts.js.map +1 -1
  497. package/dist/runtime/utils/streaming-timing.d.ts +19 -21
  498. package/dist/runtime/utils/streaming-timing.d.ts.map +1 -1
  499. package/dist/runtime/utils/thread-message-like.d.ts +36 -32
  500. package/dist/runtime/utils/thread-message-like.d.ts.map +1 -1
  501. package/dist/runtime/utils/thread-message-like.js +16 -6
  502. package/dist/runtime/utils/thread-message-like.js.map +1 -1
  503. package/dist/runtime/utils/thread-runtime-lifecycle.d.ts +4 -5
  504. package/dist/runtime/utils/thread-runtime-lifecycle.d.ts.map +1 -1
  505. package/dist/runtime/utils/thread-runtime-lifecycle.js +31 -4
  506. package/dist/runtime/utils/thread-runtime-lifecycle.js.map +1 -1
  507. package/dist/runtime/utils/tool-call-tree.d.ts +6 -8
  508. package/dist/runtime/utils/tool-call-tree.d.ts.map +1 -1
  509. package/dist/runtime/utils/tool-interactions.d.ts +10 -0
  510. package/dist/runtime/utils/tool-interactions.d.ts.map +1 -0
  511. package/dist/runtime/utils/tool-interactions.js +92 -0
  512. package/dist/runtime/utils/tool-interactions.js.map +1 -0
  513. package/dist/runtimes/assistant-transport/utils.d.ts +0 -2
  514. package/dist/runtimes/assistant-transport/utils.d.ts.map +1 -1
  515. package/dist/runtimes/external-store/external-store-adapter.d.ts +215 -198
  516. package/dist/runtimes/external-store/external-store-adapter.d.ts.map +1 -1
  517. package/dist/runtimes/external-store/external-store-runtime-core.d.ts +5 -6
  518. package/dist/runtimes/external-store/external-store-runtime-core.d.ts.map +1 -1
  519. package/dist/runtimes/external-store/external-store-runtime-core.js +4 -1
  520. package/dist/runtimes/external-store/external-store-runtime-core.js.map +1 -1
  521. package/dist/runtimes/external-store/external-store-shared-options.d.ts +1 -3
  522. package/dist/runtimes/external-store/external-store-shared-options.d.ts.map +1 -1
  523. package/dist/runtimes/external-store/external-store-thread-list-runtime-core.d.ts +38 -40
  524. package/dist/runtimes/external-store/external-store-thread-list-runtime-core.d.ts.map +1 -1
  525. package/dist/runtimes/external-store/external-store-thread-list-runtime-core.js +2 -2
  526. package/dist/runtimes/external-store/external-store-thread-list-runtime-core.js.map +1 -1
  527. package/dist/runtimes/external-store/external-store-thread-runtime-core.d.ts +117 -124
  528. package/dist/runtimes/external-store/external-store-thread-runtime-core.d.ts.map +1 -1
  529. package/dist/runtimes/external-store/external-store-thread-runtime-core.js +44 -14
  530. package/dist/runtimes/external-store/external-store-thread-runtime-core.js.map +1 -1
  531. package/dist/runtimes/external-store/thread-message-converter.d.ts +3 -5
  532. package/dist/runtimes/external-store/thread-message-converter.d.ts.map +1 -1
  533. package/dist/runtimes/inert/InertThreadRuntimeCore.d.ts +94 -95
  534. package/dist/runtimes/inert/InertThreadRuntimeCore.d.ts.map +1 -1
  535. package/dist/runtimes/inert/InertThreadRuntimeCore.js +3 -0
  536. package/dist/runtimes/inert/InertThreadRuntimeCore.js.map +1 -1
  537. package/dist/runtimes/internal.d.ts +20 -16
  538. package/dist/runtimes/internal.d.ts.map +1 -0
  539. package/dist/runtimes/local/local-runtime-core.d.ts +6 -8
  540. package/dist/runtimes/local/local-runtime-core.d.ts.map +1 -1
  541. package/dist/runtimes/local/local-runtime-options.d.ts +40 -42
  542. package/dist/runtimes/local/local-runtime-options.d.ts.map +1 -1
  543. package/dist/runtimes/local/local-thread-list-runtime-core.d.ts +40 -42
  544. package/dist/runtimes/local/local-thread-list-runtime-core.d.ts.map +1 -1
  545. package/dist/runtimes/local/local-thread-runtime-core.d.ts +93 -97
  546. package/dist/runtimes/local/local-thread-runtime-core.d.ts.map +1 -1
  547. package/dist/runtimes/local/local-thread-runtime-core.js +178 -31
  548. package/dist/runtimes/local/local-thread-runtime-core.js.map +1 -1
  549. package/dist/runtimes/local/should-continue.d.ts +1 -3
  550. package/dist/runtimes/local/should-continue.d.ts.map +1 -1
  551. package/dist/runtimes/readonly/ReadonlyThreadRuntimeCore.d.ts +76 -53
  552. package/dist/runtimes/readonly/ReadonlyThreadRuntimeCore.d.ts.map +1 -1
  553. package/dist/runtimes/readonly/ReadonlyThreadRuntimeCore.js +28 -1
  554. package/dist/runtimes/readonly/ReadonlyThreadRuntimeCore.js.map +1 -1
  555. package/dist/runtimes/remote-thread-list/adapter/in-memory.d.ts +11 -13
  556. package/dist/runtimes/remote-thread-list/adapter/in-memory.d.ts.map +1 -1
  557. package/dist/runtimes/remote-thread-list/adapter-changed.d.ts +2 -4
  558. package/dist/runtimes/remote-thread-list/adapter-changed.d.ts.map +1 -1
  559. package/dist/runtimes/remote-thread-list/empty-thread-core.d.ts +1 -3
  560. package/dist/runtimes/remote-thread-list/empty-thread-core.d.ts.map +1 -1
  561. package/dist/runtimes/remote-thread-list/optimistic-state.d.ts +33 -29
  562. package/dist/runtimes/remote-thread-list/optimistic-state.d.ts.map +1 -1
  563. package/dist/runtimes/remote-thread-list/optimistic-state.js +8 -3
  564. package/dist/runtimes/remote-thread-list/optimistic-state.js.map +1 -1
  565. package/dist/runtimes/remote-thread-list/remote-thread-state.d.ts +44 -46
  566. package/dist/runtimes/remote-thread-list/remote-thread-state.d.ts.map +1 -1
  567. package/dist/runtimes/remote-thread-list/remote-thread-state.js +1 -1
  568. package/dist/runtimes/remote-thread-list/title-generation.d.ts +25 -26
  569. package/dist/runtimes/remote-thread-list/title-generation.d.ts.map +1 -1
  570. package/dist/runtimes/remote-thread-list/title.d.ts +3 -5
  571. package/dist/runtimes/remote-thread-list/title.d.ts.map +1 -1
  572. package/dist/runtimes/remote-thread-list/types.d.ts +111 -112
  573. package/dist/runtimes/remote-thread-list/types.d.ts.map +1 -1
  574. package/dist/runtimes/tool-invocations/ToolInvocationTracker.d.ts +144 -145
  575. package/dist/runtimes/tool-invocations/ToolInvocationTracker.d.ts.map +1 -1
  576. package/dist/runtimes/tool-invocations/ToolInvocationTracker.js +22 -7
  577. package/dist/runtimes/tool-invocations/ToolInvocationTracker.js.map +1 -1
  578. package/dist/store/clients/chain-of-thought-client.d.ts +7 -9
  579. package/dist/store/clients/chain-of-thought-client.d.ts.map +1 -1
  580. package/dist/store/clients/external-thread.d.ts +53 -54
  581. package/dist/store/clients/external-thread.d.ts.map +1 -1
  582. package/dist/store/clients/external-thread.js +1256 -731
  583. package/dist/store/clients/external-thread.js.map +1 -1
  584. package/dist/store/clients/model-context-client.d.ts +1 -3
  585. package/dist/store/clients/model-context-client.d.ts.map +1 -1
  586. package/dist/store/clients/no-op-composer-client.d.ts +2 -4
  587. package/dist/store/clients/no-op-composer-client.d.ts.map +1 -1
  588. package/dist/store/clients/no-op-composer-client.js +3 -1
  589. package/dist/store/clients/no-op-composer-client.js.map +1 -1
  590. package/dist/store/clients/runtime-adapter.d.ts +1 -3
  591. package/dist/store/clients/runtime-adapter.d.ts.map +1 -1
  592. package/dist/store/clients/single-thread-list.d.ts +3 -4
  593. package/dist/store/clients/single-thread-list.d.ts.map +1 -1
  594. package/dist/store/clients/submission-message.d.ts +8 -0
  595. package/dist/store/clients/submission-message.d.ts.map +1 -0
  596. package/dist/store/clients/submission-message.js +22 -0
  597. package/dist/store/clients/submission-message.js.map +1 -0
  598. package/dist/store/clients/suggestions.d.ts +5 -7
  599. package/dist/store/clients/suggestions.d.ts.map +1 -1
  600. package/dist/store/clients/thread-message-client.d.ts +10 -9
  601. package/dist/store/clients/thread-message-client.d.ts.map +1 -1
  602. package/dist/store/clients/thread-message-client.js +81 -82
  603. package/dist/store/clients/thread-message-client.js.map +1 -1
  604. package/dist/store/clients/thread-selection-events.d.ts +0 -2
  605. package/dist/store/clients/thread-selection-events.d.ts.map +1 -1
  606. package/dist/store/clients/thread-tasks.d.ts +4 -6
  607. package/dist/store/clients/thread-tasks.d.ts.map +1 -1
  608. package/dist/store/env.d.ts +0 -2
  609. package/dist/store/env.d.ts.map +1 -1
  610. package/dist/store/index.d.ts +33 -36
  611. package/dist/store/index.d.ts.map +1 -0
  612. package/dist/store/index.js +5 -5
  613. package/dist/store/internal.d.ts +12 -12
  614. package/dist/store/internal.d.ts.map +1 -0
  615. package/dist/store/internal.js +2 -2
  616. package/dist/store/primitive-predicates.d.ts +3 -4
  617. package/dist/store/primitive-predicates.d.ts.map +1 -1
  618. package/dist/store/primitive-predicates.js +9 -4
  619. package/dist/store/primitive-predicates.js.map +1 -1
  620. package/dist/store/runtime-clients/attachment-runtime-client.d.ts +3 -5
  621. package/dist/store/runtime-clients/attachment-runtime-client.d.ts.map +1 -1
  622. package/dist/store/runtime-clients/composer-runtime-client.d.ts +10 -12
  623. package/dist/store/runtime-clients/composer-runtime-client.d.ts.map +1 -1
  624. package/dist/store/runtime-clients/composer-runtime-client.js +65 -62
  625. package/dist/store/runtime-clients/composer-runtime-client.js.map +1 -1
  626. package/dist/store/runtime-clients/handle-runtime-action.d.ts +0 -2
  627. package/dist/store/runtime-clients/handle-runtime-action.d.ts.map +1 -1
  628. package/dist/store/runtime-clients/handle-thread-list-action.d.ts +0 -2
  629. package/dist/store/runtime-clients/handle-thread-list-action.d.ts.map +1 -1
  630. package/dist/store/runtime-clients/liveRef.d.ts +1 -3
  631. package/dist/store/runtime-clients/liveRef.d.ts.map +1 -1
  632. package/dist/store/runtime-clients/message-part-runtime-client.d.ts +3 -5
  633. package/dist/store/runtime-clients/message-part-runtime-client.d.ts.map +1 -1
  634. package/dist/store/runtime-clients/message-part-runtime-client.js +26 -16
  635. package/dist/store/runtime-clients/message-part-runtime-client.js.map +1 -1
  636. package/dist/store/runtime-clients/message-runtime-client.d.ts +9 -9
  637. package/dist/store/runtime-clients/message-runtime-client.d.ts.map +1 -1
  638. package/dist/store/runtime-clients/message-runtime-client.js +121 -113
  639. package/dist/store/runtime-clients/message-runtime-client.js.map +1 -1
  640. package/dist/store/runtime-clients/thread-list-item-runtime-client.d.ts +4 -6
  641. package/dist/store/runtime-clients/thread-list-item-runtime-client.d.ts.map +1 -1
  642. package/dist/store/runtime-clients/thread-list-runtime-client.d.ts +5 -7
  643. package/dist/store/runtime-clients/thread-list-runtime-client.d.ts.map +1 -1
  644. package/dist/store/runtime-clients/thread-runtime-client.d.ts +3 -5
  645. package/dist/store/runtime-clients/thread-runtime-client.d.ts.map +1 -1
  646. package/dist/store/runtime-clients/thread-runtime-client.js +221 -158
  647. package/dist/store/runtime-clients/thread-runtime-client.js.map +1 -1
  648. package/dist/store/runtime-clients/useSubscribable.d.ts +2 -4
  649. package/dist/store/runtime-clients/useSubscribable.d.ts.map +1 -1
  650. package/dist/store/scope-registration.d.ts +28 -29
  651. package/dist/store/scope-registration.d.ts.map +1 -1
  652. package/dist/store/scopes/attachment.d.ts +15 -17
  653. package/dist/store/scopes/attachment.d.ts.map +1 -1
  654. package/dist/store/scopes/chain-of-thought.d.ts +28 -29
  655. package/dist/store/scopes/chain-of-thought.d.ts.map +1 -1
  656. package/dist/store/scopes/composer.d.ts +141 -128
  657. package/dist/store/scopes/composer.d.ts.map +1 -1
  658. package/dist/store/scopes/message.d.ts +114 -107
  659. package/dist/store/scopes/message.d.ts.map +1 -1
  660. package/dist/store/scopes/model-context.d.ts +7 -9
  661. package/dist/store/scopes/model-context.d.ts.map +1 -1
  662. package/dist/store/scopes/part.d.ts +49 -45
  663. package/dist/store/scopes/part.d.ts.map +1 -1
  664. package/dist/store/scopes/queue-item.d.ts +18 -20
  665. package/dist/store/scopes/queue-item.d.ts.map +1 -1
  666. package/dist/store/scopes/suggestion.d.ts +10 -12
  667. package/dist/store/scopes/suggestion.d.ts.map +1 -1
  668. package/dist/store/scopes/suggestions.d.ts +13 -15
  669. package/dist/store/scopes/suggestions.d.ts.map +1 -1
  670. package/dist/store/scopes/task.d.ts +23 -25
  671. package/dist/store/scopes/task.d.ts.map +1 -1
  672. package/dist/store/scopes/thread-list-item.d.ts +63 -65
  673. package/dist/store/scopes/thread-list-item.d.ts.map +1 -1
  674. package/dist/store/scopes/thread.d.ts +192 -194
  675. package/dist/store/scopes/thread.d.ts.map +1 -1
  676. package/dist/store/scopes/threads.d.ts +45 -47
  677. package/dist/store/scopes/threads.d.ts.map +1 -1
  678. package/dist/subscribable/subscribable.d.ts +58 -53
  679. package/dist/subscribable/subscribable.d.ts.map +1 -1
  680. package/dist/subscribable/subscribable.js +35 -7
  681. package/dist/subscribable/subscribable.js.map +1 -1
  682. package/dist/types/attachment.d.ts +26 -27
  683. package/dist/types/attachment.d.ts.map +1 -1
  684. package/dist/types/augmentations.d.ts +4 -4
  685. package/dist/types/augmentations.d.ts.map +1 -1
  686. package/dist/types/directive.d.ts +11 -13
  687. package/dist/types/directive.d.ts.map +1 -1
  688. package/dist/types/error.d.ts +7 -8
  689. package/dist/types/error.d.ts.map +1 -1
  690. package/dist/types/index.d.ts +7 -7
  691. package/dist/types/index.d.ts.map +1 -0
  692. package/dist/types/message.d.ts +322 -284
  693. package/dist/types/message.d.ts.map +1 -1
  694. package/dist/types/message.js.map +1 -1
  695. package/dist/types/quote.d.ts +2 -4
  696. package/dist/types/quote.d.ts.map +1 -1
  697. package/dist/types/trigger.d.ts +8 -10
  698. package/dist/types/trigger.d.ts.map +1 -1
  699. package/dist/types/unsubscribe.d.ts +0 -2
  700. package/dist/types/unsubscribe.d.ts.map +1 -1
  701. package/dist/utils/abortable-iterable.d.ts +0 -2
  702. package/dist/utils/abortable-iterable.d.ts.map +1 -1
  703. package/dist/utils/composite-context-provider.d.ts +8 -11
  704. package/dist/utils/composite-context-provider.d.ts.map +1 -1
  705. package/dist/utils/data-url.d.ts +10 -12
  706. package/dist/utils/data-url.d.ts.map +1 -1
  707. package/dist/utils/getGroupStatus.d.ts +17 -18
  708. package/dist/utils/getGroupStatus.d.ts.map +1 -1
  709. package/dist/utils/id.d.ts +0 -2
  710. package/dist/utils/id.d.ts.map +1 -1
  711. package/dist/utils/image-media-type.d.ts +0 -2
  712. package/dist/utils/image-media-type.d.ts.map +1 -1
  713. package/dist/utils/invoke-user-callback.d.ts +0 -2
  714. package/dist/utils/invoke-user-callback.d.ts.map +1 -1
  715. package/dist/utils/json/is-json-equal.d.ts +0 -2
  716. package/dist/utils/json/is-json-equal.d.ts.map +1 -1
  717. package/dist/utils/json/is-json.d.ts +1 -3
  718. package/dist/utils/json/is-json.d.ts.map +1 -1
  719. package/dist/utils/json/stable-stringify-tool-args.d.ts +1 -3
  720. package/dist/utils/json/stable-stringify-tool-args.d.ts.map +1 -1
  721. package/dist/utils/normalizePartStatus.d.ts +2 -3
  722. package/dist/utils/normalizePartStatus.d.ts.map +1 -1
  723. package/dist/utils/normalizePartStatus.js +3 -2
  724. package/dist/utils/normalizePartStatus.js.map +1 -1
  725. package/dist/utils/notify-event-listeners.d.ts +1 -2
  726. package/dist/utils/notify-event-listeners.d.ts.map +1 -1
  727. package/dist/utils/record.d.ts +0 -2
  728. package/dist/utils/record.d.ts.map +1 -1
  729. package/dist/utils/silent-runtime-action.d.ts +0 -2
  730. package/dist/utils/silent-runtime-action.d.ts.map +1 -1
  731. package/dist/utils/text.d.ts +1 -3
  732. package/dist/utils/text.d.ts.map +1 -1
  733. package/dist/utils/wire-media.d.ts +0 -2
  734. package/dist/utils/wire-media.d.ts.map +1 -1
  735. package/package.json +11 -10
  736. package/src/adapters/attachment.test.ts +98 -1
  737. package/src/adapters/attachment.ts +70 -20
  738. package/src/adapters/speech.test.ts +94 -0
  739. package/src/adapters/speech.ts +16 -2
  740. package/src/adapters/thread-history.ts +16 -5
  741. package/src/adapters/voice.test.ts +169 -0
  742. package/src/adapters/voice.ts +25 -4
  743. package/src/index.ts +14 -2
  744. package/src/internal.ts +7 -0
  745. package/src/model-context/frame/host.test.ts +51 -1
  746. package/src/model-context/frame/host.ts +3 -1
  747. package/src/model-context/frame/provider.test.ts +61 -0
  748. package/src/model-context/frame/provider.ts +8 -1
  749. package/src/model-context/frame/validate.ts +57 -0
  750. package/src/model-context/interactable-composer-metadata.test.ts +82 -0
  751. package/src/model-context/interactable-composer-metadata.ts +45 -2
  752. package/src/react/adapters/LocalStorageThreadListAdapter.test.ts +594 -0
  753. package/src/react/adapters/LocalStorageThreadListAdapter.tsx +98 -35
  754. package/src/react/client/Interactables.test.ts +853 -1
  755. package/src/react/client/Interactables.ts +325 -45
  756. package/src/react/client/RemoteThreadList.initialize-failure.test.ts +124 -0
  757. package/src/react/client/RemoteThreadList.ts +6 -0
  758. package/src/react/client/Tools.ts +2 -3
  759. package/src/react/client/interactable-model-context.test.ts +56 -13
  760. package/src/react/client/interactable-model-context.ts +48 -23
  761. package/src/react/index.ts +2 -2
  762. package/src/react/interactables-legacy/Interactables.test.ts +212 -1
  763. package/src/react/interactables-legacy/Interactables.ts +25 -14
  764. package/src/react/interactables-legacy/interactable-model-context.ts +26 -24
  765. package/src/react/interactables-shared/useInteractablePersistenceQueue.test.tsx +22 -2
  766. package/src/react/interactables-shared/useInteractablePersistenceQueue.ts +63 -11
  767. package/src/react/primitive-hooks/useSuggestionTrigger.test.ts +33 -0
  768. package/src/react/primitive-hooks/useSuggestionTrigger.ts +7 -4
  769. package/src/react/primitives/generativeUI/GenerativeUI.test.tsx +124 -8
  770. package/src/react/primitives/generativeUI/GenerativeUI.tsx +35 -15
  771. package/src/react/primitives/message/MessageAttachments.test.tsx +2 -6
  772. package/src/react/primitives/message/MessageAttachments.tsx +14 -8
  773. package/src/react/primitives/message/MessageGroupedParts.test.tsx +151 -7
  774. package/src/react/primitives/message/MessageGroupedParts.tsx +19 -6
  775. package/src/react/primitives/message/MessageParts.test.tsx +84 -0
  776. package/src/react/primitives/message/MessageParts.tool-interaction.test.tsx +69 -0
  777. package/src/react/primitives/message/MessageParts.tsx +29 -8
  778. package/src/react/primitives/thread/ThreadSuggestions.test.tsx +97 -0
  779. package/src/react/primitives/thread/ThreadSuggestions.tsx +29 -6
  780. package/src/react/providers/ReadonlyThreadProvider.tsx +2 -2
  781. package/src/react/providers/TextMessagePartProvider.tsx +3 -0
  782. package/src/react/runtimes/RemoteThreadListHookInstanceManager.running.test.tsx +93 -0
  783. package/src/react/runtimes/RemoteThreadListHookInstanceManager.test.tsx +160 -3
  784. package/src/react/runtimes/RemoteThreadListHookInstanceManager.title.test.tsx +38 -0
  785. package/src/react/runtimes/RemoteThreadListHookInstanceManager.tsx +73 -53
  786. package/src/react/runtimes/RemoteThreadListThreadListRuntimeCore.tsx +19 -3
  787. package/src/react/runtimes/RemoteThreadResource.ts +5 -2
  788. package/src/react/runtimes/assistant-transport/replayBoundaryStream.test.ts +3 -1
  789. package/src/react/runtimes/assistant-transport/replayBoundaryStream.ts +10 -2
  790. package/src/react/runtimes/assistant-transport/runManager.ts +3 -0
  791. package/src/react/runtimes/assistant-transport/transport-parentid.test.tsx +57 -0
  792. package/src/react/runtimes/assistant-transport/transport-thread-id.test.tsx +571 -0
  793. package/src/react/runtimes/assistant-transport/types.ts +9 -1
  794. package/src/react/runtimes/assistant-transport/useAssistantTransport.spec.md +10 -0
  795. package/src/react/runtimes/assistant-transport/useAssistantTransportRuntime.test.tsx +42 -0
  796. package/src/react/runtimes/assistant-transport/useAssistantTransportRuntime.ts +33 -9
  797. package/src/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.copy.integration.test.tsx +289 -0
  798. package/src/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.copy.test.tsx +471 -0
  799. package/src/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.engagement.test.tsx +330 -0
  800. package/src/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.test.ts +78 -2
  801. package/src/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.test.tsx +361 -2
  802. package/src/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.ts +571 -216
  803. package/src/react/runtimes/cloud/CloudFileAttachmentAdapter.test.ts +25 -0
  804. package/src/react/runtimes/cloud/CloudFileAttachmentAdapter.ts +7 -3
  805. package/src/react/runtimes/cloud/auiV0.ts +158 -9
  806. package/src/react/runtimes/cloud/auiV0DecodeSafely.test.ts +352 -1
  807. package/src/react/runtimes/createMessageConverter.ts +9 -3
  808. package/src/react/runtimes/external-store-history-copy.ts +223 -0
  809. package/src/react/runtimes/useExternalStoreRuntime.history-copy.test.tsx +483 -0
  810. package/src/react/runtimes/useExternalStoreRuntime.lifecycle.test.tsx +76 -1
  811. package/src/react/runtimes/useExternalStoreRuntime.ts +25 -5
  812. package/src/react/runtimes/useLocalRuntime.test.tsx +145 -1
  813. package/src/react/runtimes/useLocalRuntime.ts +8 -5
  814. package/src/react/types/MessagePartComponentTypes.ts +10 -0
  815. package/src/react/types/scopes/interactables.ts +3 -0
  816. package/src/runtime/api/attachment-runtime.ts +10 -5
  817. package/src/runtime/api/bindings.ts +6 -1
  818. package/src/runtime/api/composer-runtime.ts +29 -6
  819. package/src/runtime/api/message-part-runtime.test.ts +215 -0
  820. package/src/runtime/api/message-part-runtime.ts +40 -0
  821. package/src/runtime/api/message-runtime.test.ts +112 -2
  822. package/src/runtime/api/message-runtime.ts +10 -5
  823. package/src/runtime/api/thread-list-item-runtime.ts +5 -5
  824. package/src/runtime/api/thread-list-runtime.ts +3 -3
  825. package/src/runtime/api/thread-runtime.test.ts +59 -0
  826. package/src/runtime/api/thread-runtime.ts +21 -11
  827. package/src/runtime/base/base-composer-runtime-core.ts +548 -153
  828. package/src/runtime/base/base-thread-runtime-core.test.ts +744 -9
  829. package/src/runtime/base/base-thread-runtime-core.ts +154 -27
  830. package/src/runtime/base/default-edit-composer-runtime-core.ts +13 -1
  831. package/src/runtime/base/default-thread-composer-runtime-core.ts +29 -10
  832. package/src/runtime/interfaces/composer-runtime-core.ts +19 -0
  833. package/src/runtime/interfaces/thread-runtime-core.ts +22 -1
  834. package/src/runtime/utils/attachment-add-operations.ts +45 -2
  835. package/src/runtime/utils/attachment-send-operations.ts +54 -0
  836. package/src/runtime/utils/auto-status.test.ts +54 -0
  837. package/src/runtime/utils/auto-status.ts +3 -10
  838. package/src/runtime/utils/external-message-conversion.test.ts +48 -0
  839. package/src/runtime/utils/external-message-conversion.ts +3 -4
  840. package/src/runtime/utils/message-repository.test.ts +69 -1
  841. package/src/runtime/utils/message-repository.ts +14 -7
  842. package/src/runtime/utils/stored-message-parts.ts +43 -1
  843. package/src/runtime/utils/thread-message-like.test.ts +58 -0
  844. package/src/runtime/utils/thread-message-like.ts +72 -46
  845. package/src/runtime/utils/thread-runtime-lifecycle.test.ts +67 -0
  846. package/src/runtime/utils/thread-runtime-lifecycle.ts +42 -8
  847. package/src/runtime/utils/tool-interactions.test.ts +193 -0
  848. package/src/runtime/utils/tool-interactions.ts +147 -0
  849. package/src/runtimes/external-store/external-store-adapter.ts +22 -1
  850. package/src/runtimes/external-store/external-store-runtime-core.ts +10 -2
  851. package/src/runtimes/external-store/external-store-thread-list-runtime-core.ts +2 -2
  852. package/src/runtimes/external-store/external-store-thread-runtime-core.test.ts +49 -0
  853. package/src/runtimes/external-store/external-store-thread-runtime-core.ts +76 -29
  854. package/src/runtimes/inert/InertThreadRuntimeCore.test.ts +127 -56
  855. package/src/runtimes/inert/InertThreadRuntimeCore.ts +10 -1
  856. package/src/runtimes/local/local-thread-runtime-core.edit-cancellation.test.ts +70 -0
  857. package/src/runtimes/local/local-thread-runtime-core.test.ts +1649 -108
  858. package/src/runtimes/local/local-thread-runtime-core.ts +301 -47
  859. package/src/runtimes/readonly/ReadonlyThreadRuntimeCore.ts +53 -1
  860. package/src/runtimes/remote-thread-list/optimistic-state.ts +8 -3
  861. package/src/runtimes/tool-invocations/EDGE_CASES.md +19 -4
  862. package/src/runtimes/tool-invocations/ToolInvocationTracker.test.ts +392 -39
  863. package/src/runtimes/tool-invocations/ToolInvocationTracker.ts +31 -8
  864. package/src/store/clients/external-thread.test.ts +145 -0
  865. package/src/store/clients/external-thread.ts +635 -131
  866. package/src/store/clients/model-context-client.test.ts +8 -8
  867. package/src/store/clients/no-op-composer-client.ts +2 -0
  868. package/src/store/clients/submission-message.ts +27 -0
  869. package/src/store/clients/thread-message-client.test.ts +39 -0
  870. package/src/store/clients/thread-message-client.ts +13 -6
  871. package/src/store/index.ts +2 -2
  872. package/src/store/internal.ts +1 -0
  873. package/src/store/primitive-predicates.test.ts +103 -0
  874. package/src/store/primitive-predicates.ts +15 -3
  875. package/src/store/runtime-clients/composer-runtime-client.ts +4 -3
  876. package/src/store/runtime-clients/message-part-runtime-client.test.ts +42 -0
  877. package/src/store/runtime-clients/message-part-runtime-client.ts +4 -0
  878. package/src/store/runtime-clients/message-runtime-client.ts +5 -0
  879. package/src/store/runtime-clients/thread-runtime-client.test.tsx +138 -5
  880. package/src/store/runtime-clients/thread-runtime-client.ts +46 -9
  881. package/src/store/scopes/composer.ts +22 -4
  882. package/src/store/scopes/message.ts +8 -0
  883. package/src/store/scopes/part.ts +8 -0
  884. package/src/subscribable/subscribable.test.ts +198 -1
  885. package/src/subscribable/subscribable.ts +49 -7
  886. package/src/tests/RemoteThreadListThreadListRuntimeCore-errors.test.ts +95 -1
  887. package/src/tests/auiV0Encode.test.ts +408 -1
  888. package/src/tests/base-composer-runtime-core-send.test.ts +722 -29
  889. package/src/tests/base-composer-runtime-core.test.ts +196 -0
  890. package/src/tests/composer-can-send.test.ts +98 -1
  891. package/src/tests/composer-submission.test.tsx +796 -0
  892. package/src/tests/default-edit-composer-runtime-core.test.ts +102 -2
  893. package/src/tests/external-store-thread-list-runtime-core.test.ts +111 -0
  894. package/src/tests/external-store-thread-runtime-core-adapter.test.ts +581 -1
  895. package/src/tests/external-store-thread-runtime-core.test.ts +186 -0
  896. package/src/tests/external-thread-attachments.test.tsx +741 -3
  897. package/src/tests/external-thread-isLast.test.tsx +69 -0
  898. package/src/tests/get-thread-state-isRunning.test.ts +2 -2
  899. package/src/tests/remote-thread-list-adapter-switch.test.ts +45 -1
  900. package/src/types/message.ts +49 -2
  901. package/src/utils/normalizePartStatus.ts +14 -1
  902. package/dist/tests/remote-thread-list-test-helpers.d.ts +0 -15
  903. package/dist/tests/remote-thread-list-test-helpers.d.ts.map +0 -1
  904. package/dist/tests/remote-thread-list-test-helpers.js +0 -59
  905. package/dist/tests/remote-thread-list-test-helpers.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"host.js","names":["ModelContextProvider","ModelContext","Unsubscribe","Tool","notifySubscribers","notifyStateSubscribers","generateId","FrameMessage","FRAME_MESSAGE_CHANNEL","SerializedModelContext","SerializedTool","getDefaultTargetOrigin","window","location","origin","logCancellationFailure","error","console","deserializeTool","serializedTool","parameters","description","disabled","undefined","type","deserializeModelContext","serialized","system","tools","Object","fromEntries","entries","map","name","tool","getAbortReason","signal","AbortSignal","reason","Error","AssistantFrameHost","_context","_subscribers","Set","_pendingRequests","Map","resolve","value","reject","_iframeWindow","Window","_targetOrigin","_disposed","constructor","iframeWindow","targetOrigin","handleMessage","bind","requestContext","addEventListener","event","MessageEvent","source","data","channel","message","updateContext","context","pending","get","id","result","delete","serializedContext","execute","args","abortSignal","callTool","toolName","Promise","sendRequest","T","timeout","timeoutMessage","aborted","timeoutId","ReturnType","setTimeout","onAbort","cancelToolCall","cleanup","clearTimeout","removeEventListener","set","once","postMessage","onError","getModelContext","subscribe","callback","add","dispose","clear","cancellationFailed","cancellationError"],"sources":["../../../src/model-context/frame/host.ts"],"sourcesContent":["import type { ModelContextProvider, ModelContext } from \"../types\";\nimport type { Unsubscribe } from \"../../types/unsubscribe\";\nimport type { Tool } from \"assistant-stream\";\nimport { notifySubscribers as notifyStateSubscribers } from \"../../subscribable/subscribable\";\nimport { generateId } from \"../../utils/id\";\nimport {\n type FrameMessage,\n FRAME_MESSAGE_CHANNEL,\n type SerializedModelContext,\n type SerializedTool,\n} from \"./types\";\n\nconst getDefaultTargetOrigin = () => window.location.origin;\n\nconst logCancellationFailure = (error: unknown) => {\n console.error(\n \"[assistant-ui] AssistantFrameHost tool cancellation could not be sent.\",\n error,\n );\n};\n\n/**\n * Deserializes tools from JSON Schema format back to Tool objects\n */\nconst deserializeTool = (serializedTool: SerializedTool): Tool<any, any> =>\n ({\n parameters: serializedTool.parameters,\n ...(serializedTool.description && {\n description: serializedTool.description,\n }),\n ...(serializedTool.disabled !== undefined && {\n disabled: serializedTool.disabled,\n }),\n ...(serializedTool.type && { type: serializedTool.type }),\n }) as Tool<any, any>;\n\n/**\n * Deserializes a ModelContext from transmission format\n */\nconst deserializeModelContext = (\n serialized: SerializedModelContext,\n): ModelContext => ({\n ...(serialized.system !== undefined && { system: serialized.system }),\n ...(serialized.tools && {\n tools: Object.fromEntries(\n Object.entries(serialized.tools).map(([name, tool]) => [\n name,\n deserializeTool(tool),\n ]),\n ),\n }),\n});\n\nconst getAbortReason = (signal: AbortSignal): unknown => {\n if (signal.reason !== undefined) return signal.reason;\n const error = new Error(\"Tool call was aborted\");\n error.name = \"AbortError\";\n return error;\n};\n\nexport class AssistantFrameHost implements ModelContextProvider {\n private _context: ModelContext = {};\n private _subscribers = new Set<() => void>();\n private _pendingRequests = new Map<\n string,\n {\n resolve: (value: any) => void;\n reject: (error: any) => void;\n }\n >();\n private _iframeWindow: Window;\n private _targetOrigin: string;\n private _disposed = false;\n\n constructor(\n iframeWindow: Window,\n targetOrigin: string = getDefaultTargetOrigin(),\n ) {\n this._iframeWindow = iframeWindow;\n this._targetOrigin = targetOrigin;\n\n this.handleMessage = this.handleMessage.bind(this);\n // A posted message cannot be delivered before this constructor returns, so\n // requesting first means a failed request leaves no listener to clean up.\n this.requestContext();\n window.addEventListener(\"message\", this.handleMessage);\n }\n\n private handleMessage(event: MessageEvent) {\n if (this._targetOrigin !== \"*\" && event.origin !== this._targetOrigin)\n return;\n if (event.source !== this._iframeWindow) return;\n if (event.data?.channel !== FRAME_MESSAGE_CHANNEL) return;\n\n const message = event.data.message as FrameMessage;\n\n switch (message.type) {\n case \"model-context-update\": {\n this.updateContext(message.context);\n break;\n }\n\n case \"tool-result\": {\n const pending = this._pendingRequests.get(message.id);\n if (pending) {\n if (typeof message.error === \"string\") {\n pending.reject(new Error(message.error));\n } else {\n pending.resolve(message.result);\n }\n this._pendingRequests.delete(message.id);\n }\n break;\n }\n }\n }\n\n private updateContext(serializedContext: SerializedModelContext) {\n const context = deserializeModelContext(serializedContext);\n this._context = {\n ...context,\n tools:\n context.tools &&\n Object.fromEntries(\n Object.entries(context.tools).map(([name, tool]) => [\n name,\n {\n ...tool,\n execute: (args: any, context: { abortSignal: AbortSignal }) =>\n this.callTool(name, args, context.abortSignal),\n } as Tool<any, any>,\n ]),\n ),\n };\n this.notifySubscribers();\n }\n\n private callTool(\n toolName: string,\n args: any,\n abortSignal: AbortSignal,\n ): Promise<any> {\n return this.sendRequest(\n {\n type: \"tool-call\",\n id: `tool-${generateId()}`,\n toolName,\n args,\n },\n 30000,\n `Tool call \"${toolName}\" timed out`,\n abortSignal,\n );\n }\n\n private sendRequest<T extends FrameMessage & { id: string }>(\n message: T,\n timeout = 30000,\n timeoutMessage = \"Request timed out\",\n abortSignal?: AbortSignal,\n ): Promise<any> {\n if (this._disposed) {\n return Promise.reject(new Error(\"AssistantFrameHost has been disposed\"));\n }\n if (abortSignal?.aborted) {\n return Promise.reject(getAbortReason(abortSignal));\n }\n\n return new Promise((resolve, reject) => {\n let timeoutId: ReturnType<typeof setTimeout> | undefined;\n const onAbort = () => {\n if (!abortSignal) return;\n const pending = this._pendingRequests.get(message.id);\n if (pending) {\n this.cancelToolCall(message.id);\n pending.reject(getAbortReason(abortSignal));\n this._pendingRequests.delete(message.id);\n }\n };\n const cleanup = () => {\n if (timeoutId !== undefined) clearTimeout(timeoutId);\n abortSignal?.removeEventListener(\"abort\", onAbort);\n };\n\n this._pendingRequests.set(message.id, {\n resolve: (value: any) => {\n cleanup();\n resolve(value);\n },\n reject: (error: any) => {\n cleanup();\n reject(error);\n },\n });\n\n timeoutId = setTimeout(() => {\n const pending = this._pendingRequests.get(message.id);\n if (pending) {\n this.cancelToolCall(message.id);\n pending.reject(new Error(timeoutMessage));\n this._pendingRequests.delete(message.id);\n }\n }, timeout);\n abortSignal?.addEventListener(\"abort\", onAbort, { once: true });\n\n try {\n this._iframeWindow.postMessage(\n { channel: FRAME_MESSAGE_CHANNEL, message },\n this._targetOrigin,\n );\n } catch (error) {\n const pending = this._pendingRequests.get(message.id);\n this._pendingRequests.delete(message.id);\n pending?.reject(error);\n }\n });\n }\n\n private cancelToolCall(\n id: string,\n onError: (error: unknown) => void = logCancellationFailure,\n ) {\n try {\n this._iframeWindow.postMessage(\n {\n channel: FRAME_MESSAGE_CHANNEL,\n message: { type: \"tool-cancel\", id } satisfies FrameMessage,\n },\n this._targetOrigin,\n );\n } catch (error) {\n onError(error);\n }\n }\n\n private requestContext() {\n this._iframeWindow.postMessage(\n {\n channel: FRAME_MESSAGE_CHANNEL,\n message: {\n type: \"model-context-request\",\n } as FrameMessage,\n },\n this._targetOrigin,\n );\n }\n\n private notifySubscribers() {\n notifyStateSubscribers(this._subscribers);\n }\n\n getModelContext(): ModelContext {\n return this._context;\n }\n\n subscribe(callback: () => void): Unsubscribe {\n this._subscribers.add(callback);\n return () => this._subscribers.delete(callback);\n }\n\n dispose() {\n this._disposed = true;\n window.removeEventListener(\"message\", this.handleMessage);\n this._subscribers.clear();\n const error = new Error(\"AssistantFrameHost has been disposed\");\n let cancellationFailed = false;\n let cancellationError: unknown;\n\n for (const [id, pending] of this._pendingRequests) {\n this._pendingRequests.delete(id);\n this.cancelToolCall(id, (error) => {\n if (!cancellationFailed) {\n cancellationFailed = true;\n cancellationError = error;\n } else {\n logCancellationFailure(error);\n }\n });\n pending.reject(error);\n }\n\n if (cancellationFailed) throw cancellationError;\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"host.js","names":["ModelContextProvider","ModelContext","Unsubscribe","Tool","notifySubscribers","notifyStateSubscribers","generateId","FrameMessage","FRAME_MESSAGE_CHANNEL","SerializedModelContext","SerializedTool","isFrameMessage","getDefaultTargetOrigin","window","location","origin","logCancellationFailure","error","console","deserializeTool","serializedTool","parameters","description","disabled","undefined","type","deserializeModelContext","serialized","system","tools","Object","fromEntries","entries","map","name","tool","getAbortReason","signal","AbortSignal","reason","Error","AssistantFrameHost","_context","_subscribers","Set","_pendingRequests","Map","resolve","value","reject","_iframeWindow","Window","_targetOrigin","_disposed","constructor","iframeWindow","targetOrigin","handleMessage","bind","requestContext","addEventListener","event","MessageEvent","source","data","channel","message","updateContext","context","pending","get","id","result","delete","serializedContext","execute","args","abortSignal","callTool","toolName","Promise","sendRequest","T","timeout","timeoutMessage","aborted","timeoutId","ReturnType","setTimeout","onAbort","cancelToolCall","cleanup","clearTimeout","removeEventListener","set","once","postMessage","onError","getModelContext","subscribe","callback","add","dispose","clear","cancellationFailed","cancellationError"],"sources":["../../../src/model-context/frame/host.ts"],"sourcesContent":["import type { ModelContextProvider, ModelContext } from \"../types\";\nimport type { Unsubscribe } from \"../../types/unsubscribe\";\nimport type { Tool } from \"assistant-stream\";\nimport { notifySubscribers as notifyStateSubscribers } from \"../../subscribable/subscribable\";\nimport { generateId } from \"../../utils/id\";\nimport {\n type FrameMessage,\n FRAME_MESSAGE_CHANNEL,\n type SerializedModelContext,\n type SerializedTool,\n} from \"./types\";\nimport { isFrameMessage } from \"./validate\";\n\nconst getDefaultTargetOrigin = () => window.location.origin;\n\nconst logCancellationFailure = (error: unknown) => {\n console.error(\n \"[assistant-ui] AssistantFrameHost tool cancellation could not be sent.\",\n error,\n );\n};\n\n/**\n * Deserializes tools from JSON Schema format back to Tool objects\n */\nconst deserializeTool = (serializedTool: SerializedTool): Tool<any, any> =>\n ({\n parameters: serializedTool.parameters,\n ...(serializedTool.description && {\n description: serializedTool.description,\n }),\n ...(serializedTool.disabled !== undefined && {\n disabled: serializedTool.disabled,\n }),\n ...(serializedTool.type && { type: serializedTool.type }),\n }) as Tool<any, any>;\n\n/**\n * Deserializes a ModelContext from transmission format\n */\nconst deserializeModelContext = (\n serialized: SerializedModelContext,\n): ModelContext => ({\n ...(serialized.system !== undefined && { system: serialized.system }),\n ...(serialized.tools && {\n tools: Object.fromEntries(\n Object.entries(serialized.tools).map(([name, tool]) => [\n name,\n deserializeTool(tool),\n ]),\n ),\n }),\n});\n\nconst getAbortReason = (signal: AbortSignal): unknown => {\n if (signal.reason !== undefined) return signal.reason;\n const error = new Error(\"Tool call was aborted\");\n error.name = \"AbortError\";\n return error;\n};\n\nexport class AssistantFrameHost implements ModelContextProvider {\n private _context: ModelContext = {};\n private _subscribers = new Set<() => void>();\n private _pendingRequests = new Map<\n string,\n {\n resolve: (value: any) => void;\n reject: (error: any) => void;\n }\n >();\n private _iframeWindow: Window;\n private _targetOrigin: string;\n private _disposed = false;\n\n constructor(\n iframeWindow: Window,\n targetOrigin: string = getDefaultTargetOrigin(),\n ) {\n this._iframeWindow = iframeWindow;\n this._targetOrigin = targetOrigin;\n\n this.handleMessage = this.handleMessage.bind(this);\n // A posted message cannot be delivered before this constructor returns, so\n // requesting first means a failed request leaves no listener to clean up.\n this.requestContext();\n window.addEventListener(\"message\", this.handleMessage);\n }\n\n private handleMessage(event: MessageEvent) {\n if (this._targetOrigin !== \"*\" && event.origin !== this._targetOrigin)\n return;\n if (event.source !== this._iframeWindow) return;\n if (event.data?.channel !== FRAME_MESSAGE_CHANNEL) return;\n\n const message = event.data.message;\n if (!isFrameMessage(message)) return;\n\n switch (message.type) {\n case \"model-context-update\": {\n this.updateContext(message.context);\n break;\n }\n\n case \"tool-result\": {\n const pending = this._pendingRequests.get(message.id);\n if (pending) {\n if (typeof message.error === \"string\") {\n pending.reject(new Error(message.error));\n } else {\n pending.resolve(message.result);\n }\n this._pendingRequests.delete(message.id);\n }\n break;\n }\n }\n }\n\n private updateContext(serializedContext: SerializedModelContext) {\n const context = deserializeModelContext(serializedContext);\n this._context = {\n ...context,\n tools:\n context.tools &&\n Object.fromEntries(\n Object.entries(context.tools).map(([name, tool]) => [\n name,\n {\n ...tool,\n execute: (args: any, context: { abortSignal: AbortSignal }) =>\n this.callTool(name, args, context.abortSignal),\n } as Tool<any, any>,\n ]),\n ),\n };\n this.notifySubscribers();\n }\n\n private callTool(\n toolName: string,\n args: any,\n abortSignal: AbortSignal,\n ): Promise<any> {\n return this.sendRequest(\n {\n type: \"tool-call\",\n id: `tool-${generateId()}`,\n toolName,\n args,\n },\n 30000,\n `Tool call \"${toolName}\" timed out`,\n abortSignal,\n );\n }\n\n private sendRequest<T extends FrameMessage & { id: string }>(\n message: T,\n timeout = 30000,\n timeoutMessage = \"Request timed out\",\n abortSignal?: AbortSignal,\n ): Promise<any> {\n if (this._disposed) {\n return Promise.reject(new Error(\"AssistantFrameHost has been disposed\"));\n }\n if (abortSignal?.aborted) {\n return Promise.reject(getAbortReason(abortSignal));\n }\n\n return new Promise((resolve, reject) => {\n let timeoutId: ReturnType<typeof setTimeout> | undefined;\n const onAbort = () => {\n if (!abortSignal) return;\n const pending = this._pendingRequests.get(message.id);\n if (pending) {\n this.cancelToolCall(message.id);\n pending.reject(getAbortReason(abortSignal));\n this._pendingRequests.delete(message.id);\n }\n };\n const cleanup = () => {\n if (timeoutId !== undefined) clearTimeout(timeoutId);\n abortSignal?.removeEventListener(\"abort\", onAbort);\n };\n\n this._pendingRequests.set(message.id, {\n resolve: (value: any) => {\n cleanup();\n resolve(value);\n },\n reject: (error: any) => {\n cleanup();\n reject(error);\n },\n });\n\n timeoutId = setTimeout(() => {\n const pending = this._pendingRequests.get(message.id);\n if (pending) {\n this.cancelToolCall(message.id);\n pending.reject(new Error(timeoutMessage));\n this._pendingRequests.delete(message.id);\n }\n }, timeout);\n abortSignal?.addEventListener(\"abort\", onAbort, { once: true });\n\n try {\n this._iframeWindow.postMessage(\n { channel: FRAME_MESSAGE_CHANNEL, message },\n this._targetOrigin,\n );\n } catch (error) {\n const pending = this._pendingRequests.get(message.id);\n this._pendingRequests.delete(message.id);\n pending?.reject(error);\n }\n });\n }\n\n private cancelToolCall(\n id: string,\n onError: (error: unknown) => void = logCancellationFailure,\n ) {\n try {\n this._iframeWindow.postMessage(\n {\n channel: FRAME_MESSAGE_CHANNEL,\n message: { type: \"tool-cancel\", id } satisfies FrameMessage,\n },\n this._targetOrigin,\n );\n } catch (error) {\n onError(error);\n }\n }\n\n private requestContext() {\n this._iframeWindow.postMessage(\n {\n channel: FRAME_MESSAGE_CHANNEL,\n message: {\n type: \"model-context-request\",\n } as FrameMessage,\n },\n this._targetOrigin,\n );\n }\n\n private notifySubscribers() {\n notifyStateSubscribers(this._subscribers);\n }\n\n getModelContext(): ModelContext {\n return this._context;\n }\n\n subscribe(callback: () => void): Unsubscribe {\n this._subscribers.add(callback);\n return () => this._subscribers.delete(callback);\n }\n\n dispose() {\n this._disposed = true;\n window.removeEventListener(\"message\", this.handleMessage);\n this._subscribers.clear();\n const error = new Error(\"AssistantFrameHost has been disposed\");\n let cancellationFailed = false;\n let cancellationError: unknown;\n\n for (const [id, pending] of this._pendingRequests) {\n this._pendingRequests.delete(id);\n this.cancelToolCall(id, (error) => {\n if (!cancellationFailed) {\n cancellationFailed = true;\n cancellationError = error;\n } else {\n logCancellationFailure(error);\n }\n });\n pending.reject(error);\n }\n\n if (cancellationFailed) throw cancellationError;\n }\n}\n"],"mappings":"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"}
@@ -1,31 +1,30 @@
1
- import { Unsubscribe } from "../../types/unsubscribe.js";
2
- import { ModelContextProvider } from "../types.js";
3
- //#region src/model-context/frame/provider.d.ts
1
+ import type { ModelContextProvider } from "../types.js";
2
+ import type { Unsubscribe } from "../../types/unsubscribe.js";
4
3
  export declare class AssistantFrameProvider {
5
- private static _instance;
6
- private _providers;
7
- private _providerUnsubscribes;
8
- private _activeToolCalls;
9
- private _targetOrigin;
10
- private _strictRegistrations;
11
- private _wildcardRegistrations;
12
- private _startupTimer;
13
- private _disposed;
14
- private constructor();
15
- private static getInstance;
16
- private reconcileTargetOrigin;
17
- private handleMessage;
18
- private handleToolCall;
19
- private cancelToolCall;
20
- private cancelToolCallsForProvider;
21
- private sendMessage;
22
- private getProviders;
23
- private getTool;
24
- private getModelContext;
25
- private broadcastUpdate;
26
- private removeProvider;
27
- static addModelContextProvider(provider: ModelContextProvider, targetOrigin?: string): Unsubscribe;
28
- static dispose(): void;
4
+ private static _instance;
5
+ private _providers;
6
+ private _providerUnsubscribes;
7
+ private _activeToolCalls;
8
+ private _targetOrigin;
9
+ private _strictRegistrations;
10
+ private _wildcardRegistrations;
11
+ private _startupTimer;
12
+ private _disposed;
13
+ private constructor();
14
+ private static getInstance;
15
+ private reconcileTargetOrigin;
16
+ private handleMessage;
17
+ private handleToolCall;
18
+ private cancelToolCall;
19
+ private cancelToolCallsForProvider;
20
+ private sendMessage;
21
+ private getProviders;
22
+ private getTool;
23
+ private getModelContext;
24
+ private broadcastUpdate;
25
+ private postModelContext;
26
+ private removeProvider;
27
+ static addModelContextProvider(provider: ModelContextProvider, targetOrigin?: string): Unsubscribe;
28
+ static dispose(): void;
29
29
  }
30
- //#endregion
31
30
  //# sourceMappingURL=provider.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"provider.d.ts","names":[],"sources":["../../../src/model-context/frame/provider.ts"],"mappings":";;;qBAiCa;iBACI;UAEP;UACA;UACA;UAQA;UACA;UACA;UACA;UACA;UAED;iBAWQ;UAWP;UAsBA;UA+BM;UA8DN;UAOA;UA+BA;UAOA;UAIA;UAaA;UAkBA;UAeA;SAiCD,wBACL,UAAU,sBACV,wBACC;SA+EI"}
1
+ {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../../src/model-context/frame/provider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAgB,oBAAiB;AACnE,OAAO,KAAK,EAAE,WAAW,EAAE,mCAAgC;AAiC3D,qBAAa,sBAAsB;IACjC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAuC;IAE/D,OAAO,CAAC,UAAU,CAA2C;IAC7D,OAAO,CAAC,qBAAqB,CAA8C;IAC3E,OAAO,CAAC,gBAAgB,CAOpB;IACJ,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,oBAAoB,CAAK;IACjC,OAAO,CAAC,sBAAsB,CAAK;IACnC,OAAO,CAAC,aAAa,CAA4C;IACjE,OAAO,CAAC,SAAS,CAAS;IAE1B,OAAO;IAWP,OAAO,CAAC,MAAM,CAAC,WAAW;IAW1B,OAAO,CAAC,qBAAqB;IAsB7B,OAAO,CAAC,aAAa;YAgCP,cAAc;IA8D5B,OAAO,CAAC,cAAc;IAOtB,OAAO,CAAC,0BAA0B;IA+BlC,OAAO,CAAC,WAAW;IAOnB,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,OAAO;IAaf,OAAO,CAAC,eAAe;IAkBvB,OAAO,CAAC,eAAe;IAKvB,OAAO,CAAC,gBAAgB;IAcxB,OAAO,CAAC,cAAc;IAiCtB,MAAM,CAAC,uBAAuB,CAC5B,QAAQ,EAAE,oBAAoB,EAC9B,YAAY,CAAC,EAAE,MAAM,GACpB,WAAW;IA+Ed,MAAM,CAAC,OAAO;CA+Cf"}
@@ -1,4 +1,5 @@
1
1
  import { FRAME_MESSAGE_CHANNEL } from "./types.js";
2
+ import { isFrameMessage } from "./validate.js";
2
3
  import { toJSONSchema } from "assistant-stream";
3
4
  //#region src/model-context/frame/provider.ts
4
5
  const serializeTool = (tool) => ({
@@ -54,6 +55,7 @@ var AssistantFrameProvider = class AssistantFrameProvider {
54
55
  if (event.source !== window.parent) return;
55
56
  if (event.data?.channel !== "assistant-ui-frame") return;
56
57
  const message = event.data.message;
58
+ if (!isFrameMessage(message)) return;
57
59
  switch (message.type) {
58
60
  case "model-context-request":
59
61
  this.sendMessage(event, {
@@ -172,6 +174,9 @@ var AssistantFrameProvider = class AssistantFrameProvider {
172
174
  }
173
175
  broadcastUpdate() {
174
176
  if (this._disposed) return;
177
+ this.postModelContext();
178
+ }
179
+ postModelContext() {
175
180
  if (window.parent && window.parent !== window) {
176
181
  const updateMessage = {
177
182
  type: "model-context-update",
@@ -281,6 +286,7 @@ var AssistantFrameProvider = class AssistantFrameProvider {
281
286
  });
282
287
  instance._providerUnsubscribes.clear();
283
288
  instance._providers.clear();
289
+ runCleanup(() => instance.postModelContext());
284
290
  instance._activeToolCalls.forEach(({ abortController, event }, id) => {
285
291
  runCleanup(() => {
286
292
  abortController.abort();
@@ -1 +1 @@
1
- {"version":3,"file":"provider.js","names":["ModelContextProvider","ModelContext","Unsubscribe","Tool","toJSONSchema","FrameMessage","FRAME_MESSAGE_CHANNEL","SerializedModelContext","SerializedTool","serializeTool","tool","description","parameters","undefined","disabled","type","serializeModelContext","context","system","tools","Object","fromEntries","entries","map","name","getDefaultTargetOrigin","window","location","origin","AssistantFrameProvider","_instance","_providers","Map","_providerUnsubscribes","_activeToolCalls","abortController","AbortController","event","MessageEvent","provider","_targetOrigin","_strictRegistrations","_wildcardRegistrations","_startupTimer","ReturnType","setTimeout","_disposed","constructor","targetOrigin","handleMessage","bind","addEventListener","broadcastUpdate","getInstance","reconcileTargetOrigin","size","Error","source","parent","data","channel","message","sendMessage","getModelContext","handleToolCall","catch","error","console","cancelToolCall","id","Extract","resolvedTool","getTool","toolName","get","abort","activeCall","set","result","execute","args","toolCallId","abortSignal","signal","human","e","String","delete","sendError","cancelToolCallsForProvider","matchingCalls","Array","from","filter","sendFailed","postMessage","getProviders","Set","values","resolved","contexts","reduce","merged","updateMessage","removeProvider","unsubscribe","removedProvider","includes","addModelContextProvider","instance","Symbol","subscribe","cancelError","unsubscribeError","broadcastError","released","cleanupFailed","cleanupError","runCleanup","cleanup","dispose","clearTimeout","removeEventListener","forEach","clear"],"sources":["../../../src/model-context/frame/provider.ts"],"sourcesContent":["import type { ModelContextProvider, ModelContext } from \"../types\";\nimport type { Unsubscribe } from \"../../types/unsubscribe\";\nimport { type Tool, toJSONSchema } from \"assistant-stream\";\nimport {\n type FrameMessage,\n FRAME_MESSAGE_CHANNEL,\n type SerializedModelContext,\n type SerializedTool,\n} from \"./types\";\n\nconst serializeTool = (tool: Tool<any, any>): SerializedTool => ({\n ...(tool.description && { description: tool.description }),\n parameters: tool.parameters ? toJSONSchema(tool.parameters) : undefined,\n ...(tool.disabled !== undefined && { disabled: tool.disabled }),\n ...(tool.type && { type: tool.type }),\n});\n\nconst serializeModelContext = (\n context: ModelContext,\n): SerializedModelContext => ({\n ...(context.system !== undefined && { system: context.system }),\n ...(context.tools && {\n tools: Object.fromEntries(\n Object.entries(context.tools).map(([name, tool]) => [\n name,\n serializeTool(tool),\n ]),\n ),\n }),\n});\n\nconst getDefaultTargetOrigin = () => window.location.origin;\n\nexport class AssistantFrameProvider {\n private static _instance: AssistantFrameProvider | null = null;\n\n private _providers = new Map<symbol, ModelContextProvider>();\n private _providerUnsubscribes = new Map<symbol, Unsubscribe | undefined>();\n private _activeToolCalls = new Map<\n string,\n {\n abortController: AbortController;\n event: MessageEvent;\n provider: ModelContextProvider | undefined;\n }\n >();\n private _targetOrigin: string;\n private _strictRegistrations = 0;\n private _wildcardRegistrations = 0;\n private _startupTimer: ReturnType<typeof setTimeout> | undefined;\n private _disposed = false;\n\n private constructor(targetOrigin: string = getDefaultTargetOrigin()) {\n this._targetOrigin = targetOrigin;\n this.handleMessage = this.handleMessage.bind(this);\n window.addEventListener(\"message\", this.handleMessage);\n\n this._startupTimer = setTimeout(() => {\n this._startupTimer = undefined;\n this.broadcastUpdate();\n }, 0);\n }\n\n private static getInstance(targetOrigin?: string): AssistantFrameProvider {\n if (!AssistantFrameProvider._instance) {\n AssistantFrameProvider._instance = new AssistantFrameProvider(\n targetOrigin,\n );\n } else {\n AssistantFrameProvider._instance.reconcileTargetOrigin(targetOrigin);\n }\n return AssistantFrameProvider._instance;\n }\n\n private reconcileTargetOrigin(\n targetOrigin: string = getDefaultTargetOrigin(),\n ) {\n if (targetOrigin === this._targetOrigin) return;\n\n if (this._providers.size === 0) {\n this._targetOrigin = targetOrigin;\n return;\n }\n\n if (targetOrigin === \"*\") return;\n\n if (this._targetOrigin === \"*\") {\n this._targetOrigin = targetOrigin;\n return;\n }\n\n throw new Error(\n `AssistantFrameProvider cannot register conflicting target origins: \"${this._targetOrigin}\" and \"${targetOrigin}\"`,\n );\n }\n\n private handleMessage(event: MessageEvent) {\n if (this._targetOrigin !== \"*\" && event.origin !== this._targetOrigin)\n return;\n if (event.source !== window.parent) return;\n if (event.data?.channel !== FRAME_MESSAGE_CHANNEL) return;\n\n const message = event.data.message as FrameMessage;\n\n switch (message.type) {\n case \"model-context-request\":\n this.sendMessage(event, {\n type: \"model-context-update\",\n context: serializeModelContext(this.getModelContext()),\n });\n break;\n\n case \"tool-call\":\n void this.handleToolCall(message, event).catch((error: unknown) => {\n console.error(\n \"[assistant-ui] AssistantFrame tool call failed.\",\n error,\n );\n });\n break;\n\n case \"tool-cancel\":\n this.cancelToolCall(message.id);\n break;\n }\n }\n\n private async handleToolCall(\n message: Extract<FrameMessage, { type: \"tool-call\" }>,\n event: MessageEvent,\n ) {\n const resolvedTool = this.getTool(message.toolName);\n const tool = resolvedTool?.tool;\n const abortController = new AbortController();\n this._activeToolCalls.get(message.id)?.abortController.abort();\n const activeCall = {\n abortController,\n event,\n provider: resolvedTool?.provider,\n };\n this._activeToolCalls.set(message.id, activeCall);\n\n let result: any;\n let error: string | undefined;\n\n if (!tool) {\n error = `Tool \"${message.toolName}\" not found`;\n } else {\n try {\n result = tool.execute\n ? await tool.execute(message.args, {\n toolCallId: message.id,\n abortSignal: abortController.signal,\n human: async () => {\n throw new Error(\n \"Tool human input is not supported in frame context\",\n );\n },\n })\n : undefined;\n } catch (e) {\n error = e instanceof Error ? e.message : String(e);\n }\n }\n\n if (this._activeToolCalls.get(message.id) !== activeCall) return;\n this._activeToolCalls.delete(message.id);\n\n try {\n this.sendMessage(event, {\n type: \"tool-result\",\n id: message.id,\n ...(error !== undefined ? { error } : { result }),\n });\n } catch (sendError) {\n if (error !== undefined) throw sendError;\n\n console.error(\n \"[assistant-ui] AssistantFrame tool result could not be sent.\",\n sendError,\n );\n this.sendMessage(event, {\n type: \"tool-result\",\n id: message.id,\n error: \"Tool result could not be sent across the frame boundary\",\n });\n }\n }\n\n private cancelToolCall(id: string) {\n const activeCall = this._activeToolCalls.get(id);\n if (!activeCall) return;\n this._activeToolCalls.delete(id);\n activeCall.abortController.abort();\n }\n\n private cancelToolCallsForProvider(provider: ModelContextProvider) {\n const matchingCalls = Array.from(this._activeToolCalls).filter(\n ([, activeCall]) => activeCall.provider === provider,\n );\n for (const [id, activeCall] of matchingCalls) {\n this._activeToolCalls.delete(id);\n activeCall.abortController.abort();\n }\n\n let sendFailed = false;\n let sendError: unknown;\n for (const [id, activeCall] of matchingCalls) {\n try {\n this.sendMessage(activeCall.event, {\n type: \"tool-result\",\n id,\n error: \"AssistantFrame tool provider has been removed\",\n });\n } catch (error) {\n if (sendFailed) {\n console.error(error);\n } else {\n sendFailed = true;\n sendError = error;\n }\n }\n }\n\n if (sendFailed) throw sendError;\n }\n\n private sendMessage(event: MessageEvent, message: FrameMessage) {\n event.source?.postMessage(\n { channel: FRAME_MESSAGE_CHANNEL, message },\n { targetOrigin: event.origin },\n );\n }\n\n private getProviders() {\n return Array.from(new Set(this._providers.values()));\n }\n\n private getTool(toolName: string) {\n let resolved:\n | { provider: ModelContextProvider; tool: Tool<any, any> }\n | undefined;\n\n for (const provider of this.getProviders()) {\n const tool = provider.getModelContext().tools?.[toolName];\n if (tool) resolved = { provider, tool };\n }\n\n return resolved;\n }\n\n private getModelContext(): ModelContext {\n const contexts = this.getProviders().map((provider) =>\n provider.getModelContext(),\n );\n\n return contexts.reduce(\n (merged, context) => ({\n system: context.system\n ? merged.system\n ? `${merged.system}\\n\\n${context.system}`\n : context.system\n : merged.system,\n tools: { ...(merged.tools || {}), ...(context.tools || {}) },\n }),\n {} as ModelContext,\n );\n }\n\n private broadcastUpdate() {\n if (this._disposed) return;\n if (window.parent && window.parent !== window) {\n const updateMessage: FrameMessage = {\n type: \"model-context-update\",\n context: serializeModelContext(this.getModelContext()),\n };\n\n window.parent.postMessage(\n { channel: FRAME_MESSAGE_CHANNEL, message: updateMessage },\n this._targetOrigin,\n );\n }\n }\n\n private removeProvider(\n id: symbol,\n origin: string,\n ): {\n unsubscribe: Unsubscribe | undefined;\n removedProvider: ModelContextProvider | undefined;\n } {\n const provider = this._providers.get(id);\n this._providers.delete(id);\n const unsubscribe = this._providerUnsubscribes.get(id);\n this._providerUnsubscribes.delete(id);\n if (origin === \"*\") {\n this._wildcardRegistrations -= 1;\n if (\n this._wildcardRegistrations === 0 &&\n this._strictRegistrations === 0\n ) {\n this._targetOrigin = getDefaultTargetOrigin();\n }\n } else {\n this._strictRegistrations -= 1;\n if (this._strictRegistrations === 0) {\n this._targetOrigin =\n this._wildcardRegistrations > 0 ? \"*\" : getDefaultTargetOrigin();\n }\n }\n const removedProvider =\n provider && !this.getProviders().includes(provider)\n ? provider\n : undefined;\n return { unsubscribe, removedProvider };\n }\n\n static addModelContextProvider(\n provider: ModelContextProvider,\n targetOrigin?: string,\n ): Unsubscribe {\n const origin = targetOrigin ?? getDefaultTargetOrigin();\n const instance = AssistantFrameProvider.getInstance(origin);\n const id = Symbol();\n instance._providers.set(id, provider);\n if (origin === \"*\") {\n instance._wildcardRegistrations += 1;\n } else {\n instance._strictRegistrations += 1;\n }\n\n try {\n const unsubscribe = provider.subscribe?.(() =>\n instance.broadcastUpdate(),\n );\n if (unsubscribe) {\n instance._providerUnsubscribes.set(id, unsubscribe);\n }\n\n instance.broadcastUpdate();\n } catch (error) {\n const { unsubscribe, removedProvider } = instance.removeProvider(\n id,\n origin,\n );\n // Rollback failures must not replace the registration error.\n try {\n if (removedProvider) {\n instance.cancelToolCallsForProvider(removedProvider);\n }\n } catch (cancelError) {\n console.error(cancelError);\n }\n try {\n unsubscribe?.();\n } catch (unsubscribeError) {\n console.error(unsubscribeError);\n }\n try {\n instance.broadcastUpdate();\n } catch (broadcastError) {\n console.error(broadcastError);\n }\n throw error;\n }\n\n let released = false;\n return () => {\n if (released) return;\n released = true;\n const { unsubscribe, removedProvider } = instance.removeProvider(\n id,\n origin,\n );\n let cleanupFailed = false;\n let cleanupError: unknown;\n const runCleanup = (cleanup: () => void) => {\n try {\n cleanup();\n } catch (error) {\n if (cleanupFailed) {\n console.error(error);\n } else {\n cleanupFailed = true;\n cleanupError = error;\n }\n }\n };\n\n if (removedProvider) {\n runCleanup(() => instance.cancelToolCallsForProvider(removedProvider));\n }\n if (unsubscribe) runCleanup(unsubscribe);\n runCleanup(() => instance.broadcastUpdate());\n\n if (cleanupFailed) throw cleanupError;\n };\n }\n\n static dispose() {\n if (AssistantFrameProvider._instance) {\n const instance = AssistantFrameProvider._instance;\n instance._disposed = true;\n if (instance._startupTimer !== undefined) {\n clearTimeout(instance._startupTimer);\n instance._startupTimer = undefined;\n }\n window.removeEventListener(\"message\", instance.handleMessage);\n\n let cleanupFailed = false;\n let cleanupError: unknown;\n const runCleanup = (cleanup: () => void) => {\n try {\n cleanup();\n } catch (error) {\n if (cleanupFailed) {\n console.error(error);\n } else {\n cleanupFailed = true;\n cleanupError = error;\n }\n }\n };\n\n instance._providerUnsubscribes.forEach((unsubscribe) => {\n if (unsubscribe) runCleanup(unsubscribe);\n });\n instance._providerUnsubscribes.clear();\n instance._providers.clear();\n instance._activeToolCalls.forEach(({ abortController, event }, id) => {\n runCleanup(() => {\n abortController.abort();\n instance.sendMessage(event, {\n type: \"tool-result\",\n id,\n error: \"AssistantFrameProvider has been disposed\",\n });\n });\n });\n instance._activeToolCalls.clear();\n\n AssistantFrameProvider._instance = null;\n if (cleanupFailed) throw cleanupError;\n }\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"provider.js","names":["ModelContextProvider","ModelContext","Unsubscribe","Tool","toJSONSchema","FrameMessage","FRAME_MESSAGE_CHANNEL","SerializedModelContext","SerializedTool","isFrameMessage","serializeTool","tool","description","parameters","undefined","disabled","type","serializeModelContext","context","system","tools","Object","fromEntries","entries","map","name","getDefaultTargetOrigin","window","location","origin","AssistantFrameProvider","_instance","_providers","Map","_providerUnsubscribes","_activeToolCalls","abortController","AbortController","event","MessageEvent","provider","_targetOrigin","_strictRegistrations","_wildcardRegistrations","_startupTimer","ReturnType","setTimeout","_disposed","constructor","targetOrigin","handleMessage","bind","addEventListener","broadcastUpdate","getInstance","reconcileTargetOrigin","size","Error","source","parent","data","channel","message","sendMessage","getModelContext","handleToolCall","catch","error","console","cancelToolCall","id","Extract","resolvedTool","getTool","toolName","get","abort","activeCall","set","result","execute","args","toolCallId","abortSignal","signal","human","e","String","delete","sendError","cancelToolCallsForProvider","matchingCalls","Array","from","filter","sendFailed","postMessage","getProviders","Set","values","resolved","contexts","reduce","merged","postModelContext","updateMessage","removeProvider","unsubscribe","removedProvider","includes","addModelContextProvider","instance","Symbol","subscribe","cancelError","unsubscribeError","broadcastError","released","cleanupFailed","cleanupError","runCleanup","cleanup","dispose","clearTimeout","removeEventListener","forEach","clear"],"sources":["../../../src/model-context/frame/provider.ts"],"sourcesContent":["import type { ModelContextProvider, ModelContext } from \"../types\";\nimport type { Unsubscribe } from \"../../types/unsubscribe\";\nimport { type Tool, toJSONSchema } from \"assistant-stream\";\nimport {\n type FrameMessage,\n FRAME_MESSAGE_CHANNEL,\n type SerializedModelContext,\n type SerializedTool,\n} from \"./types\";\nimport { isFrameMessage } from \"./validate\";\n\nconst serializeTool = (tool: Tool<any, any>): SerializedTool => ({\n ...(tool.description && { description: tool.description }),\n parameters: tool.parameters ? toJSONSchema(tool.parameters) : undefined,\n ...(tool.disabled !== undefined && { disabled: tool.disabled }),\n ...(tool.type && { type: tool.type }),\n});\n\nconst serializeModelContext = (\n context: ModelContext,\n): SerializedModelContext => ({\n ...(context.system !== undefined && { system: context.system }),\n ...(context.tools && {\n tools: Object.fromEntries(\n Object.entries(context.tools).map(([name, tool]) => [\n name,\n serializeTool(tool),\n ]),\n ),\n }),\n});\n\nconst getDefaultTargetOrigin = () => window.location.origin;\n\nexport class AssistantFrameProvider {\n private static _instance: AssistantFrameProvider | null = null;\n\n private _providers = new Map<symbol, ModelContextProvider>();\n private _providerUnsubscribes = new Map<symbol, Unsubscribe | undefined>();\n private _activeToolCalls = new Map<\n string,\n {\n abortController: AbortController;\n event: MessageEvent;\n provider: ModelContextProvider | undefined;\n }\n >();\n private _targetOrigin: string;\n private _strictRegistrations = 0;\n private _wildcardRegistrations = 0;\n private _startupTimer: ReturnType<typeof setTimeout> | undefined;\n private _disposed = false;\n\n private constructor(targetOrigin: string = getDefaultTargetOrigin()) {\n this._targetOrigin = targetOrigin;\n this.handleMessage = this.handleMessage.bind(this);\n window.addEventListener(\"message\", this.handleMessage);\n\n this._startupTimer = setTimeout(() => {\n this._startupTimer = undefined;\n this.broadcastUpdate();\n }, 0);\n }\n\n private static getInstance(targetOrigin?: string): AssistantFrameProvider {\n if (!AssistantFrameProvider._instance) {\n AssistantFrameProvider._instance = new AssistantFrameProvider(\n targetOrigin,\n );\n } else {\n AssistantFrameProvider._instance.reconcileTargetOrigin(targetOrigin);\n }\n return AssistantFrameProvider._instance;\n }\n\n private reconcileTargetOrigin(\n targetOrigin: string = getDefaultTargetOrigin(),\n ) {\n if (targetOrigin === this._targetOrigin) return;\n\n if (this._providers.size === 0) {\n this._targetOrigin = targetOrigin;\n return;\n }\n\n if (targetOrigin === \"*\") return;\n\n if (this._targetOrigin === \"*\") {\n this._targetOrigin = targetOrigin;\n return;\n }\n\n throw new Error(\n `AssistantFrameProvider cannot register conflicting target origins: \"${this._targetOrigin}\" and \"${targetOrigin}\"`,\n );\n }\n\n private handleMessage(event: MessageEvent) {\n if (this._targetOrigin !== \"*\" && event.origin !== this._targetOrigin)\n return;\n if (event.source !== window.parent) return;\n if (event.data?.channel !== FRAME_MESSAGE_CHANNEL) return;\n\n const message = event.data.message;\n if (!isFrameMessage(message)) return;\n\n switch (message.type) {\n case \"model-context-request\":\n this.sendMessage(event, {\n type: \"model-context-update\",\n context: serializeModelContext(this.getModelContext()),\n });\n break;\n\n case \"tool-call\":\n void this.handleToolCall(message, event).catch((error: unknown) => {\n console.error(\n \"[assistant-ui] AssistantFrame tool call failed.\",\n error,\n );\n });\n break;\n\n case \"tool-cancel\":\n this.cancelToolCall(message.id);\n break;\n }\n }\n\n private async handleToolCall(\n message: Extract<FrameMessage, { type: \"tool-call\" }>,\n event: MessageEvent,\n ) {\n const resolvedTool = this.getTool(message.toolName);\n const tool = resolvedTool?.tool;\n const abortController = new AbortController();\n this._activeToolCalls.get(message.id)?.abortController.abort();\n const activeCall = {\n abortController,\n event,\n provider: resolvedTool?.provider,\n };\n this._activeToolCalls.set(message.id, activeCall);\n\n let result: any;\n let error: string | undefined;\n\n if (!tool) {\n error = `Tool \"${message.toolName}\" not found`;\n } else {\n try {\n result = tool.execute\n ? await tool.execute(message.args, {\n toolCallId: message.id,\n abortSignal: abortController.signal,\n human: async () => {\n throw new Error(\n \"Tool human input is not supported in frame context\",\n );\n },\n })\n : undefined;\n } catch (e) {\n error = e instanceof Error ? e.message : String(e);\n }\n }\n\n if (this._activeToolCalls.get(message.id) !== activeCall) return;\n this._activeToolCalls.delete(message.id);\n\n try {\n this.sendMessage(event, {\n type: \"tool-result\",\n id: message.id,\n ...(error !== undefined ? { error } : { result }),\n });\n } catch (sendError) {\n if (error !== undefined) throw sendError;\n\n console.error(\n \"[assistant-ui] AssistantFrame tool result could not be sent.\",\n sendError,\n );\n this.sendMessage(event, {\n type: \"tool-result\",\n id: message.id,\n error: \"Tool result could not be sent across the frame boundary\",\n });\n }\n }\n\n private cancelToolCall(id: string) {\n const activeCall = this._activeToolCalls.get(id);\n if (!activeCall) return;\n this._activeToolCalls.delete(id);\n activeCall.abortController.abort();\n }\n\n private cancelToolCallsForProvider(provider: ModelContextProvider) {\n const matchingCalls = Array.from(this._activeToolCalls).filter(\n ([, activeCall]) => activeCall.provider === provider,\n );\n for (const [id, activeCall] of matchingCalls) {\n this._activeToolCalls.delete(id);\n activeCall.abortController.abort();\n }\n\n let sendFailed = false;\n let sendError: unknown;\n for (const [id, activeCall] of matchingCalls) {\n try {\n this.sendMessage(activeCall.event, {\n type: \"tool-result\",\n id,\n error: \"AssistantFrame tool provider has been removed\",\n });\n } catch (error) {\n if (sendFailed) {\n console.error(error);\n } else {\n sendFailed = true;\n sendError = error;\n }\n }\n }\n\n if (sendFailed) throw sendError;\n }\n\n private sendMessage(event: MessageEvent, message: FrameMessage) {\n event.source?.postMessage(\n { channel: FRAME_MESSAGE_CHANNEL, message },\n { targetOrigin: event.origin },\n );\n }\n\n private getProviders() {\n return Array.from(new Set(this._providers.values()));\n }\n\n private getTool(toolName: string) {\n let resolved:\n | { provider: ModelContextProvider; tool: Tool<any, any> }\n | undefined;\n\n for (const provider of this.getProviders()) {\n const tool = provider.getModelContext().tools?.[toolName];\n if (tool) resolved = { provider, tool };\n }\n\n return resolved;\n }\n\n private getModelContext(): ModelContext {\n const contexts = this.getProviders().map((provider) =>\n provider.getModelContext(),\n );\n\n return contexts.reduce(\n (merged, context) => ({\n system: context.system\n ? merged.system\n ? `${merged.system}\\n\\n${context.system}`\n : context.system\n : merged.system,\n tools: { ...(merged.tools || {}), ...(context.tools || {}) },\n }),\n {} as ModelContext,\n );\n }\n\n private broadcastUpdate() {\n if (this._disposed) return;\n this.postModelContext();\n }\n\n private postModelContext() {\n if (window.parent && window.parent !== window) {\n const updateMessage: FrameMessage = {\n type: \"model-context-update\",\n context: serializeModelContext(this.getModelContext()),\n };\n\n window.parent.postMessage(\n { channel: FRAME_MESSAGE_CHANNEL, message: updateMessage },\n this._targetOrigin,\n );\n }\n }\n\n private removeProvider(\n id: symbol,\n origin: string,\n ): {\n unsubscribe: Unsubscribe | undefined;\n removedProvider: ModelContextProvider | undefined;\n } {\n const provider = this._providers.get(id);\n this._providers.delete(id);\n const unsubscribe = this._providerUnsubscribes.get(id);\n this._providerUnsubscribes.delete(id);\n if (origin === \"*\") {\n this._wildcardRegistrations -= 1;\n if (\n this._wildcardRegistrations === 0 &&\n this._strictRegistrations === 0\n ) {\n this._targetOrigin = getDefaultTargetOrigin();\n }\n } else {\n this._strictRegistrations -= 1;\n if (this._strictRegistrations === 0) {\n this._targetOrigin =\n this._wildcardRegistrations > 0 ? \"*\" : getDefaultTargetOrigin();\n }\n }\n const removedProvider =\n provider && !this.getProviders().includes(provider)\n ? provider\n : undefined;\n return { unsubscribe, removedProvider };\n }\n\n static addModelContextProvider(\n provider: ModelContextProvider,\n targetOrigin?: string,\n ): Unsubscribe {\n const origin = targetOrigin ?? getDefaultTargetOrigin();\n const instance = AssistantFrameProvider.getInstance(origin);\n const id = Symbol();\n instance._providers.set(id, provider);\n if (origin === \"*\") {\n instance._wildcardRegistrations += 1;\n } else {\n instance._strictRegistrations += 1;\n }\n\n try {\n const unsubscribe = provider.subscribe?.(() =>\n instance.broadcastUpdate(),\n );\n if (unsubscribe) {\n instance._providerUnsubscribes.set(id, unsubscribe);\n }\n\n instance.broadcastUpdate();\n } catch (error) {\n const { unsubscribe, removedProvider } = instance.removeProvider(\n id,\n origin,\n );\n // Rollback failures must not replace the registration error.\n try {\n if (removedProvider) {\n instance.cancelToolCallsForProvider(removedProvider);\n }\n } catch (cancelError) {\n console.error(cancelError);\n }\n try {\n unsubscribe?.();\n } catch (unsubscribeError) {\n console.error(unsubscribeError);\n }\n try {\n instance.broadcastUpdate();\n } catch (broadcastError) {\n console.error(broadcastError);\n }\n throw error;\n }\n\n let released = false;\n return () => {\n if (released) return;\n released = true;\n const { unsubscribe, removedProvider } = instance.removeProvider(\n id,\n origin,\n );\n let cleanupFailed = false;\n let cleanupError: unknown;\n const runCleanup = (cleanup: () => void) => {\n try {\n cleanup();\n } catch (error) {\n if (cleanupFailed) {\n console.error(error);\n } else {\n cleanupFailed = true;\n cleanupError = error;\n }\n }\n };\n\n if (removedProvider) {\n runCleanup(() => instance.cancelToolCallsForProvider(removedProvider));\n }\n if (unsubscribe) runCleanup(unsubscribe);\n runCleanup(() => instance.broadcastUpdate());\n\n if (cleanupFailed) throw cleanupError;\n };\n }\n\n static dispose() {\n if (AssistantFrameProvider._instance) {\n const instance = AssistantFrameProvider._instance;\n instance._disposed = true;\n if (instance._startupTimer !== undefined) {\n clearTimeout(instance._startupTimer);\n instance._startupTimer = undefined;\n }\n window.removeEventListener(\"message\", instance.handleMessage);\n\n let cleanupFailed = false;\n let cleanupError: unknown;\n const runCleanup = (cleanup: () => void) => {\n try {\n cleanup();\n } catch (error) {\n if (cleanupFailed) {\n console.error(error);\n } else {\n cleanupFailed = true;\n cleanupError = error;\n }\n }\n };\n\n instance._providerUnsubscribes.forEach((unsubscribe) => {\n if (unsubscribe) runCleanup(unsubscribe);\n });\n instance._providerUnsubscribes.clear();\n instance._providers.clear();\n runCleanup(() => instance.postModelContext());\n instance._activeToolCalls.forEach(({ abortController, event }, id) => {\n runCleanup(() => {\n abortController.abort();\n instance.sendMessage(event, {\n type: \"tool-result\",\n id,\n error: \"AssistantFrameProvider has been disposed\",\n });\n });\n });\n instance._activeToolCalls.clear();\n\n AssistantFrameProvider._instance = null;\n if (cleanupFailed) throw cleanupError;\n }\n }\n}\n"],"mappings":";;;;AAWA,MAAMU,iBAAiBC,UAA0C;CAC/D,GAAIA,KAAKC,eAAe,EAAEA,aAAaD,KAAKC,YAAY;CACxDC,YAAYF,KAAKE,aAAaT,aAAaO,KAAKE,UAAU,IAAIC,KAAAA;CAC9D,GAAIH,KAAKI,aAAaD,KAAAA,KAAa,EAAEC,UAAUJ,KAAKI,SAAS;CAC7D,GAAIJ,KAAKK,QAAQ,EAAEA,MAAML,KAAKK,KAAK;AACrC;AAEA,MAAMC,yBACJC,aAC4B;CAC5B,GAAIA,QAAQC,WAAWL,KAAAA,KAAa,EAAEK,QAAQD,QAAQC,OAAO;CAC7D,GAAID,QAAQE,SAAS,EACnBA,OAAOC,OAAOC,YACZD,OAAOE,QAAQL,QAAQE,KAAK,CAAC,CAACI,KAAK,CAACC,MAAMd,UAAU,CAClDc,MACAf,cAAcC,IAAI,CAAC,CACpB,CACH,EACF;AACF;AAEA,MAAMe,+BAA+BC,OAAOC,SAASC;AAErD,IAAaC,yBAAb,MAAaA,uBAAuB;CAClC,OAAeC,YAA2C;CAE1D,6BAAqB,IAAIE,IAAkC;CAC3D,wCAAgC,IAAIA,IAAqC;CACzE,mCAA2B,IAAIA,IAO7B;CACF;CACA,uBAA+B;CAC/B,yBAAiC;CACjC;CACA,YAAoB;CAEpB,YAAoBgB,eAAuBvB,uBAAuB,GAAG;EACnE,KAAKe,gBAAgBQ;EACrB,KAAKC,gBAAgB,KAAKA,cAAcC,KAAK,IAAI;EACjDxB,OAAOyB,iBAAiB,WAAW,KAAKF,aAAa;EAErD,KAAKN,gBAAgBE,iBAAiB;GACpC,KAAKF,gBAAgB9B,KAAAA;GACrB,KAAKuC,gBAAgB;EACvB,GAAG,CAAC;CACN;CAEA,OAAeC,YAAYL,cAA+C;EACxE,IAAI,CAACnB,uBAAuBC,WAC1BD,uBAAuBC,YAAY,IAAID,uBACrCmB,YACF;OAEAnB,uBAAuBC,UAAUwB,sBAAsBN,YAAY;EAErE,OAAOnB,uBAAuBC;CAChC;CAEA,sBACEkB,eAAuBvB,uBAAuB,GAC9C;EACA,IAAIuB,iBAAiB,KAAKR,eAAe;EAEzC,IAAI,KAAKT,WAAWwB,SAAS,GAAG;GAC9B,KAAKf,gBAAgBQ;GACrB;EACF;EAEA,IAAIA,iBAAiB,KAAK;EAE1B,IAAI,KAAKR,kBAAkB,KAAK;GAC9B,KAAKA,gBAAgBQ;GACrB;EACF;EAEA,MAAM,IAAIQ,MACR,uEAAuE,KAAKhB,cAAa,SAAUQ,aAAY,EACjH;CACF;CAEA,cAAsBX,OAAqB;EACzC,IAAI,KAAKG,kBAAkB,OAAOH,MAAMT,WAAW,KAAKY,eACtD;EACF,IAAIH,MAAMoB,WAAW/B,OAAOgC,QAAQ;EACpC,IAAIrB,MAAMsB,MAAMC,YAAAA,sBAAmC;EAEnD,MAAMC,UAAUxB,MAAMsB,KAAKE;EAC3B,IAAI,CAACrD,eAAeqD,OAAO,GAAG;EAE9B,QAAQA,QAAQ9C,MAAhB;GACE,KAAK;IACH,KAAK+C,YAAYzB,OAAO;KACtBtB,MAAM;KACNE,SAASD,sBAAsB,KAAK+C,gBAAgB,CAAC;IACvD,CAAC;IACD;GAEF,KAAK;IACH,KAAUC,eAAeH,SAASxB,KAAK,CAAC,CAAC4B,OAAOC,UAAmB;KACjEC,QAAQD,MACN,mDACAA,KACF;IACF,CAAC;IACD;GAEF,KAAK,eACH,KAAKE,eAAeP,QAAQQ,EAAE;EAElC;CACF;CAEA,MAAcL,eACZH,SACAxB,OACA;EACA,MAAMkC,eAAe,KAAKC,QAAQX,QAAQY,QAAQ;EAClD,MAAM/D,OAAO6D,cAAc7D;EAC3B,MAAMyB,kBAAkB,IAAIC,gBAAgB;EAC5C,KAAKF,iBAAiBwC,IAAIb,QAAQQ,EAAE,CAAC,EAAElC,gBAAgBwC,MAAM;EAC7D,MAAMC,aAAa;GACjBzC;GACAE;GACAE,UAAUgC,cAAchC;EAC1B;EACA,KAAKL,iBAAiB2C,IAAIhB,QAAQQ,IAAIO,UAAU;EAEhD,IAAIE;EACJ,IAAIZ;EAEJ,IAAI,CAACxD,MACHwD,QAAQ,SAASL,QAAQY,SAAQ;OAEjC,IAAI;GACFK,SAASpE,KAAKqE,UACV,MAAMrE,KAAKqE,QAAQlB,QAAQmB,MAAM;IAC/BC,YAAYpB,QAAQQ;IACpBa,aAAa/C,gBAAgBgD;IAC7BC,OAAO,YAAY;KACjB,MAAM,IAAI5B,MACR,oDACF;IACF;GACF,CAAC,IACD3C,KAAAA;EACN,SAASwE,GAAG;GACVnB,QAAQmB,aAAa7B,QAAQ6B,EAAExB,UAAUyB,OAAOD,CAAC;EACnD;EAGF,IAAI,KAAKnD,iBAAiBwC,IAAIb,QAAQQ,EAAE,MAAMO,YAAY;EAC1D,KAAK1C,iBAAiBqD,OAAO1B,QAAQQ,EAAE;EAEvC,IAAI;GACF,KAAKP,YAAYzB,OAAO;IACtBtB,MAAM;IACNsD,IAAIR,QAAQQ;IACZ,GAAIH,UAAUrD,KAAAA,IAAY,EAAEqD,MAAM,IAAI,EAAEY,OAAO;GACjD,CAAC;EACH,SAASU,WAAW;GAClB,IAAItB,UAAUrD,KAAAA,GAAW,MAAM2E;GAE/BrB,QAAQD,MACN,gEACAsB,SACF;GACA,KAAK1B,YAAYzB,OAAO;IACtBtB,MAAM;IACNsD,IAAIR,QAAQQ;IACZH,OAAO;GACT,CAAC;EACH;CACF;CAEA,eAAuBG,IAAY;EACjC,MAAMO,aAAa,KAAK1C,iBAAiBwC,IAAIL,EAAE;EAC/C,IAAI,CAACO,YAAY;EACjB,KAAK1C,iBAAiBqD,OAAOlB,EAAE;EAC/BO,WAAWzC,gBAAgBwC,MAAM;CACnC;CAEA,2BAAmCpC,UAAgC;EACjE,MAAMmD,gBAAgBC,MAAMC,KAAK,KAAK1D,gBAAgB,CAAC,CAAC2D,QACrD,GAAGjB,gBAAgBA,WAAWrC,aAAaA,QAC9C;EACA,KAAK,MAAM,CAAC8B,IAAIO,eAAec,eAAe;GAC5C,KAAKxD,iBAAiBqD,OAAOlB,EAAE;GAC/BO,WAAWzC,gBAAgBwC,MAAM;EACnC;EAEA,IAAImB,aAAa;EACjB,IAAIN;EACJ,KAAK,MAAM,CAACnB,IAAIO,eAAec,eAC7B,IAAI;GACF,KAAK5B,YAAYc,WAAWvC,OAAO;IACjCtB,MAAM;IACNsD;IACAH,OAAO;GACT,CAAC;EACH,SAASA,OAAO;GACd,IAAI4B,YACF3B,QAAQD,MAAMA,KAAK;QACd;IACL4B,aAAa;IACbN,YAAYtB;GACd;EACF;EAGF,IAAI4B,YAAY,MAAMN;CACxB;CAEA,YAAoBnD,OAAqBwB,SAAuB;EAC9DxB,MAAMoB,QAAQsC,YACZ;GAAEnC,SAASvD;GAAuBwD;EAAQ,GAC1C,EAAEb,cAAcX,MAAMT,OAAO,CAC/B;CACF;CAEA,eAAuB;EACrB,OAAO+D,MAAMC,KAAK,IAAIK,IAAI,KAAKlE,WAAWmE,OAAO,CAAC,CAAC;CACrD;CAEA,QAAgBzB,UAAkB;EAChC,IAAI0B;EAIJ,KAAK,MAAM5D,YAAY,KAAKyD,aAAa,GAAG;GAC1C,MAAMtF,OAAO6B,SAASwB,gBAAgB,CAAC,CAAC5C,QAAQsD;GAChD,IAAI/D,MAAMyF,WAAW;IAAE5D;IAAU7B;GAAK;EACxC;EAEA,OAAOyF;CACT;CAEA,kBAAwC;EAKtC,OAJiB,KAAKH,aAAa,CAAC,CAACzE,KAAKgB,aACxCA,SAASwB,gBAAgB,CAGpBqC,CAAQ,CAACC,QACbC,QAAQrF,aAAa;GACpBC,QAAQD,QAAQC,SACZoF,OAAOpF,SACL,GAAGoF,OAAOpF,OAAM,MAAOD,QAAQC,WAC/BD,QAAQC,SACVoF,OAAOpF;GACXC,OAAO;IAAE,GAAImF,OAAOnF,SAAS,CAAC;IAAI,GAAIF,QAAQE,SAAS,CAAC;GAAG;EAC7D,IACA,CAAC,CACH;CACF;CAEA,kBAA0B;EACxB,IAAI,KAAK2B,WAAW;EACpB,KAAKyD,iBAAiB;CACxB;CAEA,mBAA2B;EACzB,IAAI7E,OAAOgC,UAAUhC,OAAOgC,WAAWhC,QAAQ;GAC7C,MAAM8E,gBAA8B;IAClCzF,MAAM;IACNE,SAASD,sBAAsB,KAAK+C,gBAAgB,CAAC;GACvD;GAEArC,OAAOgC,OAAOqC,YACZ;IAAEnC,SAASvD;IAAuBwD,SAAS2C;GAAc,GACzD,KAAKhE,aACP;EACF;CACF;CAEA,eACE6B,IACAzC,QAIA;EACA,MAAMW,WAAW,KAAKR,WAAW2C,IAAIL,EAAE;EACvC,KAAKtC,WAAWwD,OAAOlB,EAAE;EACzB,MAAMqC,cAAc,KAAKzE,sBAAsByC,IAAIL,EAAE;EACrD,KAAKpC,sBAAsBsD,OAAOlB,EAAE;EACpC,IAAIzC,WAAW,KAAK;GAClB,KAAKc,0BAA0B;GAC/B,IACE,KAAKA,2BAA2B,KAChC,KAAKD,yBAAyB,GAE9B,KAAKD,gBAAgBf,uBAAuB;EAEhD,OAAO;GACL,KAAKgB,wBAAwB;GAC7B,IAAI,KAAKA,yBAAyB,GAChC,KAAKD,gBACH,KAAKE,yBAAyB,IAAI,MAAMjB,uBAAuB;EAErE;EAKA,OAAO;GAAEiF;GAAaC,iBAHpBpE,YAAY,CAAC,KAAKyD,aAAa,CAAC,CAACY,SAASrE,QAAQ,IAC9CA,WACA1B,KAAAA;EACgC;CACxC;CAEA,OAAOgG,wBACLtE,UACAS,cACa;EACb,MAAMpB,SAASoB,gBAAgBvB,uBAAuB;EACtD,MAAMqF,WAAWjF,uBAAuBwB,YAAYzB,MAAM;EAC1D,MAAMyC,KAAK0C,OAAO;EAClBD,SAAS/E,WAAW8C,IAAIR,IAAI9B,QAAQ;EACpC,IAAIX,WAAW,KACbkF,SAASpE,0BAA0B;OAEnCoE,SAASrE,wBAAwB;EAGnC,IAAI;GACF,MAAMiE,cAAcnE,SAASyE,kBAC3BF,SAAS1D,gBAAgB,CAC3B;GACA,IAAIsD,aACFI,SAAS7E,sBAAsB4C,IAAIR,IAAIqC,WAAW;GAGpDI,SAAS1D,gBAAgB;EAC3B,SAASc,OAAO;GACd,MAAM,EAAEwC,aAAaC,oBAAoBG,SAASL,eAChDpC,IACAzC,MACF;GAEA,IAAI;IACF,IAAI+E,iBACFG,SAASrB,2BAA2BkB,eAAe;GAEvD,SAASM,aAAa;IACpB9C,QAAQD,MAAM+C,WAAW;GAC3B;GACA,IAAI;IACFP,cAAc;GAChB,SAASQ,kBAAkB;IACzB/C,QAAQD,MAAMgD,gBAAgB;GAChC;GACA,IAAI;IACFJ,SAAS1D,gBAAgB;GAC3B,SAAS+D,gBAAgB;IACvBhD,QAAQD,MAAMiD,cAAc;GAC9B;GACA,MAAMjD;EACR;EAEA,IAAIkD,WAAW;EACf,aAAa;GACX,IAAIA,UAAU;GACdA,WAAW;GACX,MAAM,EAAEV,aAAaC,oBAAoBG,SAASL,eAChDpC,IACAzC,MACF;GACA,IAAIyF,gBAAgB;GACpB,IAAIC;GACJ,MAAMC,cAAcC,YAAwB;IAC1C,IAAI;KACFA,QAAQ;IACV,SAAStD,OAAO;KACd,IAAImD,eACFlD,QAAQD,MAAMA,KAAK;UACd;MACLmD,gBAAgB;MAChBC,eAAepD;KACjB;IACF;GACF;GAEA,IAAIyC,iBACFY,iBAAiBT,SAASrB,2BAA2BkB,eAAe,CAAC;GAEvE,IAAID,aAAaa,WAAWb,WAAW;GACvCa,iBAAiBT,SAAS1D,gBAAgB,CAAC;GAE3C,IAAIiE,eAAe,MAAMC;EAC3B;CACF;CAEA,OAAOG,UAAU;EACf,IAAI5F,uBAAuBC,WAAW;GACpC,MAAMgF,WAAWjF,uBAAuBC;GACxCgF,SAAShE,YAAY;GACrB,IAAIgE,SAASnE,kBAAkB9B,KAAAA,GAAW;IACxC6G,aAAaZ,SAASnE,aAAa;IACnCmE,SAASnE,gBAAgB9B,KAAAA;GAC3B;GACAa,OAAOiG,oBAAoB,WAAWb,SAAS7D,aAAa;GAE5D,IAAIoE,gBAAgB;GACpB,IAAIC;GACJ,MAAMC,cAAcC,YAAwB;IAC1C,IAAI;KACFA,QAAQ;IACV,SAAStD,OAAO;KACd,IAAImD,eACFlD,QAAQD,MAAMA,KAAK;UACd;MACLmD,gBAAgB;MAChBC,eAAepD;KACjB;IACF;GACF;GAEA4C,SAAS7E,sBAAsB2F,SAASlB,gBAAgB;IACtD,IAAIA,aAAaa,WAAWb,WAAW;GACzC,CAAC;GACDI,SAAS7E,sBAAsB4F,MAAM;GACrCf,SAAS/E,WAAW8F,MAAM;GAC1BN,iBAAiBT,SAASP,iBAAiB,CAAC;GAC5CO,SAAS5E,iBAAiB0F,SAAS,EAAEzF,iBAAiBE,SAASgC,OAAO;IACpEkD,iBAAiB;KACfpF,gBAAgBwC,MAAM;KACtBmC,SAAShD,YAAYzB,OAAO;MAC1BtB,MAAM;MACNsD;MACAH,OAAO;KACT,CAAC;IACH,CAAC;GACH,CAAC;GACD4C,SAAS5E,iBAAiB2F,MAAM;GAEhChG,uBAAuBC,YAAY;GACnC,IAAIuF,eAAe,MAAMC;EAC3B;CACF;AACF"}
@@ -1,34 +1,32 @@
1
- //#region src/model-context/frame/types.d.ts
2
1
  export type SerializedTool = {
3
- description?: string;
4
- parameters: any;
5
- disabled?: boolean;
6
- type?: string;
2
+ description?: string;
3
+ parameters: any;
4
+ disabled?: boolean;
5
+ type?: string;
7
6
  };
8
7
  export type SerializedModelContext = {
9
- system?: string;
10
- tools?: Record<string, SerializedTool>;
8
+ system?: string;
9
+ tools?: Record<string, SerializedTool>;
11
10
  };
12
11
  export type FrameMessageType = "model-context-request" | "model-context-update" | "tool-call" | "tool-cancel" | "tool-result";
13
12
  export type FrameMessage = {
14
- type: "model-context-request";
13
+ type: "model-context-request";
15
14
  } | {
16
- type: "model-context-update";
17
- context: SerializedModelContext;
15
+ type: "model-context-update";
16
+ context: SerializedModelContext;
18
17
  } | {
19
- type: "tool-call";
20
- id: string;
21
- toolName: string;
22
- args: unknown;
18
+ type: "tool-call";
19
+ id: string;
20
+ toolName: string;
21
+ args: unknown;
23
22
  } | {
24
- type: "tool-cancel";
25
- id: string;
23
+ type: "tool-cancel";
24
+ id: string;
26
25
  } | {
27
- type: "tool-result";
28
- id: string;
29
- result?: unknown;
30
- error?: string;
26
+ type: "tool-result";
27
+ id: string;
28
+ result?: unknown;
29
+ error?: string;
31
30
  };
32
31
  export declare const FRAME_MESSAGE_CHANNEL = "assistant-ui-frame";
33
- //#endregion
34
32
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","names":[],"sources":["../../../src/model-context/frame/types.ts"],"mappings":";YAAY;EACV;EACA;EACA;EACA;;YAGU;EACV;EACA,QAAQ,eAAe;;YAGb;YAOA;EAEN;;EAGA;EACA,SAAS;;EAGT;EACA;EACA;EACA;;EAGA;EACA;;EAGA;EACA;EACA;EACA;;qBAGO"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/model-context/frame/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,cAAc,GAAG;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,GAAG,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACnC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;CACxC,CAAC;AAEF,MAAM,MAAM,gBAAgB,GACxB,uBAAuB,GACvB,sBAAsB,GACtB,WAAW,GACX,aAAa,GACb,aAAa,CAAC;AAElB,MAAM,MAAM,YAAY,GACpB;IACE,IAAI,EAAE,uBAAuB,CAAC;CAC/B,GACD;IACE,IAAI,EAAE,sBAAsB,CAAC;IAC7B,OAAO,EAAE,sBAAsB,CAAC;CACjC,GACD;IACE,IAAI,EAAE,WAAW,CAAC;IAClB,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,OAAO,CAAC;CACf,GACD;IACE,IAAI,EAAE,aAAa,CAAC;IACpB,EAAE,EAAE,MAAM,CAAC;CACZ,GACD;IACE,IAAI,EAAE,aAAa,CAAC;IACpB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEN,eAAO,MAAM,qBAAqB,uBAAuB,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { FrameMessage } from "./types.js";
2
+ export declare const isFrameMessage: (value: unknown) => value is FrameMessage;
3
+ //# sourceMappingURL=validate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../../src/model-context/frame/validate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,EAGb,mBAAgB;AA4BjB,eAAO,MAAM,cAAc,GAAI,OAAO,OAAO,KAAG,KAAK,IAAI,YAwBxD,CAAC"}
@@ -0,0 +1,26 @@
1
+ //#region src/model-context/frame/validate.ts
2
+ const isRecord = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
3
+ const hasOptionalPropertyType = (value, property, type) => value[property] === void 0 || typeof value[property] === type;
4
+ const isSerializedTool = (value) => isRecord(value) && Object.hasOwn(value, "parameters") && hasOptionalPropertyType(value, "description", "string") && hasOptionalPropertyType(value, "disabled", "boolean") && hasOptionalPropertyType(value, "type", "string");
5
+ const isSerializedModelContext = (value) => {
6
+ if (!isRecord(value)) return false;
7
+ if (!hasOptionalPropertyType(value, "system", "string")) return false;
8
+ if (value.tools === void 0) return true;
9
+ if (!isRecord(value.tools)) return false;
10
+ return Object.values(value.tools).every(isSerializedTool);
11
+ };
12
+ const isFrameMessage = (value) => {
13
+ if (!isRecord(value) || typeof value.type !== "string") return false;
14
+ switch (value.type) {
15
+ case "model-context-request": return true;
16
+ case "model-context-update": return isSerializedModelContext(value.context);
17
+ case "tool-call": return typeof value.id === "string" && typeof value.toolName === "string" && Object.hasOwn(value, "args");
18
+ case "tool-cancel": return typeof value.id === "string";
19
+ case "tool-result": return typeof value.id === "string" && (value.error == null || typeof value.error === "string");
20
+ default: return false;
21
+ }
22
+ };
23
+ //#endregion
24
+ export { isFrameMessage };
25
+
26
+ //# sourceMappingURL=validate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.js","names":["FrameMessage","SerializedModelContext","SerializedTool","isRecord","value","Record","Array","isArray","hasOptionalPropertyType","property","type","undefined","isSerializedTool","Object","hasOwn","isSerializedModelContext","tools","values","every","isFrameMessage","context","id","toolName","error"],"sources":["../../../src/model-context/frame/validate.ts"],"sourcesContent":["import type {\n FrameMessage,\n SerializedModelContext,\n SerializedTool,\n} from \"./types\";\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === \"object\" && value !== null && !Array.isArray(value);\n\nconst hasOptionalPropertyType = (\n value: Record<string, unknown>,\n property: string,\n type: \"boolean\" | \"string\",\n) => value[property] === undefined || typeof value[property] === type;\n\nconst isSerializedTool = (value: unknown): value is SerializedTool =>\n isRecord(value) &&\n Object.hasOwn(value, \"parameters\") &&\n hasOptionalPropertyType(value, \"description\", \"string\") &&\n hasOptionalPropertyType(value, \"disabled\", \"boolean\") &&\n hasOptionalPropertyType(value, \"type\", \"string\");\n\nconst isSerializedModelContext = (\n value: unknown,\n): value is SerializedModelContext => {\n if (!isRecord(value)) return false;\n if (!hasOptionalPropertyType(value, \"system\", \"string\")) return false;\n if (value.tools === undefined) return true;\n if (!isRecord(value.tools)) return false;\n return Object.values(value.tools).every(isSerializedTool);\n};\n\nexport const isFrameMessage = (value: unknown): value is FrameMessage => {\n if (!isRecord(value) || typeof value.type !== \"string\") return false;\n\n switch (value.type) {\n case \"model-context-request\":\n return true;\n case \"model-context-update\":\n return isSerializedModelContext(value.context);\n case \"tool-call\":\n return (\n typeof value.id === \"string\" &&\n typeof value.toolName === \"string\" &&\n Object.hasOwn(value, \"args\")\n );\n case \"tool-cancel\":\n return typeof value.id === \"string\";\n case \"tool-result\":\n return (\n typeof value.id === \"string\" &&\n (value.error == null || typeof value.error === \"string\")\n );\n default:\n return false;\n }\n};\n"],"mappings":";AAMA,MAAMG,YAAYC,UAChB,OAAOA,UAAU,YAAYA,UAAU,QAAQ,CAACE,MAAMC,QAAQH,KAAK;AAErE,MAAMI,2BACJJ,OACAK,UACAC,SACGN,MAAMK,cAAcE,KAAAA,KAAa,OAAOP,MAAMK,cAAcC;AAEjE,MAAME,oBAAoBR,UACxBD,SAASC,KAAK,KACdS,OAAOC,OAAOV,OAAO,YAAY,KACjCI,wBAAwBJ,OAAO,eAAe,QAAQ,KACtDI,wBAAwBJ,OAAO,YAAY,SAAS,KACpDI,wBAAwBJ,OAAO,QAAQ,QAAQ;AAEjD,MAAMW,4BACJX,UACoC;CACpC,IAAI,CAACD,SAASC,KAAK,GAAG,OAAO;CAC7B,IAAI,CAACI,wBAAwBJ,OAAO,UAAU,QAAQ,GAAG,OAAO;CAChE,IAAIA,MAAMY,UAAUL,KAAAA,GAAW,OAAO;CACtC,IAAI,CAACR,SAASC,MAAMY,KAAK,GAAG,OAAO;CACnC,OAAOH,OAAOI,OAAOb,MAAMY,KAAK,CAAC,CAACE,MAAMN,gBAAgB;AAC1D;AAEA,MAAaO,kBAAkBf,UAA0C;CACvE,IAAI,CAACD,SAASC,KAAK,KAAK,OAAOA,MAAMM,SAAS,UAAU,OAAO;CAE/D,QAAQN,MAAMM,MAAd;EACE,KAAK,yBACH,OAAO;EACT,KAAK,wBACH,OAAOK,yBAAyBX,MAAMgB,OAAO;EAC/C,KAAK,aACH,OACE,OAAOhB,MAAMiB,OAAO,YACpB,OAAOjB,MAAMkB,aAAa,YAC1BT,OAAOC,OAAOV,OAAO,MAAM;EAE/B,KAAK,eACH,OAAO,OAAOA,MAAMiB,OAAO;EAC7B,KAAK,eACH,OACE,OAAOjB,MAAMiB,OAAO,aACnBjB,MAAMmB,SAAS,QAAQ,OAAOnB,MAAMmB,UAAU;EAEnD,SACE,OAAO;CACX;AACF"}
@@ -1,18 +1,17 @@
1
- //#region src/model-context/interactable-composer-metadata.d.ts
2
1
  /**
3
2
  * Unstable / Experimental — the interactables API is still evolving and may change in any release.
4
3
  * @deprecated Unstable / Experimental (not actually removed).
5
4
  */
6
5
  export type Unstable_InteractableSnapshotEntry = {
7
- id: string;
8
- name: string;
9
- state: unknown;
10
- /**
11
- * When true, `state` carries only the top-level fields that changed since
12
- * the model's last known state; omitted fields are unchanged. The first
13
- * snapshot of an instance is always full.
14
- */
15
- partial?: boolean | undefined;
6
+ id: string;
7
+ name: string;
8
+ state: unknown;
9
+ /**
10
+ * When true, `state` carries only the top-level fields that changed since
11
+ * the model's last known state; omitted fields are unchanged. The first
12
+ * snapshot of an instance is always full.
13
+ */
14
+ partial?: boolean | undefined;
16
15
  };
17
16
  /**
18
17
  * Minimal message shape needed to read snapshots and `update_*` tool calls out
@@ -20,9 +19,9 @@ export type Unstable_InteractableSnapshotEntry = {
20
19
  * SDK's `UIMessage`.
21
20
  */
22
21
  type SnapshotCarrierMessage = {
23
- role: string;
24
- metadata?: unknown;
25
- content?: readonly unknown[] | undefined;
22
+ role: string;
23
+ metadata?: unknown;
24
+ content?: readonly unknown[] | undefined;
26
25
  };
27
26
  /**
28
27
  * Reads the interactable snapshots stamped on a message's
@@ -34,7 +33,7 @@ type SnapshotCarrierMessage = {
34
33
  * @deprecated Unstable / Experimental (not actually removed).
35
34
  */
36
35
  export declare function unstable_getInteractableSnapshots(message: {
37
- metadata?: unknown;
36
+ metadata?: unknown;
38
37
  }): Unstable_InteractableSnapshotEntry[] | undefined;
39
38
  /**
40
39
  * Canonical model-facing wording for one snapshot entry.
@@ -44,31 +43,45 @@ export declare function unstable_getInteractableSnapshots(message: {
44
43
  export declare function unstable_formatInteractableSnapshot(entry: Unstable_InteractableSnapshotEntry): string;
45
44
  /** The model-facing tool name for an interactable `name`. One tool per name. */
46
45
  export declare function interactableToolName(name: string): string;
46
+ /**
47
+ * Overlays a streamed `value` onto `prev` along the parser's `partialPath`:
48
+ * the record still being written keeps the fields of `prev` it has not
49
+ * reached yet, while every field the parser has closed replaces its previous
50
+ * value, as the final merge will.
51
+ */
52
+ export declare function overlayPartialPath(prev: unknown, value: unknown, partialPath?: readonly string[]): unknown;
47
53
  /**
48
54
  * The merge `update_*` tools apply: top-level keys replace, rest preserved.
49
55
  * Array fields also accept operation objects (`add`, `update`, `remove`,
50
56
  * `clear`, `set`) so collection edits do not need a companion manage_* tool.
51
57
  */
52
58
  export declare function shallowMergeInteractableState(prev: unknown, partial: unknown, options?: {
53
- arrayBaseline?: unknown;
54
- /**
55
- * Supplies ids for added items in id-keyed array fields. The live
56
- * execute path mints fresh ids; history folds replay ids previously
57
- * returned by execute.
58
- */
59
- idFactory?: (field: string) => string | undefined;
60
- idKeyedFields?: ReadonlySet<string>;
59
+ arrayBaseline?: unknown;
60
+ /**
61
+ * Supplies ids for added items in id-keyed array fields. The live
62
+ * execute path mints fresh ids; history folds replay ids previously
63
+ * returned by execute.
64
+ */
65
+ idFactory?: (field: string) => string | undefined;
66
+ idKeyedFields?: ReadonlySet<string>;
67
+ /**
68
+ * The path of the value the argument parser reports as still
69
+ * streaming. The record there is overlaid onto its previous value
70
+ * so its unwritten fields hold until the model writes them; omitted
71
+ * once the arguments are complete.
72
+ */
73
+ partialPath?: readonly string[] | undefined;
61
74
  } | undefined): unknown;
62
75
  /**
63
76
  * Unstable / Experimental — the interactables API is still evolving and may change in any release.
64
77
  * @deprecated Unstable / Experimental (not actually removed).
65
78
  */
66
79
  export type Unstable_InteractableVersion = {
67
- /** The full state as of this version. */
68
- state: unknown;
69
- origin: "create" | "update" | "user-edit";
70
- /** For create/update versions, the tool call that produced this version. */
71
- toolCallId?: string | undefined;
80
+ /** The full state as of this version. */
81
+ state: unknown;
82
+ origin: "create" | "update" | "user-edit";
83
+ /** For create/update versions, the tool call that produced this version. */
84
+ toolCallId?: string | undefined;
72
85
  };
73
86
  /**
74
87
  * Every version of interactable `id` recorded in the thread, oldest first,
@@ -92,7 +105,7 @@ export declare function unstable_getInteractableVersions(messages: readonly Snap
92
105
  * version, or `undefined` when no baseline exists yet.
93
106
  */
94
107
  export declare function findModelKnownState(messages: readonly SnapshotCarrierMessage[], id: string, name: string): {
95
- state: unknown;
108
+ state: unknown;
96
109
  } | undefined;
97
110
  /**
98
111
  * Snapshot gate. Stamps an interactable only when the model doesn't already
@@ -102,5 +115,5 @@ export declare function findModelKnownState(messages: readonly SnapshotCarrierMe
102
115
  * stamped. Other metadata keys pass through untouched.
103
116
  */
104
117
  export declare function gateInteractableComposerMetadata(meta: Record<string, unknown> | undefined, messages: readonly SnapshotCarrierMessage[]): Record<string, unknown> | undefined;
105
- //#endregion
118
+ export {};
106
119
  //# sourceMappingURL=interactable-composer-metadata.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"interactable-composer-metadata.d.ts","names":[],"sources":["../../src/model-context/interactable-composer-metadata.ts"],"mappings":";;;;;YAOY;EACV;EACA;EACA;;;;;;EAMA;;;;;;;KAQG;EACH;EACA;EACA;;;;;;;;;;;wBAYc,kCAAkC;EAChD;IACE;;;;;;wBAgBY,oCACd,OAAO;;wBASO,qBAAqB;;;;;;wBAgErB,8BACd,eACA,kBACA;EAEM;;;;;;EAMA,aAAa;EACb,gBAAgB;;;;;;YAgGZ;;EAEV;EACA;;EAEA;;;;;;;;;;;;;;;;;;wBA0Bc,iCACd,mBAAmB,0BACnB,YACA,eACC;;;;;wBAwEa,oBACd,mBAAmB,0BACnB,YACA;EACG;;;;;;;;;wBAaW,iCACd,MAAM,qCACN,mBAAmB,2BAClB"}
1
+ {"version":3,"file":"interactable-composer-metadata.d.ts","sourceRoot":"","sources":["../../src/model-context/interactable-composer-metadata.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,MAAM,MAAM,kCAAkC,GAAG;IAC/C,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,OAAO,CAAC;IACf;;;;OAIG;IACH,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CAC/B,CAAC;AAEF;;;;GAIG;AACH,KAAK,sBAAsB,GAAG;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,SAAS,OAAO,EAAE,GAAG,SAAS,CAAC;CAC1C,CAAC;AAEF;;;;;;;;GAQG;AACH,wBAAgB,iCAAiC,CAAC,OAAO,EAAE;IACzD,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,GAAG,kCAAkC,EAAE,GAAG,SAAS,CASnD;AAED;;;;GAIG;AACH,wBAAgB,mCAAmC,CACjD,KAAK,EAAE,kCAAkC,GACxC,MAAM,CAKR;AAED,gFAAgF;AAChF,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEzD;AAQD;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,OAAO,EACb,KAAK,EAAE,OAAO,EACd,WAAW,GAAE,SAAS,MAAM,EAAO,GAClC,OAAO,CAQT;AA2DD;;;;GAIG;AACH,wBAAgB,6BAA6B,CAC3C,IAAI,EAAE,OAAO,EACb,OAAO,EAAE,OAAO,EAChB,OAAO,CAAC,EACJ;IACE,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;;;OAIG;IACH,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC;IAClD,aAAa,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACpC;;;;;OAKG;IACH,WAAW,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,CAAC;CAC7C,GACD,SAAS,GACZ,OAAO,CA4BT;AAqED;;;GAGG;AACH,MAAM,MAAM,4BAA4B,GAAG;IACzC,yCAAyC;IACzC,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,QAAQ,GAAG,QAAQ,GAAG,WAAW,CAAC;IAC1C,4EAA4E;IAC5E,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACjC,CAAC;AASF;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,gCAAgC,CAC9C,QAAQ,EAAE,SAAS,sBAAsB,EAAE,EAC3C,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,MAAM,GACX,4BAA4B,EAAE,CAkEhC;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,SAAS,sBAAsB,EAAE,EAC3C,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,MAAM,GACX;IAAE,KAAK,EAAE,OAAO,CAAA;CAAE,GAAG,SAAS,CAIhC;AAED;;;;;;GAMG;AACH,wBAAgB,gCAAgC,CAC9C,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EACzC,QAAQ,EAAE,SAAS,sBAAsB,EAAE,GAC1C,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAkCrC"}
@@ -36,7 +36,23 @@ const getArrayItemId = (item) => {
36
36
  const id = item.id;
37
37
  return typeof id === "string" || typeof id === "number" ? id : void 0;
38
38
  };
39
- function applyArrayUpdate(prev, update, mintId) {
39
+ /**
40
+ * Overlays a streamed `value` onto `prev` along the parser's `partialPath`:
41
+ * the record still being written keeps the fields of `prev` it has not
42
+ * reached yet, while every field the parser has closed replaces its previous
43
+ * value, as the final merge will.
44
+ */
45
+ function overlayPartialPath(prev, value, partialPath = []) {
46
+ if (!isRecord(prev) || !isRecord(value)) return value;
47
+ const next = {
48
+ ...prev,
49
+ ...value
50
+ };
51
+ const [key, ...rest] = partialPath;
52
+ if (key !== void 0 && Object.hasOwn(value, key)) next[key] = overlayPartialPath(prev[key], value[key], rest);
53
+ return next;
54
+ }
55
+ function applyArrayUpdate(prev, update, mintId, partialPath) {
40
56
  let next = Array.isArray(update.set) ? [...update.set] : [...prev];
41
57
  if (update.clear === true) next = [];
42
58
  if (Array.isArray(update.remove) && update.remove.length > 0) {
@@ -53,14 +69,19 @@ function applyArrayUpdate(prev, update, mintId) {
53
69
  const id = getArrayItemId(candidate);
54
70
  if (id !== void 0 && !Number.isNaN(id) && !patchesById.has(id)) patchesById.set(id, candidate);
55
71
  }
72
+ const streaming = partialPath?.[0] === "update" ? {
73
+ patch: patches[Number(partialPath[1])],
74
+ rest: partialPath.slice(2)
75
+ } : void 0;
56
76
  next = next.map((item) => {
57
77
  const id = getArrayItemId(item);
58
78
  if (id === void 0 || !isRecord(item)) return item;
59
79
  const patch = patchesById.get(id);
60
- return patch ? {
80
+ if (!patch) return item;
81
+ return streaming && patch === streaming.patch ? overlayPartialPath(item, patch, streaming.rest) : {
61
82
  ...item,
62
83
  ...patch
63
- } : item;
84
+ };
64
85
  });
65
86
  }
66
87
  if (Array.isArray(update.add) && update.add.length > 0) {
@@ -84,13 +105,16 @@ function applyArrayUpdate(prev, update, mintId) {
84
105
  function shallowMergeInteractableState(prev, partial, options) {
85
106
  if (!isRecord(prev) || !isRecord(partial)) return partial;
86
107
  const baseline = isRecord(options?.arrayBaseline) ? options.arrayBaseline : prev;
108
+ const partialPath = options?.partialPath;
87
109
  const next = Object.entries(prev);
88
110
  for (const [key, value] of Object.entries(partial)) {
89
111
  const baseValue = baseline[key];
112
+ const streamingPath = partialPath?.[0] === key ? partialPath.slice(1) : void 0;
90
113
  if (Array.isArray(baseValue) && isRecord(value)) {
91
114
  const mintId = options?.idFactory && (options.idKeyedFields === void 0 || options.idKeyedFields.has(key)) ? () => options.idFactory?.(key) : void 0;
92
- next.push([key, applyArrayUpdate(baseValue, value, mintId)]);
93
- } else next.push([key, value]);
115
+ next.push([key, applyArrayUpdate(baseValue, value, mintId, streamingPath)]);
116
+ } else if (streamingPath) next.push([key, overlayPartialPath(prev[key], value, streamingPath)]);
117
+ else next.push([key, value]);
94
118
  }
95
119
  return Object.fromEntries(next);
96
120
  }
@@ -263,6 +287,6 @@ function gateInteractableComposerMetadata(meta, messages) {
263
287
  return Object.keys(gated).length ? gated : void 0;
264
288
  }
265
289
  //#endregion
266
- export { findModelKnownState, gateInteractableComposerMetadata, interactableToolName, shallowMergeInteractableState, unstable_formatInteractableSnapshot, unstable_getInteractableSnapshots, unstable_getInteractableVersions };
290
+ export { findModelKnownState, gateInteractableComposerMetadata, interactableToolName, overlayPartialPath, shallowMergeInteractableState, unstable_formatInteractableSnapshot, unstable_getInteractableSnapshots, unstable_getInteractableVersions };
267
291
 
268
292
  //# sourceMappingURL=interactable-composer-metadata.js.map