@assistant-ui/core 0.3.13 → 0.3.15

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 (463) hide show
  1. package/dist/adapters/speech.d.ts.map +1 -1
  2. package/dist/adapters/speech.js +9 -15
  3. package/dist/adapters/speech.js.map +1 -1
  4. package/dist/adapters/thread-history.d.ts +2 -0
  5. package/dist/adapters/thread-history.d.ts.map +1 -1
  6. package/dist/adapters/voice.d.ts.map +1 -1
  7. package/dist/adapters/voice.js +38 -15
  8. package/dist/adapters/voice.js.map +1 -1
  9. package/dist/index.d.ts +2 -2
  10. package/dist/index.js +1 -1
  11. package/dist/index.js.map +1 -1
  12. package/dist/internal.d.ts +3 -2
  13. package/dist/internal.js +8 -7
  14. package/dist/model-context/frame/host.d.ts +1 -1
  15. package/dist/model-context/frame/host.d.ts.map +1 -1
  16. package/dist/model-context/frame/host.js +19 -4
  17. package/dist/model-context/frame/host.js.map +1 -1
  18. package/dist/model-context/frame/provider.d.ts +4 -0
  19. package/dist/model-context/frame/provider.d.ts.map +1 -1
  20. package/dist/model-context/frame/provider.js +50 -3
  21. package/dist/model-context/frame/provider.js.map +1 -1
  22. package/dist/model-context/frame/types.d.ts +4 -1
  23. package/dist/model-context/frame/types.d.ts.map +1 -1
  24. package/dist/model-context/frame/types.js.map +1 -1
  25. package/dist/model-context/registry.d.ts.map +1 -1
  26. package/dist/model-context/registry.js +16 -4
  27. package/dist/model-context/registry.js.map +1 -1
  28. package/dist/react/RuntimeAdapter.d.ts +8 -1
  29. package/dist/react/RuntimeAdapter.d.ts.map +1 -1
  30. package/dist/react/RuntimeAdapter.js +23 -18
  31. package/dist/react/RuntimeAdapter.js.map +1 -1
  32. package/dist/react/adapters/LocalStorageThreadListAdapter.d.ts.map +1 -1
  33. package/dist/react/adapters/LocalStorageThreadListAdapter.js +28 -12
  34. package/dist/react/adapters/LocalStorageThreadListAdapter.js.map +1 -1
  35. package/dist/react/client/AdaptedRemoteThread.d.ts +11 -0
  36. package/dist/react/client/AdaptedRemoteThread.d.ts.map +1 -0
  37. package/dist/react/client/AdaptedRemoteThread.js +27 -0
  38. package/dist/react/client/AdaptedRemoteThread.js.map +1 -0
  39. package/dist/react/client/InMemoryThreadList.d.ts +19 -0
  40. package/dist/react/client/InMemoryThreadList.d.ts.map +1 -0
  41. package/dist/react/client/InMemoryThreadList.js +418 -0
  42. package/dist/react/client/InMemoryThreadList.js.map +1 -0
  43. package/dist/react/client/Interactables.d.ts.map +1 -1
  44. package/dist/react/client/Interactables.js +159 -102
  45. package/dist/react/client/Interactables.js.map +1 -1
  46. package/dist/react/client/RemoteThreadList.d.ts +34 -0
  47. package/dist/react/client/RemoteThreadList.d.ts.map +1 -0
  48. package/dist/react/client/RemoteThreadList.js +898 -0
  49. package/dist/react/client/RemoteThreadList.js.map +1 -0
  50. package/dist/react/client/Tools.d.ts.map +1 -1
  51. package/dist/react/client/Tools.js +38 -27
  52. package/dist/react/client/Tools.js.map +1 -1
  53. package/dist/react/index.d.ts +7 -2
  54. package/dist/react/index.js +5 -2
  55. package/dist/react/interactables-legacy/Interactables.d.ts.map +1 -1
  56. package/dist/react/interactables-legacy/Interactables.js +145 -110
  57. package/dist/react/interactables-legacy/Interactables.js.map +1 -1
  58. package/dist/react/primitive-hooks/useActionBarCopy.d.ts.map +1 -1
  59. package/dist/react/primitive-hooks/useActionBarCopy.js +20 -19
  60. package/dist/react/primitive-hooks/useActionBarCopy.js.map +1 -1
  61. package/dist/react/primitive-hooks/useActionBarEdit.d.ts.map +1 -1
  62. package/dist/react/primitive-hooks/useActionBarEdit.js +2 -4
  63. package/dist/react/primitive-hooks/useActionBarEdit.js.map +1 -1
  64. package/dist/react/primitive-hooks/useActionBarReload.d.ts.map +1 -1
  65. package/dist/react/primitive-hooks/useActionBarReload.js +2 -4
  66. package/dist/react/primitive-hooks/useActionBarReload.js.map +1 -1
  67. package/dist/react/primitive-hooks/useBranchPickerNext.d.ts.map +1 -1
  68. package/dist/react/primitive-hooks/useBranchPickerNext.js +2 -6
  69. package/dist/react/primitive-hooks/useBranchPickerNext.js.map +1 -1
  70. package/dist/react/primitive-hooks/useBranchPickerPrevious.d.ts.map +1 -1
  71. package/dist/react/primitive-hooks/useBranchPickerPrevious.js +2 -6
  72. package/dist/react/primitive-hooks/useBranchPickerPrevious.js.map +1 -1
  73. package/dist/react/primitive-hooks/useComposerCancel.d.ts.map +1 -1
  74. package/dist/react/primitive-hooks/useComposerCancel.js +2 -4
  75. package/dist/react/primitive-hooks/useComposerCancel.js.map +1 -1
  76. package/dist/react/primitive-hooks/useComposerSend.d.ts.map +1 -1
  77. package/dist/react/primitive-hooks/useComposerSend.js +2 -4
  78. package/dist/react/primitive-hooks/useComposerSend.js.map +1 -1
  79. package/dist/react/primitive-hooks/useSuggestionTrigger.d.ts.map +1 -1
  80. package/dist/react/primitive-hooks/useSuggestionTrigger.js +6 -2
  81. package/dist/react/primitive-hooks/useSuggestionTrigger.js.map +1 -1
  82. package/dist/react/primitive-hooks/useThreadIsEmpty.d.ts +3 -0
  83. package/dist/react/primitive-hooks/useThreadIsEmpty.d.ts.map +1 -1
  84. package/dist/react/primitive-hooks/useThreadIsEmpty.js +3 -0
  85. package/dist/react/primitive-hooks/useThreadIsEmpty.js.map +1 -1
  86. package/dist/react/primitive-hooks/useThreadIsRunning.d.ts +3 -0
  87. package/dist/react/primitive-hooks/useThreadIsRunning.d.ts.map +1 -1
  88. package/dist/react/primitive-hooks/useThreadIsRunning.js +3 -0
  89. package/dist/react/primitive-hooks/useThreadIsRunning.js.map +1 -1
  90. package/dist/react/primitives/message/MessageParts.d.ts +13 -0
  91. package/dist/react/primitives/message/MessageParts.d.ts.map +1 -1
  92. package/dist/react/primitives/message/MessageParts.js.map +1 -1
  93. package/dist/react/primitives/thread/ThreadMessages.d.ts.map +1 -1
  94. package/dist/react/primitives/thread/ThreadMessages.js +1 -1
  95. package/dist/react/primitives/thread/ThreadMessages.js.map +1 -1
  96. package/dist/react/runtimes/RemoteThreadListHookInstanceManager.d.ts +24 -10
  97. package/dist/react/runtimes/RemoteThreadListHookInstanceManager.d.ts.map +1 -1
  98. package/dist/react/runtimes/RemoteThreadListHookInstanceManager.js +115 -71
  99. package/dist/react/runtimes/RemoteThreadListHookInstanceManager.js.map +1 -1
  100. package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.d.ts +14 -2
  101. package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.d.ts.map +1 -1
  102. package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.js +232 -63
  103. package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.js.map +1 -1
  104. package/dist/react/runtimes/RemoteThreadResource.d.ts +30 -0
  105. package/dist/react/runtimes/RemoteThreadResource.d.ts.map +1 -0
  106. package/dist/react/runtimes/RemoteThreadResource.js +136 -0
  107. package/dist/react/runtimes/RemoteThreadResource.js.map +1 -0
  108. package/dist/react/runtimes/RuntimeAdapterProvider.d.ts +3 -10
  109. package/dist/react/runtimes/RuntimeAdapterProvider.d.ts.map +1 -1
  110. package/dist/react/runtimes/RuntimeAdapterProvider.js +3 -6
  111. package/dist/react/runtimes/RuntimeAdapterProvider.js.map +1 -1
  112. package/dist/react/runtimes/assistant-transport/commandQueue.d.ts +17 -0
  113. package/dist/react/runtimes/assistant-transport/commandQueue.d.ts.map +1 -0
  114. package/dist/react/runtimes/assistant-transport/commandQueue.js +55 -0
  115. package/dist/react/runtimes/assistant-transport/commandQueue.js.map +1 -0
  116. package/dist/react/runtimes/assistant-transport/replayBoundaryStream.d.ts +11 -0
  117. package/dist/react/runtimes/assistant-transport/replayBoundaryStream.d.ts.map +1 -0
  118. package/dist/react/runtimes/assistant-transport/replayBoundaryStream.js +165 -0
  119. package/dist/react/runtimes/assistant-transport/replayBoundaryStream.js.map +1 -0
  120. package/dist/react/runtimes/assistant-transport/runManager.d.ts +15 -0
  121. package/dist/react/runtimes/assistant-transport/runManager.d.ts.map +1 -0
  122. package/dist/react/runtimes/assistant-transport/runManager.js +86 -0
  123. package/dist/react/runtimes/assistant-transport/runManager.js.map +1 -0
  124. package/dist/react/runtimes/assistant-transport/types.d.ts +130 -0
  125. package/dist/react/runtimes/assistant-transport/types.d.ts.map +1 -0
  126. package/dist/react/runtimes/assistant-transport/types.js +0 -0
  127. package/dist/react/runtimes/assistant-transport/useAssistantTransportRuntime.d.ts +14 -0
  128. package/dist/react/runtimes/assistant-transport/useAssistantTransportRuntime.d.ts.map +1 -0
  129. package/dist/react/runtimes/assistant-transport/useAssistantTransportRuntime.js +296 -0
  130. package/dist/react/runtimes/assistant-transport/useAssistantTransportRuntime.js.map +1 -0
  131. package/dist/react/runtimes/assistant-transport/useConvertedState.d.ts +7 -0
  132. package/dist/react/runtimes/assistant-transport/useConvertedState.d.ts.map +1 -0
  133. package/dist/react/runtimes/assistant-transport/useConvertedState.js +25 -0
  134. package/dist/react/runtimes/assistant-transport/useConvertedState.js.map +1 -0
  135. package/dist/react/runtimes/assistant-transport/useLatestRef.d.ts +7 -0
  136. package/dist/react/runtimes/assistant-transport/useLatestRef.d.ts.map +1 -0
  137. package/dist/react/runtimes/assistant-transport/useLatestRef.js +27 -0
  138. package/dist/react/runtimes/assistant-transport/useLatestRef.js.map +1 -0
  139. package/dist/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.d.ts.map +1 -1
  140. package/dist/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.js +39 -13
  141. package/dist/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.js.map +1 -1
  142. package/dist/react/runtimes/cloud/CloudFileAttachmentAdapter.d.ts +2 -1
  143. package/dist/react/runtimes/cloud/CloudFileAttachmentAdapter.d.ts.map +1 -1
  144. package/dist/react/runtimes/cloud/CloudFileAttachmentAdapter.js +3 -3
  145. package/dist/react/runtimes/cloud/CloudFileAttachmentAdapter.js.map +1 -1
  146. package/dist/react/runtimes/cloud/auiV0.d.ts +4 -0
  147. package/dist/react/runtimes/cloud/auiV0.d.ts.map +1 -1
  148. package/dist/react/runtimes/cloud/auiV0.js +7 -0
  149. package/dist/react/runtimes/cloud/auiV0.js.map +1 -1
  150. package/dist/react/runtimes/cloud/useCloudThreadListAdapter.d.ts.map +1 -1
  151. package/dist/react/runtimes/cloud/useCloudThreadListAdapter.js +60 -17
  152. package/dist/react/runtimes/cloud/useCloudThreadListAdapter.js.map +1 -1
  153. package/dist/react/runtimes/cloud/useCloudThreadListRuntime.d.ts +16 -0
  154. package/dist/react/runtimes/cloud/useCloudThreadListRuntime.d.ts.map +1 -0
  155. package/dist/react/runtimes/cloud/useCloudThreadListRuntime.js +36 -0
  156. package/dist/react/runtimes/cloud/useCloudThreadListRuntime.js.map +1 -0
  157. package/dist/react/runtimes/external-message-converter.js +14 -14
  158. package/dist/react/runtimes/external-message-converter.js.map +1 -1
  159. package/dist/react/runtimes/useExternalStoreRuntime.d.ts.map +1 -1
  160. package/dist/react/runtimes/useExternalStoreRuntime.js +44 -28
  161. package/dist/react/runtimes/useExternalStoreRuntime.js.map +1 -1
  162. package/dist/react/runtimes/useExternalStoreSharedOptions.js.map +1 -1
  163. package/dist/react/runtimes/useLocalRuntime.js +1 -1
  164. package/dist/react/runtimes/useRuntimeAdapters.d.ts +9 -0
  165. package/dist/react/runtimes/useRuntimeAdapters.d.ts.map +1 -0
  166. package/dist/react/runtimes/useRuntimeAdapters.js +20 -0
  167. package/dist/react/runtimes/useRuntimeAdapters.js.map +1 -0
  168. package/dist/runtime/api/composer-runtime.d.ts +5 -0
  169. package/dist/runtime/api/composer-runtime.d.ts.map +1 -1
  170. package/dist/runtime/api/composer-runtime.js.map +1 -1
  171. package/dist/runtime/api/message-runtime.js +1 -1
  172. package/dist/runtime/api/thread-list-runtime.d.ts +1 -0
  173. package/dist/runtime/api/thread-list-runtime.d.ts.map +1 -1
  174. package/dist/runtime/api/thread-list-runtime.js +4 -2
  175. package/dist/runtime/api/thread-list-runtime.js.map +1 -1
  176. package/dist/runtime/api/thread-runtime.d.ts +12 -2
  177. package/dist/runtime/api/thread-runtime.d.ts.map +1 -1
  178. package/dist/runtime/api/thread-runtime.js +8 -2
  179. package/dist/runtime/api/thread-runtime.js.map +1 -1
  180. package/dist/runtime/base/base-composer-runtime-core.d.ts.map +1 -1
  181. package/dist/runtime/base/base-composer-runtime-core.js +8 -7
  182. package/dist/runtime/base/base-composer-runtime-core.js.map +1 -1
  183. package/dist/runtime/base/base-thread-runtime-core.d.ts +1 -0
  184. package/dist/runtime/base/base-thread-runtime-core.d.ts.map +1 -1
  185. package/dist/runtime/base/base-thread-runtime-core.js +3 -3
  186. package/dist/runtime/base/base-thread-runtime-core.js.map +1 -1
  187. package/dist/runtime/base/default-thread-composer-runtime-core.d.ts +0 -1
  188. package/dist/runtime/base/default-thread-composer-runtime-core.d.ts.map +1 -1
  189. package/dist/runtime/base/default-thread-composer-runtime-core.js +10 -4
  190. package/dist/runtime/base/default-thread-composer-runtime-core.js.map +1 -1
  191. package/dist/runtime/interfaces/thread-runtime-core.d.ts +6 -0
  192. package/dist/runtime/interfaces/thread-runtime-core.d.ts.map +1 -1
  193. package/dist/runtime/internal.js +5 -5
  194. package/dist/runtime/queue/message-queue.d.ts.map +1 -1
  195. package/dist/runtime/queue/message-queue.js +2 -1
  196. package/dist/runtime/queue/message-queue.js.map +1 -1
  197. package/dist/runtime/utils/message-repository.d.ts.map +1 -1
  198. package/dist/runtime/utils/message-repository.js +27 -18
  199. package/dist/runtime/utils/message-repository.js.map +1 -1
  200. package/dist/runtime/utils/thread-runtime-lifecycle.d.ts +8 -0
  201. package/dist/runtime/utils/thread-runtime-lifecycle.d.ts.map +1 -0
  202. package/dist/runtime/utils/thread-runtime-lifecycle.js +11 -0
  203. package/dist/runtime/utils/thread-runtime-lifecycle.js.map +1 -0
  204. package/dist/runtimes/external-store/external-store-shared-options.js.map +1 -1
  205. package/dist/runtimes/external-store/external-store-thread-list-runtime-core.d.ts.map +1 -1
  206. package/dist/runtimes/external-store/external-store-thread-list-runtime-core.js +4 -1
  207. package/dist/runtimes/external-store/external-store-thread-list-runtime-core.js.map +1 -1
  208. package/dist/runtimes/external-store/external-store-thread-runtime-core.d.ts +8 -0
  209. package/dist/runtimes/external-store/external-store-thread-runtime-core.d.ts.map +1 -1
  210. package/dist/runtimes/external-store/external-store-thread-runtime-core.js +37 -13
  211. package/dist/runtimes/external-store/external-store-thread-runtime-core.js.map +1 -1
  212. package/dist/runtimes/inert/InertThreadRuntimeCore.d.ts +102 -0
  213. package/dist/runtimes/inert/InertThreadRuntimeCore.d.ts.map +1 -0
  214. package/dist/runtimes/inert/InertThreadRuntimeCore.js +156 -0
  215. package/dist/runtimes/inert/InertThreadRuntimeCore.js.map +1 -0
  216. package/dist/runtimes/internal.d.ts +1 -1
  217. package/dist/runtimes/local/local-thread-runtime-core.d.ts +3 -0
  218. package/dist/runtimes/local/local-thread-runtime-core.d.ts.map +1 -1
  219. package/dist/runtimes/local/local-thread-runtime-core.js +78 -19
  220. package/dist/runtimes/local/local-thread-runtime-core.js.map +1 -1
  221. package/dist/runtimes/readonly/ReadonlyThreadRuntimeCore.d.ts +12 -59
  222. package/dist/runtimes/readonly/ReadonlyThreadRuntimeCore.d.ts.map +1 -1
  223. package/dist/runtimes/readonly/ReadonlyThreadRuntimeCore.js +10 -142
  224. package/dist/runtimes/readonly/ReadonlyThreadRuntimeCore.js.map +1 -1
  225. package/dist/runtimes/remote-thread-list/adapter-changed.d.ts +9 -0
  226. package/dist/runtimes/remote-thread-list/adapter-changed.d.ts.map +1 -0
  227. package/dist/runtimes/remote-thread-list/adapter-changed.js +13 -0
  228. package/dist/runtimes/remote-thread-list/adapter-changed.js.map +1 -0
  229. package/dist/runtimes/remote-thread-list/empty-thread-core.d.ts.map +1 -1
  230. package/dist/runtimes/remote-thread-list/empty-thread-core.js +16 -152
  231. package/dist/runtimes/remote-thread-list/empty-thread-core.js.map +1 -1
  232. package/dist/runtimes/remote-thread-list/optimistic-state.d.ts +2 -0
  233. package/dist/runtimes/remote-thread-list/optimistic-state.d.ts.map +1 -1
  234. package/dist/runtimes/remote-thread-list/optimistic-state.js +11 -0
  235. package/dist/runtimes/remote-thread-list/optimistic-state.js.map +1 -1
  236. package/dist/runtimes/remote-thread-list/types.d.ts +32 -1
  237. package/dist/runtimes/remote-thread-list/types.d.ts.map +1 -1
  238. package/dist/runtimes/tool-invocations/ToolInvocationTracker.d.ts +1 -12
  239. package/dist/runtimes/tool-invocations/ToolInvocationTracker.d.ts.map +1 -1
  240. package/dist/runtimes/tool-invocations/ToolInvocationTracker.js +67 -38
  241. package/dist/runtimes/tool-invocations/ToolInvocationTracker.js.map +1 -1
  242. package/dist/store/clients/external-thread.js +1 -1
  243. package/dist/store/clients/external-thread.js.map +1 -1
  244. package/dist/store/clients/suggestions.js +2 -2
  245. package/dist/store/clients/suggestions.js.map +1 -1
  246. package/dist/store/clients/thread-selection-events.d.ts +10 -0
  247. package/dist/store/clients/thread-selection-events.d.ts.map +1 -0
  248. package/dist/store/clients/thread-selection-events.js +40 -0
  249. package/dist/store/clients/thread-selection-events.js.map +1 -0
  250. package/dist/store/env.d.ts +5 -0
  251. package/dist/store/env.d.ts.map +1 -0
  252. package/dist/store/env.js +12 -0
  253. package/dist/store/env.js.map +1 -0
  254. package/dist/store/index.d.ts +5 -3
  255. package/dist/store/index.js +4 -2
  256. package/dist/store/internal.d.ts +4 -1
  257. package/dist/store/internal.js +4 -1
  258. package/dist/store/primitive-predicates.d.ts +19 -0
  259. package/dist/store/primitive-predicates.d.ts.map +1 -0
  260. package/dist/store/primitive-predicates.js +19 -0
  261. package/dist/store/primitive-predicates.js.map +1 -0
  262. package/dist/store/runtime-clients/attachment-runtime-client.d.ts.map +1 -1
  263. package/dist/store/runtime-clients/attachment-runtime-client.js +18 -11
  264. package/dist/store/runtime-clients/attachment-runtime-client.js.map +1 -1
  265. package/dist/store/runtime-clients/handle-runtime-action.d.ts +5 -0
  266. package/dist/store/runtime-clients/handle-runtime-action.d.ts.map +1 -0
  267. package/dist/store/runtime-clients/handle-runtime-action.js +14 -0
  268. package/dist/store/runtime-clients/handle-runtime-action.js.map +1 -0
  269. package/dist/store/runtime-clients/handle-thread-list-action.d.ts +5 -0
  270. package/dist/store/runtime-clients/handle-thread-list-action.d.ts.map +1 -0
  271. package/dist/store/runtime-clients/handle-thread-list-action.js +7 -0
  272. package/dist/store/runtime-clients/handle-thread-list-action.js.map +1 -0
  273. package/dist/store/runtime-clients/thread-list-item-runtime-client.d.ts.map +1 -1
  274. package/dist/store/runtime-clients/thread-list-item-runtime-client.js +62 -29
  275. package/dist/store/runtime-clients/thread-list-item-runtime-client.js.map +1 -1
  276. package/dist/store/runtime-clients/thread-list-runtime-client.d.ts.map +1 -1
  277. package/dist/store/runtime-clients/thread-list-runtime-client.js +5 -6
  278. package/dist/store/runtime-clients/thread-list-runtime-client.js.map +1 -1
  279. package/dist/store/scopes/composer.d.ts +9 -4
  280. package/dist/store/scopes/composer.d.ts.map +1 -1
  281. package/dist/store/scopes/thread-list-item.d.ts +7 -6
  282. package/dist/store/scopes/thread-list-item.d.ts.map +1 -1
  283. package/dist/store/scopes/thread.d.ts +8 -7
  284. package/dist/store/scopes/thread.d.ts.map +1 -1
  285. package/dist/store/scopes/threads.d.ts +17 -1
  286. package/dist/store/scopes/threads.d.ts.map +1 -1
  287. package/dist/subscribable/subscribable.d.ts +2 -1
  288. package/dist/subscribable/subscribable.d.ts.map +1 -1
  289. package/dist/subscribable/subscribable.js +23 -18
  290. package/dist/subscribable/subscribable.js.map +1 -1
  291. package/dist/types/message.d.ts +1 -1
  292. package/dist/types/message.js.map +1 -1
  293. package/dist/utils/composite-context-provider.d.ts +1 -0
  294. package/dist/utils/composite-context-provider.d.ts.map +1 -1
  295. package/dist/utils/composite-context-provider.js +25 -9
  296. package/dist/utils/composite-context-provider.js.map +1 -1
  297. package/dist/utils/notify-event-listeners.d.ts +2 -2
  298. package/dist/utils/notify-event-listeners.d.ts.map +1 -1
  299. package/dist/utils/notify-event-listeners.js +2 -2
  300. package/dist/utils/notify-event-listeners.js.map +1 -1
  301. package/dist/utils/silent-runtime-action.d.ts +6 -0
  302. package/dist/utils/silent-runtime-action.d.ts.map +1 -0
  303. package/dist/utils/silent-runtime-action.js +7 -0
  304. package/dist/utils/silent-runtime-action.js.map +1 -0
  305. package/package.json +8 -8
  306. package/src/adapters/speech.test.ts +118 -1
  307. package/src/adapters/speech.ts +21 -22
  308. package/src/adapters/thread-history.ts +2 -0
  309. package/src/adapters/voice.test.ts +134 -0
  310. package/src/adapters/voice.ts +35 -27
  311. package/src/index.ts +1 -0
  312. package/src/internal.ts +1 -0
  313. package/src/model-context/frame/host.test.ts +87 -5
  314. package/src/model-context/frame/host.ts +18 -4
  315. package/src/model-context/frame/provider.test.ts +347 -20
  316. package/src/model-context/frame/provider.ts +58 -2
  317. package/src/model-context/frame/types.ts +5 -0
  318. package/src/model-context/registry.test.ts +131 -0
  319. package/src/model-context/registry.ts +16 -6
  320. package/src/react/RuntimeAdapter.test.ts +2 -0
  321. package/src/react/RuntimeAdapter.ts +20 -8
  322. package/src/react/adapters/LocalStorageThreadListAdapter.tsx +34 -17
  323. package/src/react/client/AdaptedRemoteThread.ts +41 -0
  324. package/src/react/client/InMemoryThreadList.test.tsx +148 -0
  325. package/src/react/client/InMemoryThreadList.ts +290 -0
  326. package/src/react/client/Interactables.test.ts +326 -2
  327. package/src/react/client/Interactables.ts +227 -110
  328. package/src/react/client/RemoteThreadList.test.ts +1222 -0
  329. package/src/react/client/RemoteThreadList.ts +1136 -0
  330. package/src/react/client/Tools.ts +36 -29
  331. package/src/react/index.ts +13 -0
  332. package/src/react/interactables-legacy/Interactables.test.ts +317 -0
  333. package/src/react/interactables-legacy/Interactables.ts +204 -128
  334. package/src/react/primitive-hooks/useActionBarCopy.test.ts +15 -0
  335. package/src/react/primitive-hooks/useActionBarCopy.ts +15 -10
  336. package/src/react/primitive-hooks/useActionBarEdit.ts +2 -1
  337. package/src/react/primitive-hooks/useActionBarReload.ts +2 -6
  338. package/src/react/primitive-hooks/useBranchPickerNext.ts +2 -7
  339. package/src/react/primitive-hooks/useBranchPickerPrevious.ts +2 -7
  340. package/src/react/primitive-hooks/useComposerCancel.ts +2 -1
  341. package/src/react/primitive-hooks/useComposerSend.ts +2 -5
  342. package/src/react/primitive-hooks/useSuggestionTrigger.test.ts +11 -0
  343. package/src/react/primitive-hooks/useSuggestionTrigger.ts +4 -5
  344. package/src/react/primitive-hooks/useThreadIsEmpty.ts +3 -0
  345. package/src/react/primitive-hooks/useThreadIsRunning.ts +3 -0
  346. package/src/react/primitives/message/MessageParts.tsx +0 -1
  347. package/src/react/primitives/thread/ThreadMessages.tsx +2 -1
  348. package/src/react/runtimes/RemoteThreadListHookInstanceManager.retry.test.tsx +116 -0
  349. package/src/react/runtimes/RemoteThreadListHookInstanceManager.running.test.tsx +1 -1
  350. package/src/react/runtimes/RemoteThreadListHookInstanceManager.test.tsx +57 -6
  351. package/src/react/runtimes/RemoteThreadListHookInstanceManager.title.test.tsx +272 -0
  352. package/src/react/runtimes/RemoteThreadListHookInstanceManager.tsx +171 -124
  353. package/src/react/runtimes/RemoteThreadListThreadListRuntimeCore.republish.test.ts +87 -0
  354. package/src/react/runtimes/RemoteThreadListThreadListRuntimeCore.tsx +327 -83
  355. package/src/react/runtimes/RemoteThreadResource.test.ts +141 -0
  356. package/src/react/runtimes/RemoteThreadResource.ts +233 -0
  357. package/src/react/runtimes/RuntimeAdapterProvider.tsx +8 -20
  358. package/src/react/runtimes/assistant-transport/commandQueue.ts +68 -0
  359. package/src/react/runtimes/assistant-transport/replayBoundaryStream.test.ts +455 -0
  360. package/src/react/runtimes/assistant-transport/replayBoundaryStream.ts +172 -0
  361. package/src/react/runtimes/assistant-transport/runManager.ts +124 -0
  362. package/src/react/runtimes/assistant-transport/transport-delivery.test.tsx +79 -0
  363. package/src/react/runtimes/assistant-transport/transport-parentid.test.tsx +97 -0
  364. package/src/react/runtimes/assistant-transport/transport-scheduling.test.ts +414 -0
  365. package/src/react/runtimes/assistant-transport/types.ts +170 -0
  366. package/src/react/runtimes/assistant-transport/useAssistantTransport.spec.md +141 -0
  367. package/src/react/runtimes/assistant-transport/useAssistantTransportRuntime.test.tsx +683 -0
  368. package/src/react/runtimes/assistant-transport/useAssistantTransportRuntime.ts +483 -0
  369. package/src/react/runtimes/assistant-transport/useConvertedState.ts +20 -0
  370. package/src/react/runtimes/assistant-transport/useLatestRef.ts +9 -0
  371. package/src/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.test.tsx +131 -6
  372. package/src/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.ts +61 -15
  373. package/src/react/runtimes/cloud/CloudFileAttachmentAdapter.ts +6 -4
  374. package/src/react/runtimes/cloud/auiV0.ts +17 -1
  375. package/src/react/runtimes/cloud/useCloudThreadListAdapter.test.tsx +98 -3
  376. package/src/react/runtimes/cloud/useCloudThreadListAdapter.tsx +104 -27
  377. package/src/react/runtimes/cloud/useCloudThreadListRuntime.test.tsx +56 -0
  378. package/src/react/runtimes/cloud/useCloudThreadListRuntime.ts +31 -0
  379. package/src/react/runtimes/external-message-converter.test.ts +143 -0
  380. package/src/react/runtimes/external-message-converter.ts +41 -41
  381. package/src/react/runtimes/remote-thread-hook-on-tap.test.ts +58 -0
  382. package/src/react/runtimes/useExternalStoreRuntime.lifecycle.test.tsx +83 -0
  383. package/src/react/runtimes/useExternalStoreRuntime.suggestions.test.tsx +13 -3
  384. package/src/react/runtimes/useExternalStoreRuntime.ts +7 -0
  385. package/src/react/runtimes/useExternalStoreSharedOptions.ts +3 -1
  386. package/src/react/runtimes/useLocalRuntime.test.tsx +134 -8
  387. package/src/react/runtimes/useRuntimeAdapters.test.tsx +62 -0
  388. package/src/react/runtimes/useRuntimeAdapters.ts +28 -0
  389. package/src/runtime/api/composer-runtime.ts +5 -0
  390. package/src/runtime/api/thread-list-runtime.ts +3 -1
  391. package/src/runtime/api/thread-runtime.ts +20 -2
  392. package/src/runtime/base/base-composer-runtime-core.ts +6 -5
  393. package/src/runtime/base/base-thread-runtime-core.test.ts +191 -0
  394. package/src/runtime/base/base-thread-runtime-core.ts +11 -2
  395. package/src/runtime/base/default-thread-composer-runtime-core.ts +12 -4
  396. package/src/runtime/interfaces/thread-runtime-core.ts +6 -0
  397. package/src/runtime/queue/message-queue.ts +2 -1
  398. package/src/runtime/utils/message-repository.ts +26 -18
  399. package/src/runtime/utils/thread-runtime-lifecycle.ts +18 -0
  400. package/src/runtimes/external-store/external-store-shared-options.ts +3 -1
  401. package/src/runtimes/external-store/external-store-thread-list-runtime-core.ts +4 -1
  402. package/src/runtimes/external-store/external-store-thread-runtime-core.ts +103 -34
  403. package/src/runtimes/inert/InertThreadRuntimeCore.test.ts +253 -0
  404. package/src/runtimes/inert/InertThreadRuntimeCore.ts +232 -0
  405. package/src/runtimes/local/local-thread-runtime-core.test.ts +692 -4
  406. package/src/runtimes/local/local-thread-runtime-core.ts +117 -22
  407. package/src/runtimes/readonly/ReadonlyThreadRuntimeCore.ts +17 -205
  408. package/src/runtimes/remote-thread-list/adapter-changed.ts +10 -0
  409. package/src/runtimes/remote-thread-list/empty-thread-core.ts +28 -217
  410. package/src/runtimes/remote-thread-list/optimistic-state.test.ts +18 -0
  411. package/src/runtimes/remote-thread-list/optimistic-state.ts +13 -0
  412. package/src/runtimes/remote-thread-list/types.ts +34 -0
  413. package/src/runtimes/tool-invocations/EDGE_CASES.md +17 -6
  414. package/src/runtimes/tool-invocations/ToolInvocationTracker.test.ts +243 -0
  415. package/src/runtimes/tool-invocations/ToolInvocationTracker.ts +127 -61
  416. package/src/store/clients/external-thread.ts +1 -1
  417. package/src/store/clients/model-context-client.test.ts +16 -8
  418. package/src/store/clients/suggestions.ts +2 -2
  419. package/src/store/clients/thread-selection-events.ts +21 -0
  420. package/src/store/env.ts +11 -0
  421. package/src/store/index.ts +14 -1
  422. package/src/store/internal.ts +13 -0
  423. package/src/store/primitive-predicates.test.ts +184 -0
  424. package/src/store/primitive-predicates.ts +43 -0
  425. package/src/store/runtime-clients/attachment-runtime-client.test.ts +41 -0
  426. package/src/store/runtime-clients/attachment-runtime-client.ts +2 -1
  427. package/src/store/runtime-clients/handle-runtime-action.test.ts +40 -0
  428. package/src/store/runtime-clients/handle-runtime-action.ts +14 -0
  429. package/src/store/runtime-clients/handle-thread-list-action.test.ts +69 -0
  430. package/src/store/runtime-clients/handle-thread-list-action.ts +6 -0
  431. package/src/store/runtime-clients/thread-list-item-runtime-client.ts +15 -7
  432. package/src/store/runtime-clients/thread-list-runtime-client.ts +9 -6
  433. package/src/store/scopes/composer.ts +9 -4
  434. package/src/store/scopes/thread-list-item.ts +7 -6
  435. package/src/store/scopes/thread.ts +8 -7
  436. package/src/store/scopes/threads.ts +14 -0
  437. package/src/subscribable/subscribable.test.ts +77 -1
  438. package/src/subscribable/subscribable.ts +38 -23
  439. package/src/tests/MessageRepository.test.ts +48 -0
  440. package/src/tests/RemoteThreadListThreadListRuntimeCore-errors.test.ts +2 -2
  441. package/src/tests/RemoteThreadListThreadListRuntimeCore-loadMore.test.ts +8 -6
  442. package/src/tests/RemoteThreadListThreadListRuntimeCore-switchToThread-unarchive.test.ts +25 -0
  443. package/src/tests/auiV0Encode.test.ts +66 -0
  444. package/src/tests/base-composer-runtime-core-send.test.ts +30 -0
  445. package/src/tests/base-composer-runtime-core.test.ts +28 -0
  446. package/src/tests/composer-can-cancel.test.ts +101 -0
  447. package/src/tests/empty-thread-core.test.ts +6 -0
  448. package/src/tests/external-store-thread-list-runtime-core.test.ts +101 -0
  449. package/src/tests/external-store-thread-runtime-core-adapter.test.ts +211 -1
  450. package/src/tests/external-store-thread-runtime-core.test.ts +124 -0
  451. package/src/tests/external-thread-isEmpty.test.tsx +100 -0
  452. package/src/tests/interactables-toolui-migration.test.tsx +66 -0
  453. package/src/tests/message-queue.test.ts +28 -0
  454. package/src/tests/remote-thread-list-adapter-switch.test.ts +383 -0
  455. package/src/tests/session-reset-notification.test.ts +145 -0
  456. package/src/tests/thread-switch-events.test.tsx +99 -1
  457. package/src/tests/tools-scope-migration.test.tsx +58 -0
  458. package/src/tests/useRemoteThreadListRuntime-controlled.test.tsx +67 -0
  459. package/src/types/message.ts +1 -1
  460. package/src/utils/composite-context-provider.test.ts +139 -0
  461. package/src/utils/composite-context-provider.ts +26 -8
  462. package/src/utils/notify-event-listeners.ts +10 -5
  463. package/src/utils/silent-runtime-action.ts +6 -0
@@ -22,7 +22,7 @@ import type {
22
22
  ThreadAssistantMessage,
23
23
  } from "../../types/message";
24
24
  import type { RunConfig } from "../../types/message";
25
- import { toAssistantError } from "../../types/error";
25
+ import { MessageNotSentError, toAssistantError } from "../../types/error";
26
26
  import type { ModelContextProvider } from "../../model-context/types";
27
27
  import {
28
28
  createMessageQueue,
@@ -33,6 +33,11 @@ import {
33
33
  EMPTY_QUEUE_ITEMS,
34
34
  type QueueItemState,
35
35
  } from "../../store/scopes/queue-item";
36
+ import {
37
+ captureThreadRuntimeGeneration,
38
+ invalidateThreadRuntime,
39
+ isThreadRuntimeGenerationCurrent,
40
+ } from "../../runtime/utils/thread-runtime-lifecycle";
36
41
 
37
42
  class AbortError extends Error {
38
43
  override name = "AbortError";
@@ -162,6 +167,7 @@ export class LocalThreadRuntimeCore
162
167
  public __internal_setOptions(options: LocalRuntimeOptionsBase) {
163
168
  if (this._options === options) return;
164
169
 
170
+ const previousHistory = this._options?.adapters.history;
165
171
  this._options = options;
166
172
 
167
173
  let hasUpdates = false;
@@ -234,13 +240,31 @@ export class LocalThreadRuntimeCore
234
240
  }
235
241
 
236
242
  if (hasUpdates) this._notifySubscribers();
243
+
244
+ if (
245
+ this._loadRequested &&
246
+ !this._loadPromise &&
247
+ !previousHistory &&
248
+ options.adapters.history &&
249
+ this.messages.length === 0
250
+ ) {
251
+ void this.__internal_load().catch((error: unknown) => {
252
+ console.error(
253
+ "[assistant-ui] local thread history load failed:",
254
+ error,
255
+ );
256
+ });
257
+ }
237
258
  }
238
259
 
239
260
  private _loadPromise: Promise<void> | undefined;
261
+ private _loadRequested = false;
240
262
  public __internal_load() {
263
+ this._loadRequested = true;
241
264
  if (this._loadPromise) return this._loadPromise;
265
+ if (!this.adapters.history) return Promise.resolve();
242
266
 
243
- const promise = this.adapters.history?.load() ?? Promise.resolve(null);
267
+ const promise = this.adapters.history.load();
244
268
 
245
269
  this._isLoading = true;
246
270
  this._notifySubscribers();
@@ -312,38 +336,72 @@ export class LocalThreadRuntimeCore
312
336
  this._queue?.adapter.remove(queueItemId);
313
337
  }
314
338
 
339
+ private _rollbackAppend(messageId: string) {
340
+ try {
341
+ this.repository.deleteMessage(messageId);
342
+ } catch {
343
+ return;
344
+ }
345
+ this._notifySubscribers();
346
+ }
347
+
315
348
  private async _runAppend(rawMessage: AppendMessage): Promise<void> {
316
349
  // Stamped here rather than in `append` so a queued message is gated after
317
350
  // the flush re-pointed its parentId at the current tail.
351
+ const generation = captureThreadRuntimeGeneration(this);
318
352
  const message = this.enrichAppendMetadata(rawMessage);
319
353
  this.ensureInitialized();
320
354
 
321
- const initPromise = this._getInitializePromise?.();
322
- if (initPromise) {
323
- await initPromise;
324
- }
325
-
326
355
  const newMessage = fromThreadMessageLike(message, generateId(), {
327
356
  type: "complete",
328
357
  reason: "unknown",
329
358
  });
330
359
  this.repository.addOrUpdateMessage(message.parentId, newMessage);
331
- this._options.adapters.history?.append({
360
+ this._notifySubscribers();
361
+
362
+ // Initialization only gates the history write and the run; the message
363
+ // is already on screen. A failed barrier rolls the optimistic message
364
+ // back and rejects as an unsent message so the composer restores the
365
+ // draft; a thread invalidated mid-wait rolls back silently.
366
+ try {
367
+ const initPromise = this._getInitializePromise?.();
368
+ if (initPromise) {
369
+ await initPromise;
370
+ }
371
+ } catch (error) {
372
+ this._rollbackAppend(newMessage.id);
373
+ if (!isThreadRuntimeGenerationCurrent(this, generation)) return;
374
+ const notSent = new MessageNotSentError();
375
+ notSent.cause = error;
376
+ throw notSent;
377
+ }
378
+ if (!isThreadRuntimeGenerationCurrent(this, generation)) {
379
+ this._rollbackAppend(newMessage.id);
380
+ return;
381
+ }
382
+ const historyWrite = this._options.adapters.history?.append({
332
383
  parentId: message.parentId,
333
384
  message: newMessage,
334
385
  ...(message.runConfig !== undefined && { runConfig: message.runConfig }),
335
386
  });
387
+ void historyWrite?.catch(() => {});
336
388
 
337
389
  const startRun = message.startRun ?? message.role === "user";
338
390
  if (startRun) {
339
- await this.startRun({
340
- parentId: newMessage.id,
341
- sourceId: message.sourceId,
342
- runConfig: message.runConfig ?? {},
343
- });
391
+ const [runResult, historyResult] = await Promise.allSettled([
392
+ this.startRun({
393
+ parentId: newMessage.id,
394
+ sourceId: message.sourceId,
395
+ runConfig: message.runConfig ?? {},
396
+ }),
397
+ historyWrite,
398
+ ]);
399
+ if (runResult.status === "rejected") throw runResult.reason;
400
+ if (historyResult.status === "rejected") throw historyResult.reason;
344
401
  } else {
345
402
  this.repository.resetHead(newMessage.id);
346
403
  this._notifySubscribers();
404
+ await historyWrite;
347
405
  }
348
406
  }
349
407
 
@@ -380,6 +438,10 @@ export class LocalThreadRuntimeCore
380
438
  throw new Error("Runtime does not support importing external states.");
381
439
  }
382
440
 
441
+ public unstable_notifySessionReset(): void {
442
+ throw new Error("Runtime does not support resetting sessions.");
443
+ }
444
+
383
445
  public async startRun(
384
446
  { parentId, runConfig }: StartRunConfig,
385
447
  runCallback?: ChatModelAdapter["run"],
@@ -424,6 +486,7 @@ export class LocalThreadRuntimeCore
424
486
  this._activeRun = run;
425
487
  this._runGeneration++;
426
488
 
489
+ let active = false;
427
490
  try {
428
491
  // mark busy for runs not started through the queue (regenerate, resume)
429
492
  this._queue?.notifyBusy();
@@ -438,16 +501,18 @@ export class LocalThreadRuntimeCore
438
501
  message,
439
502
  runConfig,
440
503
  alreadyPersisted,
504
+ run,
441
505
  runCallback,
442
506
  );
443
507
  runCallback = undefined;
508
+ if (this._activeRun !== run) break;
444
509
  } while (shouldContinue(message, this._options.unstable_humanToolNames));
445
510
  } finally {
446
511
  this._notifyEventSubscribers("runEnd", {});
447
512
  // the settle belongs to this run only while it is still the active run
448
513
  // or was cancelled (the engine expects a cancelled run's settle); a run
449
514
  // superseded by a newer one stays silent
450
- const active = this._activeRun === run;
515
+ active = this._activeRun === run;
451
516
  if (active) this._activeRun = null;
452
517
  if (active || run.cancelled) {
453
518
  queueMicrotask(() => this._queue?.notifyIdle());
@@ -455,6 +520,7 @@ export class LocalThreadRuntimeCore
455
520
  }
456
521
 
457
522
  if (
523
+ active &&
458
524
  this.adapters.suggestion &&
459
525
  message.status?.type !== "requires-action"
460
526
  ) {
@@ -484,6 +550,7 @@ export class LocalThreadRuntimeCore
484
550
  message: ThreadAssistantMessage,
485
551
  runConfig: RunConfig | undefined,
486
552
  alreadyPersisted: boolean,
553
+ run: { cancelled: boolean },
487
554
  runCallback?: ChatModelAdapter["run"],
488
555
  ) {
489
556
  const messages = parentId ? this.repository.getMessages(parentId) : [];
@@ -498,7 +565,23 @@ export class LocalThreadRuntimeCore
498
565
  const initialData = message.metadata?.unstable_data;
499
566
  const initialSteps = message.metadata?.steps;
500
567
  const initialCustom = message.metadata?.custom;
568
+ let hasStoredMessage = true;
569
+ try {
570
+ this.repository.getMessage(message.id);
571
+ } catch {
572
+ hasStoredMessage = false;
573
+ }
574
+ // Other writers replace the stored message object, so identity distinguishes this run from a newer owner.
575
+ const ownsMessage = () => {
576
+ if (!hasStoredMessage) return this._activeRun === run;
577
+ try {
578
+ return this.repository.getMessage(message.id).message === message;
579
+ } catch {
580
+ return false;
581
+ }
582
+ };
501
583
  const updateMessage = (m: Partial<ChatModelRunResult>) => {
584
+ if (!ownsMessage()) return;
502
585
  const newSteps = m.metadata?.steps;
503
586
  const steps = newSteps
504
587
  ? [...(initialSteps ?? []), ...newSteps]
@@ -545,6 +628,7 @@ export class LocalThreadRuntimeCore
545
628
  : undefined),
546
629
  };
547
630
  this.repository.addOrUpdateMessage(parentId, message);
631
+ hasStoredMessage = true;
548
632
  this._notifySubscribers();
549
633
  };
550
634
 
@@ -583,6 +667,12 @@ export class LocalThreadRuntimeCore
583
667
  this.adapters.chatModel.run.bind(this.adapters.chatModel);
584
668
 
585
669
  const abortSignal = abortController.signal;
670
+ const shouldCancelMessage = () =>
671
+ abortSignal.aborted &&
672
+ (message.status.type === "running" ||
673
+ (message.status.type === "requires-action" &&
674
+ (this._activeRun !== run ||
675
+ shouldContinue(message, this._options.unstable_humanToolNames))));
586
676
  const threadId = this._getThreadId?.();
587
677
  const promiseOrGenerator = runCallback({
588
678
  messages,
@@ -601,9 +691,11 @@ export class LocalThreadRuntimeCore
601
691
  if (Symbol.asyncIterator in promiseOrGenerator) {
602
692
  for await (const r of promiseOrGenerator) {
603
693
  if (abortSignal.aborted) {
604
- updateMessage({
605
- status: { type: "incomplete", reason: "cancelled" },
606
- });
694
+ if (shouldCancelMessage()) {
695
+ updateMessage({
696
+ status: { type: "incomplete", reason: "cancelled" },
697
+ });
698
+ }
607
699
  break;
608
700
  }
609
701
 
@@ -613,11 +705,13 @@ export class LocalThreadRuntimeCore
613
705
  updateMessage(await promiseOrGenerator);
614
706
  }
615
707
 
616
- if (message.status.type === "running") {
708
+ if (shouldCancelMessage()) {
709
+ updateMessage({
710
+ status: { type: "incomplete", reason: "cancelled" },
711
+ });
712
+ } else if (message.status.type === "running") {
617
713
  updateMessage({
618
- status: abortSignal.aborted
619
- ? { type: "incomplete", reason: "cancelled" }
620
- : { type: "complete", reason: "unknown" },
714
+ status: { type: "complete", reason: "unknown" },
621
715
  });
622
716
  }
623
717
  } catch (e) {
@@ -660,7 +754,7 @@ export class LocalThreadRuntimeCore
660
754
 
661
755
  // Pauses are written only for adapters that can rewrite the entry later;
662
756
  // an append-only adapter would strand a half-finished run in history.
663
- if (isTerminal || (isPausing && history?.update)) {
757
+ if (ownsMessage() && (isTerminal || (isPausing && history?.update))) {
664
758
  const write =
665
759
  alreadyPersisted && history?.update
666
760
  ? history.update.bind(history)
@@ -674,6 +768,7 @@ export class LocalThreadRuntimeCore
674
768
  }
675
769
 
676
770
  public detach() {
771
+ invalidateThreadRuntime(this);
677
772
  // drop the queue so pending items cannot dispatch on a detached thread
678
773
  this._queue = null;
679
774
  const error = new AbortError(true);
@@ -1,16 +1,18 @@
1
- import type { Unsubscribe } from "../../types/unsubscribe";
2
1
  import type { ThreadMessage } from "../../types/message";
3
- import type { ThreadRuntimeCore } from "../../runtime/interfaces/thread-runtime-core";
4
- import { BaseSubscribable } from "../../subscribable/subscribable";
2
+ import {
3
+ InertThreadRuntimeCore,
4
+ createInertComposer,
5
+ } from "../inert/InertThreadRuntimeCore";
5
6
 
6
7
  const READONLY_THREAD_ERROR = new Error(
7
8
  "This is a readonly thread. You cannot perform mutations on readonly threads.",
8
9
  );
9
10
 
10
- export class ReadonlyThreadRuntimeCore
11
- extends BaseSubscribable
12
- implements ThreadRuntimeCore
13
- {
11
+ export class ReadonlyThreadRuntimeCore extends InertThreadRuntimeCore {
12
+ protected get error() {
13
+ return READONLY_THREAD_ERROR;
14
+ }
15
+
14
16
  private _messages: readonly ThreadMessage[] = [];
15
17
 
16
18
  get messages() {
@@ -39,198 +41,6 @@ export class ReadonlyThreadRuntimeCore
39
41
  return [messageId];
40
42
  }
41
43
 
42
- switchToBranch(): void {
43
- throw READONLY_THREAD_ERROR;
44
- }
45
-
46
- append(): void {
47
- throw READONLY_THREAD_ERROR;
48
- }
49
-
50
- deleteMessage(): void {
51
- throw READONLY_THREAD_ERROR;
52
- }
53
-
54
- startRun(): void {
55
- throw READONLY_THREAD_ERROR;
56
- }
57
-
58
- resumeRun(): void {
59
- throw READONLY_THREAD_ERROR;
60
- }
61
-
62
- cancelRun(): void {}
63
-
64
- addToolResult(): void {
65
- throw READONLY_THREAD_ERROR;
66
- }
67
-
68
- resumeToolCall(): void {
69
- throw READONLY_THREAD_ERROR;
70
- }
71
-
72
- respondToToolApproval(): void {
73
- throw READONLY_THREAD_ERROR;
74
- }
75
-
76
- speak(): void {
77
- throw READONLY_THREAD_ERROR;
78
- }
79
-
80
- stopSpeaking(): void {}
81
-
82
- connectVoice(): void {
83
- throw READONLY_THREAD_ERROR;
84
- }
85
-
86
- disconnectVoice(): void {}
87
-
88
- getVoiceVolume = () => 0;
89
- subscribeVoiceVolume = (): Unsubscribe => () => {};
90
-
91
- muteVoice(): void {
92
- throw READONLY_THREAD_ERROR;
93
- }
94
-
95
- unmuteVoice(): void {
96
- throw READONLY_THREAD_ERROR;
97
- }
98
-
99
- submitFeedback(): void {
100
- throw READONLY_THREAD_ERROR;
101
- }
102
-
103
- getModelContext() {
104
- return {};
105
- }
106
-
107
- exportExternalState() {
108
- throw READONLY_THREAD_ERROR;
109
- }
110
-
111
- importExternalState(): void {
112
- throw READONLY_THREAD_ERROR;
113
- }
114
-
115
- composer = {
116
- attachments: [] as never[],
117
- attachmentAccept: "*",
118
-
119
- async addAttachment() {
120
- throw READONLY_THREAD_ERROR;
121
- },
122
-
123
- async removeAttachment() {
124
- throw READONLY_THREAD_ERROR;
125
- },
126
-
127
- isEditing: false as const,
128
- canCancel: false,
129
- canSend: false,
130
- isEmpty: true,
131
- text: "",
132
-
133
- setText() {
134
- throw READONLY_THREAD_ERROR;
135
- },
136
-
137
- role: "user" as const,
138
-
139
- setRole() {
140
- throw READONLY_THREAD_ERROR;
141
- },
142
-
143
- runConfig: {},
144
-
145
- setRunConfig() {
146
- throw READONLY_THREAD_ERROR;
147
- },
148
-
149
- async reset() {
150
- // noop
151
- },
152
-
153
- async clearAttachments() {
154
- // noop
155
- },
156
-
157
- send() {
158
- throw READONLY_THREAD_ERROR;
159
- },
160
-
161
- cancel() {
162
- // noop
163
- },
164
-
165
- queue: [] as never[],
166
- moveQueueItem() {},
167
- removeQueueItem() {},
168
-
169
- dictation: undefined,
170
-
171
- startDictation() {
172
- throw READONLY_THREAD_ERROR;
173
- },
174
-
175
- stopDictation() {
176
- // noop
177
- },
178
-
179
- quote: undefined,
180
-
181
- setQuote() {
182
- throw READONLY_THREAD_ERROR;
183
- },
184
-
185
- subscribe() {
186
- return () => {};
187
- },
188
-
189
- unstable_on() {
190
- return () => {};
191
- },
192
- };
193
-
194
- getEditComposer() {
195
- return undefined;
196
- }
197
-
198
- beginEdit(): void {
199
- throw READONLY_THREAD_ERROR;
200
- }
201
-
202
- speech = undefined;
203
- voice = undefined;
204
-
205
- capabilities = {
206
- switchToBranch: false,
207
- switchBranchDuringRun: false,
208
- edit: false,
209
- delete: false,
210
- reload: false,
211
- refetchThread: false,
212
- cancel: false,
213
- unstable_copy: false,
214
- speech: false,
215
- dictation: false,
216
- voice: false,
217
- attachments: false,
218
- feedback: false,
219
- queue: false,
220
- } as const;
221
-
222
- isDisabled = false;
223
- isSendDisabled = false;
224
- isLoading = false;
225
-
226
- state = null;
227
- suggestions = [] as never[];
228
- extras = undefined;
229
-
230
- import(): void {
231
- throw READONLY_THREAD_ERROR;
232
- }
233
-
234
44
  export() {
235
45
  return {
236
46
  messages: this._messages.map((message, idx) => ({
@@ -240,11 +50,13 @@ export class ReadonlyThreadRuntimeCore
240
50
  };
241
51
  }
242
52
 
243
- reset(): void {
244
- throw READONLY_THREAD_ERROR;
245
- }
53
+ composer = createInertComposer(READONLY_THREAD_ERROR, false);
246
54
 
247
- unstable_on(): Unsubscribe {
248
- return () => {};
249
- }
55
+ isLoading = false;
56
+
57
+ override cancelRun(): void {}
58
+
59
+ override stopSpeaking(): void {}
60
+
61
+ override disconnectVoice(): void {}
250
62
  }
@@ -0,0 +1,10 @@
1
+ import { SILENT_RUNTIME_ACTION } from "../../utils/silent-runtime-action";
2
+
3
+ export class ThreadListAdapterChangedError extends Error {
4
+ readonly [SILENT_RUNTIME_ACTION] = true;
5
+
6
+ constructor() {
7
+ super("Thread list adapter changed while an operation was pending.");
8
+ this.name = "ThreadListAdapterChangedError";
9
+ }
10
+ }