@assistant-ui/react 0.10.23 → 0.10.25

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 (443) hide show
  1. package/dist/api/{ContentPartRuntime.d.ts → MessagePartRuntime.d.ts} +14 -14
  2. package/dist/api/{ContentPartRuntime.d.ts.map → MessagePartRuntime.d.ts.map} +1 -1
  3. package/dist/api/{ContentPartRuntime.js → MessagePartRuntime.js} +6 -6
  4. package/dist/api/{ContentPartRuntime.js.map → MessagePartRuntime.js.map} +1 -1
  5. package/dist/api/MessageRuntime.d.ts +8 -8
  6. package/dist/api/MessageRuntime.js +17 -17
  7. package/dist/api/MessageRuntime.js.map +1 -1
  8. package/dist/api/RuntimePathTypes.d.ts +2 -2
  9. package/dist/api/ThreadListRuntime.d.ts +3 -0
  10. package/dist/api/ThreadListRuntime.d.ts.map +1 -1
  11. package/dist/api/ThreadListRuntime.js +5 -1
  12. package/dist/api/ThreadListRuntime.js.map +1 -1
  13. package/dist/api/ThreadRuntime.d.ts +5 -0
  14. package/dist/api/ThreadRuntime.d.ts.map +1 -1
  15. package/dist/api/ThreadRuntime.js +1 -0
  16. package/dist/api/ThreadRuntime.js.map +1 -1
  17. package/dist/api/index.d.ts +2 -1
  18. package/dist/api/index.d.ts.map +1 -1
  19. package/dist/cloud/AssistantCloudThreadHistoryAdapter.d.ts +1 -1
  20. package/dist/cloud/AssistantCloudThreadHistoryAdapter.d.ts.map +1 -1
  21. package/dist/cloud/AssistantCloudThreadHistoryAdapter.js.map +1 -1
  22. package/dist/cloud/auiV0.d.ts +3 -3
  23. package/dist/cloud/auiV0.d.ts.map +1 -1
  24. package/dist/cloud/auiV0.js +1 -1
  25. package/dist/cloud/auiV0.js.map +1 -1
  26. package/dist/cloud/index.d.ts +1 -1
  27. package/dist/cloud/index.d.ts.map +1 -1
  28. package/dist/cloud/index.js +1 -1
  29. package/dist/cloud/index.js.map +1 -1
  30. package/dist/cloud/useCloudThreadListRuntime.d.ts +1 -1
  31. package/dist/cloud/useCloudThreadListRuntime.d.ts.map +1 -1
  32. package/dist/cloud/useCloudThreadListRuntime.js.map +1 -1
  33. package/dist/context/providers/MessagePartRuntimeProvider.d.ts +9 -0
  34. package/dist/context/providers/{ContentPartRuntimeProvider.d.ts.map → MessagePartRuntimeProvider.d.ts.map} +1 -1
  35. package/dist/context/providers/{ContentPartRuntimeProvider.js → MessagePartRuntimeProvider.js} +9 -9
  36. package/dist/context/providers/MessagePartRuntimeProvider.js.map +1 -0
  37. package/dist/context/providers/{TextContentPartProvider.d.ts → TextMessagePartProvider.d.ts} +3 -3
  38. package/dist/context/providers/{TextContentPartProvider.d.ts.map → TextMessagePartProvider.d.ts.map} +1 -1
  39. package/dist/context/providers/{TextContentPartProvider.js → TextMessagePartProvider.js} +19 -19
  40. package/dist/context/providers/{TextContentPartProvider.js.map → TextMessagePartProvider.js.map} +1 -1
  41. package/dist/context/providers/index.d.ts +2 -1
  42. package/dist/context/providers/index.d.ts.map +1 -1
  43. package/dist/context/providers/index.js +4 -2
  44. package/dist/context/providers/index.js.map +1 -1
  45. package/dist/context/react/AssistantContext.d.ts +23 -0
  46. package/dist/context/react/AssistantContext.d.ts.map +1 -1
  47. package/dist/context/react/AssistantContext.js.map +1 -1
  48. package/dist/context/react/AttachmentContext.d.ts +72 -72
  49. package/dist/context/react/ComposerContext.d.ts +64 -0
  50. package/dist/context/react/ComposerContext.d.ts.map +1 -1
  51. package/dist/context/react/ComposerContext.js.map +1 -1
  52. package/dist/context/react/MessageContext.d.ts +56 -0
  53. package/dist/context/react/MessageContext.d.ts.map +1 -1
  54. package/dist/context/react/MessageContext.js.map +1 -1
  55. package/dist/context/react/MessagePartContext.d.ts +41 -0
  56. package/dist/context/react/{ContentPartContext.d.ts.map → MessagePartContext.d.ts.map} +1 -1
  57. package/dist/context/react/MessagePartContext.js +25 -0
  58. package/dist/context/react/MessagePartContext.js.map +1 -0
  59. package/dist/context/react/ThreadContext.d.ts +42 -0
  60. package/dist/context/react/ThreadContext.d.ts.map +1 -1
  61. package/dist/context/react/ThreadContext.js.map +1 -1
  62. package/dist/context/react/index.d.ts +1 -1
  63. package/dist/context/react/index.js +3 -3
  64. package/dist/context/react/index.js.map +1 -1
  65. package/dist/context/stores/AssistantToolUIs.d.ts +3 -3
  66. package/dist/context/stores/AssistantToolUIs.js.map +1 -1
  67. package/dist/model-context/useAssistantTool.d.ts +2 -2
  68. package/dist/model-context/useAssistantTool.js.map +1 -1
  69. package/dist/model-context/useAssistantToolUI.d.ts +2 -2
  70. package/dist/model-context/useAssistantToolUI.js.map +1 -1
  71. package/dist/model-context/useInlineRender.d.ts +2 -2
  72. package/dist/model-context/useInlineRender.js.map +1 -1
  73. package/dist/primitives/actionBar/ActionBarCopy.d.ts +42 -0
  74. package/dist/primitives/actionBar/ActionBarCopy.d.ts.map +1 -1
  75. package/dist/primitives/actionBar/ActionBarCopy.js.map +1 -1
  76. package/dist/primitives/actionBar/ActionBarEdit.d.ts +38 -0
  77. package/dist/primitives/actionBar/ActionBarEdit.d.ts.map +1 -1
  78. package/dist/primitives/actionBar/ActionBarEdit.js.map +1 -1
  79. package/dist/primitives/actionBar/ActionBarReload.d.ts +39 -0
  80. package/dist/primitives/actionBar/ActionBarReload.d.ts.map +1 -1
  81. package/dist/primitives/actionBar/ActionBarReload.js.map +1 -1
  82. package/dist/primitives/actionBar/ActionBarRoot.d.ts +56 -0
  83. package/dist/primitives/actionBar/ActionBarRoot.d.ts.map +1 -1
  84. package/dist/primitives/actionBar/ActionBarRoot.js.map +1 -1
  85. package/dist/primitives/assistantModal/AssistantModalContent.d.ts +2 -0
  86. package/dist/primitives/assistantModal/AssistantModalContent.d.ts.map +1 -1
  87. package/dist/primitives/assistantModal/AssistantModalContent.js +2 -1
  88. package/dist/primitives/assistantModal/AssistantModalContent.js.map +1 -1
  89. package/dist/primitives/attachment/AttachmentRoot.d.ts +18 -0
  90. package/dist/primitives/attachment/AttachmentRoot.d.ts.map +1 -1
  91. package/dist/primitives/attachment/AttachmentRoot.js.map +1 -1
  92. package/dist/primitives/branchPicker/BranchPickerCount.d.ts +17 -0
  93. package/dist/primitives/branchPicker/BranchPickerCount.d.ts.map +1 -1
  94. package/dist/primitives/branchPicker/BranchPickerCount.js.map +1 -1
  95. package/dist/primitives/branchPicker/BranchPickerNext.d.ts +17 -0
  96. package/dist/primitives/branchPicker/BranchPickerNext.d.ts.map +1 -1
  97. package/dist/primitives/branchPicker/BranchPickerNext.js.map +1 -1
  98. package/dist/primitives/branchPicker/BranchPickerPrevious.d.ts +38 -0
  99. package/dist/primitives/branchPicker/BranchPickerPrevious.d.ts.map +1 -1
  100. package/dist/primitives/branchPicker/BranchPickerPrevious.js.map +1 -1
  101. package/dist/primitives/branchPicker/BranchPickerRoot.d.ts +27 -0
  102. package/dist/primitives/branchPicker/BranchPickerRoot.d.ts.map +1 -1
  103. package/dist/primitives/branchPicker/BranchPickerRoot.js.map +1 -1
  104. package/dist/primitives/composer/ComposerAttachments.d.ts.map +1 -1
  105. package/dist/primitives/composer/ComposerAttachments.js +11 -8
  106. package/dist/primitives/composer/ComposerAttachments.js.map +1 -1
  107. package/dist/primitives/composer/ComposerCancel.d.ts +17 -0
  108. package/dist/primitives/composer/ComposerCancel.d.ts.map +1 -1
  109. package/dist/primitives/composer/ComposerCancel.js.map +1 -1
  110. package/dist/primitives/composer/ComposerInput.d.ts +72 -0
  111. package/dist/primitives/composer/ComposerInput.d.ts.map +1 -1
  112. package/dist/primitives/composer/ComposerInput.js.map +1 -1
  113. package/dist/primitives/composer/ComposerRoot.d.ts +19 -0
  114. package/dist/primitives/composer/ComposerRoot.d.ts.map +1 -1
  115. package/dist/primitives/composer/ComposerRoot.js.map +1 -1
  116. package/dist/primitives/composer/ComposerSend.d.ts +18 -0
  117. package/dist/primitives/composer/ComposerSend.d.ts.map +1 -1
  118. package/dist/primitives/composer/ComposerSend.js.map +1 -1
  119. package/dist/primitives/index.d.ts +12 -6
  120. package/dist/primitives/index.d.ts.map +1 -1
  121. package/dist/primitives/index.js +23 -11
  122. package/dist/primitives/index.js.map +1 -1
  123. package/dist/primitives/message/MessageAttachments.d.ts.map +1 -1
  124. package/dist/primitives/message/MessageAttachments.js +11 -8
  125. package/dist/primitives/message/MessageAttachments.js.map +1 -1
  126. package/dist/primitives/message/MessageParts.d.ts +116 -0
  127. package/dist/primitives/message/MessageParts.d.ts.map +1 -0
  128. package/dist/primitives/message/MessageParts.js +208 -0
  129. package/dist/primitives/message/MessageParts.js.map +1 -0
  130. package/dist/primitives/message/MessageRoot.d.ts +22 -0
  131. package/dist/primitives/message/MessageRoot.d.ts.map +1 -1
  132. package/dist/primitives/message/MessageRoot.js.map +1 -1
  133. package/dist/primitives/message/index.d.ts +2 -1
  134. package/dist/primitives/message/index.d.ts.map +1 -1
  135. package/dist/primitives/message/index.js +4 -2
  136. package/dist/primitives/message/index.js.map +1 -1
  137. package/dist/primitives/messagePart/MessagePartImage.d.ts +29 -0
  138. package/dist/primitives/messagePart/MessagePartImage.d.ts.map +1 -0
  139. package/dist/primitives/messagePart/MessagePartImage.js +16 -0
  140. package/dist/primitives/messagePart/MessagePartImage.js.map +1 -0
  141. package/dist/primitives/messagePart/MessagePartInProgress.d.ts +6 -0
  142. package/dist/primitives/{contentPart/ContentPartInProgress.d.ts.map → messagePart/MessagePartInProgress.d.ts.map} +1 -1
  143. package/dist/primitives/messagePart/MessagePartInProgress.js +13 -0
  144. package/dist/primitives/messagePart/MessagePartInProgress.js.map +1 -0
  145. package/dist/primitives/messagePart/MessagePartText.d.ts +50 -0
  146. package/dist/primitives/messagePart/MessagePartText.d.ts.map +1 -0
  147. package/dist/primitives/messagePart/MessagePartText.js +18 -0
  148. package/dist/primitives/messagePart/MessagePartText.js.map +1 -0
  149. package/dist/primitives/messagePart/index.d.ts +4 -0
  150. package/dist/primitives/{contentPart → messagePart}/index.d.ts.map +1 -1
  151. package/dist/primitives/messagePart/index.js +10 -0
  152. package/dist/primitives/messagePart/index.js.map +1 -0
  153. package/dist/primitives/messagePart/useMessagePartFile.d.ts +5 -0
  154. package/dist/primitives/messagePart/useMessagePartFile.d.ts.map +1 -0
  155. package/dist/primitives/messagePart/useMessagePartFile.js +18 -0
  156. package/dist/primitives/messagePart/useMessagePartFile.js.map +1 -0
  157. package/dist/primitives/messagePart/useMessagePartImage.d.ts +5 -0
  158. package/dist/primitives/messagePart/useMessagePartImage.d.ts.map +1 -0
  159. package/dist/primitives/messagePart/useMessagePartImage.js +18 -0
  160. package/dist/primitives/messagePart/useMessagePartImage.js.map +1 -0
  161. package/dist/primitives/messagePart/useMessagePartReasoning.d.ts +5 -0
  162. package/dist/primitives/messagePart/useMessagePartReasoning.d.ts.map +1 -0
  163. package/dist/primitives/messagePart/useMessagePartReasoning.js +18 -0
  164. package/dist/primitives/messagePart/useMessagePartReasoning.js.map +1 -0
  165. package/dist/primitives/messagePart/useMessagePartSource.d.ts +5 -0
  166. package/dist/primitives/messagePart/useMessagePartSource.d.ts.map +1 -0
  167. package/dist/primitives/messagePart/useMessagePartSource.js +18 -0
  168. package/dist/primitives/messagePart/useMessagePartSource.js.map +1 -0
  169. package/dist/primitives/messagePart/useMessagePartText.d.ts +7 -0
  170. package/dist/primitives/messagePart/useMessagePartText.d.ts.map +1 -0
  171. package/dist/primitives/messagePart/useMessagePartText.js +18 -0
  172. package/dist/primitives/messagePart/useMessagePartText.js.map +1 -0
  173. package/dist/primitives/thread/ThreadMessages.d.ts +44 -0
  174. package/dist/primitives/thread/ThreadMessages.d.ts.map +1 -1
  175. package/dist/primitives/thread/ThreadMessages.js +5 -2
  176. package/dist/primitives/thread/ThreadMessages.js.map +1 -1
  177. package/dist/primitives/thread/ThreadRoot.d.ts +19 -0
  178. package/dist/primitives/thread/ThreadRoot.d.ts.map +1 -1
  179. package/dist/primitives/thread/ThreadRoot.js.map +1 -1
  180. package/dist/primitives/thread/ThreadViewport.d.ts +24 -0
  181. package/dist/primitives/thread/ThreadViewport.d.ts.map +1 -1
  182. package/dist/primitives/thread/ThreadViewport.js.map +1 -1
  183. package/dist/primitives/threadList/ThreadListItems.d.ts.map +1 -1
  184. package/dist/primitives/threadList/ThreadListItems.js +12 -9
  185. package/dist/primitives/threadList/ThreadListItems.js.map +1 -1
  186. package/dist/runtimes/adapters/attachment/AttachmentAdapter.d.ts +54 -0
  187. package/dist/runtimes/adapters/attachment/AttachmentAdapter.d.ts.map +1 -1
  188. package/dist/runtimes/adapters/feedback/FeedbackAdapter.d.ts +33 -0
  189. package/dist/runtimes/adapters/feedback/FeedbackAdapter.d.ts.map +1 -1
  190. package/dist/runtimes/adapters/speech/SpeechAdapterTypes.d.ts +47 -0
  191. package/dist/runtimes/adapters/speech/SpeechAdapterTypes.d.ts.map +1 -1
  192. package/dist/runtimes/core/BaseThreadRuntimeCore.d.ts +1 -0
  193. package/dist/runtimes/core/BaseThreadRuntimeCore.d.ts.map +1 -1
  194. package/dist/runtimes/core/BaseThreadRuntimeCore.js.map +1 -1
  195. package/dist/runtimes/core/ThreadListRuntimeCore.d.ts +1 -0
  196. package/dist/runtimes/core/ThreadListRuntimeCore.d.ts.map +1 -1
  197. package/dist/runtimes/core/ThreadRuntimeCore.d.ts +1 -0
  198. package/dist/runtimes/core/ThreadRuntimeCore.d.ts.map +1 -1
  199. package/dist/runtimes/external-store/ExternalStoreAdapter.d.ts +2 -0
  200. package/dist/runtimes/external-store/ExternalStoreAdapter.d.ts.map +1 -1
  201. package/dist/runtimes/external-store/ExternalStoreThreadListRuntimeCore.d.ts +1 -0
  202. package/dist/runtimes/external-store/ExternalStoreThreadListRuntimeCore.d.ts.map +1 -1
  203. package/dist/runtimes/external-store/ExternalStoreThreadListRuntimeCore.js +3 -0
  204. package/dist/runtimes/external-store/ExternalStoreThreadListRuntimeCore.js.map +1 -1
  205. package/dist/runtimes/external-store/ExternalStoreThreadRuntimeCore.d.ts +1 -0
  206. package/dist/runtimes/external-store/ExternalStoreThreadRuntimeCore.d.ts.map +1 -1
  207. package/dist/runtimes/external-store/ExternalStoreThreadRuntimeCore.js +3 -0
  208. package/dist/runtimes/external-store/ExternalStoreThreadRuntimeCore.js.map +1 -1
  209. package/dist/runtimes/external-store/ThreadMessageLike.d.ts +3 -3
  210. package/dist/runtimes/external-store/ThreadMessageLike.js +3 -3
  211. package/dist/runtimes/external-store/ThreadMessageLike.js.map +1 -1
  212. package/dist/runtimes/external-store/createMessageConverter.js +3 -3
  213. package/dist/runtimes/external-store/createMessageConverter.js.map +1 -1
  214. package/dist/runtimes/external-store/external-message-converter.js.map +1 -1
  215. package/dist/runtimes/local/ChatModelAdapter.d.ts +4 -4
  216. package/dist/runtimes/local/LocalRuntimeOptions.d.ts +2 -2
  217. package/dist/runtimes/local/LocalRuntimeOptions.d.ts.map +1 -1
  218. package/dist/runtimes/local/LocalRuntimeOptions.js.map +1 -1
  219. package/dist/runtimes/local/LocalThreadListRuntimeCore.d.ts +1 -0
  220. package/dist/runtimes/local/LocalThreadListRuntimeCore.d.ts.map +1 -1
  221. package/dist/runtimes/local/LocalThreadListRuntimeCore.js +3 -0
  222. package/dist/runtimes/local/LocalThreadListRuntimeCore.js.map +1 -1
  223. package/dist/runtimes/local/LocalThreadRuntimeCore.d.ts +2 -0
  224. package/dist/runtimes/local/LocalThreadRuntimeCore.d.ts.map +1 -1
  225. package/dist/runtimes/local/LocalThreadRuntimeCore.js +12 -1
  226. package/dist/runtimes/local/LocalThreadRuntimeCore.js.map +1 -1
  227. package/dist/runtimes/remote-thread-list/EMPTY_THREAD_CORE.d.ts.map +1 -1
  228. package/dist/runtimes/remote-thread-list/EMPTY_THREAD_CORE.js +1 -0
  229. package/dist/runtimes/remote-thread-list/EMPTY_THREAD_CORE.js.map +1 -1
  230. package/dist/runtimes/remote-thread-list/RemoteThreadListHookInstanceManager.d.ts +2 -0
  231. package/dist/runtimes/remote-thread-list/RemoteThreadListHookInstanceManager.d.ts.map +1 -1
  232. package/dist/runtimes/remote-thread-list/RemoteThreadListThreadListRuntimeCore.d.ts +3 -0
  233. package/dist/runtimes/remote-thread-list/RemoteThreadListThreadListRuntimeCore.d.ts.map +1 -1
  234. package/dist/runtimes/remote-thread-list/RemoteThreadListThreadListRuntimeCore.js +3 -0
  235. package/dist/runtimes/remote-thread-list/RemoteThreadListThreadListRuntimeCore.js.map +1 -1
  236. package/dist/runtimes/remote-thread-list/adapter/cloud.d.ts +1 -1
  237. package/dist/runtimes/remote-thread-list/adapter/cloud.d.ts.map +1 -1
  238. package/dist/runtimes/remote-thread-list/adapter/cloud.js +1 -1
  239. package/dist/runtimes/remote-thread-list/adapter/cloud.js.map +1 -1
  240. package/dist/runtimes/utils/MessageRepository.js +1 -1
  241. package/dist/runtimes/utils/MessageRepository.js.map +1 -1
  242. package/dist/tests/setup.js +8 -8
  243. package/dist/tests/setup.js.map +1 -1
  244. package/dist/types/AssistantTypes.d.ts +15 -15
  245. package/dist/types/AttachmentTypes.d.ts +3 -3
  246. package/dist/types/MessagePartComponentTypes.d.ts +25 -0
  247. package/dist/types/{ContentPartComponentTypes.d.ts.map → MessagePartComponentTypes.d.ts.map} +1 -1
  248. package/dist/types/MessagePartComponentTypes.js +1 -0
  249. package/dist/types/index.d.ts +4 -2
  250. package/dist/types/index.d.ts.map +1 -1
  251. package/dist/utils/getThreadMessageText.js.map +1 -1
  252. package/dist/utils/smooth/SmoothContext.js +3 -3
  253. package/dist/utils/smooth/SmoothContext.js.map +1 -1
  254. package/dist/utils/smooth/useSmooth.d.ts +3 -3
  255. package/dist/utils/smooth/useSmooth.js.map +1 -1
  256. package/dist/utils/useToolArgsFieldStatus.js +3 -3
  257. package/dist/utils/useToolArgsFieldStatus.js.map +1 -1
  258. package/package.json +9 -8
  259. package/src/api/{ContentPartRuntime.ts → MessagePartRuntime.ts} +20 -20
  260. package/src/api/MessageRuntime.ts +32 -32
  261. package/src/api/RuntimePathTypes.ts +2 -2
  262. package/src/api/ThreadListRuntime.ts +8 -0
  263. package/src/api/ThreadRuntime.ts +6 -0
  264. package/src/api/index.ts +11 -3
  265. package/src/cloud/AssistantCloudThreadHistoryAdapter.tsx +1 -1
  266. package/src/cloud/auiV0.ts +4 -4
  267. package/src/cloud/index.ts +1 -1
  268. package/src/cloud/useCloudThreadListRuntime.tsx +1 -1
  269. package/src/context/providers/MessagePartRuntimeProvider.tsx +42 -0
  270. package/src/context/providers/{TextContentPartProvider.tsx → TextMessagePartProvider.tsx} +27 -27
  271. package/src/context/providers/index.ts +4 -1
  272. package/src/context/react/AssistantContext.ts +23 -0
  273. package/src/context/react/ComposerContext.ts +64 -0
  274. package/src/context/react/MessageContext.ts +56 -0
  275. package/src/context/react/MessagePartContext.ts +37 -0
  276. package/src/context/react/ThreadContext.ts +42 -0
  277. package/src/context/react/index.ts +1 -1
  278. package/src/context/stores/AssistantToolUIs.ts +4 -4
  279. package/src/model-context/useAssistantTool.tsx +2 -2
  280. package/src/model-context/useAssistantToolUI.tsx +2 -2
  281. package/src/model-context/useInlineRender.tsx +3 -3
  282. package/src/primitives/actionBar/ActionBarCopy.tsx +42 -0
  283. package/src/primitives/actionBar/ActionBarEdit.tsx +38 -0
  284. package/src/primitives/actionBar/ActionBarReload.tsx +39 -0
  285. package/src/primitives/actionBar/ActionBarRoot.tsx +38 -0
  286. package/src/primitives/assistantModal/AssistantModalContent.tsx +5 -1
  287. package/src/primitives/attachment/AttachmentRoot.tsx +18 -0
  288. package/src/primitives/branchPicker/BranchPickerCount.tsx +17 -0
  289. package/src/primitives/branchPicker/BranchPickerNext.tsx +17 -0
  290. package/src/primitives/branchPicker/BranchPickerPrevious.tsx +38 -0
  291. package/src/primitives/branchPicker/BranchPickerRoot.tsx +22 -0
  292. package/src/primitives/composer/ComposerAttachments.tsx +11 -7
  293. package/src/primitives/composer/ComposerCancel.tsx +17 -0
  294. package/src/primitives/composer/ComposerInput.tsx +44 -0
  295. package/src/primitives/composer/ComposerRoot.tsx +19 -0
  296. package/src/primitives/composer/ComposerSend.tsx +18 -0
  297. package/src/primitives/index.ts +14 -6
  298. package/src/primitives/message/MessageAttachments.tsx +11 -7
  299. package/src/primitives/message/MessageParts.tsx +423 -0
  300. package/src/primitives/message/MessageRoot.tsx +22 -0
  301. package/src/primitives/message/index.ts +2 -1
  302. package/src/primitives/messagePart/MessagePartImage.tsx +39 -0
  303. package/src/primitives/messagePart/MessagePartInProgress.tsx +19 -0
  304. package/src/primitives/messagePart/MessagePartText.tsx +62 -0
  305. package/src/primitives/messagePart/index.ts +3 -0
  306. package/src/primitives/messagePart/useMessagePartFile.tsx +18 -0
  307. package/src/primitives/messagePart/useMessagePartImage.tsx +18 -0
  308. package/src/primitives/messagePart/useMessagePartReasoning.tsx +18 -0
  309. package/src/primitives/messagePart/useMessagePartSource.tsx +18 -0
  310. package/src/primitives/messagePart/useMessagePartText.tsx +18 -0
  311. package/src/primitives/thread/ThreadMessages.tsx +52 -4
  312. package/src/primitives/thread/ThreadRoot.tsx +19 -0
  313. package/src/primitives/thread/ThreadViewport.tsx +19 -0
  314. package/src/primitives/threadList/ThreadListItems.tsx +12 -8
  315. package/src/runtimes/adapters/attachment/AttachmentAdapter.ts +56 -0
  316. package/src/runtimes/adapters/feedback/FeedbackAdapter.ts +33 -0
  317. package/src/runtimes/adapters/speech/SpeechAdapterTypes.ts +47 -0
  318. package/src/runtimes/core/BaseThreadRuntimeCore.tsx +1 -0
  319. package/src/runtimes/core/ThreadListRuntimeCore.tsx +1 -0
  320. package/src/runtimes/core/ThreadRuntimeCore.tsx +1 -0
  321. package/src/runtimes/external-store/ExternalStoreAdapter.tsx +2 -0
  322. package/src/runtimes/external-store/ExternalStoreThreadListRuntimeCore.tsx +4 -0
  323. package/src/runtimes/external-store/ExternalStoreThreadRuntimeCore.tsx +3 -0
  324. package/src/runtimes/external-store/ThreadMessageLike.tsx +20 -20
  325. package/src/runtimes/external-store/createMessageConverter.tsx +3 -3
  326. package/src/runtimes/external-store/external-message-converter.tsx +2 -2
  327. package/src/runtimes/local/ChatModelAdapter.tsx +13 -13
  328. package/src/runtimes/local/LocalRuntimeOptions.tsx +1 -1
  329. package/src/runtimes/local/LocalThreadListRuntimeCore.tsx +4 -0
  330. package/src/runtimes/local/LocalThreadRuntimeCore.tsx +30 -15
  331. package/src/runtimes/remote-thread-list/EMPTY_THREAD_CORE.tsx +1 -0
  332. package/src/runtimes/remote-thread-list/RemoteThreadListThreadListRuntimeCore.tsx +4 -0
  333. package/src/runtimes/remote-thread-list/adapter/cloud.tsx +1 -1
  334. package/src/runtimes/utils/MessageRepository.tsx +1 -1
  335. package/src/tests/MessageRepository.test.ts +6 -6
  336. package/src/types/AssistantTypes.ts +24 -24
  337. package/src/types/AttachmentTypes.ts +3 -3
  338. package/src/types/MessagePartComponentTypes.tsx +52 -0
  339. package/src/types/index.ts +69 -28
  340. package/src/utils/getThreadMessageText.tsx +2 -2
  341. package/src/utils/smooth/SmoothContext.tsx +7 -7
  342. package/src/utils/smooth/useSmooth.tsx +7 -7
  343. package/src/utils/useToolArgsFieldStatus.tsx +3 -3
  344. package/dist/cloud/AssistantCloud.d.ts +0 -15
  345. package/dist/cloud/AssistantCloud.d.ts.map +0 -1
  346. package/dist/cloud/AssistantCloud.js +0 -25
  347. package/dist/cloud/AssistantCloud.js.map +0 -1
  348. package/dist/cloud/AssistantCloudAPI.d.ts +0 -28
  349. package/dist/cloud/AssistantCloudAPI.d.ts.map +0 -1
  350. package/dist/cloud/AssistantCloudAPI.js +0 -87
  351. package/dist/cloud/AssistantCloudAPI.js.map +0 -1
  352. package/dist/cloud/AssistantCloudAuthStrategy.d.ts +0 -30
  353. package/dist/cloud/AssistantCloudAuthStrategy.d.ts.map +0 -1
  354. package/dist/cloud/AssistantCloudAuthStrategy.js +0 -139
  355. package/dist/cloud/AssistantCloudAuthStrategy.js.map +0 -1
  356. package/dist/cloud/AssistantCloudAuthTokens.d.ts +0 -11
  357. package/dist/cloud/AssistantCloudAuthTokens.d.ts.map +0 -1
  358. package/dist/cloud/AssistantCloudAuthTokens.js +0 -13
  359. package/dist/cloud/AssistantCloudAuthTokens.js.map +0 -1
  360. package/dist/cloud/AssistantCloudFiles.d.ts +0 -27
  361. package/dist/cloud/AssistantCloudFiles.d.ts.map +0 -1
  362. package/dist/cloud/AssistantCloudFiles.js +0 -25
  363. package/dist/cloud/AssistantCloudFiles.js.map +0 -1
  364. package/dist/cloud/AssistantCloudRuns.d.ts +0 -26
  365. package/dist/cloud/AssistantCloudRuns.d.ts.map +0 -1
  366. package/dist/cloud/AssistantCloudRuns.js +0 -39
  367. package/dist/cloud/AssistantCloudRuns.js.map +0 -1
  368. package/dist/cloud/AssistantCloudThreadMessages.d.ts +0 -30
  369. package/dist/cloud/AssistantCloudThreadMessages.d.ts.map +0 -1
  370. package/dist/cloud/AssistantCloudThreadMessages.js +0 -21
  371. package/dist/cloud/AssistantCloudThreadMessages.js.map +0 -1
  372. package/dist/cloud/AssistantCloudThreads.d.ts +0 -48
  373. package/dist/cloud/AssistantCloudThreads.d.ts.map +0 -1
  374. package/dist/cloud/AssistantCloudThreads.js +0 -30
  375. package/dist/cloud/AssistantCloudThreads.js.map +0 -1
  376. package/dist/context/providers/ContentPartRuntimeProvider.d.ts +0 -9
  377. package/dist/context/providers/ContentPartRuntimeProvider.js.map +0 -1
  378. package/dist/context/react/ContentPartContext.d.ts +0 -41
  379. package/dist/context/react/ContentPartContext.js +0 -25
  380. package/dist/context/react/ContentPartContext.js.map +0 -1
  381. package/dist/primitives/contentPart/ContentPartImage.d.ts +0 -10
  382. package/dist/primitives/contentPart/ContentPartImage.d.ts.map +0 -1
  383. package/dist/primitives/contentPart/ContentPartImage.js +0 -16
  384. package/dist/primitives/contentPart/ContentPartImage.js.map +0 -1
  385. package/dist/primitives/contentPart/ContentPartInProgress.d.ts +0 -6
  386. package/dist/primitives/contentPart/ContentPartInProgress.js +0 -13
  387. package/dist/primitives/contentPart/ContentPartInProgress.js.map +0 -1
  388. package/dist/primitives/contentPart/ContentPartText.d.ts +0 -16
  389. package/dist/primitives/contentPart/ContentPartText.d.ts.map +0 -1
  390. package/dist/primitives/contentPart/ContentPartText.js +0 -18
  391. package/dist/primitives/contentPart/ContentPartText.js.map +0 -1
  392. package/dist/primitives/contentPart/index.d.ts +0 -4
  393. package/dist/primitives/contentPart/index.js +0 -10
  394. package/dist/primitives/contentPart/index.js.map +0 -1
  395. package/dist/primitives/contentPart/useContentPartFile.d.ts +0 -5
  396. package/dist/primitives/contentPart/useContentPartFile.d.ts.map +0 -1
  397. package/dist/primitives/contentPart/useContentPartFile.js +0 -18
  398. package/dist/primitives/contentPart/useContentPartFile.js.map +0 -1
  399. package/dist/primitives/contentPart/useContentPartImage.d.ts +0 -5
  400. package/dist/primitives/contentPart/useContentPartImage.d.ts.map +0 -1
  401. package/dist/primitives/contentPart/useContentPartImage.js +0 -18
  402. package/dist/primitives/contentPart/useContentPartImage.js.map +0 -1
  403. package/dist/primitives/contentPart/useContentPartReasoning.d.ts +0 -5
  404. package/dist/primitives/contentPart/useContentPartReasoning.d.ts.map +0 -1
  405. package/dist/primitives/contentPart/useContentPartReasoning.js +0 -18
  406. package/dist/primitives/contentPart/useContentPartReasoning.js.map +0 -1
  407. package/dist/primitives/contentPart/useContentPartSource.d.ts +0 -5
  408. package/dist/primitives/contentPart/useContentPartSource.d.ts.map +0 -1
  409. package/dist/primitives/contentPart/useContentPartSource.js +0 -18
  410. package/dist/primitives/contentPart/useContentPartSource.js.map +0 -1
  411. package/dist/primitives/contentPart/useContentPartText.d.ts +0 -7
  412. package/dist/primitives/contentPart/useContentPartText.d.ts.map +0 -1
  413. package/dist/primitives/contentPart/useContentPartText.js +0 -18
  414. package/dist/primitives/contentPart/useContentPartText.js.map +0 -1
  415. package/dist/primitives/message/MessageContent.d.ts +0 -23
  416. package/dist/primitives/message/MessageContent.d.ts.map +0 -1
  417. package/dist/primitives/message/MessageContent.js +0 -138
  418. package/dist/primitives/message/MessageContent.js.map +0 -1
  419. package/dist/types/ContentPartComponentTypes.d.ts +0 -25
  420. package/dist/types/ContentPartComponentTypes.js +0 -1
  421. package/src/cloud/AssistantCloud.tsx +0 -22
  422. package/src/cloud/AssistantCloudAPI.tsx +0 -121
  423. package/src/cloud/AssistantCloudAuthStrategy.tsx +0 -193
  424. package/src/cloud/AssistantCloudAuthTokens.tsx +0 -13
  425. package/src/cloud/AssistantCloudFiles.tsx +0 -48
  426. package/src/cloud/AssistantCloudRuns.tsx +0 -45
  427. package/src/cloud/AssistantCloudThreadMessages.tsx +0 -48
  428. package/src/cloud/AssistantCloudThreads.tsx +0 -79
  429. package/src/context/providers/ContentPartRuntimeProvider.tsx +0 -42
  430. package/src/context/react/ContentPartContext.ts +0 -37
  431. package/src/primitives/contentPart/ContentPartImage.tsx +0 -20
  432. package/src/primitives/contentPart/ContentPartInProgress.tsx +0 -19
  433. package/src/primitives/contentPart/ContentPartText.tsx +0 -37
  434. package/src/primitives/contentPart/index.ts +0 -3
  435. package/src/primitives/contentPart/useContentPartFile.tsx +0 -18
  436. package/src/primitives/contentPart/useContentPartImage.tsx +0 -18
  437. package/src/primitives/contentPart/useContentPartReasoning.tsx +0 -18
  438. package/src/primitives/contentPart/useContentPartSource.tsx +0 -18
  439. package/src/primitives/contentPart/useContentPartText.tsx +0 -18
  440. package/src/primitives/message/MessageContent.tsx +0 -241
  441. package/src/tests/AssistantCloudFiles.test.ts +0 -564
  442. package/src/types/ContentPartComponentTypes.tsx +0 -52
  443. /package/dist/types/{ContentPartComponentTypes.js.map → MessagePartComponentTypes.js.map} +0 -0
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/runtimes/external-store/ExternalStoreThreadListRuntimeCore.tsx"],"sourcesContent":["import type { Unsubscribe } from \"../../types\";\nimport { ExternalStoreThreadRuntimeCore } from \"./ExternalStoreThreadRuntimeCore\";\nimport { ThreadListRuntimeCore } from \"../core/ThreadListRuntimeCore\";\nimport {\n ExternalStoreThreadData,\n ExternalStoreThreadListAdapter,\n} from \"./ExternalStoreAdapter\";\n\nexport type ExternalStoreThreadFactory = () => ExternalStoreThreadRuntimeCore;\n\nconst EMPTY_ARRAY = Object.freeze([]);\nconst DEFAULT_THREAD_ID = \"DEFAULT_THREAD_ID\";\nconst DEFAULT_THREADS = Object.freeze([DEFAULT_THREAD_ID]);\nconst DEFAULT_THREAD: ExternalStoreThreadData<\"regular\"> = Object.freeze({\n threadId: DEFAULT_THREAD_ID,\n status: \"regular\",\n});\nconst RESOLVED_PROMISE = Promise.resolve();\n\nexport class ExternalStoreThreadListRuntimeCore\n implements ThreadListRuntimeCore\n{\n private _mainThreadId: string = DEFAULT_THREAD_ID;\n private _threads: readonly string[] = DEFAULT_THREADS;\n private _archivedThreads: readonly string[] = EMPTY_ARRAY;\n\n public get newThreadId() {\n return undefined;\n }\n\n public get threadIds() {\n return this._threads;\n }\n\n public get archivedThreadIds() {\n return this._archivedThreads;\n }\n\n public getLoadThreadsPromise() {\n return RESOLVED_PROMISE;\n }\n\n private _mainThread: ExternalStoreThreadRuntimeCore;\n\n public get mainThreadId() {\n return this._mainThreadId;\n }\n\n constructor(\n private adapter: ExternalStoreThreadListAdapter = {},\n private threadFactory: ExternalStoreThreadFactory,\n ) {\n this._mainThread = this.threadFactory();\n }\n\n public getMainThreadRuntimeCore() {\n return this._mainThread;\n }\n\n public getThreadRuntimeCore(): never {\n throw new Error(\"Method not implemented.\");\n }\n\n public getItemById(threadId: string) {\n for (const thread of this.adapter.threads ?? []) {\n if (thread.threadId === threadId) return thread;\n }\n for (const thread of this.adapter.archivedThreads ?? []) {\n if (thread.threadId === threadId) return thread;\n }\n if (threadId === DEFAULT_THREAD_ID) return DEFAULT_THREAD;\n return undefined;\n }\n\n public __internal_setAdapter(adapter: ExternalStoreThreadListAdapter) {\n const previousAdapter = this.adapter;\n this.adapter = adapter;\n\n const newThreadId = adapter.threadId ?? DEFAULT_THREAD_ID;\n const newThreads = adapter.threads ?? EMPTY_ARRAY;\n const newArchivedThreads = adapter.archivedThreads ?? EMPTY_ARRAY;\n\n const previousThreadId = previousAdapter.threadId ?? DEFAULT_THREAD_ID;\n const previousThreads = previousAdapter.threads ?? EMPTY_ARRAY;\n const previousArchivedThreads =\n previousAdapter.archivedThreads ?? EMPTY_ARRAY;\n\n if (\n previousThreadId === newThreadId &&\n previousThreads === newThreads &&\n previousArchivedThreads === newArchivedThreads\n ) {\n return;\n }\n\n if (previousThreads !== newThreads) {\n this._threads =\n this.adapter.threads?.map((t) => t.threadId) ?? EMPTY_ARRAY;\n }\n\n if (previousArchivedThreads !== newArchivedThreads) {\n this._archivedThreads =\n this.adapter.archivedThreads?.map((t) => t.threadId) ?? EMPTY_ARRAY;\n }\n\n if (previousThreadId !== newThreadId) {\n this._mainThreadId = newThreadId;\n this._mainThread = this.threadFactory();\n }\n\n this._notifySubscribers();\n }\n\n public async switchToThread(threadId: string): Promise<void> {\n if (this._mainThreadId === threadId) return;\n const onSwitchToThread = this.adapter.onSwitchToThread;\n if (!onSwitchToThread)\n throw new Error(\n \"External store adapter does not support switching to thread\",\n );\n onSwitchToThread(threadId);\n }\n\n public async switchToNewThread(): Promise<void> {\n const onSwitchToNewThread = this.adapter.onSwitchToNewThread;\n if (!onSwitchToNewThread)\n throw new Error(\n \"External store adapter does not support switching to new thread\",\n );\n\n onSwitchToNewThread();\n }\n\n public async rename(threadId: string, newTitle: string): Promise<void> {\n const onRename = this.adapter.onRename;\n if (!onRename)\n throw new Error(\"External store adapter does not support renaming\");\n\n onRename(threadId, newTitle);\n }\n\n public async detach(): Promise<void> {\n // no-op\n }\n\n public async archive(threadId: string): Promise<void> {\n const onArchive = this.adapter.onArchive;\n if (!onArchive)\n throw new Error(\"External store adapter does not support archiving\");\n\n onArchive(threadId);\n }\n\n public async unarchive(threadId: string): Promise<void> {\n const onUnarchive = this.adapter.onUnarchive;\n if (!onUnarchive)\n throw new Error(\"External store adapter does not support unarchiving\");\n\n onUnarchive(threadId);\n }\n\n public async delete(threadId: string): Promise<void> {\n const onDelete = this.adapter.onDelete;\n if (!onDelete)\n throw new Error(\"External store adapter does not support deleting\");\n\n onDelete(threadId);\n }\n\n public initialize(): never {\n throw new Error(\"Method not implemented.\");\n }\n\n public generateTitle(): never {\n throw new Error(\"Method not implemented.\");\n }\n\n private _subscriptions = new Set<() => void>();\n\n public subscribe(callback: () => void): Unsubscribe {\n this._subscriptions.add(callback);\n return () => this._subscriptions.delete(callback);\n }\n\n private _notifySubscribers() {\n for (const callback of this._subscriptions) callback();\n }\n}\n"],"mappings":";AAUA,IAAM,cAAc,OAAO,OAAO,CAAC,CAAC;AACpC,IAAM,oBAAoB;AAC1B,IAAM,kBAAkB,OAAO,OAAO,CAAC,iBAAiB,CAAC;AACzD,IAAM,iBAAqD,OAAO,OAAO;AAAA,EACvE,UAAU;AAAA,EACV,QAAQ;AACV,CAAC;AACD,IAAM,mBAAmB,QAAQ,QAAQ;AAElC,IAAM,qCAAN,MAEP;AAAA,EA2BE,YACU,UAA0C,CAAC,GAC3C,eACR;AAFQ;AACA;AAER,SAAK,cAAc,KAAK,cAAc;AAAA,EACxC;AAAA,EA/BQ,gBAAwB;AAAA,EACxB,WAA8B;AAAA,EAC9B,mBAAsC;AAAA,EAE9C,IAAW,cAAc;AACvB,WAAO;AAAA,EACT;AAAA,EAEA,IAAW,YAAY;AACrB,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAW,oBAAoB;AAC7B,WAAO,KAAK;AAAA,EACd;AAAA,EAEO,wBAAwB;AAC7B,WAAO;AAAA,EACT;AAAA,EAEQ;AAAA,EAER,IAAW,eAAe;AACxB,WAAO,KAAK;AAAA,EACd;AAAA,EASO,2BAA2B;AAChC,WAAO,KAAK;AAAA,EACd;AAAA,EAEO,uBAA8B;AACnC,UAAM,IAAI,MAAM,yBAAyB;AAAA,EAC3C;AAAA,EAEO,YAAY,UAAkB;AACnC,eAAW,UAAU,KAAK,QAAQ,WAAW,CAAC,GAAG;AAC/C,UAAI,OAAO,aAAa,SAAU,QAAO;AAAA,IAC3C;AACA,eAAW,UAAU,KAAK,QAAQ,mBAAmB,CAAC,GAAG;AACvD,UAAI,OAAO,aAAa,SAAU,QAAO;AAAA,IAC3C;AACA,QAAI,aAAa,kBAAmB,QAAO;AAC3C,WAAO;AAAA,EACT;AAAA,EAEO,sBAAsB,SAAyC;AACpE,UAAM,kBAAkB,KAAK;AAC7B,SAAK,UAAU;AAEf,UAAM,cAAc,QAAQ,YAAY;AACxC,UAAM,aAAa,QAAQ,WAAW;AACtC,UAAM,qBAAqB,QAAQ,mBAAmB;AAEtD,UAAM,mBAAmB,gBAAgB,YAAY;AACrD,UAAM,kBAAkB,gBAAgB,WAAW;AACnD,UAAM,0BACJ,gBAAgB,mBAAmB;AAErC,QACE,qBAAqB,eACrB,oBAAoB,cACpB,4BAA4B,oBAC5B;AACA;AAAA,IACF;AAEA,QAAI,oBAAoB,YAAY;AAClC,WAAK,WACH,KAAK,QAAQ,SAAS,IAAI,CAAC,MAAM,EAAE,QAAQ,KAAK;AAAA,IACpD;AAEA,QAAI,4BAA4B,oBAAoB;AAClD,WAAK,mBACH,KAAK,QAAQ,iBAAiB,IAAI,CAAC,MAAM,EAAE,QAAQ,KAAK;AAAA,IAC5D;AAEA,QAAI,qBAAqB,aAAa;AACpC,WAAK,gBAAgB;AACrB,WAAK,cAAc,KAAK,cAAc;AAAA,IACxC;AAEA,SAAK,mBAAmB;AAAA,EAC1B;AAAA,EAEA,MAAa,eAAe,UAAiC;AAC3D,QAAI,KAAK,kBAAkB,SAAU;AACrC,UAAM,mBAAmB,KAAK,QAAQ;AACtC,QAAI,CAAC;AACH,YAAM,IAAI;AAAA,QACR;AAAA,MACF;AACF,qBAAiB,QAAQ;AAAA,EAC3B;AAAA,EAEA,MAAa,oBAAmC;AAC9C,UAAM,sBAAsB,KAAK,QAAQ;AACzC,QAAI,CAAC;AACH,YAAM,IAAI;AAAA,QACR;AAAA,MACF;AAEF,wBAAoB;AAAA,EACtB;AAAA,EAEA,MAAa,OAAO,UAAkB,UAAiC;AACrE,UAAM,WAAW,KAAK,QAAQ;AAC9B,QAAI,CAAC;AACH,YAAM,IAAI,MAAM,kDAAkD;AAEpE,aAAS,UAAU,QAAQ;AAAA,EAC7B;AAAA,EAEA,MAAa,SAAwB;AAAA,EAErC;AAAA,EAEA,MAAa,QAAQ,UAAiC;AACpD,UAAM,YAAY,KAAK,QAAQ;AAC/B,QAAI,CAAC;AACH,YAAM,IAAI,MAAM,mDAAmD;AAErE,cAAU,QAAQ;AAAA,EACpB;AAAA,EAEA,MAAa,UAAU,UAAiC;AACtD,UAAM,cAAc,KAAK,QAAQ;AACjC,QAAI,CAAC;AACH,YAAM,IAAI,MAAM,qDAAqD;AAEvE,gBAAY,QAAQ;AAAA,EACtB;AAAA,EAEA,MAAa,OAAO,UAAiC;AACnD,UAAM,WAAW,KAAK,QAAQ;AAC9B,QAAI,CAAC;AACH,YAAM,IAAI,MAAM,kDAAkD;AAEpE,aAAS,QAAQ;AAAA,EACnB;AAAA,EAEO,aAAoB;AACzB,UAAM,IAAI,MAAM,yBAAyB;AAAA,EAC3C;AAAA,EAEO,gBAAuB;AAC5B,UAAM,IAAI,MAAM,yBAAyB;AAAA,EAC3C;AAAA,EAEQ,iBAAiB,oBAAI,IAAgB;AAAA,EAEtC,UAAU,UAAmC;AAClD,SAAK,eAAe,IAAI,QAAQ;AAChC,WAAO,MAAM,KAAK,eAAe,OAAO,QAAQ;AAAA,EAClD;AAAA,EAEQ,qBAAqB;AAC3B,eAAW,YAAY,KAAK,eAAgB,UAAS;AAAA,EACvD;AACF;","names":[]}
1
+ {"version":3,"sources":["../../../src/runtimes/external-store/ExternalStoreThreadListRuntimeCore.tsx"],"sourcesContent":["import type { Unsubscribe } from \"../../types\";\nimport { ExternalStoreThreadRuntimeCore } from \"./ExternalStoreThreadRuntimeCore\";\nimport { ThreadListRuntimeCore } from \"../core/ThreadListRuntimeCore\";\nimport {\n ExternalStoreThreadData,\n ExternalStoreThreadListAdapter,\n} from \"./ExternalStoreAdapter\";\n\nexport type ExternalStoreThreadFactory = () => ExternalStoreThreadRuntimeCore;\n\nconst EMPTY_ARRAY = Object.freeze([]);\nconst DEFAULT_THREAD_ID = \"DEFAULT_THREAD_ID\";\nconst DEFAULT_THREADS = Object.freeze([DEFAULT_THREAD_ID]);\nconst DEFAULT_THREAD: ExternalStoreThreadData<\"regular\"> = Object.freeze({\n threadId: DEFAULT_THREAD_ID,\n status: \"regular\",\n});\nconst RESOLVED_PROMISE = Promise.resolve();\n\nexport class ExternalStoreThreadListRuntimeCore\n implements ThreadListRuntimeCore\n{\n private _mainThreadId: string = DEFAULT_THREAD_ID;\n private _threads: readonly string[] = DEFAULT_THREADS;\n private _archivedThreads: readonly string[] = EMPTY_ARRAY;\n\n public get isLoading() {\n return this.adapter.isLoading ?? false;\n }\n\n public get newThreadId() {\n return undefined;\n }\n\n public get threadIds() {\n return this._threads;\n }\n\n public get archivedThreadIds() {\n return this._archivedThreads;\n }\n\n public getLoadThreadsPromise() {\n return RESOLVED_PROMISE;\n }\n\n private _mainThread: ExternalStoreThreadRuntimeCore;\n\n public get mainThreadId() {\n return this._mainThreadId;\n }\n\n constructor(\n private adapter: ExternalStoreThreadListAdapter = {},\n private threadFactory: ExternalStoreThreadFactory,\n ) {\n this._mainThread = this.threadFactory();\n }\n\n public getMainThreadRuntimeCore() {\n return this._mainThread;\n }\n\n public getThreadRuntimeCore(): never {\n throw new Error(\"Method not implemented.\");\n }\n\n public getItemById(threadId: string) {\n for (const thread of this.adapter.threads ?? []) {\n if (thread.threadId === threadId) return thread;\n }\n for (const thread of this.adapter.archivedThreads ?? []) {\n if (thread.threadId === threadId) return thread;\n }\n if (threadId === DEFAULT_THREAD_ID) return DEFAULT_THREAD;\n return undefined;\n }\n\n public __internal_setAdapter(adapter: ExternalStoreThreadListAdapter) {\n const previousAdapter = this.adapter;\n this.adapter = adapter;\n\n const newThreadId = adapter.threadId ?? DEFAULT_THREAD_ID;\n const newThreads = adapter.threads ?? EMPTY_ARRAY;\n const newArchivedThreads = adapter.archivedThreads ?? EMPTY_ARRAY;\n\n const previousThreadId = previousAdapter.threadId ?? DEFAULT_THREAD_ID;\n const previousThreads = previousAdapter.threads ?? EMPTY_ARRAY;\n const previousArchivedThreads =\n previousAdapter.archivedThreads ?? EMPTY_ARRAY;\n\n if (\n previousThreadId === newThreadId &&\n previousThreads === newThreads &&\n previousArchivedThreads === newArchivedThreads\n ) {\n return;\n }\n\n if (previousThreads !== newThreads) {\n this._threads =\n this.adapter.threads?.map((t) => t.threadId) ?? EMPTY_ARRAY;\n }\n\n if (previousArchivedThreads !== newArchivedThreads) {\n this._archivedThreads =\n this.adapter.archivedThreads?.map((t) => t.threadId) ?? EMPTY_ARRAY;\n }\n\n if (previousThreadId !== newThreadId) {\n this._mainThreadId = newThreadId;\n this._mainThread = this.threadFactory();\n }\n\n this._notifySubscribers();\n }\n\n public async switchToThread(threadId: string): Promise<void> {\n if (this._mainThreadId === threadId) return;\n const onSwitchToThread = this.adapter.onSwitchToThread;\n if (!onSwitchToThread)\n throw new Error(\n \"External store adapter does not support switching to thread\",\n );\n onSwitchToThread(threadId);\n }\n\n public async switchToNewThread(): Promise<void> {\n const onSwitchToNewThread = this.adapter.onSwitchToNewThread;\n if (!onSwitchToNewThread)\n throw new Error(\n \"External store adapter does not support switching to new thread\",\n );\n\n onSwitchToNewThread();\n }\n\n public async rename(threadId: string, newTitle: string): Promise<void> {\n const onRename = this.adapter.onRename;\n if (!onRename)\n throw new Error(\"External store adapter does not support renaming\");\n\n onRename(threadId, newTitle);\n }\n\n public async detach(): Promise<void> {\n // no-op\n }\n\n public async archive(threadId: string): Promise<void> {\n const onArchive = this.adapter.onArchive;\n if (!onArchive)\n throw new Error(\"External store adapter does not support archiving\");\n\n onArchive(threadId);\n }\n\n public async unarchive(threadId: string): Promise<void> {\n const onUnarchive = this.adapter.onUnarchive;\n if (!onUnarchive)\n throw new Error(\"External store adapter does not support unarchiving\");\n\n onUnarchive(threadId);\n }\n\n public async delete(threadId: string): Promise<void> {\n const onDelete = this.adapter.onDelete;\n if (!onDelete)\n throw new Error(\"External store adapter does not support deleting\");\n\n onDelete(threadId);\n }\n\n public initialize(): never {\n throw new Error(\"Method not implemented.\");\n }\n\n public generateTitle(): never {\n throw new Error(\"Method not implemented.\");\n }\n\n private _subscriptions = new Set<() => void>();\n\n public subscribe(callback: () => void): Unsubscribe {\n this._subscriptions.add(callback);\n return () => this._subscriptions.delete(callback);\n }\n\n private _notifySubscribers() {\n for (const callback of this._subscriptions) callback();\n }\n}\n"],"mappings":"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","names":[]}
@@ -11,6 +11,7 @@ export declare class ExternalStoreThreadRuntimeCore extends BaseThreadRuntimeCor
11
11
  get capabilities(): RuntimeCapabilities;
12
12
  private _messages;
13
13
  isDisabled: boolean;
14
+ get isLoading(): boolean;
14
15
  get messages(): readonly ThreadMessage[];
15
16
  get adapters(): {
16
17
  attachments?: import("..").AttachmentAdapter | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"ExternalStoreThreadRuntimeCore.d.ts","sourceRoot":"","sources":["../../../src/runtimes/external-store/ExternalStoreThreadRuntimeCore.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,EACpB,cAAc,EACd,gBAAgB,EACjB,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAS9D,OAAO,EACL,mBAAmB,EACnB,iBAAiB,EAClB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAI3D,eAAO,MAAM,kBAAkB,GAC7B,WAAW,OAAO,EAClB,UAAU,SAAS,aAAa,EAAE,YAGnC,CAAC;AAEF,qBAAa,8BACX,SAAQ,qBACR,YAAW,iBAAiB;IAE5B,OAAO,CAAC,qBAAqB,CAAuB;IAEpD,OAAO,CAAC,aAAa,CASnB;IAEF,IAAW,YAAY,wBAEtB;IAED,OAAO,CAAC,SAAS,CAA4B;IACtC,UAAU,EAAG,OAAO,CAAC;IAE5B,IAAoB,QAAQ,6BAE3B;IAED,IAAW,QAAQ;;;;;kBAElB;IAEM,WAAW,EAAE,SAAS,gBAAgB,EAAE,CAAM;IAC9C,MAAM,EAAE,OAAO,CAAa;IAEnC,OAAO,CAAC,UAAU,CAAgC;IAElD,OAAO,CAAC,MAAM,CAA6B;IAE3B,SAAS,CAAC,SAAS,EAAE,MAAM;gBAQzC,eAAe,EAAE,oBAAoB,EACrC,KAAK,EAAE,oBAAoB,CAAC,GAAG,CAAC;IAM3B,qBAAqB,CAAC,KAAK,EAAE,oBAAoB,CAAC,GAAG,CAAC;IAoG7C,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAQzC,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAU7C,QAAQ,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAO/C,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAIhC,SAAS,IAAI,IAAI;IAiCjB,aAAa,CAAC,OAAO,EAAE,oBAAoB;IAclD,OAAO,CAAC,cAAc,CAUpB;CACH"}
1
+ {"version":3,"file":"ExternalStoreThreadRuntimeCore.d.ts","sourceRoot":"","sources":["../../../src/runtimes/external-store/ExternalStoreThreadRuntimeCore.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,EACpB,cAAc,EACd,gBAAgB,EACjB,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAS9D,OAAO,EACL,mBAAmB,EACnB,iBAAiB,EAClB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAI3D,eAAO,MAAM,kBAAkB,GAC7B,WAAW,OAAO,EAClB,UAAU,SAAS,aAAa,EAAE,YAGnC,CAAC;AAEF,qBAAa,8BACX,SAAQ,qBACR,YAAW,iBAAiB;IAE5B,OAAO,CAAC,qBAAqB,CAAuB;IAEpD,OAAO,CAAC,aAAa,CASnB;IAEF,IAAW,YAAY,wBAEtB;IAED,OAAO,CAAC,SAAS,CAA4B;IACtC,UAAU,EAAG,OAAO,CAAC;IAC5B,IAAW,SAAS,YAEnB;IAED,IAAoB,QAAQ,6BAE3B;IAED,IAAW,QAAQ;;;;;kBAElB;IAEM,WAAW,EAAE,SAAS,gBAAgB,EAAE,CAAM;IAC9C,MAAM,EAAE,OAAO,CAAa;IAEnC,OAAO,CAAC,UAAU,CAAgC;IAElD,OAAO,CAAC,MAAM,CAA6B;IAE3B,SAAS,CAAC,SAAS,EAAE,MAAM;gBAQzC,eAAe,EAAE,oBAAoB,EACrC,KAAK,EAAE,oBAAoB,CAAC,GAAG,CAAC;IAM3B,qBAAqB,CAAC,KAAK,EAAE,oBAAoB,CAAC,GAAG,CAAC;IAoG7C,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAQzC,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAU7C,QAAQ,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAO/C,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAIhC,SAAS,IAAI,IAAI;IAiCjB,aAAa,CAAC,OAAO,EAAE,oBAAoB;IAclD,OAAO,CAAC,cAAc,CAUpB;CACH"}
@@ -29,6 +29,9 @@ var ExternalStoreThreadRuntimeCore = class extends BaseThreadRuntimeCore {
29
29
  }
30
30
  _messages;
31
31
  isDisabled;
32
+ get isLoading() {
33
+ return this._store.isLoading ?? false;
34
+ }
32
35
  get messages() {
33
36
  return this._messages;
34
37
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/runtimes/external-store/ExternalStoreThreadRuntimeCore.tsx"],"sourcesContent":["import {\n AddToolResultOptions,\n StartRunConfig,\n ThreadSuggestion,\n} from \"../core/ThreadRuntimeCore\";\n\nimport { AppendMessage, ThreadMessage } from \"../../types\";\nimport { ExternalStoreAdapter } from \"./ExternalStoreAdapter\";\nimport {\n getExternalStoreMessage,\n symbolInnerMessage,\n} from \"./getExternalStoreMessage\";\nimport { ThreadMessageConverter } from \"./ThreadMessageConverter\";\nimport { getAutoStatus, isAutoStatus } from \"./auto-status\";\nimport { fromThreadMessageLike } from \"./ThreadMessageLike\";\nimport { getThreadMessageText } from \"../../utils/getThreadMessageText\";\nimport {\n RuntimeCapabilities,\n ThreadRuntimeCore,\n} from \"../core/ThreadRuntimeCore\";\nimport { BaseThreadRuntimeCore } from \"../core/BaseThreadRuntimeCore\";\nimport { ModelContextProvider } from \"../../model-context\";\n\nconst EMPTY_ARRAY = Object.freeze([]);\n\nexport const hasUpcomingMessage = (\n isRunning: boolean,\n messages: readonly ThreadMessage[],\n) => {\n return isRunning && messages[messages.length - 1]?.role !== \"assistant\";\n};\n\nexport class ExternalStoreThreadRuntimeCore\n extends BaseThreadRuntimeCore\n implements ThreadRuntimeCore\n{\n private assistantOptimisticId: string | null = null;\n\n private _capabilities: RuntimeCapabilities = {\n switchToBranch: false,\n edit: false,\n reload: false,\n cancel: false,\n unstable_copy: false,\n speech: false,\n attachments: false,\n feedback: false,\n };\n\n public get capabilities() {\n return this._capabilities;\n }\n\n private _messages!: readonly ThreadMessage[];\n public isDisabled!: boolean;\n\n public override get messages() {\n return this._messages;\n }\n\n public get adapters() {\n return this._store.adapters;\n }\n\n public suggestions: readonly ThreadSuggestion[] = [];\n public extras: unknown = undefined;\n\n private _converter = new ThreadMessageConverter();\n\n private _store!: ExternalStoreAdapter<any>;\n\n public override beginEdit(messageId: string) {\n if (!this._store.onEdit)\n throw new Error(\"Runtime does not support editing.\");\n\n super.beginEdit(messageId);\n }\n\n constructor(\n contextProvider: ModelContextProvider,\n store: ExternalStoreAdapter<any>,\n ) {\n super(contextProvider);\n this.__internal_setAdapter(store);\n }\n\n public __internal_setAdapter(store: ExternalStoreAdapter<any>) {\n if (this._store === store) return;\n\n const isRunning = store.isRunning ?? false;\n this.isDisabled = store.isDisabled ?? false;\n\n const oldStore = this._store as ExternalStoreAdapter<any> | undefined;\n this._store = store;\n this.extras = store.extras;\n this.suggestions = store.suggestions ?? EMPTY_ARRAY;\n this._capabilities = {\n switchToBranch: this._store.setMessages !== undefined,\n edit: this._store.onEdit !== undefined,\n reload: this._store.onReload !== undefined,\n cancel: this._store.onCancel !== undefined,\n speech: this._store.adapters?.speech !== undefined,\n unstable_copy: this._store.unstable_capabilities?.copy !== false, // default true\n attachments: !!this._store.adapters?.attachments,\n feedback: !!this._store.adapters?.feedback,\n };\n\n if (oldStore) {\n // flush the converter cache when the convertMessage prop changes\n if (oldStore.convertMessage !== store.convertMessage) {\n this._converter = new ThreadMessageConverter();\n } else if (\n oldStore.isRunning === store.isRunning &&\n oldStore.messages === store.messages\n ) {\n this._notifySubscribers();\n // no conversion update\n return;\n }\n }\n\n const messages = !store.convertMessage\n ? store.messages\n : this._converter.convertMessages(store.messages, (cache, m, idx) => {\n if (!store.convertMessage) return m;\n\n const isLast = idx === store.messages.length - 1;\n const autoStatus = getAutoStatus(isLast, isRunning);\n\n if (\n cache &&\n (cache.role !== \"assistant\" ||\n !isAutoStatus(cache.status) ||\n cache.status === autoStatus)\n )\n return cache;\n\n const messageLike = store.convertMessage(m, idx);\n const newMessage = fromThreadMessageLike(\n messageLike,\n idx.toString(),\n autoStatus,\n );\n (newMessage as any)[symbolInnerMessage] = m;\n return newMessage;\n });\n\n if (messages.length > 0) this.ensureInitialized();\n\n if (oldStore?.isRunning ?? false !== store.isRunning ?? false) {\n if (store.isRunning) {\n this._notifyEventSubscribers(\"run-start\");\n } else {\n this._notifyEventSubscribers(\"run-end\");\n }\n }\n\n for (let i = 0; i < messages.length; i++) {\n const message = messages[i]!;\n const parent = messages[i - 1];\n this.repository.addOrUpdateMessage(parent?.id ?? null, message);\n }\n\n if (this.assistantOptimisticId) {\n this.repository.deleteMessage(this.assistantOptimisticId);\n this.assistantOptimisticId = null;\n }\n\n if (hasUpcomingMessage(isRunning, messages)) {\n this.assistantOptimisticId = this.repository.appendOptimisticMessage(\n messages.at(-1)?.id ?? null,\n {\n role: \"assistant\",\n content: [],\n },\n );\n }\n\n this.repository.resetHead(\n this.assistantOptimisticId ?? messages.at(-1)?.id ?? null,\n );\n\n this._messages = this.repository.getMessages();\n this._notifySubscribers();\n }\n\n public override switchToBranch(branchId: string): void {\n if (!this._store.setMessages)\n throw new Error(\"Runtime does not support switching branches.\");\n\n this.repository.switchToBranch(branchId);\n this.updateMessages(this.repository.getMessages());\n }\n\n public async append(message: AppendMessage): Promise<void> {\n if (message.parentId !== (this.messages.at(-1)?.id ?? null)) {\n if (!this._store.onEdit)\n throw new Error(\"Runtime does not support editing messages.\");\n await this._store.onEdit(message);\n } else {\n await this._store.onNew(message);\n }\n }\n\n public async startRun(config: StartRunConfig): Promise<void> {\n if (!this._store.onReload)\n throw new Error(\"Runtime does not support reloading messages.\");\n\n await this._store.onReload(config.parentId, config);\n }\n\n public async resumeRun(): Promise<void> {\n throw new Error(\"Runtime does not support resuming runs.\");\n }\n\n public cancelRun(): void {\n if (!this._store.onCancel)\n throw new Error(\"Runtime does not support cancelling runs.\");\n\n this._store.onCancel();\n\n if (this.assistantOptimisticId) {\n this.repository.deleteMessage(this.assistantOptimisticId);\n this.assistantOptimisticId = null;\n }\n\n let messages = this.repository.getMessages();\n const previousMessage = messages[messages.length - 1];\n if (\n previousMessage?.role === \"user\" &&\n previousMessage.id === messages.at(-1)?.id // ensure the previous message is a leaf node\n ) {\n this.repository.deleteMessage(previousMessage.id);\n if (!this.composer.text.trim()) {\n this.composer.setText(getThreadMessageText(previousMessage));\n }\n\n messages = this.repository.getMessages();\n } else {\n this._notifySubscribers();\n }\n\n // resync messages (for reloading, to restore the previous branch)\n setTimeout(() => {\n this.updateMessages(messages);\n }, 0);\n }\n\n public addToolResult(options: AddToolResultOptions) {\n if (!this._store.onAddToolResult && !this._store.onAddToolResult)\n throw new Error(\"Runtime does not support tool results.\");\n this._store.onAddToolResult?.({\n messageId: options.messageId,\n toolName: options.toolName,\n toolCallId: options.toolCallId,\n result: options.result,\n isError: options.isError,\n artifact: options.artifact,\n });\n this._store.onAddToolResult?.(options);\n }\n\n private updateMessages = (messages: readonly ThreadMessage[]) => {\n const hasConverter = this._store.convertMessage !== undefined;\n if (hasConverter) {\n this._store.setMessages?.(\n messages.flatMap(getExternalStoreMessage).filter((m) => m != null),\n );\n } else {\n // TODO mark this as readonly in v0.8.0\n this._store.setMessages?.(messages as ThreadMessage[]);\n }\n };\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../../src/runtimes/external-store/ExternalStoreThreadRuntimeCore.tsx"],"sourcesContent":["import {\n AddToolResultOptions,\n StartRunConfig,\n ThreadSuggestion,\n} from \"../core/ThreadRuntimeCore\";\n\nimport { AppendMessage, ThreadMessage } from \"../../types\";\nimport { ExternalStoreAdapter } from \"./ExternalStoreAdapter\";\nimport {\n getExternalStoreMessage,\n symbolInnerMessage,\n} from \"./getExternalStoreMessage\";\nimport { ThreadMessageConverter } from \"./ThreadMessageConverter\";\nimport { getAutoStatus, isAutoStatus } from \"./auto-status\";\nimport { fromThreadMessageLike } from \"./ThreadMessageLike\";\nimport { getThreadMessageText } from \"../../utils/getThreadMessageText\";\nimport {\n RuntimeCapabilities,\n ThreadRuntimeCore,\n} from \"../core/ThreadRuntimeCore\";\nimport { BaseThreadRuntimeCore } from \"../core/BaseThreadRuntimeCore\";\nimport { ModelContextProvider } from \"../../model-context\";\n\nconst EMPTY_ARRAY = Object.freeze([]);\n\nexport const hasUpcomingMessage = (\n isRunning: boolean,\n messages: readonly ThreadMessage[],\n) => {\n return isRunning && messages[messages.length - 1]?.role !== \"assistant\";\n};\n\nexport class ExternalStoreThreadRuntimeCore\n extends BaseThreadRuntimeCore\n implements ThreadRuntimeCore\n{\n private assistantOptimisticId: string | null = null;\n\n private _capabilities: RuntimeCapabilities = {\n switchToBranch: false,\n edit: false,\n reload: false,\n cancel: false,\n unstable_copy: false,\n speech: false,\n attachments: false,\n feedback: false,\n };\n\n public get capabilities() {\n return this._capabilities;\n }\n\n private _messages!: readonly ThreadMessage[];\n public isDisabled!: boolean;\n public get isLoading() {\n return this._store.isLoading ?? false;\n }\n\n public override get messages() {\n return this._messages;\n }\n\n public get adapters() {\n return this._store.adapters;\n }\n\n public suggestions: readonly ThreadSuggestion[] = [];\n public extras: unknown = undefined;\n\n private _converter = new ThreadMessageConverter();\n\n private _store!: ExternalStoreAdapter<any>;\n\n public override beginEdit(messageId: string) {\n if (!this._store.onEdit)\n throw new Error(\"Runtime does not support editing.\");\n\n super.beginEdit(messageId);\n }\n\n constructor(\n contextProvider: ModelContextProvider,\n store: ExternalStoreAdapter<any>,\n ) {\n super(contextProvider);\n this.__internal_setAdapter(store);\n }\n\n public __internal_setAdapter(store: ExternalStoreAdapter<any>) {\n if (this._store === store) return;\n\n const isRunning = store.isRunning ?? false;\n this.isDisabled = store.isDisabled ?? false;\n\n const oldStore = this._store as ExternalStoreAdapter<any> | undefined;\n this._store = store;\n this.extras = store.extras;\n this.suggestions = store.suggestions ?? EMPTY_ARRAY;\n this._capabilities = {\n switchToBranch: this._store.setMessages !== undefined,\n edit: this._store.onEdit !== undefined,\n reload: this._store.onReload !== undefined,\n cancel: this._store.onCancel !== undefined,\n speech: this._store.adapters?.speech !== undefined,\n unstable_copy: this._store.unstable_capabilities?.copy !== false, // default true\n attachments: !!this._store.adapters?.attachments,\n feedback: !!this._store.adapters?.feedback,\n };\n\n if (oldStore) {\n // flush the converter cache when the convertMessage prop changes\n if (oldStore.convertMessage !== store.convertMessage) {\n this._converter = new ThreadMessageConverter();\n } else if (\n oldStore.isRunning === store.isRunning &&\n oldStore.messages === store.messages\n ) {\n this._notifySubscribers();\n // no conversion update\n return;\n }\n }\n\n const messages = !store.convertMessage\n ? store.messages\n : this._converter.convertMessages(store.messages, (cache, m, idx) => {\n if (!store.convertMessage) return m;\n\n const isLast = idx === store.messages.length - 1;\n const autoStatus = getAutoStatus(isLast, isRunning);\n\n if (\n cache &&\n (cache.role !== \"assistant\" ||\n !isAutoStatus(cache.status) ||\n cache.status === autoStatus)\n )\n return cache;\n\n const messageLike = store.convertMessage(m, idx);\n const newMessage = fromThreadMessageLike(\n messageLike,\n idx.toString(),\n autoStatus,\n );\n (newMessage as any)[symbolInnerMessage] = m;\n return newMessage;\n });\n\n if (messages.length > 0) this.ensureInitialized();\n\n if (oldStore?.isRunning ?? false !== store.isRunning ?? false) {\n if (store.isRunning) {\n this._notifyEventSubscribers(\"run-start\");\n } else {\n this._notifyEventSubscribers(\"run-end\");\n }\n }\n\n for (let i = 0; i < messages.length; i++) {\n const message = messages[i]!;\n const parent = messages[i - 1];\n this.repository.addOrUpdateMessage(parent?.id ?? null, message);\n }\n\n if (this.assistantOptimisticId) {\n this.repository.deleteMessage(this.assistantOptimisticId);\n this.assistantOptimisticId = null;\n }\n\n if (hasUpcomingMessage(isRunning, messages)) {\n this.assistantOptimisticId = this.repository.appendOptimisticMessage(\n messages.at(-1)?.id ?? null,\n {\n role: \"assistant\",\n content: [],\n },\n );\n }\n\n this.repository.resetHead(\n this.assistantOptimisticId ?? messages.at(-1)?.id ?? null,\n );\n\n this._messages = this.repository.getMessages();\n this._notifySubscribers();\n }\n\n public override switchToBranch(branchId: string): void {\n if (!this._store.setMessages)\n throw new Error(\"Runtime does not support switching branches.\");\n\n this.repository.switchToBranch(branchId);\n this.updateMessages(this.repository.getMessages());\n }\n\n public async append(message: AppendMessage): Promise<void> {\n if (message.parentId !== (this.messages.at(-1)?.id ?? null)) {\n if (!this._store.onEdit)\n throw new Error(\"Runtime does not support editing messages.\");\n await this._store.onEdit(message);\n } else {\n await this._store.onNew(message);\n }\n }\n\n public async startRun(config: StartRunConfig): Promise<void> {\n if (!this._store.onReload)\n throw new Error(\"Runtime does not support reloading messages.\");\n\n await this._store.onReload(config.parentId, config);\n }\n\n public async resumeRun(): Promise<void> {\n throw new Error(\"Runtime does not support resuming runs.\");\n }\n\n public cancelRun(): void {\n if (!this._store.onCancel)\n throw new Error(\"Runtime does not support cancelling runs.\");\n\n this._store.onCancel();\n\n if (this.assistantOptimisticId) {\n this.repository.deleteMessage(this.assistantOptimisticId);\n this.assistantOptimisticId = null;\n }\n\n let messages = this.repository.getMessages();\n const previousMessage = messages[messages.length - 1];\n if (\n previousMessage?.role === \"user\" &&\n previousMessage.id === messages.at(-1)?.id // ensure the previous message is a leaf node\n ) {\n this.repository.deleteMessage(previousMessage.id);\n if (!this.composer.text.trim()) {\n this.composer.setText(getThreadMessageText(previousMessage));\n }\n\n messages = this.repository.getMessages();\n } else {\n this._notifySubscribers();\n }\n\n // resync messages (for reloading, to restore the previous branch)\n setTimeout(() => {\n this.updateMessages(messages);\n }, 0);\n }\n\n public addToolResult(options: AddToolResultOptions) {\n if (!this._store.onAddToolResult && !this._store.onAddToolResult)\n throw new Error(\"Runtime does not support tool results.\");\n this._store.onAddToolResult?.({\n messageId: options.messageId,\n toolName: options.toolName,\n toolCallId: options.toolCallId,\n result: options.result,\n isError: options.isError,\n artifact: options.artifact,\n });\n this._store.onAddToolResult?.(options);\n }\n\n private updateMessages = (messages: readonly ThreadMessage[]) => {\n const hasConverter = this._store.convertMessage !== undefined;\n if (hasConverter) {\n this._store.setMessages?.(\n messages.flatMap(getExternalStoreMessage).filter((m) => m != null),\n );\n } else {\n // TODO mark this as readonly in v0.8.0\n this._store.setMessages?.(messages as ThreadMessage[]);\n }\n };\n}\n"],"mappings":"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","names":[]}
@@ -1,9 +1,9 @@
1
- import { MessageStatus, TextContentPart, ImageContentPart, ThreadMessage, CompleteAttachment, FileContentPart, Unstable_AudioContentPart } from "../../types";
2
- import { ReasoningContentPart, SourceContentPart, ThreadStep } from "../../types/AssistantTypes";
1
+ import { MessageStatus, TextMessagePart, ImageMessagePart, ThreadMessage, CompleteAttachment, FileMessagePart, Unstable_AudioMessagePart } from "../../types";
2
+ import { ReasoningMessagePart, SourceMessagePart, ThreadStep } from "../../types/AssistantTypes";
3
3
  import { ReadonlyJSONObject, ReadonlyJSONValue } from "assistant-stream/utils";
4
4
  export type ThreadMessageLike = {
5
5
  readonly role: "assistant" | "user" | "system";
6
- readonly content: string | readonly (TextContentPart | ReasoningContentPart | SourceContentPart | ImageContentPart | FileContentPart | Unstable_AudioContentPart | {
6
+ readonly content: string | readonly (TextMessagePart | ReasoningMessagePart | SourceMessagePart | ImageMessagePart | FileMessagePart | Unstable_AudioMessagePart | {
7
7
  readonly type: "tool-call";
8
8
  readonly toolCallId?: string;
9
9
  readonly toolName: string;
@@ -48,7 +48,7 @@ var fromThreadMessageLike = (like, fallbackId, fallbackStatus) => {
48
48
  default: {
49
49
  const unhandledType = type;
50
50
  throw new Error(
51
- `Unsupported assistant content part type: ${unhandledType}`
51
+ `Unsupported assistant message part type: ${unhandledType}`
52
52
  );
53
53
  }
54
54
  }
@@ -77,7 +77,7 @@ var fromThreadMessageLike = (like, fallbackId, fallbackStatus) => {
77
77
  default: {
78
78
  const unhandledType = type;
79
79
  throw new Error(
80
- `Unsupported user content part type: ${unhandledType}`
80
+ `Unsupported user message part type: ${unhandledType}`
81
81
  );
82
82
  }
83
83
  }
@@ -90,7 +90,7 @@ var fromThreadMessageLike = (like, fallbackId, fallbackStatus) => {
90
90
  case "system":
91
91
  if (content.length !== 1 || content[0].type !== "text")
92
92
  throw new Error(
93
- "System messages must have exactly one text content part."
93
+ "System messages must have exactly one text message part."
94
94
  );
95
95
  return {
96
96
  ...common,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/runtimes/external-store/ThreadMessageLike.tsx"],"sourcesContent":["import { parsePartialJsonObject } from \"assistant-stream/utils\";\nimport { generateId } from \"../../internal\";\nimport {\n MessageStatus,\n TextContentPart,\n ImageContentPart,\n ThreadMessage,\n ThreadAssistantContentPart,\n ThreadAssistantMessage,\n ThreadUserContentPart,\n ThreadUserMessage,\n ThreadSystemMessage,\n CompleteAttachment,\n FileContentPart,\n Unstable_AudioContentPart,\n} from \"../../types\";\nimport {\n ReasoningContentPart,\n SourceContentPart,\n ThreadStep,\n} from \"../../types/AssistantTypes\";\nimport { ReadonlyJSONObject, ReadonlyJSONValue } from \"assistant-stream/utils\";\n\nexport type ThreadMessageLike = {\n readonly role: \"assistant\" | \"user\" | \"system\";\n readonly content:\n | string\n | readonly (\n | TextContentPart\n | ReasoningContentPart\n | SourceContentPart\n | ImageContentPart\n | FileContentPart\n | Unstable_AudioContentPart\n | {\n readonly type: \"tool-call\";\n readonly toolCallId?: string;\n readonly toolName: string;\n readonly args?: ReadonlyJSONObject;\n readonly argsText?: string;\n readonly artifact?: any;\n readonly result?: any | undefined;\n readonly isError?: boolean | undefined;\n }\n )[];\n readonly id?: string | undefined;\n readonly createdAt?: Date | undefined;\n readonly status?: MessageStatus | undefined;\n readonly attachments?: readonly CompleteAttachment[] | undefined;\n readonly metadata?:\n | {\n readonly unstable_state?: ReadonlyJSONValue;\n readonly unstable_annotations?:\n | readonly ReadonlyJSONValue[]\n | undefined;\n readonly unstable_data?: readonly ReadonlyJSONValue[] | undefined;\n readonly steps?: readonly ThreadStep[] | undefined;\n readonly custom?: Record<string, unknown> | undefined;\n }\n | undefined;\n};\n\nexport const fromThreadMessageLike = (\n like: ThreadMessageLike,\n fallbackId: string,\n fallbackStatus: MessageStatus,\n): ThreadMessage => {\n const { role, id, createdAt, attachments, status, metadata } = like;\n const common = {\n id: id ?? fallbackId,\n createdAt: createdAt ?? new Date(),\n };\n\n const content =\n typeof like.content === \"string\"\n ? [{ type: \"text\" as const, text: like.content }]\n : like.content;\n\n if (role !== \"user\" && attachments?.length)\n throw new Error(\"attachments are only supported for user messages\");\n\n if (role !== \"assistant\" && status)\n throw new Error(\"status is only supported for assistant messages\");\n\n if (role !== \"assistant\" && metadata?.steps)\n throw new Error(\"metadata.steps is only supported for assistant messages\");\n\n switch (role) {\n case \"assistant\":\n return {\n ...common,\n role,\n content: content\n .map((part): ThreadAssistantContentPart | null => {\n const type = part.type;\n switch (type) {\n case \"text\":\n case \"reasoning\":\n if (part.text.trim().length === 0) return null;\n return part;\n\n case \"file\":\n case \"source\":\n return part;\n\n case \"tool-call\": {\n if (part.args) {\n return {\n ...part,\n toolCallId: part.toolCallId ?? \"tool-\" + generateId(),\n args: part.args,\n argsText: JSON.stringify(part.args),\n };\n }\n return {\n ...part,\n toolCallId: part.toolCallId ?? \"tool-\" + generateId(),\n args:\n part.args ??\n parsePartialJsonObject(part.argsText ?? \"\") ??\n {},\n argsText: part.argsText ?? \"\",\n };\n }\n\n default: {\n const unhandledType: \"image\" | \"audio\" = type;\n throw new Error(\n `Unsupported assistant content part type: ${unhandledType}`,\n );\n }\n }\n })\n .filter((c) => !!c),\n status: status ?? fallbackStatus,\n metadata: {\n unstable_state: metadata?.unstable_state ?? null,\n unstable_annotations: metadata?.unstable_annotations ?? [],\n unstable_data: metadata?.unstable_data ?? [],\n custom: metadata?.custom ?? {},\n steps: metadata?.steps ?? [],\n },\n } satisfies ThreadAssistantMessage;\n\n case \"user\":\n return {\n ...common,\n role,\n content: content.map((part): ThreadUserContentPart => {\n const type = part.type;\n switch (type) {\n case \"text\":\n case \"image\":\n case \"audio\":\n case \"file\":\n return part;\n\n default: {\n const unhandledType: \"tool-call\" | \"reasoning\" | \"source\" = type;\n throw new Error(\n `Unsupported user content part type: ${unhandledType}`,\n );\n }\n }\n }),\n attachments: attachments ?? [],\n metadata: {\n custom: metadata?.custom ?? {},\n },\n } satisfies ThreadUserMessage;\n\n case \"system\":\n if (content.length !== 1 || content[0]!.type !== \"text\")\n throw new Error(\n \"System messages must have exactly one text content part.\",\n );\n\n return {\n ...common,\n role,\n content: content as [TextContentPart],\n metadata: {\n custom: metadata?.custom ?? {},\n },\n } satisfies ThreadSystemMessage;\n\n default: {\n const unsupportedRole: never = role;\n throw new Error(`Unknown message role: ${unsupportedRole}`);\n }\n }\n};\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../../src/runtimes/external-store/ThreadMessageLike.tsx"],"sourcesContent":["import { parsePartialJsonObject } from \"assistant-stream/utils\";\nimport { generateId } from \"../../internal\";\nimport {\n MessageStatus,\n TextMessagePart,\n ImageMessagePart,\n ThreadMessage,\n ThreadAssistantMessagePart,\n ThreadAssistantMessage,\n ThreadUserMessagePart,\n ThreadUserMessage,\n ThreadSystemMessage,\n CompleteAttachment,\n FileMessagePart,\n Unstable_AudioMessagePart,\n} from \"../../types\";\nimport {\n ReasoningMessagePart,\n SourceMessagePart,\n ThreadStep,\n} from \"../../types/AssistantTypes\";\nimport { ReadonlyJSONObject, ReadonlyJSONValue } from \"assistant-stream/utils\";\n\nexport type ThreadMessageLike = {\n readonly role: \"assistant\" | \"user\" | \"system\";\n readonly content:\n | string\n | readonly (\n | TextMessagePart\n | ReasoningMessagePart\n | SourceMessagePart\n | ImageMessagePart\n | FileMessagePart\n | Unstable_AudioMessagePart\n | {\n readonly type: \"tool-call\";\n readonly toolCallId?: string;\n readonly toolName: string;\n readonly args?: ReadonlyJSONObject;\n readonly argsText?: string;\n readonly artifact?: any;\n readonly result?: any | undefined;\n readonly isError?: boolean | undefined;\n }\n )[];\n readonly id?: string | undefined;\n readonly createdAt?: Date | undefined;\n readonly status?: MessageStatus | undefined;\n readonly attachments?: readonly CompleteAttachment[] | undefined;\n readonly metadata?:\n | {\n readonly unstable_state?: ReadonlyJSONValue;\n readonly unstable_annotations?:\n | readonly ReadonlyJSONValue[]\n | undefined;\n readonly unstable_data?: readonly ReadonlyJSONValue[] | undefined;\n readonly steps?: readonly ThreadStep[] | undefined;\n readonly custom?: Record<string, unknown> | undefined;\n }\n | undefined;\n};\n\nexport const fromThreadMessageLike = (\n like: ThreadMessageLike,\n fallbackId: string,\n fallbackStatus: MessageStatus,\n): ThreadMessage => {\n const { role, id, createdAt, attachments, status, metadata } = like;\n const common = {\n id: id ?? fallbackId,\n createdAt: createdAt ?? new Date(),\n };\n\n const content =\n typeof like.content === \"string\"\n ? [{ type: \"text\" as const, text: like.content }]\n : like.content;\n\n if (role !== \"user\" && attachments?.length)\n throw new Error(\"attachments are only supported for user messages\");\n\n if (role !== \"assistant\" && status)\n throw new Error(\"status is only supported for assistant messages\");\n\n if (role !== \"assistant\" && metadata?.steps)\n throw new Error(\"metadata.steps is only supported for assistant messages\");\n\n switch (role) {\n case \"assistant\":\n return {\n ...common,\n role,\n content: content\n .map((part): ThreadAssistantMessagePart | null => {\n const type = part.type;\n switch (type) {\n case \"text\":\n case \"reasoning\":\n if (part.text.trim().length === 0) return null;\n return part;\n\n case \"file\":\n case \"source\":\n return part;\n\n case \"tool-call\": {\n if (part.args) {\n return {\n ...part,\n toolCallId: part.toolCallId ?? \"tool-\" + generateId(),\n args: part.args,\n argsText: JSON.stringify(part.args),\n };\n }\n return {\n ...part,\n toolCallId: part.toolCallId ?? \"tool-\" + generateId(),\n args:\n part.args ??\n parsePartialJsonObject(part.argsText ?? \"\") ??\n {},\n argsText: part.argsText ?? \"\",\n };\n }\n\n default: {\n const unhandledType: \"image\" | \"audio\" = type;\n throw new Error(\n `Unsupported assistant message part type: ${unhandledType}`,\n );\n }\n }\n })\n .filter((c) => !!c),\n status: status ?? fallbackStatus,\n metadata: {\n unstable_state: metadata?.unstable_state ?? null,\n unstable_annotations: metadata?.unstable_annotations ?? [],\n unstable_data: metadata?.unstable_data ?? [],\n custom: metadata?.custom ?? {},\n steps: metadata?.steps ?? [],\n },\n } satisfies ThreadAssistantMessage;\n\n case \"user\":\n return {\n ...common,\n role,\n content: content.map((part): ThreadUserMessagePart => {\n const type = part.type;\n switch (type) {\n case \"text\":\n case \"image\":\n case \"audio\":\n case \"file\":\n return part;\n\n default: {\n const unhandledType: \"tool-call\" | \"reasoning\" | \"source\" = type;\n throw new Error(\n `Unsupported user message part type: ${unhandledType}`,\n );\n }\n }\n }),\n attachments: attachments ?? [],\n metadata: {\n custom: metadata?.custom ?? {},\n },\n } satisfies ThreadUserMessage;\n\n case \"system\":\n if (content.length !== 1 || content[0]!.type !== \"text\")\n throw new Error(\n \"System messages must have exactly one text message part.\",\n );\n\n return {\n ...common,\n role,\n content: content as [TextMessagePart],\n metadata: {\n custom: metadata?.custom ?? {},\n },\n } satisfies ThreadSystemMessage;\n\n default: {\n const unsupportedRole: never = role;\n throw new Error(`Unknown message role: ${unsupportedRole}`);\n }\n }\n};\n"],"mappings":"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","names":[]}
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
 
3
3
  // src/runtimes/external-store/createMessageConverter.tsx
4
- import { useContentPart, useMessage } from "../../context/index.js";
4
+ import { useMessagePart, useMessage } from "../../context/index.js";
5
5
  import {
6
6
  useExternalMessageConverter,
7
7
  convertExternalMessages
@@ -39,12 +39,12 @@ var createMessageConverter = (callback) => {
39
39
  return first;
40
40
  },
41
41
  useOriginalMessages: () => {
42
- const contentPartMessages = useContentPart({
42
+ const MessagePartMessages = useMessagePart({
43
43
  optional: true,
44
44
  selector: getExternalStoreMessages
45
45
  });
46
46
  const messageMessages = useMessage(getExternalStoreMessages);
47
- const messages = contentPartMessages ?? messageMessages;
47
+ const messages = MessagePartMessages ?? messageMessages;
48
48
  if (messages.length === 0) throw new Error("No original messages found");
49
49
  return messages;
50
50
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/runtimes/external-store/createMessageConverter.tsx"],"sourcesContent":["\"use client\";\nimport { ThreadState } from \"../../api\";\nimport { useContentPart, useMessage } from \"../../context\";\nimport { ThreadMessage } from \"../../types\";\nimport {\n useExternalMessageConverter,\n convertExternalMessages,\n} from \"./external-message-converter\";\nimport { getExternalStoreMessages } from \"./getExternalStoreMessage\";\n\nexport const createMessageConverter = <T extends object>(\n callback: useExternalMessageConverter.Callback<T>,\n) => {\n const result = {\n useThreadMessages: ({\n messages,\n isRunning,\n joinStrategy,\n }: {\n messages: T[];\n isRunning: boolean;\n joinStrategy?: \"concat-content\" | \"none\" | undefined;\n }) => {\n return useExternalMessageConverter<T>({\n callback,\n messages,\n isRunning,\n joinStrategy,\n });\n },\n toThreadMessages: (messages: T[]) => {\n return convertExternalMessages(messages, callback, false); // TODO figure out isRunning\n },\n toOriginalMessages: (\n input: ThreadState | ThreadMessage | ThreadMessage[\"content\"][number],\n ) => {\n const messages = getExternalStoreMessages(input);\n if (messages.length === 0) throw new Error(\"No original messages found\");\n return messages;\n },\n toOriginalMessage: (\n input: ThreadState | ThreadMessage | ThreadMessage[\"content\"][number],\n ) => {\n const messages = result.toOriginalMessages(input);\n return messages[0]!;\n },\n useOriginalMessage: () => {\n const messageMessages = result.useOriginalMessages();\n const first = messageMessages[0]!;\n return first;\n },\n useOriginalMessages: () => {\n const contentPartMessages = useContentPart<T[]>({\n optional: true,\n selector: getExternalStoreMessages,\n });\n\n const messageMessages = useMessage<T[]>(getExternalStoreMessages);\n const messages = contentPartMessages ?? messageMessages;\n if (messages.length === 0) throw new Error(\"No original messages found\");\n return messages;\n },\n };\n\n return result;\n};\n"],"mappings":";;;AAEA,SAAS,gBAAgB,kBAAkB;AAE3C;AAAA,EACE;AAAA,EACA;AAAA,OACK;AACP,SAAS,gCAAgC;AAElC,IAAM,yBAAyB,CACpC,aACG;AACH,QAAM,SAAS;AAAA,IACb,mBAAmB,CAAC;AAAA,MAClB;AAAA,MACA;AAAA,MACA;AAAA,IACF,MAIM;AACJ,aAAO,4BAA+B;AAAA,QACpC;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,CAAC;AAAA,IACH;AAAA,IACA,kBAAkB,CAAC,aAAkB;AACnC,aAAO,wBAAwB,UAAU,UAAU,KAAK;AAAA,IAC1D;AAAA,IACA,oBAAoB,CAClB,UACG;AACH,YAAM,WAAW,yBAAyB,KAAK;AAC/C,UAAI,SAAS,WAAW,EAAG,OAAM,IAAI,MAAM,4BAA4B;AACvE,aAAO;AAAA,IACT;AAAA,IACA,mBAAmB,CACjB,UACG;AACH,YAAM,WAAW,OAAO,mBAAmB,KAAK;AAChD,aAAO,SAAS,CAAC;AAAA,IACnB;AAAA,IACA,oBAAoB,MAAM;AACxB,YAAM,kBAAkB,OAAO,oBAAoB;AACnD,YAAM,QAAQ,gBAAgB,CAAC;AAC/B,aAAO;AAAA,IACT;AAAA,IACA,qBAAqB,MAAM;AACzB,YAAM,sBAAsB,eAAoB;AAAA,QAC9C,UAAU;AAAA,QACV,UAAU;AAAA,MACZ,CAAC;AAED,YAAM,kBAAkB,WAAgB,wBAAwB;AAChE,YAAM,WAAW,uBAAuB;AACxC,UAAI,SAAS,WAAW,EAAG,OAAM,IAAI,MAAM,4BAA4B;AACvE,aAAO;AAAA,IACT;AAAA,EACF;AAEA,SAAO;AACT;","names":[]}
1
+ {"version":3,"sources":["../../../src/runtimes/external-store/createMessageConverter.tsx"],"sourcesContent":["\"use client\";\nimport { ThreadState } from \"../../api\";\nimport { useMessagePart, useMessage } from \"../../context\";\nimport { ThreadMessage } from \"../../types\";\nimport {\n useExternalMessageConverter,\n convertExternalMessages,\n} from \"./external-message-converter\";\nimport { getExternalStoreMessages } from \"./getExternalStoreMessage\";\n\nexport const createMessageConverter = <T extends object>(\n callback: useExternalMessageConverter.Callback<T>,\n) => {\n const result = {\n useThreadMessages: ({\n messages,\n isRunning,\n joinStrategy,\n }: {\n messages: T[];\n isRunning: boolean;\n joinStrategy?: \"concat-content\" | \"none\" | undefined;\n }) => {\n return useExternalMessageConverter<T>({\n callback,\n messages,\n isRunning,\n joinStrategy,\n });\n },\n toThreadMessages: (messages: T[]) => {\n return convertExternalMessages(messages, callback, false); // TODO figure out isRunning\n },\n toOriginalMessages: (\n input: ThreadState | ThreadMessage | ThreadMessage[\"content\"][number],\n ) => {\n const messages = getExternalStoreMessages(input);\n if (messages.length === 0) throw new Error(\"No original messages found\");\n return messages;\n },\n toOriginalMessage: (\n input: ThreadState | ThreadMessage | ThreadMessage[\"content\"][number],\n ) => {\n const messages = result.toOriginalMessages(input);\n return messages[0]!;\n },\n useOriginalMessage: () => {\n const messageMessages = result.useOriginalMessages();\n const first = messageMessages[0]!;\n return first;\n },\n useOriginalMessages: () => {\n const MessagePartMessages = useMessagePart<T[]>({\n optional: true,\n selector: getExternalStoreMessages,\n });\n\n const messageMessages = useMessage<T[]>(getExternalStoreMessages);\n const messages = MessagePartMessages ?? messageMessages;\n if (messages.length === 0) throw new Error(\"No original messages found\");\n return messages;\n },\n };\n\n return result;\n};\n"],"mappings":";;;AAEA,SAAS,gBAAgB,kBAAkB;AAE3C;AAAA,EACE;AAAA,EACA;AAAA,OACK;AACP,SAAS,gCAAgC;AAElC,IAAM,yBAAyB,CACpC,aACG;AACH,QAAM,SAAS;AAAA,IACb,mBAAmB,CAAC;AAAA,MAClB;AAAA,MACA;AAAA,MACA;AAAA,IACF,MAIM;AACJ,aAAO,4BAA+B;AAAA,QACpC;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,CAAC;AAAA,IACH;AAAA,IACA,kBAAkB,CAAC,aAAkB;AACnC,aAAO,wBAAwB,UAAU,UAAU,KAAK;AAAA,IAC1D;AAAA,IACA,oBAAoB,CAClB,UACG;AACH,YAAM,WAAW,yBAAyB,KAAK;AAC/C,UAAI,SAAS,WAAW,EAAG,OAAM,IAAI,MAAM,4BAA4B;AACvE,aAAO;AAAA,IACT;AAAA,IACA,mBAAmB,CACjB,UACG;AACH,YAAM,WAAW,OAAO,mBAAmB,KAAK;AAChD,aAAO,SAAS,CAAC;AAAA,IACnB;AAAA,IACA,oBAAoB,MAAM;AACxB,YAAM,kBAAkB,OAAO,oBAAoB;AACnD,YAAM,QAAQ,gBAAgB,CAAC;AAC/B,aAAO;AAAA,IACT;AAAA,IACA,qBAAqB,MAAM;AACzB,YAAM,sBAAsB,eAAoB;AAAA,QAC9C,UAAU;AAAA,QACV,UAAU;AAAA,MACZ,CAAC;AAED,YAAM,kBAAkB,WAAgB,wBAAwB;AAChE,YAAM,WAAW,uBAAuB;AACxC,UAAI,SAAS,WAAW,EAAG,OAAM,IAAI,MAAM,4BAA4B;AACvE,aAAO;AAAA,IACT;AAAA,EACF;AAEA,SAAO;AACT;","names":[]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/runtimes/external-store/external-message-converter.tsx"],"sourcesContent":["\"use client\";\n\nimport { useMemo } from \"react\";\nimport { ThreadMessageConverter } from \"./ThreadMessageConverter\";\nimport {\n getExternalStoreMessages,\n symbolInnerMessage,\n} from \"./getExternalStoreMessage\";\nimport { fromThreadMessageLike, ThreadMessageLike } from \"./ThreadMessageLike\";\nimport { getAutoStatus, isAutoStatus } from \"./auto-status\";\nimport { ToolCallContentPart } from \"../../types\";\n\nexport namespace useExternalMessageConverter {\n export type Message =\n | (ThreadMessageLike & {\n readonly convertConfig?: {\n readonly joinStrategy?: \"concat-content\" | \"none\";\n };\n })\n | {\n role: \"tool\";\n toolCallId: string;\n toolName?: string | undefined;\n result: any;\n artifact?: any;\n isError?: boolean;\n };\n\n export type Callback<T> = (message: T) => Message | Message[];\n}\n\ntype CallbackResult<T> = {\n input: T;\n outputs: useExternalMessageConverter.Message[];\n};\n\ntype ChunkResult<T> = {\n inputs: T[];\n outputs: useExternalMessageConverter.Message[];\n};\n\ntype Mutable<T> = {\n -readonly [P in keyof T]: T[P];\n};\n\nconst joinExternalMessages = (\n messages: readonly useExternalMessageConverter.Message[],\n): ThreadMessageLike => {\n const assistantMessage: Mutable<Omit<ThreadMessageLike, \"metadata\">> & {\n content: Exclude<ThreadMessageLike[\"content\"][0], string>[];\n metadata?: Mutable<ThreadMessageLike[\"metadata\"]>;\n } = {\n role: \"assistant\",\n content: [],\n };\n for (const output of messages) {\n if (output.role === \"tool\") {\n const toolCallIdx = assistantMessage.content.findIndex(\n (c) => c.type === \"tool-call\" && c.toolCallId === output.toolCallId,\n );\n if (toolCallIdx !== -1) {\n const toolCall = assistantMessage.content[\n toolCallIdx\n ]! as ToolCallContentPart;\n if (output.toolName) {\n if (toolCall.toolName !== output.toolName)\n throw new Error(\n `Tool call name ${output.toolCallId} ${output.toolName} does not match existing tool call ${toolCall.toolName}`,\n );\n }\n assistantMessage.content[toolCallIdx] = {\n ...toolCall,\n ...{\n [symbolInnerMessage]: [\n ...((toolCall as any)[symbolInnerMessage] ?? []),\n output,\n ],\n },\n result: output.result,\n artifact: output.artifact,\n isError: output.isError,\n };\n } else {\n throw new Error(\n `Tool call ${output.toolCallId} ${output.toolName} not found in assistant message`,\n );\n }\n } else {\n const role = output.role;\n const content = (\n typeof output.content === \"string\"\n ? [{ type: \"text\" as const, text: output.content }]\n : output.content\n ).map((c) => ({\n ...c,\n ...{ [symbolInnerMessage]: [output] },\n }));\n switch (role) {\n case \"system\":\n case \"user\":\n return {\n ...output,\n content,\n };\n case \"assistant\":\n if (assistantMessage.content.length === 0) {\n assistantMessage.id = output.id;\n assistantMessage.createdAt ??= output.createdAt;\n assistantMessage.status ??= output.status;\n\n if (output.attachments) {\n assistantMessage.attachments = [\n ...(assistantMessage.attachments ?? []),\n ...output.attachments,\n ];\n }\n\n if (output.metadata) {\n assistantMessage.metadata ??= {};\n if (output.metadata.unstable_state) {\n assistantMessage.metadata.unstable_state =\n output.metadata.unstable_state;\n }\n if (output.metadata.unstable_annotations) {\n assistantMessage.metadata.unstable_annotations = [\n ...(assistantMessage.metadata.unstable_annotations ?? []),\n ...output.metadata.unstable_annotations,\n ];\n }\n if (output.metadata.unstable_data) {\n assistantMessage.metadata.unstable_data = [\n ...(assistantMessage.metadata.unstable_data ?? []),\n ...output.metadata.unstable_data,\n ];\n }\n if (output.metadata.steps) {\n assistantMessage.metadata.steps = [\n ...(assistantMessage.metadata.steps ?? []),\n ...output.metadata.steps,\n ];\n }\n if (output.metadata.custom) {\n assistantMessage.metadata.custom = {\n ...(assistantMessage.metadata.custom ?? {}),\n ...output.metadata.custom,\n };\n }\n }\n // TODO keep this in sync\n }\n\n assistantMessage.content.push(...content);\n break;\n default: {\n const unsupportedRole: never = role;\n throw new Error(`Unknown message role: ${unsupportedRole}`);\n }\n }\n }\n }\n return assistantMessage;\n};\n\nconst chunkExternalMessages = <T,>(\n callbackResults: CallbackResult<T>[],\n joinStrategy?: \"concat-content\" | \"none\",\n) => {\n const results: ChunkResult<T>[] = [];\n let isAssistant = false;\n let pendingNone = false; // true if the previous assistant message had joinStrategy \"none\"\n let inputs: T[] = [];\n let outputs: useExternalMessageConverter.Message[] = [];\n\n const flush = () => {\n if (outputs.length) {\n results.push({\n inputs,\n outputs,\n });\n }\n inputs = [];\n outputs = [];\n isAssistant = false;\n pendingNone = false;\n };\n\n for (const callbackResult of callbackResults) {\n for (const output of callbackResult.outputs) {\n if (\n (pendingNone && output.role !== \"tool\") ||\n !isAssistant ||\n output.role === \"user\" ||\n output.role === \"system\"\n ) {\n flush();\n }\n isAssistant = output.role === \"assistant\" || output.role === \"tool\";\n\n if (inputs.at(-1) !== callbackResult.input) {\n inputs.push(callbackResult.input);\n }\n outputs.push(output);\n\n if (\n output.role === \"assistant\" &&\n (output.convertConfig?.joinStrategy === \"none\" ||\n joinStrategy === \"none\")\n ) {\n pendingNone = true;\n }\n }\n }\n flush();\n return results;\n};\n\nexport const convertExternalMessages = <T extends WeakKey>(\n messages: T[],\n callback: useExternalMessageConverter.Callback<T>,\n isRunning: boolean,\n) => {\n const callbackResults: CallbackResult<T>[] = [];\n for (const message of messages) {\n const output = callback(message);\n const outputs = Array.isArray(output) ? output : [output];\n const result = { input: message, outputs };\n callbackResults.push(result);\n }\n\n const chunks = chunkExternalMessages(callbackResults);\n\n return chunks.map((message, idx) => {\n const isLast = idx === chunks.length - 1;\n const autoStatus = getAutoStatus(isLast, isRunning);\n const newMessage = fromThreadMessageLike(\n joinExternalMessages(message.outputs),\n idx.toString(),\n autoStatus,\n );\n (newMessage as any)[symbolInnerMessage] = message.inputs;\n return newMessage;\n });\n};\n\nexport const useExternalMessageConverter = <T extends WeakKey>({\n callback,\n messages,\n isRunning,\n joinStrategy,\n}: {\n callback: useExternalMessageConverter.Callback<T>;\n messages: T[];\n isRunning: boolean;\n joinStrategy?: \"concat-content\" | \"none\" | undefined;\n}) => {\n const state = useMemo(\n () => ({\n callback,\n callbackCache: new WeakMap<T, CallbackResult<T>>(),\n chunkCache: new WeakMap<\n useExternalMessageConverter.Message,\n ChunkResult<T>\n >(),\n converterCache: new ThreadMessageConverter(),\n }),\n [callback],\n );\n\n return useMemo(() => {\n const callbackResults: CallbackResult<T>[] = [];\n for (const message of messages) {\n let result = state.callbackCache.get(message);\n if (!result) {\n const output = state.callback(message);\n const outputs = Array.isArray(output) ? output : [output];\n result = { input: message, outputs };\n state.callbackCache.set(message, result);\n }\n callbackResults.push(result);\n }\n\n const chunks = chunkExternalMessages(callbackResults, joinStrategy).map(\n (m) => {\n const key = m.outputs[0];\n if (!key) return m;\n\n const cached = state.chunkCache.get(key);\n if (cached && shallowArrayEqual(cached.outputs, m.outputs))\n return cached;\n state.chunkCache.set(key, m);\n return m;\n },\n );\n\n const threadMessages = state.converterCache.convertMessages(\n chunks,\n (cache, message, idx) => {\n const isLast = idx === chunks.length - 1;\n const autoStatus = getAutoStatus(isLast, isRunning);\n\n if (\n cache &&\n (cache.role !== \"assistant\" ||\n !isAutoStatus(cache.status) ||\n cache.status === autoStatus)\n ) {\n const inputs = getExternalStoreMessages<T>(cache);\n if (shallowArrayEqual(inputs, message.inputs)) {\n return cache;\n }\n }\n\n const newMessage = fromThreadMessageLike(\n joinExternalMessages(message.outputs),\n idx.toString(),\n autoStatus,\n );\n (newMessage as any)[symbolInnerMessage] = message.inputs;\n return newMessage;\n },\n );\n\n (threadMessages as unknown as { [symbolInnerMessage]: T[] })[\n symbolInnerMessage\n ] = messages;\n\n return threadMessages;\n }, [state, messages, isRunning, joinStrategy]);\n};\n\nconst shallowArrayEqual = (a: unknown[], b: unknown[]) => {\n if (a.length !== b.length) return false;\n for (let i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) return false;\n }\n return true;\n};\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../../src/runtimes/external-store/external-message-converter.tsx"],"sourcesContent":["\"use client\";\n\nimport { useMemo } from \"react\";\nimport { ThreadMessageConverter } from \"./ThreadMessageConverter\";\nimport {\n getExternalStoreMessages,\n symbolInnerMessage,\n} from \"./getExternalStoreMessage\";\nimport { fromThreadMessageLike, ThreadMessageLike } from \"./ThreadMessageLike\";\nimport { getAutoStatus, isAutoStatus } from \"./auto-status\";\nimport { ToolCallMessagePart } from \"../../types\";\n\nexport namespace useExternalMessageConverter {\n export type Message =\n | (ThreadMessageLike & {\n readonly convertConfig?: {\n readonly joinStrategy?: \"concat-content\" | \"none\";\n };\n })\n | {\n role: \"tool\";\n toolCallId: string;\n toolName?: string | undefined;\n result: any;\n artifact?: any;\n isError?: boolean;\n };\n\n export type Callback<T> = (message: T) => Message | Message[];\n}\n\ntype CallbackResult<T> = {\n input: T;\n outputs: useExternalMessageConverter.Message[];\n};\n\ntype ChunkResult<T> = {\n inputs: T[];\n outputs: useExternalMessageConverter.Message[];\n};\n\ntype Mutable<T> = {\n -readonly [P in keyof T]: T[P];\n};\n\nconst joinExternalMessages = (\n messages: readonly useExternalMessageConverter.Message[],\n): ThreadMessageLike => {\n const assistantMessage: Mutable<Omit<ThreadMessageLike, \"metadata\">> & {\n content: Exclude<ThreadMessageLike[\"content\"][0], string>[];\n metadata?: Mutable<ThreadMessageLike[\"metadata\"]>;\n } = {\n role: \"assistant\",\n content: [],\n };\n for (const output of messages) {\n if (output.role === \"tool\") {\n const toolCallIdx = assistantMessage.content.findIndex(\n (c) => c.type === \"tool-call\" && c.toolCallId === output.toolCallId,\n );\n if (toolCallIdx !== -1) {\n const toolCall = assistantMessage.content[\n toolCallIdx\n ]! as ToolCallMessagePart;\n if (output.toolName) {\n if (toolCall.toolName !== output.toolName)\n throw new Error(\n `Tool call name ${output.toolCallId} ${output.toolName} does not match existing tool call ${toolCall.toolName}`,\n );\n }\n assistantMessage.content[toolCallIdx] = {\n ...toolCall,\n ...{\n [symbolInnerMessage]: [\n ...((toolCall as any)[symbolInnerMessage] ?? []),\n output,\n ],\n },\n result: output.result,\n artifact: output.artifact,\n isError: output.isError,\n };\n } else {\n throw new Error(\n `Tool call ${output.toolCallId} ${output.toolName} not found in assistant message`,\n );\n }\n } else {\n const role = output.role;\n const content = (\n typeof output.content === \"string\"\n ? [{ type: \"text\" as const, text: output.content }]\n : output.content\n ).map((c) => ({\n ...c,\n ...{ [symbolInnerMessage]: [output] },\n }));\n switch (role) {\n case \"system\":\n case \"user\":\n return {\n ...output,\n content,\n };\n case \"assistant\":\n if (assistantMessage.content.length === 0) {\n assistantMessage.id = output.id;\n assistantMessage.createdAt ??= output.createdAt;\n assistantMessage.status ??= output.status;\n\n if (output.attachments) {\n assistantMessage.attachments = [\n ...(assistantMessage.attachments ?? []),\n ...output.attachments,\n ];\n }\n\n if (output.metadata) {\n assistantMessage.metadata ??= {};\n if (output.metadata.unstable_state) {\n assistantMessage.metadata.unstable_state =\n output.metadata.unstable_state;\n }\n if (output.metadata.unstable_annotations) {\n assistantMessage.metadata.unstable_annotations = [\n ...(assistantMessage.metadata.unstable_annotations ?? []),\n ...output.metadata.unstable_annotations,\n ];\n }\n if (output.metadata.unstable_data) {\n assistantMessage.metadata.unstable_data = [\n ...(assistantMessage.metadata.unstable_data ?? []),\n ...output.metadata.unstable_data,\n ];\n }\n if (output.metadata.steps) {\n assistantMessage.metadata.steps = [\n ...(assistantMessage.metadata.steps ?? []),\n ...output.metadata.steps,\n ];\n }\n if (output.metadata.custom) {\n assistantMessage.metadata.custom = {\n ...(assistantMessage.metadata.custom ?? {}),\n ...output.metadata.custom,\n };\n }\n }\n // TODO keep this in sync\n }\n\n assistantMessage.content.push(...content);\n break;\n default: {\n const unsupportedRole: never = role;\n throw new Error(`Unknown message role: ${unsupportedRole}`);\n }\n }\n }\n }\n return assistantMessage;\n};\n\nconst chunkExternalMessages = <T,>(\n callbackResults: CallbackResult<T>[],\n joinStrategy?: \"concat-content\" | \"none\",\n) => {\n const results: ChunkResult<T>[] = [];\n let isAssistant = false;\n let pendingNone = false; // true if the previous assistant message had joinStrategy \"none\"\n let inputs: T[] = [];\n let outputs: useExternalMessageConverter.Message[] = [];\n\n const flush = () => {\n if (outputs.length) {\n results.push({\n inputs,\n outputs,\n });\n }\n inputs = [];\n outputs = [];\n isAssistant = false;\n pendingNone = false;\n };\n\n for (const callbackResult of callbackResults) {\n for (const output of callbackResult.outputs) {\n if (\n (pendingNone && output.role !== \"tool\") ||\n !isAssistant ||\n output.role === \"user\" ||\n output.role === \"system\"\n ) {\n flush();\n }\n isAssistant = output.role === \"assistant\" || output.role === \"tool\";\n\n if (inputs.at(-1) !== callbackResult.input) {\n inputs.push(callbackResult.input);\n }\n outputs.push(output);\n\n if (\n output.role === \"assistant\" &&\n (output.convertConfig?.joinStrategy === \"none\" ||\n joinStrategy === \"none\")\n ) {\n pendingNone = true;\n }\n }\n }\n flush();\n return results;\n};\n\nexport const convertExternalMessages = <T extends WeakKey>(\n messages: T[],\n callback: useExternalMessageConverter.Callback<T>,\n isRunning: boolean,\n) => {\n const callbackResults: CallbackResult<T>[] = [];\n for (const message of messages) {\n const output = callback(message);\n const outputs = Array.isArray(output) ? output : [output];\n const result = { input: message, outputs };\n callbackResults.push(result);\n }\n\n const chunks = chunkExternalMessages(callbackResults);\n\n return chunks.map((message, idx) => {\n const isLast = idx === chunks.length - 1;\n const autoStatus = getAutoStatus(isLast, isRunning);\n const newMessage = fromThreadMessageLike(\n joinExternalMessages(message.outputs),\n idx.toString(),\n autoStatus,\n );\n (newMessage as any)[symbolInnerMessage] = message.inputs;\n return newMessage;\n });\n};\n\nexport const useExternalMessageConverter = <T extends WeakKey>({\n callback,\n messages,\n isRunning,\n joinStrategy,\n}: {\n callback: useExternalMessageConverter.Callback<T>;\n messages: T[];\n isRunning: boolean;\n joinStrategy?: \"concat-content\" | \"none\" | undefined;\n}) => {\n const state = useMemo(\n () => ({\n callback,\n callbackCache: new WeakMap<T, CallbackResult<T>>(),\n chunkCache: new WeakMap<\n useExternalMessageConverter.Message,\n ChunkResult<T>\n >(),\n converterCache: new ThreadMessageConverter(),\n }),\n [callback],\n );\n\n return useMemo(() => {\n const callbackResults: CallbackResult<T>[] = [];\n for (const message of messages) {\n let result = state.callbackCache.get(message);\n if (!result) {\n const output = state.callback(message);\n const outputs = Array.isArray(output) ? output : [output];\n result = { input: message, outputs };\n state.callbackCache.set(message, result);\n }\n callbackResults.push(result);\n }\n\n const chunks = chunkExternalMessages(callbackResults, joinStrategy).map(\n (m) => {\n const key = m.outputs[0];\n if (!key) return m;\n\n const cached = state.chunkCache.get(key);\n if (cached && shallowArrayEqual(cached.outputs, m.outputs))\n return cached;\n state.chunkCache.set(key, m);\n return m;\n },\n );\n\n const threadMessages = state.converterCache.convertMessages(\n chunks,\n (cache, message, idx) => {\n const isLast = idx === chunks.length - 1;\n const autoStatus = getAutoStatus(isLast, isRunning);\n\n if (\n cache &&\n (cache.role !== \"assistant\" ||\n !isAutoStatus(cache.status) ||\n cache.status === autoStatus)\n ) {\n const inputs = getExternalStoreMessages<T>(cache);\n if (shallowArrayEqual(inputs, message.inputs)) {\n return cache;\n }\n }\n\n const newMessage = fromThreadMessageLike(\n joinExternalMessages(message.outputs),\n idx.toString(),\n autoStatus,\n );\n (newMessage as any)[symbolInnerMessage] = message.inputs;\n return newMessage;\n },\n );\n\n (threadMessages as unknown as { [symbolInnerMessage]: T[] })[\n symbolInnerMessage\n ] = messages;\n\n return threadMessages;\n }, [state, messages, isRunning, joinStrategy]);\n};\n\nconst shallowArrayEqual = (a: unknown[], b: unknown[]) => {\n if (a.length !== b.length) return false;\n for (let i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) return false;\n }\n return true;\n};\n"],"mappings":"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","names":[]}
@@ -1,12 +1,12 @@
1
- import type { FileContentPart, MessageStatus, ReasoningContentPart, RunConfig, SourceContentPart, TextContentPart, ThreadAssistantContentPart, ThreadMessage, ThreadStep, ToolCallContentPart } from "../../types/AssistantTypes";
1
+ import type { FileMessagePart, MessageStatus, ReasoningMessagePart, RunConfig, SourceMessagePart, TextMessagePart, ThreadAssistantMessagePart, ThreadMessage, ThreadStep, ToolCallMessagePart } from "../../types/AssistantTypes";
2
2
  import type { ModelContext } from "../../model-context/ModelContextTypes";
3
3
  import { ReadonlyJSONValue } from "assistant-stream/utils";
4
4
  export type ChatModelRunUpdate = {
5
- readonly content: readonly ThreadAssistantContentPart[];
5
+ readonly content: readonly ThreadAssistantMessagePart[];
6
6
  readonly metadata?: Record<string, unknown>;
7
7
  };
8
8
  export type ChatModelRunResult = {
9
- readonly content?: readonly ThreadAssistantContentPart[] | undefined;
9
+ readonly content?: readonly ThreadAssistantMessagePart[] | undefined;
10
10
  readonly status?: MessageStatus | undefined;
11
11
  readonly metadata?: {
12
12
  readonly unstable_state?: ReadonlyJSONValue;
@@ -17,7 +17,7 @@ export type ChatModelRunResult = {
17
17
  };
18
18
  };
19
19
  export type CoreChatModelRunResult = Omit<ChatModelRunResult, "content"> & {
20
- readonly content: readonly (TextContentPart | ReasoningContentPart | ToolCallContentPart | SourceContentPart | FileContentPart)[];
20
+ readonly content: readonly (TextMessagePart | ReasoningMessagePart | ToolCallMessagePart | SourceMessagePart | FileMessagePart)[];
21
21
  };
22
22
  export type ChatModelRunOptions = {
23
23
  readonly messages: readonly ThreadMessage[];
@@ -4,7 +4,7 @@ import { ThreadMessageLike } from "../external-store";
4
4
  import { FeedbackAdapter } from "../adapters/feedback/FeedbackAdapter";
5
5
  import { SpeechSynthesisAdapter } from "../adapters/speech/SpeechAdapterTypes";
6
6
  import { ChatModelAdapter } from "./ChatModelAdapter";
7
- import { AssistantCloud } from "../../cloud";
7
+ import { AssistantCloud } from "assistant-cloud";
8
8
  import { SuggestionAdapter } from "../adapters";
9
9
  export type LocalRuntimeOptionsBase = {
10
10
  maxSteps?: number | undefined;
@@ -41,6 +41,6 @@ export declare const splitLocalRuntimeOptions: <T extends LocalRuntimeOptions>(o
41
41
  }, "chatModel"> | undefined;
42
42
  unstable_humanToolNames: string[] | undefined;
43
43
  };
44
- otherOptions: Omit<T, "adapters" | "cloud" | "maxSteps" | "unstable_humanToolNames" | "initialMessages">;
44
+ otherOptions: Omit<T, "adapters" | "maxSteps" | "unstable_humanToolNames" | "cloud" | "initialMessages">;
45
45
  };
46
46
  //# sourceMappingURL=LocalRuntimeOptions.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"LocalRuntimeOptions.d.ts","sourceRoot":"","sources":["../../../src/runtimes/local/LocalRuntimeOptions.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,iDAAiD,CAAC;AACvF,OAAO,EAAE,iBAAiB,EAAE,MAAM,0CAA0C,CAAC;AAC7E,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AACvE,OAAO,EAAE,sBAAsB,EAAE,MAAM,uCAAuC,CAAC;AAC/E,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEhD,MAAM,MAAM,uBAAuB,GAAG;IACpC,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,QAAQ,EAAE;QACR,SAAS,EAAE,gBAAgB,CAAC;QAC5B,OAAO,CAAC,EAAE,oBAAoB,GAAG,SAAS,CAAC;QAC3C,WAAW,CAAC,EAAE,iBAAiB,GAAG,SAAS,CAAC;QAC5C,MAAM,CAAC,EAAE,sBAAsB,GAAG,SAAS,CAAC;QAC5C,QAAQ,CAAC,EAAE,eAAe,GAAG,SAAS,CAAC;QACvC,UAAU,CAAC,EAAE,iBAAiB,GAAG,SAAS,CAAC;KAC5C,CAAC;IAEF;;OAEG;IACH,uBAAuB,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;CAChD,CAAC;AAGF,MAAM,MAAM,mBAAmB,GAAG,IAAI,CAAC,uBAAuB,EAAE,UAAU,CAAC,GAAG;IAC5E,KAAK,CAAC,EAAE,cAAc,GAAG,SAAS,CAAC;IACnC,eAAe,CAAC,EAAE,SAAS,iBAAiB,EAAE,GAAG,SAAS,CAAC;IAC3D,QAAQ,CAAC,EAAE,IAAI,CAAC,uBAAuB,CAAC,UAAU,CAAC,EAAE,WAAW,CAAC,GAAG,SAAS,CAAC;CAC/E,CAAC;AAEF,eAAO,MAAM,wBAAwB,GAAI,CAAC,SAAS,mBAAmB,EACpE,SAAS,CAAC;;;;;;uBAtBG,gBAAgB;sBACjB,oBAAoB,GAAG,SAAS;0BAC5B,iBAAiB,GAAG,SAAS;qBAClC,sBAAsB,GAAG,SAAS;uBAChC,eAAe,GAAG,SAAS;yBACzB,iBAAiB,GAAG,SAAS;;;;;CAsC7C,CAAC"}
1
+ {"version":3,"file":"LocalRuntimeOptions.d.ts","sourceRoot":"","sources":["../../../src/runtimes/local/LocalRuntimeOptions.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,iDAAiD,CAAC;AACvF,OAAO,EAAE,iBAAiB,EAAE,MAAM,0CAA0C,CAAC;AAC7E,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AACvE,OAAO,EAAE,sBAAsB,EAAE,MAAM,uCAAuC,CAAC;AAC/E,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEhD,MAAM,MAAM,uBAAuB,GAAG;IACpC,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,QAAQ,EAAE;QACR,SAAS,EAAE,gBAAgB,CAAC;QAC5B,OAAO,CAAC,EAAE,oBAAoB,GAAG,SAAS,CAAC;QAC3C,WAAW,CAAC,EAAE,iBAAiB,GAAG,SAAS,CAAC;QAC5C,MAAM,CAAC,EAAE,sBAAsB,GAAG,SAAS,CAAC;QAC5C,QAAQ,CAAC,EAAE,eAAe,GAAG,SAAS,CAAC;QACvC,UAAU,CAAC,EAAE,iBAAiB,GAAG,SAAS,CAAC;KAC5C,CAAC;IAEF;;OAEG;IACH,uBAAuB,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;CAChD,CAAC;AAGF,MAAM,MAAM,mBAAmB,GAAG,IAAI,CAAC,uBAAuB,EAAE,UAAU,CAAC,GAAG;IAC5E,KAAK,CAAC,EAAE,cAAc,GAAG,SAAS,CAAC;IACnC,eAAe,CAAC,EAAE,SAAS,iBAAiB,EAAE,GAAG,SAAS,CAAC;IAC3D,QAAQ,CAAC,EAAE,IAAI,CAAC,uBAAuB,CAAC,UAAU,CAAC,EAAE,WAAW,CAAC,GAAG,SAAS,CAAC;CAC/E,CAAC;AAEF,eAAO,MAAM,wBAAwB,GAAI,CAAC,SAAS,mBAAmB,EACpE,SAAS,CAAC;;;;;;uBAtBG,gBAAgB;sBACjB,oBAAoB,GAAG,SAAS;0BAC5B,iBAAiB,GAAG,SAAS;qBAClC,sBAAsB,GAAG,SAAS;uBAChC,eAAe,GAAG,SAAS;yBACzB,iBAAiB,GAAG,SAAS;;;;;CAsC7C,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/runtimes/local/LocalRuntimeOptions.tsx"],"sourcesContent":["import { ThreadHistoryAdapter } from \"../adapters/thread-history/ThreadHistoryAdapter\";\nimport { AttachmentAdapter } from \"../adapters/attachment/AttachmentAdapter\";\nimport { ThreadMessageLike } from \"../external-store\";\nimport { FeedbackAdapter } from \"../adapters/feedback/FeedbackAdapter\";\nimport { SpeechSynthesisAdapter } from \"../adapters/speech/SpeechAdapterTypes\";\nimport { ChatModelAdapter } from \"./ChatModelAdapter\";\nimport { AssistantCloud } from \"../../cloud\";\nimport { SuggestionAdapter } from \"../adapters\";\n\nexport type LocalRuntimeOptionsBase = {\n maxSteps?: number | undefined;\n adapters: {\n chatModel: ChatModelAdapter;\n history?: ThreadHistoryAdapter | undefined;\n attachments?: AttachmentAdapter | undefined;\n speech?: SpeechSynthesisAdapter | undefined;\n feedback?: FeedbackAdapter | undefined;\n suggestion?: SuggestionAdapter | undefined;\n };\n\n /**\n * Names of tools that are allowed to interrupt the run in order to wait for human/external approval.\n */\n unstable_humanToolNames?: string[] | undefined;\n};\n\n// TODO align LocalRuntimeOptions with LocalRuntimeOptionsBase\nexport type LocalRuntimeOptions = Omit<LocalRuntimeOptionsBase, \"adapters\"> & {\n cloud?: AssistantCloud | undefined;\n initialMessages?: readonly ThreadMessageLike[] | undefined;\n adapters?: Omit<LocalRuntimeOptionsBase[\"adapters\"], \"chatModel\"> | undefined;\n};\n\nexport const splitLocalRuntimeOptions = <T extends LocalRuntimeOptions>(\n options: T,\n) => {\n const {\n cloud,\n initialMessages,\n maxSteps,\n adapters,\n unstable_humanToolNames,\n ...rest\n } = options;\n\n return {\n localRuntimeOptions: {\n cloud,\n initialMessages,\n maxSteps,\n adapters,\n unstable_humanToolNames,\n },\n otherOptions: rest,\n };\n};\n"],"mappings":";AAiCO,IAAM,2BAA2B,CACtC,YACG;AACH,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,GAAG;AAAA,EACL,IAAI;AAEJ,SAAO;AAAA,IACL,qBAAqB;AAAA,MACnB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA,cAAc;AAAA,EAChB;AACF;","names":[]}
1
+ {"version":3,"sources":["../../../src/runtimes/local/LocalRuntimeOptions.tsx"],"sourcesContent":["import { ThreadHistoryAdapter } from \"../adapters/thread-history/ThreadHistoryAdapter\";\nimport { AttachmentAdapter } from \"../adapters/attachment/AttachmentAdapter\";\nimport { ThreadMessageLike } from \"../external-store\";\nimport { FeedbackAdapter } from \"../adapters/feedback/FeedbackAdapter\";\nimport { SpeechSynthesisAdapter } from \"../adapters/speech/SpeechAdapterTypes\";\nimport { ChatModelAdapter } from \"./ChatModelAdapter\";\nimport { AssistantCloud } from \"assistant-cloud\";\nimport { SuggestionAdapter } from \"../adapters\";\n\nexport type LocalRuntimeOptionsBase = {\n maxSteps?: number | undefined;\n adapters: {\n chatModel: ChatModelAdapter;\n history?: ThreadHistoryAdapter | undefined;\n attachments?: AttachmentAdapter | undefined;\n speech?: SpeechSynthesisAdapter | undefined;\n feedback?: FeedbackAdapter | undefined;\n suggestion?: SuggestionAdapter | undefined;\n };\n\n /**\n * Names of tools that are allowed to interrupt the run in order to wait for human/external approval.\n */\n unstable_humanToolNames?: string[] | undefined;\n};\n\n// TODO align LocalRuntimeOptions with LocalRuntimeOptionsBase\nexport type LocalRuntimeOptions = Omit<LocalRuntimeOptionsBase, \"adapters\"> & {\n cloud?: AssistantCloud | undefined;\n initialMessages?: readonly ThreadMessageLike[] | undefined;\n adapters?: Omit<LocalRuntimeOptionsBase[\"adapters\"], \"chatModel\"> | undefined;\n};\n\nexport const splitLocalRuntimeOptions = <T extends LocalRuntimeOptions>(\n options: T,\n) => {\n const {\n cloud,\n initialMessages,\n maxSteps,\n adapters,\n unstable_humanToolNames,\n ...rest\n } = options;\n\n return {\n localRuntimeOptions: {\n cloud,\n initialMessages,\n maxSteps,\n adapters,\n unstable_humanToolNames,\n },\n otherOptions: rest,\n };\n};\n"],"mappings":";AAiCO,IAAM,2BAA2B,CACtC,YACG;AACH,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,GAAG;AAAA,EACL,IAAI;AAEJ,SAAO;AAAA,IACL,qBAAqB;AAAA,MACnB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA,cAAc;AAAA,EAChB;AACF;","names":[]}
@@ -5,6 +5,7 @@ export type LocalThreadFactory = () => LocalThreadRuntimeCore;
5
5
  export declare class LocalThreadListRuntimeCore extends BaseSubscribable implements ThreadListRuntimeCore {
6
6
  private _mainThread;
7
7
  constructor(_threadFactory: LocalThreadFactory);
8
+ get isLoading(): boolean;
8
9
  getMainThreadRuntimeCore(): LocalThreadRuntimeCore;
9
10
  get newThreadId(): string;
10
11
  get threadIds(): readonly string[];
@@ -1 +1 @@
1
- {"version":3,"file":"LocalThreadListRuntimeCore.d.ts","sourceRoot":"","sources":["../../../src/runtimes/local/LocalThreadListRuntimeCore.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,EAAE,gBAAgB,EAAE,MAAM,wCAAwC,CAAC;AAC1E,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAElE,MAAM,MAAM,kBAAkB,GAAG,MAAM,sBAAsB,CAAC;AAG9D,qBAAa,0BACX,SAAQ,gBACR,YAAW,qBAAqB;IAEhC,OAAO,CAAC,WAAW,CAAyB;gBAChC,cAAc,EAAE,kBAAkB;IAMvC,wBAAwB;IAI/B,IAAW,WAAW,IAAI,MAAM,CAE/B;IAED,IAAW,SAAS,IAAI,SAAS,MAAM,EAAE,CAExC;IAED,IAAW,iBAAiB,IAAI,SAAS,MAAM,EAAE,CAEhD;IAED,IAAW,YAAY,IAAI,MAAM,CAEhC;IAEM,oBAAoB,IAAI,KAAK;IAI7B,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC;IAItC,WAAW,CAAC,QAAQ,EAAE,MAAM;;;;;;;;IActB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;IAIrC,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC;IAIlC,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAIvB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAIxB,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAIvB,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAI1B,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAIvB,UAAU,IAAI,KAAK;IAInB,aAAa,IAAI,KAAK;CAG9B"}
1
+ {"version":3,"file":"LocalThreadListRuntimeCore.d.ts","sourceRoot":"","sources":["../../../src/runtimes/local/LocalThreadListRuntimeCore.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,EAAE,gBAAgB,EAAE,MAAM,wCAAwC,CAAC;AAC1E,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAElE,MAAM,MAAM,kBAAkB,GAAG,MAAM,sBAAsB,CAAC;AAG9D,qBAAa,0BACX,SAAQ,gBACR,YAAW,qBAAqB;IAEhC,OAAO,CAAC,WAAW,CAAyB;gBAChC,cAAc,EAAE,kBAAkB;IAM9C,IAAW,SAAS,YAEnB;IAEM,wBAAwB;IAI/B,IAAW,WAAW,IAAI,MAAM,CAE/B;IAED,IAAW,SAAS,IAAI,SAAS,MAAM,EAAE,CAExC;IAED,IAAW,iBAAiB,IAAI,SAAS,MAAM,EAAE,CAEhD;IAED,IAAW,YAAY,IAAI,MAAM,CAEhC;IAEM,oBAAoB,IAAI,KAAK;IAI7B,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC;IAItC,WAAW,CAAC,QAAQ,EAAE,MAAM;;;;;;;;IActB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;IAIrC,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC;IAIlC,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAIvB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAIxB,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAIvB,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAI1B,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAIvB,UAAU,IAAI,KAAK;IAInB,aAAa,IAAI,KAAK;CAG9B"}
@@ -7,6 +7,9 @@ var LocalThreadListRuntimeCore = class extends BaseSubscribable {
7
7
  super();
8
8
  this._mainThread = _threadFactory();
9
9
  }
10
+ get isLoading() {
11
+ return false;
12
+ }
10
13
  getMainThreadRuntimeCore() {
11
14
  return this._mainThread;
12
15
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/runtimes/local/LocalThreadListRuntimeCore.tsx"],"sourcesContent":["import { ThreadListRuntimeCore } from \"../core/ThreadListRuntimeCore\";\nimport { BaseSubscribable } from \"../remote-thread-list/BaseSubscribable\";\nimport { LocalThreadRuntimeCore } from \"./LocalThreadRuntimeCore\";\n\nexport type LocalThreadFactory = () => LocalThreadRuntimeCore;\n\nconst EMPTY_ARRAY = Object.freeze([]);\nexport class LocalThreadListRuntimeCore\n extends BaseSubscribable\n implements ThreadListRuntimeCore\n{\n private _mainThread: LocalThreadRuntimeCore;\n constructor(_threadFactory: LocalThreadFactory) {\n super();\n\n this._mainThread = _threadFactory();\n }\n\n public getMainThreadRuntimeCore() {\n return this._mainThread;\n }\n\n public get newThreadId(): string {\n throw new Error(\"Method not implemented.\");\n }\n\n public get threadIds(): readonly string[] {\n throw EMPTY_ARRAY;\n }\n\n public get archivedThreadIds(): readonly string[] {\n throw EMPTY_ARRAY;\n }\n\n public get mainThreadId(): string {\n return \"__DEFAULT_ID__\";\n }\n\n public getThreadRuntimeCore(): never {\n throw new Error(\"Method not implemented.\");\n }\n\n public getLoadThreadsPromise(): Promise<void> {\n throw new Error(\"Method not implemented.\");\n }\n\n public getItemById(threadId: string) {\n if (threadId === this.mainThreadId) {\n return {\n status: \"regular\" as const,\n threadId: this.mainThreadId,\n remoteId: this.mainThreadId,\n externalId: undefined,\n title: undefined,\n isMain: true,\n };\n }\n throw new Error(\"Method not implemented\");\n }\n\n public async switchToThread(): Promise<void> {\n throw new Error(\"Method not implemented.\");\n }\n\n public switchToNewThread(): Promise<void> {\n throw new Error(\"Method not implemented.\");\n }\n\n public rename(): Promise<void> {\n throw new Error(\"Method not implemented.\");\n }\n\n public archive(): Promise<void> {\n throw new Error(\"Method not implemented.\");\n }\n\n public detach(): Promise<void> {\n throw new Error(\"Method not implemented.\");\n }\n\n public unarchive(): Promise<void> {\n throw new Error(\"Method not implemented.\");\n }\n\n public delete(): Promise<void> {\n throw new Error(\"Method not implemented.\");\n }\n\n public initialize(): never {\n throw new Error(\"Method not implemented.\");\n }\n\n public generateTitle(): never {\n throw new Error(\"Method not implemented.\");\n }\n}\n"],"mappings":";AACA,SAAS,wBAAwB;AAKjC,IAAM,cAAc,OAAO,OAAO,CAAC,CAAC;AAC7B,IAAM,6BAAN,cACG,iBAEV;AAAA,EACU;AAAA,EACR,YAAY,gBAAoC;AAC9C,UAAM;AAEN,SAAK,cAAc,eAAe;AAAA,EACpC;AAAA,EAEO,2BAA2B;AAChC,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAW,cAAsB;AAC/B,UAAM,IAAI,MAAM,yBAAyB;AAAA,EAC3C;AAAA,EAEA,IAAW,YAA+B;AACxC,UAAM;AAAA,EACR;AAAA,EAEA,IAAW,oBAAuC;AAChD,UAAM;AAAA,EACR;AAAA,EAEA,IAAW,eAAuB;AAChC,WAAO;AAAA,EACT;AAAA,EAEO,uBAA8B;AACnC,UAAM,IAAI,MAAM,yBAAyB;AAAA,EAC3C;AAAA,EAEO,wBAAuC;AAC5C,UAAM,IAAI,MAAM,yBAAyB;AAAA,EAC3C;AAAA,EAEO,YAAY,UAAkB;AACnC,QAAI,aAAa,KAAK,cAAc;AAClC,aAAO;AAAA,QACL,QAAQ;AAAA,QACR,UAAU,KAAK;AAAA,QACf,UAAU,KAAK;AAAA,QACf,YAAY;AAAA,QACZ,OAAO;AAAA,QACP,QAAQ;AAAA,MACV;AAAA,IACF;AACA,UAAM,IAAI,MAAM,wBAAwB;AAAA,EAC1C;AAAA,EAEA,MAAa,iBAAgC;AAC3C,UAAM,IAAI,MAAM,yBAAyB;AAAA,EAC3C;AAAA,EAEO,oBAAmC;AACxC,UAAM,IAAI,MAAM,yBAAyB;AAAA,EAC3C;AAAA,EAEO,SAAwB;AAC7B,UAAM,IAAI,MAAM,yBAAyB;AAAA,EAC3C;AAAA,EAEO,UAAyB;AAC9B,UAAM,IAAI,MAAM,yBAAyB;AAAA,EAC3C;AAAA,EAEO,SAAwB;AAC7B,UAAM,IAAI,MAAM,yBAAyB;AAAA,EAC3C;AAAA,EAEO,YAA2B;AAChC,UAAM,IAAI,MAAM,yBAAyB;AAAA,EAC3C;AAAA,EAEO,SAAwB;AAC7B,UAAM,IAAI,MAAM,yBAAyB;AAAA,EAC3C;AAAA,EAEO,aAAoB;AACzB,UAAM,IAAI,MAAM,yBAAyB;AAAA,EAC3C;AAAA,EAEO,gBAAuB;AAC5B,UAAM,IAAI,MAAM,yBAAyB;AAAA,EAC3C;AACF;","names":[]}
1
+ {"version":3,"sources":["../../../src/runtimes/local/LocalThreadListRuntimeCore.tsx"],"sourcesContent":["import { ThreadListRuntimeCore } from \"../core/ThreadListRuntimeCore\";\nimport { BaseSubscribable } from \"../remote-thread-list/BaseSubscribable\";\nimport { LocalThreadRuntimeCore } from \"./LocalThreadRuntimeCore\";\n\nexport type LocalThreadFactory = () => LocalThreadRuntimeCore;\n\nconst EMPTY_ARRAY = Object.freeze([]);\nexport class LocalThreadListRuntimeCore\n extends BaseSubscribable\n implements ThreadListRuntimeCore\n{\n private _mainThread: LocalThreadRuntimeCore;\n constructor(_threadFactory: LocalThreadFactory) {\n super();\n\n this._mainThread = _threadFactory();\n }\n\n public get isLoading() {\n return false;\n }\n\n public getMainThreadRuntimeCore() {\n return this._mainThread;\n }\n\n public get newThreadId(): string {\n throw new Error(\"Method not implemented.\");\n }\n\n public get threadIds(): readonly string[] {\n throw EMPTY_ARRAY;\n }\n\n public get archivedThreadIds(): readonly string[] {\n throw EMPTY_ARRAY;\n }\n\n public get mainThreadId(): string {\n return \"__DEFAULT_ID__\";\n }\n\n public getThreadRuntimeCore(): never {\n throw new Error(\"Method not implemented.\");\n }\n\n public getLoadThreadsPromise(): Promise<void> {\n throw new Error(\"Method not implemented.\");\n }\n\n public getItemById(threadId: string) {\n if (threadId === this.mainThreadId) {\n return {\n status: \"regular\" as const,\n threadId: this.mainThreadId,\n remoteId: this.mainThreadId,\n externalId: undefined,\n title: undefined,\n isMain: true,\n };\n }\n throw new Error(\"Method not implemented\");\n }\n\n public async switchToThread(): Promise<void> {\n throw new Error(\"Method not implemented.\");\n }\n\n public switchToNewThread(): Promise<void> {\n throw new Error(\"Method not implemented.\");\n }\n\n public rename(): Promise<void> {\n throw new Error(\"Method not implemented.\");\n }\n\n public archive(): Promise<void> {\n throw new Error(\"Method not implemented.\");\n }\n\n public detach(): Promise<void> {\n throw new Error(\"Method not implemented.\");\n }\n\n public unarchive(): Promise<void> {\n throw new Error(\"Method not implemented.\");\n }\n\n public delete(): Promise<void> {\n throw new Error(\"Method not implemented.\");\n }\n\n public initialize(): never {\n throw new Error(\"Method not implemented.\");\n }\n\n public generateTitle(): never {\n throw new Error(\"Method not implemented.\");\n }\n}\n"],"mappings":";AACA,SAAS,wBAAwB;AAKjC,IAAM,cAAc,OAAO,OAAO,CAAC,CAAC;AAC7B,IAAM,6BAAN,cACG,iBAEV;AAAA,EACU;AAAA,EACR,YAAY,gBAAoC;AAC9C,UAAM;AAEN,SAAK,cAAc,eAAe;AAAA,EACpC;AAAA,EAEA,IAAW,YAAY;AACrB,WAAO;AAAA,EACT;AAAA,EAEO,2BAA2B;AAChC,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAW,cAAsB;AAC/B,UAAM,IAAI,MAAM,yBAAyB;AAAA,EAC3C;AAAA,EAEA,IAAW,YAA+B;AACxC,UAAM;AAAA,EACR;AAAA,EAEA,IAAW,oBAAuC;AAChD,UAAM;AAAA,EACR;AAAA,EAEA,IAAW,eAAuB;AAChC,WAAO;AAAA,EACT;AAAA,EAEO,uBAA8B;AACnC,UAAM,IAAI,MAAM,yBAAyB;AAAA,EAC3C;AAAA,EAEO,wBAAuC;AAC5C,UAAM,IAAI,MAAM,yBAAyB;AAAA,EAC3C;AAAA,EAEO,YAAY,UAAkB;AACnC,QAAI,aAAa,KAAK,cAAc;AAClC,aAAO;AAAA,QACL,QAAQ;AAAA,QACR,UAAU,KAAK;AAAA,QACf,UAAU,KAAK;AAAA,QACf,YAAY;AAAA,QACZ,OAAO;AAAA,QACP,QAAQ;AAAA,MACV;AAAA,IACF;AACA,UAAM,IAAI,MAAM,wBAAwB;AAAA,EAC1C;AAAA,EAEA,MAAa,iBAAgC;AAC3C,UAAM,IAAI,MAAM,yBAAyB;AAAA,EAC3C;AAAA,EAEO,oBAAmC;AACxC,UAAM,IAAI,MAAM,yBAAyB;AAAA,EAC3C;AAAA,EAEO,SAAwB;AAC7B,UAAM,IAAI,MAAM,yBAAyB;AAAA,EAC3C;AAAA,EAEO,UAAyB;AAC9B,UAAM,IAAI,MAAM,yBAAyB;AAAA,EAC3C;AAAA,EAEO,SAAwB;AAC7B,UAAM,IAAI,MAAM,yBAAyB;AAAA,EAC3C;AAAA,EAEO,YAA2B;AAChC,UAAM,IAAI,MAAM,yBAAyB;AAAA,EAC3C;AAAA,EAEO,SAAwB;AAC7B,UAAM,IAAI,MAAM,yBAAyB;AAAA,EAC3C;AAAA,EAEO,aAAoB;AACzB,UAAM,IAAI,MAAM,yBAAyB;AAAA,EAC3C;AAAA,EAEO,gBAAuB;AAC5B,UAAM,IAAI,MAAM,yBAAyB;AAAA,EAC3C;AACF;","names":[]}
@@ -17,6 +17,8 @@ export declare class LocalThreadRuntimeCore extends BaseThreadRuntimeCore implem
17
17
  };
18
18
  private abortController;
19
19
  readonly isDisabled = false;
20
+ private _isLoading;
21
+ get isLoading(): boolean;
20
22
  private _suggestions;
21
23
  private _suggestionsController;
22
24
  get suggestions(): readonly ThreadSuggestion[];
@@ -1 +1 @@
1
- {"version":3,"file":"LocalThreadRuntimeCore.d.ts","sourceRoot":"","sources":["../../../src/runtimes/local/LocalThreadRuntimeCore.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAA0B,MAAM,aAAa,CAAC;AACzE,OAAO,KAAK,EAAE,gBAAgB,EAAsB,MAAM,oBAAoB,CAAC;AAE/E,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EACL,oBAAoB,EACpB,gBAAgB,EAChB,iBAAiB,EACjB,cAAc,EACd,eAAe,EAChB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AAEtE,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAE3D,qBAAa,sBACX,SAAQ,qBACR,YAAW,iBAAiB;IAE5B,SAAgB,YAAY;;;;;;;;;MAS1B;IAEF,OAAO,CAAC,eAAe,CAAgC;IAEvD,SAAgB,UAAU,SAAS;IAEnC,OAAO,CAAC,YAAY,CAAmC;IACvD,OAAO,CAAC,sBAAsB,CAAgC;IAC9D,IAAW,WAAW,IAAI,SAAS,gBAAgB,EAAE,CAEpD;IAED,IAAW,QAAQ;;;;;;;MAElB;gBAGC,eAAe,EAAE,oBAAoB,EACrC,OAAO,EAAE,uBAAuB;IAMlC,OAAO,CAAC,QAAQ,CAA2B;IAE3C,OAAO,CAAC,cAAc,CAAiB;IAEvC,IAAW,MAAM,cAEhB;IAEM,qBAAqB,CAAC,OAAO,EAAE,uBAAuB;IA4B7D,OAAO,CAAC,YAAY,CAA4B;IACzC,eAAe;IA0BT,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IA0BnD,SAAS,CAAC,EAAE,MAAM,EAAE,GAAG,WAAW,EAAE,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAI/D,QAAQ,CACnB,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,cAAc,EACvC,WAAW,CAAC,EAAE,gBAAgB,CAAC,KAAK,CAAC,GACpC,OAAO,CAAC,IAAI,CAAC;YAiEF,gBAAgB;IA+JvB,MAAM;IAKN,SAAS;IAKT,aAAa,CAAC,EACnB,SAAS,EACT,UAAU,EACV,MAAM,EACN,OAAO,EACP,QAAQ,GACT,EAAE,oBAAoB;CAuCxB"}
1
+ {"version":3,"file":"LocalThreadRuntimeCore.d.ts","sourceRoot":"","sources":["../../../src/runtimes/local/LocalThreadRuntimeCore.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAA0B,MAAM,aAAa,CAAC;AACzE,OAAO,KAAK,EAAE,gBAAgB,EAAsB,MAAM,oBAAoB,CAAC;AAE/E,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EACL,oBAAoB,EACpB,gBAAgB,EAChB,iBAAiB,EACjB,cAAc,EACd,eAAe,EAChB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AAEtE,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAE3D,qBAAa,sBACX,SAAQ,qBACR,YAAW,iBAAiB;IAE5B,SAAgB,YAAY;;;;;;;;;MAS1B;IAEF,OAAO,CAAC,eAAe,CAAgC;IAEvD,SAAgB,UAAU,SAAS;IAEnC,OAAO,CAAC,UAAU,CAAS;IAC3B,IAAW,SAAS,YAEnB;IAED,OAAO,CAAC,YAAY,CAAmC;IACvD,OAAO,CAAC,sBAAsB,CAAgC;IAC9D,IAAW,WAAW,IAAI,SAAS,gBAAgB,EAAE,CAEpD;IAED,IAAW,QAAQ;;;;;;;MAElB;gBAGC,eAAe,EAAE,oBAAoB,EACrC,OAAO,EAAE,uBAAuB;IAMlC,OAAO,CAAC,QAAQ,CAA2B;IAE3C,OAAO,CAAC,cAAc,CAAiB;IAEvC,IAAW,MAAM,cAEhB;IAEM,qBAAqB,CAAC,OAAO,EAAE,uBAAuB;IA4B7D,OAAO,CAAC,YAAY,CAA4B;IACzC,eAAe;IAoCT,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IA0BnD,SAAS,CAAC,EAAE,MAAM,EAAE,GAAG,WAAW,EAAE,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAI/D,QAAQ,CACnB,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,cAAc,EACvC,WAAW,CAAC,EAAE,gBAAgB,CAAC,KAAK,CAAC,GACpC,OAAO,CAAC,IAAI,CAAC;YAiEF,gBAAgB;IA+JvB,MAAM;IAKN,SAAS;IAKT,aAAa,CAAC,EACnB,SAAS,EACT,UAAU,EACV,MAAM,EACN,OAAO,EACP,QAAQ,GACT,EAAE,oBAAoB;CAuCxB"}
@@ -15,6 +15,10 @@ var LocalThreadRuntimeCore = class extends BaseThreadRuntimeCore {
15
15
  };
16
16
  abortController = null;
17
17
  isDisabled = false;
18
+ _isLoading = false;
19
+ get isLoading() {
20
+ return this._isLoading;
21
+ }
18
22
  _suggestions = [];
19
23
  _suggestionsController = null;
20
24
  get suggestions() {
@@ -57,11 +61,15 @@ var LocalThreadRuntimeCore = class extends BaseThreadRuntimeCore {
57
61
  __internal_load() {
58
62
  if (this._loadPromise) return this._loadPromise;
59
63
  const promise = this.adapters.history?.load() ?? Promise.resolve(null);
64
+ this._isLoading = true;
65
+ this._notifySubscribers();
60
66
  this._loadPromise = promise.then((repo) => {
61
67
  if (!repo) return;
62
68
  this.repository.import(repo);
63
69
  this._notifySubscribers();
64
- const resume = this.adapters.history?.resume?.bind(this.adapters.history);
70
+ const resume = this.adapters.history?.resume?.bind(
71
+ this.adapters.history
72
+ );
65
73
  if (repo.unstable_resume && resume) {
66
74
  this.startRun(
67
75
  {
@@ -72,6 +80,9 @@ var LocalThreadRuntimeCore = class extends BaseThreadRuntimeCore {
72
80
  resume
73
81
  );
74
82
  }
83
+ }).finally(() => {
84
+ this._isLoading = false;
85
+ this._notifySubscribers();
75
86
  });
76
87
  return this._loadPromise;
77
88
  }