@assistant-ui/react 0.7.8 → 0.7.10

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 (350) hide show
  1. package/dist/api/AssistantRuntime.d.ts +4 -5
  2. package/dist/api/AssistantRuntime.d.ts.map +1 -1
  3. package/dist/api/AssistantRuntime.js +19 -22
  4. package/dist/api/AssistantRuntime.js.map +1 -1
  5. package/dist/api/AssistantRuntime.mjs +16 -19
  6. package/dist/api/AssistantRuntime.mjs.map +1 -1
  7. package/dist/api/ComposerRuntime.d.ts.map +1 -1
  8. package/dist/api/ComposerRuntime.js +4 -4
  9. package/dist/api/MessageRuntime.js +7 -7
  10. package/dist/api/ThreadListItemRuntime.d.ts +11 -2
  11. package/dist/api/ThreadListItemRuntime.d.ts.map +1 -1
  12. package/dist/api/ThreadListItemRuntime.js +16 -5
  13. package/dist/api/ThreadListItemRuntime.js.map +1 -1
  14. package/dist/api/ThreadListItemRuntime.mjs +16 -5
  15. package/dist/api/ThreadListItemRuntime.mjs.map +1 -1
  16. package/dist/api/ThreadListRuntime.d.ts +3 -0
  17. package/dist/api/ThreadListRuntime.d.ts.map +1 -1
  18. package/dist/api/ThreadListRuntime.js +31 -12
  19. package/dist/api/ThreadListRuntime.js.map +1 -1
  20. package/dist/api/ThreadListRuntime.mjs +27 -8
  21. package/dist/api/ThreadListRuntime.mjs.map +1 -1
  22. package/dist/api/ThreadRuntime.d.ts +10 -7
  23. package/dist/api/ThreadRuntime.d.ts.map +1 -1
  24. package/dist/api/ThreadRuntime.js +22 -12
  25. package/dist/api/ThreadRuntime.js.map +1 -1
  26. package/dist/api/ThreadRuntime.mjs +16 -6
  27. package/dist/api/ThreadRuntime.mjs.map +1 -1
  28. package/dist/api/subscribable/LazyMemoizeSubject.js +2 -2
  29. package/dist/api/subscribable/NestedSubscriptionSubject.js +1 -1
  30. package/dist/api/subscribable/ShallowMemoizeSubject.js +3 -3
  31. package/dist/context/index.js +6 -6
  32. package/dist/context/index.js.map +1 -1
  33. package/dist/context/providers/AssistantRuntimeProvider.d.ts.map +1 -1
  34. package/dist/context/providers/AssistantRuntimeProvider.js +12 -5
  35. package/dist/context/providers/AssistantRuntimeProvider.js.map +1 -1
  36. package/dist/context/providers/AssistantRuntimeProvider.mjs +8 -1
  37. package/dist/context/providers/AssistantRuntimeProvider.mjs.map +1 -1
  38. package/dist/context/providers/AttachmentRuntimeProvider.js +2 -2
  39. package/dist/context/providers/ContentPartRuntimeProvider.js +2 -2
  40. package/dist/context/providers/MessageRuntimeProvider.js +3 -3
  41. package/dist/context/providers/TextContentPartProvider.js +3 -3
  42. package/dist/context/providers/ThreadListItemRuntimeProvider.js +2 -2
  43. package/dist/context/providers/ThreadRuntimeProvider.d.ts +2 -0
  44. package/dist/context/providers/ThreadRuntimeProvider.d.ts.map +1 -1
  45. package/dist/context/providers/ThreadRuntimeProvider.js +6 -5
  46. package/dist/context/providers/ThreadRuntimeProvider.js.map +1 -1
  47. package/dist/context/providers/ThreadRuntimeProvider.mjs +3 -2
  48. package/dist/context/providers/ThreadRuntimeProvider.mjs.map +1 -1
  49. package/dist/context/providers/index.js +2 -2
  50. package/dist/context/react/AssistantContext.js +2 -2
  51. package/dist/context/react/AttachmentContext.js +1 -1
  52. package/dist/context/react/ComposerContext.js +3 -3
  53. package/dist/context/react/ContentPartContext.js +2 -2
  54. package/dist/context/react/MessageContext.js +2 -2
  55. package/dist/context/react/ThreadContext.js +2 -2
  56. package/dist/context/react/ThreadListItemContext.js +2 -2
  57. package/dist/context/react/index.js +6 -6
  58. package/dist/context/react/utils/createContextStoreHook.d.ts.map +1 -1
  59. package/dist/edge.js +1 -1
  60. package/dist/index.js +17 -17
  61. package/dist/index.js.map +1 -1
  62. package/dist/internal.d.ts +1 -2
  63. package/dist/internal.d.ts.map +1 -1
  64. package/dist/internal.js +10 -13
  65. package/dist/internal.js.map +1 -1
  66. package/dist/internal.mjs +0 -2
  67. package/dist/internal.mjs.map +1 -1
  68. package/dist/model-config/index.js +6 -6
  69. package/dist/model-config/makeAssistantTool.js +1 -1
  70. package/dist/model-config/makeAssistantToolUI.js +1 -1
  71. package/dist/model-config/useAssistantInstructions.js +1 -1
  72. package/dist/model-config/useAssistantTool.js +1 -1
  73. package/dist/model-config/useAssistantToolUI.js +1 -1
  74. package/dist/primitive-hooks/actionBar/useActionBarCopy.js +2 -2
  75. package/dist/primitive-hooks/actionBar/useActionBarEdit.js +1 -1
  76. package/dist/primitive-hooks/actionBar/useActionBarFeedbackNegative.js +1 -1
  77. package/dist/primitive-hooks/actionBar/useActionBarFeedbackPositive.js +1 -1
  78. package/dist/primitive-hooks/actionBar/useActionBarReload.js +3 -3
  79. package/dist/primitive-hooks/actionBar/useActionBarSpeak.js +1 -1
  80. package/dist/primitive-hooks/actionBar/useActionBarStopSpeaking.js +1 -1
  81. package/dist/primitive-hooks/attachment/useAttachmentRemove.js +1 -1
  82. package/dist/primitive-hooks/branchPicker/useBranchPickerCount.js +1 -1
  83. package/dist/primitive-hooks/branchPicker/useBranchPickerNext.js +1 -1
  84. package/dist/primitive-hooks/branchPicker/useBranchPickerNumber.js +1 -1
  85. package/dist/primitive-hooks/branchPicker/useBranchPickerPrevious.js +1 -1
  86. package/dist/primitive-hooks/composer/useComposerAddAttachment.js +1 -1
  87. package/dist/primitive-hooks/composer/useComposerCancel.js +1 -1
  88. package/dist/primitive-hooks/composer/useComposerIf.js +1 -1
  89. package/dist/primitive-hooks/composer/useComposerSend.js +3 -3
  90. package/dist/primitive-hooks/contentPart/index.js +3 -3
  91. package/dist/primitive-hooks/contentPart/useContentPartDisplay.js +1 -1
  92. package/dist/primitive-hooks/contentPart/useContentPartImage.js +1 -1
  93. package/dist/primitive-hooks/contentPart/useContentPartText.js +1 -1
  94. package/dist/primitive-hooks/index.js +2 -2
  95. package/dist/primitive-hooks/index.js.map +1 -1
  96. package/dist/primitive-hooks/message/useMessageIf.js +2 -2
  97. package/dist/primitive-hooks/thread/useThreadEmpty.js +1 -1
  98. package/dist/primitive-hooks/thread/useThreadIf.js +1 -1
  99. package/dist/primitive-hooks/thread/useThreadScrollToBottom.js +2 -2
  100. package/dist/primitive-hooks/thread/useThreadSuggestion.js +2 -2
  101. package/dist/primitive-hooks/thread/useThreadViewportAutoScroll.js +5 -5
  102. package/dist/primitives/actionBar/ActionBarCopy.js +2 -2
  103. package/dist/primitives/actionBar/ActionBarEdit.js +2 -2
  104. package/dist/primitives/actionBar/ActionBarFeedbackNegative.js +2 -2
  105. package/dist/primitives/actionBar/ActionBarFeedbackPositive.js +2 -2
  106. package/dist/primitives/actionBar/ActionBarReload.js +2 -2
  107. package/dist/primitives/actionBar/ActionBarRoot.js +1 -1
  108. package/dist/primitives/actionBar/ActionBarSpeak.js +2 -2
  109. package/dist/primitives/actionBar/ActionBarStopSpeaking.js +1 -1
  110. package/dist/primitives/actionBar/index.js +8 -8
  111. package/dist/primitives/actionBar/useActionBarFloatStatus.js +3 -3
  112. package/dist/primitives/assistantModal/AssistantModalAnchor.js +1 -1
  113. package/dist/primitives/assistantModal/AssistantModalContent.js +1 -1
  114. package/dist/primitives/assistantModal/AssistantModalRoot.js +2 -2
  115. package/dist/primitives/assistantModal/AssistantModalTrigger.js +1 -1
  116. package/dist/primitives/assistantModal/index.js +4 -4
  117. package/dist/primitives/attachment/AttachmentName.js +1 -1
  118. package/dist/primitives/attachment/AttachmentRemove.js +2 -2
  119. package/dist/primitives/attachment/AttachmentThumb.js +1 -1
  120. package/dist/primitives/attachment/index.js +4 -4
  121. package/dist/primitives/branchPicker/BranchPickerCount.js +1 -1
  122. package/dist/primitives/branchPicker/BranchPickerNext.js +2 -2
  123. package/dist/primitives/branchPicker/BranchPickerNumber.js +1 -1
  124. package/dist/primitives/branchPicker/BranchPickerPrevious.js +2 -2
  125. package/dist/primitives/branchPicker/BranchPickerRoot.js +1 -1
  126. package/dist/primitives/branchPicker/index.js +5 -5
  127. package/dist/primitives/composer/ComposerAddAttachment.js +2 -2
  128. package/dist/primitives/composer/ComposerAttachments.js +3 -3
  129. package/dist/primitives/composer/ComposerCancel.js +2 -2
  130. package/dist/primitives/composer/ComposerIf.js +1 -1
  131. package/dist/primitives/composer/ComposerInput.d.ts.map +1 -1
  132. package/dist/primitives/composer/ComposerInput.js +6 -4
  133. package/dist/primitives/composer/ComposerInput.js.map +1 -1
  134. package/dist/primitives/composer/ComposerInput.mjs +3 -1
  135. package/dist/primitives/composer/ComposerInput.mjs.map +1 -1
  136. package/dist/primitives/composer/ComposerRoot.js +1 -1
  137. package/dist/primitives/composer/ComposerSend.js +2 -2
  138. package/dist/primitives/composer/index.js +7 -7
  139. package/dist/primitives/contentPart/ContentPartDisplay.js +1 -1
  140. package/dist/primitives/contentPart/ContentPartImage.js +1 -1
  141. package/dist/primitives/contentPart/ContentPartInProgress.js +1 -1
  142. package/dist/primitives/contentPart/ContentPartText.js +2 -2
  143. package/dist/primitives/contentPart/index.js +4 -4
  144. package/dist/primitives/index.js +10 -10
  145. package/dist/primitives/message/MessageAttachments.js +3 -3
  146. package/dist/primitives/message/MessageContent.js +8 -8
  147. package/dist/primitives/message/MessageIf.js +1 -1
  148. package/dist/primitives/message/MessageRoot.js +2 -2
  149. package/dist/primitives/message/index.js +4 -4
  150. package/dist/primitives/thread/ThreadEmpty.js +1 -1
  151. package/dist/primitives/thread/ThreadIf.js +1 -1
  152. package/dist/primitives/thread/ThreadMessages.js +3 -3
  153. package/dist/primitives/thread/ThreadScrollToBottom.js +2 -2
  154. package/dist/primitives/thread/ThreadSuggestion.js +2 -2
  155. package/dist/primitives/thread/ThreadViewport.js +1 -1
  156. package/dist/primitives/thread/index.js +7 -7
  157. package/dist/primitives/threadList/ThreadListItems.js +2 -2
  158. package/dist/primitives/threadList/ThreadListNew.js +2 -2
  159. package/dist/primitives/threadList/ThreadListNew.js.map +1 -1
  160. package/dist/primitives/threadList/ThreadListNew.mjs +1 -1
  161. package/dist/primitives/threadList/ThreadListNew.mjs.map +1 -1
  162. package/dist/primitives/threadList/index.js +2 -2
  163. package/dist/primitives/threadListItem/ThreadListItemArchive.js +2 -2
  164. package/dist/primitives/threadListItem/ThreadListItemDelete.js +2 -2
  165. package/dist/primitives/threadListItem/ThreadListItemRoot.js +2 -2
  166. package/dist/primitives/threadListItem/ThreadListItemRoot.js.map +1 -1
  167. package/dist/primitives/threadListItem/ThreadListItemRoot.mjs +1 -1
  168. package/dist/primitives/threadListItem/ThreadListItemRoot.mjs.map +1 -1
  169. package/dist/primitives/threadListItem/ThreadListItemTitle.js +1 -1
  170. package/dist/primitives/threadListItem/ThreadListItemTrigger.js +2 -2
  171. package/dist/primitives/threadListItem/ThreadListItemUnarchive.js +2 -2
  172. package/dist/primitives/threadListItem/index.js +6 -6
  173. package/dist/runtimes/attachment/index.js +3 -3
  174. package/dist/runtimes/composer/DefaultEditComposerRuntimeCore.js +2 -2
  175. package/dist/runtimes/composer/DefaultThreadComposerRuntimeCore.js +1 -1
  176. package/dist/runtimes/core/BaseAssistantRuntimeCore.js +1 -1
  177. package/dist/runtimes/core/BaseThreadRuntimeCore.d.ts +2 -4
  178. package/dist/runtimes/core/BaseThreadRuntimeCore.d.ts.map +1 -1
  179. package/dist/runtimes/core/BaseThreadRuntimeCore.js +5 -9
  180. package/dist/runtimes/core/BaseThreadRuntimeCore.js.map +1 -1
  181. package/dist/runtimes/core/BaseThreadRuntimeCore.mjs +1 -5
  182. package/dist/runtimes/core/BaseThreadRuntimeCore.mjs.map +1 -1
  183. package/dist/runtimes/core/ThreadListRuntimeCore.d.ts +14 -6
  184. package/dist/runtimes/core/ThreadListRuntimeCore.d.ts.map +1 -1
  185. package/dist/runtimes/core/ThreadListRuntimeCore.js.map +1 -1
  186. package/dist/runtimes/core/ThreadRuntimeCore.d.ts +1 -15
  187. package/dist/runtimes/core/ThreadRuntimeCore.d.ts.map +1 -1
  188. package/dist/runtimes/core/ThreadRuntimeCore.js.map +1 -1
  189. package/dist/runtimes/core/index.d.ts +1 -1
  190. package/dist/runtimes/core/index.d.ts.map +1 -1
  191. package/dist/runtimes/core/index.js.map +1 -1
  192. package/dist/runtimes/dangerous-in-browser/DangerousInBrowserAdapter.js +6 -6
  193. package/dist/runtimes/dangerous-in-browser/index.js +1 -1
  194. package/dist/runtimes/dangerous-in-browser/useDangerousInBrowserRuntime.js +3 -3
  195. package/dist/runtimes/edge/EdgeChatAdapter.js +7 -7
  196. package/dist/runtimes/edge/EdgeRuntimeRequestOptions.js +1 -1
  197. package/dist/runtimes/edge/converters/fromCoreMessage.js +1 -1
  198. package/dist/runtimes/edge/converters/index.js +6 -6
  199. package/dist/runtimes/edge/createEdgeRuntimeAPI.js +9 -9
  200. package/dist/runtimes/edge/index.js +6 -6
  201. package/dist/runtimes/edge/index.js.map +1 -1
  202. package/dist/runtimes/edge/partial-json/parse-partial-json.js +1 -1
  203. package/dist/runtimes/edge/streams/assistantDecoderStream.js +1 -1
  204. package/dist/runtimes/edge/streams/assistantEncoderStream.js +1 -1
  205. package/dist/runtimes/edge/streams/runResultStream.js +1 -1
  206. package/dist/runtimes/edge/streams/utils/index.js +2 -2
  207. package/dist/runtimes/edge/streams/utils/streamPartDecoderStream.js +2 -2
  208. package/dist/runtimes/edge/streams/utils/streamPartEncoderStream.d.ts +1 -1
  209. package/dist/runtimes/edge/streams/utils/streamPartEncoderStream.d.ts.map +1 -1
  210. package/dist/runtimes/edge/streams/utils/streamPartEncoderStream.js +1 -1
  211. package/dist/runtimes/edge/useEdgeRuntime.js +3 -3
  212. package/dist/runtimes/external-store/ExternalStoreAdapter.d.ts +20 -3
  213. package/dist/runtimes/external-store/ExternalStoreAdapter.d.ts.map +1 -1
  214. package/dist/runtimes/external-store/ExternalStoreAdapter.js.map +1 -1
  215. package/dist/runtimes/external-store/ExternalStoreRuntimeCore.d.ts +0 -1
  216. package/dist/runtimes/external-store/ExternalStoreRuntimeCore.d.ts.map +1 -1
  217. package/dist/runtimes/external-store/ExternalStoreRuntimeCore.js +6 -13
  218. package/dist/runtimes/external-store/ExternalStoreRuntimeCore.js.map +1 -1
  219. package/dist/runtimes/external-store/ExternalStoreRuntimeCore.mjs +3 -10
  220. package/dist/runtimes/external-store/ExternalStoreRuntimeCore.mjs.map +1 -1
  221. package/dist/runtimes/external-store/ExternalStoreThreadListRuntimeCore.d.ts +9 -11
  222. package/dist/runtimes/external-store/ExternalStoreThreadListRuntimeCore.d.ts.map +1 -1
  223. package/dist/runtimes/external-store/ExternalStoreThreadListRuntimeCore.js +19 -27
  224. package/dist/runtimes/external-store/ExternalStoreThreadListRuntimeCore.js.map +1 -1
  225. package/dist/runtimes/external-store/ExternalStoreThreadListRuntimeCore.mjs +19 -27
  226. package/dist/runtimes/external-store/ExternalStoreThreadListRuntimeCore.mjs.map +1 -1
  227. package/dist/runtimes/external-store/ExternalStoreThreadRuntimeCore.d.ts +2 -2
  228. package/dist/runtimes/external-store/ExternalStoreThreadRuntimeCore.d.ts.map +1 -1
  229. package/dist/runtimes/external-store/ExternalStoreThreadRuntimeCore.js +10 -13
  230. package/dist/runtimes/external-store/ExternalStoreThreadRuntimeCore.js.map +1 -1
  231. package/dist/runtimes/external-store/ExternalStoreThreadRuntimeCore.mjs +4 -7
  232. package/dist/runtimes/external-store/ExternalStoreThreadRuntimeCore.mjs.map +1 -1
  233. package/dist/runtimes/external-store/external-message-converter.js +4 -4
  234. package/dist/runtimes/external-store/index.js +3 -3
  235. package/dist/runtimes/external-store/useExternalStoreRuntime.js +3 -3
  236. package/dist/runtimes/index.js +16 -16
  237. package/dist/runtimes/index.js.map +1 -1
  238. package/dist/runtimes/local/LocalRuntimeCore.d.ts +0 -1
  239. package/dist/runtimes/local/LocalRuntimeCore.d.ts.map +1 -1
  240. package/dist/runtimes/local/LocalRuntimeCore.js +7 -16
  241. package/dist/runtimes/local/LocalRuntimeCore.js.map +1 -1
  242. package/dist/runtimes/local/LocalRuntimeCore.mjs +3 -12
  243. package/dist/runtimes/local/LocalRuntimeCore.mjs.map +1 -1
  244. package/dist/runtimes/local/LocalThreadListRuntimeCore.d.ts +17 -15
  245. package/dist/runtimes/local/LocalThreadListRuntimeCore.d.ts.map +1 -1
  246. package/dist/runtimes/local/LocalThreadListRuntimeCore.js +95 -93
  247. package/dist/runtimes/local/LocalThreadListRuntimeCore.js.map +1 -1
  248. package/dist/runtimes/local/LocalThreadListRuntimeCore.mjs +94 -92
  249. package/dist/runtimes/local/LocalThreadListRuntimeCore.mjs.map +1 -1
  250. package/dist/runtimes/local/LocalThreadRuntimeCore.d.ts +4 -3
  251. package/dist/runtimes/local/LocalThreadRuntimeCore.d.ts.map +1 -1
  252. package/dist/runtimes/local/LocalThreadRuntimeCore.js +15 -14
  253. package/dist/runtimes/local/LocalThreadRuntimeCore.js.map +1 -1
  254. package/dist/runtimes/local/LocalThreadRuntimeCore.mjs +11 -10
  255. package/dist/runtimes/local/LocalThreadRuntimeCore.mjs.map +1 -1
  256. package/dist/runtimes/local/index.js +1 -1
  257. package/dist/runtimes/local/useLocalRuntime.d.ts.map +1 -1
  258. package/dist/runtimes/local/useLocalRuntime.js +7 -10
  259. package/dist/runtimes/local/useLocalRuntime.js.map +1 -1
  260. package/dist/runtimes/local/useLocalRuntime.mjs +4 -7
  261. package/dist/runtimes/local/useLocalRuntime.mjs.map +1 -1
  262. package/dist/runtimes/speech/index.js +1 -1
  263. package/dist/runtimes/utils/MessageRepository.js +2 -2
  264. package/dist/styles/index.css +12 -0
  265. package/dist/styles/index.css.map +1 -1
  266. package/dist/styles/tailwindcss/thread.css +1 -1
  267. package/dist/styles/tailwindcss/thread.css.json +1 -1
  268. package/dist/ui/assistant-action-bar.js +5 -5
  269. package/dist/ui/assistant-message.js +7 -7
  270. package/dist/ui/assistant-modal.js +5 -5
  271. package/dist/ui/attachment-ui.js +7 -7
  272. package/dist/ui/base/avatar.js +1 -1
  273. package/dist/ui/base/index.js +5 -5
  274. package/dist/ui/base/tooltip-icon-button.js +2 -2
  275. package/dist/ui/base/tooltip.js +1 -1
  276. package/dist/ui/branch-picker.js +5 -5
  277. package/dist/ui/composer.js +7 -7
  278. package/dist/ui/content-part.js +2 -2
  279. package/dist/ui/edit-composer.js +4 -4
  280. package/dist/ui/index.d.ts +4 -4
  281. package/dist/ui/index.d.ts.map +1 -1
  282. package/dist/ui/index.js +15 -15
  283. package/dist/ui/index.js.map +1 -1
  284. package/dist/ui/index.mjs +18 -18
  285. package/dist/ui/index.mjs.map +1 -1
  286. package/dist/ui/thread-config.d.ts +1 -1
  287. package/dist/ui/thread-config.d.ts.map +1 -1
  288. package/dist/ui/thread-config.js +2 -2
  289. package/dist/ui/thread-config.js.map +1 -1
  290. package/dist/ui/thread-config.mjs.map +1 -1
  291. package/dist/ui/thread-list-item.d.ts +2 -11
  292. package/dist/ui/thread-list-item.d.ts.map +1 -1
  293. package/dist/ui/thread-list-item.js +20 -33
  294. package/dist/ui/thread-list-item.js.map +1 -1
  295. package/dist/ui/thread-list-item.mjs +16 -29
  296. package/dist/ui/thread-list-item.mjs.map +1 -1
  297. package/dist/ui/thread-list.d.ts +10 -3
  298. package/dist/ui/thread-list.d.ts.map +1 -1
  299. package/dist/ui/thread-list.js +8 -9
  300. package/dist/ui/thread-list.js.map +1 -1
  301. package/dist/ui/thread-list.mjs +3 -4
  302. package/dist/ui/thread-list.mjs.map +1 -1
  303. package/dist/ui/thread-welcome.js +5 -5
  304. package/dist/ui/thread.js +10 -10
  305. package/dist/ui/user-action-bar.js +5 -5
  306. package/dist/ui/user-message.js +6 -6
  307. package/dist/utils/ProxyConfigProvider.js +1 -1
  308. package/dist/utils/combined/createCombinedStore.d.ts.map +1 -1
  309. package/dist/utils/combined/useCombinedStore.d.ts.map +1 -1
  310. package/dist/utils/combined/useCombinedStore.js +1 -1
  311. package/dist/utils/hooks/useOnResizeContent.js +1 -1
  312. package/dist/utils/hooks/useOnScrollToBottom.js +1 -1
  313. package/dist/utils/smooth/SmoothContext.js +2 -2
  314. package/dist/utils/smooth/index.js +3 -3
  315. package/dist/utils/smooth/useSmooth.js +3 -3
  316. package/package.json +1 -1
  317. package/src/api/AssistantRuntime.ts +21 -25
  318. package/src/api/ThreadListItemRuntime.ts +36 -7
  319. package/src/api/ThreadListRuntime.ts +31 -9
  320. package/src/api/ThreadRuntime.ts +38 -10
  321. package/src/context/providers/AssistantRuntimeProvider.tsx +4 -1
  322. package/src/context/providers/ThreadRuntimeProvider.tsx +9 -2
  323. package/src/internal.ts +1 -1
  324. package/src/primitives/composer/ComposerInput.tsx +3 -1
  325. package/src/primitives/threadList/ThreadListNew.tsx +1 -1
  326. package/src/primitives/threadListItem/ThreadListItemRoot.tsx +1 -1
  327. package/src/runtimes/core/BaseThreadRuntimeCore.tsx +1 -9
  328. package/src/runtimes/core/ThreadListRuntimeCore.tsx +16 -7
  329. package/src/runtimes/core/ThreadRuntimeCore.tsx +1 -19
  330. package/src/runtimes/core/index.ts +0 -1
  331. package/src/runtimes/external-store/ExternalStoreAdapter.tsx +20 -3
  332. package/src/runtimes/external-store/ExternalStoreRuntimeCore.tsx +5 -12
  333. package/src/runtimes/external-store/ExternalStoreThreadListRuntimeCore.tsx +22 -35
  334. package/src/runtimes/external-store/ExternalStoreThreadRuntimeCore.tsx +3 -7
  335. package/src/runtimes/local/LocalRuntimeCore.tsx +7 -14
  336. package/src/runtimes/local/LocalThreadListRuntimeCore.tsx +110 -103
  337. package/src/runtimes/local/LocalThreadRuntimeCore.tsx +11 -10
  338. package/src/runtimes/local/useLocalRuntime.tsx +5 -12
  339. package/src/styles/tailwindcss/thread.css +1 -1
  340. package/src/ui/index.ts +6 -6
  341. package/src/ui/thread-config.tsx +1 -1
  342. package/src/ui/thread-list-item.tsx +24 -32
  343. package/src/ui/thread-list.tsx +13 -7
  344. package/dist/runtimes/local/LocalThreadMetadataRuntimeCore.d.ts +0 -19
  345. package/dist/runtimes/local/LocalThreadMetadataRuntimeCore.d.ts.map +0 -1
  346. package/dist/runtimes/local/LocalThreadMetadataRuntimeCore.js +0 -87
  347. package/dist/runtimes/local/LocalThreadMetadataRuntimeCore.js.map +0 -1
  348. package/dist/runtimes/local/LocalThreadMetadataRuntimeCore.mjs +0 -62
  349. package/dist/runtimes/local/LocalThreadMetadataRuntimeCore.mjs.map +0 -1
  350. package/src/runtimes/local/LocalThreadMetadataRuntimeCore.tsx +0 -79
@@ -43,30 +43,12 @@ export type SubmittedFeedback = {
43
43
  readonly type: "negative" | "positive";
44
44
  };
45
45
 
46
- export type ThreadMetadata = Readonly<{
47
- readonly threadId: string;
48
- readonly state: "archived" | "regular" | "new" | "deleted";
49
- readonly title?: string | undefined;
50
- }>;
51
-
52
46
  export type ThreadRuntimeEventType =
53
- | "switched-to"
54
- | "switched-away"
55
47
  | "run-start"
48
+ | "initialize"
56
49
  | "model-config-update";
57
50
 
58
- export type ThreadMetadataRuntimeCore = ThreadMetadata & {
59
- create(title?: string): Promise<void>;
60
- rename(newTitle: string): Promise<void>;
61
- archive(): Promise<void>;
62
- unarchive(): Promise<void>;
63
- delete(): Promise<void>;
64
- subscribe(callback: () => void): Unsubscribe;
65
- };
66
-
67
51
  export type ThreadRuntimeCore = Readonly<{
68
- metadata: ThreadMetadataRuntimeCore;
69
-
70
52
  getMessageById: (messageId: string) =>
71
53
  | {
72
54
  parentId: string | null;
@@ -2,5 +2,4 @@ export type {
2
2
  AddToolResultOptions,
3
3
  SubmitFeedbackOptions,
4
4
  ThreadSuggestion,
5
- ThreadMetadataRuntimeCore,
6
5
  } from "./ThreadRuntimeCore";
@@ -2,18 +2,32 @@ import { AppendMessage, ThreadMessage } from "../../types";
2
2
  import { AttachmentAdapter } from "../attachment";
3
3
  import {
4
4
  AddToolResultOptions,
5
- ThreadMetadata,
6
5
  ThreadSuggestion,
7
6
  } from "../core/ThreadRuntimeCore";
8
7
  import { FeedbackAdapter } from "../feedback/FeedbackAdapter";
9
8
  import { SpeechSynthesisAdapter } from "../speech/SpeechAdapterTypes";
10
9
  import { ThreadMessageLike } from "./ThreadMessageLike";
11
10
 
11
+ export type ExternalStoreThreadData<TState extends "regular" | "archived"> = {
12
+ state: TState;
13
+ threadId: string;
14
+ title?: string | undefined;
15
+ };
16
+
12
17
  export type ExternalStoreThreadListAdapter = {
18
+ /**
19
+ * @deprecated This API is still under active development and might change without notice.
20
+ */
13
21
  threadId?: string | undefined;
14
- threads?: readonly ThreadMetadata[] | undefined;
15
- archivedThreads?: readonly ThreadMetadata[] | undefined;
22
+ threads?: readonly ExternalStoreThreadData<"regular">[] | undefined;
23
+ archivedThreads?: readonly ExternalStoreThreadData<"archived">[] | undefined;
24
+ /**
25
+ * @deprecated This API is still under active development and might change without notice.
26
+ */
16
27
  onSwitchToNewThread?: (() => Promise<void> | void) | undefined;
28
+ /**
29
+ * @deprecated This API is still under active development and might change without notice.
30
+ */
17
31
  onSwitchToThread?: ((threadId: string) => Promise<void> | void) | undefined;
18
32
  onRename?: (
19
33
  threadId: string,
@@ -54,6 +68,9 @@ type ExternalStoreAdapterBase<T> = {
54
68
  attachments?: AttachmentAdapter | undefined;
55
69
  speech?: SpeechSynthesisAdapter | undefined;
56
70
  feedback?: FeedbackAdapter | undefined;
71
+ /**
72
+ * @deprecated This API is still under active development and might change without notice.
73
+ */
57
74
  threadList?: ExternalStoreThreadListAdapter | undefined;
58
75
  }
59
76
  | undefined;
@@ -12,25 +12,18 @@ const getThreadListAdapter = (store: ExternalStoreAdapter<any>) => {
12
12
  export class ExternalStoreRuntimeCore extends BaseAssistantRuntimeCore {
13
13
  public readonly threadList;
14
14
 
15
- private _store: ExternalStoreAdapter<any>;
16
-
17
15
  constructor(store: ExternalStoreAdapter<any>) {
18
16
  super();
19
- this._store = store;
20
17
  this.threadList = new ExternalStoreThreadListRuntimeCore(
21
18
  getThreadListAdapter(store),
22
- (threadId) =>
23
- new ExternalStoreThreadRuntimeCore(
24
- this._proxyConfigProvider,
25
- threadId,
26
- this._store,
27
- ),
19
+ () =>
20
+ new ExternalStoreThreadRuntimeCore(this._proxyConfigProvider, store),
28
21
  );
29
22
  }
30
23
 
31
24
  public setStore(store: ExternalStoreAdapter<any>) {
32
- this._store = store;
33
- this.threadList.setAdapter(getThreadListAdapter(store));
34
- this.threadList.mainThread.setStore(store);
25
+ // Update the thread list adapter and propagate store changes to the main thread
26
+ this.threadList.__internal_setAdapter(getThreadListAdapter(store));
27
+ this.threadList.getMainThreadRuntimeCore().__internal_setStore(store);
35
28
  }
36
29
  }
@@ -3,9 +3,7 @@ import { ExternalStoreThreadRuntimeCore } from "./ExternalStoreThreadRuntimeCore
3
3
  import { ThreadListRuntimeCore } from "../core/ThreadListRuntimeCore";
4
4
  import { ExternalStoreThreadListAdapter } from "./ExternalStoreAdapter";
5
5
 
6
- export type ExternalStoreThreadFactory = (
7
- threadId: string,
8
- ) => ExternalStoreThreadRuntimeCore;
6
+ export type ExternalStoreThreadFactory = () => ExternalStoreThreadRuntimeCore;
9
7
 
10
8
  const EMPTY_ARRAY = Object.freeze([]);
11
9
  const DEFAULT_THREAD_ID = "DEFAULT_THREAD_ID";
@@ -13,35 +11,40 @@ const DEFAULT_THREAD_ID = "DEFAULT_THREAD_ID";
13
11
  export class ExternalStoreThreadListRuntimeCore
14
12
  implements ThreadListRuntimeCore
15
13
  {
16
- private _threads: readonly string[] = [];
17
- private _archivedThreads: readonly string[] = [];
14
+ private _mainThreadId: string = DEFAULT_THREAD_ID;
15
+ private _threads: readonly string[] = EMPTY_ARRAY;
16
+ private _archivedThreads: readonly string[] = EMPTY_ARRAY;
18
17
 
19
- public get newThread() {
18
+ public get newThreadId() {
20
19
  return undefined;
21
20
  }
22
21
 
23
- public get threads() {
22
+ public get threadIds() {
24
23
  return this._threads;
25
24
  }
26
25
 
27
- public get archivedThreads() {
26
+ public get archivedThreadIds() {
28
27
  return this._archivedThreads;
29
28
  }
30
29
 
31
30
  private _mainThread: ExternalStoreThreadRuntimeCore;
32
31
 
33
- public get mainThread() {
34
- return this._mainThread;
32
+ public get mainThreadId() {
33
+ return this._mainThreadId;
35
34
  }
36
35
 
37
36
  constructor(
38
37
  private adapter: ExternalStoreThreadListAdapter = {},
39
38
  private threadFactory: ExternalStoreThreadFactory,
40
39
  ) {
41
- this._mainThread = this.threadFactory(DEFAULT_THREAD_ID);
40
+ this._mainThread = this.threadFactory();
41
+ }
42
+
43
+ public getMainThreadRuntimeCore() {
44
+ return this._mainThread;
42
45
  }
43
46
 
44
- public getThreadMetadataById(threadId: string) {
47
+ public getItemById(threadId: string) {
45
48
  for (const thread of this.adapter.threads ?? []) {
46
49
  if (thread.threadId === threadId) return thread;
47
50
  }
@@ -51,7 +54,7 @@ export class ExternalStoreThreadListRuntimeCore
51
54
  return undefined;
52
55
  }
53
56
 
54
- public setAdapter(adapter: ExternalStoreThreadListAdapter) {
57
+ public __internal_setAdapter(adapter: ExternalStoreThreadListAdapter) {
55
58
  const previousAdapter = this.adapter;
56
59
  this.adapter = adapter;
57
60
 
@@ -72,42 +75,26 @@ export class ExternalStoreThreadListRuntimeCore
72
75
  return;
73
76
  }
74
77
 
75
- if (previousAdapter.threads !== newThreads) {
78
+ if (previousThreads !== newThreads) {
76
79
  this._threads =
77
80
  this.adapter.threads?.map((t) => t.threadId) ?? EMPTY_ARRAY;
78
81
  }
79
82
 
80
- if (previousAdapter.archivedThreads !== newArchivedThreads) {
83
+ if (previousArchivedThreads !== newArchivedThreads) {
81
84
  this._archivedThreads =
82
85
  this.adapter.archivedThreads?.map((t) => t.threadId) ?? EMPTY_ARRAY;
83
86
  }
84
87
 
85
- if (previousAdapter.threadId !== newThreadId) {
86
- this._mainThread._notifyEventSubscribers("switched-away");
87
- this._mainThread = this.threadFactory(newThreadId);
88
- this._mainThread._notifyEventSubscribers("switched-to");
89
- }
90
-
91
- const previousMainState = this._mainThread.metadata.state;
92
- const mainState = this.archivedThreads.includes(
93
- this._mainThread.metadata.threadId,
94
- )
95
- ? "archived"
96
- : "regular";
97
-
98
- if (previousMainState !== mainState) {
99
- if (mainState === "archived") {
100
- this._mainThread.metadata.archive();
101
- } else {
102
- this._mainThread.metadata.unarchive();
103
- }
88
+ if (previousThreadId !== newThreadId) {
89
+ this._mainThreadId = newThreadId;
90
+ this._mainThread = this.threadFactory();
104
91
  }
105
92
 
106
93
  this._notifySubscribers();
107
94
  }
108
95
 
109
96
  public async switchToThread(threadId: string): Promise<void> {
110
- if (this._mainThread?.metadata.threadId === threadId) return;
97
+ if (this._mainThreadId === threadId) return;
111
98
  const onSwitchToThread = this.adapter.onSwitchToThread;
112
99
  if (!onSwitchToThread)
113
100
  throw new Error(
@@ -18,7 +18,6 @@ import {
18
18
  ThreadRuntimeCore,
19
19
  } from "../core/ThreadRuntimeCore";
20
20
  import { BaseThreadRuntimeCore } from "../core/BaseThreadRuntimeCore";
21
- import { LocalThreadMetadataRuntimeCore } from "../local/LocalThreadMetadataRuntimeCore";
22
21
 
23
22
  const EMPTY_ARRAY = Object.freeze([]);
24
23
 
@@ -77,16 +76,13 @@ export class ExternalStoreThreadRuntimeCore
77
76
 
78
77
  constructor(
79
78
  configProvider: ModelConfigProvider,
80
- threadId: string,
81
79
  store: ExternalStoreAdapter<any>,
82
80
  ) {
83
- const metadata = new LocalThreadMetadataRuntimeCore(threadId);
84
- metadata.create();
85
- super(configProvider, metadata);
86
- this.setStore(store);
81
+ super(configProvider);
82
+ this.__internal_setStore(store);
87
83
  }
88
84
 
89
- public setStore(store: ExternalStoreAdapter<any>) {
85
+ public __internal_setStore(store: ExternalStoreAdapter<any>) {
90
86
  if (this._store === store) return;
91
87
 
92
88
  const isRunning = store.isRunning ?? false;
@@ -31,10 +31,9 @@ export class LocalRuntimeCore extends BaseAssistantRuntimeCore {
31
31
 
32
32
  this._options = options;
33
33
 
34
- this.threadList = new LocalThreadListRuntimeCore((threadId, data) => {
34
+ this.threadList = new LocalThreadListRuntimeCore((data) => {
35
35
  const thread = new LocalThreadRuntimeCore(
36
36
  this._proxyConfigProvider,
37
- threadId,
38
37
  this._options,
39
38
  );
40
39
  thread.import(data);
@@ -42,18 +41,12 @@ export class LocalRuntimeCore extends BaseAssistantRuntimeCore {
42
41
  });
43
42
 
44
43
  if (initialMessages) {
45
- this.threadList.mainThread.import(
46
- getExportFromInitialMessages(initialMessages),
47
- );
44
+ this.threadList
45
+ .getMainThreadRuntimeCore()
46
+ .import(getExportFromInitialMessages(initialMessages));
48
47
  }
49
48
  }
50
49
 
51
- public setOptions(options: LocalRuntimeOptionsBase) {
52
- this._options = options;
53
-
54
- this.threadList.mainThread.setOptions(options);
55
- }
56
-
57
50
  public reset({
58
51
  initialMessages,
59
52
  }: {
@@ -62,8 +55,8 @@ export class LocalRuntimeCore extends BaseAssistantRuntimeCore {
62
55
  this.threadList.switchToNewThread();
63
56
  if (!initialMessages) return;
64
57
 
65
- this.threadList.mainThread.import(
66
- getExportFromInitialMessages(initialMessages),
67
- );
58
+ this.threadList
59
+ .getMainThreadRuntimeCore()
60
+ .import(getExportFromInitialMessages(initialMessages));
68
61
  }
69
62
  }
@@ -3,206 +3,213 @@ import { ThreadListRuntimeCore } from "../core/ThreadListRuntimeCore";
3
3
  import { ExportedMessageRepository } from "../utils/MessageRepository";
4
4
  import { generateId } from "../../utils/idUtils";
5
5
  import { LocalThreadRuntimeCore } from "./LocalThreadRuntimeCore";
6
- import { ThreadMetadata } from "../core/ThreadRuntimeCore";
7
6
 
8
7
  export type ThreadListAdapter = {
9
8
  subscribe(callback: () => void): Unsubscribe;
10
9
  };
11
10
 
12
11
  export type LocalThreadData = {
13
- runtime: LocalThreadRuntimeCore;
14
- lastState: ThreadMetadata["state"];
15
- dispose: Unsubscribe;
12
+ readonly runtime: LocalThreadRuntimeCore;
13
+ readonly state: "new" | "regular" | "archived";
14
+ readonly threadId: string;
15
+ readonly title?: string | undefined;
16
+
17
+ dispose(): void;
16
18
  };
17
19
 
18
20
  export type LocalThreadFactory = (
19
- threadId: string,
20
21
  data: ExportedMessageRepository,
21
22
  ) => LocalThreadRuntimeCore;
22
23
 
23
24
  export class LocalThreadListRuntimeCore implements ThreadListRuntimeCore {
24
25
  private _threadData = new Map<string, LocalThreadData>();
25
- private _threads: readonly string[] = [];
26
- private _archivedThreads: readonly string[] = [];
27
- private _newThread: string | undefined;
26
+ private _threadIds: readonly string[] = [];
27
+ private _archivedThreadIds: readonly string[] = [];
28
+ private _newThreadId: string | undefined;
28
29
 
29
- public get newThread() {
30
- return this._newThread;
30
+ public get newThreadId() {
31
+ return this._newThreadId;
31
32
  }
32
33
 
33
- public get threads() {
34
- return this._threads;
34
+ public get threadIds() {
35
+ return this._threadIds;
35
36
  }
36
37
 
37
- public get archivedThreads() {
38
- return this._archivedThreads;
38
+ public get archivedThreadIds() {
39
+ return this._archivedThreadIds;
39
40
  }
40
41
 
41
- private _mainThread!: LocalThreadRuntimeCore;
42
+ private _mainThreadId!: string;
42
43
 
43
- public get mainThread(): LocalThreadRuntimeCore {
44
- return this._mainThread;
44
+ public get mainThreadId(): string {
45
+ return this._mainThreadId;
45
46
  }
46
47
 
47
48
  constructor(private _threadFactory: LocalThreadFactory) {
48
49
  this.switchToNewThread();
49
50
  }
50
51
 
51
- public getThreadMetadataById(threadId: string) {
52
- return this._threadData.get(threadId)?.runtime.metadata;
52
+ public getMainThreadRuntimeCore() {
53
+ const result = this._threadData.get(this._mainThreadId)?.runtime;
54
+ if (!result)
55
+ throw new Error("Main thread not found. This is a bug in assistant-ui.");
56
+ return result;
57
+ }
58
+
59
+ public getItemById(threadId: string) {
60
+ return this._threadData.get(threadId);
53
61
  }
54
62
 
55
- public switchToThread(threadId: string): Promise<void> {
56
- if (this._mainThread?.metadata.threadId === threadId)
57
- return Promise.resolve();
63
+ public async switchToThread(threadId: string): Promise<void> {
64
+ if (this._mainThreadId === threadId) return;
58
65
 
59
66
  const data = this._threadData.get(threadId);
60
67
  if (!data) throw new Error("Thread not found");
61
68
 
62
- if (data.runtime.metadata.state === "archived") this.unarchive(threadId);
69
+ if (data.state === "archived") await this.unarchive(threadId);
63
70
 
64
- this._mainThread?._notifyEventSubscribers("switched-away");
65
- this._mainThread = data.runtime;
71
+ this._mainThreadId = data.threadId;
66
72
  this._notifySubscribers();
67
-
68
- data.runtime._notifyEventSubscribers("switched-to");
69
- return Promise.resolve();
70
73
  }
71
74
 
72
75
  public switchToNewThread(): Promise<void> {
73
- if (this._newThread === undefined) {
76
+ if (this._newThreadId === undefined) {
74
77
  let threadId: string;
75
78
  do {
76
79
  threadId = generateId();
77
80
  } while (this._threadData.has(threadId));
78
81
 
79
- const runtime = this._threadFactory(threadId, { messages: [] });
80
- const dispose = runtime.metadata.subscribe(() => {
81
- this._syncState(threadId, runtime.metadata);
82
- threadId = runtime.metadata.threadId;
82
+ const runtime = this._threadFactory({ messages: [] });
83
+ const dispose = runtime.unstable_on("initialize", () => {
84
+ const data = this._threadData.get(threadId);
85
+ if (!data) throw new Error("Thread not found");
86
+
87
+ this._stateOp(threadId, "regular");
83
88
  });
84
- this._threadData.set(threadId, { runtime, lastState: "new", dispose });
85
- this._newThread = threadId;
89
+ this._threadData.set(threadId, {
90
+ runtime,
91
+ state: "new",
92
+ threadId,
93
+ dispose,
94
+ });
95
+ this._newThreadId = threadId;
86
96
  }
87
97
 
88
- this.switchToThread(this._newThread);
98
+ this.switchToThread(this._newThreadId);
89
99
  return Promise.resolve();
90
100
  }
91
101
 
92
- private async _syncState(
93
- lastThreadId: string,
94
- { state, threadId }: ThreadMetadata,
102
+ private async _stateOp(
103
+ threadId: string,
104
+ newState: "regular" | "archived" | "deleted",
95
105
  ) {
96
- const data = this._threadData.get(lastThreadId);
106
+ const data = this._threadData.get(threadId);
97
107
  if (!data) throw new Error("Thread not found");
98
- const lastState = data.lastState;
99
- if (lastState === state && lastThreadId === threadId) return;
100
108
 
101
- if (lastThreadId !== threadId) {
102
- this._threadData.delete(lastThreadId);
103
- if (lastState === "new") {
104
- this._newThread = threadId;
105
- }
106
- if (lastState === "regular") {
107
- this._threads = this._threads.map((t) =>
108
- t === lastThreadId ? threadId : t,
109
- );
110
- }
111
- if (lastState === "archived") {
112
- this._archivedThreads = this._archivedThreads.map((t) =>
113
- t === lastThreadId ? threadId : t,
109
+ const { state: lastState } = data;
110
+ if (lastState === newState) return;
111
+
112
+ // lastState
113
+ switch (lastState) {
114
+ case "new":
115
+ this._newThreadId = undefined;
116
+ break;
117
+ case "regular":
118
+ this._threadIds = this._threadIds.filter((t) => t !== threadId);
119
+ break;
120
+ case "archived":
121
+ this._archivedThreadIds = this._archivedThreadIds.filter(
122
+ (t) => t !== threadId,
114
123
  );
115
- }
116
- }
124
+ break;
117
125
 
118
- if (lastState !== state) {
119
- if (lastState === "new") {
120
- this._newThread = undefined;
126
+ default: {
127
+ const _exhaustiveCheck: never = lastState;
128
+ throw new Error(`Unsupported state: ${_exhaustiveCheck}`);
121
129
  }
130
+ }
122
131
 
123
- if (lastState === "regular") {
124
- this._threads = this._threads.filter((t) => t !== threadId);
125
- }
132
+ // newState
133
+ switch (newState) {
134
+ case "regular":
135
+ this._threadIds = [...this._threadIds, data.threadId];
136
+ break;
126
137
 
127
- if (lastState === "archived") {
128
- this._archivedThreads = this._archivedThreads.filter(
129
- (t) => t !== threadId,
130
- );
131
- }
138
+ case "archived":
139
+ this._archivedThreadIds = [...this._archivedThreadIds, data.threadId];
140
+ break;
132
141
 
133
- if (state === "new") {
134
- if (this._newThread) {
135
- this.delete(this._newThread);
136
- }
137
- this._newThread = threadId;
138
- }
139
- if (state === "archived") {
140
- this._archivedThreads = [
141
- ...this._archivedThreads,
142
- data.runtime.metadata.threadId,
143
- ];
144
- }
145
- if (state === "regular") {
146
- this._threads = [...this._threads, data.runtime.metadata.threadId];
147
- }
148
- if (state === "deleted") {
149
- data.dispose();
142
+ case "deleted":
150
143
  this._threadData.delete(threadId);
151
- }
144
+ data.dispose();
145
+ break;
152
146
 
153
- data.lastState = state;
147
+ default: {
148
+ const _exhaustiveCheck: never = newState;
149
+ throw new Error(`Unsupported state: ${_exhaustiveCheck}`);
150
+ }
154
151
  }
155
152
 
156
- this._notifySubscribers();
153
+ if (newState !== "deleted") {
154
+ this._threadData.set(threadId, {
155
+ ...data,
156
+ state: newState,
157
+ });
158
+ }
157
159
 
158
160
  if (
159
- threadId === this._mainThread.metadata.threadId &&
160
- (state === "archived" || state === "deleted")
161
+ threadId === this._mainThreadId &&
162
+ (newState === "archived" || newState === "deleted")
161
163
  ) {
162
- const lastThread = this._threads[0];
163
- if (lastThread) {
164
- await this.switchToThread(lastThread);
164
+ const lastThreadId = this._threadIds[0];
165
+ if (lastThreadId) {
166
+ await this.switchToThread(lastThreadId);
165
167
  } else {
166
168
  await this.switchToNewThread();
167
169
  }
170
+ } else {
171
+ this._notifySubscribers();
168
172
  }
169
173
  }
170
174
 
171
175
  public rename(threadId: string, newTitle: string): Promise<void> {
172
176
  const data = this._threadData.get(threadId);
173
177
  if (!data) throw new Error("Thread not found");
174
- data.runtime.metadata.rename(newTitle);
175
178
 
179
+ this._threadData.set(threadId, {
180
+ ...data,
181
+ title: newTitle,
182
+ });
183
+ this._notifySubscribers();
176
184
  return Promise.resolve();
177
185
  }
178
186
 
179
187
  public archive(threadId: string): Promise<void> {
180
188
  const data = this._threadData.get(threadId);
181
189
  if (!data) throw new Error("Thread not found");
182
- if (data.lastState !== "regular")
183
- throw new Error("Thread is not yet created or archived");
184
- data.runtime.metadata.archive();
190
+ if (data.state !== "regular")
191
+ throw new Error("Thread is not yet initialized or already archived");
185
192
 
193
+ this._stateOp(threadId, "archived");
186
194
  return Promise.resolve();
187
195
  }
188
196
 
189
197
  public unarchive(threadId: string): Promise<void> {
190
198
  const data = this._threadData.get(threadId);
191
199
  if (!data) throw new Error("Thread not found");
192
- if (data.lastState !== "archived")
193
- throw new Error("Thread is not archived");
194
- data.runtime.metadata.unarchive();
200
+ if (data.state !== "archived") throw new Error("Thread is not archived");
195
201
 
202
+ this._stateOp(threadId, "regular");
196
203
  return Promise.resolve();
197
204
  }
198
205
 
199
206
  public delete(threadId: string): Promise<void> {
200
207
  const data = this._threadData.get(threadId);
201
208
  if (!data) throw new Error("Thread not found");
202
- if (data.lastState !== "regular" && data.lastState !== "archived")
203
- throw new Error("Thread is not yet created or already deleted");
204
- data.runtime.metadata.delete();
209
+ if (data.state !== "regular" && data.state !== "archived")
210
+ throw new Error("Thread is not yet initalized");
205
211
 
212
+ this._stateOp(threadId, "deleted");
206
213
  return Promise.resolve();
207
214
  }
208
215