@assistant-ui/react 0.7.8 → 0.7.10

Sign up to get free protection for your applications and to get access to all the features.
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