@assistant-ui/core 0.3.19 → 0.3.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (934) hide show
  1. package/dist/adapters/attachment.d.ts +50 -43
  2. package/dist/adapters/attachment.d.ts.map +1 -1
  3. package/dist/adapters/attachment.js +52 -21
  4. package/dist/adapters/attachment.js.map +1 -1
  5. package/dist/adapters/directive-formatter.d.ts +2 -5
  6. package/dist/adapters/directive-formatter.d.ts.map +1 -1
  7. package/dist/adapters/feedback.d.ts +7 -8
  8. package/dist/adapters/feedback.d.ts.map +1 -1
  9. package/dist/adapters/index.d.ts +14 -9
  10. package/dist/adapters/index.d.ts.map +1 -0
  11. package/dist/adapters/index.js +1 -1
  12. package/dist/adapters/speech.d.ts +63 -65
  13. package/dist/adapters/speech.d.ts.map +1 -1
  14. package/dist/adapters/speech.js +16 -2
  15. package/dist/adapters/speech.js.map +1 -1
  16. package/dist/adapters/suggestion.d.ts +19 -22
  17. package/dist/adapters/suggestion.d.ts.map +1 -1
  18. package/dist/adapters/thread-history.d.ts +60 -58
  19. package/dist/adapters/thread-history.d.ts.map +1 -1
  20. package/dist/adapters/trigger.d.ts +8 -11
  21. package/dist/adapters/trigger.d.ts.map +1 -1
  22. package/dist/adapters/voice.d.ts +50 -45
  23. package/dist/adapters/voice.d.ts.map +1 -1
  24. package/dist/adapters/voice.js +17 -3
  25. package/dist/adapters/voice.js.map +1 -1
  26. package/dist/index.d.ts +70 -56
  27. package/dist/index.d.ts.map +1 -0
  28. package/dist/index.js +6 -6
  29. package/dist/index.js.map +1 -1
  30. package/dist/internal/duplicate-detection.d.ts +1 -4
  31. package/dist/internal/duplicate-detection.d.ts.map +1 -1
  32. package/dist/internal.d.ts +27 -58
  33. package/dist/internal.d.ts.map +1 -0
  34. package/dist/internal.js +8 -6
  35. package/dist/model-context/frame/host.d.ts +20 -23
  36. package/dist/model-context/frame/host.d.ts.map +1 -1
  37. package/dist/model-context/frame/host.js +3 -1
  38. package/dist/model-context/frame/host.js.map +1 -1
  39. package/dist/model-context/frame/provider.d.ts +28 -30
  40. package/dist/model-context/frame/provider.d.ts.map +1 -1
  41. package/dist/model-context/frame/provider.js +6 -0
  42. package/dist/model-context/frame/provider.js.map +1 -1
  43. package/dist/model-context/frame/types.d.ts +24 -27
  44. package/dist/model-context/frame/types.d.ts.map +1 -1
  45. package/dist/model-context/frame/validate.d.ts +3 -0
  46. package/dist/model-context/frame/validate.d.ts.map +1 -0
  47. package/dist/model-context/frame/validate.js +26 -0
  48. package/dist/model-context/frame/validate.js.map +1 -0
  49. package/dist/model-context/interactable-composer-metadata.d.ts +51 -39
  50. package/dist/model-context/interactable-composer-metadata.d.ts.map +1 -1
  51. package/dist/model-context/interactable-composer-metadata.js +30 -6
  52. package/dist/model-context/interactable-composer-metadata.js.map +1 -1
  53. package/dist/model-context/registry-handles.d.ts +9 -12
  54. package/dist/model-context/registry-handles.d.ts.map +1 -1
  55. package/dist/model-context/registry.d.ts +15 -18
  56. package/dist/model-context/registry.d.ts.map +1 -1
  57. package/dist/model-context/tool-call-text.d.ts +15 -17
  58. package/dist/model-context/tool-call-text.d.ts.map +1 -1
  59. package/dist/model-context/tool.d.ts +12 -14
  60. package/dist/model-context/tool.d.ts.map +1 -1
  61. package/dist/model-context/types.d.ts +40 -43
  62. package/dist/model-context/types.d.ts.map +1 -1
  63. package/dist/react/AssistantProvider.d.ts +9 -12
  64. package/dist/react/AssistantProvider.d.ts.map +1 -1
  65. package/dist/react/AssistantRuntimeProvider.d.ts +23 -26
  66. package/dist/react/AssistantRuntimeProvider.d.ts.map +1 -1
  67. package/dist/react/RuntimeAdapter.d.ts +4 -8
  68. package/dist/react/RuntimeAdapter.d.ts.map +1 -1
  69. package/dist/react/adapters/LocalStorageThreadListAdapter.d.ts +28 -23
  70. package/dist/react/adapters/LocalStorageThreadListAdapter.d.ts.map +1 -1
  71. package/dist/react/adapters/LocalStorageThreadListAdapter.js +77 -58
  72. package/dist/react/adapters/LocalStorageThreadListAdapter.js.map +1 -1
  73. package/dist/react/adapters/TitleGenerationAdapter.d.ts +4 -7
  74. package/dist/react/adapters/TitleGenerationAdapter.d.ts.map +1 -1
  75. package/dist/react/client/AdaptedRemoteThread.d.ts +6 -9
  76. package/dist/react/client/AdaptedRemoteThread.d.ts.map +1 -1
  77. package/dist/react/client/DataRenderers.d.ts +2 -5
  78. package/dist/react/client/DataRenderers.d.ts.map +1 -1
  79. package/dist/react/client/InMemoryThreadList.d.ts +9 -12
  80. package/dist/react/client/InMemoryThreadList.d.ts.map +1 -1
  81. package/dist/react/client/Interactables.d.ts +3 -6
  82. package/dist/react/client/Interactables.d.ts.map +1 -1
  83. package/dist/react/client/Interactables.js +306 -101
  84. package/dist/react/client/Interactables.js.map +1 -1
  85. package/dist/react/client/RemoteThreadList.d.ts +34 -37
  86. package/dist/react/client/RemoteThreadList.d.ts.map +1 -1
  87. package/dist/react/client/RemoteThreadList.js +2 -1
  88. package/dist/react/client/RemoteThreadList.js.map +1 -1
  89. package/dist/react/client/Tools.d.ts +10 -12
  90. package/dist/react/client/Tools.d.ts.map +1 -1
  91. package/dist/react/client/Tools.js +4 -8
  92. package/dist/react/client/Tools.js.map +1 -1
  93. package/dist/react/client/interactable-model-context.d.ts +9 -11
  94. package/dist/react/client/interactable-model-context.d.ts.map +1 -1
  95. package/dist/react/client/interactable-model-context.js +32 -22
  96. package/dist/react/client/interactable-model-context.js.map +1 -1
  97. package/dist/react/index.d.ts +160 -122
  98. package/dist/react/index.d.ts.map +1 -0
  99. package/dist/react/index.js +5 -5
  100. package/dist/react/interactables-legacy/Interactables.d.ts +2 -5
  101. package/dist/react/interactables-legacy/Interactables.d.ts.map +1 -1
  102. package/dist/react/interactables-legacy/Interactables.js +15 -8
  103. package/dist/react/interactables-legacy/Interactables.js.map +1 -1
  104. package/dist/react/interactables-legacy/interactable-model-context.d.ts +6 -9
  105. package/dist/react/interactables-legacy/interactable-model-context.d.ts.map +1 -1
  106. package/dist/react/interactables-legacy/interactable-model-context.js +13 -14
  107. package/dist/react/interactables-legacy/interactable-model-context.js.map +1 -1
  108. package/dist/react/interactables-legacy/scopes.d.ts +42 -46
  109. package/dist/react/interactables-legacy/scopes.d.ts.map +1 -1
  110. package/dist/react/interactables-legacy/useAssistantInteractable.d.ts +8 -11
  111. package/dist/react/interactables-legacy/useAssistantInteractable.d.ts.map +1 -1
  112. package/dist/react/interactables-legacy/useInteractableState.d.ts +7 -9
  113. package/dist/react/interactables-legacy/useInteractableState.d.ts.map +1 -1
  114. package/dist/react/interactables-shared/useInteractablePersistenceQueue.d.ts +23 -14
  115. package/dist/react/interactables-shared/useInteractablePersistenceQueue.d.ts.map +1 -1
  116. package/dist/react/interactables-shared/useInteractablePersistenceQueue.js +54 -25
  117. package/dist/react/interactables-shared/useInteractablePersistenceQueue.js.map +1 -1
  118. package/dist/react/model-context/define-mcp-toolkit.d.ts +15 -18
  119. package/dist/react/model-context/define-mcp-toolkit.d.ts.map +1 -1
  120. package/dist/react/model-context/define-toolkit.d.ts +13 -6
  121. package/dist/react/model-context/define-toolkit.d.ts.map +1 -1
  122. package/dist/react/model-context/external-tool.d.ts +1 -4
  123. package/dist/react/model-context/external-tool.d.ts.map +1 -1
  124. package/dist/react/model-context/human-tool.d.ts +3 -6
  125. package/dist/react/model-context/human-tool.d.ts.map +1 -1
  126. package/dist/react/model-context/interactableTool.d.ts +26 -29
  127. package/dist/react/model-context/interactableTool.d.ts.map +1 -1
  128. package/dist/react/model-context/makeAssistantDataUI.d.ts +6 -9
  129. package/dist/react/model-context/makeAssistantDataUI.d.ts.map +1 -1
  130. package/dist/react/model-context/makeAssistantTool.d.ts +6 -9
  131. package/dist/react/model-context/makeAssistantTool.d.ts.map +1 -1
  132. package/dist/react/model-context/makeAssistantToolUI.d.ts +6 -9
  133. package/dist/react/model-context/makeAssistantToolUI.d.ts.map +1 -1
  134. package/dist/react/model-context/provider-tool.d.ts +5 -7
  135. package/dist/react/model-context/provider-tool.d.ts.map +1 -1
  136. package/dist/react/model-context/stub-tool.d.ts +1 -4
  137. package/dist/react/model-context/stub-tool.d.ts.map +1 -1
  138. package/dist/react/model-context/toolbox.d.ts +44 -32
  139. package/dist/react/model-context/toolbox.d.ts.map +1 -1
  140. package/dist/react/model-context/useAssistantContext.d.ts +3 -6
  141. package/dist/react/model-context/useAssistantContext.d.ts.map +1 -1
  142. package/dist/react/model-context/useAssistantDataUI.d.ts +7 -10
  143. package/dist/react/model-context/useAssistantDataUI.d.ts.map +1 -1
  144. package/dist/react/model-context/useAssistantInstructions.d.ts +3 -6
  145. package/dist/react/model-context/useAssistantInstructions.d.ts.map +1 -1
  146. package/dist/react/model-context/useAssistantTool.d.ts +9 -13
  147. package/dist/react/model-context/useAssistantTool.d.ts.map +1 -1
  148. package/dist/react/model-context/useAssistantToolUI.d.ts +13 -16
  149. package/dist/react/model-context/useAssistantToolUI.d.ts.map +1 -1
  150. package/dist/react/model-context/useAuiToolOverrides.d.ts +3 -5
  151. package/dist/react/model-context/useAuiToolOverrides.d.ts.map +1 -1
  152. package/dist/react/model-context/useInlineRender.d.ts +3 -6
  153. package/dist/react/model-context/useInlineRender.d.ts.map +1 -1
  154. package/dist/react/model-context/useInteractable.d.ts +40 -40
  155. package/dist/react/model-context/useInteractable.d.ts.map +1 -1
  156. package/dist/react/model-context/useInteractableState.d.ts +10 -9
  157. package/dist/react/model-context/useInteractableState.d.ts.map +1 -1
  158. package/dist/react/model-context/useInteractableVersions.d.ts +4 -7
  159. package/dist/react/model-context/useInteractableVersions.d.ts.map +1 -1
  160. package/dist/react/model-context/useToolArgsStatus.d.ts +7 -9
  161. package/dist/react/model-context/useToolArgsStatus.d.ts.map +1 -1
  162. package/dist/react/primitive-hooks/useActionBarCopy.d.ts +7 -10
  163. package/dist/react/primitive-hooks/useActionBarCopy.d.ts.map +1 -1
  164. package/dist/react/primitive-hooks/useActionBarEdit.d.ts +3 -6
  165. package/dist/react/primitive-hooks/useActionBarEdit.d.ts.map +1 -1
  166. package/dist/react/primitive-hooks/useActionBarFeedback.d.ts +6 -9
  167. package/dist/react/primitive-hooks/useActionBarFeedback.d.ts.map +1 -1
  168. package/dist/react/primitive-hooks/useActionBarReload.d.ts +3 -6
  169. package/dist/react/primitive-hooks/useActionBarReload.d.ts.map +1 -1
  170. package/dist/react/primitive-hooks/useActionBarSpeak.d.ts +3 -6
  171. package/dist/react/primitive-hooks/useActionBarSpeak.d.ts.map +1 -1
  172. package/dist/react/primitive-hooks/useActionBarStopSpeaking.d.ts +3 -6
  173. package/dist/react/primitive-hooks/useActionBarStopSpeaking.d.ts.map +1 -1
  174. package/dist/react/primitive-hooks/useBranchPickerNext.d.ts +3 -6
  175. package/dist/react/primitive-hooks/useBranchPickerNext.d.ts.map +1 -1
  176. package/dist/react/primitive-hooks/useBranchPickerPrevious.d.ts +3 -6
  177. package/dist/react/primitive-hooks/useBranchPickerPrevious.d.ts.map +1 -1
  178. package/dist/react/primitive-hooks/useComposerAddAttachment.d.ts +4 -7
  179. package/dist/react/primitive-hooks/useComposerAddAttachment.d.ts.map +1 -1
  180. package/dist/react/primitive-hooks/useComposerCancel.d.ts +3 -6
  181. package/dist/react/primitive-hooks/useComposerCancel.d.ts.map +1 -1
  182. package/dist/react/primitive-hooks/useComposerDictate.d.ts +3 -6
  183. package/dist/react/primitive-hooks/useComposerDictate.d.ts.map +1 -1
  184. package/dist/react/primitive-hooks/useComposerSend.d.ts +4 -7
  185. package/dist/react/primitive-hooks/useComposerSend.d.ts.map +1 -1
  186. package/dist/react/primitive-hooks/useEditComposerCancel.d.ts +2 -5
  187. package/dist/react/primitive-hooks/useEditComposerCancel.d.ts.map +1 -1
  188. package/dist/react/primitive-hooks/useEditComposerSend.d.ts +3 -6
  189. package/dist/react/primitive-hooks/useEditComposerSend.d.ts.map +1 -1
  190. package/dist/react/primitive-hooks/useMessageBranching.d.ts +5 -8
  191. package/dist/react/primitive-hooks/useMessageBranching.d.ts.map +1 -1
  192. package/dist/react/primitive-hooks/useMessageError.d.ts +1 -4
  193. package/dist/react/primitive-hooks/useMessageError.d.ts.map +1 -1
  194. package/dist/react/primitive-hooks/useMessageReload.d.ts +3 -6
  195. package/dist/react/primitive-hooks/useMessageReload.d.ts.map +1 -1
  196. package/dist/react/primitive-hooks/useSuggestionTrigger.d.ts +7 -10
  197. package/dist/react/primitive-hooks/useSuggestionTrigger.d.ts.map +1 -1
  198. package/dist/react/primitive-hooks/useSuggestionTrigger.js +4 -4
  199. package/dist/react/primitive-hooks/useSuggestionTrigger.js.map +1 -1
  200. package/dist/react/primitive-hooks/useThreadIsEmpty.d.ts +1 -4
  201. package/dist/react/primitive-hooks/useThreadIsEmpty.d.ts.map +1 -1
  202. package/dist/react/primitive-hooks/useThreadIsRunning.d.ts +1 -4
  203. package/dist/react/primitive-hooks/useThreadIsRunning.d.ts.map +1 -1
  204. package/dist/react/primitive-hooks/useThreadListItemArchive.d.ts +2 -5
  205. package/dist/react/primitive-hooks/useThreadListItemArchive.d.ts.map +1 -1
  206. package/dist/react/primitive-hooks/useThreadListItemDelete.d.ts +2 -5
  207. package/dist/react/primitive-hooks/useThreadListItemDelete.d.ts.map +1 -1
  208. package/dist/react/primitive-hooks/useThreadListItemTrigger.d.ts +2 -5
  209. package/dist/react/primitive-hooks/useThreadListItemTrigger.d.ts.map +1 -1
  210. package/dist/react/primitive-hooks/useThreadListItemUnarchive.d.ts +2 -5
  211. package/dist/react/primitive-hooks/useThreadListItemUnarchive.d.ts.map +1 -1
  212. package/dist/react/primitive-hooks/useThreadListLoadMore.d.ts +3 -6
  213. package/dist/react/primitive-hooks/useThreadListLoadMore.d.ts.map +1 -1
  214. package/dist/react/primitive-hooks/useThreadListNew.d.ts +2 -5
  215. package/dist/react/primitive-hooks/useThreadListNew.d.ts.map +1 -1
  216. package/dist/react/primitive-hooks/useThreadMessageIds.d.ts +1 -4
  217. package/dist/react/primitive-hooks/useThreadMessageIds.d.ts.map +1 -1
  218. package/dist/react/primitive-hooks/useThreadMessages.d.ts +2 -5
  219. package/dist/react/primitive-hooks/useThreadMessages.d.ts.map +1 -1
  220. package/dist/react/primitive-hooks/useVoice.d.ts +8 -11
  221. package/dist/react/primitive-hooks/useVoice.d.ts.map +1 -1
  222. package/dist/react/primitives/chainOfThought/ChainOfThoughtParts.d.ts +27 -29
  223. package/dist/react/primitives/chainOfThought/ChainOfThoughtParts.d.ts.map +1 -1
  224. package/dist/react/primitives/composer/ComposerAttachments.d.ts +26 -28
  225. package/dist/react/primitives/composer/ComposerAttachments.d.ts.map +1 -1
  226. package/dist/react/primitives/composer/ComposerIf.d.ts +13 -13
  227. package/dist/react/primitives/composer/ComposerIf.d.ts.map +1 -1
  228. package/dist/react/primitives/composer/ComposerQueue.d.ts +13 -17
  229. package/dist/react/primitives/composer/ComposerQueue.d.ts.map +1 -1
  230. package/dist/react/primitives/generativeUI/GenerativeUI.d.ts +30 -33
  231. package/dist/react/primitives/generativeUI/GenerativeUI.d.ts.map +1 -1
  232. package/dist/react/primitives/generativeUI/GenerativeUI.js +42 -33
  233. package/dist/react/primitives/generativeUI/GenerativeUI.js.map +1 -1
  234. package/dist/react/primitives/message/MessageAttachments.d.ts +30 -28
  235. package/dist/react/primitives/message/MessageAttachments.d.ts.map +1 -1
  236. package/dist/react/primitives/message/MessageAttachments.js +14 -15
  237. package/dist/react/primitives/message/MessageAttachments.js.map +1 -1
  238. package/dist/react/primitives/message/MessageGroupedParts.d.ts +122 -120
  239. package/dist/react/primitives/message/MessageGroupedParts.d.ts.map +1 -1
  240. package/dist/react/primitives/message/MessageGroupedParts.js +3 -3
  241. package/dist/react/primitives/message/MessageGroupedParts.js.map +1 -1
  242. package/dist/react/primitives/message/MessageParts.d.ts +208 -194
  243. package/dist/react/primitives/message/MessageParts.d.ts.map +1 -1
  244. package/dist/react/primitives/message/MessageParts.js +124 -82
  245. package/dist/react/primitives/message/MessageParts.js.map +1 -1
  246. package/dist/react/primitives/message/MessageQuote.d.ts +8 -11
  247. package/dist/react/primitives/message/MessageQuote.d.ts.map +1 -1
  248. package/dist/react/primitives/messagePart/MessagePartInProgress.d.ts +4 -7
  249. package/dist/react/primitives/messagePart/MessagePartInProgress.d.ts.map +1 -1
  250. package/dist/react/primitives/part/PartMessages.d.ts +16 -19
  251. package/dist/react/primitives/part/PartMessages.d.ts.map +1 -1
  252. package/dist/react/primitives/thread/ThreadMessages.d.ts +61 -64
  253. package/dist/react/primitives/thread/ThreadMessages.d.ts.map +1 -1
  254. package/dist/react/primitives/thread/ThreadSuggestions.d.ts +25 -27
  255. package/dist/react/primitives/thread/ThreadSuggestions.d.ts.map +1 -1
  256. package/dist/react/primitives/thread/ThreadSuggestions.js +24 -5
  257. package/dist/react/primitives/thread/ThreadSuggestions.js.map +1 -1
  258. package/dist/react/primitives/threadList/ThreadListItems.d.ts +26 -28
  259. package/dist/react/primitives/threadList/ThreadListItems.d.ts.map +1 -1
  260. package/dist/react/primitives/threadListItem/ThreadListItemTitle.d.ts +6 -9
  261. package/dist/react/primitives/threadListItem/ThreadListItemTitle.d.ts.map +1 -1
  262. package/dist/react/providers/AttachmentByIndexProvider.d.ts +5 -8
  263. package/dist/react/providers/AttachmentByIndexProvider.d.ts.map +1 -1
  264. package/dist/react/providers/ChainOfThoughtByIndicesProvider.d.ts +4 -7
  265. package/dist/react/providers/ChainOfThoughtByIndicesProvider.d.ts.map +1 -1
  266. package/dist/react/providers/ChainOfThoughtPartByIndexProvider.d.ts +3 -6
  267. package/dist/react/providers/ChainOfThoughtPartByIndexProvider.d.ts.map +1 -1
  268. package/dist/react/providers/MessageByIdProvider.d.ts +3 -6
  269. package/dist/react/providers/MessageByIdProvider.d.ts.map +1 -1
  270. package/dist/react/providers/MessageByIndexProvider.d.ts +3 -6
  271. package/dist/react/providers/MessageByIndexProvider.d.ts.map +1 -1
  272. package/dist/react/providers/PartByIndexProvider.d.ts +3 -6
  273. package/dist/react/providers/PartByIndexProvider.d.ts.map +1 -1
  274. package/dist/react/providers/QueueItemByIndexProvider.d.ts +4 -7
  275. package/dist/react/providers/QueueItemByIndexProvider.d.ts.map +1 -1
  276. package/dist/react/providers/ReadonlyThreadProvider.d.ts +7 -10
  277. package/dist/react/providers/ReadonlyThreadProvider.d.ts.map +1 -1
  278. package/dist/react/providers/ReadonlyThreadProvider.js.map +1 -1
  279. package/dist/react/providers/SuggestionByIndexProvider.d.ts +4 -7
  280. package/dist/react/providers/SuggestionByIndexProvider.d.ts.map +1 -1
  281. package/dist/react/providers/TextMessagePartProvider.d.ts +4 -7
  282. package/dist/react/providers/TextMessagePartProvider.d.ts.map +1 -1
  283. package/dist/react/providers/TextMessagePartProvider.js +5 -1
  284. package/dist/react/providers/TextMessagePartProvider.js.map +1 -1
  285. package/dist/react/providers/ThreadListItemByIndexProvider.d.ts +4 -7
  286. package/dist/react/providers/ThreadListItemByIndexProvider.d.ts.map +1 -1
  287. package/dist/react/providers/ThreadListItemRuntimeProvider.d.ts +4 -8
  288. package/dist/react/providers/ThreadListItemRuntimeProvider.d.ts.map +1 -1
  289. package/dist/react/runtimes/RemoteThreadListHookInstanceManager.d.ts +210 -219
  290. package/dist/react/runtimes/RemoteThreadListHookInstanceManager.d.ts.map +1 -1
  291. package/dist/react/runtimes/RemoteThreadListHookInstanceManager.js +70 -46
  292. package/dist/react/runtimes/RemoteThreadListHookInstanceManager.js.map +1 -1
  293. package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.d.ts +186 -198
  294. package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.d.ts.map +1 -1
  295. package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.js +13 -4
  296. package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.js.map +1 -1
  297. package/dist/react/runtimes/RemoteThreadResource.d.ts +17 -23
  298. package/dist/react/runtimes/RemoteThreadResource.d.ts.map +1 -1
  299. package/dist/react/runtimes/RemoteThreadResource.js +3 -1
  300. package/dist/react/runtimes/RemoteThreadResource.js.map +1 -1
  301. package/dist/react/runtimes/RuntimeAdapterProvider.d.ts +10 -11
  302. package/dist/react/runtimes/RuntimeAdapterProvider.d.ts.map +1 -1
  303. package/dist/react/runtimes/assistant-transport/commandQueue.d.ts +11 -14
  304. package/dist/react/runtimes/assistant-transport/commandQueue.d.ts.map +1 -1
  305. package/dist/react/runtimes/assistant-transport/replayBoundaryStream.d.ts +6 -8
  306. package/dist/react/runtimes/assistant-transport/replayBoundaryStream.d.ts.map +1 -1
  307. package/dist/react/runtimes/assistant-transport/replayBoundaryStream.js +9 -2
  308. package/dist/react/runtimes/assistant-transport/replayBoundaryStream.js.map +1 -1
  309. package/dist/react/runtimes/assistant-transport/runManager.d.ts +9 -12
  310. package/dist/react/runtimes/assistant-transport/runManager.d.ts.map +1 -1
  311. package/dist/react/runtimes/assistant-transport/runManager.js +4 -1
  312. package/dist/react/runtimes/assistant-transport/runManager.js.map +1 -1
  313. package/dist/react/runtimes/assistant-transport/types.d.ts +123 -118
  314. package/dist/react/runtimes/assistant-transport/types.d.ts.map +1 -1
  315. package/dist/react/runtimes/assistant-transport/useAssistantTransportRuntime.d.ts +7 -10
  316. package/dist/react/runtimes/assistant-transport/useAssistantTransportRuntime.d.ts.map +1 -1
  317. package/dist/react/runtimes/assistant-transport/useAssistantTransportRuntime.js +17 -6
  318. package/dist/react/runtimes/assistant-transport/useAssistantTransportRuntime.js.map +1 -1
  319. package/dist/react/runtimes/assistant-transport/useConvertedState.d.ts +3 -6
  320. package/dist/react/runtimes/assistant-transport/useConvertedState.d.ts.map +1 -1
  321. package/dist/react/runtimes/assistant-transport/useLatestRef.d.ts +2 -5
  322. package/dist/react/runtimes/assistant-transport/useLatestRef.d.ts.map +1 -1
  323. package/dist/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.d.ts +7 -10
  324. package/dist/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.d.ts.map +1 -1
  325. package/dist/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.js +426 -216
  326. package/dist/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.js.map +1 -1
  327. package/dist/react/runtimes/cloud/CloudFileAttachmentAdapter.d.ts +15 -18
  328. package/dist/react/runtimes/cloud/CloudFileAttachmentAdapter.d.ts.map +1 -1
  329. package/dist/react/runtimes/cloud/CloudFileAttachmentAdapter.js +8 -4
  330. package/dist/react/runtimes/cloud/CloudFileAttachmentAdapter.js.map +1 -1
  331. package/dist/react/runtimes/cloud/auiV0.d.ts +146 -125
  332. package/dist/react/runtimes/cloud/auiV0.d.ts.map +1 -1
  333. package/dist/react/runtimes/cloud/auiV0.js +120 -8
  334. package/dist/react/runtimes/cloud/auiV0.js.map +1 -1
  335. package/dist/react/runtimes/cloud/createCloudThreadListAdapter.d.ts +13 -15
  336. package/dist/react/runtimes/cloud/createCloudThreadListAdapter.d.ts.map +1 -1
  337. package/dist/react/runtimes/cloud/createCloudThreadListAdapterCreateFallback.d.ts +5 -7
  338. package/dist/react/runtimes/cloud/createCloudThreadListAdapterCreateFallback.d.ts.map +1 -1
  339. package/dist/react/runtimes/cloud/sdkIdentity.d.ts +2 -5
  340. package/dist/react/runtimes/cloud/sdkIdentity.d.ts.map +1 -1
  341. package/dist/react/runtimes/cloud/sdkIdentity.js +1 -1
  342. package/dist/react/runtimes/cloud/useCloudThreadListAdapter.d.ts +3 -6
  343. package/dist/react/runtimes/cloud/useCloudThreadListAdapter.d.ts.map +1 -1
  344. package/dist/react/runtimes/cloud/useCloudThreadListRuntime.d.ts +9 -11
  345. package/dist/react/runtimes/cloud/useCloudThreadListRuntime.d.ts.map +1 -1
  346. package/dist/react/runtimes/createMessageConverter.d.ts +15 -19
  347. package/dist/react/runtimes/createMessageConverter.d.ts.map +1 -1
  348. package/dist/react/runtimes/createMessageConverter.js.map +1 -1
  349. package/dist/react/runtimes/createRuntimeExtras.d.ts +14 -17
  350. package/dist/react/runtimes/createRuntimeExtras.d.ts.map +1 -1
  351. package/dist/react/runtimes/external-message-converter.d.ts +17 -21
  352. package/dist/react/runtimes/external-message-converter.d.ts.map +1 -1
  353. package/dist/react/runtimes/external-store-history-copy.d.ts +25 -0
  354. package/dist/react/runtimes/external-store-history-copy.d.ts.map +1 -0
  355. package/dist/react/runtimes/external-store-history-copy.js +148 -0
  356. package/dist/react/runtimes/external-store-history-copy.js.map +1 -0
  357. package/dist/react/runtimes/useExternalStoreRuntime.d.ts +3 -6
  358. package/dist/react/runtimes/useExternalStoreRuntime.d.ts.map +1 -1
  359. package/dist/react/runtimes/useExternalStoreRuntime.js +72 -35
  360. package/dist/react/runtimes/useExternalStoreRuntime.js.map +1 -1
  361. package/dist/react/runtimes/useExternalStoreSharedOptions.d.ts +2 -5
  362. package/dist/react/runtimes/useExternalStoreSharedOptions.d.ts.map +1 -1
  363. package/dist/react/runtimes/useLocalRuntime.d.ts +29 -41
  364. package/dist/react/runtimes/useLocalRuntime.d.ts.map +1 -1
  365. package/dist/react/runtimes/useLocalRuntime.js +142 -34
  366. package/dist/react/runtimes/useLocalRuntime.js.map +1 -1
  367. package/dist/react/runtimes/useRemoteThreadListRuntime.d.ts +3 -6
  368. package/dist/react/runtimes/useRemoteThreadListRuntime.d.ts.map +1 -1
  369. package/dist/react/runtimes/useRemoteThreadListRuntime.js +2 -2
  370. package/dist/react/runtimes/useRemoteThreadListRuntime.js.map +1 -1
  371. package/dist/react/runtimes/useRuntimeAdapters.d.ts +5 -7
  372. package/dist/react/runtimes/useRuntimeAdapters.d.ts.map +1 -1
  373. package/dist/react/runtimes/useStreamingTiming.d.ts +4 -6
  374. package/dist/react/runtimes/useStreamingTiming.d.ts.map +1 -1
  375. package/dist/react/types/MessagePartComponentTypes.d.ts +72 -70
  376. package/dist/react/types/MessagePartComponentTypes.d.ts.map +1 -1
  377. package/dist/react/types/scopes/dataRenderers.d.ts +11 -15
  378. package/dist/react/types/scopes/dataRenderers.d.ts.map +1 -1
  379. package/dist/react/types/scopes/interactables.d.ts +60 -60
  380. package/dist/react/types/scopes/interactables.d.ts.map +1 -1
  381. package/dist/react/types/scopes/tools.d.ts +21 -24
  382. package/dist/react/types/scopes/tools.d.ts.map +1 -1
  383. package/dist/react/types/store-augmentation.d.ts +10 -11
  384. package/dist/react/types/store-augmentation.d.ts.map +1 -1
  385. package/dist/react/utils/getMessageQuote.d.ts +6 -8
  386. package/dist/react/utils/getMessageQuote.d.ts.map +1 -1
  387. package/dist/react/utils/groupParts.d.ts +35 -37
  388. package/dist/react/utils/groupParts.d.ts.map +1 -1
  389. package/dist/react/utils/useJSONEqual.d.ts +3 -6
  390. package/dist/react/utils/useJSONEqual.d.ts.map +1 -1
  391. package/dist/react/utils/useJSONSchemaDependency.d.ts +3 -6
  392. package/dist/react/utils/useJSONSchemaDependency.d.ts.map +1 -1
  393. package/dist/runtime/api/assistant-runtime.d.ts +28 -31
  394. package/dist/runtime/api/assistant-runtime.d.ts.map +1 -1
  395. package/dist/runtime/api/attachment-runtime.d.ts +51 -49
  396. package/dist/runtime/api/attachment-runtime.d.ts.map +1 -1
  397. package/dist/runtime/api/attachment-runtime.js.map +1 -1
  398. package/dist/runtime/api/bindings.d.ts +35 -35
  399. package/dist/runtime/api/bindings.d.ts.map +1 -1
  400. package/dist/runtime/api/composer-runtime.d.ts +215 -201
  401. package/dist/runtime/api/composer-runtime.d.ts.map +1 -1
  402. package/dist/runtime/api/composer-runtime.js +4 -0
  403. package/dist/runtime/api/composer-runtime.js.map +1 -1
  404. package/dist/runtime/api/message-part-runtime.d.ts +31 -30
  405. package/dist/runtime/api/message-part-runtime.d.ts.map +1 -1
  406. package/dist/runtime/api/message-part-runtime.js +25 -2
  407. package/dist/runtime/api/message-part-runtime.js.map +1 -1
  408. package/dist/runtime/api/message-runtime.d.ts +87 -82
  409. package/dist/runtime/api/message-runtime.d.ts.map +1 -1
  410. package/dist/runtime/api/message-runtime.js +4 -3
  411. package/dist/runtime/api/message-runtime.js.map +1 -1
  412. package/dist/runtime/api/paths.d.ts +54 -57
  413. package/dist/runtime/api/paths.d.ts.map +1 -1
  414. package/dist/runtime/api/thread-list-item-runtime.d.ts +70 -72
  415. package/dist/runtime/api/thread-list-item-runtime.d.ts.map +1 -1
  416. package/dist/runtime/api/thread-list-item-runtime.js.map +1 -1
  417. package/dist/runtime/api/thread-list-runtime.d.ts +77 -81
  418. package/dist/runtime/api/thread-list-runtime.d.ts.map +1 -1
  419. package/dist/runtime/api/thread-list-runtime.js.map +1 -1
  420. package/dist/runtime/api/thread-runtime.d.ts +306 -308
  421. package/dist/runtime/api/thread-runtime.d.ts.map +1 -1
  422. package/dist/runtime/api/thread-runtime.js +2 -1
  423. package/dist/runtime/api/thread-runtime.js.map +1 -1
  424. package/dist/runtime/base/base-assistant-runtime-core.d.ts +9 -12
  425. package/dist/runtime/base/base-assistant-runtime-core.d.ts.map +1 -1
  426. package/dist/runtime/base/base-composer-runtime-core.d.ts +150 -101
  427. package/dist/runtime/base/base-composer-runtime-core.d.ts.map +1 -1
  428. package/dist/runtime/base/base-composer-runtime-core.js +400 -122
  429. package/dist/runtime/base/base-composer-runtime-core.js.map +1 -1
  430. package/dist/runtime/base/base-thread-runtime-core.d.ts +121 -104
  431. package/dist/runtime/base/base-thread-runtime-core.d.ts.map +1 -1
  432. package/dist/runtime/base/base-thread-runtime-core.js +174 -62
  433. package/dist/runtime/base/base-thread-runtime-core.js.map +1 -1
  434. package/dist/runtime/base/default-edit-composer-runtime-core.d.ts +30 -31
  435. package/dist/runtime/base/default-edit-composer-runtime-core.d.ts.map +1 -1
  436. package/dist/runtime/base/default-edit-composer-runtime-core.js +21 -2
  437. package/dist/runtime/base/default-edit-composer-runtime-core.js.map +1 -1
  438. package/dist/runtime/base/default-thread-composer-runtime-core.d.ts +28 -31
  439. package/dist/runtime/base/default-thread-composer-runtime-core.d.ts.map +1 -1
  440. package/dist/runtime/base/default-thread-composer-runtime-core.js +23 -2
  441. package/dist/runtime/base/default-thread-composer-runtime-core.js.map +1 -1
  442. package/dist/runtime/branch/external-thread-branch-adapter.d.ts +15 -18
  443. package/dist/runtime/branch/external-thread-branch-adapter.d.ts.map +1 -1
  444. package/dist/runtime/interfaces/assistant-runtime-core.d.ts +8 -11
  445. package/dist/runtime/interfaces/assistant-runtime-core.d.ts.map +1 -1
  446. package/dist/runtime/interfaces/composer-runtime-core.d.ts +98 -83
  447. package/dist/runtime/interfaces/composer-runtime-core.d.ts.map +1 -1
  448. package/dist/runtime/interfaces/thread-list-runtime-core.d.ts +67 -70
  449. package/dist/runtime/interfaces/thread-list-runtime-core.d.ts.map +1 -1
  450. package/dist/runtime/interfaces/thread-runtime-core.d.ts +225 -211
  451. package/dist/runtime/interfaces/thread-runtime-core.d.ts.map +1 -1
  452. package/dist/runtime/internal.d.ts +25 -20
  453. package/dist/runtime/internal.d.ts.map +1 -0
  454. package/dist/runtime/queue/external-thread-queue-adapter.d.ts +37 -40
  455. package/dist/runtime/queue/external-thread-queue-adapter.d.ts.map +1 -1
  456. package/dist/runtime/queue/message-queue.d.ts +32 -33
  457. package/dist/runtime/queue/message-queue.d.ts.map +1 -1
  458. package/dist/runtime/queue/message-queue.js +10 -2
  459. package/dist/runtime/queue/message-queue.js.map +1 -1
  460. package/dist/runtime/queue/queue-item.d.ts +7 -10
  461. package/dist/runtime/queue/queue-item.d.ts.map +1 -1
  462. package/dist/runtime/utils/abortable-thread-load.d.ts +9 -11
  463. package/dist/runtime/utils/abortable-thread-load.d.ts.map +1 -1
  464. package/dist/runtime/utils/attachment-add-operations.d.ts +16 -15
  465. package/dist/runtime/utils/attachment-add-operations.d.ts.map +1 -1
  466. package/dist/runtime/utils/attachment-add-operations.js +24 -2
  467. package/dist/runtime/utils/attachment-add-operations.js.map +1 -1
  468. package/dist/runtime/utils/attachment-send-operations.d.ts +12 -0
  469. package/dist/runtime/utils/attachment-send-operations.d.ts.map +1 -0
  470. package/dist/runtime/utils/attachment-send-operations.js +34 -0
  471. package/dist/runtime/utils/attachment-send-operations.js.map +1 -0
  472. package/dist/runtime/utils/auto-status.d.ts +11 -13
  473. package/dist/runtime/utils/auto-status.d.ts.map +1 -1
  474. package/dist/runtime/utils/auto-status.js +3 -5
  475. package/dist/runtime/utils/auto-status.js.map +1 -1
  476. package/dist/runtime/utils/chat-model-adapter.d.ts +31 -33
  477. package/dist/runtime/utils/chat-model-adapter.d.ts.map +1 -1
  478. package/dist/runtime/utils/external-message-conversion.d.ts +47 -48
  479. package/dist/runtime/utils/external-message-conversion.d.ts.map +1 -1
  480. package/dist/runtime/utils/external-message-conversion.js +6 -5
  481. package/dist/runtime/utils/external-message-conversion.js.map +1 -1
  482. package/dist/runtime/utils/external-store-message.d.ts +6 -9
  483. package/dist/runtime/utils/external-store-message.d.ts.map +1 -1
  484. package/dist/runtime/utils/message-repository-session.d.ts +24 -27
  485. package/dist/runtime/utils/message-repository-session.d.ts.map +1 -1
  486. package/dist/runtime/utils/message-repository.d.ts +52 -54
  487. package/dist/runtime/utils/message-repository.d.ts.map +1 -1
  488. package/dist/runtime/utils/message-repository.js +8 -7
  489. package/dist/runtime/utils/message-repository.js.map +1 -1
  490. package/dist/runtime/utils/pending-tool-calls.d.ts +12 -14
  491. package/dist/runtime/utils/pending-tool-calls.d.ts.map +1 -1
  492. package/dist/runtime/utils/resolveToolApprovalResponse.d.ts +7 -10
  493. package/dist/runtime/utils/resolveToolApprovalResponse.d.ts.map +1 -1
  494. package/dist/runtime/utils/runtime-extras-brand.d.ts +6 -9
  495. package/dist/runtime/utils/runtime-extras-brand.d.ts.map +1 -1
  496. package/dist/runtime/utils/stored-message-parts.d.ts +21 -0
  497. package/dist/runtime/utils/stored-message-parts.d.ts.map +1 -0
  498. package/dist/runtime/utils/stored-message-parts.js +103 -0
  499. package/dist/runtime/utils/stored-message-parts.js.map +1 -0
  500. package/dist/runtime/utils/streaming-timing.d.ts +23 -26
  501. package/dist/runtime/utils/streaming-timing.d.ts.map +1 -1
  502. package/dist/runtime/utils/thread-message-like.d.ts +38 -34
  503. package/dist/runtime/utils/thread-message-like.d.ts.map +1 -1
  504. package/dist/runtime/utils/thread-message-like.js +16 -6
  505. package/dist/runtime/utils/thread-message-like.js.map +1 -1
  506. package/dist/runtime/utils/thread-runtime-lifecycle.d.ts +5 -7
  507. package/dist/runtime/utils/thread-runtime-lifecycle.d.ts.map +1 -1
  508. package/dist/runtime/utils/thread-runtime-lifecycle.js +31 -4
  509. package/dist/runtime/utils/thread-runtime-lifecycle.js.map +1 -1
  510. package/dist/runtime/utils/tool-call-tree.d.ts +10 -13
  511. package/dist/runtime/utils/tool-call-tree.d.ts.map +1 -1
  512. package/dist/runtime/utils/tool-interactions.d.ts +10 -0
  513. package/dist/runtime/utils/tool-interactions.d.ts.map +1 -0
  514. package/dist/runtime/utils/tool-interactions.js +92 -0
  515. package/dist/runtime/utils/tool-interactions.js.map +1 -0
  516. package/dist/runtimes/assistant-transport/utils.d.ts +1 -4
  517. package/dist/runtimes/assistant-transport/utils.d.ts.map +1 -1
  518. package/dist/runtimes/external-store/external-store-adapter.d.ts +220 -200
  519. package/dist/runtimes/external-store/external-store-adapter.d.ts.map +1 -1
  520. package/dist/runtimes/external-store/external-store-runtime-core.d.ts +6 -8
  521. package/dist/runtimes/external-store/external-store-runtime-core.d.ts.map +1 -1
  522. package/dist/runtimes/external-store/external-store-runtime-core.js +4 -1
  523. package/dist/runtimes/external-store/external-store-runtime-core.js.map +1 -1
  524. package/dist/runtimes/external-store/external-store-shared-options.d.ts +3 -6
  525. package/dist/runtimes/external-store/external-store-shared-options.d.ts.map +1 -1
  526. package/dist/runtimes/external-store/external-store-thread-list-runtime-core.d.ts +40 -43
  527. package/dist/runtimes/external-store/external-store-thread-list-runtime-core.d.ts.map +1 -1
  528. package/dist/runtimes/external-store/external-store-thread-list-runtime-core.js +2 -2
  529. package/dist/runtimes/external-store/external-store-thread-list-runtime-core.js.map +1 -1
  530. package/dist/runtimes/external-store/external-store-thread-runtime-core.d.ts +119 -125
  531. package/dist/runtimes/external-store/external-store-thread-runtime-core.d.ts.map +1 -1
  532. package/dist/runtimes/external-store/external-store-thread-runtime-core.js +71 -18
  533. package/dist/runtimes/external-store/external-store-thread-runtime-core.js.map +1 -1
  534. package/dist/runtimes/external-store/thread-message-converter.d.ts +5 -8
  535. package/dist/runtimes/external-store/thread-message-converter.d.ts.map +1 -1
  536. package/dist/runtimes/inert/InertThreadRuntimeCore.d.ts +96 -98
  537. package/dist/runtimes/inert/InertThreadRuntimeCore.d.ts.map +1 -1
  538. package/dist/runtimes/inert/InertThreadRuntimeCore.js +3 -0
  539. package/dist/runtimes/inert/InertThreadRuntimeCore.js.map +1 -1
  540. package/dist/runtimes/internal.d.ts +20 -16
  541. package/dist/runtimes/internal.d.ts.map +1 -0
  542. package/dist/runtimes/local/local-runtime-core.d.ts +7 -10
  543. package/dist/runtimes/local/local-runtime-core.d.ts.map +1 -1
  544. package/dist/runtimes/local/local-runtime-options.d.ts +41 -44
  545. package/dist/runtimes/local/local-runtime-options.d.ts.map +1 -1
  546. package/dist/runtimes/local/local-thread-list-runtime-core.d.ts +42 -45
  547. package/dist/runtimes/local/local-thread-list-runtime-core.d.ts.map +1 -1
  548. package/dist/runtimes/local/local-thread-runtime-core.d.ts +94 -93
  549. package/dist/runtimes/local/local-thread-runtime-core.d.ts.map +1 -1
  550. package/dist/runtimes/local/local-thread-runtime-core.js +220 -29
  551. package/dist/runtimes/local/local-thread-runtime-core.js.map +1 -1
  552. package/dist/runtimes/local/should-continue.d.ts +2 -5
  553. package/dist/runtimes/local/should-continue.d.ts.map +1 -1
  554. package/dist/runtimes/readonly/ReadonlyThreadRuntimeCore.d.ts +77 -55
  555. package/dist/runtimes/readonly/ReadonlyThreadRuntimeCore.d.ts.map +1 -1
  556. package/dist/runtimes/readonly/ReadonlyThreadRuntimeCore.js +28 -1
  557. package/dist/runtimes/readonly/ReadonlyThreadRuntimeCore.js.map +1 -1
  558. package/dist/runtimes/remote-thread-list/adapter/in-memory.d.ts +12 -15
  559. package/dist/runtimes/remote-thread-list/adapter/in-memory.d.ts.map +1 -1
  560. package/dist/runtimes/remote-thread-list/adapter-changed.d.ts +3 -6
  561. package/dist/runtimes/remote-thread-list/adapter-changed.d.ts.map +1 -1
  562. package/dist/runtimes/remote-thread-list/empty-thread-core.d.ts +2 -5
  563. package/dist/runtimes/remote-thread-list/empty-thread-core.d.ts.map +1 -1
  564. package/dist/runtimes/remote-thread-list/optimistic-state.d.ts +34 -31
  565. package/dist/runtimes/remote-thread-list/optimistic-state.d.ts.map +1 -1
  566. package/dist/runtimes/remote-thread-list/optimistic-state.js +8 -3
  567. package/dist/runtimes/remote-thread-list/optimistic-state.js.map +1 -1
  568. package/dist/runtimes/remote-thread-list/remote-thread-state.d.ts +60 -63
  569. package/dist/runtimes/remote-thread-list/remote-thread-state.d.ts.map +1 -1
  570. package/dist/runtimes/remote-thread-list/remote-thread-state.js +1 -1
  571. package/dist/runtimes/remote-thread-list/title-generation.d.ts +31 -33
  572. package/dist/runtimes/remote-thread-list/title-generation.d.ts.map +1 -1
  573. package/dist/runtimes/remote-thread-list/title.d.ts +5 -8
  574. package/dist/runtimes/remote-thread-list/title.d.ts.map +1 -1
  575. package/dist/runtimes/remote-thread-list/types.d.ts +119 -121
  576. package/dist/runtimes/remote-thread-list/types.d.ts.map +1 -1
  577. package/dist/runtimes/tool-invocations/ToolInvocationTracker.d.ts +147 -149
  578. package/dist/runtimes/tool-invocations/ToolInvocationTracker.d.ts.map +1 -1
  579. package/dist/runtimes/tool-invocations/ToolInvocationTracker.js +22 -7
  580. package/dist/runtimes/tool-invocations/ToolInvocationTracker.js.map +1 -1
  581. package/dist/store/clients/chain-of-thought-client.d.ts +8 -11
  582. package/dist/store/clients/chain-of-thought-client.d.ts.map +1 -1
  583. package/dist/store/clients/external-thread.d.ts +56 -58
  584. package/dist/store/clients/external-thread.d.ts.map +1 -1
  585. package/dist/store/clients/external-thread.js +1270 -741
  586. package/dist/store/clients/external-thread.js.map +1 -1
  587. package/dist/store/clients/model-context-client.d.ts +2 -5
  588. package/dist/store/clients/model-context-client.d.ts.map +1 -1
  589. package/dist/store/clients/no-op-composer-client.d.ts +3 -6
  590. package/dist/store/clients/no-op-composer-client.d.ts.map +1 -1
  591. package/dist/store/clients/no-op-composer-client.js +3 -1
  592. package/dist/store/clients/no-op-composer-client.js.map +1 -1
  593. package/dist/store/clients/runtime-adapter.d.ts +2 -5
  594. package/dist/store/clients/runtime-adapter.d.ts.map +1 -1
  595. package/dist/store/clients/single-thread-list.d.ts +4 -6
  596. package/dist/store/clients/single-thread-list.d.ts.map +1 -1
  597. package/dist/store/clients/submission-message.d.ts +8 -0
  598. package/dist/store/clients/submission-message.d.ts.map +1 -0
  599. package/dist/store/clients/submission-message.js +22 -0
  600. package/dist/store/clients/submission-message.js.map +1 -0
  601. package/dist/store/clients/suggestions.d.ts +8 -11
  602. package/dist/store/clients/suggestions.d.ts.map +1 -1
  603. package/dist/store/clients/thread-message-client.d.ts +12 -12
  604. package/dist/store/clients/thread-message-client.d.ts.map +1 -1
  605. package/dist/store/clients/thread-message-client.js +81 -82
  606. package/dist/store/clients/thread-message-client.js.map +1 -1
  607. package/dist/store/clients/thread-selection-events.d.ts +1 -4
  608. package/dist/store/clients/thread-selection-events.d.ts.map +1 -1
  609. package/dist/store/clients/thread-tasks.d.ts +7 -10
  610. package/dist/store/clients/thread-tasks.d.ts.map +1 -1
  611. package/dist/store/env.d.ts +1 -4
  612. package/dist/store/env.d.ts.map +1 -1
  613. package/dist/store/index.d.ts +33 -36
  614. package/dist/store/index.d.ts.map +1 -0
  615. package/dist/store/index.js +5 -5
  616. package/dist/store/internal.d.ts +12 -12
  617. package/dist/store/internal.d.ts.map +1 -0
  618. package/dist/store/internal.js +2 -2
  619. package/dist/store/primitive-predicates.d.ts +14 -16
  620. package/dist/store/primitive-predicates.d.ts.map +1 -1
  621. package/dist/store/primitive-predicates.js +10 -5
  622. package/dist/store/primitive-predicates.js.map +1 -1
  623. package/dist/store/runtime-clients/attachment-runtime-client.d.ts +4 -7
  624. package/dist/store/runtime-clients/attachment-runtime-client.d.ts.map +1 -1
  625. package/dist/store/runtime-clients/composer-runtime-client.d.ts +11 -14
  626. package/dist/store/runtime-clients/composer-runtime-client.d.ts.map +1 -1
  627. package/dist/store/runtime-clients/composer-runtime-client.js +65 -62
  628. package/dist/store/runtime-clients/composer-runtime-client.js.map +1 -1
  629. package/dist/store/runtime-clients/handle-runtime-action.d.ts +1 -4
  630. package/dist/store/runtime-clients/handle-runtime-action.d.ts.map +1 -1
  631. package/dist/store/runtime-clients/handle-thread-list-action.d.ts +1 -4
  632. package/dist/store/runtime-clients/handle-thread-list-action.d.ts.map +1 -1
  633. package/dist/store/runtime-clients/liveRef.d.ts +2 -5
  634. package/dist/store/runtime-clients/liveRef.d.ts.map +1 -1
  635. package/dist/store/runtime-clients/message-part-runtime-client.d.ts +4 -7
  636. package/dist/store/runtime-clients/message-part-runtime-client.d.ts.map +1 -1
  637. package/dist/store/runtime-clients/message-part-runtime-client.js +26 -16
  638. package/dist/store/runtime-clients/message-part-runtime-client.js.map +1 -1
  639. package/dist/store/runtime-clients/message-runtime-client.d.ts +10 -11
  640. package/dist/store/runtime-clients/message-runtime-client.d.ts.map +1 -1
  641. package/dist/store/runtime-clients/message-runtime-client.js +121 -113
  642. package/dist/store/runtime-clients/message-runtime-client.js.map +1 -1
  643. package/dist/store/runtime-clients/thread-list-item-runtime-client.d.ts +5 -8
  644. package/dist/store/runtime-clients/thread-list-item-runtime-client.d.ts.map +1 -1
  645. package/dist/store/runtime-clients/thread-list-runtime-client.d.ts +6 -9
  646. package/dist/store/runtime-clients/thread-list-runtime-client.d.ts.map +1 -1
  647. package/dist/store/runtime-clients/thread-runtime-client.d.ts +4 -7
  648. package/dist/store/runtime-clients/thread-runtime-client.d.ts.map +1 -1
  649. package/dist/store/runtime-clients/thread-runtime-client.js +221 -158
  650. package/dist/store/runtime-clients/thread-runtime-client.js.map +1 -1
  651. package/dist/store/runtime-clients/useSubscribable.d.ts +3 -6
  652. package/dist/store/runtime-clients/useSubscribable.d.ts.map +1 -1
  653. package/dist/store/scope-registration.d.ts +28 -29
  654. package/dist/store/scope-registration.d.ts.map +1 -1
  655. package/dist/store/scopes/attachment.d.ts +19 -22
  656. package/dist/store/scopes/attachment.d.ts.map +1 -1
  657. package/dist/store/scopes/chain-of-thought.d.ts +33 -35
  658. package/dist/store/scopes/chain-of-thought.d.ts.map +1 -1
  659. package/dist/store/scopes/composer.d.ts +147 -135
  660. package/dist/store/scopes/composer.d.ts.map +1 -1
  661. package/dist/store/scopes/message.d.ts +119 -112
  662. package/dist/store/scopes/message.d.ts.map +1 -1
  663. package/dist/store/scopes/model-context.d.ts +10 -13
  664. package/dist/store/scopes/model-context.d.ts.map +1 -1
  665. package/dist/store/scopes/part.d.ts +53 -50
  666. package/dist/store/scopes/part.d.ts.map +1 -1
  667. package/dist/store/scopes/queue-item.d.ts +21 -23
  668. package/dist/store/scopes/queue-item.d.ts.map +1 -1
  669. package/dist/store/scopes/suggestion.d.ts +14 -17
  670. package/dist/store/scopes/suggestion.d.ts.map +1 -1
  671. package/dist/store/scopes/suggestions.d.ts +18 -21
  672. package/dist/store/scopes/suggestions.d.ts.map +1 -1
  673. package/dist/store/scopes/task.d.ts +27 -30
  674. package/dist/store/scopes/task.d.ts.map +1 -1
  675. package/dist/store/scopes/thread-list-item.d.ts +68 -71
  676. package/dist/store/scopes/thread-list-item.d.ts.map +1 -1
  677. package/dist/store/scopes/thread.d.ts +197 -200
  678. package/dist/store/scopes/thread.d.ts.map +1 -1
  679. package/dist/store/scopes/threads.d.ts +49 -52
  680. package/dist/store/scopes/threads.d.ts.map +1 -1
  681. package/dist/subscribable/subscribable.d.ts +73 -69
  682. package/dist/subscribable/subscribable.d.ts.map +1 -1
  683. package/dist/subscribable/subscribable.js +35 -7
  684. package/dist/subscribable/subscribable.js.map +1 -1
  685. package/dist/types/attachment.d.ts +35 -37
  686. package/dist/types/attachment.d.ts.map +1 -1
  687. package/dist/types/augmentations.d.ts +7 -8
  688. package/dist/types/augmentations.d.ts.map +1 -1
  689. package/dist/types/directive.d.ts +13 -16
  690. package/dist/types/directive.d.ts.map +1 -1
  691. package/dist/types/error.d.ts +15 -17
  692. package/dist/types/error.d.ts.map +1 -1
  693. package/dist/types/index.d.ts +7 -7
  694. package/dist/types/index.d.ts.map +1 -0
  695. package/dist/types/message.d.ts +358 -318
  696. package/dist/types/message.d.ts.map +1 -1
  697. package/dist/types/message.js.map +1 -1
  698. package/dist/types/quote.d.ts +3 -6
  699. package/dist/types/quote.d.ts.map +1 -1
  700. package/dist/types/trigger.d.ts +10 -13
  701. package/dist/types/trigger.d.ts.map +1 -1
  702. package/dist/types/unsubscribe.d.ts +1 -4
  703. package/dist/types/unsubscribe.d.ts.map +1 -1
  704. package/dist/utils/abortable-iterable.d.ts +2 -5
  705. package/dist/utils/abortable-iterable.d.ts.map +1 -1
  706. package/dist/utils/composite-context-provider.d.ts +9 -13
  707. package/dist/utils/composite-context-provider.d.ts.map +1 -1
  708. package/dist/utils/data-url.d.ts +16 -19
  709. package/dist/utils/data-url.d.ts.map +1 -1
  710. package/dist/utils/getGroupStatus.d.ts +19 -21
  711. package/dist/utils/getGroupStatus.d.ts.map +1 -1
  712. package/dist/utils/id.d.ts +3 -6
  713. package/dist/utils/id.d.ts.map +1 -1
  714. package/dist/utils/image-media-type.d.ts +1 -4
  715. package/dist/utils/image-media-type.d.ts.map +1 -1
  716. package/dist/utils/invoke-user-callback.d.ts +1 -4
  717. package/dist/utils/invoke-user-callback.d.ts.map +1 -1
  718. package/dist/utils/json/is-json-equal.d.ts +1 -4
  719. package/dist/utils/json/is-json-equal.d.ts.map +1 -1
  720. package/dist/utils/json/is-json.d.ts +5 -8
  721. package/dist/utils/json/is-json.d.ts.map +1 -1
  722. package/dist/utils/json/stable-stringify-tool-args.d.ts +3 -6
  723. package/dist/utils/json/stable-stringify-tool-args.d.ts.map +1 -1
  724. package/dist/utils/normalizePartStatus.d.ts +6 -8
  725. package/dist/utils/normalizePartStatus.d.ts.map +1 -1
  726. package/dist/utils/normalizePartStatus.js +3 -2
  727. package/dist/utils/normalizePartStatus.js.map +1 -1
  728. package/dist/utils/notify-event-listeners.d.ts +2 -4
  729. package/dist/utils/notify-event-listeners.d.ts.map +1 -1
  730. package/dist/utils/record.d.ts +1 -4
  731. package/dist/utils/record.d.ts.map +1 -1
  732. package/dist/utils/silent-runtime-action.d.ts +2 -5
  733. package/dist/utils/silent-runtime-action.d.ts.map +1 -1
  734. package/dist/utils/text.d.ts +2 -5
  735. package/dist/utils/text.d.ts.map +1 -1
  736. package/dist/utils/wire-media.d.ts +3 -6
  737. package/dist/utils/wire-media.d.ts.map +1 -1
  738. package/package.json +15 -13
  739. package/src/adapters/attachment.test.ts +98 -1
  740. package/src/adapters/attachment.ts +77 -20
  741. package/src/adapters/feedback.ts +1 -0
  742. package/src/adapters/speech.test.ts +94 -0
  743. package/src/adapters/speech.ts +16 -2
  744. package/src/adapters/thread-history.ts +16 -5
  745. package/src/adapters/voice.test.ts +169 -0
  746. package/src/adapters/voice.ts +25 -4
  747. package/src/index.ts +14 -2
  748. package/src/internal.ts +7 -0
  749. package/src/model-context/frame/host.test.ts +51 -1
  750. package/src/model-context/frame/host.ts +3 -1
  751. package/src/model-context/frame/provider.test.ts +106 -20
  752. package/src/model-context/frame/provider.ts +8 -1
  753. package/src/model-context/frame/validate.ts +57 -0
  754. package/src/model-context/interactable-composer-metadata.test.ts +82 -0
  755. package/src/model-context/interactable-composer-metadata.ts +45 -2
  756. package/src/react/RuntimeAdapter.test.ts +4 -1
  757. package/src/react/adapters/LocalStorageThreadListAdapter.test.ts +711 -0
  758. package/src/react/adapters/LocalStorageThreadListAdapter.tsx +125 -109
  759. package/src/react/client/Interactables.test.ts +865 -8
  760. package/src/react/client/Interactables.ts +325 -45
  761. package/src/react/client/RemoteThreadList.concurrent.test.tsx +9 -3
  762. package/src/react/client/RemoteThreadList.initialize-failure.test.ts +124 -0
  763. package/src/react/client/RemoteThreadList.test.ts +5 -6
  764. package/src/react/client/RemoteThreadList.ts +6 -0
  765. package/src/react/client/Tools.ts +2 -3
  766. package/src/react/client/interactable-model-context.test.ts +56 -13
  767. package/src/react/client/interactable-model-context.ts +48 -23
  768. package/src/react/index.ts +2 -2
  769. package/src/react/interactables-legacy/Interactables.test.ts +221 -4
  770. package/src/react/interactables-legacy/Interactables.ts +25 -14
  771. package/src/react/interactables-legacy/interactable-model-context.ts +26 -24
  772. package/src/react/interactables-legacy/useAssistantInteractable.test.tsx +40 -22
  773. package/src/react/interactables-shared/useInteractablePersistenceQueue.test.tsx +22 -2
  774. package/src/react/interactables-shared/useInteractablePersistenceQueue.ts +63 -11
  775. package/src/react/model-context/useInteractable.test.tsx +56 -29
  776. package/src/react/primitive-hooks/useActionBarCopy.test.ts +5 -5
  777. package/src/react/primitive-hooks/useSuggestionTrigger.test.ts +33 -0
  778. package/src/react/primitive-hooks/useSuggestionTrigger.ts +7 -4
  779. package/src/react/primitives/generativeUI/GenerativeUI.test.tsx +170 -0
  780. package/src/react/primitives/generativeUI/GenerativeUI.tsx +43 -28
  781. package/src/react/primitives/message/MessageAttachments.test.tsx +2 -6
  782. package/src/react/primitives/message/MessageAttachments.tsx +14 -8
  783. package/src/react/primitives/message/MessageGroupedParts.test.tsx +155 -8
  784. package/src/react/primitives/message/MessageGroupedParts.tsx +19 -6
  785. package/src/react/primitives/message/MessageParts.test.tsx +84 -0
  786. package/src/react/primitives/message/MessageParts.tool-interaction.test.tsx +69 -0
  787. package/src/react/primitives/message/MessageParts.tsx +29 -8
  788. package/src/react/primitives/thread/ThreadMessages.test.tsx +25 -7
  789. package/src/react/primitives/thread/ThreadSuggestions.test.tsx +97 -0
  790. package/src/react/primitives/thread/ThreadSuggestions.tsx +29 -6
  791. package/src/react/providers/ReadonlyThreadProvider.tsx +2 -2
  792. package/src/react/providers/TextMessagePartProvider.tsx +3 -0
  793. package/src/react/runtimes/RemoteThreadListHookInstanceManager.layout.test.tsx +62 -0
  794. package/src/react/runtimes/RemoteThreadListHookInstanceManager.retry.test.tsx +2 -2
  795. package/src/react/runtimes/RemoteThreadListHookInstanceManager.running.test.tsx +93 -0
  796. package/src/react/runtimes/RemoteThreadListHookInstanceManager.test.tsx +181 -21
  797. package/src/react/runtimes/RemoteThreadListHookInstanceManager.title.test.tsx +62 -17
  798. package/src/react/runtimes/RemoteThreadListHookInstanceManager.tsx +112 -77
  799. package/src/react/runtimes/RemoteThreadListThreadListRuntimeCore.tsx +19 -3
  800. package/src/react/runtimes/RemoteThreadResource.ts +5 -2
  801. package/src/react/runtimes/assistant-transport/replayBoundaryStream.test.ts +3 -1
  802. package/src/react/runtimes/assistant-transport/replayBoundaryStream.ts +10 -2
  803. package/src/react/runtimes/assistant-transport/runManager.ts +3 -0
  804. package/src/react/runtimes/assistant-transport/transport-parentid.test.tsx +57 -0
  805. package/src/react/runtimes/assistant-transport/transport-scheduling.test.ts +73 -46
  806. package/src/react/runtimes/assistant-transport/transport-thread-id.test.tsx +571 -0
  807. package/src/react/runtimes/assistant-transport/types.ts +9 -1
  808. package/src/react/runtimes/assistant-transport/useAssistantTransport.spec.md +10 -0
  809. package/src/react/runtimes/assistant-transport/useAssistantTransportRuntime.test.tsx +108 -1
  810. package/src/react/runtimes/assistant-transport/useAssistantTransportRuntime.ts +33 -9
  811. package/src/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.copy.integration.test.tsx +289 -0
  812. package/src/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.copy.test.tsx +471 -0
  813. package/src/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.engagement.test.tsx +330 -0
  814. package/src/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.test.ts +78 -2
  815. package/src/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.test.tsx +463 -2
  816. package/src/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.ts +595 -227
  817. package/src/react/runtimes/cloud/CloudFileAttachmentAdapter.test.ts +33 -4
  818. package/src/react/runtimes/cloud/CloudFileAttachmentAdapter.ts +7 -3
  819. package/src/react/runtimes/cloud/auiV0.ts +275 -6
  820. package/src/react/runtimes/cloud/auiV0DecodeSafely.test.ts +873 -0
  821. package/src/react/runtimes/createMessageConverter.ts +9 -3
  822. package/src/react/runtimes/external-message-converter.test.ts +7 -3
  823. package/src/react/runtimes/external-store-history-copy.ts +223 -0
  824. package/src/react/runtimes/remote-thread-hook-on-tap.test.ts +2 -1
  825. package/src/react/runtimes/useExternalStoreRuntime.history-copy.test.tsx +483 -0
  826. package/src/react/runtimes/useExternalStoreRuntime.lifecycle.test.tsx +84 -3
  827. package/src/react/runtimes/useExternalStoreRuntime.suggestions.test.tsx +6 -2
  828. package/src/react/runtimes/useExternalStoreRuntime.ts +25 -5
  829. package/src/react/runtimes/useLocalRuntime.test.tsx +145 -1
  830. package/src/react/runtimes/useLocalRuntime.ts +8 -5
  831. package/src/react/runtimes/useRemoteThreadListRuntime.concurrent.test.tsx +84 -4
  832. package/src/react/runtimes/useRemoteThreadListRuntime.ts +5 -1
  833. package/src/react/types/MessagePartComponentTypes.ts +10 -0
  834. package/src/react/types/scopes/interactables.ts +3 -0
  835. package/src/runtime/api/attachment-runtime.ts +10 -5
  836. package/src/runtime/api/bindings.ts +6 -1
  837. package/src/runtime/api/composer-runtime.ts +29 -6
  838. package/src/runtime/api/message-part-runtime.test.ts +215 -0
  839. package/src/runtime/api/message-part-runtime.ts +44 -1
  840. package/src/runtime/api/message-runtime.test.ts +112 -2
  841. package/src/runtime/api/message-runtime.ts +25 -7
  842. package/src/runtime/api/thread-list-item-runtime.ts +5 -5
  843. package/src/runtime/api/thread-list-runtime.ts +3 -3
  844. package/src/runtime/api/thread-runtime.test.ts +59 -0
  845. package/src/runtime/api/thread-runtime.ts +21 -11
  846. package/src/runtime/base/base-composer-runtime-core.ts +548 -153
  847. package/src/runtime/base/base-thread-runtime-core.test.ts +1614 -136
  848. package/src/runtime/base/base-thread-runtime-core.ts +236 -46
  849. package/src/runtime/base/default-edit-composer-runtime-core.ts +24 -2
  850. package/src/runtime/base/default-thread-composer-runtime-core.ts +33 -3
  851. package/src/runtime/interfaces/composer-runtime-core.ts +19 -0
  852. package/src/runtime/interfaces/thread-runtime-core.ts +24 -1
  853. package/src/runtime/queue/message-queue.ts +11 -1
  854. package/src/runtime/utils/attachment-add-operations.ts +45 -2
  855. package/src/runtime/utils/attachment-send-operations.ts +54 -0
  856. package/src/runtime/utils/auto-status.test.ts +54 -0
  857. package/src/runtime/utils/auto-status.ts +3 -10
  858. package/src/runtime/utils/external-message-conversion.test.ts +91 -0
  859. package/src/runtime/utils/external-message-conversion.ts +9 -6
  860. package/src/runtime/utils/message-repository.test.ts +69 -1
  861. package/src/runtime/utils/message-repository.ts +14 -7
  862. package/src/runtime/utils/stored-message-parts.ts +216 -0
  863. package/src/runtime/utils/thread-message-like.test.ts +58 -0
  864. package/src/runtime/utils/thread-message-like.ts +79 -48
  865. package/src/runtime/utils/thread-runtime-lifecycle.test.ts +67 -0
  866. package/src/runtime/utils/thread-runtime-lifecycle.ts +42 -8
  867. package/src/runtime/utils/tool-interactions.test.ts +193 -0
  868. package/src/runtime/utils/tool-interactions.ts +147 -0
  869. package/src/runtimes/external-store/external-store-adapter.ts +25 -0
  870. package/src/runtimes/external-store/external-store-runtime-core.ts +10 -2
  871. package/src/runtimes/external-store/external-store-thread-list-runtime-core.ts +2 -2
  872. package/src/runtimes/external-store/external-store-thread-runtime-core.test.ts +49 -0
  873. package/src/runtimes/external-store/external-store-thread-runtime-core.ts +114 -32
  874. package/src/runtimes/inert/InertThreadRuntimeCore.test.ts +127 -56
  875. package/src/runtimes/inert/InertThreadRuntimeCore.ts +10 -1
  876. package/src/runtimes/local/local-thread-runtime-core.edit-cancellation.test.ts +70 -0
  877. package/src/runtimes/local/local-thread-runtime-core.test.ts +1866 -169
  878. package/src/runtimes/local/local-thread-runtime-core.ts +365 -40
  879. package/src/runtimes/readonly/ReadonlyThreadRuntimeCore.ts +53 -1
  880. package/src/runtimes/remote-thread-list/optimistic-state.ts +8 -3
  881. package/src/runtimes/tool-invocations/EDGE_CASES.md +19 -4
  882. package/src/runtimes/tool-invocations/ToolInvocationTracker.test.ts +392 -39
  883. package/src/runtimes/tool-invocations/ToolInvocationTracker.ts +31 -8
  884. package/src/store/clients/external-thread.test.ts +145 -0
  885. package/src/store/clients/external-thread.ts +669 -144
  886. package/src/store/clients/model-context-client.test.ts +8 -8
  887. package/src/store/clients/no-op-composer-client.ts +2 -0
  888. package/src/store/clients/submission-message.ts +27 -0
  889. package/src/store/clients/thread-message-client.test.ts +39 -0
  890. package/src/store/clients/thread-message-client.ts +13 -6
  891. package/src/store/index.ts +2 -2
  892. package/src/store/internal.ts +1 -0
  893. package/src/store/primitive-predicates.test.ts +119 -0
  894. package/src/store/primitive-predicates.ts +19 -4
  895. package/src/store/runtime-clients/composer-runtime-client.ts +4 -3
  896. package/src/store/runtime-clients/message-part-runtime-client.test.ts +42 -0
  897. package/src/store/runtime-clients/message-part-runtime-client.ts +4 -0
  898. package/src/store/runtime-clients/message-runtime-client.ts +5 -0
  899. package/src/store/runtime-clients/thread-runtime-client.test.tsx +243 -0
  900. package/src/store/runtime-clients/thread-runtime-client.ts +46 -9
  901. package/src/store/scopes/composer.ts +22 -4
  902. package/src/store/scopes/message.ts +12 -1
  903. package/src/store/scopes/part.ts +8 -0
  904. package/src/subscribable/subscribable.test.ts +205 -3
  905. package/src/subscribable/subscribable.ts +49 -7
  906. package/src/tests/RemoteThreadListThreadListRuntimeCore-errors.test.ts +95 -1
  907. package/src/tests/attachment-adapters.test.ts +16 -1
  908. package/src/tests/auiV0Encode.test.ts +412 -1
  909. package/src/tests/base-composer-runtime-core-addAttachment.test.ts +6 -6
  910. package/src/tests/base-composer-runtime-core-send.test.ts +722 -29
  911. package/src/tests/base-composer-runtime-core.test.ts +212 -5
  912. package/src/tests/composer-can-cancel.test.ts +35 -6
  913. package/src/tests/composer-can-send.test.ts +120 -1
  914. package/src/tests/composer-submission.test.tsx +796 -0
  915. package/src/tests/default-edit-composer-runtime-core.test.ts +149 -2
  916. package/src/tests/external-store-thread-list-runtime-core.test.ts +111 -0
  917. package/src/tests/external-store-thread-runtime-core-adapter.test.ts +810 -28
  918. package/src/tests/external-store-thread-runtime-core.test.ts +217 -0
  919. package/src/tests/external-thread-attachments.test.tsx +763 -26
  920. package/src/tests/external-thread-feedback.test.tsx +20 -7
  921. package/src/tests/external-thread-isLast.test.tsx +69 -0
  922. package/src/tests/external-thread-parity.test.tsx +1 -1
  923. package/src/tests/get-thread-state-isRunning.test.ts +2 -2
  924. package/src/tests/message-queue.test.ts +45 -10
  925. package/src/tests/remote-thread-list-adapter-switch.test.ts +45 -1
  926. package/src/tests/thread-switch-events.test.tsx +11 -7
  927. package/src/tests/useRemoteThreadListRuntime-controlled.test.tsx +2 -1
  928. package/src/types/message.test.ts +19 -0
  929. package/src/types/message.ts +65 -10
  930. package/src/utils/normalizePartStatus.ts +14 -1
  931. package/dist/tests/remote-thread-list-test-helpers.d.ts +0 -16
  932. package/dist/tests/remote-thread-list-test-helpers.d.ts.map +0 -1
  933. package/dist/tests/remote-thread-list-test-helpers.js +0 -59
  934. package/dist/tests/remote-thread-list-test-helpers.js.map +0 -1
@@ -1,9 +1,11 @@
1
- import { gateInteractableComposerMetadata } from "../../model-context/interactable-composer-metadata.js";
2
- import { notifyEventListeners } from "../../utils/notify-event-listeners.js";
3
- import { BaseSubscribable, notifySubscribers } from "../../subscribable/subscribable.js";
4
1
  import { generateId } from "../../utils/id.js";
2
+ import { notifyEventListeners } from "../../utils/notify-event-listeners.js";
5
3
  import { getThreadMessageText } from "../../utils/text.js";
4
+ import { gateInteractableComposerMetadata } from "../../model-context/interactable-composer-metadata.js";
5
+ import { BaseSubscribable, notifySubscribers } from "../../subscribable/subscribable.js";
6
+ import { MessageNotSentError } from "../../types/error.js";
6
7
  import { ExportedMessageRepository, MessageRepository } from "../utils/message-repository.js";
8
+ import { captureThreadRuntimeGeneration } from "../utils/thread-runtime-lifecycle.js";
7
9
  import { DefaultThreadComposerRuntimeCore } from "./default-thread-composer-runtime-core.js";
8
10
  import { DefaultEditComposerRuntimeCore } from "./default-edit-composer-runtime-core.js";
9
11
  //#region src/runtime/base/base-thread-runtime-core.ts
@@ -22,11 +24,21 @@ var BaseThreadRuntimeCore = class extends BaseSubscribable {
22
24
  _getBaseMessages() {
23
25
  return this.repository.getMessages();
24
26
  }
27
+ _commitVoiceMessage(_message) {}
28
+ _onMessageMetadataChanged(_previousMessage, _message) {}
29
+ _dropVoiceMessage(messageId, notify) {
30
+ const index = this._voiceMessages.findIndex((voiceMessage) => voiceMessage.id === messageId);
31
+ if (index === -1) return;
32
+ this._voiceMessages.splice(index, 1);
33
+ this._markVoiceMessagesDirty();
34
+ if (notify) this._notifySubscribers();
35
+ }
25
36
  get messages() {
26
37
  if (this._voiceMessages.length === 0) return this._getBaseMessages();
27
38
  const base = this._getBaseMessages();
28
39
  if (this._cachedVoiceGeneration !== this._voiceGeneration || this._cachedMergedBase !== base) {
29
- this._cachedMergedMessages = [...base, ...this._voiceMessages];
40
+ const baseMessageIds = new Set(base.map((message) => message.id));
41
+ this._cachedMergedMessages = [...base, ...this._voiceMessages.filter((message) => !baseMessageIds.has(message.id))];
30
42
  this._cachedVoiceGeneration = this._voiceGeneration;
31
43
  this._cachedMergedBase = base;
32
44
  }
@@ -83,7 +95,11 @@ var BaseThreadRuntimeCore = class extends BaseSubscribable {
83
95
  _isVoiceMessage(messageId) {
84
96
  return messageId !== null && this._voiceMessages.some((m) => m.id === messageId);
85
97
  }
98
+ _resolveAppendParent(parentId) {
99
+ return this._isVoiceMessage(parentId) ? this._getBaseMessages().at(-1)?.id ?? null : parentId;
100
+ }
86
101
  beginEdit(messageId) {
102
+ if (this.voice) throw new Error("Cannot edit a message while a voice session is connected");
87
103
  if (this._isVoiceMessage(messageId)) throw new Error("Voice transcript messages cannot be edited");
88
104
  if (this._editComposers.has(messageId)) throw new Error("Edit already in progress");
89
105
  this._editComposers.set(messageId, new DefaultEditComposerRuntimeCore(this, () => this._editComposers.delete(messageId), this.repository.getMessage(messageId)));
@@ -124,27 +140,33 @@ var BaseThreadRuntimeCore = class extends BaseSubscribable {
124
140
  approved
125
141
  });
126
142
  }
127
- submitFeedback({ messageId, type }) {
143
+ submitFeedback({ messageId, type, comment }) {
128
144
  const adapter = this.adapters?.feedback;
129
- if (!adapter) throw new Error("Feedback adapter not configured");
130
145
  const entry = this.getMessageById(messageId);
131
146
  if (!entry) throw new Error(`Message not found: ${messageId}`);
132
147
  const { message, parentId } = entry;
133
- adapter.submit({
148
+ const trimmed = comment?.trim();
149
+ const feedback = {
150
+ type,
151
+ ...trimmed ? { comment: trimmed } : void 0
152
+ };
153
+ adapter?.submit({
134
154
  message,
135
- type
155
+ ...feedback
136
156
  });
137
157
  if (message.role === "assistant") {
138
158
  const updatedMessage = {
139
159
  ...message,
140
160
  metadata: {
141
161
  ...message.metadata,
142
- submittedFeedback: { type }
162
+ submittedFeedback: feedback
143
163
  }
144
164
  };
145
165
  const voiceIdx = this._voiceMessages.findIndex((voiceMessage) => voiceMessage.id === messageId);
146
- if (voiceIdx === -1) this.repository.addOrUpdateMessage(parentId, updatedMessage);
147
- else {
166
+ if (voiceIdx === -1) {
167
+ this.repository.addOrUpdateMessage(parentId, updatedMessage);
168
+ this._onMessageMetadataChanged(message, updatedMessage);
169
+ } else {
148
170
  this._voiceMessages[voiceIdx] = updatedMessage;
149
171
  if (this._currentAssistantMsg === message) this._currentAssistantMsg = updatedMessage;
150
172
  this._markVoiceMessagesDirty();
@@ -231,15 +253,60 @@ var BaseThreadRuntimeCore = class extends BaseSubscribable {
231
253
  this._voiceVolumeSubscribers.add(callback);
232
254
  return () => this._voiceVolumeSubscribers.delete(callback);
233
255
  };
256
+ _onVoiceConnected() {}
257
+ _onVoiceDisconnected() {}
258
+ _toVoiceSessionState(session, status, mode) {
259
+ return {
260
+ status,
261
+ isMuted: session.isMuted,
262
+ mode,
263
+ canSendText: status.type === "running" && session.sendText !== void 0
264
+ };
265
+ }
266
+ _isRunActive() {
267
+ if (this.isRunning) return true;
268
+ const last = this._getBaseMessages().at(-1);
269
+ return last?.role === "assistant" && (last.status.type === "running" || last.status.type === "requires-action");
270
+ }
271
+ /**
272
+ * Waits for a pending history import before a voice message is committed.
273
+ * The import may begin before or after the voice session connects, so the
274
+ * loading state must be rechecked when the commit is ready to run. The wait
275
+ * also ends when the runtime is invalidated, since a superseded runtime may
276
+ * never learn that loading ended.
277
+ */
278
+ _getVoiceCommitBarrier() {
279
+ if (!this.isLoading) return void 0;
280
+ const generation = captureThreadRuntimeGeneration(this);
281
+ return (async () => {
282
+ while (this.isLoading && !generation.aborted) await new Promise((resolve) => {
283
+ const wake = () => {
284
+ unsubscribe();
285
+ generation.removeEventListener("abort", wake);
286
+ resolve();
287
+ };
288
+ const unsubscribe = this.subscribe(wake);
289
+ generation.addEventListener("abort", wake);
290
+ });
291
+ })();
292
+ }
234
293
  connectVoice() {
235
294
  const adapter = this.adapters?.voice;
236
295
  if (!adapter) throw new Error("Voice adapter not configured");
296
+ if (this._isRunActive()) throw new Error("Cannot start a voice session while a run is in progress or paused on a pending tool action");
297
+ const replacing = this._voiceSession !== void 0;
237
298
  try {
238
- this.disconnectVoice();
299
+ this._disconnectVoice(false);
239
300
  } catch (error) {
240
301
  console.error("[assistant-ui] Voice cleanup threw before reconnect", error);
241
302
  }
242
- const session = adapter.connect({});
303
+ let session;
304
+ try {
305
+ session = adapter.connect({});
306
+ } catch (error) {
307
+ if (replacing && this._voiceSession === void 0) this._onVoiceDisconnected();
308
+ throw error;
309
+ }
243
310
  this._voiceSession = session;
244
311
  const unsubs = [];
245
312
  this._voiceUnsubs = unsubs;
@@ -254,28 +321,23 @@ var BaseThreadRuntimeCore = class extends BaseSubscribable {
254
321
  };
255
322
  try {
256
323
  let currentMode = "listening";
257
- this.voice = {
258
- status: session.status,
259
- isMuted: session.isMuted,
260
- mode: currentMode
261
- };
324
+ this.voice = this._toVoiceSessionState(session, session.status, currentMode);
262
325
  this._voiceVolume = 0;
263
326
  this._notifySubscribers();
264
327
  if (finishDetachedSetup()) return;
265
328
  unsubs.push(session.onStatusChange((status) => {
329
+ if (this._voiceSession !== session) return;
266
330
  if (status.type === "ended") {
267
331
  this._finishVoiceAssistantMessage();
268
332
  this._voiceSession = void 0;
269
333
  this.voice = void 0;
270
- } else this.voice = {
271
- status,
272
- isMuted: session.isMuted,
273
- mode: currentMode
274
- };
334
+ this._onVoiceDisconnected();
335
+ } else this.voice = this._toVoiceSessionState(session, status, currentMode);
275
336
  this._notifySubscribers();
276
337
  }));
277
338
  if (finishDetachedSetup()) return;
278
339
  unsubs.push(session.onModeChange((mode) => {
340
+ if (this._voiceSession !== session) return;
279
341
  currentMode = mode;
280
342
  if (this.voice) {
281
343
  this.voice = {
@@ -287,52 +349,53 @@ var BaseThreadRuntimeCore = class extends BaseSubscribable {
287
349
  }));
288
350
  if (finishDetachedSetup()) return;
289
351
  unsubs.push(session.onVolumeChange((volume) => {
352
+ if (this._voiceSession !== session) return;
290
353
  this._voiceVolume = volume;
291
354
  notifyEventListeners(this._voiceVolumeSubscribers, void 0, "Voice volume");
292
355
  }));
293
356
  if (finishDetachedSetup()) return;
294
357
  unsubs.push(session.onTranscript((transcript) => {
358
+ if (this._voiceSession !== session) return;
295
359
  this._handleVoiceTranscript(transcript);
296
360
  }));
297
- finishDetachedSetup();
361
+ if (!finishDetachedSetup()) this._onVoiceConnected();
298
362
  } catch (error) {
299
- if (this._voiceSession === session && this._voiceUnsubs === unsubs) try {
300
- this.disconnectVoice();
301
- } catch (cleanupError) {
302
- console.error("[assistant-ui] Voice rollback cleanup threw", cleanupError);
303
- }
304
- else finishDetachedSetup();
363
+ if (this._voiceSession === session && this._voiceUnsubs === unsubs) {
364
+ try {
365
+ this._disconnectVoice(false);
366
+ } catch (cleanupError) {
367
+ console.error("[assistant-ui] Voice rollback cleanup threw", cleanupError);
368
+ }
369
+ if (replacing && this._voiceSession === void 0) this._onVoiceDisconnected();
370
+ } else finishDetachedSetup();
305
371
  throw error;
306
372
  }
307
373
  }
308
374
  _currentAssistantMsg = null;
375
+ _observeVoiceCommit(commit) {
376
+ Promise.resolve(commit).catch((error) => {
377
+ console.error("[assistant-ui] Voice message commit failed", error);
378
+ });
379
+ }
309
380
  _handleVoiceTranscript(transcript) {
310
381
  this.ensureInitialized();
311
382
  if (transcript.role === "user") {
312
383
  this._finishVoiceAssistantMessage();
313
384
  this._currentAssistantMsg = null;
314
- if (transcript.isFinal) {
315
- this._voiceMessages.push({
316
- id: generateId(),
317
- role: "user",
318
- content: [{
319
- type: "text",
320
- text: transcript.text
321
- }],
322
- metadata: {
323
- modality: "voice",
324
- custom: {}
325
- },
326
- createdAt: /* @__PURE__ */ new Date(),
327
- status: {
328
- type: "complete",
329
- reason: "unknown"
330
- },
331
- attachments: []
332
- });
333
- this._markVoiceMessagesDirty();
334
- this._notifySubscribers();
335
- }
385
+ if (transcript.isFinal) this._observeVoiceCommit(this._commitVoiceUserMessage({
386
+ id: generateId(),
387
+ role: "user",
388
+ content: [{
389
+ type: "text",
390
+ text: transcript.text
391
+ }],
392
+ metadata: {
393
+ modality: "voice",
394
+ custom: {}
395
+ },
396
+ createdAt: /* @__PURE__ */ new Date(),
397
+ attachments: []
398
+ }));
336
399
  } else {
337
400
  const status = transcript.isFinal ? {
338
401
  type: "complete",
@@ -372,12 +435,51 @@ var BaseThreadRuntimeCore = class extends BaseSubscribable {
372
435
  this._voiceMessages[idx] = updated;
373
436
  this._currentAssistantMsg = updated;
374
437
  }
375
- if (transcript.isFinal) this._currentAssistantMsg = null;
438
+ if (transcript.isFinal) {
439
+ this._observeVoiceCommit(this._commitVoiceMessage(this._currentAssistantMsg));
440
+ this._currentAssistantMsg = null;
441
+ }
376
442
  this._markVoiceMessagesDirty();
377
443
  this._notifySubscribers();
378
444
  }
379
445
  }
380
- _finishVoiceAssistantMessage() {
446
+ _commitVoiceUserMessage(message) {
447
+ this._voiceMessages.push(message);
448
+ const committed = this._commitVoiceMessage(message);
449
+ this._markVoiceMessagesDirty();
450
+ this._notifySubscribers();
451
+ return committed;
452
+ }
453
+ async _appendToVoiceSession(message) {
454
+ const session = this._voiceSession;
455
+ if (!this.voice?.canSendText || !session?.sendText) throw new Error("Cannot send a text message while a voice session is connected");
456
+ const content = message.content.filter((part) => part.type === "text");
457
+ if (message.role !== "user" || message.sourceId != null || message.parentId !== this._resolveAppendParent(this.messages.at(-1)?.id ?? null) || message.attachments?.length || content.length !== message.content.length || !content.some((part) => part.text.trim())) throw new Error("Only a plain text user message can be sent while a voice session is connected");
458
+ const enriched = this.enrichAppendMetadata(message);
459
+ this.ensureInitialized();
460
+ const generation = captureThreadRuntimeGeneration(this);
461
+ try {
462
+ await session.sendText(getThreadMessageText(message));
463
+ } catch (error) {
464
+ if (generation.aborted) return;
465
+ const notSent = new MessageNotSentError();
466
+ notSent.cause = error;
467
+ throw notSent;
468
+ }
469
+ if (generation.aborted) return;
470
+ if (this._voiceSession !== session) throw new MessageNotSentError("The voice session ended before the typed message was recorded");
471
+ this._finishVoiceAssistantMessage(false);
472
+ this._currentAssistantMsg = null;
473
+ await this._commitVoiceUserMessage({
474
+ id: generateId(),
475
+ role: "user",
476
+ content,
477
+ metadata: { custom: { ...enriched.metadata?.custom } },
478
+ createdAt: message.createdAt,
479
+ attachments: []
480
+ });
481
+ }
482
+ _finishVoiceAssistantMessage(notify = true) {
381
483
  const last = this._voiceMessages.at(-1);
382
484
  if (last?.role === "assistant" && last.status.type === "running") {
383
485
  const idx = this._voiceMessages.length - 1;
@@ -388,11 +490,17 @@ var BaseThreadRuntimeCore = class extends BaseSubscribable {
388
490
  reason: "stop"
389
491
  }
390
492
  };
493
+ this._observeVoiceCommit(this._commitVoiceMessage(this._voiceMessages[idx]));
494
+ this._currentAssistantMsg = null;
391
495
  this._markVoiceMessagesDirty();
392
- this._notifySubscribers();
496
+ if (notify) this._notifySubscribers();
393
497
  }
394
498
  }
395
499
  disconnectVoice() {
500
+ this._disconnectVoice(true);
501
+ }
502
+ _disconnectVoice(fireHook) {
503
+ this._finishVoiceAssistantMessage(false);
396
504
  this._currentAssistantMsg = null;
397
505
  const unsubs = this._voiceUnsubs.splice(0);
398
506
  this._voiceUnsubs = [];
@@ -403,13 +511,17 @@ var BaseThreadRuntimeCore = class extends BaseSubscribable {
403
511
  const stopSpeaking = this.speech && this._isVoiceMessage(this.speech.messageId) ? this._stopSpeaking : void 0;
404
512
  this._voiceMessages = [];
405
513
  this._markVoiceMessagesDirty();
406
- notifySubscribers([
407
- ...unsubs,
408
- ...stopSpeaking ? [stopSpeaking] : [],
409
- ...session ? [() => session.disconnect()] : [],
410
- () => notifyEventListeners(this._voiceVolumeSubscribers, void 0, "Voice volume"),
411
- () => this._notifySubscribers()
412
- ]);
514
+ try {
515
+ notifySubscribers([
516
+ ...unsubs,
517
+ ...stopSpeaking ? [stopSpeaking] : [],
518
+ ...session ? [() => session.disconnect()] : [],
519
+ () => notifyEventListeners(this._voiceVolumeSubscribers, void 0, "Voice volume"),
520
+ () => this._notifySubscribers()
521
+ ]);
522
+ } finally {
523
+ if (fireHook && session && this._voiceSession === void 0) this._onVoiceDisconnected();
524
+ }
413
525
  }
414
526
  muteVoice() {
415
527
  if (!this._voiceSession) throw new Error("No active voice session");
@@ -1 +1 @@
1
- {"version":3,"file":"base-thread-runtime-core.js","names":["AppendMessage","ThreadAssistantMessage","ThreadMessage","Unsubscribe","ModelContextProvider","getThreadMessageText","generateId","ExportedMessageRepository","MessageRepository","DefaultThreadComposerRuntimeCore","AddToolResultOptions","ResumeToolCallOptions","RespondToToolApprovalOptions","ThreadSuggestion","SubmitFeedbackOptions","ThreadRuntimeCore","SpeechState","VoiceSessionState","RuntimeCapabilities","ThreadRuntimeEventCallback","ThreadRuntimeEventPayload","ThreadRuntimeEventType","StartRunConfig","ResumeRunConfig","DefaultEditComposerRuntimeCore","SpeechSynthesisAdapter","FeedbackAdapter","AttachmentAdapter","RealtimeVoiceAdapter","ThreadMessageLike","notifyEventListeners","gateInteractableComposerMetadata","BaseSubscribable","notifySubscribers","BaseThreadAdapters","speech","feedback","attachments","voice","BaseThreadRuntimeCore","_isInitialized","repository","adapters","isDisabled","isSendDisabled","isLoading","suggestions","extras","capabilities","append","message","deleteMessage","messageId","Promise","startRun","config","resumeRun","addToolResult","options","resumeToolCall","respondToToolApproval","cancelRun","exportExternalState","importExternalState","state","unstable_notifySessionReset","_voiceMessages","_voiceGeneration","_cachedMergedMessages","_cachedVoiceGeneration","_cachedMergedBase","_markVoiceMessagesDirty","_getBaseMessages","getMessages","messages","length","base","mostRecentAssistantMessage","this","role","metadata","unstable_state","composer","_contextProvider","constructor","getModelContext","enrichAppendMetadata","anchorId","parentId","parentIndex","findIndex","m","id","composerMetadata","unstable_composerMetadata","slice","custom","_editComposers","Map","getEditComposer","get","_isVoiceMessage","some","beginEdit","Error","has","set","delete","getMessage","_notifySubscribers","getMessageById","baseMessages","voiceIdx","at","index","undefined","getBranches","switchToBranch","branchId","_notifyEventSubscribers","event","E","payload","subscribers","_eventSubscribers","_notifyToolApprovalAnswered","toolCallId","toolName","approved","submitFeedback","type","adapter","entry","submit","updatedMessage","submittedFeedback","voiceMessage","addOrUpdateMessage","_currentAssistantMsg","_stopSpeaking","speak","previousStop","utterance","Utterance","error","notificationError","console","unsub","clear","cleanup","stop","cancel","update","status","subscribe","cleanupError","stopSpeaking","_voiceSession","Session","_voiceUnsubs","Array","_voiceVolume","_voiceVolumeSubscribers","Set","getVoiceVolume","subscribeVoiceVolume","callback","add","connectVoice","disconnectVoice","session","connect","unsubs","finishDetachedSetup","splice","currentMode","Mode","isMuted","mode","push","onStatusChange","_finishVoiceAssistantMessage","onModeChange","onVolumeChange","volume","onTranscript","transcript","_handleVoiceTranscript","TranscriptItem","ensureInitialized","isFinal","content","text","modality","createdAt","Date","reason","unstable_annotations","unstable_data","steps","idx","indexOf","updated","last","disconnect","muteVoice","mute","unmuteVoice","unmute","export","import","data","reset","initialMessages","fromArray","unstable_on","wrapped","queueMicrotask"],"sources":["../../../src/runtime/base/base-thread-runtime-core.ts"],"sourcesContent":["import type {\n AppendMessage,\n ThreadAssistantMessage,\n ThreadMessage,\n} from \"../../types/message\";\nimport type { Unsubscribe } from \"../../types/unsubscribe\";\nimport type { ModelContextProvider } from \"../../model-context/types\";\nimport { getThreadMessageText } from \"../../utils/text\";\nimport { generateId } from \"../../utils/id\";\nimport {\n ExportedMessageRepository,\n MessageRepository,\n} from \"../utils/message-repository\";\nimport { DefaultThreadComposerRuntimeCore } from \"./default-thread-composer-runtime-core\";\nimport type {\n AddToolResultOptions,\n ResumeToolCallOptions,\n RespondToToolApprovalOptions,\n ThreadSuggestion,\n SubmitFeedbackOptions,\n ThreadRuntimeCore,\n SpeechState,\n VoiceSessionState,\n RuntimeCapabilities,\n ThreadRuntimeEventCallback,\n ThreadRuntimeEventPayload,\n ThreadRuntimeEventType,\n StartRunConfig,\n ResumeRunConfig,\n} from \"../interfaces/thread-runtime-core\";\nimport { DefaultEditComposerRuntimeCore } from \"./default-edit-composer-runtime-core\";\nimport type { SpeechSynthesisAdapter } from \"../../adapters/speech\";\nimport type { FeedbackAdapter } from \"../../adapters/feedback\";\nimport type { AttachmentAdapter } from \"../../adapters/attachment\";\nimport type { RealtimeVoiceAdapter } from \"../../adapters/voice\";\nimport type { ThreadMessageLike } from \"../utils/thread-message-like\";\nimport { notifyEventListeners } from \"../../utils/notify-event-listeners\";\nimport { gateInteractableComposerMetadata } from \"../../model-context/interactable-composer-metadata\";\nimport {\n BaseSubscribable,\n notifySubscribers,\n} from \"../../subscribable/subscribable\";\n\ntype BaseThreadAdapters = {\n speech?: SpeechSynthesisAdapter | undefined;\n feedback?: FeedbackAdapter | undefined;\n attachments?: AttachmentAdapter | undefined;\n voice?: RealtimeVoiceAdapter | undefined;\n};\n\nexport abstract class BaseThreadRuntimeCore\n extends BaseSubscribable\n implements ThreadRuntimeCore\n{\n private _isInitialized = false;\n\n protected repository = new MessageRepository();\n public abstract get adapters(): BaseThreadAdapters | undefined;\n public abstract get isDisabled(): boolean;\n public abstract get isSendDisabled(): boolean;\n public abstract get isLoading(): boolean;\n public abstract get suggestions(): readonly ThreadSuggestion[];\n public abstract get extras(): unknown;\n\n public abstract get capabilities(): RuntimeCapabilities;\n public abstract append(message: AppendMessage): void;\n public abstract deleteMessage(messageId: string): void | Promise<void>;\n public abstract startRun(config: StartRunConfig): void;\n public abstract resumeRun(config: ResumeRunConfig): void;\n public abstract addToolResult(options: AddToolResultOptions): void;\n public abstract resumeToolCall(options: ResumeToolCallOptions): void;\n public abstract respondToToolApproval(\n options: RespondToToolApprovalOptions,\n ): Promise<void>;\n public abstract cancelRun(): void;\n public abstract exportExternalState(): any;\n public abstract importExternalState(state: any): void;\n public abstract unstable_notifySessionReset(): void;\n\n protected _voiceMessages: ThreadMessage[] = [];\n protected _voiceGeneration = 0;\n private _cachedMergedMessages: readonly ThreadMessage[] | null = null;\n private _cachedVoiceGeneration = -1;\n private _cachedMergedBase: readonly ThreadMessage[] | null = null;\n\n protected _markVoiceMessagesDirty() {\n this._voiceGeneration++;\n this._cachedMergedMessages = null;\n }\n\n protected _getBaseMessages(): readonly ThreadMessage[] {\n return this.repository.getMessages();\n }\n\n public get messages(): readonly ThreadMessage[] {\n if (this._voiceMessages.length === 0) {\n return this._getBaseMessages();\n }\n const base = this._getBaseMessages();\n if (\n this._cachedVoiceGeneration !== this._voiceGeneration ||\n this._cachedMergedBase !== base\n ) {\n this._cachedMergedMessages = [...base, ...this._voiceMessages];\n this._cachedVoiceGeneration = this._voiceGeneration;\n this._cachedMergedBase = base;\n }\n return this._cachedMergedMessages!;\n }\n\n public get state() {\n let mostRecentAssistantMessage: (typeof this.messages)[number] | undefined;\n for (const message of this.messages) {\n if (message.role === \"assistant\") {\n mostRecentAssistantMessage = message;\n }\n }\n\n return mostRecentAssistantMessage?.metadata.unstable_state ?? null;\n }\n\n public readonly composer = new DefaultThreadComposerRuntimeCore(this);\n\n private readonly _contextProvider: ModelContextProvider;\n\n constructor(_contextProvider: ModelContextProvider) {\n super();\n this._contextProvider = _contextProvider;\n }\n\n public getModelContext() {\n return this._contextProvider.getModelContext();\n }\n\n /**\n * Stamps provider-contributed composer metadata onto an outgoing message.\n * Called at dispatch rather than in the composer, so programmatic sends are\n * covered too, and exactly once per message: a queued send is stamped when\n * it leaves the lane, never when it enters.\n *\n * Only user messages are stamped, matching the readers: both the version\n * fold and the model injection skip every other role.\n *\n * @param anchorId Message the gated branch prefix ends at. A queued send\n * passes the current tail, having waited through a run that grew the prefix\n * past the parent it was created with.\n */\n protected enrichAppendMetadata(\n message: AppendMessage,\n anchorId: string | null = message.parentId,\n ): AppendMessage {\n if (message.role !== \"user\") return message;\n const messages = this.messages;\n const parentIndex =\n anchorId === null ? -1 : messages.findIndex((m) => m.id === anchorId);\n const composerMetadata = gateInteractableComposerMetadata(\n this.getModelContext().unstable_composerMetadata,\n messages.slice(0, parentIndex + 1),\n );\n if (!composerMetadata) return message;\n return {\n ...message,\n metadata: {\n ...message.metadata,\n custom: { ...message.metadata?.custom, ...composerMetadata },\n },\n };\n }\n\n private _editComposers = new Map<string, DefaultEditComposerRuntimeCore>();\n public getEditComposer(messageId: string) {\n return this._editComposers.get(messageId);\n }\n protected _isVoiceMessage(messageId: string | null) {\n return (\n messageId !== null && this._voiceMessages.some((m) => m.id === messageId)\n );\n }\n\n public beginEdit(messageId: string) {\n if (this._isVoiceMessage(messageId)) {\n throw new Error(\"Voice transcript messages cannot be edited\");\n }\n if (this._editComposers.has(messageId))\n throw new Error(\"Edit already in progress\");\n\n this._editComposers.set(\n messageId,\n new DefaultEditComposerRuntimeCore(\n this,\n () => this._editComposers.delete(messageId),\n this.repository.getMessage(messageId),\n ),\n );\n this._notifySubscribers();\n }\n\n public getMessageById(messageId: string) {\n try {\n return this.repository.getMessage(messageId);\n } catch {\n // Check voice messages\n const baseMessages = this.repository.getMessages();\n const voiceIdx = this._voiceMessages.findIndex((m) => m.id === messageId);\n if (voiceIdx !== -1) {\n const parentId =\n voiceIdx > 0\n ? this._voiceMessages[voiceIdx - 1]!.id\n : (baseMessages.at(-1)?.id ?? null);\n return {\n parentId,\n message: this._voiceMessages[voiceIdx]!,\n index: baseMessages.length + voiceIdx,\n };\n }\n return undefined;\n }\n }\n\n public getBranches(messageId: string): string[] {\n if (this._voiceMessages.some((m) => m.id === messageId)) {\n return [];\n }\n return this.repository.getBranches(messageId);\n }\n\n public switchToBranch(branchId: string): void {\n this.repository.switchToBranch(branchId);\n this._notifySubscribers();\n }\n\n public _notifyEventSubscribers<E extends ThreadRuntimeEventType>(\n event: E,\n payload: ThreadRuntimeEventPayload[E],\n ) {\n const subscribers = this._eventSubscribers.get(event);\n if (!subscribers) return;\n\n notifyEventListeners(subscribers, payload, `Thread runtime \"${event}\"`);\n }\n\n protected _notifyToolApprovalAnswered(\n messageId: string,\n toolCallId: string,\n toolName: string,\n approved: boolean,\n ) {\n this._notifyEventSubscribers(\"toolApprovalAnswered\", {\n messageId,\n toolCallId,\n toolName,\n approved,\n });\n }\n\n public submitFeedback({ messageId, type }: SubmitFeedbackOptions) {\n const adapter = this.adapters?.feedback;\n if (!adapter) throw new Error(\"Feedback adapter not configured\");\n\n const entry = this.getMessageById(messageId);\n if (!entry) throw new Error(`Message not found: ${messageId}`);\n const { message, parentId } = entry;\n adapter.submit({ message, type });\n\n if (message.role === \"assistant\") {\n const updatedMessage: ThreadMessage = {\n ...message,\n metadata: {\n ...message.metadata,\n submittedFeedback: { type },\n },\n };\n const voiceIdx = this._voiceMessages.findIndex(\n (voiceMessage) => voiceMessage.id === messageId,\n );\n if (voiceIdx === -1) {\n this.repository.addOrUpdateMessage(parentId, updatedMessage);\n } else {\n this._voiceMessages[voiceIdx] = updatedMessage;\n if (this._currentAssistantMsg === message) {\n this._currentAssistantMsg = updatedMessage as ThreadAssistantMessage;\n }\n this._markVoiceMessagesDirty();\n }\n }\n\n this._notifySubscribers();\n }\n\n private _stopSpeaking: Unsubscribe | undefined;\n public speech: SpeechState | undefined;\n\n public speak(messageId: string) {\n const adapter = this.adapters?.speech;\n if (!adapter) throw new Error(\"Speech adapter not configured\");\n\n const entry = this.getMessageById(messageId);\n if (!entry) throw new Error(`Message not found: ${messageId}`);\n const { message } = entry;\n\n const previousStop = this._stopSpeaking;\n let utterance: SpeechSynthesisAdapter.Utterance;\n try {\n previousStop?.();\n utterance = adapter.speak(getThreadMessageText(message));\n } catch (error) {\n if (previousStop && !this._stopSpeaking) {\n try {\n this._notifySubscribers();\n } catch (notificationError) {\n console.error(\n \"[assistant-ui] Speech rollback notification threw\",\n notificationError,\n );\n }\n }\n throw error;\n }\n let unsub: Unsubscribe | undefined;\n const clear = () => {\n this._stopSpeaking = undefined;\n this.speech = undefined;\n const cleanup = unsub;\n unsub = undefined;\n cleanup?.();\n };\n const stop = () => {\n if (this._stopSpeaking !== stop) return;\n try {\n clear();\n } finally {\n utterance.cancel();\n }\n };\n const update = () => {\n if (this._stopSpeaking !== stop) return;\n if (utterance.status.type === \"ended\") {\n notifySubscribers([clear, () => this._notifySubscribers()]);\n } else {\n this.speech = { messageId, status: utterance.status };\n this._notifySubscribers();\n }\n };\n\n this._stopSpeaking = stop;\n try {\n unsub = utterance.subscribe(update);\n if (this._stopSpeaking !== stop) {\n unsub();\n return;\n }\n update();\n } catch (error) {\n if (this._stopSpeaking === stop) {\n try {\n notifySubscribers([stop, () => this._notifySubscribers()]);\n } catch (cleanupError) {\n console.error(\n \"[assistant-ui] Speech rollback cleanup threw\",\n cleanupError,\n );\n }\n }\n throw error;\n }\n }\n\n public stopSpeaking() {\n if (!this._stopSpeaking) throw new Error(\"No message is being spoken\");\n notifySubscribers([this._stopSpeaking, () => this._notifySubscribers()]);\n }\n\n private _voiceSession: RealtimeVoiceAdapter.Session | undefined;\n private _voiceUnsubs: Array<() => void> = [];\n public voice: VoiceSessionState | undefined;\n\n private _voiceVolume = 0;\n private _voiceVolumeSubscribers = new Set<() => void>();\n\n public getVoiceVolume = () => this._voiceVolume;\n\n public subscribeVoiceVolume = (callback: () => void): Unsubscribe => {\n this._voiceVolumeSubscribers.add(callback);\n return () => this._voiceVolumeSubscribers.delete(callback);\n };\n\n public connectVoice() {\n const adapter = this.adapters?.voice;\n if (!adapter) throw new Error(\"Voice adapter not configured\");\n\n try {\n this.disconnectVoice();\n } catch (error) {\n console.error(\n \"[assistant-ui] Voice cleanup threw before reconnect\",\n error,\n );\n }\n\n const session = adapter.connect({});\n this._voiceSession = session;\n const unsubs: Array<() => void> = [];\n this._voiceUnsubs = unsubs;\n\n // The cleanup-list identity preserves ownership after an ended status clears the session.\n const finishDetachedSetup = () => {\n if (this._voiceSession === session && this._voiceUnsubs === unsubs) {\n return false;\n }\n\n try {\n notifySubscribers(unsubs.splice(0));\n } catch (error) {\n console.error(\n \"[assistant-ui] Detached voice setup cleanup threw\",\n error,\n );\n }\n return true;\n };\n\n try {\n let currentMode: RealtimeVoiceAdapter.Mode = \"listening\";\n\n this.voice = {\n status: session.status,\n isMuted: session.isMuted,\n mode: currentMode,\n };\n this._voiceVolume = 0;\n this._notifySubscribers();\n if (finishDetachedSetup()) return;\n\n unsubs.push(\n session.onStatusChange((status) => {\n if (status.type === \"ended\") {\n this._finishVoiceAssistantMessage();\n this._voiceSession = undefined;\n this.voice = undefined;\n } else {\n this.voice = {\n status,\n isMuted: session.isMuted,\n mode: currentMode,\n };\n }\n this._notifySubscribers();\n }),\n );\n if (finishDetachedSetup()) return;\n\n unsubs.push(\n session.onModeChange((mode) => {\n currentMode = mode;\n if (this.voice) {\n this.voice = { ...this.voice, mode };\n this._notifySubscribers();\n }\n }),\n );\n if (finishDetachedSetup()) return;\n\n unsubs.push(\n session.onVolumeChange((volume) => {\n this._voiceVolume = volume;\n notifyEventListeners(\n this._voiceVolumeSubscribers,\n undefined,\n \"Voice volume\",\n );\n }),\n );\n if (finishDetachedSetup()) return;\n\n unsubs.push(\n session.onTranscript((transcript) => {\n this._handleVoiceTranscript(transcript);\n }),\n );\n finishDetachedSetup();\n } catch (error) {\n if (this._voiceSession === session && this._voiceUnsubs === unsubs) {\n try {\n this.disconnectVoice();\n } catch (cleanupError) {\n console.error(\n \"[assistant-ui] Voice rollback cleanup threw\",\n cleanupError,\n );\n }\n } else {\n finishDetachedSetup();\n }\n throw error;\n }\n }\n\n private _currentAssistantMsg: ThreadAssistantMessage | null = null;\n\n private _handleVoiceTranscript(\n transcript: RealtimeVoiceAdapter.TranscriptItem,\n ) {\n this.ensureInitialized();\n\n if (transcript.role === \"user\") {\n this._finishVoiceAssistantMessage();\n this._currentAssistantMsg = null;\n\n if (transcript.isFinal) {\n this._voiceMessages.push({\n id: generateId(),\n role: \"user\",\n content: [{ type: \"text\", text: transcript.text }],\n metadata: { modality: \"voice\", custom: {} },\n createdAt: new Date(),\n status: { type: \"complete\", reason: \"unknown\" },\n attachments: [],\n });\n this._markVoiceMessagesDirty();\n this._notifySubscribers();\n }\n } else {\n const status: ThreadAssistantMessage[\"status\"] = transcript.isFinal\n ? { type: \"complete\", reason: \"stop\" }\n : { type: \"running\" };\n\n if (!this._currentAssistantMsg) {\n this._currentAssistantMsg = {\n id: generateId(),\n role: \"assistant\",\n content: [{ type: \"text\", text: transcript.text }],\n metadata: {\n unstable_state: this.state,\n unstable_annotations: [],\n unstable_data: [],\n steps: [],\n modality: \"voice\",\n custom: {},\n },\n status,\n createdAt: new Date(),\n };\n this._voiceMessages.push(this._currentAssistantMsg);\n } else {\n const idx = this._voiceMessages.indexOf(this._currentAssistantMsg);\n if (idx === -1) return;\n const updated: ThreadAssistantMessage = {\n ...this._currentAssistantMsg,\n content: [{ type: \"text\", text: transcript.text }],\n status,\n };\n this._voiceMessages[idx] = updated;\n this._currentAssistantMsg = updated;\n }\n\n if (transcript.isFinal) {\n this._currentAssistantMsg = null;\n }\n\n this._markVoiceMessagesDirty();\n this._notifySubscribers();\n }\n }\n\n private _finishVoiceAssistantMessage() {\n const last = this._voiceMessages.at(-1);\n if (last?.role === \"assistant\" && last.status.type === \"running\") {\n const idx = this._voiceMessages.length - 1;\n this._voiceMessages[idx] = {\n ...(last as ThreadAssistantMessage),\n status: { type: \"complete\", reason: \"stop\" },\n };\n this._markVoiceMessagesDirty();\n this._notifySubscribers();\n }\n }\n\n public disconnectVoice() {\n this._currentAssistantMsg = null;\n // Drain the shared list in place so reentrant setup cannot release the same handles again.\n const unsubs = this._voiceUnsubs.splice(0);\n this._voiceUnsubs = [];\n const session = this._voiceSession;\n this._voiceSession = undefined;\n this.voice = undefined;\n this._voiceVolume = 0;\n const stopSpeaking =\n this.speech && this._isVoiceMessage(this.speech.messageId)\n ? this._stopSpeaking\n : undefined;\n this._voiceMessages = [];\n this._markVoiceMessagesDirty();\n\n notifySubscribers([\n ...unsubs,\n ...(stopSpeaking ? [stopSpeaking] : []),\n ...(session ? [() => session.disconnect()] : []),\n () =>\n notifyEventListeners(\n this._voiceVolumeSubscribers,\n undefined,\n \"Voice volume\",\n ),\n () => this._notifySubscribers(),\n ]);\n }\n\n public muteVoice() {\n if (!this._voiceSession) throw new Error(\"No active voice session\");\n this._voiceSession.mute();\n this.voice = {\n ...this.voice!,\n isMuted: true,\n };\n this._notifySubscribers();\n }\n\n public unmuteVoice() {\n if (!this._voiceSession) throw new Error(\"No active voice session\");\n this._voiceSession.unmute();\n this.voice = {\n ...this.voice!,\n isMuted: false,\n };\n this._notifySubscribers();\n }\n\n protected ensureInitialized() {\n if (!this._isInitialized) {\n this._isInitialized = true;\n this._notifyEventSubscribers(\"initialize\", {});\n }\n }\n\n public export() {\n return this.repository.export();\n }\n\n public import(data: ExportedMessageRepository) {\n this.ensureInitialized();\n this.repository.clear();\n this.repository.import(data);\n this._notifySubscribers();\n }\n\n public reset(initialMessages?: readonly ThreadMessageLike[]) {\n this.import(ExportedMessageRepository.fromArray(initialMessages ?? []));\n }\n\n private _eventSubscribers = new Map<\n ThreadRuntimeEventType,\n Set<(payload?: unknown) => void>\n >();\n\n public unstable_on<E extends ThreadRuntimeEventType>(\n event: E,\n callback: ThreadRuntimeEventCallback<E>,\n ) {\n const wrapped = callback as (payload?: unknown) => void;\n if (event === \"modelContextUpdate\") {\n // provider.subscribe is `() => void`; pump the typed empty payload to the user callback.\n return (\n this._contextProvider.subscribe?.(() =>\n notifyEventListeners([wrapped], {}, `Thread runtime \"${event}\"`),\n ) ?? (() => {})\n );\n }\n\n let subscribers = this._eventSubscribers.get(event);\n if (!subscribers) {\n subscribers = new Set();\n this._eventSubscribers.set(event, subscribers);\n }\n subscribers.add(wrapped);\n\n // `initialize` latches: replay it (deferred) to subscribers that attach\n // after the thread already initialized, mirroring a BehaviorSubject.\n if (event === \"initialize\" && this._isInitialized) {\n queueMicrotask(() => {\n if (subscribers.has(wrapped)) {\n notifyEventListeners([wrapped], {}, `Thread runtime \"${event}\"`);\n }\n });\n }\n\n return () => {\n this._eventSubscribers.get(event)?.delete(wrapped);\n };\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"base-thread-runtime-core.js","names":["AppendMessage","TextMessagePart","ThreadAssistantMessage","ThreadMessage","Unsubscribe","ModelContextProvider","getThreadMessageText","generateId","ExportedMessageRepository","MessageRepository","captureThreadRuntimeGeneration","DefaultThreadComposerRuntimeCore","AddToolResultOptions","ResumeToolCallOptions","RespondToToolApprovalOptions","ThreadSuggestion","SubmitFeedbackOptions","ThreadRuntimeCore","SpeechState","VoiceSessionState","RuntimeCapabilities","ThreadRuntimeEventCallback","ThreadRuntimeEventPayload","ThreadRuntimeEventType","StartRunConfig","ResumeRunConfig","DefaultEditComposerRuntimeCore","SpeechSynthesisAdapter","FeedbackAdapter","AttachmentAdapter","RealtimeVoiceAdapter","ThreadMessageLike","notifyEventListeners","MessageNotSentError","gateInteractableComposerMetadata","BaseSubscribable","notifySubscribers","BaseThreadAdapters","speech","feedback","attachments","voice","BaseThreadRuntimeCore","_isInitialized","repository","adapters","isDisabled","isSendDisabled","isLoading","suggestions","extras","capabilities","append","message","deleteMessage","messageId","Promise","startRun","config","resumeRun","addToolResult","options","resumeToolCall","respondToToolApproval","cancelRun","exportExternalState","importExternalState","state","unstable_notifySessionReset","_voiceMessages","_voiceGeneration","_cachedMergedMessages","_cachedVoiceGeneration","_cachedMergedBase","_markVoiceMessagesDirty","_getBaseMessages","getMessages","_commitVoiceMessage","_message","_onMessageMetadataChanged","_previousMessage","_dropVoiceMessage","notify","index","findIndex","voiceMessage","id","splice","_notifySubscribers","messages","length","base","baseMessageIds","Set","map","filter","has","mostRecentAssistantMessage","this","role","metadata","unstable_state","composer","_contextProvider","constructor","getModelContext","enrichAppendMetadata","anchorId","parentId","parentIndex","m","composerMetadata","unstable_composerMetadata","slice","custom","_editComposers","Map","getEditComposer","get","_isVoiceMessage","some","_resolveAppendParent","at","beginEdit","Error","set","delete","getMessage","getMessageById","baseMessages","voiceIdx","undefined","getBranches","switchToBranch","branchId","_notifyEventSubscribers","event","E","payload","subscribers","_eventSubscribers","_notifyToolApprovalAnswered","toolCallId","toolName","approved","submitFeedback","type","comment","adapter","entry","trimmed","trim","submit","updatedMessage","submittedFeedback","addOrUpdateMessage","_currentAssistantMsg","_stopSpeaking","speak","previousStop","utterance","Utterance","error","notificationError","console","unsub","clear","cleanup","stop","cancel","update","status","subscribe","cleanupError","stopSpeaking","_voiceSession","Session","_voiceUnsubs","Array","_voiceVolume","_voiceVolumeSubscribers","getVoiceVolume","subscribeVoiceVolume","callback","add","_onVoiceConnected","_onVoiceDisconnected","_toVoiceSessionState","session","Status","mode","Mode","isMuted","canSendText","sendText","_isRunActive","runtime","isRunning","last","_getVoiceCommitBarrier","generation","aborted","resolve","wake","unsubscribe","removeEventListener","addEventListener","connectVoice","replacing","_disconnectVoice","connect","unsubs","finishDetachedSetup","currentMode","push","onStatusChange","_finishVoiceAssistantMessage","onModeChange","onVolumeChange","volume","onTranscript","transcript","_handleVoiceTranscript","_observeVoiceCommit","commit","catch","TranscriptItem","ensureInitialized","isFinal","_commitVoiceUserMessage","content","text","modality","createdAt","Date","reason","unstable_annotations","unstable_data","steps","idx","indexOf","updated","committed","_appendToVoiceSession","part","sourceId","enriched","notSent","cause","disconnectVoice","fireHook","disconnect","muteVoice","mute","unmuteVoice","unmute","export","import","data","reset","initialMessages","fromArray","unstable_on","wrapped","queueMicrotask"],"sources":["../../../src/runtime/base/base-thread-runtime-core.ts"],"sourcesContent":["import type {\n AppendMessage,\n TextMessagePart,\n ThreadAssistantMessage,\n ThreadMessage,\n} from \"../../types/message\";\nimport type { Unsubscribe } from \"../../types/unsubscribe\";\nimport type { ModelContextProvider } from \"../../model-context/types\";\nimport { getThreadMessageText } from \"../../utils/text\";\nimport { generateId } from \"../../utils/id\";\nimport {\n ExportedMessageRepository,\n MessageRepository,\n} from \"../utils/message-repository\";\nimport { captureThreadRuntimeGeneration } from \"../utils/thread-runtime-lifecycle\";\nimport { DefaultThreadComposerRuntimeCore } from \"./default-thread-composer-runtime-core\";\nimport type {\n AddToolResultOptions,\n ResumeToolCallOptions,\n RespondToToolApprovalOptions,\n ThreadSuggestion,\n SubmitFeedbackOptions,\n ThreadRuntimeCore,\n SpeechState,\n VoiceSessionState,\n RuntimeCapabilities,\n ThreadRuntimeEventCallback,\n ThreadRuntimeEventPayload,\n ThreadRuntimeEventType,\n StartRunConfig,\n ResumeRunConfig,\n} from \"../interfaces/thread-runtime-core\";\nimport { DefaultEditComposerRuntimeCore } from \"./default-edit-composer-runtime-core\";\nimport type { SpeechSynthesisAdapter } from \"../../adapters/speech\";\nimport type { FeedbackAdapter } from \"../../adapters/feedback\";\nimport type { AttachmentAdapter } from \"../../adapters/attachment\";\nimport type { RealtimeVoiceAdapter } from \"../../adapters/voice\";\nimport type { ThreadMessageLike } from \"../utils/thread-message-like\";\nimport { notifyEventListeners } from \"../../utils/notify-event-listeners\";\nimport { MessageNotSentError } from \"../../types/error\";\nimport { gateInteractableComposerMetadata } from \"../../model-context/interactable-composer-metadata\";\nimport {\n BaseSubscribable,\n notifySubscribers,\n} from \"../../subscribable/subscribable\";\n\ntype BaseThreadAdapters = {\n speech?: SpeechSynthesisAdapter | undefined;\n feedback?: FeedbackAdapter | undefined;\n attachments?: AttachmentAdapter | undefined;\n voice?: RealtimeVoiceAdapter | undefined;\n};\n\nexport abstract class BaseThreadRuntimeCore\n extends BaseSubscribable\n implements ThreadRuntimeCore\n{\n private _isInitialized = false;\n\n protected repository = new MessageRepository();\n public abstract get adapters(): BaseThreadAdapters | undefined;\n public abstract get isDisabled(): boolean;\n public abstract get isSendDisabled(): boolean;\n public abstract get isLoading(): boolean;\n public abstract get suggestions(): readonly ThreadSuggestion[];\n public abstract get extras(): unknown;\n\n public abstract get capabilities(): RuntimeCapabilities;\n public abstract append(message: AppendMessage): void;\n public abstract deleteMessage(messageId: string): void | Promise<void>;\n public abstract startRun(config: StartRunConfig): void;\n public abstract resumeRun(config: ResumeRunConfig): void;\n public abstract addToolResult(options: AddToolResultOptions): void;\n public abstract resumeToolCall(options: ResumeToolCallOptions): void;\n public abstract respondToToolApproval(\n options: RespondToToolApprovalOptions,\n ): Promise<void>;\n public abstract cancelRun(): void;\n public abstract exportExternalState(): any;\n public abstract importExternalState(state: any): void;\n public abstract unstable_notifySessionReset(): void;\n\n protected _voiceMessages: ThreadMessage[] = [];\n protected _voiceGeneration = 0;\n private _cachedMergedMessages: readonly ThreadMessage[] | null = null;\n private _cachedVoiceGeneration = -1;\n private _cachedMergedBase: readonly ThreadMessage[] | null = null;\n\n protected _markVoiceMessagesDirty() {\n this._voiceGeneration++;\n this._cachedMergedMessages = null;\n }\n\n protected _getBaseMessages(): readonly ThreadMessage[] {\n return this.repository.getMessages();\n }\n\n protected _commitVoiceMessage(\n _message: ThreadMessage,\n ): void | Promise<void> {}\n\n protected _onMessageMetadataChanged(\n _previousMessage: ThreadAssistantMessage,\n _message: ThreadAssistantMessage,\n ): void {}\n\n protected _dropVoiceMessage(messageId: string, notify: boolean) {\n const index = this._voiceMessages.findIndex(\n (voiceMessage) => voiceMessage.id === messageId,\n );\n if (index === -1) return;\n this._voiceMessages.splice(index, 1);\n this._markVoiceMessagesDirty();\n if (notify) this._notifySubscribers();\n }\n\n public get messages(): readonly ThreadMessage[] {\n if (this._voiceMessages.length === 0) {\n return this._getBaseMessages();\n }\n const base = this._getBaseMessages();\n if (\n this._cachedVoiceGeneration !== this._voiceGeneration ||\n this._cachedMergedBase !== base\n ) {\n const baseMessageIds = new Set(base.map((message) => message.id));\n this._cachedMergedMessages = [\n ...base,\n ...this._voiceMessages.filter(\n (message) => !baseMessageIds.has(message.id),\n ),\n ];\n this._cachedVoiceGeneration = this._voiceGeneration;\n this._cachedMergedBase = base;\n }\n return this._cachedMergedMessages!;\n }\n\n public get state() {\n let mostRecentAssistantMessage: (typeof this.messages)[number] | undefined;\n for (const message of this.messages) {\n if (message.role === \"assistant\") {\n mostRecentAssistantMessage = message;\n }\n }\n\n return mostRecentAssistantMessage?.metadata.unstable_state ?? null;\n }\n\n public readonly composer = new DefaultThreadComposerRuntimeCore(this);\n\n private readonly _contextProvider: ModelContextProvider;\n\n constructor(_contextProvider: ModelContextProvider) {\n super();\n this._contextProvider = _contextProvider;\n }\n\n public getModelContext() {\n return this._contextProvider.getModelContext();\n }\n\n /**\n * Stamps provider-contributed composer metadata onto an outgoing message.\n * Called at dispatch rather than in the composer, so programmatic sends are\n * covered too, and exactly once per message: a queued send is stamped when\n * it leaves the lane, never when it enters.\n *\n * Only user messages are stamped, matching the readers: both the version\n * fold and the model injection skip every other role.\n *\n * @param anchorId Message the gated branch prefix ends at. A queued send\n * passes the current tail, having waited through a run that grew the prefix\n * past the parent it was created with.\n */\n protected enrichAppendMetadata(\n message: AppendMessage,\n anchorId: string | null = message.parentId,\n ): AppendMessage {\n if (message.role !== \"user\") return message;\n const messages = this.messages;\n const parentIndex =\n anchorId === null ? -1 : messages.findIndex((m) => m.id === anchorId);\n const composerMetadata = gateInteractableComposerMetadata(\n this.getModelContext().unstable_composerMetadata,\n messages.slice(0, parentIndex + 1),\n );\n if (!composerMetadata) return message;\n return {\n ...message,\n metadata: {\n ...message.metadata,\n custom: { ...message.metadata?.custom, ...composerMetadata },\n },\n };\n }\n\n private _editComposers = new Map<string, DefaultEditComposerRuntimeCore>();\n public getEditComposer(messageId: string) {\n return this._editComposers.get(messageId);\n }\n protected _isVoiceMessage(messageId: string | null) {\n return (\n messageId !== null && this._voiceMessages.some((m) => m.id === messageId)\n );\n }\n\n protected _resolveAppendParent(parentId: string | null): string | null {\n return this._isVoiceMessage(parentId)\n ? (this._getBaseMessages().at(-1)?.id ?? null)\n : parentId;\n }\n\n public beginEdit(messageId: string) {\n if (this.voice)\n throw new Error(\n \"Cannot edit a message while a voice session is connected\",\n );\n if (this._isVoiceMessage(messageId)) {\n throw new Error(\"Voice transcript messages cannot be edited\");\n }\n if (this._editComposers.has(messageId))\n throw new Error(\"Edit already in progress\");\n\n this._editComposers.set(\n messageId,\n new DefaultEditComposerRuntimeCore(\n this,\n () => this._editComposers.delete(messageId),\n this.repository.getMessage(messageId),\n ),\n );\n this._notifySubscribers();\n }\n\n public getMessageById(messageId: string) {\n try {\n return this.repository.getMessage(messageId);\n } catch {\n // Check voice messages\n const baseMessages = this.repository.getMessages();\n const voiceIdx = this._voiceMessages.findIndex((m) => m.id === messageId);\n if (voiceIdx !== -1) {\n const parentId =\n voiceIdx > 0\n ? this._voiceMessages[voiceIdx - 1]!.id\n : (baseMessages.at(-1)?.id ?? null);\n return {\n parentId,\n message: this._voiceMessages[voiceIdx]!,\n index: baseMessages.length + voiceIdx,\n };\n }\n return undefined;\n }\n }\n\n public getBranches(messageId: string): string[] {\n if (this._voiceMessages.some((m) => m.id === messageId)) {\n return [];\n }\n return this.repository.getBranches(messageId);\n }\n\n public switchToBranch(branchId: string): void {\n this.repository.switchToBranch(branchId);\n this._notifySubscribers();\n }\n\n public _notifyEventSubscribers<E extends ThreadRuntimeEventType>(\n event: E,\n payload: ThreadRuntimeEventPayload[E],\n ) {\n const subscribers = this._eventSubscribers.get(event);\n if (!subscribers) return;\n\n notifyEventListeners(subscribers, payload, `Thread runtime \"${event}\"`);\n }\n\n protected _notifyToolApprovalAnswered(\n messageId: string,\n toolCallId: string,\n toolName: string,\n approved: boolean,\n ) {\n this._notifyEventSubscribers(\"toolApprovalAnswered\", {\n messageId,\n toolCallId,\n toolName,\n approved,\n });\n }\n\n public submitFeedback({ messageId, type, comment }: SubmitFeedbackOptions) {\n const adapter = this.adapters?.feedback;\n const entry = this.getMessageById(messageId);\n if (!entry) throw new Error(`Message not found: ${messageId}`);\n const { message, parentId } = entry;\n const trimmed = comment?.trim();\n const feedback = { type, ...(trimmed ? { comment: trimmed } : undefined) };\n adapter?.submit({ message, ...feedback });\n\n if (message.role === \"assistant\") {\n const updatedMessage: ThreadAssistantMessage = {\n ...message,\n metadata: {\n ...message.metadata,\n submittedFeedback: feedback,\n },\n };\n const voiceIdx = this._voiceMessages.findIndex(\n (voiceMessage) => voiceMessage.id === messageId,\n );\n if (voiceIdx === -1) {\n this.repository.addOrUpdateMessage(parentId, updatedMessage);\n this._onMessageMetadataChanged(message, updatedMessage);\n } else {\n this._voiceMessages[voiceIdx] = updatedMessage;\n if (this._currentAssistantMsg === message) {\n this._currentAssistantMsg = updatedMessage;\n }\n this._markVoiceMessagesDirty();\n }\n }\n\n this._notifySubscribers();\n }\n\n private _stopSpeaking: Unsubscribe | undefined;\n public speech: SpeechState | undefined;\n\n public speak(messageId: string) {\n const adapter = this.adapters?.speech;\n if (!adapter) throw new Error(\"Speech adapter not configured\");\n\n const entry = this.getMessageById(messageId);\n if (!entry) throw new Error(`Message not found: ${messageId}`);\n const { message } = entry;\n\n const previousStop = this._stopSpeaking;\n let utterance: SpeechSynthesisAdapter.Utterance;\n try {\n previousStop?.();\n utterance = adapter.speak(getThreadMessageText(message));\n } catch (error) {\n if (previousStop && !this._stopSpeaking) {\n try {\n this._notifySubscribers();\n } catch (notificationError) {\n console.error(\n \"[assistant-ui] Speech rollback notification threw\",\n notificationError,\n );\n }\n }\n throw error;\n }\n let unsub: Unsubscribe | undefined;\n const clear = () => {\n this._stopSpeaking = undefined;\n this.speech = undefined;\n const cleanup = unsub;\n unsub = undefined;\n cleanup?.();\n };\n const stop = () => {\n if (this._stopSpeaking !== stop) return;\n try {\n clear();\n } finally {\n utterance.cancel();\n }\n };\n const update = () => {\n if (this._stopSpeaking !== stop) return;\n if (utterance.status.type === \"ended\") {\n notifySubscribers([clear, () => this._notifySubscribers()]);\n } else {\n this.speech = { messageId, status: utterance.status };\n this._notifySubscribers();\n }\n };\n\n this._stopSpeaking = stop;\n try {\n unsub = utterance.subscribe(update);\n if (this._stopSpeaking !== stop) {\n unsub();\n return;\n }\n update();\n } catch (error) {\n if (this._stopSpeaking === stop) {\n try {\n notifySubscribers([stop, () => this._notifySubscribers()]);\n } catch (cleanupError) {\n console.error(\n \"[assistant-ui] Speech rollback cleanup threw\",\n cleanupError,\n );\n }\n }\n throw error;\n }\n }\n\n public stopSpeaking() {\n if (!this._stopSpeaking) throw new Error(\"No message is being spoken\");\n notifySubscribers([this._stopSpeaking, () => this._notifySubscribers()]);\n }\n\n private _voiceSession: RealtimeVoiceAdapter.Session | undefined;\n private _voiceUnsubs: Array<() => void> = [];\n public voice: VoiceSessionState | undefined;\n\n private _voiceVolume = 0;\n private _voiceVolumeSubscribers = new Set<() => void>();\n\n public getVoiceVolume = () => this._voiceVolume;\n\n public subscribeVoiceVolume = (callback: () => void): Unsubscribe => {\n this._voiceVolumeSubscribers.add(callback);\n return () => this._voiceVolumeSubscribers.delete(callback);\n };\n\n protected _onVoiceConnected(): void {}\n\n protected _onVoiceDisconnected(): void {}\n\n private _toVoiceSessionState(\n session: RealtimeVoiceAdapter.Session,\n status: RealtimeVoiceAdapter.Status,\n mode: RealtimeVoiceAdapter.Mode,\n ): VoiceSessionState {\n return {\n status,\n isMuted: session.isMuted,\n mode,\n canSendText: status.type === \"running\" && session.sendText !== undefined,\n };\n }\n\n protected _isRunActive(): boolean {\n const runtime: ThreadRuntimeCore = this;\n if (runtime.isRunning) return true;\n const last = this._getBaseMessages().at(-1);\n return (\n last?.role === \"assistant\" &&\n (last.status.type === \"running\" || last.status.type === \"requires-action\")\n );\n }\n\n /**\n * Waits for a pending history import before a voice message is committed.\n * The import may begin before or after the voice session connects, so the\n * loading state must be rechecked when the commit is ready to run. The wait\n * also ends when the runtime is invalidated, since a superseded runtime may\n * never learn that loading ended.\n */\n protected _getVoiceCommitBarrier(): Promise<void> | undefined {\n if (!this.isLoading) return undefined;\n const generation = captureThreadRuntimeGeneration(this);\n return (async () => {\n while (this.isLoading && !generation.aborted) {\n await new Promise<void>((resolve) => {\n const wake = () => {\n unsubscribe();\n generation.removeEventListener(\"abort\", wake);\n resolve();\n };\n const unsubscribe = this.subscribe(wake);\n generation.addEventListener(\"abort\", wake);\n });\n }\n })();\n }\n\n public connectVoice() {\n const adapter = this.adapters?.voice;\n if (!adapter) throw new Error(\"Voice adapter not configured\");\n if (this._isRunActive())\n throw new Error(\n \"Cannot start a voice session while a run is in progress or paused on a pending tool action\",\n );\n const replacing = this._voiceSession !== undefined;\n\n try {\n this._disconnectVoice(false);\n } catch (error) {\n console.error(\n \"[assistant-ui] Voice cleanup threw before reconnect\",\n error,\n );\n }\n\n let session: RealtimeVoiceAdapter.Session;\n try {\n session = adapter.connect({});\n } catch (error) {\n if (replacing && this._voiceSession === undefined)\n this._onVoiceDisconnected();\n throw error;\n }\n this._voiceSession = session;\n const unsubs: Array<() => void> = [];\n this._voiceUnsubs = unsubs;\n\n // The cleanup-list identity preserves ownership after an ended status clears the session.\n const finishDetachedSetup = () => {\n if (this._voiceSession === session && this._voiceUnsubs === unsubs) {\n return false;\n }\n\n try {\n notifySubscribers(unsubs.splice(0));\n } catch (error) {\n console.error(\n \"[assistant-ui] Detached voice setup cleanup threw\",\n error,\n );\n }\n return true;\n };\n\n try {\n let currentMode: RealtimeVoiceAdapter.Mode = \"listening\";\n\n this.voice = this._toVoiceSessionState(\n session,\n session.status,\n currentMode,\n );\n this._voiceVolume = 0;\n this._notifySubscribers();\n if (finishDetachedSetup()) return;\n\n unsubs.push(\n session.onStatusChange((status) => {\n if (this._voiceSession !== session) return;\n if (status.type === \"ended\") {\n this._finishVoiceAssistantMessage();\n this._voiceSession = undefined;\n this.voice = undefined;\n this._onVoiceDisconnected();\n } else {\n this.voice = this._toVoiceSessionState(\n session,\n status,\n currentMode,\n );\n }\n this._notifySubscribers();\n }),\n );\n if (finishDetachedSetup()) return;\n\n unsubs.push(\n session.onModeChange((mode) => {\n if (this._voiceSession !== session) return;\n currentMode = mode;\n if (this.voice) {\n this.voice = { ...this.voice, mode };\n this._notifySubscribers();\n }\n }),\n );\n if (finishDetachedSetup()) return;\n\n unsubs.push(\n session.onVolumeChange((volume) => {\n if (this._voiceSession !== session) return;\n this._voiceVolume = volume;\n notifyEventListeners(\n this._voiceVolumeSubscribers,\n undefined,\n \"Voice volume\",\n );\n }),\n );\n if (finishDetachedSetup()) return;\n\n unsubs.push(\n session.onTranscript((transcript) => {\n if (this._voiceSession !== session) return;\n this._handleVoiceTranscript(transcript);\n }),\n );\n if (!finishDetachedSetup()) this._onVoiceConnected();\n } catch (error) {\n if (this._voiceSession === session && this._voiceUnsubs === unsubs) {\n try {\n this._disconnectVoice(false);\n } catch (cleanupError) {\n console.error(\n \"[assistant-ui] Voice rollback cleanup threw\",\n cleanupError,\n );\n }\n if (replacing && this._voiceSession === undefined)\n this._onVoiceDisconnected();\n } else {\n finishDetachedSetup();\n }\n throw error;\n }\n }\n\n private _currentAssistantMsg: ThreadAssistantMessage | null = null;\n\n private _observeVoiceCommit(commit: void | Promise<void>) {\n void Promise.resolve(commit).catch((error) => {\n console.error(\"[assistant-ui] Voice message commit failed\", error);\n });\n }\n\n private _handleVoiceTranscript(\n transcript: RealtimeVoiceAdapter.TranscriptItem,\n ) {\n this.ensureInitialized();\n\n if (transcript.role === \"user\") {\n this._finishVoiceAssistantMessage();\n this._currentAssistantMsg = null;\n\n if (transcript.isFinal) {\n this._observeVoiceCommit(\n this._commitVoiceUserMessage({\n id: generateId(),\n role: \"user\",\n content: [{ type: \"text\", text: transcript.text }],\n metadata: { modality: \"voice\", custom: {} },\n createdAt: new Date(),\n attachments: [],\n }),\n );\n }\n } else {\n const status: ThreadAssistantMessage[\"status\"] = transcript.isFinal\n ? { type: \"complete\", reason: \"stop\" }\n : { type: \"running\" };\n\n if (!this._currentAssistantMsg) {\n this._currentAssistantMsg = {\n id: generateId(),\n role: \"assistant\",\n content: [{ type: \"text\", text: transcript.text }],\n metadata: {\n unstable_state: this.state,\n unstable_annotations: [],\n unstable_data: [],\n steps: [],\n modality: \"voice\",\n custom: {},\n },\n status,\n createdAt: new Date(),\n };\n this._voiceMessages.push(this._currentAssistantMsg);\n } else {\n const idx = this._voiceMessages.indexOf(this._currentAssistantMsg);\n if (idx === -1) return;\n const updated: ThreadAssistantMessage = {\n ...this._currentAssistantMsg,\n content: [{ type: \"text\", text: transcript.text }],\n status,\n };\n this._voiceMessages[idx] = updated;\n this._currentAssistantMsg = updated;\n }\n\n if (transcript.isFinal) {\n this._observeVoiceCommit(\n this._commitVoiceMessage(this._currentAssistantMsg),\n );\n this._currentAssistantMsg = null;\n }\n\n this._markVoiceMessagesDirty();\n this._notifySubscribers();\n }\n }\n\n private _commitVoiceUserMessage(message: ThreadMessage) {\n this._voiceMessages.push(message);\n const committed = this._commitVoiceMessage(message);\n this._markVoiceMessagesDirty();\n this._notifySubscribers();\n return committed;\n }\n\n protected async _appendToVoiceSession(message: AppendMessage) {\n const session = this._voiceSession;\n if (!this.voice?.canSendText || !session?.sendText)\n throw new Error(\n \"Cannot send a text message while a voice session is connected\",\n );\n const content = message.content.filter(\n (part): part is TextMessagePart => part.type === \"text\",\n );\n if (\n message.role !== \"user\" ||\n message.sourceId != null ||\n message.parentId !==\n this._resolveAppendParent(this.messages.at(-1)?.id ?? null) ||\n message.attachments?.length ||\n content.length !== message.content.length ||\n !content.some((part) => part.text.trim())\n )\n throw new Error(\n \"Only a plain text user message can be sent while a voice session is connected\",\n );\n\n const enriched = this.enrichAppendMetadata(message);\n this.ensureInitialized();\n const generation = captureThreadRuntimeGeneration(this);\n try {\n await session.sendText(getThreadMessageText(message));\n } catch (error) {\n if (generation.aborted) return;\n const notSent = new MessageNotSentError();\n notSent.cause = error;\n throw notSent;\n }\n if (generation.aborted) return;\n if (this._voiceSession !== session)\n throw new MessageNotSentError(\n \"The voice session ended before the typed message was recorded\",\n );\n this._finishVoiceAssistantMessage(false);\n this._currentAssistantMsg = null;\n await this._commitVoiceUserMessage({\n id: generateId(),\n role: \"user\",\n content,\n metadata: { custom: { ...enriched.metadata?.custom } },\n createdAt: message.createdAt,\n attachments: [],\n });\n }\n\n private _finishVoiceAssistantMessage(notify = true) {\n const last = this._voiceMessages.at(-1);\n if (last?.role === \"assistant\" && last.status.type === \"running\") {\n const idx = this._voiceMessages.length - 1;\n this._voiceMessages[idx] = {\n ...(last as ThreadAssistantMessage),\n status: { type: \"complete\", reason: \"stop\" },\n };\n this._observeVoiceCommit(\n this._commitVoiceMessage(this._voiceMessages[idx]!),\n );\n this._currentAssistantMsg = null;\n this._markVoiceMessagesDirty();\n if (notify) this._notifySubscribers();\n }\n }\n\n public disconnectVoice() {\n this._disconnectVoice(true);\n }\n\n private _disconnectVoice(fireHook: boolean) {\n this._finishVoiceAssistantMessage(false);\n this._currentAssistantMsg = null;\n // Drain the shared list in place so reentrant setup cannot release the same handles again.\n const unsubs = this._voiceUnsubs.splice(0);\n this._voiceUnsubs = [];\n const session = this._voiceSession;\n this._voiceSession = undefined;\n this.voice = undefined;\n this._voiceVolume = 0;\n const stopSpeaking =\n this.speech && this._isVoiceMessage(this.speech.messageId)\n ? this._stopSpeaking\n : undefined;\n this._voiceMessages = [];\n this._markVoiceMessagesDirty();\n\n try {\n notifySubscribers([\n ...unsubs,\n ...(stopSpeaking ? [stopSpeaking] : []),\n ...(session ? [() => session.disconnect()] : []),\n () =>\n notifyEventListeners(\n this._voiceVolumeSubscribers,\n undefined,\n \"Voice volume\",\n ),\n () => this._notifySubscribers(),\n ]);\n } finally {\n if (fireHook && session && this._voiceSession === undefined)\n this._onVoiceDisconnected();\n }\n }\n\n public muteVoice() {\n if (!this._voiceSession) throw new Error(\"No active voice session\");\n this._voiceSession.mute();\n this.voice = {\n ...this.voice!,\n isMuted: true,\n };\n this._notifySubscribers();\n }\n\n public unmuteVoice() {\n if (!this._voiceSession) throw new Error(\"No active voice session\");\n this._voiceSession.unmute();\n this.voice = {\n ...this.voice!,\n isMuted: false,\n };\n this._notifySubscribers();\n }\n\n protected ensureInitialized() {\n if (!this._isInitialized) {\n this._isInitialized = true;\n this._notifyEventSubscribers(\"initialize\", {});\n }\n }\n\n public export() {\n return this.repository.export();\n }\n\n public import(data: ExportedMessageRepository) {\n this.ensureInitialized();\n this.repository.clear();\n this.repository.import(data);\n this._notifySubscribers();\n }\n\n public reset(initialMessages?: readonly ThreadMessageLike[]) {\n this.import(ExportedMessageRepository.fromArray(initialMessages ?? []));\n }\n\n private _eventSubscribers = new Map<\n ThreadRuntimeEventType,\n Set<(payload?: unknown) => void>\n >();\n\n public unstable_on<E extends ThreadRuntimeEventType>(\n event: E,\n callback: ThreadRuntimeEventCallback<E>,\n ) {\n const wrapped = callback as (payload?: unknown) => void;\n if (event === \"modelContextUpdate\") {\n // provider.subscribe is `() => void`; pump the typed empty payload to the user callback.\n return (\n this._contextProvider.subscribe?.(() =>\n notifyEventListeners([wrapped], {}, `Thread runtime \"${event}\"`),\n ) ?? (() => {})\n );\n }\n\n let subscribers = this._eventSubscribers.get(event);\n if (!subscribers) {\n subscribers = new Set();\n this._eventSubscribers.set(event, subscribers);\n }\n subscribers.add(wrapped);\n\n // `initialize` latches: replay it (deferred) to subscribers that attach\n // after the thread already initialized, mirroring a BehaviorSubject.\n if (event === \"initialize\" && this._isInitialized) {\n queueMicrotask(() => {\n if (subscribers.has(wrapped)) {\n notifyEventListeners([wrapped], {}, `Thread runtime \"${event}\"`);\n }\n });\n }\n\n return () => {\n this._eventSubscribers.get(event)?.delete(wrapped);\n };\n }\n}\n"],"mappings":"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"}
@@ -1,34 +1,33 @@
1
- import { AppendMessage, ThreadMessage } from "../../types/message.js";
2
- import { AttachmentAdapter } from "../../adapters/attachment.js";
3
- import { DictationAdapter } from "../../adapters/speech.js";
4
- import { SendOptions } from "../interfaces/composer-runtime-core.js";
5
- import { ThreadRuntimeCore } from "../interfaces/thread-runtime-core.js";
1
+ import type { AppendMessage, ThreadMessage } from "../../types/message.js";
2
+ import type { AttachmentAdapter } from "../../adapters/attachment.js";
3
+ import type { DictationAdapter } from "../../adapters/speech.js";
4
+ import type { SendOptions } from "../interfaces/composer-runtime-core.js";
5
+ import type { ThreadRuntimeCore } from "../interfaces/thread-runtime-core.js";
6
6
  import { BaseComposerRuntimeCore } from "./base-composer-runtime-core.js";
7
- //#region src/runtime/base/default-edit-composer-runtime-core.d.ts
8
- declare class DefaultEditComposerRuntimeCore extends BaseComposerRuntimeCore {
9
- get canCancel(): boolean;
10
- get canSend(): boolean;
11
- protected getAttachmentAdapter(): AttachmentAdapter | undefined;
12
- protected getDictationAdapter(): DictationAdapter | undefined;
13
- private _nonTextPassthrough;
14
- private _parentId;
15
- private _sourceId;
16
- private runtime;
17
- private endEditCallback;
18
- constructor(runtime: ThreadRuntimeCore & {
19
- adapters?: {
20
- attachments?: AttachmentAdapter | undefined;
21
- dictation?: DictationAdapter | undefined;
22
- } | undefined;
23
- }, endEditCallback: () => void, { parentId, message }: {
24
- parentId: string | null;
25
- message: ThreadMessage;
26
- });
27
- get parentId(): string | null;
28
- get sourceId(): string | null;
29
- handleSend(message: Omit<AppendMessage, "parentId" | "sourceId">, options?: SendOptions): Promise<void>;
30
- handleCancel(): void;
7
+ export declare class DefaultEditComposerRuntimeCore extends BaseComposerRuntimeCore {
8
+ get canCancel(): boolean;
9
+ protected get detachesDraftOnSend(): boolean;
10
+ get canSend(): boolean;
11
+ protected getAttachmentAdapter(): AttachmentAdapter | undefined;
12
+ protected getDictationAdapter(): DictationAdapter | undefined;
13
+ private _nonTextPassthrough;
14
+ private _parentId;
15
+ private _sourceId;
16
+ private runtime;
17
+ private endEditCallback;
18
+ private _ended;
19
+ constructor(runtime: ThreadRuntimeCore & {
20
+ adapters?: {
21
+ attachments?: AttachmentAdapter | undefined;
22
+ dictation?: DictationAdapter | undefined;
23
+ } | undefined;
24
+ }, endEditCallback: () => void, { parentId, message }: {
25
+ parentId: string | null;
26
+ message: ThreadMessage;
27
+ });
28
+ get parentId(): string | null;
29
+ get sourceId(): string | null;
30
+ handleSend(message: Omit<AppendMessage, "parentId" | "sourceId">, options?: SendOptions): Promise<void>;
31
+ handleCancel(): void;
31
32
  }
32
- //#endregion
33
- export { DefaultEditComposerRuntimeCore };
34
33
  //# sourceMappingURL=default-edit-composer-runtime-core.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"default-edit-composer-runtime-core.d.ts","names":[],"sources":["../../../src/runtime/base/default-edit-composer-runtime-core.ts"],"mappings":";;;;;;;cAUa,uCAAuC;MACvC;MAIA;YAID,wBAAoB;YAIpB,uBAAmB;UAIrB;UACA;UACA;UACA;UAQA;EAGN,YAAA,SAAS;IACP;MAEM,cAAc;MACd,YAAY;;KAIpB,+BACE,UAAU;IAAa;IAAyB,SAAS;;MA6BlD;MAIA;EAIE,WACX,SAAS,KAAK,yCACd,UAAU,cAAW;EAqBhB"}
1
+ {"version":3,"file":"default-edit-composer-runtime-core.d.ts","sourceRoot":"","sources":["../../../src/runtime/base/default-edit-composer-runtime-core.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,+BAA4B;AAIxE,OAAO,KAAK,EAAE,iBAAiB,EAAE,qCAAkC;AACnE,OAAO,KAAK,EAAE,gBAAgB,EAAE,iCAA8B;AAC9D,OAAO,KAAK,EAAE,WAAW,EAAE,+CAA4C;AACvE,OAAO,KAAK,EAAE,iBAAiB,EAAE,6CAA0C;AAC3E,OAAO,EAAE,uBAAuB,EAAE,wCAAqC;AAEvE,qBAAa,8BAA+B,SAAQ,uBAAuB;IACzE,IAAW,SAAS,YAEnB;IAID,cAAuB,mBAAmB,YAEzC;IAED,IAAW,OAAO,YAEjB;IAED,SAAS,CAAC,oBAAoB;IAI9B,SAAS,CAAC,mBAAmB;IAI7B,OAAO,CAAC,mBAAmB,CAA8C;IACzE,OAAO,CAAC,SAAS,CAAgB;IACjC,OAAO,CAAC,SAAS,CAAgB;IACjC,OAAO,CAAC,OAAO,CAOb;IACF,OAAO,CAAC,eAAe,CAAa;IACpC,OAAO,CAAC,MAAM,CAAS;gBAGrB,OAAO,EAAE,iBAAiB,GAAG;QAC3B,QAAQ,CAAC,EACL;YACE,WAAW,CAAC,EAAE,iBAAiB,GAAG,SAAS,CAAC;YAC5C,SAAS,CAAC,EAAE,gBAAgB,GAAG,SAAS,CAAC;SAC1C,GACD,SAAS,CAAC;KACf,EACD,eAAe,EAAE,MAAM,IAAI,EAC3B,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE;QAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,OAAO,EAAE,aAAa,CAAA;KAAE;IAuC5E,IAAW,QAAQ,kBAElB;IAED,IAAW,QAAQ,kBAElB;IAEY,UAAU,CACrB,OAAO,EAAE,IAAI,CAAC,aAAa,EAAE,UAAU,GAAG,UAAU,CAAC,EACrD,OAAO,CAAC,EAAE,WAAW;IAqBhB,YAAY;CASpB"}