@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
@@ -6,7 +6,7 @@ type ToolCallCompleteText<TArgs extends Record<string, unknown>, TResult, TValue
6
6
  args: TArgs;
7
7
  result: TResult | undefined;
8
8
  }) => TValue | undefined | null);
9
- type ToolCallText<TArgs extends Record<string, unknown>, TResult, TValue = string> = {
9
+ export type ToolCallText<TArgs extends Record<string, unknown>, TResult, TValue = string> = {
10
10
  running: ToolCallRunningText<TArgs, TValue>;
11
11
  complete?: ToolCallCompleteText<TArgs, TResult, TValue> | undefined;
12
12
  } | {
@@ -20,7 +20,6 @@ type ToolCallTextPart<TArgs extends Record<string, unknown>, TResult> = {
20
20
  readonly type?: string | undefined;
21
21
  } | undefined;
22
22
  };
23
- declare const resolveToolCallText: <TArgs extends Record<string, unknown>, TResult, TValue>(text: ToolCallText<TArgs, TResult, TValue>, part: ToolCallTextPart<TArgs, TResult>) => TValue | undefined | null;
23
+ export declare const resolveToolCallText: <TArgs extends Record<string, unknown>, TResult, TValue>(text: ToolCallText<TArgs, TResult, TValue>, part: ToolCallTextPart<TArgs, TResult>) => TValue | undefined | null;
24
24
  //#endregion
25
- export { ToolCallText, resolveToolCallText };
26
25
  //# sourceMappingURL=tool-call-text.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tool-call-text.d.ts","names":[],"sources":["../../src/model-context/tool-call-text.ts"],"mappings":";KAAK,oBAAoB,cAAc,yBAAyB,UAC5D,8BAGE;EAAW,MAAM;MAAY;KAE9B,qBACH,cAAc,yBACd,SACA,UAEE,8BAGE;EACA,MAAM;EACN,QAAQ;MACJ;KAEE,aACV,cAAc,yBACd,SACA;EAGI,SAAS,oBAAoB,OAAO;EACpC,WAAW,qBAAqB,OAAO,SAAS;;EAGhD,UAAU,oBAAoB,OAAO;EACrC,UAAU,qBAAqB,OAAO,SAAS;;KAGhD,iBAAiB,cAAc,yBAAyB;WAClD,MAAM;WACN,SAAS;WACT;aAAoB;;;cAGlB,sBACX,cAAc,yBACd,SACA,QAEA,MAAM,aAAa,OAAO,SAAS,SACnC,MAAM,iBAAiB,OAAO,aAC7B"}
1
+ {"version":3,"file":"tool-call-text.d.ts","names":[],"sources":["../../src/model-context/tool-call-text.ts"],"mappings":";KAAK,oBAAoB,cAAc,yBAAyB,UAC5D,8BAGE;EAAW,MAAM;MAAY;KAE9B,qBACH,cAAc,yBACd,SACA,UAEE,8BAGE;EACA,MAAM;EACN,QAAQ;MACJ;YAEE,aACV,cAAc,yBACd,SACA;EAGI,SAAS,oBAAoB,OAAO;EACpC,WAAW,qBAAqB,OAAO,SAAS;;EAGhD,UAAU,oBAAoB,OAAO;EACrC,UAAU,qBAAqB,OAAO,SAAS;;KAGhD,iBAAiB,cAAc,yBAAyB;WAClD,MAAM;WACN,SAAS;WACT;aAAoB;;;qBAGlB,sBACX,cAAc,yBACd,SACA,QAEA,MAAM,aAAa,OAAO,SAAS,SACnC,MAAM,iBAAiB,OAAO,aAC7B"}
@@ -37,10 +37,9 @@ type StandardSchemaParameters = Extract<NonNullable<Extract<Tool<any>, {
37
37
  * });
38
38
  * ```
39
39
  */
40
- declare function tool<const TSchema extends StandardSchemaParameters, TResult = any>(tool: Tool<StandardSchemaInput<TSchema>, TResult> & {
40
+ export declare function tool<const TSchema extends StandardSchemaParameters, TResult = any>(tool: Tool<StandardSchemaInput<TSchema>, TResult> & {
41
41
  parameters: TSchema;
42
42
  }): Tool<StandardSchemaInput<TSchema>, TResult>;
43
- declare function tool<TArgs extends Record<string, unknown>, TResult = any>(tool: Tool<TArgs, TResult>): Tool<TArgs, TResult>;
43
+ export declare function tool<TArgs extends Record<string, unknown>, TResult = any>(tool: Tool<TArgs, TResult>): Tool<TArgs, TResult>;
44
44
  //#endregion
45
- export { tool };
46
45
  //# sourceMappingURL=tool.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tool.d.ts","names":[],"sources":["../../src/model-context/tool.ts"],"mappings":";;KAEK,oBAAoB,WAAW;WACzB;aACE;eAAmB,aAAa;;;IAGzC,eAAe,0BACb,SACA,0BACF;KAEC,2BAA2B,QAC9B,YAAY,QAAQ;EAAa;;WACtB;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA4BG,WACR,gBAAgB,0BACtB,eAEA,MAAM,KAAK,oBAAoB,UAAU;EAAa,YAAY;IACjE,KAAK,oBAAoB,UAAU;iBACtB,KAAK,cAAc,yBAAyB,eAC1D,MAAM,KAAK,OAAO,WACjB,KAAK,OAAO"}
1
+ {"version":3,"file":"tool.d.ts","names":[],"sources":["../../src/model-context/tool.ts"],"mappings":";;KAEK,oBAAoB,WAAW;WACzB;aACE;eAAmB,aAAa;;;IAGzC,eAAe,0BACb,SACA,0BACF;KAEC,2BAA2B,QAC9B,YAAY,QAAQ;EAAa;;WACtB;;;;;;;;;;;;;;;;;;;;;;;;;;;wBA4BG,WACR,gBAAgB,0BACtB,eAEA,MAAM,KAAK,oBAAoB,UAAU;EAAa,YAAY;IACjE,KAAK,oBAAoB,UAAU;wBACtB,KAAK,cAAc,yBAAyB,eAC1D,MAAM,KAAK,OAAO,WACjB,KAAK,OAAO"}
@@ -1,7 +1,7 @@
1
1
  import { Unsubscribe } from "../types/unsubscribe.js";
2
2
  import { Tool } from "assistant-stream";
3
3
  //#region src/model-context/types.d.ts
4
- type LanguageModelV1CallSettings = {
4
+ export type LanguageModelV1CallSettings = {
5
5
  maxTokens?: number;
6
6
  temperature?: number;
7
7
  topP?: number;
@@ -10,13 +10,13 @@ type LanguageModelV1CallSettings = {
10
10
  seed?: number;
11
11
  headers?: Record<string, string | undefined>;
12
12
  };
13
- type LanguageModelConfig = {
13
+ export type LanguageModelConfig = {
14
14
  apiKey?: string;
15
15
  baseUrl?: string;
16
16
  modelName?: string;
17
17
  reasoningEffort?: string;
18
18
  };
19
- type ModelContext = {
19
+ export type ModelContext = {
20
20
  priority?: number | undefined;
21
21
  system?: string | undefined;
22
22
  tools?: Record<string, Tool<any, any>> | undefined;
@@ -29,23 +29,22 @@ type ModelContext = {
29
29
  */
30
30
  unstable_composerMetadata?: Record<string, unknown> | undefined;
31
31
  };
32
- type ModelContextProvider = {
32
+ export type ModelContextProvider = {
33
33
  getModelContext: () => ModelContext;
34
34
  subscribe?: (callback: () => void) => Unsubscribe;
35
35
  };
36
- type AssistantToolProps<TArgs extends Record<string, unknown>, TResult> = Tool<TArgs, TResult> & {
36
+ export type AssistantToolProps<TArgs extends Record<string, unknown>, TResult> = Tool<TArgs, TResult> & {
37
37
  toolName: string;
38
38
  render?: unknown;
39
39
  };
40
- type AssistantInstructionsConfig = {
40
+ export type AssistantInstructionsConfig = {
41
41
  disabled?: boolean | undefined;
42
42
  instruction: string;
43
43
  };
44
- type AssistantContextConfig = {
44
+ export type AssistantContextConfig = {
45
45
  getContext: () => string;
46
46
  disabled?: boolean | undefined;
47
47
  };
48
- declare const mergeModelContexts: (configSet: Set<ModelContextProvider>) => ModelContext;
48
+ export declare const mergeModelContexts: (configSet: Set<ModelContextProvider>) => ModelContext;
49
49
  //#endregion
50
- export { AssistantContextConfig, AssistantInstructionsConfig, AssistantToolProps, LanguageModelConfig, LanguageModelV1CallSettings, ModelContext, ModelContextProvider, mergeModelContexts };
51
50
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","names":[],"sources":["../../src/model-context/types.ts"],"mappings":";;;KAIY;EACV;EACA;EACA;EACA;EACA;EACA;EACA,UAAU;;KAGA;EACV;EACA;EACA;EACA;;KAGU;EACV;EACA;EACA,QAAQ,eAAe;EACvB,eAAe;EACf,SAAS;;;;;;EAMT,4BAA4B;;KAGlB;EACV,uBAAuB;EACvB,aAAa,yBAAyB;;KAG5B,mBACV,cAAc,yBACd,WACE,KAAK,OAAO;EACd;EACA;;KAGU;EACV;EACA;;KAGU;EACV;EACA;;cASW,qBACX,WAAW,IAAI,0BACd"}
1
+ {"version":3,"file":"types.d.ts","names":[],"sources":["../../src/model-context/types.ts"],"mappings":";;;YAIY;EACV;EACA;EACA;EACA;EACA;EACA;EACA,UAAU;;YAGA;EACV;EACA;EACA;EACA;;YAGU;EACV;EACA;EACA,QAAQ,eAAe;EACvB,eAAe;EACf,SAAS;;;;;;EAMT,4BAA4B;;YAGlB;EACV,uBAAuB;EACvB,aAAa,yBAAyB;;YAG5B,mBACV,cAAc,yBACd,WACE,KAAK,OAAO;EACd;EACA;;YAGU;EACV;EACA;;YAGU;EACV;EACA;;qBASW,qBACX,WAAW,IAAI,0BACd"}
@@ -2,13 +2,12 @@ import { AssistantRuntime } from "../runtime/api/assistant-runtime.js";
2
2
  import { ComponentType, FC, PropsWithChildren } from "react";
3
3
  import { AssistantClient, AuiConfig } from "@assistant-ui/store";
4
4
  //#region src/react/AssistantProvider.d.ts
5
- declare const getRenderComponent: (runtime: AssistantRuntime) => ComponentType | undefined;
6
- type AssistantProviderBaseProps = PropsWithChildren<{
5
+ export declare const getRenderComponent: (runtime: AssistantRuntime) => ComponentType | undefined;
6
+ export type AssistantProviderBaseProps = PropsWithChildren<{
7
7
  runtime: AssistantRuntime;
8
8
  aui?: AssistantClient | null | undefined;
9
9
  config?: AuiConfig | undefined;
10
10
  }>;
11
- declare const AssistantProviderBase: FC<AssistantProviderBaseProps>;
11
+ export declare const AssistantProviderBase: FC<AssistantProviderBaseProps>;
12
12
  //#endregion
13
- export { AssistantProviderBase, AssistantProviderBaseProps, getRenderComponent };
14
13
  //# sourceMappingURL=AssistantProvider.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"AssistantProvider.d.ts","names":[],"sources":["../../src/react/AssistantProvider.tsx"],"mappings":";;;;cAea,qBAAsB,SAAS,qBAEnB;KAGb,6BAA6B;EACvC,SAAS;EACT,MAAM;EACN,SAAS;;cA2BE,uBAAuB,GAAG"}
1
+ {"version":3,"file":"AssistantProvider.d.ts","names":[],"sources":["../../src/react/AssistantProvider.tsx"],"mappings":";;;;qBAea,qBAAsB,SAAS,qBAEnB;YAGb,6BAA6B;EACvC,SAAS;EACT,MAAM;EACN,SAAS;;qBA2BE,uBAAuB,GAAG"}
@@ -24,7 +24,7 @@ import { AssistantClient, AuiConfig } from "@assistant-ui/store";
24
24
  * }
25
25
  * ```
26
26
  */
27
- declare const AssistantRuntimeProvider: import("react").MemoExoticComponent<({ runtime, aui, config, children }: {
27
+ export declare const AssistantRuntimeProvider: import("react").MemoExoticComponent<({ runtime, aui, config, children }: {
28
28
  /**
29
29
  * The assistant runtime to expose to descendants. Build one with
30
30
  * `useLocalRuntime`, `useExternalStoreRuntime`, or
@@ -46,5 +46,4 @@ declare const AssistantRuntimeProvider: import("react").MemoExoticComponent<({ r
46
46
  children: ReactNode;
47
47
  }) => import("react").JSX.Element>;
48
48
  //#endregion
49
- export { AssistantRuntimeProvider };
50
49
  //# sourceMappingURL=AssistantRuntimeProvider.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"AssistantRuntimeProvider.d.ts","names":[],"sources":["../../src/react/AssistantRuntimeProvider.tsx"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;cA2Ba,0CAAwB,uBAAA,SAAA,KAAA,QAAA;;;;;;EAYjC,SAAS;;;;;;;EAOT,MAAM;;;;;EAKN,SAAS;EACT,UAAU;sBACX,IAAA"}
1
+ {"version":3,"file":"AssistantRuntimeProvider.d.ts","names":[],"sources":["../../src/react/AssistantRuntimeProvider.tsx"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;qBA2Ba,0CAAwB,uBAAA,SAAA,KAAA,QAAA;;;;;;EAYjC,SAAS;;;;;;;EAOT,MAAM;;;;;EAKN,SAAS;EACT,UAAU;sBACX,IAAA"}
@@ -2,13 +2,12 @@ import { AssistantRuntime } from "../runtime/api/assistant-runtime.js";
2
2
  import "../index.js";
3
3
  import { AssistantClient, ScopesConfig } from "@assistant-ui/store";
4
4
  //#region src/react/RuntimeAdapter.d.ts
5
- declare const RuntimeAdapter: import("@assistant-ui/tap").Resource<import("@assistant-ui/store").ClientOutput<"threads">, [runtime: AssistantRuntime]>;
5
+ export declare const RuntimeAdapter: import("@assistant-ui/tap").Resource<import("@assistant-ui/store").ClientOutput<"threads">, [runtime: AssistantRuntime]>;
6
6
  /**
7
7
  * The scope defaults `RuntimeAdapter` installs when it is used as the `threads`
8
8
  * config entry. Adapter packages that wrap a runtime in their own config entry
9
9
  * attach this to the wrapping resource for scope parity with `RuntimeAdapter`.
10
10
  */
11
- declare const runtimeAdapterTransformScopes: (scopes: ScopesConfig, parent: AssistantClient) => void;
11
+ export declare const runtimeAdapterTransformScopes: (scopes: ScopesConfig, parent: AssistantClient) => void;
12
12
  //#endregion
13
- export { RuntimeAdapter, runtimeAdapterTransformScopes };
14
13
  //# sourceMappingURL=RuntimeAdapter.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"RuntimeAdapter.d.ts","names":[],"sources":["../../src/react/RuntimeAdapter.ts"],"mappings":";;;;cAiCa,4CAAc,uCAAA,0BAAA,SAAA;;;;;;cAOd,gCACX,QAAQ,cACR,QAAQ"}
1
+ {"version":3,"file":"RuntimeAdapter.d.ts","names":[],"sources":["../../src/react/RuntimeAdapter.ts"],"mappings":";;;;qBAiCa,4CAAc,uCAAA,0BAAA,SAAA;;;;;;qBAOd,gCACX,QAAQ,cACR,QAAQ"}
@@ -4,7 +4,7 @@ import "../../internal.js";
4
4
  import "../../index.js";
5
5
  import { TitleGenerationAdapter } from "./TitleGenerationAdapter.js";
6
6
  //#region src/react/adapters/LocalStorageThreadListAdapter.d.ts
7
- type AsyncStorageLike = {
7
+ export type AsyncStorageLike = {
8
8
  getItem(key: string): Promise<string | null>;
9
9
  setItem(key: string, value: string): Promise<void>;
10
10
  removeItem(key: string): Promise<void>;
@@ -21,9 +21,8 @@ type StoredThreadMetadata = {
21
21
  title?: string;
22
22
  custom?: Record<string, unknown> | undefined;
23
23
  };
24
- declare const parseStoredThreadMetadata: (raw: string | null) => StoredThreadMetadata[];
25
- declare const parseStoredMessageRepository: (raw: string | null) => ExportedMessageRepository;
26
- declare const createLocalStorageAdapter: (options: LocalStorageAdapterOptions) => RemoteThreadListAdapter;
24
+ export declare const parseStoredThreadMetadata: (raw: string | null) => StoredThreadMetadata[];
25
+ export declare const parseStoredMessageRepository: (raw: string | null) => ExportedMessageRepository;
26
+ export declare const createLocalStorageAdapter: (options: LocalStorageAdapterOptions) => RemoteThreadListAdapter;
27
27
  //#endregion
28
- export { AsyncStorageLike, createLocalStorageAdapter, parseStoredMessageRepository, parseStoredThreadMetadata };
29
28
  //# sourceMappingURL=LocalStorageThreadListAdapter.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"LocalStorageThreadListAdapter.d.ts","names":[],"sources":["../../../src/react/adapters/LocalStorageThreadListAdapter.tsx"],"mappings":";;;;;;KAiCY;EACV,QAAQ,cAAc;EACtB,QAAQ,aAAa,gBAAgB;EACrC,WAAW,cAAc;;KAkCtB;EACH,SAAS;EACT;EACA,iBAAiB;;KAGd;EACH;EACA;EACA;EACA;EACA,SAAS;;cAmOE,4BACX,uBACC;cAoCU,+BACX,uBACC;cAqIU,4BACX,SAAS,+BACR"}
1
+ {"version":3,"file":"LocalStorageThreadListAdapter.d.ts","names":[],"sources":["../../../src/react/adapters/LocalStorageThreadListAdapter.tsx"],"mappings":";;;;;;YAsCY;EACV,QAAQ,cAAc;EACtB,QAAQ,aAAa,gBAAgB;EACrC,WAAW,cAAc;;KAkCtB;EACH,SAAS;EACT;EACA,iBAAiB;;KAGd;EACH;EACA;EACA;EACA;EACA,SAAS;;qBA+KE,4BACX,uBACC;qBAoCU,+BACX,uBACC;qBAqIU,4BACX,SAAS,+BACR"}
@@ -1,5 +1,6 @@
1
1
  import { isRecord } from "../../utils/json/is-json.js";
2
2
  import { RuntimeAdapterProvider } from "../runtimes/RuntimeAdapterProvider.js";
3
+ import { isStoredMessagePart, isStoredMessageRole, parseStoredAttachment, parseStoredDate } from "../../runtime/utils/stored-message-parts.js";
3
4
  import { createAssistantStream } from "assistant-stream";
4
5
  import { c } from "@assistant-ui/tap/react-shim/compiler-runtime";
5
6
  import { useEffect, useMemo, useRef, useState } from "@assistant-ui/tap/react-shim";
@@ -48,26 +49,8 @@ const parseStoredThread = (value) => {
48
49
  ...isRecord(value.custom) ? { custom: value.custom } : void 0
49
50
  };
50
51
  };
51
- const parseDate = (value) => {
52
- if (value instanceof Date && !Number.isNaN(value.getTime())) return value;
53
- if (typeof value !== "string" && typeof value !== "number") return null;
54
- const date = new Date(value);
55
- return Number.isNaN(date.getTime()) ? null : date;
56
- };
57
- const isMessageRole = (value) => value === "system" || value === "user" || value === "assistant";
58
- const MAX_STORED_MESSAGE_DEPTH = 100;
59
- const storedPartGuards = {
60
- text: (part) => typeof part.text === "string",
61
- reasoning: (part) => typeof part.text === "string" || typeof part.unstable_summary === "string",
62
- image: (part) => typeof part.image === "string",
63
- file: (part) => typeof part.data === "string" && typeof part.mimeType === "string",
64
- audio: (part) => isRecord(part.audio) && typeof part.audio.data === "string" && typeof part.audio.format === "string",
65
- data: (part) => typeof part.name === "string",
66
- source: (part) => typeof part.id === "string" && (part.sourceType === "url" ? typeof part.url === "string" : part.sourceType === "document" && typeof part.title === "string" && typeof part.mediaType === "string"),
67
- "generative-ui": (part) => isRecord(part.spec),
68
- "tool-call": (part) => typeof part.toolCallId === "string" && typeof part.toolName === "string" && isRecord(part.args) && typeof part.argsText === "string"
69
- };
70
- const isStoredMessagePart = (value) => isRecord(value) && typeof value.type === "string" && (!Object.hasOwn(storedPartGuards, value.type) || storedPartGuards[value.type](value));
52
+ const messageModalities = { voice: true };
53
+ const isMessageModality = (value) => typeof value === "string" && Object.hasOwn(messageModalities, value);
71
54
  const parseStoredMessageParts = (content, depth) => content.flatMap((part) => {
72
55
  if (!isStoredMessagePart(part)) return [];
73
56
  if (part.type !== "tool-call" || part.messages === void 0) return [part];
@@ -81,26 +64,22 @@ const parseStoredMessageParts = (content, depth) => content.flatMap((part) => {
81
64
  })
82
65
  }];
83
66
  });
84
- const parseStoredAttachment = (value) => {
85
- if (!isRecord(value) || typeof value.id !== "string" || typeof value.type !== "string" || typeof value.name !== "string" || !isRecord(value.status) || value.status.type !== "complete" || !Array.isArray(value.content)) return null;
86
- return {
87
- ...value,
88
- content: value.content.filter(isStoredMessagePart)
89
- };
90
- };
91
67
  const parseStoredThreadMessage = (value, depth) => {
92
- if (depth > MAX_STORED_MESSAGE_DEPTH) return null;
68
+ if (depth > 100) return null;
93
69
  if (!isRecord(value) || typeof value.id !== "string") return null;
94
- if (!isMessageRole(value.role)) return null;
70
+ if (!isStoredMessageRole(value.role)) return null;
95
71
  if (!Array.isArray(value.content)) return null;
96
- const createdAt = parseDate(value.createdAt);
72
+ const createdAt = parseStoredDate(value.createdAt);
97
73
  if (!createdAt) return null;
98
74
  const metadata = value.metadata;
99
75
  if (!isRecord(metadata) || !isRecord(metadata.custom)) return null;
76
+ const modality = isMessageModality(metadata.modality) ? metadata.modality : void 0;
100
77
  if (value.role === "assistant") {
101
78
  const status = value.status;
102
79
  if (!isRecord(status) || typeof status.type !== "string") return null;
103
- const submittedFeedbackType = (isRecord(metadata.submittedFeedback) ? metadata.submittedFeedback : void 0)?.type;
80
+ const submittedFeedback = isRecord(metadata.submittedFeedback) ? metadata.submittedFeedback : void 0;
81
+ const submittedFeedbackType = submittedFeedback?.type;
82
+ const submittedFeedbackComment = submittedFeedback?.comment;
104
83
  return {
105
84
  id: value.id,
106
85
  role: "assistant",
@@ -112,9 +91,13 @@ const parseStoredThreadMessage = (value, depth) => {
112
91
  unstable_annotations: Array.isArray(metadata.unstable_annotations) ? metadata.unstable_annotations : [],
113
92
  unstable_data: Array.isArray(metadata.unstable_data) ? metadata.unstable_data : [],
114
93
  steps: Array.isArray(metadata.steps) ? metadata.steps : [],
115
- ...submittedFeedbackType === "positive" || submittedFeedbackType === "negative" ? { submittedFeedback: { type: submittedFeedbackType } } : void 0,
94
+ ...submittedFeedbackType === "positive" || submittedFeedbackType === "negative" ? { submittedFeedback: {
95
+ type: submittedFeedbackType,
96
+ ...typeof submittedFeedbackComment === "string" && submittedFeedbackComment !== "" ? { comment: submittedFeedbackComment } : void 0
97
+ } } : void 0,
116
98
  ...metadata.timing !== void 0 ? { timing: metadata.timing } : void 0,
117
99
  ...metadata.isOptimistic === true ? { isOptimistic: true } : void 0,
100
+ ...modality !== void 0 ? { modality } : void 0,
118
101
  custom: metadata.custom
119
102
  }
120
103
  };
@@ -124,11 +107,14 @@ const parseStoredThreadMessage = (value, depth) => {
124
107
  role: "user",
125
108
  content: parseStoredMessageParts(value.content, depth),
126
109
  attachments: Array.isArray(value.attachments) ? value.attachments.flatMap((item) => {
127
- const attachment = parseStoredAttachment(item);
110
+ const attachment = parseStoredAttachment(item, isStoredMessagePart);
128
111
  return attachment ? [attachment] : [];
129
112
  }) : [],
130
113
  createdAt,
131
- metadata: { custom: metadata.custom }
114
+ metadata: {
115
+ ...modality !== void 0 ? { modality } : void 0,
116
+ custom: metadata.custom
117
+ }
132
118
  };
133
119
  const content = parseStoredMessageParts(value.content, depth);
134
120
  if (content.length !== 1) return null;
@@ -1 +1 @@
1
- {"version":3,"file":"LocalStorageThreadListAdapter.js","names":["AssistantStream","createAssistantStream","FC","PropsWithChildren","useEffect","useMemo","useRef","useState","useAui","CompleteAttachment","RemoteThreadInitializeResponse","RemoteThreadListAdapter","RemoteThreadListResponse","RemoteThreadMetadata","ThreadAssistantMessagePart","ThreadHistoryAdapter","ThreadMessage","ThreadUserMessagePart","RunConfig","ExportedMessageRepository","ExportedMessageRepositoryItem","isRecord","RuntimeAdapterProvider","RuntimeAdapters","TitleGenerationAdapter","AsyncStorageLike","getItem","key","Promise","setItem","value","removeItem","KeyedMutationQueue","tails","Map","run","mutation","T","previous","get","result","then","tail","undefined","set","delete","mutationQueues","WeakMap","getMutationQueue","storage","queue","LocalStorageAdapterOptions","prefix","titleGenerator","StoredThreadMetadata","remoteId","externalId","status","title","custom","Record","StoredSystemMessage","Extract","role","StoredUserMessage","StoredAssistantMessage","parseJSON","raw","JSON","parse","parseStoredThread","parseDate","Date","Number","isNaN","getTime","date","isMessageRole","MAX_STORED_MESSAGE_DEPTH","storedPartGuards","text","part","reasoning","unstable_summary","image","file","data","mimeType","audio","format","name","source","id","sourceType","url","mediaType","spec","toolCallId","toolName","args","argsText","isStoredMessagePart","type","Object","hasOwn","parseStoredMessageParts","content","depth","flatMap","messages","toolCall","Array","isArray","item","message","parseStoredThreadMessage","parseStoredAttachment","filter","createdAt","metadata","submittedFeedback","submittedFeedbackType","unstable_state","unstable_annotations","unstable_data","steps","timing","NonNullable","isOptimistic","attachments","attachment","length","parseStoredThreadMetadata","parsed","thread","parseStoredMessageRepositoryItem","parentId","runConfig","parseStoredMessageRepository","candidateMessages","parsedItem","acceptedIds","Set","has","add","headId","some","AsyncStorageHistoryAdapter","getAui","ReturnType","mutationQueue","constructor","aui","_messagesKey","load","threadListItem","getState","append","initialize","repo","idx","findIndex","m","push","stringify","useLocalStorageThreadAdapters","auiRef","current","history","createHistoryProvider","Provider","t0","$","_c","children","adapters","t1","createLocalStorageAdapter","options","threadsKey","messagesKey","threadId","loadThreadMetadata","saveThreadMetadata","threads","updateThreadMetadata","update","find","adapter","unstable_Provider","unstable_useAdapters","useLocalStorageAdapters","list","map","t","unshift","rename","newTitle","updateCustom","archive","unarchive","filtered","fetch","Error","generateTitle","controller","appendText"],"sources":["../../../src/react/adapters/LocalStorageThreadListAdapter.tsx"],"sourcesContent":["import { type AssistantStream, createAssistantStream } from \"assistant-stream\";\nimport {\n type FC,\n type PropsWithChildren,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { useAui } from \"@assistant-ui/store\";\nimport type {\n CompleteAttachment,\n RemoteThreadInitializeResponse,\n RemoteThreadListAdapter,\n RemoteThreadListResponse,\n RemoteThreadMetadata,\n ThreadAssistantMessagePart,\n ThreadHistoryAdapter,\n ThreadMessage,\n ThreadUserMessagePart,\n RunConfig,\n} from \"../../index\";\nimport type {\n ExportedMessageRepository,\n ExportedMessageRepositoryItem,\n} from \"../../internal\";\nimport { isRecord } from \"../../utils/json/is-json\";\nimport {\n RuntimeAdapterProvider,\n type RuntimeAdapters,\n} from \"../runtimes/RuntimeAdapterProvider\";\nimport type { TitleGenerationAdapter } from \"./TitleGenerationAdapter\";\n\nexport type AsyncStorageLike = {\n getItem(key: string): Promise<string | null>;\n setItem(key: string, value: string): Promise<void>;\n removeItem(key: string): Promise<void>;\n};\n\nclass KeyedMutationQueue {\n private readonly tails = new Map<string, Promise<void>>();\n\n run<T>(key: string, mutation: () => Promise<T>): Promise<T> {\n const previous = this.tails.get(key);\n const result = previous ? previous.then(mutation) : mutation();\n const tail = result.then(\n () => undefined,\n () => undefined,\n );\n\n this.tails.set(key, tail);\n void tail.then(() => {\n if (this.tails.get(key) === tail) this.tails.delete(key);\n });\n\n return result;\n }\n}\n\nconst mutationQueues = new WeakMap<AsyncStorageLike, KeyedMutationQueue>();\n\nconst getMutationQueue = (storage: AsyncStorageLike): KeyedMutationQueue => {\n let queue = mutationQueues.get(storage);\n if (!queue) {\n queue = new KeyedMutationQueue();\n mutationQueues.set(storage, queue);\n }\n return queue;\n};\n\ntype LocalStorageAdapterOptions = {\n storage: AsyncStorageLike;\n prefix?: string | undefined;\n titleGenerator?: TitleGenerationAdapter | undefined;\n};\n\ntype StoredThreadMetadata = {\n remoteId: string;\n externalId?: string;\n status: \"regular\" | \"archived\";\n title?: string;\n custom?: Record<string, unknown> | undefined;\n};\n\ntype StoredSystemMessage = Extract<ThreadMessage, { role: \"system\" }>;\ntype StoredUserMessage = Extract<ThreadMessage, { role: \"user\" }>;\ntype StoredAssistantMessage = Extract<ThreadMessage, { role: \"assistant\" }>;\n\nconst parseJSON = (raw: string | null): unknown => {\n if (!raw) return undefined;\n try {\n return JSON.parse(raw) as unknown;\n } catch {\n return undefined;\n }\n};\n\nconst parseStoredThread = (value: unknown): StoredThreadMetadata | null => {\n if (!isRecord(value) || typeof value.remoteId !== \"string\") return null;\n\n const status = value.status ?? \"regular\";\n if (status !== \"regular\" && status !== \"archived\") return null;\n\n return {\n remoteId: value.remoteId,\n status,\n ...(typeof value.externalId === \"string\"\n ? { externalId: value.externalId }\n : undefined),\n ...(typeof value.title === \"string\" ? { title: value.title } : undefined),\n ...(isRecord(value.custom) ? { custom: value.custom } : undefined),\n };\n};\n\nconst parseDate = (value: unknown): Date | null => {\n if (value instanceof Date && !Number.isNaN(value.getTime())) return value;\n if (typeof value !== \"string\" && typeof value !== \"number\") return null;\n\n const date = new Date(value);\n return Number.isNaN(date.getTime()) ? null : date;\n};\n\nconst isMessageRole = (value: unknown): value is ThreadMessage[\"role\"] =>\n value === \"system\" || value === \"user\" || value === \"assistant\";\n\nconst MAX_STORED_MESSAGE_DEPTH = 100;\n\nconst storedPartGuards = {\n text: (part) => typeof part.text === \"string\",\n reasoning: (part) =>\n typeof part.text === \"string\" || typeof part.unstable_summary === \"string\",\n image: (part) => typeof part.image === \"string\",\n file: (part) =>\n typeof part.data === \"string\" && typeof part.mimeType === \"string\",\n audio: (part) =>\n isRecord(part.audio) &&\n typeof part.audio.data === \"string\" &&\n typeof part.audio.format === \"string\",\n data: (part) => typeof part.name === \"string\",\n source: (part) =>\n typeof part.id === \"string\" &&\n (part.sourceType === \"url\"\n ? typeof part.url === \"string\"\n : part.sourceType === \"document\" &&\n typeof part.title === \"string\" &&\n typeof part.mediaType === \"string\"),\n \"generative-ui\": (part) => isRecord(part.spec),\n \"tool-call\": (part) =>\n typeof part.toolCallId === \"string\" &&\n typeof part.toolName === \"string\" &&\n isRecord(part.args) &&\n typeof part.argsText === \"string\",\n} satisfies Record<\n (ThreadUserMessagePart | ThreadAssistantMessagePart)[\"type\"],\n (part: Record<string, unknown>) => boolean\n>;\n\nconst isStoredMessagePart = (\n value: unknown,\n): value is Record<string, unknown> & { type: string } =>\n isRecord(value) &&\n typeof value.type === \"string\" &&\n (!Object.hasOwn(storedPartGuards, value.type) ||\n storedPartGuards[value.type as keyof typeof storedPartGuards](value));\n\nconst parseStoredMessageParts = (\n content: unknown[],\n depth: number,\n): unknown[] =>\n content.flatMap((part) => {\n if (!isStoredMessagePart(part)) return [];\n if (part.type !== \"tool-call\" || part.messages === undefined) return [part];\n\n const { messages, ...toolCall } = part;\n if (!Array.isArray(messages)) return [toolCall];\n return [\n {\n ...toolCall,\n messages: messages.flatMap((item) => {\n const message = parseStoredThreadMessage(item, depth + 1);\n return message ? [message] : [];\n }),\n },\n ];\n });\n\nconst parseStoredAttachment = (value: unknown): CompleteAttachment | null => {\n if (\n !isRecord(value) ||\n typeof value.id !== \"string\" ||\n typeof value.type !== \"string\" ||\n typeof value.name !== \"string\" ||\n !isRecord(value.status) ||\n value.status.type !== \"complete\" ||\n !Array.isArray(value.content)\n ) {\n return null;\n }\n\n return {\n ...value,\n content: value.content.filter(isStoredMessagePart),\n } as CompleteAttachment;\n};\n\nconst parseStoredThreadMessage = (\n value: unknown,\n depth: number,\n): ThreadMessage | null => {\n if (depth > MAX_STORED_MESSAGE_DEPTH) return null;\n if (!isRecord(value) || typeof value.id !== \"string\") return null;\n if (!isMessageRole(value.role)) return null;\n if (!Array.isArray(value.content)) return null;\n\n const createdAt = parseDate(value.createdAt);\n if (!createdAt) return null;\n\n const metadata = value.metadata;\n if (!isRecord(metadata) || !isRecord(metadata.custom)) return null;\n\n if (value.role === \"assistant\") {\n const status = value.status;\n if (!isRecord(status) || typeof status.type !== \"string\") return null;\n\n const submittedFeedback = isRecord(metadata.submittedFeedback)\n ? metadata.submittedFeedback\n : undefined;\n const submittedFeedbackType = submittedFeedback?.type;\n\n return {\n id: value.id,\n role: \"assistant\",\n content: parseStoredMessageParts(\n value.content,\n depth,\n ) as StoredAssistantMessage[\"content\"],\n status: status as StoredAssistantMessage[\"status\"],\n createdAt,\n metadata: {\n unstable_state: (metadata.unstable_state ??\n null) as StoredAssistantMessage[\"metadata\"][\"unstable_state\"],\n unstable_annotations: Array.isArray(metadata.unstable_annotations)\n ? (metadata.unstable_annotations as StoredAssistantMessage[\"metadata\"][\"unstable_annotations\"])\n : [],\n unstable_data: Array.isArray(metadata.unstable_data)\n ? (metadata.unstable_data as StoredAssistantMessage[\"metadata\"][\"unstable_data\"])\n : [],\n steps: Array.isArray(metadata.steps)\n ? (metadata.steps as StoredAssistantMessage[\"metadata\"][\"steps\"])\n : [],\n ...(submittedFeedbackType === \"positive\" ||\n submittedFeedbackType === \"negative\"\n ? {\n submittedFeedback: {\n type: submittedFeedbackType,\n },\n }\n : undefined),\n ...(metadata.timing !== undefined\n ? {\n timing: metadata.timing as NonNullable<\n StoredAssistantMessage[\"metadata\"][\"timing\"]\n >,\n }\n : undefined),\n ...(metadata.isOptimistic === true\n ? { isOptimistic: true }\n : undefined),\n custom: metadata.custom,\n },\n };\n }\n\n if (value.role === \"user\") {\n return {\n id: value.id,\n role: \"user\",\n content: parseStoredMessageParts(\n value.content,\n depth,\n ) as StoredUserMessage[\"content\"],\n attachments: Array.isArray(value.attachments)\n ? value.attachments.flatMap((item) => {\n const attachment = parseStoredAttachment(item);\n return attachment ? [attachment] : [];\n })\n : [],\n createdAt,\n metadata: {\n custom: metadata.custom,\n },\n };\n }\n\n const content = parseStoredMessageParts(value.content, depth);\n if (content.length !== 1) return null;\n\n return {\n id: value.id,\n role: \"system\",\n content: [content[0] as StoredSystemMessage[\"content\"][0]],\n createdAt,\n metadata: {\n custom: metadata.custom,\n },\n };\n};\n\nexport const parseStoredThreadMetadata = (\n raw: string | null,\n): StoredThreadMetadata[] => {\n const parsed = parseJSON(raw);\n if (!Array.isArray(parsed)) return [];\n\n return parsed.flatMap((item) => {\n const thread = parseStoredThread(item);\n return thread ? [thread] : [];\n });\n};\n\nconst parseStoredMessageRepositoryItem = (\n value: unknown,\n): ExportedMessageRepositoryItem | null => {\n if (!isRecord(value)) return null;\n\n const message = parseStoredThreadMessage(value.message, 0);\n if (!message) return null;\n\n const parentId = value.parentId;\n if (\n parentId !== undefined &&\n parentId !== null &&\n typeof parentId !== \"string\"\n ) {\n return null;\n }\n\n return {\n message,\n parentId: parentId ?? null,\n ...(isRecord(value.runConfig)\n ? { runConfig: value.runConfig as RunConfig }\n : undefined),\n };\n};\n\nexport const parseStoredMessageRepository = (\n raw: string | null,\n): ExportedMessageRepository => {\n const parsed = parseJSON(raw);\n if (!isRecord(parsed) || !Array.isArray(parsed.messages)) {\n return { messages: [] };\n }\n\n const candidateMessages = parsed.messages.flatMap((item) => {\n const parsedItem = parseStoredMessageRepositoryItem(item);\n return parsedItem ? [parsedItem] : [];\n });\n\n const acceptedIds = new Set<string>();\n const messages = candidateMessages.flatMap((item) => {\n if (acceptedIds.has(item.message.id)) return [];\n if (item.parentId !== null && !acceptedIds.has(item.parentId)) return [];\n\n acceptedIds.add(item.message.id);\n return [item];\n });\n\n const headId =\n parsed.headId === null ||\n (typeof parsed.headId === \"string\" &&\n messages.some((item) => item.message.id === parsed.headId))\n ? parsed.headId\n : undefined;\n\n return {\n ...(headId !== undefined ? { headId } : undefined),\n messages,\n };\n};\n\nclass AsyncStorageHistoryAdapter implements ThreadHistoryAdapter {\n private storage: AsyncStorageLike;\n private getAui: () => ReturnType<typeof useAui>;\n private prefix: string;\n private mutationQueue: KeyedMutationQueue;\n\n constructor(\n storage: AsyncStorageLike,\n getAui: () => ReturnType<typeof useAui>,\n prefix: string,\n mutationQueue: KeyedMutationQueue,\n ) {\n this.storage = storage;\n this.getAui = getAui;\n this.prefix = prefix;\n this.mutationQueue = mutationQueue;\n }\n\n private get aui(): ReturnType<typeof useAui> {\n return this.getAui();\n }\n\n private _messagesKey(remoteId: string) {\n return `${this.prefix}messages:${remoteId}`;\n }\n\n async load(): Promise<ExportedMessageRepository> {\n const remoteId = this.aui.threadListItem.getState().remoteId;\n if (!remoteId) return { messages: [] };\n\n const raw = await this.storage.getItem(this._messagesKey(remoteId));\n return parseStoredMessageRepository(raw);\n }\n\n async append(item: ExportedMessageRepositoryItem): Promise<void> {\n const { remoteId } = await this.aui.threadListItem.initialize();\n\n const key = this._messagesKey(remoteId);\n await this.mutationQueue.run(key, async () => {\n const raw = await this.storage.getItem(key);\n const repo = parseStoredMessageRepository(raw);\n\n const idx = repo.messages.findIndex(\n (m) => m.message.id === item.message.id,\n );\n if (idx >= 0) {\n repo.messages[idx] = item;\n } else {\n repo.messages.push(item);\n }\n repo.headId = item.message.id;\n\n await this.storage.setItem(key, JSON.stringify(repo));\n });\n }\n}\n\nconst useLocalStorageThreadAdapters = (\n storage: AsyncStorageLike,\n prefix: string,\n mutationQueue: KeyedMutationQueue,\n): RuntimeAdapters => {\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 [history] = useState(\n () =>\n new AsyncStorageHistoryAdapter(\n storage,\n () => auiRef.current,\n prefix,\n mutationQueue,\n ),\n );\n return useMemo(() => ({ history }), [history]);\n};\n\nconst createHistoryProvider = (\n storage: AsyncStorageLike,\n prefix: string,\n mutationQueue: KeyedMutationQueue,\n): FC<PropsWithChildren> => {\n const Provider: FC<PropsWithChildren> = ({ children }) => {\n const adapters = useLocalStorageThreadAdapters(\n storage,\n prefix,\n mutationQueue,\n );\n return (\n <RuntimeAdapterProvider adapters={adapters}>\n {children}\n </RuntimeAdapterProvider>\n );\n };\n return Provider;\n};\n\nexport const createLocalStorageAdapter = (\n options: LocalStorageAdapterOptions,\n): RemoteThreadListAdapter => {\n const { storage, prefix = \"@assistant-ui:\", titleGenerator } = options;\n\n const threadsKey = `${prefix}threads`;\n const messagesKey = (threadId: string) => `${prefix}messages:${threadId}`;\n const mutationQueue = getMutationQueue(storage);\n\n const loadThreadMetadata = async (): Promise<StoredThreadMetadata[]> => {\n const raw = await storage.getItem(threadsKey);\n return parseStoredThreadMetadata(raw);\n };\n\n const saveThreadMetadata = async (\n threads: StoredThreadMetadata[],\n ): Promise<void> => {\n await storage.setItem(threadsKey, JSON.stringify(threads));\n };\n\n const updateThreadMetadata = async (\n remoteId: string,\n update: (thread: StoredThreadMetadata) => void,\n ): Promise<void> => {\n await mutationQueue.run(threadsKey, async () => {\n const threads = await loadThreadMetadata();\n const thread = threads.find((item) => item.remoteId === remoteId);\n if (thread) {\n update(thread);\n await saveThreadMetadata(threads);\n }\n });\n };\n\n const adapter: RemoteThreadListAdapter = {\n unstable_Provider: createHistoryProvider(storage, prefix, mutationQueue),\n unstable_useAdapters: function useLocalStorageAdapters() {\n return useLocalStorageThreadAdapters(storage, prefix, mutationQueue);\n },\n\n async list(): Promise<RemoteThreadListResponse> {\n const threads = await loadThreadMetadata();\n return {\n threads: threads.map((t) => ({\n remoteId: t.remoteId,\n externalId: t.externalId,\n status: t.status,\n title: t.title,\n custom: t.custom,\n })),\n };\n },\n\n async initialize(\n threadId: string,\n ): Promise<RemoteThreadInitializeResponse> {\n const remoteId = threadId;\n return mutationQueue.run(threadsKey, async () => {\n const threads = await loadThreadMetadata();\n\n // Only add if not already present\n if (!threads.some((t) => t.remoteId === remoteId)) {\n threads.unshift({\n remoteId,\n status: \"regular\",\n });\n await saveThreadMetadata(threads);\n }\n\n return { remoteId, externalId: undefined };\n });\n },\n\n async rename(remoteId: string, newTitle: string): Promise<void> {\n await updateThreadMetadata(remoteId, (thread) => {\n thread.title = newTitle;\n });\n },\n\n async updateCustom(\n remoteId: string,\n custom: Record<string, unknown> | undefined,\n ): Promise<void> {\n await updateThreadMetadata(remoteId, (thread) => {\n thread.custom = custom;\n });\n },\n\n async archive(remoteId: string): Promise<void> {\n await updateThreadMetadata(remoteId, (thread) => {\n thread.status = \"archived\";\n });\n },\n\n async unarchive(remoteId: string): Promise<void> {\n await updateThreadMetadata(remoteId, (thread) => {\n thread.status = \"regular\";\n });\n },\n\n async delete(remoteId: string): Promise<void> {\n await mutationQueue.run(threadsKey, async () => {\n const threads = await loadThreadMetadata();\n const filtered = threads.filter((t) => t.remoteId !== remoteId);\n await saveThreadMetadata(filtered);\n });\n const key = messagesKey(remoteId);\n await mutationQueue.run(key, () => storage.removeItem(key));\n },\n\n async fetch(threadId: string): Promise<RemoteThreadMetadata> {\n const threads = await loadThreadMetadata();\n const thread = threads.find((t) => t.remoteId === threadId);\n if (!thread)\n throw new Error(\n `Stored thread \"${threadId}\" not found while fetching thread metadata.`,\n );\n return {\n remoteId: thread.remoteId,\n externalId: thread.externalId,\n status: thread.status,\n title: thread.title,\n custom: thread.custom,\n };\n },\n\n async generateTitle(\n remoteId: string,\n messages: readonly ThreadMessage[],\n ): Promise<AssistantStream> {\n if (titleGenerator) {\n const title = await titleGenerator.generateTitle(messages);\n\n // Update the stored title\n await updateThreadMetadata(remoteId, (thread) => {\n thread.title = title;\n });\n\n // Return a stream with a single text part\n return createAssistantStream((controller) => {\n controller.appendText(title);\n });\n }\n\n // No title generator — return empty stream\n return createAssistantStream(() => {});\n },\n };\n\n return adapter;\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"LocalStorageThreadListAdapter.js","names":["AssistantStream","createAssistantStream","FC","PropsWithChildren","useEffect","useMemo","useRef","useState","useAui","MessageModality","RemoteThreadInitializeResponse","RemoteThreadListAdapter","RemoteThreadListResponse","RemoteThreadMetadata","ThreadHistoryAdapter","ThreadMessage","RunConfig","ExportedMessageRepository","ExportedMessageRepositoryItem","isRecord","MAX_STORED_MESSAGE_DEPTH","isStoredMessagePart","isStoredMessageRole","parseStoredAttachment","parseStoredDate","RuntimeAdapterProvider","RuntimeAdapters","TitleGenerationAdapter","AsyncStorageLike","getItem","key","Promise","setItem","value","removeItem","KeyedMutationQueue","tails","Map","run","mutation","T","previous","get","result","then","tail","undefined","set","delete","mutationQueues","WeakMap","getMutationQueue","storage","queue","LocalStorageAdapterOptions","prefix","titleGenerator","StoredThreadMetadata","remoteId","externalId","status","title","custom","Record","StoredSystemMessage","Extract","role","StoredUserMessage","StoredAssistantMessage","parseJSON","raw","JSON","parse","parseStoredThread","messageModalities","voice","isMessageModality","Object","hasOwn","parseStoredMessageParts","content","depth","flatMap","part","type","messages","toolCall","Array","isArray","item","message","parseStoredThreadMessage","id","createdAt","metadata","modality","submittedFeedback","submittedFeedbackType","submittedFeedbackComment","comment","unstable_state","unstable_annotations","unstable_data","steps","timing","NonNullable","isOptimistic","attachments","attachment","length","parseStoredThreadMetadata","parsed","thread","parseStoredMessageRepositoryItem","parentId","runConfig","parseStoredMessageRepository","candidateMessages","parsedItem","acceptedIds","Set","has","add","headId","some","AsyncStorageHistoryAdapter","getAui","ReturnType","mutationQueue","constructor","aui","_messagesKey","load","threadListItem","getState","append","initialize","repo","idx","findIndex","m","push","stringify","useLocalStorageThreadAdapters","auiRef","current","history","createHistoryProvider","Provider","t0","$","_c","children","adapters","t1","createLocalStorageAdapter","options","threadsKey","messagesKey","threadId","loadThreadMetadata","saveThreadMetadata","threads","updateThreadMetadata","update","find","adapter","unstable_Provider","unstable_useAdapters","useLocalStorageAdapters","list","map","t","unshift","rename","newTitle","updateCustom","archive","unarchive","filtered","filter","fetch","Error","generateTitle","controller","appendText"],"sources":["../../../src/react/adapters/LocalStorageThreadListAdapter.tsx"],"sourcesContent":["import { type AssistantStream, createAssistantStream } from \"assistant-stream\";\nimport {\n type FC,\n type PropsWithChildren,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { useAui } from \"@assistant-ui/store\";\nimport type {\n MessageModality,\n RemoteThreadInitializeResponse,\n RemoteThreadListAdapter,\n RemoteThreadListResponse,\n RemoteThreadMetadata,\n ThreadHistoryAdapter,\n ThreadMessage,\n RunConfig,\n} from \"../../index\";\nimport type {\n ExportedMessageRepository,\n ExportedMessageRepositoryItem,\n} from \"../../internal\";\nimport { isRecord } from \"../../utils/json/is-json\";\nimport {\n MAX_STORED_MESSAGE_DEPTH,\n isStoredMessagePart,\n isStoredMessageRole,\n parseStoredAttachment,\n parseStoredDate,\n} from \"../../runtime/utils/stored-message-parts\";\nimport {\n RuntimeAdapterProvider,\n type RuntimeAdapters,\n} from \"../runtimes/RuntimeAdapterProvider\";\nimport type { TitleGenerationAdapter } from \"./TitleGenerationAdapter\";\n\nexport type AsyncStorageLike = {\n getItem(key: string): Promise<string | null>;\n setItem(key: string, value: string): Promise<void>;\n removeItem(key: string): Promise<void>;\n};\n\nclass KeyedMutationQueue {\n private readonly tails = new Map<string, Promise<void>>();\n\n run<T>(key: string, mutation: () => Promise<T>): Promise<T> {\n const previous = this.tails.get(key);\n const result = previous ? previous.then(mutation) : mutation();\n const tail = result.then(\n () => undefined,\n () => undefined,\n );\n\n this.tails.set(key, tail);\n void tail.then(() => {\n if (this.tails.get(key) === tail) this.tails.delete(key);\n });\n\n return result;\n }\n}\n\nconst mutationQueues = new WeakMap<AsyncStorageLike, KeyedMutationQueue>();\n\nconst getMutationQueue = (storage: AsyncStorageLike): KeyedMutationQueue => {\n let queue = mutationQueues.get(storage);\n if (!queue) {\n queue = new KeyedMutationQueue();\n mutationQueues.set(storage, queue);\n }\n return queue;\n};\n\ntype LocalStorageAdapterOptions = {\n storage: AsyncStorageLike;\n prefix?: string | undefined;\n titleGenerator?: TitleGenerationAdapter | undefined;\n};\n\ntype StoredThreadMetadata = {\n remoteId: string;\n externalId?: string;\n status: \"regular\" | \"archived\";\n title?: string;\n custom?: Record<string, unknown> | undefined;\n};\n\ntype StoredSystemMessage = Extract<ThreadMessage, { role: \"system\" }>;\ntype StoredUserMessage = Extract<ThreadMessage, { role: \"user\" }>;\ntype StoredAssistantMessage = Extract<ThreadMessage, { role: \"assistant\" }>;\n\nconst parseJSON = (raw: string | null): unknown => {\n if (!raw) return undefined;\n try {\n return JSON.parse(raw) as unknown;\n } catch {\n return undefined;\n }\n};\n\nconst parseStoredThread = (value: unknown): StoredThreadMetadata | null => {\n if (!isRecord(value) || typeof value.remoteId !== \"string\") return null;\n\n const status = value.status ?? \"regular\";\n if (status !== \"regular\" && status !== \"archived\") return null;\n\n return {\n remoteId: value.remoteId,\n status,\n ...(typeof value.externalId === \"string\"\n ? { externalId: value.externalId }\n : undefined),\n ...(typeof value.title === \"string\" ? { title: value.title } : undefined),\n ...(isRecord(value.custom) ? { custom: value.custom } : undefined),\n };\n};\n\nconst messageModalities = {\n voice: true,\n} satisfies Record<MessageModality, true>;\n\nconst isMessageModality = (value: unknown): value is MessageModality =>\n typeof value === \"string\" && Object.hasOwn(messageModalities, value);\n\nconst parseStoredMessageParts = (\n content: unknown[],\n depth: number,\n): unknown[] =>\n content.flatMap((part) => {\n if (!isStoredMessagePart(part)) return [];\n if (part.type !== \"tool-call\" || part.messages === undefined) return [part];\n\n const { messages, ...toolCall } = part;\n if (!Array.isArray(messages)) return [toolCall];\n return [\n {\n ...toolCall,\n messages: messages.flatMap((item) => {\n const message = parseStoredThreadMessage(item, depth + 1);\n return message ? [message] : [];\n }),\n },\n ];\n });\n\nconst parseStoredThreadMessage = (\n value: unknown,\n depth: number,\n): ThreadMessage | null => {\n if (depth > MAX_STORED_MESSAGE_DEPTH) return null;\n if (!isRecord(value) || typeof value.id !== \"string\") return null;\n if (!isStoredMessageRole(value.role)) return null;\n if (!Array.isArray(value.content)) return null;\n\n const createdAt = parseStoredDate(value.createdAt);\n if (!createdAt) return null;\n\n const metadata = value.metadata;\n if (!isRecord(metadata) || !isRecord(metadata.custom)) return null;\n\n const modality = isMessageModality(metadata.modality)\n ? metadata.modality\n : undefined;\n\n if (value.role === \"assistant\") {\n const status = value.status;\n if (!isRecord(status) || typeof status.type !== \"string\") return null;\n\n const submittedFeedback = isRecord(metadata.submittedFeedback)\n ? metadata.submittedFeedback\n : undefined;\n const submittedFeedbackType = submittedFeedback?.type;\n const submittedFeedbackComment = submittedFeedback?.comment;\n\n return {\n id: value.id,\n role: \"assistant\",\n content: parseStoredMessageParts(\n value.content,\n depth,\n ) as StoredAssistantMessage[\"content\"],\n status: status as StoredAssistantMessage[\"status\"],\n createdAt,\n metadata: {\n unstable_state: (metadata.unstable_state ??\n null) as StoredAssistantMessage[\"metadata\"][\"unstable_state\"],\n unstable_annotations: Array.isArray(metadata.unstable_annotations)\n ? (metadata.unstable_annotations as StoredAssistantMessage[\"metadata\"][\"unstable_annotations\"])\n : [],\n unstable_data: Array.isArray(metadata.unstable_data)\n ? (metadata.unstable_data as StoredAssistantMessage[\"metadata\"][\"unstable_data\"])\n : [],\n steps: Array.isArray(metadata.steps)\n ? (metadata.steps as StoredAssistantMessage[\"metadata\"][\"steps\"])\n : [],\n ...(submittedFeedbackType === \"positive\" ||\n submittedFeedbackType === \"negative\"\n ? {\n submittedFeedback: {\n type: submittedFeedbackType,\n ...(typeof submittedFeedbackComment === \"string\" &&\n submittedFeedbackComment !== \"\"\n ? { comment: submittedFeedbackComment }\n : undefined),\n },\n }\n : undefined),\n ...(metadata.timing !== undefined\n ? {\n timing: metadata.timing as NonNullable<\n StoredAssistantMessage[\"metadata\"][\"timing\"]\n >,\n }\n : undefined),\n ...(metadata.isOptimistic === true\n ? { isOptimistic: true }\n : undefined),\n ...(modality !== undefined ? { modality } : undefined),\n custom: metadata.custom,\n },\n };\n }\n\n if (value.role === \"user\") {\n return {\n id: value.id,\n role: \"user\",\n content: parseStoredMessageParts(\n value.content,\n depth,\n ) as StoredUserMessage[\"content\"],\n attachments: Array.isArray(value.attachments)\n ? value.attachments.flatMap((item) => {\n const attachment = parseStoredAttachment(item, isStoredMessagePart);\n return attachment ? [attachment] : [];\n })\n : [],\n createdAt,\n metadata: {\n ...(modality !== undefined ? { modality } : undefined),\n custom: metadata.custom,\n },\n };\n }\n\n const content = parseStoredMessageParts(value.content, depth);\n if (content.length !== 1) return null;\n\n return {\n id: value.id,\n role: \"system\",\n content: [content[0] as StoredSystemMessage[\"content\"][0]],\n createdAt,\n metadata: {\n custom: metadata.custom,\n },\n };\n};\n\nexport const parseStoredThreadMetadata = (\n raw: string | null,\n): StoredThreadMetadata[] => {\n const parsed = parseJSON(raw);\n if (!Array.isArray(parsed)) return [];\n\n return parsed.flatMap((item) => {\n const thread = parseStoredThread(item);\n return thread ? [thread] : [];\n });\n};\n\nconst parseStoredMessageRepositoryItem = (\n value: unknown,\n): ExportedMessageRepositoryItem | null => {\n if (!isRecord(value)) return null;\n\n const message = parseStoredThreadMessage(value.message, 0);\n if (!message) return null;\n\n const parentId = value.parentId;\n if (\n parentId !== undefined &&\n parentId !== null &&\n typeof parentId !== \"string\"\n ) {\n return null;\n }\n\n return {\n message,\n parentId: parentId ?? null,\n ...(isRecord(value.runConfig)\n ? { runConfig: value.runConfig as RunConfig }\n : undefined),\n };\n};\n\nexport const parseStoredMessageRepository = (\n raw: string | null,\n): ExportedMessageRepository => {\n const parsed = parseJSON(raw);\n if (!isRecord(parsed) || !Array.isArray(parsed.messages)) {\n return { messages: [] };\n }\n\n const candidateMessages = parsed.messages.flatMap((item) => {\n const parsedItem = parseStoredMessageRepositoryItem(item);\n return parsedItem ? [parsedItem] : [];\n });\n\n const acceptedIds = new Set<string>();\n const messages = candidateMessages.flatMap((item) => {\n if (acceptedIds.has(item.message.id)) return [];\n if (item.parentId !== null && !acceptedIds.has(item.parentId)) return [];\n\n acceptedIds.add(item.message.id);\n return [item];\n });\n\n const headId =\n parsed.headId === null ||\n (typeof parsed.headId === \"string\" &&\n messages.some((item) => item.message.id === parsed.headId))\n ? parsed.headId\n : undefined;\n\n return {\n ...(headId !== undefined ? { headId } : undefined),\n messages,\n };\n};\n\nclass AsyncStorageHistoryAdapter implements ThreadHistoryAdapter {\n private storage: AsyncStorageLike;\n private getAui: () => ReturnType<typeof useAui>;\n private prefix: string;\n private mutationQueue: KeyedMutationQueue;\n\n constructor(\n storage: AsyncStorageLike,\n getAui: () => ReturnType<typeof useAui>,\n prefix: string,\n mutationQueue: KeyedMutationQueue,\n ) {\n this.storage = storage;\n this.getAui = getAui;\n this.prefix = prefix;\n this.mutationQueue = mutationQueue;\n }\n\n private get aui(): ReturnType<typeof useAui> {\n return this.getAui();\n }\n\n private _messagesKey(remoteId: string) {\n return `${this.prefix}messages:${remoteId}`;\n }\n\n async load(): Promise<ExportedMessageRepository> {\n const remoteId = this.aui.threadListItem.getState().remoteId;\n if (!remoteId) return { messages: [] };\n\n const raw = await this.storage.getItem(this._messagesKey(remoteId));\n return parseStoredMessageRepository(raw);\n }\n\n async append(item: ExportedMessageRepositoryItem): Promise<void> {\n const { remoteId } = await this.aui.threadListItem.initialize();\n\n const key = this._messagesKey(remoteId);\n await this.mutationQueue.run(key, async () => {\n const raw = await this.storage.getItem(key);\n const repo = parseStoredMessageRepository(raw);\n\n const idx = repo.messages.findIndex(\n (m) => m.message.id === item.message.id,\n );\n if (idx >= 0) {\n repo.messages[idx] = item;\n } else {\n repo.messages.push(item);\n }\n repo.headId = item.message.id;\n\n await this.storage.setItem(key, JSON.stringify(repo));\n });\n }\n}\n\nconst useLocalStorageThreadAdapters = (\n storage: AsyncStorageLike,\n prefix: string,\n mutationQueue: KeyedMutationQueue,\n): RuntimeAdapters => {\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 [history] = useState(\n () =>\n new AsyncStorageHistoryAdapter(\n storage,\n () => auiRef.current,\n prefix,\n mutationQueue,\n ),\n );\n return useMemo(() => ({ history }), [history]);\n};\n\nconst createHistoryProvider = (\n storage: AsyncStorageLike,\n prefix: string,\n mutationQueue: KeyedMutationQueue,\n): FC<PropsWithChildren> => {\n const Provider: FC<PropsWithChildren> = ({ children }) => {\n const adapters = useLocalStorageThreadAdapters(\n storage,\n prefix,\n mutationQueue,\n );\n return (\n <RuntimeAdapterProvider adapters={adapters}>\n {children}\n </RuntimeAdapterProvider>\n );\n };\n return Provider;\n};\n\nexport const createLocalStorageAdapter = (\n options: LocalStorageAdapterOptions,\n): RemoteThreadListAdapter => {\n const { storage, prefix = \"@assistant-ui:\", titleGenerator } = options;\n\n const threadsKey = `${prefix}threads`;\n const messagesKey = (threadId: string) => `${prefix}messages:${threadId}`;\n const mutationQueue = getMutationQueue(storage);\n\n const loadThreadMetadata = async (): Promise<StoredThreadMetadata[]> => {\n const raw = await storage.getItem(threadsKey);\n return parseStoredThreadMetadata(raw);\n };\n\n const saveThreadMetadata = async (\n threads: StoredThreadMetadata[],\n ): Promise<void> => {\n await storage.setItem(threadsKey, JSON.stringify(threads));\n };\n\n const updateThreadMetadata = async (\n remoteId: string,\n update: (thread: StoredThreadMetadata) => void,\n ): Promise<void> => {\n await mutationQueue.run(threadsKey, async () => {\n const threads = await loadThreadMetadata();\n const thread = threads.find((item) => item.remoteId === remoteId);\n if (thread) {\n update(thread);\n await saveThreadMetadata(threads);\n }\n });\n };\n\n const adapter: RemoteThreadListAdapter = {\n unstable_Provider: createHistoryProvider(storage, prefix, mutationQueue),\n unstable_useAdapters: function useLocalStorageAdapters() {\n return useLocalStorageThreadAdapters(storage, prefix, mutationQueue);\n },\n\n async list(): Promise<RemoteThreadListResponse> {\n const threads = await loadThreadMetadata();\n return {\n threads: threads.map((t) => ({\n remoteId: t.remoteId,\n externalId: t.externalId,\n status: t.status,\n title: t.title,\n custom: t.custom,\n })),\n };\n },\n\n async initialize(\n threadId: string,\n ): Promise<RemoteThreadInitializeResponse> {\n const remoteId = threadId;\n return mutationQueue.run(threadsKey, async () => {\n const threads = await loadThreadMetadata();\n\n // Only add if not already present\n if (!threads.some((t) => t.remoteId === remoteId)) {\n threads.unshift({\n remoteId,\n status: \"regular\",\n });\n await saveThreadMetadata(threads);\n }\n\n return { remoteId, externalId: undefined };\n });\n },\n\n async rename(remoteId: string, newTitle: string): Promise<void> {\n await updateThreadMetadata(remoteId, (thread) => {\n thread.title = newTitle;\n });\n },\n\n async updateCustom(\n remoteId: string,\n custom: Record<string, unknown> | undefined,\n ): Promise<void> {\n await updateThreadMetadata(remoteId, (thread) => {\n thread.custom = custom;\n });\n },\n\n async archive(remoteId: string): Promise<void> {\n await updateThreadMetadata(remoteId, (thread) => {\n thread.status = \"archived\";\n });\n },\n\n async unarchive(remoteId: string): Promise<void> {\n await updateThreadMetadata(remoteId, (thread) => {\n thread.status = \"regular\";\n });\n },\n\n async delete(remoteId: string): Promise<void> {\n await mutationQueue.run(threadsKey, async () => {\n const threads = await loadThreadMetadata();\n const filtered = threads.filter((t) => t.remoteId !== remoteId);\n await saveThreadMetadata(filtered);\n });\n const key = messagesKey(remoteId);\n await mutationQueue.run(key, () => storage.removeItem(key));\n },\n\n async fetch(threadId: string): Promise<RemoteThreadMetadata> {\n const threads = await loadThreadMetadata();\n const thread = threads.find((t) => t.remoteId === threadId);\n if (!thread)\n throw new Error(\n `Stored thread \"${threadId}\" not found while fetching thread metadata.`,\n );\n return {\n remoteId: thread.remoteId,\n externalId: thread.externalId,\n status: thread.status,\n title: thread.title,\n custom: thread.custom,\n };\n },\n\n async generateTitle(\n remoteId: string,\n messages: readonly ThreadMessage[],\n ): Promise<AssistantStream> {\n if (titleGenerator) {\n const title = await titleGenerator.generateTitle(messages);\n\n // Update the stored title\n await updateThreadMetadata(remoteId, (thread) => {\n thread.title = title;\n });\n\n // Return a stream with a single text part\n return createAssistantStream((controller) => {\n controller.appendText(title);\n });\n }\n\n // No title generator — return empty stream\n return createAssistantStream(() => {});\n },\n };\n\n return adapter;\n};\n"],"mappings":"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"}
@@ -1,9 +1,8 @@
1
1
  import { ThreadMessage } from "../../types/message.js";
2
2
  //#region src/react/adapters/TitleGenerationAdapter.d.ts
3
- type TitleGenerationAdapter = {
3
+ export type TitleGenerationAdapter = {
4
4
  generateTitle(messages: readonly ThreadMessage[]): Promise<string>;
5
5
  };
6
- declare const createSimpleTitleAdapter: () => TitleGenerationAdapter;
6
+ export declare const createSimpleTitleAdapter: () => TitleGenerationAdapter;
7
7
  //#endregion
8
- export { TitleGenerationAdapter, createSimpleTitleAdapter };
9
8
  //# sourceMappingURL=TitleGenerationAdapter.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"TitleGenerationAdapter.d.ts","names":[],"sources":["../../../src/react/adapters/TitleGenerationAdapter.ts"],"mappings":";;KAEY;EACV,cAAc,mBAAmB,kBAAkB;;cAGxC,gCAA+B"}
1
+ {"version":3,"file":"TitleGenerationAdapter.d.ts","names":[],"sources":["../../../src/react/adapters/TitleGenerationAdapter.ts"],"mappings":";;YAEY;EACV,cAAc,mBAAmB,kBAAkB;;qBAGxC,gCAA+B"}
@@ -2,10 +2,9 @@ import { RuntimeAdapters } from "../../runtimes/remote-thread-list/types.js";
2
2
  import { ClientOutput } from "@assistant-ui/store";
3
3
  import { ResourceElement } from "@assistant-ui/tap";
4
4
  //#region src/react/client/AdaptedRemoteThread.d.ts
5
- declare const AdaptedRemoteThread: import("@assistant-ui/tap").Resource<ClientOutput<"thread">, [{
5
+ export declare const AdaptedRemoteThread: import("@assistant-ui/tap").Resource<ClientOutput<"thread">, [{
6
6
  useAdapters: () => RuntimeAdapters | null | undefined;
7
7
  thread: ResourceElement<ClientOutput<"thread">>;
8
8
  }]>;
9
9
  //#endregion
10
- export { AdaptedRemoteThread };
11
10
  //# sourceMappingURL=AdaptedRemoteThread.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"AdaptedRemoteThread.d.ts","names":[],"sources":["../../../src/react/client/AdaptedRemoteThread.ts"],"mappings":";;;;cAwCa,iDAAmB,SAAA;EAxBjB,mBAAM;EACX,QAAA,gBAAgB"}
1
+ {"version":3,"file":"AdaptedRemoteThread.d.ts","names":[],"sources":["../../../src/react/client/AdaptedRemoteThread.ts"],"mappings":";;;;qBAwCa,iDAAmB,SAAA;EAxBjB,mBAAM;EACX,QAAA,gBAAgB"}
@@ -1,6 +1,5 @@
1
1
  import { ClientOutput } from "@assistant-ui/store";
2
2
  //#region src/react/client/DataRenderers.d.ts
3
- declare const DataRenderers: import("@assistant-ui/tap").Resource<ClientOutput<"dataRenderers">, []>;
3
+ export declare const DataRenderers: import("@assistant-ui/tap").Resource<ClientOutput<"dataRenderers">, []>;
4
4
  //#endregion
5
- export { DataRenderers };
6
5
  //# sourceMappingURL=DataRenderers.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"DataRenderers.d.ts","names":[],"sources":["../../../src/react/client/DataRenderers.ts"],"mappings":";;cAuEa,2CAAa,SAAA"}
1
+ {"version":3,"file":"DataRenderers.d.ts","names":[],"sources":["../../../src/react/client/DataRenderers.ts"],"mappings":";;qBAuEa,2CAAa,SAAA"}
@@ -1,19 +1,18 @@
1
1
  import { AssistantClient, ClientOutput, ScopesConfig } from "@assistant-ui/store";
2
2
  import { ResourceElement } from "@assistant-ui/tap";
3
3
  //#region src/react/client/InMemoryThreadList.d.ts
4
- type InMemoryThreadListProps = {
4
+ export type InMemoryThreadListProps = {
5
5
  thread: (threadId: string) => ResourceElement<ClientOutput<"thread">>;
6
6
  onSwitchToThread?: (threadId: string) => void;
7
7
  onSwitchToNewThread?: () => void;
8
8
  onDelete?: (threadId: string) => void;
9
9
  };
10
- declare const InMemoryThreadList: import("@assistant-ui/tap").Resource<ClientOutput<"threads">, [props: InMemoryThreadListProps]>;
10
+ export declare const InMemoryThreadList: import("@assistant-ui/tap").Resource<ClientOutput<"threads">, [props: InMemoryThreadListProps]>;
11
11
  /**
12
12
  * The scope defaults `InMemoryThreadList` installs when it is used as the
13
13
  * `threads` config entry. Adapter packages that wrap it in their own config
14
14
  * entry attach this to the wrapping resource for scope parity.
15
15
  */
16
- declare const inMemoryThreadListTransformScopes: (scopes: ScopesConfig, parent: AssistantClient) => void;
16
+ export declare const inMemoryThreadListTransformScopes: (scopes: ScopesConfig, parent: AssistantClient) => void;
17
17
  //#endregion
18
- export { InMemoryThreadList, InMemoryThreadListProps, inMemoryThreadListTransformScopes };
19
18
  //# sourceMappingURL=InMemoryThreadList.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"InMemoryThreadList.d.ts","names":[],"sources":["../../../src/react/client/InMemoryThreadList.ts"],"mappings":";;;KAqBY;EACV,SAAS,qBAAqB,gBAAgB;EAC9C,oBAAoB;EACpB;EACA,YAAY;;cAkOD,gDAAkB,SAAA,0BAAA,OAAA;;;;;;cAOlB,oCACX,QAAQ,cACR,QAAQ"}
1
+ {"version":3,"file":"InMemoryThreadList.d.ts","names":[],"sources":["../../../src/react/client/InMemoryThreadList.ts"],"mappings":";;;YAqBY;EACV,SAAS,qBAAqB,gBAAgB;EAC9C,oBAAoB;EACpB;EACA,YAAY;;qBAkOD,gDAAkB,SAAA,0BAAA,OAAA;;;;;;qBAOlB,oCACX,QAAQ,cACR,QAAQ"}
@@ -6,7 +6,6 @@ import { ClientOutput } from "@assistant-ui/store";
6
6
  *
7
7
  * @deprecated Unstable / Experimental (not actually removed).
8
8
  */
9
- declare const unstable_Interactables: import("@assistant-ui/tap").Resource<ClientOutput<"unstable_interactables">, [(Unstable_InteractablesConfig | undefined)?]>;
9
+ export declare const unstable_Interactables: import("@assistant-ui/tap").Resource<ClientOutput<"unstable_interactables">, [(Unstable_InteractablesConfig | undefined)?]>;
10
10
  //#endregion
11
- export { unstable_Interactables };
12
11
  //# sourceMappingURL=Interactables.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Interactables.d.ts","names":[],"sources":["../../../src/react/client/Interactables.ts"],"mappings":";;;;;;;;cA2hBa,oDAAsB,SAAA,0CAAA"}
1
+ {"version":3,"file":"Interactables.d.ts","names":[],"sources":["../../../src/react/client/Interactables.ts"],"mappings":";;;;;;;;qBA2hBa,oDAAsB,SAAA,0CAAA"}
@@ -2,7 +2,7 @@ import { InMemoryThreadListProps } from "./InMemoryThreadList.js";
2
2
  import { RemoteThreadListAdapter } from "../../runtimes/remote-thread-list/types.js";
3
3
  import { ClientOutput } from "@assistant-ui/store";
4
4
  //#region src/react/client/RemoteThreadList.d.ts
5
- type RemoteThreadListProps = {
5
+ export type RemoteThreadListProps = {
6
6
  /**
7
7
  * Swapping this to a different backing store does not reload the list. Call `reload()` after a genuine swap. A recreated object for the same store is a no-op. `reload()` after a different adapter instance resets selection and cached records before loading.
8
8
  */
@@ -44,7 +44,6 @@ type RemoteThreadListProps = {
44
44
  * across switches, per-item `isRunning` is live, and freshly initialized
45
45
  * threads title themselves.
46
46
  */
47
- declare const RemoteThreadList: import("@assistant-ui/tap").Resource<ClientOutput<"threads">, [props: RemoteThreadListProps]>;
47
+ export declare const RemoteThreadList: import("@assistant-ui/tap").Resource<ClientOutput<"threads">, [props: RemoteThreadListProps]>;
48
48
  //#endregion
49
- export { RemoteThreadList, RemoteThreadListProps };
50
49
  //# sourceMappingURL=RemoteThreadList.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"RemoteThreadList.d.ts","names":[],"sources":["../../../src/react/client/RemoteThreadList.ts"],"mappings":";;;;KAiEY;;;;EAIV,SAAS;;;;;;;EAOT,QAAQ;EACR;EACA,qBAAqB;EACrB,qBAAqB;EACrB;;EAEA,aAAa;;;;;;;;;;;;EAYb;;;;;;;;;;;;;cAswCW,8CAAgB,SAAA,0BAAA,OAAA"}
1
+ {"version":3,"file":"RemoteThreadList.d.ts","names":[],"sources":["../../../src/react/client/RemoteThreadList.ts"],"mappings":";;;;YAiEY;;;;EAIV,SAAS;;;;;;;EAOT,QAAQ;EACR;EACA,qBAAqB;EACrB,qBAAqB;EACrB;;EAEA,aAAa;;;;;;;;;;;;EAYb;;;;;;;;;;;;;qBAswCW,8CAAgB,SAAA,0BAAA,OAAA"}
@@ -3,12 +3,12 @@ import { McpAppResourceOutput } from "../types/scopes/tools.js";
3
3
  import { ClientOutput } from "@assistant-ui/store";
4
4
  import { ResourceElement } from "@assistant-ui/tap";
5
5
  //#region src/react/client/Tools.d.ts
6
- declare const Tools: import("@assistant-ui/tap").Resource<ClientOutput<"tools">, [{
6
+ export declare const Tools: import("@assistant-ui/tap").Resource<ClientOutput<"tools">, [{
7
7
  /** Tools to expose to the model and optional renderers to install. */
8
8
  toolkit?: Toolkit;
9
9
  /** Optional MCP app resource whose tools should be merged into context. */
10
10
  mcpApp?: ResourceElement<McpAppResourceOutput> | undefined;
11
11
  }]>;
12
12
  //#endregion
13
- export { type McpAppResourceOutput, Tools };
13
+ export type { McpAppResourceOutput };
14
14
  //# sourceMappingURL=Tools.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Tools.d.ts","names":[],"sources":["../../../src/react/client/Tools.ts"],"mappings":";;;;;cA8Ka,mCAAK,SAAA;;EAtIN,UAAA;;EAED,SAAA,gBAAgB"}
1
+ {"version":3,"file":"Tools.d.ts","names":[],"sources":["../../../src/react/client/Tools.ts"],"mappings":";;;;;qBA8Ka,mCAAK,SAAA;;EAtIN,UAAA;;EAED,SAAA,gBAAgB"}