@assistant-ui/core 0.3.19 → 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 (664) 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/suggestion.d.ts +5 -6
  12. package/dist/adapters/suggestion.d.ts.map +1 -1
  13. package/dist/adapters/thread-history.d.ts +6 -7
  14. package/dist/adapters/thread-history.d.ts.map +1 -1
  15. package/dist/adapters/trigger.d.ts +1 -2
  16. package/dist/adapters/trigger.d.ts.map +1 -1
  17. package/dist/adapters/voice.d.ts +5 -6
  18. package/dist/adapters/voice.d.ts.map +1 -1
  19. package/dist/internal/duplicate-detection.d.ts +1 -2
  20. package/dist/internal/duplicate-detection.d.ts.map +1 -1
  21. package/dist/model-context/frame/host.d.ts +1 -2
  22. package/dist/model-context/frame/host.d.ts.map +1 -1
  23. package/dist/model-context/frame/provider.d.ts +1 -2
  24. package/dist/model-context/frame/provider.d.ts.map +1 -1
  25. package/dist/model-context/frame/types.d.ts +5 -6
  26. package/dist/model-context/frame/types.d.ts.map +1 -1
  27. package/dist/model-context/interactable-composer-metadata.d.ts +9 -10
  28. package/dist/model-context/interactable-composer-metadata.d.ts.map +1 -1
  29. package/dist/model-context/registry-handles.d.ts +3 -4
  30. package/dist/model-context/registry-handles.d.ts.map +1 -1
  31. package/dist/model-context/registry.d.ts +1 -2
  32. package/dist/model-context/registry.d.ts.map +1 -1
  33. package/dist/model-context/tool-call-text.d.ts +2 -3
  34. package/dist/model-context/tool-call-text.d.ts.map +1 -1
  35. package/dist/model-context/tool.d.ts +2 -3
  36. package/dist/model-context/tool.d.ts.map +1 -1
  37. package/dist/model-context/types.d.ts +8 -9
  38. package/dist/model-context/types.d.ts.map +1 -1
  39. package/dist/react/AssistantProvider.d.ts +3 -4
  40. package/dist/react/AssistantProvider.d.ts.map +1 -1
  41. package/dist/react/AssistantRuntimeProvider.d.ts +1 -2
  42. package/dist/react/AssistantRuntimeProvider.d.ts.map +1 -1
  43. package/dist/react/RuntimeAdapter.d.ts +2 -3
  44. package/dist/react/RuntimeAdapter.d.ts.map +1 -1
  45. package/dist/react/adapters/LocalStorageThreadListAdapter.d.ts +4 -5
  46. package/dist/react/adapters/LocalStorageThreadListAdapter.d.ts.map +1 -1
  47. package/dist/react/adapters/LocalStorageThreadListAdapter.js +20 -34
  48. package/dist/react/adapters/LocalStorageThreadListAdapter.js.map +1 -1
  49. package/dist/react/adapters/TitleGenerationAdapter.d.ts +2 -3
  50. package/dist/react/adapters/TitleGenerationAdapter.d.ts.map +1 -1
  51. package/dist/react/client/AdaptedRemoteThread.d.ts +1 -2
  52. package/dist/react/client/AdaptedRemoteThread.d.ts.map +1 -1
  53. package/dist/react/client/DataRenderers.d.ts +1 -2
  54. package/dist/react/client/DataRenderers.d.ts.map +1 -1
  55. package/dist/react/client/InMemoryThreadList.d.ts +3 -4
  56. package/dist/react/client/InMemoryThreadList.d.ts.map +1 -1
  57. package/dist/react/client/Interactables.d.ts +1 -2
  58. package/dist/react/client/Interactables.d.ts.map +1 -1
  59. package/dist/react/client/RemoteThreadList.d.ts +2 -3
  60. package/dist/react/client/RemoteThreadList.d.ts.map +1 -1
  61. package/dist/react/client/Tools.d.ts +2 -2
  62. package/dist/react/client/Tools.d.ts.map +1 -1
  63. package/dist/react/client/interactable-model-context.d.ts +2 -3
  64. package/dist/react/client/interactable-model-context.d.ts.map +1 -1
  65. package/dist/react/interactables-legacy/Interactables.d.ts +1 -2
  66. package/dist/react/interactables-legacy/Interactables.d.ts.map +1 -1
  67. package/dist/react/interactables-legacy/interactable-model-context.d.ts +2 -3
  68. package/dist/react/interactables-legacy/interactable-model-context.d.ts.map +1 -1
  69. package/dist/react/interactables-legacy/scopes.d.ts +9 -10
  70. package/dist/react/interactables-legacy/scopes.d.ts.map +1 -1
  71. package/dist/react/interactables-legacy/useAssistantInteractable.d.ts +2 -3
  72. package/dist/react/interactables-legacy/useAssistantInteractable.d.ts.map +1 -1
  73. package/dist/react/interactables-legacy/useInteractableState.d.ts +1 -2
  74. package/dist/react/interactables-legacy/useInteractableState.d.ts.map +1 -1
  75. package/dist/react/interactables-shared/useInteractablePersistenceQueue.d.ts +1 -2
  76. package/dist/react/interactables-shared/useInteractablePersistenceQueue.d.ts.map +1 -1
  77. package/dist/react/model-context/define-mcp-toolkit.d.ts +4 -5
  78. package/dist/react/model-context/define-mcp-toolkit.d.ts.map +1 -1
  79. package/dist/react/model-context/define-toolkit.d.ts +2 -3
  80. package/dist/react/model-context/define-toolkit.d.ts.map +1 -1
  81. package/dist/react/model-context/external-tool.d.ts +1 -2
  82. package/dist/react/model-context/external-tool.d.ts.map +1 -1
  83. package/dist/react/model-context/human-tool.d.ts +3 -4
  84. package/dist/react/model-context/human-tool.d.ts.map +1 -1
  85. package/dist/react/model-context/interactableTool.d.ts +3 -4
  86. package/dist/react/model-context/interactableTool.d.ts.map +1 -1
  87. package/dist/react/model-context/makeAssistantDataUI.d.ts +2 -3
  88. package/dist/react/model-context/makeAssistantDataUI.d.ts.map +1 -1
  89. package/dist/react/model-context/makeAssistantTool.d.ts +2 -3
  90. package/dist/react/model-context/makeAssistantTool.d.ts.map +1 -1
  91. package/dist/react/model-context/makeAssistantToolUI.d.ts +2 -3
  92. package/dist/react/model-context/makeAssistantToolUI.d.ts.map +1 -1
  93. package/dist/react/model-context/provider-tool.d.ts +2 -3
  94. package/dist/react/model-context/provider-tool.d.ts.map +1 -1
  95. package/dist/react/model-context/stub-tool.d.ts +1 -2
  96. package/dist/react/model-context/stub-tool.d.ts.map +1 -1
  97. package/dist/react/model-context/toolbox.d.ts +9 -10
  98. package/dist/react/model-context/toolbox.d.ts.map +1 -1
  99. package/dist/react/model-context/useAssistantContext.d.ts +2 -2
  100. package/dist/react/model-context/useAssistantContext.d.ts.map +1 -1
  101. package/dist/react/model-context/useAssistantDataUI.d.ts +2 -3
  102. package/dist/react/model-context/useAssistantDataUI.d.ts.map +1 -1
  103. package/dist/react/model-context/useAssistantInstructions.d.ts +2 -2
  104. package/dist/react/model-context/useAssistantInstructions.d.ts.map +1 -1
  105. package/dist/react/model-context/useAssistantTool.d.ts +2 -3
  106. package/dist/react/model-context/useAssistantTool.d.ts.map +1 -1
  107. package/dist/react/model-context/useAssistantToolUI.d.ts +2 -3
  108. package/dist/react/model-context/useAssistantToolUI.d.ts.map +1 -1
  109. package/dist/react/model-context/useAuiToolOverrides.d.ts +1 -2
  110. package/dist/react/model-context/useAuiToolOverrides.d.ts.map +1 -1
  111. package/dist/react/model-context/useInlineRender.d.ts +1 -2
  112. package/dist/react/model-context/useInlineRender.d.ts.map +1 -1
  113. package/dist/react/model-context/useInteractable.d.ts +4 -5
  114. package/dist/react/model-context/useInteractable.d.ts.map +1 -1
  115. package/dist/react/model-context/useInteractableState.d.ts +1 -2
  116. package/dist/react/model-context/useInteractableState.d.ts.map +1 -1
  117. package/dist/react/model-context/useInteractableVersions.d.ts +1 -2
  118. package/dist/react/model-context/useInteractableVersions.d.ts.map +1 -1
  119. package/dist/react/model-context/useToolArgsStatus.d.ts +2 -3
  120. package/dist/react/model-context/useToolArgsStatus.d.ts.map +1 -1
  121. package/dist/react/primitive-hooks/useActionBarCopy.d.ts +2 -3
  122. package/dist/react/primitive-hooks/useActionBarCopy.d.ts.map +1 -1
  123. package/dist/react/primitive-hooks/useActionBarEdit.d.ts +1 -2
  124. package/dist/react/primitive-hooks/useActionBarEdit.d.ts.map +1 -1
  125. package/dist/react/primitive-hooks/useActionBarFeedback.d.ts +2 -3
  126. package/dist/react/primitive-hooks/useActionBarFeedback.d.ts.map +1 -1
  127. package/dist/react/primitive-hooks/useActionBarReload.d.ts +1 -2
  128. package/dist/react/primitive-hooks/useActionBarReload.d.ts.map +1 -1
  129. package/dist/react/primitive-hooks/useActionBarSpeak.d.ts +1 -2
  130. package/dist/react/primitive-hooks/useActionBarSpeak.d.ts.map +1 -1
  131. package/dist/react/primitive-hooks/useActionBarStopSpeaking.d.ts +1 -2
  132. package/dist/react/primitive-hooks/useActionBarStopSpeaking.d.ts.map +1 -1
  133. package/dist/react/primitive-hooks/useBranchPickerNext.d.ts +1 -2
  134. package/dist/react/primitive-hooks/useBranchPickerNext.d.ts.map +1 -1
  135. package/dist/react/primitive-hooks/useBranchPickerPrevious.d.ts +1 -2
  136. package/dist/react/primitive-hooks/useBranchPickerPrevious.d.ts.map +1 -1
  137. package/dist/react/primitive-hooks/useComposerAddAttachment.d.ts +1 -2
  138. package/dist/react/primitive-hooks/useComposerAddAttachment.d.ts.map +1 -1
  139. package/dist/react/primitive-hooks/useComposerCancel.d.ts +1 -2
  140. package/dist/react/primitive-hooks/useComposerCancel.d.ts.map +1 -1
  141. package/dist/react/primitive-hooks/useComposerDictate.d.ts +1 -2
  142. package/dist/react/primitive-hooks/useComposerDictate.d.ts.map +1 -1
  143. package/dist/react/primitive-hooks/useComposerSend.d.ts +1 -2
  144. package/dist/react/primitive-hooks/useComposerSend.d.ts.map +1 -1
  145. package/dist/react/primitive-hooks/useEditComposerCancel.d.ts +1 -2
  146. package/dist/react/primitive-hooks/useEditComposerCancel.d.ts.map +1 -1
  147. package/dist/react/primitive-hooks/useEditComposerSend.d.ts +1 -2
  148. package/dist/react/primitive-hooks/useEditComposerSend.d.ts.map +1 -1
  149. package/dist/react/primitive-hooks/useMessageBranching.d.ts +1 -2
  150. package/dist/react/primitive-hooks/useMessageBranching.d.ts.map +1 -1
  151. package/dist/react/primitive-hooks/useMessageError.d.ts +1 -2
  152. package/dist/react/primitive-hooks/useMessageError.d.ts.map +1 -1
  153. package/dist/react/primitive-hooks/useMessageReload.d.ts +1 -2
  154. package/dist/react/primitive-hooks/useMessageReload.d.ts.map +1 -1
  155. package/dist/react/primitive-hooks/useSuggestionTrigger.d.ts +2 -3
  156. package/dist/react/primitive-hooks/useSuggestionTrigger.d.ts.map +1 -1
  157. package/dist/react/primitive-hooks/useThreadIsEmpty.d.ts +1 -2
  158. package/dist/react/primitive-hooks/useThreadIsEmpty.d.ts.map +1 -1
  159. package/dist/react/primitive-hooks/useThreadIsRunning.d.ts +1 -2
  160. package/dist/react/primitive-hooks/useThreadIsRunning.d.ts.map +1 -1
  161. package/dist/react/primitive-hooks/useThreadListItemArchive.d.ts +1 -2
  162. package/dist/react/primitive-hooks/useThreadListItemArchive.d.ts.map +1 -1
  163. package/dist/react/primitive-hooks/useThreadListItemDelete.d.ts +1 -2
  164. package/dist/react/primitive-hooks/useThreadListItemDelete.d.ts.map +1 -1
  165. package/dist/react/primitive-hooks/useThreadListItemTrigger.d.ts +1 -2
  166. package/dist/react/primitive-hooks/useThreadListItemTrigger.d.ts.map +1 -1
  167. package/dist/react/primitive-hooks/useThreadListItemUnarchive.d.ts +1 -2
  168. package/dist/react/primitive-hooks/useThreadListItemUnarchive.d.ts.map +1 -1
  169. package/dist/react/primitive-hooks/useThreadListLoadMore.d.ts +1 -2
  170. package/dist/react/primitive-hooks/useThreadListLoadMore.d.ts.map +1 -1
  171. package/dist/react/primitive-hooks/useThreadListNew.d.ts +1 -2
  172. package/dist/react/primitive-hooks/useThreadListNew.d.ts.map +1 -1
  173. package/dist/react/primitive-hooks/useThreadMessageIds.d.ts +1 -2
  174. package/dist/react/primitive-hooks/useThreadMessageIds.d.ts.map +1 -1
  175. package/dist/react/primitive-hooks/useThreadMessages.d.ts +1 -2
  176. package/dist/react/primitive-hooks/useThreadMessages.d.ts.map +1 -1
  177. package/dist/react/primitive-hooks/useVoice.d.ts +3 -4
  178. package/dist/react/primitive-hooks/useVoice.d.ts.map +1 -1
  179. package/dist/react/primitives/chainOfThought/ChainOfThoughtParts.d.ts +2 -3
  180. package/dist/react/primitives/chainOfThought/ChainOfThoughtParts.d.ts.map +1 -1
  181. package/dist/react/primitives/composer/ComposerAttachments.d.ts +4 -5
  182. package/dist/react/primitives/composer/ComposerAttachments.d.ts.map +1 -1
  183. package/dist/react/primitives/composer/ComposerIf.d.ts +4 -5
  184. package/dist/react/primitives/composer/ComposerIf.d.ts.map +1 -1
  185. package/dist/react/primitives/composer/ComposerQueue.d.ts +2 -3
  186. package/dist/react/primitives/composer/ComposerQueue.d.ts.map +1 -1
  187. package/dist/react/primitives/generativeUI/GenerativeUI.d.ts +4 -5
  188. package/dist/react/primitives/generativeUI/GenerativeUI.d.ts.map +1 -1
  189. package/dist/react/primitives/generativeUI/GenerativeUI.js +27 -28
  190. package/dist/react/primitives/generativeUI/GenerativeUI.js.map +1 -1
  191. package/dist/react/primitives/message/MessageAttachments.d.ts +4 -5
  192. package/dist/react/primitives/message/MessageAttachments.d.ts.map +1 -1
  193. package/dist/react/primitives/message/MessageGroupedParts.d.ts +2 -3
  194. package/dist/react/primitives/message/MessageGroupedParts.d.ts.map +1 -1
  195. package/dist/react/primitives/message/MessageParts.d.ts +10 -10
  196. package/dist/react/primitives/message/MessageParts.d.ts.map +1 -1
  197. package/dist/react/primitives/message/MessageQuote.d.ts +2 -3
  198. package/dist/react/primitives/message/MessageQuote.d.ts.map +1 -1
  199. package/dist/react/primitives/messagePart/MessagePartInProgress.d.ts +2 -3
  200. package/dist/react/primitives/messagePart/MessagePartInProgress.d.ts.map +1 -1
  201. package/dist/react/primitives/part/PartMessages.d.ts +3 -4
  202. package/dist/react/primitives/part/PartMessages.d.ts.map +1 -1
  203. package/dist/react/primitives/thread/ThreadMessages.d.ts +7 -8
  204. package/dist/react/primitives/thread/ThreadMessages.d.ts.map +1 -1
  205. package/dist/react/primitives/thread/ThreadSuggestions.d.ts +5 -6
  206. package/dist/react/primitives/thread/ThreadSuggestions.d.ts.map +1 -1
  207. package/dist/react/primitives/threadList/ThreadListItems.d.ts +4 -5
  208. package/dist/react/primitives/threadList/ThreadListItems.d.ts.map +1 -1
  209. package/dist/react/primitives/threadListItem/ThreadListItemTitle.d.ts +2 -3
  210. package/dist/react/primitives/threadListItem/ThreadListItemTitle.d.ts.map +1 -1
  211. package/dist/react/providers/AttachmentByIndexProvider.d.ts +2 -3
  212. package/dist/react/providers/AttachmentByIndexProvider.d.ts.map +1 -1
  213. package/dist/react/providers/ChainOfThoughtByIndicesProvider.d.ts +1 -2
  214. package/dist/react/providers/ChainOfThoughtByIndicesProvider.d.ts.map +1 -1
  215. package/dist/react/providers/ChainOfThoughtPartByIndexProvider.d.ts +1 -2
  216. package/dist/react/providers/ChainOfThoughtPartByIndexProvider.d.ts.map +1 -1
  217. package/dist/react/providers/MessageByIdProvider.d.ts +1 -2
  218. package/dist/react/providers/MessageByIdProvider.d.ts.map +1 -1
  219. package/dist/react/providers/MessageByIndexProvider.d.ts +1 -2
  220. package/dist/react/providers/MessageByIndexProvider.d.ts.map +1 -1
  221. package/dist/react/providers/PartByIndexProvider.d.ts +1 -2
  222. package/dist/react/providers/PartByIndexProvider.d.ts.map +1 -1
  223. package/dist/react/providers/QueueItemByIndexProvider.d.ts +2 -3
  224. package/dist/react/providers/QueueItemByIndexProvider.d.ts.map +1 -1
  225. package/dist/react/providers/ReadonlyThreadProvider.d.ts +2 -3
  226. package/dist/react/providers/ReadonlyThreadProvider.d.ts.map +1 -1
  227. package/dist/react/providers/SuggestionByIndexProvider.d.ts +2 -3
  228. package/dist/react/providers/SuggestionByIndexProvider.d.ts.map +1 -1
  229. package/dist/react/providers/TextMessagePartProvider.d.ts +1 -2
  230. package/dist/react/providers/TextMessagePartProvider.d.ts.map +1 -1
  231. package/dist/react/providers/ThreadListItemByIndexProvider.d.ts +1 -2
  232. package/dist/react/providers/ThreadListItemByIndexProvider.d.ts.map +1 -1
  233. package/dist/react/providers/ThreadListItemRuntimeProvider.d.ts +1 -2
  234. package/dist/react/providers/ThreadListItemRuntimeProvider.d.ts.map +1 -1
  235. package/dist/react/runtimes/RemoteThreadListHookInstanceManager.d.ts +3 -2
  236. package/dist/react/runtimes/RemoteThreadListHookInstanceManager.d.ts.map +1 -1
  237. package/dist/react/runtimes/RemoteThreadListHookInstanceManager.js +17 -7
  238. package/dist/react/runtimes/RemoteThreadListHookInstanceManager.js.map +1 -1
  239. package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.d.ts +1 -2
  240. package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.d.ts.map +1 -1
  241. package/dist/react/runtimes/RemoteThreadResource.d.ts +4 -5
  242. package/dist/react/runtimes/RemoteThreadResource.d.ts.map +1 -1
  243. package/dist/react/runtimes/RuntimeAdapterProvider.d.ts +3 -3
  244. package/dist/react/runtimes/RuntimeAdapterProvider.d.ts.map +1 -1
  245. package/dist/react/runtimes/assistant-transport/commandQueue.d.ts +2 -3
  246. package/dist/react/runtimes/assistant-transport/commandQueue.d.ts.map +1 -1
  247. package/dist/react/runtimes/assistant-transport/replayBoundaryStream.d.ts +3 -4
  248. package/dist/react/runtimes/assistant-transport/replayBoundaryStream.d.ts.map +1 -1
  249. package/dist/react/runtimes/assistant-transport/runManager.d.ts +2 -3
  250. package/dist/react/runtimes/assistant-transport/runManager.d.ts.map +1 -1
  251. package/dist/react/runtimes/assistant-transport/types.d.ts +17 -18
  252. package/dist/react/runtimes/assistant-transport/types.d.ts.map +1 -1
  253. package/dist/react/runtimes/assistant-transport/useAssistantTransportRuntime.d.ts +4 -5
  254. package/dist/react/runtimes/assistant-transport/useAssistantTransportRuntime.d.ts.map +1 -1
  255. package/dist/react/runtimes/assistant-transport/useConvertedState.d.ts +1 -2
  256. package/dist/react/runtimes/assistant-transport/useConvertedState.d.ts.map +1 -1
  257. package/dist/react/runtimes/assistant-transport/useLatestRef.d.ts +1 -2
  258. package/dist/react/runtimes/assistant-transport/useLatestRef.d.ts.map +1 -1
  259. package/dist/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.d.ts +2 -3
  260. package/dist/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.d.ts.map +1 -1
  261. package/dist/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.js +17 -4
  262. package/dist/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.js.map +1 -1
  263. package/dist/react/runtimes/cloud/CloudFileAttachmentAdapter.d.ts +1 -2
  264. package/dist/react/runtimes/cloud/CloudFileAttachmentAdapter.d.ts.map +1 -1
  265. package/dist/react/runtimes/cloud/auiV0.d.ts +11 -3
  266. package/dist/react/runtimes/cloud/auiV0.d.ts.map +1 -1
  267. package/dist/react/runtimes/cloud/auiV0.js +63 -2
  268. package/dist/react/runtimes/cloud/auiV0.js.map +1 -1
  269. package/dist/react/runtimes/cloud/createCloudThreadListAdapter.d.ts +4 -5
  270. package/dist/react/runtimes/cloud/createCloudThreadListAdapter.d.ts.map +1 -1
  271. package/dist/react/runtimes/cloud/createCloudThreadListAdapterCreateFallback.d.ts +1 -2
  272. package/dist/react/runtimes/cloud/createCloudThreadListAdapterCreateFallback.d.ts.map +1 -1
  273. package/dist/react/runtimes/cloud/sdkIdentity.d.ts +1 -2
  274. package/dist/react/runtimes/cloud/sdkIdentity.d.ts.map +1 -1
  275. package/dist/react/runtimes/cloud/sdkIdentity.js +1 -1
  276. package/dist/react/runtimes/cloud/useCloudThreadListAdapter.d.ts +1 -2
  277. package/dist/react/runtimes/cloud/useCloudThreadListAdapter.d.ts.map +1 -1
  278. package/dist/react/runtimes/cloud/useCloudThreadListRuntime.d.ts +1 -2
  279. package/dist/react/runtimes/cloud/useCloudThreadListRuntime.d.ts.map +1 -1
  280. package/dist/react/runtimes/createMessageConverter.d.ts +1 -2
  281. package/dist/react/runtimes/createMessageConverter.d.ts.map +1 -1
  282. package/dist/react/runtimes/createRuntimeExtras.d.ts +3 -4
  283. package/dist/react/runtimes/createRuntimeExtras.d.ts.map +1 -1
  284. package/dist/react/runtimes/external-message-converter.d.ts +6 -6
  285. package/dist/react/runtimes/external-message-converter.d.ts.map +1 -1
  286. package/dist/react/runtimes/useExternalStoreRuntime.d.ts +1 -2
  287. package/dist/react/runtimes/useExternalStoreRuntime.d.ts.map +1 -1
  288. package/dist/react/runtimes/useExternalStoreSharedOptions.d.ts +1 -2
  289. package/dist/react/runtimes/useExternalStoreSharedOptions.d.ts.map +1 -1
  290. package/dist/react/runtimes/useLocalRuntime.d.ts +3 -4
  291. package/dist/react/runtimes/useLocalRuntime.d.ts.map +1 -1
  292. package/dist/react/runtimes/useRemoteThreadListRuntime.d.ts +1 -2
  293. package/dist/react/runtimes/useRemoteThreadListRuntime.d.ts.map +1 -1
  294. package/dist/react/runtimes/useRemoteThreadListRuntime.js +2 -2
  295. package/dist/react/runtimes/useRemoteThreadListRuntime.js.map +1 -1
  296. package/dist/react/runtimes/useRuntimeAdapters.d.ts +4 -4
  297. package/dist/react/runtimes/useRuntimeAdapters.d.ts.map +1 -1
  298. package/dist/react/runtimes/useStreamingTiming.d.ts +2 -2
  299. package/dist/react/runtimes/useStreamingTiming.d.ts.map +1 -1
  300. package/dist/react/types/MessagePartComponentTypes.d.ts +26 -27
  301. package/dist/react/types/MessagePartComponentTypes.d.ts.map +1 -1
  302. package/dist/react/types/scopes/dataRenderers.d.ts +3 -4
  303. package/dist/react/types/scopes/dataRenderers.d.ts.map +1 -1
  304. package/dist/react/types/scopes/interactables.d.ts +10 -11
  305. package/dist/react/types/scopes/interactables.d.ts.map +1 -1
  306. package/dist/react/types/scopes/tools.d.ts +4 -5
  307. package/dist/react/types/scopes/tools.d.ts.map +1 -1
  308. package/dist/react/utils/getMessageQuote.d.ts +1 -2
  309. package/dist/react/utils/getMessageQuote.d.ts.map +1 -1
  310. package/dist/react/utils/groupParts.d.ts +7 -8
  311. package/dist/react/utils/groupParts.d.ts.map +1 -1
  312. package/dist/react/utils/useJSONEqual.d.ts +2 -3
  313. package/dist/react/utils/useJSONEqual.d.ts.map +1 -1
  314. package/dist/react/utils/useJSONSchemaDependency.d.ts +1 -2
  315. package/dist/react/utils/useJSONSchemaDependency.d.ts.map +1 -1
  316. package/dist/runtime/api/assistant-runtime.d.ts +2 -3
  317. package/dist/runtime/api/assistant-runtime.d.ts.map +1 -1
  318. package/dist/runtime/api/attachment-runtime.d.ts +6 -7
  319. package/dist/runtime/api/attachment-runtime.d.ts.map +1 -1
  320. package/dist/runtime/api/bindings.d.ts +5 -6
  321. package/dist/runtime/api/bindings.d.ts.map +1 -1
  322. package/dist/runtime/api/composer-runtime.d.ts +10 -10
  323. package/dist/runtime/api/composer-runtime.d.ts.map +1 -1
  324. package/dist/runtime/api/message-part-runtime.d.ts +3 -4
  325. package/dist/runtime/api/message-part-runtime.d.ts.map +1 -1
  326. package/dist/runtime/api/message-part-runtime.js +3 -2
  327. package/dist/runtime/api/message-part-runtime.js.map +1 -1
  328. package/dist/runtime/api/message-runtime.d.ts +8 -6
  329. package/dist/runtime/api/message-runtime.d.ts.map +1 -1
  330. package/dist/runtime/api/message-runtime.js +3 -2
  331. package/dist/runtime/api/message-runtime.js.map +1 -1
  332. package/dist/runtime/api/paths.d.ts +6 -7
  333. package/dist/runtime/api/paths.d.ts.map +1 -1
  334. package/dist/runtime/api/thread-list-item-runtime.d.ts +8 -8
  335. package/dist/runtime/api/thread-list-item-runtime.d.ts.map +1 -1
  336. package/dist/runtime/api/thread-list-runtime.d.ts +4 -5
  337. package/dist/runtime/api/thread-list-runtime.d.ts.map +1 -1
  338. package/dist/runtime/api/thread-runtime.d.ts +10 -11
  339. package/dist/runtime/api/thread-runtime.d.ts.map +1 -1
  340. package/dist/runtime/base/base-assistant-runtime-core.d.ts +1 -2
  341. package/dist/runtime/base/base-assistant-runtime-core.d.ts.map +1 -1
  342. package/dist/runtime/base/base-composer-runtime-core.d.ts +1 -2
  343. package/dist/runtime/base/base-composer-runtime-core.d.ts.map +1 -1
  344. package/dist/runtime/base/base-thread-runtime-core.d.ts +8 -3
  345. package/dist/runtime/base/base-thread-runtime-core.d.ts.map +1 -1
  346. package/dist/runtime/base/base-thread-runtime-core.js +71 -27
  347. package/dist/runtime/base/base-thread-runtime-core.js.map +1 -1
  348. package/dist/runtime/base/default-edit-composer-runtime-core.d.ts +1 -2
  349. package/dist/runtime/base/default-edit-composer-runtime-core.d.ts.map +1 -1
  350. package/dist/runtime/base/default-edit-composer-runtime-core.js +12 -2
  351. package/dist/runtime/base/default-edit-composer-runtime-core.js.map +1 -1
  352. package/dist/runtime/base/default-thread-composer-runtime-core.d.ts +1 -2
  353. package/dist/runtime/base/default-thread-composer-runtime-core.d.ts.map +1 -1
  354. package/dist/runtime/base/default-thread-composer-runtime-core.js +7 -1
  355. package/dist/runtime/base/default-thread-composer-runtime-core.js.map +1 -1
  356. package/dist/runtime/branch/external-thread-branch-adapter.d.ts +1 -2
  357. package/dist/runtime/branch/external-thread-branch-adapter.d.ts.map +1 -1
  358. package/dist/runtime/interfaces/assistant-runtime-core.d.ts +1 -2
  359. package/dist/runtime/interfaces/assistant-runtime-core.d.ts.map +1 -1
  360. package/dist/runtime/interfaces/composer-runtime-core.d.ts +10 -11
  361. package/dist/runtime/interfaces/composer-runtime-core.d.ts.map +1 -1
  362. package/dist/runtime/interfaces/thread-list-runtime-core.d.ts +4 -5
  363. package/dist/runtime/interfaces/thread-list-runtime-core.d.ts.map +1 -1
  364. package/dist/runtime/interfaces/thread-runtime-core.d.ts +17 -16
  365. package/dist/runtime/interfaces/thread-runtime-core.d.ts.map +1 -1
  366. package/dist/runtime/queue/external-thread-queue-adapter.d.ts +2 -3
  367. package/dist/runtime/queue/external-thread-queue-adapter.d.ts.map +1 -1
  368. package/dist/runtime/queue/message-queue.d.ts +5 -4
  369. package/dist/runtime/queue/message-queue.d.ts.map +1 -1
  370. package/dist/runtime/queue/message-queue.js +9 -1
  371. package/dist/runtime/queue/message-queue.js.map +1 -1
  372. package/dist/runtime/queue/queue-item.d.ts +2 -3
  373. package/dist/runtime/queue/queue-item.d.ts.map +1 -1
  374. package/dist/runtime/utils/abortable-thread-load.d.ts +2 -3
  375. package/dist/runtime/utils/abortable-thread-load.d.ts.map +1 -1
  376. package/dist/runtime/utils/attachment-add-operations.d.ts +3 -4
  377. package/dist/runtime/utils/attachment-add-operations.d.ts.map +1 -1
  378. package/dist/runtime/utils/auto-status.d.ts +7 -8
  379. package/dist/runtime/utils/auto-status.d.ts.map +1 -1
  380. package/dist/runtime/utils/chat-model-adapter.d.ts +5 -6
  381. package/dist/runtime/utils/chat-model-adapter.d.ts.map +1 -1
  382. package/dist/runtime/utils/external-message-conversion.d.ts +15 -16
  383. package/dist/runtime/utils/external-message-conversion.d.ts.map +1 -1
  384. package/dist/runtime/utils/external-message-conversion.js +3 -2
  385. package/dist/runtime/utils/external-message-conversion.js.map +1 -1
  386. package/dist/runtime/utils/external-store-message.d.ts +4 -5
  387. package/dist/runtime/utils/external-store-message.d.ts.map +1 -1
  388. package/dist/runtime/utils/message-repository-session.d.ts +3 -4
  389. package/dist/runtime/utils/message-repository-session.d.ts.map +1 -1
  390. package/dist/runtime/utils/message-repository.d.ts +4 -5
  391. package/dist/runtime/utils/message-repository.d.ts.map +1 -1
  392. package/dist/runtime/utils/pending-tool-calls.d.ts +2 -3
  393. package/dist/runtime/utils/pending-tool-calls.d.ts.map +1 -1
  394. package/dist/runtime/utils/resolveToolApprovalResponse.d.ts +1 -2
  395. package/dist/runtime/utils/resolveToolApprovalResponse.d.ts.map +1 -1
  396. package/dist/runtime/utils/runtime-extras-brand.d.ts +2 -3
  397. package/dist/runtime/utils/runtime-extras-brand.d.ts.map +1 -1
  398. package/dist/runtime/utils/stored-message-parts.d.ts +21 -0
  399. package/dist/runtime/utils/stored-message-parts.d.ts.map +1 -0
  400. package/dist/runtime/utils/stored-message-parts.js +83 -0
  401. package/dist/runtime/utils/stored-message-parts.js.map +1 -0
  402. package/dist/runtime/utils/streaming-timing.d.ts +4 -5
  403. package/dist/runtime/utils/streaming-timing.d.ts.map +1 -1
  404. package/dist/runtime/utils/thread-message-like.d.ts +5 -5
  405. package/dist/runtime/utils/thread-message-like.d.ts.map +1 -1
  406. package/dist/runtime/utils/thread-message-like.js.map +1 -1
  407. package/dist/runtime/utils/thread-runtime-lifecycle.d.ts +3 -4
  408. package/dist/runtime/utils/thread-runtime-lifecycle.d.ts.map +1 -1
  409. package/dist/runtime/utils/tool-call-tree.d.ts +4 -5
  410. package/dist/runtime/utils/tool-call-tree.d.ts.map +1 -1
  411. package/dist/runtimes/assistant-transport/utils.d.ts +1 -2
  412. package/dist/runtimes/assistant-transport/utils.d.ts.map +1 -1
  413. package/dist/runtimes/external-store/external-store-adapter.d.ts +9 -6
  414. package/dist/runtimes/external-store/external-store-adapter.d.ts.map +1 -1
  415. package/dist/runtimes/external-store/external-store-runtime-core.d.ts +1 -2
  416. package/dist/runtimes/external-store/external-store-runtime-core.d.ts.map +1 -1
  417. package/dist/runtimes/external-store/external-store-shared-options.d.ts +2 -3
  418. package/dist/runtimes/external-store/external-store-shared-options.d.ts.map +1 -1
  419. package/dist/runtimes/external-store/external-store-thread-list-runtime-core.d.ts +2 -3
  420. package/dist/runtimes/external-store/external-store-thread-list-runtime-core.d.ts.map +1 -1
  421. package/dist/runtimes/external-store/external-store-thread-runtime-core.d.ts +4 -3
  422. package/dist/runtimes/external-store/external-store-thread-runtime-core.d.ts.map +1 -1
  423. package/dist/runtimes/external-store/external-store-thread-runtime-core.js +29 -6
  424. package/dist/runtimes/external-store/external-store-thread-runtime-core.js.map +1 -1
  425. package/dist/runtimes/external-store/thread-message-converter.d.ts +2 -3
  426. package/dist/runtimes/external-store/thread-message-converter.d.ts.map +1 -1
  427. package/dist/runtimes/inert/InertThreadRuntimeCore.d.ts +2 -3
  428. package/dist/runtimes/inert/InertThreadRuntimeCore.d.ts.map +1 -1
  429. package/dist/runtimes/local/local-runtime-core.d.ts +1 -2
  430. package/dist/runtimes/local/local-runtime-core.d.ts.map +1 -1
  431. package/dist/runtimes/local/local-runtime-options.d.ts +1 -2
  432. package/dist/runtimes/local/local-runtime-options.d.ts.map +1 -1
  433. package/dist/runtimes/local/local-thread-list-runtime-core.d.ts +2 -3
  434. package/dist/runtimes/local/local-thread-list-runtime-core.d.ts.map +1 -1
  435. package/dist/runtimes/local/local-thread-runtime-core.d.ts +9 -4
  436. package/dist/runtimes/local/local-thread-runtime-core.d.ts.map +1 -1
  437. package/dist/runtimes/local/local-thread-runtime-core.js +53 -9
  438. package/dist/runtimes/local/local-thread-runtime-core.js.map +1 -1
  439. package/dist/runtimes/local/should-continue.d.ts +1 -2
  440. package/dist/runtimes/local/should-continue.d.ts.map +1 -1
  441. package/dist/runtimes/readonly/ReadonlyThreadRuntimeCore.d.ts +1 -2
  442. package/dist/runtimes/readonly/ReadonlyThreadRuntimeCore.d.ts.map +1 -1
  443. package/dist/runtimes/remote-thread-list/adapter/in-memory.d.ts +1 -2
  444. package/dist/runtimes/remote-thread-list/adapter/in-memory.d.ts.map +1 -1
  445. package/dist/runtimes/remote-thread-list/adapter-changed.d.ts +1 -2
  446. package/dist/runtimes/remote-thread-list/adapter-changed.d.ts.map +1 -1
  447. package/dist/runtimes/remote-thread-list/empty-thread-core.d.ts +1 -2
  448. package/dist/runtimes/remote-thread-list/empty-thread-core.d.ts.map +1 -1
  449. package/dist/runtimes/remote-thread-list/optimistic-state.d.ts +1 -2
  450. package/dist/runtimes/remote-thread-list/optimistic-state.d.ts.map +1 -1
  451. package/dist/runtimes/remote-thread-list/remote-thread-state.d.ts +16 -17
  452. package/dist/runtimes/remote-thread-list/remote-thread-state.d.ts.map +1 -1
  453. package/dist/runtimes/remote-thread-list/title-generation.d.ts +7 -8
  454. package/dist/runtimes/remote-thread-list/title-generation.d.ts.map +1 -1
  455. package/dist/runtimes/remote-thread-list/title.d.ts +2 -3
  456. package/dist/runtimes/remote-thread-list/title.d.ts.map +1 -1
  457. package/dist/runtimes/remote-thread-list/types.d.ts +8 -9
  458. package/dist/runtimes/remote-thread-list/types.d.ts.map +1 -1
  459. package/dist/runtimes/tool-invocations/ToolInvocationTracker.d.ts +4 -5
  460. package/dist/runtimes/tool-invocations/ToolInvocationTracker.d.ts.map +1 -1
  461. package/dist/store/clients/chain-of-thought-client.d.ts +1 -2
  462. package/dist/store/clients/chain-of-thought-client.d.ts.map +1 -1
  463. package/dist/store/clients/external-thread.d.ts +3 -4
  464. package/dist/store/clients/external-thread.d.ts.map +1 -1
  465. package/dist/store/clients/external-thread.js +15 -11
  466. package/dist/store/clients/external-thread.js.map +1 -1
  467. package/dist/store/clients/model-context-client.d.ts +1 -2
  468. package/dist/store/clients/model-context-client.d.ts.map +1 -1
  469. package/dist/store/clients/no-op-composer-client.d.ts +1 -2
  470. package/dist/store/clients/no-op-composer-client.d.ts.map +1 -1
  471. package/dist/store/clients/runtime-adapter.d.ts +1 -2
  472. package/dist/store/clients/runtime-adapter.d.ts.map +1 -1
  473. package/dist/store/clients/single-thread-list.d.ts +1 -2
  474. package/dist/store/clients/single-thread-list.d.ts.map +1 -1
  475. package/dist/store/clients/suggestions.d.ts +3 -4
  476. package/dist/store/clients/suggestions.d.ts.map +1 -1
  477. package/dist/store/clients/thread-message-client.d.ts +2 -3
  478. package/dist/store/clients/thread-message-client.d.ts.map +1 -1
  479. package/dist/store/clients/thread-selection-events.d.ts +1 -2
  480. package/dist/store/clients/thread-selection-events.d.ts.map +1 -1
  481. package/dist/store/clients/thread-tasks.d.ts +3 -4
  482. package/dist/store/clients/thread-tasks.d.ts.map +1 -1
  483. package/dist/store/env.d.ts +1 -2
  484. package/dist/store/env.d.ts.map +1 -1
  485. package/dist/store/primitive-predicates.d.ts +11 -12
  486. package/dist/store/primitive-predicates.d.ts.map +1 -1
  487. package/dist/store/primitive-predicates.js +2 -2
  488. package/dist/store/primitive-predicates.js.map +1 -1
  489. package/dist/store/runtime-clients/attachment-runtime-client.d.ts +1 -2
  490. package/dist/store/runtime-clients/attachment-runtime-client.d.ts.map +1 -1
  491. package/dist/store/runtime-clients/composer-runtime-client.d.ts +1 -2
  492. package/dist/store/runtime-clients/composer-runtime-client.d.ts.map +1 -1
  493. package/dist/store/runtime-clients/handle-runtime-action.d.ts +1 -2
  494. package/dist/store/runtime-clients/handle-runtime-action.d.ts.map +1 -1
  495. package/dist/store/runtime-clients/handle-thread-list-action.d.ts +1 -2
  496. package/dist/store/runtime-clients/handle-thread-list-action.d.ts.map +1 -1
  497. package/dist/store/runtime-clients/liveRef.d.ts +1 -2
  498. package/dist/store/runtime-clients/liveRef.d.ts.map +1 -1
  499. package/dist/store/runtime-clients/message-part-runtime-client.d.ts +1 -2
  500. package/dist/store/runtime-clients/message-part-runtime-client.d.ts.map +1 -1
  501. package/dist/store/runtime-clients/message-runtime-client.d.ts +1 -2
  502. package/dist/store/runtime-clients/message-runtime-client.d.ts.map +1 -1
  503. package/dist/store/runtime-clients/thread-list-item-runtime-client.d.ts +1 -2
  504. package/dist/store/runtime-clients/thread-list-item-runtime-client.d.ts.map +1 -1
  505. package/dist/store/runtime-clients/thread-list-runtime-client.d.ts +1 -2
  506. package/dist/store/runtime-clients/thread-list-runtime-client.d.ts.map +1 -1
  507. package/dist/store/runtime-clients/thread-runtime-client.d.ts +1 -2
  508. package/dist/store/runtime-clients/thread-runtime-client.d.ts.map +1 -1
  509. package/dist/store/runtime-clients/useSubscribable.d.ts +1 -2
  510. package/dist/store/runtime-clients/useSubscribable.d.ts.map +1 -1
  511. package/dist/store/scopes/attachment.d.ts +4 -5
  512. package/dist/store/scopes/attachment.d.ts.map +1 -1
  513. package/dist/store/scopes/chain-of-thought.d.ts +5 -6
  514. package/dist/store/scopes/chain-of-thought.d.ts.map +1 -1
  515. package/dist/store/scopes/composer.d.ts +6 -7
  516. package/dist/store/scopes/composer.d.ts.map +1 -1
  517. package/dist/store/scopes/message.d.ts +6 -6
  518. package/dist/store/scopes/message.d.ts.map +1 -1
  519. package/dist/store/scopes/model-context.d.ts +3 -4
  520. package/dist/store/scopes/model-context.d.ts.map +1 -1
  521. package/dist/store/scopes/part.d.ts +4 -5
  522. package/dist/store/scopes/part.d.ts.map +1 -1
  523. package/dist/store/scopes/queue-item.d.ts +4 -4
  524. package/dist/store/scopes/queue-item.d.ts.map +1 -1
  525. package/dist/store/scopes/suggestion.d.ts +4 -5
  526. package/dist/store/scopes/suggestion.d.ts.map +1 -1
  527. package/dist/store/scopes/suggestions.d.ts +5 -6
  528. package/dist/store/scopes/suggestions.d.ts.map +1 -1
  529. package/dist/store/scopes/task.d.ts +4 -5
  530. package/dist/store/scopes/task.d.ts.map +1 -1
  531. package/dist/store/scopes/thread-list-item.d.ts +5 -6
  532. package/dist/store/scopes/thread-list-item.d.ts.map +1 -1
  533. package/dist/store/scopes/thread.d.ts +5 -6
  534. package/dist/store/scopes/thread.d.ts.map +1 -1
  535. package/dist/store/scopes/threads.d.ts +4 -5
  536. package/dist/store/scopes/threads.d.ts.map +1 -1
  537. package/dist/subscribable/subscribable.d.ts +15 -16
  538. package/dist/subscribable/subscribable.d.ts.map +1 -1
  539. package/dist/tests/remote-thread-list-test-helpers.d.ts +5 -6
  540. package/dist/tests/remote-thread-list-test-helpers.d.ts.map +1 -1
  541. package/dist/types/attachment.d.ts +9 -10
  542. package/dist/types/attachment.d.ts.map +1 -1
  543. package/dist/types/augmentations.d.ts +3 -4
  544. package/dist/types/augmentations.d.ts.map +1 -1
  545. package/dist/types/directive.d.ts +2 -3
  546. package/dist/types/directive.d.ts.map +1 -1
  547. package/dist/types/error.d.ts +8 -9
  548. package/dist/types/error.d.ts.map +1 -1
  549. package/dist/types/message.d.ts +48 -46
  550. package/dist/types/message.d.ts.map +1 -1
  551. package/dist/types/message.js.map +1 -1
  552. package/dist/types/quote.d.ts +1 -2
  553. package/dist/types/quote.d.ts.map +1 -1
  554. package/dist/types/trigger.d.ts +2 -3
  555. package/dist/types/trigger.d.ts.map +1 -1
  556. package/dist/types/unsubscribe.d.ts +1 -2
  557. package/dist/types/unsubscribe.d.ts.map +1 -1
  558. package/dist/utils/abortable-iterable.d.ts +2 -3
  559. package/dist/utils/abortable-iterable.d.ts.map +1 -1
  560. package/dist/utils/composite-context-provider.d.ts +1 -2
  561. package/dist/utils/composite-context-provider.d.ts.map +1 -1
  562. package/dist/utils/data-url.d.ts +6 -7
  563. package/dist/utils/data-url.d.ts.map +1 -1
  564. package/dist/utils/getGroupStatus.d.ts +2 -3
  565. package/dist/utils/getGroupStatus.d.ts.map +1 -1
  566. package/dist/utils/id.d.ts +3 -4
  567. package/dist/utils/id.d.ts.map +1 -1
  568. package/dist/utils/image-media-type.d.ts +1 -2
  569. package/dist/utils/image-media-type.d.ts.map +1 -1
  570. package/dist/utils/invoke-user-callback.d.ts +1 -2
  571. package/dist/utils/invoke-user-callback.d.ts.map +1 -1
  572. package/dist/utils/json/is-json-equal.d.ts +1 -2
  573. package/dist/utils/json/is-json-equal.d.ts.map +1 -1
  574. package/dist/utils/json/is-json.d.ts +4 -5
  575. package/dist/utils/json/is-json.d.ts.map +1 -1
  576. package/dist/utils/json/stable-stringify-tool-args.d.ts +2 -3
  577. package/dist/utils/json/stable-stringify-tool-args.d.ts.map +1 -1
  578. package/dist/utils/normalizePartStatus.d.ts +4 -5
  579. package/dist/utils/normalizePartStatus.d.ts.map +1 -1
  580. package/dist/utils/notify-event-listeners.d.ts +1 -2
  581. package/dist/utils/notify-event-listeners.d.ts.map +1 -1
  582. package/dist/utils/record.d.ts +1 -2
  583. package/dist/utils/record.d.ts.map +1 -1
  584. package/dist/utils/silent-runtime-action.d.ts +2 -3
  585. package/dist/utils/silent-runtime-action.d.ts.map +1 -1
  586. package/dist/utils/text.d.ts +1 -2
  587. package/dist/utils/text.d.ts.map +1 -1
  588. package/dist/utils/wire-media.d.ts +3 -4
  589. package/dist/utils/wire-media.d.ts.map +1 -1
  590. package/package.json +14 -13
  591. package/src/adapters/attachment.ts +8 -1
  592. package/src/adapters/feedback.ts +1 -0
  593. package/src/model-context/frame/provider.test.ts +45 -20
  594. package/src/react/RuntimeAdapter.test.ts +4 -1
  595. package/src/react/adapters/LocalStorageThreadListAdapter.test.ts +117 -0
  596. package/src/react/adapters/LocalStorageThreadListAdapter.tsx +27 -74
  597. package/src/react/client/Interactables.test.ts +12 -7
  598. package/src/react/client/RemoteThreadList.concurrent.test.tsx +9 -3
  599. package/src/react/client/RemoteThreadList.test.ts +5 -6
  600. package/src/react/interactables-legacy/Interactables.test.ts +9 -3
  601. package/src/react/interactables-legacy/useAssistantInteractable.test.tsx +40 -22
  602. package/src/react/model-context/useInteractable.test.tsx +56 -29
  603. package/src/react/primitive-hooks/useActionBarCopy.test.ts +5 -5
  604. package/src/react/primitives/generativeUI/GenerativeUI.test.tsx +54 -0
  605. package/src/react/primitives/generativeUI/GenerativeUI.tsx +13 -18
  606. package/src/react/primitives/message/MessageGroupedParts.test.tsx +4 -1
  607. package/src/react/primitives/thread/ThreadMessages.test.tsx +25 -7
  608. package/src/react/runtimes/RemoteThreadListHookInstanceManager.layout.test.tsx +62 -0
  609. package/src/react/runtimes/RemoteThreadListHookInstanceManager.retry.test.tsx +2 -2
  610. package/src/react/runtimes/RemoteThreadListHookInstanceManager.test.tsx +23 -20
  611. package/src/react/runtimes/RemoteThreadListHookInstanceManager.title.test.tsx +24 -17
  612. package/src/react/runtimes/RemoteThreadListHookInstanceManager.tsx +39 -24
  613. package/src/react/runtimes/assistant-transport/transport-scheduling.test.ts +73 -46
  614. package/src/react/runtimes/assistant-transport/useAssistantTransportRuntime.test.tsx +66 -1
  615. package/src/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.test.tsx +102 -0
  616. package/src/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.ts +24 -11
  617. package/src/react/runtimes/cloud/CloudFileAttachmentAdapter.test.ts +8 -4
  618. package/src/react/runtimes/cloud/auiV0.ts +121 -1
  619. package/src/react/runtimes/cloud/auiV0DecodeSafely.test.ts +522 -0
  620. package/src/react/runtimes/external-message-converter.test.ts +7 -3
  621. package/src/react/runtimes/remote-thread-hook-on-tap.test.ts +2 -1
  622. package/src/react/runtimes/useExternalStoreRuntime.lifecycle.test.tsx +8 -2
  623. package/src/react/runtimes/useExternalStoreRuntime.suggestions.test.tsx +6 -2
  624. package/src/react/runtimes/useRemoteThreadListRuntime.concurrent.test.tsx +84 -4
  625. package/src/react/runtimes/useRemoteThreadListRuntime.ts +5 -1
  626. package/src/runtime/api/message-part-runtime.ts +4 -1
  627. package/src/runtime/api/message-runtime.ts +15 -2
  628. package/src/runtime/base/base-thread-runtime-core.test.ts +761 -18
  629. package/src/runtime/base/base-thread-runtime-core.ts +89 -26
  630. package/src/runtime/base/default-edit-composer-runtime-core.ts +12 -2
  631. package/src/runtime/base/default-thread-composer-runtime-core.ts +12 -1
  632. package/src/runtime/interfaces/thread-runtime-core.ts +2 -0
  633. package/src/runtime/queue/message-queue.ts +11 -1
  634. package/src/runtime/utils/external-message-conversion.test.ts +43 -0
  635. package/src/runtime/utils/external-message-conversion.ts +6 -2
  636. package/src/runtime/utils/stored-message-parts.ts +174 -0
  637. package/src/runtime/utils/thread-message-like.ts +7 -2
  638. package/src/runtimes/external-store/external-store-adapter.ts +4 -0
  639. package/src/runtimes/external-store/external-store-thread-runtime-core.ts +44 -9
  640. package/src/runtimes/local/local-thread-runtime-core.test.ts +168 -12
  641. package/src/runtimes/local/local-thread-runtime-core.ts +80 -9
  642. package/src/store/clients/external-thread.ts +34 -13
  643. package/src/store/primitive-predicates.test.ts +16 -0
  644. package/src/store/primitive-predicates.ts +4 -1
  645. package/src/store/runtime-clients/thread-runtime-client.test.tsx +110 -0
  646. package/src/store/scopes/message.ts +4 -1
  647. package/src/subscribable/subscribable.test.ts +7 -2
  648. package/src/tests/attachment-adapters.test.ts +16 -1
  649. package/src/tests/auiV0Encode.test.ts +4 -0
  650. package/src/tests/base-composer-runtime-core-addAttachment.test.ts +6 -6
  651. package/src/tests/base-composer-runtime-core.test.ts +16 -5
  652. package/src/tests/composer-can-cancel.test.ts +35 -6
  653. package/src/tests/composer-can-send.test.ts +22 -0
  654. package/src/tests/default-edit-composer-runtime-core.test.ts +47 -0
  655. package/src/tests/external-store-thread-runtime-core-adapter.test.ts +229 -27
  656. package/src/tests/external-store-thread-runtime-core.test.ts +31 -0
  657. package/src/tests/external-thread-attachments.test.tsx +22 -23
  658. package/src/tests/external-thread-feedback.test.tsx +20 -7
  659. package/src/tests/external-thread-parity.test.tsx +1 -1
  660. package/src/tests/message-queue.test.ts +45 -10
  661. package/src/tests/thread-switch-events.test.tsx +11 -7
  662. package/src/tests/useRemoteThreadListRuntime-controlled.test.tsx +2 -1
  663. package/src/types/message.test.ts +19 -0
  664. package/src/types/message.ts +16 -8
@@ -1 +1 @@
1
- {"version":3,"file":"commandQueue.d.ts","names":[],"sources":["../../../../src/react/runtimes/assistant-transport/commandQueue.ts"],"mappings":";;cAOa,+BAA8B;cAK9B,kBAAmB;EAAQ;;;EAU3B,UAAA,SAAA,2BAAyB;IACtB;;EAWI,aAAA"}
1
+ {"version":3,"file":"commandQueue.d.ts","names":[],"sources":["../../../../src/react/runtimes/assistant-transport/commandQueue.ts"],"mappings":";;qBAOa,+BAA8B;qBAK9B,kBAAmB;EAAQ;;;EAU3B,UAAA,SAAA,2BAAyB;IACtB;;EAWI,aAAA"}
@@ -1,11 +1,10 @@
1
1
  //#region src/react/runtimes/assistant-transport/replayBoundaryStream.d.ts
2
- declare const REPLAY_CONTENT_LENGTH_HEADER = "Aui-Replay-Content-Length";
2
+ export declare const REPLAY_CONTENT_LENGTH_HEADER = "Aui-Replay-Content-Length";
3
3
  type ReplayBoundaryStreamOptions = {
4
4
  setReplaying: (value: boolean) => void;
5
5
  waitForRender: () => Promise<void>;
6
6
  };
7
- declare const useReplayRenderWait: () => () => Promise<void>;
8
- declare const createReplayBoundaryStream: (response: Response, { setReplaying, waitForRender: waitForReplayRender }: ReplayBoundaryStreamOptions) => Promise<ReadableStream<Uint8Array>>;
7
+ export declare const useReplayRenderWait: () => () => Promise<void>;
8
+ export declare const createReplayBoundaryStream: (response: Response, { setReplaying, waitForRender: waitForReplayRender }: ReplayBoundaryStreamOptions) => Promise<ReadableStream<Uint8Array>>;
9
9
  //#endregion
10
- export { REPLAY_CONTENT_LENGTH_HEADER, createReplayBoundaryStream, useReplayRenderWait };
11
10
  //# sourceMappingURL=replayBoundaryStream.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"replayBoundaryStream.d.ts","names":[],"sources":["../../../../src/react/runtimes/assistant-transport/replayBoundaryStream.ts"],"mappings":";cAIa;KAER;EACH,eAAe;EACf,qBAAqB;;cAGV,iCAAmB;cA6DnB,6BACX,UAAU,YACV,cAAA,eAAA,uBAGG,gCACF,QAAQ,eAAe"}
1
+ {"version":3,"file":"replayBoundaryStream.d.ts","names":[],"sources":["../../../../src/react/runtimes/assistant-transport/replayBoundaryStream.ts"],"mappings":";qBAIa;KAER;EACH,eAAe;EACf,qBAAqB;;qBAGV,iCAAmB;qBA6DnB,6BACX,UAAU,YACV,cAAA,eAAA,uBAGG,gCACF,QAAQ,eAAe"}
@@ -1,15 +1,14 @@
1
1
  //#region src/react/runtimes/assistant-transport/runManager.d.ts
2
- type RunManager = Readonly<{
2
+ export type RunManager = Readonly<{
3
3
  isRunning: boolean;
4
4
  schedule: () => void;
5
5
  cancel: () => void;
6
6
  }>;
7
- declare function useRunManager(config: {
7
+ export declare function useRunManager(config: {
8
8
  onRun: (signal: AbortSignal) => Promise<void>;
9
9
  onFinish?: (() => void) | undefined;
10
10
  onCancel?: (() => void) | undefined;
11
11
  onError?: ((error: Error) => void | Promise<void>) | undefined;
12
12
  }): RunManager;
13
13
  //#endregion
14
- export { RunManager, useRunManager };
15
14
  //# sourceMappingURL=runManager.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"runManager.d.ts","names":[],"sources":["../../../../src/react/runtimes/assistant-transport/runManager.ts"],"mappings":";KAIY,aAAa;EACvB;EACA;EACA;;iBAac,cAAc;EAC5B,QAAQ,QAAQ,gBAAgB;EAChC;EACA;EACA,YAAY,OAAO,iBAAiB;IAClC"}
1
+ {"version":3,"file":"runManager.d.ts","names":[],"sources":["../../../../src/react/runtimes/assistant-transport/runManager.ts"],"mappings":";YAIY,aAAa;EACvB;EACA;EACA;;wBAac,cAAc;EAC5B,QAAQ,QAAQ,gBAAgB;EAChC;EACA;EACA,YAAY,OAAO,iBAAiB;IAClC"}
@@ -7,30 +7,30 @@ import { ToolExecutionStatus } from "../../../runtimes/tool-invocations/ToolInvo
7
7
  import { ToolModelContentPart } from "assistant-stream";
8
8
  import { ReadonlyJSONValue } from "assistant-stream/utils";
9
9
  //#region src/react/runtimes/assistant-transport/types.d.ts
10
- type TextPart = {
10
+ export type TextPart = {
11
11
  readonly type: "text";
12
12
  readonly text: string;
13
13
  };
14
- type ImagePart = {
14
+ export type ImagePart = {
15
15
  readonly type: "image";
16
16
  readonly image: string;
17
17
  };
18
- type UserMessagePart = TextPart | ImagePart;
19
- type UserMessage = {
18
+ export type UserMessagePart = TextPart | ImagePart;
19
+ export type UserMessage = {
20
20
  readonly role: "user";
21
21
  readonly parts: readonly UserMessagePart[];
22
22
  };
23
- type AssistantMessage = {
23
+ export type AssistantMessage = {
24
24
  readonly role: "assistant";
25
25
  readonly parts: readonly TextPart[];
26
26
  };
27
- type AddMessageCommand = {
27
+ export type AddMessageCommand = {
28
28
  readonly type: "add-message";
29
29
  readonly message: UserMessage | AssistantMessage;
30
30
  readonly parentId: string | null;
31
31
  readonly sourceId: string | null;
32
32
  };
33
- type AddToolResultCommand = {
33
+ export type AddToolResultCommand = {
34
34
  readonly type: "add-tool-result";
35
35
  readonly toolCallId: string;
36
36
  readonly toolName: string;
@@ -39,26 +39,26 @@ type AddToolResultCommand = {
39
39
  readonly artifact?: ReadonlyJSONValue;
40
40
  readonly modelContent?: readonly ToolModelContentPart[];
41
41
  };
42
- type AssistantTransportCommand = AddMessageCommand | AddToolResultCommand | UserCommands;
43
- type AssistantTransportState = {
42
+ export type AssistantTransportCommand = AddMessageCommand | AddToolResultCommand | UserCommands;
43
+ export type AssistantTransportState = {
44
44
  readonly messages: readonly ThreadMessage[];
45
45
  readonly state?: ReadonlyJSONValue;
46
46
  readonly isRunning: boolean;
47
47
  };
48
- type AssistantTransportConnectionMetadata = {
48
+ export type AssistantTransportConnectionMetadata = {
49
49
  pendingCommands: AssistantTransportCommand[];
50
50
  isSending: boolean;
51
51
  toolStatuses: Record<string, ToolExecutionStatus>;
52
52
  };
53
- type AssistantTransportStateConverter<T> = (state: T, connectionMetadata: AssistantTransportConnectionMetadata) => AssistantTransportState;
54
- type CommandQueueState = {
53
+ export type AssistantTransportStateConverter<T> = (state: T, connectionMetadata: AssistantTransportConnectionMetadata) => AssistantTransportState;
54
+ export type CommandQueueState = {
55
55
  queued: AssistantTransportCommand[];
56
56
  inTransit: AssistantTransportCommand[];
57
57
  };
58
- type QueuedCommand = AssistantTransportCommand;
59
- type HeadersValue = Record<string, string> | Headers;
60
- type AssistantTransportProtocol = "data-stream" | "assistant-transport";
61
- type SendCommandsRequestBody = {
58
+ export type QueuedCommand = AssistantTransportCommand;
59
+ export type HeadersValue = Record<string, string> | Headers;
60
+ export type AssistantTransportProtocol = "data-stream" | "assistant-transport";
61
+ export type SendCommandsRequestBody = {
62
62
  commands: QueuedCommand[];
63
63
  /** Absent on a resume with `resumeStateApi`; the server replays from its retained snapshot. */
64
64
  state?: unknown;
@@ -71,7 +71,7 @@ type SendCommandsRequestBody = {
71
71
  parentId?: string | null;
72
72
  [key: string]: unknown;
73
73
  };
74
- type AssistantTransportOptions<T> = {
74
+ export type AssistantTransportOptions<T> = {
75
75
  initialState: T;
76
76
  api: string;
77
77
  resumeApi?: string;
@@ -126,5 +126,4 @@ type AssistantTransportOptions<T> = {
126
126
  };
127
127
  };
128
128
  //#endregion
129
- export { AddMessageCommand, AddToolResultCommand, AssistantMessage, AssistantTransportCommand, AssistantTransportConnectionMetadata, AssistantTransportOptions, AssistantTransportProtocol, AssistantTransportState, AssistantTransportStateConverter, CommandQueueState, HeadersValue, ImagePart, QueuedCommand, SendCommandsRequestBody, TextPart, UserMessage, UserMessagePart };
130
129
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","names":[],"sources":["../../../../src/react/runtimes/assistant-transport/types.ts"],"mappings":";;;;;;;;;KAaY;WACD;WACA;;KAGC;WACD;WACA;;KAGC,kBAAkB,WAAW;KAE7B;WACD;WACA,gBAAgB;;KAGf;WACD;WACA,gBAAgB;;KAIf;WACD;WACA,SAAS,cAAc;WACvB;WACA;;KAGC;WACD;WACA;WACA;WACA,QAAQ;WACR;WACA,WAAW;WACX,wBAAwB;;KAGvB,4BACR,oBACA,uBACA;KAGQ;WACD,mBAAmB;WACnB,QAAQ;WACR;;KAGC;EACV,iBAAiB;EACjB;EACA,cAAc,eAAe;;KAGnB,iCAAiC,MAC3C,OAAO,GACP,oBAAoB,yCACjB;KAGO;EACV,QAAQ;EACR,WAAW;;KAID,gBAAgB;KAKhB,eAAe,yBAAyB;KAExC;KAEA;EACV,UAAU;;EAEV;EACA;EACA;EACA,OAAO;EACP,cAAc;EACd,QAAQ;EACR;EACA;GAIC;;KAGS,0BAA0B;EACpC,cAAc;EACd;EACA;;EAEA;EACA,WAAW;;;;;;EAMX;EACA,WAAW,iCAAiC;EAC5C,SAAS,sBAAsB,QAAQ;EACvC,uBAAuB;;;;;;;;;;;;;EAavB,8BACE,MAAM,4BACH,0BAA0B,QAAQ;EACvC,cAAc,UAAU,oBAAoB;EAC5C;EACA,WACE,OAAO,OACP;IACE,UAAU;IACV,cAAc,UAAU,OAAO,MAAM;eAE7B;;;;;;;EAOZ,YAAY;IACV,UAAU;IACV,cAAc,UAAU,OAAO,MAAM;IACrC,QAAQ;;EAEV;IACE;;EAEF;IACE,cAAc;IACd,UAAU"}
1
+ {"version":3,"file":"types.d.ts","names":[],"sources":["../../../../src/react/runtimes/assistant-transport/types.ts"],"mappings":";;;;;;;;;YAaY;WACD;WACA;;YAGC;WACD;WACA;;YAGC,kBAAkB,WAAW;YAE7B;WACD;WACA,gBAAgB;;YAGf;WACD;WACA,gBAAgB;;YAIf;WACD;WACA,SAAS,cAAc;WACvB;WACA;;YAGC;WACD;WACA;WACA;WACA,QAAQ;WACR;WACA,WAAW;WACX,wBAAwB;;YAGvB,4BACR,oBACA,uBACA;YAGQ;WACD,mBAAmB;WACnB,QAAQ;WACR;;YAGC;EACV,iBAAiB;EACjB;EACA,cAAc,eAAe;;YAGnB,iCAAiC,MAC3C,OAAO,GACP,oBAAoB,yCACjB;YAGO;EACV,QAAQ;EACR,WAAW;;YAID,gBAAgB;YAKhB,eAAe,yBAAyB;YAExC;YAEA;EACV,UAAU;;EAEV;EACA;EACA;EACA,OAAO;EACP,cAAc;EACd,QAAQ;EACR;EACA;GAIC;;YAGS,0BAA0B;EACpC,cAAc;EACd;EACA;;EAEA;EACA,WAAW;;;;;;EAMX;EACA,WAAW,iCAAiC;EAC5C,SAAS,sBAAsB,QAAQ;EACvC,uBAAuB;;;;;;;;;;;;;EAavB,8BACE,MAAM,4BACH,0BAA0B,QAAQ;EACvC,cAAc,UAAU,oBAAoB;EAC5C;EACA,WACE,OAAO,OACP;IACE,UAAU;IACV,cAAc,UAAU,OAAO,MAAM;eAE7B;;;;;;;EAOZ,YAAY;IACV,UAAU;IACV,cAAc,UAAU,OAAO,MAAM;IACrC,QAAQ;;EAEV;IACE;;EAEF;IACE,cAAc;IACd,UAAU"}
@@ -2,13 +2,12 @@ import { UserExternalState } from "../../../types/augmentations.js";
2
2
  import { AssistantRuntime } from "../../../runtime/api/assistant-runtime.js";
3
3
  import { AssistantTransportCommand, AssistantTransportOptions } from "./types.js";
4
4
  //#region src/react/runtimes/assistant-transport/useAssistantTransportRuntime.d.ts
5
- declare const useAssistantTransportSendCommand: () => (command: AssistantTransportCommand) => void;
6
- declare function useAssistantTransportState(): UserExternalState;
7
- declare function useAssistantTransportState<T>(selector: (state: UserExternalState) => T): T;
5
+ export declare const useAssistantTransportSendCommand: () => (command: AssistantTransportCommand) => void;
6
+ export declare function useAssistantTransportState(): UserExternalState;
7
+ export declare function useAssistantTransportState<T>(selector: (state: UserExternalState) => T): T;
8
8
  /**
9
9
  * @alpha This is an experimental API that is subject to change.
10
10
  */
11
- declare const useAssistantTransportRuntime: <T>(options: AssistantTransportOptions<T>) => AssistantRuntime;
11
+ export declare const useAssistantTransportRuntime: <T>(options: AssistantTransportOptions<T>) => AssistantRuntime;
12
12
  //#endregion
13
- export { useAssistantTransportRuntime, useAssistantTransportSendCommand, useAssistantTransportState };
14
13
  //# sourceMappingURL=useAssistantTransportRuntime.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useAssistantTransportRuntime.d.ts","names":[],"sources":["../../../../src/react/runtimes/assistant-transport/useAssistantTransportRuntime.ts"],"mappings":";;;;cA8Ha,yCAGH,SAAS;iBAOH,8BAA8B;iBAC9B,2BAA2B,GACzC,WAAW,OAAO,sBAAsB,IACvC;;;;cA4UU,+BAAgC,GAC3C,SAAS,0BAA0B,OAClC"}
1
+ {"version":3,"file":"useAssistantTransportRuntime.d.ts","names":[],"sources":["../../../../src/react/runtimes/assistant-transport/useAssistantTransportRuntime.ts"],"mappings":";;;;qBA8Ha,yCAGH,SAAS;wBAOH,8BAA8B;wBAC9B,2BAA2B,GACzC,WAAW,OAAO,sBAAsB,IACvC;;;;qBA4UU,+BAAgC,GAC3C,SAAS,0BAA0B,OAClC"}
@@ -1,7 +1,6 @@
1
1
  import { ToolExecutionStatus } from "../../../runtimes/tool-invocations/ToolInvocationTracker.js";
2
2
  import { AssistantTransportCommand, AssistantTransportState, AssistantTransportStateConverter } from "./types.js";
3
3
  //#region src/react/runtimes/assistant-transport/useConvertedState.d.ts
4
- declare function useConvertedState<T>(converter: AssistantTransportStateConverter<T>, agentState: T, pendingCommands: AssistantTransportCommand[], isSending: boolean, toolStatuses: Record<string, ToolExecutionStatus>): AssistantTransportState;
4
+ export declare function useConvertedState<T>(converter: AssistantTransportStateConverter<T>, agentState: T, pendingCommands: AssistantTransportCommand[], isSending: boolean, toolStatuses: Record<string, ToolExecutionStatus>): AssistantTransportState;
5
5
  //#endregion
6
- export { useConvertedState };
7
6
  //# sourceMappingURL=useConvertedState.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useConvertedState.d.ts","names":[],"sources":["../../../../src/react/runtimes/assistant-transport/useConvertedState.ts"],"mappings":";;;iBAQgB,kBAAkB,GAChC,WAAW,iCAAiC,IAC5C,YAAY,GACZ,iBAAiB,6BACjB,oBACA,cAAc,eAAe,uBAC5B"}
1
+ {"version":3,"file":"useConvertedState.d.ts","names":[],"sources":["../../../../src/react/runtimes/assistant-transport/useConvertedState.ts"],"mappings":";;;wBAQgB,kBAAkB,GAChC,WAAW,iCAAiC,IAC5C,YAAY,GACZ,iBAAiB,6BACjB,oBACA,cAAc,eAAe,uBAC5B"}
@@ -1,7 +1,6 @@
1
1
  //#region src/react/runtimes/assistant-transport/useLatestRef.d.ts
2
- declare function useLatestRef<T>(value: T): {
2
+ export declare function useLatestRef<T>(value: T): {
3
3
  current: T;
4
4
  };
5
5
  //#endregion
6
- export { useLatestRef };
7
6
  //# sourceMappingURL=useLatestRef.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useLatestRef.d.ts","names":[],"sources":["../../../../src/react/runtimes/assistant-transport/useLatestRef.ts"],"mappings":";iBAEgB,aAAa,GAAG,OAAO;EAKrB,SAAS"}
1
+ {"version":3,"file":"useLatestRef.d.ts","names":[],"sources":["../../../../src/react/runtimes/assistant-transport/useLatestRef.ts"],"mappings":";wBAEgB,aAAa,GAAG,OAAO;EAKrB,SAAS"}
@@ -3,10 +3,9 @@ import { ThreadHistoryAdapter } from "../../../adapters/thread-history.js";
3
3
  import { RefObject } from "react";
4
4
  import { AssistantCloud, RunMessageTelemetry } from "assistant-cloud";
5
5
  //#region src/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.d.ts
6
- declare function extractAuiV0<T>(content: T): RunMessageTelemetry | null;
7
- declare function useAssistantCloudThreadHistoryAdapter(cloudRef: RefObject<AssistantCloud>): ThreadHistoryAdapter & {
6
+ export declare function extractAuiV0<T>(content: T): RunMessageTelemetry | null;
7
+ export declare function useAssistantCloudThreadHistoryAdapter(cloudRef: RefObject<AssistantCloud>): ThreadHistoryAdapter & {
8
8
  readonly feedback: FeedbackAdapter;
9
9
  };
10
10
  //#endregion
11
- export { extractAuiV0, useAssistantCloudThreadHistoryAdapter };
12
11
  //# sourceMappingURL=AssistantCloudThreadHistoryAdapter.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"AssistantCloudThreadHistoryAdapter.d.ts","names":[],"sources":["../../../../src/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.ts"],"mappings":";;;;;iBAijBgB,aAAa,GAAG,SAAS,IAAI;iBAwH7B,sCACd,UAAU,UAAU,kBACnB;WAAkC,UAAU"}
1
+ {"version":3,"file":"AssistantCloudThreadHistoryAdapter.d.ts","names":[],"sources":["../../../../src/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.ts"],"mappings":";;;;;wBA8jBgB,aAAa,GAAG,SAAS,IAAI;wBAwH7B,sCACd,UAAU,UAAU,kBACnB;WAAkC,UAAU"}
@@ -1,4 +1,4 @@
1
- import { auiV0Decode, auiV0Encode } from "./auiV0.js";
1
+ import { auiV0DecodeSafely, auiV0Encode } from "./auiV0.js";
2
2
  import { c } from "@assistant-ui/tap/react-shim/compiler-runtime";
3
3
  import { useEffect, useRef, useState } from "@assistant-ui/tap/react-shim";
4
4
  import { getClientId, useAui } from "@assistant-ui/store";
@@ -45,7 +45,7 @@ var AssistantCloudThreadHistoryAdapter = class {
45
45
  ...remoteMessageId ? { message_id: remoteMessageId } : void 0
46
46
  };
47
47
  }
48
- feedback = { submit: ({ message, type }) => {
48
+ feedback = { submit: ({ message, type, comment }) => {
49
49
  (async () => {
50
50
  const threadListItem = this.tryGetKeyedThreadListItem();
51
51
  const remoteThreadId = threadListItem?.getState().remoteId;
@@ -58,7 +58,10 @@ var AssistantCloudThreadHistoryAdapter = class {
58
58
  console.warn(`[assistant-ui] Skipping feedback for message ${message.id}: no cloud message id is mapped.`);
59
59
  return;
60
60
  }
61
- await this.cloudRef.current.threads.messages.feedback(remoteThreadId, cloudMessageId, { type });
61
+ await this.cloudRef.current.threads.messages.feedback(remoteThreadId, cloudMessageId, {
62
+ type,
63
+ ...comment ? { comment } : void 0
64
+ });
62
65
  })().catch((error) => {
63
66
  console.error("[assistant-ui] Cloud feedback submission failed:", error);
64
67
  });
@@ -140,7 +143,17 @@ var AssistantCloudThreadHistoryAdapter = class {
140
143
  async load() {
141
144
  const remoteId = this.aui.threadListItem.getState().remoteId;
142
145
  if (!remoteId) return { messages: [] };
143
- return { messages: (await this._persistence.load(remoteId, "aui/v0")).filter((m) => m.format === "aui/v0").map(auiV0Decode).reverse() };
146
+ const rows = (await this._persistence.load(remoteId, "aui/v0")).filter((m) => m.format === "aui/v0").reverse();
147
+ const loaded = [];
148
+ const loadedIds = /* @__PURE__ */ new Set();
149
+ for (const row of rows) {
150
+ const item = auiV0DecodeSafely(row);
151
+ if (!item) continue;
152
+ if (item.parentId && !loadedIds.has(item.parentId)) continue;
153
+ loadedIds.add(item.message.id);
154
+ loaded.push(item);
155
+ }
156
+ return { messages: loaded };
144
157
  }
145
158
  _reportRunTelemetry(format, runMessages, options, threadListItem, messageInfo) {
146
159
  const item = threadListItem ?? this.aui.threadListItem;
@@ -1 +1 @@
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","auiV0Decode","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","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","filter","m","reverse","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 { 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 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 }) => {\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 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 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 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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"}
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":";;;;;;;AA0CA,MAAMsC,oCAAoB,IAAIC,QAG5B;AAEF,IAAME,qCAAN,MAAyE;CACvE;CACA;CACA;CACA;CAEAK,YACEJ,UACAC,QACA;EACA,KAAKD,WAAWA;EAChB,KAAKC,SAASA;EACd,KAAKC,cAAc,IAAI7B,uBAAuB,KAAK2B,SAASK,OAAO;EACnE,KAAKF,qBAAqB,IAAIhC,8BACtB,KAAK6B,SAASK,UACnBC,UAAUC,WAAWC,YACpB,KAAKC,0BAA0BH,UAAUC,WAAWC,OAAO,CAC/D;CACF;CAEA,IAAYE,MAAuB;EACjC,OAAO,KAAKT,OAAO;CACrB;CAEA,eACEW,iBAAsC,KAAKF,IAAIE,gBACtB;EACzB,MAAMC,MAAMvB,YAAYsB,cAAc;EACtC,IAAI,CAAChB,kBAAkBkB,IAAID,GAAG,GAC5BjB,kBAAkBmB,IAChBF,KACA,IAAIzC,8BAA8B,KAAK4B,SAASK,OAAO,CACzD;EAEF,OAAOT,kBAAkBoB,IAAIH,GAAG;CAClC;CAEA,IAAYI,eAAwC;EAClD,OAAO,KAAKN,eAAe;CAC7B;;;;;;;CAQA,MAAaF,0BACXH,UACAC,WACAC,SACgE;EAChE,MAAMI,iBAAiB,KAAKQ,kBAAkBd,QAAQ;EACtD,IAAI,CAACM,gBAAgB,OAAO,CAAC;EAE7B,IAAIS,iBAAiBT,eAAeU,SAAS,CAAC,CAACC;EAC/C,IAAI,CAACF,kBAAkBb,SAASU,aAC9BG,iBAAiB,MAAMT,eACpBY,WAAW,CAAC,CACZC,MAAMC,WAAWA,OAAOH,QAAQ,CAAC,CACjCI,YAAYC,KAAAA,CAAS;EAE1B,MAAMC,kBAAkBtB,YACpB,KAAKI,eAAeC,cAAc,CAAC,CAACkB,oBAAoBvB,SAAS,IACjEqB,KAAAA;EACJ,OAAO;GACL,GAAIP,iBAAiB,EAAEU,WAAWV,eAAe,IAAIO,KAAAA;GACrD,GAAIC,kBAAkB,EAAEG,YAAYH,gBAAgB,IAAID,KAAAA;EAC1D;CACF;CAEA,WAA4C,EAC1CM,SAAS,EAAEC,SAASC,MAAMC,cAAc;EACtC,CAAM,YAAY;GAChB,MAAMzB,iBAAiB,KAAK0B,0BAA0B;GACtD,MAAMjB,iBAAiBT,gBAAgBU,SAAS,CAAC,CAACC;GAClD,IAAI,CAACX,kBAAkB,CAACS,gBAAgB;IACtCkB,QAAQC,KACN,gDAAgDL,QAAQM,GAAE,+BAC5D;IACA;GACF;GAEA,MAAMC,iBAAiB,MAAM,KAAK/B,eAChCC,cACF,CAAC,CAAC+B,YAAYR,QAAQM,EAAE;GACxB,IAAI,CAACC,gBAAgB;IACnBH,QAAQC,KACN,gDAAgDL,QAAQM,GAAE,iCAC5D;IACA;GACF;GAEA,MAAM,KAAKzC,SAASK,QAAQuC,QAAQC,SAASZ,SAC3CZ,gBACAqB,gBACA;IAAEN;IAAM,GAAIC,UAAU,EAAEA,QAAQ,IAAIT,KAAAA;GAAW,CACjD;EACF,EAAA,CAAG,CAAC,CAACD,OAAOmB,UAAmB;GAC7BP,QAAQO,MACN,oDACAA,KACF;EACF,CAAC;CACH,EACF;CAEA,4BAAqE;EACnE,MAAMC,OAAO,KAAKrC,IAAIE;EACtB,IAAI,CAACmC,KAAKC,QAAQ,OAAOpB,KAAAA;EACzB,MAAMa,KAAKM,KAAKzB,SAAS,CAAC,CAACmB;EAC3B,IAAIA,OAAOb,KAAAA,GAAW,OAAOA,KAAAA;EAM7B,OAHe,KAAKlB,IAAIkC,QACrBtB,SAAS,CAAC,CACV4B,YAAYC,MAAMC,SAASA,KAAKX,OAAOA,MAAMW,KAAK7B,aAAakB,EAC3DQ,IAAS,KAAKvC,IAAIkC,QAAQQ,KAAK,EAAEX,GAAG,CAAC,IAAIM;CAClD;CAEA,kBAA0BzC,UAAmD;EAC3E,MAAMD,UAAU,KAAKK,IAAIE;EACzB,MAAMyC,eAAehD,QAAQiB,SAAS;EACtC,IAAI+B,aAAaZ,OAAOnC,YAAY+C,aAAa9B,aAAajB,UAC5D,OAAOD;EAGT,MAAM4C,SAAS,KAAKvC,IAAIkC,QACrBtB,SAAS,CAAC,CACV4B,YAAYI,MACVF,SAASA,KAAKX,OAAOnC,YAAY8C,KAAK7B,aAAajB,QACtD;EACF,OAAO2C,SAAS,KAAKvC,IAAIkC,QAAQQ,KAAK,EAAEX,IAAIQ,OAAOR,GAAG,CAAC,IAAIb,KAAAA;CAC7D;CAEA2B,WACEE,eACuC;EACvC,MAAMG,UAAU;EAChB,IAAIhD;EACJ,MAAMiD,mBAAmB;GACvB,MAAMC,OAAOF,QAAQtB,0BAA0B;GAC/C,IAAIwB,MAAMlD,iBAAiBkD;GAC3B,OAAOlD;EACT;EACA,MAAMmD,sBAAsBnD,kBAAkBiD,WAAW;EACzD,MAAMG,sBAAsBZ,SAC1B9E,2BAA2BsF,QAAQjD,eAAeyC,IAAI,GAAGK,aAAa;EACxE,OAAO;GACLQ,MAAM;IACJJ,WAAW;GACb;GACA,MAAMK,OAAOd,MAAmC;IAC9C,MAAMe,SAASJ,cAAc;IAC7B,IAAI,CAACI,QACH,MAAM,IAAIC,MACR,0DACF;IAEF,MAAM7C,WACJ4C,OAAO7C,SAAS,CAAC,CAACC,aAAa,MAAM4C,OAAO3C,WAAW,EAAA,CAAGD;IAC5D,MAAMyC,mBAAmBG,MAAM,CAAC,CAACD,OAAO3C,UAAU6B,IAAI;GACxD;GACA,MAAMiB,OAAOjB,MAAmCkB,gBAAwB;IACtE,MAAMH,SAASJ,cAAc;IAC7B,MAAMxC,WAAW4C,QAAQ7C,SAAS,CAAC,CAACC;IACpC,IAAI,CAACA,YAAY,CAAC4C,QAAQ;IAC1B,MAAMH,mBAAmBG,MAAM,CAAC,CAACE,SAC/B9C,UACA6B,MACAkB,cACF;GACF;GACA,MAAMC,SAAS;IACb,MAAM,IAAIH,MACR,gEACF;GACF;GACAI,gBACEC,OACAjE,SAKA;IACA,MAAMqE,qBAAqBJ,MAAMK,KAAK1B,SACpCK,cAAcsB,OAAO3B,IAAI,CAC3B;IACAQ,QAAQoB,oBACNvB,cAAcwB,QACdJ,oBACArE,SACAuD,cAAc,GACdmB,oBACEC,0BAA0BV,OAAOhB,aAAa,GAC9CjD,SAAS2B,UACLiD,sBAAsB5E,QAAQ2B,SAAS,QAAQ,IAC/CP,KAAAA,CACN,CACF;GACF;GACA,MAAMyD,OAAmD;IAIvD,MAAMlB,SAASN,WAAW;IAC1B,MAAMd,OAAOa,QAAQlD,IAAIE;IACzB,MAAMW,WAAWwB,KAAKC,SAASD,KAAKzB,SAAS,CAAC,CAACC,WAAWK,KAAAA;IAC1D,IAAI,CAACL,UAAU,OAAO,EAAEsB,UAAU,CAAA,EAAG;IACrC,OAAOmB,mBAAmBG,UAAUpB,IAAI,CAAC,CAACsC,KAAK9D,QAAQ;GACzD;EACF;CACF;CAEA,MAAM2C,OAAO,EAAEoB,UAAUnD,WAA0C;EACjE,MAAM,EAAEZ,aAAa,MAAM,KAAKb,IAAIE,eAAeY,WAAW;EAC9D,MAAM+D,UAAUnG,YAAY+C,OAAO;EACnC,MAAM,KAAKlB,aAAaiD,OACtB3C,UACAY,QAAQM,IACR6C,UACA,UACAC,OACF;EAEA,IAAI,KAAKvF,SAASK,QAAQmF,UAAUC,SAClC,KAAKC,gBACHnE,UACA,UACAgE,SACAH,sBAAsBjD,SAAS,QAAQ,CACzC;CAEJ;CAEA,MAAMkC,OAAOjB,MAAqC;EAChD,IAAI,CAAC,KAAKnC,aAAa0E,YAAYvC,KAAKjB,QAAQM,EAAE,GAChD,OAAO,KAAKyB,OAAOd,IAAI;EAEzB,MAAM,EAAEjB,YAAYiB;EACpB,MAAM7B,WAAW,KAAKb,IAAIE,eAAeU,SAAS,CAAC,CAACC;EACpD,IAAI,CAACA,UAAU;EACf,MAAMgE,UAAUnG,YAAY+C,OAAO;EACnC,MAAM,KAAKlB,aAAaoD,OAAO9C,UAAUY,QAAQM,IAAI,UAAU8C,OAAO;EAEtE,IAAI,KAAKvF,SAASK,QAAQmF,UAAUC,SAClC,KAAKC,gBACHnE,UACA,UACAgE,SACAH,sBAAsBjD,SAAS,QAAQ,CACzC;CAEJ;CAEA,MAAMoC,SAAS;EACb,MAAM,IAAIH,MACR,gEACF;CACF;CAEA,MAAMiB,OAAO;EACX,MAAM9D,WAAW,KAAKb,IAAIE,eAAeU,SAAS,CAAC,CAACC;EACpD,IAAI,CAACA,UAAU,OAAO,EAAEsB,UAAU,CAAA,EAAG;EAMrC,MAAM+C,QAAO/C,MALU,KAAK5B,aAAaoE,KAAK9D,UAAU,QAAQ,EAAA,CAM7DsE,QACEC,MAA4CA,EAAEb,WAAW,QAC5D,CAAC,CACAc,QAAQ;EAEX,MAAMC,SAA0C,CAAA;EAChD,MAAMC,4BAAY,IAAIC,IAAY;EAClC,KAAK,MAAMC,OAAOP,MAAM;GACtB,MAAMxC,OAAOjE,kBAAkBgH,GAAG;GAClC,IAAI,CAAC/C,MAAM;GACX,IAAIA,KAAKkC,YAAY,CAACW,UAAUnF,IAAIsC,KAAKkC,QAAQ,GAAG;GACpDW,UAAUG,IAAIhD,KAAKjB,QAAQM,EAAE;GAC7BuD,OAAOK,KAAKjD,IAAI;EAClB;EAEA,OAAO,EAAEP,UAAUmD,OAAO;CAC5B;CAEA,oBACEf,QACAqB,aACA9F,SAIAI,gBACA4F,aACA;EACA,MAAMpD,OAAOxC,kBAAkB,KAAKF,IAAIE;EACxC,MAAMW,WAAW6B,KAAK9B,SAAS,CAAC,CAACC;EACjC,IAAI,CAACA,UAAU;EAEf,MAAMmF,YACJC,oBAAoB1B,QAAQqB,WAAW,MACtCE,aAAaI,WAAWhF,KAAAA,IACrB,EAAEgF,QAAQ,aAAsB,IAChChF,KAAAA;EACN,IAAI,CAAC8E,WAAW;EAEhB,KAAKI,YACHvF,UACAmF,WACAlG,SAASkE,YACTlE,SAASmE,gBACT6B,aACA,KAAK7F,eAAeyC,IAAI,CAC1B;CACF;CAEA,gBACE7B,UACA0D,QACA8B,SACAP,aACA;EACA,MAAME,YAAYM,iBAAiB/B,QAAQ8B,OAAO;EAClD,IAAI,CAACL,WAAW;EAEhB,KAAKI,YAAYvF,UAAUmF,WAAW9E,KAAAA,GAAWA,KAAAA,GAAW4E,WAAW;CACzE;CAEA,YACEjF,UACA0F,MACAvC,YACAC,gBACA6B,aACAU,cAAc,KAAKjG,cACnB;EACA,MAAMkG,cAAcC,oBAAoBH,KAAKI,OAAO1C,cAAc;EAClE,MAAMpE,YAAYiG,aAAalC,iBAC3B4C,YAAYpF,oBAAoB0E,YAAYlC,cAAc,IAC1D1C,KAAAA;EACJ,KAAU1B,YAAYoH,OAAO;GAC3BhH,UAAUiB;GACVqF,QAAQJ,aAAaI,UAAUK,KAAKL;GACpCW,SAASf,aAAagB;GACtB1E,OAAO0D,aAAa1D;GACpB2E,WAAWjB,aAAaiB;GACxBlH;GACAmH,SAASlB,aAAakB;GACtBC,SAASV,KAAKU;GACdC,UAAUpB,aAAaoB;GACvBC,OAAOZ,KAAKY;GACZR,OAAOF;GACPW,YAAYb,KAAKa;GACjBC,WAAWd,KAAKc;GAChBrD;GACAsD,cAAcxB,aAAawB;GAC3BC,YAAYhB,KAAKgB;GACjBC,UAAUjB,KAAKiB;EACjB,CAAC;CACH;AACF;AAIA,SAASd,oBACPC,OACAgB,YACiC;CACjC,IAAI,CAACA,YAAY,OAAOhB;CACxB,IAAI,CAACA,OACH,OAAOgB,WAAWvD,KAAK,EAAEqD,UAAUC,cAAc;EAC/CE,SAASH;EACTI,OAAOH;CACT,EAAE;CAGJ,MAAMI,MAAMC,KAAKC,IAAIrB,MAAMsB,QAAQN,WAAWM,MAAM;CACpD,OAAOtB,MAAMvC,KAAK8D,MAAMC,WAAW;EACjC,GAAGD;EACH,GAAIC,QAAQL,MACR;GACEF,SAASD,WAAWQ,MAAM,CAAEV;GAC5BI,OAAOF,WAAWQ,MAAM,CAAET;EAC5B,IACAxG,KAAAA;CACN,EAAE;AACJ;AAaA,SAASuD,0BAIPV,OACAhB,eAC4B;CAC5B,KAAK,IAAIqF,IAAIrE,MAAMkE,SAAS,GAAGG,KAAK,GAAGA,KAAK;EAC1C,MAAM1F,OAAOqB,MAAMqE;EACnB,MAAMC,OAAO3D,sBACXhC,KAAKjB,SACLsB,cAAcwB,QACdxB,cAAcuF,MAAM5F,KAAKjB,OAAO,CAClC;EACA,IAAI4G,MAAM,OAAOA;CACnB;AAEF;AAEA,SAAS7D,oBACP+D,QACAC,UAC4B;CAC5B,IAAI,CAACA,UAAU,OAAOD;CACtB,MAAM,EAAE3E,gBAAgB6E,aAAa,GAAG5B,YAAY2B;CACpD,OAAO;EAAE,GAAGD;EAAQ,GAAG1B;CAAQ;AACjC;AAEA,SAASnC,sBACPjD,SACA8C,QACAX,gBAC4B;CAC5B,IAAI,CAAC8E,SAASjH,OAAO,KAAKA,QAAQkH,SAAS,aAAa,OAAOzH,KAAAA;CAE/D,MAAMgF,SAASwC,SAASjH,QAAQyE,MAAM,IAAIzE,QAAQyE,SAAShF,KAAAA;CAC3D,MAAMsG,WAAWkB,SAASjH,QAAQ+F,QAAQ,IAAI/F,QAAQ+F,WAAWtG,KAAAA;CACjE,MAAM0H,SAASF,SAASlB,UAAUoB,MAAM,IAAIpB,SAASoB,SAAS1H,KAAAA;CAE9D,MAAM4H,kBADSJ,SAASlB,UAAUqB,MAAM,IAAIrB,SAASqB,SAAS3H,KAAAA,EAAAA,EAC/B4H;CAC/B,MAAMxB,eACJ,OAAOwB,mBAAmB,YAAYC,OAAOC,SAASF,cAAc,IAChEf,KAAKkB,MAAMH,cAAc,IACzB5H,KAAAA;CACN,MAAMgI,eACJhD,QAAQxE,SAAS,eACb,OAAOwE,OAAOiD,WAAW,WACvBjD,OAAOiD,SACPjI,KAAAA,IACF,OAAOsG,UAAU0B,iBAAiB,WAChC1B,SAAS0B,eACThI,KAAAA;CACR,MAAMkI,SAASlD,QAAQxE,SAAS,gBAAgBwE,OAAOiD,WAAW;CAClE,MAAMtC,UAAU/I,iBAAiB;EAAEoL;EAAcG,SAASD;CAAO,CAAC;CAClE,MAAMtC,cAAcD,QAAQA;CAC5B,MAAMyC,YACJzC,QAAQX,WAAW,UACf,UACAA,QAAQxE,SAAS,eACf,eACAwH,iBAAiBhI,KAAAA,IACf2F,QAAQX,SACRhF,KAAAA;CACV,MAAMqI,UAAUH,SAASrL,iBAAiBmI,OAAO9D,KAAK,IAAI,CAAC;CAC3D,MAAMvC,YACJ+D,mBAAmB,OAAOnC,QAAQM,OAAO,WAAWN,QAAQM,KAAKb,KAAAA;CACnE,MAAM8F,UACJzC,WAAW,WACPqE,QAAQ5B,UACRzC,WAAW,cACTiD,UAAUR,UACV9F,KAAAA;CACR,MAAMgG,WACJ,OAAO0B,QAAQ1B,aAAa,WACxB0B,OAAO1B,WACP,OAAOM,UAAUN,aAAa,WAC5BM,SAASN,WACThG,KAAAA;CAER,OAAO;EACL,GAAIrB,YAAY,EAAE+D,gBAAgB/D,UAAU,IAAIqB,KAAAA;EAChD,GAAIoI,cAAcpI,KAAAA,IAAY,EAAEgF,QAAQoD,UAAU,IAAIpI,KAAAA;EACtD,GAAI4F,cAAc,EAAEA,YAAY,IAAI5F,KAAAA;EACpC,GAAGqI;EACH,GAAIjC,gBAAgB,QAAQA,gBAAgB,IACxC,EAAEA,aAAa,IACfpG,KAAAA;EACJ,GAAI,OAAO8F,YAAY,WAAW,EAAEA,QAAQ,IAAI9F,KAAAA;EAChD,GAAIgG,aAAahG,KAAAA,IAAY,EAAEgG,SAAS,IAAIhG,KAAAA;CAC9C;AACF;AAEA,SAASwH,SAASc,OAAkD;CAClE,OAAOA,UAAU,QAAQ,OAAOA,UAAU;AAC5C;AAEA,SAASlD,iBACP/B,QACA8B,SAC4B;CAC5B,QAAQ9B,QAAR;EACE,KAAK,UACH,OAAOkF,aAAapD,OAAO;EAC7B,KAAK,aACH,OAAO9H,yBAAyB,CAAC8H,OAA2B,CAAC;EAC/D,SACE,OAAO;CACX;AACF;AAEA,SAASJ,oBACP1B,QACAqB,aAC4B;CAC5B,IAAIrB,WAAW,aACb,OAAOhG,yBAAyBqH,WAAiC;CAEnE,KAAK,IAAIwC,IAAIxC,YAAYqC,SAAS,GAAGG,KAAK,GAAGA,KAAK;EAChD,MAAMpH,SAASsF,iBAAiB/B,QAAQqB,YAAYwC,EAAG;EACvD,IAAIpH,QAAQ,OAAOA;CACrB;CACA,OAAO;AACT;AAEA,SAAgByI,aAAgBpD,SAAwC;CACtE,MAAMqD,MAAMrD;CAmBZ,IAAIqD,IAAIf,SAAS,aAAa,OAAO;CAGrC,IAAIe,IAAIxD,QAAQxE,SAAS,mBAAmB,OAAO;CAEnD,MAAM2F,YAAYqC,IAAIrD,SAClBlB,QAAQ6E,MAAMA,EAAEtI,SAAS,eAAesI,EAAEJ,YAAYI,EAAEH,UAAU,CAAC,CACpEzF,KAAK4F,MACJnM,2BAA2B;EACzB+L,UAAUI,EAAEJ;EACZC,YAAYG,EAAEH;EACdC,MAAME,EAAEF;EACR9I,QAAQgJ,EAAEhJ;EACV+I,UAAUC,EAAED;CACd,CAAC,CACH;CAEF,MAAME,YAAYP,IAAIrD,SAASlB,QAAQ6E,MAAMA,EAAEtI,SAAS,UAAUsI,EAAEL,IAAI;CACxE,MAAMpC,aACJ0C,aAAaA,UAAUhC,SAAS,IAC5B3J,yBAAyB2L,UAAU7F,KAAK4F,MAAMA,EAAEL,IAAI,CAAC,CAACO,KAAK,EAAE,CAAC,IAC9DhJ,KAAAA;CAEN,MAAMyF,QAAQ+C,IAAIlC,UAAUb;CAC5B,IAAIwD;CACJ,IAAIC;CACJ,IAAIC;CACJ,IAAIC;CACJ,IAAI3D,SAASA,MAAMsB,SAAS,GAAG;EAC7B,IAAIsC,aAAa;EACjB,IAAIC,cAAc;EAClB,IAAIC,iBAAiB;EACrB,IAAIC,mBAAmB;EACvB,IAAIC,WAAW;EACf,IAAIC,YAAY;EAChB,IAAIC,eAAe;EACnB,IAAIC,iBAAiB;EACrB,KAAK,MAAM5C,QAAQvB,OAAO;GACxB,IAAI,CAACuB,KAAKf,OAAO;GACjB,MAAMA,QAAQlJ,2BAA2BiK,KAAKf,KAAK;GACnD,IAAI,CAACA,OAAO;GACZ,IAAIA,MAAMgD,eAAe,MAAM;IAC7BI,cAAcpD,MAAMgD;IACpBQ,WAAW;GACb;GACA,IAAIxD,MAAMiD,gBAAgB,MAAM;IAC9BI,eAAerD,MAAMiD;IACrBQ,YAAY;GACd;GACA,IAAIzD,MAAMkD,mBAAmB,MAAM;IACjCI,kBAAkBtD,MAAMkD;IACxBQ,eAAe;GACjB;GACA,IAAI1D,MAAMmD,qBAAqB,MAAM;IACnCI,oBAAoBvD,MAAMmD;IAC1BQ,iBAAiB;GACnB;EACF;EACAX,cAAcQ,WAAWJ,aAAarJ,KAAAA;EACtCkJ,eAAeQ,YAAYJ,cAActJ,KAAAA;EACzCmJ,kBAAkBQ,eAAeJ,iBAAiBvJ,KAAAA;EAClDoJ,oBAAoBQ,iBAAiBJ,mBAAmBxJ,KAAAA;CAC1D;CAEA,MAAMgF,SAASwD,IAAIxD,QAAQxE,SAAS,eAAe,eAAe;CAElE,MAAM8F,WAAWkC,IAAIlC,UAAUoB;CAC/B,MAAM3B,UAAUjJ,2BACd0L,IAAIlC,QACN;CAEA,MAAMuD,iBACJpE,SAASA,MAAMsB,SAAS,IACpBtB,MAAMvC,KAAK8D,SAAUA,KAAKf,QAAQ,EAAEA,OAAOe,KAAKf,MAAM,IAAI,CAAC,CAAE,IAC7DjG,KAAAA;CAEN,OAAO;EACLgF;EACA,GAAImB,aAAaA,UAAUY,SAAS,IAAI,EAAEZ,UAAU,IAAInG,KAAAA;EACxD,GAAIyF,OAAOsB,SAAS,EAAEb,YAAYT,MAAMsB,OAAO,IAAI/G,KAAAA;EACnD,GAAIiJ,eAAe,QACnBC,gBAAgB,QAChBC,mBAAmB,QACnBC,qBAAqB,OACjB,EACEnD,OAAO;GACL,GAAIgD,eAAe,OAAO,EAAEA,YAAY,IAAIjJ,KAAAA;GAC5C,GAAIkJ,gBAAgB,OAAO,EAAEA,aAAa,IAAIlJ,KAAAA;GAC9C,GAAImJ,mBAAmB,OAAO,EAAEA,gBAAgB,IAAInJ,KAAAA;GACpD,GAAIoJ,qBAAqB,OAAO,EAAEA,kBAAkB,IAAIpJ,KAAAA;EAC1D,EACF,IACAA,KAAAA;EACJ,GAAIqG,cAAc,OAAO,EAAEA,WAAW,IAAIrG,KAAAA;EAC1C,GAAIsG,WAAW,EAAEA,SAAS,IAAItG,KAAAA;EAC9B,GAAI6J,iBAAiB,EAAEpE,OAAOoE,eAAe,IAAI7J,KAAAA;EACjD,GAAI+F,UAAU,EAAEA,QAAQ,IAAI/F,KAAAA;CAC9B;AACF;AAEA,SAAgB8J,sCACd1L,UAC+D;CAC/D,MAAMU,MAAMnB,OAAO;CAEnB,MAAMoM,SAASnO,OAAOkD,GAAG;CACzBnD,gBAAgB;EACdoO,OAAOtL,UAAUK;CACnB,CAAC;CACD,MAAM,CAACkD,WAAWnG,eAEd,IAAIsC,mCAAmCC,gBAAgB2L,OAAOtL,OAAO,CACzE;CACAuL,kCAAkChI,SAASlD,GAAG;CAC9C,OAAOkD;AACT;AAQA,MAAMoI,yCAAyB,IAAInM,QAGjC;;;;;;AAOF,MAAMoM,2BAA0BrI,SAAAlD,QAAA;CAAA,MAAAwL,IAAAC,EAAA,CAAA;CAAA,IAAAC;CAAA,IAAAF,EAAA,OAAAtI,QAAAzD,sBAAA+L,EAAA,OAAAxL,KAAA;EAIpB0L,WAAA;GACR,IAAAC,UAAcL,uBAAsBhL,IAAKN,GAAG;GAC5C,IAAI,CAAC2L,SAAO;IACV,MAAAC,UAAuC;KAAAR,OAC9B;KAAC3L,oBACYyD,QAAOzD;KAAmB4L,SACrCQ;IACX;IACAD,QAAOP,UAAWrL,IAAG8L,GACnB;KAAAC,OAAS;KAAGC,OAAS;IAA2B,IAChDC,YAAA;KACEL,QAAOnM,mBAAmByM,eAAgBD,QAAOrM,QAAS;IAAC,CAE/D;IACA0L,uBAAsBjL,IAAKL,KAAK4L,OAAO;IACvCD,UAAUC;GAAH;GAET,MAAAO,SAAeR;GACfQ,OAAM1M,qBAAsByD,QAAOzD;GACnC0M,OAAMf,QAANe,OAAMf,QAAU;GAAJ,aACL;IACLe,OAAMf,QAANe,OAAMf,QAAU;IAChB,IAAIe,OAAMf,UAAW,GAAC;KACpBe,OAAMd,QAAS;KACfC,uBAAsBzH,OAAQ7D,GAAG;IAAC;GACnC;EACF;EACFwL,EAAA,KAAAtI,QAAAzD;EAAA+L,EAAA,KAAAxL;EAAAwL,EAAA,KAAAE;CAAA,OAAAA,KAAAF,EAAA;CAAA,IAAAY;CAAA,IAAAZ,EAAA,OAAAtI,WAAAsI,EAAA,OAAAxL,KAAA;EAAEoM,KAAA,CAAClJ,SAASlD,GAAG;EAACwL,EAAA,KAAAtI;EAAAsI,EAAA,KAAAxL;EAAAwL,EAAA,KAAAY;CAAA,OAAAA,KAAAZ,EAAA;CA3BjB3O,UAAU6O,IA2BPU,EAAc;AAAC;AAGpB,MAAMlB,qCAAoChI,SAAAlD,QAAA;CAAA,MAAAwL,IAAAC,EAAA,EAAA;CAIxCF,wBAAwBrI,SAASlD,GAAG;CAAC,IAAA0L;CAAA,IAAAF,EAAA,OAAAtI,QAAAzD,sBAAA+L,EAAA,OAAAxL,KAAA;EAE3B0L,WAAA;GACR,MAAAW,WAAiBnJ,QAAOzD;GAExB,MAAA6M,gBAAsB;IACpBtM,IAAG8L,GAAI;KAAAC,OAAS;KAAQC,OAAS;IAAgB,IAAGC,YAAA;KAClD,IAAIA,QAAOpM,WACTwM,SAAQE,cAAeN,QAAOrM,UAAW;MAAAC,WAC5BoM,QAAOpM;MAAU2M,OACrBP,QAAOO;KAChB,CAAC;UAEDH,SAAQI,YAAaR,QAAOrM,UAAW;MAAA4M,OAC9BP,QAAOO;MAAME,aACPT,QAAOS;KACtB,CAAC;KAEH,IAAIT,QAAOU,YACTN,SAAQO,kBAAmBX,QAAOrM,QAAS;IAC5C,CACF;IACDI,IAAG8L,GACD;KAAAC,OAAS;KAAQC,OAAS;IAAyB,IACnDa,cAAA;KACER,SAAQS,gBAAiBb,UAAOrM,UAAW;MAAAC,WAC9BoM,UAAOpM;MAAUkN,aACfd,UAAOc;KACtB,CAAC;IAAC,CAEN;IACA/M,IAAG8L,GACD;KAAAC,OAAS;KAAQC,OAAS;IAA8B,IACxDgB,cAAA;KACEX,SAAQY,iBAAkBhB,UAAOrM,UAAW;MAAAC,WAC/BoM,UAAOpM;MAAUkN,aACfd,UAAOc;KACtB,CAAC;IAAC,CAEN;IACA/M,IAAG8L,GAAI;KAAAC,OAAS;KAAQC,OAAS;IAAkB,IAAGkB,cAAA;KACpDb,SAAQc,WAAYlB,UAAOrM,QAAS;IAAC,CACtC;IACDI,IAAG8L,GAAI;KAAAC,OAAS;KAAQC,OAAS;IAAkB,IAAGoB,cAAA;KACpDf,SAAQgB,WAAYpB,UAAOrM,QAAS;IAAC,CACtC;IACDI,IAAG8L,GAAI;KAAAC,OAAS;KAAQC,OAAS;IAAgB,IAAGsB,cAAA;KAClDjB,SAAQkB,SAAUtB,UAAOrM,QAAS;IAAC,CACpC;IACDI,IAAG8L,GAAI;KAAAC,OAAS;KAAQC,OAAS;IAAmB,IAAGwB,cAAA;KACrDnB,SAAQc,WAAYlB,UAAOrM,QAAS;IAAC,CACtC;IACDI,IAAG8L,GAAI;KAAAC,OAAS;KAAQC,OAAS;IAAsB,IAAGyB,cAAA;KACxDpB,SAAQqB,aAAczB,UAAOrM,QAAS;IAAC,CACxC;IACDI,IAAG8L,GAAI;KAAAC,OAAS;KAAQC,OAAS;IAAiB,IAAG2B,cAAA;KACnDtB,SAAQuB,mBAAoB3B,UAAOrM,UAAWqM,UAAOpM,SAAU;IAAC,CACjE;IACDG,IAAG8L,GACD;KAAAC,OAAS;KAAQC,OAAS;IAAyB,IACnD6B,cAAA;KACExB,SAAQyB,eAAgB7B,UAAOrM,UAAWqM,UAAOpM,SAAU;IAAC,CAEhE;IACAG,IAAG8L,GAAI;KAAAC,OAAS;KAAQC,OAAS;IAAiB,IAAG+B,cAAA;KACnD1B,SAAQ2B,cAAe/B,UAAOrM,UAAWqM,UAAOpM,SAAU;IAAC,CAC5D;IACDG,IAAG8L,GACD;KAAAC,OAAS;KAAQC,OAAS;IAA8B,IACxDiC,eAAA;KACE,IAAIhC,WAAOiC,UACT7B,SAAQ8B,aACNlC,WAAOrM,UACPqM,WAAOpM,WACPoM,WAAOpC,YACPoC,WAAOrC,QACT;UAEAyC,SAAQ+B,aACNnC,WAAOrM,UACPqM,WAAOpM,WACPoM,WAAOpC,YACPoC,WAAOrC,QACT;IACD,CAEL;IACA5J,IAAG8L,GAAI;KAAAC,OAAS;KAAQC,OAAS;IAAgB,IAAGqC,eAAA;KAClDhC,SAAQiC,cAAerC,WAAOrM,UAAWqM,WAAOpM,SAAU;IAAC,CAC5D;IACDG,IAAG8L,GAAI;KAAAC,OAAS;KAAQC,OAAS;IAAgB,IAAGuC,eAAA;KAClDlC,SAAQmC,WAAYvC,WAAOrM,UAAW;MAAAC,WACzBoM,WAAOpM;MAAUsJ,QACpB8C,WAAO9C;KACjB,CAAC;IAAC,CACH;GAAC;GACF,aAEK;IACL,KAAK,MAAAsF,eAAqBnC,eAAemC,YAAY;GAAE;EACxD;EACFjD,EAAA,KAAAtI,QAAAzD;EAAA+L,EAAA,KAAAxL;EAAAwL,EAAA,KAAAE;CAAA,OAAAA,KAAAF,EAAA;CAAA,IAAAY;CAAA,IAAAZ,EAAA,OAAAtI,WAAAsI,EAAA,OAAAxL,KAAA;EAAEoM,KAAA,CAAClJ,SAASlD,GAAG;EAACwL,EAAA,KAAAtI;EAAAsI,EAAA,KAAAxL;EAAAwL,EAAA,KAAAY;CAAA,OAAAA,KAAAZ,EAAA;CAnGjB3O,UAAU6O,IAmGPU,EAAc;CAAC,IAAAsC;CAAA,IAAAlD,EAAA,OAAAtI,QAAAzD,sBAAA+L,EAAA,OAAAxL,KAAA;EAER0O,WAAA;GACR,MAAAC,0BAA0B;IACxB,MAAA,EAAAC,iBAAyB5O,IAAGkC,QAAQtB,SAAU;IAC9C,IAAIZ,IAAGE,eAAeU,SAAU,CAAC,CAAAmB,OAAQ6M,cAAY;IACrD,MAAA,EAAAC,SAAAC,gBAAiC9O,IAAG+O,OAAOnO,SAAU;IACrD,IAAI,CAACiO,WAAWC,YAAW7G,WAAY,GAAC;IACxC/E,QAAOzD,mBAAmBuP,iBACxBJ,cACAE,YAAW7G,MACb;GAAC;GAGH0G,kBAAkB;GAAC,OACZ3O,IAAGiP,UAAWN,iBAAiB;EAAC;EACxCnD,EAAA,KAAAtI,QAAAzD;EAAA+L,EAAA,KAAAxL;EAAAwL,EAAA,KAAAkD;CAAA,OAAAA,KAAAlD,EAAA;CAAA,IAAA0D;CAAA,IAAA1D,EAAA,OAAAtI,WAAAsI,EAAA,QAAAxL,KAAA;EAAEkP,KAAA,CAAChM,SAASlD,GAAG;EAACwL,EAAA,KAAAtI;EAAAsI,EAAA,MAAAxL;EAAAwL,EAAA,MAAA0D;CAAA,OAAAA,KAAA1D,EAAA;CAdjB3O,UAAU6R,IAcPQ,EAAc;AAAC;AA3JY,SAAArD,QAAA,CAAA"}
@@ -2,7 +2,7 @@ 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);
@@ -16,5 +16,4 @@ declare class CloudFileAttachmentAdapter implements AttachmentAdapter {
16
16
  send(attachment: PendingAttachment): Promise<CompleteAttachment>;
17
17
  }
18
18
  //#endregion
19
- export { CloudFileAttachmentAdapter };
20
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;UACA;EAKM,MACZ;IAEA,MAAM;MACJ,eAAe;EAmEN,OAAO,YAAY,aAAa;EAUhC,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"}
@@ -144,10 +144,18 @@ type AuiV0Message = {
144
144
  readonly custom: ReadonlyJSONObject;
145
145
  };
146
146
  };
147
- declare function auiV0Encode(message: ThreadMessage): AuiV0Message;
148
- 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 & {
149
158
  format: "aui/v0";
150
159
  }): ExportedMessageRepositoryItem;
151
160
  //#endregion
152
- export { auiV0Decode, auiV0Encode };
153
161
  //# sourceMappingURL=auiV0.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"auiV0.d.ts","names":[],"sources":["../../../../src/react/runtimes/cloud/auiV0.ts"],"mappings":";;;;;;KAuBK;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;;;iBAoFL,YAAY,SAAS,gBAAgB;iBAsKrC,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"}