@assistant-ui/core 0.3.18 → 0.3.20

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 (804) hide show
  1. package/dist/adapters/attachment.d.ts +9 -10
  2. package/dist/adapters/attachment.d.ts.map +1 -1
  3. package/dist/adapters/attachment.js +2 -1
  4. package/dist/adapters/attachment.js.map +1 -1
  5. package/dist/adapters/directive-formatter.d.ts +1 -2
  6. package/dist/adapters/directive-formatter.d.ts.map +1 -1
  7. package/dist/adapters/feedback.d.ts +2 -2
  8. package/dist/adapters/feedback.d.ts.map +1 -1
  9. package/dist/adapters/speech.d.ts +6 -7
  10. package/dist/adapters/speech.d.ts.map +1 -1
  11. package/dist/adapters/speech.js +13 -3
  12. package/dist/adapters/speech.js.map +1 -1
  13. package/dist/adapters/suggestion.d.ts +5 -6
  14. package/dist/adapters/suggestion.d.ts.map +1 -1
  15. package/dist/adapters/thread-history.d.ts +10 -7
  16. package/dist/adapters/thread-history.d.ts.map +1 -1
  17. package/dist/adapters/trigger.d.ts +1 -2
  18. package/dist/adapters/trigger.d.ts.map +1 -1
  19. package/dist/adapters/voice.d.ts +5 -6
  20. package/dist/adapters/voice.d.ts.map +1 -1
  21. package/dist/index.d.ts +2 -2
  22. package/dist/index.js.map +1 -1
  23. package/dist/internal/duplicate-detection.d.ts +1 -2
  24. package/dist/internal/duplicate-detection.d.ts.map +1 -1
  25. package/dist/internal.d.ts +1 -1
  26. package/dist/model-context/frame/host.d.ts +1 -2
  27. package/dist/model-context/frame/host.d.ts.map +1 -1
  28. package/dist/model-context/frame/host.js +26 -11
  29. package/dist/model-context/frame/host.js.map +1 -1
  30. package/dist/model-context/frame/provider.d.ts +1 -2
  31. package/dist/model-context/frame/provider.d.ts.map +1 -1
  32. package/dist/model-context/frame/types.d.ts +5 -6
  33. package/dist/model-context/frame/types.d.ts.map +1 -1
  34. package/dist/model-context/interactable-composer-metadata.d.ts +9 -10
  35. package/dist/model-context/interactable-composer-metadata.d.ts.map +1 -1
  36. package/dist/model-context/interactable-composer-metadata.js +11 -9
  37. package/dist/model-context/interactable-composer-metadata.js.map +1 -1
  38. package/dist/model-context/registry-handles.d.ts +3 -4
  39. package/dist/model-context/registry-handles.d.ts.map +1 -1
  40. package/dist/model-context/registry.d.ts +1 -2
  41. package/dist/model-context/registry.d.ts.map +1 -1
  42. package/dist/model-context/tool-call-text.d.ts +2 -3
  43. package/dist/model-context/tool-call-text.d.ts.map +1 -1
  44. package/dist/model-context/tool.d.ts +2 -3
  45. package/dist/model-context/tool.d.ts.map +1 -1
  46. package/dist/model-context/types.d.ts +8 -9
  47. package/dist/model-context/types.d.ts.map +1 -1
  48. package/dist/react/AssistantProvider.d.ts +3 -4
  49. package/dist/react/AssistantProvider.d.ts.map +1 -1
  50. package/dist/react/AssistantRuntimeProvider.d.ts +1 -2
  51. package/dist/react/AssistantRuntimeProvider.d.ts.map +1 -1
  52. package/dist/react/RuntimeAdapter.d.ts +2 -3
  53. package/dist/react/RuntimeAdapter.d.ts.map +1 -1
  54. package/dist/react/adapters/LocalStorageThreadListAdapter.d.ts +4 -5
  55. package/dist/react/adapters/LocalStorageThreadListAdapter.d.ts.map +1 -1
  56. package/dist/react/adapters/LocalStorageThreadListAdapter.js +43 -19
  57. package/dist/react/adapters/LocalStorageThreadListAdapter.js.map +1 -1
  58. package/dist/react/adapters/TitleGenerationAdapter.d.ts +2 -3
  59. package/dist/react/adapters/TitleGenerationAdapter.d.ts.map +1 -1
  60. package/dist/react/client/AdaptedRemoteThread.d.ts +1 -2
  61. package/dist/react/client/AdaptedRemoteThread.d.ts.map +1 -1
  62. package/dist/react/client/DataRenderers.d.ts +1 -2
  63. package/dist/react/client/DataRenderers.d.ts.map +1 -1
  64. package/dist/react/client/DataRenderers.js +20 -15
  65. package/dist/react/client/DataRenderers.js.map +1 -1
  66. package/dist/react/client/InMemoryThreadList.d.ts +3 -4
  67. package/dist/react/client/InMemoryThreadList.d.ts.map +1 -1
  68. package/dist/react/client/Interactables.d.ts +1 -2
  69. package/dist/react/client/Interactables.d.ts.map +1 -1
  70. package/dist/react/client/Interactables.js +11 -5
  71. package/dist/react/client/Interactables.js.map +1 -1
  72. package/dist/react/client/RemoteThreadList.d.ts +2 -3
  73. package/dist/react/client/RemoteThreadList.d.ts.map +1 -1
  74. package/dist/react/client/RemoteThreadList.js +3 -2
  75. package/dist/react/client/RemoteThreadList.js.map +1 -1
  76. package/dist/react/client/Tools.d.ts +2 -2
  77. package/dist/react/client/Tools.d.ts.map +1 -1
  78. package/dist/react/client/interactable-model-context.d.ts +2 -3
  79. package/dist/react/client/interactable-model-context.d.ts.map +1 -1
  80. package/dist/react/client/interactable-model-context.js +3 -2
  81. package/dist/react/client/interactable-model-context.js.map +1 -1
  82. package/dist/react/index.d.ts +2 -2
  83. package/dist/react/index.js +2 -2
  84. package/dist/react/interactables-legacy/Interactables.d.ts +1 -2
  85. package/dist/react/interactables-legacy/Interactables.d.ts.map +1 -1
  86. package/dist/react/interactables-legacy/interactable-model-context.d.ts +2 -3
  87. package/dist/react/interactables-legacy/interactable-model-context.d.ts.map +1 -1
  88. package/dist/react/interactables-legacy/scopes.d.ts +9 -10
  89. package/dist/react/interactables-legacy/scopes.d.ts.map +1 -1
  90. package/dist/react/interactables-legacy/useAssistantInteractable.d.ts +2 -3
  91. package/dist/react/interactables-legacy/useAssistantInteractable.d.ts.map +1 -1
  92. package/dist/react/interactables-legacy/useAssistantInteractable.js +3 -0
  93. package/dist/react/interactables-legacy/useAssistantInteractable.js.map +1 -1
  94. package/dist/react/interactables-legacy/useInteractableState.d.ts +1 -2
  95. package/dist/react/interactables-legacy/useInteractableState.d.ts.map +1 -1
  96. package/dist/react/interactables-shared/useInteractablePersistenceQueue.d.ts +1 -2
  97. package/dist/react/interactables-shared/useInteractablePersistenceQueue.d.ts.map +1 -1
  98. package/dist/react/model-context/define-mcp-toolkit.d.ts +4 -5
  99. package/dist/react/model-context/define-mcp-toolkit.d.ts.map +1 -1
  100. package/dist/react/model-context/define-toolkit.d.ts +2 -3
  101. package/dist/react/model-context/define-toolkit.d.ts.map +1 -1
  102. package/dist/react/model-context/external-tool.d.ts +1 -2
  103. package/dist/react/model-context/external-tool.d.ts.map +1 -1
  104. package/dist/react/model-context/human-tool.d.ts +3 -4
  105. package/dist/react/model-context/human-tool.d.ts.map +1 -1
  106. package/dist/react/model-context/interactableTool.d.ts +3 -4
  107. package/dist/react/model-context/interactableTool.d.ts.map +1 -1
  108. package/dist/react/model-context/makeAssistantDataUI.d.ts +2 -3
  109. package/dist/react/model-context/makeAssistantDataUI.d.ts.map +1 -1
  110. package/dist/react/model-context/makeAssistantTool.d.ts +2 -3
  111. package/dist/react/model-context/makeAssistantTool.d.ts.map +1 -1
  112. package/dist/react/model-context/makeAssistantToolUI.d.ts +2 -3
  113. package/dist/react/model-context/makeAssistantToolUI.d.ts.map +1 -1
  114. package/dist/react/model-context/provider-tool.d.ts +2 -3
  115. package/dist/react/model-context/provider-tool.d.ts.map +1 -1
  116. package/dist/react/model-context/stub-tool.d.ts +1 -2
  117. package/dist/react/model-context/stub-tool.d.ts.map +1 -1
  118. package/dist/react/model-context/toolbox.d.ts +9 -10
  119. package/dist/react/model-context/toolbox.d.ts.map +1 -1
  120. package/dist/react/model-context/useAssistantContext.d.ts +2 -2
  121. package/dist/react/model-context/useAssistantContext.d.ts.map +1 -1
  122. package/dist/react/model-context/useAssistantDataUI.d.ts +2 -3
  123. package/dist/react/model-context/useAssistantDataUI.d.ts.map +1 -1
  124. package/dist/react/model-context/useAssistantInstructions.d.ts +2 -2
  125. package/dist/react/model-context/useAssistantInstructions.d.ts.map +1 -1
  126. package/dist/react/model-context/useAssistantTool.d.ts +2 -3
  127. package/dist/react/model-context/useAssistantTool.d.ts.map +1 -1
  128. package/dist/react/model-context/useAssistantToolUI.d.ts +2 -3
  129. package/dist/react/model-context/useAssistantToolUI.d.ts.map +1 -1
  130. package/dist/react/model-context/useAuiToolOverrides.d.ts +1 -2
  131. package/dist/react/model-context/useAuiToolOverrides.d.ts.map +1 -1
  132. package/dist/react/model-context/useInlineRender.d.ts +1 -2
  133. package/dist/react/model-context/useInlineRender.d.ts.map +1 -1
  134. package/dist/react/model-context/useInteractable.d.ts +4 -5
  135. package/dist/react/model-context/useInteractable.d.ts.map +1 -1
  136. package/dist/react/model-context/useInteractable.js +4 -1
  137. package/dist/react/model-context/useInteractable.js.map +1 -1
  138. package/dist/react/model-context/useInteractableState.d.ts +1 -2
  139. package/dist/react/model-context/useInteractableState.d.ts.map +1 -1
  140. package/dist/react/model-context/useInteractableVersions.d.ts +1 -2
  141. package/dist/react/model-context/useInteractableVersions.d.ts.map +1 -1
  142. package/dist/react/model-context/useInteractableVersions.js +1 -1
  143. package/dist/react/model-context/useToolArgsStatus.d.ts +2 -3
  144. package/dist/react/model-context/useToolArgsStatus.d.ts.map +1 -1
  145. package/dist/react/primitive-hooks/useActionBarCopy.d.ts +2 -3
  146. package/dist/react/primitive-hooks/useActionBarCopy.d.ts.map +1 -1
  147. package/dist/react/primitive-hooks/useActionBarEdit.d.ts +1 -2
  148. package/dist/react/primitive-hooks/useActionBarEdit.d.ts.map +1 -1
  149. package/dist/react/primitive-hooks/useActionBarFeedback.d.ts +2 -3
  150. package/dist/react/primitive-hooks/useActionBarFeedback.d.ts.map +1 -1
  151. package/dist/react/primitive-hooks/useActionBarReload.d.ts +1 -2
  152. package/dist/react/primitive-hooks/useActionBarReload.d.ts.map +1 -1
  153. package/dist/react/primitive-hooks/useActionBarSpeak.d.ts +1 -2
  154. package/dist/react/primitive-hooks/useActionBarSpeak.d.ts.map +1 -1
  155. package/dist/react/primitive-hooks/useActionBarStopSpeaking.d.ts +1 -2
  156. package/dist/react/primitive-hooks/useActionBarStopSpeaking.d.ts.map +1 -1
  157. package/dist/react/primitive-hooks/useBranchPickerNext.d.ts +1 -2
  158. package/dist/react/primitive-hooks/useBranchPickerNext.d.ts.map +1 -1
  159. package/dist/react/primitive-hooks/useBranchPickerPrevious.d.ts +1 -2
  160. package/dist/react/primitive-hooks/useBranchPickerPrevious.d.ts.map +1 -1
  161. package/dist/react/primitive-hooks/useComposerAddAttachment.d.ts +1 -2
  162. package/dist/react/primitive-hooks/useComposerAddAttachment.d.ts.map +1 -1
  163. package/dist/react/primitive-hooks/useComposerCancel.d.ts +1 -2
  164. package/dist/react/primitive-hooks/useComposerCancel.d.ts.map +1 -1
  165. package/dist/react/primitive-hooks/useComposerDictate.d.ts +1 -2
  166. package/dist/react/primitive-hooks/useComposerDictate.d.ts.map +1 -1
  167. package/dist/react/primitive-hooks/useComposerSend.d.ts +1 -2
  168. package/dist/react/primitive-hooks/useComposerSend.d.ts.map +1 -1
  169. package/dist/react/primitive-hooks/useEditComposerCancel.d.ts +1 -2
  170. package/dist/react/primitive-hooks/useEditComposerCancel.d.ts.map +1 -1
  171. package/dist/react/primitive-hooks/useEditComposerSend.d.ts +1 -2
  172. package/dist/react/primitive-hooks/useEditComposerSend.d.ts.map +1 -1
  173. package/dist/react/primitive-hooks/useMessageBranching.d.ts +1 -2
  174. package/dist/react/primitive-hooks/useMessageBranching.d.ts.map +1 -1
  175. package/dist/react/primitive-hooks/useMessageError.d.ts +1 -2
  176. package/dist/react/primitive-hooks/useMessageError.d.ts.map +1 -1
  177. package/dist/react/primitive-hooks/useMessageReload.d.ts +1 -2
  178. package/dist/react/primitive-hooks/useMessageReload.d.ts.map +1 -1
  179. package/dist/react/primitive-hooks/useSuggestionTrigger.d.ts +2 -3
  180. package/dist/react/primitive-hooks/useSuggestionTrigger.d.ts.map +1 -1
  181. package/dist/react/primitive-hooks/useThreadIsEmpty.d.ts +1 -2
  182. package/dist/react/primitive-hooks/useThreadIsEmpty.d.ts.map +1 -1
  183. package/dist/react/primitive-hooks/useThreadIsRunning.d.ts +1 -2
  184. package/dist/react/primitive-hooks/useThreadIsRunning.d.ts.map +1 -1
  185. package/dist/react/primitive-hooks/useThreadListItemArchive.d.ts +1 -2
  186. package/dist/react/primitive-hooks/useThreadListItemArchive.d.ts.map +1 -1
  187. package/dist/react/primitive-hooks/useThreadListItemDelete.d.ts +1 -2
  188. package/dist/react/primitive-hooks/useThreadListItemDelete.d.ts.map +1 -1
  189. package/dist/react/primitive-hooks/useThreadListItemTrigger.d.ts +1 -2
  190. package/dist/react/primitive-hooks/useThreadListItemTrigger.d.ts.map +1 -1
  191. package/dist/react/primitive-hooks/useThreadListItemUnarchive.d.ts +1 -2
  192. package/dist/react/primitive-hooks/useThreadListItemUnarchive.d.ts.map +1 -1
  193. package/dist/react/primitive-hooks/useThreadListLoadMore.d.ts +1 -2
  194. package/dist/react/primitive-hooks/useThreadListLoadMore.d.ts.map +1 -1
  195. package/dist/react/primitive-hooks/useThreadListNew.d.ts +1 -2
  196. package/dist/react/primitive-hooks/useThreadListNew.d.ts.map +1 -1
  197. package/dist/react/primitive-hooks/useThreadMessageIds.d.ts +1 -2
  198. package/dist/react/primitive-hooks/useThreadMessageIds.d.ts.map +1 -1
  199. package/dist/react/primitive-hooks/useThreadMessages.d.ts +1 -2
  200. package/dist/react/primitive-hooks/useThreadMessages.d.ts.map +1 -1
  201. package/dist/react/primitive-hooks/useVoice.d.ts +3 -4
  202. package/dist/react/primitive-hooks/useVoice.d.ts.map +1 -1
  203. package/dist/react/primitives/chainOfThought/ChainOfThoughtParts.d.ts +2 -3
  204. package/dist/react/primitives/chainOfThought/ChainOfThoughtParts.d.ts.map +1 -1
  205. package/dist/react/primitives/composer/ComposerAttachments.d.ts +4 -5
  206. package/dist/react/primitives/composer/ComposerAttachments.d.ts.map +1 -1
  207. package/dist/react/primitives/composer/ComposerIf.d.ts +4 -5
  208. package/dist/react/primitives/composer/ComposerIf.d.ts.map +1 -1
  209. package/dist/react/primitives/composer/ComposerQueue.d.ts +2 -3
  210. package/dist/react/primitives/composer/ComposerQueue.d.ts.map +1 -1
  211. package/dist/react/primitives/generativeUI/GenerativeUI.d.ts +4 -5
  212. package/dist/react/primitives/generativeUI/GenerativeUI.d.ts.map +1 -1
  213. package/dist/react/primitives/generativeUI/GenerativeUI.js +27 -28
  214. package/dist/react/primitives/generativeUI/GenerativeUI.js.map +1 -1
  215. package/dist/react/primitives/message/MessageAttachments.d.ts +4 -5
  216. package/dist/react/primitives/message/MessageAttachments.d.ts.map +1 -1
  217. package/dist/react/primitives/message/MessageGroupedParts.d.ts +13 -5
  218. package/dist/react/primitives/message/MessageGroupedParts.d.ts.map +1 -1
  219. package/dist/react/primitives/message/MessageGroupedParts.js +3 -2
  220. package/dist/react/primitives/message/MessageGroupedParts.js.map +1 -1
  221. package/dist/react/primitives/message/MessageParts.d.ts +10 -10
  222. package/dist/react/primitives/message/MessageParts.d.ts.map +1 -1
  223. package/dist/react/primitives/message/MessageQuote.d.ts +2 -3
  224. package/dist/react/primitives/message/MessageQuote.d.ts.map +1 -1
  225. package/dist/react/primitives/messagePart/MessagePartInProgress.d.ts +2 -3
  226. package/dist/react/primitives/messagePart/MessagePartInProgress.d.ts.map +1 -1
  227. package/dist/react/primitives/part/PartMessages.d.ts +4 -4
  228. package/dist/react/primitives/part/PartMessages.d.ts.map +1 -1
  229. package/dist/react/primitives/part/PartMessages.js +1 -0
  230. package/dist/react/primitives/part/PartMessages.js.map +1 -1
  231. package/dist/react/primitives/thread/ThreadMessages.d.ts +7 -8
  232. package/dist/react/primitives/thread/ThreadMessages.d.ts.map +1 -1
  233. package/dist/react/primitives/thread/ThreadMessages.js +6 -5
  234. package/dist/react/primitives/thread/ThreadMessages.js.map +1 -1
  235. package/dist/react/primitives/thread/ThreadSuggestions.d.ts +5 -6
  236. package/dist/react/primitives/thread/ThreadSuggestions.d.ts.map +1 -1
  237. package/dist/react/primitives/threadList/ThreadListItems.d.ts +4 -5
  238. package/dist/react/primitives/threadList/ThreadListItems.d.ts.map +1 -1
  239. package/dist/react/primitives/threadListItem/ThreadListItemTitle.d.ts +2 -3
  240. package/dist/react/primitives/threadListItem/ThreadListItemTitle.d.ts.map +1 -1
  241. package/dist/react/providers/AttachmentByIndexProvider.d.ts +2 -3
  242. package/dist/react/providers/AttachmentByIndexProvider.d.ts.map +1 -1
  243. package/dist/react/providers/ChainOfThoughtByIndicesProvider.d.ts +1 -2
  244. package/dist/react/providers/ChainOfThoughtByIndicesProvider.d.ts.map +1 -1
  245. package/dist/react/providers/ChainOfThoughtPartByIndexProvider.d.ts +1 -2
  246. package/dist/react/providers/ChainOfThoughtPartByIndexProvider.d.ts.map +1 -1
  247. package/dist/react/providers/MessageByIdProvider.d.ts +1 -2
  248. package/dist/react/providers/MessageByIdProvider.d.ts.map +1 -1
  249. package/dist/react/providers/MessageByIndexProvider.d.ts +1 -2
  250. package/dist/react/providers/MessageByIndexProvider.d.ts.map +1 -1
  251. package/dist/react/providers/PartByIndexProvider.d.ts +1 -2
  252. package/dist/react/providers/PartByIndexProvider.d.ts.map +1 -1
  253. package/dist/react/providers/QueueItemByIndexProvider.d.ts +2 -3
  254. package/dist/react/providers/QueueItemByIndexProvider.d.ts.map +1 -1
  255. package/dist/react/providers/ReadonlyThreadProvider.d.ts +2 -3
  256. package/dist/react/providers/ReadonlyThreadProvider.d.ts.map +1 -1
  257. package/dist/react/providers/SuggestionByIndexProvider.d.ts +2 -3
  258. package/dist/react/providers/SuggestionByIndexProvider.d.ts.map +1 -1
  259. package/dist/react/providers/TextMessagePartProvider.d.ts +1 -2
  260. package/dist/react/providers/TextMessagePartProvider.d.ts.map +1 -1
  261. package/dist/react/providers/ThreadListItemByIndexProvider.d.ts +1 -2
  262. package/dist/react/providers/ThreadListItemByIndexProvider.d.ts.map +1 -1
  263. package/dist/react/providers/ThreadListItemRuntimeProvider.d.ts +1 -2
  264. package/dist/react/providers/ThreadListItemRuntimeProvider.d.ts.map +1 -1
  265. package/dist/react/runtimes/RemoteThreadListHookInstanceManager.d.ts +3 -2
  266. package/dist/react/runtimes/RemoteThreadListHookInstanceManager.d.ts.map +1 -1
  267. package/dist/react/runtimes/RemoteThreadListHookInstanceManager.js +17 -7
  268. package/dist/react/runtimes/RemoteThreadListHookInstanceManager.js.map +1 -1
  269. package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.d.ts +1 -2
  270. package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.d.ts.map +1 -1
  271. package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.js +2 -1
  272. package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.js.map +1 -1
  273. package/dist/react/runtimes/RemoteThreadResource.d.ts +4 -5
  274. package/dist/react/runtimes/RemoteThreadResource.d.ts.map +1 -1
  275. package/dist/react/runtimes/RuntimeAdapterProvider.d.ts +3 -3
  276. package/dist/react/runtimes/RuntimeAdapterProvider.d.ts.map +1 -1
  277. package/dist/react/runtimes/assistant-transport/commandQueue.d.ts +2 -3
  278. package/dist/react/runtimes/assistant-transport/commandQueue.d.ts.map +1 -1
  279. package/dist/react/runtimes/assistant-transport/replayBoundaryStream.d.ts +3 -4
  280. package/dist/react/runtimes/assistant-transport/replayBoundaryStream.d.ts.map +1 -1
  281. package/dist/react/runtimes/assistant-transport/runManager.d.ts +2 -3
  282. package/dist/react/runtimes/assistant-transport/runManager.d.ts.map +1 -1
  283. package/dist/react/runtimes/assistant-transport/types.d.ts +17 -18
  284. package/dist/react/runtimes/assistant-transport/types.d.ts.map +1 -1
  285. package/dist/react/runtimes/assistant-transport/useAssistantTransportRuntime.d.ts +4 -5
  286. package/dist/react/runtimes/assistant-transport/useAssistantTransportRuntime.d.ts.map +1 -1
  287. package/dist/react/runtimes/assistant-transport/useConvertedState.d.ts +1 -2
  288. package/dist/react/runtimes/assistant-transport/useConvertedState.d.ts.map +1 -1
  289. package/dist/react/runtimes/assistant-transport/useLatestRef.d.ts +1 -2
  290. package/dist/react/runtimes/assistant-transport/useLatestRef.d.ts.map +1 -1
  291. package/dist/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.d.ts +3 -26
  292. package/dist/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.d.ts.map +1 -1
  293. package/dist/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.js +152 -378
  294. package/dist/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.js.map +1 -1
  295. package/dist/react/runtimes/cloud/CloudFileAttachmentAdapter.d.ts +2 -2
  296. package/dist/react/runtimes/cloud/CloudFileAttachmentAdapter.d.ts.map +1 -1
  297. package/dist/react/runtimes/cloud/CloudFileAttachmentAdapter.js +22 -2
  298. package/dist/react/runtimes/cloud/CloudFileAttachmentAdapter.js.map +1 -1
  299. package/dist/react/runtimes/cloud/auiV0.d.ts +51 -18
  300. package/dist/react/runtimes/cloud/auiV0.d.ts.map +1 -1
  301. package/dist/react/runtimes/cloud/auiV0.js +125 -17
  302. package/dist/react/runtimes/cloud/auiV0.js.map +1 -1
  303. package/dist/react/runtimes/cloud/createCloudThreadListAdapter.d.ts +6 -6
  304. package/dist/react/runtimes/cloud/createCloudThreadListAdapter.d.ts.map +1 -1
  305. package/dist/react/runtimes/cloud/createCloudThreadListAdapter.js +4 -0
  306. package/dist/react/runtimes/cloud/createCloudThreadListAdapter.js.map +1 -1
  307. package/dist/react/runtimes/cloud/createCloudThreadListAdapterCreateFallback.d.ts +1 -2
  308. package/dist/react/runtimes/cloud/createCloudThreadListAdapterCreateFallback.d.ts.map +1 -1
  309. package/dist/react/runtimes/cloud/sdkIdentity.d.ts +5 -0
  310. package/dist/react/runtimes/cloud/sdkIdentity.d.ts.map +1 -0
  311. package/dist/react/runtimes/cloud/sdkIdentity.js +9 -0
  312. package/dist/react/runtimes/cloud/sdkIdentity.js.map +1 -0
  313. package/dist/react/runtimes/cloud/useCloudThreadListAdapter.d.ts +1 -2
  314. package/dist/react/runtimes/cloud/useCloudThreadListAdapter.d.ts.map +1 -1
  315. package/dist/react/runtimes/cloud/useCloudThreadListRuntime.d.ts +1 -2
  316. package/dist/react/runtimes/cloud/useCloudThreadListRuntime.d.ts.map +1 -1
  317. package/dist/react/runtimes/createMessageConverter.d.ts +1 -2
  318. package/dist/react/runtimes/createMessageConverter.d.ts.map +1 -1
  319. package/dist/react/runtimes/createRuntimeExtras.d.ts +3 -4
  320. package/dist/react/runtimes/createRuntimeExtras.d.ts.map +1 -1
  321. package/dist/react/runtimes/external-message-converter.d.ts +14 -4
  322. package/dist/react/runtimes/external-message-converter.d.ts.map +1 -1
  323. package/dist/react/runtimes/external-message-converter.js +26 -61
  324. package/dist/react/runtimes/external-message-converter.js.map +1 -1
  325. package/dist/react/runtimes/useExternalStoreRuntime.d.ts +1 -2
  326. package/dist/react/runtimes/useExternalStoreRuntime.d.ts.map +1 -1
  327. package/dist/react/runtimes/useExternalStoreSharedOptions.d.ts +1 -2
  328. package/dist/react/runtimes/useExternalStoreSharedOptions.d.ts.map +1 -1
  329. package/dist/react/runtimes/useLocalRuntime.d.ts +3 -4
  330. package/dist/react/runtimes/useLocalRuntime.d.ts.map +1 -1
  331. package/dist/react/runtimes/useRemoteThreadListRuntime.d.ts +1 -2
  332. package/dist/react/runtimes/useRemoteThreadListRuntime.d.ts.map +1 -1
  333. package/dist/react/runtimes/useRemoteThreadListRuntime.js +3 -3
  334. package/dist/react/runtimes/useRemoteThreadListRuntime.js.map +1 -1
  335. package/dist/react/runtimes/useRuntimeAdapters.d.ts +4 -4
  336. package/dist/react/runtimes/useRuntimeAdapters.d.ts.map +1 -1
  337. package/dist/react/runtimes/useStreamingTiming.d.ts +2 -2
  338. package/dist/react/runtimes/useStreamingTiming.d.ts.map +1 -1
  339. package/dist/react/types/MessagePartComponentTypes.d.ts +26 -27
  340. package/dist/react/types/MessagePartComponentTypes.d.ts.map +1 -1
  341. package/dist/react/types/scopes/dataRenderers.d.ts +3 -4
  342. package/dist/react/types/scopes/dataRenderers.d.ts.map +1 -1
  343. package/dist/react/types/scopes/interactables.d.ts +10 -11
  344. package/dist/react/types/scopes/interactables.d.ts.map +1 -1
  345. package/dist/react/types/scopes/tools.d.ts +4 -5
  346. package/dist/react/types/scopes/tools.d.ts.map +1 -1
  347. package/dist/react/utils/getMessageQuote.d.ts +1 -2
  348. package/dist/react/utils/getMessageQuote.d.ts.map +1 -1
  349. package/dist/react/utils/groupParts.d.ts +13 -9
  350. package/dist/react/utils/groupParts.d.ts.map +1 -1
  351. package/dist/react/utils/groupParts.js +6 -0
  352. package/dist/react/utils/groupParts.js.map +1 -1
  353. package/dist/react/utils/useJSONEqual.d.ts +3 -2
  354. package/dist/react/utils/useJSONEqual.d.ts.map +1 -1
  355. package/dist/react/utils/useJSONEqual.js +6 -1
  356. package/dist/react/utils/useJSONEqual.js.map +1 -1
  357. package/dist/react/utils/useJSONSchemaDependency.d.ts +6 -0
  358. package/dist/react/utils/useJSONSchemaDependency.d.ts.map +1 -0
  359. package/dist/react/utils/useJSONSchemaDependency.js +20 -0
  360. package/dist/react/utils/useJSONSchemaDependency.js.map +1 -0
  361. package/dist/runtime/api/assistant-runtime.d.ts +2 -3
  362. package/dist/runtime/api/assistant-runtime.d.ts.map +1 -1
  363. package/dist/runtime/api/attachment-runtime.d.ts +6 -7
  364. package/dist/runtime/api/attachment-runtime.d.ts.map +1 -1
  365. package/dist/runtime/api/bindings.d.ts +5 -6
  366. package/dist/runtime/api/bindings.d.ts.map +1 -1
  367. package/dist/runtime/api/composer-runtime.d.ts +10 -10
  368. package/dist/runtime/api/composer-runtime.d.ts.map +1 -1
  369. package/dist/runtime/api/message-part-runtime.d.ts +3 -4
  370. package/dist/runtime/api/message-part-runtime.d.ts.map +1 -1
  371. package/dist/runtime/api/message-part-runtime.js +3 -2
  372. package/dist/runtime/api/message-part-runtime.js.map +1 -1
  373. package/dist/runtime/api/message-runtime.d.ts +8 -6
  374. package/dist/runtime/api/message-runtime.d.ts.map +1 -1
  375. package/dist/runtime/api/message-runtime.js +3 -2
  376. package/dist/runtime/api/message-runtime.js.map +1 -1
  377. package/dist/runtime/api/paths.d.ts +6 -7
  378. package/dist/runtime/api/paths.d.ts.map +1 -1
  379. package/dist/runtime/api/thread-list-item-runtime.d.ts +8 -8
  380. package/dist/runtime/api/thread-list-item-runtime.d.ts.map +1 -1
  381. package/dist/runtime/api/thread-list-runtime.d.ts +4 -5
  382. package/dist/runtime/api/thread-list-runtime.d.ts.map +1 -1
  383. package/dist/runtime/api/thread-runtime.d.ts +10 -11
  384. package/dist/runtime/api/thread-runtime.d.ts.map +1 -1
  385. package/dist/runtime/api/thread-runtime.js +2 -5
  386. package/dist/runtime/api/thread-runtime.js.map +1 -1
  387. package/dist/runtime/base/base-assistant-runtime-core.d.ts +1 -2
  388. package/dist/runtime/base/base-assistant-runtime-core.d.ts.map +1 -1
  389. package/dist/runtime/base/base-composer-runtime-core.d.ts +2 -2
  390. package/dist/runtime/base/base-composer-runtime-core.d.ts.map +1 -1
  391. package/dist/runtime/base/base-composer-runtime-core.js +46 -10
  392. package/dist/runtime/base/base-composer-runtime-core.js.map +1 -1
  393. package/dist/runtime/base/base-thread-runtime-core.d.ts +10 -3
  394. package/dist/runtime/base/base-thread-runtime-core.d.ts.map +1 -1
  395. package/dist/runtime/base/base-thread-runtime-core.js +212 -77
  396. package/dist/runtime/base/base-thread-runtime-core.js.map +1 -1
  397. package/dist/runtime/base/default-edit-composer-runtime-core.d.ts +1 -2
  398. package/dist/runtime/base/default-edit-composer-runtime-core.d.ts.map +1 -1
  399. package/dist/runtime/base/default-edit-composer-runtime-core.js +12 -2
  400. package/dist/runtime/base/default-edit-composer-runtime-core.js.map +1 -1
  401. package/dist/runtime/base/default-thread-composer-runtime-core.d.ts +1 -2
  402. package/dist/runtime/base/default-thread-composer-runtime-core.d.ts.map +1 -1
  403. package/dist/runtime/base/default-thread-composer-runtime-core.js +7 -1
  404. package/dist/runtime/base/default-thread-composer-runtime-core.js.map +1 -1
  405. package/dist/runtime/branch/external-thread-branch-adapter.d.ts +1 -2
  406. package/dist/runtime/branch/external-thread-branch-adapter.d.ts.map +1 -1
  407. package/dist/runtime/interfaces/assistant-runtime-core.d.ts +1 -2
  408. package/dist/runtime/interfaces/assistant-runtime-core.d.ts.map +1 -1
  409. package/dist/runtime/interfaces/composer-runtime-core.d.ts +10 -11
  410. package/dist/runtime/interfaces/composer-runtime-core.d.ts.map +1 -1
  411. package/dist/runtime/interfaces/thread-list-runtime-core.d.ts +4 -5
  412. package/dist/runtime/interfaces/thread-list-runtime-core.d.ts.map +1 -1
  413. package/dist/runtime/interfaces/thread-runtime-core.d.ts +23 -16
  414. package/dist/runtime/interfaces/thread-runtime-core.d.ts.map +1 -1
  415. package/dist/runtime/queue/external-thread-queue-adapter.d.ts +2 -3
  416. package/dist/runtime/queue/external-thread-queue-adapter.d.ts.map +1 -1
  417. package/dist/runtime/queue/message-queue.d.ts +10 -4
  418. package/dist/runtime/queue/message-queue.d.ts.map +1 -1
  419. package/dist/runtime/queue/message-queue.js +70 -7
  420. package/dist/runtime/queue/message-queue.js.map +1 -1
  421. package/dist/runtime/queue/queue-item.d.ts +2 -3
  422. package/dist/runtime/queue/queue-item.d.ts.map +1 -1
  423. package/dist/runtime/utils/abortable-thread-load.d.ts +2 -3
  424. package/dist/runtime/utils/abortable-thread-load.d.ts.map +1 -1
  425. package/dist/runtime/utils/attachment-add-operations.d.ts +3 -4
  426. package/dist/runtime/utils/attachment-add-operations.d.ts.map +1 -1
  427. package/dist/runtime/utils/auto-status.d.ts +9 -6
  428. package/dist/runtime/utils/auto-status.d.ts.map +1 -1
  429. package/dist/runtime/utils/auto-status.js +12 -4
  430. package/dist/runtime/utils/auto-status.js.map +1 -1
  431. package/dist/runtime/utils/chat-model-adapter.d.ts +5 -6
  432. package/dist/runtime/utils/chat-model-adapter.d.ts.map +1 -1
  433. package/dist/runtime/utils/external-message-conversion.d.ts +26 -15
  434. package/dist/runtime/utils/external-message-conversion.d.ts.map +1 -1
  435. package/dist/runtime/utils/external-message-conversion.js +51 -14
  436. package/dist/runtime/utils/external-message-conversion.js.map +1 -1
  437. package/dist/runtime/utils/external-store-message.d.ts +4 -5
  438. package/dist/runtime/utils/external-store-message.d.ts.map +1 -1
  439. package/dist/runtime/utils/message-repository-session.d.ts +3 -4
  440. package/dist/runtime/utils/message-repository-session.d.ts.map +1 -1
  441. package/dist/runtime/utils/message-repository.d.ts +4 -5
  442. package/dist/runtime/utils/message-repository.d.ts.map +1 -1
  443. package/dist/runtime/utils/message-repository.js +3 -3
  444. package/dist/runtime/utils/message-repository.js.map +1 -1
  445. package/dist/runtime/utils/pending-tool-calls.d.ts +2 -3
  446. package/dist/runtime/utils/pending-tool-calls.d.ts.map +1 -1
  447. package/dist/runtime/utils/resolveToolApprovalResponse.d.ts +1 -2
  448. package/dist/runtime/utils/resolveToolApprovalResponse.d.ts.map +1 -1
  449. package/dist/runtime/utils/runtime-extras-brand.d.ts +2 -3
  450. package/dist/runtime/utils/runtime-extras-brand.d.ts.map +1 -1
  451. package/dist/runtime/utils/stored-message-parts.d.ts +21 -0
  452. package/dist/runtime/utils/stored-message-parts.d.ts.map +1 -0
  453. package/dist/runtime/utils/stored-message-parts.js +83 -0
  454. package/dist/runtime/utils/stored-message-parts.js.map +1 -0
  455. package/dist/runtime/utils/streaming-timing.d.ts +4 -5
  456. package/dist/runtime/utils/streaming-timing.d.ts.map +1 -1
  457. package/dist/runtime/utils/thread-message-like.d.ts +7 -6
  458. package/dist/runtime/utils/thread-message-like.d.ts.map +1 -1
  459. package/dist/runtime/utils/thread-message-like.js +4 -2
  460. package/dist/runtime/utils/thread-message-like.js.map +1 -1
  461. package/dist/runtime/utils/thread-runtime-lifecycle.d.ts +3 -4
  462. package/dist/runtime/utils/thread-runtime-lifecycle.d.ts.map +1 -1
  463. package/dist/runtime/utils/tool-call-tree.d.ts +4 -5
  464. package/dist/runtime/utils/tool-call-tree.d.ts.map +1 -1
  465. package/dist/runtimes/assistant-transport/utils.d.ts +1 -2
  466. package/dist/runtimes/assistant-transport/utils.d.ts.map +1 -1
  467. package/dist/runtimes/external-store/external-store-adapter.d.ts +9 -6
  468. package/dist/runtimes/external-store/external-store-adapter.d.ts.map +1 -1
  469. package/dist/runtimes/external-store/external-store-runtime-core.d.ts +1 -2
  470. package/dist/runtimes/external-store/external-store-runtime-core.d.ts.map +1 -1
  471. package/dist/runtimes/external-store/external-store-shared-options.d.ts +2 -3
  472. package/dist/runtimes/external-store/external-store-shared-options.d.ts.map +1 -1
  473. package/dist/runtimes/external-store/external-store-thread-list-runtime-core.d.ts +2 -3
  474. package/dist/runtimes/external-store/external-store-thread-list-runtime-core.d.ts.map +1 -1
  475. package/dist/runtimes/external-store/external-store-thread-runtime-core.d.ts +4 -3
  476. package/dist/runtimes/external-store/external-store-thread-runtime-core.d.ts.map +1 -1
  477. package/dist/runtimes/external-store/external-store-thread-runtime-core.js +36 -6
  478. package/dist/runtimes/external-store/external-store-thread-runtime-core.js.map +1 -1
  479. package/dist/runtimes/external-store/thread-message-converter.d.ts +2 -3
  480. package/dist/runtimes/external-store/thread-message-converter.d.ts.map +1 -1
  481. package/dist/runtimes/inert/InertThreadRuntimeCore.d.ts +2 -3
  482. package/dist/runtimes/inert/InertThreadRuntimeCore.d.ts.map +1 -1
  483. package/dist/runtimes/internal.d.ts +1 -1
  484. package/dist/runtimes/local/local-runtime-core.d.ts +1 -2
  485. package/dist/runtimes/local/local-runtime-core.d.ts.map +1 -1
  486. package/dist/runtimes/local/local-runtime-options.d.ts +1 -2
  487. package/dist/runtimes/local/local-runtime-options.d.ts.map +1 -1
  488. package/dist/runtimes/local/local-thread-list-runtime-core.d.ts +2 -3
  489. package/dist/runtimes/local/local-thread-list-runtime-core.d.ts.map +1 -1
  490. package/dist/runtimes/local/local-thread-runtime-core.d.ts +10 -5
  491. package/dist/runtimes/local/local-thread-runtime-core.d.ts.map +1 -1
  492. package/dist/runtimes/local/local-thread-runtime-core.js +57 -10
  493. package/dist/runtimes/local/local-thread-runtime-core.js.map +1 -1
  494. package/dist/runtimes/local/should-continue.d.ts +1 -2
  495. package/dist/runtimes/local/should-continue.d.ts.map +1 -1
  496. package/dist/runtimes/readonly/ReadonlyThreadRuntimeCore.d.ts +1 -2
  497. package/dist/runtimes/readonly/ReadonlyThreadRuntimeCore.d.ts.map +1 -1
  498. package/dist/runtimes/remote-thread-list/adapter/in-memory.d.ts +1 -2
  499. package/dist/runtimes/remote-thread-list/adapter/in-memory.d.ts.map +1 -1
  500. package/dist/runtimes/remote-thread-list/adapter-changed.d.ts +1 -2
  501. package/dist/runtimes/remote-thread-list/adapter-changed.d.ts.map +1 -1
  502. package/dist/runtimes/remote-thread-list/empty-thread-core.d.ts +1 -2
  503. package/dist/runtimes/remote-thread-list/empty-thread-core.d.ts.map +1 -1
  504. package/dist/runtimes/remote-thread-list/optimistic-state.d.ts +1 -2
  505. package/dist/runtimes/remote-thread-list/optimistic-state.d.ts.map +1 -1
  506. package/dist/runtimes/remote-thread-list/remote-thread-state.d.ts +16 -17
  507. package/dist/runtimes/remote-thread-list/remote-thread-state.d.ts.map +1 -1
  508. package/dist/runtimes/remote-thread-list/title-generation.d.ts +7 -8
  509. package/dist/runtimes/remote-thread-list/title-generation.d.ts.map +1 -1
  510. package/dist/runtimes/remote-thread-list/title.d.ts +2 -3
  511. package/dist/runtimes/remote-thread-list/title.d.ts.map +1 -1
  512. package/dist/runtimes/remote-thread-list/types.d.ts +8 -9
  513. package/dist/runtimes/remote-thread-list/types.d.ts.map +1 -1
  514. package/dist/runtimes/tool-invocations/ToolInvocationTracker.d.ts +4 -5
  515. package/dist/runtimes/tool-invocations/ToolInvocationTracker.d.ts.map +1 -1
  516. package/dist/runtimes/tool-invocations/ToolInvocationTracker.js +2 -1
  517. package/dist/runtimes/tool-invocations/ToolInvocationTracker.js.map +1 -1
  518. package/dist/store/clients/chain-of-thought-client.d.ts +1 -2
  519. package/dist/store/clients/chain-of-thought-client.d.ts.map +1 -1
  520. package/dist/store/clients/external-thread.d.ts +3 -4
  521. package/dist/store/clients/external-thread.d.ts.map +1 -1
  522. package/dist/store/clients/external-thread.js +256 -211
  523. package/dist/store/clients/external-thread.js.map +1 -1
  524. package/dist/store/clients/model-context-client.d.ts +1 -2
  525. package/dist/store/clients/model-context-client.d.ts.map +1 -1
  526. package/dist/store/clients/no-op-composer-client.d.ts +1 -2
  527. package/dist/store/clients/no-op-composer-client.d.ts.map +1 -1
  528. package/dist/store/clients/runtime-adapter.d.ts +1 -2
  529. package/dist/store/clients/runtime-adapter.d.ts.map +1 -1
  530. package/dist/store/clients/single-thread-list.d.ts +1 -2
  531. package/dist/store/clients/single-thread-list.d.ts.map +1 -1
  532. package/dist/store/clients/suggestions.d.ts +3 -4
  533. package/dist/store/clients/suggestions.d.ts.map +1 -1
  534. package/dist/store/clients/thread-message-client.d.ts +2 -3
  535. package/dist/store/clients/thread-message-client.d.ts.map +1 -1
  536. package/dist/store/clients/thread-selection-events.d.ts +1 -2
  537. package/dist/store/clients/thread-selection-events.d.ts.map +1 -1
  538. package/dist/store/clients/thread-tasks.d.ts +12 -0
  539. package/dist/store/clients/thread-tasks.d.ts.map +1 -0
  540. package/dist/store/clients/thread-tasks.js +69 -0
  541. package/dist/store/clients/thread-tasks.js.map +1 -0
  542. package/dist/store/env.d.ts +1 -2
  543. package/dist/store/env.d.ts.map +1 -1
  544. package/dist/store/index.d.ts +3 -2
  545. package/dist/store/index.js +3 -3
  546. package/dist/store/primitive-predicates.d.ts +11 -12
  547. package/dist/store/primitive-predicates.d.ts.map +1 -1
  548. package/dist/store/primitive-predicates.js +4 -4
  549. package/dist/store/primitive-predicates.js.map +1 -1
  550. package/dist/store/runtime-clients/attachment-runtime-client.d.ts +1 -2
  551. package/dist/store/runtime-clients/attachment-runtime-client.d.ts.map +1 -1
  552. package/dist/store/runtime-clients/composer-runtime-client.d.ts +1 -2
  553. package/dist/store/runtime-clients/composer-runtime-client.d.ts.map +1 -1
  554. package/dist/store/runtime-clients/handle-runtime-action.d.ts +1 -2
  555. package/dist/store/runtime-clients/handle-runtime-action.d.ts.map +1 -1
  556. package/dist/store/runtime-clients/handle-thread-list-action.d.ts +1 -2
  557. package/dist/store/runtime-clients/handle-thread-list-action.d.ts.map +1 -1
  558. package/dist/store/runtime-clients/liveRef.d.ts +1 -2
  559. package/dist/store/runtime-clients/liveRef.d.ts.map +1 -1
  560. package/dist/store/runtime-clients/message-part-runtime-client.d.ts +1 -2
  561. package/dist/store/runtime-clients/message-part-runtime-client.d.ts.map +1 -1
  562. package/dist/store/runtime-clients/message-runtime-client.d.ts +1 -2
  563. package/dist/store/runtime-clients/message-runtime-client.d.ts.map +1 -1
  564. package/dist/store/runtime-clients/thread-list-item-runtime-client.d.ts +1 -2
  565. package/dist/store/runtime-clients/thread-list-item-runtime-client.d.ts.map +1 -1
  566. package/dist/store/runtime-clients/thread-list-runtime-client.d.ts +1 -2
  567. package/dist/store/runtime-clients/thread-list-runtime-client.d.ts.map +1 -1
  568. package/dist/store/runtime-clients/thread-runtime-client.d.ts +1 -2
  569. package/dist/store/runtime-clients/thread-runtime-client.d.ts.map +1 -1
  570. package/dist/store/runtime-clients/thread-runtime-client.js +176 -128
  571. package/dist/store/runtime-clients/thread-runtime-client.js.map +1 -1
  572. package/dist/store/runtime-clients/useSubscribable.d.ts +1 -2
  573. package/dist/store/runtime-clients/useSubscribable.d.ts.map +1 -1
  574. package/dist/store/scope-registration.d.ts +2 -0
  575. package/dist/store/scope-registration.d.ts.map +1 -1
  576. package/dist/store/scopes/attachment.d.ts +4 -5
  577. package/dist/store/scopes/attachment.d.ts.map +1 -1
  578. package/dist/store/scopes/chain-of-thought.d.ts +5 -6
  579. package/dist/store/scopes/chain-of-thought.d.ts.map +1 -1
  580. package/dist/store/scopes/composer.d.ts +6 -7
  581. package/dist/store/scopes/composer.d.ts.map +1 -1
  582. package/dist/store/scopes/message.d.ts +6 -6
  583. package/dist/store/scopes/message.d.ts.map +1 -1
  584. package/dist/store/scopes/model-context.d.ts +3 -4
  585. package/dist/store/scopes/model-context.d.ts.map +1 -1
  586. package/dist/store/scopes/part.d.ts +4 -5
  587. package/dist/store/scopes/part.d.ts.map +1 -1
  588. package/dist/store/scopes/queue-item.d.ts +4 -4
  589. package/dist/store/scopes/queue-item.d.ts.map +1 -1
  590. package/dist/store/scopes/suggestion.d.ts +4 -5
  591. package/dist/store/scopes/suggestion.d.ts.map +1 -1
  592. package/dist/store/scopes/suggestions.d.ts +5 -6
  593. package/dist/store/scopes/suggestions.d.ts.map +1 -1
  594. package/dist/store/scopes/task.d.ts +35 -0
  595. package/dist/store/scopes/task.d.ts.map +1 -0
  596. package/dist/store/scopes/task.js +0 -0
  597. package/dist/store/scopes/thread-list-item.d.ts +5 -6
  598. package/dist/store/scopes/thread-list-item.d.ts.map +1 -1
  599. package/dist/store/scopes/thread.d.ts +25 -6
  600. package/dist/store/scopes/thread.d.ts.map +1 -1
  601. package/dist/store/scopes/threads.d.ts +4 -5
  602. package/dist/store/scopes/threads.d.ts.map +1 -1
  603. package/dist/subscribable/subscribable.d.ts +15 -15
  604. package/dist/subscribable/subscribable.d.ts.map +1 -1
  605. package/dist/subscribable/subscribable.js +23 -15
  606. package/dist/subscribable/subscribable.js.map +1 -1
  607. package/dist/tests/remote-thread-list-test-helpers.d.ts +5 -6
  608. package/dist/tests/remote-thread-list-test-helpers.d.ts.map +1 -1
  609. package/dist/types/attachment.d.ts +9 -10
  610. package/dist/types/attachment.d.ts.map +1 -1
  611. package/dist/types/augmentations.d.ts +3 -4
  612. package/dist/types/augmentations.d.ts.map +1 -1
  613. package/dist/types/directive.d.ts +2 -3
  614. package/dist/types/directive.d.ts.map +1 -1
  615. package/dist/types/error.d.ts +8 -9
  616. package/dist/types/error.d.ts.map +1 -1
  617. package/dist/types/index.d.ts +2 -2
  618. package/dist/types/message.d.ts +53 -44
  619. package/dist/types/message.d.ts.map +1 -1
  620. package/dist/types/message.js.map +1 -1
  621. package/dist/types/quote.d.ts +1 -2
  622. package/dist/types/quote.d.ts.map +1 -1
  623. package/dist/types/trigger.d.ts +2 -3
  624. package/dist/types/trigger.d.ts.map +1 -1
  625. package/dist/types/unsubscribe.d.ts +1 -2
  626. package/dist/types/unsubscribe.d.ts.map +1 -1
  627. package/dist/utils/abortable-iterable.d.ts +2 -3
  628. package/dist/utils/abortable-iterable.d.ts.map +1 -1
  629. package/dist/utils/abortable-iterable.js +30 -14
  630. package/dist/utils/abortable-iterable.js.map +1 -1
  631. package/dist/utils/composite-context-provider.d.ts +1 -2
  632. package/dist/utils/composite-context-provider.d.ts.map +1 -1
  633. package/dist/utils/data-url.d.ts +6 -7
  634. package/dist/utils/data-url.d.ts.map +1 -1
  635. package/dist/utils/getGroupStatus.d.ts +17 -2
  636. package/dist/utils/getGroupStatus.d.ts.map +1 -1
  637. package/dist/utils/getGroupStatus.js +32 -7
  638. package/dist/utils/getGroupStatus.js.map +1 -1
  639. package/dist/utils/id.d.ts +3 -4
  640. package/dist/utils/id.d.ts.map +1 -1
  641. package/dist/utils/image-media-type.d.ts +1 -2
  642. package/dist/utils/image-media-type.d.ts.map +1 -1
  643. package/dist/utils/invoke-user-callback.d.ts +1 -2
  644. package/dist/utils/invoke-user-callback.d.ts.map +1 -1
  645. package/dist/utils/json/is-json-equal.d.ts +1 -2
  646. package/dist/utils/json/is-json-equal.d.ts.map +1 -1
  647. package/dist/utils/json/is-json.d.ts +4 -5
  648. package/dist/utils/json/is-json.d.ts.map +1 -1
  649. package/dist/utils/json/stable-stringify-tool-args.d.ts +2 -3
  650. package/dist/utils/json/stable-stringify-tool-args.d.ts.map +1 -1
  651. package/dist/utils/normalizePartStatus.d.ts +4 -5
  652. package/dist/utils/normalizePartStatus.d.ts.map +1 -1
  653. package/dist/utils/notify-event-listeners.d.ts +1 -2
  654. package/dist/utils/notify-event-listeners.d.ts.map +1 -1
  655. package/dist/utils/record.d.ts +1 -2
  656. package/dist/utils/record.d.ts.map +1 -1
  657. package/dist/utils/silent-runtime-action.d.ts +2 -3
  658. package/dist/utils/silent-runtime-action.d.ts.map +1 -1
  659. package/dist/utils/text.d.ts +1 -2
  660. package/dist/utils/text.d.ts.map +1 -1
  661. package/dist/utils/wire-media.d.ts +3 -4
  662. package/dist/utils/wire-media.d.ts.map +1 -1
  663. package/dist/utils/wire-media.js +2 -2
  664. package/dist/utils/wire-media.js.map +1 -1
  665. package/package.json +15 -14
  666. package/src/adapters/attachment.ts +8 -1
  667. package/src/adapters/feedback.ts +1 -0
  668. package/src/adapters/speech.test.ts +236 -0
  669. package/src/adapters/speech.ts +17 -10
  670. package/src/adapters/thread-history.ts +3 -0
  671. package/src/index.ts +1 -0
  672. package/src/model-context/frame/host.test.ts +113 -1
  673. package/src/model-context/frame/host.ts +39 -12
  674. package/src/model-context/frame/provider.test.ts +45 -20
  675. package/src/model-context/interactable-composer-metadata.test.ts +30 -0
  676. package/src/model-context/interactable-composer-metadata.ts +10 -10
  677. package/src/react/RuntimeAdapter.test.ts +4 -1
  678. package/src/react/adapters/LocalStorageThreadListAdapter.test.ts +361 -0
  679. package/src/react/adapters/LocalStorageThreadListAdapter.tsx +69 -19
  680. package/src/react/client/DataRenderers.test.tsx +45 -0
  681. package/src/react/client/DataRenderers.ts +13 -9
  682. package/src/react/client/Interactables.test.ts +52 -4
  683. package/src/react/client/Interactables.ts +7 -1
  684. package/src/react/client/RemoteThreadList.concurrent.test.tsx +9 -3
  685. package/src/react/client/RemoteThreadList.test.ts +46 -7
  686. package/src/react/client/RemoteThreadList.ts +15 -2
  687. package/src/react/client/interactable-model-context.test.ts +44 -0
  688. package/src/react/client/interactable-model-context.ts +3 -2
  689. package/src/react/index.ts +5 -1
  690. package/src/react/interactables-legacy/Interactables.test.ts +9 -3
  691. package/src/react/interactables-legacy/useAssistantInteractable.test.tsx +150 -0
  692. package/src/react/interactables-legacy/useAssistantInteractable.ts +10 -1
  693. package/src/react/model-context/useInteractable.test.tsx +204 -0
  694. package/src/react/model-context/useInteractable.ts +3 -0
  695. package/src/react/primitive-hooks/useActionBarCopy.test.ts +5 -6
  696. package/src/react/primitive-hooks/useSuggestionTrigger.test.ts +0 -1
  697. package/src/react/primitives/generativeUI/GenerativeUI.test.tsx +54 -0
  698. package/src/react/primitives/generativeUI/GenerativeUI.tsx +13 -18
  699. package/src/react/primitives/message/MessageGroupedParts.test.tsx +99 -0
  700. package/src/react/primitives/message/MessageGroupedParts.tsx +15 -4
  701. package/src/react/primitives/part/PartMessages.test.tsx +104 -1
  702. package/src/react/primitives/part/PartMessages.tsx +1 -0
  703. package/src/react/primitives/thread/ThreadMessages.test.tsx +160 -0
  704. package/src/react/primitives/thread/ThreadMessages.tsx +8 -5
  705. package/src/react/providers/ReadonlyThreadProvider.test.tsx +56 -0
  706. package/src/react/runtimes/RemoteThreadListHookInstanceManager.layout.test.tsx +62 -0
  707. package/src/react/runtimes/RemoteThreadListHookInstanceManager.retry.test.tsx +2 -2
  708. package/src/react/runtimes/RemoteThreadListHookInstanceManager.test.tsx +23 -20
  709. package/src/react/runtimes/RemoteThreadListHookInstanceManager.title.test.tsx +24 -17
  710. package/src/react/runtimes/RemoteThreadListHookInstanceManager.tsx +39 -24
  711. package/src/react/runtimes/RemoteThreadListThreadListRuntimeCore.tsx +7 -1
  712. package/src/react/runtimes/assistant-transport/transport-scheduling.test.ts +73 -46
  713. package/src/react/runtimes/assistant-transport/useAssistantTransportRuntime.test.tsx +66 -1
  714. package/src/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.test.ts +20 -14
  715. package/src/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.test.tsx +323 -1
  716. package/src/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.ts +190 -523
  717. package/src/react/runtimes/cloud/CloudFileAttachmentAdapter.test.ts +81 -0
  718. package/src/react/runtimes/cloud/CloudFileAttachmentAdapter.ts +27 -1
  719. package/src/react/runtimes/cloud/auiV0.ts +281 -26
  720. package/src/react/runtimes/cloud/auiV0DecodeSafely.test.ts +522 -0
  721. package/src/react/runtimes/cloud/createCloudThreadListAdapter.test.ts +21 -0
  722. package/src/react/runtimes/cloud/createCloudThreadListAdapter.ts +7 -1
  723. package/src/react/runtimes/cloud/sdkIdentity.ts +9 -0
  724. package/src/react/runtimes/cloud/useCloudThreadListAdapter.test.tsx +18 -4
  725. package/src/react/runtimes/external-message-converter.test.ts +143 -4
  726. package/src/react/runtimes/external-message-converter.ts +39 -93
  727. package/src/react/runtimes/remote-thread-hook-on-tap.test.ts +2 -1
  728. package/src/react/runtimes/useExternalStoreRuntime.lifecycle.test.tsx +8 -2
  729. package/src/react/runtimes/useExternalStoreRuntime.suggestions.test.tsx +6 -2
  730. package/src/react/runtimes/useRemoteThreadListRuntime.concurrent.test.tsx +84 -4
  731. package/src/react/runtimes/useRemoteThreadListRuntime.ts +6 -2
  732. package/src/react/utils/groupParts.ts +12 -1
  733. package/src/react/utils/useJSONEqual.ts +9 -0
  734. package/src/react/utils/useJSONSchemaDependency.ts +22 -0
  735. package/src/runtime/api/message-part-runtime.ts +4 -1
  736. package/src/runtime/api/message-runtime.ts +15 -2
  737. package/src/runtime/api/thread-runtime.test.ts +58 -0
  738. package/src/runtime/api/thread-runtime.ts +2 -4
  739. package/src/runtime/base/base-composer-runtime-core.ts +69 -16
  740. package/src/runtime/base/base-thread-runtime-core.test.ts +1799 -49
  741. package/src/runtime/base/base-thread-runtime-core.ts +296 -94
  742. package/src/runtime/base/default-edit-composer-runtime-core.ts +12 -2
  743. package/src/runtime/base/default-thread-composer-runtime-core.ts +12 -1
  744. package/src/runtime/interfaces/thread-runtime-core.ts +8 -0
  745. package/src/runtime/queue/message-queue.ts +79 -7
  746. package/src/runtime/utils/auto-status.test.ts +112 -1
  747. package/src/runtime/utils/auto-status.ts +31 -5
  748. package/src/runtime/utils/external-message-conversion.test.ts +177 -0
  749. package/src/runtime/utils/external-message-conversion.ts +128 -33
  750. package/src/runtime/utils/message-repository.test.ts +49 -0
  751. package/src/runtime/utils/message-repository.ts +3 -3
  752. package/src/runtime/utils/stored-message-parts.ts +174 -0
  753. package/src/runtime/utils/thread-message-like.test.ts +52 -0
  754. package/src/runtime/utils/thread-message-like.ts +11 -2
  755. package/src/runtimes/external-store/external-store-adapter.ts +4 -0
  756. package/src/runtimes/external-store/external-store-thread-runtime-core.ts +74 -9
  757. package/src/runtimes/local/local-thread-runtime-core.test.ts +189 -12
  758. package/src/runtimes/local/local-thread-runtime-core.ts +91 -10
  759. package/src/runtimes/tool-invocations/EDGE_CASES.md +2 -6
  760. package/src/runtimes/tool-invocations/ToolInvocationTracker.test.ts +133 -0
  761. package/src/runtimes/tool-invocations/ToolInvocationTracker.ts +10 -6
  762. package/src/store/clients/external-thread.ts +53 -14
  763. package/src/store/clients/thread-tasks.test.ts +274 -0
  764. package/src/store/clients/thread-tasks.ts +138 -0
  765. package/src/store/index.ts +8 -0
  766. package/src/store/primitive-predicates.test.ts +64 -5
  767. package/src/store/primitive-predicates.ts +10 -2
  768. package/src/store/runtime-clients/thread-runtime-client.test.tsx +110 -0
  769. package/src/store/runtime-clients/thread-runtime-client.ts +31 -1
  770. package/src/store/scope-registration.ts +2 -0
  771. package/src/store/scopes/message.ts +4 -1
  772. package/src/store/scopes/task.ts +34 -0
  773. package/src/store/scopes/thread.ts +16 -0
  774. package/src/store/thread-tasks.test.tsx +209 -0
  775. package/src/subscribable/subscribable.test.ts +161 -1
  776. package/src/subscribable/subscribable.ts +25 -15
  777. package/src/tests/MessageRepository.test.ts +1 -5
  778. package/src/tests/attachment-adapters.test.ts +16 -1
  779. package/src/tests/auiV0Encode.test.ts +304 -0
  780. package/src/tests/base-composer-runtime-core-addAttachment.test.ts +6 -6
  781. package/src/tests/base-composer-runtime-core-send.test.ts +51 -0
  782. package/src/tests/base-composer-runtime-core.test.ts +329 -6
  783. package/src/tests/composer-can-cancel.test.ts +35 -6
  784. package/src/tests/composer-can-send.test.ts +22 -0
  785. package/src/tests/default-edit-composer-runtime-core.test.ts +47 -0
  786. package/src/tests/external-store-thread-runtime-core-adapter.test.ts +369 -16
  787. package/src/tests/external-store-thread-runtime-core.test.ts +31 -0
  788. package/src/tests/external-thread-attachments.test.tsx +91 -23
  789. package/src/tests/external-thread-feedback.test.tsx +20 -7
  790. package/src/tests/external-thread-parity.test.tsx +35 -1
  791. package/src/tests/groupParts.test.ts +71 -0
  792. package/src/tests/message-queue.test.ts +290 -2
  793. package/src/tests/remote-thread-list-reactive-threadId.test.ts +51 -0
  794. package/src/tests/thread-switch-events.test.tsx +11 -7
  795. package/src/tests/useRemoteThreadListRuntime-controlled.test.tsx +45 -1
  796. package/src/types/index.ts +1 -0
  797. package/src/types/message.test.ts +19 -0
  798. package/src/types/message.ts +23 -7
  799. package/src/utils/abortable-iterable.test.ts +115 -0
  800. package/src/utils/abortable-iterable.ts +34 -23
  801. package/src/utils/getGroupStatus.test.ts +70 -4
  802. package/src/utils/getGroupStatus.ts +35 -12
  803. package/src/utils/wire-media.test.ts +10 -0
  804. package/src/utils/wire-media.ts +6 -2
@@ -1 +1 @@
1
- {"version":3,"file":"AssistantCloudThreadHistoryAdapter.js","names":["RefObject","useEffect","useRef","useState","GenericThreadHistoryAdapter","ThreadHistoryAdapter","MessageFormatAdapter","MessageFormatItem","MessageFormatRepository","ExportedMessageRepositoryItem","AssistantCloud","AssistantCloudEvent","AssistantCloudRunReportToolCall","CloudMessagePersistence","createFormattedPersistence","createRunReport","createRunTelemetryToolCall","deriveRunOutcome","describeRunError","extractRunTelemetryModelId","normalizeRunTelemetryUsage","RunReportOutcome","RunReportStepInit","RunTelemetryUsage","RunTelemetryUsageInit","truncateRunTelemetryText","auiV0Decode","auiV0Encode","AssistantClient","getClientId","useAui","ThreadListItemMethods","FeedbackAdapter","CloudThreadListItem","Pick","globalPersistence","WeakMap","ClientId","AssistantCloudThreadHistoryAdapter","cloudRef","getAui","constructor","aui","getPersistence","threadListItem","key","has","set","current","get","_persistence","resolveEngagementEventIds","threadId","messageId","options","awaitThread","Promise","getThreadListItem","remoteThreadId","getState","remoteId","initialize","then","result","catch","undefined","remoteMessageId","getResolvedRemoteId","thread_id","message_id","feedback","submit","message","type","tryGetKeyedThreadListItem","console","warn","id","cloudMessageId","getRemoteId","threads","messages","error","live","source","listed","threadItems","some","item","currentState","find","withFormat","Record","formatAdapter","TMessage","TStorageFormat","adapter","pinCurrent","next","resolvePinned","getTargetFormatted","pin","append","pinned","Error","update","localMessageId","delete","reportTelemetry","items","durationMs","stepTimestamps","StepTimestamp","encodedRunMessages","map","encode","_reportRunTelemetry","format","extractLastRunMessageInfo","load","parentId","encoded","telemetry","enabled","_maybeReportRun","extractRunMessageInfo","isPersisted","filter","m","reverse","runMessages","T","messageInfo","RunMessageInfo","extracted","extractRunTelemetry","_sendReport","content","extractTelemetry","data","TelemetryData","persistence","mergedSteps","mergeStepTimestamps","steps","initial","status","outcome","outcomeType","errorCode","traceId","modelId","provider","usage","inputTokens","outputTokens","reasoningTokens","cachedInputTokens","toRunReportSteps","totalSteps","toolCalls","firstTokenMs","outputText","metadata","beforeReport","report","runs","TelemetryStepData","input_tokens","output_tokens","reasoning_tokens","cached_input_tokens","tool_calls","start_ms","end_ms","step","startMs","endMs","timestamps","t","len","Math","min","length","s","i","info","getId","isRecord","role","custom","timing","streamStartTime","firstTokenTime","Number","isFinite","round","finishReason","reason","failed","isError","failure","const","value","extractAuiV0","extractAiSdkV6","aggregateAiSdkV6RunSteps","AUI_STATUS_MAP","incomplete","msg","text","toolName","toolCallId","args","argsText","p","textParts","join","totalInput","totalOutput","totalReasoning","totalCachedInput","hasInput","hasOutput","hasReasoning","hasCachedInput","statusType","telemetrySteps","AiSdkV6Part","input","output","AiSdkV6Message","parts","isToolCallPart","startsWith","isDynamicToolPart","partToToolCall","toolSource","slice","collectAiSdkV6Parts","stepsData","currentStepToolCalls","push","tc","buildAiSdkV6Result","hasText","extractAiSdkV6Usage","normalized","hasAny","n","stepMessages","allTextParts","allToolCalls","allStepsData","hasAssistant","useAssistantCloudThreadHistoryAdapter","auiRef","useAssistantCloudEngagementEvents","RootEngagementTracker","count","dispose","rootEngagementTrackers","useRootEngagementEvents","$","_c","t0","t1","tracker","created","_temp","on","scope","event","payload","ids","events","track","kind","_temp2","active","Symbol","for","Map","runStartedAt","runEndedAt","t2","Set","shownSuggestions","t3","t4","_temp3","trackRunStopped","threadId_0","startedAt","max","Date","now","unsubscribers","previousRunEndedAt","props","chars","attachments","suggestion","payload_0","contentType","payload_1","payload_2","payload_3","payload_4","payload_5","payload_6","payload_7","payload_8","payload_9","payload_10","payload_11","unsubscribe","t5","t6","reportSuggestions","mainThreadId","isEmpty","suggestions","thread","add","ids_0","subscribe"],"sources":["../../../../src/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.ts"],"sourcesContent":["import { type RefObject, useEffect, useRef, useState } from \"react\";\nimport type {\n GenericThreadHistoryAdapter,\n ThreadHistoryAdapter,\n MessageFormatAdapter,\n MessageFormatItem,\n MessageFormatRepository,\n} from \"../../../adapters/thread-history\";\nimport type { ExportedMessageRepositoryItem } from \"../../../runtime/utils/message-repository\";\nimport {\n type AssistantCloud,\n type AssistantCloudEvent,\n type AssistantCloudRunReportToolCall,\n CloudMessagePersistence,\n createFormattedPersistence,\n createRunReport,\n createRunTelemetryToolCall,\n deriveRunOutcome,\n describeRunError,\n extractRunTelemetryModelId,\n normalizeRunTelemetryUsage,\n type RunReportOutcome,\n type RunReportStepInit,\n type RunTelemetryUsage,\n type RunTelemetryUsageInit,\n truncateRunTelemetryText,\n} from \"assistant-cloud\";\nimport { auiV0Decode, auiV0Encode } from \"./auiV0\";\nimport { type AssistantClient, getClientId, useAui } from \"@assistant-ui/store\";\nimport type { ThreadListItemMethods } from \"../../../store/scopes/thread-list-item\";\nimport type { FeedbackAdapter } from \"../../../adapters/feedback\";\n\ntype CloudThreadListItem = Pick<\n ThreadListItemMethods,\n \"getState\" | \"initialize\"\n>;\n\nconst globalPersistence = new WeakMap<\n getClientId.ClientId,\n CloudMessagePersistence\n>();\n\nclass AssistantCloudThreadHistoryAdapter implements ThreadHistoryAdapter {\n private cloudRef: RefObject<AssistantCloud>;\n private getAui: () => AssistantClient;\n\n constructor(\n cloudRef: RefObject<AssistantCloud>,\n getAui: () => AssistantClient,\n ) {\n this.cloudRef = cloudRef;\n this.getAui = getAui;\n }\n\n private get aui(): AssistantClient {\n return this.getAui();\n }\n\n private getPersistence(\n threadListItem: CloudThreadListItem = this.aui.threadListItem,\n ): CloudMessagePersistence {\n const key = getClientId(threadListItem);\n if (!globalPersistence.has(key)) {\n globalPersistence.set(\n key,\n new CloudMessagePersistence(() => this.cloudRef.current),\n );\n }\n return globalPersistence.get(key)!;\n }\n\n private get _persistence(): CloudMessagePersistence {\n return this.getPersistence();\n }\n\n /**\n * A send is the moment the runtime creates the remote thread, so that one\n * event waits for the id; every other event reads the id that already\n * exists, because initializing a thread nobody has written to would create\n * an empty remote thread just to attribute an event.\n */\n public async resolveEngagementEventIds(\n threadId: string,\n messageId?: string,\n options?: { awaitThread?: boolean },\n ): Promise<Pick<AssistantCloudEvent, \"thread_id\" | \"message_id\">> {\n const threadListItem = this.getThreadListItem(threadId);\n if (!threadListItem) return {};\n\n let remoteThreadId = threadListItem.getState().remoteId;\n if (!remoteThreadId && options?.awaitThread) {\n remoteThreadId = await threadListItem\n .initialize()\n .then((result) => result.remoteId)\n .catch(() => undefined);\n }\n const remoteMessageId = messageId\n ? this.getPersistence(threadListItem).getResolvedRemoteId(messageId)\n : undefined;\n return {\n ...(remoteThreadId ? { thread_id: remoteThreadId } : undefined),\n ...(remoteMessageId ? { message_id: remoteMessageId } : undefined),\n };\n }\n\n public readonly feedback: FeedbackAdapter = {\n submit: ({ message, type }) => {\n void (async () => {\n const threadListItem = this.tryGetKeyedThreadListItem();\n const remoteThreadId = threadListItem?.getState().remoteId;\n if (!threadListItem || !remoteThreadId) {\n console.warn(\n `[assistant-ui] Skipping feedback for message ${message.id}: the thread has no remote id.`,\n );\n return;\n }\n\n const cloudMessageId = await this.getPersistence(\n threadListItem,\n ).getRemoteId(message.id);\n if (!cloudMessageId) {\n console.warn(\n `[assistant-ui] Skipping feedback for message ${message.id}: no cloud message id is mapped.`,\n );\n return;\n }\n\n await this.cloudRef.current.threads.messages.feedback(\n remoteThreadId,\n cloudMessageId,\n { type },\n );\n })().catch((error: unknown) => {\n console.error(\n \"[assistant-ui] Cloud feedback submission failed:\",\n error,\n );\n });\n },\n };\n\n private tryGetKeyedThreadListItem(): CloudThreadListItem | undefined {\n const live = this.aui.threadListItem;\n if (!live.source) return undefined;\n const id = live.getState().id;\n if (id === undefined) return undefined;\n // A body can resolve before the list's committed items include its\n // thread; the live item is already the per-thread anchor in that window.\n const listed = this.aui.threads\n .getState()\n .threadItems.some((item) => item.id === id || item.remoteId === id);\n return listed ? this.aui.threads.item({ id }) : live;\n }\n\n private getThreadListItem(threadId: string): CloudThreadListItem | undefined {\n const current = this.aui.threadListItem;\n const currentState = current.getState();\n if (currentState.id === threadId || currentState.remoteId === threadId) {\n return current;\n }\n\n const listed = this.aui.threads\n .getState()\n .threadItems.find(\n (item) => item.id === threadId || item.remoteId === threadId,\n );\n return listed ? this.aui.threads.item({ id: listed.id }) : undefined;\n }\n\n withFormat<TMessage, TStorageFormat extends Record<string, unknown>>(\n formatAdapter: MessageFormatAdapter<TMessage, TStorageFormat>,\n ): GenericThreadHistoryAdapter<TMessage> {\n const adapter = this;\n let threadListItem: CloudThreadListItem | undefined;\n const pinCurrent = () => {\n const next = adapter.tryGetKeyedThreadListItem();\n if (next) threadListItem = next;\n return threadListItem;\n };\n const resolvePinned = () => threadListItem ?? pinCurrent();\n const getTargetFormatted = (item: CloudThreadListItem) =>\n createFormattedPersistence(adapter.getPersistence(item), formatAdapter);\n return {\n pin() {\n pinCurrent();\n },\n async append(item: MessageFormatItem<TMessage>) {\n const pinned = resolvePinned();\n if (!pinned) {\n throw new Error(\n \"Cannot persist cloud history without a thread list item.\",\n );\n }\n const remoteId =\n pinned.getState().remoteId ?? (await pinned.initialize()).remoteId;\n await getTargetFormatted(pinned).append(remoteId, item);\n },\n async update(item: MessageFormatItem<TMessage>, localMessageId: string) {\n const pinned = resolvePinned();\n const remoteId = pinned?.getState().remoteId;\n if (!remoteId || !pinned) return;\n await getTargetFormatted(pinned).update?.(\n remoteId,\n item,\n localMessageId,\n );\n },\n async delete() {\n throw new Error(\n \"Assistant Cloud does not support deleting thread messages yet.\",\n );\n },\n reportTelemetry(\n items: MessageFormatItem<TMessage>[],\n options?: {\n durationMs?: number;\n stepTimestamps?: StepTimestamp[];\n },\n ) {\n const encodedRunMessages = items.map((item) =>\n formatAdapter.encode(item),\n );\n adapter._reportRunTelemetry(\n formatAdapter.format,\n encodedRunMessages,\n options,\n resolvePinned(),\n extractLastRunMessageInfo(items, formatAdapter),\n );\n },\n async load(): Promise<MessageFormatRepository<TMessage>> {\n // Loads re-pin and resolve through the pinned item, so the id mapping\n // they populate lives on the same persistence instance later writes\n // resolve, whichever of the list item or the live graft won the pin.\n const pinned = pinCurrent();\n const live = adapter.aui.threadListItem;\n const remoteId = live.source ? live.getState().remoteId : undefined;\n if (!remoteId) return { messages: [] };\n return getTargetFormatted(pinned ?? live).load(remoteId);\n },\n };\n }\n\n async append({ parentId, message }: ExportedMessageRepositoryItem) {\n const { remoteId } = await this.aui.threadListItem.initialize();\n const encoded = auiV0Encode(message);\n await this._persistence.append(\n remoteId,\n message.id,\n parentId,\n \"aui/v0\",\n encoded,\n );\n\n if (this.cloudRef.current.telemetry.enabled) {\n this._maybeReportRun(\n remoteId,\n \"aui/v0\",\n encoded,\n extractRunMessageInfo(message, \"aui/v0\"),\n );\n }\n }\n\n async update(item: ExportedMessageRepositoryItem) {\n if (!this._persistence.isPersisted(item.message.id)) {\n return this.append(item);\n }\n const { message } = item;\n const remoteId = this.aui.threadListItem.getState().remoteId;\n if (!remoteId) return;\n const encoded = auiV0Encode(message);\n await this._persistence.update(remoteId, message.id, \"aui/v0\", encoded);\n\n if (this.cloudRef.current.telemetry.enabled) {\n this._maybeReportRun(\n remoteId,\n \"aui/v0\",\n encoded,\n extractRunMessageInfo(message, \"aui/v0\"),\n );\n }\n }\n\n async delete() {\n throw new Error(\n \"Assistant Cloud does not support deleting thread messages yet.\",\n );\n }\n\n async load() {\n const remoteId = this.aui.threadListItem.getState().remoteId;\n if (!remoteId) return { messages: [] };\n const messages = await this._persistence.load(remoteId, \"aui/v0\");\n return {\n messages: messages\n .filter(\n (m): m is typeof m & { format: \"aui/v0\" } => m.format === \"aui/v0\",\n )\n .map(auiV0Decode)\n .reverse(),\n };\n }\n\n private _reportRunTelemetry<T>(\n format: string,\n runMessages: T[],\n options?: {\n durationMs?: number;\n stepTimestamps?: StepTimestamp[];\n },\n threadListItem?: CloudThreadListItem,\n messageInfo?: RunMessageInfo,\n ) {\n if (!this.cloudRef.current.telemetry.enabled) return;\n\n const item = threadListItem ?? this.aui.threadListItem;\n const remoteId = item.getState().remoteId;\n if (!remoteId) return;\n\n const extracted = extractRunTelemetry(format, runMessages);\n if (!extracted) return;\n\n this._sendReport(\n remoteId,\n extracted,\n options?.durationMs,\n options?.stepTimestamps,\n messageInfo,\n this.getPersistence(item),\n );\n }\n\n private _maybeReportRun<T>(\n remoteId: string,\n format: string,\n content: T,\n messageInfo?: RunMessageInfo,\n ) {\n const extracted = extractTelemetry(format, content);\n if (!extracted) return;\n\n this._sendReport(remoteId, extracted, undefined, undefined, messageInfo);\n }\n\n private _sendReport(\n remoteId: string,\n data: TelemetryData,\n durationMs?: number,\n stepTimestamps?: StepTimestamp[],\n messageInfo?: RunMessageInfo,\n persistence = this._persistence,\n ) {\n const mergedSteps = mergeStepTimestamps(data.steps, stepTimestamps);\n const messageId = messageInfo?.localMessageId\n ? persistence.getResolvedRemoteId(messageInfo.localMessageId)\n : undefined;\n const initial = createRunReport({\n threadId: remoteId,\n status: messageInfo?.status ?? data.status,\n outcome: messageInfo?.outcomeType,\n error: messageInfo?.error,\n errorCode: messageInfo?.errorCode,\n messageId,\n traceId: messageInfo?.traceId,\n modelId: data.modelId,\n provider: messageInfo?.provider,\n usage: {\n inputTokens: data.inputTokens,\n outputTokens: data.outputTokens,\n reasoningTokens: data.reasoningTokens,\n cachedInputTokens: data.cachedInputTokens,\n },\n steps: toRunReportSteps(mergedSteps),\n totalSteps: data.totalSteps,\n toolCalls: data.toolCalls,\n durationMs,\n firstTokenMs: messageInfo?.firstTokenMs,\n outputText: data.outputText,\n metadata: data.metadata,\n telemetry: this.cloudRef.current.telemetry,\n });\n\n const { beforeReport } = this.cloudRef.current.telemetry;\n const report = beforeReport ? beforeReport(initial) : initial;\n if (!report) return;\n\n this.cloudRef.current.runs.report(report).catch(() => {});\n }\n}\n\ntype TelemetryStepData = {\n input_tokens?: number;\n output_tokens?: number;\n reasoning_tokens?: number;\n cached_input_tokens?: number;\n tool_calls?: AssistantCloudRunReportToolCall[];\n start_ms?: number;\n end_ms?: number;\n};\n\ntype StepTimestamp = { start_ms: number; end_ms: number };\n\nfunction toRunReportSteps(\n steps: TelemetryStepData[] | undefined,\n): RunReportStepInit[] | undefined {\n if (!steps) return undefined;\n return steps.map((step) => ({\n usage: {\n inputTokens: step.input_tokens,\n outputTokens: step.output_tokens,\n reasoningTokens: step.reasoning_tokens,\n cachedInputTokens: step.cached_input_tokens,\n },\n toolCalls: step.tool_calls,\n startMs: step.start_ms,\n endMs: step.end_ms,\n }));\n}\n\nfunction mergeStepTimestamps(\n steps: TelemetryStepData[] | undefined,\n timestamps: StepTimestamp[] | undefined,\n): TelemetryStepData[] | undefined {\n if (!timestamps) return steps;\n if (!steps) return timestamps.map((t) => ({ ...t }));\n\n const len = Math.min(steps.length, timestamps.length);\n return steps.map((s, i) => ({\n ...s,\n ...(i < len ? timestamps[i] : undefined),\n }));\n}\n\ntype TelemetryData = {\n status: \"completed\" | \"incomplete\" | \"error\";\n toolCalls?: AssistantCloudRunReportToolCall[];\n totalSteps?: number;\n inputTokens?: number;\n outputTokens?: number;\n reasoningTokens?: number;\n cachedInputTokens?: number;\n outputText?: string;\n metadata?: Record<string, unknown>;\n steps?: TelemetryStepData[];\n modelId?: string;\n};\n\ntype RunMessageInfo = {\n localMessageId?: string;\n status?: \"error\";\n outcomeType?: RunReportOutcome;\n error?: string;\n errorCode?: string;\n firstTokenMs?: number;\n traceId?: string;\n provider?: string;\n};\n\nfunction extractLastRunMessageInfo<\n TMessage,\n TStorageFormat extends Record<string, unknown>,\n>(\n items: MessageFormatItem<TMessage>[],\n formatAdapter: MessageFormatAdapter<TMessage, TStorageFormat>,\n): RunMessageInfo | undefined {\n for (let i = items.length - 1; i >= 0; i--) {\n const item = items[i]!;\n const info = extractRunMessageInfo(\n item.message,\n formatAdapter.format,\n formatAdapter.getId(item.message),\n );\n if (info) return info;\n }\n return undefined;\n}\n\nfunction extractRunMessageInfo(\n message: unknown,\n format: string,\n localMessageId?: string,\n): RunMessageInfo | undefined {\n if (!isRecord(message) || message.role !== \"assistant\") return undefined;\n\n const status = isRecord(message.status) ? message.status : undefined;\n const metadata = isRecord(message.metadata) ? message.metadata : undefined;\n const custom = isRecord(metadata?.custom) ? metadata.custom : undefined;\n const timing = isRecord(metadata?.timing) ? metadata.timing : undefined;\n const streamStartTime = timing?.streamStartTime;\n const firstTokenTime = timing?.firstTokenTime;\n const firstTokenMs =\n typeof streamStartTime === \"number\" &&\n Number.isFinite(streamStartTime) &&\n typeof firstTokenTime === \"number\" &&\n Number.isFinite(firstTokenTime)\n ? Math.round(firstTokenTime - streamStartTime)\n : undefined;\n const finishReason =\n status?.type === \"incomplete\"\n ? status.reason\n : typeof metadata?.finishReason === \"string\"\n ? metadata.finishReason\n : undefined;\n const failed = status?.type === \"incomplete\" && status.reason === \"error\";\n const outcome = deriveRunOutcome({\n finishReason: typeof finishReason === \"string\" ? finishReason : undefined,\n isError: failed,\n });\n const outcomeType = outcome.outcome;\n const failure = failed ? describeRunError(status.error) : {};\n const messageId =\n localMessageId ?? (typeof message.id === \"string\" ? message.id : undefined);\n const traceId =\n format === \"aui/v0\"\n ? custom?.traceId\n : format === \"ai-sdk/v6\"\n ? metadata?.traceId\n : undefined;\n const provider =\n typeof custom?.provider === \"string\"\n ? custom.provider\n : typeof metadata?.provider === \"string\"\n ? metadata.provider\n : undefined;\n\n return {\n ...(messageId ? { localMessageId: messageId } : undefined),\n ...(outcome.status === \"error\" ? { status: \"error\" as const } : undefined),\n ...(outcomeType ? { outcomeType } : undefined),\n ...failure,\n ...(firstTokenMs != null && firstTokenMs >= 0\n ? { firstTokenMs }\n : undefined),\n ...(typeof traceId === \"string\" ? { traceId } : undefined),\n ...(provider !== undefined ? { provider } : undefined),\n };\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return value !== null && typeof value === \"object\";\n}\n\nfunction extractTelemetry<T>(format: string, content: T): TelemetryData | null {\n switch (format) {\n case \"aui/v0\":\n return extractAuiV0(content);\n case \"ai-sdk/v6\":\n return extractAiSdkV6(content);\n default:\n return null;\n }\n}\n\nfunction extractRunTelemetry<T>(\n format: string,\n runMessages: T[],\n): TelemetryData | null {\n if (format === \"ai-sdk/v6\") {\n return aggregateAiSdkV6RunSteps(runMessages);\n }\n for (let i = runMessages.length - 1; i >= 0; i--) {\n const result = extractTelemetry(format, runMessages[i]!);\n if (result) return result;\n }\n return null;\n}\n\nconst AUI_STATUS_MAP: Record<string, TelemetryData[\"status\"]> = {\n error: \"error\",\n incomplete: \"incomplete\",\n};\n\nexport function extractAuiV0<T>(content: T): TelemetryData | null {\n const msg = content as {\n role?: string;\n status?: { type: string; reason?: string };\n content?: readonly {\n type: string;\n text?: string;\n toolName?: string;\n toolCallId?: string;\n args?: unknown;\n argsText?: string;\n result?: unknown;\n }[];\n metadata?: {\n modelId?: string;\n steps?: readonly { usage?: RunTelemetryUsageInit }[];\n custom?: Record<string, unknown> & { modelId?: string };\n };\n };\n\n if (msg.role !== \"assistant\") return null;\n // A paused (requires-action) write is not a finished run; reporting it would\n // mislabel it \"completed\" and double-count steps once the terminal write reports.\n if (msg.status?.type === \"requires-action\") return null;\n\n const toolCalls = msg.content\n ?.filter((p) => p.type === \"tool-call\" && p.toolName && p.toolCallId)\n .map((p) =>\n createRunTelemetryToolCall({\n toolName: p.toolName!,\n toolCallId: p.toolCallId!,\n args: p.args,\n result: p.result,\n argsText: p.argsText,\n }),\n );\n\n const textParts = msg.content?.filter((p) => p.type === \"text\" && p.text);\n const outputText =\n textParts && textParts.length > 0\n ? truncateRunTelemetryText(textParts.map((p) => p.text).join(\"\"))\n : undefined;\n\n const steps = msg.metadata?.steps;\n let inputTokens: number | undefined;\n let outputTokens: number | undefined;\n let reasoningTokens: number | undefined;\n let cachedInputTokens: number | undefined;\n if (steps && steps.length > 0) {\n let totalInput = 0;\n let totalOutput = 0;\n let totalReasoning = 0;\n let totalCachedInput = 0;\n let hasInput = false;\n let hasOutput = false;\n let hasReasoning = false;\n let hasCachedInput = false;\n for (const step of steps) {\n if (!step.usage) continue;\n const usage = normalizeRunTelemetryUsage(step.usage);\n if (!usage) continue;\n if (usage.inputTokens != null) {\n totalInput += usage.inputTokens;\n hasInput = true;\n }\n if (usage.outputTokens != null) {\n totalOutput += usage.outputTokens;\n hasOutput = true;\n }\n if (usage.reasoningTokens != null) {\n totalReasoning += usage.reasoningTokens;\n hasReasoning = true;\n }\n if (usage.cachedInputTokens != null) {\n totalCachedInput += usage.cachedInputTokens;\n hasCachedInput = true;\n }\n }\n inputTokens = hasInput ? totalInput : undefined;\n outputTokens = hasOutput ? totalOutput : undefined;\n reasoningTokens = hasReasoning ? totalReasoning : undefined;\n cachedInputTokens = hasCachedInput ? totalCachedInput : undefined;\n }\n\n const statusType = msg.status?.type;\n const status: TelemetryData[\"status\"] =\n statusType === \"incomplete\" && msg.status?.reason === \"error\"\n ? \"error\"\n : (statusType && AUI_STATUS_MAP[statusType]) || \"completed\";\n\n const metadata = msg.metadata?.custom as Record<string, unknown> | undefined;\n const modelId = extractRunTelemetryModelId(\n msg.metadata as Record<string, unknown> | undefined,\n );\n\n const telemetrySteps: TelemetryStepData[] | undefined =\n steps && steps.length > 1\n ? steps.map((s) => {\n const usage = s.usage\n ? normalizeRunTelemetryUsage(s.usage)\n : undefined;\n return {\n ...(usage?.inputTokens != null\n ? { input_tokens: usage.inputTokens }\n : undefined),\n ...(usage?.outputTokens != null\n ? { output_tokens: usage.outputTokens }\n : undefined),\n ...(usage?.reasoningTokens != null\n ? { reasoning_tokens: usage.reasoningTokens }\n : undefined),\n ...(usage?.cachedInputTokens != null\n ? { cached_input_tokens: usage.cachedInputTokens }\n : undefined),\n };\n })\n : undefined;\n\n return {\n status,\n ...(toolCalls && toolCalls.length > 0 ? { toolCalls } : undefined),\n ...(steps?.length ? { totalSteps: steps.length } : undefined),\n ...(inputTokens != null ? { inputTokens } : undefined),\n ...(outputTokens != null ? { outputTokens } : undefined),\n ...(reasoningTokens != null ? { reasoningTokens } : undefined),\n ...(cachedInputTokens != null ? { cachedInputTokens } : undefined),\n ...(outputText != null ? { outputText } : undefined),\n ...(metadata ? { metadata } : undefined),\n ...(telemetrySteps ? { steps: telemetrySteps } : undefined),\n ...(modelId ? { modelId } : undefined),\n };\n}\n\ntype AiSdkV6Part = {\n type: string;\n text?: string;\n toolName?: string;\n toolCallId?: string;\n args?: unknown;\n result?: unknown;\n input?: unknown;\n output?: unknown;\n};\n\ntype AiSdkV6Message = {\n role?: string;\n parts?: readonly AiSdkV6Part[];\n metadata?: Record<string, unknown>;\n};\n\nfunction isToolCallPart(p: AiSdkV6Part): boolean {\n if (!p.toolCallId) return false;\n if (p.type === \"tool-call\" || p.type === \"dynamic-tool\") return !!p.toolName;\n return p.type.startsWith(\"tool-\") || p.type.startsWith(\"dynamic-tool-\");\n}\n\nfunction isDynamicToolPart(p: AiSdkV6Part): boolean {\n return p.type === \"dynamic-tool\" || p.type.startsWith(\"dynamic-tool-\");\n}\n\nfunction partToToolCall(p: AiSdkV6Part): AssistantCloudRunReportToolCall {\n const toolSource: \"mcp\" | \"frontend\" = isDynamicToolPart(p)\n ? \"mcp\"\n : \"frontend\";\n return createRunTelemetryToolCall({\n toolName: p.toolName ?? p.type.slice(5),\n toolCallId: p.toolCallId!,\n args: p.args ?? p.input,\n result: p.result ?? p.output,\n toolSource,\n });\n}\n\nfunction collectAiSdkV6Parts(parts: readonly AiSdkV6Part[]): {\n textParts: string[];\n toolCalls: AssistantCloudRunReportToolCall[];\n stepsData: { tool_calls: AssistantCloudRunReportToolCall[] }[];\n} {\n const textParts: string[] = [];\n const toolCalls: AssistantCloudRunReportToolCall[] = [];\n const stepsData: { tool_calls: AssistantCloudRunReportToolCall[] }[] = [];\n let currentStepToolCalls: AssistantCloudRunReportToolCall[] | null = null;\n\n for (const p of parts) {\n if (p.type === \"step-start\") {\n if (currentStepToolCalls !== null) {\n stepsData.push({ tool_calls: currentStepToolCalls });\n }\n currentStepToolCalls = [];\n } else if (p.type === \"text\" && p.text) {\n textParts.push(p.text);\n } else if (isToolCallPart(p)) {\n const tc = partToToolCall(p);\n toolCalls.push(tc);\n if (currentStepToolCalls !== null) {\n currentStepToolCalls.push(tc);\n }\n }\n }\n\n if (currentStepToolCalls !== null) {\n stepsData.push({ tool_calls: currentStepToolCalls });\n }\n\n return { textParts, toolCalls, stepsData };\n}\n\nfunction buildAiSdkV6Result(\n textParts: string[],\n toolCalls: AssistantCloudRunReportToolCall[],\n totalSteps: number,\n metadata?: Record<string, unknown>,\n stepsData?: { tool_calls: AssistantCloudRunReportToolCall[] }[],\n usage?: RunTelemetryUsage,\n): TelemetryData {\n const hasText = textParts.length > 0;\n const outputText = hasText\n ? truncateRunTelemetryText(textParts.join(\"\"))\n : undefined;\n const modelId = extractRunTelemetryModelId(metadata);\n\n const steps: TelemetryStepData[] | undefined =\n stepsData && stepsData.length > 1\n ? stepsData.map((s) => ({\n ...(s.tool_calls.length > 0\n ? { tool_calls: s.tool_calls }\n : undefined),\n }))\n : undefined;\n\n return {\n status: hasText ? \"completed\" : \"incomplete\",\n ...(toolCalls.length > 0 ? { toolCalls } : undefined),\n ...(totalSteps > 0 ? { totalSteps } : undefined),\n ...(usage?.inputTokens != null\n ? { inputTokens: usage.inputTokens }\n : undefined),\n ...(usage?.outputTokens != null\n ? { outputTokens: usage.outputTokens }\n : undefined),\n ...(usage?.reasoningTokens != null\n ? { reasoningTokens: usage.reasoningTokens }\n : undefined),\n ...(usage?.cachedInputTokens != null\n ? { cachedInputTokens: usage.cachedInputTokens }\n : undefined),\n ...(outputText != null ? { outputText } : undefined),\n ...(metadata ? { metadata } : undefined),\n ...(steps ? { steps } : undefined),\n ...(modelId ? { modelId } : undefined),\n };\n}\n\nfunction extractAiSdkV6Usage(\n metadata?: Record<string, unknown>,\n): RunTelemetryUsage | undefined {\n // Try top-level metadata.usage\n const usage = metadata?.usage as RunTelemetryUsageInit | undefined;\n if (usage) {\n const normalized = normalizeRunTelemetryUsage(usage);\n if (normalized) return normalized;\n }\n\n // Try aggregating from metadata.steps[].usage\n const steps = metadata?.steps as\n | readonly { usage?: RunTelemetryUsageInit }[]\n | undefined;\n if (steps && steps.length > 0) {\n let inputTokens = 0;\n let outputTokens = 0;\n let reasoningTokens = 0;\n let cachedInputTokens = 0;\n let hasInput = false;\n let hasOutput = false;\n let hasReasoning = false;\n let hasCachedInput = false;\n let hasAny = false;\n for (const s of steps) {\n if (!s.usage) continue;\n const n = normalizeRunTelemetryUsage(s.usage);\n if (n) {\n if (n.inputTokens != null) {\n inputTokens += n.inputTokens;\n hasInput = true;\n }\n if (n.outputTokens != null) {\n outputTokens += n.outputTokens;\n hasOutput = true;\n }\n if (n.reasoningTokens != null) {\n reasoningTokens += n.reasoningTokens;\n hasReasoning = true;\n }\n if (n.cachedInputTokens != null) {\n cachedInputTokens += n.cachedInputTokens;\n hasCachedInput = true;\n }\n hasAny = true;\n }\n }\n if (hasAny) {\n return {\n ...(hasInput ? { inputTokens } : undefined),\n ...(hasOutput ? { outputTokens } : undefined),\n ...(hasReasoning ? { reasoningTokens } : undefined),\n ...(hasCachedInput ? { cachedInputTokens } : undefined),\n };\n }\n }\n\n return undefined;\n}\n\nfunction extractAiSdkV6<T>(content: T): TelemetryData | null {\n const msg = content as AiSdkV6Message;\n if (msg.role !== \"assistant\") return null;\n\n const { textParts, toolCalls, stepsData } = collectAiSdkV6Parts(\n msg.parts ?? [],\n );\n return buildAiSdkV6Result(\n textParts,\n toolCalls,\n stepsData.length,\n msg.metadata,\n stepsData,\n extractAiSdkV6Usage(msg.metadata),\n );\n}\n\nfunction aggregateAiSdkV6RunSteps<T>(stepMessages: T[]): TelemetryData | null {\n const allTextParts: string[] = [];\n const allToolCalls: AssistantCloudRunReportToolCall[] = [];\n const allStepsData: { tool_calls: AssistantCloudRunReportToolCall[] }[] = [];\n let hasAssistant = false;\n let metadata: Record<string, unknown> | undefined;\n let inputTokens = 0;\n let outputTokens = 0;\n let reasoningTokens = 0;\n let cachedInputTokens = 0;\n let hasInput = false;\n let hasOutput = false;\n let hasReasoning = false;\n let hasCachedInput = false;\n\n for (const content of stepMessages) {\n const msg = content as AiSdkV6Message;\n if (msg.role !== \"assistant\") continue;\n hasAssistant = true;\n\n const { textParts, toolCalls, stepsData } = collectAiSdkV6Parts(\n msg.parts ?? [],\n );\n allTextParts.push(...textParts);\n allToolCalls.push(...toolCalls);\n allStepsData.push(...stepsData);\n if (msg.metadata) metadata = msg.metadata;\n\n const usage = extractAiSdkV6Usage(msg.metadata);\n if (usage) {\n if (usage.inputTokens != null) {\n inputTokens += usage.inputTokens;\n hasInput = true;\n }\n if (usage.outputTokens != null) {\n outputTokens += usage.outputTokens;\n hasOutput = true;\n }\n if (usage.reasoningTokens != null) {\n reasoningTokens += usage.reasoningTokens;\n hasReasoning = true;\n }\n if (usage.cachedInputTokens != null) {\n cachedInputTokens += usage.cachedInputTokens;\n hasCachedInput = true;\n }\n }\n }\n\n if (!hasAssistant) return null;\n return buildAiSdkV6Result(\n allTextParts,\n allToolCalls,\n allStepsData.length,\n metadata,\n allStepsData,\n {\n ...(hasInput ? { inputTokens } : undefined),\n ...(hasOutput ? { outputTokens } : undefined),\n ...(hasReasoning ? { reasoningTokens } : undefined),\n ...(hasCachedInput ? { cachedInputTokens } : undefined),\n },\n );\n}\n\nexport function useAssistantCloudThreadHistoryAdapter(\n cloudRef: RefObject<AssistantCloud>,\n): ThreadHistoryAdapter & { readonly feedback: FeedbackAdapter } {\n const aui = useAui();\n // Not useEffectEvent: history adapter methods run during render (SSR load).\n const auiRef = useRef(aui);\n useEffect(() => {\n auiRef.current = aui;\n });\n const [adapter] = useState(\n () =>\n new AssistantCloudThreadHistoryAdapter(cloudRef, () => auiRef.current),\n );\n useAssistantCloudEngagementEvents(cloudRef, adapter, aui);\n return adapter;\n}\n\ntype RootEngagementTracker = {\n count: number;\n adapter: AssistantCloudThreadHistoryAdapter;\n cloudRef: RefObject<AssistantCloud>;\n dispose: () => void;\n};\n\nconst rootEngagementTrackers = new WeakMap<\n AssistantClient,\n RootEngagementTracker\n>();\n\n/**\n * Thread switches are a thread list event, so one subscription per assistant\n * client reports them; every thread runtime mounted under it shares the\n * subscription and the last one to unmount removes it.\n */\nconst useRootEngagementEvents = (\n cloudRef: RefObject<AssistantCloud>,\n adapter: AssistantCloudThreadHistoryAdapter,\n aui: AssistantClient,\n) => {\n useEffect(() => {\n let tracker = rootEngagementTrackers.get(aui);\n if (!tracker) {\n const created: RootEngagementTracker = {\n count: 0,\n adapter,\n cloudRef,\n dispose: () => {},\n };\n created.dispose = aui.on(\n { scope: \"*\", event: \"threads.selectionChanged\" },\n (payload) => {\n void created.adapter\n .resolveEngagementEventIds(payload.threadId)\n .then((ids) => {\n if (!ids.thread_id) return;\n created.cloudRef.current.events?.track({\n kind: \"thread_switched\",\n ...ids,\n });\n })\n .catch(() => {});\n },\n );\n rootEngagementTrackers.set(aui, created);\n tracker = created;\n }\n const active = tracker;\n active.adapter = adapter;\n active.cloudRef = cloudRef;\n active.count += 1;\n return () => {\n active.count -= 1;\n if (active.count === 0) {\n active.dispose();\n rootEngagementTrackers.delete(aui);\n }\n };\n }, [adapter, aui, cloudRef]);\n};\n\nconst useAssistantCloudEngagementEvents = (\n cloudRef: RefObject<AssistantCloud>,\n adapter: AssistantCloudThreadHistoryAdapter,\n aui: AssistantClient,\n) => {\n useRootEngagementEvents(cloudRef, adapter, aui);\n const runStartedAt = useRef(new Map<string, number>());\n const runEndedAt = useRef(new Map<string, number>());\n const shownSuggestions = useRef(new Set<string>());\n\n useEffect(() => {\n const track = (\n event: AssistantCloudEvent,\n threadId: string,\n messageId?: string,\n options?: { awaitThread?: boolean },\n ) => {\n void adapter\n .resolveEngagementEventIds(threadId, messageId, options)\n .then((ids) => {\n cloudRef.current.events?.track({ ...event, ...ids });\n })\n .catch(() => {});\n };\n const trackRunStopped = (threadId: string) => {\n const startedAt = runStartedAt.current.get(threadId);\n if (startedAt === undefined) return;\n runStartedAt.current.delete(threadId);\n track(\n { kind: \"run_stopped\", value: Math.max(0, Date.now() - startedAt) },\n threadId,\n );\n };\n\n const unsubscribers = [\n aui.on({ scope: \"thread\", event: \"composer.send\" }, (payload) => {\n const previousRunEndedAt = runEndedAt.current.get(payload.threadId);\n track(\n {\n kind: payload.messageId ? \"message_edited\" : \"message_sent\",\n ...(payload.messageId\n ? { props: { chars: payload.chars } }\n : {\n props: {\n chars: payload.chars,\n attachments: payload.attachments,\n },\n }),\n ...(!payload.messageId && previousRunEndedAt !== undefined\n ? { value: Math.max(0, Date.now() - previousRunEndedAt) }\n : undefined),\n },\n payload.threadId,\n payload.messageId,\n { awaitThread: !payload.messageId },\n );\n if (payload.suggestion) {\n track({ kind: \"suggestion_clicked\" }, payload.threadId);\n }\n }),\n aui.on(\n { scope: \"thread\", event: \"composer.attachmentAdd\" },\n (payload) => {\n track(\n {\n kind: \"attachment_added\",\n ...(payload.contentType\n ? { props: { type: payload.contentType } }\n : undefined),\n },\n payload.threadId,\n payload.messageId,\n );\n },\n ),\n aui.on(\n { scope: \"thread\", event: \"composer.attachmentAddError\" },\n (payload) => {\n track(\n {\n kind: \"attachment_failed\",\n ...(payload.contentType\n ? { props: { type: payload.contentType } }\n : undefined),\n },\n payload.threadId,\n payload.messageId,\n );\n },\n ),\n aui.on({ scope: \"thread\", event: \"composer.cancel\" }, (payload) => {\n trackRunStopped(payload.threadId);\n }),\n aui.on({ scope: \"thread\", event: \"thread.runStart\" }, (payload) => {\n runStartedAt.current.set(payload.threadId, Date.now());\n }),\n aui.on({ scope: \"thread\", event: \"thread.runEnd\" }, (payload) => {\n runStartedAt.current.delete(payload.threadId);\n runEndedAt.current.set(payload.threadId, Date.now());\n }),\n aui.on({ scope: \"thread\", event: \"thread.cancelRun\" }, (payload) => {\n trackRunStopped(payload.threadId);\n }),\n aui.on({ scope: \"thread\", event: \"thread.voiceStarted\" }, (payload) => {\n track({ kind: \"voice_started\" }, payload.threadId);\n }),\n aui.on({ scope: \"thread\", event: \"message.reload\" }, (payload) => {\n track(\n { kind: \"message_regenerated\" },\n payload.threadId,\n payload.messageId,\n );\n }),\n aui.on(\n { scope: \"thread\", event: \"message.branchSwitched\" },\n (payload) => {\n track(\n { kind: \"branch_switched\" },\n payload.threadId,\n payload.messageId,\n );\n },\n ),\n aui.on({ scope: \"thread\", event: \"message.copied\" }, (payload) => {\n track({ kind: \"message_copied\" }, payload.threadId, payload.messageId);\n }),\n aui.on({ scope: \"thread\", event: \"message.speak\" }, (payload) => {\n track({ kind: \"speech_started\" }, payload.threadId, payload.messageId);\n }),\n aui.on({ scope: \"thread\", event: \"message.error\" }, (payload) => {\n track(\n { kind: \"error_shown\", props: { reason: payload.reason } },\n payload.threadId,\n payload.messageId,\n );\n }),\n ];\n\n return () => {\n for (const unsubscribe of unsubscribers) unsubscribe();\n };\n }, [adapter, aui, cloudRef]);\n\n useEffect(() => {\n const reportSuggestions = () => {\n const { mainThreadId } = aui.threads.getState();\n if (aui.threadListItem.getState().id !== mainThreadId) return;\n const { isEmpty, suggestions } = aui.thread.getState();\n if (\n !isEmpty ||\n suggestions.length === 0 ||\n shownSuggestions.current.has(mainThreadId)\n ) {\n return;\n }\n shownSuggestions.current.add(mainThreadId);\n void adapter.resolveEngagementEventIds(mainThreadId).then((ids) => {\n cloudRef.current.events?.track({\n kind: \"suggestions_shown\",\n value: suggestions.length,\n ...ids,\n });\n });\n };\n\n reportSuggestions();\n return aui.subscribe(reportSuggestions);\n }, [adapter, aui, cloudRef]);\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"AssistantCloudThreadHistoryAdapter.js","names":["RefObject","useEffect","useRef","useState","GenericThreadHistoryAdapter","ThreadHistoryAdapter","MessageFormatAdapter","MessageFormatItem","MessageFormatRepository","ExportedMessageRepositoryItem","ThreadMessage","AssistantCloud","AssistantCloudEvent","CloudEngagementReporter","CloudMessagePersistence","CloudRunReporter","createFormattedPersistence","createRunTelemetryToolCall","deriveRunOutcome","describeRunError","extractRunTelemetryModelId","normalizeRunTelemetryUsage","RunMessageTelemetry","RunReportOutcome","RunReportStepInit","RunTelemetryUsageInit","truncateRunTelemetryText","extractAISDKRunTelemetry","AISDKMessageLike","auiV0DecodeSafely","auiV0Encode","AssistantClient","getClientId","useAui","ThreadListItemMethods","FeedbackAdapter","CloudThreadListItem","Pick","globalPersistence","WeakMap","ClientId","AssistantCloudThreadHistoryAdapter","cloudRef","getAui","runReporter","engagementReporter","constructor","current","threadId","messageId","options","resolveEngagementEventIds","aui","getPersistence","threadListItem","key","has","set","get","_persistence","awaitThread","Promise","getThreadListItem","remoteThreadId","getState","remoteId","initialize","then","result","catch","undefined","remoteMessageId","getResolvedRemoteId","thread_id","message_id","feedback","submit","message","type","comment","tryGetKeyedThreadListItem","console","warn","id","cloudMessageId","getRemoteId","threads","messages","error","live","source","listed","threadItems","some","item","currentState","find","withFormat","Record","formatAdapter","TMessage","TStorageFormat","adapter","pinCurrent","next","resolvePinned","getTargetFormatted","pin","append","pinned","Error","update","localMessageId","delete","reportTelemetry","items","durationMs","stepTimestamps","StepTimestamp","encodedRunMessages","map","encode","_reportRunTelemetry","format","mergeRunMessageInfo","extractLastRunMessageInfo","extractRunMessageInfo","load","parentId","encoded","telemetry","enabled","_maybeReportRun","isPersisted","rows","filter","m","reverse","loaded","loadedIds","Set","row","add","push","runMessages","T","messageInfo","RunMessageInfo","extracted","extractRunTelemetry","status","const","_sendReport","content","extractTelemetry","data","persistence","mergedSteps","mergeStepTimestamps","steps","report","outcome","outcomeType","errorCode","traceId","modelId","provider","usage","totalSteps","toolCalls","firstTokenMs","outputText","metadata","start_ms","end_ms","timestamps","startMs","endMs","len","Math","min","length","step","index","i","info","getId","stored","observed","_observedId","isRecord","role","custom","timing","firstTokenTime","Number","isFinite","round","finishReason","reason","failed","isError","runStatus","failure","value","extractAuiV0","msg","text","toolName","toolCallId","args","argsText","p","textParts","join","inputTokens","outputTokens","reasoningTokens","cachedInputTokens","totalInput","totalOutput","totalReasoning","totalCachedInput","hasInput","hasOutput","hasReasoning","hasCachedInput","telemetrySteps","useAssistantCloudThreadHistoryAdapter","auiRef","useAssistantCloudEngagementEvents","RootEngagementTracker","count","dispose","rootEngagementTrackers","useRootEngagementEvents","$","_c","t0","tracker","created","_temp","on","scope","event","payload","threadSwitched","active","t1","reporter","unsubscribers","messageEdited","chars","messageSent","attachments","suggestion","suggestionClicked","payload_0","attachmentAdded","contentType","payload_1","attachmentFailed","payload_2","runStopped","payload_3","runStarted","payload_4","runEnded","payload_5","payload_6","voiceStarted","payload_7","messageRegenerated","payload_8","branchSwitched","payload_9","messageCopied","payload_10","approved","toolApproved","toolRejected","payload_11","speechStarted","payload_12","errorShown","unsubscribe","t2","reportSuggestions","mainThreadId","isEmpty","suggestions","thread","suggestionsShown","subscribe","t3"],"sources":["../../../../src/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.ts"],"sourcesContent":["import { type RefObject, useEffect, useRef, useState } from \"react\";\nimport type {\n GenericThreadHistoryAdapter,\n ThreadHistoryAdapter,\n MessageFormatAdapter,\n MessageFormatItem,\n MessageFormatRepository,\n} from \"../../../adapters/thread-history\";\nimport type { ExportedMessageRepositoryItem } from \"../../../runtime/utils/message-repository\";\nimport type { ThreadMessage } from \"../../../types\";\nimport {\n type AssistantCloud,\n type AssistantCloudEvent,\n CloudEngagementReporter,\n CloudMessagePersistence,\n CloudRunReporter,\n createFormattedPersistence,\n createRunTelemetryToolCall,\n deriveRunOutcome,\n describeRunError,\n extractRunTelemetryModelId,\n normalizeRunTelemetryUsage,\n type RunMessageTelemetry,\n type RunReportOutcome,\n type RunReportStepInit,\n type RunTelemetryUsageInit,\n truncateRunTelemetryText,\n} from \"assistant-cloud\";\nimport {\n extractAISDKRunTelemetry,\n type AISDKMessageLike,\n} from \"assistant-cloud/ai-sdk\";\nimport { auiV0DecodeSafely, auiV0Encode } from \"./auiV0\";\nimport { type AssistantClient, getClientId, useAui } from \"@assistant-ui/store\";\nimport type { ThreadListItemMethods } from \"../../../store/scopes/thread-list-item\";\nimport type { FeedbackAdapter } from \"../../../adapters/feedback\";\n\ntype CloudThreadListItem = Pick<\n ThreadListItemMethods,\n \"getState\" | \"initialize\"\n>;\n\nconst globalPersistence = new WeakMap<\n getClientId.ClientId,\n CloudMessagePersistence\n>();\n\nclass AssistantCloudThreadHistoryAdapter implements ThreadHistoryAdapter {\n private cloudRef: RefObject<AssistantCloud>;\n private getAui: () => AssistantClient;\n private runReporter: CloudRunReporter;\n public readonly engagementReporter: CloudEngagementReporter;\n\n constructor(\n cloudRef: RefObject<AssistantCloud>,\n getAui: () => AssistantClient,\n ) {\n this.cloudRef = cloudRef;\n this.getAui = getAui;\n this.runReporter = new CloudRunReporter(() => this.cloudRef.current);\n this.engagementReporter = new CloudEngagementReporter(\n () => this.cloudRef.current,\n (threadId, messageId, options) =>\n this.resolveEngagementEventIds(threadId, messageId, options),\n );\n }\n\n private get aui(): AssistantClient {\n return this.getAui();\n }\n\n private getPersistence(\n threadListItem: CloudThreadListItem = this.aui.threadListItem,\n ): CloudMessagePersistence {\n const key = getClientId(threadListItem);\n if (!globalPersistence.has(key)) {\n globalPersistence.set(\n key,\n new CloudMessagePersistence(() => this.cloudRef.current),\n );\n }\n return globalPersistence.get(key)!;\n }\n\n private get _persistence(): CloudMessagePersistence {\n return this.getPersistence();\n }\n\n /**\n * A send is the moment the runtime creates the remote thread, so that one\n * event waits for the id; every other event reads the id that already\n * exists, because initializing a thread nobody has written to would create\n * an empty remote thread just to attribute an event.\n */\n public async resolveEngagementEventIds(\n threadId: string,\n messageId?: string,\n options?: { awaitThread?: boolean },\n ): Promise<Pick<AssistantCloudEvent, \"thread_id\" | \"message_id\">> {\n const threadListItem = this.getThreadListItem(threadId);\n if (!threadListItem) return {};\n\n let remoteThreadId = threadListItem.getState().remoteId;\n if (!remoteThreadId && options?.awaitThread) {\n remoteThreadId = await threadListItem\n .initialize()\n .then((result) => result.remoteId)\n .catch(() => undefined);\n }\n const remoteMessageId = messageId\n ? this.getPersistence(threadListItem).getResolvedRemoteId(messageId)\n : undefined;\n return {\n ...(remoteThreadId ? { thread_id: remoteThreadId } : undefined),\n ...(remoteMessageId ? { message_id: remoteMessageId } : undefined),\n };\n }\n\n public readonly feedback: FeedbackAdapter = {\n submit: ({ message, type, comment }) => {\n void (async () => {\n const threadListItem = this.tryGetKeyedThreadListItem();\n const remoteThreadId = threadListItem?.getState().remoteId;\n if (!threadListItem || !remoteThreadId) {\n console.warn(\n `[assistant-ui] Skipping feedback for message ${message.id}: the thread has no remote id.`,\n );\n return;\n }\n\n const cloudMessageId = await this.getPersistence(\n threadListItem,\n ).getRemoteId(message.id);\n if (!cloudMessageId) {\n console.warn(\n `[assistant-ui] Skipping feedback for message ${message.id}: no cloud message id is mapped.`,\n );\n return;\n }\n\n await this.cloudRef.current.threads.messages.feedback(\n remoteThreadId,\n cloudMessageId,\n { type, ...(comment ? { comment } : undefined) },\n );\n })().catch((error: unknown) => {\n console.error(\n \"[assistant-ui] Cloud feedback submission failed:\",\n error,\n );\n });\n },\n };\n\n private tryGetKeyedThreadListItem(): CloudThreadListItem | undefined {\n const live = this.aui.threadListItem;\n if (!live.source) return undefined;\n const id = live.getState().id;\n if (id === undefined) return undefined;\n // A body can resolve before the list's committed items include its\n // thread; the live item is already the per-thread anchor in that window.\n const listed = this.aui.threads\n .getState()\n .threadItems.some((item) => item.id === id || item.remoteId === id);\n return listed ? this.aui.threads.item({ id }) : live;\n }\n\n private getThreadListItem(threadId: string): CloudThreadListItem | undefined {\n const current = this.aui.threadListItem;\n const currentState = current.getState();\n if (currentState.id === threadId || currentState.remoteId === threadId) {\n return current;\n }\n\n const listed = this.aui.threads\n .getState()\n .threadItems.find(\n (item) => item.id === threadId || item.remoteId === threadId,\n );\n return listed ? this.aui.threads.item({ id: listed.id }) : undefined;\n }\n\n withFormat<TMessage, TStorageFormat extends Record<string, unknown>>(\n formatAdapter: MessageFormatAdapter<TMessage, TStorageFormat>,\n ): GenericThreadHistoryAdapter<TMessage> {\n const adapter = this;\n let threadListItem: CloudThreadListItem | undefined;\n const pinCurrent = () => {\n const next = adapter.tryGetKeyedThreadListItem();\n if (next) threadListItem = next;\n return threadListItem;\n };\n const resolvePinned = () => threadListItem ?? pinCurrent();\n const getTargetFormatted = (item: CloudThreadListItem) =>\n createFormattedPersistence(adapter.getPersistence(item), formatAdapter);\n return {\n pin() {\n pinCurrent();\n },\n async append(item: MessageFormatItem<TMessage>) {\n const pinned = resolvePinned();\n if (!pinned) {\n throw new Error(\n \"Cannot persist cloud history without a thread list item.\",\n );\n }\n const remoteId =\n pinned.getState().remoteId ?? (await pinned.initialize()).remoteId;\n await getTargetFormatted(pinned).append(remoteId, item);\n },\n async update(item: MessageFormatItem<TMessage>, localMessageId: string) {\n const pinned = resolvePinned();\n const remoteId = pinned?.getState().remoteId;\n if (!remoteId || !pinned) return;\n await getTargetFormatted(pinned).update?.(\n remoteId,\n item,\n localMessageId,\n );\n },\n async delete() {\n throw new Error(\n \"Assistant Cloud does not support deleting thread messages yet.\",\n );\n },\n reportTelemetry(\n items: MessageFormatItem<TMessage>[],\n options?: {\n durationMs?: number;\n stepTimestamps?: StepTimestamp[];\n message?: ThreadMessage;\n },\n ) {\n const encodedRunMessages = items.map((item) =>\n formatAdapter.encode(item),\n );\n adapter._reportRunTelemetry(\n formatAdapter.format,\n encodedRunMessages,\n options,\n resolvePinned(),\n mergeRunMessageInfo(\n extractLastRunMessageInfo(items, formatAdapter),\n options?.message\n ? extractRunMessageInfo(options.message, \"aui/v0\")\n : undefined,\n ),\n );\n },\n async load(): Promise<MessageFormatRepository<TMessage>> {\n // Loads re-pin and resolve through the pinned item, so the id mapping\n // they populate lives on the same persistence instance later writes\n // resolve, whichever of the list item or the live graft won the pin.\n const pinned = pinCurrent();\n const live = adapter.aui.threadListItem;\n const remoteId = live.source ? live.getState().remoteId : undefined;\n if (!remoteId) return { messages: [] };\n return getTargetFormatted(pinned ?? live).load(remoteId);\n },\n };\n }\n\n async append({ parentId, message }: ExportedMessageRepositoryItem) {\n const { remoteId } = await this.aui.threadListItem.initialize();\n const encoded = auiV0Encode(message);\n await this._persistence.append(\n remoteId,\n message.id,\n parentId,\n \"aui/v0\",\n encoded,\n );\n\n if (this.cloudRef.current.telemetry.enabled) {\n this._maybeReportRun(\n remoteId,\n \"aui/v0\",\n encoded,\n extractRunMessageInfo(message, \"aui/v0\"),\n );\n }\n }\n\n async update(item: ExportedMessageRepositoryItem) {\n if (!this._persistence.isPersisted(item.message.id)) {\n return this.append(item);\n }\n const { message } = item;\n const remoteId = this.aui.threadListItem.getState().remoteId;\n if (!remoteId) return;\n const encoded = auiV0Encode(message);\n await this._persistence.update(remoteId, message.id, \"aui/v0\", encoded);\n\n if (this.cloudRef.current.telemetry.enabled) {\n this._maybeReportRun(\n remoteId,\n \"aui/v0\",\n encoded,\n extractRunMessageInfo(message, \"aui/v0\"),\n );\n }\n }\n\n async delete() {\n throw new Error(\n \"Assistant Cloud does not support deleting thread messages yet.\",\n );\n }\n\n async load() {\n const remoteId = this.aui.threadListItem.getState().remoteId;\n if (!remoteId) return { messages: [] };\n const messages = await this._persistence.load(remoteId, \"aui/v0\");\n // The cloud lists rows newest first, so walking them oldest first puts a\n // parent ahead of its children and a row orphaned by an unreadable parent\n // can be dropped in the same pass; MessageRepository.import throws on a\n // message whose parent is missing.\n const rows = messages\n .filter(\n (m): m is typeof m & { format: \"aui/v0\" } => m.format === \"aui/v0\",\n )\n .reverse();\n\n const loaded: ExportedMessageRepositoryItem[] = [];\n const loadedIds = new Set<string>();\n for (const row of rows) {\n const item = auiV0DecodeSafely(row);\n if (!item) continue;\n if (item.parentId && !loadedIds.has(item.parentId)) continue;\n loadedIds.add(item.message.id);\n loaded.push(item);\n }\n\n return { messages: loaded };\n }\n\n private _reportRunTelemetry<T>(\n format: string,\n runMessages: T[],\n options?: {\n durationMs?: number;\n stepTimestamps?: StepTimestamp[];\n },\n threadListItem?: CloudThreadListItem,\n messageInfo?: RunMessageInfo,\n ) {\n const item = threadListItem ?? this.aui.threadListItem;\n const remoteId = item.getState().remoteId;\n if (!remoteId) return;\n\n const extracted =\n extractRunTelemetry(format, runMessages) ??\n (messageInfo?.status !== undefined\n ? { status: \"incomplete\" as const }\n : undefined);\n if (!extracted) return;\n\n this._sendReport(\n remoteId,\n extracted,\n options?.durationMs,\n options?.stepTimestamps,\n messageInfo,\n this.getPersistence(item),\n );\n }\n\n private _maybeReportRun<T>(\n remoteId: string,\n format: string,\n content: T,\n messageInfo?: RunMessageInfo,\n ) {\n const extracted = extractTelemetry(format, content);\n if (!extracted) return;\n\n this._sendReport(remoteId, extracted, undefined, undefined, messageInfo);\n }\n\n private _sendReport(\n remoteId: string,\n data: RunMessageTelemetry,\n durationMs?: number,\n stepTimestamps?: StepTimestamp[],\n messageInfo?: RunMessageInfo,\n persistence = this._persistence,\n ) {\n const mergedSteps = mergeStepTimestamps(data.steps, stepTimestamps);\n const messageId = messageInfo?.localMessageId\n ? persistence.getResolvedRemoteId(messageInfo.localMessageId)\n : undefined;\n void this.runReporter.report({\n threadId: remoteId,\n status: messageInfo?.status ?? data.status,\n outcome: messageInfo?.outcomeType,\n error: messageInfo?.error,\n errorCode: messageInfo?.errorCode,\n messageId,\n traceId: messageInfo?.traceId,\n modelId: data.modelId,\n provider: messageInfo?.provider,\n usage: data.usage,\n steps: mergedSteps,\n totalSteps: data.totalSteps,\n toolCalls: data.toolCalls,\n durationMs,\n firstTokenMs: messageInfo?.firstTokenMs,\n outputText: data.outputText,\n metadata: data.metadata,\n });\n }\n}\n\ntype StepTimestamp = { start_ms: number; end_ms: number };\n\nfunction mergeStepTimestamps(\n steps: RunReportStepInit[] | undefined,\n timestamps: StepTimestamp[] | undefined,\n): RunReportStepInit[] | undefined {\n if (!timestamps) return steps;\n if (!steps) {\n return timestamps.map(({ start_ms, end_ms }) => ({\n startMs: start_ms,\n endMs: end_ms,\n }));\n }\n\n const len = Math.min(steps.length, timestamps.length);\n return steps.map((step, index) => ({\n ...step,\n ...(index < len\n ? {\n startMs: timestamps[index]!.start_ms,\n endMs: timestamps[index]!.end_ms,\n }\n : undefined),\n }));\n}\n\ntype RunMessageInfo = {\n localMessageId?: string;\n status?: \"completed\" | \"incomplete\" | \"error\";\n outcomeType?: RunReportOutcome;\n error?: string;\n errorCode?: string;\n firstTokenMs?: number;\n traceId?: string;\n provider?: string;\n};\n\nfunction extractLastRunMessageInfo<\n TMessage,\n TStorageFormat extends Record<string, unknown>,\n>(\n items: MessageFormatItem<TMessage>[],\n formatAdapter: MessageFormatAdapter<TMessage, TStorageFormat>,\n): RunMessageInfo | undefined {\n for (let i = items.length - 1; i >= 0; i--) {\n const item = items[i]!;\n const info = extractRunMessageInfo(\n item.message,\n formatAdapter.format,\n formatAdapter.getId(item.message),\n );\n if (info) return info;\n }\n return undefined;\n}\n\nfunction mergeRunMessageInfo(\n stored: RunMessageInfo | undefined,\n observed: RunMessageInfo | undefined,\n): RunMessageInfo | undefined {\n if (!observed) return stored;\n const { localMessageId: _observedId, ...outcome } = observed;\n return { ...stored, ...outcome };\n}\n\nfunction extractRunMessageInfo(\n message: unknown,\n format: string,\n localMessageId?: string,\n): RunMessageInfo | undefined {\n if (!isRecord(message) || message.role !== \"assistant\") return undefined;\n\n const status = isRecord(message.status) ? message.status : undefined;\n const metadata = isRecord(message.metadata) ? message.metadata : undefined;\n const custom = isRecord(metadata?.custom) ? metadata.custom : undefined;\n const timing = isRecord(metadata?.timing) ? metadata.timing : undefined;\n const firstTokenTime = timing?.firstTokenTime;\n const firstTokenMs =\n typeof firstTokenTime === \"number\" && Number.isFinite(firstTokenTime)\n ? Math.round(firstTokenTime)\n : undefined;\n const finishReason =\n status?.type === \"incomplete\"\n ? typeof status.reason === \"string\"\n ? status.reason\n : undefined\n : typeof metadata?.finishReason === \"string\"\n ? metadata.finishReason\n : undefined;\n const failed = status?.type === \"incomplete\" && status.reason === \"error\";\n const outcome = deriveRunOutcome({ finishReason, isError: failed });\n const outcomeType = outcome.outcome;\n const runStatus =\n outcome.status === \"error\"\n ? \"error\"\n : status?.type === \"incomplete\"\n ? \"incomplete\"\n : finishReason !== undefined\n ? outcome.status\n : undefined;\n const failure = failed ? describeRunError(status.error) : {};\n const messageId =\n localMessageId ?? (typeof message.id === \"string\" ? message.id : undefined);\n const traceId =\n format === \"aui/v0\"\n ? custom?.traceId\n : format === \"ai-sdk/v6\"\n ? metadata?.traceId\n : undefined;\n const provider =\n typeof custom?.provider === \"string\"\n ? custom.provider\n : typeof metadata?.provider === \"string\"\n ? metadata.provider\n : undefined;\n\n return {\n ...(messageId ? { localMessageId: messageId } : undefined),\n ...(runStatus !== undefined ? { status: runStatus } : undefined),\n ...(outcomeType ? { outcomeType } : undefined),\n ...failure,\n ...(firstTokenMs != null && firstTokenMs >= 0\n ? { firstTokenMs }\n : undefined),\n ...(typeof traceId === \"string\" ? { traceId } : undefined),\n ...(provider !== undefined ? { provider } : undefined),\n };\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return value !== null && typeof value === \"object\";\n}\n\nfunction extractTelemetry<T>(\n format: string,\n content: T,\n): RunMessageTelemetry | null {\n switch (format) {\n case \"aui/v0\":\n return extractAuiV0(content);\n case \"ai-sdk/v6\":\n return extractAISDKRunTelemetry([content as AISDKMessageLike]);\n default:\n return null;\n }\n}\n\nfunction extractRunTelemetry<T>(\n format: string,\n runMessages: T[],\n): RunMessageTelemetry | null {\n if (format === \"ai-sdk/v6\") {\n return extractAISDKRunTelemetry(runMessages as AISDKMessageLike[]);\n }\n for (let i = runMessages.length - 1; i >= 0; i--) {\n const result = extractTelemetry(format, runMessages[i]!);\n if (result) return result;\n }\n return null;\n}\n\nexport function extractAuiV0<T>(content: T): RunMessageTelemetry | null {\n const msg = content as {\n role?: string;\n status?: { type: string; reason?: string };\n content?: readonly {\n type: string;\n text?: string;\n toolName?: string;\n toolCallId?: string;\n args?: unknown;\n argsText?: string;\n result?: unknown;\n }[];\n metadata?: {\n modelId?: string;\n steps?: readonly { usage?: RunTelemetryUsageInit }[];\n custom?: Record<string, unknown> & { modelId?: string };\n };\n };\n\n if (msg.role !== \"assistant\") return null;\n // A paused (requires-action) write is not a finished run; reporting it would\n // mislabel it \"completed\" and double-count steps once the terminal write reports.\n if (msg.status?.type === \"requires-action\") return null;\n\n const toolCalls = msg.content\n ?.filter((p) => p.type === \"tool-call\" && p.toolName && p.toolCallId)\n .map((p) =>\n createRunTelemetryToolCall({\n toolName: p.toolName!,\n toolCallId: p.toolCallId!,\n args: p.args,\n result: p.result,\n argsText: p.argsText,\n }),\n );\n\n const textParts = msg.content?.filter((p) => p.type === \"text\" && p.text);\n const outputText =\n textParts && textParts.length > 0\n ? truncateRunTelemetryText(textParts.map((p) => p.text).join(\"\"))\n : undefined;\n\n const steps = msg.metadata?.steps;\n let inputTokens: number | undefined;\n let outputTokens: number | undefined;\n let reasoningTokens: number | undefined;\n let cachedInputTokens: number | undefined;\n if (steps && steps.length > 0) {\n let totalInput = 0;\n let totalOutput = 0;\n let totalReasoning = 0;\n let totalCachedInput = 0;\n let hasInput = false;\n let hasOutput = false;\n let hasReasoning = false;\n let hasCachedInput = false;\n for (const step of steps) {\n if (!step.usage) continue;\n const usage = normalizeRunTelemetryUsage(step.usage);\n if (!usage) continue;\n if (usage.inputTokens != null) {\n totalInput += usage.inputTokens;\n hasInput = true;\n }\n if (usage.outputTokens != null) {\n totalOutput += usage.outputTokens;\n hasOutput = true;\n }\n if (usage.reasoningTokens != null) {\n totalReasoning += usage.reasoningTokens;\n hasReasoning = true;\n }\n if (usage.cachedInputTokens != null) {\n totalCachedInput += usage.cachedInputTokens;\n hasCachedInput = true;\n }\n }\n inputTokens = hasInput ? totalInput : undefined;\n outputTokens = hasOutput ? totalOutput : undefined;\n reasoningTokens = hasReasoning ? totalReasoning : undefined;\n cachedInputTokens = hasCachedInput ? totalCachedInput : undefined;\n }\n\n const status = msg.status?.type === \"incomplete\" ? \"incomplete\" : \"completed\";\n\n const metadata = msg.metadata?.custom as Record<string, unknown> | undefined;\n const modelId = extractRunTelemetryModelId(\n msg.metadata as Record<string, unknown> | undefined,\n );\n\n const telemetrySteps: RunReportStepInit[] | undefined =\n steps && steps.length > 0\n ? steps.map((step) => (step.usage ? { usage: step.usage } : {}))\n : undefined;\n\n return {\n status,\n ...(toolCalls && toolCalls.length > 0 ? { toolCalls } : undefined),\n ...(steps?.length ? { totalSteps: steps.length } : undefined),\n ...(inputTokens != null ||\n outputTokens != null ||\n reasoningTokens != null ||\n cachedInputTokens != null\n ? {\n usage: {\n ...(inputTokens != null ? { inputTokens } : undefined),\n ...(outputTokens != null ? { outputTokens } : undefined),\n ...(reasoningTokens != null ? { reasoningTokens } : undefined),\n ...(cachedInputTokens != null ? { cachedInputTokens } : undefined),\n },\n }\n : undefined),\n ...(outputText != null ? { outputText } : undefined),\n ...(metadata ? { metadata } : undefined),\n ...(telemetrySteps ? { steps: telemetrySteps } : undefined),\n ...(modelId ? { modelId } : undefined),\n };\n}\n\nexport function useAssistantCloudThreadHistoryAdapter(\n cloudRef: RefObject<AssistantCloud>,\n): ThreadHistoryAdapter & { readonly feedback: FeedbackAdapter } {\n const aui = useAui();\n // Not useEffectEvent: history adapter methods run during render (SSR load).\n const auiRef = useRef(aui);\n useEffect(() => {\n auiRef.current = aui;\n });\n const [adapter] = useState(\n () =>\n new AssistantCloudThreadHistoryAdapter(cloudRef, () => auiRef.current),\n );\n useAssistantCloudEngagementEvents(adapter, aui);\n return adapter;\n}\n\ntype RootEngagementTracker = {\n count: number;\n engagementReporter: CloudEngagementReporter;\n dispose: () => void;\n};\n\nconst rootEngagementTrackers = new WeakMap<\n AssistantClient,\n RootEngagementTracker\n>();\n\n/**\n * Thread switches are a thread list event, so one subscription per assistant\n * client reports them; every thread runtime mounted under it shares the\n * subscription and the last one to unmount removes it.\n */\nconst useRootEngagementEvents = (\n adapter: AssistantCloudThreadHistoryAdapter,\n aui: AssistantClient,\n) => {\n useEffect(() => {\n let tracker = rootEngagementTrackers.get(aui);\n if (!tracker) {\n const created: RootEngagementTracker = {\n count: 0,\n engagementReporter: adapter.engagementReporter,\n dispose: () => {},\n };\n created.dispose = aui.on(\n { scope: \"*\", event: \"threads.selectionChanged\" },\n (payload) => {\n created.engagementReporter.threadSwitched(payload.threadId);\n },\n );\n rootEngagementTrackers.set(aui, created);\n tracker = created;\n }\n const active = tracker;\n active.engagementReporter = adapter.engagementReporter;\n active.count += 1;\n return () => {\n active.count -= 1;\n if (active.count === 0) {\n active.dispose();\n rootEngagementTrackers.delete(aui);\n }\n };\n }, [adapter, aui]);\n};\n\nconst useAssistantCloudEngagementEvents = (\n adapter: AssistantCloudThreadHistoryAdapter,\n aui: AssistantClient,\n) => {\n useRootEngagementEvents(adapter, aui);\n\n useEffect(() => {\n const reporter = adapter.engagementReporter;\n\n const unsubscribers = [\n aui.on({ scope: \"thread\", event: \"composer.send\" }, (payload) => {\n if (payload.messageId) {\n reporter.messageEdited(payload.threadId, {\n messageId: payload.messageId,\n chars: payload.chars,\n });\n } else {\n reporter.messageSent(payload.threadId, {\n chars: payload.chars,\n attachments: payload.attachments,\n });\n }\n if (payload.suggestion) {\n reporter.suggestionClicked(payload.threadId);\n }\n }),\n aui.on(\n { scope: \"thread\", event: \"composer.attachmentAdd\" },\n (payload) => {\n reporter.attachmentAdded(payload.threadId, {\n messageId: payload.messageId,\n contentType: payload.contentType,\n });\n },\n ),\n aui.on(\n { scope: \"thread\", event: \"composer.attachmentAddError\" },\n (payload) => {\n reporter.attachmentFailed(payload.threadId, {\n messageId: payload.messageId,\n contentType: payload.contentType,\n });\n },\n ),\n aui.on({ scope: \"thread\", event: \"composer.cancel\" }, (payload) => {\n reporter.runStopped(payload.threadId);\n }),\n aui.on({ scope: \"thread\", event: \"thread.runStart\" }, (payload) => {\n reporter.runStarted(payload.threadId);\n }),\n aui.on({ scope: \"thread\", event: \"thread.runEnd\" }, (payload) => {\n reporter.runEnded(payload.threadId);\n }),\n aui.on({ scope: \"thread\", event: \"thread.cancelRun\" }, (payload) => {\n reporter.runStopped(payload.threadId);\n }),\n aui.on({ scope: \"thread\", event: \"thread.voiceStarted\" }, (payload) => {\n reporter.voiceStarted(payload.threadId);\n }),\n aui.on({ scope: \"thread\", event: \"message.reload\" }, (payload) => {\n reporter.messageRegenerated(payload.threadId, payload.messageId);\n }),\n aui.on(\n { scope: \"thread\", event: \"message.branchSwitched\" },\n (payload) => {\n reporter.branchSwitched(payload.threadId, payload.messageId);\n },\n ),\n aui.on({ scope: \"thread\", event: \"message.copied\" }, (payload) => {\n reporter.messageCopied(payload.threadId, payload.messageId);\n }),\n aui.on(\n { scope: \"thread\", event: \"thread.toolApprovalAnswered\" },\n (payload) => {\n if (payload.approved) {\n reporter.toolApproved(\n payload.threadId,\n payload.messageId,\n payload.toolCallId,\n payload.toolName,\n );\n } else {\n reporter.toolRejected(\n payload.threadId,\n payload.messageId,\n payload.toolCallId,\n payload.toolName,\n );\n }\n },\n ),\n aui.on({ scope: \"thread\", event: \"message.speak\" }, (payload) => {\n reporter.speechStarted(payload.threadId, payload.messageId);\n }),\n aui.on({ scope: \"thread\", event: \"message.error\" }, (payload) => {\n reporter.errorShown(payload.threadId, {\n messageId: payload.messageId,\n reason: payload.reason,\n });\n }),\n ];\n\n return () => {\n for (const unsubscribe of unsubscribers) unsubscribe();\n };\n }, [adapter, aui]);\n\n useEffect(() => {\n const reportSuggestions = () => {\n const { mainThreadId } = aui.threads.getState();\n if (aui.threadListItem.getState().id !== mainThreadId) return;\n const { isEmpty, suggestions } = aui.thread.getState();\n if (!isEmpty || suggestions.length === 0) return;\n adapter.engagementReporter.suggestionsShown(\n mainThreadId,\n suggestions.length,\n );\n };\n\n reportSuggestions();\n return aui.subscribe(reportSuggestions);\n }, [adapter, aui]);\n};\n"],"mappings":"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"}
@@ -2,12 +2,13 @@ import { Attachment, CompleteAttachment, PendingAttachment } from "../../../type
2
2
  import { AttachmentAdapter } from "../../../adapters/attachment.js";
3
3
  import { AssistantCloud } from "assistant-cloud";
4
4
  //#region src/react/runtimes/cloud/CloudFileAttachmentAdapter.d.ts
5
- declare class CloudFileAttachmentAdapter implements AttachmentAdapter {
5
+ export declare class CloudFileAttachmentAdapter implements AttachmentAdapter {
6
6
  accept: string;
7
7
  private getCloud;
8
8
  constructor(cloud: AssistantCloud);
9
9
  constructor(getCloud: () => AssistantCloud);
10
10
  private uploadedUrls;
11
+ private activeUploads;
11
12
  add({ file }: {
12
13
  file: File;
13
14
  }): AsyncGenerator<PendingAttachment, void>;
@@ -15,5 +16,4 @@ declare class CloudFileAttachmentAdapter implements AttachmentAdapter {
15
16
  send(attachment: PendingAttachment): Promise<CompleteAttachment>;
16
17
  }
17
18
  //#endregion
18
- export { CloudFileAttachmentAdapter };
19
19
  //# sourceMappingURL=CloudFileAttachmentAdapter.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"CloudFileAttachmentAdapter.d.ts","names":[],"sources":["../../../../src/react/runtimes/cloud/CloudFileAttachmentAdapter.ts"],"mappings":";;;;cAkBa,sCAAsC;EAC1C;UAEC;EAEI,YAAA,OAAO;EACP,YAAA,gBAAgB;UAKpB;EAEM,MACZ;IAEA,MAAM;MACJ,eAAe;EAmDN,OAAO,YAAY,aAAa;EAIhC,KACX,YAAY,oBACX,QAAQ"}
1
+ {"version":3,"file":"CloudFileAttachmentAdapter.d.ts","names":[],"sources":["../../../../src/react/runtimes/cloud/CloudFileAttachmentAdapter.ts"],"mappings":";;;;qBAkBa,sCAAsC;EAC1C;UAEC;EAEI,YAAA,OAAO;EACP,YAAA,gBAAgB;UAKpB;UACA;EAKM,MACZ;IAEA,MAAM;MACJ,eAAe;EAmEN,OAAO,YAAY,aAAa;EAUhC,KACX,YAAY,oBACX,QAAQ"}
@@ -12,6 +12,7 @@ var CloudFileAttachmentAdapter = class {
12
12
  this.getCloud = typeof cloud === "function" ? cloud : () => cloud;
13
13
  }
14
14
  uploadedUrls = /* @__PURE__ */ new Map();
15
+ activeUploads = /* @__PURE__ */ new Map();
15
16
  async *add({ file }) {
16
17
  const id = generateId();
17
18
  let attachment = {
@@ -26,15 +27,25 @@ var CloudFileAttachmentAdapter = class {
26
27
  progress: 0
27
28
  }
28
29
  };
29
- yield attachment;
30
+ const controller = new AbortController();
31
+ const upload = {
32
+ cancelled: false,
33
+ controller
34
+ };
35
+ this.activeUploads.set(id, upload);
30
36
  try {
37
+ yield attachment;
38
+ if (upload.cancelled) return;
31
39
  const { signedUrl, publicUrl } = await this.getCloud().files.generatePresignedUploadUrl({ filename: file.name });
40
+ if (upload.cancelled) return;
32
41
  const res = await fetch(signedUrl, {
33
42
  method: "PUT",
34
43
  body: file,
35
44
  headers: { "Content-Type": file.type },
36
- mode: "cors"
45
+ mode: "cors",
46
+ signal: controller.signal
37
47
  });
48
+ if (upload.cancelled) return;
38
49
  if (!res.ok) throw new Error(`Failed to upload file: ${res.status} ${res.statusText}`);
39
50
  this.uploadedUrls.set(id, publicUrl);
40
51
  attachment = {
@@ -46,6 +57,7 @@ var CloudFileAttachmentAdapter = class {
46
57
  };
47
58
  yield attachment;
48
59
  } catch (error) {
60
+ if (upload.cancelled) return;
49
61
  console.error("[assistant-ui] Failed to upload attachment:", error);
50
62
  attachment = {
51
63
  ...attachment,
@@ -56,9 +68,17 @@ var CloudFileAttachmentAdapter = class {
56
68
  }
57
69
  };
58
70
  yield attachment;
71
+ } finally {
72
+ if (this.activeUploads.get(id) === upload) this.activeUploads.delete(id);
59
73
  }
60
74
  }
61
75
  async remove(attachment) {
76
+ const upload = this.activeUploads.get(attachment.id);
77
+ if (upload) {
78
+ upload.cancelled = true;
79
+ upload.controller.abort();
80
+ this.activeUploads.delete(attachment.id);
81
+ }
62
82
  this.uploadedUrls.delete(attachment.id);
63
83
  }
64
84
  async send(attachment) {
@@ -1 +1 @@
1
- {"version":3,"file":"CloudFileAttachmentAdapter.js","names":["AssistantCloud","Attachment","PendingAttachment","CompleteAttachment","ThreadUserMessagePart","AttachmentAdapter","generateId","guessAttachmentType","contentType","startsWith","CloudFileAttachmentAdapter","accept","getCloud","constructor","cloud","uploadedUrls","Map","add","file","File","AsyncGenerator","id","type","attachment","name","status","reason","progress","signedUrl","publicUrl","files","generatePresignedUploadUrl","filename","res","fetch","method","body","headers","mode","ok","Error","statusText","set","error","console","message","String","remove","Promise","delete","send","url","get","content","image","data","mimeType"],"sources":["../../../../src/react/runtimes/cloud/CloudFileAttachmentAdapter.ts"],"sourcesContent":["import type { AssistantCloud } from \"assistant-cloud\";\nimport type {\n Attachment,\n PendingAttachment,\n CompleteAttachment,\n} from \"../../../types/attachment\";\nimport type { ThreadUserMessagePart } from \"../../../types/message\";\nimport type { AttachmentAdapter } from \"../../../adapters/attachment\";\nimport { generateId } from \"../../../utils/id\";\n\nconst guessAttachmentType = (\n contentType: string,\n): \"image\" | \"document\" | \"file\" => {\n if (contentType.startsWith(\"image/\")) return \"image\";\n if (contentType.startsWith(\"text/\")) return \"document\";\n return \"file\";\n};\n\nexport class CloudFileAttachmentAdapter implements AttachmentAdapter {\n public accept = \"*\";\n\n private getCloud: () => AssistantCloud;\n\n constructor(cloud: AssistantCloud);\n constructor(getCloud: () => AssistantCloud);\n constructor(cloud: AssistantCloud | (() => AssistantCloud)) {\n this.getCloud = typeof cloud === \"function\" ? cloud : () => cloud;\n }\n\n private uploadedUrls = new Map<string, string>();\n\n public async *add({\n file,\n }: {\n file: File;\n }): AsyncGenerator<PendingAttachment, void> {\n const id = generateId();\n const type = guessAttachmentType(file.type);\n let attachment: PendingAttachment = {\n id,\n type,\n name: file.name,\n contentType: file.type,\n file,\n status: { type: \"running\", reason: \"uploading\", progress: 0 },\n };\n yield attachment;\n\n try {\n const { signedUrl, publicUrl } =\n await this.getCloud().files.generatePresignedUploadUrl({\n filename: file.name,\n });\n const res = await fetch(signedUrl, {\n method: \"PUT\",\n body: file,\n headers: {\n \"Content-Type\": file.type,\n },\n mode: \"cors\",\n });\n if (!res.ok) {\n throw new Error(\n `Failed to upload file: ${res.status} ${res.statusText}`,\n );\n }\n this.uploadedUrls.set(id, publicUrl);\n attachment = {\n ...attachment,\n status: { type: \"requires-action\", reason: \"composer-send\" },\n };\n yield attachment;\n } catch (error) {\n console.error(\"[assistant-ui] Failed to upload attachment:\", error);\n attachment = {\n ...attachment,\n status: {\n type: \"incomplete\",\n reason: \"error\",\n message: error instanceof Error ? error.message : String(error),\n },\n };\n yield attachment;\n }\n }\n\n public async remove(attachment: Attachment): Promise<void> {\n this.uploadedUrls.delete(attachment.id);\n }\n\n public async send(\n attachment: PendingAttachment,\n ): Promise<CompleteAttachment> {\n const url = this.uploadedUrls.get(attachment.id);\n if (!url) throw new Error(\"Attachment not uploaded\");\n this.uploadedUrls.delete(attachment.id);\n\n let content: ThreadUserMessagePart[];\n if (attachment.type === \"image\") {\n content = [{ type: \"image\", image: url, filename: attachment.name }];\n } else {\n content = [\n {\n type: \"file\",\n data: url,\n mimeType: attachment.contentType ?? \"\",\n filename: attachment.name,\n },\n ];\n }\n\n return {\n ...attachment,\n status: { type: \"complete\" },\n content,\n };\n }\n}\n"],"mappings":";;AAUA,MAAMO,uBACJC,gBACkC;CAClC,IAAIA,YAAYC,WAAW,QAAQ,GAAG,OAAO;CAC7C,IAAID,YAAYC,WAAW,OAAO,GAAG,OAAO;CAC5C,OAAO;AACT;AAEA,IAAaC,6BAAb,MAAqE;CACnE,SAAgB;CAEhB;CAIAG,YAAYC,OAAgD;EAC1D,KAAKF,WAAW,OAAOE,UAAU,aAAaA,cAAcA;CAC9D;CAEA,+BAAuB,IAAIE,IAAoB;CAE/C,OAAcC,IAAI,EAChBC,QAG0C;EAC1C,MAAMG,KAAKf,WAAW;EAEtB,IAAIiB,aAAgC;GAClCF;GACAC,MAHWf,oBAAoBW,KAAKI,IAGpCA;GACAE,MAAMN,KAAKM;GACXhB,aAAaU,KAAKI;GAClBJ;GACAO,QAAQ;IAAEH,MAAM;IAAWI,QAAQ;IAAaC,UAAU;GAAE;EAC9D;EACA,MAAMJ;EAEN,IAAI;GACF,MAAM,EAAEK,WAAWC,cACjB,MAAM,KAAKjB,SAAS,CAAC,CAACkB,MAAMC,2BAA2B,EACrDC,UAAUd,KAAKM,KACjB,CAAC;GACH,MAAMS,MAAM,MAAMC,MAAMN,WAAW;IACjCO,QAAQ;IACRC,MAAMlB;IACNmB,SAAS,EACP,gBAAgBnB,KAAKI,KACvB;IACAgB,MAAM;GACR,CAAC;GACD,IAAI,CAACL,IAAIM,IACP,MAAM,IAAIC,MACR,0BAA0BP,IAAIR,OAAM,GAAIQ,IAAIQ,YAC9C;GAEF,KAAK1B,aAAa2B,IAAIrB,IAAIQ,SAAS;GACnCN,aAAa;IACX,GAAGA;IACHE,QAAQ;KAAEH,MAAM;KAAmBI,QAAQ;IAAgB;GAC7D;GACA,MAAMH;EACR,SAASoB,OAAO;GACdC,QAAQD,MAAM,+CAA+CA,KAAK;GAClEpB,aAAa;IACX,GAAGA;IACHE,QAAQ;KACNH,MAAM;KACNI,QAAQ;KACRmB,SAASF,iBAAiBH,QAAQG,MAAME,UAAUC,OAAOH,KAAK;IAChE;GACF;GACA,MAAMpB;EACR;CACF;CAEA,MAAawB,OAAOxB,YAAuC;EACzD,KAAKR,aAAakC,OAAO1B,WAAWF,EAAE;CACxC;CAEA,MAAa6B,KACX3B,YAC6B;EAC7B,MAAM4B,MAAM,KAAKpC,aAAaqC,IAAI7B,WAAWF,EAAE;EAC/C,IAAI,CAAC8B,KAAK,MAAM,IAAIX,MAAM,yBAAyB;EACnD,KAAKzB,aAAakC,OAAO1B,WAAWF,EAAE;EAEtC,IAAIgC;EACJ,IAAI9B,WAAWD,SAAS,SACtB+B,UAAU,CAAC;GAAE/B,MAAM;GAASgC,OAAOH;GAAKnB,UAAUT,WAAWC;EAAK,CAAC;OAEnE6B,UAAU,CACR;GACE/B,MAAM;GACNiC,MAAMJ;GACNK,UAAUjC,WAAWf,eAAe;GACpCwB,UAAUT,WAAWC;EACvB,CAAC;EAIL,OAAO;GACL,GAAGD;GACHE,QAAQ,EAAEH,MAAM,WAAW;GAC3B+B;EACF;CACF;AACF"}
1
+ {"version":3,"file":"CloudFileAttachmentAdapter.js","names":["AssistantCloud","Attachment","PendingAttachment","CompleteAttachment","ThreadUserMessagePart","AttachmentAdapter","generateId","guessAttachmentType","contentType","startsWith","CloudFileAttachmentAdapter","accept","getCloud","constructor","cloud","uploadedUrls","Map","activeUploads","cancelled","controller","AbortController","add","file","File","AsyncGenerator","id","type","attachment","name","status","reason","progress","upload","set","signedUrl","publicUrl","files","generatePresignedUploadUrl","filename","res","fetch","method","body","headers","mode","signal","ok","Error","statusText","error","console","message","String","get","delete","remove","Promise","abort","send","url","content","image","data","mimeType"],"sources":["../../../../src/react/runtimes/cloud/CloudFileAttachmentAdapter.ts"],"sourcesContent":["import type { AssistantCloud } from \"assistant-cloud\";\nimport type {\n Attachment,\n PendingAttachment,\n CompleteAttachment,\n} from \"../../../types/attachment\";\nimport type { ThreadUserMessagePart } from \"../../../types/message\";\nimport type { AttachmentAdapter } from \"../../../adapters/attachment\";\nimport { generateId } from \"../../../utils/id\";\n\nconst guessAttachmentType = (\n contentType: string,\n): \"image\" | \"document\" | \"file\" => {\n if (contentType.startsWith(\"image/\")) return \"image\";\n if (contentType.startsWith(\"text/\")) return \"document\";\n return \"file\";\n};\n\nexport class CloudFileAttachmentAdapter implements AttachmentAdapter {\n public accept = \"*\";\n\n private getCloud: () => AssistantCloud;\n\n constructor(cloud: AssistantCloud);\n constructor(getCloud: () => AssistantCloud);\n constructor(cloud: AssistantCloud | (() => AssistantCloud)) {\n this.getCloud = typeof cloud === \"function\" ? cloud : () => cloud;\n }\n\n private uploadedUrls = new Map<string, string>();\n private activeUploads = new Map<\n string,\n { cancelled: boolean; controller: AbortController }\n >();\n\n public async *add({\n file,\n }: {\n file: File;\n }): AsyncGenerator<PendingAttachment, void> {\n const id = generateId();\n const type = guessAttachmentType(file.type);\n let attachment: PendingAttachment = {\n id,\n type,\n name: file.name,\n contentType: file.type,\n file,\n status: { type: \"running\", reason: \"uploading\", progress: 0 },\n };\n const controller = new AbortController();\n const upload = { cancelled: false, controller };\n this.activeUploads.set(id, upload);\n\n try {\n yield attachment;\n if (upload.cancelled) return;\n\n const { signedUrl, publicUrl } =\n await this.getCloud().files.generatePresignedUploadUrl({\n filename: file.name,\n });\n if (upload.cancelled) return;\n\n const res = await fetch(signedUrl, {\n method: \"PUT\",\n body: file,\n headers: {\n \"Content-Type\": file.type,\n },\n mode: \"cors\",\n signal: controller.signal,\n });\n if (upload.cancelled) return;\n\n if (!res.ok) {\n throw new Error(\n `Failed to upload file: ${res.status} ${res.statusText}`,\n );\n }\n this.uploadedUrls.set(id, publicUrl);\n attachment = {\n ...attachment,\n status: { type: \"requires-action\", reason: \"composer-send\" },\n };\n yield attachment;\n } catch (error) {\n if (upload.cancelled) return;\n\n console.error(\"[assistant-ui] Failed to upload attachment:\", error);\n attachment = {\n ...attachment,\n status: {\n type: \"incomplete\",\n reason: \"error\",\n message: error instanceof Error ? error.message : String(error),\n },\n };\n yield attachment;\n } finally {\n if (this.activeUploads.get(id) === upload) {\n this.activeUploads.delete(id);\n }\n }\n }\n\n public async remove(attachment: Attachment): Promise<void> {\n const upload = this.activeUploads.get(attachment.id);\n if (upload) {\n upload.cancelled = true;\n upload.controller.abort();\n this.activeUploads.delete(attachment.id);\n }\n this.uploadedUrls.delete(attachment.id);\n }\n\n public async send(\n attachment: PendingAttachment,\n ): Promise<CompleteAttachment> {\n const url = this.uploadedUrls.get(attachment.id);\n if (!url) throw new Error(\"Attachment not uploaded\");\n this.uploadedUrls.delete(attachment.id);\n\n let content: ThreadUserMessagePart[];\n if (attachment.type === \"image\") {\n content = [{ type: \"image\", image: url, filename: attachment.name }];\n } else {\n content = [\n {\n type: \"file\",\n data: url,\n mimeType: attachment.contentType ?? \"\",\n filename: attachment.name,\n },\n ];\n }\n\n return {\n ...attachment,\n status: { type: \"complete\" },\n content,\n };\n }\n}\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { MessageStatus, SourceProviderMetadata, ThreadMessage, ToolApprovalDisplay, ToolApprovalOption } from "../../../types/message.js";
1
+ import { MessageStatus, ReasoningMessagePart, SourceProviderMetadata, ThreadMessage, ToolApprovalDisplay, ToolApprovalOption, ToolCallMessagePartMcpMetadata, ToolCallTiming } from "../../../types/message.js";
2
2
  import { CompleteAttachment } from "../../../types/attachment.js";
3
3
  import { ExportedMessageRepositoryItem } from "../../../runtime/utils/message-repository.js";
4
4
  import { ReadonlyJSONObject, ReadonlyJSONValue } from "assistant-stream/utils";
@@ -20,10 +20,13 @@ type AuiV0ToolApproval = {
20
20
  type AuiV0MessagePart = {
21
21
  readonly type: "text";
22
22
  readonly text: string;
23
+ readonly parentId?: string;
23
24
  } | {
24
25
  readonly type: "reasoning";
25
26
  readonly text: string;
26
27
  readonly unstable_summary?: string;
28
+ readonly providerMetadata?: NonNullable<ReasoningMessagePart["providerMetadata"]>;
29
+ readonly parentId?: string;
27
30
  } | {
28
31
  readonly type: "source";
29
32
  readonly sourceType: "url";
@@ -31,6 +34,7 @@ type AuiV0MessagePart = {
31
34
  readonly url: string;
32
35
  readonly title?: string;
33
36
  readonly providerMetadata?: SourceProviderMetadata;
37
+ readonly parentId?: string;
34
38
  } | {
35
39
  readonly type: "source";
36
40
  readonly sourceType: "document";
@@ -39,23 +43,12 @@ type AuiV0MessagePart = {
39
43
  readonly mediaType: string;
40
44
  readonly filename?: string;
41
45
  readonly providerMetadata?: SourceProviderMetadata;
42
- } | {
43
- readonly type: "tool-call";
44
- readonly toolCallId: string;
45
- readonly toolName: string;
46
+ readonly parentId?: string;
47
+ } | (AuiV0ToolCallPart & ({
46
48
  readonly args: ReadonlyJSONObject;
47
- readonly result?: ReadonlyJSONValue;
48
- readonly isError?: true;
49
- readonly approval?: AuiV0ToolApproval;
50
49
  } | {
51
- readonly type: "tool-call";
52
- readonly toolCallId: string;
53
- readonly toolName: string;
54
50
  readonly argsText: string;
55
- readonly result?: ReadonlyJSONValue;
56
- readonly isError?: true;
57
- readonly approval?: AuiV0ToolApproval;
58
- } | {
51
+ })) | {
59
52
  readonly type: "image";
60
53
  readonly image: string;
61
54
  } | {
@@ -64,14 +57,43 @@ type AuiV0MessagePart = {
64
57
  readonly mimeType: string;
65
58
  readonly filename?: string;
66
59
  readonly sourceType?: "url" | "id";
60
+ readonly parentId?: string;
67
61
  } | {
68
62
  readonly type: "data";
69
63
  readonly name: string;
70
64
  readonly data: ReadonlyJSONValue;
65
+ } | {
66
+ readonly type: "audio";
67
+ readonly audio: {
68
+ readonly data: string;
69
+ readonly format: "mp3" | "wav";
70
+ };
71
+ } | {
72
+ readonly type: "generative-ui";
73
+ readonly spec: ReadonlyJSONObject;
74
+ readonly id?: string;
75
+ readonly parentId?: string;
76
+ };
77
+ type AuiV0ToolCallPart = {
78
+ readonly type: "tool-call";
79
+ readonly toolCallId: string;
80
+ readonly toolName: string;
81
+ readonly result?: ReadonlyJSONValue;
82
+ readonly isError?: true;
83
+ readonly interrupt?: {
84
+ readonly type: "human";
85
+ readonly payload: ReadonlyJSONValue;
86
+ };
87
+ readonly timing?: ToolCallTiming;
88
+ readonly mcp?: ToolCallMessagePartMcpMetadata;
89
+ readonly approval?: AuiV0ToolApproval;
90
+ readonly parentId?: string;
91
+ readonly messages?: readonly AuiV0Message[];
71
92
  };
72
93
  type AuiV0AttachmentPart = {
73
94
  readonly type: "text";
74
95
  readonly text: string;
96
+ readonly parentId?: string;
75
97
  } | {
76
98
  readonly type: "image";
77
99
  readonly image: string;
@@ -82,6 +104,7 @@ type AuiV0AttachmentPart = {
82
104
  readonly mimeType: string;
83
105
  readonly filename?: string;
84
106
  readonly sourceType?: "url" | "id";
107
+ readonly parentId?: string;
85
108
  } | {
86
109
  readonly type: "audio";
87
110
  readonly audio: {
@@ -102,6 +125,8 @@ type AuiV0Attachment = {
102
125
  readonly content: readonly AuiV0AttachmentPart[];
103
126
  };
104
127
  type AuiV0Message = {
128
+ readonly id?: string;
129
+ readonly createdAt?: string;
105
130
  readonly role: "assistant" | "user" | "system";
106
131
  readonly status?: MessageStatus;
107
132
  readonly content: readonly AuiV0MessagePart[];
@@ -119,10 +144,18 @@ type AuiV0Message = {
119
144
  readonly custom: ReadonlyJSONObject;
120
145
  };
121
146
  };
122
- declare function auiV0Encode(message: ThreadMessage): AuiV0Message;
123
- declare function auiV0Decode(cloudMessage: CloudMessage & {
147
+ export declare function auiV0Encode(message: ThreadMessage): AuiV0Message;
148
+ /**
149
+ * Decodes a stored row, dropping the parts, attachments and nested messages
150
+ * that cannot be read back instead of rejecting the row, and returning null
151
+ * when the row itself is unreadable. Loading a thread must not fail because a
152
+ * single stored row is malformed.
153
+ */
154
+ export declare function auiV0DecodeSafely(cloudMessage: CloudMessage & {
155
+ format: "aui/v0";
156
+ }): ExportedMessageRepositoryItem | null;
157
+ export declare function auiV0Decode(cloudMessage: CloudMessage & {
124
158
  format: "aui/v0";
125
159
  }): ExportedMessageRepositoryItem;
126
160
  //#endregion
127
- export { auiV0Decode, auiV0Encode };
128
161
  //# sourceMappingURL=auiV0.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"auiV0.d.ts","names":[],"sources":["../../../../src/react/runtimes/cloud/auiV0.ts"],"mappings":";;;;;;KAiBK;WACM;WACA;WACA,UAAU;WACV;WACA;WACA;WACA;WACA,mBAAmB;WACnB;WACA;WACA;;KAGN;WAEU;WACA;;WAGA;WACA;WACA;;WAGA;WACA;WACA;WACA;WACA;WACA,mBAAmB;;WAGnB;WACA;WACA;WACA;WACA;WACA;WACA,mBAAmB;;WAGnB;WACA;WACA;WACA,MAAM;WACN,SAAS;WACT;WACA,WAAW;;WAGX;WACA;WACA;WACA;WACA,SAAS;WACT;WACA,WAAW;;WAGX;WACA;;WAGA;WACA;WACA;WACA;WACA;;WAGA;WACA;WACA,MAAM;;KAGhB;WAEU;WACA;;WAGA;WACA;WACA;;WAGA;WACA;WACA;WACA;WACA;;WAGA;WACA;aACE;aACA;;;WAIF;WACA;WACA,MAAM;;KAGhB;WACM;WACA,MAAM;WACN;WACA;WACA,QAAQ;WACR,kBAAkB;;KAGxB;WACM;WACA,SAAS;WACT,kBAAkB;WAClB,uBAAuB;WACvB;aACE,iBAAiB;aACjB,+BAA+B;aAC/B,wBAAwB;aACxB;eACE;iBACE;iBACA;;;aAGJ,QAAQ;;;iBA2EL,YAAY,SAAS,gBAAgB;iBA+GrC,YACd,cAAc;EAAiB;IAC9B"}
1
+ {"version":3,"file":"auiV0.d.ts","names":[],"sources":["../../../../src/react/runtimes/cloud/auiV0.ts"],"mappings":";;;;;;KA8BK;WACM;WACA;WACA,UAAU;WACV;WACA;WACA;WACA;WACA,mBAAmB;WACnB;WACA;WACA;;KAGN;WAEU;WACA;WACA;;WAGA;WACA;WACA;WACA,mBAAmB,YAC1B;WAEO;;WAGA;WACA;WACA;WACA;WACA;WACA,mBAAmB;WACnB;;WAGA;WACA;WACA;WACA;WACA;WACA;WACA,mBAAmB;WACnB;KAEV;WACa,MAAM;;WAAkC;;WAE3C;WACA;;WAGA;WACA;WACA;WACA;WACA;WACA;;WAGA;WACA;WACA,MAAM;;WAGN;WACA;aACE;aACA;;;WAIF;WACA,MAAM;WACN;WACA;;KAGV;WACM;WACA;WACA;WACA,SAAS;WACT;WACA;aACE;aACA,SAAS;;WAEX,SAAS;WACT,MAAM;WACN,WAAW;WACX;WACA,oBAAoB;;KAG1B;WAEU;WACA;WACA;;WAGA;WACA;WACA;;WAGA;WACA;WACA;WACA;WACA;WACA;;WAGA;WACA;aACE;aACA;;;WAIF;WACA;WACA,MAAM;;KAGhB;WACM;WACA,MAAM;WACN;WACA;WACA,QAAQ;WACR,kBAAkB;;KAGxB;WACM;WACA;WACA;WACA,SAAS;WACT,kBAAkB;WAClB,uBAAuB;WACvB;aACE,iBAAiB;aACjB,+BAA+B;aAC/B,wBAAwB;aACxB;eACE;iBACE;iBACA;;;aAGJ,QAAQ;;;wBAoFL,YAAY,SAAS,gBAAgB;;;;;;;wBA4PrC,kBACd,cAAc;EAAiB;IAC9B;wBAyBa,YACd,cAAc;EAAiB;IAC9B"}