@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":"RemoteThreadList.js","names":["useCallback","useEffect","useMemo","useRef","useState","useSyncExternalStore","resource","withKey","ResourceElement","ClientOutput","attachTransformScopes","Derived","useAssistantContextProvider","useAssistantContextValue","useClientLookup","useClientResource","useConfiguredAui","isDevelopment","useThreadSelectionEvents","OptimisticState","classifyThreads","createEmptyRemoteThreadState","createThreadMappingId","getThreadData","normalizeCursor","reconcileInitializedThread","promoteNewThreadReducer","updateStatusReducer","RemoteThreadData","RemoteThreadState","preserveMidLoadTransitions","seedNewThread","statusSnapshot","RemoteThreadInitializeResponse","RemoteThreadListAdapter","ThreadListAdapterChangedError","ThreadMessage","handleThreadListAction","inMemoryThreadListTransformScopes","InMemoryThreadListProps","AdaptedRemoteThread","applyTitleStream","isTitleSourceMessage","clearThreadTitleState","finishThreadTitleRename","runThreadTitleGeneration","startThreadTitleRename","ThreadTitleState","invokeUserCallback","RESOLVED_PROMISE","Promise","resolve","EMPTY_LIST","RemoteThreadListProps","adapter","thread","threadId","onThreadIdChange","onSwitchToThread","onSwitchToNewThread","onDelete","backgroundThreads","threadNotFoundError","threadIdOrRemoteId","action","Error","threadStatusError","status","toInitializeResult","result","remoteId","externalId","useThreadListItemClient","props","$","_c","data","isRunning","onSwitchTo","onRename","onUpdateCustom","onArchive","onUnarchive","onGenerateTitle","onInitialize","onDetach","t0","lastMessageAt","undefined","t1","custom","id","title","state","t2","t3","getState","switchTo","rename","updateCustom","archive","unarchive","delete","generateTitle","initialize","detach","ThreadListItemClient","collectItemOrder","listState","mainThreadId","ids","newThreadId","threadIds","archivedThreadIds","filter","seenIds","Set","seenRemoteIds","items","has","add","push","itemMatchesId","item","isSameThread","left","right","useRemoteThreadBody","parent","setIsRunning","itemHandle","client","threadListItem","source","query","type","get","methods","bornNewRef","titleFiredRef","useBoundRemoteBody","body","bodyRunning","armed","current","hasTitleSource","messages","some","automatic","RemoteThreadBody","useMainThreadFacade","currentRef","facade","Proxy","_","prop","Record","PropertyKey","ownKeys","Reflect","getOwnPropertyDescriptor","useRemoteThreadListView","startedIds","threadFactory","useAdapters","bb0","seen","bodyIds","itemElementFor","data_0","options","options_0","bodyStateOf","mainThreadClient","bodies","map","id_0","made","key","wrapped","data_1","element","isRunning_0","id_1","direct","indexOf","findIndex","bodyId","bodyIndexOf","id_2","index","t4","t5","mainIndex","t6","itemOrder","threadListItems","data_2","t7","useRemoteThreadList","store","initialMainId","session","seeded","adapterAtLoad","adapterGeneration","titleStates","Map","loadGeneration","switchGeneration","loadPromise","loadMorePromise","lastNotifiedRemoteId","lastControlledThreadId","switchTask","isFirstThreadIdEffect","onStoreChange","subscribe","value","setMainThreadId","setStartedIds","assignMainThreadId","prev","includes","notifyRemoteId","emit","getLoadThreadsPromise","generation","statusAtRequest","baseValue","optimisticUpdate","execute","list","loading","isLoading","loadError","then","page","fresh","threads","threadIdMap","threadData","merged","cursor","nextCursor","catch","error","console","update","reload","adapterChanged","clear","reset","window","document","retryAfterError","retryAfterVisible","visibilityState","addEventListener","removeEventListener","unstable_useAdapters","unstable_Provider","warn","loadMore","snapshot","currentAdapter","task","after","isLoadingMore","appended","startSwitch","run","settle","reject","switchToThread","emitThreadIdChange","remoteMetadata","fetch","mappingId","wasInTarget","threadIdsWithoutRemote","archivedThreadIdsWithoutRemote","initializeTask","targetId","optimistic","switchToNewThread","waitForUpdate","existing","existingId","ensureNotMain","lastAwaitedTask","startedFallback","requireAdapterGeneration","removedMappingId","replacementMainThreadId","retainedThreadId","reconciliation","survivorMappingId","startedId","newTitle","claim","deleteThread","states","generate","onTitle","stream","applyTitle","mainRemoteId","Object","is","hasMore","threadItems","main","reloadMainThread","unstable_refetchThread","selector","archived","RemoteThreadList"],"sources":["../../../src/react/client/RemoteThreadList.ts"],"sourcesContent":["import {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n useSyncExternalStore,\n} from \"react\";\nimport { resource, withKey, type ResourceElement } from \"@assistant-ui/tap\";\nimport type { ClientOutput } from \"@assistant-ui/store\";\nimport {\n attachTransformScopes,\n Derived,\n useAssistantContextProvider,\n useAssistantContextValue,\n useClientLookup,\n useClientResource,\n useConfiguredAui,\n} from \"@assistant-ui/store/client\";\nimport { isDevelopment, useThreadSelectionEvents } from \"../../store/internal\";\nimport { OptimisticState } from \"../../runtimes/remote-thread-list/optimistic-state\";\nimport {\n classifyThreads,\n createEmptyRemoteThreadState,\n createThreadMappingId,\n getThreadData,\n normalizeCursor,\n reconcileInitializedThread,\n promoteNewThreadReducer,\n updateStatusReducer,\n type RemoteThreadData,\n type RemoteThreadState,\n preserveMidLoadTransitions,\n seedNewThread,\n statusSnapshot,\n} from \"../../runtimes/remote-thread-list/remote-thread-state\";\nimport type {\n RemoteThreadInitializeResponse,\n RemoteThreadListAdapter,\n} from \"../../runtimes/remote-thread-list/types\";\nimport { ThreadListAdapterChangedError } from \"../../runtimes/remote-thread-list/adapter-changed\";\nimport type { ThreadMessage } from \"../../types/message\";\nimport { handleThreadListAction } from \"../../store/runtime-clients/handle-thread-list-action\";\nimport {\n inMemoryThreadListTransformScopes,\n type InMemoryThreadListProps,\n} from \"./InMemoryThreadList\";\nimport { AdaptedRemoteThread } from \"./AdaptedRemoteThread\";\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 { invokeUserCallback } from \"../../utils/invoke-user-callback\";\n\nconst RESOLVED_PROMISE = Promise.resolve();\n\nconst EMPTY_LIST = createEmptyRemoteThreadState();\n\nexport type RemoteThreadListProps = {\n /**\n * Swapping this to a different backing store does not reload the list. Call `reload()` after a genuine swap. A recreated object for the same store is a no-op. `reload()` after a different adapter instance resets selection and cached records before loading.\n */\n adapter: RemoteThreadListAdapter;\n /**\n * Factory for the visible thread. Per-thread history reload requires a\n * resource keyed by thread id (`withKey(id, thread(...))`). An unkeyed\n * factory keeps one instance across switches, so a mount-once history\n * loader will not fetch the next thread.\n */\n thread: InMemoryThreadListProps[\"thread\"];\n threadId?: string | undefined;\n onThreadIdChange?: ((threadId: string | undefined) => void) | undefined;\n onSwitchToThread?: ((threadId: string) => void) | undefined;\n onSwitchToNewThread?: (() => void) | undefined;\n /** Called after the backing adapter successfully deletes the thread. */\n onDelete?: ((threadId: string) => void) | undefined;\n /**\n * Keeps every thread the session switched to mounted, so a run continues\n * after the user switches away, per-item `isRunning` reflects background\n * runs, and a freshly initialized thread generates its title automatically.\n * A body unmounts on delete, detach, or an adapter replacement (`reload()`\n * after swapping the adapter); visited threads otherwise stay mounted for\n * the client's lifetime. Each body reads its own thread through the ambient\n * `threadListItem` scope, and `unstable_useAdapters` runs once per mounted\n * body. Off (the default), only the visible thread is mounted and a switch\n * unmounts it. The mode is fixed at mount.\n */\n backgroundThreads?: boolean | undefined;\n};\n\nconst threadNotFoundError = (threadIdOrRemoteId: string, action: string) =>\n new Error(`Thread \"${threadIdOrRemoteId}\" was 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 toInitializeResult = (\n result: RemoteThreadInitializeResponse,\n): { remoteId: string; externalId: string | undefined } => ({\n remoteId: result.remoteId,\n externalId: result.externalId,\n});\n\nconst useThreadListItemClient = (props: {\n data: RemoteThreadData;\n isRunning: boolean;\n onSwitchTo: (options?: { unarchive?: boolean }) => void;\n onRename: (title: string) => void;\n onUpdateCustom: (custom: Record<string, unknown> | undefined) => void;\n onArchive: () => void;\n onUnarchive: () => void;\n onDelete: () => void;\n onGenerateTitle: (options?: { automatic?: boolean }) => void;\n onInitialize: () => Promise<{\n remoteId: string;\n externalId: string | undefined;\n }>;\n onDetach: () => void;\n}): ClientOutput<\"threadListItem\"> => {\n const {\n data,\n isRunning,\n onSwitchTo,\n onRename,\n onUpdateCustom,\n onArchive,\n onUnarchive,\n onDelete,\n onGenerateTitle,\n onInitialize,\n onDetach,\n } = props;\n const state = useMemo(\n () => ({\n id: data.id,\n remoteId: data.remoteId,\n externalId: data.externalId,\n title: data.title,\n lastMessageAt: \"lastMessageAt\" in data ? data.lastMessageAt : undefined,\n status: data.status,\n custom: data.custom,\n isRunning,\n }),\n [data, isRunning],\n );\n\n return {\n getState: () => state,\n switchTo: onSwitchTo,\n rename: onRename,\n updateCustom: onUpdateCustom,\n archive: onArchive,\n unarchive: onUnarchive,\n delete: onDelete,\n generateTitle: onGenerateTitle,\n initialize: onInitialize,\n detach: onDetach,\n };\n};\n\nconst ThreadListItemClient = resource(useThreadListItemClient);\n\nconst collectItemOrder = (\n listState: RemoteThreadState,\n mainThreadId: string,\n): RemoteThreadData[] => {\n const ids = [\n listState.newThreadId,\n ...listState.threadIds,\n ...listState.archivedThreadIds,\n mainThreadId,\n ].filter((id): id is string => id !== undefined);\n const seenIds = new Set<string>();\n const seenRemoteIds = new Set<string>();\n const items: RemoteThreadData[] = [];\n for (const id of ids) {\n const data = getThreadData(listState, id);\n if (!data || seenIds.has(data.id)) continue;\n if (data.remoteId !== undefined && seenRemoteIds.has(data.remoteId)) {\n continue;\n }\n seenIds.add(data.id);\n if (data.remoteId !== undefined) seenRemoteIds.add(data.remoteId);\n items.push(data);\n }\n return items;\n};\n\nconst itemMatchesId = (\n item: RemoteThreadData,\n listState: RemoteThreadState,\n id: string,\n) => {\n const data = getThreadData(listState, id);\n return (\n item.id === id ||\n item.id === data?.id ||\n (data?.remoteId !== undefined &&\n (item.id === data.remoteId || item.remoteId === data.remoteId))\n );\n};\n\nconst isSameThread = (\n listState: RemoteThreadState,\n left: string,\n right: string,\n) => {\n if (left === right) return true;\n const data = getThreadData(listState, left);\n return data !== undefined && itemMatchesId(data, listState, right);\n};\n\nconst useRemoteThreadBody = ({\n id,\n status,\n remoteId,\n item,\n thread,\n}: {\n id: string;\n status: RemoteThreadData[\"status\"];\n remoteId: string | undefined;\n item: (isRunning: boolean) => ResourceElement<ClientOutput<\"threadListItem\">>;\n thread: ResourceElement<ClientOutput<\"thread\">>;\n}): ClientOutput<\"thread\"> => {\n const parent = useAssistantContextValue();\n const [isRunning, setIsRunning] = useState(false);\n // The item client is mounted inside the body and served to the subtree\n // through a Derived scope, which keeps the graft on the derived-only (no\n // nested client host) path; resolving `parent.threads` here instead would\n // read the threads scope during its own construction.\n const itemHandle = useClientResource(item(isRunning));\n const { client } = useConfiguredAui(parent, {\n threadListItem: Derived({\n source: \"threads\",\n query: { type: \"id\", id },\n get: () => itemHandle.methods,\n }),\n });\n // Auto-title arms only for a thread born \"new\" in this body's lifetime;\n // threads loaded or fetched from the adapter already carry their title. The\n // settled (non-optimistic) initialize is what writes remoteId, so its\n // arrival is the initialization signal.\n const bornNewRef = useRef(status === \"new\");\n const titleFiredRef = useRef(false);\n return useAssistantContextProvider(client, function useBoundRemoteBody() {\n const body = useClientResource(thread);\n const bodyRunning = body.state.isRunning === true;\n useEffect(() => {\n setIsRunning(bodyRunning);\n }, [bodyRunning]);\n const armed =\n bornNewRef.current && !titleFiredRef.current && remoteId !== undefined;\n const hasTitleSource =\n armed &&\n (\n body.state.messages as readonly {\n status?: { type: string } | undefined;\n }[]\n ).some(isTitleSourceMessage);\n useEffect(() => {\n if (!hasTitleSource || titleFiredRef.current) return;\n titleFiredRef.current = true;\n client.threadListItem.generateTitle({ automatic: true });\n }, [hasTitleSource]);\n return body.methods;\n });\n};\n\nconst RemoteThreadBody = resource(useRemoteThreadBody);\n\n// `thread(\"main\")` keeps one identity across switches, like the single\n// useClientResource slot it replaced: consumers (the ambient `thread` scope,\n// captured clients) hold the facade while it delegates to whichever body is\n// currently main. Publishing the target during commit keeps abandoned\n// concurrent renders from changing the facade observed by committed consumers.\nconst useMainThreadFacade = (\n current: ClientOutput<\"thread\">,\n): ClientOutput<\"thread\"> => {\n const currentRef = useRef(current);\n useEffect(() => {\n currentRef.current = current;\n }, [current]);\n const [facade] = useState(\n () =>\n new Proxy({} as ClientOutput<\"thread\">, {\n get: (_, prop) =>\n (currentRef.current as unknown as Record<PropertyKey, unknown>)[prop],\n has: (_, prop) => prop in (currentRef.current as object),\n ownKeys: () => Reflect.ownKeys(currentRef.current as object),\n getOwnPropertyDescriptor: (_, prop) =>\n Reflect.getOwnPropertyDescriptor(currentRef.current as object, prop),\n }),\n );\n return facade;\n};\n\nconst useRemoteThreadListView = ({\n listState,\n mainThreadId,\n startedIds,\n backgroundThreads,\n threadFactory,\n useAdapters,\n onSwitchTo,\n onRename,\n onUpdateCustom,\n onArchive,\n onUnarchive,\n onDelete,\n onGenerateTitle,\n onInitialize,\n onDetach,\n}: {\n listState: RemoteThreadState;\n mainThreadId: string;\n startedIds: readonly string[];\n backgroundThreads: boolean;\n threadFactory: RemoteThreadListProps[\"thread\"];\n useAdapters: RemoteThreadListAdapter[\"unstable_useAdapters\"];\n onSwitchTo: (\n threadId: string,\n options?: { unarchive?: boolean },\n ) => Promise<void>;\n onRename: (threadId: string, title: string) => Promise<void>;\n onUpdateCustom: (\n threadId: string,\n custom: Record<string, unknown> | undefined,\n ) => Promise<void>;\n onArchive: (threadId: string) => Promise<void>;\n onUnarchive: (threadId: string) => Promise<void>;\n onDelete: (threadId: string) => Promise<void>;\n onGenerateTitle: (\n threadId: string,\n messages: readonly ThreadMessage[] | undefined,\n options?: { automatic?: boolean },\n ) => Promise<void>;\n onInitialize: (threadId: string) => Promise<{\n remoteId: string;\n externalId: string | undefined;\n }>;\n onDetach: (threadId: string) => Promise<void>;\n}) => {\n const bodyIds = useMemo(() => {\n if (!backgroundThreads) return [mainThreadId];\n const seen = new Set<string>();\n const seenRemoteIds = new Set<string>();\n const ids: string[] = [];\n for (const id of startedIds) {\n const data = getThreadData(listState, id);\n if (!data || seen.has(data.id)) continue;\n if (data.remoteId !== undefined && seenRemoteIds.has(data.remoteId)) {\n continue;\n }\n seen.add(data.id);\n if (data.remoteId !== undefined) seenRemoteIds.add(data.remoteId);\n ids.push(data.id);\n }\n return ids;\n }, [backgroundThreads, listState, mainThreadId, startedIds]);\n\n const itemElementFor = (data: RemoteThreadData, isRunning: boolean) =>\n ThreadListItemClient({\n data,\n isRunning,\n onSwitchTo: (options) =>\n handleThreadListAction(\"switch\", () => onSwitchTo(data.id, options)),\n onRename: (title) =>\n handleThreadListAction(\"rename\", () => onRename(data.id, title)),\n onUpdateCustom: (custom) =>\n handleThreadListAction(\"update custom metadata\", () =>\n onUpdateCustom(data.id, custom),\n ),\n onArchive: () =>\n handleThreadListAction(\"archive\", () => onArchive(data.id)),\n onUnarchive: () =>\n handleThreadListAction(\"unarchive\", () => onUnarchive(data.id)),\n onDelete: () => handleThreadListAction(\"delete\", () => onDelete(data.id)),\n onGenerateTitle: (options) =>\n handleThreadListAction(\"generate title\", () =>\n onGenerateTitle(\n data.id,\n (backgroundThreads\n ? bodyStateOf(data.id)?.messages\n : mainThreadClient.state.messages) as\n | readonly ThreadMessage[]\n | undefined,\n options,\n ),\n ),\n onInitialize: () => onInitialize(data.id),\n onDetach: () => handleThreadListAction(\"detach\", () => onDetach(data.id)),\n });\n\n const bodies = useClientLookup(\n bodyIds.map((id) => {\n const made = threadFactory(id);\n // Background bodies never change occupant, so an unkeyed factory\n // element is keyed by the mapping id here; per-body history loads\n // without requiring the factory to key itself.\n const thread =\n backgroundThreads && made.key === undefined ? withKey(id, made) : made;\n const wrapped =\n useAdapters === undefined\n ? thread\n : AdaptedRemoteThread({\n useAdapters,\n thread,\n });\n const data = getThreadData(listState, id);\n const element =\n backgroundThreads && data !== undefined\n ? RemoteThreadBody({\n id,\n status: data.status,\n remoteId: data.remoteId,\n item: (isRunning) => itemElementFor(data, isRunning),\n thread: wrapped,\n })\n : wrapped;\n return withKey(backgroundThreads ? id : (made.key ?? \"main\"), element);\n }),\n );\n // A reload can remap a local thread id to its remote identity while the\n // body stays keyed by the original mapping id, so lookups fall back to\n // remote-identity matching.\n const bodyIndexOf = (id: string) => {\n const direct = bodyIds.indexOf(id);\n if (direct !== -1) return direct;\n return bodyIds.findIndex((bodyId) => isSameThread(listState, bodyId, id));\n };\n const bodyStateOf = (id: string) => {\n const index = bodyIndexOf(id);\n return index === -1 ? undefined : bodies.state[index];\n };\n const mainIndex = bodyIndexOf(mainThreadId);\n const mainThreadClient = {\n state: bodies.state[mainIndex]!,\n methods: useMainThreadFacade(bodies.get({ index: mainIndex })),\n };\n const itemOrder = useMemo(\n () => collectItemOrder(listState, mainThreadId),\n [listState, mainThreadId],\n );\n const threadListItems = useClientLookup(\n itemOrder.map((data) =>\n withKey(\n data.id,\n itemElementFor(\n data,\n backgroundThreads\n ? (bodyStateOf(data.id)?.isRunning ?? false)\n : itemMatchesId(data, listState, mainThreadId) &&\n mainThreadClient.state.isRunning,\n ),\n ),\n ),\n );\n return { mainThreadClient, itemOrder, threadListItems };\n};\n\nconst useRemoteThreadList = (\n props: RemoteThreadListProps,\n): ClientOutput<\"threads\"> => {\n const {\n adapter,\n thread: threadFactory,\n threadId,\n onThreadIdChange,\n onSwitchToThread,\n onSwitchToNewThread,\n onDelete,\n } = props;\n\n const [{ store, initialMainId, session }] = useState(() => {\n const seeded = seedNewThread(EMPTY_LIST);\n return {\n store: new OptimisticState(seeded.state),\n initialMainId: seeded.id,\n session: {\n adapter,\n adapterAtLoad: adapter,\n adapterGeneration: 0,\n titleStates: new Map<string, ThreadTitleState>(),\n loadGeneration: 0,\n switchGeneration: 0,\n loadPromise: undefined as Promise<void> | undefined,\n loadMorePromise: undefined as Promise<void> | undefined,\n lastNotifiedRemoteId: undefined as string | undefined,\n lastControlledThreadId: undefined as string | undefined,\n switchTask: undefined as Promise<void> | undefined,\n mainThreadId: seeded.id,\n isFirstThreadIdEffect: true,\n onThreadIdChange,\n onSwitchToThread,\n onSwitchToNewThread,\n },\n };\n });\n\n const listState = useSyncExternalStore(\n (onStoreChange) => store.subscribe(onStoreChange),\n () => store.value,\n () => store.value,\n );\n\n const [mainThreadId, setMainThreadId] = useState(initialMainId);\n const [startedIds, setStartedIds] = useState<readonly string[]>([\n initialMainId,\n ]);\n const [backgroundThreads] = useState(props.backgroundThreads === true);\n const assignMainThreadId = useCallback(\n (id: string) => {\n session.mainThreadId = id;\n setMainThreadId(id);\n setStartedIds((prev) => (prev.includes(id) ? prev : [...prev, id]));\n },\n [session],\n );\n useThreadSelectionEvents(mainThreadId);\n useEffect(() => {\n // Publishing after commit keeps imperative actions on the adapter the committed tree renders with; an abandoned render must not reach them.\n session.adapter = adapter;\n session.mainThreadId = mainThreadId;\n session.onThreadIdChange = onThreadIdChange;\n session.onSwitchToThread = onSwitchToThread;\n session.onSwitchToNewThread = onSwitchToNewThread;\n }, [\n adapter,\n mainThreadId,\n onSwitchToNewThread,\n onSwitchToThread,\n onThreadIdChange,\n session,\n ]);\n\n const notifyRemoteId = useCallback(\n (remoteId: string | undefined, emit: boolean) => {\n if (session.lastNotifiedRemoteId === remoteId) return;\n session.lastNotifiedRemoteId = remoteId;\n if (emit) {\n invokeUserCallback(\n \"assistant-ui\",\n \"onThreadIdChange\",\n session.onThreadIdChange,\n remoteId,\n );\n }\n },\n [session],\n );\n\n const getLoadThreadsPromise = useCallback(() => {\n if (session.loadPromise) return session.loadPromise;\n const generation = session.loadGeneration;\n const adapter = session.adapter;\n const statusAtRequest = statusSnapshot(store.baseValue);\n session.loadPromise = store\n .optimisticUpdate({\n execute: () => adapter.list(),\n loading: (state) => {\n if (generation !== session.loadGeneration) return state;\n return { ...state, isLoading: true, loadError: undefined };\n },\n then: (state, page) => {\n if (generation !== session.loadGeneration) return state;\n session.adapterAtLoad = adapter;\n const fresh = classifyThreads(page.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(page.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 !== session.loadGeneration) return;\n console.error(\"[assistant-ui] thread list load failed:\", error);\n session.loadPromise = undefined;\n store.update({\n ...store.baseValue,\n isLoading: false,\n loadError: error,\n });\n })\n .then(() => {});\n return session.loadPromise;\n }, [session, store]);\n\n const reload = useCallback(() => {\n const adapterChanged = adapter !== session.adapterAtLoad;\n session.loadGeneration++;\n session.loadPromise = undefined;\n session.loadMorePromise = undefined;\n if (adapterChanged) {\n session.adapterGeneration++;\n session.titleStates.clear();\n session.switchGeneration++;\n session.switchTask = undefined;\n session.adapterAtLoad = adapter;\n const seeded = seedNewThread(EMPTY_LIST);\n store.reset({ ...seeded.state, isLoading: true });\n assignMainThreadId(seeded.id);\n setStartedIds([seeded.id]);\n notifyRemoteId(undefined, true);\n } else {\n store.update({\n ...store.baseValue,\n cursor: undefined,\n });\n }\n return getLoadThreadsPromise();\n }, [\n adapter,\n assignMainThreadId,\n getLoadThreadsPromise,\n notifyRemoteId,\n session,\n store,\n ]);\n\n useEffect(() => {\n if (typeof window === \"undefined\" || typeof document === \"undefined\") {\n return;\n }\n\n const retryAfterError = () => {\n if (store.value.loadError !== undefined) void getLoadThreadsPromise();\n };\n const retryAfterVisible = () => {\n if (document.visibilityState === \"visible\") retryAfterError();\n };\n\n window.addEventListener(\"online\", retryAfterError);\n document.addEventListener(\"visibilitychange\", retryAfterVisible);\n return () => {\n window.removeEventListener(\"online\", retryAfterError);\n document.removeEventListener(\"visibilitychange\", retryAfterVisible);\n };\n }, [getLoadThreadsPromise, store]);\n\n useEffect(() => {\n void getLoadThreadsPromise();\n }, [getLoadThreadsPromise]);\n\n useEffect(() => {\n if (!isDevelopment) return;\n if (adapter.unstable_useAdapters !== undefined) return;\n if (adapter.unstable_Provider === undefined) return;\n console.warn(\n \"[assistant-ui] RemoteThreadList ignores RemoteThreadListAdapter.unstable_Provider. Expose unstable_useAdapters so per-thread history loads on this entry. useRemoteThreadListRuntime still honors unstable_Provider.\",\n );\n }, [adapter]);\n\n const loadMore = useCallback(() => {\n if (session.loadMorePromise) return session.loadMorePromise;\n const snapshot = store.value;\n if (snapshot.cursor === undefined || snapshot.isLoading) {\n return RESOLVED_PROMISE;\n }\n const generation = session.loadGeneration;\n const cursor = snapshot.cursor;\n const currentAdapter = session.adapter;\n const task = store\n .optimisticUpdate({\n execute: () => currentAdapter.list({ after: cursor }),\n loading: (state) => {\n if (generation !== session.loadGeneration) return state;\n return { ...state, isLoadingMore: true };\n },\n then: (state, page) => {\n if (generation !== session.loadGeneration) return state;\n const appended = classifyThreads(page.threads, {\n threadIds: [...state.threadIds],\n archivedThreadIds: [...state.archivedThreadIds],\n threadIdMap: { ...state.threadIdMap },\n threadData: { ...state.threadData },\n });\n return {\n ...state,\n isLoadingMore: false,\n cursor: normalizeCursor(page.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 !== session.loadGeneration) return;\n console.error(\"[assistant-ui] thread list loadMore failed:\", error);\n })\n .then(() => {\n if (session.loadMorePromise === task) {\n session.loadMorePromise = undefined;\n }\n });\n session.loadMorePromise = task;\n return task;\n }, [session, store]);\n\n const startSwitch = useCallback(\n (run: (generation: number) => Promise<void>) => {\n const generation = ++session.switchGeneration;\n let settle!: (error?: unknown) => void;\n const task = new Promise<void>((resolve, reject) => {\n settle = (error) => {\n if (error === undefined) resolve();\n else reject(error);\n };\n });\n session.switchTask = task;\n void run(generation).then(\n () => settle(),\n (error: unknown) => settle(error),\n );\n return task;\n },\n [session],\n );\n\n const switchToThread = useCallback(\n (\n threadIdOrRemoteId: string,\n options?: { unarchive?: boolean },\n emitThreadIdChange = true,\n ) =>\n startSwitch(async (generation) => {\n let data = getThreadData(store.value, threadIdOrRemoteId);\n if (!data) {\n const remoteMetadata =\n await session.adapter.fetch(threadIdOrRemoteId);\n if (generation !== session.switchGeneration) return;\n const state = store.value;\n const mappingId = createThreadMappingId(remoteMetadata.remoteId);\n const wasInTarget =\n remoteMetadata.status === \"regular\"\n ? state.threadIds.includes(remoteMetadata.remoteId)\n : state.archivedThreadIds.includes(remoteMetadata.remoteId);\n const threadIdsWithoutRemote = state.threadIds.filter(\n (id) => id !== remoteMetadata.remoteId,\n );\n const archivedThreadIdsWithoutRemote = state.archivedThreadIds.filter(\n (id) => id !== remoteMetadata.remoteId,\n );\n store.update({\n ...state,\n threadIds:\n remoteMetadata.status === \"regular\"\n ? wasInTarget\n ? state.threadIds\n : [...threadIdsWithoutRemote, remoteMetadata.remoteId]\n : threadIdsWithoutRemote,\n archivedThreadIds:\n remoteMetadata.status === \"archived\"\n ? wasInTarget\n ? state.archivedThreadIds\n : [...archivedThreadIdsWithoutRemote, remoteMetadata.remoteId]\n : archivedThreadIdsWithoutRemote,\n threadIdMap: {\n ...state.threadIdMap,\n [remoteMetadata.remoteId]: mappingId,\n },\n threadData: {\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 },\n },\n });\n data = getThreadData(store.value, threadIdOrRemoteId);\n }\n if (!data) {\n throw threadNotFoundError(threadIdOrRemoteId, \"switching to it\");\n }\n if (isSameThread(store.value, data.id, session.mainThreadId)) return;\n\n const targetId = data.id;\n let current: RemoteThreadData | undefined = data;\n\n if (current.status === \"archived\" && options?.unarchive !== false) {\n const { remoteId } = await current.initializeTask;\n if (generation !== session.switchGeneration) return;\n current = getThreadData(store.value, targetId);\n if (current?.id !== targetId) return;\n if (current.status === \"archived\") {\n await store.optimisticUpdate({\n execute: () => session.adapter.unarchive(remoteId),\n optimistic: (state) =>\n updateStatusReducer(state, targetId, \"regular\"),\n });\n if (generation !== session.switchGeneration) return;\n current = getThreadData(store.value, targetId);\n if (current?.id !== targetId) return;\n }\n }\n if (generation !== session.switchGeneration) return;\n assignMainThreadId(current.id);\n notifyRemoteId(current.remoteId, emitThreadIdChange);\n session.onSwitchToThread?.(current.id);\n }),\n [assignMainThreadId, notifyRemoteId, session, startSwitch, store],\n );\n\n const switchToNewThread = useCallback(\n (emitThreadIdChange = true) =>\n startSwitch(async (generation) => {\n while (\n store.baseValue.newThreadId !== undefined &&\n store.value.newThreadId === undefined\n ) {\n await store.waitForUpdate();\n if (generation !== session.switchGeneration) return;\n }\n const existing = store.value.newThreadId;\n if (existing !== undefined) {\n const existingId =\n getThreadData(store.value, existing)?.id ?? existing;\n if (isSameThread(store.value, existingId, session.mainThreadId)) {\n return;\n }\n assignMainThreadId(existingId);\n notifyRemoteId(undefined, emitThreadIdChange);\n session.onSwitchToNewThread?.();\n return;\n }\n const seeded = seedNewThread(store.baseValue);\n store.update(seeded.state);\n if (generation !== session.switchGeneration) return;\n assignMainThreadId(seeded.id);\n notifyRemoteId(undefined, emitThreadIdChange);\n session.onSwitchToNewThread?.();\n }),\n [assignMainThreadId, notifyRemoteId, session, startSwitch, store],\n );\n\n const ensureNotMain = useCallback(\n async (threadId: string) => {\n if (threadId === store.value.newThreadId) {\n throw new Error(\"Cannot ensure new thread is not main\");\n }\n let lastAwaitedTask: Promise<void> | undefined;\n while (isSameThread(store.value, threadId, session.mainThreadId)) {\n let switchTask = session.switchTask;\n const startedFallback = !switchTask || switchTask === lastAwaitedTask;\n if (startedFallback) {\n switchTask = switchToNewThread();\n }\n lastAwaitedTask = switchTask;\n try {\n await switchTask;\n } catch (error) {\n if (startedFallback && session.switchTask === switchTask) {\n throw error;\n }\n }\n }\n },\n [session, store, switchToNewThread],\n );\n\n const requireAdapterGeneration = useCallback(\n (generation: number) => {\n if (generation !== session.adapterGeneration) {\n throw new ThreadListAdapterChangedError();\n }\n },\n [session],\n );\n\n const initialize = useCallback(\n async (threadId: string) => {\n const currentAdapter = session.adapter;\n const adapterGeneration = session.adapterGeneration;\n if (store.value.newThreadId !== threadId) {\n const data = getThreadData(store.value, threadId);\n if (!data) throw threadNotFoundError(threadId, \"initializing it\");\n if (data.status === \"new\") {\n throw threadStatusError(threadId, data.status, \"be initialized here\");\n }\n const result = toInitializeResult(await data.initializeTask);\n requireAdapterGeneration(adapterGeneration);\n return result;\n }\n requireAdapterGeneration(adapterGeneration);\n const initializeTask = currentAdapter.initialize(threadId);\n let removedMappingId: string | undefined;\n let replacementMainThreadId: string | undefined;\n const result = await store.optimisticUpdate({\n execute: () => initializeTask,\n optimistic: (state) =>\n promoteNewThreadReducer(state, threadId, initializeTask),\n then: (state, { remoteId, externalId }) => {\n if (adapterGeneration !== session.adapterGeneration) return state;\n // Background mode still owns the initializing body. Single-body mode\n // has already replaced it, so retain the currently mounted body.\n const retainedThreadId = backgroundThreads\n ? threadId\n : session.mainThreadId;\n const reconciliation = reconcileInitializedThread(\n state,\n threadId,\n remoteId,\n externalId,\n retainedThreadId,\n );\n removedMappingId = reconciliation.removedMappingId;\n if (removedMappingId === session.mainThreadId) {\n replacementMainThreadId = reconciliation.survivorMappingId;\n }\n return reconciliation.state;\n },\n });\n requireAdapterGeneration(adapterGeneration);\n if (removedMappingId !== undefined) {\n setStartedIds((prev) =>\n prev.filter((startedId) => startedId !== removedMappingId),\n );\n }\n if (\n replacementMainThreadId !== undefined &&\n session.mainThreadId === removedMappingId\n ) {\n assignMainThreadId(replacementMainThreadId);\n }\n if (threadId === session.mainThreadId) {\n notifyRemoteId(result.remoteId, true);\n }\n return toInitializeResult(result);\n },\n [\n assignMainThreadId,\n backgroundThreads,\n notifyRemoteId,\n requireAdapterGeneration,\n session,\n store,\n ],\n );\n\n const rename = useCallback(\n (threadIdOrRemoteId: string, newTitle: string) => {\n const currentAdapter = session.adapter;\n const adapterGeneration = session.adapterGeneration;\n const data = getThreadData(store.value, 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(\n session.titleStates,\n data.id,\n newTitle,\n );\n return store\n .optimisticUpdate({\n execute: async () => {\n const { remoteId } = await data.initializeTask;\n requireAdapterGeneration(adapterGeneration);\n return currentAdapter.rename(remoteId, newTitle);\n },\n optimistic: (state) => {\n const current = getThreadData(state, threadIdOrRemoteId);\n if (!current) return state;\n return {\n ...state,\n threadData: {\n ...state.threadData,\n [current.id]: {\n ...current,\n title: newTitle,\n },\n },\n };\n },\n })\n .then(\n (result) => {\n finishThreadTitleRename(session.titleStates, data.id, claim, true);\n return result;\n },\n (error: unknown) => {\n finishThreadTitleRename(session.titleStates, data.id, claim, false);\n throw error;\n },\n );\n },\n [requireAdapterGeneration, session, store],\n );\n\n const updateCustom = useCallback(\n (\n threadIdOrRemoteId: string,\n custom: Record<string, unknown> | undefined,\n ) => {\n const currentAdapter = session.adapter;\n const adapterGeneration = session.adapterGeneration;\n const data = getThreadData(store.value, threadIdOrRemoteId);\n if (!data) {\n throw threadNotFoundError(\n threadIdOrRemoteId,\n \"updating its custom metadata\",\n );\n }\n if (data.status === \"new\") {\n throw threadStatusError(\n threadIdOrRemoteId,\n data.status,\n \"update custom metadata\",\n );\n }\n if (!currentAdapter.updateCustom) {\n throw new Error(\n \"Remote thread list adapter does not support updating custom metadata\",\n );\n }\n return store.optimisticUpdate({\n execute: async () => {\n const { remoteId } = await data.initializeTask;\n requireAdapterGeneration(adapterGeneration);\n if (!currentAdapter.updateCustom) {\n throw new Error(\n \"Remote thread list adapter does not support updating custom metadata\",\n );\n }\n return currentAdapter.updateCustom(remoteId, custom);\n },\n optimistic: (state) => {\n const current = getThreadData(state, threadIdOrRemoteId);\n if (!current) return state;\n return {\n ...state,\n threadData: {\n ...state.threadData,\n [current.id]: {\n ...current,\n custom,\n },\n },\n };\n },\n });\n },\n [requireAdapterGeneration, session, store],\n );\n\n const archive = useCallback(\n async (threadIdOrRemoteId: string) => {\n const currentAdapter = session.adapter;\n const adapterGeneration = session.adapterGeneration;\n const data = getThreadData(store.value, 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 ensureNotMain(data.id);\n requireAdapterGeneration(adapterGeneration);\n return store.optimisticUpdate({\n execute: async () => {\n const { remoteId } = await data.initializeTask;\n requireAdapterGeneration(adapterGeneration);\n return currentAdapter.archive(remoteId);\n },\n optimistic: (state) => updateStatusReducer(state, data.id, \"archived\"),\n });\n },\n [ensureNotMain, requireAdapterGeneration, session, store],\n );\n\n const unarchive = useCallback(\n (threadIdOrRemoteId: string) => {\n const currentAdapter = session.adapter;\n const adapterGeneration = session.adapterGeneration;\n const data = getThreadData(store.value, threadIdOrRemoteId);\n if (!data)\n throw threadNotFoundError(threadIdOrRemoteId, \"unarchiving it\");\n if (data.status !== \"archived\") {\n throw threadStatusError(\n threadIdOrRemoteId,\n data.status,\n \"be unarchived\",\n );\n }\n return store.optimisticUpdate({\n execute: async () => {\n try {\n const { remoteId } = await data.initializeTask;\n requireAdapterGeneration(adapterGeneration);\n return await currentAdapter.unarchive(remoteId);\n } catch (error) {\n if (adapterGeneration === session.adapterGeneration) {\n await ensureNotMain(data.id);\n }\n throw error;\n }\n },\n optimistic: (state) => updateStatusReducer(state, data.id, \"regular\"),\n });\n },\n [ensureNotMain, requireAdapterGeneration, session, store],\n );\n\n const deleteThread = useCallback(\n async (threadIdOrRemoteId: string) => {\n const currentAdapter = session.adapter;\n const adapterGeneration = session.adapterGeneration;\n const data = getThreadData(store.value, 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 ensureNotMain(data.id);\n requireAdapterGeneration(adapterGeneration);\n const result = await store.optimisticUpdate({\n execute: async () => {\n const { remoteId } = await data.initializeTask;\n requireAdapterGeneration(adapterGeneration);\n return currentAdapter.delete(remoteId);\n },\n optimistic: (state) => updateStatusReducer(state, data.id, \"deleted\"),\n });\n // An adapter swap resets the optimistic layer, and a listed thread's slot\n // id is its remote id, so a replacement adapter can re-list this slot\n // while the deletion is in flight.\n if (getThreadData(store.value, data.id) !== undefined) return result;\n clearThreadTitleState(session.titleStates, data.id);\n onDelete?.(data.id);\n return result;\n },\n [ensureNotMain, onDelete, requireAdapterGeneration, session, store],\n );\n\n const generateTitle = useCallback(\n async (\n threadIdOrRemoteId: string,\n messages: readonly ThreadMessage[] | undefined,\n options?: { automatic?: boolean },\n ) => {\n const currentAdapter = session.adapter;\n const adapterGeneration = session.adapterGeneration;\n const data = getThreadData(store.value, threadIdOrRemoteId);\n if (!data) {\n throw threadNotFoundError(threadIdOrRemoteId, \"generating its title\");\n }\n if (data.status === \"new\") {\n throw threadStatusError(\n threadIdOrRemoteId,\n data.status,\n \"generate a title\",\n );\n }\n const { remoteId } = await data.initializeTask;\n requireAdapterGeneration(adapterGeneration);\n if (\n !backgroundThreads &&\n !isSameThread(store.value, data.id, session.mainThreadId)\n ) {\n return;\n }\n if (!messages) return;\n await runThreadTitleGeneration({\n states: session.titleStates,\n threadId: data.id,\n automatic: options?.automatic === true,\n generate: async (onTitle) => {\n const stream = await currentAdapter.generateTitle(remoteId, messages);\n requireAdapterGeneration(adapterGeneration);\n await applyTitleStream(stream, onTitle);\n },\n rename: async (title) => {\n requireAdapterGeneration(adapterGeneration);\n await currentAdapter.rename(remoteId, title);\n },\n applyTitle: async (title) => {\n await store.optimisticUpdate({\n execute: async () => {},\n optimistic: (state) => {\n if (adapterGeneration !== session.adapterGeneration) return state;\n const current = getThreadData(state, data.id);\n if (!current) return state;\n return {\n ...state,\n threadData: {\n ...state.threadData,\n [current.id]: {\n ...current,\n title,\n },\n },\n };\n },\n });\n },\n });\n },\n [backgroundThreads, requireAdapterGeneration, session, store],\n );\n\n const detach = useCallback(\n async (threadId: string) => {\n await ensureNotMain(threadId);\n setStartedIds((prev) => prev.filter((id) => id !== threadId));\n },\n [ensureNotMain],\n );\n\n const { mainThreadClient, itemOrder, threadListItems } =\n useRemoteThreadListView({\n listState,\n mainThreadId,\n startedIds,\n backgroundThreads,\n threadFactory,\n useAdapters: adapter.unstable_useAdapters,\n onSwitchTo: (id, options) => switchToThread(id, options),\n onRename: (id, title) => rename(id, title),\n onUpdateCustom: (id, custom) => updateCustom(id, custom),\n onArchive: (id) => archive(id),\n onUnarchive: (id) => unarchive(id),\n onDelete: (id) => deleteThread(id),\n onGenerateTitle: (id, messages, options) =>\n generateTitle(id, messages, options),\n onInitialize: async (id) => toInitializeResult(await initialize(id)),\n onDetach: (id) => detach(id),\n });\n\n const mainRemoteId = getThreadData(listState, mainThreadId)?.remoteId;\n useEffect(() => {\n if (session.lastNotifiedRemoteId === mainRemoteId) return;\n session.lastNotifiedRemoteId = mainRemoteId;\n invokeUserCallback(\n \"assistant-ui\",\n \"onThreadIdChange\",\n onThreadIdChange,\n mainRemoteId,\n );\n }, [mainRemoteId, onThreadIdChange, session]);\n\n useEffect(() => {\n if (session.isFirstThreadIdEffect) {\n session.isFirstThreadIdEffect = false;\n session.lastControlledThreadId = threadId;\n if (threadId === undefined) return;\n handleThreadListAction(\"switch\", () =>\n switchToThread(threadId, undefined, false),\n );\n return;\n }\n if (Object.is(session.lastControlledThreadId, threadId)) return;\n session.lastControlledThreadId = threadId;\n if (threadId === undefined) {\n handleThreadListAction(\"create\", () => switchToNewThread(false));\n return;\n }\n handleThreadListAction(\"switch\", () =>\n switchToThread(threadId, undefined, false),\n );\n }, [session, switchToNewThread, switchToThread, threadId]);\n\n const state = useMemo(\n () => ({\n mainThreadId,\n newThreadId: listState.newThreadId ?? null,\n isLoading: listState.isLoading,\n loadError: listState.loadError,\n isLoadingMore: listState.isLoadingMore,\n hasMore: listState.cursor !== undefined,\n threadIds: listState.threadIds,\n archivedThreadIds: listState.archivedThreadIds,\n threadItems: threadListItems.state,\n main: mainThreadClient.state,\n }),\n [\n listState.archivedThreadIds,\n listState.cursor,\n listState.isLoading,\n listState.loadError,\n listState.isLoadingMore,\n listState.newThreadId,\n listState.threadIds,\n mainThreadClient.state,\n mainThreadId,\n threadListItems.state,\n ],\n );\n\n return {\n getState: () => state,\n switchToThread: (id, options) => {\n handleThreadListAction(\"switch\", () => switchToThread(id, options));\n },\n switchToNewThread: () => {\n handleThreadListAction(\"create\", () => switchToNewThread());\n },\n getLoadThreadsPromise,\n reload,\n reloadMainThread: () => {\n if (getThreadData(store.value, mainThreadId)?.status === \"new\") {\n return RESOLVED_PROMISE;\n }\n return (\n mainThreadClient.methods.unstable_refetchThread?.() ?? RESOLVED_PROMISE\n );\n },\n loadMore,\n item: (selector) => {\n if (selector === \"main\") {\n const index = itemOrder.findIndex((item) =>\n itemMatchesId(item, listState, mainThreadId),\n );\n return threadListItems.get({ index });\n }\n if (\"id\" in selector) {\n const index = itemOrder.findIndex((item) =>\n itemMatchesId(item, listState, selector.id),\n );\n return threadListItems.get({ index });\n }\n const ids = selector.archived\n ? listState.archivedThreadIds\n : listState.threadIds;\n const id = ids[selector.index];\n if (id === undefined) {\n return threadListItems.get({ index: -1 });\n }\n const index = itemOrder.findIndex((item) =>\n itemMatchesId(item, listState, id),\n );\n return threadListItems.get({ index });\n },\n thread: () => mainThreadClient.methods,\n };\n};\n\n/**\n * `AuiConfig` `threads` entry backed by a `RemoteThreadListAdapter`. Thread\n * bodies are born from the `thread` factory inside the client tree, so any\n * `AssistantClient` host can run a remote or cloud list. Per-thread history\n * and attachments come from `unstable_useAdapters`. `useRemoteThreadListRuntime`\n * uses the same hook when `unstable_Provider` is omitted. Key the factory\n * with `withKey` so history reloads when the visible thread changes.\n * With `backgroundThreads`, every visited thread stays mounted: runs continue\n * across switches, per-item `isRunning` is live, and freshly initialized\n * threads title themselves.\n */\nexport const RemoteThreadList = resource(useRemoteThreadList);\n\nattachTransformScopes(useRemoteThreadList, inMemoryThreadListTransformScopes);\n"],"mappings":"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"}
1
+ {"version":3,"file":"RemoteThreadList.js","names":["useCallback","useEffect","useMemo","useRef","useState","useSyncExternalStore","resource","withKey","ResourceElement","ClientOutput","attachTransformScopes","Derived","useAssistantContextProvider","useAssistantContextValue","useClientLookup","useClientResource","useConfiguredAui","isDevelopment","useThreadSelectionEvents","OptimisticState","classifyThreads","createEmptyRemoteThreadState","createThreadMappingId","getThreadData","normalizeCursor","reconcileInitializedThread","promoteNewThreadReducer","updateStatusReducer","RemoteThreadData","RemoteThreadState","preserveMidLoadTransitions","seedNewThread","statusSnapshot","RemoteThreadInitializeResponse","RemoteThreadListAdapter","ThreadListAdapterChangedError","ThreadMessage","handleThreadListAction","inMemoryThreadListTransformScopes","InMemoryThreadListProps","AdaptedRemoteThread","applyTitleStream","isTitleSourceMessage","clearThreadTitleState","finishThreadTitleRename","runThreadTitleGeneration","startThreadTitleRename","ThreadTitleState","invokeUserCallback","RESOLVED_PROMISE","Promise","resolve","EMPTY_LIST","RemoteThreadListProps","adapter","thread","threadId","onThreadIdChange","onSwitchToThread","onSwitchToNewThread","onDelete","backgroundThreads","threadNotFoundError","threadIdOrRemoteId","action","Error","threadStatusError","status","toInitializeResult","result","remoteId","externalId","useThreadListItemClient","props","$","_c","data","isRunning","onSwitchTo","onRename","onUpdateCustom","onArchive","onUnarchive","onGenerateTitle","onInitialize","onDetach","t0","lastMessageAt","undefined","t1","custom","id","title","state","t2","t3","getState","switchTo","rename","updateCustom","archive","unarchive","delete","generateTitle","initialize","detach","ThreadListItemClient","collectItemOrder","listState","mainThreadId","ids","newThreadId","threadIds","archivedThreadIds","filter","seenIds","Set","seenRemoteIds","items","has","add","push","itemMatchesId","item","isSameThread","left","right","useRemoteThreadBody","parent","setIsRunning","itemHandle","client","threadListItem","source","query","type","get","methods","bornNewRef","titleFiredRef","useBoundRemoteBody","body","bodyRunning","armed","current","hasTitleSource","messages","some","automatic","RemoteThreadBody","useMainThreadFacade","currentRef","facade","Proxy","_","prop","Record","PropertyKey","ownKeys","Reflect","getOwnPropertyDescriptor","useRemoteThreadListView","startedIds","threadFactory","useAdapters","bb0","seen","bodyIds","itemElementFor","data_0","options","options_0","bodyStateOf","mainThreadClient","bodies","map","id_0","made","key","wrapped","data_1","element","isRunning_0","id_1","direct","indexOf","findIndex","bodyId","bodyIndexOf","id_2","index","t4","t5","mainIndex","t6","itemOrder","threadListItems","data_2","t7","useRemoteThreadList","store","initialMainId","session","seeded","adapterAtLoad","adapterGeneration","titleStates","Map","loadGeneration","switchGeneration","loadPromise","loadMorePromise","lastNotifiedRemoteId","lastControlledThreadId","switchTask","isFirstThreadIdEffect","onStoreChange","subscribe","value","setMainThreadId","setStartedIds","assignMainThreadId","prev","includes","notifyRemoteId","emit","getLoadThreadsPromise","generation","statusAtRequest","baseValue","optimisticUpdate","execute","list","loading","isLoading","loadError","then","page","fresh","threads","threadIdMap","threadData","merged","cursor","nextCursor","catch","error","console","update","reload","adapterChanged","clear","reset","window","document","retryAfterError","retryAfterVisible","visibilityState","addEventListener","removeEventListener","unstable_useAdapters","unstable_Provider","warn","loadMore","snapshot","currentAdapter","task","after","isLoadingMore","appended","startSwitch","run","settle","reject","switchToThread","emitThreadIdChange","remoteMetadata","fetch","mappingId","wasInTarget","threadIdsWithoutRemote","archivedThreadIdsWithoutRemote","initializeTask","targetId","optimistic","switchToNewThread","waitForUpdate","existing","existingId","ensureNotMain","lastAwaitedTask","startedFallback","requireAdapterGeneration","removedMappingId","replacementMainThreadId","retainedThreadId","reconciliation","survivorMappingId","startedId","newTitle","claim","deleteThread","states","generate","onTitle","stream","applyTitle","mainRemoteId","Object","is","hasMore","threadItems","main","reloadMainThread","unstable_refetchThread","selector","archived","RemoteThreadList"],"sources":["../../../src/react/client/RemoteThreadList.ts"],"sourcesContent":["import {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n useSyncExternalStore,\n} from \"react\";\nimport { resource, withKey, type ResourceElement } from \"@assistant-ui/tap\";\nimport type { ClientOutput } from \"@assistant-ui/store\";\nimport {\n attachTransformScopes,\n Derived,\n useAssistantContextProvider,\n useAssistantContextValue,\n useClientLookup,\n useClientResource,\n useConfiguredAui,\n} from \"@assistant-ui/store/client\";\nimport { isDevelopment, useThreadSelectionEvents } from \"../../store/internal\";\nimport { OptimisticState } from \"../../runtimes/remote-thread-list/optimistic-state\";\nimport {\n classifyThreads,\n createEmptyRemoteThreadState,\n createThreadMappingId,\n getThreadData,\n normalizeCursor,\n reconcileInitializedThread,\n promoteNewThreadReducer,\n updateStatusReducer,\n type RemoteThreadData,\n type RemoteThreadState,\n preserveMidLoadTransitions,\n seedNewThread,\n statusSnapshot,\n} from \"../../runtimes/remote-thread-list/remote-thread-state\";\nimport type {\n RemoteThreadInitializeResponse,\n RemoteThreadListAdapter,\n} from \"../../runtimes/remote-thread-list/types\";\nimport { ThreadListAdapterChangedError } from \"../../runtimes/remote-thread-list/adapter-changed\";\nimport type { ThreadMessage } from \"../../types/message\";\nimport { handleThreadListAction } from \"../../store/runtime-clients/handle-thread-list-action\";\nimport {\n inMemoryThreadListTransformScopes,\n type InMemoryThreadListProps,\n} from \"./InMemoryThreadList\";\nimport { AdaptedRemoteThread } from \"./AdaptedRemoteThread\";\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 { invokeUserCallback } from \"../../utils/invoke-user-callback\";\n\nconst RESOLVED_PROMISE = Promise.resolve();\n\nconst EMPTY_LIST = createEmptyRemoteThreadState();\n\nexport type RemoteThreadListProps = {\n /**\n * Swapping this to a different backing store does not reload the list. Call `reload()` after a genuine swap. A recreated object for the same store is a no-op. `reload()` after a different adapter instance resets selection and cached records before loading.\n */\n adapter: RemoteThreadListAdapter;\n /**\n * Factory for the visible thread. Per-thread history reload requires a\n * resource keyed by thread id (`withKey(id, thread(...))`). An unkeyed\n * factory keeps one instance across switches, so a mount-once history\n * loader will not fetch the next thread.\n */\n thread: InMemoryThreadListProps[\"thread\"];\n threadId?: string | undefined;\n onThreadIdChange?: ((threadId: string | undefined) => void) | undefined;\n onSwitchToThread?: ((threadId: string) => void) | undefined;\n onSwitchToNewThread?: (() => void) | undefined;\n /** Called after the backing adapter successfully deletes the thread. */\n onDelete?: ((threadId: string) => void) | undefined;\n /**\n * Keeps every thread the session switched to mounted, so a run continues\n * after the user switches away, per-item `isRunning` reflects background\n * runs, and a freshly initialized thread generates its title automatically.\n * A body unmounts on delete, detach, or an adapter replacement (`reload()`\n * after swapping the adapter); visited threads otherwise stay mounted for\n * the client's lifetime. Each body reads its own thread through the ambient\n * `threadListItem` scope, and `unstable_useAdapters` runs once per mounted\n * body. Off (the default), only the visible thread is mounted and a switch\n * unmounts it. The mode is fixed at mount.\n */\n backgroundThreads?: boolean | undefined;\n};\n\nconst threadNotFoundError = (threadIdOrRemoteId: string, action: string) =>\n new Error(`Thread \"${threadIdOrRemoteId}\" was 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 toInitializeResult = (\n result: RemoteThreadInitializeResponse,\n): { remoteId: string; externalId: string | undefined } => ({\n remoteId: result.remoteId,\n externalId: result.externalId,\n});\n\nconst useThreadListItemClient = (props: {\n data: RemoteThreadData;\n isRunning: boolean;\n onSwitchTo: (options?: { unarchive?: boolean }) => void;\n onRename: (title: string) => void;\n onUpdateCustom: (custom: Record<string, unknown> | undefined) => void;\n onArchive: () => void;\n onUnarchive: () => void;\n onDelete: () => void;\n onGenerateTitle: (options?: { automatic?: boolean }) => void;\n onInitialize: () => Promise<{\n remoteId: string;\n externalId: string | undefined;\n }>;\n onDetach: () => void;\n}): ClientOutput<\"threadListItem\"> => {\n const {\n data,\n isRunning,\n onSwitchTo,\n onRename,\n onUpdateCustom,\n onArchive,\n onUnarchive,\n onDelete,\n onGenerateTitle,\n onInitialize,\n onDetach,\n } = props;\n const state = useMemo(\n () => ({\n id: data.id,\n remoteId: data.remoteId,\n externalId: data.externalId,\n title: data.title,\n lastMessageAt: \"lastMessageAt\" in data ? data.lastMessageAt : undefined,\n status: data.status,\n custom: data.custom,\n isRunning,\n }),\n [data, isRunning],\n );\n\n return {\n getState: () => state,\n switchTo: onSwitchTo,\n rename: onRename,\n updateCustom: onUpdateCustom,\n archive: onArchive,\n unarchive: onUnarchive,\n delete: onDelete,\n generateTitle: onGenerateTitle,\n initialize: onInitialize,\n detach: onDetach,\n };\n};\n\nconst ThreadListItemClient = resource(useThreadListItemClient);\n\nconst collectItemOrder = (\n listState: RemoteThreadState,\n mainThreadId: string,\n): RemoteThreadData[] => {\n const ids = [\n listState.newThreadId,\n ...listState.threadIds,\n ...listState.archivedThreadIds,\n mainThreadId,\n ].filter((id): id is string => id !== undefined);\n const seenIds = new Set<string>();\n const seenRemoteIds = new Set<string>();\n const items: RemoteThreadData[] = [];\n for (const id of ids) {\n const data = getThreadData(listState, id);\n if (!data || seenIds.has(data.id)) continue;\n if (data.remoteId !== undefined && seenRemoteIds.has(data.remoteId)) {\n continue;\n }\n seenIds.add(data.id);\n if (data.remoteId !== undefined) seenRemoteIds.add(data.remoteId);\n items.push(data);\n }\n return items;\n};\n\nconst itemMatchesId = (\n item: RemoteThreadData,\n listState: RemoteThreadState,\n id: string,\n) => {\n const data = getThreadData(listState, id);\n return (\n item.id === id ||\n item.id === data?.id ||\n (data?.remoteId !== undefined &&\n (item.id === data.remoteId || item.remoteId === data.remoteId))\n );\n};\n\nconst isSameThread = (\n listState: RemoteThreadState,\n left: string,\n right: string,\n) => {\n if (left === right) return true;\n const data = getThreadData(listState, left);\n return data !== undefined && itemMatchesId(data, listState, right);\n};\n\nconst useRemoteThreadBody = ({\n id,\n status,\n remoteId,\n item,\n thread,\n}: {\n id: string;\n status: RemoteThreadData[\"status\"];\n remoteId: string | undefined;\n item: (isRunning: boolean) => ResourceElement<ClientOutput<\"threadListItem\">>;\n thread: ResourceElement<ClientOutput<\"thread\">>;\n}): ClientOutput<\"thread\"> => {\n const parent = useAssistantContextValue();\n const [isRunning, setIsRunning] = useState(false);\n // The item client is mounted inside the body and served to the subtree\n // through a Derived scope, which keeps the graft on the derived-only (no\n // nested client host) path; resolving `parent.threads` here instead would\n // read the threads scope during its own construction.\n const itemHandle = useClientResource(item(isRunning));\n const { client } = useConfiguredAui(parent, {\n threadListItem: Derived({\n source: \"threads\",\n query: { type: \"id\", id },\n get: () => itemHandle.methods,\n }),\n });\n // Auto-title arms only for a thread born \"new\" in this body's lifetime;\n // threads loaded or fetched from the adapter already carry their title. The\n // settled (non-optimistic) initialize is what writes remoteId, so its\n // arrival is the initialization signal.\n const bornNewRef = useRef(status === \"new\");\n const titleFiredRef = useRef(false);\n return useAssistantContextProvider(client, function useBoundRemoteBody() {\n const body = useClientResource(thread);\n const bodyRunning = body.state.isRunning === true;\n useEffect(() => {\n setIsRunning(bodyRunning);\n }, [bodyRunning]);\n const armed =\n bornNewRef.current && !titleFiredRef.current && remoteId !== undefined;\n const hasTitleSource =\n armed &&\n (\n body.state.messages as readonly {\n status?: { type: string } | undefined;\n }[]\n ).some(isTitleSourceMessage);\n useEffect(() => {\n if (!hasTitleSource || titleFiredRef.current) return;\n titleFiredRef.current = true;\n client.threadListItem.generateTitle({ automatic: true });\n }, [hasTitleSource]);\n return body.methods;\n });\n};\n\nconst RemoteThreadBody = resource(useRemoteThreadBody);\n\n// `thread(\"main\")` keeps one identity across switches, like the single\n// useClientResource slot it replaced: consumers (the ambient `thread` scope,\n// captured clients) hold the facade while it delegates to whichever body is\n// currently main. Publishing the target during commit keeps abandoned\n// concurrent renders from changing the facade observed by committed consumers.\nconst useMainThreadFacade = (\n current: ClientOutput<\"thread\">,\n): ClientOutput<\"thread\"> => {\n const currentRef = useRef(current);\n useEffect(() => {\n currentRef.current = current;\n }, [current]);\n const [facade] = useState(\n () =>\n new Proxy({} as ClientOutput<\"thread\">, {\n get: (_, prop) =>\n (currentRef.current as unknown as Record<PropertyKey, unknown>)[prop],\n has: (_, prop) => prop in (currentRef.current as object),\n ownKeys: () => Reflect.ownKeys(currentRef.current as object),\n getOwnPropertyDescriptor: (_, prop) =>\n Reflect.getOwnPropertyDescriptor(currentRef.current as object, prop),\n }),\n );\n return facade;\n};\n\nconst useRemoteThreadListView = ({\n listState,\n mainThreadId,\n startedIds,\n backgroundThreads,\n threadFactory,\n useAdapters,\n onSwitchTo,\n onRename,\n onUpdateCustom,\n onArchive,\n onUnarchive,\n onDelete,\n onGenerateTitle,\n onInitialize,\n onDetach,\n}: {\n listState: RemoteThreadState;\n mainThreadId: string;\n startedIds: readonly string[];\n backgroundThreads: boolean;\n threadFactory: RemoteThreadListProps[\"thread\"];\n useAdapters: RemoteThreadListAdapter[\"unstable_useAdapters\"];\n onSwitchTo: (\n threadId: string,\n options?: { unarchive?: boolean },\n ) => Promise<void>;\n onRename: (threadId: string, title: string) => Promise<void>;\n onUpdateCustom: (\n threadId: string,\n custom: Record<string, unknown> | undefined,\n ) => Promise<void>;\n onArchive: (threadId: string) => Promise<void>;\n onUnarchive: (threadId: string) => Promise<void>;\n onDelete: (threadId: string) => Promise<void>;\n onGenerateTitle: (\n threadId: string,\n messages: readonly ThreadMessage[] | undefined,\n options?: { automatic?: boolean },\n ) => Promise<void>;\n onInitialize: (threadId: string) => Promise<{\n remoteId: string;\n externalId: string | undefined;\n }>;\n onDetach: (threadId: string) => Promise<void>;\n}) => {\n const bodyIds = useMemo(() => {\n if (!backgroundThreads) return [mainThreadId];\n const seen = new Set<string>();\n const seenRemoteIds = new Set<string>();\n const ids: string[] = [];\n for (const id of startedIds) {\n const data = getThreadData(listState, id);\n if (!data || seen.has(data.id)) continue;\n if (data.remoteId !== undefined && seenRemoteIds.has(data.remoteId)) {\n continue;\n }\n seen.add(data.id);\n if (data.remoteId !== undefined) seenRemoteIds.add(data.remoteId);\n ids.push(data.id);\n }\n return ids;\n }, [backgroundThreads, listState, mainThreadId, startedIds]);\n\n const itemElementFor = (data: RemoteThreadData, isRunning: boolean) =>\n ThreadListItemClient({\n data,\n isRunning,\n onSwitchTo: (options) =>\n handleThreadListAction(\"switch\", () => onSwitchTo(data.id, options)),\n onRename: (title) =>\n handleThreadListAction(\"rename\", () => onRename(data.id, title)),\n onUpdateCustom: (custom) =>\n handleThreadListAction(\"update custom metadata\", () =>\n onUpdateCustom(data.id, custom),\n ),\n onArchive: () =>\n handleThreadListAction(\"archive\", () => onArchive(data.id)),\n onUnarchive: () =>\n handleThreadListAction(\"unarchive\", () => onUnarchive(data.id)),\n onDelete: () => handleThreadListAction(\"delete\", () => onDelete(data.id)),\n onGenerateTitle: (options) =>\n handleThreadListAction(\"generate title\", () =>\n onGenerateTitle(\n data.id,\n (backgroundThreads\n ? bodyStateOf(data.id)?.messages\n : mainThreadClient.state.messages) as\n | readonly ThreadMessage[]\n | undefined,\n options,\n ),\n ),\n onInitialize: () => onInitialize(data.id),\n onDetach: () => handleThreadListAction(\"detach\", () => onDetach(data.id)),\n });\n\n const bodies = useClientLookup(\n bodyIds.map((id) => {\n const made = threadFactory(id);\n // Background bodies never change occupant, so an unkeyed factory\n // element is keyed by the mapping id here; per-body history loads\n // without requiring the factory to key itself.\n const thread =\n backgroundThreads && made.key === undefined ? withKey(id, made) : made;\n const wrapped =\n useAdapters === undefined\n ? thread\n : AdaptedRemoteThread({\n useAdapters,\n thread,\n });\n const data = getThreadData(listState, id);\n const element =\n backgroundThreads && data !== undefined\n ? RemoteThreadBody({\n id,\n status: data.status,\n remoteId: data.remoteId,\n item: (isRunning) => itemElementFor(data, isRunning),\n thread: wrapped,\n })\n : wrapped;\n return withKey(backgroundThreads ? id : (made.key ?? \"main\"), element);\n }),\n );\n // A reload can remap a local thread id to its remote identity while the\n // body stays keyed by the original mapping id, so lookups fall back to\n // remote-identity matching.\n const bodyIndexOf = (id: string) => {\n const direct = bodyIds.indexOf(id);\n if (direct !== -1) return direct;\n return bodyIds.findIndex((bodyId) => isSameThread(listState, bodyId, id));\n };\n const bodyStateOf = (id: string) => {\n const index = bodyIndexOf(id);\n return index === -1 ? undefined : bodies.state[index];\n };\n const mainIndex = bodyIndexOf(mainThreadId);\n const mainThreadClient = {\n state: bodies.state[mainIndex]!,\n methods: useMainThreadFacade(bodies.get({ index: mainIndex })),\n };\n const itemOrder = useMemo(\n () => collectItemOrder(listState, mainThreadId),\n [listState, mainThreadId],\n );\n const threadListItems = useClientLookup(\n itemOrder.map((data) =>\n withKey(\n data.id,\n itemElementFor(\n data,\n backgroundThreads\n ? (bodyStateOf(data.id)?.isRunning ?? false)\n : itemMatchesId(data, listState, mainThreadId) &&\n mainThreadClient.state.isRunning,\n ),\n ),\n ),\n );\n return { mainThreadClient, itemOrder, threadListItems };\n};\n\nconst useRemoteThreadList = (\n props: RemoteThreadListProps,\n): ClientOutput<\"threads\"> => {\n const {\n adapter,\n thread: threadFactory,\n threadId,\n onThreadIdChange,\n onSwitchToThread,\n onSwitchToNewThread,\n onDelete,\n } = props;\n\n const [{ store, initialMainId, session }] = useState(() => {\n const seeded = seedNewThread(EMPTY_LIST);\n return {\n store: new OptimisticState(seeded.state),\n initialMainId: seeded.id,\n session: {\n adapter,\n adapterAtLoad: adapter,\n adapterGeneration: 0,\n titleStates: new Map<string, ThreadTitleState>(),\n loadGeneration: 0,\n switchGeneration: 0,\n loadPromise: undefined as Promise<void> | undefined,\n loadMorePromise: undefined as Promise<void> | undefined,\n lastNotifiedRemoteId: undefined as string | undefined,\n lastControlledThreadId: undefined as string | undefined,\n switchTask: undefined as Promise<void> | undefined,\n mainThreadId: seeded.id,\n isFirstThreadIdEffect: true,\n onThreadIdChange,\n onSwitchToThread,\n onSwitchToNewThread,\n },\n };\n });\n\n const listState = useSyncExternalStore(\n (onStoreChange) => store.subscribe(onStoreChange),\n () => store.value,\n () => store.value,\n );\n\n const [mainThreadId, setMainThreadId] = useState(initialMainId);\n const [startedIds, setStartedIds] = useState<readonly string[]>([\n initialMainId,\n ]);\n const [backgroundThreads] = useState(props.backgroundThreads === true);\n const assignMainThreadId = useCallback(\n (id: string) => {\n session.mainThreadId = id;\n setMainThreadId(id);\n setStartedIds((prev) => (prev.includes(id) ? prev : [...prev, id]));\n },\n [session],\n );\n useThreadSelectionEvents(mainThreadId);\n useEffect(() => {\n // Publishing after commit keeps imperative actions on the adapter the committed tree renders with; an abandoned render must not reach them.\n session.adapter = adapter;\n session.mainThreadId = mainThreadId;\n session.onThreadIdChange = onThreadIdChange;\n session.onSwitchToThread = onSwitchToThread;\n session.onSwitchToNewThread = onSwitchToNewThread;\n }, [\n adapter,\n mainThreadId,\n onSwitchToNewThread,\n onSwitchToThread,\n onThreadIdChange,\n session,\n ]);\n\n const notifyRemoteId = useCallback(\n (remoteId: string | undefined, emit: boolean) => {\n if (session.lastNotifiedRemoteId === remoteId) return;\n session.lastNotifiedRemoteId = remoteId;\n if (emit) {\n invokeUserCallback(\n \"assistant-ui\",\n \"onThreadIdChange\",\n session.onThreadIdChange,\n remoteId,\n );\n }\n },\n [session],\n );\n\n const getLoadThreadsPromise = useCallback(() => {\n if (session.loadPromise) return session.loadPromise;\n const generation = session.loadGeneration;\n const adapter = session.adapter;\n const statusAtRequest = statusSnapshot(store.baseValue);\n session.loadPromise = store\n .optimisticUpdate({\n execute: () => adapter.list(),\n loading: (state) => {\n if (generation !== session.loadGeneration) return state;\n return { ...state, isLoading: true, loadError: undefined };\n },\n then: (state, page) => {\n if (generation !== session.loadGeneration) return state;\n session.adapterAtLoad = adapter;\n const fresh = classifyThreads(page.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(page.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 !== session.loadGeneration) return;\n console.error(\"[assistant-ui] thread list load failed:\", error);\n session.loadPromise = undefined;\n store.update({\n ...store.baseValue,\n isLoading: false,\n loadError: error,\n });\n })\n .then(() => {});\n return session.loadPromise;\n }, [session, store]);\n\n const reload = useCallback(() => {\n const adapterChanged = adapter !== session.adapterAtLoad;\n session.loadGeneration++;\n session.loadPromise = undefined;\n session.loadMorePromise = undefined;\n if (adapterChanged) {\n session.adapterGeneration++;\n session.titleStates.clear();\n session.switchGeneration++;\n session.switchTask = undefined;\n session.adapterAtLoad = adapter;\n const seeded = seedNewThread(EMPTY_LIST);\n store.reset({ ...seeded.state, isLoading: true });\n assignMainThreadId(seeded.id);\n setStartedIds([seeded.id]);\n notifyRemoteId(undefined, true);\n } else {\n store.update({\n ...store.baseValue,\n cursor: undefined,\n });\n }\n return getLoadThreadsPromise();\n }, [\n adapter,\n assignMainThreadId,\n getLoadThreadsPromise,\n notifyRemoteId,\n session,\n store,\n ]);\n\n useEffect(() => {\n if (typeof window === \"undefined\" || typeof document === \"undefined\") {\n return;\n }\n\n const retryAfterError = () => {\n if (store.value.loadError !== undefined) void getLoadThreadsPromise();\n };\n const retryAfterVisible = () => {\n if (document.visibilityState === \"visible\") retryAfterError();\n };\n\n window.addEventListener(\"online\", retryAfterError);\n document.addEventListener(\"visibilitychange\", retryAfterVisible);\n return () => {\n window.removeEventListener(\"online\", retryAfterError);\n document.removeEventListener(\"visibilitychange\", retryAfterVisible);\n };\n }, [getLoadThreadsPromise, store]);\n\n useEffect(() => {\n void getLoadThreadsPromise();\n }, [getLoadThreadsPromise]);\n\n useEffect(() => {\n if (!isDevelopment) return;\n if (adapter.unstable_useAdapters !== undefined) return;\n if (adapter.unstable_Provider === undefined) return;\n console.warn(\n \"[assistant-ui] RemoteThreadList ignores RemoteThreadListAdapter.unstable_Provider. Expose unstable_useAdapters so per-thread history loads on this entry. useRemoteThreadListRuntime still honors unstable_Provider.\",\n );\n }, [adapter]);\n\n const loadMore = useCallback(() => {\n if (session.loadMorePromise) return session.loadMorePromise;\n const snapshot = store.value;\n if (snapshot.cursor === undefined || snapshot.isLoading) {\n return RESOLVED_PROMISE;\n }\n const generation = session.loadGeneration;\n const cursor = snapshot.cursor;\n const currentAdapter = session.adapter;\n const task = store\n .optimisticUpdate({\n execute: () => currentAdapter.list({ after: cursor }),\n loading: (state) => {\n if (generation !== session.loadGeneration) return state;\n return { ...state, isLoadingMore: true };\n },\n then: (state, page) => {\n if (generation !== session.loadGeneration) return state;\n const appended = classifyThreads(page.threads, {\n threadIds: [...state.threadIds],\n archivedThreadIds: [...state.archivedThreadIds],\n threadIdMap: { ...state.threadIdMap },\n threadData: { ...state.threadData },\n });\n return {\n ...state,\n isLoadingMore: false,\n cursor: normalizeCursor(page.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 !== session.loadGeneration) return;\n console.error(\"[assistant-ui] thread list loadMore failed:\", error);\n })\n .then(() => {\n if (session.loadMorePromise === task) {\n session.loadMorePromise = undefined;\n }\n });\n session.loadMorePromise = task;\n return task;\n }, [session, store]);\n\n const startSwitch = useCallback(\n (run: (generation: number) => Promise<void>) => {\n const generation = ++session.switchGeneration;\n let settle!: (error?: unknown) => void;\n const task = new Promise<void>((resolve, reject) => {\n settle = (error) => {\n if (error === undefined) resolve();\n else reject(error);\n };\n });\n session.switchTask = task;\n void run(generation).then(\n () => settle(),\n (error: unknown) => settle(error),\n );\n return task;\n },\n [session],\n );\n\n const switchToThread = useCallback(\n (\n threadIdOrRemoteId: string,\n options?: { unarchive?: boolean },\n emitThreadIdChange = true,\n ) =>\n startSwitch(async (generation) => {\n let data = getThreadData(store.value, threadIdOrRemoteId);\n if (!data) {\n const remoteMetadata =\n await session.adapter.fetch(threadIdOrRemoteId);\n if (generation !== session.switchGeneration) return;\n const state = store.value;\n const mappingId = createThreadMappingId(remoteMetadata.remoteId);\n const wasInTarget =\n remoteMetadata.status === \"regular\"\n ? state.threadIds.includes(remoteMetadata.remoteId)\n : state.archivedThreadIds.includes(remoteMetadata.remoteId);\n const threadIdsWithoutRemote = state.threadIds.filter(\n (id) => id !== remoteMetadata.remoteId,\n );\n const archivedThreadIdsWithoutRemote = state.archivedThreadIds.filter(\n (id) => id !== remoteMetadata.remoteId,\n );\n store.update({\n ...state,\n threadIds:\n remoteMetadata.status === \"regular\"\n ? wasInTarget\n ? state.threadIds\n : [...threadIdsWithoutRemote, remoteMetadata.remoteId]\n : threadIdsWithoutRemote,\n archivedThreadIds:\n remoteMetadata.status === \"archived\"\n ? wasInTarget\n ? state.archivedThreadIds\n : [...archivedThreadIdsWithoutRemote, remoteMetadata.remoteId]\n : archivedThreadIdsWithoutRemote,\n threadIdMap: {\n ...state.threadIdMap,\n [remoteMetadata.remoteId]: mappingId,\n },\n threadData: {\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 },\n },\n });\n data = getThreadData(store.value, threadIdOrRemoteId);\n }\n if (!data) {\n throw threadNotFoundError(threadIdOrRemoteId, \"switching to it\");\n }\n if (isSameThread(store.value, data.id, session.mainThreadId)) return;\n\n const targetId = data.id;\n let current: RemoteThreadData | undefined = data;\n\n if (current.status === \"archived\" && options?.unarchive !== false) {\n const { remoteId } = await current.initializeTask;\n if (generation !== session.switchGeneration) return;\n current = getThreadData(store.value, targetId);\n if (current?.id !== targetId) return;\n if (current.status === \"archived\") {\n await store.optimisticUpdate({\n execute: () => session.adapter.unarchive(remoteId),\n optimistic: (state) =>\n updateStatusReducer(state, targetId, \"regular\"),\n });\n if (generation !== session.switchGeneration) return;\n current = getThreadData(store.value, targetId);\n if (current?.id !== targetId) return;\n }\n }\n if (generation !== session.switchGeneration) return;\n assignMainThreadId(current.id);\n notifyRemoteId(current.remoteId, emitThreadIdChange);\n session.onSwitchToThread?.(current.id);\n }),\n [assignMainThreadId, notifyRemoteId, session, startSwitch, store],\n );\n\n const switchToNewThread = useCallback(\n (emitThreadIdChange = true) =>\n startSwitch(async (generation) => {\n while (\n store.baseValue.newThreadId !== undefined &&\n store.value.newThreadId === undefined\n ) {\n await store.waitForUpdate();\n if (generation !== session.switchGeneration) return;\n }\n const existing = store.value.newThreadId;\n if (existing !== undefined) {\n const existingId =\n getThreadData(store.value, existing)?.id ?? existing;\n if (isSameThread(store.value, existingId, session.mainThreadId)) {\n return;\n }\n assignMainThreadId(existingId);\n notifyRemoteId(undefined, emitThreadIdChange);\n session.onSwitchToNewThread?.();\n return;\n }\n const seeded = seedNewThread(store.baseValue);\n store.update(seeded.state);\n if (generation !== session.switchGeneration) return;\n assignMainThreadId(seeded.id);\n notifyRemoteId(undefined, emitThreadIdChange);\n session.onSwitchToNewThread?.();\n }),\n [assignMainThreadId, notifyRemoteId, session, startSwitch, store],\n );\n\n const ensureNotMain = useCallback(\n async (threadId: string) => {\n if (threadId === store.value.newThreadId) {\n throw new Error(\"Cannot ensure new thread is not main\");\n }\n let lastAwaitedTask: Promise<void> | undefined;\n while (isSameThread(store.value, threadId, session.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\n // a new thread then re-adopts it, so no switch can move main off it.\n if (threadId === store.value.newThreadId) {\n throw new Error(\"Cannot ensure new thread is not main\");\n }\n let switchTask = session.switchTask;\n const startedFallback = !switchTask || switchTask === lastAwaitedTask;\n if (startedFallback) {\n switchTask = switchToNewThread();\n }\n lastAwaitedTask = switchTask;\n try {\n await switchTask;\n } catch (error) {\n if (startedFallback && session.switchTask === switchTask) {\n throw error;\n }\n }\n }\n },\n [session, store, switchToNewThread],\n );\n\n const requireAdapterGeneration = useCallback(\n (generation: number) => {\n if (generation !== session.adapterGeneration) {\n throw new ThreadListAdapterChangedError();\n }\n },\n [session],\n );\n\n const initialize = useCallback(\n async (threadId: string) => {\n const currentAdapter = session.adapter;\n const adapterGeneration = session.adapterGeneration;\n if (store.value.newThreadId !== threadId) {\n const data = getThreadData(store.value, threadId);\n if (!data) throw threadNotFoundError(threadId, \"initializing it\");\n if (data.status === \"new\") {\n throw threadStatusError(threadId, data.status, \"be initialized here\");\n }\n const result = toInitializeResult(await data.initializeTask);\n requireAdapterGeneration(adapterGeneration);\n return result;\n }\n requireAdapterGeneration(adapterGeneration);\n const initializeTask = currentAdapter.initialize(threadId);\n let removedMappingId: string | undefined;\n let replacementMainThreadId: string | undefined;\n const result = await store.optimisticUpdate({\n execute: () => initializeTask,\n optimistic: (state) =>\n promoteNewThreadReducer(state, threadId, initializeTask),\n then: (state, { remoteId, externalId }) => {\n if (adapterGeneration !== session.adapterGeneration) return state;\n // Background mode still owns the initializing body. Single-body mode\n // has already replaced it, so retain the currently mounted body.\n const retainedThreadId = backgroundThreads\n ? threadId\n : session.mainThreadId;\n const reconciliation = reconcileInitializedThread(\n state,\n threadId,\n remoteId,\n externalId,\n retainedThreadId,\n );\n removedMappingId = reconciliation.removedMappingId;\n if (removedMappingId === session.mainThreadId) {\n replacementMainThreadId = reconciliation.survivorMappingId;\n }\n return reconciliation.state;\n },\n });\n requireAdapterGeneration(adapterGeneration);\n if (removedMappingId !== undefined) {\n setStartedIds((prev) =>\n prev.filter((startedId) => startedId !== removedMappingId),\n );\n }\n if (\n replacementMainThreadId !== undefined &&\n session.mainThreadId === removedMappingId\n ) {\n assignMainThreadId(replacementMainThreadId);\n }\n if (threadId === session.mainThreadId) {\n notifyRemoteId(result.remoteId, true);\n }\n return toInitializeResult(result);\n },\n [\n assignMainThreadId,\n backgroundThreads,\n notifyRemoteId,\n requireAdapterGeneration,\n session,\n store,\n ],\n );\n\n const rename = useCallback(\n (threadIdOrRemoteId: string, newTitle: string) => {\n const currentAdapter = session.adapter;\n const adapterGeneration = session.adapterGeneration;\n const data = getThreadData(store.value, 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(\n session.titleStates,\n data.id,\n newTitle,\n );\n return store\n .optimisticUpdate({\n execute: async () => {\n const { remoteId } = await data.initializeTask;\n requireAdapterGeneration(adapterGeneration);\n return currentAdapter.rename(remoteId, newTitle);\n },\n optimistic: (state) => {\n const current = getThreadData(state, threadIdOrRemoteId);\n if (!current) return state;\n return {\n ...state,\n threadData: {\n ...state.threadData,\n [current.id]: {\n ...current,\n title: newTitle,\n },\n },\n };\n },\n })\n .then(\n (result) => {\n finishThreadTitleRename(session.titleStates, data.id, claim, true);\n return result;\n },\n (error: unknown) => {\n finishThreadTitleRename(session.titleStates, data.id, claim, false);\n throw error;\n },\n );\n },\n [requireAdapterGeneration, session, store],\n );\n\n const updateCustom = useCallback(\n (\n threadIdOrRemoteId: string,\n custom: Record<string, unknown> | undefined,\n ) => {\n const currentAdapter = session.adapter;\n const adapterGeneration = session.adapterGeneration;\n const data = getThreadData(store.value, threadIdOrRemoteId);\n if (!data) {\n throw threadNotFoundError(\n threadIdOrRemoteId,\n \"updating its custom metadata\",\n );\n }\n if (data.status === \"new\") {\n throw threadStatusError(\n threadIdOrRemoteId,\n data.status,\n \"update custom metadata\",\n );\n }\n if (!currentAdapter.updateCustom) {\n throw new Error(\n \"Remote thread list adapter does not support updating custom metadata\",\n );\n }\n return store.optimisticUpdate({\n execute: async () => {\n const { remoteId } = await data.initializeTask;\n requireAdapterGeneration(adapterGeneration);\n if (!currentAdapter.updateCustom) {\n throw new Error(\n \"Remote thread list adapter does not support updating custom metadata\",\n );\n }\n return currentAdapter.updateCustom(remoteId, custom);\n },\n optimistic: (state) => {\n const current = getThreadData(state, threadIdOrRemoteId);\n if (!current) return state;\n return {\n ...state,\n threadData: {\n ...state.threadData,\n [current.id]: {\n ...current,\n custom,\n },\n },\n };\n },\n });\n },\n [requireAdapterGeneration, session, store],\n );\n\n const archive = useCallback(\n async (threadIdOrRemoteId: string) => {\n const currentAdapter = session.adapter;\n const adapterGeneration = session.adapterGeneration;\n const data = getThreadData(store.value, 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 ensureNotMain(data.id);\n requireAdapterGeneration(adapterGeneration);\n return store.optimisticUpdate({\n execute: async () => {\n const { remoteId } = await data.initializeTask;\n requireAdapterGeneration(adapterGeneration);\n return currentAdapter.archive(remoteId);\n },\n optimistic: (state) => updateStatusReducer(state, data.id, \"archived\"),\n });\n },\n [ensureNotMain, requireAdapterGeneration, session, store],\n );\n\n const unarchive = useCallback(\n (threadIdOrRemoteId: string) => {\n const currentAdapter = session.adapter;\n const adapterGeneration = session.adapterGeneration;\n const data = getThreadData(store.value, threadIdOrRemoteId);\n if (!data)\n throw threadNotFoundError(threadIdOrRemoteId, \"unarchiving it\");\n if (data.status !== \"archived\") {\n throw threadStatusError(\n threadIdOrRemoteId,\n data.status,\n \"be unarchived\",\n );\n }\n return store.optimisticUpdate({\n execute: async () => {\n try {\n const { remoteId } = await data.initializeTask;\n requireAdapterGeneration(adapterGeneration);\n return await currentAdapter.unarchive(remoteId);\n } catch (error) {\n if (adapterGeneration === session.adapterGeneration) {\n await ensureNotMain(data.id);\n }\n throw error;\n }\n },\n optimistic: (state) => updateStatusReducer(state, data.id, \"regular\"),\n });\n },\n [ensureNotMain, requireAdapterGeneration, session, store],\n );\n\n const deleteThread = useCallback(\n async (threadIdOrRemoteId: string) => {\n const currentAdapter = session.adapter;\n const adapterGeneration = session.adapterGeneration;\n const data = getThreadData(store.value, 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 ensureNotMain(data.id);\n requireAdapterGeneration(adapterGeneration);\n const result = await store.optimisticUpdate({\n execute: async () => {\n const { remoteId } = await data.initializeTask;\n requireAdapterGeneration(adapterGeneration);\n return currentAdapter.delete(remoteId);\n },\n optimistic: (state) => updateStatusReducer(state, data.id, \"deleted\"),\n });\n // An adapter swap resets the optimistic layer, and a listed thread's slot\n // id is its remote id, so a replacement adapter can re-list this slot\n // while the deletion is in flight.\n if (getThreadData(store.value, data.id) !== undefined) return result;\n clearThreadTitleState(session.titleStates, data.id);\n onDelete?.(data.id);\n return result;\n },\n [ensureNotMain, onDelete, requireAdapterGeneration, session, store],\n );\n\n const generateTitle = useCallback(\n async (\n threadIdOrRemoteId: string,\n messages: readonly ThreadMessage[] | undefined,\n options?: { automatic?: boolean },\n ) => {\n const currentAdapter = session.adapter;\n const adapterGeneration = session.adapterGeneration;\n const data = getThreadData(store.value, threadIdOrRemoteId);\n if (!data) {\n throw threadNotFoundError(threadIdOrRemoteId, \"generating its title\");\n }\n if (data.status === \"new\") {\n throw threadStatusError(\n threadIdOrRemoteId,\n data.status,\n \"generate a title\",\n );\n }\n const { remoteId } = await data.initializeTask;\n requireAdapterGeneration(adapterGeneration);\n if (\n !backgroundThreads &&\n !isSameThread(store.value, data.id, session.mainThreadId)\n ) {\n return;\n }\n if (!messages) return;\n await runThreadTitleGeneration({\n states: session.titleStates,\n threadId: data.id,\n automatic: options?.automatic === true,\n generate: async (onTitle) => {\n const stream = await currentAdapter.generateTitle(remoteId, messages);\n requireAdapterGeneration(adapterGeneration);\n await applyTitleStream(stream, onTitle);\n },\n rename: async (title) => {\n requireAdapterGeneration(adapterGeneration);\n await currentAdapter.rename(remoteId, title);\n },\n applyTitle: async (title) => {\n await store.optimisticUpdate({\n execute: async () => {},\n optimistic: (state) => {\n if (adapterGeneration !== session.adapterGeneration) return state;\n const current = getThreadData(state, data.id);\n if (!current) return state;\n return {\n ...state,\n threadData: {\n ...state.threadData,\n [current.id]: {\n ...current,\n title,\n },\n },\n };\n },\n });\n },\n });\n },\n [backgroundThreads, requireAdapterGeneration, session, store],\n );\n\n const detach = useCallback(\n async (threadId: string) => {\n await ensureNotMain(threadId);\n setStartedIds((prev) => prev.filter((id) => id !== threadId));\n },\n [ensureNotMain],\n );\n\n const { mainThreadClient, itemOrder, threadListItems } =\n useRemoteThreadListView({\n listState,\n mainThreadId,\n startedIds,\n backgroundThreads,\n threadFactory,\n useAdapters: adapter.unstable_useAdapters,\n onSwitchTo: (id, options) => switchToThread(id, options),\n onRename: (id, title) => rename(id, title),\n onUpdateCustom: (id, custom) => updateCustom(id, custom),\n onArchive: (id) => archive(id),\n onUnarchive: (id) => unarchive(id),\n onDelete: (id) => deleteThread(id),\n onGenerateTitle: (id, messages, options) =>\n generateTitle(id, messages, options),\n onInitialize: async (id) => toInitializeResult(await initialize(id)),\n onDetach: (id) => detach(id),\n });\n\n const mainRemoteId = getThreadData(listState, mainThreadId)?.remoteId;\n useEffect(() => {\n if (session.lastNotifiedRemoteId === mainRemoteId) return;\n session.lastNotifiedRemoteId = mainRemoteId;\n invokeUserCallback(\n \"assistant-ui\",\n \"onThreadIdChange\",\n onThreadIdChange,\n mainRemoteId,\n );\n }, [mainRemoteId, onThreadIdChange, session]);\n\n useEffect(() => {\n if (session.isFirstThreadIdEffect) {\n session.isFirstThreadIdEffect = false;\n session.lastControlledThreadId = threadId;\n if (threadId === undefined) return;\n handleThreadListAction(\"switch\", () =>\n switchToThread(threadId, undefined, false),\n );\n return;\n }\n if (Object.is(session.lastControlledThreadId, threadId)) return;\n session.lastControlledThreadId = threadId;\n if (threadId === undefined) {\n handleThreadListAction(\"create\", () => switchToNewThread(false));\n return;\n }\n handleThreadListAction(\"switch\", () =>\n switchToThread(threadId, undefined, false),\n );\n }, [session, switchToNewThread, switchToThread, threadId]);\n\n const state = useMemo(\n () => ({\n mainThreadId,\n newThreadId: listState.newThreadId ?? null,\n isLoading: listState.isLoading,\n loadError: listState.loadError,\n isLoadingMore: listState.isLoadingMore,\n hasMore: listState.cursor !== undefined,\n threadIds: listState.threadIds,\n archivedThreadIds: listState.archivedThreadIds,\n threadItems: threadListItems.state,\n main: mainThreadClient.state,\n }),\n [\n listState.archivedThreadIds,\n listState.cursor,\n listState.isLoading,\n listState.loadError,\n listState.isLoadingMore,\n listState.newThreadId,\n listState.threadIds,\n mainThreadClient.state,\n mainThreadId,\n threadListItems.state,\n ],\n );\n\n return {\n getState: () => state,\n switchToThread: (id, options) => {\n handleThreadListAction(\"switch\", () => switchToThread(id, options));\n },\n switchToNewThread: () => {\n handleThreadListAction(\"create\", () => switchToNewThread());\n },\n getLoadThreadsPromise,\n reload,\n reloadMainThread: () => {\n if (getThreadData(store.value, mainThreadId)?.status === \"new\") {\n return RESOLVED_PROMISE;\n }\n return (\n mainThreadClient.methods.unstable_refetchThread?.() ?? RESOLVED_PROMISE\n );\n },\n loadMore,\n item: (selector) => {\n if (selector === \"main\") {\n const index = itemOrder.findIndex((item) =>\n itemMatchesId(item, listState, mainThreadId),\n );\n return threadListItems.get({ index });\n }\n if (\"id\" in selector) {\n const index = itemOrder.findIndex((item) =>\n itemMatchesId(item, listState, selector.id),\n );\n return threadListItems.get({ index });\n }\n const ids = selector.archived\n ? listState.archivedThreadIds\n : listState.threadIds;\n const id = ids[selector.index];\n if (id === undefined) {\n return threadListItems.get({ index: -1 });\n }\n const index = itemOrder.findIndex((item) =>\n itemMatchesId(item, listState, id),\n );\n return threadListItems.get({ index });\n },\n thread: () => mainThreadClient.methods,\n };\n};\n\n/**\n * `AuiConfig` `threads` entry backed by a `RemoteThreadListAdapter`. Thread\n * bodies are born from the `thread` factory inside the client tree, so any\n * `AssistantClient` host can run a remote or cloud list. Per-thread history\n * and attachments come from `unstable_useAdapters`. `useRemoteThreadListRuntime`\n * uses the same hook when `unstable_Provider` is omitted. Key the factory\n * with `withKey` so history reloads when the visible thread changes.\n * With `backgroundThreads`, every visited thread stays mounted: runs continue\n * across switches, per-item `isRunning` is live, and freshly initialized\n * threads title themselves.\n */\nexport const RemoteThreadList = resource(useRemoteThreadList);\n\nattachTransformScopes(useRemoteThreadList, inMemoryThreadListTransformScopes);\n"],"mappings":"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"}
@@ -1,14 +1,12 @@
1
- import { Toolkit } from "../model-context/toolbox.js";
2
- import { McpAppResourceOutput } from "../types/scopes/tools.js";
3
- import { ClientOutput } from "@assistant-ui/store";
4
- import { ResourceElement } from "@assistant-ui/tap";
5
- //#region src/react/client/Tools.d.ts
1
+ import { type ResourceElement } from "@assistant-ui/tap";
2
+ import type { ClientOutput } from "@assistant-ui/store";
3
+ import type { McpAppResourceOutput } from "../types/scopes/tools.js";
4
+ import { type Toolkit } from "../model-context/toolbox.js";
5
+ export type { McpAppResourceOutput };
6
6
  export declare const Tools: import("@assistant-ui/tap").Resource<ClientOutput<"tools">, [{
7
- /** Tools to expose to the model and optional renderers to install. */
8
- toolkit?: Toolkit;
9
- /** Optional MCP app resource whose tools should be merged into context. */
10
- mcpApp?: ResourceElement<McpAppResourceOutput> | undefined;
7
+ /** Tools to expose to the model and optional renderers to install. */
8
+ toolkit?: Toolkit;
9
+ /** Optional MCP app resource whose tools should be merged into context. */
10
+ mcpApp?: ResourceElement<McpAppResourceOutput> | undefined;
11
11
  }]>;
12
- //#endregion
13
- export type { McpAppResourceOutput };
14
12
  //# sourceMappingURL=Tools.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Tools.d.ts","names":[],"sources":["../../../src/react/client/Tools.ts"],"mappings":";;;;;qBA8Ka,mCAAK,SAAA;;EAtIN,UAAA;;EAED,SAAA,gBAAgB"}
1
+ {"version":3,"file":"Tools.d.ts","sourceRoot":"","sources":["../../../src/react/client/Tools.ts"],"names":[],"mappings":"AACA,OAAO,EAIL,KAAK,eAAe,EACrB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAMxD,OAAO,KAAK,EAAE,oBAAoB,EAAc,iCAA8B;AAE9E,OAAO,EAIL,KAAK,OAAO,EACb,oCAAiC;AAMlC,YAAY,EAAE,oBAAoB,EAAE,CAAC;AAmJrC,eAAO,MAAM,KAAK;IArIhB,sEAAsE;cAC5D,OAAO;IACjB,2EAA2E;aAClE,eAAe,CAAC,oBAAoB,CAAC,GAAG,SAAS;GAkIrB,CAAC"}
@@ -1,4 +1,5 @@
1
1
  import { nullProtoRecord } from "../../utils/record.js";
2
+ import { runCleanups } from "../../subscribable/subscribable.js";
2
3
  import { ModelContext } from "../../store/clients/model-context-client.js";
3
4
  import { isStandaloneToolDisplay, makeToolCallTextComponent } from "../model-context/toolbox.js";
4
5
  import { attachTransformScopes, useAssistantClientRef, useAssistantScopeEffect } from "@assistant-ui/store/client";
@@ -81,9 +82,7 @@ const useTools = (t0) => {
81
82
  renderText: toolRenderText
82
83
  }));
83
84
  }
84
- return () => {
85
- unsubscribes.forEach(_temp2);
86
- };
85
+ return () => runCleanups(unsubscribes);
87
86
  };
88
87
  t5 = [toolkit, setToolUI];
89
88
  $[6] = toolkit;
@@ -98,7 +97,7 @@ const useTools = (t0) => {
98
97
  if ($[9] !== clientRef || $[10] !== toolkit) {
99
98
  t6 = () => {
100
99
  if (!toolkit) return;
101
- const toolsWithoutRender = Object.entries(toolkit).reduce(_temp3, nullProtoRecord());
100
+ const toolsWithoutRender = Object.entries(toolkit).reduce(_temp2, nullProtoRecord());
102
101
  return clientRef.current.modelContext().register({ getModelContext: () => ({ tools: toolsWithoutRender }) });
103
102
  };
104
103
  $[9] = clientRef;
@@ -130,10 +129,7 @@ attachTransformScopes(useTools, (scopes, parent) => {
130
129
  function _temp() {
131
130
  return nullProtoRecord();
132
131
  }
133
- function _temp2(fn) {
134
- return fn();
135
- }
136
- function _temp3(acc, t0) {
132
+ function _temp2(acc, t0) {
137
133
  const [name, tool_0] = t0;
138
134
  if (tool_0.type === "mcp") return acc;
139
135
  const { display: _display, render: _render, renderText: _renderText, ...rest } = tool_0;
@@ -1 +1 @@
1
- {"version":3,"file":"Tools.js","names":["useState","useEffect","useCallback","useMemo","useResources","resource","withKey","ResourceElement","ClientOutput","attachTransformScopes","useAssistantClientRef","useAssistantScopeEffect","McpAppResourceOutput","ToolsState","Tool","isStandaloneToolDisplay","makeToolCallTextComponent","ToolCallText","Toolkit","ToolCallMessagePartComponent","ModelContext","nullProtoRecord","useTools","t0","$","_c","toolkit","mcpApp","t1","mcpAppOutputs","mcpAppOutput","toolUIs","setToolUIs","_temp","t2","state","clientRef","t3","Symbol","for","toolName","render","options","registration","renderText","standalone","prev","next","prev_0","registrations","filter","r","next_0","length","setToolUI","t4","t5","unsubscribes","toolName_0","tool","Object","entries","toolRender","undefined","toolRenderText","render_0","push","forEach","_temp2","t6","toolsWithoutRender","reduce","_temp3","modelContextProvider","getModelContext","tools","current","modelContext","register","t7","t8","getState","Tools","scopes","parent","source","fn","acc","name","tool_0","type","display","_display","_render","_renderText","rest"],"sources":["../../../src/react/client/Tools.ts"],"sourcesContent":["import { useState, useEffect, useCallback, useMemo } from \"react\";\nimport {\n useResources,\n resource,\n withKey,\n type ResourceElement,\n} from \"@assistant-ui/tap\";\nimport type { ClientOutput } from \"@assistant-ui/store\";\nimport {\n attachTransformScopes,\n useAssistantClientRef,\n useAssistantScopeEffect,\n} from \"@assistant-ui/store/client\";\nimport type { McpAppResourceOutput, ToolsState } from \"../types/scopes/tools\";\nimport type { Tool } from \"assistant-stream\";\nimport {\n isStandaloneToolDisplay,\n makeToolCallTextComponent,\n type ToolCallText,\n type Toolkit,\n} from \"../model-context/toolbox\";\nimport type { ToolCallMessagePartComponent } from \"../types/MessagePartComponentTypes\";\nimport { ModelContext } from \"../../store/clients/model-context-client\";\nimport { nullProtoRecord } from \"../../utils/record\";\n\nexport type { McpAppResourceOutput };\n\n/**\n * Registers tools with model context and installs tool-call renderers.\n *\n * Mount this resource near an assistant subtree when you want to expose a\n * group of tools declaratively. Tool definitions are registered with model\n * context, while each tool renderer is registered with the tools scope for\n * message rendering.\n */\nconst useTools = ({\n toolkit,\n mcpApp,\n}: {\n /** Tools to expose to the model and optional renderers to install. */\n toolkit?: Toolkit;\n /** Optional MCP app resource whose tools should be merged into context. */\n mcpApp?: ResourceElement<McpAppResourceOutput> | undefined;\n}): ClientOutput<\"tools\"> => {\n const mcpAppOutputs = useResources(mcpApp ? [withKey(\"mcpApp\", mcpApp)] : []);\n const mcpAppOutput = mcpAppOutputs[0];\n\n const [toolUIs, setToolUIs] = useState<ToolsState[\"toolUIs\"]>(() =>\n nullProtoRecord(),\n );\n\n const state = useMemo(\n (): ToolsState => ({\n toolUIs,\n mcpApp: mcpAppOutput,\n }),\n [toolUIs, mcpAppOutput],\n );\n\n const clientRef = useAssistantClientRef();\n\n const setToolUI = useCallback(\n (\n toolName: string,\n render: ToolCallMessagePartComponent,\n options?: {\n standalone?: boolean;\n renderText?: ToolCallText<any, any> | undefined;\n },\n ) => {\n // One registration object per call; identity is the removal key, so\n // the per-name list stays correctly ref-counted across re-registers.\n const registration = {\n render,\n renderText: options?.renderText,\n standalone: options?.standalone ?? false,\n };\n\n setToolUIs((prev) => {\n const next = nullProtoRecord(prev);\n next[toolName] = [...(next[toolName] ?? []), registration];\n return next;\n });\n\n return () => {\n setToolUIs((prev) => {\n const registrations =\n prev[toolName]?.filter((r) => r !== registration) ?? [];\n const next = nullProtoRecord(prev);\n if (registrations.length > 0) {\n next[toolName] = registrations;\n return next;\n }\n // Drop the key entirely so repeatedly mounted/unmounted tools\n // don't leave empty arrays accumulating across a long session.\n delete next[toolName];\n return next;\n });\n };\n },\n [],\n );\n\n useEffect(() => {\n if (!toolkit) return;\n const unsubscribes: (() => void)[] = [];\n\n // Register tool UIs (exclude symbols)\n for (const [toolName, tool] of Object.entries(toolkit)) {\n const toolRender = \"render\" in tool ? tool.render : undefined;\n const toolRenderText = \"renderText\" in tool ? tool.renderText : undefined;\n const render =\n toolRender ??\n (toolRenderText\n ? makeToolCallTextComponent(toolRenderText)\n : undefined);\n if (render) {\n unsubscribes.push(\n // Registration has to be undone on unmount, so the registry write and\n // its unsubscribe belong to the same effect.\n // eslint-disable-next-line react-hooks/set-state-in-effect\n setToolUI(toolName, render, {\n standalone: isStandaloneToolDisplay(tool),\n renderText: toolRenderText,\n }),\n );\n }\n }\n\n return () => {\n unsubscribes.forEach((fn) => fn());\n };\n }, [toolkit, setToolUI]);\n\n useAssistantScopeEffect(\n \"modelContext\",\n () => {\n if (!toolkit) return;\n\n // Register tools with model context (exclude symbols). `render`,\n // `renderText`, and `display` are client-only presentation concerns and\n // never reach the model.\n const toolsWithoutRender = Object.entries(toolkit).reduce(\n (acc, [name, tool]) => {\n if (tool.type === \"mcp\") return acc;\n const {\n display: _display,\n render: _render,\n renderText: _renderText,\n ...rest\n } = tool as typeof tool & { renderText?: unknown };\n acc[name] = rest as Tool<any, any>;\n return acc;\n },\n nullProtoRecord<Tool<any, any>>(),\n );\n\n const modelContextProvider = {\n getModelContext: () => ({\n tools: toolsWithoutRender,\n }),\n };\n\n return clientRef.current!.modelContext().register(modelContextProvider);\n },\n [toolkit],\n );\n\n return {\n getState: () => state,\n setToolUI,\n };\n};\n\nexport const Tools = resource(useTools);\n\nattachTransformScopes(useTools, (scopes, parent) => {\n if (!scopes.modelContext && parent.modelContext.source === null) {\n scopes.modelContext = ModelContext();\n }\n});\n"],"mappings":"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"}
1
+ {"version":3,"file":"Tools.js","names":["useState","useEffect","useCallback","useMemo","useResources","resource","withKey","ResourceElement","ClientOutput","attachTransformScopes","useAssistantClientRef","useAssistantScopeEffect","McpAppResourceOutput","ToolsState","Tool","isStandaloneToolDisplay","makeToolCallTextComponent","ToolCallText","Toolkit","ToolCallMessagePartComponent","ModelContext","nullProtoRecord","runCleanups","useTools","t0","$","_c","toolkit","mcpApp","t1","mcpAppOutputs","mcpAppOutput","toolUIs","setToolUIs","_temp","t2","state","clientRef","t3","Symbol","for","toolName","render","options","registration","renderText","standalone","prev","next","prev_0","registrations","filter","r","next_0","length","setToolUI","t4","t5","unsubscribes","toolName_0","tool","Object","entries","toolRender","undefined","toolRenderText","render_0","push","t6","toolsWithoutRender","reduce","_temp2","modelContextProvider","getModelContext","tools","current","modelContext","register","t7","t8","getState","Tools","scopes","parent","source","acc","name","tool_0","type","display","_display","_render","_renderText","rest"],"sources":["../../../src/react/client/Tools.ts"],"sourcesContent":["import { useState, useEffect, useCallback, useMemo } from \"react\";\nimport {\n useResources,\n resource,\n withKey,\n type ResourceElement,\n} from \"@assistant-ui/tap\";\nimport type { ClientOutput } from \"@assistant-ui/store\";\nimport {\n attachTransformScopes,\n useAssistantClientRef,\n useAssistantScopeEffect,\n} from \"@assistant-ui/store/client\";\nimport type { McpAppResourceOutput, ToolsState } from \"../types/scopes/tools\";\nimport type { Tool } from \"assistant-stream\";\nimport {\n isStandaloneToolDisplay,\n makeToolCallTextComponent,\n type ToolCallText,\n type Toolkit,\n} from \"../model-context/toolbox\";\nimport type { ToolCallMessagePartComponent } from \"../types/MessagePartComponentTypes\";\nimport { ModelContext } from \"../../store/clients/model-context-client\";\nimport { nullProtoRecord } from \"../../utils/record\";\nimport { runCleanups } from \"../../subscribable/subscribable\";\n\nexport type { McpAppResourceOutput };\n\n/**\n * Registers tools with model context and installs tool-call renderers.\n *\n * Mount this resource near an assistant subtree when you want to expose a\n * group of tools declaratively. Tool definitions are registered with model\n * context, while each tool renderer is registered with the tools scope for\n * message rendering.\n */\nconst useTools = ({\n toolkit,\n mcpApp,\n}: {\n /** Tools to expose to the model and optional renderers to install. */\n toolkit?: Toolkit;\n /** Optional MCP app resource whose tools should be merged into context. */\n mcpApp?: ResourceElement<McpAppResourceOutput> | undefined;\n}): ClientOutput<\"tools\"> => {\n const mcpAppOutputs = useResources(mcpApp ? [withKey(\"mcpApp\", mcpApp)] : []);\n const mcpAppOutput = mcpAppOutputs[0];\n\n const [toolUIs, setToolUIs] = useState<ToolsState[\"toolUIs\"]>(() =>\n nullProtoRecord(),\n );\n\n const state = useMemo(\n (): ToolsState => ({\n toolUIs,\n mcpApp: mcpAppOutput,\n }),\n [toolUIs, mcpAppOutput],\n );\n\n const clientRef = useAssistantClientRef();\n\n const setToolUI = useCallback(\n (\n toolName: string,\n render: ToolCallMessagePartComponent,\n options?: {\n standalone?: boolean;\n renderText?: ToolCallText<any, any> | undefined;\n },\n ) => {\n // One registration object per call; identity is the removal key, so\n // the per-name list stays correctly ref-counted across re-registers.\n const registration = {\n render,\n renderText: options?.renderText,\n standalone: options?.standalone ?? false,\n };\n\n setToolUIs((prev) => {\n const next = nullProtoRecord(prev);\n next[toolName] = [...(next[toolName] ?? []), registration];\n return next;\n });\n\n return () => {\n setToolUIs((prev) => {\n const registrations =\n prev[toolName]?.filter((r) => r !== registration) ?? [];\n const next = nullProtoRecord(prev);\n if (registrations.length > 0) {\n next[toolName] = registrations;\n return next;\n }\n // Drop the key entirely so repeatedly mounted/unmounted tools\n // don't leave empty arrays accumulating across a long session.\n delete next[toolName];\n return next;\n });\n };\n },\n [],\n );\n\n useEffect(() => {\n if (!toolkit) return;\n const unsubscribes: (() => void)[] = [];\n\n // Register tool UIs (exclude symbols)\n for (const [toolName, tool] of Object.entries(toolkit)) {\n const toolRender = \"render\" in tool ? tool.render : undefined;\n const toolRenderText = \"renderText\" in tool ? tool.renderText : undefined;\n const render =\n toolRender ??\n (toolRenderText\n ? makeToolCallTextComponent(toolRenderText)\n : undefined);\n if (render) {\n unsubscribes.push(\n // Registration has to be undone on unmount, so the registry write and\n // its unsubscribe belong to the same effect.\n // eslint-disable-next-line react-hooks/set-state-in-effect\n setToolUI(toolName, render, {\n standalone: isStandaloneToolDisplay(tool),\n renderText: toolRenderText,\n }),\n );\n }\n }\n\n return () => runCleanups(unsubscribes);\n }, [toolkit, setToolUI]);\n\n useAssistantScopeEffect(\n \"modelContext\",\n () => {\n if (!toolkit) return;\n\n // Register tools with model context (exclude symbols). `render`,\n // `renderText`, and `display` are client-only presentation concerns and\n // never reach the model.\n const toolsWithoutRender = Object.entries(toolkit).reduce(\n (acc, [name, tool]) => {\n if (tool.type === \"mcp\") return acc;\n const {\n display: _display,\n render: _render,\n renderText: _renderText,\n ...rest\n } = tool as typeof tool & { renderText?: unknown };\n acc[name] = rest as Tool<any, any>;\n return acc;\n },\n nullProtoRecord<Tool<any, any>>(),\n );\n\n const modelContextProvider = {\n getModelContext: () => ({\n tools: toolsWithoutRender,\n }),\n };\n\n return clientRef.current!.modelContext().register(modelContextProvider);\n },\n [toolkit],\n );\n\n return {\n getState: () => state,\n setToolUI,\n };\n};\n\nexport const Tools = resource(useTools);\n\nattachTransformScopes(useTools, (scopes, parent) => {\n if (!scopes.modelContext && parent.modelContext.source === null) {\n scopes.modelContext = ModelContext();\n }\n});\n"],"mappings":"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"}
@@ -1,13 +1,12 @@
1
- import { Unstable_InteractableDefinition } from "../types/scopes/interactables.js";
2
- import { Tool, toJSONSchema } from "assistant-stream";
3
- //#region src/react/client/interactable-model-context.d.ts
4
- export type PartialJSONSchema = ReturnType<typeof toJSONSchema>;
5
- export declare function buildInteractableModelContext(definitions: Record<string, Unstable_InteractableDefinition>, partialSchemaCache: Map<string, PartialJSONSchema>, setDefState: (id: string, updater: (prev: unknown) => unknown) => void, streamBaselines?: Map<string, {
6
- targetId: string;
7
- state: unknown;
1
+ import type { Tool } from "assistant-stream";
2
+ import { toJSONSchema } from "assistant-stream";
3
+ import type { Unstable_InteractableDefinition } from "../types/scopes/interactables.js";
4
+ export type StateJSONSchema = ReturnType<typeof toJSONSchema>;
5
+ export declare function buildInteractableModelContext(definitions: Record<string, Unstable_InteractableDefinition>, schemaCache: Map<string, StateJSONSchema>, setDefState: (id: string, updater: (prev: unknown) => unknown) => void, getCurrentDefinitions: () => Record<string, Unstable_InteractableDefinition>, streamBaselines?: Map<string, {
6
+ targetId: string;
7
+ state: unknown;
8
8
  }>): {
9
- tools: Record<string, Tool<any, any>>;
10
- unstable_composerMetadata?: Record<string, unknown>;
9
+ tools: Record<string, Tool<any, any>>;
10
+ unstable_composerMetadata?: Record<string, unknown>;
11
11
  } | undefined;
12
- //#endregion
13
12
  //# sourceMappingURL=interactable-model-context.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"interactable-model-context.d.ts","names":[],"sources":["../../../src/react/client/interactable-model-context.ts"],"mappings":";;;YAYY,oBAAoB,kBAAkB;wBAgIlC,8BACd,aAAa,eAAe,kCAC5B,oBAAoB,YAAY,oBAChC,cAAc,YAAY,UAAU,oCACpC,kBAAe;EAA+B;EAAe;;EAGzD,OAAO,eAAe;EACtB,4BAA4B"}
1
+ {"version":3,"file":"interactable-model-context.d.ts","sourceRoot":"","sources":["../../../src/react/client/interactable-model-context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAEhD,OAAO,KAAK,EAAE,+BAA+B,EAAE,yCAAsC;AAUrF,MAAM,MAAM,eAAe,GAAG,UAAU,CAAC,OAAO,YAAY,CAAC,CAAC;AAiI9D,wBAAgB,6BAA6B,CAC3C,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,+BAA+B,CAAC,EAC5D,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,EACzC,WAAW,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,OAAO,KAAK,IAAI,EACtE,qBAAqB,EAAE,MAAM,MAAM,CAAC,MAAM,EAAE,+BAA+B,CAAC,EAC5E,eAAe;cAA+B,MAAM;WAAS,OAAO;EAAK,GAEvE;IACE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;IACtC,yBAAyB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACrD,GACD,SAAS,CA0JZ"}