@assistant-ui/core 0.3.20 → 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 (905) hide show
  1. package/dist/adapters/attachment.d.ts +42 -34
  2. package/dist/adapters/attachment.d.ts.map +1 -1
  3. package/dist/adapters/attachment.js +51 -21
  4. package/dist/adapters/attachment.js.map +1 -1
  5. package/dist/adapters/directive-formatter.d.ts +1 -3
  6. package/dist/adapters/directive-formatter.d.ts.map +1 -1
  7. package/dist/adapters/feedback.d.ts +6 -7
  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 +57 -58
  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 +14 -16
  17. package/dist/adapters/suggestion.d.ts.map +1 -1
  18. package/dist/adapters/thread-history.d.ts +54 -51
  19. package/dist/adapters/thread-history.d.ts.map +1 -1
  20. package/dist/adapters/trigger.d.ts +7 -9
  21. package/dist/adapters/trigger.d.ts.map +1 -1
  22. package/dist/adapters/voice.d.ts +46 -40
  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 +0 -2
  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 +19 -21
  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 +27 -28
  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 +19 -21
  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 +42 -29
  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 +6 -8
  54. package/dist/model-context/registry-handles.d.ts.map +1 -1
  55. package/dist/model-context/registry.d.ts +14 -16
  56. package/dist/model-context/registry.d.ts.map +1 -1
  57. package/dist/model-context/tool-call-text.d.ts +13 -14
  58. package/dist/model-context/tool-call-text.d.ts.map +1 -1
  59. package/dist/model-context/tool.d.ts +10 -11
  60. package/dist/model-context/tool.d.ts.map +1 -1
  61. package/dist/model-context/types.d.ts +32 -34
  62. package/dist/model-context/types.d.ts.map +1 -1
  63. package/dist/react/AssistantProvider.d.ts +6 -8
  64. package/dist/react/AssistantProvider.d.ts.map +1 -1
  65. package/dist/react/AssistantRuntimeProvider.d.ts +23 -25
  66. package/dist/react/AssistantRuntimeProvider.d.ts.map +1 -1
  67. package/dist/react/RuntimeAdapter.d.ts +2 -5
  68. package/dist/react/RuntimeAdapter.d.ts.map +1 -1
  69. package/dist/react/adapters/LocalStorageThreadListAdapter.d.ts +24 -18
  70. package/dist/react/adapters/LocalStorageThreadListAdapter.d.ts.map +1 -1
  71. package/dist/react/adapters/LocalStorageThreadListAdapter.js +58 -25
  72. package/dist/react/adapters/LocalStorageThreadListAdapter.js.map +1 -1
  73. package/dist/react/adapters/TitleGenerationAdapter.d.ts +2 -4
  74. package/dist/react/adapters/TitleGenerationAdapter.d.ts.map +1 -1
  75. package/dist/react/client/AdaptedRemoteThread.d.ts +5 -7
  76. package/dist/react/client/AdaptedRemoteThread.d.ts.map +1 -1
  77. package/dist/react/client/DataRenderers.d.ts +1 -3
  78. package/dist/react/client/DataRenderers.d.ts.map +1 -1
  79. package/dist/react/client/InMemoryThreadList.d.ts +6 -8
  80. package/dist/react/client/InMemoryThreadList.d.ts.map +1 -1
  81. package/dist/react/client/Interactables.d.ts +2 -4
  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 +32 -34
  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 +9 -11
  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 -10
  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 +1 -3
  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 -8
  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 +33 -36
  109. package/dist/react/interactables-legacy/scopes.d.ts.map +1 -1
  110. package/dist/react/interactables-legacy/useAssistantInteractable.d.ts +6 -8
  111. package/dist/react/interactables-legacy/useAssistantInteractable.d.ts.map +1 -1
  112. package/dist/react/interactables-legacy/useInteractableState.d.ts +6 -7
  113. package/dist/react/interactables-legacy/useInteractableState.d.ts.map +1 -1
  114. package/dist/react/interactables-shared/useInteractablePersistenceQueue.d.ts +23 -13
  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 +11 -13
  119. package/dist/react/model-context/define-mcp-toolkit.d.ts.map +1 -1
  120. package/dist/react/model-context/define-toolkit.d.ts +12 -4
  121. package/dist/react/model-context/define-toolkit.d.ts.map +1 -1
  122. package/dist/react/model-context/external-tool.d.ts +0 -2
  123. package/dist/react/model-context/external-tool.d.ts.map +1 -1
  124. package/dist/react/model-context/human-tool.d.ts +0 -2
  125. package/dist/react/model-context/human-tool.d.ts.map +1 -1
  126. package/dist/react/model-context/interactableTool.d.ts +23 -25
  127. package/dist/react/model-context/interactableTool.d.ts.map +1 -1
  128. package/dist/react/model-context/makeAssistantDataUI.d.ts +4 -6
  129. package/dist/react/model-context/makeAssistantDataUI.d.ts.map +1 -1
  130. package/dist/react/model-context/makeAssistantTool.d.ts +4 -6
  131. package/dist/react/model-context/makeAssistantTool.d.ts.map +1 -1
  132. package/dist/react/model-context/makeAssistantToolUI.d.ts +4 -6
  133. package/dist/react/model-context/makeAssistantToolUI.d.ts.map +1 -1
  134. package/dist/react/model-context/provider-tool.d.ts +3 -4
  135. package/dist/react/model-context/provider-tool.d.ts.map +1 -1
  136. package/dist/react/model-context/stub-tool.d.ts +0 -2
  137. package/dist/react/model-context/stub-tool.d.ts.map +1 -1
  138. package/dist/react/model-context/toolbox.d.ts +37 -24
  139. package/dist/react/model-context/toolbox.d.ts.map +1 -1
  140. package/dist/react/model-context/useAssistantContext.d.ts +2 -5
  141. package/dist/react/model-context/useAssistantContext.d.ts.map +1 -1
  142. package/dist/react/model-context/useAssistantDataUI.d.ts +5 -7
  143. package/dist/react/model-context/useAssistantDataUI.d.ts.map +1 -1
  144. package/dist/react/model-context/useAssistantInstructions.d.ts +2 -5
  145. package/dist/react/model-context/useAssistantInstructions.d.ts.map +1 -1
  146. package/dist/react/model-context/useAssistantTool.d.ts +8 -11
  147. package/dist/react/model-context/useAssistantTool.d.ts.map +1 -1
  148. package/dist/react/model-context/useAssistantToolUI.d.ts +11 -13
  149. package/dist/react/model-context/useAssistantToolUI.d.ts.map +1 -1
  150. package/dist/react/model-context/useAuiToolOverrides.d.ts +2 -3
  151. package/dist/react/model-context/useAuiToolOverrides.d.ts.map +1 -1
  152. package/dist/react/model-context/useInlineRender.d.ts +2 -4
  153. package/dist/react/model-context/useInlineRender.d.ts.map +1 -1
  154. package/dist/react/model-context/useInteractable.d.ts +37 -36
  155. package/dist/react/model-context/useInteractable.d.ts.map +1 -1
  156. package/dist/react/model-context/useInteractableState.d.ts +10 -8
  157. package/dist/react/model-context/useInteractableState.d.ts.map +1 -1
  158. package/dist/react/model-context/useInteractableVersions.d.ts +3 -5
  159. package/dist/react/model-context/useInteractableVersions.d.ts.map +1 -1
  160. package/dist/react/model-context/useToolArgsStatus.d.ts +5 -6
  161. package/dist/react/model-context/useToolArgsStatus.d.ts.map +1 -1
  162. package/dist/react/primitive-hooks/useActionBarCopy.d.ts +6 -8
  163. package/dist/react/primitive-hooks/useActionBarCopy.d.ts.map +1 -1
  164. package/dist/react/primitive-hooks/useActionBarEdit.d.ts +2 -4
  165. package/dist/react/primitive-hooks/useActionBarEdit.d.ts.map +1 -1
  166. package/dist/react/primitive-hooks/useActionBarFeedback.d.ts +4 -6
  167. package/dist/react/primitive-hooks/useActionBarFeedback.d.ts.map +1 -1
  168. package/dist/react/primitive-hooks/useActionBarReload.d.ts +2 -4
  169. package/dist/react/primitive-hooks/useActionBarReload.d.ts.map +1 -1
  170. package/dist/react/primitive-hooks/useActionBarSpeak.d.ts +2 -4
  171. package/dist/react/primitive-hooks/useActionBarSpeak.d.ts.map +1 -1
  172. package/dist/react/primitive-hooks/useActionBarStopSpeaking.d.ts +2 -4
  173. package/dist/react/primitive-hooks/useActionBarStopSpeaking.d.ts.map +1 -1
  174. package/dist/react/primitive-hooks/useBranchPickerNext.d.ts +2 -4
  175. package/dist/react/primitive-hooks/useBranchPickerNext.d.ts.map +1 -1
  176. package/dist/react/primitive-hooks/useBranchPickerPrevious.d.ts +2 -4
  177. package/dist/react/primitive-hooks/useBranchPickerPrevious.d.ts.map +1 -1
  178. package/dist/react/primitive-hooks/useComposerAddAttachment.d.ts +3 -5
  179. package/dist/react/primitive-hooks/useComposerAddAttachment.d.ts.map +1 -1
  180. package/dist/react/primitive-hooks/useComposerCancel.d.ts +2 -4
  181. package/dist/react/primitive-hooks/useComposerCancel.d.ts.map +1 -1
  182. package/dist/react/primitive-hooks/useComposerDictate.d.ts +2 -4
  183. package/dist/react/primitive-hooks/useComposerDictate.d.ts.map +1 -1
  184. package/dist/react/primitive-hooks/useComposerSend.d.ts +3 -5
  185. package/dist/react/primitive-hooks/useComposerSend.d.ts.map +1 -1
  186. package/dist/react/primitive-hooks/useEditComposerCancel.d.ts +1 -3
  187. package/dist/react/primitive-hooks/useEditComposerCancel.d.ts.map +1 -1
  188. package/dist/react/primitive-hooks/useEditComposerSend.d.ts +2 -4
  189. package/dist/react/primitive-hooks/useEditComposerSend.d.ts.map +1 -1
  190. package/dist/react/primitive-hooks/useMessageBranching.d.ts +4 -6
  191. package/dist/react/primitive-hooks/useMessageBranching.d.ts.map +1 -1
  192. package/dist/react/primitive-hooks/useMessageError.d.ts +0 -2
  193. package/dist/react/primitive-hooks/useMessageError.d.ts.map +1 -1
  194. package/dist/react/primitive-hooks/useMessageReload.d.ts +2 -4
  195. package/dist/react/primitive-hooks/useMessageReload.d.ts.map +1 -1
  196. package/dist/react/primitive-hooks/useSuggestionTrigger.d.ts +6 -8
  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 +0 -2
  201. package/dist/react/primitive-hooks/useThreadIsEmpty.d.ts.map +1 -1
  202. package/dist/react/primitive-hooks/useThreadIsRunning.d.ts +0 -2
  203. package/dist/react/primitive-hooks/useThreadIsRunning.d.ts.map +1 -1
  204. package/dist/react/primitive-hooks/useThreadListItemArchive.d.ts +1 -3
  205. package/dist/react/primitive-hooks/useThreadListItemArchive.d.ts.map +1 -1
  206. package/dist/react/primitive-hooks/useThreadListItemDelete.d.ts +1 -3
  207. package/dist/react/primitive-hooks/useThreadListItemDelete.d.ts.map +1 -1
  208. package/dist/react/primitive-hooks/useThreadListItemTrigger.d.ts +1 -3
  209. package/dist/react/primitive-hooks/useThreadListItemTrigger.d.ts.map +1 -1
  210. package/dist/react/primitive-hooks/useThreadListItemUnarchive.d.ts +1 -3
  211. package/dist/react/primitive-hooks/useThreadListItemUnarchive.d.ts.map +1 -1
  212. package/dist/react/primitive-hooks/useThreadListLoadMore.d.ts +2 -4
  213. package/dist/react/primitive-hooks/useThreadListLoadMore.d.ts.map +1 -1
  214. package/dist/react/primitive-hooks/useThreadListNew.d.ts +1 -3
  215. package/dist/react/primitive-hooks/useThreadListNew.d.ts.map +1 -1
  216. package/dist/react/primitive-hooks/useThreadMessageIds.d.ts +0 -2
  217. package/dist/react/primitive-hooks/useThreadMessageIds.d.ts.map +1 -1
  218. package/dist/react/primitive-hooks/useThreadMessages.d.ts +1 -3
  219. package/dist/react/primitive-hooks/useThreadMessages.d.ts.map +1 -1
  220. package/dist/react/primitive-hooks/useVoice.d.ts +5 -7
  221. package/dist/react/primitive-hooks/useVoice.d.ts.map +1 -1
  222. package/dist/react/primitives/chainOfThought/ChainOfThoughtParts.d.ts +25 -26
  223. package/dist/react/primitives/chainOfThought/ChainOfThoughtParts.d.ts.map +1 -1
  224. package/dist/react/primitives/composer/ComposerAttachments.d.ts +22 -23
  225. package/dist/react/primitives/composer/ComposerAttachments.d.ts.map +1 -1
  226. package/dist/react/primitives/composer/ComposerIf.d.ts +10 -9
  227. package/dist/react/primitives/composer/ComposerIf.d.ts.map +1 -1
  228. package/dist/react/primitives/composer/ComposerQueue.d.ts +11 -14
  229. package/dist/react/primitives/composer/ComposerQueue.d.ts.map +1 -1
  230. package/dist/react/primitives/generativeUI/GenerativeUI.d.ts +26 -28
  231. package/dist/react/primitives/generativeUI/GenerativeUI.d.ts.map +1 -1
  232. package/dist/react/primitives/generativeUI/GenerativeUI.js +16 -6
  233. package/dist/react/primitives/generativeUI/GenerativeUI.js.map +1 -1
  234. package/dist/react/primitives/message/MessageAttachments.d.ts +26 -23
  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 +120 -117
  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 +199 -185
  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 +6 -8
  247. package/dist/react/primitives/message/MessageQuote.d.ts.map +1 -1
  248. package/dist/react/primitives/messagePart/MessagePartInProgress.d.ts +2 -4
  249. package/dist/react/primitives/messagePart/MessagePartInProgress.d.ts.map +1 -1
  250. package/dist/react/primitives/part/PartMessages.d.ts +13 -15
  251. package/dist/react/primitives/part/PartMessages.d.ts.map +1 -1
  252. package/dist/react/primitives/thread/ThreadMessages.d.ts +54 -56
  253. package/dist/react/primitives/thread/ThreadMessages.d.ts.map +1 -1
  254. package/dist/react/primitives/thread/ThreadSuggestions.d.ts +20 -21
  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 +22 -23
  259. package/dist/react/primitives/threadList/ThreadListItems.d.ts.map +1 -1
  260. package/dist/react/primitives/threadListItem/ThreadListItemTitle.d.ts +4 -6
  261. package/dist/react/primitives/threadListItem/ThreadListItemTitle.d.ts.map +1 -1
  262. package/dist/react/providers/AttachmentByIndexProvider.d.ts +3 -5
  263. package/dist/react/providers/AttachmentByIndexProvider.d.ts.map +1 -1
  264. package/dist/react/providers/ChainOfThoughtByIndicesProvider.d.ts +3 -5
  265. package/dist/react/providers/ChainOfThoughtByIndicesProvider.d.ts.map +1 -1
  266. package/dist/react/providers/ChainOfThoughtPartByIndexProvider.d.ts +2 -4
  267. package/dist/react/providers/ChainOfThoughtPartByIndexProvider.d.ts.map +1 -1
  268. package/dist/react/providers/MessageByIdProvider.d.ts +2 -4
  269. package/dist/react/providers/MessageByIdProvider.d.ts.map +1 -1
  270. package/dist/react/providers/MessageByIndexProvider.d.ts +2 -4
  271. package/dist/react/providers/MessageByIndexProvider.d.ts.map +1 -1
  272. package/dist/react/providers/PartByIndexProvider.d.ts +2 -4
  273. package/dist/react/providers/PartByIndexProvider.d.ts.map +1 -1
  274. package/dist/react/providers/QueueItemByIndexProvider.d.ts +2 -4
  275. package/dist/react/providers/QueueItemByIndexProvider.d.ts.map +1 -1
  276. package/dist/react/providers/ReadonlyThreadProvider.d.ts +5 -7
  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 +2 -4
  280. package/dist/react/providers/SuggestionByIndexProvider.d.ts.map +1 -1
  281. package/dist/react/providers/TextMessagePartProvider.d.ts +3 -5
  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 +3 -5
  286. package/dist/react/providers/ThreadListItemByIndexProvider.d.ts.map +1 -1
  287. package/dist/react/providers/ThreadListItemRuntimeProvider.d.ts +3 -6
  288. package/dist/react/providers/ThreadListItemRuntimeProvider.d.ts.map +1 -1
  289. package/dist/react/runtimes/RemoteThreadListHookInstanceManager.d.ts +209 -219
  290. package/dist/react/runtimes/RemoteThreadListHookInstanceManager.d.ts.map +1 -1
  291. package/dist/react/runtimes/RemoteThreadListHookInstanceManager.js +53 -39
  292. package/dist/react/runtimes/RemoteThreadListHookInstanceManager.js.map +1 -1
  293. package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.d.ts +185 -196
  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 +14 -19
  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 +8 -9
  302. package/dist/react/runtimes/RuntimeAdapterProvider.d.ts.map +1 -1
  303. package/dist/react/runtimes/assistant-transport/commandQueue.d.ts +9 -11
  304. package/dist/react/runtimes/assistant-transport/commandQueue.d.ts.map +1 -1
  305. package/dist/react/runtimes/assistant-transport/replayBoundaryStream.d.ts +4 -5
  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 +7 -9
  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 +106 -100
  314. package/dist/react/runtimes/assistant-transport/types.d.ts.map +1 -1
  315. package/dist/react/runtimes/assistant-transport/useAssistantTransportRuntime.d.ts +3 -5
  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 +2 -4
  320. package/dist/react/runtimes/assistant-transport/useConvertedState.d.ts.map +1 -1
  321. package/dist/react/runtimes/assistant-transport/useLatestRef.d.ts +1 -3
  322. package/dist/react/runtimes/assistant-transport/useLatestRef.d.ts.map +1 -1
  323. package/dist/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.d.ts +5 -7
  324. package/dist/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.d.ts.map +1 -1
  325. package/dist/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.js +410 -213
  326. package/dist/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.js.map +1 -1
  327. package/dist/react/runtimes/cloud/CloudFileAttachmentAdapter.d.ts +14 -16
  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 +136 -123
  332. package/dist/react/runtimes/cloud/auiV0.d.ts.map +1 -1
  333. package/dist/react/runtimes/cloud/auiV0.js +60 -9
  334. package/dist/react/runtimes/cloud/auiV0.js.map +1 -1
  335. package/dist/react/runtimes/cloud/createCloudThreadListAdapter.d.ts +9 -10
  336. package/dist/react/runtimes/cloud/createCloudThreadListAdapter.d.ts.map +1 -1
  337. package/dist/react/runtimes/cloud/createCloudThreadListAdapterCreateFallback.d.ts +4 -5
  338. package/dist/react/runtimes/cloud/createCloudThreadListAdapterCreateFallback.d.ts.map +1 -1
  339. package/dist/react/runtimes/cloud/sdkIdentity.d.ts +1 -3
  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 +2 -4
  343. package/dist/react/runtimes/cloud/useCloudThreadListAdapter.d.ts.map +1 -1
  344. package/dist/react/runtimes/cloud/useCloudThreadListRuntime.d.ts +8 -9
  345. package/dist/react/runtimes/cloud/useCloudThreadListRuntime.d.ts.map +1 -1
  346. package/dist/react/runtimes/createMessageConverter.d.ts +14 -17
  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 +11 -13
  350. package/dist/react/runtimes/createRuntimeExtras.d.ts.map +1 -1
  351. package/dist/react/runtimes/external-message-converter.d.ts +14 -18
  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 +2 -4
  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 +1 -3
  362. package/dist/react/runtimes/useExternalStoreSharedOptions.d.ts.map +1 -1
  363. package/dist/react/runtimes/useLocalRuntime.d.ts +26 -37
  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 +2 -4
  368. package/dist/react/runtimes/useRemoteThreadListRuntime.d.ts.map +1 -1
  369. package/dist/react/runtimes/useRuntimeAdapters.d.ts +1 -3
  370. package/dist/react/runtimes/useRuntimeAdapters.d.ts.map +1 -1
  371. package/dist/react/runtimes/useStreamingTiming.d.ts +3 -5
  372. package/dist/react/runtimes/useStreamingTiming.d.ts.map +1 -1
  373. package/dist/react/types/MessagePartComponentTypes.d.ts +46 -43
  374. package/dist/react/types/MessagePartComponentTypes.d.ts.map +1 -1
  375. package/dist/react/types/scopes/dataRenderers.d.ts +8 -11
  376. package/dist/react/types/scopes/dataRenderers.d.ts.map +1 -1
  377. package/dist/react/types/scopes/interactables.d.ts +50 -49
  378. package/dist/react/types/scopes/interactables.d.ts.map +1 -1
  379. package/dist/react/types/scopes/tools.d.ts +17 -19
  380. package/dist/react/types/scopes/tools.d.ts.map +1 -1
  381. package/dist/react/types/store-augmentation.d.ts +10 -11
  382. package/dist/react/types/store-augmentation.d.ts.map +1 -1
  383. package/dist/react/utils/getMessageQuote.d.ts +5 -6
  384. package/dist/react/utils/getMessageQuote.d.ts.map +1 -1
  385. package/dist/react/utils/groupParts.d.ts +28 -29
  386. package/dist/react/utils/groupParts.d.ts.map +1 -1
  387. package/dist/react/utils/useJSONEqual.d.ts +1 -3
  388. package/dist/react/utils/useJSONEqual.d.ts.map +1 -1
  389. package/dist/react/utils/useJSONSchemaDependency.d.ts +2 -4
  390. package/dist/react/utils/useJSONSchemaDependency.d.ts.map +1 -1
  391. package/dist/runtime/api/assistant-runtime.d.ts +26 -28
  392. package/dist/runtime/api/assistant-runtime.d.ts.map +1 -1
  393. package/dist/runtime/api/attachment-runtime.d.ts +46 -43
  394. package/dist/runtime/api/attachment-runtime.d.ts.map +1 -1
  395. package/dist/runtime/api/attachment-runtime.js.map +1 -1
  396. package/dist/runtime/api/bindings.d.ts +31 -30
  397. package/dist/runtime/api/bindings.d.ts.map +1 -1
  398. package/dist/runtime/api/composer-runtime.d.ts +207 -193
  399. package/dist/runtime/api/composer-runtime.d.ts.map +1 -1
  400. package/dist/runtime/api/composer-runtime.js +4 -0
  401. package/dist/runtime/api/composer-runtime.js.map +1 -1
  402. package/dist/runtime/api/message-part-runtime.d.ts +28 -26
  403. package/dist/runtime/api/message-part-runtime.d.ts.map +1 -1
  404. package/dist/runtime/api/message-part-runtime.js +22 -0
  405. package/dist/runtime/api/message-part-runtime.js.map +1 -1
  406. package/dist/runtime/api/message-runtime.d.ts +87 -84
  407. package/dist/runtime/api/message-runtime.d.ts.map +1 -1
  408. package/dist/runtime/api/message-runtime.js +1 -1
  409. package/dist/runtime/api/message-runtime.js.map +1 -1
  410. package/dist/runtime/api/paths.d.ts +48 -50
  411. package/dist/runtime/api/paths.d.ts.map +1 -1
  412. package/dist/runtime/api/thread-list-item-runtime.d.ts +64 -66
  413. package/dist/runtime/api/thread-list-item-runtime.d.ts.map +1 -1
  414. package/dist/runtime/api/thread-list-item-runtime.js.map +1 -1
  415. package/dist/runtime/api/thread-list-runtime.d.ts +73 -76
  416. package/dist/runtime/api/thread-list-runtime.d.ts.map +1 -1
  417. package/dist/runtime/api/thread-list-runtime.js.map +1 -1
  418. package/dist/runtime/api/thread-runtime.d.ts +299 -300
  419. package/dist/runtime/api/thread-runtime.d.ts.map +1 -1
  420. package/dist/runtime/api/thread-runtime.js +2 -1
  421. package/dist/runtime/api/thread-runtime.js.map +1 -1
  422. package/dist/runtime/base/base-assistant-runtime-core.d.ts +8 -10
  423. package/dist/runtime/base/base-assistant-runtime-core.d.ts.map +1 -1
  424. package/dist/runtime/base/base-composer-runtime-core.d.ts +149 -99
  425. package/dist/runtime/base/base-composer-runtime-core.d.ts.map +1 -1
  426. package/dist/runtime/base/base-composer-runtime-core.js +400 -122
  427. package/dist/runtime/base/base-composer-runtime-core.js.map +1 -1
  428. package/dist/runtime/base/base-thread-runtime-core.d.ts +120 -108
  429. package/dist/runtime/base/base-thread-runtime-core.d.ts.map +1 -1
  430. package/dist/runtime/base/base-thread-runtime-core.js +109 -41
  431. package/dist/runtime/base/base-thread-runtime-core.js.map +1 -1
  432. package/dist/runtime/base/default-edit-composer-runtime-core.d.ts +29 -29
  433. package/dist/runtime/base/default-edit-composer-runtime-core.d.ts.map +1 -1
  434. package/dist/runtime/base/default-edit-composer-runtime-core.js +10 -1
  435. package/dist/runtime/base/default-edit-composer-runtime-core.js.map +1 -1
  436. package/dist/runtime/base/default-thread-composer-runtime-core.d.ts +27 -29
  437. package/dist/runtime/base/default-thread-composer-runtime-core.d.ts.map +1 -1
  438. package/dist/runtime/base/default-thread-composer-runtime-core.js +21 -6
  439. package/dist/runtime/base/default-thread-composer-runtime-core.js.map +1 -1
  440. package/dist/runtime/branch/external-thread-branch-adapter.d.ts +14 -16
  441. package/dist/runtime/branch/external-thread-branch-adapter.d.ts.map +1 -1
  442. package/dist/runtime/interfaces/assistant-runtime-core.d.ts +7 -9
  443. package/dist/runtime/interfaces/assistant-runtime-core.d.ts.map +1 -1
  444. package/dist/runtime/interfaces/composer-runtime-core.d.ts +88 -72
  445. package/dist/runtime/interfaces/composer-runtime-core.d.ts.map +1 -1
  446. package/dist/runtime/interfaces/thread-list-runtime-core.d.ts +63 -65
  447. package/dist/runtime/interfaces/thread-list-runtime-core.d.ts.map +1 -1
  448. package/dist/runtime/interfaces/thread-runtime-core.d.ts +210 -197
  449. package/dist/runtime/interfaces/thread-runtime-core.d.ts.map +1 -1
  450. package/dist/runtime/internal.d.ts +25 -20
  451. package/dist/runtime/internal.d.ts.map +1 -0
  452. package/dist/runtime/queue/external-thread-queue-adapter.d.ts +35 -37
  453. package/dist/runtime/queue/external-thread-queue-adapter.d.ts.map +1 -1
  454. package/dist/runtime/queue/message-queue.d.ts +29 -31
  455. package/dist/runtime/queue/message-queue.d.ts.map +1 -1
  456. package/dist/runtime/queue/message-queue.js +1 -1
  457. package/dist/runtime/queue/queue-item.d.ts +5 -7
  458. package/dist/runtime/queue/queue-item.d.ts.map +1 -1
  459. package/dist/runtime/utils/abortable-thread-load.d.ts +7 -8
  460. package/dist/runtime/utils/abortable-thread-load.d.ts.map +1 -1
  461. package/dist/runtime/utils/attachment-add-operations.d.ts +13 -11
  462. package/dist/runtime/utils/attachment-add-operations.d.ts.map +1 -1
  463. package/dist/runtime/utils/attachment-add-operations.js +24 -2
  464. package/dist/runtime/utils/attachment-add-operations.js.map +1 -1
  465. package/dist/runtime/utils/attachment-send-operations.d.ts +12 -0
  466. package/dist/runtime/utils/attachment-send-operations.d.ts.map +1 -0
  467. package/dist/runtime/utils/attachment-send-operations.js +34 -0
  468. package/dist/runtime/utils/attachment-send-operations.js.map +1 -0
  469. package/dist/runtime/utils/auto-status.d.ts +4 -5
  470. package/dist/runtime/utils/auto-status.d.ts.map +1 -1
  471. package/dist/runtime/utils/auto-status.js +3 -5
  472. package/dist/runtime/utils/auto-status.js.map +1 -1
  473. package/dist/runtime/utils/chat-model-adapter.d.ts +26 -27
  474. package/dist/runtime/utils/chat-model-adapter.d.ts.map +1 -1
  475. package/dist/runtime/utils/external-message-conversion.d.ts +32 -32
  476. package/dist/runtime/utils/external-message-conversion.d.ts.map +1 -1
  477. package/dist/runtime/utils/external-message-conversion.js +3 -3
  478. package/dist/runtime/utils/external-message-conversion.js.map +1 -1
  479. package/dist/runtime/utils/external-store-message.d.ts +2 -4
  480. package/dist/runtime/utils/external-store-message.d.ts.map +1 -1
  481. package/dist/runtime/utils/message-repository-session.d.ts +21 -23
  482. package/dist/runtime/utils/message-repository-session.d.ts.map +1 -1
  483. package/dist/runtime/utils/message-repository.d.ts +50 -51
  484. package/dist/runtime/utils/message-repository.d.ts.map +1 -1
  485. package/dist/runtime/utils/message-repository.js +8 -7
  486. package/dist/runtime/utils/message-repository.js.map +1 -1
  487. package/dist/runtime/utils/pending-tool-calls.d.ts +10 -11
  488. package/dist/runtime/utils/pending-tool-calls.d.ts.map +1 -1
  489. package/dist/runtime/utils/resolveToolApprovalResponse.d.ts +6 -8
  490. package/dist/runtime/utils/resolveToolApprovalResponse.d.ts.map +1 -1
  491. package/dist/runtime/utils/runtime-extras-brand.d.ts +4 -6
  492. package/dist/runtime/utils/runtime-extras-brand.d.ts.map +1 -1
  493. package/dist/runtime/utils/stored-message-parts.d.ts +5 -5
  494. package/dist/runtime/utils/stored-message-parts.d.ts.map +1 -1
  495. package/dist/runtime/utils/stored-message-parts.js +22 -2
  496. package/dist/runtime/utils/stored-message-parts.js.map +1 -1
  497. package/dist/runtime/utils/streaming-timing.d.ts +19 -21
  498. package/dist/runtime/utils/streaming-timing.d.ts.map +1 -1
  499. package/dist/runtime/utils/thread-message-like.d.ts +36 -32
  500. package/dist/runtime/utils/thread-message-like.d.ts.map +1 -1
  501. package/dist/runtime/utils/thread-message-like.js +16 -6
  502. package/dist/runtime/utils/thread-message-like.js.map +1 -1
  503. package/dist/runtime/utils/thread-runtime-lifecycle.d.ts +4 -5
  504. package/dist/runtime/utils/thread-runtime-lifecycle.d.ts.map +1 -1
  505. package/dist/runtime/utils/thread-runtime-lifecycle.js +31 -4
  506. package/dist/runtime/utils/thread-runtime-lifecycle.js.map +1 -1
  507. package/dist/runtime/utils/tool-call-tree.d.ts +6 -8
  508. package/dist/runtime/utils/tool-call-tree.d.ts.map +1 -1
  509. package/dist/runtime/utils/tool-interactions.d.ts +10 -0
  510. package/dist/runtime/utils/tool-interactions.d.ts.map +1 -0
  511. package/dist/runtime/utils/tool-interactions.js +92 -0
  512. package/dist/runtime/utils/tool-interactions.js.map +1 -0
  513. package/dist/runtimes/assistant-transport/utils.d.ts +0 -2
  514. package/dist/runtimes/assistant-transport/utils.d.ts.map +1 -1
  515. package/dist/runtimes/external-store/external-store-adapter.d.ts +215 -198
  516. package/dist/runtimes/external-store/external-store-adapter.d.ts.map +1 -1
  517. package/dist/runtimes/external-store/external-store-runtime-core.d.ts +5 -6
  518. package/dist/runtimes/external-store/external-store-runtime-core.d.ts.map +1 -1
  519. package/dist/runtimes/external-store/external-store-runtime-core.js +4 -1
  520. package/dist/runtimes/external-store/external-store-runtime-core.js.map +1 -1
  521. package/dist/runtimes/external-store/external-store-shared-options.d.ts +1 -3
  522. package/dist/runtimes/external-store/external-store-shared-options.d.ts.map +1 -1
  523. package/dist/runtimes/external-store/external-store-thread-list-runtime-core.d.ts +38 -40
  524. package/dist/runtimes/external-store/external-store-thread-list-runtime-core.d.ts.map +1 -1
  525. package/dist/runtimes/external-store/external-store-thread-list-runtime-core.js +2 -2
  526. package/dist/runtimes/external-store/external-store-thread-list-runtime-core.js.map +1 -1
  527. package/dist/runtimes/external-store/external-store-thread-runtime-core.d.ts +117 -124
  528. package/dist/runtimes/external-store/external-store-thread-runtime-core.d.ts.map +1 -1
  529. package/dist/runtimes/external-store/external-store-thread-runtime-core.js +44 -14
  530. package/dist/runtimes/external-store/external-store-thread-runtime-core.js.map +1 -1
  531. package/dist/runtimes/external-store/thread-message-converter.d.ts +3 -5
  532. package/dist/runtimes/external-store/thread-message-converter.d.ts.map +1 -1
  533. package/dist/runtimes/inert/InertThreadRuntimeCore.d.ts +94 -95
  534. package/dist/runtimes/inert/InertThreadRuntimeCore.d.ts.map +1 -1
  535. package/dist/runtimes/inert/InertThreadRuntimeCore.js +3 -0
  536. package/dist/runtimes/inert/InertThreadRuntimeCore.js.map +1 -1
  537. package/dist/runtimes/internal.d.ts +20 -16
  538. package/dist/runtimes/internal.d.ts.map +1 -0
  539. package/dist/runtimes/local/local-runtime-core.d.ts +6 -8
  540. package/dist/runtimes/local/local-runtime-core.d.ts.map +1 -1
  541. package/dist/runtimes/local/local-runtime-options.d.ts +40 -42
  542. package/dist/runtimes/local/local-runtime-options.d.ts.map +1 -1
  543. package/dist/runtimes/local/local-thread-list-runtime-core.d.ts +40 -42
  544. package/dist/runtimes/local/local-thread-list-runtime-core.d.ts.map +1 -1
  545. package/dist/runtimes/local/local-thread-runtime-core.d.ts +93 -97
  546. package/dist/runtimes/local/local-thread-runtime-core.d.ts.map +1 -1
  547. package/dist/runtimes/local/local-thread-runtime-core.js +178 -31
  548. package/dist/runtimes/local/local-thread-runtime-core.js.map +1 -1
  549. package/dist/runtimes/local/should-continue.d.ts +1 -3
  550. package/dist/runtimes/local/should-continue.d.ts.map +1 -1
  551. package/dist/runtimes/readonly/ReadonlyThreadRuntimeCore.d.ts +76 -53
  552. package/dist/runtimes/readonly/ReadonlyThreadRuntimeCore.d.ts.map +1 -1
  553. package/dist/runtimes/readonly/ReadonlyThreadRuntimeCore.js +28 -1
  554. package/dist/runtimes/readonly/ReadonlyThreadRuntimeCore.js.map +1 -1
  555. package/dist/runtimes/remote-thread-list/adapter/in-memory.d.ts +11 -13
  556. package/dist/runtimes/remote-thread-list/adapter/in-memory.d.ts.map +1 -1
  557. package/dist/runtimes/remote-thread-list/adapter-changed.d.ts +2 -4
  558. package/dist/runtimes/remote-thread-list/adapter-changed.d.ts.map +1 -1
  559. package/dist/runtimes/remote-thread-list/empty-thread-core.d.ts +1 -3
  560. package/dist/runtimes/remote-thread-list/empty-thread-core.d.ts.map +1 -1
  561. package/dist/runtimes/remote-thread-list/optimistic-state.d.ts +33 -29
  562. package/dist/runtimes/remote-thread-list/optimistic-state.d.ts.map +1 -1
  563. package/dist/runtimes/remote-thread-list/optimistic-state.js +8 -3
  564. package/dist/runtimes/remote-thread-list/optimistic-state.js.map +1 -1
  565. package/dist/runtimes/remote-thread-list/remote-thread-state.d.ts +44 -46
  566. package/dist/runtimes/remote-thread-list/remote-thread-state.d.ts.map +1 -1
  567. package/dist/runtimes/remote-thread-list/remote-thread-state.js +1 -1
  568. package/dist/runtimes/remote-thread-list/title-generation.d.ts +25 -26
  569. package/dist/runtimes/remote-thread-list/title-generation.d.ts.map +1 -1
  570. package/dist/runtimes/remote-thread-list/title.d.ts +3 -5
  571. package/dist/runtimes/remote-thread-list/title.d.ts.map +1 -1
  572. package/dist/runtimes/remote-thread-list/types.d.ts +111 -112
  573. package/dist/runtimes/remote-thread-list/types.d.ts.map +1 -1
  574. package/dist/runtimes/tool-invocations/ToolInvocationTracker.d.ts +144 -145
  575. package/dist/runtimes/tool-invocations/ToolInvocationTracker.d.ts.map +1 -1
  576. package/dist/runtimes/tool-invocations/ToolInvocationTracker.js +22 -7
  577. package/dist/runtimes/tool-invocations/ToolInvocationTracker.js.map +1 -1
  578. package/dist/store/clients/chain-of-thought-client.d.ts +7 -9
  579. package/dist/store/clients/chain-of-thought-client.d.ts.map +1 -1
  580. package/dist/store/clients/external-thread.d.ts +53 -54
  581. package/dist/store/clients/external-thread.d.ts.map +1 -1
  582. package/dist/store/clients/external-thread.js +1256 -731
  583. package/dist/store/clients/external-thread.js.map +1 -1
  584. package/dist/store/clients/model-context-client.d.ts +1 -3
  585. package/dist/store/clients/model-context-client.d.ts.map +1 -1
  586. package/dist/store/clients/no-op-composer-client.d.ts +2 -4
  587. package/dist/store/clients/no-op-composer-client.d.ts.map +1 -1
  588. package/dist/store/clients/no-op-composer-client.js +3 -1
  589. package/dist/store/clients/no-op-composer-client.js.map +1 -1
  590. package/dist/store/clients/runtime-adapter.d.ts +1 -3
  591. package/dist/store/clients/runtime-adapter.d.ts.map +1 -1
  592. package/dist/store/clients/single-thread-list.d.ts +3 -4
  593. package/dist/store/clients/single-thread-list.d.ts.map +1 -1
  594. package/dist/store/clients/submission-message.d.ts +8 -0
  595. package/dist/store/clients/submission-message.d.ts.map +1 -0
  596. package/dist/store/clients/submission-message.js +22 -0
  597. package/dist/store/clients/submission-message.js.map +1 -0
  598. package/dist/store/clients/suggestions.d.ts +5 -7
  599. package/dist/store/clients/suggestions.d.ts.map +1 -1
  600. package/dist/store/clients/thread-message-client.d.ts +10 -9
  601. package/dist/store/clients/thread-message-client.d.ts.map +1 -1
  602. package/dist/store/clients/thread-message-client.js +81 -82
  603. package/dist/store/clients/thread-message-client.js.map +1 -1
  604. package/dist/store/clients/thread-selection-events.d.ts +0 -2
  605. package/dist/store/clients/thread-selection-events.d.ts.map +1 -1
  606. package/dist/store/clients/thread-tasks.d.ts +4 -6
  607. package/dist/store/clients/thread-tasks.d.ts.map +1 -1
  608. package/dist/store/env.d.ts +0 -2
  609. package/dist/store/env.d.ts.map +1 -1
  610. package/dist/store/index.d.ts +33 -36
  611. package/dist/store/index.d.ts.map +1 -0
  612. package/dist/store/index.js +5 -5
  613. package/dist/store/internal.d.ts +12 -12
  614. package/dist/store/internal.d.ts.map +1 -0
  615. package/dist/store/internal.js +2 -2
  616. package/dist/store/primitive-predicates.d.ts +3 -4
  617. package/dist/store/primitive-predicates.d.ts.map +1 -1
  618. package/dist/store/primitive-predicates.js +9 -4
  619. package/dist/store/primitive-predicates.js.map +1 -1
  620. package/dist/store/runtime-clients/attachment-runtime-client.d.ts +3 -5
  621. package/dist/store/runtime-clients/attachment-runtime-client.d.ts.map +1 -1
  622. package/dist/store/runtime-clients/composer-runtime-client.d.ts +10 -12
  623. package/dist/store/runtime-clients/composer-runtime-client.d.ts.map +1 -1
  624. package/dist/store/runtime-clients/composer-runtime-client.js +65 -62
  625. package/dist/store/runtime-clients/composer-runtime-client.js.map +1 -1
  626. package/dist/store/runtime-clients/handle-runtime-action.d.ts +0 -2
  627. package/dist/store/runtime-clients/handle-runtime-action.d.ts.map +1 -1
  628. package/dist/store/runtime-clients/handle-thread-list-action.d.ts +0 -2
  629. package/dist/store/runtime-clients/handle-thread-list-action.d.ts.map +1 -1
  630. package/dist/store/runtime-clients/liveRef.d.ts +1 -3
  631. package/dist/store/runtime-clients/liveRef.d.ts.map +1 -1
  632. package/dist/store/runtime-clients/message-part-runtime-client.d.ts +3 -5
  633. package/dist/store/runtime-clients/message-part-runtime-client.d.ts.map +1 -1
  634. package/dist/store/runtime-clients/message-part-runtime-client.js +26 -16
  635. package/dist/store/runtime-clients/message-part-runtime-client.js.map +1 -1
  636. package/dist/store/runtime-clients/message-runtime-client.d.ts +9 -9
  637. package/dist/store/runtime-clients/message-runtime-client.d.ts.map +1 -1
  638. package/dist/store/runtime-clients/message-runtime-client.js +121 -113
  639. package/dist/store/runtime-clients/message-runtime-client.js.map +1 -1
  640. package/dist/store/runtime-clients/thread-list-item-runtime-client.d.ts +4 -6
  641. package/dist/store/runtime-clients/thread-list-item-runtime-client.d.ts.map +1 -1
  642. package/dist/store/runtime-clients/thread-list-runtime-client.d.ts +5 -7
  643. package/dist/store/runtime-clients/thread-list-runtime-client.d.ts.map +1 -1
  644. package/dist/store/runtime-clients/thread-runtime-client.d.ts +3 -5
  645. package/dist/store/runtime-clients/thread-runtime-client.d.ts.map +1 -1
  646. package/dist/store/runtime-clients/thread-runtime-client.js +221 -158
  647. package/dist/store/runtime-clients/thread-runtime-client.js.map +1 -1
  648. package/dist/store/runtime-clients/useSubscribable.d.ts +2 -4
  649. package/dist/store/runtime-clients/useSubscribable.d.ts.map +1 -1
  650. package/dist/store/scope-registration.d.ts +28 -29
  651. package/dist/store/scope-registration.d.ts.map +1 -1
  652. package/dist/store/scopes/attachment.d.ts +15 -17
  653. package/dist/store/scopes/attachment.d.ts.map +1 -1
  654. package/dist/store/scopes/chain-of-thought.d.ts +28 -29
  655. package/dist/store/scopes/chain-of-thought.d.ts.map +1 -1
  656. package/dist/store/scopes/composer.d.ts +141 -128
  657. package/dist/store/scopes/composer.d.ts.map +1 -1
  658. package/dist/store/scopes/message.d.ts +114 -107
  659. package/dist/store/scopes/message.d.ts.map +1 -1
  660. package/dist/store/scopes/model-context.d.ts +7 -9
  661. package/dist/store/scopes/model-context.d.ts.map +1 -1
  662. package/dist/store/scopes/part.d.ts +49 -45
  663. package/dist/store/scopes/part.d.ts.map +1 -1
  664. package/dist/store/scopes/queue-item.d.ts +18 -20
  665. package/dist/store/scopes/queue-item.d.ts.map +1 -1
  666. package/dist/store/scopes/suggestion.d.ts +10 -12
  667. package/dist/store/scopes/suggestion.d.ts.map +1 -1
  668. package/dist/store/scopes/suggestions.d.ts +13 -15
  669. package/dist/store/scopes/suggestions.d.ts.map +1 -1
  670. package/dist/store/scopes/task.d.ts +23 -25
  671. package/dist/store/scopes/task.d.ts.map +1 -1
  672. package/dist/store/scopes/thread-list-item.d.ts +63 -65
  673. package/dist/store/scopes/thread-list-item.d.ts.map +1 -1
  674. package/dist/store/scopes/thread.d.ts +192 -194
  675. package/dist/store/scopes/thread.d.ts.map +1 -1
  676. package/dist/store/scopes/threads.d.ts +45 -47
  677. package/dist/store/scopes/threads.d.ts.map +1 -1
  678. package/dist/subscribable/subscribable.d.ts +58 -53
  679. package/dist/subscribable/subscribable.d.ts.map +1 -1
  680. package/dist/subscribable/subscribable.js +35 -7
  681. package/dist/subscribable/subscribable.js.map +1 -1
  682. package/dist/types/attachment.d.ts +26 -27
  683. package/dist/types/attachment.d.ts.map +1 -1
  684. package/dist/types/augmentations.d.ts +4 -4
  685. package/dist/types/augmentations.d.ts.map +1 -1
  686. package/dist/types/directive.d.ts +11 -13
  687. package/dist/types/directive.d.ts.map +1 -1
  688. package/dist/types/error.d.ts +7 -8
  689. package/dist/types/error.d.ts.map +1 -1
  690. package/dist/types/index.d.ts +7 -7
  691. package/dist/types/index.d.ts.map +1 -0
  692. package/dist/types/message.d.ts +322 -284
  693. package/dist/types/message.d.ts.map +1 -1
  694. package/dist/types/message.js.map +1 -1
  695. package/dist/types/quote.d.ts +2 -4
  696. package/dist/types/quote.d.ts.map +1 -1
  697. package/dist/types/trigger.d.ts +8 -10
  698. package/dist/types/trigger.d.ts.map +1 -1
  699. package/dist/types/unsubscribe.d.ts +0 -2
  700. package/dist/types/unsubscribe.d.ts.map +1 -1
  701. package/dist/utils/abortable-iterable.d.ts +0 -2
  702. package/dist/utils/abortable-iterable.d.ts.map +1 -1
  703. package/dist/utils/composite-context-provider.d.ts +8 -11
  704. package/dist/utils/composite-context-provider.d.ts.map +1 -1
  705. package/dist/utils/data-url.d.ts +10 -12
  706. package/dist/utils/data-url.d.ts.map +1 -1
  707. package/dist/utils/getGroupStatus.d.ts +17 -18
  708. package/dist/utils/getGroupStatus.d.ts.map +1 -1
  709. package/dist/utils/id.d.ts +0 -2
  710. package/dist/utils/id.d.ts.map +1 -1
  711. package/dist/utils/image-media-type.d.ts +0 -2
  712. package/dist/utils/image-media-type.d.ts.map +1 -1
  713. package/dist/utils/invoke-user-callback.d.ts +0 -2
  714. package/dist/utils/invoke-user-callback.d.ts.map +1 -1
  715. package/dist/utils/json/is-json-equal.d.ts +0 -2
  716. package/dist/utils/json/is-json-equal.d.ts.map +1 -1
  717. package/dist/utils/json/is-json.d.ts +1 -3
  718. package/dist/utils/json/is-json.d.ts.map +1 -1
  719. package/dist/utils/json/stable-stringify-tool-args.d.ts +1 -3
  720. package/dist/utils/json/stable-stringify-tool-args.d.ts.map +1 -1
  721. package/dist/utils/normalizePartStatus.d.ts +2 -3
  722. package/dist/utils/normalizePartStatus.d.ts.map +1 -1
  723. package/dist/utils/normalizePartStatus.js +3 -2
  724. package/dist/utils/normalizePartStatus.js.map +1 -1
  725. package/dist/utils/notify-event-listeners.d.ts +1 -2
  726. package/dist/utils/notify-event-listeners.d.ts.map +1 -1
  727. package/dist/utils/record.d.ts +0 -2
  728. package/dist/utils/record.d.ts.map +1 -1
  729. package/dist/utils/silent-runtime-action.d.ts +0 -2
  730. package/dist/utils/silent-runtime-action.d.ts.map +1 -1
  731. package/dist/utils/text.d.ts +1 -3
  732. package/dist/utils/text.d.ts.map +1 -1
  733. package/dist/utils/wire-media.d.ts +0 -2
  734. package/dist/utils/wire-media.d.ts.map +1 -1
  735. package/package.json +11 -10
  736. package/src/adapters/attachment.test.ts +98 -1
  737. package/src/adapters/attachment.ts +70 -20
  738. package/src/adapters/speech.test.ts +94 -0
  739. package/src/adapters/speech.ts +16 -2
  740. package/src/adapters/thread-history.ts +16 -5
  741. package/src/adapters/voice.test.ts +169 -0
  742. package/src/adapters/voice.ts +25 -4
  743. package/src/index.ts +14 -2
  744. package/src/internal.ts +7 -0
  745. package/src/model-context/frame/host.test.ts +51 -1
  746. package/src/model-context/frame/host.ts +3 -1
  747. package/src/model-context/frame/provider.test.ts +61 -0
  748. package/src/model-context/frame/provider.ts +8 -1
  749. package/src/model-context/frame/validate.ts +57 -0
  750. package/src/model-context/interactable-composer-metadata.test.ts +82 -0
  751. package/src/model-context/interactable-composer-metadata.ts +45 -2
  752. package/src/react/adapters/LocalStorageThreadListAdapter.test.ts +594 -0
  753. package/src/react/adapters/LocalStorageThreadListAdapter.tsx +98 -35
  754. package/src/react/client/Interactables.test.ts +853 -1
  755. package/src/react/client/Interactables.ts +325 -45
  756. package/src/react/client/RemoteThreadList.initialize-failure.test.ts +124 -0
  757. package/src/react/client/RemoteThreadList.ts +6 -0
  758. package/src/react/client/Tools.ts +2 -3
  759. package/src/react/client/interactable-model-context.test.ts +56 -13
  760. package/src/react/client/interactable-model-context.ts +48 -23
  761. package/src/react/index.ts +2 -2
  762. package/src/react/interactables-legacy/Interactables.test.ts +212 -1
  763. package/src/react/interactables-legacy/Interactables.ts +25 -14
  764. package/src/react/interactables-legacy/interactable-model-context.ts +26 -24
  765. package/src/react/interactables-shared/useInteractablePersistenceQueue.test.tsx +22 -2
  766. package/src/react/interactables-shared/useInteractablePersistenceQueue.ts +63 -11
  767. package/src/react/primitive-hooks/useSuggestionTrigger.test.ts +33 -0
  768. package/src/react/primitive-hooks/useSuggestionTrigger.ts +7 -4
  769. package/src/react/primitives/generativeUI/GenerativeUI.test.tsx +124 -8
  770. package/src/react/primitives/generativeUI/GenerativeUI.tsx +35 -15
  771. package/src/react/primitives/message/MessageAttachments.test.tsx +2 -6
  772. package/src/react/primitives/message/MessageAttachments.tsx +14 -8
  773. package/src/react/primitives/message/MessageGroupedParts.test.tsx +151 -7
  774. package/src/react/primitives/message/MessageGroupedParts.tsx +19 -6
  775. package/src/react/primitives/message/MessageParts.test.tsx +84 -0
  776. package/src/react/primitives/message/MessageParts.tool-interaction.test.tsx +69 -0
  777. package/src/react/primitives/message/MessageParts.tsx +29 -8
  778. package/src/react/primitives/thread/ThreadSuggestions.test.tsx +97 -0
  779. package/src/react/primitives/thread/ThreadSuggestions.tsx +29 -6
  780. package/src/react/providers/ReadonlyThreadProvider.tsx +2 -2
  781. package/src/react/providers/TextMessagePartProvider.tsx +3 -0
  782. package/src/react/runtimes/RemoteThreadListHookInstanceManager.running.test.tsx +93 -0
  783. package/src/react/runtimes/RemoteThreadListHookInstanceManager.test.tsx +160 -3
  784. package/src/react/runtimes/RemoteThreadListHookInstanceManager.title.test.tsx +38 -0
  785. package/src/react/runtimes/RemoteThreadListHookInstanceManager.tsx +73 -53
  786. package/src/react/runtimes/RemoteThreadListThreadListRuntimeCore.tsx +19 -3
  787. package/src/react/runtimes/RemoteThreadResource.ts +5 -2
  788. package/src/react/runtimes/assistant-transport/replayBoundaryStream.test.ts +3 -1
  789. package/src/react/runtimes/assistant-transport/replayBoundaryStream.ts +10 -2
  790. package/src/react/runtimes/assistant-transport/runManager.ts +3 -0
  791. package/src/react/runtimes/assistant-transport/transport-parentid.test.tsx +57 -0
  792. package/src/react/runtimes/assistant-transport/transport-thread-id.test.tsx +571 -0
  793. package/src/react/runtimes/assistant-transport/types.ts +9 -1
  794. package/src/react/runtimes/assistant-transport/useAssistantTransport.spec.md +10 -0
  795. package/src/react/runtimes/assistant-transport/useAssistantTransportRuntime.test.tsx +42 -0
  796. package/src/react/runtimes/assistant-transport/useAssistantTransportRuntime.ts +33 -9
  797. package/src/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.copy.integration.test.tsx +289 -0
  798. package/src/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.copy.test.tsx +471 -0
  799. package/src/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.engagement.test.tsx +330 -0
  800. package/src/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.test.ts +78 -2
  801. package/src/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.test.tsx +361 -2
  802. package/src/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.ts +571 -216
  803. package/src/react/runtimes/cloud/CloudFileAttachmentAdapter.test.ts +25 -0
  804. package/src/react/runtimes/cloud/CloudFileAttachmentAdapter.ts +7 -3
  805. package/src/react/runtimes/cloud/auiV0.ts +158 -9
  806. package/src/react/runtimes/cloud/auiV0DecodeSafely.test.ts +352 -1
  807. package/src/react/runtimes/createMessageConverter.ts +9 -3
  808. package/src/react/runtimes/external-store-history-copy.ts +223 -0
  809. package/src/react/runtimes/useExternalStoreRuntime.history-copy.test.tsx +483 -0
  810. package/src/react/runtimes/useExternalStoreRuntime.lifecycle.test.tsx +76 -1
  811. package/src/react/runtimes/useExternalStoreRuntime.ts +25 -5
  812. package/src/react/runtimes/useLocalRuntime.test.tsx +145 -1
  813. package/src/react/runtimes/useLocalRuntime.ts +8 -5
  814. package/src/react/types/MessagePartComponentTypes.ts +10 -0
  815. package/src/react/types/scopes/interactables.ts +3 -0
  816. package/src/runtime/api/attachment-runtime.ts +10 -5
  817. package/src/runtime/api/bindings.ts +6 -1
  818. package/src/runtime/api/composer-runtime.ts +29 -6
  819. package/src/runtime/api/message-part-runtime.test.ts +215 -0
  820. package/src/runtime/api/message-part-runtime.ts +40 -0
  821. package/src/runtime/api/message-runtime.test.ts +112 -2
  822. package/src/runtime/api/message-runtime.ts +10 -5
  823. package/src/runtime/api/thread-list-item-runtime.ts +5 -5
  824. package/src/runtime/api/thread-list-runtime.ts +3 -3
  825. package/src/runtime/api/thread-runtime.test.ts +59 -0
  826. package/src/runtime/api/thread-runtime.ts +21 -11
  827. package/src/runtime/base/base-composer-runtime-core.ts +548 -153
  828. package/src/runtime/base/base-thread-runtime-core.test.ts +744 -9
  829. package/src/runtime/base/base-thread-runtime-core.ts +154 -27
  830. package/src/runtime/base/default-edit-composer-runtime-core.ts +13 -1
  831. package/src/runtime/base/default-thread-composer-runtime-core.ts +29 -10
  832. package/src/runtime/interfaces/composer-runtime-core.ts +19 -0
  833. package/src/runtime/interfaces/thread-runtime-core.ts +22 -1
  834. package/src/runtime/utils/attachment-add-operations.ts +45 -2
  835. package/src/runtime/utils/attachment-send-operations.ts +54 -0
  836. package/src/runtime/utils/auto-status.test.ts +54 -0
  837. package/src/runtime/utils/auto-status.ts +3 -10
  838. package/src/runtime/utils/external-message-conversion.test.ts +48 -0
  839. package/src/runtime/utils/external-message-conversion.ts +3 -4
  840. package/src/runtime/utils/message-repository.test.ts +69 -1
  841. package/src/runtime/utils/message-repository.ts +14 -7
  842. package/src/runtime/utils/stored-message-parts.ts +43 -1
  843. package/src/runtime/utils/thread-message-like.test.ts +58 -0
  844. package/src/runtime/utils/thread-message-like.ts +72 -46
  845. package/src/runtime/utils/thread-runtime-lifecycle.test.ts +67 -0
  846. package/src/runtime/utils/thread-runtime-lifecycle.ts +42 -8
  847. package/src/runtime/utils/tool-interactions.test.ts +193 -0
  848. package/src/runtime/utils/tool-interactions.ts +147 -0
  849. package/src/runtimes/external-store/external-store-adapter.ts +22 -1
  850. package/src/runtimes/external-store/external-store-runtime-core.ts +10 -2
  851. package/src/runtimes/external-store/external-store-thread-list-runtime-core.ts +2 -2
  852. package/src/runtimes/external-store/external-store-thread-runtime-core.test.ts +49 -0
  853. package/src/runtimes/external-store/external-store-thread-runtime-core.ts +76 -29
  854. package/src/runtimes/inert/InertThreadRuntimeCore.test.ts +127 -56
  855. package/src/runtimes/inert/InertThreadRuntimeCore.ts +10 -1
  856. package/src/runtimes/local/local-thread-runtime-core.edit-cancellation.test.ts +70 -0
  857. package/src/runtimes/local/local-thread-runtime-core.test.ts +1649 -108
  858. package/src/runtimes/local/local-thread-runtime-core.ts +301 -47
  859. package/src/runtimes/readonly/ReadonlyThreadRuntimeCore.ts +53 -1
  860. package/src/runtimes/remote-thread-list/optimistic-state.ts +8 -3
  861. package/src/runtimes/tool-invocations/EDGE_CASES.md +19 -4
  862. package/src/runtimes/tool-invocations/ToolInvocationTracker.test.ts +392 -39
  863. package/src/runtimes/tool-invocations/ToolInvocationTracker.ts +31 -8
  864. package/src/store/clients/external-thread.test.ts +145 -0
  865. package/src/store/clients/external-thread.ts +635 -131
  866. package/src/store/clients/model-context-client.test.ts +8 -8
  867. package/src/store/clients/no-op-composer-client.ts +2 -0
  868. package/src/store/clients/submission-message.ts +27 -0
  869. package/src/store/clients/thread-message-client.test.ts +39 -0
  870. package/src/store/clients/thread-message-client.ts +13 -6
  871. package/src/store/index.ts +2 -2
  872. package/src/store/internal.ts +1 -0
  873. package/src/store/primitive-predicates.test.ts +103 -0
  874. package/src/store/primitive-predicates.ts +15 -3
  875. package/src/store/runtime-clients/composer-runtime-client.ts +4 -3
  876. package/src/store/runtime-clients/message-part-runtime-client.test.ts +42 -0
  877. package/src/store/runtime-clients/message-part-runtime-client.ts +4 -0
  878. package/src/store/runtime-clients/message-runtime-client.ts +5 -0
  879. package/src/store/runtime-clients/thread-runtime-client.test.tsx +138 -5
  880. package/src/store/runtime-clients/thread-runtime-client.ts +46 -9
  881. package/src/store/scopes/composer.ts +22 -4
  882. package/src/store/scopes/message.ts +8 -0
  883. package/src/store/scopes/part.ts +8 -0
  884. package/src/subscribable/subscribable.test.ts +198 -1
  885. package/src/subscribable/subscribable.ts +49 -7
  886. package/src/tests/RemoteThreadListThreadListRuntimeCore-errors.test.ts +95 -1
  887. package/src/tests/auiV0Encode.test.ts +408 -1
  888. package/src/tests/base-composer-runtime-core-send.test.ts +722 -29
  889. package/src/tests/base-composer-runtime-core.test.ts +196 -0
  890. package/src/tests/composer-can-send.test.ts +98 -1
  891. package/src/tests/composer-submission.test.tsx +796 -0
  892. package/src/tests/default-edit-composer-runtime-core.test.ts +102 -2
  893. package/src/tests/external-store-thread-list-runtime-core.test.ts +111 -0
  894. package/src/tests/external-store-thread-runtime-core-adapter.test.ts +581 -1
  895. package/src/tests/external-store-thread-runtime-core.test.ts +186 -0
  896. package/src/tests/external-thread-attachments.test.tsx +741 -3
  897. package/src/tests/external-thread-isLast.test.tsx +69 -0
  898. package/src/tests/get-thread-state-isRunning.test.ts +2 -2
  899. package/src/tests/remote-thread-list-adapter-switch.test.ts +45 -1
  900. package/src/types/message.ts +49 -2
  901. package/src/utils/normalizePartStatus.ts +14 -1
  902. package/dist/tests/remote-thread-list-test-helpers.d.ts +0 -15
  903. package/dist/tests/remote-thread-list-test-helpers.d.ts.map +0 -1
  904. package/dist/tests/remote-thread-list-test-helpers.js +0 -59
  905. package/dist/tests/remote-thread-list-test-helpers.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"RemoteThreadListThreadListRuntimeCore.js","names":["ThreadListRuntimeCore","ThreadListRuntimeEvent","BaseSubscribable","WritableSubscribable","useSubscribable","nullProtoRecord","OptimisticState","EMPTY_THREAD_CORE","ClassifyAccumulator","RemoteThreadData","RemoteThreadState","classifyThreads","createEmptyRemoteThreadState","createThreadMappingId","getThreadData","normalizeCursor","reconcileInitializedThread","promoteNewThreadReducer","updateStatusReducer","preserveMidLoadTransitions","seedNewThread","statusSnapshot","RemoteThreadListAdapter","RemoteThreadListOptions","RemoteThreadMetadata","ThreadListAdapterChangedError","RemoteThreadListHookInstanceManager","applyTitleStream","isTitleSourceMessage","clearThreadTitleState","finishThreadTitleRename","runThreadTitleGeneration","startThreadTitleRename","ThreadTitleState","ComponentType","FC","Fragment","PropsWithChildren","useEffect","useId","useAui","ModelContextProvider","RuntimeAdapterProvider","useStableRuntimeAdapters","invokeUserCallback","threadNotFoundError","threadIdOrRemoteId","action","Error","threadStatusError","status","EMPTY_REMOTE_STATE","RemoteThreadListThreadListRuntimeCore","_options","_hookManager","_runtimeAdapters","modelContext","_loadThreadsPromise","Promise","_loadMorePromise","_loadGeneration","_adapterGeneration","_replaceListOnNextLoad","_staleThreadIdsOnReplace","ReadonlySet","_switchGeneration","_switchTask","_titleStates","Map","_mainThreadId","_state","_useAdaptersProvider","children","useAdapters","adapter","unstable_useAdapters","undefined","_SynthesizedAdapters","NonNullable","adapters","resolveProvider","unstable_Provider","threadItems","value","threadData","getLoadThreadsPromise","generation","replacedList","statusAtRequest","baseValue","optimisticUpdate","execute","list","loading","state","isLoading","loadError","then","l","replaceList","_replaceWithThreads","threads","nextCursor","fresh","threadIds","archivedThreadIds","threadIdMap","merged","cursor","catch","error","console","update","threadId","getItemById","id","_switchToThreadFromProp","loadMore","initialState","resolve","dedup","after","isLoadingMore","appended","constructor","options","contextProvider","subscribe","_notifySubscribers","_notifyThreadIdChange","runtimeHook","__internal_setDefaultAdapters","__internal_subscribeRunningChanged","__internal_subscribeRuntimeReplaced","queueMicrotask","providerStore","__internal_setOptions","switchToNewThread","_initialThreadLoaded","adapterChanged","controlledThreadIdChanged","setState","setRuntimeHook","Set","Object","values","filter","item","map","clear","_requireAdapterGeneration","_requireAdapterSettled","carried","newThreadId","mappingId","hasOwn","draft","push","stale","has","remoteId","seed","currentMappingId","current","includes","nextState","preservedDraft","seeded","_lastNotifiedThreadId","nextIds","stopThreadRuntime","startThreadRuntime","__internal_load","startThreadId","initialThreadId","switchTask","switchToThread","reloadMainThread","runtimeCore","getThreadRuntimeCore","unstable_refetchThread","__internal_restartThreadRuntime","reload","hasMore","mainThreadId","_mainThreadRemoteId","emit","onThreadIdChange","getMainThreadRuntimeCore","result","data","unstable_isThreadRunning","__internal_isThreadRunning","unstable_subscribeThreadEvents","callback","event","__internal_subscribeThreadEvents","unarchive","_startSwitchToThread","emitThreadIdChange","task","_switchToThread","remoteMetadata","fetch","newThreadData","initializeTask","externalId","title","lastMessageAt","custom","newThreadIdMap","wasInTarget","threadIdsWithoutRemote","archivedThreadIdsWithoutRemote","newThreadIds","newArchivedThreadIds","_startSwitchToNewThread","_switchToNewThread","waitForUpdate","next","initialize","adapterGeneration","removedMappingId","optimistic","reconciliation","survivorMappingId","generateTitle","automatic","messages","states","generate","onTitle","stream","rename","applyTitle","currentData","newTitle","claim","updateCustom","Record","_ensureThreadIsNotMain","lastAwaitedTask","startedFallback","archive","delete","__internal_dispose","detach","boundIdsStore","__internal_RenderComponent","getState","i","boundIds","Provider","aui","enabled","length"],"sources":["../../../src/react/runtimes/RemoteThreadListThreadListRuntimeCore.tsx"],"sourcesContent":["import type {\n ThreadListRuntimeCore,\n ThreadListRuntimeEvent,\n} from \"../../runtime/interfaces/thread-list-runtime-core\";\nimport {\n BaseSubscribable,\n WritableSubscribable,\n} from \"../../subscribable/subscribable\";\nimport { useSubscribable } from \"../../store/runtime-clients/useSubscribable\";\nimport { nullProtoRecord } from \"../../utils/record\";\nimport { OptimisticState } from \"../../runtimes/remote-thread-list/optimistic-state\";\nimport { EMPTY_THREAD_CORE } from \"../../runtimes/remote-thread-list/empty-thread-core\";\nimport type {\n ClassifyAccumulator,\n RemoteThreadData,\n RemoteThreadState,\n} from \"../../runtimes/remote-thread-list/remote-thread-state\";\nimport {\n classifyThreads,\n createEmptyRemoteThreadState,\n createThreadMappingId,\n getThreadData,\n normalizeCursor,\n reconcileInitializedThread,\n promoteNewThreadReducer,\n updateStatusReducer,\n preserveMidLoadTransitions,\n seedNewThread,\n statusSnapshot,\n} from \"../../runtimes/remote-thread-list/remote-thread-state\";\nimport type {\n RemoteThreadListAdapter,\n RemoteThreadListOptions,\n RemoteThreadMetadata,\n} from \"../../runtimes/remote-thread-list/types\";\nimport { ThreadListAdapterChangedError } from \"../../runtimes/remote-thread-list/adapter-changed\";\nimport { RemoteThreadListHookInstanceManager } from \"./RemoteThreadListHookInstanceManager\";\nimport {\n applyTitleStream,\n isTitleSourceMessage,\n} from \"../../runtimes/remote-thread-list/title\";\nimport {\n clearThreadTitleState,\n finishThreadTitleRename,\n runThreadTitleGeneration,\n startThreadTitleRename,\n type ThreadTitleState,\n} from \"../../runtimes/remote-thread-list/title-generation\";\nimport {\n type ComponentType,\n type FC,\n Fragment,\n type PropsWithChildren,\n useEffect,\n useId,\n} from \"react\";\nimport { useAui } from \"@assistant-ui/store\";\nimport type { ModelContextProvider } from \"../../model-context/types\";\nimport { RuntimeAdapterProvider } from \"./RuntimeAdapterProvider\";\nimport { useStableRuntimeAdapters } from \"./useRuntimeAdapters\";\nimport { invokeUserCallback } from \"../../utils/invoke-user-callback\";\n\nconst threadNotFoundError = (threadIdOrRemoteId: string, action: string) =>\n new Error(`Thread \"${threadIdOrRemoteId}\" not found while ${action}.`);\n\nconst threadStatusError = (\n threadIdOrRemoteId: string,\n status: RemoteThreadData[\"status\"],\n action: string,\n) =>\n new Error(\n `Thread \"${threadIdOrRemoteId}\" has status \"${status}\", so it cannot ${action}.`,\n );\n\nconst EMPTY_REMOTE_STATE = createEmptyRemoteThreadState();\n\nexport class RemoteThreadListThreadListRuntimeCore\n extends BaseSubscribable\n implements ThreadListRuntimeCore\n{\n private _options!: RemoteThreadListOptions;\n private readonly _hookManager: RemoteThreadListHookInstanceManager;\n private readonly _runtimeAdapters: { modelContext: ModelContextProvider };\n\n private _loadThreadsPromise: Promise<void> | undefined;\n private _loadMorePromise: Promise<void> | undefined;\n private _loadGeneration = 0;\n private _adapterGeneration = 0;\n private _replaceListOnNextLoad = false;\n private _staleThreadIdsOnReplace: ReadonlySet<string> | undefined;\n private _switchGeneration = 0;\n private _switchTask: Promise<void> | undefined;\n private readonly _titleStates = new Map<string, ThreadTitleState>();\n\n private _mainThreadId!: string;\n private readonly _state = new OptimisticState<RemoteThreadState>(\n EMPTY_REMOTE_STATE,\n );\n\n private readonly _useAdaptersProvider: FC<PropsWithChildren> = ({\n children,\n }) => {\n const useAdapters = this._options.adapter.unstable_useAdapters;\n if (useAdapters === undefined) return children;\n return (\n <this._SynthesizedAdapters useAdapters={useAdapters}>\n {children}\n </this._SynthesizedAdapters>\n );\n };\n\n private readonly _SynthesizedAdapters: FC<\n PropsWithChildren<{\n useAdapters: NonNullable<RemoteThreadListAdapter[\"unstable_useAdapters\"]>;\n }>\n > = ({ useAdapters, children }) => {\n const adapters = useStableRuntimeAdapters(useAdapters());\n if (adapters == null) return children;\n return (\n <RuntimeAdapterProvider adapters={adapters}>\n {children}\n </RuntimeAdapterProvider>\n );\n };\n\n private resolveProvider(\n adapter: RemoteThreadListAdapter,\n ): ComponentType<PropsWithChildren> {\n if (adapter.unstable_Provider !== undefined) {\n return adapter.unstable_Provider as ComponentType<PropsWithChildren>;\n }\n if (adapter.unstable_useAdapters === undefined) return Fragment;\n return this._useAdaptersProvider;\n }\n\n public get threadItems() {\n return this._state.value.threadData;\n }\n\n public getLoadThreadsPromise() {\n // TODO this needs to be cached in case this promise is loaded during suspense\n if (!this._loadThreadsPromise) {\n const generation = this._loadGeneration;\n let replacedList = false;\n const statusAtRequest = statusSnapshot(this._state.baseValue);\n this._loadThreadsPromise = this._state\n .optimisticUpdate({\n execute: () => this._options.adapter.list(),\n loading: (state) => {\n if (generation !== this._loadGeneration) return state;\n return {\n ...state,\n isLoading: true,\n loadError: undefined,\n };\n },\n then: (state, l) => {\n if (generation !== this._loadGeneration) return state;\n const replaceList = this._replaceListOnNextLoad;\n if (replaceList) {\n this._replaceListOnNextLoad = false;\n replacedList = true;\n return this._replaceWithThreads(\n { ...state, loadError: undefined },\n l.threads,\n normalizeCursor(l.nextCursor),\n );\n }\n\n const fresh = classifyThreads(l.threads, {\n threadIds: [],\n archivedThreadIds: [],\n threadIdMap: { ...state.threadIdMap },\n threadData: { ...state.threadData },\n });\n const merged = {\n ...state,\n isLoading: false,\n loadError: undefined,\n cursor: normalizeCursor(l.nextCursor),\n threadIds: fresh.threadIds,\n archivedThreadIds: fresh.archivedThreadIds,\n threadIdMap: fresh.threadIdMap,\n threadData: fresh.threadData,\n };\n return preserveMidLoadTransitions(merged, state, statusAtRequest);\n },\n })\n .catch((error: unknown) => {\n if (generation !== this._loadGeneration) return;\n console.error(\"[assistant-ui] thread list load failed:\", error);\n this._loadThreadsPromise = undefined;\n if (!this._replaceListOnNextLoad) {\n this._state.update({\n ...this._state.baseValue,\n isLoading: false,\n loadError: error,\n });\n return;\n }\n this._replaceListOnNextLoad = false;\n replacedList = true;\n this._state.update(\n this._replaceWithThreads(\n { ...this._state.baseValue, loadError: error },\n [],\n undefined,\n ),\n );\n })\n .then(() => {\n if (!replacedList) return;\n const threadId = this._options.threadId;\n if (threadId === undefined) return;\n if (this.getItemById(threadId)?.id === this._mainThreadId) return;\n this._switchToThreadFromProp(threadId).catch(() => {});\n });\n }\n\n return this._loadThreadsPromise;\n }\n\n public loadMore(): Promise<void> {\n if (this._loadMorePromise) return this._loadMorePromise;\n\n const initialState = this._state.value;\n if (initialState.cursor === undefined || initialState.isLoading) {\n return Promise.resolve();\n }\n\n const generation = this._loadGeneration;\n const adapter = this._options.adapter;\n const cursor = initialState.cursor;\n\n const dedup = this._state\n .optimisticUpdate({\n execute: () => adapter.list({ after: cursor }),\n loading: (state) => {\n if (generation !== this._loadGeneration) return state;\n return { ...state, isLoadingMore: true };\n },\n then: (state, l) => {\n if (generation !== this._loadGeneration) return state;\n if (adapter !== this._options.adapter) return state;\n\n const appended = classifyThreads(l.threads, {\n threadIds: [...state.threadIds],\n archivedThreadIds: [...state.archivedThreadIds],\n threadIdMap: { ...state.threadIdMap },\n threadData: { ...state.threadData },\n });\n\n return {\n ...state,\n isLoadingMore: false,\n cursor: normalizeCursor(l.nextCursor),\n threadIds: appended.threadIds,\n archivedThreadIds: appended.archivedThreadIds,\n threadIdMap: appended.threadIdMap,\n threadData: appended.threadData,\n };\n },\n })\n .catch((error: unknown) => {\n if (generation !== this._loadGeneration) return;\n console.error(\"[assistant-ui] thread list loadMore failed:\", error);\n })\n .then(() => {\n if (this._loadMorePromise === dedup) {\n this._loadMorePromise = undefined;\n }\n });\n\n this._loadMorePromise = dedup;\n return dedup;\n }\n\n constructor(\n options: RemoteThreadListOptions,\n contextProvider: ModelContextProvider,\n ) {\n super();\n\n this._state.subscribe(() => {\n this._notifySubscribers();\n this._notifyThreadIdChange();\n });\n this._runtimeAdapters = { modelContext: contextProvider };\n this._hookManager = new RemoteThreadListHookInstanceManager(\n options.runtimeHook,\n this,\n );\n this._hookManager.__internal_setDefaultAdapters(this._runtimeAdapters);\n this._hookManager.__internal_subscribeRunningChanged(() =>\n this._notifySubscribers(),\n );\n this._hookManager.__internal_subscribeRuntimeReplaced(() => {\n // A republish can land during the thread resource's render, where a\n // synchronous notify would re-enter store consumers mid-render.\n queueMicrotask(() => this._notifySubscribers());\n });\n this.providerStore = new WritableSubscribable(\n this.resolveProvider(options.adapter),\n );\n this.__internal_setOptions(options);\n this.switchToNewThread();\n }\n\n private _initialThreadLoaded = false;\n private providerStore;\n\n public __internal_setOptions(options: RemoteThreadListOptions) {\n if (this._options === options) return;\n\n const adapterChanged =\n this._options !== undefined && this._options.adapter !== options.adapter;\n const controlledThreadIdChanged =\n this._initialThreadLoaded &&\n this._options !== undefined &&\n this._options.threadId !== options.threadId;\n\n this._options = options;\n\n this.providerStore.setState(this.resolveProvider(options.adapter));\n\n this._hookManager.setRuntimeHook(options.runtimeHook);\n\n if (adapterChanged) {\n this._loadGeneration++;\n this._adapterGeneration++;\n this._switchGeneration++;\n this._switchTask = undefined;\n this._loadThreadsPromise = undefined;\n this._loadMorePromise = undefined;\n this._replaceListOnNextLoad = true;\n this._staleThreadIdsOnReplace = new Set(\n Object.values(this._state.baseValue.threadData)\n .filter((item) => item.status !== \"new\")\n .map((item) => item.id),\n );\n this._state.update({\n ...this._state.baseValue,\n cursor: undefined,\n loadError: undefined,\n });\n this._titleStates.clear();\n }\n\n if (controlledThreadIdChanged) {\n this._switchToThreadFromProp(options.threadId).catch(() => {});\n }\n }\n\n private _requireAdapterGeneration(generation: number) {\n if (generation !== this._adapterGeneration) {\n throw new ThreadListAdapterChangedError();\n }\n }\n\n private _requireAdapterSettled() {\n if (this._replaceListOnNextLoad) {\n throw new ThreadListAdapterChangedError();\n }\n }\n\n private _replaceWithThreads(\n state: RemoteThreadState,\n threads: readonly RemoteThreadMetadata[],\n cursor: string | undefined,\n ): RemoteThreadState {\n const carried: RemoteThreadData[] = [];\n if (state.newThreadId) {\n const mappingId = Object.hasOwn(state.threadIdMap, state.newThreadId)\n ? state.threadIdMap[state.newThreadId]\n : undefined;\n const draft =\n mappingId && Object.hasOwn(state.threadData, mappingId)\n ? state.threadData[mappingId]\n : undefined;\n if (draft?.status === \"new\") carried.push(draft);\n }\n\n const stale = this._staleThreadIdsOnReplace;\n if (stale) {\n for (const item of Object.values(state.threadData)) {\n if (stale.has(item.id)) continue;\n if (item.status !== \"new\" && item.remoteId === undefined) continue;\n carried.push(item);\n }\n }\n this._staleThreadIdsOnReplace = undefined;\n\n const seed: ClassifyAccumulator = {\n threadIds: [],\n archivedThreadIds: [],\n threadIdMap: nullProtoRecord(),\n threadData: nullProtoRecord(),\n };\n for (const item of carried) {\n const mappingId = createThreadMappingId(item.id);\n if (Object.hasOwn(seed.threadData, mappingId)) continue;\n seed.threadIdMap[item.id] = mappingId;\n if (item.remoteId !== undefined) {\n seed.threadIdMap[item.remoteId] = mappingId;\n }\n seed.threadData[mappingId] = item;\n }\n\n const { threadIds, archivedThreadIds, threadIdMap, threadData } =\n classifyThreads(threads, seed);\n\n for (const item of carried) {\n if (item.remoteId === undefined) continue;\n const currentMappingId = createThreadMappingId(item.id);\n const current = Object.hasOwn(threadData, currentMappingId)\n ? threadData[currentMappingId]\n : undefined;\n if (current === undefined) continue;\n if (current.status === \"regular\" && !threadIds.includes(current.id)) {\n threadIds.push(current.id);\n } else if (\n current.status === \"archived\" &&\n !archivedThreadIds.includes(current.id)\n ) {\n archivedThreadIds.push(current.id);\n }\n }\n\n let nextState: RemoteThreadState = {\n ...state,\n isLoading: false,\n cursor,\n threadIds,\n archivedThreadIds,\n threadIdMap,\n threadData,\n newThreadId:\n state.newThreadId !== undefined &&\n !Object.hasOwn(threadIdMap, state.newThreadId)\n ? undefined\n : state.newThreadId,\n };\n\n if (getThreadData(nextState, this._mainThreadId) === undefined) {\n const preservedDraft = nextState.newThreadId;\n if (preservedDraft !== undefined) {\n this._mainThreadId = preservedDraft;\n } else {\n const seeded = seedNewThread(nextState);\n this._mainThreadId = seeded.id;\n nextState = seeded.state;\n }\n if (this._options.threadId === undefined) {\n this._notifyThreadIdChange();\n } else {\n this._lastNotifiedThreadId = undefined;\n }\n }\n\n const nextIds = new Set(\n Object.values(nextState.threadData).map((item) => item.id),\n );\n for (const item of Object.values(state.threadData)) {\n if (!nextIds.has(item.id)) {\n this._hookManager.stopThreadRuntime(item.id);\n }\n }\n void this._hookManager.startThreadRuntime(this._mainThreadId).then(\n () => this._notifySubscribers(),\n () => undefined,\n );\n\n return nextState;\n }\n\n public __internal_load() {\n this.getLoadThreadsPromise(); // begin loading on initial bind\n if (this._initialThreadLoaded) return;\n this._initialThreadLoaded = true;\n\n const startThreadId =\n this._options.threadId ?? this._options.initialThreadId;\n if (startThreadId !== undefined) {\n const switchTask =\n this._options.threadId !== undefined\n ? this._switchToThreadFromProp(startThreadId)\n : this.switchToThread(startThreadId);\n switchTask.catch(() => {});\n }\n }\n\n public async reloadMainThread(): Promise<void> {\n const threadId = this._mainThreadId;\n if (threadId === undefined) return;\n\n // An unsent thread holds no remote state, so a refetch would only discard\n // what the user has typed.\n if (this.getItemById(threadId)?.status === \"new\") return;\n\n const runtimeCore = this._hookManager.getThreadRuntimeCore(threadId);\n\n try {\n if (runtimeCore?.unstable_refetchThread) {\n // Called on the core so class-method implementations keep `this`.\n await runtimeCore.unstable_refetchThread();\n } else {\n await this._hookManager.__internal_restartThreadRuntime(threadId);\n }\n } catch (error) {\n // delete and detach switch the main thread away before stopping the\n // runtime, so a rejection once that has happened belongs to them.\n if (threadId !== this._mainThreadId) return;\n throw error;\n }\n\n if (threadId !== this._mainThreadId) return;\n this._notifySubscribers();\n }\n\n public reload() {\n this._loadGeneration++;\n this._loadThreadsPromise = undefined;\n this._loadMorePromise = undefined;\n this._state.update({\n ...this._state.baseValue,\n cursor: undefined,\n });\n return this.getLoadThreadsPromise();\n }\n\n public get isLoading() {\n return this._state.value.isLoading;\n }\n\n public get loadError() {\n return this._state.value.loadError;\n }\n\n public get isLoadingMore() {\n return this._state.value.isLoadingMore;\n }\n\n public get hasMore() {\n return this._state.value.cursor !== undefined;\n }\n\n public get threadIds() {\n return this._state.value.threadIds;\n }\n\n public get archivedThreadIds() {\n return this._state.value.archivedThreadIds;\n }\n\n public get newThreadId() {\n return this._state.value.newThreadId;\n }\n\n public get mainThreadId(): string {\n return this._mainThreadId;\n }\n\n // The settled remote ID of the active thread, or undefined while it is still\n // a new/optimistic thread. This is the value surfaced to `onThreadIdChange`.\n private get _mainThreadRemoteId(): string | undefined {\n if (this._mainThreadId === undefined) return undefined;\n return getThreadData(this._state.value, this._mainThreadId)?.remoteId;\n }\n\n private _lastNotifiedThreadId: string | undefined = undefined;\n\n private _notifyThreadIdChange(emit = true) {\n const threadId = this._mainThreadRemoteId;\n if (this._lastNotifiedThreadId === threadId) return;\n this._lastNotifiedThreadId = threadId;\n if (emit) {\n invokeUserCallback(\n \"assistant-ui\",\n \"onThreadIdChange\",\n this._options.onThreadIdChange,\n threadId,\n );\n }\n }\n\n public getMainThreadRuntimeCore() {\n const result = this._hookManager.getThreadRuntimeCore(this._mainThreadId);\n if (!result) return EMPTY_THREAD_CORE;\n return result;\n }\n\n public getThreadRuntimeCore(threadIdOrRemoteId: string) {\n const data = this.getItemById(threadIdOrRemoteId);\n if (!data)\n throw threadNotFoundError(threadIdOrRemoteId, \"getting its runtime\");\n\n const result = this._hookManager.getThreadRuntimeCore(data.id);\n if (!result)\n throw new Error(\n `Runtime for thread \"${threadIdOrRemoteId}\" not found while getting its runtime.`,\n );\n return result;\n }\n\n public unstable_isThreadRunning(threadIdOrRemoteId: string) {\n const data = this.getItemById(threadIdOrRemoteId);\n if (!data) return false;\n return this._hookManager.__internal_isThreadRunning(data.id);\n }\n\n public unstable_subscribeThreadEvents(\n callback: (event: ThreadListRuntimeEvent) => void,\n ) {\n return this._hookManager.__internal_subscribeThreadEvents(callback);\n }\n\n public getItemById(threadIdOrRemoteId: string) {\n return getThreadData(this._state.value, threadIdOrRemoteId);\n }\n\n public switchToThread(\n threadIdOrRemoteId: string,\n options?: { unarchive?: boolean },\n ): Promise<void> {\n return this._startSwitchToThread(threadIdOrRemoteId, options, true);\n }\n\n private _startSwitchToThread(\n threadIdOrRemoteId: string,\n options: { unarchive?: boolean } | undefined,\n emitThreadIdChange: boolean,\n ): Promise<void> {\n const generation = ++this._switchGeneration;\n const task = this._switchToThread(\n threadIdOrRemoteId,\n options,\n generation,\n emitThreadIdChange,\n );\n this._switchTask = task;\n return task;\n }\n\n private async _switchToThread(\n threadIdOrRemoteId: string,\n options: { unarchive?: boolean } | undefined,\n generation: number,\n emitThreadIdChange: boolean,\n ): Promise<void> {\n if (\n this._replaceListOnNextLoad &&\n threadIdOrRemoteId !== this._state.value.newThreadId\n ) {\n throw new ThreadListAdapterChangedError();\n }\n let data = this.getItemById(threadIdOrRemoteId);\n\n if (!data) {\n const remoteMetadata =\n await this._options.adapter.fetch(threadIdOrRemoteId);\n if (generation !== this._switchGeneration) return;\n\n const state = this._state.value;\n const mappingId = createThreadMappingId(remoteMetadata.remoteId);\n\n const newThreadData = {\n ...state.threadData,\n [mappingId]: {\n id: mappingId,\n initializeTask: Promise.resolve({\n remoteId: remoteMetadata.remoteId,\n externalId: remoteMetadata.externalId,\n }),\n remoteId: remoteMetadata.remoteId,\n externalId: remoteMetadata.externalId,\n status: remoteMetadata.status,\n title: remoteMetadata.title,\n lastMessageAt: remoteMetadata.lastMessageAt,\n custom: remoteMetadata.custom,\n } as RemoteThreadData,\n };\n\n const newThreadIdMap = {\n ...state.threadIdMap,\n [remoteMetadata.remoteId]: mappingId,\n };\n\n // A concurrent `list()` may already have placed this thread; keep that\n // position and only merge metadata. A genuinely absent thread stays\n // appended: it may live on an unloaded page, and a prepend would pin it\n // above newer threads permanently. Filtering both arrays first still\n // prevents duplication or a wrong-status entry from `list()`.\n const remoteId = remoteMetadata.remoteId;\n const wasInTarget =\n remoteMetadata.status === \"regular\"\n ? state.threadIds.includes(remoteId)\n : state.archivedThreadIds.includes(remoteId);\n\n const threadIdsWithoutRemote = state.threadIds.filter(\n (id) => id !== remoteId,\n );\n const archivedThreadIdsWithoutRemote = state.archivedThreadIds.filter(\n (id) => id !== remoteId,\n );\n\n const newThreadIds =\n remoteMetadata.status === \"regular\"\n ? wasInTarget\n ? state.threadIds\n : [...threadIdsWithoutRemote, remoteId]\n : threadIdsWithoutRemote;\n const newArchivedThreadIds =\n remoteMetadata.status === \"archived\"\n ? wasInTarget\n ? state.archivedThreadIds\n : [...archivedThreadIdsWithoutRemote, remoteId]\n : archivedThreadIdsWithoutRemote;\n\n this._state.update({\n ...state,\n threadIds: newThreadIds,\n archivedThreadIds: newArchivedThreadIds,\n threadIdMap: newThreadIdMap,\n threadData: newThreadData,\n });\n\n data = this.getItemById(threadIdOrRemoteId);\n }\n\n if (!data) throw threadNotFoundError(threadIdOrRemoteId, \"switching to it\");\n if (this._mainThreadId === data.id) return;\n\n const task = this._hookManager.startThreadRuntime(data.id);\n if (this.mainThreadId !== undefined) {\n await task;\n } else {\n void task.then(\n () => this._notifySubscribers(),\n () => undefined,\n );\n }\n\n if (generation !== this._switchGeneration) return;\n\n let current = this.getItemById(data.id);\n if (current?.id !== data.id) return;\n\n if (current.status === \"archived\" && options?.unarchive !== false) {\n await current.initializeTask;\n if (generation !== this._switchGeneration) return;\n current = this.getItemById(data.id);\n if (current?.id !== data.id) return;\n if (current.status === \"archived\") {\n await this.unarchive(current.id);\n if (generation !== this._switchGeneration) return;\n current = this.getItemById(data.id);\n if (current?.id !== data.id) return;\n }\n }\n this._mainThreadId = current.id;\n\n this._notifySubscribers();\n this._notifyThreadIdChange(emitThreadIdChange);\n }\n\n public switchToNewThread(): Promise<void> {\n return this._startSwitchToNewThread(true);\n }\n\n private _switchToThreadFromProp(threadId: string | undefined): Promise<void> {\n return threadId !== undefined\n ? this._startSwitchToThread(threadId, undefined, false)\n : this._startSwitchToNewThread(false);\n }\n\n private _startSwitchToNewThread(emitThreadIdChange: boolean): Promise<void> {\n const generation = ++this._switchGeneration;\n const task = this._switchToNewThread(generation, emitThreadIdChange);\n this._switchTask = task;\n return task;\n }\n\n private async _switchToNewThread(\n generation: number,\n emitThreadIdChange: boolean,\n ): Promise<void> {\n // an initialization transaction is in progress, wait for it to settle\n while (\n this._state.baseValue.newThreadId !== undefined &&\n this._state.value.newThreadId === undefined\n ) {\n await this._state.waitForUpdate();\n if (generation !== this._switchGeneration) return;\n }\n\n const state = this._state.baseValue;\n let id: string | undefined = this._state.value.newThreadId;\n if (id === undefined) {\n const next = seedNewThread(state);\n id = next.id;\n this._state.update(next.state);\n }\n\n return this._switchToThread(id, undefined, generation, emitThreadIdChange);\n }\n\n public initialize = async (threadId: string) => {\n const adapter = this._options.adapter;\n const adapterGeneration = this._adapterGeneration;\n if (this._state.value.newThreadId !== threadId) {\n this._requireAdapterSettled();\n const data = this.getItemById(threadId);\n if (!data) throw threadNotFoundError(threadId, \"initializing it\");\n if (data.status === \"new\")\n throw threadStatusError(threadId, data.status, \"be initialized here\");\n const { remoteId, externalId } = await data.initializeTask;\n this._requireAdapterGeneration(adapterGeneration);\n return { remoteId, externalId };\n }\n\n this._requireAdapterGeneration(adapterGeneration);\n const initializeTask = adapter.initialize(threadId);\n let removedMappingId: string | undefined;\n const { remoteId, externalId } = await this._state.optimisticUpdate({\n execute: () => initializeTask,\n optimistic: (state) =>\n promoteNewThreadReducer(state, threadId, initializeTask),\n then: (state, { remoteId, externalId }) => {\n if (adapterGeneration !== this._adapterGeneration) return state;\n const reconciliation = reconcileInitializedThread(\n state,\n threadId,\n remoteId,\n externalId,\n threadId,\n );\n removedMappingId = reconciliation.removedMappingId;\n if (removedMappingId === this._mainThreadId) {\n this._mainThreadId = reconciliation.survivorMappingId;\n }\n return reconciliation.state;\n },\n });\n this._requireAdapterGeneration(adapterGeneration);\n if (removedMappingId !== undefined) {\n this._hookManager.stopThreadRuntime(removedMappingId);\n }\n return { remoteId, externalId };\n };\n\n public generateTitle = async (\n threadId: string,\n options?: { automatic?: boolean },\n ) => {\n this._requireAdapterSettled();\n const adapter = this._options.adapter;\n const adapterGeneration = this._adapterGeneration;\n const data = this.getItemById(threadId);\n if (!data) throw threadNotFoundError(threadId, \"generating its title\");\n if (data.status === \"new\")\n throw threadStatusError(threadId, data.status, \"generate a title\");\n\n const { remoteId } = await data.initializeTask;\n this._requireAdapterGeneration(adapterGeneration);\n\n const runtimeCore = this._hookManager.getThreadRuntimeCore(data.id);\n if (!runtimeCore) return; // thread is no longer running\n\n // Incomplete assistant turns (running status, possibly empty content)\n // would make the payload race-dependent; the title reads settled\n // messages only, matching the trigger's readiness gate.\n const messages = runtimeCore.messages.filter(isTitleSourceMessage);\n await runThreadTitleGeneration({\n states: this._titleStates,\n threadId: data.id,\n automatic: options?.automatic === true,\n generate: async (onTitle) => {\n const stream = await adapter.generateTitle(remoteId, messages);\n this._requireAdapterGeneration(adapterGeneration);\n await applyTitleStream(stream, onTitle);\n },\n rename: async (title) => {\n this._requireAdapterGeneration(adapterGeneration);\n await adapter.rename(remoteId, title);\n },\n applyTitle: async (title) => {\n await this._state.optimisticUpdate({\n execute: async () => {},\n optimistic: (state) => {\n if (adapterGeneration !== this._adapterGeneration) return state;\n const currentData = getThreadData(state, data.id);\n if (!currentData) return state;\n return {\n ...state,\n threadData: {\n ...state.threadData,\n [currentData.id]: {\n ...currentData,\n title,\n },\n },\n };\n },\n });\n },\n });\n };\n\n public async rename(\n threadIdOrRemoteId: string,\n newTitle: string,\n ): Promise<void> {\n this._requireAdapterSettled();\n const adapter = this._options.adapter;\n const adapterGeneration = this._adapterGeneration;\n const data = this.getItemById(threadIdOrRemoteId);\n if (!data) throw threadNotFoundError(threadIdOrRemoteId, \"renaming it\");\n if (data.status === \"new\")\n throw threadStatusError(threadIdOrRemoteId, data.status, \"be renamed\");\n\n const claim = startThreadTitleRename(this._titleStates, data.id, newTitle);\n try {\n const result = await this._state.optimisticUpdate({\n execute: async () => {\n const { remoteId } = await data.initializeTask;\n this._requireAdapterGeneration(adapterGeneration);\n return adapter.rename(remoteId, newTitle);\n },\n optimistic: (state) => {\n const currentData = getThreadData(state, threadIdOrRemoteId);\n if (!currentData) return state;\n\n return {\n ...state,\n threadData: {\n ...state.threadData,\n [currentData.id]: {\n ...currentData,\n title: newTitle,\n },\n },\n };\n },\n });\n finishThreadTitleRename(this._titleStates, data.id, claim, true);\n return result;\n } catch (error) {\n finishThreadTitleRename(this._titleStates, data.id, claim, false);\n throw error;\n }\n }\n\n public async updateCustom(\n threadIdOrRemoteId: string,\n custom: Record<string, unknown> | undefined,\n ): Promise<void> {\n this._requireAdapterSettled();\n const adapter = this._options.adapter;\n const adapterGeneration = this._adapterGeneration;\n const data = this.getItemById(threadIdOrRemoteId);\n if (!data)\n throw threadNotFoundError(\n threadIdOrRemoteId,\n \"updating its custom metadata\",\n );\n if (data.status === \"new\")\n throw threadStatusError(\n threadIdOrRemoteId,\n data.status,\n \"update custom metadata\",\n );\n\n if (!adapter.updateCustom) {\n throw new Error(\n \"Remote thread list adapter does not support updating custom metadata\",\n );\n }\n\n return this._state.optimisticUpdate({\n execute: async () => {\n const { remoteId } = await data.initializeTask;\n this._requireAdapterGeneration(adapterGeneration);\n if (!adapter.updateCustom) {\n throw new Error(\n \"Remote thread list adapter does not support updating custom metadata\",\n );\n }\n return adapter.updateCustom(remoteId, custom);\n },\n optimistic: (state) => {\n const data = getThreadData(state, threadIdOrRemoteId);\n if (!data) return state;\n\n return {\n ...state,\n threadData: {\n ...state.threadData,\n [data.id]: {\n ...data,\n custom,\n },\n },\n };\n },\n });\n }\n\n private async _ensureThreadIsNotMain(threadId: string) {\n if (threadId === this.newThreadId)\n throw new Error(\"Cannot ensure new thread is not main\");\n\n let lastAwaitedTask: Promise<void> | undefined;\n\n while (threadId === this._mainThreadId) {\n let switchTask = this._switchTask;\n const startedFallback = !switchTask || switchTask === lastAwaitedTask;\n if (startedFallback) switchTask = this.switchToNewThread();\n lastAwaitedTask = switchTask;\n\n try {\n await switchTask;\n } catch (error) {\n if (startedFallback && this._switchTask === switchTask) {\n throw error;\n }\n }\n }\n }\n\n public async archive(threadIdOrRemoteId: string) {\n this._requireAdapterSettled();\n const adapter = this._options.adapter;\n const adapterGeneration = this._adapterGeneration;\n const data = this.getItemById(threadIdOrRemoteId);\n if (!data) throw threadNotFoundError(threadIdOrRemoteId, \"archiving it\");\n if (data.status !== \"regular\")\n throw threadStatusError(threadIdOrRemoteId, data.status, \"be archived\");\n\n await this._ensureThreadIsNotMain(data.id);\n this._requireAdapterGeneration(adapterGeneration);\n\n return this._state.optimisticUpdate({\n execute: async () => {\n const { remoteId } = await data.initializeTask;\n this._requireAdapterGeneration(adapterGeneration);\n return adapter.archive(remoteId);\n },\n optimistic: (state) => {\n return updateStatusReducer(state, data.id, \"archived\");\n },\n });\n }\n\n public async unarchive(threadIdOrRemoteId: string): Promise<void> {\n this._requireAdapterSettled();\n const adapter = this._options.adapter;\n const adapterGeneration = this._adapterGeneration;\n const data = this.getItemById(threadIdOrRemoteId);\n if (!data) throw threadNotFoundError(threadIdOrRemoteId, \"unarchiving it\");\n if (data.status !== \"archived\")\n throw threadStatusError(threadIdOrRemoteId, data.status, \"be unarchived\");\n\n return this._state.optimisticUpdate({\n execute: async () => {\n try {\n const { remoteId } = await data.initializeTask;\n this._requireAdapterGeneration(adapterGeneration);\n return await adapter.unarchive(remoteId);\n } catch (error) {\n if (adapterGeneration === this._adapterGeneration) {\n await this._ensureThreadIsNotMain(data.id);\n }\n throw error;\n }\n },\n optimistic: (state) => {\n return updateStatusReducer(state, data.id, \"regular\");\n },\n });\n }\n\n public async delete(threadIdOrRemoteId: string) {\n this._requireAdapterSettled();\n const adapter = this._options.adapter;\n const adapterGeneration = this._adapterGeneration;\n const data = this.getItemById(threadIdOrRemoteId);\n if (!data) throw threadNotFoundError(threadIdOrRemoteId, \"deleting it\");\n if (data.status !== \"regular\" && data.status !== \"archived\")\n throw threadStatusError(threadIdOrRemoteId, data.status, \"be deleted\");\n\n await this._ensureThreadIsNotMain(data.id);\n this._requireAdapterGeneration(adapterGeneration);\n const result = await this._state.optimisticUpdate({\n execute: async () => {\n const { remoteId } = await data.initializeTask;\n this._requireAdapterGeneration(adapterGeneration);\n return await adapter.delete(remoteId);\n },\n optimistic: (state) => {\n return updateStatusReducer(state, data.id, \"deleted\");\n },\n });\n // The optimistic layer survives an adapter swap, so a resolved deletion has\n // dropped the slot from `threadData`, where `_replaceWithThreads` would\n // otherwise have found it to stop.\n this._hookManager.stopThreadRuntime(data.id);\n clearThreadTitleState(this._titleStates, data.id);\n return result;\n }\n\n public __internal_dispose() {\n this._hookManager.__internal_dispose();\n }\n\n public async detach(threadIdOrRemoteId: string): Promise<void> {\n const adapterGeneration = this._adapterGeneration;\n const data = this.getItemById(threadIdOrRemoteId);\n if (!data) throw threadNotFoundError(threadIdOrRemoteId, \"detaching it\");\n if (data.status !== \"regular\" && data.status !== \"archived\")\n throw threadStatusError(threadIdOrRemoteId, data.status, \"be detached\");\n\n await this._ensureThreadIsNotMain(data.id);\n this._requireAdapterGeneration(adapterGeneration);\n this._hookManager.stopThreadRuntime(data.id);\n }\n\n private boundIdsStore = new WritableSubscribable<readonly string[]>([]);\n\n public __internal_RenderComponent: FC = () => {\n const id = useId();\n useEffect(() => {\n this.boundIdsStore.setState([...this.boundIdsStore.getState(), id]);\n return () => {\n this.boundIdsStore.setState(\n this.boundIdsStore.getState().filter((i) => i !== id),\n );\n };\n }, [id]);\n\n const boundIds = useSubscribable(this.boundIdsStore);\n const Provider = useSubscribable(this.providerStore);\n const aui = useAui();\n const enabled = boundIds.length === 0 || boundIds[0] === id;\n\n return (\n enabled && (\n <RuntimeAdapterProvider adapters={this._runtimeAdapters}>\n <this._hookManager.__internal_RenderThreadRuntimes\n provider={Provider}\n />\n <this._hookManager.__internal_Host parentClient={aui} />\n </RuntimeAdapterProvider>\n )\n );\n };\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"RemoteThreadListThreadListRuntimeCore.js","names":["ThreadListRuntimeCore","ThreadListRuntimeEvent","BaseSubscribable","WritableSubscribable","useSubscribable","handleThreadListAction","nullProtoRecord","OptimisticState","EMPTY_THREAD_CORE","ClassifyAccumulator","RemoteThreadData","RemoteThreadState","classifyThreads","createEmptyRemoteThreadState","createThreadMappingId","getThreadData","normalizeCursor","reconcileInitializedThread","promoteNewThreadReducer","updateStatusReducer","preserveMidLoadTransitions","seedNewThread","statusSnapshot","RemoteThreadListAdapter","RemoteThreadListOptions","RemoteThreadMetadata","ThreadListAdapterChangedError","RemoteThreadListHookInstanceManager","applyTitleStream","isTitleSourceMessage","clearThreadTitleState","finishThreadTitleRename","runThreadTitleGeneration","startThreadTitleRename","ThreadTitleState","ComponentType","FC","Fragment","PropsWithChildren","useEffect","useId","useAui","ModelContextProvider","RuntimeAdapterProvider","useStableRuntimeAdapters","invokeUserCallback","threadNotFoundError","threadIdOrRemoteId","action","Error","threadStatusError","status","EMPTY_REMOTE_STATE","RemoteThreadListThreadListRuntimeCore","_options","_hookManager","_runtimeAdapters","modelContext","_loadThreadsPromise","Promise","_loadMorePromise","_loadGeneration","_adapterGeneration","_replaceListOnNextLoad","_staleThreadIdsOnReplace","ReadonlySet","_switchGeneration","_switchTask","_titleStates","Map","_mainThreadId","_state","_useAdaptersProvider","children","useAdapters","adapter","unstable_useAdapters","undefined","_SynthesizedAdapters","NonNullable","adapters","resolveProvider","unstable_Provider","threadItems","value","threadData","getLoadThreadsPromise","generation","replacedList","statusAtRequest","baseValue","optimisticUpdate","execute","list","loading","state","isLoading","loadError","then","l","replaceList","_replaceWithThreads","threads","nextCursor","fresh","threadIds","archivedThreadIds","threadIdMap","merged","cursor","catch","error","console","update","threadId","getItemById","id","_switchToThreadFromProp","loadMore","initialState","resolve","dedup","after","isLoadingMore","appended","constructor","options","contextProvider","subscribe","_notifySubscribers","_notifyThreadIdChange","runtimeHook","__internal_setDefaultAdapters","__internal_subscribeRunningChanged","__internal_subscribeRuntimeReplaced","queueMicrotask","providerStore","__internal_setOptions","switchToNewThread","_initialThreadLoaded","adapterChanged","controlledThreadIdChanged","setState","setRuntimeHook","Set","Object","values","filter","item","map","clear","_requireAdapterGeneration","_requireAdapterSettled","carried","newThreadId","mappingId","hasOwn","draft","push","stale","has","remoteId","seed","currentMappingId","current","includes","nextState","preservedDraft","seeded","_lastNotifiedThreadId","nextIds","stopThreadRuntime","startThreadRuntime","__internal_load","startThreadId","initialThreadId","switchTask","switchToThread","reloadMainThread","runtimeCore","getThreadRuntimeCore","unstable_refetchThread","__internal_restartThreadRuntime","reload","hasMore","mainThreadId","_mainThreadRemoteId","emit","onThreadIdChange","getMainThreadRuntimeCore","result","data","unstable_isThreadRunning","__internal_isThreadRunning","unstable_subscribeThreadEvents","callback","event","__internal_subscribeThreadEvents","unarchive","_startSwitchToThread","emitThreadIdChange","task","_switchToThread","remoteMetadata","fetch","newThreadData","initializeTask","externalId","title","lastMessageAt","custom","newThreadIdMap","wasInTarget","threadIdsWithoutRemote","archivedThreadIdsWithoutRemote","newThreadIds","newArchivedThreadIds","_startSwitchToNewThread","_switchToNewThread","waitForUpdate","next","initialize","adapterGeneration","removedMappingId","optimistic","reconciliation","survivorMappingId","generateTitle","automatic","messages","states","generate","onTitle","stream","rename","applyTitle","currentData","newTitle","claim","updateCustom","Record","_ensureThreadIsNotMain","lastAwaitedTask","startedFallback","archive","delete","__internal_dispose","detach","boundIdsStore","__internal_RenderComponent","getState","i","boundIds","Provider","aui","enabled","length"],"sources":["../../../src/react/runtimes/RemoteThreadListThreadListRuntimeCore.tsx"],"sourcesContent":["import type {\n ThreadListRuntimeCore,\n ThreadListRuntimeEvent,\n} from \"../../runtime/interfaces/thread-list-runtime-core\";\nimport {\n BaseSubscribable,\n WritableSubscribable,\n} from \"../../subscribable/subscribable\";\nimport { useSubscribable } from \"../../store/runtime-clients/useSubscribable\";\nimport { handleThreadListAction } from \"../../store/runtime-clients/handle-thread-list-action\";\nimport { nullProtoRecord } from \"../../utils/record\";\nimport { OptimisticState } from \"../../runtimes/remote-thread-list/optimistic-state\";\nimport { EMPTY_THREAD_CORE } from \"../../runtimes/remote-thread-list/empty-thread-core\";\nimport type {\n ClassifyAccumulator,\n RemoteThreadData,\n RemoteThreadState,\n} from \"../../runtimes/remote-thread-list/remote-thread-state\";\nimport {\n classifyThreads,\n createEmptyRemoteThreadState,\n createThreadMappingId,\n getThreadData,\n normalizeCursor,\n reconcileInitializedThread,\n promoteNewThreadReducer,\n updateStatusReducer,\n preserveMidLoadTransitions,\n seedNewThread,\n statusSnapshot,\n} from \"../../runtimes/remote-thread-list/remote-thread-state\";\nimport type {\n RemoteThreadListAdapter,\n RemoteThreadListOptions,\n RemoteThreadMetadata,\n} from \"../../runtimes/remote-thread-list/types\";\nimport { ThreadListAdapterChangedError } from \"../../runtimes/remote-thread-list/adapter-changed\";\nimport { RemoteThreadListHookInstanceManager } from \"./RemoteThreadListHookInstanceManager\";\nimport {\n applyTitleStream,\n isTitleSourceMessage,\n} from \"../../runtimes/remote-thread-list/title\";\nimport {\n clearThreadTitleState,\n finishThreadTitleRename,\n runThreadTitleGeneration,\n startThreadTitleRename,\n type ThreadTitleState,\n} from \"../../runtimes/remote-thread-list/title-generation\";\nimport {\n type ComponentType,\n type FC,\n Fragment,\n type PropsWithChildren,\n useEffect,\n useId,\n} from \"react\";\nimport { useAui } from \"@assistant-ui/store\";\nimport type { ModelContextProvider } from \"../../model-context/types\";\nimport { RuntimeAdapterProvider } from \"./RuntimeAdapterProvider\";\nimport { useStableRuntimeAdapters } from \"./useRuntimeAdapters\";\nimport { invokeUserCallback } from \"../../utils/invoke-user-callback\";\n\nconst threadNotFoundError = (threadIdOrRemoteId: string, action: string) =>\n new Error(`Thread \"${threadIdOrRemoteId}\" not found while ${action}.`);\n\nconst threadStatusError = (\n threadIdOrRemoteId: string,\n status: RemoteThreadData[\"status\"],\n action: string,\n) =>\n new Error(\n `Thread \"${threadIdOrRemoteId}\" has status \"${status}\", so it cannot ${action}.`,\n );\n\nconst EMPTY_REMOTE_STATE = createEmptyRemoteThreadState();\n\nexport class RemoteThreadListThreadListRuntimeCore\n extends BaseSubscribable\n implements ThreadListRuntimeCore\n{\n private _options!: RemoteThreadListOptions;\n private readonly _hookManager: RemoteThreadListHookInstanceManager;\n private readonly _runtimeAdapters: { modelContext: ModelContextProvider };\n\n private _loadThreadsPromise: Promise<void> | undefined;\n private _loadMorePromise: Promise<void> | undefined;\n private _loadGeneration = 0;\n private _adapterGeneration = 0;\n private _replaceListOnNextLoad = false;\n private _staleThreadIdsOnReplace: ReadonlySet<string> | undefined;\n private _switchGeneration = 0;\n private _switchTask: Promise<void> | undefined;\n private readonly _titleStates = new Map<string, ThreadTitleState>();\n\n private _mainThreadId!: string;\n private readonly _state = new OptimisticState<RemoteThreadState>(\n EMPTY_REMOTE_STATE,\n );\n\n private readonly _useAdaptersProvider: FC<PropsWithChildren> = ({\n children,\n }) => {\n const useAdapters = this._options.adapter.unstable_useAdapters;\n if (useAdapters === undefined) return children;\n return (\n <this._SynthesizedAdapters useAdapters={useAdapters}>\n {children}\n </this._SynthesizedAdapters>\n );\n };\n\n private readonly _SynthesizedAdapters: FC<\n PropsWithChildren<{\n useAdapters: NonNullable<RemoteThreadListAdapter[\"unstable_useAdapters\"]>;\n }>\n > = ({ useAdapters, children }) => {\n const adapters = useStableRuntimeAdapters(useAdapters());\n if (adapters == null) return children;\n return (\n <RuntimeAdapterProvider adapters={adapters}>\n {children}\n </RuntimeAdapterProvider>\n );\n };\n\n private resolveProvider(\n adapter: RemoteThreadListAdapter,\n ): ComponentType<PropsWithChildren> {\n if (adapter.unstable_Provider !== undefined) {\n return adapter.unstable_Provider as ComponentType<PropsWithChildren>;\n }\n if (adapter.unstable_useAdapters === undefined) return Fragment;\n return this._useAdaptersProvider;\n }\n\n public get threadItems() {\n return this._state.value.threadData;\n }\n\n public getLoadThreadsPromise() {\n // TODO this needs to be cached in case this promise is loaded during suspense\n if (!this._loadThreadsPromise) {\n const generation = this._loadGeneration;\n let replacedList = false;\n const statusAtRequest = statusSnapshot(this._state.baseValue);\n this._loadThreadsPromise = this._state\n .optimisticUpdate({\n execute: () => this._options.adapter.list(),\n loading: (state) => {\n if (generation !== this._loadGeneration) return state;\n return {\n ...state,\n isLoading: true,\n loadError: undefined,\n };\n },\n then: (state, l) => {\n if (generation !== this._loadGeneration) return state;\n const replaceList = this._replaceListOnNextLoad;\n if (replaceList) {\n this._replaceListOnNextLoad = false;\n replacedList = true;\n return this._replaceWithThreads(\n { ...state, loadError: undefined },\n l.threads,\n normalizeCursor(l.nextCursor),\n );\n }\n\n const fresh = classifyThreads(l.threads, {\n threadIds: [],\n archivedThreadIds: [],\n threadIdMap: { ...state.threadIdMap },\n threadData: { ...state.threadData },\n });\n const merged = {\n ...state,\n isLoading: false,\n loadError: undefined,\n cursor: normalizeCursor(l.nextCursor),\n threadIds: fresh.threadIds,\n archivedThreadIds: fresh.archivedThreadIds,\n threadIdMap: fresh.threadIdMap,\n threadData: fresh.threadData,\n };\n return preserveMidLoadTransitions(merged, state, statusAtRequest);\n },\n })\n .catch((error: unknown) => {\n if (generation !== this._loadGeneration) return;\n console.error(\"[assistant-ui] thread list load failed:\", error);\n this._loadThreadsPromise = undefined;\n if (!this._replaceListOnNextLoad) {\n this._state.update({\n ...this._state.baseValue,\n isLoading: false,\n loadError: error,\n });\n return;\n }\n this._replaceListOnNextLoad = false;\n replacedList = true;\n this._state.update(\n this._replaceWithThreads(\n { ...this._state.baseValue, loadError: error },\n [],\n undefined,\n ),\n );\n })\n .then(() => {\n if (!replacedList) return;\n const threadId = this._options.threadId;\n if (threadId === undefined) return;\n if (this.getItemById(threadId)?.id === this._mainThreadId) return;\n this._switchToThreadFromProp(threadId).catch(() => {});\n });\n }\n\n return this._loadThreadsPromise;\n }\n\n public loadMore(): Promise<void> {\n if (this._loadMorePromise) return this._loadMorePromise;\n\n const initialState = this._state.value;\n if (initialState.cursor === undefined || initialState.isLoading) {\n return Promise.resolve();\n }\n\n const generation = this._loadGeneration;\n const adapter = this._options.adapter;\n const cursor = initialState.cursor;\n\n const dedup = this._state\n .optimisticUpdate({\n execute: () => adapter.list({ after: cursor }),\n loading: (state) => {\n if (generation !== this._loadGeneration) return state;\n return { ...state, isLoadingMore: true };\n },\n then: (state, l) => {\n if (generation !== this._loadGeneration) return state;\n if (adapter !== this._options.adapter) return state;\n\n const appended = classifyThreads(l.threads, {\n threadIds: [...state.threadIds],\n archivedThreadIds: [...state.archivedThreadIds],\n threadIdMap: { ...state.threadIdMap },\n threadData: { ...state.threadData },\n });\n\n return {\n ...state,\n isLoadingMore: false,\n cursor: normalizeCursor(l.nextCursor),\n threadIds: appended.threadIds,\n archivedThreadIds: appended.archivedThreadIds,\n threadIdMap: appended.threadIdMap,\n threadData: appended.threadData,\n };\n },\n })\n .catch((error: unknown) => {\n if (generation !== this._loadGeneration) return;\n console.error(\"[assistant-ui] thread list loadMore failed:\", error);\n })\n .then(() => {\n if (this._loadMorePromise === dedup) {\n this._loadMorePromise = undefined;\n }\n });\n\n this._loadMorePromise = dedup;\n return dedup;\n }\n\n constructor(\n options: RemoteThreadListOptions,\n contextProvider: ModelContextProvider,\n ) {\n super();\n\n this._state.subscribe(() => {\n this._notifySubscribers();\n this._notifyThreadIdChange();\n });\n this._runtimeAdapters = { modelContext: contextProvider };\n this._hookManager = new RemoteThreadListHookInstanceManager(\n options.runtimeHook,\n this,\n );\n this._hookManager.__internal_setDefaultAdapters(this._runtimeAdapters);\n this._hookManager.__internal_subscribeRunningChanged(() =>\n this._notifySubscribers(),\n );\n this._hookManager.__internal_subscribeRuntimeReplaced(() => {\n // A republish can land during the thread resource's render, where a\n // synchronous notify would re-enter store consumers mid-render.\n queueMicrotask(() => this._notifySubscribers());\n });\n this.providerStore = new WritableSubscribable(\n this.resolveProvider(options.adapter),\n );\n this.__internal_setOptions(options);\n this.switchToNewThread();\n }\n\n private _initialThreadLoaded = false;\n private providerStore;\n\n public __internal_setOptions(options: RemoteThreadListOptions) {\n if (this._options === options) return;\n\n const adapterChanged =\n this._options !== undefined && this._options.adapter !== options.adapter;\n const controlledThreadIdChanged =\n this._initialThreadLoaded &&\n this._options !== undefined &&\n this._options.threadId !== options.threadId;\n\n this._options = options;\n\n this.providerStore.setState(this.resolveProvider(options.adapter));\n\n this._hookManager.setRuntimeHook(options.runtimeHook);\n\n if (adapterChanged) {\n this._loadGeneration++;\n this._adapterGeneration++;\n this._switchGeneration++;\n this._switchTask = undefined;\n this._loadThreadsPromise = undefined;\n this._loadMorePromise = undefined;\n this._replaceListOnNextLoad = true;\n this._staleThreadIdsOnReplace = new Set(\n Object.values(this._state.baseValue.threadData)\n .filter((item) => item.status !== \"new\")\n .map((item) => item.id),\n );\n this._state.update({\n ...this._state.baseValue,\n cursor: undefined,\n loadError: undefined,\n });\n this._titleStates.clear();\n }\n\n if (controlledThreadIdChanged) {\n this._switchToThreadFromProp(options.threadId).catch(() => {});\n }\n }\n\n private _requireAdapterGeneration(generation: number) {\n if (generation !== this._adapterGeneration) {\n throw new ThreadListAdapterChangedError();\n }\n }\n\n private _requireAdapterSettled() {\n if (this._replaceListOnNextLoad) {\n throw new ThreadListAdapterChangedError();\n }\n }\n\n private _replaceWithThreads(\n state: RemoteThreadState,\n threads: readonly RemoteThreadMetadata[],\n cursor: string | undefined,\n ): RemoteThreadState {\n const carried: RemoteThreadData[] = [];\n if (state.newThreadId) {\n const mappingId = Object.hasOwn(state.threadIdMap, state.newThreadId)\n ? state.threadIdMap[state.newThreadId]\n : undefined;\n const draft =\n mappingId && Object.hasOwn(state.threadData, mappingId)\n ? state.threadData[mappingId]\n : undefined;\n if (draft?.status === \"new\") carried.push(draft);\n }\n\n const stale = this._staleThreadIdsOnReplace;\n if (stale) {\n for (const item of Object.values(state.threadData)) {\n if (stale.has(item.id)) continue;\n if (item.status !== \"new\" && item.remoteId === undefined) continue;\n carried.push(item);\n }\n }\n this._staleThreadIdsOnReplace = undefined;\n\n const seed: ClassifyAccumulator = {\n threadIds: [],\n archivedThreadIds: [],\n threadIdMap: nullProtoRecord(),\n threadData: nullProtoRecord(),\n };\n for (const item of carried) {\n const mappingId = createThreadMappingId(item.id);\n if (Object.hasOwn(seed.threadData, mappingId)) continue;\n seed.threadIdMap[item.id] = mappingId;\n if (item.remoteId !== undefined) {\n seed.threadIdMap[item.remoteId] = mappingId;\n }\n seed.threadData[mappingId] = item;\n }\n\n const { threadIds, archivedThreadIds, threadIdMap, threadData } =\n classifyThreads(threads, seed);\n\n for (const item of carried) {\n if (item.remoteId === undefined) continue;\n const currentMappingId = createThreadMappingId(item.id);\n const current = Object.hasOwn(threadData, currentMappingId)\n ? threadData[currentMappingId]\n : undefined;\n if (current === undefined) continue;\n if (current.status === \"regular\" && !threadIds.includes(current.id)) {\n threadIds.push(current.id);\n } else if (\n current.status === \"archived\" &&\n !archivedThreadIds.includes(current.id)\n ) {\n archivedThreadIds.push(current.id);\n }\n }\n\n let nextState: RemoteThreadState = {\n ...state,\n isLoading: false,\n cursor,\n threadIds,\n archivedThreadIds,\n threadIdMap,\n threadData,\n newThreadId:\n state.newThreadId !== undefined &&\n !Object.hasOwn(threadIdMap, state.newThreadId)\n ? undefined\n : state.newThreadId,\n };\n\n if (getThreadData(nextState, this._mainThreadId) === undefined) {\n const preservedDraft = nextState.newThreadId;\n if (preservedDraft !== undefined) {\n this._mainThreadId = preservedDraft;\n } else {\n const seeded = seedNewThread(nextState);\n this._mainThreadId = seeded.id;\n nextState = seeded.state;\n }\n if (this._options.threadId === undefined) {\n this._notifyThreadIdChange();\n } else {\n this._lastNotifiedThreadId = undefined;\n }\n }\n\n const nextIds = new Set(\n Object.values(nextState.threadData).map((item) => item.id),\n );\n for (const item of Object.values(state.threadData)) {\n if (nextIds.has(item.id)) continue;\n try {\n this._hookManager.stopThreadRuntime(item.id);\n } catch (error) {\n console.error(\n \"[assistant-ui] Thread runtime cleanup threw while stopping a thread\",\n error,\n );\n }\n }\n void this._hookManager.startThreadRuntime(this._mainThreadId).then(\n () => this._notifySubscribers(),\n () => undefined,\n );\n\n return nextState;\n }\n\n public __internal_load() {\n this.getLoadThreadsPromise(); // begin loading on initial bind\n if (this._initialThreadLoaded) return;\n this._initialThreadLoaded = true;\n\n const startThreadId =\n this._options.threadId ?? this._options.initialThreadId;\n if (startThreadId !== undefined) {\n const switchTask =\n this._options.threadId !== undefined\n ? this._switchToThreadFromProp(startThreadId)\n : this.switchToThread(startThreadId);\n switchTask.catch(() => {});\n }\n }\n\n public async reloadMainThread(): Promise<void> {\n const threadId = this._mainThreadId;\n if (threadId === undefined) return;\n\n // An unsent thread holds no remote state, so a refetch would only discard\n // what the user has typed.\n if (this.getItemById(threadId)?.status === \"new\") return;\n\n const runtimeCore = this._hookManager.getThreadRuntimeCore(threadId);\n\n try {\n if (runtimeCore?.unstable_refetchThread) {\n // Called on the core so class-method implementations keep `this`.\n await runtimeCore.unstable_refetchThread();\n } else {\n await this._hookManager.__internal_restartThreadRuntime(threadId);\n }\n } catch (error) {\n // delete and detach switch the main thread away before stopping the\n // runtime, so a rejection once that has happened belongs to them.\n if (threadId !== this._mainThreadId) return;\n throw error;\n }\n\n if (threadId !== this._mainThreadId) return;\n this._notifySubscribers();\n }\n\n public reload() {\n this._loadGeneration++;\n this._loadThreadsPromise = undefined;\n this._loadMorePromise = undefined;\n this._state.update({\n ...this._state.baseValue,\n cursor: undefined,\n });\n return this.getLoadThreadsPromise();\n }\n\n public get isLoading() {\n return this._state.value.isLoading;\n }\n\n public get loadError() {\n return this._state.value.loadError;\n }\n\n public get isLoadingMore() {\n return this._state.value.isLoadingMore;\n }\n\n public get hasMore() {\n return this._state.value.cursor !== undefined;\n }\n\n public get threadIds() {\n return this._state.value.threadIds;\n }\n\n public get archivedThreadIds() {\n return this._state.value.archivedThreadIds;\n }\n\n public get newThreadId() {\n return this._state.value.newThreadId;\n }\n\n public get mainThreadId(): string {\n return this._mainThreadId;\n }\n\n // The settled remote ID of the active thread, or undefined while it is still\n // a new/optimistic thread. This is the value surfaced to `onThreadIdChange`.\n private get _mainThreadRemoteId(): string | undefined {\n if (this._mainThreadId === undefined) return undefined;\n return getThreadData(this._state.value, this._mainThreadId)?.remoteId;\n }\n\n private _lastNotifiedThreadId: string | undefined = undefined;\n\n private _notifyThreadIdChange(emit = true) {\n const threadId = this._mainThreadRemoteId;\n if (this._lastNotifiedThreadId === threadId) return;\n this._lastNotifiedThreadId = threadId;\n if (emit) {\n invokeUserCallback(\n \"assistant-ui\",\n \"onThreadIdChange\",\n this._options.onThreadIdChange,\n threadId,\n );\n }\n }\n\n public getMainThreadRuntimeCore() {\n const result = this._hookManager.getThreadRuntimeCore(this._mainThreadId);\n if (!result) return EMPTY_THREAD_CORE;\n return result;\n }\n\n public getThreadRuntimeCore(threadIdOrRemoteId: string) {\n const data = this.getItemById(threadIdOrRemoteId);\n if (!data)\n throw threadNotFoundError(threadIdOrRemoteId, \"getting its runtime\");\n\n const result = this._hookManager.getThreadRuntimeCore(data.id);\n if (!result)\n throw new Error(\n `Runtime for thread \"${threadIdOrRemoteId}\" not found while getting its runtime.`,\n );\n return result;\n }\n\n public unstable_isThreadRunning(threadIdOrRemoteId: string) {\n const data = this.getItemById(threadIdOrRemoteId);\n if (!data) return false;\n return this._hookManager.__internal_isThreadRunning(data.id);\n }\n\n public unstable_subscribeThreadEvents(\n callback: (event: ThreadListRuntimeEvent) => void,\n ) {\n return this._hookManager.__internal_subscribeThreadEvents(callback);\n }\n\n public getItemById(threadIdOrRemoteId: string) {\n return getThreadData(this._state.value, threadIdOrRemoteId);\n }\n\n public switchToThread(\n threadIdOrRemoteId: string,\n options?: { unarchive?: boolean },\n ): Promise<void> {\n return this._startSwitchToThread(threadIdOrRemoteId, options, true);\n }\n\n private _startSwitchToThread(\n threadIdOrRemoteId: string,\n options: { unarchive?: boolean } | undefined,\n emitThreadIdChange: boolean,\n ): Promise<void> {\n const generation = ++this._switchGeneration;\n const task = this._switchToThread(\n threadIdOrRemoteId,\n options,\n generation,\n emitThreadIdChange,\n );\n this._switchTask = task;\n return task;\n }\n\n private async _switchToThread(\n threadIdOrRemoteId: string,\n options: { unarchive?: boolean } | undefined,\n generation: number,\n emitThreadIdChange: boolean,\n ): Promise<void> {\n if (\n this._replaceListOnNextLoad &&\n threadIdOrRemoteId !== this._state.value.newThreadId\n ) {\n throw new ThreadListAdapterChangedError();\n }\n let data = this.getItemById(threadIdOrRemoteId);\n\n if (!data) {\n const remoteMetadata =\n await this._options.adapter.fetch(threadIdOrRemoteId);\n if (generation !== this._switchGeneration) return;\n\n const state = this._state.value;\n const mappingId = createThreadMappingId(remoteMetadata.remoteId);\n\n const newThreadData = {\n ...state.threadData,\n [mappingId]: {\n id: mappingId,\n initializeTask: Promise.resolve({\n remoteId: remoteMetadata.remoteId,\n externalId: remoteMetadata.externalId,\n }),\n remoteId: remoteMetadata.remoteId,\n externalId: remoteMetadata.externalId,\n status: remoteMetadata.status,\n title: remoteMetadata.title,\n lastMessageAt: remoteMetadata.lastMessageAt,\n custom: remoteMetadata.custom,\n } as RemoteThreadData,\n };\n\n const newThreadIdMap = {\n ...state.threadIdMap,\n [remoteMetadata.remoteId]: mappingId,\n };\n\n // A concurrent `list()` may already have placed this thread; keep that\n // position and only merge metadata. A genuinely absent thread stays\n // appended: it may live on an unloaded page, and a prepend would pin it\n // above newer threads permanently. Filtering both arrays first still\n // prevents duplication or a wrong-status entry from `list()`.\n const remoteId = remoteMetadata.remoteId;\n const wasInTarget =\n remoteMetadata.status === \"regular\"\n ? state.threadIds.includes(remoteId)\n : state.archivedThreadIds.includes(remoteId);\n\n const threadIdsWithoutRemote = state.threadIds.filter(\n (id) => id !== remoteId,\n );\n const archivedThreadIdsWithoutRemote = state.archivedThreadIds.filter(\n (id) => id !== remoteId,\n );\n\n const newThreadIds =\n remoteMetadata.status === \"regular\"\n ? wasInTarget\n ? state.threadIds\n : [...threadIdsWithoutRemote, remoteId]\n : threadIdsWithoutRemote;\n const newArchivedThreadIds =\n remoteMetadata.status === \"archived\"\n ? wasInTarget\n ? state.archivedThreadIds\n : [...archivedThreadIdsWithoutRemote, remoteId]\n : archivedThreadIdsWithoutRemote;\n\n this._state.update({\n ...state,\n threadIds: newThreadIds,\n archivedThreadIds: newArchivedThreadIds,\n threadIdMap: newThreadIdMap,\n threadData: newThreadData,\n });\n\n data = this.getItemById(threadIdOrRemoteId);\n }\n\n if (!data) throw threadNotFoundError(threadIdOrRemoteId, \"switching to it\");\n if (this._mainThreadId === data.id) return;\n\n const task = this._hookManager.startThreadRuntime(data.id);\n if (this.mainThreadId !== undefined) {\n await task;\n } else {\n void task.then(\n () => this._notifySubscribers(),\n () => undefined,\n );\n }\n\n if (generation !== this._switchGeneration) return;\n\n let current = this.getItemById(data.id);\n if (current?.id !== data.id) return;\n\n if (current.status === \"archived\" && options?.unarchive !== false) {\n await current.initializeTask;\n if (generation !== this._switchGeneration) return;\n current = this.getItemById(data.id);\n if (current?.id !== data.id) return;\n if (current.status === \"archived\") {\n await this.unarchive(current.id);\n if (generation !== this._switchGeneration) return;\n current = this.getItemById(data.id);\n if (current?.id !== data.id) return;\n }\n }\n this._mainThreadId = current.id;\n\n this._notifySubscribers();\n this._notifyThreadIdChange(emitThreadIdChange);\n }\n\n public switchToNewThread(): Promise<void> {\n return this._startSwitchToNewThread(true);\n }\n\n private _switchToThreadFromProp(threadId: string | undefined): Promise<void> {\n return threadId !== undefined\n ? handleThreadListAction(\"switch\", () =>\n this._startSwitchToThread(threadId, undefined, false),\n )\n : handleThreadListAction(\"create\", () =>\n this._startSwitchToNewThread(false),\n );\n }\n\n private _startSwitchToNewThread(emitThreadIdChange: boolean): Promise<void> {\n const generation = ++this._switchGeneration;\n const task = this._switchToNewThread(generation, emitThreadIdChange);\n this._switchTask = task;\n return task;\n }\n\n private async _switchToNewThread(\n generation: number,\n emitThreadIdChange: boolean,\n ): Promise<void> {\n // an initialization transaction is in progress, wait for it to settle\n while (\n this._state.baseValue.newThreadId !== undefined &&\n this._state.value.newThreadId === undefined\n ) {\n await this._state.waitForUpdate();\n if (generation !== this._switchGeneration) return;\n }\n\n const state = this._state.baseValue;\n let id: string | undefined = this._state.value.newThreadId;\n if (id === undefined) {\n const next = seedNewThread(state);\n id = next.id;\n this._state.update(next.state);\n }\n\n return this._switchToThread(id, undefined, generation, emitThreadIdChange);\n }\n\n public initialize = async (threadId: string) => {\n const adapter = this._options.adapter;\n const adapterGeneration = this._adapterGeneration;\n if (this._state.value.newThreadId !== threadId) {\n this._requireAdapterSettled();\n const data = this.getItemById(threadId);\n if (!data) throw threadNotFoundError(threadId, \"initializing it\");\n if (data.status === \"new\")\n throw threadStatusError(threadId, data.status, \"be initialized here\");\n const { remoteId, externalId } = await data.initializeTask;\n this._requireAdapterGeneration(adapterGeneration);\n return { remoteId, externalId };\n }\n\n this._requireAdapterGeneration(adapterGeneration);\n const initializeTask = adapter.initialize(threadId);\n let removedMappingId: string | undefined;\n const { remoteId, externalId } = await this._state.optimisticUpdate({\n execute: () => initializeTask,\n optimistic: (state) =>\n promoteNewThreadReducer(state, threadId, initializeTask),\n then: (state, { remoteId, externalId }) => {\n if (adapterGeneration !== this._adapterGeneration) return state;\n const reconciliation = reconcileInitializedThread(\n state,\n threadId,\n remoteId,\n externalId,\n threadId,\n );\n removedMappingId = reconciliation.removedMappingId;\n if (removedMappingId === this._mainThreadId) {\n this._mainThreadId = reconciliation.survivorMappingId;\n }\n return reconciliation.state;\n },\n });\n this._requireAdapterGeneration(adapterGeneration);\n if (removedMappingId !== undefined) {\n this._hookManager.stopThreadRuntime(removedMappingId);\n }\n return { remoteId, externalId };\n };\n\n public generateTitle = async (\n threadId: string,\n options?: { automatic?: boolean },\n ) => {\n this._requireAdapterSettled();\n const adapter = this._options.adapter;\n const adapterGeneration = this._adapterGeneration;\n const data = this.getItemById(threadId);\n if (!data) throw threadNotFoundError(threadId, \"generating its title\");\n if (data.status === \"new\")\n throw threadStatusError(threadId, data.status, \"generate a title\");\n\n const { remoteId } = await data.initializeTask;\n this._requireAdapterGeneration(adapterGeneration);\n\n const runtimeCore = this._hookManager.getThreadRuntimeCore(data.id);\n if (!runtimeCore) return; // thread is no longer running\n\n // Incomplete assistant turns (running status, possibly empty content)\n // would make the payload race-dependent; the title reads settled\n // messages only, matching the trigger's readiness gate.\n const messages = runtimeCore.messages.filter(isTitleSourceMessage);\n await runThreadTitleGeneration({\n states: this._titleStates,\n threadId: data.id,\n automatic: options?.automatic === true,\n generate: async (onTitle) => {\n const stream = await adapter.generateTitle(remoteId, messages);\n this._requireAdapterGeneration(adapterGeneration);\n await applyTitleStream(stream, onTitle);\n },\n rename: async (title) => {\n this._requireAdapterGeneration(adapterGeneration);\n await adapter.rename(remoteId, title);\n },\n applyTitle: async (title) => {\n await this._state.optimisticUpdate({\n execute: async () => {},\n optimistic: (state) => {\n if (adapterGeneration !== this._adapterGeneration) return state;\n const currentData = getThreadData(state, data.id);\n if (!currentData) return state;\n return {\n ...state,\n threadData: {\n ...state.threadData,\n [currentData.id]: {\n ...currentData,\n title,\n },\n },\n };\n },\n });\n },\n });\n };\n\n public async rename(\n threadIdOrRemoteId: string,\n newTitle: string,\n ): Promise<void> {\n this._requireAdapterSettled();\n const adapter = this._options.adapter;\n const adapterGeneration = this._adapterGeneration;\n const data = this.getItemById(threadIdOrRemoteId);\n if (!data) throw threadNotFoundError(threadIdOrRemoteId, \"renaming it\");\n if (data.status === \"new\")\n throw threadStatusError(threadIdOrRemoteId, data.status, \"be renamed\");\n\n const claim = startThreadTitleRename(this._titleStates, data.id, newTitle);\n try {\n const result = await this._state.optimisticUpdate({\n execute: async () => {\n const { remoteId } = await data.initializeTask;\n this._requireAdapterGeneration(adapterGeneration);\n return adapter.rename(remoteId, newTitle);\n },\n optimistic: (state) => {\n const currentData = getThreadData(state, threadIdOrRemoteId);\n if (!currentData) return state;\n\n return {\n ...state,\n threadData: {\n ...state.threadData,\n [currentData.id]: {\n ...currentData,\n title: newTitle,\n },\n },\n };\n },\n });\n finishThreadTitleRename(this._titleStates, data.id, claim, true);\n return result;\n } catch (error) {\n finishThreadTitleRename(this._titleStates, data.id, claim, false);\n throw error;\n }\n }\n\n public async updateCustom(\n threadIdOrRemoteId: string,\n custom: Record<string, unknown> | undefined,\n ): Promise<void> {\n this._requireAdapterSettled();\n const adapter = this._options.adapter;\n const adapterGeneration = this._adapterGeneration;\n const data = this.getItemById(threadIdOrRemoteId);\n if (!data)\n throw threadNotFoundError(\n threadIdOrRemoteId,\n \"updating its custom metadata\",\n );\n if (data.status === \"new\")\n throw threadStatusError(\n threadIdOrRemoteId,\n data.status,\n \"update custom metadata\",\n );\n\n if (!adapter.updateCustom) {\n throw new Error(\n \"Remote thread list adapter does not support updating custom metadata\",\n );\n }\n\n return this._state.optimisticUpdate({\n execute: async () => {\n const { remoteId } = await data.initializeTask;\n this._requireAdapterGeneration(adapterGeneration);\n if (!adapter.updateCustom) {\n throw new Error(\n \"Remote thread list adapter does not support updating custom metadata\",\n );\n }\n return adapter.updateCustom(remoteId, custom);\n },\n optimistic: (state) => {\n const data = getThreadData(state, threadIdOrRemoteId);\n if (!data) return state;\n\n return {\n ...state,\n threadData: {\n ...state.threadData,\n [data.id]: {\n ...data,\n custom,\n },\n },\n };\n },\n });\n }\n\n private async _ensureThreadIsNotMain(threadId: string) {\n if (threadId === this.newThreadId)\n throw new Error(\"Cannot ensure new thread is not main\");\n\n let lastAwaitedTask: Promise<void> | undefined;\n\n while (threadId === this._mainThreadId) {\n // Rechecked each pass: the draft can become the new thread again\n // mid-loop when its failed first save rolls it back, and switching to a\n // new thread then re-adopts it, so no switch can move main off it.\n if (threadId === this.newThreadId)\n throw new Error(\"Cannot ensure new thread is not main\");\n let switchTask = this._switchTask;\n const startedFallback = !switchTask || switchTask === lastAwaitedTask;\n if (startedFallback) switchTask = this.switchToNewThread();\n lastAwaitedTask = switchTask;\n\n try {\n await switchTask;\n } catch (error) {\n if (startedFallback && this._switchTask === switchTask) {\n throw error;\n }\n }\n }\n }\n\n public async archive(threadIdOrRemoteId: string) {\n this._requireAdapterSettled();\n const adapter = this._options.adapter;\n const adapterGeneration = this._adapterGeneration;\n const data = this.getItemById(threadIdOrRemoteId);\n if (!data) throw threadNotFoundError(threadIdOrRemoteId, \"archiving it\");\n if (data.status !== \"regular\")\n throw threadStatusError(threadIdOrRemoteId, data.status, \"be archived\");\n\n await this._ensureThreadIsNotMain(data.id);\n this._requireAdapterGeneration(adapterGeneration);\n\n return this._state.optimisticUpdate({\n execute: async () => {\n const { remoteId } = await data.initializeTask;\n this._requireAdapterGeneration(adapterGeneration);\n return adapter.archive(remoteId);\n },\n optimistic: (state) => {\n return updateStatusReducer(state, data.id, \"archived\");\n },\n });\n }\n\n public async unarchive(threadIdOrRemoteId: string): Promise<void> {\n this._requireAdapterSettled();\n const adapter = this._options.adapter;\n const adapterGeneration = this._adapterGeneration;\n const data = this.getItemById(threadIdOrRemoteId);\n if (!data) throw threadNotFoundError(threadIdOrRemoteId, \"unarchiving it\");\n if (data.status !== \"archived\")\n throw threadStatusError(threadIdOrRemoteId, data.status, \"be unarchived\");\n\n return this._state.optimisticUpdate({\n execute: async () => {\n try {\n const { remoteId } = await data.initializeTask;\n this._requireAdapterGeneration(adapterGeneration);\n return await adapter.unarchive(remoteId);\n } catch (error) {\n if (adapterGeneration === this._adapterGeneration) {\n await this._ensureThreadIsNotMain(data.id);\n }\n throw error;\n }\n },\n optimistic: (state) => {\n return updateStatusReducer(state, data.id, \"regular\");\n },\n });\n }\n\n public async delete(threadIdOrRemoteId: string) {\n this._requireAdapterSettled();\n const adapter = this._options.adapter;\n const adapterGeneration = this._adapterGeneration;\n const data = this.getItemById(threadIdOrRemoteId);\n if (!data) throw threadNotFoundError(threadIdOrRemoteId, \"deleting it\");\n if (data.status !== \"regular\" && data.status !== \"archived\")\n throw threadStatusError(threadIdOrRemoteId, data.status, \"be deleted\");\n\n await this._ensureThreadIsNotMain(data.id);\n this._requireAdapterGeneration(adapterGeneration);\n const result = await this._state.optimisticUpdate({\n execute: async () => {\n const { remoteId } = await data.initializeTask;\n this._requireAdapterGeneration(adapterGeneration);\n return await adapter.delete(remoteId);\n },\n optimistic: (state) => {\n return updateStatusReducer(state, data.id, \"deleted\");\n },\n });\n // The optimistic layer survives an adapter swap, so a resolved deletion has\n // dropped the slot from `threadData`, where `_replaceWithThreads` would\n // otherwise have found it to stop.\n this._hookManager.stopThreadRuntime(data.id);\n clearThreadTitleState(this._titleStates, data.id);\n return result;\n }\n\n public __internal_dispose() {\n this._hookManager.__internal_dispose();\n }\n\n public async detach(threadIdOrRemoteId: string): Promise<void> {\n const adapterGeneration = this._adapterGeneration;\n const data = this.getItemById(threadIdOrRemoteId);\n if (!data) throw threadNotFoundError(threadIdOrRemoteId, \"detaching it\");\n if (data.status !== \"regular\" && data.status !== \"archived\")\n throw threadStatusError(threadIdOrRemoteId, data.status, \"be detached\");\n\n await this._ensureThreadIsNotMain(data.id);\n this._requireAdapterGeneration(adapterGeneration);\n this._hookManager.stopThreadRuntime(data.id);\n }\n\n private boundIdsStore = new WritableSubscribable<readonly string[]>([]);\n\n public __internal_RenderComponent: FC = () => {\n const id = useId();\n useEffect(() => {\n this.boundIdsStore.setState([...this.boundIdsStore.getState(), id]);\n return () => {\n this.boundIdsStore.setState(\n this.boundIdsStore.getState().filter((i) => i !== id),\n );\n };\n }, [id]);\n\n const boundIds = useSubscribable(this.boundIdsStore);\n const Provider = useSubscribable(this.providerStore);\n const aui = useAui();\n const enabled = boundIds.length === 0 || boundIds[0] === id;\n\n return (\n enabled && (\n <RuntimeAdapterProvider adapters={this._runtimeAdapters}>\n <this._hookManager.__internal_RenderThreadRuntimes\n provider={Provider}\n />\n <this._hookManager.__internal_Host parentClient={aui} />\n </RuntimeAdapterProvider>\n )\n );\n };\n}\n"],"mappings":"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"}
@@ -1,25 +1,20 @@
1
- import { Unsubscribe } from "../../types/unsubscribe.js";
2
- import { ThreadRuntimeCore } from "../../runtime/interfaces/thread-runtime-core.js";
3
- import { ThreadListRuntimeCore } from "../../runtime/interfaces/thread-list-runtime-core.js";
4
- import { ThreadListItemRuntime } from "../../runtime/api/thread-list-item-runtime.js";
5
- import { RuntimeAdapters } from "../../runtimes/remote-thread-list/types.js";
6
- import { AssistantRuntime } from "../../runtime/api/assistant-runtime.js";
7
- import "../../index.js";
8
- import "./RuntimeAdapterProvider.js";
9
1
  import { useConfiguredAui } from "@assistant-ui/store/client";
10
- //#region src/react/runtimes/RemoteThreadResource.d.ts
2
+ import type { AssistantRuntime } from "../../runtime/api/assistant-runtime.js";
3
+ import type { ThreadListRuntimeCore } from "../../runtime/interfaces/thread-list-runtime-core.js";
4
+ import type { ThreadRuntimeCore } from "../../runtime/interfaces/thread-runtime-core.js";
5
+ import { type ThreadListItemRuntime } from "../../runtime/api/thread-list-item-runtime.js";
6
+ import { type RuntimeAdapters } from "./RuntimeAdapterProvider.js";
11
7
  export type RemoteThreadListHook = () => AssistantRuntime;
12
8
  export type RemoteThreadResourceProps = {
13
- threadId: string;
14
- generation: number;
15
- parentList: ThreadListRuntimeCore;
16
- runtimeHook: RemoteThreadListHook;
17
- parentClient: Parameters<typeof useConfiguredAui>[0];
18
- adapters: RuntimeAdapters | null;
19
- publish: (threadId: string, runtime: ThreadRuntimeCore, generation: number) => void;
20
- destroySignal: AbortSignal;
9
+ threadId: string;
10
+ generation: number;
11
+ parentList: ThreadListRuntimeCore;
12
+ runtimeHook: RemoteThreadListHook;
13
+ parentClient: Parameters<typeof useConfiguredAui>[0];
14
+ adapters: RuntimeAdapters | null;
15
+ publish: (threadId: string, runtime: ThreadRuntimeCore, generation: number) => void;
16
+ destroySignal: AbortSignal;
21
17
  };
22
- export declare const subscribeToTitleGeneration: (threadRuntime: AssistantRuntime["thread"], itemRuntime: ThreadListItemRuntime) => Unsubscribe;
18
+ export declare const subscribeToTitleGeneration: (threadRuntime: AssistantRuntime["thread"], itemRuntime: ThreadListItemRuntime) => import("../../index.js").Unsubscribe;
23
19
  export declare const RemoteThreadResource: import("@assistant-ui/tap").Resource<AssistantRuntime, [RemoteThreadResourceProps]>;
24
- //#endregion
25
20
  //# sourceMappingURL=RemoteThreadResource.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"RemoteThreadResource.d.ts","names":[],"sources":["../../../src/react/runtimes/RemoteThreadResource.ts"],"mappings":";;;;;;;;;;YA2BY,6BAA6B;YAE7B;EACV;EACA;EACA,YAAY;EACZ,aAAa;EACb,cAAc,kBAAkB;EAChC,UAAU;EACV,UACE,kBACA,SAAS,mBACT;EAEF,eAAe;;qBAGJ,6BACX,eAAe,4BACf,aAAa,0BAAA;qBA8LF,kDAAoB,SAAA,mBAAA"}
1
+ {"version":3,"file":"RemoteThreadResource.d.ts","sourceRoot":"","sources":["../../../src/react/runtimes/RemoteThreadResource.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,gBAAgB,EAEjB,MAAM,4BAA4B,CAAC;AAEpC,OAAO,KAAK,EAAE,gBAAgB,EAAE,+CAA4C;AAC5E,OAAO,KAAK,EAAE,qBAAqB,EAAE,6DAA0D;AAC/F,OAAO,KAAK,EAAE,iBAAiB,EAAE,wDAAqD;AAEtF,OAAO,EAEL,KAAK,qBAAqB,EAC3B,sDAAmD;AAKpD,OAAO,EAEL,KAAK,eAAe,EACrB,oCAAiC;AAIlC,MAAM,MAAM,oBAAoB,GAAG,MAAM,gBAAgB,CAAC;AAE1D,MAAM,MAAM,yBAAyB,GAAG;IACtC,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,qBAAqB,CAAC;IAClC,WAAW,EAAE,oBAAoB,CAAC;IAClC,YAAY,EAAE,UAAU,CAAC,OAAO,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC;IACrD,QAAQ,EAAE,eAAe,GAAG,IAAI,CAAC;IACjC,OAAO,EAAE,CACP,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,iBAAiB,EAC1B,UAAU,EAAE,MAAM,KACf,IAAI,CAAC;IACV,aAAa,EAAE,WAAW,CAAC;CAC5B,CAAC;AAEF,eAAO,MAAM,0BAA0B,GACrC,eAAe,gBAAgB,CAAC,QAAQ,CAAC,EACzC,aAAa,qBAAqB,yCAwBnC,CAAC;AAyKF,eAAO,MAAM,oBAAoB,qFAAoC,CAAC"}
@@ -47,12 +47,14 @@ const useRemoteThreadBinder = ({ threadId, generation, runtimeHook, publish, ite
47
47
  }, [threadBinding, updateRuntime]);
48
48
  const initPromiseRef = useRef(void 0);
49
49
  const hasInitializedRef = useRef(false);
50
+ const bornNewRef = useRef(itemRuntime.getState().status === "new");
50
51
  const titleDisposeRef = useRef(void 0);
51
52
  const titleAliveRef = useRef(false);
52
53
  const handleInitialize = useEffectEvent(() => {
53
54
  if (hasInitializedRef.current) return;
54
- if (itemRuntime.getState().status !== "new") return;
55
+ if (itemRuntime.getState().status !== "new" && !bornNewRef.current) return;
55
56
  hasInitializedRef.current = true;
57
+ bornNewRef.current = false;
56
58
  const initPromise = itemRuntime.initialize();
57
59
  initPromiseRef.current = initPromise;
58
60
  initPromise.then(() => {
@@ -1 +1 @@
1
- {"version":3,"file":"RemoteThreadResource.js","names":["useCallback","useEffect","useEffectEvent","useMemo","useRef","resource","useAssistantContextProvider","useConfiguredAui","useDestroySignalProvider","ThreadListItemClient","AssistantRuntime","ThreadListRuntimeCore","ThreadRuntimeCore","ThreadRuntimeImpl","ThreadListItemRuntimeImpl","ThreadListItemRuntime","SKIP_UPDATE","ShallowMemoizeSubject","useRuntimeAdaptersProvider","RuntimeAdapters","isSilentRuntimeAction","isTitleSourceMessage","RemoteThreadListHook","RemoteThreadResourceProps","threadId","generation","parentList","runtimeHook","parentClient","Parameters","adapters","publish","runtime","destroySignal","AbortSignal","subscribeToTitleGeneration","threadRuntime","itemRuntime","generate","generateTitle","automatic","catch","error","console","hasTitleSource","getState","messages","some","unsubscribe","subscribe","useRemoteThreadBinder","threadBinding","thread","__internal_threadBinding","updateRuntime","isMounted","current","undefined","outerSubscribe","initPromiseRef","Promise","hasInitializedRef","titleDisposeRef","titleAliveRef","handleInitialize","state","status","initPromise","initialize","then","getInitializePromise","runtimeCore","setGetInitializePromise","Record","__internal_setGetInitializePromise","call","threads","main","unstable_on","useRemoteThreadResource","path","ref","threadSelector","type","data","getItemById","id","remoteId","externalId","title","lastMessageAt","custom","isMain","mainThreadId","isRunning","unstable_isThreadRunning","callback","client","threadListItem","useOwnedThread","useThreadClient","useBoundRuntime","RemoteThreadResource"],"sources":["../../../src/react/runtimes/RemoteThreadResource.ts"],"sourcesContent":["import { useCallback, useEffect, useEffectEvent, useMemo, useRef } from \"react\";\nimport { resource } from \"@assistant-ui/tap\";\nimport {\n useAssistantContextProvider,\n useConfiguredAui,\n useDestroySignalProvider,\n} from \"@assistant-ui/store/client\";\nimport { ThreadListItemClient } from \"../../store/internal\";\nimport type { AssistantRuntime } from \"../../runtime/api/assistant-runtime\";\nimport type { ThreadListRuntimeCore } from \"../../runtime/interfaces/thread-list-runtime-core\";\nimport type { ThreadRuntimeCore } from \"../../runtime/interfaces/thread-runtime-core\";\nimport type { ThreadRuntimeImpl } from \"../../runtime/api/thread-runtime\";\nimport {\n ThreadListItemRuntimeImpl,\n type ThreadListItemRuntime,\n} from \"../../runtime/api/thread-list-item-runtime\";\nimport {\n SKIP_UPDATE,\n ShallowMemoizeSubject,\n} from \"../../subscribable/subscribable\";\nimport {\n useRuntimeAdaptersProvider,\n type RuntimeAdapters,\n} from \"./RuntimeAdapterProvider\";\nimport { isSilentRuntimeAction } from \"../../utils/silent-runtime-action\";\nimport { isTitleSourceMessage } from \"../../runtimes/remote-thread-list/title\";\n\nexport type RemoteThreadListHook = () => AssistantRuntime;\n\nexport type RemoteThreadResourceProps = {\n threadId: string;\n generation: number;\n parentList: ThreadListRuntimeCore;\n runtimeHook: RemoteThreadListHook;\n parentClient: Parameters<typeof useConfiguredAui>[0];\n adapters: RuntimeAdapters | null;\n publish: (\n threadId: string,\n runtime: ThreadRuntimeCore,\n generation: number,\n ) => void;\n destroySignal: AbortSignal;\n};\n\nexport const subscribeToTitleGeneration = (\n threadRuntime: AssistantRuntime[\"thread\"],\n itemRuntime: ThreadListItemRuntime,\n) => {\n const generate = () =>\n void itemRuntime\n .generateTitle({ automatic: true })\n .catch((error: unknown) => {\n if (isSilentRuntimeAction(error)) return;\n console.error(\"[assistant-ui] Thread title generation failed\", error);\n });\n\n const hasTitleSource = () =>\n threadRuntime.getState().messages.some(isTitleSourceMessage);\n\n if (hasTitleSource()) {\n generate();\n return () => {};\n }\n\n const unsubscribe = threadRuntime.subscribe(() => {\n if (!hasTitleSource()) return;\n unsubscribe();\n generate();\n });\n return unsubscribe;\n};\n\nconst useRemoteThreadBinder = ({\n threadId,\n generation,\n runtimeHook,\n publish,\n itemRuntime,\n}: {\n threadId: string;\n generation: number;\n runtimeHook: RemoteThreadListHook;\n publish: RemoteThreadResourceProps[\"publish\"];\n itemRuntime: ThreadListItemRuntime;\n}) => {\n const runtime = runtimeHook();\n const threadBinding = (runtime?.thread as ThreadRuntimeImpl | undefined)\n ?.__internal_threadBinding;\n\n const updateRuntime = useCallback(() => {\n if (!threadBinding) return;\n publish(threadId, threadBinding.getState(), generation);\n }, [threadId, generation, threadBinding, publish]);\n\n const isMounted = useRef(false);\n if (!isMounted.current) {\n updateRuntime();\n }\n\n useEffect(() => {\n if (!threadBinding) return undefined;\n isMounted.current = true;\n updateRuntime();\n return threadBinding.outerSubscribe(updateRuntime);\n }, [threadBinding, updateRuntime]);\n\n const initPromiseRef = useRef<Promise<unknown> | undefined>(undefined);\n const hasInitializedRef = useRef(false);\n const titleDisposeRef = useRef<(() => void) | undefined>(undefined);\n const titleAliveRef = useRef(false);\n\n const handleInitialize = useEffectEvent(() => {\n if (hasInitializedRef.current) return;\n\n const state = itemRuntime.getState();\n if (state.status !== \"new\") return;\n hasInitializedRef.current = true;\n\n const initPromise = itemRuntime.initialize();\n initPromiseRef.current = initPromise;\n\n // The title needs the thread to exist and its first message, so it arms\n // when initialization resolves rather than at the first runEnd; waiting\n // for the run would leave the thread on \"New Chat\" for the whole\n // response, and forever when the run never completes.\n void initPromise.then(\n () => {\n if (!titleAliveRef.current) return;\n titleDisposeRef.current?.();\n titleDisposeRef.current = subscribeToTitleGeneration(\n runtime.thread,\n itemRuntime,\n );\n },\n () => {\n if (initPromiseRef.current === initPromise) {\n initPromiseRef.current = undefined;\n hasInitializedRef.current = false;\n }\n },\n );\n });\n\n const getInitializePromise = useEffectEvent(() => {\n handleInitialize();\n return initPromiseRef.current;\n });\n\n useEffect(() => {\n if (!threadBinding) return;\n const runtimeCore = threadBinding.getState();\n const setGetInitializePromise = (runtimeCore as Record<string, unknown>)\n .__internal_setGetInitializePromise;\n if (typeof setGetInitializePromise === \"function\") {\n setGetInitializePromise.call(runtimeCore, getInitializePromise);\n }\n }, [threadBinding]);\n useEffect(() => {\n if (!runtime?.threads?.main) return undefined;\n hasInitializedRef.current = false;\n titleAliveRef.current = true;\n const unsubscribe = runtime.threads.main.unstable_on(\n \"initialize\",\n handleInitialize,\n );\n return () => {\n titleAliveRef.current = false;\n unsubscribe();\n titleDisposeRef.current?.();\n titleDisposeRef.current = undefined;\n };\n }, [runtime]);\n\n return runtime;\n};\n\nconst useRemoteThreadResource = ({\n threadId,\n generation,\n parentList,\n runtimeHook,\n parentClient,\n adapters,\n publish,\n destroySignal,\n}: RemoteThreadResourceProps) => {\n const itemRuntime = useMemo(\n () =>\n new ThreadListItemRuntimeImpl(\n new ShallowMemoizeSubject({\n path: {\n ref: `threadItems[threadId=${threadId}]`,\n threadSelector: { type: \"threadId\", threadId },\n },\n getState: () => {\n const data = parentList.getItemById(threadId);\n if (!data) return SKIP_UPDATE;\n return {\n id: data.id,\n remoteId: data.remoteId,\n externalId: data.externalId,\n title: data.title,\n lastMessageAt: data.lastMessageAt,\n custom: data.custom,\n status: data.status,\n isMain: data.id === parentList.mainThreadId,\n isRunning:\n parentList.unstable_isThreadRunning?.(data.id) ?? false,\n };\n },\n subscribe: (callback) => parentList.subscribe(callback),\n }),\n parentList,\n ),\n [parentList, threadId],\n );\n\n const { client } = useConfiguredAui(parentClient, {\n threadListItem: ThreadListItemClient({ runtime: itemRuntime }),\n });\n\n return useDestroySignalProvider(destroySignal, function useOwnedThread() {\n return useAssistantContextProvider(client, function useThreadClient() {\n return useRuntimeAdaptersProvider(adapters, function useBoundRuntime() {\n return useRemoteThreadBinder({\n threadId,\n generation,\n runtimeHook,\n publish,\n itemRuntime,\n });\n });\n });\n });\n};\n\nexport const RemoteThreadResource = resource(useRemoteThreadResource);\n"],"mappings":"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"}
1
+ {"version":3,"file":"RemoteThreadResource.js","names":["useCallback","useEffect","useEffectEvent","useMemo","useRef","resource","useAssistantContextProvider","useConfiguredAui","useDestroySignalProvider","ThreadListItemClient","AssistantRuntime","ThreadListRuntimeCore","ThreadRuntimeCore","ThreadRuntimeImpl","ThreadListItemRuntimeImpl","ThreadListItemRuntime","SKIP_UPDATE","ShallowMemoizeSubject","useRuntimeAdaptersProvider","RuntimeAdapters","isSilentRuntimeAction","isTitleSourceMessage","RemoteThreadListHook","RemoteThreadResourceProps","threadId","generation","parentList","runtimeHook","parentClient","Parameters","adapters","publish","runtime","destroySignal","AbortSignal","subscribeToTitleGeneration","threadRuntime","itemRuntime","generate","generateTitle","automatic","catch","error","console","hasTitleSource","getState","messages","some","unsubscribe","subscribe","useRemoteThreadBinder","threadBinding","thread","__internal_threadBinding","updateRuntime","isMounted","current","undefined","outerSubscribe","initPromiseRef","Promise","hasInitializedRef","bornNewRef","status","titleDisposeRef","titleAliveRef","handleInitialize","initPromise","initialize","then","getInitializePromise","runtimeCore","setGetInitializePromise","Record","__internal_setGetInitializePromise","call","threads","main","unstable_on","useRemoteThreadResource","path","ref","threadSelector","type","data","getItemById","id","remoteId","externalId","title","lastMessageAt","custom","isMain","mainThreadId","isRunning","unstable_isThreadRunning","callback","client","threadListItem","useOwnedThread","useThreadClient","useBoundRuntime","RemoteThreadResource"],"sources":["../../../src/react/runtimes/RemoteThreadResource.ts"],"sourcesContent":["import { useCallback, useEffect, useEffectEvent, useMemo, useRef } from \"react\";\nimport { resource } from \"@assistant-ui/tap\";\nimport {\n useAssistantContextProvider,\n useConfiguredAui,\n useDestroySignalProvider,\n} from \"@assistant-ui/store/client\";\nimport { ThreadListItemClient } from \"../../store/internal\";\nimport type { AssistantRuntime } from \"../../runtime/api/assistant-runtime\";\nimport type { ThreadListRuntimeCore } from \"../../runtime/interfaces/thread-list-runtime-core\";\nimport type { ThreadRuntimeCore } from \"../../runtime/interfaces/thread-runtime-core\";\nimport type { ThreadRuntimeImpl } from \"../../runtime/api/thread-runtime\";\nimport {\n ThreadListItemRuntimeImpl,\n type ThreadListItemRuntime,\n} from \"../../runtime/api/thread-list-item-runtime\";\nimport {\n SKIP_UPDATE,\n ShallowMemoizeSubject,\n} from \"../../subscribable/subscribable\";\nimport {\n useRuntimeAdaptersProvider,\n type RuntimeAdapters,\n} from \"./RuntimeAdapterProvider\";\nimport { isSilentRuntimeAction } from \"../../utils/silent-runtime-action\";\nimport { isTitleSourceMessage } from \"../../runtimes/remote-thread-list/title\";\n\nexport type RemoteThreadListHook = () => AssistantRuntime;\n\nexport type RemoteThreadResourceProps = {\n threadId: string;\n generation: number;\n parentList: ThreadListRuntimeCore;\n runtimeHook: RemoteThreadListHook;\n parentClient: Parameters<typeof useConfiguredAui>[0];\n adapters: RuntimeAdapters | null;\n publish: (\n threadId: string,\n runtime: ThreadRuntimeCore,\n generation: number,\n ) => void;\n destroySignal: AbortSignal;\n};\n\nexport const subscribeToTitleGeneration = (\n threadRuntime: AssistantRuntime[\"thread\"],\n itemRuntime: ThreadListItemRuntime,\n) => {\n const generate = () =>\n void itemRuntime\n .generateTitle({ automatic: true })\n .catch((error: unknown) => {\n if (isSilentRuntimeAction(error)) return;\n console.error(\"[assistant-ui] Thread title generation failed\", error);\n });\n\n const hasTitleSource = () =>\n threadRuntime.getState().messages.some(isTitleSourceMessage);\n\n if (hasTitleSource()) {\n generate();\n return () => {};\n }\n\n const unsubscribe = threadRuntime.subscribe(() => {\n if (!hasTitleSource()) return;\n unsubscribe();\n generate();\n });\n return unsubscribe;\n};\n\nconst useRemoteThreadBinder = ({\n threadId,\n generation,\n runtimeHook,\n publish,\n itemRuntime,\n}: {\n threadId: string;\n generation: number;\n runtimeHook: RemoteThreadListHook;\n publish: RemoteThreadResourceProps[\"publish\"];\n itemRuntime: ThreadListItemRuntime;\n}) => {\n const runtime = runtimeHook();\n const threadBinding = (runtime?.thread as ThreadRuntimeImpl | undefined)\n ?.__internal_threadBinding;\n\n const updateRuntime = useCallback(() => {\n if (!threadBinding) return;\n publish(threadId, threadBinding.getState(), generation);\n }, [threadId, generation, threadBinding, publish]);\n\n const isMounted = useRef(false);\n if (!isMounted.current) {\n updateRuntime();\n }\n\n useEffect(() => {\n if (!threadBinding) return undefined;\n isMounted.current = true;\n updateRuntime();\n return threadBinding.outerSubscribe(updateRuntime);\n }, [threadBinding, updateRuntime]);\n\n const initPromiseRef = useRef<Promise<unknown> | undefined>(undefined);\n const hasInitializedRef = useRef(false);\n // Any caller's initialize() moves the item off \"new\"; a thread born \"new\"\n // here still joins that initialization so its title arms.\n const bornNewRef = useRef(itemRuntime.getState().status === \"new\");\n const titleDisposeRef = useRef<(() => void) | undefined>(undefined);\n const titleAliveRef = useRef(false);\n\n const handleInitialize = useEffectEvent(() => {\n if (hasInitializedRef.current) return;\n\n if (itemRuntime.getState().status !== \"new\" && !bornNewRef.current) return;\n hasInitializedRef.current = true;\n bornNewRef.current = false;\n\n const initPromise = itemRuntime.initialize();\n initPromiseRef.current = initPromise;\n\n // The title needs the thread to exist and its first message, so it arms\n // when initialization resolves rather than at the first runEnd; waiting\n // for the run would leave the thread on \"New Chat\" for the whole\n // response, and forever when the run never completes.\n void initPromise.then(\n () => {\n if (!titleAliveRef.current) return;\n titleDisposeRef.current?.();\n titleDisposeRef.current = subscribeToTitleGeneration(\n runtime.thread,\n itemRuntime,\n );\n },\n () => {\n if (initPromiseRef.current === initPromise) {\n initPromiseRef.current = undefined;\n hasInitializedRef.current = false;\n }\n },\n );\n });\n\n const getInitializePromise = useEffectEvent(() => {\n handleInitialize();\n return initPromiseRef.current;\n });\n\n useEffect(() => {\n if (!threadBinding) return;\n const runtimeCore = threadBinding.getState();\n const setGetInitializePromise = (runtimeCore as Record<string, unknown>)\n .__internal_setGetInitializePromise;\n if (typeof setGetInitializePromise === \"function\") {\n setGetInitializePromise.call(runtimeCore, getInitializePromise);\n }\n }, [threadBinding]);\n useEffect(() => {\n if (!runtime?.threads?.main) return undefined;\n hasInitializedRef.current = false;\n titleAliveRef.current = true;\n const unsubscribe = runtime.threads.main.unstable_on(\n \"initialize\",\n handleInitialize,\n );\n return () => {\n titleAliveRef.current = false;\n unsubscribe();\n titleDisposeRef.current?.();\n titleDisposeRef.current = undefined;\n };\n }, [runtime]);\n\n return runtime;\n};\n\nconst useRemoteThreadResource = ({\n threadId,\n generation,\n parentList,\n runtimeHook,\n parentClient,\n adapters,\n publish,\n destroySignal,\n}: RemoteThreadResourceProps) => {\n const itemRuntime = useMemo(\n () =>\n new ThreadListItemRuntimeImpl(\n new ShallowMemoizeSubject({\n path: {\n ref: `threadItems[threadId=${threadId}]`,\n threadSelector: { type: \"threadId\", threadId },\n },\n getState: () => {\n const data = parentList.getItemById(threadId);\n if (!data) return SKIP_UPDATE;\n return {\n id: data.id,\n remoteId: data.remoteId,\n externalId: data.externalId,\n title: data.title,\n lastMessageAt: data.lastMessageAt,\n custom: data.custom,\n status: data.status,\n isMain: data.id === parentList.mainThreadId,\n isRunning:\n parentList.unstable_isThreadRunning?.(data.id) ?? false,\n };\n },\n subscribe: (callback) => parentList.subscribe(callback),\n }),\n parentList,\n ),\n [parentList, threadId],\n );\n\n const { client } = useConfiguredAui(parentClient, {\n threadListItem: ThreadListItemClient({ runtime: itemRuntime }),\n });\n\n return useDestroySignalProvider(destroySignal, function useOwnedThread() {\n return useAssistantContextProvider(client, function useThreadClient() {\n return useRuntimeAdaptersProvider(adapters, function useBoundRuntime() {\n return useRemoteThreadBinder({\n threadId,\n generation,\n runtimeHook,\n publish,\n itemRuntime,\n });\n });\n });\n });\n};\n\nexport const RemoteThreadResource = resource(useRemoteThreadResource);\n"],"mappings":"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"}
@@ -1,14 +1,13 @@
1
- import { RuntimeAdapters } from "../../runtimes/remote-thread-list/types.js";
1
+ import { type FC, type ReactNode } from "react";
2
+ import type { RuntimeAdapters } from "../../runtimes/remote-thread-list/types.js";
2
3
  import { useRuntimeAdapters, useRuntimeAdaptersProvider } from "./useRuntimeAdapters.js";
3
- import { FC, ReactNode } from "react";
4
- //#region src/react/runtimes/RuntimeAdapterProvider.d.ts
4
+ export type { RuntimeAdapters };
5
+ export { useRuntimeAdapters, useRuntimeAdaptersProvider };
5
6
  export declare namespace RuntimeAdapterProvider {
6
- type Props = {
7
- adapters: RuntimeAdapters;
8
- children: ReactNode;
9
- };
7
+ type Props = {
8
+ adapters: RuntimeAdapters;
9
+ children: ReactNode;
10
+ };
10
11
  }
11
12
  export declare const RuntimeAdapterProvider: FC<RuntimeAdapterProvider.Props>;
12
- //#endregion
13
- export { type RuntimeAdapters, useRuntimeAdapters, useRuntimeAdaptersProvider };
14
13
  //# sourceMappingURL=RuntimeAdapterProvider.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"RuntimeAdapterProvider.d.ts","names":[],"sources":["../../../src/react/runtimes/RuntimeAdapterProvider.tsx"],"mappings":";;;;yBAWiB;OACH;IACV,UAAU;IACV,UAAU;;;qBAID,wBAAwB,GAAG,uBAAuB"}
1
+ {"version":3,"file":"RuntimeAdapterProvider.d.ts","sourceRoot":"","sources":["../../../src/react/runtimes/RuntimeAdapterProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,EAAE,KAAK,SAAS,EAAuB,MAAM,OAAO,CAAC;AACrE,OAAO,KAAK,EAAE,eAAe,EAAE,mDAAgD;AAC/E,OAAO,EAEL,kBAAkB,EAClB,0BAA0B,EAC3B,gCAA6B;AAE9B,YAAY,EAAE,eAAe,EAAE,CAAC;AAChC,OAAO,EAAE,kBAAkB,EAAE,0BAA0B,EAAE,CAAC;AAE1D,yBAAiB,sBAAsB,CAAC;IACtC,KAAY,KAAK,GAAG;QAClB,QAAQ,EAAE,eAAe,CAAC;QAC1B,QAAQ,EAAE,SAAS,CAAC;KACrB,CAAC;CACH;AAED,eAAO,MAAM,sBAAsB,EAAE,EAAE,CAAC,sBAAsB,CAAC,KAAK,CAcnE,CAAC"}
@@ -1,16 +1,14 @@
1
- import { AssistantTransportCommand, CommandQueueState, QueuedCommand } from "./types.js";
2
- //#region src/react/runtimes/assistant-transport/commandQueue.d.ts
1
+ import type { AssistantTransportCommand, CommandQueueState, QueuedCommand } from "./types.js";
3
2
  export declare const createInitialQueueState: () => CommandQueueState;
4
3
  export declare const useCommandQueue: (opts: {
5
- onQueue: () => void;
4
+ onQueue: () => void;
6
5
  }) => {
7
- readonly state: CommandQueueState;
8
- enqueue: (command: AssistantTransportCommand, options?: {
9
- schedule?: boolean;
10
- }) => void;
11
- flush: () => QueuedCommand[];
12
- markDelivered: () => void;
13
- reset: () => void;
6
+ readonly state: CommandQueueState;
7
+ enqueue: (command: AssistantTransportCommand, options?: {
8
+ schedule?: boolean;
9
+ }) => void;
10
+ flush: () => QueuedCommand[];
11
+ markDelivered: () => void;
12
+ reset: () => void;
14
13
  };
15
- //#endregion
16
14
  //# sourceMappingURL=commandQueue.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"commandQueue.d.ts","names":[],"sources":["../../../../src/react/runtimes/assistant-transport/commandQueue.ts"],"mappings":";;qBAOa,+BAA8B;qBAK9B,kBAAmB;EAAQ;;;EAU3B,UAAA,SAAA,2BAAyB;IACtB;;EAWI,aAAA"}
1
+ {"version":3,"file":"commandQueue.d.ts","sourceRoot":"","sources":["../../../../src/react/runtimes/assistant-transport/commandQueue.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,yBAAyB,EACzB,iBAAiB,EACjB,aAAa,EACd,mBAAgB;AAEjB,eAAO,MAAM,uBAAuB,QAAO,iBAGzC,CAAC;AAEH,eAAO,MAAM,eAAe,GAAI,MAAM;IAAE,OAAO,EAAE,MAAM,IAAI,CAAA;CAAE;;uBAUhD,yBAAyB,YACxB;QAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;KAAE;iBAWhB,aAAa,EAAE;;;CAiClC,CAAC"}
@@ -1,10 +1,9 @@
1
- //#region src/react/runtimes/assistant-transport/replayBoundaryStream.d.ts
2
1
  export declare const REPLAY_CONTENT_LENGTH_HEADER = "Aui-Replay-Content-Length";
3
2
  type ReplayBoundaryStreamOptions = {
4
- setReplaying: (value: boolean) => void;
5
- waitForRender: () => Promise<void>;
3
+ setReplaying: (value: boolean) => void;
4
+ waitForRender: () => Promise<void>;
6
5
  };
7
6
  export declare const useReplayRenderWait: () => () => Promise<void>;
8
- export declare const createReplayBoundaryStream: (response: Response, { setReplaying, waitForRender: waitForReplayRender }: ReplayBoundaryStreamOptions) => Promise<ReadableStream<Uint8Array>>;
9
- //#endregion
7
+ export declare const createReplayBoundaryStream: (response: Response, { setReplaying, waitForRender: waitForReplayRender, }: ReplayBoundaryStreamOptions) => Promise<ReadableStream<Uint8Array>>;
8
+ export {};
10
9
  //# sourceMappingURL=replayBoundaryStream.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"replayBoundaryStream.d.ts","names":[],"sources":["../../../../src/react/runtimes/assistant-transport/replayBoundaryStream.ts"],"mappings":";qBAIa;KAER;EACH,eAAe;EACf,qBAAqB;;qBAGV,iCAAmB;qBA6DnB,6BACX,UAAU,YACV,cAAA,eAAA,uBAGG,gCACF,QAAQ,eAAe"}
1
+ {"version":3,"file":"replayBoundaryStream.d.ts","sourceRoot":"","sources":["../../../../src/react/runtimes/assistant-transport/replayBoundaryStream.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,4BAA4B,8BAA8B,CAAC;AAExE,KAAK,2BAA2B,GAAG;IACjC,YAAY,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IACvC,aAAa,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CACpC,CAAC;AAEF,eAAO,MAAM,mBAAmB,2BAkD/B,CAAC;AAWF,eAAO,MAAM,0BAA0B,GACrC,UAAU,QAAQ,EAClB,uDAGG,2BAA2B,KAC7B,OAAO,CAAC,cAAc,CAAC,UAAU,CAAC,CAqGpC,CAAC"}
@@ -92,7 +92,13 @@ const createReplayBoundaryStream = async (response, { setReplaying, waitForRende
92
92
  const reader = body.getReader();
93
93
  let bytesForwarded = 0;
94
94
  let replayFinished = false;
95
+ let replayCleared = false;
95
96
  let readerCleanup;
97
+ const clearReplay = () => {
98
+ if (replayCleared) return;
99
+ replayCleared = true;
100
+ setReplaying(false);
101
+ };
96
102
  const releaseReader = () => {
97
103
  if (readerCleanup) return readerCleanup;
98
104
  reader.releaseLock();
@@ -114,7 +120,7 @@ const createReplayBoundaryStream = async (response, { setReplaying, waitForRende
114
120
  if (replayFinished) return;
115
121
  replayFinished = true;
116
122
  await waitForReplayRender();
117
- setReplaying(false);
123
+ clearReplay();
118
124
  await waitForReplayRender();
119
125
  };
120
126
  return new ReadableStream({
@@ -147,6 +153,7 @@ const createReplayBoundaryStream = async (response, { setReplaying, waitForRende
147
153
  await finishReplay();
148
154
  controller.enqueue(value.subarray(replayBytesInChunk));
149
155
  } catch (error) {
156
+ clearReplay();
150
157
  await cancelReader(error).catch(() => {});
151
158
  throw error;
152
159
  }
@@ -154,7 +161,7 @@ const createReplayBoundaryStream = async (response, { setReplaying, waitForRende
154
161
  async cancel(reason) {
155
162
  const wasFinished = replayFinished;
156
163
  replayFinished = true;
157
- if (!wasFinished) setReplaying(false);
164
+ if (!wasFinished) clearReplay();
158
165
  await cancelReader(reason);
159
166
  }
160
167
  });