@assistant-ui/core 0.3.19 → 0.3.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (934) hide show
  1. package/dist/adapters/attachment.d.ts +50 -43
  2. package/dist/adapters/attachment.d.ts.map +1 -1
  3. package/dist/adapters/attachment.js +52 -21
  4. package/dist/adapters/attachment.js.map +1 -1
  5. package/dist/adapters/directive-formatter.d.ts +2 -5
  6. package/dist/adapters/directive-formatter.d.ts.map +1 -1
  7. package/dist/adapters/feedback.d.ts +7 -8
  8. package/dist/adapters/feedback.d.ts.map +1 -1
  9. package/dist/adapters/index.d.ts +14 -9
  10. package/dist/adapters/index.d.ts.map +1 -0
  11. package/dist/adapters/index.js +1 -1
  12. package/dist/adapters/speech.d.ts +63 -65
  13. package/dist/adapters/speech.d.ts.map +1 -1
  14. package/dist/adapters/speech.js +16 -2
  15. package/dist/adapters/speech.js.map +1 -1
  16. package/dist/adapters/suggestion.d.ts +19 -22
  17. package/dist/adapters/suggestion.d.ts.map +1 -1
  18. package/dist/adapters/thread-history.d.ts +60 -58
  19. package/dist/adapters/thread-history.d.ts.map +1 -1
  20. package/dist/adapters/trigger.d.ts +8 -11
  21. package/dist/adapters/trigger.d.ts.map +1 -1
  22. package/dist/adapters/voice.d.ts +50 -45
  23. package/dist/adapters/voice.d.ts.map +1 -1
  24. package/dist/adapters/voice.js +17 -3
  25. package/dist/adapters/voice.js.map +1 -1
  26. package/dist/index.d.ts +70 -56
  27. package/dist/index.d.ts.map +1 -0
  28. package/dist/index.js +6 -6
  29. package/dist/index.js.map +1 -1
  30. package/dist/internal/duplicate-detection.d.ts +1 -4
  31. package/dist/internal/duplicate-detection.d.ts.map +1 -1
  32. package/dist/internal.d.ts +27 -58
  33. package/dist/internal.d.ts.map +1 -0
  34. package/dist/internal.js +8 -6
  35. package/dist/model-context/frame/host.d.ts +20 -23
  36. package/dist/model-context/frame/host.d.ts.map +1 -1
  37. package/dist/model-context/frame/host.js +3 -1
  38. package/dist/model-context/frame/host.js.map +1 -1
  39. package/dist/model-context/frame/provider.d.ts +28 -30
  40. package/dist/model-context/frame/provider.d.ts.map +1 -1
  41. package/dist/model-context/frame/provider.js +6 -0
  42. package/dist/model-context/frame/provider.js.map +1 -1
  43. package/dist/model-context/frame/types.d.ts +24 -27
  44. package/dist/model-context/frame/types.d.ts.map +1 -1
  45. package/dist/model-context/frame/validate.d.ts +3 -0
  46. package/dist/model-context/frame/validate.d.ts.map +1 -0
  47. package/dist/model-context/frame/validate.js +26 -0
  48. package/dist/model-context/frame/validate.js.map +1 -0
  49. package/dist/model-context/interactable-composer-metadata.d.ts +51 -39
  50. package/dist/model-context/interactable-composer-metadata.d.ts.map +1 -1
  51. package/dist/model-context/interactable-composer-metadata.js +30 -6
  52. package/dist/model-context/interactable-composer-metadata.js.map +1 -1
  53. package/dist/model-context/registry-handles.d.ts +9 -12
  54. package/dist/model-context/registry-handles.d.ts.map +1 -1
  55. package/dist/model-context/registry.d.ts +15 -18
  56. package/dist/model-context/registry.d.ts.map +1 -1
  57. package/dist/model-context/tool-call-text.d.ts +15 -17
  58. package/dist/model-context/tool-call-text.d.ts.map +1 -1
  59. package/dist/model-context/tool.d.ts +12 -14
  60. package/dist/model-context/tool.d.ts.map +1 -1
  61. package/dist/model-context/types.d.ts +40 -43
  62. package/dist/model-context/types.d.ts.map +1 -1
  63. package/dist/react/AssistantProvider.d.ts +9 -12
  64. package/dist/react/AssistantProvider.d.ts.map +1 -1
  65. package/dist/react/AssistantRuntimeProvider.d.ts +23 -26
  66. package/dist/react/AssistantRuntimeProvider.d.ts.map +1 -1
  67. package/dist/react/RuntimeAdapter.d.ts +4 -8
  68. package/dist/react/RuntimeAdapter.d.ts.map +1 -1
  69. package/dist/react/adapters/LocalStorageThreadListAdapter.d.ts +28 -23
  70. package/dist/react/adapters/LocalStorageThreadListAdapter.d.ts.map +1 -1
  71. package/dist/react/adapters/LocalStorageThreadListAdapter.js +77 -58
  72. package/dist/react/adapters/LocalStorageThreadListAdapter.js.map +1 -1
  73. package/dist/react/adapters/TitleGenerationAdapter.d.ts +4 -7
  74. package/dist/react/adapters/TitleGenerationAdapter.d.ts.map +1 -1
  75. package/dist/react/client/AdaptedRemoteThread.d.ts +6 -9
  76. package/dist/react/client/AdaptedRemoteThread.d.ts.map +1 -1
  77. package/dist/react/client/DataRenderers.d.ts +2 -5
  78. package/dist/react/client/DataRenderers.d.ts.map +1 -1
  79. package/dist/react/client/InMemoryThreadList.d.ts +9 -12
  80. package/dist/react/client/InMemoryThreadList.d.ts.map +1 -1
  81. package/dist/react/client/Interactables.d.ts +3 -6
  82. package/dist/react/client/Interactables.d.ts.map +1 -1
  83. package/dist/react/client/Interactables.js +306 -101
  84. package/dist/react/client/Interactables.js.map +1 -1
  85. package/dist/react/client/RemoteThreadList.d.ts +34 -37
  86. package/dist/react/client/RemoteThreadList.d.ts.map +1 -1
  87. package/dist/react/client/RemoteThreadList.js +2 -1
  88. package/dist/react/client/RemoteThreadList.js.map +1 -1
  89. package/dist/react/client/Tools.d.ts +10 -12
  90. package/dist/react/client/Tools.d.ts.map +1 -1
  91. package/dist/react/client/Tools.js +4 -8
  92. package/dist/react/client/Tools.js.map +1 -1
  93. package/dist/react/client/interactable-model-context.d.ts +9 -11
  94. package/dist/react/client/interactable-model-context.d.ts.map +1 -1
  95. package/dist/react/client/interactable-model-context.js +32 -22
  96. package/dist/react/client/interactable-model-context.js.map +1 -1
  97. package/dist/react/index.d.ts +160 -122
  98. package/dist/react/index.d.ts.map +1 -0
  99. package/dist/react/index.js +5 -5
  100. package/dist/react/interactables-legacy/Interactables.d.ts +2 -5
  101. package/dist/react/interactables-legacy/Interactables.d.ts.map +1 -1
  102. package/dist/react/interactables-legacy/Interactables.js +15 -8
  103. package/dist/react/interactables-legacy/Interactables.js.map +1 -1
  104. package/dist/react/interactables-legacy/interactable-model-context.d.ts +6 -9
  105. package/dist/react/interactables-legacy/interactable-model-context.d.ts.map +1 -1
  106. package/dist/react/interactables-legacy/interactable-model-context.js +13 -14
  107. package/dist/react/interactables-legacy/interactable-model-context.js.map +1 -1
  108. package/dist/react/interactables-legacy/scopes.d.ts +42 -46
  109. package/dist/react/interactables-legacy/scopes.d.ts.map +1 -1
  110. package/dist/react/interactables-legacy/useAssistantInteractable.d.ts +8 -11
  111. package/dist/react/interactables-legacy/useAssistantInteractable.d.ts.map +1 -1
  112. package/dist/react/interactables-legacy/useInteractableState.d.ts +7 -9
  113. package/dist/react/interactables-legacy/useInteractableState.d.ts.map +1 -1
  114. package/dist/react/interactables-shared/useInteractablePersistenceQueue.d.ts +23 -14
  115. package/dist/react/interactables-shared/useInteractablePersistenceQueue.d.ts.map +1 -1
  116. package/dist/react/interactables-shared/useInteractablePersistenceQueue.js +54 -25
  117. package/dist/react/interactables-shared/useInteractablePersistenceQueue.js.map +1 -1
  118. package/dist/react/model-context/define-mcp-toolkit.d.ts +15 -18
  119. package/dist/react/model-context/define-mcp-toolkit.d.ts.map +1 -1
  120. package/dist/react/model-context/define-toolkit.d.ts +13 -6
  121. package/dist/react/model-context/define-toolkit.d.ts.map +1 -1
  122. package/dist/react/model-context/external-tool.d.ts +1 -4
  123. package/dist/react/model-context/external-tool.d.ts.map +1 -1
  124. package/dist/react/model-context/human-tool.d.ts +3 -6
  125. package/dist/react/model-context/human-tool.d.ts.map +1 -1
  126. package/dist/react/model-context/interactableTool.d.ts +26 -29
  127. package/dist/react/model-context/interactableTool.d.ts.map +1 -1
  128. package/dist/react/model-context/makeAssistantDataUI.d.ts +6 -9
  129. package/dist/react/model-context/makeAssistantDataUI.d.ts.map +1 -1
  130. package/dist/react/model-context/makeAssistantTool.d.ts +6 -9
  131. package/dist/react/model-context/makeAssistantTool.d.ts.map +1 -1
  132. package/dist/react/model-context/makeAssistantToolUI.d.ts +6 -9
  133. package/dist/react/model-context/makeAssistantToolUI.d.ts.map +1 -1
  134. package/dist/react/model-context/provider-tool.d.ts +5 -7
  135. package/dist/react/model-context/provider-tool.d.ts.map +1 -1
  136. package/dist/react/model-context/stub-tool.d.ts +1 -4
  137. package/dist/react/model-context/stub-tool.d.ts.map +1 -1
  138. package/dist/react/model-context/toolbox.d.ts +44 -32
  139. package/dist/react/model-context/toolbox.d.ts.map +1 -1
  140. package/dist/react/model-context/useAssistantContext.d.ts +3 -6
  141. package/dist/react/model-context/useAssistantContext.d.ts.map +1 -1
  142. package/dist/react/model-context/useAssistantDataUI.d.ts +7 -10
  143. package/dist/react/model-context/useAssistantDataUI.d.ts.map +1 -1
  144. package/dist/react/model-context/useAssistantInstructions.d.ts +3 -6
  145. package/dist/react/model-context/useAssistantInstructions.d.ts.map +1 -1
  146. package/dist/react/model-context/useAssistantTool.d.ts +9 -13
  147. package/dist/react/model-context/useAssistantTool.d.ts.map +1 -1
  148. package/dist/react/model-context/useAssistantToolUI.d.ts +13 -16
  149. package/dist/react/model-context/useAssistantToolUI.d.ts.map +1 -1
  150. package/dist/react/model-context/useAuiToolOverrides.d.ts +3 -5
  151. package/dist/react/model-context/useAuiToolOverrides.d.ts.map +1 -1
  152. package/dist/react/model-context/useInlineRender.d.ts +3 -6
  153. package/dist/react/model-context/useInlineRender.d.ts.map +1 -1
  154. package/dist/react/model-context/useInteractable.d.ts +40 -40
  155. package/dist/react/model-context/useInteractable.d.ts.map +1 -1
  156. package/dist/react/model-context/useInteractableState.d.ts +10 -9
  157. package/dist/react/model-context/useInteractableState.d.ts.map +1 -1
  158. package/dist/react/model-context/useInteractableVersions.d.ts +4 -7
  159. package/dist/react/model-context/useInteractableVersions.d.ts.map +1 -1
  160. package/dist/react/model-context/useToolArgsStatus.d.ts +7 -9
  161. package/dist/react/model-context/useToolArgsStatus.d.ts.map +1 -1
  162. package/dist/react/primitive-hooks/useActionBarCopy.d.ts +7 -10
  163. package/dist/react/primitive-hooks/useActionBarCopy.d.ts.map +1 -1
  164. package/dist/react/primitive-hooks/useActionBarEdit.d.ts +3 -6
  165. package/dist/react/primitive-hooks/useActionBarEdit.d.ts.map +1 -1
  166. package/dist/react/primitive-hooks/useActionBarFeedback.d.ts +6 -9
  167. package/dist/react/primitive-hooks/useActionBarFeedback.d.ts.map +1 -1
  168. package/dist/react/primitive-hooks/useActionBarReload.d.ts +3 -6
  169. package/dist/react/primitive-hooks/useActionBarReload.d.ts.map +1 -1
  170. package/dist/react/primitive-hooks/useActionBarSpeak.d.ts +3 -6
  171. package/dist/react/primitive-hooks/useActionBarSpeak.d.ts.map +1 -1
  172. package/dist/react/primitive-hooks/useActionBarStopSpeaking.d.ts +3 -6
  173. package/dist/react/primitive-hooks/useActionBarStopSpeaking.d.ts.map +1 -1
  174. package/dist/react/primitive-hooks/useBranchPickerNext.d.ts +3 -6
  175. package/dist/react/primitive-hooks/useBranchPickerNext.d.ts.map +1 -1
  176. package/dist/react/primitive-hooks/useBranchPickerPrevious.d.ts +3 -6
  177. package/dist/react/primitive-hooks/useBranchPickerPrevious.d.ts.map +1 -1
  178. package/dist/react/primitive-hooks/useComposerAddAttachment.d.ts +4 -7
  179. package/dist/react/primitive-hooks/useComposerAddAttachment.d.ts.map +1 -1
  180. package/dist/react/primitive-hooks/useComposerCancel.d.ts +3 -6
  181. package/dist/react/primitive-hooks/useComposerCancel.d.ts.map +1 -1
  182. package/dist/react/primitive-hooks/useComposerDictate.d.ts +3 -6
  183. package/dist/react/primitive-hooks/useComposerDictate.d.ts.map +1 -1
  184. package/dist/react/primitive-hooks/useComposerSend.d.ts +4 -7
  185. package/dist/react/primitive-hooks/useComposerSend.d.ts.map +1 -1
  186. package/dist/react/primitive-hooks/useEditComposerCancel.d.ts +2 -5
  187. package/dist/react/primitive-hooks/useEditComposerCancel.d.ts.map +1 -1
  188. package/dist/react/primitive-hooks/useEditComposerSend.d.ts +3 -6
  189. package/dist/react/primitive-hooks/useEditComposerSend.d.ts.map +1 -1
  190. package/dist/react/primitive-hooks/useMessageBranching.d.ts +5 -8
  191. package/dist/react/primitive-hooks/useMessageBranching.d.ts.map +1 -1
  192. package/dist/react/primitive-hooks/useMessageError.d.ts +1 -4
  193. package/dist/react/primitive-hooks/useMessageError.d.ts.map +1 -1
  194. package/dist/react/primitive-hooks/useMessageReload.d.ts +3 -6
  195. package/dist/react/primitive-hooks/useMessageReload.d.ts.map +1 -1
  196. package/dist/react/primitive-hooks/useSuggestionTrigger.d.ts +7 -10
  197. package/dist/react/primitive-hooks/useSuggestionTrigger.d.ts.map +1 -1
  198. package/dist/react/primitive-hooks/useSuggestionTrigger.js +4 -4
  199. package/dist/react/primitive-hooks/useSuggestionTrigger.js.map +1 -1
  200. package/dist/react/primitive-hooks/useThreadIsEmpty.d.ts +1 -4
  201. package/dist/react/primitive-hooks/useThreadIsEmpty.d.ts.map +1 -1
  202. package/dist/react/primitive-hooks/useThreadIsRunning.d.ts +1 -4
  203. package/dist/react/primitive-hooks/useThreadIsRunning.d.ts.map +1 -1
  204. package/dist/react/primitive-hooks/useThreadListItemArchive.d.ts +2 -5
  205. package/dist/react/primitive-hooks/useThreadListItemArchive.d.ts.map +1 -1
  206. package/dist/react/primitive-hooks/useThreadListItemDelete.d.ts +2 -5
  207. package/dist/react/primitive-hooks/useThreadListItemDelete.d.ts.map +1 -1
  208. package/dist/react/primitive-hooks/useThreadListItemTrigger.d.ts +2 -5
  209. package/dist/react/primitive-hooks/useThreadListItemTrigger.d.ts.map +1 -1
  210. package/dist/react/primitive-hooks/useThreadListItemUnarchive.d.ts +2 -5
  211. package/dist/react/primitive-hooks/useThreadListItemUnarchive.d.ts.map +1 -1
  212. package/dist/react/primitive-hooks/useThreadListLoadMore.d.ts +3 -6
  213. package/dist/react/primitive-hooks/useThreadListLoadMore.d.ts.map +1 -1
  214. package/dist/react/primitive-hooks/useThreadListNew.d.ts +2 -5
  215. package/dist/react/primitive-hooks/useThreadListNew.d.ts.map +1 -1
  216. package/dist/react/primitive-hooks/useThreadMessageIds.d.ts +1 -4
  217. package/dist/react/primitive-hooks/useThreadMessageIds.d.ts.map +1 -1
  218. package/dist/react/primitive-hooks/useThreadMessages.d.ts +2 -5
  219. package/dist/react/primitive-hooks/useThreadMessages.d.ts.map +1 -1
  220. package/dist/react/primitive-hooks/useVoice.d.ts +8 -11
  221. package/dist/react/primitive-hooks/useVoice.d.ts.map +1 -1
  222. package/dist/react/primitives/chainOfThought/ChainOfThoughtParts.d.ts +27 -29
  223. package/dist/react/primitives/chainOfThought/ChainOfThoughtParts.d.ts.map +1 -1
  224. package/dist/react/primitives/composer/ComposerAttachments.d.ts +26 -28
  225. package/dist/react/primitives/composer/ComposerAttachments.d.ts.map +1 -1
  226. package/dist/react/primitives/composer/ComposerIf.d.ts +13 -13
  227. package/dist/react/primitives/composer/ComposerIf.d.ts.map +1 -1
  228. package/dist/react/primitives/composer/ComposerQueue.d.ts +13 -17
  229. package/dist/react/primitives/composer/ComposerQueue.d.ts.map +1 -1
  230. package/dist/react/primitives/generativeUI/GenerativeUI.d.ts +30 -33
  231. package/dist/react/primitives/generativeUI/GenerativeUI.d.ts.map +1 -1
  232. package/dist/react/primitives/generativeUI/GenerativeUI.js +42 -33
  233. package/dist/react/primitives/generativeUI/GenerativeUI.js.map +1 -1
  234. package/dist/react/primitives/message/MessageAttachments.d.ts +30 -28
  235. package/dist/react/primitives/message/MessageAttachments.d.ts.map +1 -1
  236. package/dist/react/primitives/message/MessageAttachments.js +14 -15
  237. package/dist/react/primitives/message/MessageAttachments.js.map +1 -1
  238. package/dist/react/primitives/message/MessageGroupedParts.d.ts +122 -120
  239. package/dist/react/primitives/message/MessageGroupedParts.d.ts.map +1 -1
  240. package/dist/react/primitives/message/MessageGroupedParts.js +3 -3
  241. package/dist/react/primitives/message/MessageGroupedParts.js.map +1 -1
  242. package/dist/react/primitives/message/MessageParts.d.ts +208 -194
  243. package/dist/react/primitives/message/MessageParts.d.ts.map +1 -1
  244. package/dist/react/primitives/message/MessageParts.js +124 -82
  245. package/dist/react/primitives/message/MessageParts.js.map +1 -1
  246. package/dist/react/primitives/message/MessageQuote.d.ts +8 -11
  247. package/dist/react/primitives/message/MessageQuote.d.ts.map +1 -1
  248. package/dist/react/primitives/messagePart/MessagePartInProgress.d.ts +4 -7
  249. package/dist/react/primitives/messagePart/MessagePartInProgress.d.ts.map +1 -1
  250. package/dist/react/primitives/part/PartMessages.d.ts +16 -19
  251. package/dist/react/primitives/part/PartMessages.d.ts.map +1 -1
  252. package/dist/react/primitives/thread/ThreadMessages.d.ts +61 -64
  253. package/dist/react/primitives/thread/ThreadMessages.d.ts.map +1 -1
  254. package/dist/react/primitives/thread/ThreadSuggestions.d.ts +25 -27
  255. package/dist/react/primitives/thread/ThreadSuggestions.d.ts.map +1 -1
  256. package/dist/react/primitives/thread/ThreadSuggestions.js +24 -5
  257. package/dist/react/primitives/thread/ThreadSuggestions.js.map +1 -1
  258. package/dist/react/primitives/threadList/ThreadListItems.d.ts +26 -28
  259. package/dist/react/primitives/threadList/ThreadListItems.d.ts.map +1 -1
  260. package/dist/react/primitives/threadListItem/ThreadListItemTitle.d.ts +6 -9
  261. package/dist/react/primitives/threadListItem/ThreadListItemTitle.d.ts.map +1 -1
  262. package/dist/react/providers/AttachmentByIndexProvider.d.ts +5 -8
  263. package/dist/react/providers/AttachmentByIndexProvider.d.ts.map +1 -1
  264. package/dist/react/providers/ChainOfThoughtByIndicesProvider.d.ts +4 -7
  265. package/dist/react/providers/ChainOfThoughtByIndicesProvider.d.ts.map +1 -1
  266. package/dist/react/providers/ChainOfThoughtPartByIndexProvider.d.ts +3 -6
  267. package/dist/react/providers/ChainOfThoughtPartByIndexProvider.d.ts.map +1 -1
  268. package/dist/react/providers/MessageByIdProvider.d.ts +3 -6
  269. package/dist/react/providers/MessageByIdProvider.d.ts.map +1 -1
  270. package/dist/react/providers/MessageByIndexProvider.d.ts +3 -6
  271. package/dist/react/providers/MessageByIndexProvider.d.ts.map +1 -1
  272. package/dist/react/providers/PartByIndexProvider.d.ts +3 -6
  273. package/dist/react/providers/PartByIndexProvider.d.ts.map +1 -1
  274. package/dist/react/providers/QueueItemByIndexProvider.d.ts +4 -7
  275. package/dist/react/providers/QueueItemByIndexProvider.d.ts.map +1 -1
  276. package/dist/react/providers/ReadonlyThreadProvider.d.ts +7 -10
  277. package/dist/react/providers/ReadonlyThreadProvider.d.ts.map +1 -1
  278. package/dist/react/providers/ReadonlyThreadProvider.js.map +1 -1
  279. package/dist/react/providers/SuggestionByIndexProvider.d.ts +4 -7
  280. package/dist/react/providers/SuggestionByIndexProvider.d.ts.map +1 -1
  281. package/dist/react/providers/TextMessagePartProvider.d.ts +4 -7
  282. package/dist/react/providers/TextMessagePartProvider.d.ts.map +1 -1
  283. package/dist/react/providers/TextMessagePartProvider.js +5 -1
  284. package/dist/react/providers/TextMessagePartProvider.js.map +1 -1
  285. package/dist/react/providers/ThreadListItemByIndexProvider.d.ts +4 -7
  286. package/dist/react/providers/ThreadListItemByIndexProvider.d.ts.map +1 -1
  287. package/dist/react/providers/ThreadListItemRuntimeProvider.d.ts +4 -8
  288. package/dist/react/providers/ThreadListItemRuntimeProvider.d.ts.map +1 -1
  289. package/dist/react/runtimes/RemoteThreadListHookInstanceManager.d.ts +210 -219
  290. package/dist/react/runtimes/RemoteThreadListHookInstanceManager.d.ts.map +1 -1
  291. package/dist/react/runtimes/RemoteThreadListHookInstanceManager.js +70 -46
  292. package/dist/react/runtimes/RemoteThreadListHookInstanceManager.js.map +1 -1
  293. package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.d.ts +186 -198
  294. package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.d.ts.map +1 -1
  295. package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.js +13 -4
  296. package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.js.map +1 -1
  297. package/dist/react/runtimes/RemoteThreadResource.d.ts +17 -23
  298. package/dist/react/runtimes/RemoteThreadResource.d.ts.map +1 -1
  299. package/dist/react/runtimes/RemoteThreadResource.js +3 -1
  300. package/dist/react/runtimes/RemoteThreadResource.js.map +1 -1
  301. package/dist/react/runtimes/RuntimeAdapterProvider.d.ts +10 -11
  302. package/dist/react/runtimes/RuntimeAdapterProvider.d.ts.map +1 -1
  303. package/dist/react/runtimes/assistant-transport/commandQueue.d.ts +11 -14
  304. package/dist/react/runtimes/assistant-transport/commandQueue.d.ts.map +1 -1
  305. package/dist/react/runtimes/assistant-transport/replayBoundaryStream.d.ts +6 -8
  306. package/dist/react/runtimes/assistant-transport/replayBoundaryStream.d.ts.map +1 -1
  307. package/dist/react/runtimes/assistant-transport/replayBoundaryStream.js +9 -2
  308. package/dist/react/runtimes/assistant-transport/replayBoundaryStream.js.map +1 -1
  309. package/dist/react/runtimes/assistant-transport/runManager.d.ts +9 -12
  310. package/dist/react/runtimes/assistant-transport/runManager.d.ts.map +1 -1
  311. package/dist/react/runtimes/assistant-transport/runManager.js +4 -1
  312. package/dist/react/runtimes/assistant-transport/runManager.js.map +1 -1
  313. package/dist/react/runtimes/assistant-transport/types.d.ts +123 -118
  314. package/dist/react/runtimes/assistant-transport/types.d.ts.map +1 -1
  315. package/dist/react/runtimes/assistant-transport/useAssistantTransportRuntime.d.ts +7 -10
  316. package/dist/react/runtimes/assistant-transport/useAssistantTransportRuntime.d.ts.map +1 -1
  317. package/dist/react/runtimes/assistant-transport/useAssistantTransportRuntime.js +17 -6
  318. package/dist/react/runtimes/assistant-transport/useAssistantTransportRuntime.js.map +1 -1
  319. package/dist/react/runtimes/assistant-transport/useConvertedState.d.ts +3 -6
  320. package/dist/react/runtimes/assistant-transport/useConvertedState.d.ts.map +1 -1
  321. package/dist/react/runtimes/assistant-transport/useLatestRef.d.ts +2 -5
  322. package/dist/react/runtimes/assistant-transport/useLatestRef.d.ts.map +1 -1
  323. package/dist/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.d.ts +7 -10
  324. package/dist/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.d.ts.map +1 -1
  325. package/dist/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.js +426 -216
  326. package/dist/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.js.map +1 -1
  327. package/dist/react/runtimes/cloud/CloudFileAttachmentAdapter.d.ts +15 -18
  328. package/dist/react/runtimes/cloud/CloudFileAttachmentAdapter.d.ts.map +1 -1
  329. package/dist/react/runtimes/cloud/CloudFileAttachmentAdapter.js +8 -4
  330. package/dist/react/runtimes/cloud/CloudFileAttachmentAdapter.js.map +1 -1
  331. package/dist/react/runtimes/cloud/auiV0.d.ts +146 -125
  332. package/dist/react/runtimes/cloud/auiV0.d.ts.map +1 -1
  333. package/dist/react/runtimes/cloud/auiV0.js +120 -8
  334. package/dist/react/runtimes/cloud/auiV0.js.map +1 -1
  335. package/dist/react/runtimes/cloud/createCloudThreadListAdapter.d.ts +13 -15
  336. package/dist/react/runtimes/cloud/createCloudThreadListAdapter.d.ts.map +1 -1
  337. package/dist/react/runtimes/cloud/createCloudThreadListAdapterCreateFallback.d.ts +5 -7
  338. package/dist/react/runtimes/cloud/createCloudThreadListAdapterCreateFallback.d.ts.map +1 -1
  339. package/dist/react/runtimes/cloud/sdkIdentity.d.ts +2 -5
  340. package/dist/react/runtimes/cloud/sdkIdentity.d.ts.map +1 -1
  341. package/dist/react/runtimes/cloud/sdkIdentity.js +1 -1
  342. package/dist/react/runtimes/cloud/useCloudThreadListAdapter.d.ts +3 -6
  343. package/dist/react/runtimes/cloud/useCloudThreadListAdapter.d.ts.map +1 -1
  344. package/dist/react/runtimes/cloud/useCloudThreadListRuntime.d.ts +9 -11
  345. package/dist/react/runtimes/cloud/useCloudThreadListRuntime.d.ts.map +1 -1
  346. package/dist/react/runtimes/createMessageConverter.d.ts +15 -19
  347. package/dist/react/runtimes/createMessageConverter.d.ts.map +1 -1
  348. package/dist/react/runtimes/createMessageConverter.js.map +1 -1
  349. package/dist/react/runtimes/createRuntimeExtras.d.ts +14 -17
  350. package/dist/react/runtimes/createRuntimeExtras.d.ts.map +1 -1
  351. package/dist/react/runtimes/external-message-converter.d.ts +17 -21
  352. package/dist/react/runtimes/external-message-converter.d.ts.map +1 -1
  353. package/dist/react/runtimes/external-store-history-copy.d.ts +25 -0
  354. package/dist/react/runtimes/external-store-history-copy.d.ts.map +1 -0
  355. package/dist/react/runtimes/external-store-history-copy.js +148 -0
  356. package/dist/react/runtimes/external-store-history-copy.js.map +1 -0
  357. package/dist/react/runtimes/useExternalStoreRuntime.d.ts +3 -6
  358. package/dist/react/runtimes/useExternalStoreRuntime.d.ts.map +1 -1
  359. package/dist/react/runtimes/useExternalStoreRuntime.js +72 -35
  360. package/dist/react/runtimes/useExternalStoreRuntime.js.map +1 -1
  361. package/dist/react/runtimes/useExternalStoreSharedOptions.d.ts +2 -5
  362. package/dist/react/runtimes/useExternalStoreSharedOptions.d.ts.map +1 -1
  363. package/dist/react/runtimes/useLocalRuntime.d.ts +29 -41
  364. package/dist/react/runtimes/useLocalRuntime.d.ts.map +1 -1
  365. package/dist/react/runtimes/useLocalRuntime.js +142 -34
  366. package/dist/react/runtimes/useLocalRuntime.js.map +1 -1
  367. package/dist/react/runtimes/useRemoteThreadListRuntime.d.ts +3 -6
  368. package/dist/react/runtimes/useRemoteThreadListRuntime.d.ts.map +1 -1
  369. package/dist/react/runtimes/useRemoteThreadListRuntime.js +2 -2
  370. package/dist/react/runtimes/useRemoteThreadListRuntime.js.map +1 -1
  371. package/dist/react/runtimes/useRuntimeAdapters.d.ts +5 -7
  372. package/dist/react/runtimes/useRuntimeAdapters.d.ts.map +1 -1
  373. package/dist/react/runtimes/useStreamingTiming.d.ts +4 -6
  374. package/dist/react/runtimes/useStreamingTiming.d.ts.map +1 -1
  375. package/dist/react/types/MessagePartComponentTypes.d.ts +72 -70
  376. package/dist/react/types/MessagePartComponentTypes.d.ts.map +1 -1
  377. package/dist/react/types/scopes/dataRenderers.d.ts +11 -15
  378. package/dist/react/types/scopes/dataRenderers.d.ts.map +1 -1
  379. package/dist/react/types/scopes/interactables.d.ts +60 -60
  380. package/dist/react/types/scopes/interactables.d.ts.map +1 -1
  381. package/dist/react/types/scopes/tools.d.ts +21 -24
  382. package/dist/react/types/scopes/tools.d.ts.map +1 -1
  383. package/dist/react/types/store-augmentation.d.ts +10 -11
  384. package/dist/react/types/store-augmentation.d.ts.map +1 -1
  385. package/dist/react/utils/getMessageQuote.d.ts +6 -8
  386. package/dist/react/utils/getMessageQuote.d.ts.map +1 -1
  387. package/dist/react/utils/groupParts.d.ts +35 -37
  388. package/dist/react/utils/groupParts.d.ts.map +1 -1
  389. package/dist/react/utils/useJSONEqual.d.ts +3 -6
  390. package/dist/react/utils/useJSONEqual.d.ts.map +1 -1
  391. package/dist/react/utils/useJSONSchemaDependency.d.ts +3 -6
  392. package/dist/react/utils/useJSONSchemaDependency.d.ts.map +1 -1
  393. package/dist/runtime/api/assistant-runtime.d.ts +28 -31
  394. package/dist/runtime/api/assistant-runtime.d.ts.map +1 -1
  395. package/dist/runtime/api/attachment-runtime.d.ts +51 -49
  396. package/dist/runtime/api/attachment-runtime.d.ts.map +1 -1
  397. package/dist/runtime/api/attachment-runtime.js.map +1 -1
  398. package/dist/runtime/api/bindings.d.ts +35 -35
  399. package/dist/runtime/api/bindings.d.ts.map +1 -1
  400. package/dist/runtime/api/composer-runtime.d.ts +215 -201
  401. package/dist/runtime/api/composer-runtime.d.ts.map +1 -1
  402. package/dist/runtime/api/composer-runtime.js +4 -0
  403. package/dist/runtime/api/composer-runtime.js.map +1 -1
  404. package/dist/runtime/api/message-part-runtime.d.ts +31 -30
  405. package/dist/runtime/api/message-part-runtime.d.ts.map +1 -1
  406. package/dist/runtime/api/message-part-runtime.js +25 -2
  407. package/dist/runtime/api/message-part-runtime.js.map +1 -1
  408. package/dist/runtime/api/message-runtime.d.ts +87 -82
  409. package/dist/runtime/api/message-runtime.d.ts.map +1 -1
  410. package/dist/runtime/api/message-runtime.js +4 -3
  411. package/dist/runtime/api/message-runtime.js.map +1 -1
  412. package/dist/runtime/api/paths.d.ts +54 -57
  413. package/dist/runtime/api/paths.d.ts.map +1 -1
  414. package/dist/runtime/api/thread-list-item-runtime.d.ts +70 -72
  415. package/dist/runtime/api/thread-list-item-runtime.d.ts.map +1 -1
  416. package/dist/runtime/api/thread-list-item-runtime.js.map +1 -1
  417. package/dist/runtime/api/thread-list-runtime.d.ts +77 -81
  418. package/dist/runtime/api/thread-list-runtime.d.ts.map +1 -1
  419. package/dist/runtime/api/thread-list-runtime.js.map +1 -1
  420. package/dist/runtime/api/thread-runtime.d.ts +306 -308
  421. package/dist/runtime/api/thread-runtime.d.ts.map +1 -1
  422. package/dist/runtime/api/thread-runtime.js +2 -1
  423. package/dist/runtime/api/thread-runtime.js.map +1 -1
  424. package/dist/runtime/base/base-assistant-runtime-core.d.ts +9 -12
  425. package/dist/runtime/base/base-assistant-runtime-core.d.ts.map +1 -1
  426. package/dist/runtime/base/base-composer-runtime-core.d.ts +150 -101
  427. package/dist/runtime/base/base-composer-runtime-core.d.ts.map +1 -1
  428. package/dist/runtime/base/base-composer-runtime-core.js +400 -122
  429. package/dist/runtime/base/base-composer-runtime-core.js.map +1 -1
  430. package/dist/runtime/base/base-thread-runtime-core.d.ts +121 -104
  431. package/dist/runtime/base/base-thread-runtime-core.d.ts.map +1 -1
  432. package/dist/runtime/base/base-thread-runtime-core.js +174 -62
  433. package/dist/runtime/base/base-thread-runtime-core.js.map +1 -1
  434. package/dist/runtime/base/default-edit-composer-runtime-core.d.ts +30 -31
  435. package/dist/runtime/base/default-edit-composer-runtime-core.d.ts.map +1 -1
  436. package/dist/runtime/base/default-edit-composer-runtime-core.js +21 -2
  437. package/dist/runtime/base/default-edit-composer-runtime-core.js.map +1 -1
  438. package/dist/runtime/base/default-thread-composer-runtime-core.d.ts +28 -31
  439. package/dist/runtime/base/default-thread-composer-runtime-core.d.ts.map +1 -1
  440. package/dist/runtime/base/default-thread-composer-runtime-core.js +23 -2
  441. package/dist/runtime/base/default-thread-composer-runtime-core.js.map +1 -1
  442. package/dist/runtime/branch/external-thread-branch-adapter.d.ts +15 -18
  443. package/dist/runtime/branch/external-thread-branch-adapter.d.ts.map +1 -1
  444. package/dist/runtime/interfaces/assistant-runtime-core.d.ts +8 -11
  445. package/dist/runtime/interfaces/assistant-runtime-core.d.ts.map +1 -1
  446. package/dist/runtime/interfaces/composer-runtime-core.d.ts +98 -83
  447. package/dist/runtime/interfaces/composer-runtime-core.d.ts.map +1 -1
  448. package/dist/runtime/interfaces/thread-list-runtime-core.d.ts +67 -70
  449. package/dist/runtime/interfaces/thread-list-runtime-core.d.ts.map +1 -1
  450. package/dist/runtime/interfaces/thread-runtime-core.d.ts +225 -211
  451. package/dist/runtime/interfaces/thread-runtime-core.d.ts.map +1 -1
  452. package/dist/runtime/internal.d.ts +25 -20
  453. package/dist/runtime/internal.d.ts.map +1 -0
  454. package/dist/runtime/queue/external-thread-queue-adapter.d.ts +37 -40
  455. package/dist/runtime/queue/external-thread-queue-adapter.d.ts.map +1 -1
  456. package/dist/runtime/queue/message-queue.d.ts +32 -33
  457. package/dist/runtime/queue/message-queue.d.ts.map +1 -1
  458. package/dist/runtime/queue/message-queue.js +10 -2
  459. package/dist/runtime/queue/message-queue.js.map +1 -1
  460. package/dist/runtime/queue/queue-item.d.ts +7 -10
  461. package/dist/runtime/queue/queue-item.d.ts.map +1 -1
  462. package/dist/runtime/utils/abortable-thread-load.d.ts +9 -11
  463. package/dist/runtime/utils/abortable-thread-load.d.ts.map +1 -1
  464. package/dist/runtime/utils/attachment-add-operations.d.ts +16 -15
  465. package/dist/runtime/utils/attachment-add-operations.d.ts.map +1 -1
  466. package/dist/runtime/utils/attachment-add-operations.js +24 -2
  467. package/dist/runtime/utils/attachment-add-operations.js.map +1 -1
  468. package/dist/runtime/utils/attachment-send-operations.d.ts +12 -0
  469. package/dist/runtime/utils/attachment-send-operations.d.ts.map +1 -0
  470. package/dist/runtime/utils/attachment-send-operations.js +34 -0
  471. package/dist/runtime/utils/attachment-send-operations.js.map +1 -0
  472. package/dist/runtime/utils/auto-status.d.ts +11 -13
  473. package/dist/runtime/utils/auto-status.d.ts.map +1 -1
  474. package/dist/runtime/utils/auto-status.js +3 -5
  475. package/dist/runtime/utils/auto-status.js.map +1 -1
  476. package/dist/runtime/utils/chat-model-adapter.d.ts +31 -33
  477. package/dist/runtime/utils/chat-model-adapter.d.ts.map +1 -1
  478. package/dist/runtime/utils/external-message-conversion.d.ts +47 -48
  479. package/dist/runtime/utils/external-message-conversion.d.ts.map +1 -1
  480. package/dist/runtime/utils/external-message-conversion.js +6 -5
  481. package/dist/runtime/utils/external-message-conversion.js.map +1 -1
  482. package/dist/runtime/utils/external-store-message.d.ts +6 -9
  483. package/dist/runtime/utils/external-store-message.d.ts.map +1 -1
  484. package/dist/runtime/utils/message-repository-session.d.ts +24 -27
  485. package/dist/runtime/utils/message-repository-session.d.ts.map +1 -1
  486. package/dist/runtime/utils/message-repository.d.ts +52 -54
  487. package/dist/runtime/utils/message-repository.d.ts.map +1 -1
  488. package/dist/runtime/utils/message-repository.js +8 -7
  489. package/dist/runtime/utils/message-repository.js.map +1 -1
  490. package/dist/runtime/utils/pending-tool-calls.d.ts +12 -14
  491. package/dist/runtime/utils/pending-tool-calls.d.ts.map +1 -1
  492. package/dist/runtime/utils/resolveToolApprovalResponse.d.ts +7 -10
  493. package/dist/runtime/utils/resolveToolApprovalResponse.d.ts.map +1 -1
  494. package/dist/runtime/utils/runtime-extras-brand.d.ts +6 -9
  495. package/dist/runtime/utils/runtime-extras-brand.d.ts.map +1 -1
  496. package/dist/runtime/utils/stored-message-parts.d.ts +21 -0
  497. package/dist/runtime/utils/stored-message-parts.d.ts.map +1 -0
  498. package/dist/runtime/utils/stored-message-parts.js +103 -0
  499. package/dist/runtime/utils/stored-message-parts.js.map +1 -0
  500. package/dist/runtime/utils/streaming-timing.d.ts +23 -26
  501. package/dist/runtime/utils/streaming-timing.d.ts.map +1 -1
  502. package/dist/runtime/utils/thread-message-like.d.ts +38 -34
  503. package/dist/runtime/utils/thread-message-like.d.ts.map +1 -1
  504. package/dist/runtime/utils/thread-message-like.js +16 -6
  505. package/dist/runtime/utils/thread-message-like.js.map +1 -1
  506. package/dist/runtime/utils/thread-runtime-lifecycle.d.ts +5 -7
  507. package/dist/runtime/utils/thread-runtime-lifecycle.d.ts.map +1 -1
  508. package/dist/runtime/utils/thread-runtime-lifecycle.js +31 -4
  509. package/dist/runtime/utils/thread-runtime-lifecycle.js.map +1 -1
  510. package/dist/runtime/utils/tool-call-tree.d.ts +10 -13
  511. package/dist/runtime/utils/tool-call-tree.d.ts.map +1 -1
  512. package/dist/runtime/utils/tool-interactions.d.ts +10 -0
  513. package/dist/runtime/utils/tool-interactions.d.ts.map +1 -0
  514. package/dist/runtime/utils/tool-interactions.js +92 -0
  515. package/dist/runtime/utils/tool-interactions.js.map +1 -0
  516. package/dist/runtimes/assistant-transport/utils.d.ts +1 -4
  517. package/dist/runtimes/assistant-transport/utils.d.ts.map +1 -1
  518. package/dist/runtimes/external-store/external-store-adapter.d.ts +220 -200
  519. package/dist/runtimes/external-store/external-store-adapter.d.ts.map +1 -1
  520. package/dist/runtimes/external-store/external-store-runtime-core.d.ts +6 -8
  521. package/dist/runtimes/external-store/external-store-runtime-core.d.ts.map +1 -1
  522. package/dist/runtimes/external-store/external-store-runtime-core.js +4 -1
  523. package/dist/runtimes/external-store/external-store-runtime-core.js.map +1 -1
  524. package/dist/runtimes/external-store/external-store-shared-options.d.ts +3 -6
  525. package/dist/runtimes/external-store/external-store-shared-options.d.ts.map +1 -1
  526. package/dist/runtimes/external-store/external-store-thread-list-runtime-core.d.ts +40 -43
  527. package/dist/runtimes/external-store/external-store-thread-list-runtime-core.d.ts.map +1 -1
  528. package/dist/runtimes/external-store/external-store-thread-list-runtime-core.js +2 -2
  529. package/dist/runtimes/external-store/external-store-thread-list-runtime-core.js.map +1 -1
  530. package/dist/runtimes/external-store/external-store-thread-runtime-core.d.ts +119 -125
  531. package/dist/runtimes/external-store/external-store-thread-runtime-core.d.ts.map +1 -1
  532. package/dist/runtimes/external-store/external-store-thread-runtime-core.js +71 -18
  533. package/dist/runtimes/external-store/external-store-thread-runtime-core.js.map +1 -1
  534. package/dist/runtimes/external-store/thread-message-converter.d.ts +5 -8
  535. package/dist/runtimes/external-store/thread-message-converter.d.ts.map +1 -1
  536. package/dist/runtimes/inert/InertThreadRuntimeCore.d.ts +96 -98
  537. package/dist/runtimes/inert/InertThreadRuntimeCore.d.ts.map +1 -1
  538. package/dist/runtimes/inert/InertThreadRuntimeCore.js +3 -0
  539. package/dist/runtimes/inert/InertThreadRuntimeCore.js.map +1 -1
  540. package/dist/runtimes/internal.d.ts +20 -16
  541. package/dist/runtimes/internal.d.ts.map +1 -0
  542. package/dist/runtimes/local/local-runtime-core.d.ts +7 -10
  543. package/dist/runtimes/local/local-runtime-core.d.ts.map +1 -1
  544. package/dist/runtimes/local/local-runtime-options.d.ts +41 -44
  545. package/dist/runtimes/local/local-runtime-options.d.ts.map +1 -1
  546. package/dist/runtimes/local/local-thread-list-runtime-core.d.ts +42 -45
  547. package/dist/runtimes/local/local-thread-list-runtime-core.d.ts.map +1 -1
  548. package/dist/runtimes/local/local-thread-runtime-core.d.ts +94 -93
  549. package/dist/runtimes/local/local-thread-runtime-core.d.ts.map +1 -1
  550. package/dist/runtimes/local/local-thread-runtime-core.js +220 -29
  551. package/dist/runtimes/local/local-thread-runtime-core.js.map +1 -1
  552. package/dist/runtimes/local/should-continue.d.ts +2 -5
  553. package/dist/runtimes/local/should-continue.d.ts.map +1 -1
  554. package/dist/runtimes/readonly/ReadonlyThreadRuntimeCore.d.ts +77 -55
  555. package/dist/runtimes/readonly/ReadonlyThreadRuntimeCore.d.ts.map +1 -1
  556. package/dist/runtimes/readonly/ReadonlyThreadRuntimeCore.js +28 -1
  557. package/dist/runtimes/readonly/ReadonlyThreadRuntimeCore.js.map +1 -1
  558. package/dist/runtimes/remote-thread-list/adapter/in-memory.d.ts +12 -15
  559. package/dist/runtimes/remote-thread-list/adapter/in-memory.d.ts.map +1 -1
  560. package/dist/runtimes/remote-thread-list/adapter-changed.d.ts +3 -6
  561. package/dist/runtimes/remote-thread-list/adapter-changed.d.ts.map +1 -1
  562. package/dist/runtimes/remote-thread-list/empty-thread-core.d.ts +2 -5
  563. package/dist/runtimes/remote-thread-list/empty-thread-core.d.ts.map +1 -1
  564. package/dist/runtimes/remote-thread-list/optimistic-state.d.ts +34 -31
  565. package/dist/runtimes/remote-thread-list/optimistic-state.d.ts.map +1 -1
  566. package/dist/runtimes/remote-thread-list/optimistic-state.js +8 -3
  567. package/dist/runtimes/remote-thread-list/optimistic-state.js.map +1 -1
  568. package/dist/runtimes/remote-thread-list/remote-thread-state.d.ts +60 -63
  569. package/dist/runtimes/remote-thread-list/remote-thread-state.d.ts.map +1 -1
  570. package/dist/runtimes/remote-thread-list/remote-thread-state.js +1 -1
  571. package/dist/runtimes/remote-thread-list/title-generation.d.ts +31 -33
  572. package/dist/runtimes/remote-thread-list/title-generation.d.ts.map +1 -1
  573. package/dist/runtimes/remote-thread-list/title.d.ts +5 -8
  574. package/dist/runtimes/remote-thread-list/title.d.ts.map +1 -1
  575. package/dist/runtimes/remote-thread-list/types.d.ts +119 -121
  576. package/dist/runtimes/remote-thread-list/types.d.ts.map +1 -1
  577. package/dist/runtimes/tool-invocations/ToolInvocationTracker.d.ts +147 -149
  578. package/dist/runtimes/tool-invocations/ToolInvocationTracker.d.ts.map +1 -1
  579. package/dist/runtimes/tool-invocations/ToolInvocationTracker.js +22 -7
  580. package/dist/runtimes/tool-invocations/ToolInvocationTracker.js.map +1 -1
  581. package/dist/store/clients/chain-of-thought-client.d.ts +8 -11
  582. package/dist/store/clients/chain-of-thought-client.d.ts.map +1 -1
  583. package/dist/store/clients/external-thread.d.ts +56 -58
  584. package/dist/store/clients/external-thread.d.ts.map +1 -1
  585. package/dist/store/clients/external-thread.js +1270 -741
  586. package/dist/store/clients/external-thread.js.map +1 -1
  587. package/dist/store/clients/model-context-client.d.ts +2 -5
  588. package/dist/store/clients/model-context-client.d.ts.map +1 -1
  589. package/dist/store/clients/no-op-composer-client.d.ts +3 -6
  590. package/dist/store/clients/no-op-composer-client.d.ts.map +1 -1
  591. package/dist/store/clients/no-op-composer-client.js +3 -1
  592. package/dist/store/clients/no-op-composer-client.js.map +1 -1
  593. package/dist/store/clients/runtime-adapter.d.ts +2 -5
  594. package/dist/store/clients/runtime-adapter.d.ts.map +1 -1
  595. package/dist/store/clients/single-thread-list.d.ts +4 -6
  596. package/dist/store/clients/single-thread-list.d.ts.map +1 -1
  597. package/dist/store/clients/submission-message.d.ts +8 -0
  598. package/dist/store/clients/submission-message.d.ts.map +1 -0
  599. package/dist/store/clients/submission-message.js +22 -0
  600. package/dist/store/clients/submission-message.js.map +1 -0
  601. package/dist/store/clients/suggestions.d.ts +8 -11
  602. package/dist/store/clients/suggestions.d.ts.map +1 -1
  603. package/dist/store/clients/thread-message-client.d.ts +12 -12
  604. package/dist/store/clients/thread-message-client.d.ts.map +1 -1
  605. package/dist/store/clients/thread-message-client.js +81 -82
  606. package/dist/store/clients/thread-message-client.js.map +1 -1
  607. package/dist/store/clients/thread-selection-events.d.ts +1 -4
  608. package/dist/store/clients/thread-selection-events.d.ts.map +1 -1
  609. package/dist/store/clients/thread-tasks.d.ts +7 -10
  610. package/dist/store/clients/thread-tasks.d.ts.map +1 -1
  611. package/dist/store/env.d.ts +1 -4
  612. package/dist/store/env.d.ts.map +1 -1
  613. package/dist/store/index.d.ts +33 -36
  614. package/dist/store/index.d.ts.map +1 -0
  615. package/dist/store/index.js +5 -5
  616. package/dist/store/internal.d.ts +12 -12
  617. package/dist/store/internal.d.ts.map +1 -0
  618. package/dist/store/internal.js +2 -2
  619. package/dist/store/primitive-predicates.d.ts +14 -16
  620. package/dist/store/primitive-predicates.d.ts.map +1 -1
  621. package/dist/store/primitive-predicates.js +10 -5
  622. package/dist/store/primitive-predicates.js.map +1 -1
  623. package/dist/store/runtime-clients/attachment-runtime-client.d.ts +4 -7
  624. package/dist/store/runtime-clients/attachment-runtime-client.d.ts.map +1 -1
  625. package/dist/store/runtime-clients/composer-runtime-client.d.ts +11 -14
  626. package/dist/store/runtime-clients/composer-runtime-client.d.ts.map +1 -1
  627. package/dist/store/runtime-clients/composer-runtime-client.js +65 -62
  628. package/dist/store/runtime-clients/composer-runtime-client.js.map +1 -1
  629. package/dist/store/runtime-clients/handle-runtime-action.d.ts +1 -4
  630. package/dist/store/runtime-clients/handle-runtime-action.d.ts.map +1 -1
  631. package/dist/store/runtime-clients/handle-thread-list-action.d.ts +1 -4
  632. package/dist/store/runtime-clients/handle-thread-list-action.d.ts.map +1 -1
  633. package/dist/store/runtime-clients/liveRef.d.ts +2 -5
  634. package/dist/store/runtime-clients/liveRef.d.ts.map +1 -1
  635. package/dist/store/runtime-clients/message-part-runtime-client.d.ts +4 -7
  636. package/dist/store/runtime-clients/message-part-runtime-client.d.ts.map +1 -1
  637. package/dist/store/runtime-clients/message-part-runtime-client.js +26 -16
  638. package/dist/store/runtime-clients/message-part-runtime-client.js.map +1 -1
  639. package/dist/store/runtime-clients/message-runtime-client.d.ts +10 -11
  640. package/dist/store/runtime-clients/message-runtime-client.d.ts.map +1 -1
  641. package/dist/store/runtime-clients/message-runtime-client.js +121 -113
  642. package/dist/store/runtime-clients/message-runtime-client.js.map +1 -1
  643. package/dist/store/runtime-clients/thread-list-item-runtime-client.d.ts +5 -8
  644. package/dist/store/runtime-clients/thread-list-item-runtime-client.d.ts.map +1 -1
  645. package/dist/store/runtime-clients/thread-list-runtime-client.d.ts +6 -9
  646. package/dist/store/runtime-clients/thread-list-runtime-client.d.ts.map +1 -1
  647. package/dist/store/runtime-clients/thread-runtime-client.d.ts +4 -7
  648. package/dist/store/runtime-clients/thread-runtime-client.d.ts.map +1 -1
  649. package/dist/store/runtime-clients/thread-runtime-client.js +221 -158
  650. package/dist/store/runtime-clients/thread-runtime-client.js.map +1 -1
  651. package/dist/store/runtime-clients/useSubscribable.d.ts +3 -6
  652. package/dist/store/runtime-clients/useSubscribable.d.ts.map +1 -1
  653. package/dist/store/scope-registration.d.ts +28 -29
  654. package/dist/store/scope-registration.d.ts.map +1 -1
  655. package/dist/store/scopes/attachment.d.ts +19 -22
  656. package/dist/store/scopes/attachment.d.ts.map +1 -1
  657. package/dist/store/scopes/chain-of-thought.d.ts +33 -35
  658. package/dist/store/scopes/chain-of-thought.d.ts.map +1 -1
  659. package/dist/store/scopes/composer.d.ts +147 -135
  660. package/dist/store/scopes/composer.d.ts.map +1 -1
  661. package/dist/store/scopes/message.d.ts +119 -112
  662. package/dist/store/scopes/message.d.ts.map +1 -1
  663. package/dist/store/scopes/model-context.d.ts +10 -13
  664. package/dist/store/scopes/model-context.d.ts.map +1 -1
  665. package/dist/store/scopes/part.d.ts +53 -50
  666. package/dist/store/scopes/part.d.ts.map +1 -1
  667. package/dist/store/scopes/queue-item.d.ts +21 -23
  668. package/dist/store/scopes/queue-item.d.ts.map +1 -1
  669. package/dist/store/scopes/suggestion.d.ts +14 -17
  670. package/dist/store/scopes/suggestion.d.ts.map +1 -1
  671. package/dist/store/scopes/suggestions.d.ts +18 -21
  672. package/dist/store/scopes/suggestions.d.ts.map +1 -1
  673. package/dist/store/scopes/task.d.ts +27 -30
  674. package/dist/store/scopes/task.d.ts.map +1 -1
  675. package/dist/store/scopes/thread-list-item.d.ts +68 -71
  676. package/dist/store/scopes/thread-list-item.d.ts.map +1 -1
  677. package/dist/store/scopes/thread.d.ts +197 -200
  678. package/dist/store/scopes/thread.d.ts.map +1 -1
  679. package/dist/store/scopes/threads.d.ts +49 -52
  680. package/dist/store/scopes/threads.d.ts.map +1 -1
  681. package/dist/subscribable/subscribable.d.ts +73 -69
  682. package/dist/subscribable/subscribable.d.ts.map +1 -1
  683. package/dist/subscribable/subscribable.js +35 -7
  684. package/dist/subscribable/subscribable.js.map +1 -1
  685. package/dist/types/attachment.d.ts +35 -37
  686. package/dist/types/attachment.d.ts.map +1 -1
  687. package/dist/types/augmentations.d.ts +7 -8
  688. package/dist/types/augmentations.d.ts.map +1 -1
  689. package/dist/types/directive.d.ts +13 -16
  690. package/dist/types/directive.d.ts.map +1 -1
  691. package/dist/types/error.d.ts +15 -17
  692. package/dist/types/error.d.ts.map +1 -1
  693. package/dist/types/index.d.ts +7 -7
  694. package/dist/types/index.d.ts.map +1 -0
  695. package/dist/types/message.d.ts +358 -318
  696. package/dist/types/message.d.ts.map +1 -1
  697. package/dist/types/message.js.map +1 -1
  698. package/dist/types/quote.d.ts +3 -6
  699. package/dist/types/quote.d.ts.map +1 -1
  700. package/dist/types/trigger.d.ts +10 -13
  701. package/dist/types/trigger.d.ts.map +1 -1
  702. package/dist/types/unsubscribe.d.ts +1 -4
  703. package/dist/types/unsubscribe.d.ts.map +1 -1
  704. package/dist/utils/abortable-iterable.d.ts +2 -5
  705. package/dist/utils/abortable-iterable.d.ts.map +1 -1
  706. package/dist/utils/composite-context-provider.d.ts +9 -13
  707. package/dist/utils/composite-context-provider.d.ts.map +1 -1
  708. package/dist/utils/data-url.d.ts +16 -19
  709. package/dist/utils/data-url.d.ts.map +1 -1
  710. package/dist/utils/getGroupStatus.d.ts +19 -21
  711. package/dist/utils/getGroupStatus.d.ts.map +1 -1
  712. package/dist/utils/id.d.ts +3 -6
  713. package/dist/utils/id.d.ts.map +1 -1
  714. package/dist/utils/image-media-type.d.ts +1 -4
  715. package/dist/utils/image-media-type.d.ts.map +1 -1
  716. package/dist/utils/invoke-user-callback.d.ts +1 -4
  717. package/dist/utils/invoke-user-callback.d.ts.map +1 -1
  718. package/dist/utils/json/is-json-equal.d.ts +1 -4
  719. package/dist/utils/json/is-json-equal.d.ts.map +1 -1
  720. package/dist/utils/json/is-json.d.ts +5 -8
  721. package/dist/utils/json/is-json.d.ts.map +1 -1
  722. package/dist/utils/json/stable-stringify-tool-args.d.ts +3 -6
  723. package/dist/utils/json/stable-stringify-tool-args.d.ts.map +1 -1
  724. package/dist/utils/normalizePartStatus.d.ts +6 -8
  725. package/dist/utils/normalizePartStatus.d.ts.map +1 -1
  726. package/dist/utils/normalizePartStatus.js +3 -2
  727. package/dist/utils/normalizePartStatus.js.map +1 -1
  728. package/dist/utils/notify-event-listeners.d.ts +2 -4
  729. package/dist/utils/notify-event-listeners.d.ts.map +1 -1
  730. package/dist/utils/record.d.ts +1 -4
  731. package/dist/utils/record.d.ts.map +1 -1
  732. package/dist/utils/silent-runtime-action.d.ts +2 -5
  733. package/dist/utils/silent-runtime-action.d.ts.map +1 -1
  734. package/dist/utils/text.d.ts +2 -5
  735. package/dist/utils/text.d.ts.map +1 -1
  736. package/dist/utils/wire-media.d.ts +3 -6
  737. package/dist/utils/wire-media.d.ts.map +1 -1
  738. package/package.json +15 -13
  739. package/src/adapters/attachment.test.ts +98 -1
  740. package/src/adapters/attachment.ts +77 -20
  741. package/src/adapters/feedback.ts +1 -0
  742. package/src/adapters/speech.test.ts +94 -0
  743. package/src/adapters/speech.ts +16 -2
  744. package/src/adapters/thread-history.ts +16 -5
  745. package/src/adapters/voice.test.ts +169 -0
  746. package/src/adapters/voice.ts +25 -4
  747. package/src/index.ts +14 -2
  748. package/src/internal.ts +7 -0
  749. package/src/model-context/frame/host.test.ts +51 -1
  750. package/src/model-context/frame/host.ts +3 -1
  751. package/src/model-context/frame/provider.test.ts +106 -20
  752. package/src/model-context/frame/provider.ts +8 -1
  753. package/src/model-context/frame/validate.ts +57 -0
  754. package/src/model-context/interactable-composer-metadata.test.ts +82 -0
  755. package/src/model-context/interactable-composer-metadata.ts +45 -2
  756. package/src/react/RuntimeAdapter.test.ts +4 -1
  757. package/src/react/adapters/LocalStorageThreadListAdapter.test.ts +711 -0
  758. package/src/react/adapters/LocalStorageThreadListAdapter.tsx +125 -109
  759. package/src/react/client/Interactables.test.ts +865 -8
  760. package/src/react/client/Interactables.ts +325 -45
  761. package/src/react/client/RemoteThreadList.concurrent.test.tsx +9 -3
  762. package/src/react/client/RemoteThreadList.initialize-failure.test.ts +124 -0
  763. package/src/react/client/RemoteThreadList.test.ts +5 -6
  764. package/src/react/client/RemoteThreadList.ts +6 -0
  765. package/src/react/client/Tools.ts +2 -3
  766. package/src/react/client/interactable-model-context.test.ts +56 -13
  767. package/src/react/client/interactable-model-context.ts +48 -23
  768. package/src/react/index.ts +2 -2
  769. package/src/react/interactables-legacy/Interactables.test.ts +221 -4
  770. package/src/react/interactables-legacy/Interactables.ts +25 -14
  771. package/src/react/interactables-legacy/interactable-model-context.ts +26 -24
  772. package/src/react/interactables-legacy/useAssistantInteractable.test.tsx +40 -22
  773. package/src/react/interactables-shared/useInteractablePersistenceQueue.test.tsx +22 -2
  774. package/src/react/interactables-shared/useInteractablePersistenceQueue.ts +63 -11
  775. package/src/react/model-context/useInteractable.test.tsx +56 -29
  776. package/src/react/primitive-hooks/useActionBarCopy.test.ts +5 -5
  777. package/src/react/primitive-hooks/useSuggestionTrigger.test.ts +33 -0
  778. package/src/react/primitive-hooks/useSuggestionTrigger.ts +7 -4
  779. package/src/react/primitives/generativeUI/GenerativeUI.test.tsx +170 -0
  780. package/src/react/primitives/generativeUI/GenerativeUI.tsx +43 -28
  781. package/src/react/primitives/message/MessageAttachments.test.tsx +2 -6
  782. package/src/react/primitives/message/MessageAttachments.tsx +14 -8
  783. package/src/react/primitives/message/MessageGroupedParts.test.tsx +155 -8
  784. package/src/react/primitives/message/MessageGroupedParts.tsx +19 -6
  785. package/src/react/primitives/message/MessageParts.test.tsx +84 -0
  786. package/src/react/primitives/message/MessageParts.tool-interaction.test.tsx +69 -0
  787. package/src/react/primitives/message/MessageParts.tsx +29 -8
  788. package/src/react/primitives/thread/ThreadMessages.test.tsx +25 -7
  789. package/src/react/primitives/thread/ThreadSuggestions.test.tsx +97 -0
  790. package/src/react/primitives/thread/ThreadSuggestions.tsx +29 -6
  791. package/src/react/providers/ReadonlyThreadProvider.tsx +2 -2
  792. package/src/react/providers/TextMessagePartProvider.tsx +3 -0
  793. package/src/react/runtimes/RemoteThreadListHookInstanceManager.layout.test.tsx +62 -0
  794. package/src/react/runtimes/RemoteThreadListHookInstanceManager.retry.test.tsx +2 -2
  795. package/src/react/runtimes/RemoteThreadListHookInstanceManager.running.test.tsx +93 -0
  796. package/src/react/runtimes/RemoteThreadListHookInstanceManager.test.tsx +181 -21
  797. package/src/react/runtimes/RemoteThreadListHookInstanceManager.title.test.tsx +62 -17
  798. package/src/react/runtimes/RemoteThreadListHookInstanceManager.tsx +112 -77
  799. package/src/react/runtimes/RemoteThreadListThreadListRuntimeCore.tsx +19 -3
  800. package/src/react/runtimes/RemoteThreadResource.ts +5 -2
  801. package/src/react/runtimes/assistant-transport/replayBoundaryStream.test.ts +3 -1
  802. package/src/react/runtimes/assistant-transport/replayBoundaryStream.ts +10 -2
  803. package/src/react/runtimes/assistant-transport/runManager.ts +3 -0
  804. package/src/react/runtimes/assistant-transport/transport-parentid.test.tsx +57 -0
  805. package/src/react/runtimes/assistant-transport/transport-scheduling.test.ts +73 -46
  806. package/src/react/runtimes/assistant-transport/transport-thread-id.test.tsx +571 -0
  807. package/src/react/runtimes/assistant-transport/types.ts +9 -1
  808. package/src/react/runtimes/assistant-transport/useAssistantTransport.spec.md +10 -0
  809. package/src/react/runtimes/assistant-transport/useAssistantTransportRuntime.test.tsx +108 -1
  810. package/src/react/runtimes/assistant-transport/useAssistantTransportRuntime.ts +33 -9
  811. package/src/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.copy.integration.test.tsx +289 -0
  812. package/src/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.copy.test.tsx +471 -0
  813. package/src/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.engagement.test.tsx +330 -0
  814. package/src/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.test.ts +78 -2
  815. package/src/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.test.tsx +463 -2
  816. package/src/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.ts +595 -227
  817. package/src/react/runtimes/cloud/CloudFileAttachmentAdapter.test.ts +33 -4
  818. package/src/react/runtimes/cloud/CloudFileAttachmentAdapter.ts +7 -3
  819. package/src/react/runtimes/cloud/auiV0.ts +275 -6
  820. package/src/react/runtimes/cloud/auiV0DecodeSafely.test.ts +873 -0
  821. package/src/react/runtimes/createMessageConverter.ts +9 -3
  822. package/src/react/runtimes/external-message-converter.test.ts +7 -3
  823. package/src/react/runtimes/external-store-history-copy.ts +223 -0
  824. package/src/react/runtimes/remote-thread-hook-on-tap.test.ts +2 -1
  825. package/src/react/runtimes/useExternalStoreRuntime.history-copy.test.tsx +483 -0
  826. package/src/react/runtimes/useExternalStoreRuntime.lifecycle.test.tsx +84 -3
  827. package/src/react/runtimes/useExternalStoreRuntime.suggestions.test.tsx +6 -2
  828. package/src/react/runtimes/useExternalStoreRuntime.ts +25 -5
  829. package/src/react/runtimes/useLocalRuntime.test.tsx +145 -1
  830. package/src/react/runtimes/useLocalRuntime.ts +8 -5
  831. package/src/react/runtimes/useRemoteThreadListRuntime.concurrent.test.tsx +84 -4
  832. package/src/react/runtimes/useRemoteThreadListRuntime.ts +5 -1
  833. package/src/react/types/MessagePartComponentTypes.ts +10 -0
  834. package/src/react/types/scopes/interactables.ts +3 -0
  835. package/src/runtime/api/attachment-runtime.ts +10 -5
  836. package/src/runtime/api/bindings.ts +6 -1
  837. package/src/runtime/api/composer-runtime.ts +29 -6
  838. package/src/runtime/api/message-part-runtime.test.ts +215 -0
  839. package/src/runtime/api/message-part-runtime.ts +44 -1
  840. package/src/runtime/api/message-runtime.test.ts +112 -2
  841. package/src/runtime/api/message-runtime.ts +25 -7
  842. package/src/runtime/api/thread-list-item-runtime.ts +5 -5
  843. package/src/runtime/api/thread-list-runtime.ts +3 -3
  844. package/src/runtime/api/thread-runtime.test.ts +59 -0
  845. package/src/runtime/api/thread-runtime.ts +21 -11
  846. package/src/runtime/base/base-composer-runtime-core.ts +548 -153
  847. package/src/runtime/base/base-thread-runtime-core.test.ts +1614 -136
  848. package/src/runtime/base/base-thread-runtime-core.ts +236 -46
  849. package/src/runtime/base/default-edit-composer-runtime-core.ts +24 -2
  850. package/src/runtime/base/default-thread-composer-runtime-core.ts +33 -3
  851. package/src/runtime/interfaces/composer-runtime-core.ts +19 -0
  852. package/src/runtime/interfaces/thread-runtime-core.ts +24 -1
  853. package/src/runtime/queue/message-queue.ts +11 -1
  854. package/src/runtime/utils/attachment-add-operations.ts +45 -2
  855. package/src/runtime/utils/attachment-send-operations.ts +54 -0
  856. package/src/runtime/utils/auto-status.test.ts +54 -0
  857. package/src/runtime/utils/auto-status.ts +3 -10
  858. package/src/runtime/utils/external-message-conversion.test.ts +91 -0
  859. package/src/runtime/utils/external-message-conversion.ts +9 -6
  860. package/src/runtime/utils/message-repository.test.ts +69 -1
  861. package/src/runtime/utils/message-repository.ts +14 -7
  862. package/src/runtime/utils/stored-message-parts.ts +216 -0
  863. package/src/runtime/utils/thread-message-like.test.ts +58 -0
  864. package/src/runtime/utils/thread-message-like.ts +79 -48
  865. package/src/runtime/utils/thread-runtime-lifecycle.test.ts +67 -0
  866. package/src/runtime/utils/thread-runtime-lifecycle.ts +42 -8
  867. package/src/runtime/utils/tool-interactions.test.ts +193 -0
  868. package/src/runtime/utils/tool-interactions.ts +147 -0
  869. package/src/runtimes/external-store/external-store-adapter.ts +25 -0
  870. package/src/runtimes/external-store/external-store-runtime-core.ts +10 -2
  871. package/src/runtimes/external-store/external-store-thread-list-runtime-core.ts +2 -2
  872. package/src/runtimes/external-store/external-store-thread-runtime-core.test.ts +49 -0
  873. package/src/runtimes/external-store/external-store-thread-runtime-core.ts +114 -32
  874. package/src/runtimes/inert/InertThreadRuntimeCore.test.ts +127 -56
  875. package/src/runtimes/inert/InertThreadRuntimeCore.ts +10 -1
  876. package/src/runtimes/local/local-thread-runtime-core.edit-cancellation.test.ts +70 -0
  877. package/src/runtimes/local/local-thread-runtime-core.test.ts +1866 -169
  878. package/src/runtimes/local/local-thread-runtime-core.ts +365 -40
  879. package/src/runtimes/readonly/ReadonlyThreadRuntimeCore.ts +53 -1
  880. package/src/runtimes/remote-thread-list/optimistic-state.ts +8 -3
  881. package/src/runtimes/tool-invocations/EDGE_CASES.md +19 -4
  882. package/src/runtimes/tool-invocations/ToolInvocationTracker.test.ts +392 -39
  883. package/src/runtimes/tool-invocations/ToolInvocationTracker.ts +31 -8
  884. package/src/store/clients/external-thread.test.ts +145 -0
  885. package/src/store/clients/external-thread.ts +669 -144
  886. package/src/store/clients/model-context-client.test.ts +8 -8
  887. package/src/store/clients/no-op-composer-client.ts +2 -0
  888. package/src/store/clients/submission-message.ts +27 -0
  889. package/src/store/clients/thread-message-client.test.ts +39 -0
  890. package/src/store/clients/thread-message-client.ts +13 -6
  891. package/src/store/index.ts +2 -2
  892. package/src/store/internal.ts +1 -0
  893. package/src/store/primitive-predicates.test.ts +119 -0
  894. package/src/store/primitive-predicates.ts +19 -4
  895. package/src/store/runtime-clients/composer-runtime-client.ts +4 -3
  896. package/src/store/runtime-clients/message-part-runtime-client.test.ts +42 -0
  897. package/src/store/runtime-clients/message-part-runtime-client.ts +4 -0
  898. package/src/store/runtime-clients/message-runtime-client.ts +5 -0
  899. package/src/store/runtime-clients/thread-runtime-client.test.tsx +243 -0
  900. package/src/store/runtime-clients/thread-runtime-client.ts +46 -9
  901. package/src/store/scopes/composer.ts +22 -4
  902. package/src/store/scopes/message.ts +12 -1
  903. package/src/store/scopes/part.ts +8 -0
  904. package/src/subscribable/subscribable.test.ts +205 -3
  905. package/src/subscribable/subscribable.ts +49 -7
  906. package/src/tests/RemoteThreadListThreadListRuntimeCore-errors.test.ts +95 -1
  907. package/src/tests/attachment-adapters.test.ts +16 -1
  908. package/src/tests/auiV0Encode.test.ts +412 -1
  909. package/src/tests/base-composer-runtime-core-addAttachment.test.ts +6 -6
  910. package/src/tests/base-composer-runtime-core-send.test.ts +722 -29
  911. package/src/tests/base-composer-runtime-core.test.ts +212 -5
  912. package/src/tests/composer-can-cancel.test.ts +35 -6
  913. package/src/tests/composer-can-send.test.ts +120 -1
  914. package/src/tests/composer-submission.test.tsx +796 -0
  915. package/src/tests/default-edit-composer-runtime-core.test.ts +149 -2
  916. package/src/tests/external-store-thread-list-runtime-core.test.ts +111 -0
  917. package/src/tests/external-store-thread-runtime-core-adapter.test.ts +810 -28
  918. package/src/tests/external-store-thread-runtime-core.test.ts +217 -0
  919. package/src/tests/external-thread-attachments.test.tsx +763 -26
  920. package/src/tests/external-thread-feedback.test.tsx +20 -7
  921. package/src/tests/external-thread-isLast.test.tsx +69 -0
  922. package/src/tests/external-thread-parity.test.tsx +1 -1
  923. package/src/tests/get-thread-state-isRunning.test.ts +2 -2
  924. package/src/tests/message-queue.test.ts +45 -10
  925. package/src/tests/remote-thread-list-adapter-switch.test.ts +45 -1
  926. package/src/tests/thread-switch-events.test.tsx +11 -7
  927. package/src/tests/useRemoteThreadListRuntime-controlled.test.tsx +2 -1
  928. package/src/types/message.test.ts +19 -0
  929. package/src/types/message.ts +65 -10
  930. package/src/utils/normalizePartStatus.ts +14 -1
  931. package/dist/tests/remote-thread-list-test-helpers.d.ts +0 -16
  932. package/dist/tests/remote-thread-list-test-helpers.d.ts.map +0 -1
  933. package/dist/tests/remote-thread-list-test-helpers.js +0 -59
  934. package/dist/tests/remote-thread-list-test-helpers.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"Interactables.js","names":["useState","useEffect","useCallback","useRef","useMemo","resource","ClientOutput","attachTransformScopes","useAssistantClientRef","useAssistantScopeEffect","Unstable_InteractablesState","Unstable_InteractableRegistration","Unstable_InteractablePersistedState","Unstable_InteractablePersistenceAdapter","Unstable_InteractablesConfig","toJSONSchema","toPartialJSONSchema","ModelContext","buildInteractableModelContext","PartialJSONSchema","findModelKnownState","interactableToolName","notifySubscribers","notifyStateSubscribers","useInteractablePersistenceQueue","nullProtoRecord","RestorePersistedStateOptions","stash","Map","shouldStash","id","shouldApply","def","ToolCallLikePart","type","toolCallId","toolName","MessageLike","role","content","InternalInteractableRegistration","scope","UpdateToolUIEntry","count","render","NonNullable","unsubscribe","hasInteractableCreateCall","messages","name","some","message","part","p","useInteractablesResource","persistence","state","setState","definitions","clientRef","stateRef","subscribersRef","Set","partialSchemaCacheRef","partialSchemaSourceRef","streamBaselinesRef","targetId","detachedAppStateRef","detachedThreadStateRef","registrationCountsRef","updateToolUIsRef","loadedStateRef","touchedIdsRef","adapterRef","undefined","setStateAndRef","updater","prev","next","current","exportState","result","Object","entries","updatePersistenceStatus","flushIfPending","schedulePersistence","flush","snapshot","restorePersistedState","saved","options","entry","set","changed","importState","applyLoadedState","has","loadFromAdapter","adapter","load","e","console","warn","setPersistenceAdapter","getCurrentThreadId","client","threadListItem","source","getState","threads","mainThreadId","setDefState","add","existing","provider","getModelContext","defs","subscribe","callback","delete","modelContext","register","installUpdateToolUI","toolsAccessor","tools","setToolUI","standalone","values","threadAccessor","thread","threadMessages","process","env","NODE_ENV","get","releaseUpdateToolUI","updateRender","stateSchema","jsonSchema","threadId","detached","loaded","known","description","initialState","remaining","stateById","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 type { ClientOutput } from \"@assistant-ui/store\";\nimport {\n attachTransformScopes,\n useAssistantClientRef,\n useAssistantScopeEffect,\n} from \"@assistant-ui/store/client\";\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/clients/model-context-client\";\nimport {\n buildInteractableModelContext,\n type PartialJSONSchema,\n} from \"./interactable-model-context\";\nimport {\n findModelKnownState,\n interactableToolName,\n} from \"../../model-context/interactable-composer-metadata\";\nimport { notifySubscribers as notifyStateSubscribers } from \"../../subscribable/subscribable\";\nimport { useInteractablePersistenceQueue } from \"../interactables-shared/useInteractablePersistenceQueue\";\nimport { nullProtoRecord } from \"../../utils/record\";\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\ntype UpdateToolUIEntry = {\n count: number;\n render: NonNullable<Unstable_InteractableRegistration[\"updateRender\"]>;\n unsubscribe: (() => void) | 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: nullProtoRecord(),\n persistence: nullProtoRecord(),\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 partialSchemaSourceRef = useRef(\n new Map<string, Unstable_InteractableRegistration[\"stateSchema\"]>(),\n );\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(new Map<string, UpdateToolUIEntry>());\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\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 =\n nullProtoRecord<Unstable_InteractablePersistedState[string]>();\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 updatePersistenceStatus = useCallback(\n (\n updater: (\n prev: Unstable_InteractablesState[\"persistence\"],\n ) => Unstable_InteractablesState[\"persistence\"],\n ) => {\n setStateAndRef((prev) => {\n const persistence = updater(prev.persistence);\n return persistence === prev.persistence\n ? prev\n : { ...prev, persistence };\n });\n },\n [setStateAndRef],\n );\n\n const { flushIfPending, schedulePersistence, flush } =\n useInteractablePersistenceQueue({\n adapterRef,\n snapshot: exportState,\n updatePersistenceStatus,\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 = nullProtoRecord(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 if (adapterRef.current !== adapter) flushIfPending();\n adapterRef.current = adapter;\n if (adapter) void loadFromAdapter(adapter);\n },\n [flushIfPending, 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 setPersistenceAdapter(undefined);\n }\n };\n }, [persistence, setPersistenceAdapter]);\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: nullProtoRecord(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 notifyStateSubscribers(subscribersRef.current);\n }, [state]);\n\n useAssistantScopeEffect(\n \"modelContext\",\n () => clientRef.current!.modelContext().register(provider),\n [provider],\n );\n\n const installUpdateToolUI = useCallback(\n (name: string, entry: UpdateToolUIEntry) => {\n const toolsAccessor = clientRef.current?.tools;\n if (!toolsAccessor || toolsAccessor.source == null) return false;\n entry.unsubscribe = toolsAccessor().setToolUI(\n interactableToolName(name),\n entry.render,\n { standalone: true },\n );\n return true;\n },\n [clientRef],\n );\n\n // register() installs update-tool UIs against the tools instance bound at\n // call time; this re-applies the retained entries when that instance is\n // structurally replaced and installs entries recorded while no tools\n // scope was available. Each re-apply releases the entry's previous\n // install first, so it is an orphaned no-op against a replaced instance\n // and an idempotent replacement against a live one.\n useAssistantScopeEffect(\n \"tools\",\n () => {\n for (const [name, entry] of updateToolUIsRef.current) {\n entry.unsubscribe?.();\n entry.unsubscribe = undefined;\n installUpdateToolUI(name, entry);\n }\n return () => {\n for (const entry of updateToolUIsRef.current.values()) {\n entry.unsubscribe?.();\n entry.unsubscribe = undefined;\n }\n };\n },\n [installUpdateToolUI],\n );\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 existing = updateToolUIsRef.current.get(def.name);\n const entry = existing ?? {\n count: 0,\n render: def.updateRender,\n unsubscribe: undefined,\n };\n entry.count++;\n if (!existing) updateToolUIsRef.current.set(def.name, entry);\n\n if (\n !entry.unsubscribe &&\n !installUpdateToolUI(def.name, entry) &&\n process.env.NODE_ENV !== \"production\"\n ) {\n console.warn(\n `[Interactables] \"${def.name}\" supplied an updateRender, but no ` +\n `tools scope is available yet; it will be installed once one appears.`,\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 entry.unsubscribe = undefined;\n }\n };\n }\n\n // The same id re-registers once per anchor (its create call + each update_*).\n if (partialSchemaSourceRef.current.get(def.id) !== def.stateSchema) {\n partialSchemaSourceRef.current.set(def.id, def.stateSchema);\n partialSchemaCacheRef.current.delete(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: nullProtoRecord(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 partialSchemaSourceRef.current.delete(def.id);\n partialSchemaCacheRef.current.delete(def.id);\n const definitions = nullProtoRecord(prev.definitions);\n const persistence = nullProtoRecord(prev.persistence);\n delete definitions[def.id];\n delete persistence[def.id];\n return { ...prev, definitions, persistence };\n });\n };\n },\n [\n flushIfPending,\n clientRef,\n getCurrentThreadId,\n installUpdateToolUI,\n setStateAndRef,\n ],\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","ClientOutput","attachTransformScopes","useAssistantClientRef","useAssistantScopeEffect","Unstable_InteractablesState","Unstable_InteractableRegistration","Unstable_InteractablePersistedState","Unstable_InteractablePersistenceAdapter","Unstable_InteractablesConfig","toJSONSchema","ModelContext","buildInteractableModelContext","StateJSONSchema","findModelKnownState","interactableToolName","notifySubscribers","notifyStateSubscribers","FLUSH_LOAD_TIMEOUT_MS","PERSISTENCE_DEBOUNCE_MS","useInteractablePersistenceQueue","nullProtoRecord","RestorePersistedStateOptions","stash","Map","shouldStash","id","shouldApply","def","ToolCallLikePart","type","toolCallId","toolName","MessageLike","role","content","InternalInteractableRegistration","scope","UpdateToolUIEntry","count","render","NonNullable","unsubscribe","hasInteractableCreateCall","messages","name","some","message","part","p","useInteractablesResource","persistence","state","setState","definitions","clientRef","clientRefRef","current","stateRef","subscribersRef","Set","schemaCacheRef","schemaSourceRef","streamBaselinesRef","targetId","detachedAppStateRef","detachedThreadStateRef","registrationCountsRef","updateToolUIsRef","loadedStateRef","touchedIdsRef","declarativePersistenceRef","undefined","adapterRef","saveAdapterRef","adapterLoadRef","adapter","promise","Promise","adapterGenerationRef","lastAttachedAdapterRef","adapterPreparationTimerRef","ReturnType","setTimeout","setStateAndRef","updater","prev","next","exportState","result","Object","entries","exportPersistenceState","threadAccessor","thread","threadMessages","source","getState","threadCreated","candidate","names","get","set","add","isThreadScoped","entry","has","assign","updatePersistenceStatus","discardPending","flushIfPending","getDirtyIds","schedulePersistence","flush","flushPersistence","snapshot","retainDirtyWithoutAdapter","restorePersistedState","saved","options","changed","importState","applyLoadedState","loadFromAdapter","load","status","const","e","console","warn","error","updateDirtyLoadStatus","isPending","dirtyIds","size","prepareAdapter","resolve","currentLoad","then","clearTimeout","scheduleAdapterPreparation","resetPersistenceScope","clear","baseline","delete","initialState","keys","setPersistenceAdapter","previous","lastAttached","process","env","NODE_ENV","timer","race","getCurrentThreadId","client","threadListItem","threads","mainThreadId","setDefState","existing","provider","getModelContext","defs","subscribe","callback","modelContext","register","installUpdateToolUI","toolsAccessor","tools","setToolUI","standalone","values","releaseUpdateToolUI","updateRender","stateSchema","jsonSchema","threadId","detachedState","loadedState","known","description","remaining","stateById","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 type { ClientOutput } from \"@assistant-ui/store\";\nimport {\n attachTransformScopes,\n useAssistantClientRef,\n useAssistantScopeEffect,\n} from \"@assistant-ui/store/client\";\nimport type {\n Unstable_InteractablesState,\n Unstable_InteractableRegistration,\n Unstable_InteractablePersistedState,\n Unstable_InteractablePersistenceAdapter,\n Unstable_InteractablesConfig,\n} from \"../types/scopes/interactables\";\nimport { toJSONSchema } from \"assistant-stream\";\nimport { ModelContext } from \"../../store/clients/model-context-client\";\nimport {\n buildInteractableModelContext,\n type StateJSONSchema,\n} from \"./interactable-model-context\";\nimport {\n findModelKnownState,\n interactableToolName,\n} from \"../../model-context/interactable-composer-metadata\";\nimport { notifySubscribers as notifyStateSubscribers } from \"../../subscribable/subscribable\";\nimport {\n FLUSH_LOAD_TIMEOUT_MS,\n PERSISTENCE_DEBOUNCE_MS,\n useInteractablePersistenceQueue,\n} from \"../interactables-shared/useInteractablePersistenceQueue\";\nimport { nullProtoRecord } from \"../../utils/record\";\n\ntype RestorePersistedStateOptions = {\n stash: Map<string, Unstable_InteractablePersistedState[string]>;\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\ntype UpdateToolUIEntry = {\n count: number;\n render: NonNullable<Unstable_InteractableRegistration[\"updateRender\"]>;\n unsubscribe: (() => void) | 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: nullProtoRecord(),\n persistence: nullProtoRecord(),\n }));\n\n const clientRef = useAssistantClientRef();\n const clientRefRef = useRef(clientRef);\n clientRefRef.current = clientRef;\n\n const stateRef = useRef(state);\n\n const subscribersRef = useRef(new Set<() => void>());\n const schemaCacheRef = useRef(new Map<string, StateJSONSchema>());\n const schemaSourceRef = useRef(\n new Map<string, Unstable_InteractableRegistration[\"stateSchema\"]>(),\n );\n const streamBaselinesRef = useRef(\n new Map<string, { targetId: string; state: unknown }>(),\n );\n const detachedAppStateRef = useRef(\n new Map<string, Unstable_InteractablePersistedState[string]>(),\n );\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(new Map<string, UpdateToolUIEntry>());\n // App-scoped state restored via adapter.load(), consumed as components register.\n const loadedStateRef = useRef(\n new Map<string, Unstable_InteractablePersistedState[string]>(),\n );\n // Ids edited locally this session — a local edit always wins over a slow load.\n const touchedIdsRef = useRef(new Set<string>());\n const declarativePersistenceRef = useRef<\n Unstable_InteractablePersistenceAdapter | undefined\n >(undefined);\n\n const adapterRef = useRef<\n Unstable_InteractablePersistenceAdapter | undefined\n >(undefined);\n const saveAdapterRef = useRef<\n Unstable_InteractablePersistenceAdapter | undefined\n >(undefined);\n const adapterLoadRef = useRef<\n | {\n adapter: Unstable_InteractablePersistenceAdapter;\n promise: Promise<boolean>;\n }\n | undefined\n >(undefined);\n const adapterGenerationRef = useRef(0);\n const lastAttachedAdapterRef = useRef<\n Unstable_InteractablePersistenceAdapter | undefined\n >(undefined);\n const adapterPreparationTimerRef = useRef<\n ReturnType<typeof setTimeout> | undefined\n >(undefined);\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 =\n nullProtoRecord<Unstable_InteractablePersistedState[string]>();\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 exportPersistenceState = useCallback(() => {\n const threadAccessor = clientRefRef.current.current?.thread;\n const threadMessages =\n threadAccessor && threadAccessor.source != null\n ? (threadAccessor().getState().messages ?? [])\n : [];\n const threadCreated = new Map<string, Set<string>>();\n for (const message of threadMessages) {\n if (message.role !== \"assistant\") continue;\n for (const part of message.content ?? []) {\n if (!part || typeof part !== \"object\") continue;\n const candidate = part as ToolCallLikePart;\n if (\n candidate.type !== \"tool-call\" ||\n candidate.toolCallId === undefined ||\n candidate.toolName === undefined\n ) {\n continue;\n }\n let names = threadCreated.get(candidate.toolCallId);\n if (!names) {\n names = new Set();\n threadCreated.set(candidate.toolCallId, names);\n }\n names.add(candidate.toolName);\n }\n }\n const isThreadScoped = (\n id: string,\n entry: Unstable_InteractablePersistedState[string],\n ) =>\n stateRef.current.definitions[id]?.scope === \"thread\" ||\n threadCreated.get(id)?.has(entry.name) === true;\n\n const result =\n nullProtoRecord<Unstable_InteractablePersistedState[string]>();\n for (const [id, entry] of loadedStateRef.current) {\n if (!isThreadScoped(id, entry)) {\n result[id] = entry;\n }\n }\n for (const [id, entry] of detachedAppStateRef.current) {\n if (!isThreadScoped(id, entry)) {\n result[id] = entry;\n }\n }\n return Object.assign(result, exportState());\n }, [exportState]);\n\n const updatePersistenceStatus = useCallback(\n (\n updater: (\n prev: Unstable_InteractablesState[\"persistence\"],\n ) => Unstable_InteractablesState[\"persistence\"],\n ) => {\n setStateAndRef((prev) => {\n const persistence = updater(prev.persistence);\n return persistence === prev.persistence\n ? prev\n : { ...prev, persistence };\n });\n },\n [setStateAndRef],\n );\n\n const {\n discardPending,\n flushIfPending,\n getDirtyIds,\n schedulePersistence,\n flush: flushPersistence,\n } = useInteractablePersistenceQueue({\n adapterRef: saveAdapterRef,\n adapterGenerationRef,\n snapshot: exportPersistenceState,\n updatePersistenceStatus,\n retainDirtyWithoutAdapter: true,\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);\n }\n setStateAndRef((prev) => {\n let changed = false;\n const definitions = nullProtoRecord(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 { status: \"loaded\" } as const;\n try {\n const saved = await adapter.load();\n if (adapterRef.current !== adapter) return { status: \"stale\" } as const;\n if (saved) applyLoadedState(saved);\n return { status: \"loaded\" } as const;\n } catch (e) {\n console.warn(\"[Interactables] Persistence load failed.\", e);\n return { status: \"error\", error: e } as const;\n }\n },\n [applyLoadedState],\n );\n\n const updateDirtyLoadStatus = useCallback(\n (status: { isPending: boolean; error: unknown }) => {\n const dirtyIds = getDirtyIds();\n if (dirtyIds.size === 0) return;\n updatePersistenceStatus((prev) => {\n let changed = false;\n const persistence = nullProtoRecord(prev);\n for (const id of dirtyIds) {\n if (stateRef.current.definitions[id] === undefined) continue;\n if (\n prev[id]?.isPending === status.isPending &&\n prev[id]?.error === status.error\n ) {\n continue;\n }\n persistence[id] = status;\n changed = true;\n }\n return changed ? persistence : prev;\n });\n },\n [getDirtyIds, updatePersistenceStatus],\n );\n\n const prepareAdapter = useCallback(\n (adapter: Unstable_InteractablePersistenceAdapter) => {\n if (saveAdapterRef.current === adapter) return Promise.resolve(true);\n\n updateDirtyLoadStatus({ isPending: true, error: undefined });\n const currentLoad = adapterLoadRef.current;\n if (currentLoad?.adapter === adapter) return currentLoad.promise;\n\n let promise!: Promise<boolean>;\n promise = loadFromAdapter(adapter).then((result) => {\n if (adapterLoadRef.current?.promise === promise) {\n adapterLoadRef.current = undefined;\n }\n if (adapterRef.current !== adapter) return false;\n if (result.status === \"error\") {\n updateDirtyLoadStatus({ isPending: false, error: result.error });\n return false;\n }\n if (result.status !== \"loaded\") return false;\n\n if (adapterPreparationTimerRef.current !== undefined) {\n clearTimeout(adapterPreparationTimerRef.current);\n adapterPreparationTimerRef.current = undefined;\n }\n saveAdapterRef.current = adapter;\n flushIfPending();\n return true;\n });\n adapterLoadRef.current = { adapter, promise };\n return promise;\n },\n [flushIfPending, loadFromAdapter, updateDirtyLoadStatus],\n );\n\n const scheduleAdapterPreparation = useCallback(\n (adapter: Unstable_InteractablePersistenceAdapter) => {\n if (adapterPreparationTimerRef.current !== undefined) {\n clearTimeout(adapterPreparationTimerRef.current);\n }\n adapterPreparationTimerRef.current = setTimeout(() => {\n adapterPreparationTimerRef.current = undefined;\n if (\n adapterRef.current === adapter &&\n saveAdapterRef.current !== adapter\n ) {\n void prepareAdapter(adapter);\n }\n }, PERSISTENCE_DEBOUNCE_MS);\n },\n [prepareAdapter],\n );\n\n const resetPersistenceScope = useCallback(() => {\n loadedStateRef.current.clear();\n touchedIdsRef.current.clear();\n detachedAppStateRef.current.clear();\n for (const [toolCallId, baseline] of streamBaselinesRef.current) {\n if (stateRef.current.definitions[baseline.targetId]?.scope !== \"thread\") {\n streamBaselinesRef.current.delete(toolCallId);\n }\n }\n setStateAndRef((prev) => {\n let changed = false;\n const definitions = nullProtoRecord(prev.definitions);\n for (const [id, def] of Object.entries(definitions)) {\n if (def.scope === \"thread\") continue;\n definitions[id] = { ...def, state: def.initialState };\n changed = true;\n }\n const persistence = nullProtoRecord(prev.persistence);\n for (const id of Object.keys(prev.persistence)) {\n delete persistence[id];\n changed = true;\n }\n return changed ? { ...prev, definitions, persistence } : prev;\n });\n }, [setStateAndRef]);\n\n const setPersistenceAdapter = useCallback(\n (adapter: Unstable_InteractablePersistenceAdapter | undefined) => {\n const previous = adapterRef.current;\n if (previous !== adapter) {\n if (adapterPreparationTimerRef.current !== undefined) {\n clearTimeout(adapterPreparationTimerRef.current);\n adapterPreparationTimerRef.current = undefined;\n }\n flushIfPending();\n saveAdapterRef.current = undefined;\n }\n adapterRef.current = adapter;\n if (!adapter) {\n const dirtyIds = getDirtyIds();\n if (dirtyIds.size > 0) {\n updatePersistenceStatus((prev) => {\n let changed = false;\n const persistence = nullProtoRecord(prev);\n for (const id of dirtyIds) {\n if (prev[id] === undefined) continue;\n delete persistence[id];\n changed = true;\n }\n return changed ? persistence : prev;\n });\n }\n adapterLoadRef.current = undefined;\n return;\n }\n\n const lastAttached = lastAttachedAdapterRef.current;\n lastAttachedAdapterRef.current = adapter;\n if (lastAttached !== undefined && lastAttached !== adapter) {\n discardPending();\n adapterGenerationRef.current += 1;\n if (process.env.NODE_ENV !== \"production\") {\n console.warn(\n \"[Interactables] The persistence adapter identity changed, so app-scoped state was reset for the new scope. Memoize the adapter unless this is an account or workspace switch.\",\n );\n }\n resetPersistenceScope();\n }\n void prepareAdapter(adapter);\n },\n [\n discardPending,\n flushIfPending,\n getDirtyIds,\n prepareAdapter,\n resetPersistenceScope,\n updatePersistenceStatus,\n ],\n );\n\n useEffect(\n () => () => {\n if (adapterPreparationTimerRef.current !== undefined) {\n clearTimeout(adapterPreparationTimerRef.current);\n }\n },\n [],\n );\n\n const flush = useCallback(async () => {\n const adapter = adapterRef.current;\n if (adapter && saveAdapterRef.current !== adapter) {\n let timer: ReturnType<typeof setTimeout> | undefined;\n try {\n await Promise.race([\n prepareAdapter(adapter),\n new Promise<boolean>((resolve) => {\n timer = setTimeout(() => resolve(false), FLUSH_LOAD_TIMEOUT_MS);\n }),\n ]);\n } finally {\n if (timer !== undefined) clearTimeout(timer);\n }\n }\n await flushPersistence();\n }, [flushPersistence, prepareAdapter]);\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 && !declarativePersistenceRef.current) return;\n declarativePersistenceRef.current = persistence;\n setPersistenceAdapter(persistence);\n }, [persistence, setPersistenceAdapter]);\n\n useEffect(() => {\n return () => {\n if (!declarativePersistenceRef.current) return;\n declarativePersistenceRef.current = undefined;\n setPersistenceAdapter(undefined);\n };\n }, [setPersistenceAdapter]);\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: nullProtoRecord(prev.definitions, {\n [id]: { ...existing, state: updater(existing.state) },\n }),\n };\n });\n if (stateRef.current.definitions[id]?.scope !== \"thread\") {\n schedulePersistence(id);\n const adapter = adapterRef.current;\n if (adapter && saveAdapterRef.current !== adapter) {\n updateDirtyLoadStatus({ isPending: true, error: undefined });\n scheduleAdapterPreparation(adapter);\n }\n }\n },\n [\n scheduleAdapterPreparation,\n schedulePersistence,\n setStateAndRef,\n updateDirtyLoadStatus,\n ],\n );\n\n const provider = useMemo(\n () => ({\n getModelContext: () => {\n const defs = stateRef.current.definitions;\n return (\n buildInteractableModelContext(\n defs,\n schemaCacheRef.current,\n setDefState,\n () => stateRef.current.definitions,\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 notifyStateSubscribers(subscribersRef.current);\n }, [state]);\n\n useAssistantScopeEffect(\n \"modelContext\",\n () => clientRef.current!.modelContext().register(provider),\n [provider],\n );\n\n const installUpdateToolUI = useCallback(\n (name: string, entry: UpdateToolUIEntry) => {\n const toolsAccessor = clientRef.current?.tools;\n if (!toolsAccessor || toolsAccessor.source == null) return false;\n entry.unsubscribe = toolsAccessor().setToolUI(\n interactableToolName(name),\n entry.render,\n { standalone: true },\n );\n return true;\n },\n [clientRef],\n );\n\n // register() installs update-tool UIs against the tools instance bound at\n // call time; this re-applies the retained entries when that instance is\n // structurally replaced and installs entries recorded while no tools\n // scope was available. Each re-apply releases the entry's previous\n // install first, so it is an orphaned no-op against a replaced instance\n // and an idempotent replacement against a live one.\n useAssistantScopeEffect(\n \"tools\",\n () => {\n for (const [name, entry] of updateToolUIsRef.current) {\n entry.unsubscribe?.();\n entry.unsubscribe = undefined;\n installUpdateToolUI(name, entry);\n }\n return () => {\n for (const entry of updateToolUIsRef.current.values()) {\n entry.unsubscribe?.();\n entry.unsubscribe = undefined;\n }\n };\n },\n [installUpdateToolUI],\n );\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 existing = updateToolUIsRef.current.get(def.name);\n const entry = existing ?? {\n count: 0,\n render: def.updateRender,\n unsubscribe: undefined,\n };\n entry.count++;\n if (!existing) updateToolUIsRef.current.set(def.name, entry);\n\n if (\n !entry.unsubscribe &&\n !installUpdateToolUI(def.name, entry) &&\n process.env.NODE_ENV !== \"production\"\n ) {\n console.warn(\n `[Interactables] \"${def.name}\" supplied an updateRender, but no ` +\n `tools scope is available yet; it will be installed once one appears.`,\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 entry.unsubscribe = undefined;\n }\n };\n }\n\n // The same id re-registers once per anchor (its create call + each update_*).\n if (schemaSourceRef.current.get(def.id) !== def.stateSchema) {\n schemaSourceRef.current.set(def.id, def.stateSchema);\n schemaCacheRef.current.delete(def.id);\n try {\n const jsonSchema = toJSONSchema(def.stateSchema);\n schemaCacheRef.current.set(def.id, jsonSchema);\n } catch (e) {\n console.warn(\n `[Interactables] Failed to convert the state schema of \"${def.name}\" to JSON Schema. The update tool will accept arbitrary fields without validation.`,\n e,\n );\n }\n }\n\n const threadId = scope === \"thread\" ? getCurrentThreadId() : undefined;\n const detachedState =\n scope === \"thread\"\n ? threadId\n ? detachedThreadStateRef.current.get(threadId)?.get(def.id)\n : undefined\n : detachedAppStateRef.current.get(def.id)?.state;\n if (scope === \"thread\") {\n loadedStateRef.current.delete(def.id);\n if (threadId)\n detachedThreadStateRef.current.get(threadId)?.delete(def.id);\n } else {\n detachedAppStateRef.current.delete(def.id);\n }\n const loadedState =\n scope === \"thread\"\n ? undefined\n : loadedStateRef.current.get(def.id)?.state;\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: nullProtoRecord(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 detachedState ??\n known?.state ??\n loadedState ??\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, {\n name: existing.name,\n state: existing.state,\n });\n }\n }\n schemaSourceRef.current.delete(def.id);\n schemaCacheRef.current.delete(def.id);\n const definitions = nullProtoRecord(prev.definitions);\n const persistence = nullProtoRecord(prev.persistence);\n delete definitions[def.id];\n delete persistence[def.id];\n return { ...prev, definitions, persistence };\n });\n };\n },\n [\n flushIfPending,\n clientRef,\n getCurrentThreadId,\n installUpdateToolUI,\n setStateAndRef,\n ],\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,37 +1,36 @@
1
- import { InMemoryThreadListProps } from "./InMemoryThreadList.js";
2
- import { RemoteThreadListAdapter } from "../../runtimes/remote-thread-list/types.js";
3
- import { ClientOutput } from "@assistant-ui/store";
4
- //#region src/react/client/RemoteThreadList.d.ts
5
- type RemoteThreadListProps = {
6
- /**
7
- * Swapping this to a different backing store does not reload the list. Call `reload()` after a genuine swap. A recreated object for the same store is a no-op. `reload()` after a different adapter instance resets selection and cached records before loading.
8
- */
9
- adapter: RemoteThreadListAdapter;
10
- /**
11
- * Factory for the visible thread. Per-thread history reload requires a
12
- * resource keyed by thread id (`withKey(id, thread(...))`). An unkeyed
13
- * factory keeps one instance across switches, so a mount-once history
14
- * loader will not fetch the next thread.
15
- */
16
- thread: InMemoryThreadListProps["thread"];
17
- threadId?: string | undefined;
18
- onThreadIdChange?: ((threadId: string | undefined) => void) | undefined;
19
- onSwitchToThread?: ((threadId: string) => void) | undefined;
20
- onSwitchToNewThread?: (() => void) | undefined;
21
- /** Called after the backing adapter successfully deletes the thread. */
22
- onDelete?: ((threadId: string) => void) | undefined;
23
- /**
24
- * Keeps every thread the session switched to mounted, so a run continues
25
- * after the user switches away, per-item `isRunning` reflects background
26
- * runs, and a freshly initialized thread generates its title automatically.
27
- * A body unmounts on delete, detach, or an adapter replacement (`reload()`
28
- * after swapping the adapter); visited threads otherwise stay mounted for
29
- * the client's lifetime. Each body reads its own thread through the ambient
30
- * `threadListItem` scope, and `unstable_useAdapters` runs once per mounted
31
- * body. Off (the default), only the visible thread is mounted and a switch
32
- * unmounts it. The mode is fixed at mount.
33
- */
34
- backgroundThreads?: boolean | undefined;
1
+ import type { ClientOutput } from "@assistant-ui/store";
2
+ import type { RemoteThreadListAdapter } from "../../runtimes/remote-thread-list/types.js";
3
+ import { type InMemoryThreadListProps } from "./InMemoryThreadList.js";
4
+ export type RemoteThreadListProps = {
5
+ /**
6
+ * Swapping this to a different backing store does not reload the list. Call `reload()` after a genuine swap. A recreated object for the same store is a no-op. `reload()` after a different adapter instance resets selection and cached records before loading.
7
+ */
8
+ adapter: RemoteThreadListAdapter;
9
+ /**
10
+ * Factory for the visible thread. Per-thread history reload requires a
11
+ * resource keyed by thread id (`withKey(id, thread(...))`). An unkeyed
12
+ * factory keeps one instance across switches, so a mount-once history
13
+ * loader will not fetch the next thread.
14
+ */
15
+ thread: InMemoryThreadListProps["thread"];
16
+ threadId?: string | undefined;
17
+ onThreadIdChange?: ((threadId: string | undefined) => void) | undefined;
18
+ onSwitchToThread?: ((threadId: string) => void) | undefined;
19
+ onSwitchToNewThread?: (() => void) | undefined;
20
+ /** Called after the backing adapter successfully deletes the thread. */
21
+ onDelete?: ((threadId: string) => void) | undefined;
22
+ /**
23
+ * Keeps every thread the session switched to mounted, so a run continues
24
+ * after the user switches away, per-item `isRunning` reflects background
25
+ * runs, and a freshly initialized thread generates its title automatically.
26
+ * A body unmounts on delete, detach, or an adapter replacement (`reload()`
27
+ * after swapping the adapter); visited threads otherwise stay mounted for
28
+ * the client's lifetime. Each body reads its own thread through the ambient
29
+ * `threadListItem` scope, and `unstable_useAdapters` runs once per mounted
30
+ * body. Off (the default), only the visible thread is mounted and a switch
31
+ * unmounts it. The mode is fixed at mount.
32
+ */
33
+ backgroundThreads?: boolean | undefined;
35
34
  };
36
35
  /**
37
36
  * `AuiConfig` `threads` entry backed by a `RemoteThreadListAdapter`. Thread
@@ -44,7 +43,5 @@ type RemoteThreadListProps = {
44
43
  * across switches, per-item `isRunning` is live, and freshly initialized
45
44
  * threads title themselves.
46
45
  */
47
- declare const RemoteThreadList: import("@assistant-ui/tap").Resource<ClientOutput<"threads">, [props: RemoteThreadListProps]>;
48
- //#endregion
49
- export { RemoteThreadList, RemoteThreadListProps };
46
+ export declare const RemoteThreadList: import("@assistant-ui/tap").Resource<ClientOutput<"threads">, [props: RemoteThreadListProps]>;
50
47
  //# sourceMappingURL=RemoteThreadList.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"RemoteThreadList.d.ts","names":[],"sources":["../../../src/react/client/RemoteThreadList.ts"],"mappings":";;;;KAiEY;;;;EAIV,SAAS;;;;;;;EAOT,QAAQ;EACR;EACA,qBAAqB;EACrB,qBAAqB;EACrB;;EAEA,aAAa;;;;;;;;;;;;EAYb;;;;;;;;;;;;;cAswCW,8CAAgB,SAAA,0BAAA,OAAA"}
1
+ {"version":3,"file":"RemoteThreadList.d.ts","sourceRoot":"","sources":["../../../src/react/client/RemoteThreadList.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AA2BxD,OAAO,KAAK,EAEV,uBAAuB,EACxB,mDAAgD;AAIjD,OAAO,EAEL,KAAK,uBAAuB,EAC7B,gCAA6B;AAmB9B,MAAM,MAAM,qBAAqB,GAAG;IAClC;;OAEG;IACH,OAAO,EAAE,uBAAuB,CAAC;IACjC;;;;;OAKG;IACH,MAAM,EAAE,uBAAuB,CAAC,QAAQ,CAAC,CAAC;IAC1C,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,gBAAgB,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IACxE,gBAAgB,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IAC5D,mBAAmB,CAAC,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS,CAAC;IAC/C,wEAAwE;IACxE,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IACpD;;;;;;;;;;OAUG;IACH,iBAAiB,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CACzC,CAAC;AAgwCF;;;;;;;;;;GAUG;AACH,eAAO,MAAM,gBAAgB,+FAAgC,CAAC"}
@@ -4,9 +4,9 @@ import { classifyThreads, createEmptyRemoteThreadState, createThreadMappingId, g
4
4
  import { handleThreadListAction } from "../../store/runtime-clients/handle-thread-list-action.js";
5
5
  import { useThreadSelectionEvents } from "../../store/clients/thread-selection-events.js";
6
6
  import { isDevelopment } from "../../store/env.js";
7
+ import { AdaptedRemoteThread } from "./AdaptedRemoteThread.js";
7
8
  import { inMemoryThreadListTransformScopes } from "./InMemoryThreadList.js";
8
9
  import { ThreadListAdapterChangedError } from "../../runtimes/remote-thread-list/adapter-changed.js";
9
- import { AdaptedRemoteThread } from "./AdaptedRemoteThread.js";
10
10
  import { applyTitleStream, isTitleSourceMessage } from "../../runtimes/remote-thread-list/title.js";
11
11
  import { clearThreadTitleState, finishThreadTitleRename, runThreadTitleGeneration, startThreadTitleRename } from "../../runtimes/remote-thread-list/title-generation.js";
12
12
  import { Derived, attachTransformScopes, useAssistantContextProvider, useAssistantContextValue, useClientLookup, useClientResource, useConfiguredAui } from "@assistant-ui/store/client";
@@ -597,6 +597,7 @@ const useRemoteThreadList = (props) => {
597
597
  if (threadId_0 === store.value.newThreadId) throw new Error("Cannot ensure new thread is not main");
598
598
  let lastAwaitedTask;
599
599
  while (isSameThread(store.value, threadId_0, session.mainThreadId)) {
600
+ if (threadId_0 === store.value.newThreadId) throw new Error("Cannot ensure new thread is not main");
600
601
  let switchTask = session.switchTask;
601
602
  const startedFallback = !switchTask || switchTask === lastAwaitedTask;
602
603
  if (startedFallback) switchTask = switchToNewThread();