@assistant-ui/core 0.2.20 → 0.2.22

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 (610) hide show
  1. package/dist/adapters/attachment.d.ts +2 -2
  2. package/dist/adapters/attachment.d.ts.map +1 -1
  3. package/dist/adapters/attachment.js +14 -7
  4. package/dist/adapters/attachment.js.map +1 -1
  5. package/dist/adapters/directive-formatter.d.ts +0 -1
  6. package/dist/adapters/directive-formatter.d.ts.map +1 -1
  7. package/dist/adapters/feedback.d.ts +0 -1
  8. package/dist/adapters/feedback.d.ts.map +1 -1
  9. package/dist/adapters/index.d.ts +2 -2
  10. package/dist/adapters/index.js +2 -1
  11. package/dist/adapters/speech.d.ts +0 -1
  12. package/dist/adapters/speech.d.ts.map +1 -1
  13. package/dist/adapters/speech.js +9 -2
  14. package/dist/adapters/speech.js.map +1 -1
  15. package/dist/adapters/suggestion.d.ts +16 -2
  16. package/dist/adapters/suggestion.d.ts.map +1 -1
  17. package/dist/adapters/suggestion.js +36 -0
  18. package/dist/adapters/suggestion.js.map +1 -0
  19. package/dist/adapters/thread-history.d.ts +2 -2
  20. package/dist/adapters/thread-history.d.ts.map +1 -1
  21. package/dist/adapters/trigger.d.ts +5 -3
  22. package/dist/adapters/trigger.d.ts.map +1 -1
  23. package/dist/adapters/voice.d.ts +0 -1
  24. package/dist/adapters/voice.d.ts.map +1 -1
  25. package/dist/adapters/voice.js +13 -5
  26. package/dist/adapters/voice.js.map +1 -1
  27. package/dist/index.d.ts +4 -3
  28. package/dist/index.js +3 -1
  29. package/dist/index.js.map +1 -1
  30. package/dist/internal/duplicate-detection.d.ts.map +1 -1
  31. package/dist/internal.d.ts +9 -1
  32. package/dist/internal.js +8 -2
  33. package/dist/model-context/frame/host.d.ts +1 -1
  34. package/dist/model-context/frame/host.d.ts.map +1 -1
  35. package/dist/model-context/frame/host.js +5 -0
  36. package/dist/model-context/frame/host.js.map +1 -1
  37. package/dist/model-context/frame/provider.d.ts +0 -1
  38. package/dist/model-context/frame/provider.d.ts.map +1 -1
  39. package/dist/model-context/frame/provider.js +1 -0
  40. package/dist/model-context/frame/provider.js.map +1 -1
  41. package/dist/model-context/frame/types.d.ts.map +1 -1
  42. package/dist/model-context/interactable-composer-metadata.d.ts +4 -2
  43. package/dist/model-context/interactable-composer-metadata.d.ts.map +1 -1
  44. package/dist/model-context/interactable-composer-metadata.js.map +1 -1
  45. package/dist/model-context/registry-handles.d.ts +0 -1
  46. package/dist/model-context/registry-handles.d.ts.map +1 -1
  47. package/dist/model-context/registry.d.ts +0 -1
  48. package/dist/model-context/registry.d.ts.map +1 -1
  49. package/dist/model-context/tool.d.ts +23 -9
  50. package/dist/model-context/tool.d.ts.map +1 -1
  51. package/dist/model-context/tool.js +0 -25
  52. package/dist/model-context/tool.js.map +1 -1
  53. package/dist/model-context/types.d.ts +0 -1
  54. package/dist/model-context/types.d.ts.map +1 -1
  55. package/dist/react/AssistantProvider.d.ts +0 -1
  56. package/dist/react/AssistantProvider.d.ts.map +1 -1
  57. package/dist/react/AssistantProvider.js.map +1 -1
  58. package/dist/react/AssistantRuntimeProvider.d.ts +1 -6
  59. package/dist/react/AssistantRuntimeProvider.d.ts.map +1 -1
  60. package/dist/react/RuntimeAdapter.d.ts +1 -0
  61. package/dist/react/RuntimeAdapter.d.ts.map +1 -1
  62. package/dist/react/adapters/LocalStorageThreadListAdapter.d.ts +13 -2
  63. package/dist/react/adapters/LocalStorageThreadListAdapter.d.ts.map +1 -1
  64. package/dist/react/adapters/LocalStorageThreadListAdapter.js +196 -54
  65. package/dist/react/adapters/LocalStorageThreadListAdapter.js.map +1 -1
  66. package/dist/react/adapters/TitleGenerationAdapter.d.ts +0 -1
  67. package/dist/react/adapters/TitleGenerationAdapter.d.ts.map +1 -1
  68. package/dist/react/client/DataRenderers.d.ts +0 -1
  69. package/dist/react/client/DataRenderers.d.ts.map +1 -1
  70. package/dist/react/client/Interactables.d.ts +0 -1
  71. package/dist/react/client/Interactables.d.ts.map +1 -1
  72. package/dist/react/client/Interactables.js.map +1 -1
  73. package/dist/react/client/Tools.d.ts +3 -2
  74. package/dist/react/client/Tools.d.ts.map +1 -1
  75. package/dist/react/client/interactable-model-context.d.ts +0 -1
  76. package/dist/react/client/interactable-model-context.d.ts.map +1 -1
  77. package/dist/react/index.d.ts +2 -2
  78. package/dist/react/interactables-legacy/Interactables.d.ts +0 -1
  79. package/dist/react/interactables-legacy/Interactables.d.ts.map +1 -1
  80. package/dist/react/interactables-legacy/interactable-model-context.d.ts +0 -1
  81. package/dist/react/interactables-legacy/interactable-model-context.d.ts.map +1 -1
  82. package/dist/react/interactables-legacy/scopes.d.ts +4 -2
  83. package/dist/react/interactables-legacy/scopes.d.ts.map +1 -1
  84. package/dist/react/interactables-legacy/useAssistantInteractable.d.ts +0 -1
  85. package/dist/react/interactables-legacy/useAssistantInteractable.d.ts.map +1 -1
  86. package/dist/react/interactables-legacy/useInteractableState.d.ts.map +1 -1
  87. package/dist/react/model-context/define-mcp-toolkit.d.ts +19 -4
  88. package/dist/react/model-context/define-mcp-toolkit.d.ts.map +1 -1
  89. package/dist/react/model-context/define-mcp-toolkit.js +17 -5
  90. package/dist/react/model-context/define-mcp-toolkit.js.map +1 -1
  91. package/dist/react/model-context/define-toolkit.d.ts +1 -2
  92. package/dist/react/model-context/define-toolkit.d.ts.map +1 -1
  93. package/dist/react/model-context/external-tool.d.ts.map +1 -1
  94. package/dist/react/model-context/human-tool.d.ts.map +1 -1
  95. package/dist/react/model-context/interactableTool.d.ts +2 -2
  96. package/dist/react/model-context/interactableTool.d.ts.map +1 -1
  97. package/dist/react/model-context/makeAssistantDataUI.d.ts +2 -2
  98. package/dist/react/model-context/makeAssistantDataUI.d.ts.map +1 -1
  99. package/dist/react/model-context/makeAssistantTool.d.ts +2 -2
  100. package/dist/react/model-context/makeAssistantTool.d.ts.map +1 -1
  101. package/dist/react/model-context/makeAssistantToolUI.d.ts +2 -2
  102. package/dist/react/model-context/makeAssistantToolUI.d.ts.map +1 -1
  103. package/dist/react/model-context/provider-tool.d.ts +0 -1
  104. package/dist/react/model-context/provider-tool.d.ts.map +1 -1
  105. package/dist/react/model-context/stub-tool.d.ts.map +1 -1
  106. package/dist/react/model-context/toolbox.d.ts +5 -5
  107. package/dist/react/model-context/toolbox.d.ts.map +1 -1
  108. package/dist/react/model-context/useAssistantContext.d.ts +1 -0
  109. package/dist/react/model-context/useAssistantContext.d.ts.map +1 -1
  110. package/dist/react/model-context/useAssistantDataUI.d.ts +3 -2
  111. package/dist/react/model-context/useAssistantDataUI.d.ts.map +1 -1
  112. package/dist/react/model-context/useAssistantInstructions.d.ts +1 -0
  113. package/dist/react/model-context/useAssistantInstructions.d.ts.map +1 -1
  114. package/dist/react/model-context/useAssistantTool.d.ts +4 -2
  115. package/dist/react/model-context/useAssistantTool.d.ts.map +1 -1
  116. package/dist/react/model-context/useAssistantToolUI.d.ts +3 -2
  117. package/dist/react/model-context/useAssistantToolUI.d.ts.map +1 -1
  118. package/dist/react/model-context/useAuiToolOverrides.d.ts +0 -1
  119. package/dist/react/model-context/useAuiToolOverrides.d.ts.map +1 -1
  120. package/dist/react/model-context/useInlineRender.d.ts +0 -1
  121. package/dist/react/model-context/useInlineRender.d.ts.map +1 -1
  122. package/dist/react/model-context/useInteractable.d.ts +7 -4
  123. package/dist/react/model-context/useInteractable.d.ts.map +1 -1
  124. package/dist/react/model-context/useInteractable.js.map +1 -1
  125. package/dist/react/model-context/useInteractableState.d.ts.map +1 -1
  126. package/dist/react/model-context/useInteractableVersions.d.ts +0 -1
  127. package/dist/react/model-context/useInteractableVersions.d.ts.map +1 -1
  128. package/dist/react/model-context/useToolArgsStatus.d.ts +3 -1
  129. package/dist/react/model-context/useToolArgsStatus.d.ts.map +1 -1
  130. package/dist/react/primitive-hooks/useActionBarCopy.d.ts +1 -4
  131. package/dist/react/primitive-hooks/useActionBarCopy.d.ts.map +1 -1
  132. package/dist/react/primitive-hooks/useActionBarCopy.js +13 -13
  133. package/dist/react/primitive-hooks/useActionBarCopy.js.map +1 -1
  134. package/dist/react/primitive-hooks/useActionBarEdit.d.ts.map +1 -1
  135. package/dist/react/primitive-hooks/useActionBarFeedback.d.ts.map +1 -1
  136. package/dist/react/primitive-hooks/useActionBarReload.d.ts.map +1 -1
  137. package/dist/react/primitive-hooks/useActionBarSpeak.d.ts.map +1 -1
  138. package/dist/react/primitive-hooks/useActionBarStopSpeaking.d.ts.map +1 -1
  139. package/dist/react/primitive-hooks/useBranchPickerNext.d.ts.map +1 -1
  140. package/dist/react/primitive-hooks/useBranchPickerPrevious.d.ts.map +1 -1
  141. package/dist/react/primitive-hooks/useComposerAddAttachment.d.ts +0 -1
  142. package/dist/react/primitive-hooks/useComposerAddAttachment.d.ts.map +1 -1
  143. package/dist/react/primitive-hooks/useComposerCancel.d.ts.map +1 -1
  144. package/dist/react/primitive-hooks/useComposerDictate.d.ts.map +1 -1
  145. package/dist/react/primitive-hooks/useComposerSend.d.ts +0 -1
  146. package/dist/react/primitive-hooks/useComposerSend.d.ts.map +1 -1
  147. package/dist/react/primitive-hooks/useEditComposerCancel.d.ts.map +1 -1
  148. package/dist/react/primitive-hooks/useEditComposerSend.d.ts.map +1 -1
  149. package/dist/react/primitive-hooks/useMessageBranching.d.ts.map +1 -1
  150. package/dist/react/primitive-hooks/useMessageError.d.ts.map +1 -1
  151. package/dist/react/primitive-hooks/useMessageError.js +5 -1
  152. package/dist/react/primitive-hooks/useMessageError.js.map +1 -1
  153. package/dist/react/primitive-hooks/useMessageReload.d.ts.map +1 -1
  154. package/dist/react/primitive-hooks/useSuggestionTrigger.d.ts +1 -5
  155. package/dist/react/primitive-hooks/useSuggestionTrigger.d.ts.map +1 -1
  156. package/dist/react/primitive-hooks/useThreadIsEmpty.d.ts.map +1 -1
  157. package/dist/react/primitive-hooks/useThreadIsRunning.d.ts.map +1 -1
  158. package/dist/react/primitive-hooks/useThreadListItemArchive.d.ts.map +1 -1
  159. package/dist/react/primitive-hooks/useThreadListItemDelete.d.ts.map +1 -1
  160. package/dist/react/primitive-hooks/useThreadListItemTrigger.d.ts.map +1 -1
  161. package/dist/react/primitive-hooks/useThreadListItemUnarchive.d.ts.map +1 -1
  162. package/dist/react/primitive-hooks/useThreadListLoadMore.d.ts.map +1 -1
  163. package/dist/react/primitive-hooks/useThreadListNew.d.ts.map +1 -1
  164. package/dist/react/primitive-hooks/useThreadMessageIds.d.ts.map +1 -1
  165. package/dist/react/primitive-hooks/useThreadMessages.d.ts +0 -1
  166. package/dist/react/primitive-hooks/useThreadMessages.d.ts.map +1 -1
  167. package/dist/react/primitive-hooks/useVoice.d.ts +0 -1
  168. package/dist/react/primitive-hooks/useVoice.d.ts.map +1 -1
  169. package/dist/react/primitives/chainOfThought/ChainOfThoughtParts.d.ts +7 -4
  170. package/dist/react/primitives/chainOfThought/ChainOfThoughtParts.d.ts.map +1 -1
  171. package/dist/react/primitives/chainOfThought/ChainOfThoughtParts.js +1 -1
  172. package/dist/react/primitives/chainOfThought/ChainOfThoughtParts.js.map +1 -1
  173. package/dist/react/primitives/composer/ComposerAttachments.d.ts +4 -3
  174. package/dist/react/primitives/composer/ComposerAttachments.d.ts.map +1 -1
  175. package/dist/react/primitives/composer/ComposerAttachments.js.map +1 -1
  176. package/dist/react/primitives/composer/ComposerIf.d.ts +4 -3
  177. package/dist/react/primitives/composer/ComposerIf.d.ts.map +1 -1
  178. package/dist/react/primitives/composer/ComposerQueue.d.ts +2 -2
  179. package/dist/react/primitives/composer/ComposerQueue.d.ts.map +1 -1
  180. package/dist/react/primitives/composer/ComposerQueue.js.map +1 -1
  181. package/dist/react/primitives/generativeUI/GenerativeUI.d.ts +2 -2
  182. package/dist/react/primitives/generativeUI/GenerativeUI.d.ts.map +1 -1
  183. package/dist/react/primitives/message/MessageAttachments.d.ts +4 -3
  184. package/dist/react/primitives/message/MessageAttachments.d.ts.map +1 -1
  185. package/dist/react/primitives/message/MessageAttachments.js.map +1 -1
  186. package/dist/react/primitives/message/MessageGroupedParts.d.ts +1 -6
  187. package/dist/react/primitives/message/MessageGroupedParts.d.ts.map +1 -1
  188. package/dist/react/primitives/message/MessageGroupedParts.js.map +1 -1
  189. package/dist/react/primitives/message/MessageParts.d.ts +44 -25
  190. package/dist/react/primitives/message/MessageParts.d.ts.map +1 -1
  191. package/dist/react/primitives/message/MessageParts.js +48 -37
  192. package/dist/react/primitives/message/MessageParts.js.map +1 -1
  193. package/dist/react/primitives/message/MessageQuote.d.ts +2 -2
  194. package/dist/react/primitives/message/MessageQuote.d.ts.map +1 -1
  195. package/dist/react/primitives/messagePart/MessagePartInProgress.d.ts +0 -1
  196. package/dist/react/primitives/messagePart/MessagePartInProgress.d.ts.map +1 -1
  197. package/dist/react/primitives/part/PartMessages.d.ts +2 -2
  198. package/dist/react/primitives/part/PartMessages.d.ts.map +1 -1
  199. package/dist/react/primitives/part/PartMessages.js.map +1 -1
  200. package/dist/react/primitives/thread/ThreadMessages.d.ts +35 -17
  201. package/dist/react/primitives/thread/ThreadMessages.d.ts.map +1 -1
  202. package/dist/react/primitives/thread/ThreadMessages.js.map +1 -1
  203. package/dist/react/primitives/thread/ThreadSuggestions.d.ts +6 -4
  204. package/dist/react/primitives/thread/ThreadSuggestions.d.ts.map +1 -1
  205. package/dist/react/primitives/thread/ThreadSuggestions.js.map +1 -1
  206. package/dist/react/primitives/threadList/ThreadListItems.d.ts +4 -3
  207. package/dist/react/primitives/threadList/ThreadListItems.d.ts.map +1 -1
  208. package/dist/react/primitives/threadList/ThreadListItems.js.map +1 -1
  209. package/dist/react/primitives/threadListItem/ThreadListItemTitle.d.ts +0 -1
  210. package/dist/react/primitives/threadListItem/ThreadListItemTitle.d.ts.map +1 -1
  211. package/dist/react/providers/AttachmentByIndexProvider.d.ts +0 -1
  212. package/dist/react/providers/AttachmentByIndexProvider.d.ts.map +1 -1
  213. package/dist/react/providers/ChainOfThoughtByIndicesProvider.d.ts +0 -1
  214. package/dist/react/providers/ChainOfThoughtByIndicesProvider.d.ts.map +1 -1
  215. package/dist/react/providers/ChainOfThoughtPartByIndexProvider.d.ts +0 -1
  216. package/dist/react/providers/ChainOfThoughtPartByIndexProvider.d.ts.map +1 -1
  217. package/dist/react/providers/ChainOfThoughtPartByIndexProvider.js +18 -30
  218. package/dist/react/providers/ChainOfThoughtPartByIndexProvider.js.map +1 -1
  219. package/dist/react/providers/MessageByIdProvider.d.ts +0 -1
  220. package/dist/react/providers/MessageByIdProvider.d.ts.map +1 -1
  221. package/dist/react/providers/MessageByIndexProvider.d.ts +0 -1
  222. package/dist/react/providers/MessageByIndexProvider.d.ts.map +1 -1
  223. package/dist/react/providers/PartByIndexProvider.d.ts +0 -1
  224. package/dist/react/providers/PartByIndexProvider.d.ts.map +1 -1
  225. package/dist/react/providers/PartByIndexProvider.js +18 -30
  226. package/dist/react/providers/PartByIndexProvider.js.map +1 -1
  227. package/dist/react/providers/QueueItemByIndexProvider.d.ts +0 -1
  228. package/dist/react/providers/QueueItemByIndexProvider.d.ts.map +1 -1
  229. package/dist/react/providers/ReadonlyThreadProvider.d.ts +0 -1
  230. package/dist/react/providers/ReadonlyThreadProvider.d.ts.map +1 -1
  231. package/dist/react/providers/SuggestionByIndexProvider.d.ts +0 -1
  232. package/dist/react/providers/SuggestionByIndexProvider.d.ts.map +1 -1
  233. package/dist/react/providers/TextMessagePartProvider.d.ts +0 -1
  234. package/dist/react/providers/TextMessagePartProvider.d.ts.map +1 -1
  235. package/dist/react/providers/ThreadListItemByIndexProvider.d.ts +0 -1
  236. package/dist/react/providers/ThreadListItemByIndexProvider.d.ts.map +1 -1
  237. package/dist/react/providers/ThreadListItemRuntimeProvider.d.ts +1 -1
  238. package/dist/react/providers/ThreadListItemRuntimeProvider.d.ts.map +1 -1
  239. package/dist/react/runtimes/RemoteThreadListHookInstanceManager.d.ts +2 -1
  240. package/dist/react/runtimes/RemoteThreadListHookInstanceManager.d.ts.map +1 -1
  241. package/dist/react/runtimes/RemoteThreadListHookInstanceManager.js +2 -1
  242. package/dist/react/runtimes/RemoteThreadListHookInstanceManager.js.map +1 -1
  243. package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.d.ts +12 -3
  244. package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.d.ts.map +1 -1
  245. package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.js +70 -27
  246. package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.js.map +1 -1
  247. package/dist/react/runtimes/RuntimeAdapterProvider.d.ts +0 -1
  248. package/dist/react/runtimes/RuntimeAdapterProvider.d.ts.map +1 -1
  249. package/dist/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.d.ts +0 -1
  250. package/dist/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.d.ts.map +1 -1
  251. package/dist/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.js +1 -1
  252. package/dist/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.js.map +1 -1
  253. package/dist/react/runtimes/cloud/CloudFileAttachmentAdapter.d.ts +1 -4
  254. package/dist/react/runtimes/cloud/CloudFileAttachmentAdapter.d.ts.map +1 -1
  255. package/dist/react/runtimes/cloud/CloudFileAttachmentAdapter.js +8 -4
  256. package/dist/react/runtimes/cloud/CloudFileAttachmentAdapter.js.map +1 -1
  257. package/dist/react/runtimes/cloud/auiV0.d.ts +12 -2
  258. package/dist/react/runtimes/cloud/auiV0.d.ts.map +1 -1
  259. package/dist/react/runtimes/cloud/auiV0.js +30 -1
  260. package/dist/react/runtimes/cloud/auiV0.js.map +1 -1
  261. package/dist/react/runtimes/cloud/useCloudThreadListAdapter.d.ts +0 -1
  262. package/dist/react/runtimes/cloud/useCloudThreadListAdapter.d.ts.map +1 -1
  263. package/dist/react/runtimes/createMessageConverter.d.ts +1 -7
  264. package/dist/react/runtimes/createMessageConverter.d.ts.map +1 -1
  265. package/dist/react/runtimes/createRuntimeExtras.d.ts +0 -1
  266. package/dist/react/runtimes/createRuntimeExtras.d.ts.map +1 -1
  267. package/dist/react/runtimes/external-message-converter.d.ts +1 -8
  268. package/dist/react/runtimes/external-message-converter.d.ts.map +1 -1
  269. package/dist/react/runtimes/external-message-converter.js +43 -45
  270. package/dist/react/runtimes/external-message-converter.js.map +1 -1
  271. package/dist/react/runtimes/useExternalStoreRuntime.d.ts +0 -1
  272. package/dist/react/runtimes/useExternalStoreRuntime.d.ts.map +1 -1
  273. package/dist/react/runtimes/useExternalStoreSharedOptions.d.ts +0 -1
  274. package/dist/react/runtimes/useExternalStoreSharedOptions.d.ts.map +1 -1
  275. package/dist/react/runtimes/useLocalRuntime.d.ts +3 -5
  276. package/dist/react/runtimes/useLocalRuntime.d.ts.map +1 -1
  277. package/dist/react/runtimes/useLocalRuntime.js +9 -1
  278. package/dist/react/runtimes/useLocalRuntime.js.map +1 -1
  279. package/dist/react/runtimes/useRemoteThreadListRuntime.d.ts +0 -1
  280. package/dist/react/runtimes/useRemoteThreadListRuntime.d.ts.map +1 -1
  281. package/dist/react/runtimes/useStreamingTiming.d.ts +0 -1
  282. package/dist/react/runtimes/useStreamingTiming.d.ts.map +1 -1
  283. package/dist/react/types/MessagePartComponentTypes.d.ts +6 -3
  284. package/dist/react/types/MessagePartComponentTypes.d.ts.map +1 -1
  285. package/dist/react/types/scopes/dataRenderers.d.ts +1 -1
  286. package/dist/react/types/scopes/dataRenderers.d.ts.map +1 -1
  287. package/dist/react/types/scopes/interactables.d.ts +4 -2
  288. package/dist/react/types/scopes/interactables.d.ts.map +1 -1
  289. package/dist/react/types/scopes/tools.d.ts +5 -3
  290. package/dist/react/types/scopes/tools.d.ts.map +1 -1
  291. package/dist/react/types/store-augmentation.d.ts +1 -2
  292. package/dist/react/types/store-augmentation.d.ts.map +1 -1
  293. package/dist/react/utils/getMessageQuote.d.ts +0 -1
  294. package/dist/react/utils/getMessageQuote.d.ts.map +1 -1
  295. package/dist/react/utils/groupParts.d.ts +2 -2
  296. package/dist/react/utils/groupParts.d.ts.map +1 -1
  297. package/dist/react/utils/useJSONEqual.d.ts.map +1 -1
  298. package/dist/runtime/api/assistant-runtime.d.ts +0 -1
  299. package/dist/runtime/api/assistant-runtime.d.ts.map +1 -1
  300. package/dist/runtime/api/attachment-runtime.d.ts +0 -1
  301. package/dist/runtime/api/attachment-runtime.d.ts.map +1 -1
  302. package/dist/runtime/api/bindings.d.ts +0 -1
  303. package/dist/runtime/api/bindings.d.ts.map +1 -1
  304. package/dist/runtime/api/composer-runtime.d.ts +6 -4
  305. package/dist/runtime/api/composer-runtime.d.ts.map +1 -1
  306. package/dist/runtime/api/message-part-runtime.d.ts +0 -1
  307. package/dist/runtime/api/message-part-runtime.d.ts.map +1 -1
  308. package/dist/runtime/api/message-runtime.d.ts +6 -16
  309. package/dist/runtime/api/message-runtime.d.ts.map +1 -1
  310. package/dist/runtime/api/message-runtime.js +5 -5
  311. package/dist/runtime/api/message-runtime.js.map +1 -1
  312. package/dist/runtime/api/paths.d.ts.map +1 -1
  313. package/dist/runtime/api/thread-list-item-runtime.d.ts +0 -1
  314. package/dist/runtime/api/thread-list-item-runtime.d.ts.map +1 -1
  315. package/dist/runtime/api/thread-list-item-runtime.js +2 -1
  316. package/dist/runtime/api/thread-list-item-runtime.js.map +1 -1
  317. package/dist/runtime/api/thread-list-runtime.d.ts +0 -1
  318. package/dist/runtime/api/thread-list-runtime.d.ts.map +1 -1
  319. package/dist/runtime/api/thread-runtime.d.ts +3 -1
  320. package/dist/runtime/api/thread-runtime.d.ts.map +1 -1
  321. package/dist/runtime/base/base-assistant-runtime-core.d.ts +0 -1
  322. package/dist/runtime/base/base-assistant-runtime-core.d.ts.map +1 -1
  323. package/dist/runtime/base/base-composer-runtime-core.d.ts +4 -2
  324. package/dist/runtime/base/base-composer-runtime-core.d.ts.map +1 -1
  325. package/dist/runtime/base/base-composer-runtime-core.js +51 -10
  326. package/dist/runtime/base/base-composer-runtime-core.js.map +1 -1
  327. package/dist/runtime/base/base-thread-runtime-core.d.ts +2 -4
  328. package/dist/runtime/base/base-thread-runtime-core.d.ts.map +1 -1
  329. package/dist/runtime/base/base-thread-runtime-core.js +3 -2
  330. package/dist/runtime/base/base-thread-runtime-core.js.map +1 -1
  331. package/dist/runtime/base/default-edit-composer-runtime-core.d.ts +1 -5
  332. package/dist/runtime/base/default-edit-composer-runtime-core.d.ts.map +1 -1
  333. package/dist/runtime/base/default-edit-composer-runtime-core.js +4 -2
  334. package/dist/runtime/base/default-edit-composer-runtime-core.js.map +1 -1
  335. package/dist/runtime/base/default-thread-composer-runtime-core.d.ts +1 -0
  336. package/dist/runtime/base/default-thread-composer-runtime-core.d.ts.map +1 -1
  337. package/dist/runtime/base/default-thread-composer-runtime-core.js +2 -2
  338. package/dist/runtime/base/default-thread-composer-runtime-core.js.map +1 -1
  339. package/dist/runtime/branch/external-thread-branch-adapter.d.ts.map +1 -1
  340. package/dist/runtime/interfaces/assistant-runtime-core.d.ts +0 -1
  341. package/dist/runtime/interfaces/assistant-runtime-core.d.ts.map +1 -1
  342. package/dist/runtime/interfaces/composer-runtime-core.d.ts +2 -2
  343. package/dist/runtime/interfaces/composer-runtime-core.d.ts.map +1 -1
  344. package/dist/runtime/interfaces/thread-list-runtime-core.d.ts +0 -1
  345. package/dist/runtime/interfaces/thread-list-runtime-core.d.ts.map +1 -1
  346. package/dist/runtime/interfaces/thread-runtime-core.d.ts +2 -2
  347. package/dist/runtime/interfaces/thread-runtime-core.d.ts.map +1 -1
  348. package/dist/runtime/queue/external-thread-queue-adapter.d.ts +0 -1
  349. package/dist/runtime/queue/external-thread-queue-adapter.d.ts.map +1 -1
  350. package/dist/runtime/queue/message-queue.d.ts +6 -4
  351. package/dist/runtime/queue/message-queue.d.ts.map +1 -1
  352. package/dist/runtime/queue/message-queue.js +1 -1
  353. package/dist/runtime/utils/auto-status.d.ts +0 -1
  354. package/dist/runtime/utils/auto-status.d.ts.map +1 -1
  355. package/dist/runtime/utils/chat-model-adapter.d.ts +0 -1
  356. package/dist/runtime/utils/chat-model-adapter.d.ts.map +1 -1
  357. package/dist/runtime/utils/external-store-message.d.ts +0 -1
  358. package/dist/runtime/utils/external-store-message.d.ts.map +1 -1
  359. package/dist/runtime/utils/message-repository.d.ts +1 -5
  360. package/dist/runtime/utils/message-repository.d.ts.map +1 -1
  361. package/dist/runtime/utils/message-repository.js +3 -1
  362. package/dist/runtime/utils/message-repository.js.map +1 -1
  363. package/dist/runtime/utils/resolveToolApprovalResponse.d.ts +0 -1
  364. package/dist/runtime/utils/resolveToolApprovalResponse.d.ts.map +1 -1
  365. package/dist/runtime/utils/streaming-timing.d.ts +5 -3
  366. package/dist/runtime/utils/streaming-timing.d.ts.map +1 -1
  367. package/dist/runtime/utils/thread-message-like.d.ts +2 -2
  368. package/dist/runtime/utils/thread-message-like.d.ts.map +1 -1
  369. package/dist/runtime/utils/thread-message-like.js +4 -1
  370. package/dist/runtime/utils/thread-message-like.js.map +1 -1
  371. package/dist/runtimes/assistant-transport/utils.d.ts.map +1 -1
  372. package/dist/runtimes/external-store/external-store-adapter.d.ts +2 -2
  373. package/dist/runtimes/external-store/external-store-adapter.d.ts.map +1 -1
  374. package/dist/runtimes/external-store/external-store-runtime-core.d.ts +0 -1
  375. package/dist/runtimes/external-store/external-store-runtime-core.d.ts.map +1 -1
  376. package/dist/runtimes/external-store/external-store-shared-options.d.ts +0 -1
  377. package/dist/runtimes/external-store/external-store-shared-options.d.ts.map +1 -1
  378. package/dist/runtimes/external-store/external-store-thread-list-runtime-core.d.ts +0 -1
  379. package/dist/runtimes/external-store/external-store-thread-list-runtime-core.d.ts.map +1 -1
  380. package/dist/runtimes/external-store/external-store-thread-runtime-core.d.ts +2 -0
  381. package/dist/runtimes/external-store/external-store-thread-runtime-core.d.ts.map +1 -1
  382. package/dist/runtimes/external-store/external-store-thread-runtime-core.js +1 -1
  383. package/dist/runtimes/external-store/external-store-thread-runtime-core.js.map +1 -1
  384. package/dist/runtimes/external-store/thread-message-converter.d.ts +0 -1
  385. package/dist/runtimes/external-store/thread-message-converter.d.ts.map +1 -1
  386. package/dist/runtimes/local/local-runtime-core.d.ts +0 -1
  387. package/dist/runtimes/local/local-runtime-core.d.ts.map +1 -1
  388. package/dist/runtimes/local/local-runtime-options.d.ts +0 -1
  389. package/dist/runtimes/local/local-runtime-options.d.ts.map +1 -1
  390. package/dist/runtimes/local/local-thread-list-runtime-core.d.ts +0 -1
  391. package/dist/runtimes/local/local-thread-list-runtime-core.d.ts.map +1 -1
  392. package/dist/runtimes/local/local-thread-runtime-core.d.ts +5 -21
  393. package/dist/runtimes/local/local-thread-runtime-core.d.ts.map +1 -1
  394. package/dist/runtimes/local/local-thread-runtime-core.js +29 -17
  395. package/dist/runtimes/local/local-thread-runtime-core.js.map +1 -1
  396. package/dist/runtimes/local/should-continue.d.ts +0 -1
  397. package/dist/runtimes/local/should-continue.d.ts.map +1 -1
  398. package/dist/runtimes/local/should-continue.js +2 -2
  399. package/dist/runtimes/local/should-continue.js.map +1 -1
  400. package/dist/runtimes/readonly/ReadonlyThreadRuntimeCore.d.ts +0 -1
  401. package/dist/runtimes/readonly/ReadonlyThreadRuntimeCore.d.ts.map +1 -1
  402. package/dist/runtimes/remote-thread-list/adapter/in-memory.d.ts +1 -2
  403. package/dist/runtimes/remote-thread-list/adapter/in-memory.d.ts.map +1 -1
  404. package/dist/runtimes/remote-thread-list/adapter/in-memory.js +5 -3
  405. package/dist/runtimes/remote-thread-list/adapter/in-memory.js.map +1 -1
  406. package/dist/runtimes/remote-thread-list/empty-thread-core.d.ts +0 -1
  407. package/dist/runtimes/remote-thread-list/empty-thread-core.d.ts.map +1 -1
  408. package/dist/runtimes/remote-thread-list/optimistic-state.d.ts +10 -8
  409. package/dist/runtimes/remote-thread-list/optimistic-state.d.ts.map +1 -1
  410. package/dist/runtimes/remote-thread-list/optimistic-state.js +22 -9
  411. package/dist/runtimes/remote-thread-list/optimistic-state.js.map +1 -1
  412. package/dist/runtimes/remote-thread-list/remote-thread-state.d.ts +0 -1
  413. package/dist/runtimes/remote-thread-list/remote-thread-state.d.ts.map +1 -1
  414. package/dist/runtimes/remote-thread-list/types.d.ts +1 -2
  415. package/dist/runtimes/remote-thread-list/types.d.ts.map +1 -1
  416. package/dist/runtimes/tool-invocations/ToolInvocationTracker.d.ts +2 -2
  417. package/dist/runtimes/tool-invocations/ToolInvocationTracker.d.ts.map +1 -1
  418. package/dist/runtimes/tool-invocations/ToolInvocationTracker.js +1 -2
  419. package/dist/runtimes/tool-invocations/ToolInvocationTracker.js.map +1 -1
  420. package/dist/store/clients/chain-of-thought-client.d.ts +0 -1
  421. package/dist/store/clients/chain-of-thought-client.d.ts.map +1 -1
  422. package/dist/store/clients/model-context-client.d.ts +0 -1
  423. package/dist/store/clients/model-context-client.d.ts.map +1 -1
  424. package/dist/store/clients/no-op-composer-client.d.ts +0 -1
  425. package/dist/store/clients/no-op-composer-client.d.ts.map +1 -1
  426. package/dist/store/clients/runtime-adapter.d.ts +0 -1
  427. package/dist/store/clients/runtime-adapter.d.ts.map +1 -1
  428. package/dist/store/clients/suggestions.d.ts +0 -1
  429. package/dist/store/clients/suggestions.d.ts.map +1 -1
  430. package/dist/store/clients/thread-message-client.d.ts +0 -1
  431. package/dist/store/clients/thread-message-client.d.ts.map +1 -1
  432. package/dist/store/runtime-clients/attachment-runtime-client.d.ts +0 -1
  433. package/dist/store/runtime-clients/attachment-runtime-client.d.ts.map +1 -1
  434. package/dist/store/runtime-clients/composer-runtime-client.d.ts +0 -1
  435. package/dist/store/runtime-clients/composer-runtime-client.d.ts.map +1 -1
  436. package/dist/store/runtime-clients/liveRef.d.ts.map +1 -1
  437. package/dist/store/runtime-clients/message-part-runtime-client.d.ts +0 -1
  438. package/dist/store/runtime-clients/message-part-runtime-client.d.ts.map +1 -1
  439. package/dist/store/runtime-clients/message-runtime-client.d.ts +0 -1
  440. package/dist/store/runtime-clients/message-runtime-client.d.ts.map +1 -1
  441. package/dist/store/runtime-clients/thread-list-item-runtime-client.d.ts +0 -1
  442. package/dist/store/runtime-clients/thread-list-item-runtime-client.d.ts.map +1 -1
  443. package/dist/store/runtime-clients/thread-list-runtime-client.d.ts +0 -1
  444. package/dist/store/runtime-clients/thread-list-runtime-client.d.ts.map +1 -1
  445. package/dist/store/runtime-clients/thread-runtime-client.d.ts +0 -1
  446. package/dist/store/runtime-clients/thread-runtime-client.d.ts.map +1 -1
  447. package/dist/store/runtime-clients/useSubscribable.d.ts +0 -1
  448. package/dist/store/runtime-clients/useSubscribable.d.ts.map +1 -1
  449. package/dist/store/scope-registration.d.ts +1 -2
  450. package/dist/store/scope-registration.d.ts.map +1 -1
  451. package/dist/store/scopes/attachment.d.ts +0 -1
  452. package/dist/store/scopes/attachment.d.ts.map +1 -1
  453. package/dist/store/scopes/chain-of-thought.d.ts +0 -1
  454. package/dist/store/scopes/chain-of-thought.d.ts.map +1 -1
  455. package/dist/store/scopes/composer.d.ts +0 -1
  456. package/dist/store/scopes/composer.d.ts.map +1 -1
  457. package/dist/store/scopes/message.d.ts +6 -4
  458. package/dist/store/scopes/message.d.ts.map +1 -1
  459. package/dist/store/scopes/model-context.d.ts +0 -1
  460. package/dist/store/scopes/model-context.d.ts.map +1 -1
  461. package/dist/store/scopes/part.d.ts +0 -1
  462. package/dist/store/scopes/part.d.ts.map +1 -1
  463. package/dist/store/scopes/queue-item.d.ts.map +1 -1
  464. package/dist/store/scopes/suggestion.d.ts.map +1 -1
  465. package/dist/store/scopes/suggestions.d.ts +0 -1
  466. package/dist/store/scopes/suggestions.d.ts.map +1 -1
  467. package/dist/store/scopes/thread-list-item.d.ts +0 -1
  468. package/dist/store/scopes/thread-list-item.d.ts.map +1 -1
  469. package/dist/store/scopes/thread.d.ts +4 -3
  470. package/dist/store/scopes/thread.d.ts.map +1 -1
  471. package/dist/store/scopes/threads.d.ts +0 -1
  472. package/dist/store/scopes/threads.d.ts.map +1 -1
  473. package/dist/subscribable/subscribable.d.ts +1 -2
  474. package/dist/subscribable/subscribable.d.ts.map +1 -1
  475. package/dist/subscribable/subscribable.js +11 -3
  476. package/dist/subscribable/subscribable.js.map +1 -1
  477. package/dist/tests/remote-thread-list-test-helpers.d.ts +2 -2
  478. package/dist/tests/remote-thread-list-test-helpers.d.ts.map +1 -1
  479. package/dist/tests/remote-thread-list-test-helpers.js +5 -2
  480. package/dist/tests/remote-thread-list-test-helpers.js.map +1 -1
  481. package/dist/types/attachment.d.ts +3 -2
  482. package/dist/types/attachment.d.ts.map +1 -1
  483. package/dist/types/attachment.js +6 -0
  484. package/dist/types/attachment.js.map +1 -0
  485. package/dist/types/directive.d.ts +3 -2
  486. package/dist/types/directive.d.ts.map +1 -1
  487. package/dist/types/error.d.ts +15 -0
  488. package/dist/types/error.d.ts.map +1 -0
  489. package/dist/types/error.js +46 -0
  490. package/dist/types/error.js.map +1 -0
  491. package/dist/types/index.d.ts +2 -2
  492. package/dist/types/message.d.ts +71 -33
  493. package/dist/types/message.d.ts.map +1 -1
  494. package/dist/types/message.js.map +1 -1
  495. package/dist/types/quote.d.ts.map +1 -1
  496. package/dist/types/trigger.d.ts +0 -1
  497. package/dist/types/trigger.d.ts.map +1 -1
  498. package/dist/types/unsubscribe.d.ts.map +1 -1
  499. package/dist/utils/composite-context-provider.d.ts +1 -0
  500. package/dist/utils/composite-context-provider.d.ts.map +1 -1
  501. package/dist/utils/data-url.d.ts +9 -0
  502. package/dist/utils/data-url.d.ts.map +1 -0
  503. package/dist/utils/data-url.js +14 -0
  504. package/dist/utils/data-url.js.map +1 -0
  505. package/dist/utils/id.d.ts.map +1 -1
  506. package/dist/utils/json/is-json-equal.d.ts.map +1 -1
  507. package/dist/utils/json/is-json.d.ts +0 -1
  508. package/dist/utils/json/is-json.d.ts.map +1 -1
  509. package/dist/utils/json/is-json.js +1 -1
  510. package/dist/utils/json/is-json.js.map +1 -1
  511. package/dist/utils/json/stable-stringify-tool-args.d.ts +7 -0
  512. package/dist/utils/json/stable-stringify-tool-args.d.ts.map +1 -0
  513. package/dist/utils/json/stable-stringify-tool-args.js +32 -0
  514. package/dist/utils/json/stable-stringify-tool-args.js.map +1 -0
  515. package/dist/utils/notify-event-listeners.d.ts +6 -0
  516. package/dist/utils/notify-event-listeners.d.ts.map +1 -0
  517. package/dist/utils/notify-event-listeners.js +16 -0
  518. package/dist/utils/notify-event-listeners.js.map +1 -0
  519. package/dist/utils/text.d.ts +0 -1
  520. package/dist/utils/text.d.ts.map +1 -1
  521. package/package.json +14 -10
  522. package/src/adapters/attachment.test.ts +107 -0
  523. package/src/adapters/attachment.ts +20 -10
  524. package/src/adapters/index.ts +6 -1
  525. package/src/adapters/speech.test.ts +88 -0
  526. package/src/adapters/speech.ts +17 -2
  527. package/src/adapters/suggestion.test.ts +187 -0
  528. package/src/adapters/suggestion.ts +75 -1
  529. package/src/adapters/voice.test.ts +130 -0
  530. package/src/adapters/voice.ts +26 -6
  531. package/src/index.ts +15 -1
  532. package/src/internal.ts +21 -0
  533. package/src/model-context/frame/host.test.ts +100 -0
  534. package/src/model-context/frame/host.ts +10 -0
  535. package/src/model-context/frame/provider.test.ts +83 -0
  536. package/src/model-context/frame/provider.ts +1 -0
  537. package/src/model-context/tool.test.ts +110 -0
  538. package/src/model-context/tool.ts +31 -9
  539. package/src/react/adapters/LocalStorageThreadListAdapter.test.ts +304 -0
  540. package/src/react/adapters/LocalStorageThreadListAdapter.tsx +307 -60
  541. package/src/react/index.ts +2 -0
  542. package/src/react/model-context/define-mcp-toolkit.ts +39 -6
  543. package/src/react/model-context/define-toolkit.test.ts +107 -0
  544. package/src/react/primitive-hooks/useActionBarCopy.test.ts +79 -0
  545. package/src/react/primitive-hooks/useActionBarCopy.ts +4 -3
  546. package/src/react/primitive-hooks/useMessageError.test.ts +64 -0
  547. package/src/react/primitive-hooks/useMessageError.ts +19 -6
  548. package/src/react/primitives/chainOfThought/ChainOfThoughtParts.tsx +1 -3
  549. package/src/react/primitives/message/MessageParts.tsx +48 -35
  550. package/src/react/providers/ChainOfThoughtPartByIndexProvider.tsx +19 -2
  551. package/src/react/providers/PartByIndexProvider.tsx +16 -2
  552. package/src/react/runtimes/RemoteThreadListHookInstanceManager.test.tsx +18 -0
  553. package/src/react/runtimes/RemoteThreadListHookInstanceManager.tsx +4 -1
  554. package/src/react/runtimes/RemoteThreadListThreadListRuntimeCore.tsx +96 -26
  555. package/src/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.test.tsx +69 -0
  556. package/src/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.ts +1 -1
  557. package/src/react/runtimes/cloud/CloudFileAttachmentAdapter.test.ts +127 -0
  558. package/src/react/runtimes/cloud/CloudFileAttachmentAdapter.ts +15 -4
  559. package/src/react/runtimes/cloud/auiV0.ts +71 -2
  560. package/src/react/runtimes/external-message-converter.test.tsx +123 -0
  561. package/src/react/runtimes/external-message-converter.ts +36 -11
  562. package/src/react/runtimes/useLocalRuntime.test.tsx +56 -0
  563. package/src/react/runtimes/useLocalRuntime.ts +13 -1
  564. package/src/runtime/api/message-runtime.test.ts +81 -0
  565. package/src/runtime/api/message-runtime.ts +4 -6
  566. package/src/runtime/api/thread-list-item-runtime.ts +6 -1
  567. package/src/runtime/base/base-composer-runtime-core.ts +95 -30
  568. package/src/runtime/base/base-thread-runtime-core.ts +2 -1
  569. package/src/runtime/base/default-edit-composer-runtime-core.ts +4 -2
  570. package/src/runtime/base/default-thread-composer-runtime-core.ts +2 -2
  571. package/src/runtime/utils/message-repository.ts +8 -3
  572. package/src/runtime/utils/thread-message-like.ts +3 -0
  573. package/src/runtimes/local/local-thread-runtime-core.test.ts +276 -3
  574. package/src/runtimes/local/local-thread-runtime-core.ts +29 -25
  575. package/src/runtimes/local/should-continue.ts +5 -2
  576. package/src/runtimes/remote-thread-list/adapter/in-memory.test.ts +14 -0
  577. package/src/runtimes/remote-thread-list/adapter/in-memory.ts +13 -5
  578. package/src/runtimes/remote-thread-list/optimistic-state.test.ts +63 -0
  579. package/src/runtimes/remote-thread-list/optimistic-state.ts +49 -17
  580. package/src/runtimes/remote-thread-list/types.ts +1 -1
  581. package/src/runtimes/tool-invocations/EDGE_CASES.md +13 -19
  582. package/src/runtimes/tool-invocations/ToolInvocationTracker.test.ts +127 -6
  583. package/src/runtimes/tool-invocations/ToolInvocationTracker.ts +4 -2
  584. package/src/subscribable/subscribable.test.ts +58 -0
  585. package/src/subscribable/subscribable.ts +13 -3
  586. package/src/tests/MessageRepository.test.ts +26 -0
  587. package/src/tests/OptimisticState-list-race.test.ts +33 -0
  588. package/src/tests/RemoteThreadListThreadListRuntimeCore-errors.test.ts +42 -0
  589. package/src/tests/RemoteThreadListThreadListRuntimeCore-switchToThread-order.test.ts +223 -0
  590. package/src/tests/attachment-adapters.test.ts +14 -2
  591. package/src/tests/auiV0Encode.test.ts +134 -1
  592. package/src/tests/base-composer-runtime-core-addAttachment.test.ts +123 -5
  593. package/src/tests/base-composer-runtime-core-send.test.ts +573 -0
  594. package/src/tests/default-edit-composer-runtime-core.test.ts +43 -5
  595. package/src/tests/event-subscription-listener-errors.test.ts +205 -0
  596. package/src/tests/remote-thread-list-test-helpers.ts +14 -7
  597. package/src/tests/thread-message-like.test.ts +97 -0
  598. package/src/types/attachment.ts +6 -0
  599. package/src/types/error.test.ts +122 -0
  600. package/src/types/error.ts +74 -0
  601. package/src/types/index.ts +1 -0
  602. package/src/types/message.ts +12 -3
  603. package/src/utils/data-url.test.ts +50 -0
  604. package/src/utils/data-url.ts +9 -0
  605. package/src/utils/json/is-json-equal.test.ts +84 -0
  606. package/src/utils/json/is-json.test.ts +123 -0
  607. package/src/utils/json/is-json.ts +1 -1
  608. package/src/utils/json/stable-stringify-tool-args.test.ts +105 -0
  609. package/src/utils/json/stable-stringify-tool-args.ts +70 -0
  610. package/src/utils/notify-event-listeners.ts +30 -0
@@ -1 +1 @@
1
- {"version":3,"file":"LocalStorageThreadListAdapter.js","names":["AssistantStream","createAssistantStream","FC","PropsWithChildren","useMemo","useAui","RemoteThreadInitializeResponse","RemoteThreadListAdapter","RemoteThreadListResponse","RemoteThreadMetadata","ThreadHistoryAdapter","ThreadMessage","ExportedMessageRepository","ExportedMessageRepositoryItem","RuntimeAdapterProvider","TitleGenerationAdapter","AsyncStorageLike","getItem","key","Promise","setItem","value","removeItem","LocalStorageAdapterOptions","storage","prefix","titleGenerator","StoredThreadMetadata","remoteId","externalId","status","title","custom","Record","AsyncStorageHistoryAdapter","constructor","aui","ReturnType","_messagesKey","load","threadListItem","getState","messages","raw","JSON","parse","append","item","initialize","repo","idx","findIndex","m","message","id","push","headId","stringify","createHistoryProvider","Provider","t0","$","_c","children","t1","history","t2","adapters","t3","createLocalStorageAdapter","options","threadsKey","messagesKey","threadId","loadThreadMetadata","saveThreadMetadata","threads","adapter","unstable_Provider","list","map","t","some","unshift","undefined","rename","newTitle","thread","find","updateCustom","archive","unarchive","delete","filtered","filter","fetch","Error","generateTitle","controller","appendText"],"sources":["../../../src/react/adapters/LocalStorageThreadListAdapter.tsx"],"sourcesContent":["import { type AssistantStream, createAssistantStream } from \"assistant-stream\";\nimport { type FC, type PropsWithChildren, useMemo } from \"react\";\nimport { useAui } from \"@assistant-ui/store\";\nimport type {\n RemoteThreadInitializeResponse,\n RemoteThreadListAdapter,\n RemoteThreadListResponse,\n RemoteThreadMetadata,\n ThreadHistoryAdapter,\n ThreadMessage,\n} from \"../../index\";\nimport type {\n ExportedMessageRepository,\n ExportedMessageRepositoryItem,\n} from \"../../internal\";\nimport { RuntimeAdapterProvider } 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\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\nclass AsyncStorageHistoryAdapter implements ThreadHistoryAdapter {\n constructor(\n private storage: AsyncStorageLike,\n private aui: ReturnType<typeof useAui>,\n private prefix: string,\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 if (!raw) return { messages: [] };\n return JSON.parse(raw) as ExportedMessageRepository;\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 const raw = await this.storage.getItem(key);\n const repo: ExportedMessageRepository = raw\n ? (JSON.parse(raw) as ExportedMessageRepository)\n : { messages: [] };\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\nconst createHistoryProvider = (\n storage: AsyncStorageLike,\n prefix: string,\n): FC<PropsWithChildren> => {\n const Provider: FC<PropsWithChildren> = ({ children }) => {\n const aui = useAui();\n const history = useMemo(\n () => new AsyncStorageHistoryAdapter(storage, aui, prefix),\n [aui],\n );\n const adapters = useMemo(() => ({ history }), [history]);\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\n const loadThreadMetadata = async (): Promise<StoredThreadMetadata[]> => {\n const raw = await storage.getItem(threadsKey);\n return raw ? (JSON.parse(raw) as StoredThreadMetadata[]) : [];\n };\n\n const saveThreadMetadata = async (\n threads: StoredThreadMetadata[],\n ): Promise<void> => {\n await storage.setItem(threadsKey, JSON.stringify(threads));\n };\n\n const adapter: RemoteThreadListAdapter = {\n unstable_Provider: createHistoryProvider(storage, prefix),\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 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 async rename(remoteId: string, newTitle: string): Promise<void> {\n const threads = await loadThreadMetadata();\n const thread = threads.find((t) => t.remoteId === remoteId);\n if (thread) {\n thread.title = newTitle;\n await saveThreadMetadata(threads);\n }\n },\n\n async updateCustom(\n remoteId: string,\n custom: Record<string, unknown> | undefined,\n ): Promise<void> {\n const threads = await loadThreadMetadata();\n const thread = threads.find((t) => t.remoteId === remoteId);\n if (thread) {\n thread.custom = custom;\n await saveThreadMetadata(threads);\n }\n },\n\n async archive(remoteId: string): Promise<void> {\n const threads = await loadThreadMetadata();\n const thread = threads.find((t) => t.remoteId === remoteId);\n if (thread) {\n thread.status = \"archived\";\n await saveThreadMetadata(threads);\n }\n },\n\n async unarchive(remoteId: string): Promise<void> {\n const threads = await loadThreadMetadata();\n const thread = threads.find((t) => t.remoteId === remoteId);\n if (thread) {\n thread.status = \"regular\";\n await saveThreadMetadata(threads);\n }\n },\n\n async delete(remoteId: string): Promise<void> {\n const threads = await loadThreadMetadata();\n const filtered = threads.filter((t) => t.remoteId !== remoteId);\n await saveThreadMetadata(filtered);\n await storage.removeItem(messagesKey(remoteId));\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) throw new Error(\"Thread not found\");\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 const threads = await loadThreadMetadata();\n const thread = threads.find((t) => t.remoteId === remoteId);\n if (thread) {\n thread.title = title;\n await saveThreadMetadata(threads);\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":";;;;;;AAsCA,IAAMkC,6BAAN,MAAiE;CAErDV;CACAY;CACAX;CAHVU,YACE,SACA,KACA,QACA;EAHQX,KAAAA,UAAAA;EACAY,KAAAA,MAAAA;EACAX,KAAAA,SAAAA;CACP;CAEH,aAAqBG,UAAkB;EACrC,OAAO,GAAG,KAAKH,OAAM,WAAYG;CACnC;CAEA,MAAMW,OAA2C;EAC/C,MAAMX,WAAW,KAAKQ,IAAII,eAAe,CAAC,CAACC,SAAS,CAAC,CAACb;EACtD,IAAI,CAACA,UAAU,OAAO,EAAEc,UAAU,CAAA,EAAG;EAErC,MAAMC,MAAM,MAAM,KAAKnB,QAAQP,QAAQ,KAAKqB,aAAaV,QAAQ,CAAC;EAClE,IAAI,CAACe,KAAK,OAAO,EAAED,UAAU,CAAA,EAAG;EAChC,OAAOE,KAAKC,MAAMF,GAAG;CACvB;CAEA,MAAMG,OAAOC,MAAoD;EAC/D,MAAM,EAAEnB,aAAa,MAAM,KAAKQ,IAAII,eAAe,CAAC,CAACQ,WAAW;EAEhE,MAAM9B,MAAM,KAAKoB,aAAaV,QAAQ;EACtC,MAAMe,MAAM,MAAM,KAAKnB,QAAQP,QAAQC,GAAG;EAC1C,MAAM+B,OAAkCN,MACnCC,KAAKC,MAAMF,GAAG,IACf,EAAED,UAAU,CAAA,EAAG;EAEnB,MAAMQ,MAAMD,KAAKP,SAASS,WACvBC,MAAMA,EAAEC,QAAQC,OAAOP,KAAKM,QAAQC,EACvC;EACA,IAAIJ,OAAO,GACTD,KAAKP,SAASQ,OAAOH;OAErBE,KAAKP,SAASa,KAAKR,IAAI;EAEzBE,KAAKO,SAAST,KAAKM,QAAQC;EAE3B,MAAM,KAAK9B,QAAQJ,QAAQF,KAAK0B,KAAKa,UAAUR,IAAI,CAAC;CACtD;AACF;AAEA,MAAMS,yBACJlC,SACAC,WAC0B;CAC1B,MAAMkC,YAAkCC,OAAA;EAAA,MAAAC,IAAAC,EAAA,CAAA;EAAC,MAAA,EAAAC,aAAAH;EACvC,MAAAxB,MAAY/B,OAAO;EAAE,IAAA2D;EAAA,IAAAH,EAAA,OAAAzB,KAAA;GAEb4B,KAAA,IAAI9B,2BAA2BV,SAASY,KAAKX,MAAM;GAACoC,EAAA,KAAAzB;GAAAyB,EAAA,KAAAG;EAAA,OAAAA,KAAAH,EAAA;EAD5D,MAAAI,UACQD;EAEN,IAAAE;EAAA,IAAAL,EAAA,OAAAI,SAAA;GAC8BC,KAAA,EAAAD,QAAU;GAACJ,EAAA,KAAAI;GAAAJ,EAAA,KAAAK;EAAA,OAAAA,KAAAL,EAAA;EAA3C,MAAAM,WAAgCD;EAAyB,IAAAE;EAAA,IAAAP,EAAA,OAAAM,YAAAN,EAAA,OAAAE,UAAA;GAGvDK,KAAA,oBAAC,wBAAD;IAAkCD;IAC/BJ;GADoB,CAAA;GAEEF,EAAA,KAAAM;GAAAN,EAAA,KAAAE;GAAAF,EAAA,KAAAO;EAAA,OAAAA,KAAAP,EAAA;EAAA,OAFzBO;CAEyB;CAG7B,OAAOT;AACT;AAEA,MAAaU,6BACXC,YAC4B;CAC5B,MAAM,EAAE9C,SAASC,SAAS,kBAAkBC,mBAAmB4C;CAE/D,MAAMC,aAAa,GAAG9C,OAAM;CAC5B,MAAM+C,eAAeC,aAAqB,GAAGhD,OAAM,WAAYgD;CAE/D,MAAMC,qBAAqB,YAA6C;EACtE,MAAM/B,MAAM,MAAMnB,QAAQP,QAAQsD,UAAU;EAC5C,OAAO5B,MAAOC,KAAKC,MAAMF,GAAG,IAA+B,CAAA;CAC7D;CAEA,MAAMgC,qBAAqB,OACzBC,YACkB;EAClB,MAAMpD,QAAQJ,QAAQmD,YAAY3B,KAAKa,UAAUmB,OAAO,CAAC;CAC3D;CAyHA,OAAOC;EAtHLC,mBAAmBpB,sBAAsBlC,SAASC,MAAM;EAExD,MAAMsD,OAA0C;GAE9C,OAAO,EACLH,UAASA,MAFWF,mBAAmB,EAAA,CAEtBM,KAAKC,OAAO;IAC3BrD,UAAUqD,EAAErD;IACZC,YAAYoD,EAAEpD;IACdC,QAAQmD,EAAEnD;IACVC,OAAOkD,EAAElD;IACTC,QAAQiD,EAAEjD;GACZ,EAAE,EACJ;EACF;EAEA,MAAMgB,WACJyB,UACyC;GACzC,MAAM7C,WAAW6C;GACjB,MAAMG,UAAU,MAAMF,mBAAmB;GAGzC,IAAI,CAACE,QAAQM,MAAMD,MAAMA,EAAErD,aAAaA,QAAQ,GAAG;IACjDgD,QAAQO,QAAQ;KACdvD;KACAE,QAAQ;IACV,CAAC;IACD,MAAM6C,mBAAmBC,OAAO;GAClC;GAEA,OAAO;IAAEhD;IAAUC,YAAYuD,KAAAA;GAAU;EAC3C;EAEA,MAAMC,OAAOzD,UAAkB0D,UAAiC;GAC9D,MAAMV,UAAU,MAAMF,mBAAmB;GACzC,MAAMa,SAASX,QAAQY,MAAMP,MAAMA,EAAErD,aAAaA,QAAQ;GAC1D,IAAI2D,QAAQ;IACVA,OAAOxD,QAAQuD;IACf,MAAMX,mBAAmBC,OAAO;GAClC;EACF;EAEA,MAAMa,aACJ7D,UACAI,QACe;GACf,MAAM4C,UAAU,MAAMF,mBAAmB;GACzC,MAAMa,SAASX,QAAQY,MAAMP,MAAMA,EAAErD,aAAaA,QAAQ;GAC1D,IAAI2D,QAAQ;IACVA,OAAOvD,SAASA;IAChB,MAAM2C,mBAAmBC,OAAO;GAClC;EACF;EAEA,MAAMc,QAAQ9D,UAAiC;GAC7C,MAAMgD,UAAU,MAAMF,mBAAmB;GACzC,MAAMa,SAASX,QAAQY,MAAMP,MAAMA,EAAErD,aAAaA,QAAQ;GAC1D,IAAI2D,QAAQ;IACVA,OAAOzD,SAAS;IAChB,MAAM6C,mBAAmBC,OAAO;GAClC;EACF;EAEA,MAAMe,UAAU/D,UAAiC;GAC/C,MAAMgD,UAAU,MAAMF,mBAAmB;GACzC,MAAMa,SAASX,QAAQY,MAAMP,MAAMA,EAAErD,aAAaA,QAAQ;GAC1D,IAAI2D,QAAQ;IACVA,OAAOzD,SAAS;IAChB,MAAM6C,mBAAmBC,OAAO;GAClC;EACF;EAEA,MAAMgB,OAAOhE,UAAiC;GAG5C,MAAM+C,oBADWC,MADKF,mBAAmB,EAAA,CAChBoB,QAAQb,MAAMA,EAAErD,aAAaA,QAC7BiE,CAAQ;GACjC,MAAMrE,QAAQF,WAAWkD,YAAY5C,QAAQ,CAAC;EAChD;EAEA,MAAMmE,MAAMtB,UAAiD;GAE3D,MAAMc,UAASX,MADOF,mBAAmB,EAAA,CAClBc,MAAMP,MAAMA,EAAErD,aAAa6C,QAAQ;GAC1D,IAAI,CAACc,QAAQ,MAAM,IAAIS,MAAM,kBAAkB;GAC/C,OAAO;IACLpE,UAAU2D,OAAO3D;IACjBC,YAAY0D,OAAO1D;IACnBC,QAAQyD,OAAOzD;IACfC,OAAOwD,OAAOxD;IACdC,QAAQuD,OAAOvD;GACjB;EACF;EAEA,MAAMiE,cACJrE,UACAc,UAC0B;GAC1B,IAAIhB,gBAAgB;IAClB,MAAMK,QAAQ,MAAML,eAAeuE,cAAcvD,QAAQ;IAGzD,MAAMkC,UAAU,MAAMF,mBAAmB;IACzC,MAAMa,SAASX,QAAQY,MAAMP,MAAMA,EAAErD,aAAaA,QAAQ;IAC1D,IAAI2D,QAAQ;KACVA,OAAOxD,QAAQA;KACf,MAAM4C,mBAAmBC,OAAO;IAClC;IAGA,OAAO3E,uBAAuBiG,eAAe;KAC3CA,WAAWC,WAAWpE,KAAK;IAC7B,CAAC;GACH;GAGA,OAAO9B,4BAA4B,CAAC,CAAC;EACvC;CAGK4E;AACT"}
1
+ {"version":3,"file":"LocalStorageThreadListAdapter.js","names":["AssistantStream","createAssistantStream","FC","PropsWithChildren","useMemo","useAui","RemoteThreadInitializeResponse","RemoteThreadListAdapter","RemoteThreadListResponse","RemoteThreadMetadata","ThreadHistoryAdapter","ThreadMessage","RunConfig","ExportedMessageRepository","ExportedMessageRepositoryItem","RuntimeAdapterProvider","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","isRecord","Array","isArray","parseJSON","raw","JSON","parse","parseStoredThread","parseDate","Date","Number","isNaN","getTime","date","isMessageRole","parseStoredThreadMessage","id","content","createdAt","metadata","type","submittedFeedback","submittedFeedbackType","unstable_state","unstable_annotations","unstable_data","steps","timing","NonNullable","isOptimistic","attachments","length","parseStoredThreadMetadata","parsed","flatMap","item","thread","parseStoredMessageRepositoryItem","message","parentId","runConfig","parseStoredMessageRepository","messages","candidateMessages","parsedItem","acceptedIds","Set","has","add","headId","some","AsyncStorageHistoryAdapter","constructor","aui","ReturnType","mutationQueue","_messagesKey","load","threadListItem","getState","append","initialize","repo","idx","findIndex","m","push","stringify","createHistoryProvider","Provider","t0","$","_c","children","t1","history","t2","adapters","t3","createLocalStorageAdapter","options","threadsKey","messagesKey","threadId","loadThreadMetadata","saveThreadMetadata","threads","updateThreadMetadata","update","find","adapter","unstable_Provider","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 { type FC, type PropsWithChildren, useMemo } from \"react\";\nimport { useAui } from \"@assistant-ui/store\";\nimport type {\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 { RuntimeAdapterProvider } 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 isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === \"object\" && value !== null && !Array.isArray(value);\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 parseStoredThreadMessage = (value: unknown): ThreadMessage | 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: value.content 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: value.content as StoredUserMessage[\"content\"],\n attachments: Array.isArray(value.attachments)\n ? (value.attachments as StoredUserMessage[\"attachments\"])\n : [],\n createdAt,\n metadata: {\n custom: metadata.custom,\n },\n };\n }\n\n if (value.content.length !== 1) return null;\n\n return {\n id: value.id,\n role: \"system\",\n content: [value.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);\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 constructor(\n private storage: AsyncStorageLike,\n private aui: ReturnType<typeof useAui>,\n private prefix: string,\n private mutationQueue: KeyedMutationQueue,\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 createHistoryProvider = (\n storage: AsyncStorageLike,\n prefix: string,\n mutationQueue: KeyedMutationQueue,\n): FC<PropsWithChildren> => {\n const Provider: FC<PropsWithChildren> = ({ children }) => {\n const aui = useAui();\n const history = useMemo(\n () => new AsyncStorageHistoryAdapter(storage, aui, prefix, mutationQueue),\n [aui],\n );\n const adapters = useMemo(() => ({ history }), [history]);\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\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,5 +1,4 @@
1
1
  import { ThreadMessage } from "../../types/message.js";
2
-
3
2
  //#region src/react/adapters/TitleGenerationAdapter.d.ts
4
3
  type TitleGenerationAdapter = {
5
4
  generateTitle(messages: readonly ThreadMessage[]): Promise<string>;
@@ -1 +1 @@
1
- {"version":3,"file":"TitleGenerationAdapter.d.ts","names":[],"sources":["../../../src/react/adapters/TitleGenerationAdapter.ts"],"mappings":";;;KAEY,sBAAA;EACV,aAAA,CAAc,QAAA,WAAmB,aAAA,KAAkB,OAAO;AAAA;AAAA,cAG/C,wBAAA,QAA+B,sBAa3C"}
1
+ {"version":3,"file":"TitleGenerationAdapter.d.ts","names":[],"sources":["../../../src/react/adapters/TitleGenerationAdapter.ts"],"mappings":";;KAEY;EACV,cAAc,mBAAmB,kBAAkB;;cAGxC,gCAA+B"}
@@ -1,5 +1,4 @@
1
1
  import { ClientOutput } from "@assistant-ui/store";
2
-
3
2
  //#region src/react/client/DataRenderers.d.ts
4
3
  declare const DataRenderers: import("@assistant-ui/tap").Resource<ClientOutput<"dataRenderers">, []>;
5
4
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"DataRenderers.d.ts","names":[],"sources":["../../../src/react/client/DataRenderers.ts"],"mappings":";;;cAmEa,aAAA,8BAAa,QAAA,CAAA,YAAA"}
1
+ {"version":3,"file":"DataRenderers.d.ts","names":[],"sources":["../../../src/react/client/DataRenderers.ts"],"mappings":";;cAmEa,2CAAa,SAAA"}
@@ -1,6 +1,5 @@
1
1
  import { Unstable_InteractablesConfig } from "../types/scopes/interactables.js";
2
2
  import { ClientOutput } from "@assistant-ui/store";
3
-
4
3
  //#region src/react/client/Interactables.d.ts
5
4
  /**
6
5
  * Registers the unstable interactables store scope.
@@ -1 +1 @@
1
- {"version":3,"file":"Interactables.d.ts","names":[],"sources":["../../../src/react/client/Interactables.ts"],"mappings":";;;;;;AA6jBA;;;cAAa,sBAAA,8BAAsB,QAAA,CAAA,YAAA,8BAAA,4BAAA"}
1
+ {"version":3,"file":"Interactables.d.ts","names":[],"sources":["../../../src/react/client/Interactables.ts"],"mappings":";;;;;;;;cA6jBa,oDAAsB,SAAA,0CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"Interactables.js","names":["useState","useEffect","useCallback","useRef","useMemo","resource","useAssistantClientRef","ClientOutput","attachTransformScopes","Unstable_InteractablesState","Unstable_InteractableRegistration","Unstable_InteractablePersistedState","Unstable_InteractablePersistenceAdapter","Unstable_InteractablesConfig","toJSONSchema","toPartialJSONSchema","ModelContext","buildInteractableModelContext","PartialJSONSchema","findModelKnownState","interactableToolName","PERSISTENCE_DEBOUNCE_MS","RestorePersistedStateOptions","stash","Map","shouldStash","id","shouldApply","def","ToolCallLikePart","type","toolCallId","toolName","MessageLike","role","content","InternalInteractableRegistration","scope","hasInteractableCreateCall","messages","name","some","message","part","p","useInteractablesResource","persistence","state","setState","definitions","clientRef","stateRef","subscribersRef","Set","partialSchemaCacheRef","streamBaselinesRef","targetId","detachedAppStateRef","detachedThreadStateRef","registrationCountsRef","updateToolUIsRef","count","unsubscribe","loadedStateRef","touchedIdsRef","adapterRef","undefined","debounceTimerRef","ReturnType","setTimeout","syncSeqRef","hasPendingLocalChangeRef","flushResolversRef","Array","dirtyIdsRef","setStateAndRef","updater","prev","next","current","exportState","result","Object","entries","runPersistence","adapter","resolve","seq","dirtyIds","clear","payload","fromEntries","map","isPending","error","save","e","size","schedulePersistence","add","clearTimeout","restorePersistedState","saved","options","entry","set","changed","importState","applyLoadedState","has","loadFromAdapter","load","console","warn","setPersistenceAdapter","getCurrentThreadId","client","threadListItem","source","getState","threads","mainThreadId","flush","Promise","push","flushIfPending","setDefState","existing","provider","getModelContext","defs","subscribe","callback","delete","cb","modelContext","register","threadAccessor","thread","threadMessages","process","env","NODE_ENV","get","releaseUpdateToolUI","updateRender","toolsAccessor","tools","setToolUI","standalone","jsonSchema","stateSchema","threadId","detached","loaded","known","description","initialState","remaining","stateById","_","rest","__","restPersistence","unstable_Interactables","scopes","parent"],"sources":["../../../src/react/client/Interactables.ts"],"sourcesContent":["import { useState, useEffect, useCallback, useRef, useMemo } from \"react\";\nimport { resource } from \"@assistant-ui/tap\";\nimport {\n useAssistantClientRef,\n type ClientOutput,\n attachTransformScopes,\n} from \"@assistant-ui/store\";\nimport type {\n Unstable_InteractablesState,\n Unstable_InteractableRegistration,\n Unstable_InteractablePersistedState,\n Unstable_InteractablePersistenceAdapter,\n Unstable_InteractablesConfig,\n} from \"../types/scopes/interactables\";\nimport { toJSONSchema, toPartialJSONSchema } from \"assistant-stream\";\nimport { ModelContext } from \"../../store\";\nimport {\n buildInteractableModelContext,\n type PartialJSONSchema,\n} from \"./interactable-model-context\";\nimport {\n findModelKnownState,\n interactableToolName,\n} from \"../../model-context/interactable-composer-metadata\";\n\nconst PERSISTENCE_DEBOUNCE_MS = 500;\n\ntype RestorePersistedStateOptions = {\n stash: Map<string, unknown>;\n shouldStash?: (id: string) => boolean;\n shouldApply?: (\n id: string,\n def: Unstable_InteractablesState[\"definitions\"][string],\n ) => boolean;\n};\n\ntype ToolCallLikePart = {\n type?: string;\n toolCallId?: string;\n toolName?: string;\n};\n\ntype MessageLike = {\n role?: string;\n content?: readonly unknown[] | undefined;\n};\n\ntype InternalInteractableRegistration = Unstable_InteractableRegistration & {\n scope?: \"thread\" | undefined;\n};\n\nconst hasInteractableCreateCall = (\n messages: readonly MessageLike[],\n id: string,\n name: string,\n) =>\n messages.some(\n (message) =>\n message.role === \"assistant\" &&\n message.content?.some((part) => {\n if (!part || typeof part !== \"object\") return false;\n const p = part as ToolCallLikePart;\n return (\n p.type === \"tool-call\" && p.toolCallId === id && p.toolName === name\n );\n }),\n );\n\nconst useInteractablesResource = ({\n persistence,\n}: Unstable_InteractablesConfig = {}): ClientOutput<\"unstable_interactables\"> => {\n const [state, setState] = useState<Unstable_InteractablesState>(() => ({\n definitions: {},\n persistence: {},\n }));\n\n const clientRef = useAssistantClientRef();\n\n const stateRef = useRef(state);\n\n const subscribersRef = useRef(new Set<() => void>());\n const partialSchemaCacheRef = useRef(new Map<string, PartialJSONSchema>());\n const streamBaselinesRef = useRef(\n new Map<string, { targetId: string; state: unknown }>(),\n );\n const detachedAppStateRef = useRef(new Map<string, unknown>());\n const detachedThreadStateRef = useRef(\n new Map<string, Map<string, unknown>>(),\n );\n // An instance may be registered from several anchors (its creating tool\n // call plus update_* calls); the definition lives until the last one leaves.\n const registrationCountsRef = useRef(new Map<string, number>());\n // One update-tool UI per interactable name, alive while any registrant\n // that supplied an updateRender is mounted.\n const updateToolUIsRef = useRef(\n new Map<string, { count: number; unsubscribe: () => void }>(),\n );\n // App-scoped state restored via adapter.load(), consumed as components register.\n const loadedStateRef = useRef(new Map<string, unknown>());\n // Ids edited locally this session — a local edit always wins over a slow load.\n const touchedIdsRef = useRef(new Set<string>());\n\n const adapterRef = useRef<\n Unstable_InteractablePersistenceAdapter | undefined\n >(undefined);\n const debounceTimerRef = useRef<ReturnType<typeof setTimeout> | undefined>(\n undefined,\n );\n const syncSeqRef = useRef(0);\n const hasPendingLocalChangeRef = useRef(false);\n const flushResolversRef = useRef<Array<() => void>>([]);\n const dirtyIdsRef = useRef(new Set<string>());\n\n const setStateAndRef = useCallback(\n (\n updater: (\n prev: Unstable_InteractablesState,\n ) => Unstable_InteractablesState,\n ) => {\n const next = updater(stateRef.current);\n stateRef.current = next;\n setState(next);\n },\n [],\n );\n\n const exportState = useCallback((): Unstable_InteractablePersistedState => {\n const result: Unstable_InteractablePersistedState = {};\n for (const [id, def] of Object.entries(stateRef.current.definitions)) {\n if (def.scope === \"thread\") continue; // thread items persist via snapshot, not the adapter\n result[id] = { name: def.name, state: def.state };\n }\n return result;\n }, []);\n\n const runPersistence = useCallback(async () => {\n const adapter = adapterRef.current;\n if (!adapter) {\n for (const resolve of flushResolversRef.current) resolve();\n flushResolversRef.current = [];\n return;\n }\n\n const seq = ++syncSeqRef.current;\n const dirtyIds = new Set(dirtyIdsRef.current);\n dirtyIdsRef.current.clear();\n hasPendingLocalChangeRef.current = true;\n\n // Snapshot before any await so unregistered definitions are still included.\n const payload = exportState();\n\n setStateAndRef((prev) => ({\n ...prev,\n persistence: {\n ...prev.persistence,\n ...Object.fromEntries(\n [...dirtyIds].map((id) => [\n id,\n { isPending: true, error: undefined },\n ]),\n ),\n },\n }));\n\n try {\n await adapter.save(payload);\n if (syncSeqRef.current === seq) {\n hasPendingLocalChangeRef.current = false;\n setStateAndRef((prev) => {\n const persistence = { ...prev.persistence };\n for (const id of dirtyIds) delete persistence[id];\n return { ...prev, persistence };\n });\n }\n } catch (e) {\n if (syncSeqRef.current === seq) {\n hasPendingLocalChangeRef.current = false;\n setStateAndRef((prev) => ({\n ...prev,\n persistence: {\n ...prev.persistence,\n ...Object.fromEntries(\n [...dirtyIds].map((id) => [id, { isPending: false, error: e }]),\n ),\n },\n }));\n }\n } finally {\n if (dirtyIdsRef.current.size > 0 && adapterRef.current) {\n runPersistence();\n } else {\n for (const resolve of flushResolversRef.current) resolve();\n flushResolversRef.current = [];\n }\n }\n }, [exportState, setStateAndRef]);\n\n const schedulePersistence = useCallback(\n (id: string) => {\n if (!adapterRef.current) return;\n dirtyIdsRef.current.add(id);\n if (debounceTimerRef.current !== undefined) {\n clearTimeout(debounceTimerRef.current);\n }\n debounceTimerRef.current = setTimeout(() => {\n debounceTimerRef.current = undefined;\n if (!hasPendingLocalChangeRef.current) {\n runPersistence();\n } else {\n debounceTimerRef.current = setTimeout(() => {\n debounceTimerRef.current = undefined;\n runPersistence();\n }, PERSISTENCE_DEBOUNCE_MS);\n }\n }, PERSISTENCE_DEBOUNCE_MS);\n },\n [runPersistence],\n );\n\n const restorePersistedState = useCallback(\n (\n saved: Unstable_InteractablePersistedState,\n options: RestorePersistedStateOptions,\n ) => {\n const shouldStash = options.shouldStash ?? (() => true);\n const shouldApply = options.shouldApply ?? (() => true);\n\n for (const [id, entry] of Object.entries(saved)) {\n if (shouldStash(id)) options.stash.set(id, entry.state);\n }\n setStateAndRef((prev) => {\n let changed = false;\n const definitions = { ...prev.definitions };\n for (const [id, entry] of Object.entries(saved)) {\n const def = definitions[id];\n if (!def || !shouldApply(id, def)) continue;\n definitions[id] = { ...def, state: entry.state };\n changed = true;\n }\n if (!changed) return prev;\n return { ...prev, definitions };\n });\n },\n [setStateAndRef],\n );\n\n const importState = useCallback(\n (saved: Unstable_InteractablePersistedState) => {\n restorePersistedState(saved, { stash: detachedAppStateRef.current });\n },\n [restorePersistedState],\n );\n\n // Applies adapter.load() output: a local edit made while the load was in\n // flight wins, and thread-scoped items never restore from the adapter.\n const applyLoadedState = useCallback(\n (saved: Unstable_InteractablePersistedState) => {\n restorePersistedState(saved, {\n stash: loadedStateRef.current,\n shouldStash: (id) => !touchedIdsRef.current.has(id),\n shouldApply: (id, def) =>\n !touchedIdsRef.current.has(id) && def.scope !== \"thread\",\n });\n },\n [restorePersistedState],\n );\n\n const loadFromAdapter = useCallback(\n async (adapter: Unstable_InteractablePersistenceAdapter) => {\n if (!adapter.load) return;\n try {\n const saved = await adapter.load();\n if (!saved || adapterRef.current !== adapter) return;\n applyLoadedState(saved);\n } catch (e) {\n console.warn(\"[Interactables] Persistence load failed.\", e);\n }\n },\n [applyLoadedState],\n );\n\n const setPersistenceAdapter = useCallback(\n (adapter: Unstable_InteractablePersistenceAdapter | undefined) => {\n adapterRef.current = adapter;\n if (adapter) void loadFromAdapter(adapter);\n },\n [loadFromAdapter],\n );\n\n const getCurrentThreadId = useCallback((): string | undefined => {\n const client = clientRef.current;\n if (!client) return undefined;\n\n const threadListItem = client.threadListItem;\n if (threadListItem.source != null) {\n return threadListItem().getState().id;\n }\n\n const threads = client.threads;\n if (threads.source != null) {\n return threads().getState().mainThreadId;\n }\n\n return undefined;\n }, [clientRef]);\n\n useEffect(() => {\n if (!persistence) return;\n setPersistenceAdapter(persistence);\n return () => {\n if (adapterRef.current === persistence) {\n adapterRef.current = undefined;\n }\n };\n }, [persistence, setPersistenceAdapter]);\n\n const flush = useCallback(async () => {\n if (debounceTimerRef.current !== undefined) {\n clearTimeout(debounceTimerRef.current);\n debounceTimerRef.current = undefined;\n }\n if (!adapterRef.current) return;\n if (!hasPendingLocalChangeRef.current && dirtyIdsRef.current.size === 0)\n return;\n const p = new Promise<void>((resolve) => {\n flushResolversRef.current.push(resolve);\n });\n if (!hasPendingLocalChangeRef.current) {\n runPersistence();\n }\n return p;\n }, [runPersistence]);\n\n const flushIfPending = useCallback(() => {\n if (adapterRef.current && debounceTimerRef.current !== undefined) {\n clearTimeout(debounceTimerRef.current);\n debounceTimerRef.current = undefined;\n runPersistence();\n }\n }, [runPersistence]);\n\n const setDefState = useCallback(\n (id: string, updater: (prev: unknown) => unknown) => {\n touchedIdsRef.current.add(id);\n setStateAndRef((prev) => {\n const existing = prev.definitions[id];\n if (!existing) return prev;\n return {\n ...prev,\n definitions: {\n ...prev.definitions,\n [id]: { ...existing, state: updater(existing.state) },\n },\n };\n });\n if (stateRef.current.definitions[id]?.scope !== \"thread\") {\n schedulePersistence(id);\n }\n },\n [schedulePersistence, setStateAndRef],\n );\n\n const provider = useMemo(\n () => ({\n getModelContext: () => {\n const defs = stateRef.current.definitions;\n return (\n buildInteractableModelContext(\n defs,\n partialSchemaCacheRef.current,\n setDefState,\n streamBaselinesRef.current,\n ) ?? {}\n );\n },\n subscribe: (callback: () => void) => {\n subscribersRef.current.add(callback);\n return () => {\n subscribersRef.current.delete(callback);\n };\n },\n }),\n [setDefState],\n );\n\n useEffect(() => {\n for (const cb of subscribersRef.current) cb();\n }, [state]);\n\n useEffect(() => {\n return clientRef.current!.modelContext().register(provider);\n }, [clientRef, provider]);\n\n const register = useCallback(\n (def: InternalInteractableRegistration) => {\n const threadAccessor = clientRef.current?.thread;\n const threadMessages =\n threadAccessor && threadAccessor.source != null\n ? (threadAccessor().getState().messages ?? [])\n : [];\n const scope =\n def.scope ??\n (hasInteractableCreateCall(threadMessages, def.id, def.name)\n ? \"thread\"\n : \"app\");\n\n if (\n process.env.NODE_ENV !== \"production\" &&\n stateRef.current.definitions[def.id] &&\n scope !== \"thread\"\n ) {\n console.warn(\n `[Interactables] \"${def.name}\" (${def.id}) is already registered. ` +\n `Register an app-scoped interactable once (unstable_useInteractable) and ` +\n `read it from other components with unstable_useInteractableState.`,\n );\n }\n\n registrationCountsRef.current.set(\n def.id,\n (registrationCountsRef.current.get(def.id) ?? 0) + 1,\n );\n\n let releaseUpdateToolUI: (() => void) | undefined;\n if (def.updateRender) {\n const toolsAccessor = clientRef.current?.tools;\n if (toolsAccessor && toolsAccessor.source != null) {\n const toolName = interactableToolName(def.name);\n const existing = updateToolUIsRef.current.get(def.name);\n if (existing) {\n existing.count++;\n } else {\n updateToolUIsRef.current.set(def.name, {\n count: 1,\n unsubscribe: toolsAccessor().setToolUI(\n toolName,\n def.updateRender,\n { standalone: true },\n ),\n });\n }\n releaseUpdateToolUI = () => {\n const entry = updateToolUIsRef.current.get(def.name);\n if (!entry) return;\n if (--entry.count === 0) {\n updateToolUIsRef.current.delete(def.name);\n entry.unsubscribe();\n }\n };\n } else if (process.env.NODE_ENV !== \"production\") {\n console.warn(\n `[Interactables] \"${def.name}\" supplied an updateRender, but no ` +\n `tools scope is available to install it into.`,\n );\n }\n }\n\n // The same id re-registers once per anchor (its create call + each update_*).\n if (!partialSchemaCacheRef.current.has(def.id)) {\n try {\n const jsonSchema = toJSONSchema(def.stateSchema);\n partialSchemaCacheRef.current.set(\n def.id,\n toPartialJSONSchema(jsonSchema),\n );\n } catch (e) {\n console.warn(\n `[Interactables] Failed to create partial schema for \"${def.name}\". The update tool will accept arbitrary fields without validation.`,\n e,\n );\n }\n }\n\n const threadId = scope === \"thread\" ? getCurrentThreadId() : undefined;\n const detached =\n scope === \"thread\"\n ? threadId\n ? detachedThreadStateRef.current.get(threadId)?.get(def.id)\n : undefined\n : detachedAppStateRef.current.get(def.id);\n if (scope === \"thread\") {\n if (threadId)\n detachedThreadStateRef.current.get(threadId)?.delete(def.id);\n } else {\n detachedAppStateRef.current.delete(def.id);\n }\n const loaded =\n scope === \"thread\" ? undefined : loadedStateRef.current.get(def.id);\n\n // Tool-created items restore from what the model already knows in this\n // thread (the creating call's args, sent snapshots, and the model's own\n // update_* calls) on a fresh reload; detached (in-session remount) still\n // wins so an unsent edit survives a scroll/virtualization cycle.\n const known =\n scope === \"thread\"\n ? findModelKnownState(threadMessages, def.id, def.name)\n : undefined;\n\n setStateAndRef((prev) => ({\n ...prev,\n definitions: {\n ...prev.definitions,\n [def.id]: {\n id: def.id,\n name: def.name,\n description: def.description,\n stateSchema: def.stateSchema,\n initialState: def.initialState,\n scope,\n state:\n prev.definitions[def.id]?.state ??\n detached ??\n known?.state ??\n loaded ??\n def.initialState,\n },\n },\n }));\n\n return () => {\n releaseUpdateToolUI?.();\n\n const remaining = (registrationCountsRef.current.get(def.id) ?? 1) - 1;\n if (remaining > 0) {\n registrationCountsRef.current.set(def.id, remaining);\n return;\n }\n registrationCountsRef.current.delete(def.id);\n\n flushIfPending();\n setStateAndRef((prev) => {\n const existing = prev.definitions[def.id];\n if (existing) {\n if (existing.scope === \"thread\") {\n const threadId = getCurrentThreadId();\n if (threadId) {\n let stateById = detachedThreadStateRef.current.get(threadId);\n if (!stateById) {\n stateById = new Map();\n detachedThreadStateRef.current.set(threadId, stateById);\n }\n stateById.set(def.id, existing.state);\n }\n } else {\n detachedAppStateRef.current.set(def.id, existing.state);\n }\n }\n partialSchemaCacheRef.current.delete(def.id);\n const { [def.id]: _, ...rest } = prev.definitions;\n const { [def.id]: __, ...restPersistence } = prev.persistence;\n return { ...prev, definitions: rest, persistence: restPersistence };\n });\n };\n },\n [flushIfPending, clientRef, getCurrentThreadId, setStateAndRef],\n );\n\n return {\n getState: () => stateRef.current,\n register,\n setState: setDefState,\n exportState,\n importState,\n setPersistenceAdapter,\n flush,\n };\n};\n\n/**\n * Registers the unstable interactables store scope.\n *\n * @deprecated Unstable / Experimental (not actually removed).\n */\nexport const unstable_Interactables = resource(useInteractablesResource);\n\nattachTransformScopes(useInteractablesResource, (scopes, parent) => {\n if (!scopes.modelContext && parent.modelContext.source === null) {\n scopes.modelContext = ModelContext();\n }\n});\n"],"mappings":"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"}
1
+ {"version":3,"file":"Interactables.js","names":["useState","useEffect","useCallback","useRef","useMemo","resource","useAssistantClientRef","ClientOutput","attachTransformScopes","Unstable_InteractablesState","Unstable_InteractableRegistration","Unstable_InteractablePersistedState","Unstable_InteractablePersistenceAdapter","Unstable_InteractablesConfig","toJSONSchema","toPartialJSONSchema","ModelContext","buildInteractableModelContext","PartialJSONSchema","findModelKnownState","interactableToolName","PERSISTENCE_DEBOUNCE_MS","RestorePersistedStateOptions","stash","Map","shouldStash","id","shouldApply","def","ToolCallLikePart","type","toolCallId","toolName","MessageLike","role","content","InternalInteractableRegistration","scope","hasInteractableCreateCall","messages","name","some","message","part","p","useInteractablesResource","persistence","state","setState","definitions","clientRef","stateRef","subscribersRef","Set","partialSchemaCacheRef","streamBaselinesRef","targetId","detachedAppStateRef","detachedThreadStateRef","registrationCountsRef","updateToolUIsRef","count","unsubscribe","loadedStateRef","touchedIdsRef","adapterRef","undefined","debounceTimerRef","ReturnType","setTimeout","syncSeqRef","hasPendingLocalChangeRef","flushResolversRef","Array","dirtyIdsRef","setStateAndRef","updater","prev","next","current","exportState","result","Object","entries","runPersistence","adapter","resolve","seq","dirtyIds","clear","payload","fromEntries","map","isPending","error","save","e","size","schedulePersistence","add","clearTimeout","restorePersistedState","saved","options","entry","set","changed","importState","applyLoadedState","has","loadFromAdapter","load","console","warn","setPersistenceAdapter","getCurrentThreadId","client","threadListItem","source","getState","threads","mainThreadId","flush","Promise","push","flushIfPending","setDefState","existing","provider","getModelContext","defs","subscribe","callback","delete","cb","modelContext","register","threadAccessor","thread","threadMessages","process","env","NODE_ENV","get","releaseUpdateToolUI","updateRender","toolsAccessor","tools","setToolUI","standalone","jsonSchema","stateSchema","threadId","detached","loaded","known","description","initialState","remaining","stateById","_","rest","__","restPersistence","unstable_Interactables","scopes","parent"],"sources":["../../../src/react/client/Interactables.ts"],"sourcesContent":["import { useState, useEffect, useCallback, useRef, useMemo } from \"react\";\nimport { resource } from \"@assistant-ui/tap\";\nimport {\n useAssistantClientRef,\n type ClientOutput,\n attachTransformScopes,\n} from \"@assistant-ui/store\";\nimport type {\n Unstable_InteractablesState,\n Unstable_InteractableRegistration,\n Unstable_InteractablePersistedState,\n Unstable_InteractablePersistenceAdapter,\n Unstable_InteractablesConfig,\n} from \"../types/scopes/interactables\";\nimport { toJSONSchema, toPartialJSONSchema } from \"assistant-stream\";\nimport { ModelContext } from \"../../store\";\nimport {\n buildInteractableModelContext,\n type PartialJSONSchema,\n} from \"./interactable-model-context\";\nimport {\n findModelKnownState,\n interactableToolName,\n} from \"../../model-context/interactable-composer-metadata\";\n\nconst PERSISTENCE_DEBOUNCE_MS = 500;\n\ntype RestorePersistedStateOptions = {\n stash: Map<string, unknown>;\n shouldStash?: (id: string) => boolean;\n shouldApply?: (\n id: string,\n def: Unstable_InteractablesState[\"definitions\"][string],\n ) => boolean;\n};\n\ntype ToolCallLikePart = {\n type?: string;\n toolCallId?: string;\n toolName?: string;\n};\n\ntype MessageLike = {\n role?: string;\n content?: readonly unknown[] | undefined;\n};\n\ntype InternalInteractableRegistration = Unstable_InteractableRegistration & {\n scope?: \"thread\" | undefined;\n};\n\nconst hasInteractableCreateCall = (\n messages: readonly MessageLike[],\n id: string,\n name: string,\n) =>\n messages.some(\n (message) =>\n message.role === \"assistant\" &&\n message.content?.some((part) => {\n if (!part || typeof part !== \"object\") return false;\n const p = part as ToolCallLikePart;\n return (\n p.type === \"tool-call\" && p.toolCallId === id && p.toolName === name\n );\n }),\n );\n\nconst useInteractablesResource = ({\n persistence,\n}: Unstable_InteractablesConfig = {}): ClientOutput<\"unstable_interactables\"> => {\n const [state, setState] = useState<Unstable_InteractablesState>(() => ({\n definitions: {},\n persistence: {},\n }));\n\n const clientRef = useAssistantClientRef();\n\n const stateRef = useRef(state);\n\n const subscribersRef = useRef(new Set<() => void>());\n const partialSchemaCacheRef = useRef(new Map<string, PartialJSONSchema>());\n const streamBaselinesRef = useRef(\n new Map<string, { targetId: string; state: unknown }>(),\n );\n const detachedAppStateRef = useRef(new Map<string, unknown>());\n const detachedThreadStateRef = useRef(\n new Map<string, Map<string, unknown>>(),\n );\n // An instance may be registered from several anchors (its creating tool\n // call plus update_* calls); the definition lives until the last one leaves.\n const registrationCountsRef = useRef(new Map<string, number>());\n // One update-tool UI per interactable name, alive while any registrant\n // that supplied an updateRender is mounted.\n const updateToolUIsRef = useRef(\n new Map<string, { count: number; unsubscribe: () => void }>(),\n );\n // App-scoped state restored via adapter.load(), consumed as components register.\n const loadedStateRef = useRef(new Map<string, unknown>());\n // Ids edited locally this session — a local edit always wins over a slow load.\n const touchedIdsRef = useRef(new Set<string>());\n\n const adapterRef = useRef<\n Unstable_InteractablePersistenceAdapter | undefined\n >(undefined);\n const debounceTimerRef = useRef<ReturnType<typeof setTimeout> | undefined>(\n undefined,\n );\n const syncSeqRef = useRef(0);\n const hasPendingLocalChangeRef = useRef(false);\n const flushResolversRef = useRef<Array<() => void>>([]);\n const dirtyIdsRef = useRef(new Set<string>());\n\n const setStateAndRef = useCallback(\n (\n updater: (\n prev: Unstable_InteractablesState,\n ) => Unstable_InteractablesState,\n ) => {\n const next = updater(stateRef.current);\n stateRef.current = next;\n setState(next);\n },\n [],\n );\n\n const exportState = useCallback((): Unstable_InteractablePersistedState => {\n const result: Unstable_InteractablePersistedState = {};\n for (const [id, def] of Object.entries(stateRef.current.definitions)) {\n if (def.scope === \"thread\") continue; // thread items persist via snapshot, not the adapter\n result[id] = { name: def.name, state: def.state };\n }\n return result;\n }, []);\n\n const runPersistence = useCallback(async () => {\n const adapter = adapterRef.current;\n if (!adapter) {\n for (const resolve of flushResolversRef.current) resolve();\n flushResolversRef.current = [];\n return;\n }\n\n const seq = ++syncSeqRef.current;\n const dirtyIds = new Set(dirtyIdsRef.current);\n dirtyIdsRef.current.clear();\n hasPendingLocalChangeRef.current = true;\n\n // Snapshot before any await so unregistered definitions are still included.\n const payload = exportState();\n\n setStateAndRef((prev) => ({\n ...prev,\n persistence: {\n ...prev.persistence,\n ...Object.fromEntries(\n [...dirtyIds].map((id) => [\n id,\n { isPending: true, error: undefined },\n ]),\n ),\n },\n }));\n\n try {\n await adapter.save(payload);\n if (syncSeqRef.current === seq) {\n hasPendingLocalChangeRef.current = false;\n setStateAndRef((prev) => {\n const persistence = { ...prev.persistence };\n for (const id of dirtyIds) delete persistence[id];\n return { ...prev, persistence };\n });\n }\n } catch (e) {\n if (syncSeqRef.current === seq) {\n hasPendingLocalChangeRef.current = false;\n setStateAndRef((prev) => ({\n ...prev,\n persistence: {\n ...prev.persistence,\n ...Object.fromEntries(\n [...dirtyIds].map((id) => [id, { isPending: false, error: e }]),\n ),\n },\n }));\n }\n } finally {\n if (dirtyIdsRef.current.size > 0 && adapterRef.current) {\n runPersistence();\n } else {\n for (const resolve of flushResolversRef.current) resolve();\n flushResolversRef.current = [];\n }\n }\n }, [exportState, setStateAndRef]);\n\n const schedulePersistence = useCallback(\n (id: string) => {\n if (!adapterRef.current) return;\n dirtyIdsRef.current.add(id);\n if (debounceTimerRef.current !== undefined) {\n clearTimeout(debounceTimerRef.current);\n }\n debounceTimerRef.current = setTimeout(() => {\n debounceTimerRef.current = undefined;\n if (!hasPendingLocalChangeRef.current) {\n runPersistence();\n } else {\n debounceTimerRef.current = setTimeout(() => {\n debounceTimerRef.current = undefined;\n runPersistence();\n }, PERSISTENCE_DEBOUNCE_MS);\n }\n }, PERSISTENCE_DEBOUNCE_MS);\n },\n [runPersistence],\n );\n\n const restorePersistedState = useCallback(\n (\n saved: Unstable_InteractablePersistedState,\n options: RestorePersistedStateOptions,\n ) => {\n const shouldStash = options.shouldStash ?? (() => true);\n const shouldApply = options.shouldApply ?? (() => true);\n\n for (const [id, entry] of Object.entries(saved)) {\n if (shouldStash(id)) options.stash.set(id, entry.state);\n }\n setStateAndRef((prev) => {\n let changed = false;\n const definitions = { ...prev.definitions };\n for (const [id, entry] of Object.entries(saved)) {\n const def = definitions[id];\n if (!def || !shouldApply(id, def)) continue;\n definitions[id] = { ...def, state: entry.state };\n changed = true;\n }\n if (!changed) return prev;\n return { ...prev, definitions };\n });\n },\n [setStateAndRef],\n );\n\n const importState = useCallback(\n (saved: Unstable_InteractablePersistedState) => {\n restorePersistedState(saved, { stash: detachedAppStateRef.current });\n },\n [restorePersistedState],\n );\n\n // Applies adapter.load() output: a local edit made while the load was in\n // flight wins, and thread-scoped items never restore from the adapter.\n const applyLoadedState = useCallback(\n (saved: Unstable_InteractablePersistedState) => {\n restorePersistedState(saved, {\n stash: loadedStateRef.current,\n shouldStash: (id) => !touchedIdsRef.current.has(id),\n shouldApply: (id, def) =>\n !touchedIdsRef.current.has(id) && def.scope !== \"thread\",\n });\n },\n [restorePersistedState],\n );\n\n const loadFromAdapter = useCallback(\n async (adapter: Unstable_InteractablePersistenceAdapter) => {\n if (!adapter.load) return;\n try {\n const saved = await adapter.load();\n if (!saved || adapterRef.current !== adapter) return;\n applyLoadedState(saved);\n } catch (e) {\n console.warn(\"[Interactables] Persistence load failed.\", e);\n }\n },\n [applyLoadedState],\n );\n\n const setPersistenceAdapter = useCallback(\n (adapter: Unstable_InteractablePersistenceAdapter | undefined) => {\n adapterRef.current = adapter;\n if (adapter) void loadFromAdapter(adapter);\n },\n [loadFromAdapter],\n );\n\n const getCurrentThreadId = useCallback((): string | undefined => {\n const client = clientRef.current;\n if (!client) return undefined;\n\n const threadListItem = client.threadListItem;\n if (threadListItem.source != null) {\n return threadListItem().getState().id;\n }\n\n const threads = client.threads;\n if (threads.source != null) {\n return threads().getState().mainThreadId;\n }\n\n return undefined;\n }, [clientRef]);\n\n useEffect(() => {\n if (!persistence) return;\n setPersistenceAdapter(persistence);\n return () => {\n if (adapterRef.current === persistence) {\n adapterRef.current = undefined;\n }\n };\n }, [persistence, setPersistenceAdapter]);\n\n const flush = useCallback(async () => {\n if (debounceTimerRef.current !== undefined) {\n clearTimeout(debounceTimerRef.current);\n debounceTimerRef.current = undefined;\n }\n if (!adapterRef.current) return;\n if (!hasPendingLocalChangeRef.current && dirtyIdsRef.current.size === 0)\n return;\n const p = new Promise<void>((resolve) => {\n flushResolversRef.current.push(resolve);\n });\n if (!hasPendingLocalChangeRef.current) {\n runPersistence();\n }\n return p;\n }, [runPersistence]);\n\n const flushIfPending = useCallback(() => {\n if (adapterRef.current && debounceTimerRef.current !== undefined) {\n clearTimeout(debounceTimerRef.current);\n debounceTimerRef.current = undefined;\n runPersistence();\n }\n }, [runPersistence]);\n\n const setDefState = useCallback(\n (id: string, updater: (prev: unknown) => unknown) => {\n touchedIdsRef.current.add(id);\n setStateAndRef((prev) => {\n const existing = prev.definitions[id];\n if (!existing) return prev;\n return {\n ...prev,\n definitions: {\n ...prev.definitions,\n [id]: { ...existing, state: updater(existing.state) },\n },\n };\n });\n if (stateRef.current.definitions[id]?.scope !== \"thread\") {\n schedulePersistence(id);\n }\n },\n [schedulePersistence, setStateAndRef],\n );\n\n const provider = useMemo(\n () => ({\n getModelContext: () => {\n const defs = stateRef.current.definitions;\n return (\n buildInteractableModelContext(\n defs,\n partialSchemaCacheRef.current,\n setDefState,\n streamBaselinesRef.current,\n ) ?? {}\n );\n },\n subscribe: (callback: () => void) => {\n subscribersRef.current.add(callback);\n return () => {\n subscribersRef.current.delete(callback);\n };\n },\n }),\n [setDefState],\n );\n\n useEffect(() => {\n for (const cb of subscribersRef.current) cb();\n }, [state]);\n\n useEffect(() => {\n return clientRef.current!.modelContext().register(provider);\n }, [clientRef, provider]);\n\n const register = useCallback(\n (def: InternalInteractableRegistration) => {\n const threadAccessor = clientRef.current?.thread;\n const threadMessages =\n threadAccessor && threadAccessor.source != null\n ? (threadAccessor().getState().messages ?? [])\n : [];\n const scope =\n def.scope ??\n (hasInteractableCreateCall(threadMessages, def.id, def.name)\n ? \"thread\"\n : \"app\");\n\n if (\n process.env.NODE_ENV !== \"production\" &&\n stateRef.current.definitions[def.id] &&\n scope !== \"thread\"\n ) {\n console.warn(\n `[Interactables] \"${def.name}\" (${def.id}) is already registered. ` +\n `Register an app-scoped interactable once (unstable_useInteractable) and ` +\n `read it from other components with unstable_useInteractableState.`,\n );\n }\n\n registrationCountsRef.current.set(\n def.id,\n (registrationCountsRef.current.get(def.id) ?? 0) + 1,\n );\n\n let releaseUpdateToolUI: (() => void) | undefined;\n if (def.updateRender) {\n const toolsAccessor = clientRef.current?.tools;\n if (toolsAccessor && toolsAccessor.source != null) {\n const toolName = interactableToolName(def.name);\n const existing = updateToolUIsRef.current.get(def.name);\n if (existing) {\n existing.count++;\n } else {\n updateToolUIsRef.current.set(def.name, {\n count: 1,\n unsubscribe: toolsAccessor().setToolUI(\n toolName,\n def.updateRender,\n { standalone: true },\n ),\n });\n }\n releaseUpdateToolUI = () => {\n const entry = updateToolUIsRef.current.get(def.name);\n if (!entry) return;\n if (--entry.count === 0) {\n updateToolUIsRef.current.delete(def.name);\n entry.unsubscribe();\n }\n };\n } else if (process.env.NODE_ENV !== \"production\") {\n console.warn(\n `[Interactables] \"${def.name}\" supplied an updateRender, but no ` +\n `tools scope is available to install it into.`,\n );\n }\n }\n\n // The same id re-registers once per anchor (its create call + each update_*).\n if (!partialSchemaCacheRef.current.has(def.id)) {\n try {\n const jsonSchema = toJSONSchema(def.stateSchema);\n partialSchemaCacheRef.current.set(\n def.id,\n toPartialJSONSchema(jsonSchema),\n );\n } catch (e) {\n console.warn(\n `[Interactables] Failed to create partial schema for \"${def.name}\". The update tool will accept arbitrary fields without validation.`,\n e,\n );\n }\n }\n\n const threadId = scope === \"thread\" ? getCurrentThreadId() : undefined;\n const detached =\n scope === \"thread\"\n ? threadId\n ? detachedThreadStateRef.current.get(threadId)?.get(def.id)\n : undefined\n : detachedAppStateRef.current.get(def.id);\n if (scope === \"thread\") {\n if (threadId)\n detachedThreadStateRef.current.get(threadId)?.delete(def.id);\n } else {\n detachedAppStateRef.current.delete(def.id);\n }\n const loaded =\n scope === \"thread\" ? undefined : loadedStateRef.current.get(def.id);\n\n // Tool-created items restore from what the model already knows in this\n // thread (the creating call's args, sent snapshots, and the model's own\n // update_* calls) on a fresh reload; detached (in-session remount) still\n // wins so an unsent edit survives a scroll/virtualization cycle.\n const known =\n scope === \"thread\"\n ? findModelKnownState(threadMessages, def.id, def.name)\n : undefined;\n\n setStateAndRef((prev) => ({\n ...prev,\n definitions: {\n ...prev.definitions,\n [def.id]: {\n id: def.id,\n name: def.name,\n description: def.description,\n stateSchema: def.stateSchema,\n initialState: def.initialState,\n scope,\n state:\n prev.definitions[def.id]?.state ??\n detached ??\n known?.state ??\n loaded ??\n def.initialState,\n },\n },\n }));\n\n return () => {\n releaseUpdateToolUI?.();\n\n const remaining = (registrationCountsRef.current.get(def.id) ?? 1) - 1;\n if (remaining > 0) {\n registrationCountsRef.current.set(def.id, remaining);\n return;\n }\n registrationCountsRef.current.delete(def.id);\n\n flushIfPending();\n setStateAndRef((prev) => {\n const existing = prev.definitions[def.id];\n if (existing) {\n if (existing.scope === \"thread\") {\n const threadId = getCurrentThreadId();\n if (threadId) {\n let stateById = detachedThreadStateRef.current.get(threadId);\n if (!stateById) {\n stateById = new Map();\n detachedThreadStateRef.current.set(threadId, stateById);\n }\n stateById.set(def.id, existing.state);\n }\n } else {\n detachedAppStateRef.current.set(def.id, existing.state);\n }\n }\n partialSchemaCacheRef.current.delete(def.id);\n const { [def.id]: _, ...rest } = prev.definitions;\n const { [def.id]: __, ...restPersistence } = prev.persistence;\n return { ...prev, definitions: rest, persistence: restPersistence };\n });\n };\n },\n [flushIfPending, clientRef, getCurrentThreadId, setStateAndRef],\n );\n\n return {\n getState: () => stateRef.current,\n register,\n setState: setDefState,\n exportState,\n importState,\n setPersistenceAdapter,\n flush,\n };\n};\n\n/**\n * Registers the unstable interactables store scope.\n *\n * @deprecated Unstable / Experimental (not actually removed).\n */\nexport const unstable_Interactables = resource(useInteractablesResource);\n\nattachTransformScopes(useInteractablesResource, (scopes, parent) => {\n if (!scopes.modelContext && parent.modelContext.source === null) {\n scopes.modelContext = ModelContext();\n }\n});\n"],"mappings":"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"}
@@ -2,10 +2,11 @@ import { McpAppResourceOutput } from "../types/scopes/tools.js";
2
2
  import { Toolkit } from "../model-context/toolbox.js";
3
3
  import { ClientOutput } from "@assistant-ui/store";
4
4
  import { ResourceElement } from "@assistant-ui/tap";
5
-
6
5
  //#region src/react/client/Tools.d.ts
7
6
  declare const Tools: import("@assistant-ui/tap").Resource<ClientOutput<"tools">, [{
8
- /** Tools to expose to the model and optional renderers to install. */toolkit?: Toolkit; /** Optional MCP app resource whose tools should be merged into context. */
7
+ /** Tools to expose to the model and optional renderers to install. */
8
+ toolkit?: Toolkit;
9
+ /** Optional MCP app resource whose tools should be merged into context. */
9
10
  mcpApp?: ResourceElement<McpAppResourceOutput> | undefined;
10
11
  }]>;
11
12
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"Tools.d.ts","names":[],"sources":["../../../src/react/client/Tools.ts"],"mappings":";;;;;;cA6Ja,KAAA,8BAAK,QAAA,CAAA,YAAA;EAAL,gFAxHD,OAAA;WAED,eAAA,CAAgB,oBAAA;AAAA"}
1
+ {"version":3,"file":"Tools.d.ts","names":[],"sources":["../../../src/react/client/Tools.ts"],"mappings":";;;;;cA6Ja,mCAAK,SAAA;;EAxHN,UAAA;;EAED,SAAA,gBAAgB"}
@@ -1,6 +1,5 @@
1
1
  import { Unstable_InteractableDefinition } from "../types/scopes/interactables.js";
2
2
  import { Tool, toJSONSchema } from "assistant-stream";
3
-
4
3
  //#region src/react/client/interactable-model-context.d.ts
5
4
  type PartialJSONSchema = ReturnType<typeof toJSONSchema>;
6
5
  declare function buildInteractableModelContext(definitions: Record<string, Unstable_InteractableDefinition>, partialSchemaCache: Map<string, PartialJSONSchema>, setDefState: (id: string, updater: (prev: unknown) => unknown) => void, streamBaselines?: Map<string, {
@@ -1 +1 @@
1
- {"version":3,"file":"interactable-model-context.d.ts","names":[],"sources":["../../../src/react/client/interactable-model-context.ts"],"mappings":";;;;KAWY,iBAAA,GAAoB,UAAU,QAAQ,YAAA;AAAA,iBA2HlC,6BAAA,CACd,WAAA,EAAa,MAAA,SAAe,+BAAA,GAC5B,kBAAA,EAAoB,GAAA,SAAY,iBAAA,GAChC,WAAA,GAAc,EAAA,UAAY,OAAA,GAAU,IAAA,gCACpC,eAAA,GAAe,GAAA;;;;EAGX,KAAA,EAAO,MAAA,SAAe,IAAA;EACtB,yBAAA,GAA4B,MAAA;AAAA"}
1
+ {"version":3,"file":"interactable-model-context.d.ts","names":[],"sources":["../../../src/react/client/interactable-model-context.ts"],"mappings":";;;KAWY,oBAAoB,kBAAkB;iBA2HlC,8BACd,aAAa,eAAe,kCAC5B,oBAAoB,YAAY,oBAChC,cAAc,YAAY,UAAU,oCACpC,kBAAe;EAA+B;EAAe;;EAGzD,OAAO,eAAe;EACtB,4BAA4B"}
@@ -30,7 +30,7 @@ import { externalTool } from "./model-context/external-tool.js";
30
30
  import { useAuiToolOverrides } from "./model-context/useAuiToolOverrides.js";
31
31
  import { hitl, hitlTool, humanTool } from "./model-context/human-tool.js";
32
32
  import { ProviderToolConfig, providerTool } from "./model-context/provider-tool.js";
33
- import { McpToolkitDefinition, defineMcpToolkit } from "./model-context/define-mcp-toolkit.js";
33
+ import { McpToolkitDefinition, McpToolkitEntry, McpToolkitToolConfig, defineMcpToolkit } from "./model-context/define-mcp-toolkit.js";
34
34
  import { InteractableDefinition, InteractablePersistedState, InteractablePersistenceAdapter, InteractablePersistenceStatus, InteractableRegistration, InteractableStateSchema, InteractablesClientSchema, InteractablesMethods, InteractablesState } from "./interactables-legacy/scopes.js";
35
35
  import { AssistantInteractableProps, useAssistantInteractable } from "./interactables-legacy/useAssistantInteractable.js";
36
36
  import { useInteractableState } from "./interactables-legacy/useInteractableState.js";
@@ -111,4 +111,4 @@ import { useEditComposerCancel } from "./primitive-hooks/useEditComposerCancel.j
111
111
  import { useEditComposerSend } from "./primitive-hooks/useEditComposerSend.js";
112
112
  import { useMessageError } from "./primitive-hooks/useMessageError.js";
113
113
  import { LocalRuntimeOptions, splitLocalRuntimeOptions, useLocalRuntime } from "./runtimes/useLocalRuntime.js";
114
- export { type AssistantContextConfig, type AssistantDataUI, type AssistantDataUIProps, type AssistantInteractableProps, AssistantProviderBase, type AssistantProviderBaseProps, AssistantRuntimeProvider, type AssistantTool, type AssistantToolProps, type AssistantToolUI, type AssistantToolUIProps, type AsyncStorageLike, ChainOfThoughtByIndicesProvider, ChainOfThoughtPartByIndexProvider, ChainOfThoughtPrimitiveParts, CloudFileAttachmentAdapter, ComposerAttachmentByIndexProvider, ComposerPrimitiveAttachmentByIndex, ComposerPrimitiveAttachments, ComposerPrimitiveIf, ComposerPrimitiveQueue, type DataMessagePartComponent, type DataMessagePartProps, DataRenderers, type DataRenderersClientSchema, type DataRenderersMethods, type DataRenderersState, type EmptyMessagePartComponent, type EmptyMessagePartProps, type EnrichedPartState, type FileMessagePartComponent, type FileMessagePartProps, type GenerativeUIComponentRegistry, type GenerativeUIMessagePartComponent, type GenerativeUIMessagePartProps, GenerativeUIRender, GenerativeUIRenderError, type GenerativeUIRenderProps, type GroupByContext, type ImageMessagePartComponent, type ImageMessagePartProps, type InteractableDefinition, type InteractablePersistedState, type InteractablePersistenceAdapter, type InteractablePersistenceStatus, type InteractableRegistration, type InteractableStateSchema, Interactables, type InteractablesClientSchema, type InteractablesMethods, type InteractablesState, type JoinStrategy, type LocalRuntimeOptions, type McpAppResourceOutput, type McpToolkitDefinition, MessageAttachmentByIndexProvider, MessageByIndexProvider, MessagePartComponent, MessagePartPrimitiveInProgress, MessagePrimitiveAttachmentByIndex, MessagePrimitiveAttachments, MessagePrimitiveGenerativeUI, MessagePrimitiveGroupedParts, MessagePrimitivePartByIndex, MessagePrimitiveParts, MessagePrimitiveQuote, PartByIndexProvider, PartPrimitiveMessages, PartPrimitiveMessagesImpl, type PartState, type ProviderToolConfig, QueueItemByIndexProvider, type QueueItemByIndexProviderProps, type QuoteMessagePartComponent, type QuoteMessagePartProps, ReadonlyThreadProvider, type ReasoningGroupComponent, type ReasoningGroupProps, type ReasoningMessagePartComponent, type ReasoningMessagePartProps, RemoteThreadListHookInstanceManager, RemoteThreadListThreadListRuntimeCore, RuntimeAdapter, RuntimeAdapterProvider, type RuntimeAdapters, type SourceMessagePartComponent, type SourceMessagePartProps, type StreamingTimingAccessors, type StreamingTimingOptions, type StreamingTimingState, SuggestionByIndexProvider, type SuggestionByIndexProviderProps, type TextMessagePartComponent, type TextMessagePartProps, TextMessagePartProvider, ThreadListItemByIndexProvider, ThreadListItemPrimitiveTitle, ThreadListItemRuntimeProvider, ThreadListPrimitiveItemByIndex, ThreadListPrimitiveItems, ThreadPrimitiveMessageByIndex, ThreadPrimitiveMessages, ThreadPrimitiveMessagesImpl, ThreadPrimitiveSuggestionByIndex, ThreadPrimitiveSuggestions, ThreadPrimitiveSuggestionsImpl, ThreadPrimitiveUnstable_MessageById, type TitleGenerationAdapter, type ToolArgsStatus, type ToolCallMessagePartComponent, type ToolCallMessagePartProps, type ToolCallText, type ToolDefinition, type Toolkit, type ToolkitDefinition, type ToolkitDefinitionEntry, Tools, type ToolsClientSchema, type ToolsMethods, type ToolsState, type Unstable_AudioMessagePartComponent, type Unstable_AudioMessagePartProps, type Unstable_InferInteractableState, type Unstable_InteractableConfig, type Unstable_InteractableDefinition, type Unstable_InteractablePersistedState, type Unstable_InteractablePersistenceAdapter, type Unstable_InteractablePersistenceStatus, type Unstable_InteractableRegistration, type Unstable_InteractableStateSchema, type Unstable_InteractableToolConfig, type Unstable_InteractableToolRenderProps, type Unstable_InteractableVersionInfo, type Unstable_InteractablesClientSchema, type Unstable_InteractablesConfig, type Unstable_InteractablesMethods, type Unstable_InteractablesState, type UseActionBarCopyOptions, type UseComposerIfProps, type UseSuggestionTriggerOptions, convertExternalMessages, createLocalStorageAdapter, createMessageConverter, createSimpleTitleAdapter, defineMcpToolkit, defineToolkit, externalTool, getMessageQuote, getRenderComponent, groupPartByType, hitl, hitlTool, humanTool, makeAssistantDataUI, makeAssistantTool, makeAssistantToolUI, defaultComponents as messagePartsDefaultComponents, providerTool, splitLocalRuntimeOptions, stubTool, unstable_Interactables, unstable_interactableTool, unstable_useInteractable, unstable_useInteractableState, unstable_useInteractableVersions, unstable_useThreadMessageIds, useActionBarCopy, useActionBarEdit, useActionBarFeedbackNegative, useActionBarFeedbackPositive, useActionBarReload, useActionBarSpeak, useActionBarStopSpeaking, useAssistantCloudThreadHistoryAdapter, useAssistantContext, useAssistantDataUI, useAssistantInstructions, useAssistantInteractable, useAssistantTool, useAssistantToolUI, useAuiToolOverrides, useBranchPickerNext, useBranchPickerPrevious, useCloudThreadListAdapter, useComposerAddAttachment, useComposerCancel, useComposerDictate, useComposerSend, useEditComposerCancel, useEditComposerSend, useExternalMessageConverter, useExternalStoreRuntime, useExternalStoreSharedOptions, useInlineRender, useInteractableState, useLocalRuntime, useMessageBranching, useMessageError, useMessageReload, useRemoteThreadListRuntime, useRuntimeAdapters, useStreamingTiming, useSuggestionTrigger, useThreadIsEmpty, useThreadIsRunning, useThreadListItemArchive, useThreadListItemDelete, useThreadListItemTrigger, useThreadListItemUnarchive, useThreadListLoadMore, useThreadListNew, useThreadMessages, useToolArgsStatus, useVoiceControls, useVoiceState, useVoiceVolume };
114
+ export { type AssistantContextConfig, type AssistantDataUI, type AssistantDataUIProps, type AssistantInteractableProps, AssistantProviderBase, type AssistantProviderBaseProps, AssistantRuntimeProvider, type AssistantTool, type AssistantToolProps, type AssistantToolUI, type AssistantToolUIProps, type AsyncStorageLike, ChainOfThoughtByIndicesProvider, ChainOfThoughtPartByIndexProvider, ChainOfThoughtPrimitiveParts, CloudFileAttachmentAdapter, ComposerAttachmentByIndexProvider, ComposerPrimitiveAttachmentByIndex, ComposerPrimitiveAttachments, ComposerPrimitiveIf, ComposerPrimitiveQueue, type DataMessagePartComponent, type DataMessagePartProps, DataRenderers, type DataRenderersClientSchema, type DataRenderersMethods, type DataRenderersState, type EmptyMessagePartComponent, type EmptyMessagePartProps, type EnrichedPartState, type FileMessagePartComponent, type FileMessagePartProps, type GenerativeUIComponentRegistry, type GenerativeUIMessagePartComponent, type GenerativeUIMessagePartProps, GenerativeUIRender, GenerativeUIRenderError, type GenerativeUIRenderProps, type GroupByContext, type ImageMessagePartComponent, type ImageMessagePartProps, type InteractableDefinition, type InteractablePersistedState, type InteractablePersistenceAdapter, type InteractablePersistenceStatus, type InteractableRegistration, type InteractableStateSchema, Interactables, type InteractablesClientSchema, type InteractablesMethods, type InteractablesState, type JoinStrategy, type LocalRuntimeOptions, type McpAppResourceOutput, type McpToolkitDefinition, type McpToolkitEntry, type McpToolkitToolConfig, MessageAttachmentByIndexProvider, MessageByIndexProvider, MessagePartComponent, MessagePartPrimitiveInProgress, MessagePrimitiveAttachmentByIndex, MessagePrimitiveAttachments, MessagePrimitiveGenerativeUI, MessagePrimitiveGroupedParts, MessagePrimitivePartByIndex, MessagePrimitiveParts, MessagePrimitiveQuote, PartByIndexProvider, PartPrimitiveMessages, PartPrimitiveMessagesImpl, type PartState, type ProviderToolConfig, QueueItemByIndexProvider, type QueueItemByIndexProviderProps, type QuoteMessagePartComponent, type QuoteMessagePartProps, ReadonlyThreadProvider, type ReasoningGroupComponent, type ReasoningGroupProps, type ReasoningMessagePartComponent, type ReasoningMessagePartProps, RemoteThreadListHookInstanceManager, RemoteThreadListThreadListRuntimeCore, RuntimeAdapter, RuntimeAdapterProvider, type RuntimeAdapters, type SourceMessagePartComponent, type SourceMessagePartProps, type StreamingTimingAccessors, type StreamingTimingOptions, type StreamingTimingState, SuggestionByIndexProvider, type SuggestionByIndexProviderProps, type TextMessagePartComponent, type TextMessagePartProps, TextMessagePartProvider, ThreadListItemByIndexProvider, ThreadListItemPrimitiveTitle, ThreadListItemRuntimeProvider, ThreadListPrimitiveItemByIndex, ThreadListPrimitiveItems, ThreadPrimitiveMessageByIndex, ThreadPrimitiveMessages, ThreadPrimitiveMessagesImpl, ThreadPrimitiveSuggestionByIndex, ThreadPrimitiveSuggestions, ThreadPrimitiveSuggestionsImpl, ThreadPrimitiveUnstable_MessageById, type TitleGenerationAdapter, type ToolArgsStatus, type ToolCallMessagePartComponent, type ToolCallMessagePartProps, type ToolCallText, type ToolDefinition, type Toolkit, type ToolkitDefinition, type ToolkitDefinitionEntry, Tools, type ToolsClientSchema, type ToolsMethods, type ToolsState, type Unstable_AudioMessagePartComponent, type Unstable_AudioMessagePartProps, type Unstable_InferInteractableState, type Unstable_InteractableConfig, type Unstable_InteractableDefinition, type Unstable_InteractablePersistedState, type Unstable_InteractablePersistenceAdapter, type Unstable_InteractablePersistenceStatus, type Unstable_InteractableRegistration, type Unstable_InteractableStateSchema, type Unstable_InteractableToolConfig, type Unstable_InteractableToolRenderProps, type Unstable_InteractableVersionInfo, type Unstable_InteractablesClientSchema, type Unstable_InteractablesConfig, type Unstable_InteractablesMethods, type Unstable_InteractablesState, type UseActionBarCopyOptions, type UseComposerIfProps, type UseSuggestionTriggerOptions, convertExternalMessages, createLocalStorageAdapter, createMessageConverter, createSimpleTitleAdapter, defineMcpToolkit, defineToolkit, externalTool, getMessageQuote, getRenderComponent, groupPartByType, hitl, hitlTool, humanTool, makeAssistantDataUI, makeAssistantTool, makeAssistantToolUI, defaultComponents as messagePartsDefaultComponents, providerTool, splitLocalRuntimeOptions, stubTool, unstable_Interactables, unstable_interactableTool, unstable_useInteractable, unstable_useInteractableState, unstable_useInteractableVersions, unstable_useThreadMessageIds, useActionBarCopy, useActionBarEdit, useActionBarFeedbackNegative, useActionBarFeedbackPositive, useActionBarReload, useActionBarSpeak, useActionBarStopSpeaking, useAssistantCloudThreadHistoryAdapter, useAssistantContext, useAssistantDataUI, useAssistantInstructions, useAssistantInteractable, useAssistantTool, useAssistantToolUI, useAuiToolOverrides, useBranchPickerNext, useBranchPickerPrevious, useCloudThreadListAdapter, useComposerAddAttachment, useComposerCancel, useComposerDictate, useComposerSend, useEditComposerCancel, useEditComposerSend, useExternalMessageConverter, useExternalStoreRuntime, useExternalStoreSharedOptions, useInlineRender, useInteractableState, useLocalRuntime, useMessageBranching, useMessageError, useMessageReload, useRemoteThreadListRuntime, useRuntimeAdapters, useStreamingTiming, useSuggestionTrigger, useThreadIsEmpty, useThreadIsRunning, useThreadListItemArchive, useThreadListItemDelete, useThreadListItemTrigger, useThreadListItemUnarchive, useThreadListLoadMore, useThreadListNew, useThreadMessages, useToolArgsStatus, useVoiceControls, useVoiceState, useVoiceVolume };
@@ -1,5 +1,4 @@
1
1
  import { ClientOutput } from "@assistant-ui/store";
2
-
3
2
  //#region src/react/interactables-legacy/Interactables.d.ts
4
3
  /**
5
4
  * @deprecated Since 2026-06-14 — migrate to the Unstable / Experimental API.
@@ -1 +1 @@
1
- {"version":3,"file":"Interactables.d.ts","names":[],"sources":["../../../src/react/interactables-legacy/Interactables.ts"],"mappings":";;;;;AAqUA;;;cAAa,aAAA,8BAAa,QAAA,CAAA,YAAA"}
1
+ {"version":3,"file":"Interactables.d.ts","names":[],"sources":["../../../src/react/interactables-legacy/Interactables.ts"],"mappings":";;;;;;;cAqUa,2CAAa,SAAA"}
@@ -1,6 +1,5 @@
1
1
  import { InteractableDefinition, InteractableStateSchema } from "./scopes.js";
2
2
  import { Tool } from "assistant-stream";
3
-
4
3
  //#region src/react/interactables-legacy/interactable-model-context.d.ts
5
4
  declare function shallowMerge(prev: unknown, partial: unknown): unknown;
6
5
  declare function buildInteractableModelContext(definitions: Record<string, InteractableDefinition>, partialSchemaCache: Map<string, InteractableStateSchema>, setDefState: (id: string, updater: (prev: unknown) => unknown) => void): {
@@ -1 +1 @@
1
- {"version":3,"file":"interactable-model-context.d.ts","names":[],"sources":["../../../src/react/interactables-legacy/interactable-model-context.ts"],"mappings":";;;;iBAGgB,YAAA,CAAa,IAAA,WAAe,OAAgB;AAAA,iBAiB5C,6BAAA,CACd,WAAA,EAAa,MAAA,SAAe,sBAAA,GAC5B,kBAAA,EAAoB,GAAA,SAAY,uBAAA,GAChC,WAAA,GAAc,EAAA,UAAY,OAAA,GAAU,IAAA;EACjC,MAAA;EAAgB,KAAA,EAAO,MAAA,SAAe,IAAA;AAAA"}
1
+ {"version":3,"file":"interactable-model-context.d.ts","names":[],"sources":["../../../src/react/interactables-legacy/interactable-model-context.ts"],"mappings":";;;iBAGgB,aAAa,eAAe;iBAiB5B,8BACd,aAAa,eAAe,yBAC5B,oBAAoB,YAAY,0BAChC,cAAc,YAAY,UAAU;EACjC;EAAgB,OAAO,eAAe"}
@@ -1,6 +1,6 @@
1
1
  import { Unsubscribe } from "../../types/unsubscribe.js";
2
+ import "../../index.js";
2
3
  import { Tool } from "assistant-stream";
3
-
4
4
  //#region src/react/interactables-legacy/scopes.d.ts
5
5
  /**
6
6
  * Schema type matching Tool["parameters"] from assistant-stream.
@@ -30,7 +30,9 @@ type InteractablePersistenceStatus = {
30
30
  error: unknown;
31
31
  };
32
32
  type InteractablesState = {
33
- /** Keyed by instance id */definitions: Record<string, InteractableDefinition>; /** Per-id persistence sync status */
33
+ /** Keyed by instance id */
34
+ definitions: Record<string, InteractableDefinition>;
35
+ /** Per-id persistence sync status */
34
36
  persistence: Record<string, InteractablePersistenceStatus>;
35
37
  };
36
38
  type InteractablePersistedState = Record<string, {
@@ -1 +1 @@
1
- {"version":3,"file":"scopes.d.ts","names":[],"sources":["../../../src/react/interactables-legacy/scopes.ts"],"mappings":";;;;;;;AAOA;KAAY,uBAAA,GAA0B,WAAA,CACpC,OAAA,CAAQ,IAAA;EAAQ,UAAA;AAAA;AAAA,KAGN,sBAAA;EACV,EAAA;EACA,IAAA;EACA,WAAA;EACA,WAAA,EAAa,uBAAuB;EACpC,KAAA;EACA,QAAA;AAAA;AAAA,KAGU,wBAAA;EACV,EAAA;EACA,IAAA;EACA,WAAA;EACA,WAAA,EAAa,uBAAuB;EACpC,YAAA;EACA,QAAA;AAAA;AAAA,KAGU,6BAAA;EACV,SAAA;EACA,KAAK;AAAA;AAAA,KAGK,kBAAA;EAjBF,2BAmBR,WAAA,EAAa,MAAA,SAAe,sBAAA,GAhBlB;EAkBV,WAAA,EAAa,MAAA,SAAe,6BAAA;AAAA;AAAA,KAGlB,0BAAA,GAA6B,MAAM;EAE3C,IAAA;EAAc,KAAA;AAAA;AAAA,KAGN,8BAAA;EACV,IAAA,CAAK,KAAA,EAAO,0BAAA,UAAoC,OAAO;AAAA;AAAA,KAG7C,oBAAA;EACV,QAAA,IAAY,kBAAA;EACZ,QAAA,CAAS,GAAA,EAAK,wBAAA,GAA2B,WAAA;EACzC,QAAA,CAAS,EAAA,UAAY,OAAA,GAAU,IAAA;EAC/B,WAAA,CAAY,EAAA,UAAY,QAAA;EACxB,WAAA,IAAe,0BAAA;EACf,WAAA,CAAY,KAAA,EAAO,0BAAA;EACnB,qBAAA,CACE,OAAA,EAAS,8BAAA;EAEX,KAAA,IAAS,OAAA;AAAA;AAAA,KAGC,yBAAA;EACV,OAAA,EAAS,oBAAoB;AAAA"}
1
+ {"version":3,"file":"scopes.d.ts","names":[],"sources":["../../../src/react/interactables-legacy/scopes.ts"],"mappings":";;;;;;;;KAOY,0BAA0B,YACpC,QAAQ;EAAQ;;KAGN;EACV;EACA;EACA;EACA,aAAa;EACb;EACA;;KAGU;EACV;EACA;EACA;EACA,aAAa;EACb;EACA;;KAGU;EACV;EACA;;KAGU;;EAEV,aAAa,eAAe;;EAE5B,aAAa,eAAe;;KAGlB,6BAA6B;EAErC;EAAc;;KAGN;EACV,KAAK,OAAO,oCAAoC;;KAGtC;EACV,YAAY;EACZ,SAAS,KAAK,2BAA2B;EACzC,SAAS,YAAY,UAAU;EAC/B,YAAY,YAAY;EACxB,eAAe;EACf,YAAY,OAAO;EACnB,sBACE,SAAS;EAEX,SAAS;;KAGC;EACV,SAAS"}
@@ -1,5 +1,4 @@
1
1
  import { InteractableStateSchema } from "./scopes.js";
2
-
3
2
  //#region src/react/interactables-legacy/useAssistantInteractable.d.ts
4
3
  /**
5
4
  * @deprecated Since 2026-06-14 — migrate to the Unstable / Experimental API.
@@ -1 +1 @@
1
- {"version":3,"file":"useAssistantInteractable.d.ts","names":[],"sources":["../../../src/react/interactables-legacy/useAssistantInteractable.ts"],"mappings":";;;;;AASA;;;KAAY,0BAAA;EACV,WAAA;EACA,WAAA,EAAa,uBAAuB;EACpC,YAAA;EACA,EAAA;EACA,QAAA;AAAA;;AAAQ;AAeV;;;;;;;;AAEoC;;cAFvB,wBAAA,GACX,IAAA,UACA,MAAA,EAAQ,0BAA0B"}
1
+ {"version":3,"file":"useAssistantInteractable.d.ts","names":[],"sources":["../../../src/react/interactables-legacy/useAssistantInteractable.ts"],"mappings":";;;;;;;KASY;EACV;EACA,aAAa;EACb;EACA;EACA;;;;;;;;;;;;;;cAeW,2BACX,cACA,QAAQ"}
@@ -1 +1 @@
1
- {"version":3,"file":"useInteractableState.d.ts","names":[],"sources":["../../../src/react/interactables-legacy/useInteractableState.ts"],"mappings":";KAGK,YAAA,WAAuB,MAAA,KAAW,IAAA,EAAM,MAAA,KAAW,MAAA;;;;;;;;;;cAW3C,oBAAA,WACX,EAAA,UACA,QAAA,EAAU,MAAA,MAEV,MAAA;EAEE,QAAA,GAAW,OAAA,EAAS,YAAA,CAAa,MAAA;EACjC,WAAA,GAAc,QAAA;EACd,SAAA;EACA,KAAA;EACA,KAAA,QAAa,OAAA;AAAA"}
1
+ {"version":3,"file":"useInteractableState.d.ts","names":[],"sources":["../../../src/react/interactables-legacy/useInteractableState.ts"],"mappings":";KAGK,aAAa,UAAU,WAAW,MAAM,WAAW;;;;;;;;;;cAW3C,uBAAwB,QACnC,YACA,UAAU,YAEV;EAEE,WAAW,SAAS,aAAa;EACjC,cAAc;EACd;EACA;EACA,aAAa"}
@@ -1,12 +1,27 @@
1
1
  import { Toolkit } from "./toolbox.js";
2
2
  import { McpServerConfig } from "assistant-stream";
3
-
4
3
  //#region src/react/model-context/define-mcp-toolkit.d.ts
5
- type McpToolkitDefinition = Record<string, McpServerConfig>;
4
+ type McpToolkitEntry = McpServerConfig | {
5
+ server: McpServerConfig;
6
+ disabled?: boolean | undefined;
7
+ /**
8
+ * Prefix applied to every tool name exposed by this MCP server. Useful
9
+ * when multiple servers publish the same tool name, such as `search`.
10
+ */
11
+ prefix?: string | undefined;
12
+ tools?: Record<string, McpToolkitToolConfig> | undefined;
13
+ };
14
+ type McpToolkitToolConfig = {
15
+ disabled?: boolean | undefined;
16
+ };
17
+ type McpToolkitDefinition = Record<string, McpToolkitEntry>;
6
18
  /**
7
- * Defines MCP server tools as a spreadable toolkit fragment.
19
+ * Defines MCP server tools as a spreadable toolkit fragment. Pass a raw
20
+ * `McpServerConfig` for always-on servers, or `{ server, disabled, tools }`
21
+ * when a server should stay configured but not expose all tools for the current
22
+ * request.
8
23
  */
9
24
  declare function defineMcpToolkit(definition: McpToolkitDefinition): Toolkit;
10
25
  //#endregion
11
- export { McpToolkitDefinition, defineMcpToolkit };
26
+ export { McpToolkitDefinition, McpToolkitEntry, McpToolkitToolConfig, defineMcpToolkit };
12
27
  //# sourceMappingURL=define-mcp-toolkit.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"define-mcp-toolkit.d.ts","names":[],"sources":["../../../src/react/model-context/define-mcp-toolkit.ts"],"mappings":";;;;KAGY,oBAAA,GAAuB,MAAM,SAAS,eAAA;;AAAlD;;iBAKgB,gBAAA,CAAiB,UAAA,EAAY,oBAAA,GAAuB,OAAO"}
1
+ {"version":3,"file":"define-mcp-toolkit.d.ts","names":[],"sources":["../../../src/react/model-context/define-mcp-toolkit.ts"],"mappings":";;;KAGY,kBACR;EAEE,QAAQ;EACR;;;;;EAKA;EACA,QAAQ,eAAe;;KAGjB;EACV;;KAGU,uBAAuB,eAAe;;;;;;;iBAQlC,iBAAiB,YAAY,uBAAuB"}
@@ -1,12 +1,24 @@
1
1
  //#region src/react/model-context/define-mcp-toolkit.ts
2
2
  /**
3
- * Defines MCP server tools as a spreadable toolkit fragment.
3
+ * Defines MCP server tools as a spreadable toolkit fragment. Pass a raw
4
+ * `McpServerConfig` for always-on servers, or `{ server, disabled, tools }`
5
+ * when a server should stay configured but not expose all tools for the current
6
+ * request.
4
7
  */
5
8
  function defineMcpToolkit(definition) {
6
- return Object.fromEntries(Object.entries(definition).map(([name, server]) => [name, {
7
- type: "mcp",
8
- server
9
- }]));
9
+ return Object.fromEntries(Object.entries(definition).map(([name, entry]) => {
10
+ const server = "server" in entry ? entry.server : entry;
11
+ const disabled = "server" in entry ? entry.disabled : void 0;
12
+ const prefix = "server" in entry ? entry.prefix : void 0;
13
+ const tools = "server" in entry ? entry.tools : void 0;
14
+ return [name, {
15
+ type: "mcp",
16
+ server,
17
+ ...disabled !== void 0 && { disabled },
18
+ ...prefix !== void 0 && { prefix },
19
+ ...tools !== void 0 && { tools }
20
+ }];
21
+ }));
10
22
  }
11
23
  //#endregion
12
24
  export { defineMcpToolkit };
@@ -1 +1 @@
1
- {"version":3,"file":"define-mcp-toolkit.js","names":["McpServerConfig","Toolkit","McpToolkitDefinition","Record","defineMcpToolkit","definition","Object","fromEntries","entries","map","name","server","type"],"sources":["../../../src/react/model-context/define-mcp-toolkit.ts"],"sourcesContent":["import type { McpServerConfig } from \"assistant-stream\";\nimport type { Toolkit } from \"./toolbox\";\n\nexport type McpToolkitDefinition = Record<string, McpServerConfig>;\n\n/**\n * Defines MCP server tools as a spreadable toolkit fragment.\n */\nexport function defineMcpToolkit(definition: McpToolkitDefinition): Toolkit {\n return Object.fromEntries(\n Object.entries(definition).map(([name, server]) => [\n name,\n { type: \"mcp\", server },\n ]),\n ) as Toolkit;\n}\n"],"mappings":";;;;AAQA,SAAgBI,iBAAiBC,YAA2C;CAC1E,OAAOC,OAAOC,YACZD,OAAOE,QAAQH,UAAU,CAAC,CAACI,KAAK,CAACC,MAAMC,YAAY,CACjDD,MACA;EAAEE,MAAM;EAAOD;CAAO,CAAC,CACxB,CACH;AACF"}
1
+ {"version":3,"file":"define-mcp-toolkit.js","names":["McpServerConfig","Toolkit","McpToolkitEntry","server","disabled","prefix","tools","Record","McpToolkitToolConfig","McpToolkitDefinition","defineMcpToolkit","definition","Object","fromEntries","entries","map","name","entry","undefined","type"],"sources":["../../../src/react/model-context/define-mcp-toolkit.ts"],"sourcesContent":["import type { McpServerConfig } from \"assistant-stream\";\nimport type { Toolkit } from \"./toolbox\";\n\nexport type McpToolkitEntry =\n | McpServerConfig\n | {\n server: McpServerConfig;\n disabled?: boolean | undefined;\n /**\n * Prefix applied to every tool name exposed by this MCP server. Useful\n * when multiple servers publish the same tool name, such as `search`.\n */\n prefix?: string | undefined;\n tools?: Record<string, McpToolkitToolConfig> | undefined;\n };\n\nexport type McpToolkitToolConfig = {\n disabled?: boolean | undefined;\n};\n\nexport type McpToolkitDefinition = Record<string, McpToolkitEntry>;\n\n/**\n * Defines MCP server tools as a spreadable toolkit fragment. Pass a raw\n * `McpServerConfig` for always-on servers, or `{ server, disabled, tools }`\n * when a server should stay configured but not expose all tools for the current\n * request.\n */\nexport function defineMcpToolkit(definition: McpToolkitDefinition): Toolkit {\n return Object.fromEntries(\n Object.entries(definition).map(([name, entry]) => {\n const server = \"server\" in entry ? entry.server : entry;\n const disabled = \"server\" in entry ? entry.disabled : undefined;\n const prefix = \"server\" in entry ? entry.prefix : undefined;\n const tools = \"server\" in entry ? entry.tools : undefined;\n\n return [\n name,\n {\n type: \"mcp\",\n server,\n ...(disabled !== undefined && { disabled }),\n ...(prefix !== undefined && { prefix }),\n ...(tools !== undefined && { tools }),\n },\n ];\n }),\n ) as Toolkit;\n}\n"],"mappings":";;;;;;;AA4BA,SAAgBU,iBAAiBC,YAA2C;CAC1E,OAAOC,OAAOC,YACZD,OAAOE,QAAQH,UAAU,CAAC,CAACI,KAAK,CAACC,MAAMC,WAAW;EAChD,MAAMd,SAAS,YAAYc,QAAQA,MAAMd,SAASc;EAClD,MAAMb,WAAW,YAAYa,QAAQA,MAAMb,WAAWc,KAAAA;EACtD,MAAMb,SAAS,YAAYY,QAAQA,MAAMZ,SAASa,KAAAA;EAClD,MAAMZ,QAAQ,YAAYW,QAAQA,MAAMX,QAAQY,KAAAA;EAEhD,OAAO,CACLF,MACA;GACEG,MAAM;GACNhB;GACA,GAAIC,aAAac,KAAAA,KAAa,EAAEd,SAAS;GACzC,GAAIC,WAAWa,KAAAA,KAAa,EAAEb,OAAO;GACrC,GAAIC,UAAUY,KAAAA,KAAa,EAAEZ,MAAM;EACrC,CAAC;CAEL,CAAC,CACH;AACF"}
@@ -1,5 +1,4 @@
1
1
  import { Toolkit, ToolkitDefinition, ToolkitDefinitionEntryWithParameters } from "./toolbox.js";
2
-
3
2
  //#region src/react/model-context/define-toolkit.d.ts
4
3
  /**
5
4
  * Toolkit authoring helper. Accepts the permissive {@link ToolkitDefinition}
@@ -11,7 +10,7 @@ import { Toolkit, ToolkitDefinition, ToolkitDefinitionEntryWithParameters } from
11
10
  * Outside generative compilation, it returns the toolkit unchanged and can be
12
11
  * used for plain frontend/backend/human toolkit objects.
13
12
  */
14
- declare function defineToolkit<TArgsByName extends { [K in keyof TArgsByName]: Record<string, unknown> }, TResultByName extends { [K in keyof TArgsByName]: unknown } = { [K in keyof TArgsByName]: any }>(_definition: { [K in keyof TArgsByName]: ToolkitDefinitionEntryWithParameters<TArgsByName[K], TResultByName[K]> }): Toolkit & { [K in keyof TArgsByName]: ToolkitDefinitionEntryWithParameters<TArgsByName[K], TResultByName[K]> };
13
+ declare function defineToolkit<TArgsByName extends { [K in keyof TArgsByName]: Record<string, unknown>; }, TResultByName extends { [K in keyof TArgsByName]: unknown; } = { [K in keyof TArgsByName]: any; }>(_definition: { [K in keyof TArgsByName]: ToolkitDefinitionEntryWithParameters<TArgsByName[K], TResultByName[K]>; }): Toolkit & { [K in keyof TArgsByName]: ToolkitDefinitionEntryWithParameters<TArgsByName[K], TResultByName[K]>; };
15
14
  declare function defineToolkit<const TDefinition extends ToolkitDefinition>(_definition: TDefinition): Toolkit & TDefinition;
16
15
  //#endregion
17
16
  export { defineToolkit };
@@ -1 +1 @@
1
- {"version":3,"file":"define-toolkit.d.ts","names":[],"sources":["../../../src/react/model-context/define-toolkit.ts"],"mappings":";;;;;AAgBA;;;;;;;;iBAAgB,aAAA,mCAEA,WAAA,GAAc,MAAA,yDAEQ,WAAA,6BACtB,WAAA,UAEd,WAAA,gBACY,WAAA,GAAc,oCAAA,CACxB,WAAA,CAAY,CAAA,GACZ,aAAA,CAAc,CAAA,OAEd,OAAA,iBACU,WAAA,GAAc,oCAAA,CACxB,WAAA,CAAY,CAAA,GACZ,aAAA,CAAc,CAAA;AAAA,iBAGF,aAAA,2BAAwC,iBAAA,EACtD,WAAA,EAAa,WAAA,GACZ,OAAA,GAAU,WAAA"}
1
+ {"version":3,"file":"define-toolkit.d.ts","names":[],"sources":["../../../src/react/model-context/define-toolkit.ts"],"mappings":";;;;;;;;;;;;iBAgBgB,cACd,uBACG,WAAW,cAAc,4BAE5B,yBAAyB,WAAW,8BACjC,WAAW,sBAEd,gBACC,WAAW,cAAc,qCACxB,YAAY,IACZ,cAAc,SAEd,aACD,WAAW,cAAc,qCACxB,YAAY,IACZ,cAAc;iBAGF,oBAAoB,oBAAoB,mBACtD,aAAa,cACZ,UAAU"}
@@ -1 +1 @@
1
- {"version":3,"file":"external-tool.d.ts","names":[],"sources":["../../../src/react/model-context/external-tool.ts"],"mappings":";;AASA;;;;AAA4B;;;;iBAAZ,YAAA"}
1
+ {"version":3,"file":"external-tool.d.ts","names":[],"sources":["../../../src/react/model-context/external-tool.ts"],"mappings":";;;;;;;;;;iBASgB"}
@@ -1 +1 @@
1
- {"version":3,"file":"human-tool.d.ts","names":[],"sources":["../../../src/react/model-context/human-tool.ts"],"mappings":";;AAcA;;;;AAAyB;AAYzB;;;;AAAiC;AAKjC;;;iBAjBgB,SAAA;AAiBa;;;AAAA,cALhB,QAAA,SAAQ,SAAY;;;;cAKpB,IAAA,SAAI,SAAY"}
1
+ {"version":3,"file":"human-tool.d.ts","names":[],"sources":["../../../src/react/model-context/human-tool.ts"],"mappings":";;;;;;;;;;;;;;;iBAcgB;;;;cAYH,iBAAQ;;;;cAKR,aAAI"}
@@ -2,7 +2,6 @@ import { Unstable_InteractableStateSchema } from "../types/scopes/interactables.
2
2
  import { ToolDefinition } from "./toolbox.js";
3
3
  import { Unstable_InferInteractableState, Unstable_InteractableVersionInfo } from "./useInteractable.js";
4
4
  import { ReactNode } from "react";
5
-
6
5
  //#region src/react/model-context/interactableTool.d.ts
7
6
  type Unstable_InteractableToolRenderProps<TState> = {
8
7
  /**
@@ -17,7 +16,8 @@ type Unstable_InteractableToolRenderProps<TState> = {
17
16
  * to it. `undefined` while streaming.
18
17
  */
19
18
  version: Unstable_InteractableVersionInfo<TState> | undefined;
20
- id: string; /** True while the tool call's arguments are still streaming in. */
19
+ id: string;
20
+ /** True while the tool call's arguments are still streaming in. */
21
21
  streaming: boolean;
22
22
  };
23
23
  type Unstable_InteractableToolConfig<TSchema extends Unstable_InteractableStateSchema> = {