@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
@@ -21,11 +21,14 @@ export type ThreadListState = {
21
21
  readonly newThread: string | undefined;
22
22
  readonly threads: readonly string[];
23
23
  readonly archivedThreads: readonly string[];
24
+ readonly isLoading: boolean;
24
25
  };
25
26
 
26
27
  export type ThreadListRuntime = {
27
28
  getState(): ThreadListState;
28
29
 
30
+ readonly isLoading: boolean;
31
+
29
32
  subscribe(callback: () => void): Unsubscribe;
30
33
 
31
34
  readonly main: ThreadRuntime;
@@ -48,6 +51,7 @@ const getThreadListState = (
48
51
  newThread: threadList.newThreadId,
49
52
  threads: threadList.threadIds,
50
53
  archivedThreads: threadList.archivedThreadIds,
54
+ isLoading: threadList.isLoading,
51
55
  };
52
56
  };
53
57
 
@@ -139,6 +143,10 @@ export class ThreadListRuntimeImpl implements ThreadListRuntime {
139
143
  return this._getState();
140
144
  }
141
145
 
146
+ public get isLoading() {
147
+ return this._core.isLoading;
148
+ }
149
+
142
150
  public subscribe(callback: () => void): Unsubscribe {
143
151
  return this._core.subscribe(callback);
144
152
  }
@@ -139,6 +139,11 @@ export type ThreadState = {
139
139
  */
140
140
  readonly isDisabled: boolean;
141
141
 
142
+ /**
143
+ * Whether the thread is loading its history.
144
+ */
145
+ readonly isLoading: boolean;
146
+
142
147
  /**
143
148
  * Whether the thread is running. A thread is considered running when there is an active stream connection to the backend.
144
149
  */
@@ -187,6 +192,7 @@ export const getThreadState = (
187
192
  metadata: threadListItemState,
188
193
  capabilities: runtime.capabilities,
189
194
  isDisabled: runtime.isDisabled,
195
+ isLoading: runtime.isLoading,
190
196
  isRunning:
191
197
  lastMessage?.role !== "assistant"
192
198
  ? false
package/src/api/index.ts CHANGED
@@ -6,10 +6,18 @@ export type {
6
6
  CreateStartRunConfig,
7
7
  } from "./ThreadRuntime";
8
8
  export type { MessageRuntime, MessageState } from "./MessageRuntime";
9
+
9
10
  export type {
10
- ContentPartRuntime,
11
- ContentPartState,
12
- } from "./ContentPartRuntime";
11
+ MessagePartRuntime,
12
+ MessagePartState,
13
+ } from "./MessagePartRuntime";
14
+
15
+ // TODO remove in v0.11
16
+ export type {
17
+ MessagePartRuntime as MessageContentRuntime,
18
+ MessagePartState as MessageContentState,
19
+ } from "./MessagePartRuntime";
20
+
13
21
  export type {
14
22
  ComposerRuntime,
15
23
  ThreadComposerRuntime,
@@ -2,7 +2,7 @@ import { RefObject, useState } from "react";
2
2
  import { useThreadListItemRuntime } from "../context";
3
3
  import { ThreadHistoryAdapter } from "../runtimes/adapters/thread-history/ThreadHistoryAdapter";
4
4
  import { ExportedMessageRepositoryItem } from "../runtimes/utils/MessageRepository";
5
- import { AssistantCloud } from "./AssistantCloud";
5
+ import { AssistantCloud } from "assistant-cloud";
6
6
  import { auiV0Decode, auiV0Encode } from "./auiV0";
7
7
  import { ThreadListItemRuntime } from "../api";
8
8
 
@@ -1,12 +1,12 @@
1
1
  import { ThreadMessage } from "../types";
2
2
  import { MessageStatus } from "../types/AssistantTypes";
3
3
  import { fromThreadMessageLike } from "../runtimes/external-store/ThreadMessageLike";
4
- import { CloudMessage } from "./AssistantCloudThreadMessages";
4
+ import { CloudMessage } from "assistant-cloud";
5
5
  import { isJSONValue } from "../utils/json/is-json";
6
6
  import { ReadonlyJSONObject, ReadonlyJSONValue } from "assistant-stream/utils";
7
7
  import { ExportedMessageRepositoryItem } from "../runtimes/utils/MessageRepository";
8
8
 
9
- type AuiV0MessageContentPart =
9
+ type AuiV0MessageMessagePart =
10
10
  | {
11
11
  readonly type: "text";
12
12
  readonly text: string;
@@ -42,7 +42,7 @@ type AuiV0MessageContentPart =
42
42
  type AuiV0Message = {
43
43
  readonly role: "assistant" | "user" | "system";
44
44
  readonly status?: MessageStatus;
45
- readonly content: readonly AuiV0MessageContentPart[];
45
+ readonly content: readonly AuiV0MessageMessagePart[];
46
46
  readonly metadata: {
47
47
  readonly unstable_state?: ReadonlyJSONValue;
48
48
  readonly unstable_annotations: readonly ReadonlyJSONValue[];
@@ -114,7 +114,7 @@ export const auiV0Encode = (message: ThreadMessage): AuiV0Message => {
114
114
  default: {
115
115
  const unhandledType: "image" | "file" | "audio" = type;
116
116
  throw new Error(
117
- `Content part type not supported by aui/v0: ${unhandledType}`,
117
+ `Message part type not supported by aui/v0: ${unhandledType}`,
118
118
  );
119
119
  }
120
120
  }
@@ -1,2 +1,2 @@
1
1
  export { useCloudThreadListRuntime } from "./useCloudThreadListRuntime";
2
- export { AssistantCloud } from "./AssistantCloud";
2
+ export { AssistantCloud } from "assistant-cloud";
@@ -1,6 +1,6 @@
1
1
  "use client";
2
2
 
3
- import { AssistantCloud } from "./AssistantCloud";
3
+ import { AssistantCloud } from "assistant-cloud";
4
4
  import { AssistantRuntime } from "../api";
5
5
  import { useRemoteThreadListRuntime } from "../runtimes/remote-thread-list/useRemoteThreadListRuntime";
6
6
  import { useCloudThreadListAdapter } from "../runtimes/remote-thread-list/adapter/cloud";
@@ -0,0 +1,42 @@
1
+ "use client";
2
+
3
+ import { type FC, type PropsWithChildren, useEffect, useState } from "react";
4
+ import { create } from "zustand";
5
+ import { MessagePartContext } from "../react/MessagePartContext";
6
+ import type { MessagePartContextValue } from "../react/MessagePartContext";
7
+ import { writableStore } from "../ReadonlyStore";
8
+ import { MessagePartRuntime } from "../../api/MessagePartRuntime";
9
+ import { ensureBinding } from "../react/utils/ensureBinding";
10
+
11
+ export namespace MessagePartRuntimeProvider {
12
+ export type Props = PropsWithChildren<{
13
+ runtime: MessagePartRuntime;
14
+ }>;
15
+ }
16
+
17
+ const useMessagePartRuntimeStore = (runtime: MessagePartRuntime) => {
18
+ const [store] = useState(() => create(() => runtime));
19
+
20
+ useEffect(() => {
21
+ ensureBinding(runtime);
22
+
23
+ writableStore(store).setState(runtime, true);
24
+ }, [runtime, store]);
25
+
26
+ return store;
27
+ };
28
+
29
+ export const MessagePartRuntimeProvider: FC<
30
+ MessagePartRuntimeProvider.Props
31
+ > = ({ runtime, children }) => {
32
+ const useMessagePartRuntime = useMessagePartRuntimeStore(runtime);
33
+ const [context] = useState<MessagePartContextValue>(() => {
34
+ return { useMessagePartRuntime };
35
+ });
36
+
37
+ return (
38
+ <MessagePartContext.Provider value={context}>
39
+ {children}
40
+ </MessagePartContext.Provider>
41
+ );
42
+ };
@@ -3,88 +3,88 @@
3
3
  import { FC, PropsWithChildren, useEffect, useState } from "react";
4
4
  import { create, StoreApi, UseBoundStore } from "zustand";
5
5
  import {
6
- ContentPartContext,
7
- ContentPartContextValue,
8
- } from "../react/ContentPartContext";
9
- import { ContentPartStatus } from "../../types/AssistantTypes";
6
+ MessagePartContext,
7
+ MessagePartContextValue,
8
+ } from "../react/MessagePartContext";
9
+ import { MessagePartStatus } from "../../types/AssistantTypes";
10
10
  import { writableStore } from "../ReadonlyStore";
11
11
  import {
12
- ContentPartRuntimeImpl,
13
- ContentPartState,
14
- } from "../../api/ContentPartRuntime";
12
+ MessagePartRuntimeImpl,
13
+ MessagePartState,
14
+ } from "../../api/MessagePartRuntime";
15
15
  import { ensureBinding } from "../react/utils/ensureBinding";
16
16
 
17
- export namespace TextContentPartProvider {
17
+ export namespace TextMessagePartProvider {
18
18
  export type Props = PropsWithChildren<{
19
19
  text: string;
20
20
  isRunning?: boolean | undefined;
21
21
  }>;
22
22
  }
23
23
 
24
- const COMPLETE_STATUS: ContentPartStatus = {
24
+ const COMPLETE_STATUS: MessagePartStatus = {
25
25
  type: "complete",
26
26
  };
27
27
 
28
- const RUNNING_STATUS: ContentPartStatus = {
28
+ const RUNNING_STATUS: MessagePartStatus = {
29
29
  type: "running",
30
30
  };
31
31
 
32
- export const TextContentPartProvider: FC<TextContentPartProvider.Props> = ({
32
+ export const TextMessagePartProvider: FC<TextMessagePartProvider.Props> = ({
33
33
  children,
34
34
  text,
35
35
  isRunning,
36
36
  }) => {
37
37
  const [context] = useState<
38
- ContentPartContextValue & {
39
- useContentPart: UseBoundStore<
40
- StoreApi<ContentPartState & { type: "text" }>
38
+ MessagePartContextValue & {
39
+ useMessagePart: UseBoundStore<
40
+ StoreApi<MessagePartState & { type: "text" }>
41
41
  >;
42
42
  }
43
43
  >(() => {
44
- const useContentPart = create<ContentPartState & { type: "text" }>(() => ({
44
+ const useMessagePart = create<MessagePartState & { type: "text" }>(() => ({
45
45
  status: isRunning ? RUNNING_STATUS : COMPLETE_STATUS,
46
46
  type: "text",
47
47
  text,
48
48
  }));
49
49
 
50
- const contentPartRuntime = new ContentPartRuntimeImpl({
50
+ const MessagePartRuntime = new MessagePartRuntimeImpl({
51
51
  path: {
52
52
  ref: "text",
53
53
  threadSelector: { type: "main" },
54
54
  messageSelector: { type: "messageId", messageId: "" },
55
- contentPartSelector: { type: "index", index: 0 },
55
+ messagePartSelector: { type: "index", index: 0 },
56
56
  },
57
- getState: useContentPart.getState,
58
- subscribe: useContentPart.subscribe,
57
+ getState: useMessagePart.getState,
58
+ subscribe: useMessagePart.subscribe,
59
59
  });
60
- ensureBinding(contentPartRuntime);
60
+ ensureBinding(MessagePartRuntime);
61
61
 
62
- const useContentPartRuntime = create(() => contentPartRuntime);
62
+ const useMessagePartRuntime = create(() => MessagePartRuntime);
63
63
 
64
- return { useContentPartRuntime, useContentPart };
64
+ return { useMessagePartRuntime, useMessagePart };
65
65
  });
66
66
 
67
67
  useEffect(() => {
68
- const state = context.useContentPart.getState();
68
+ const state = context.useMessagePart.getState();
69
69
  const textUpdated = state.text !== text;
70
70
  const targetStatus = isRunning ? RUNNING_STATUS : COMPLETE_STATUS;
71
71
  const statusUpdated = state.status !== targetStatus;
72
72
 
73
73
  if (!textUpdated && !statusUpdated) return;
74
74
 
75
- writableStore(context.useContentPart).setState(
75
+ writableStore(context.useMessagePart).setState(
76
76
  {
77
77
  type: "text",
78
78
  text,
79
79
  status: targetStatus,
80
- } satisfies ContentPartState,
80
+ } satisfies MessagePartState,
81
81
  true,
82
82
  );
83
83
  }, [context, isRunning, text]);
84
84
 
85
85
  return (
86
- <ContentPartContext.Provider value={context}>
86
+ <MessagePartContext.Provider value={context}>
87
87
  {children}
88
- </ContentPartContext.Provider>
88
+ </MessagePartContext.Provider>
89
89
  );
90
90
  };
@@ -1,2 +1,5 @@
1
1
  export { AssistantRuntimeProvider } from "./AssistantRuntimeProvider";
2
- export { TextContentPartProvider } from "./TextContentPartProvider";
2
+ export { TextMessagePartProvider } from "./TextMessagePartProvider";
3
+
4
+ // TODO remove in v0.11
5
+ export { TextMessagePartProvider as TextContentPartProvider } from "./TextMessagePartProvider";
@@ -24,6 +24,29 @@ export const useAssistantContext = createContextHook(
24
24
  "AssistantRuntimeProvider",
25
25
  );
26
26
 
27
+ /**
28
+ * Hook to access the AssistantRuntime from the current context.
29
+ *
30
+ * The AssistantRuntime provides access to the top-level assistant state and actions,
31
+ * including thread management, tool registration, and configuration.
32
+ *
33
+ * @param options Configuration options
34
+ * @param options.optional Whether the hook should return null if no context is found
35
+ * @returns The AssistantRuntime instance, or null if optional is true and no context exists
36
+ *
37
+ * @example
38
+ * ```tsx
39
+ * function MyComponent() {
40
+ * const runtime = useAssistantRuntime();
41
+ *
42
+ * const handleNewThread = () => {
43
+ * runtime.switchToNewThread();
44
+ * };
45
+ *
46
+ * return <button onClick={handleNewThread}>New Thread</button>;
47
+ * }
48
+ * ```
49
+ */
27
50
  export function useAssistantRuntime(options?: {
28
51
  optional?: false | undefined;
29
52
  }): AssistantRuntime;
@@ -5,6 +5,44 @@ import { useThreadRuntime } from "./ThreadContext";
5
5
  import { ComposerRuntime } from "../../api/ComposerRuntime";
6
6
  import { createStateHookForRuntime } from "./utils/createStateHookForRuntime";
7
7
 
8
+ /**
9
+ * Hook to access the ComposerRuntime from the current context.
10
+ *
11
+ * The ComposerRuntime provides access to composer state and actions for message
12
+ * composition, including text input, attachments, and sending functionality.
13
+ * This hook automatically resolves to either the message's edit composer or
14
+ * the thread's main composer depending on the context.
15
+ *
16
+ * @param options Configuration options
17
+ * @param options.optional Whether the hook should return null if no context is found
18
+ * @returns The ComposerRuntime instance, or null if optional is true and no context exists
19
+ *
20
+ * @example
21
+ * ```tsx
22
+ * function ComposerActions() {
23
+ * const runtime = useComposerRuntime();
24
+ *
25
+ * const handleSend = () => {
26
+ * if (runtime.getState().canSend) {
27
+ * runtime.send();
28
+ * }
29
+ * };
30
+ *
31
+ * const handleCancel = () => {
32
+ * if (runtime.getState().canCancel) {
33
+ * runtime.cancel();
34
+ * }
35
+ * };
36
+ *
37
+ * return (
38
+ * <div>
39
+ * <button onClick={handleSend}>Send</button>
40
+ * <button onClick={handleCancel}>Cancel</button>
41
+ * </div>
42
+ * );
43
+ * }
44
+ * ```
45
+ */
8
46
  export function useComposerRuntime(options?: {
9
47
  optional?: false | undefined;
10
48
  }): ComposerRuntime;
@@ -21,4 +59,30 @@ export function useComposerRuntime(options?: {
21
59
  : (threadRuntime?.composer ?? null);
22
60
  }
23
61
 
62
+ /**
63
+ * Hook to access the current composer state.
64
+ *
65
+ * This hook provides reactive access to the composer's state, including text content,
66
+ * attachments, editing status, and send/cancel capabilities.
67
+ *
68
+ * @param selector Optional selector function to pick specific state properties
69
+ * @returns The selected composer state or the entire composer state if no selector provided
70
+ *
71
+ * @example
72
+ * ```tsx
73
+ * function ComposerStatus() {
74
+ * const text = useComposer((state) => state.text);
75
+ * const canSend = useComposer((state) => state.canSend);
76
+ * const attachmentCount = useComposer((state) => state.attachments.length);
77
+ *
78
+ * return (
79
+ * <div>
80
+ * Text: {text.length} chars,
81
+ * Attachments: {attachmentCount},
82
+ * Can send: {canSend}
83
+ * </div>
84
+ * );
85
+ * }
86
+ * ```
87
+ */
24
88
  export const useComposer = createStateHookForRuntime(useComposerRuntime);
@@ -22,6 +22,38 @@ const useMessageContext = createContextHook(
22
22
  "a component passed to <ThreadPrimitive.Messages components={...} />",
23
23
  );
24
24
 
25
+ /**
26
+ * Hook to access the MessageRuntime from the current context.
27
+ *
28
+ * The MessageRuntime provides access to message-level state and actions,
29
+ * including message content, status, editing capabilities, and branching.
30
+ *
31
+ * @param options Configuration options
32
+ * @param options.optional Whether the hook should return null if no context is found
33
+ * @returns The MessageRuntime instance, or null if optional is true and no context exists
34
+ *
35
+ * @example
36
+ * ```tsx
37
+ * function MessageActions() {
38
+ * const runtime = useMessageRuntime();
39
+ *
40
+ * const handleReload = () => {
41
+ * runtime.reload();
42
+ * };
43
+ *
44
+ * const handleEdit = () => {
45
+ * runtime.startEdit();
46
+ * };
47
+ *
48
+ * return (
49
+ * <div>
50
+ * <button onClick={handleReload}>Reload</button>
51
+ * <button onClick={handleEdit}>Edit</button>
52
+ * </div>
53
+ * );
54
+ * }
55
+ * ```
56
+ */
25
57
  export function useMessageRuntime(options?: {
26
58
  optional?: false | undefined;
27
59
  }): MessageRuntime;
@@ -36,6 +68,30 @@ export function useMessageRuntime(options?: {
36
68
  return context.useMessageRuntime();
37
69
  }
38
70
 
71
+ /**
72
+ * Hook to access the current message state.
73
+ *
74
+ * This hook provides reactive access to the message's state, including content,
75
+ * role, status, and other message-level properties.
76
+ *
77
+ * @param selector Optional selector function to pick specific state properties
78
+ * @returns The selected message state or the entire message state if no selector provided
79
+ *
80
+ * @example
81
+ * ```tsx
82
+ * function MessageContent() {
83
+ * const role = useMessage((state) => state.role);
84
+ * const content = useMessage((state) => state.content);
85
+ * const isLoading = useMessage((state) => state.status.type === "running");
86
+ *
87
+ * return (
88
+ * <div className={`message-${role}`}>
89
+ * {isLoading ? "Loading..." : content.map(part => part.text).join("")}
90
+ * </div>
91
+ * );
92
+ * }
93
+ * ```
94
+ */
39
95
  export const useMessage = createStateHookForRuntime(useMessageRuntime);
40
96
 
41
97
  const useEditComposerRuntime = (opt: {
@@ -0,0 +1,37 @@
1
+ "use client";
2
+
3
+ import { createContext } from "react";
4
+ import { ReadonlyStore } from "../ReadonlyStore";
5
+ import { createContextHook } from "./utils/createContextHook";
6
+ import { UseBoundStore } from "zustand";
7
+ import { MessagePartRuntime } from "../../api/MessagePartRuntime";
8
+ import { createStateHookForRuntime } from "./utils/createStateHookForRuntime";
9
+
10
+ export type MessagePartContextValue = {
11
+ useMessagePartRuntime: UseBoundStore<ReadonlyStore<MessagePartRuntime>>;
12
+ };
13
+
14
+ export const MessagePartContext = createContext<MessagePartContextValue | null>(
15
+ null,
16
+ );
17
+
18
+ const useMessagePartContext = createContextHook(
19
+ MessagePartContext,
20
+ "a component passed to <MessagePrimitive.Parts components={...}>",
21
+ );
22
+
23
+ export function useMessagePartRuntime(options?: {
24
+ optional?: false | undefined;
25
+ }): MessagePartRuntime;
26
+ export function useMessagePartRuntime(options?: {
27
+ optional?: boolean | undefined;
28
+ }): MessagePartRuntime | null;
29
+ export function useMessagePartRuntime(options?: {
30
+ optional?: boolean | undefined;
31
+ }) {
32
+ const context = useMessagePartContext(options);
33
+ if (!context) return null;
34
+ return context.useMessagePartRuntime();
35
+ }
36
+
37
+ export const useMessagePart = createStateHookForRuntime(useMessagePartRuntime);
@@ -20,6 +20,29 @@ const useThreadContext = createContextHook(
20
20
  "AssistantRuntimeProvider",
21
21
  );
22
22
 
23
+ /**
24
+ * Hook to access the ThreadRuntime from the current context.
25
+ *
26
+ * The ThreadRuntime provides access to thread-level state and actions,
27
+ * including message management, thread state, and composer functionality.
28
+ *
29
+ * @param options Configuration options
30
+ * @param options.optional Whether the hook should return null if no context is found
31
+ * @returns The ThreadRuntime instance, or null if optional is true and no context exists
32
+ *
33
+ * @example
34
+ * ```tsx
35
+ * function MyComponent() {
36
+ * const runtime = useThreadRuntime();
37
+ *
38
+ * const handleSendMessage = (text: string) => {
39
+ * runtime.append({ role: "user", content: [{ type: "text", text }] });
40
+ * };
41
+ *
42
+ * return <button onClick={() => handleSendMessage("Hello!")}>Send</button>;
43
+ * }
44
+ * ```
45
+ */
23
46
  export function useThreadRuntime(options?: {
24
47
  optional?: false | undefined;
25
48
  }): ThreadRuntime;
@@ -32,6 +55,25 @@ export function useThreadRuntime(options?: { optional?: boolean | undefined }) {
32
55
  return context.useThreadRuntime();
33
56
  }
34
57
 
58
+ /**
59
+ * Hook to access the current thread state.
60
+ *
61
+ * This hook provides reactive access to the thread's state, including messages,
62
+ * running status, capabilities, and other thread-level properties.
63
+ *
64
+ * @param selector Optional selector function to pick specific state properties
65
+ * @returns The selected thread state or the entire thread state if no selector provided
66
+ *
67
+ * @example
68
+ * ```tsx
69
+ * function ThreadStatus() {
70
+ * const isRunning = useThread((state) => state.isRunning);
71
+ * const messageCount = useThread((state) => state.messages.length);
72
+ *
73
+ * return <div>Running: {isRunning}, Messages: {messageCount}</div>;
74
+ * }
75
+ * ```
76
+ */
35
77
  export const useThread = createStateHookForRuntime(useThreadRuntime);
36
78
 
37
79
  const useThreadComposerRuntime = (opt: {
@@ -37,7 +37,7 @@ export {
37
37
  useMessageUtils,
38
38
  useMessageUtilsStore,
39
39
  } from "./MessageContext";
40
- export { useContentPartRuntime, useContentPart } from "./ContentPartContext";
40
+ export { useMessagePartRuntime, useMessagePart } from "./MessagePartContext";
41
41
  export { useComposerRuntime, useComposer } from "./ComposerContext";
42
42
 
43
43
  export {
@@ -1,25 +1,25 @@
1
1
  import { create } from "zustand";
2
- import type { ToolCallContentPartComponent } from "../../types/ContentPartComponentTypes";
2
+ import type { ToolCallMessagePartComponent } from "../../types/MessagePartComponentTypes";
3
3
  import { Unsubscribe } from "../../types";
4
4
 
5
5
  export type AssistantToolUIsState = {
6
6
  /**
7
7
  * Get the tool UI configured for a given tool name.
8
8
  */
9
- getToolUI: (toolName: string) => ToolCallContentPartComponent | null;
9
+ getToolUI: (toolName: string) => ToolCallMessagePartComponent | null;
10
10
 
11
11
  /**
12
12
  * Registers a tool UI for a given tool name. Returns an unsubscribe function to remove the tool UI.
13
13
  */
14
14
  setToolUI: (
15
15
  toolName: string,
16
- render: ToolCallContentPartComponent,
16
+ render: ToolCallMessagePartComponent,
17
17
  ) => Unsubscribe;
18
18
  };
19
19
 
20
20
  export const makeAssistantToolUIsStore = () =>
21
21
  create<AssistantToolUIsState>((set) => {
22
- const renderers = new Map<string, ToolCallContentPartComponent[]>();
22
+ const renderers = new Map<string, ToolCallMessagePartComponent[]>();
23
23
 
24
24
  return Object.freeze({
25
25
  getToolUI: (name) => {
@@ -5,7 +5,7 @@ import {
5
5
  useAssistantRuntime,
6
6
  useToolUIsStore,
7
7
  } from "../context/react/AssistantContext";
8
- import type { ToolCallContentPartComponent } from "../types/ContentPartComponentTypes";
8
+ import type { ToolCallMessagePartComponent } from "../types/MessagePartComponentTypes";
9
9
  import type { Tool } from "assistant-stream";
10
10
 
11
11
  export type AssistantToolProps<
@@ -13,7 +13,7 @@ export type AssistantToolProps<
13
13
  TResult,
14
14
  > = Tool<TArgs, TResult> & {
15
15
  toolName: string;
16
- render?: ToolCallContentPartComponent<TArgs, TResult> | undefined;
16
+ render?: ToolCallMessagePartComponent<TArgs, TResult> | undefined;
17
17
  };
18
18
 
19
19
  export const useAssistantTool = <
@@ -2,11 +2,11 @@
2
2
 
3
3
  import { useEffect } from "react";
4
4
  import { useToolUIsStore } from "../context/react/AssistantContext";
5
- import type { ToolCallContentPartComponent } from "../types/ContentPartComponentTypes";
5
+ import type { ToolCallMessagePartComponent } from "../types/MessagePartComponentTypes";
6
6
 
7
7
  export type AssistantToolUIProps<TArgs, TResult> = {
8
8
  toolName: string;
9
- render: ToolCallContentPartComponent<TArgs, TResult>;
9
+ render: ToolCallMessagePartComponent<TArgs, TResult>;
10
10
  };
11
11
 
12
12
  export const useAssistantToolUI = (
@@ -1,12 +1,12 @@
1
1
  "use client";
2
2
 
3
3
  import { FC, useCallback, useEffect, useState } from "react";
4
- import { ToolCallContentPartProps } from "../types";
4
+ import { ToolCallMessagePartProps } from "../types";
5
5
  import { create } from "zustand";
6
6
 
7
7
  export const useInlineRender = <TArgs, TResult>(
8
- toolUI: FC<ToolCallContentPartProps<TArgs, TResult>>,
9
- ): FC<ToolCallContentPartProps<TArgs, TResult>> => {
8
+ toolUI: FC<ToolCallMessagePartProps<TArgs, TResult>>,
9
+ ): FC<ToolCallMessagePartProps<TArgs, TResult>> => {
10
10
  const [useToolUIStore] = useState(() =>
11
11
  create(() => ({
12
12
  toolUI,