@assistant-ui/react-ink 0.0.2 → 0.0.6

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 (370) hide show
  1. package/README.md +86 -0
  2. package/dist/context/AssistantContext.d.ts +1 -7
  3. package/dist/context/AssistantContext.d.ts.map +1 -1
  4. package/dist/context/AssistantContext.js +1 -15
  5. package/dist/context/AssistantContext.js.map +1 -1
  6. package/dist/index.d.ts +27 -18
  7. package/dist/index.d.ts.map +1 -1
  8. package/dist/index.js +25 -21
  9. package/dist/index.js.map +1 -1
  10. package/dist/primitives/actionBar/ActionBarCopy.d.ts +1 -1
  11. package/dist/primitives/actionBar/ActionBarCopy.d.ts.map +1 -1
  12. package/dist/primitives/actionBar/ActionBarCopy.js +1 -1
  13. package/dist/primitives/actionBar/ActionBarCopy.js.map +1 -1
  14. package/dist/primitives/actionBar/ActionBarEdit.js +1 -1
  15. package/dist/primitives/actionBar/ActionBarEdit.js.map +1 -1
  16. package/dist/primitives/actionBar/ActionBarFeedbackNegative.js +1 -1
  17. package/dist/primitives/actionBar/ActionBarFeedbackNegative.js.map +1 -1
  18. package/dist/primitives/actionBar/ActionBarFeedbackPositive.js +1 -1
  19. package/dist/primitives/actionBar/ActionBarFeedbackPositive.js.map +1 -1
  20. package/dist/primitives/actionBar/ActionBarReload.js +1 -1
  21. package/dist/primitives/actionBar/ActionBarReload.js.map +1 -1
  22. package/dist/primitives/actionBar.d.ts +6 -0
  23. package/dist/primitives/actionBar.d.ts.map +1 -0
  24. package/dist/primitives/actionBar.js +6 -0
  25. package/dist/primitives/actionBar.js.map +1 -0
  26. package/dist/primitives/attachment.d.ts +5 -0
  27. package/dist/primitives/attachment.d.ts.map +1 -0
  28. package/dist/primitives/attachment.js +5 -0
  29. package/dist/primitives/attachment.js.map +1 -0
  30. package/dist/primitives/branchPicker/BranchPickerNext.d.ts.map +1 -1
  31. package/dist/primitives/branchPicker/BranchPickerNext.js +3 -15
  32. package/dist/primitives/branchPicker/BranchPickerNext.js.map +1 -1
  33. package/dist/primitives/branchPicker/BranchPickerPrevious.d.ts.map +1 -1
  34. package/dist/primitives/branchPicker/BranchPickerPrevious.js +3 -15
  35. package/dist/primitives/branchPicker/BranchPickerPrevious.js.map +1 -1
  36. package/dist/primitives/branchPicker.d.ts +5 -0
  37. package/dist/primitives/branchPicker.d.ts.map +1 -0
  38. package/dist/primitives/branchPicker.js +5 -0
  39. package/dist/primitives/branchPicker.js.map +1 -0
  40. package/dist/primitives/chainOfThought.d.ts +4 -0
  41. package/dist/primitives/chainOfThought.d.ts.map +1 -0
  42. package/dist/primitives/chainOfThought.js +4 -0
  43. package/dist/primitives/chainOfThought.js.map +1 -0
  44. package/dist/primitives/composer/ComposerAddAttachment.d.ts.map +1 -1
  45. package/dist/primitives/composer/ComposerAddAttachment.js +3 -5
  46. package/dist/primitives/composer/ComposerAddAttachment.js.map +1 -1
  47. package/dist/primitives/composer/ComposerCancel.js +3 -3
  48. package/dist/primitives/composer/ComposerCancel.js.map +1 -1
  49. package/dist/primitives/composer/ComposerSend.js +3 -3
  50. package/dist/primitives/composer/ComposerSend.js.map +1 -1
  51. package/dist/primitives/composer.d.ts +8 -0
  52. package/dist/primitives/composer.d.ts.map +1 -0
  53. package/dist/primitives/composer.js +8 -0
  54. package/dist/primitives/composer.js.map +1 -0
  55. package/dist/primitives/error/ErrorMessage.d.ts +10 -0
  56. package/dist/primitives/error/ErrorMessage.d.ts.map +1 -0
  57. package/dist/primitives/error/ErrorMessage.js +11 -0
  58. package/dist/primitives/error/ErrorMessage.js.map +1 -0
  59. package/dist/primitives/error/ErrorRoot.d.ts +10 -0
  60. package/dist/primitives/error/ErrorRoot.d.ts.map +1 -0
  61. package/dist/primitives/error/ErrorRoot.js +11 -0
  62. package/dist/primitives/error/ErrorRoot.js.map +1 -0
  63. package/dist/primitives/error/index.d.ts +3 -0
  64. package/dist/primitives/error/index.d.ts.map +1 -0
  65. package/dist/primitives/error/index.js +3 -0
  66. package/dist/primitives/error/index.js.map +1 -0
  67. package/dist/primitives/message/MessageContent.d.ts.map +1 -1
  68. package/dist/primitives/message/MessageContent.js +9 -3
  69. package/dist/primitives/message/MessageContent.js.map +1 -1
  70. package/dist/primitives/message/MessageError.d.ts +3 -0
  71. package/dist/primitives/message/MessageError.d.ts.map +1 -0
  72. package/dist/primitives/message/MessageError.js +7 -0
  73. package/dist/primitives/message/MessageError.js.map +1 -0
  74. package/dist/primitives/message/MessageParts.d.ts.map +1 -1
  75. package/dist/primitives/message/MessageParts.js +5 -1
  76. package/dist/primitives/message/MessageParts.js.map +1 -1
  77. package/dist/primitives/message.d.ts +7 -0
  78. package/dist/primitives/message.d.ts.map +1 -0
  79. package/dist/primitives/message.js +7 -0
  80. package/dist/primitives/message.js.map +1 -0
  81. package/dist/primitives/suggestion/SuggestionTrigger.d.ts +1 -1
  82. package/dist/primitives/suggestion/SuggestionTrigger.d.ts.map +1 -1
  83. package/dist/primitives/suggestion/SuggestionTrigger.js +8 -29
  84. package/dist/primitives/suggestion/SuggestionTrigger.js.map +1 -1
  85. package/dist/primitives/suggestion.d.ts +4 -0
  86. package/dist/primitives/suggestion.d.ts.map +1 -0
  87. package/dist/primitives/suggestion.js +4 -0
  88. package/dist/primitives/suggestion.js.map +1 -0
  89. package/dist/primitives/thread/ThreadEmpty.js +1 -1
  90. package/dist/primitives/thread/ThreadEmpty.js.map +1 -1
  91. package/dist/primitives/thread/ThreadMessages.d.ts +28 -5
  92. package/dist/primitives/thread/ThreadMessages.d.ts.map +1 -1
  93. package/dist/primitives/thread/ThreadMessages.js +67 -13
  94. package/dist/primitives/thread/ThreadMessages.js.map +1 -1
  95. package/dist/primitives/thread/ThreadSuggestion.d.ts +1 -1
  96. package/dist/primitives/thread/ThreadSuggestion.d.ts.map +1 -1
  97. package/dist/primitives/thread/ThreadSuggestion.js +7 -29
  98. package/dist/primitives/thread/ThreadSuggestion.js.map +1 -1
  99. package/dist/primitives/thread.d.ts +8 -0
  100. package/dist/primitives/thread.d.ts.map +1 -0
  101. package/dist/primitives/thread.js +8 -0
  102. package/dist/primitives/thread.js.map +1 -0
  103. package/dist/primitives/threadList/ThreadListNew.d.ts +1 -1
  104. package/dist/primitives/threadList/ThreadListNew.d.ts.map +1 -1
  105. package/dist/primitives/threadList/ThreadListNew.js +3 -7
  106. package/dist/primitives/threadList/ThreadListNew.js.map +1 -1
  107. package/dist/primitives/threadList.d.ts +4 -0
  108. package/dist/primitives/threadList.d.ts.map +1 -0
  109. package/dist/primitives/threadList.js +4 -0
  110. package/dist/primitives/threadList.js.map +1 -0
  111. package/dist/primitives/threadListItem/ThreadListItemArchive.d.ts +1 -1
  112. package/dist/primitives/threadListItem/ThreadListItemArchive.d.ts.map +1 -1
  113. package/dist/primitives/threadListItem/ThreadListItemArchive.js +3 -7
  114. package/dist/primitives/threadListItem/ThreadListItemArchive.js.map +1 -1
  115. package/dist/primitives/threadListItem/ThreadListItemDelete.d.ts +1 -1
  116. package/dist/primitives/threadListItem/ThreadListItemDelete.d.ts.map +1 -1
  117. package/dist/primitives/threadListItem/ThreadListItemDelete.js +3 -7
  118. package/dist/primitives/threadListItem/ThreadListItemDelete.js.map +1 -1
  119. package/dist/primitives/threadListItem/ThreadListItemTrigger.d.ts +1 -1
  120. package/dist/primitives/threadListItem/ThreadListItemTrigger.d.ts.map +1 -1
  121. package/dist/primitives/threadListItem/ThreadListItemTrigger.js +3 -7
  122. package/dist/primitives/threadListItem/ThreadListItemTrigger.js.map +1 -1
  123. package/dist/primitives/threadListItem/ThreadListItemUnarchive.d.ts +1 -1
  124. package/dist/primitives/threadListItem/ThreadListItemUnarchive.d.ts.map +1 -1
  125. package/dist/primitives/threadListItem/ThreadListItemUnarchive.js +3 -7
  126. package/dist/primitives/threadListItem/ThreadListItemUnarchive.js.map +1 -1
  127. package/dist/primitives/threadListItem.d.ts +7 -0
  128. package/dist/primitives/threadListItem.d.ts.map +1 -0
  129. package/dist/primitives/threadListItem.js +7 -0
  130. package/dist/primitives/threadListItem.js.map +1 -0
  131. package/dist/primitives/toolCall/ToolFallback.d.ts +33 -0
  132. package/dist/primitives/toolCall/ToolFallback.d.ts.map +1 -0
  133. package/dist/primitives/toolCall/ToolFallback.js +103 -0
  134. package/dist/primitives/toolCall/ToolFallback.js.map +1 -0
  135. package/dist/primitives/toolCall.d.ts +2 -0
  136. package/dist/primitives/toolCall.d.ts.map +1 -0
  137. package/dist/primitives/toolCall.js +2 -0
  138. package/dist/primitives/toolCall.js.map +1 -0
  139. package/dist/runtimes/useLocalRuntime.d.ts +1 -17
  140. package/dist/runtimes/useLocalRuntime.d.ts.map +1 -1
  141. package/dist/runtimes/useLocalRuntime.js +1 -61
  142. package/dist/runtimes/useLocalRuntime.js.map +1 -1
  143. package/package.json +13 -11
  144. package/src/context/AssistantContext.tsx +1 -31
  145. package/src/index.ts +80 -44
  146. package/src/primitives/actionBar/ActionBarCopy.tsx +1 -1
  147. package/src/primitives/actionBar/ActionBarEdit.tsx +1 -1
  148. package/src/primitives/actionBar/ActionBarFeedbackNegative.tsx +1 -1
  149. package/src/primitives/actionBar/ActionBarFeedbackPositive.tsx +1 -1
  150. package/src/primitives/actionBar/ActionBarReload.tsx +1 -1
  151. package/src/primitives/actionBar.ts +20 -0
  152. package/src/primitives/attachment.ts +16 -0
  153. package/src/primitives/branchPicker/BranchPickerNext.tsx +3 -15
  154. package/src/primitives/branchPicker/BranchPickerPrevious.tsx +3 -15
  155. package/src/primitives/branchPicker.ts +16 -0
  156. package/src/primitives/chainOfThought.ts +9 -0
  157. package/src/primitives/composer/ComposerAddAttachment.tsx +3 -5
  158. package/src/primitives/composer/ComposerCancel.tsx +3 -3
  159. package/src/primitives/composer/ComposerSend.tsx +3 -3
  160. package/src/primitives/composer.ts +25 -0
  161. package/src/primitives/error/ErrorMessage.tsx +17 -0
  162. package/src/primitives/error/ErrorRoot.tsx +16 -0
  163. package/src/primitives/error/index.ts +8 -0
  164. package/src/primitives/message/MessageContent.test.tsx +83 -0
  165. package/src/primitives/message/MessageContent.tsx +22 -16
  166. package/src/primitives/message/MessageError.tsx +9 -0
  167. package/src/primitives/message/MessageParts.tsx +10 -4
  168. package/src/primitives/message.ts +21 -0
  169. package/src/primitives/suggestion/SuggestionTrigger.tsx +10 -30
  170. package/src/primitives/suggestion.ts +12 -0
  171. package/src/primitives/thread/ThreadEmpty.tsx +1 -1
  172. package/src/primitives/thread/ThreadMessages.tsx +133 -29
  173. package/src/primitives/thread/ThreadSuggestion.tsx +9 -30
  174. package/src/primitives/thread.ts +25 -0
  175. package/src/primitives/threadList/ThreadListNew.tsx +4 -8
  176. package/src/primitives/threadList.ts +12 -0
  177. package/src/primitives/threadListItem/ThreadListItemArchive.tsx +4 -8
  178. package/src/primitives/threadListItem/ThreadListItemDelete.tsx +4 -8
  179. package/src/primitives/threadListItem/ThreadListItemTrigger.tsx +4 -8
  180. package/src/primitives/threadListItem/ThreadListItemUnarchive.tsx +4 -8
  181. package/src/primitives/threadListItem.ts +21 -0
  182. package/src/primitives/toolCall/ToolFallback.test.tsx +40 -0
  183. package/src/primitives/toolCall/ToolFallback.tsx +227 -0
  184. package/src/primitives/toolCall.ts +5 -0
  185. package/src/runtimes/useLocalRuntime.ts +4 -105
  186. package/dist/adapters/LocalStorageThreadListAdapter.d.ts +0 -15
  187. package/dist/adapters/LocalStorageThreadListAdapter.d.ts.map +0 -1
  188. package/dist/adapters/LocalStorageThreadListAdapter.js +0 -154
  189. package/dist/adapters/LocalStorageThreadListAdapter.js.map +0 -1
  190. package/dist/adapters/TitleGenerationAdapter.d.ts +0 -6
  191. package/dist/adapters/TitleGenerationAdapter.d.ts.map +0 -1
  192. package/dist/adapters/TitleGenerationAdapter.js +0 -15
  193. package/dist/adapters/TitleGenerationAdapter.js.map +0 -1
  194. package/dist/adapters/index.d.ts +0 -3
  195. package/dist/adapters/index.d.ts.map +0 -1
  196. package/dist/adapters/index.js +0 -3
  197. package/dist/adapters/index.js.map +0 -1
  198. package/dist/client/index.d.ts +0 -5
  199. package/dist/client/index.d.ts.map +0 -1
  200. package/dist/client/index.js +0 -7
  201. package/dist/client/index.js.map +0 -1
  202. package/dist/context/index.d.ts +0 -2
  203. package/dist/context/index.d.ts.map +0 -1
  204. package/dist/context/index.js +0 -2
  205. package/dist/context/index.js.map +0 -1
  206. package/dist/model-context/index.d.ts +0 -9
  207. package/dist/model-context/index.d.ts.map +0 -1
  208. package/dist/model-context/index.js +0 -7
  209. package/dist/model-context/index.js.map +0 -1
  210. package/dist/primitive-hooks/index.d.ts +0 -15
  211. package/dist/primitive-hooks/index.d.ts.map +0 -1
  212. package/dist/primitive-hooks/index.js +0 -15
  213. package/dist/primitive-hooks/index.js.map +0 -1
  214. package/dist/primitive-hooks/useActionBarCopy.d.ts +0 -10
  215. package/dist/primitive-hooks/useActionBarCopy.d.ts.map +0 -1
  216. package/dist/primitive-hooks/useActionBarCopy.js +0 -26
  217. package/dist/primitive-hooks/useActionBarCopy.js.map +0 -1
  218. package/dist/primitive-hooks/useActionBarEdit.d.ts +0 -5
  219. package/dist/primitive-hooks/useActionBarEdit.d.ts.map +0 -1
  220. package/dist/primitive-hooks/useActionBarEdit.js +0 -11
  221. package/dist/primitive-hooks/useActionBarEdit.js.map +0 -1
  222. package/dist/primitive-hooks/useActionBarFeedback.d.ts +0 -9
  223. package/dist/primitive-hooks/useActionBarFeedback.d.ts.map +0 -1
  224. package/dist/primitive-hooks/useActionBarFeedback.js +0 -19
  225. package/dist/primitive-hooks/useActionBarFeedback.js.map +0 -1
  226. package/dist/primitive-hooks/useActionBarReload.d.ts +0 -5
  227. package/dist/primitive-hooks/useActionBarReload.d.ts.map +0 -1
  228. package/dist/primitive-hooks/useActionBarReload.js +0 -13
  229. package/dist/primitive-hooks/useActionBarReload.js.map +0 -1
  230. package/dist/primitive-hooks/useComposerAddAttachment.d.ts +0 -5
  231. package/dist/primitive-hooks/useComposerAddAttachment.d.ts.map +0 -1
  232. package/dist/primitive-hooks/useComposerAddAttachment.js +0 -10
  233. package/dist/primitive-hooks/useComposerAddAttachment.js.map +0 -1
  234. package/dist/primitive-hooks/useComposerCancel.d.ts +0 -5
  235. package/dist/primitive-hooks/useComposerCancel.d.ts.map +0 -1
  236. package/dist/primitive-hooks/useComposerCancel.js +0 -11
  237. package/dist/primitive-hooks/useComposerCancel.js.map +0 -1
  238. package/dist/primitive-hooks/useComposerSend.d.ts +0 -5
  239. package/dist/primitive-hooks/useComposerSend.d.ts.map +0 -1
  240. package/dist/primitive-hooks/useComposerSend.js +0 -11
  241. package/dist/primitive-hooks/useComposerSend.js.map +0 -1
  242. package/dist/primitive-hooks/useEditComposerCancel.d.ts +0 -4
  243. package/dist/primitive-hooks/useEditComposerCancel.d.ts.map +0 -1
  244. package/dist/primitive-hooks/useEditComposerCancel.js +0 -10
  245. package/dist/primitive-hooks/useEditComposerCancel.js.map +0 -1
  246. package/dist/primitive-hooks/useEditComposerSend.d.ts +0 -5
  247. package/dist/primitive-hooks/useEditComposerSend.d.ts.map +0 -1
  248. package/dist/primitive-hooks/useEditComposerSend.js +0 -11
  249. package/dist/primitive-hooks/useEditComposerSend.js.map +0 -1
  250. package/dist/primitive-hooks/useMessageBranching.d.ts +0 -7
  251. package/dist/primitive-hooks/useMessageBranching.d.ts.map +0 -1
  252. package/dist/primitive-hooks/useMessageBranching.js +0 -15
  253. package/dist/primitive-hooks/useMessageBranching.js.map +0 -1
  254. package/dist/primitive-hooks/useMessageReload.d.ts +0 -5
  255. package/dist/primitive-hooks/useMessageReload.d.ts.map +0 -1
  256. package/dist/primitive-hooks/useMessageReload.js +0 -11
  257. package/dist/primitive-hooks/useMessageReload.js.map +0 -1
  258. package/dist/primitive-hooks/useThreadIsEmpty.d.ts +0 -2
  259. package/dist/primitive-hooks/useThreadIsEmpty.d.ts.map +0 -1
  260. package/dist/primitive-hooks/useThreadIsEmpty.js +0 -5
  261. package/dist/primitive-hooks/useThreadIsEmpty.js.map +0 -1
  262. package/dist/primitive-hooks/useThreadIsRunning.d.ts +0 -2
  263. package/dist/primitive-hooks/useThreadIsRunning.d.ts.map +0 -1
  264. package/dist/primitive-hooks/useThreadIsRunning.js +0 -5
  265. package/dist/primitive-hooks/useThreadIsRunning.js.map +0 -1
  266. package/dist/primitive-hooks/useThreadMessages.d.ts +0 -3
  267. package/dist/primitive-hooks/useThreadMessages.d.ts.map +0 -1
  268. package/dist/primitive-hooks/useThreadMessages.js +0 -5
  269. package/dist/primitive-hooks/useThreadMessages.js.map +0 -1
  270. package/dist/primitives/actionBar/index.d.ts +0 -6
  271. package/dist/primitives/actionBar/index.d.ts.map +0 -1
  272. package/dist/primitives/actionBar/index.js +0 -6
  273. package/dist/primitives/actionBar/index.js.map +0 -1
  274. package/dist/primitives/attachment/index.d.ts +0 -5
  275. package/dist/primitives/attachment/index.d.ts.map +0 -1
  276. package/dist/primitives/attachment/index.js +0 -5
  277. package/dist/primitives/attachment/index.js.map +0 -1
  278. package/dist/primitives/branchPicker/index.d.ts +0 -5
  279. package/dist/primitives/branchPicker/index.d.ts.map +0 -1
  280. package/dist/primitives/branchPicker/index.js +0 -5
  281. package/dist/primitives/branchPicker/index.js.map +0 -1
  282. package/dist/primitives/chainOfThought/index.d.ts +0 -4
  283. package/dist/primitives/chainOfThought/index.d.ts.map +0 -1
  284. package/dist/primitives/chainOfThought/index.js +0 -4
  285. package/dist/primitives/chainOfThought/index.js.map +0 -1
  286. package/dist/primitives/composer/EditComposerCancel.d.ts +0 -7
  287. package/dist/primitives/composer/EditComposerCancel.d.ts.map +0 -1
  288. package/dist/primitives/composer/EditComposerCancel.js +0 -8
  289. package/dist/primitives/composer/EditComposerCancel.js.map +0 -1
  290. package/dist/primitives/composer/EditComposerInput.d.ts +0 -10
  291. package/dist/primitives/composer/EditComposerInput.d.ts.map +0 -1
  292. package/dist/primitives/composer/EditComposerInput.js +0 -19
  293. package/dist/primitives/composer/EditComposerInput.js.map +0 -1
  294. package/dist/primitives/composer/EditComposerSend.d.ts +0 -7
  295. package/dist/primitives/composer/EditComposerSend.d.ts.map +0 -1
  296. package/dist/primitives/composer/EditComposerSend.js +0 -8
  297. package/dist/primitives/composer/EditComposerSend.js.map +0 -1
  298. package/dist/primitives/composer/index.d.ts +0 -11
  299. package/dist/primitives/composer/index.d.ts.map +0 -1
  300. package/dist/primitives/composer/index.js +0 -11
  301. package/dist/primitives/composer/index.js.map +0 -1
  302. package/dist/primitives/message/index.d.ts +0 -6
  303. package/dist/primitives/message/index.d.ts.map +0 -1
  304. package/dist/primitives/message/index.js +0 -6
  305. package/dist/primitives/message/index.js.map +0 -1
  306. package/dist/primitives/suggestion/index.d.ts +0 -4
  307. package/dist/primitives/suggestion/index.d.ts.map +0 -1
  308. package/dist/primitives/suggestion/index.js +0 -4
  309. package/dist/primitives/suggestion/index.js.map +0 -1
  310. package/dist/primitives/thread/index.d.ts +0 -8
  311. package/dist/primitives/thread/index.d.ts.map +0 -1
  312. package/dist/primitives/thread/index.js +0 -8
  313. package/dist/primitives/thread/index.js.map +0 -1
  314. package/dist/primitives/threadList/index.d.ts +0 -4
  315. package/dist/primitives/threadList/index.d.ts.map +0 -1
  316. package/dist/primitives/threadList/index.js +0 -4
  317. package/dist/primitives/threadList/index.js.map +0 -1
  318. package/dist/primitives/threadListItem/index.d.ts +0 -7
  319. package/dist/primitives/threadListItem/index.d.ts.map +0 -1
  320. package/dist/primitives/threadListItem/index.js +0 -7
  321. package/dist/primitives/threadListItem/index.js.map +0 -1
  322. package/dist/runtimes/index.d.ts +0 -3
  323. package/dist/runtimes/index.d.ts.map +0 -1
  324. package/dist/runtimes/index.js +0 -3
  325. package/dist/runtimes/index.js.map +0 -1
  326. package/dist/types/index.d.ts +0 -2
  327. package/dist/types/index.d.ts.map +0 -1
  328. package/dist/types/index.js +0 -2
  329. package/dist/types/index.js.map +0 -1
  330. package/dist/types/scopes/index.d.ts +0 -3
  331. package/dist/types/scopes/index.d.ts.map +0 -1
  332. package/dist/types/scopes/index.js +0 -2
  333. package/dist/types/scopes/index.js.map +0 -1
  334. package/src/adapters/LocalStorageThreadListAdapter.tsx +0 -227
  335. package/src/adapters/TitleGenerationAdapter.ts +0 -20
  336. package/src/adapters/index.ts +0 -5
  337. package/src/client/index.ts +0 -7
  338. package/src/context/index.ts +0 -1
  339. package/src/model-context/index.ts +0 -44
  340. package/src/primitive-hooks/index.ts +0 -20
  341. package/src/primitive-hooks/useActionBarCopy.ts +0 -38
  342. package/src/primitive-hooks/useActionBarEdit.ts +0 -13
  343. package/src/primitive-hooks/useActionBarFeedback.ts +0 -28
  344. package/src/primitive-hooks/useActionBarReload.ts +0 -18
  345. package/src/primitive-hooks/useComposerAddAttachment.ts +0 -16
  346. package/src/primitive-hooks/useComposerCancel.ts +0 -13
  347. package/src/primitive-hooks/useComposerSend.ts +0 -13
  348. package/src/primitive-hooks/useEditComposerCancel.ts +0 -12
  349. package/src/primitive-hooks/useEditComposerSend.ts +0 -13
  350. package/src/primitive-hooks/useMessageBranching.ts +0 -18
  351. package/src/primitive-hooks/useMessageReload.ts +0 -13
  352. package/src/primitive-hooks/useThreadIsEmpty.ts +0 -5
  353. package/src/primitive-hooks/useThreadIsRunning.ts +0 -5
  354. package/src/primitive-hooks/useThreadMessages.ts +0 -6
  355. package/src/primitives/actionBar/index.ts +0 -11
  356. package/src/primitives/attachment/index.ts +0 -7
  357. package/src/primitives/branchPicker/index.ts +0 -16
  358. package/src/primitives/chainOfThought/index.ts +0 -9
  359. package/src/primitives/composer/EditComposerCancel.tsx +0 -20
  360. package/src/primitives/composer/EditComposerInput.tsx +0 -40
  361. package/src/primitives/composer/EditComposerSend.tsx +0 -25
  362. package/src/primitives/composer/index.ts +0 -25
  363. package/src/primitives/message/index.ts +0 -11
  364. package/src/primitives/suggestion/index.ts +0 -12
  365. package/src/primitives/thread/index.ts +0 -16
  366. package/src/primitives/threadList/index.ts +0 -3
  367. package/src/primitives/threadListItem/index.ts +0 -21
  368. package/src/runtimes/index.ts +0 -2
  369. package/src/types/index.ts +0 -23
  370. package/src/types/scopes/index.ts +0 -59
@@ -1,31 +1 @@
1
- import { type ReactNode, memo } from "react";
2
- import { useAui } from "@assistant-ui/store";
3
- import type { AssistantRuntime } from "@assistant-ui/core";
4
- import { AssistantProviderBase } from "@assistant-ui/core/react";
5
-
6
- export const useAssistantRuntime = (): AssistantRuntime => {
7
- const aui = useAui();
8
- const runtime = aui.threads().__internal_getAssistantRuntime?.();
9
- if (!runtime) {
10
- throw new Error(
11
- "useAssistantRuntime must be used within an AssistantProvider",
12
- );
13
- }
14
- return runtime;
15
- };
16
-
17
- export const AssistantProvider = memo(
18
- ({
19
- runtime,
20
- children,
21
- }: {
22
- runtime: AssistantRuntime;
23
- children: ReactNode;
24
- }) => {
25
- return (
26
- <AssistantProviderBase runtime={runtime}>
27
- {children}
28
- </AssistantProviderBase>
29
- );
30
- },
31
- );
1
+ export { AssistantRuntimeProvider } from "@assistant-ui/core/react";
package/src/index.ts CHANGED
@@ -1,4 +1,4 @@
1
- import "@assistant-ui/core/react"; // store-augmentation side-effect (tools, dataRenderers scopes)
1
+ /// <reference types="@assistant-ui/core/react" />
2
2
 
3
3
  // Re-export core types
4
4
  export type {
@@ -91,47 +91,29 @@ export {
91
91
  type AssistantEventCallback,
92
92
  } from "@assistant-ui/store";
93
93
 
94
- // Context providers and hooks
95
- export { AssistantProvider, useAssistantRuntime } from "./context";
96
-
97
- // Primitive hooks
98
- export {
99
- useThreadMessages,
100
- useThreadIsRunning,
101
- useThreadIsEmpty,
102
- useComposerSend,
103
- useComposerCancel,
104
- useMessageReload,
105
- useMessageBranching,
106
- useActionBarCopy,
107
- type UseActionBarCopyOptions,
108
- useActionBarEdit,
109
- useActionBarReload,
110
- useActionBarFeedbackPositive,
111
- useActionBarFeedbackNegative,
112
- useEditComposerSend,
113
- useEditComposerCancel,
114
- useComposerAddAttachment,
115
- } from "./primitive-hooks";
94
+ // Context providers
95
+ export { AssistantRuntimeProvider } from "./context/AssistantContext";
116
96
 
117
97
  // Runtime
118
98
  export {
119
99
  useLocalRuntime,
120
100
  type LocalRuntimeOptions,
121
- useRemoteThreadListRuntime,
122
- } from "./runtimes";
101
+ } from "./runtimes/useLocalRuntime";
102
+ export { useRemoteThreadListRuntime } from "./runtimes/useRemoteThreadListRuntime";
123
103
 
124
104
  // Primitives
125
- export * from "./primitives/thread";
126
- export * from "./primitives/composer";
127
- export * from "./primitives/message";
128
- export * from "./primitives/threadList";
129
- export * from "./primitives/actionBar";
130
- export * from "./primitives/branchPicker";
131
- export * from "./primitives/attachment";
132
- export * from "./primitives/threadListItem";
133
- export * from "./primitives/chainOfThought";
134
- export * from "./primitives/suggestion";
105
+ export * as ThreadPrimitive from "./primitives/thread";
106
+ export * as ComposerPrimitive from "./primitives/composer";
107
+ export * as MessagePrimitive from "./primitives/message";
108
+ export * as ThreadListPrimitive from "./primitives/threadList";
109
+ export * as ActionBarPrimitive from "./primitives/actionBar";
110
+ export * as BranchPickerPrimitive from "./primitives/branchPicker";
111
+ export * as AttachmentPrimitive from "./primitives/attachment";
112
+ export * as ThreadListItemPrimitive from "./primitives/threadListItem";
113
+ export * as ChainOfThoughtPrimitive from "./primitives/chainOfThought";
114
+ export * as SuggestionPrimitive from "./primitives/suggestion";
115
+ export * as ToolCallPrimitive from "./primitives/toolCall";
116
+ export * as ErrorPrimitive from "./primitives/error";
135
117
 
136
118
  // Re-export shared providers from core/react
137
119
  export {
@@ -145,13 +127,67 @@ export {
145
127
  } from "@assistant-ui/core/react";
146
128
 
147
129
  // Model context, tools & clients
148
- export * from "./model-context";
149
- export * from "./client";
150
- export * from "./types";
151
-
152
- // Adapters
153
130
  export {
154
- type TitleGenerationAdapter,
155
- createSimpleTitleAdapter,
156
- createLocalStorageAdapter,
157
- } from "./adapters";
131
+ makeAssistantTool,
132
+ type AssistantTool,
133
+ makeAssistantToolUI,
134
+ type AssistantToolUI,
135
+ makeAssistantDataUI,
136
+ type AssistantDataUI,
137
+ useAssistantTool,
138
+ type AssistantToolProps,
139
+ useAssistantToolUI,
140
+ type AssistantToolUIProps,
141
+ useAssistantDataUI,
142
+ type AssistantDataUIProps,
143
+ useAssistantInstructions,
144
+ useInlineRender,
145
+ type Toolkit,
146
+ type ToolDefinition,
147
+ Tools,
148
+ DataRenderers,
149
+ } from "@assistant-ui/core/react";
150
+ export type {
151
+ ModelContext,
152
+ ModelContextProvider,
153
+ LanguageModelConfig,
154
+ LanguageModelV1CallSettings,
155
+ } from "@assistant-ui/core";
156
+ export { mergeModelContexts } from "@assistant-ui/core";
157
+ export type { Tool } from "assistant-stream";
158
+ export { tool } from "@assistant-ui/core";
159
+ export { Suggestions, type SuggestionConfig } from "@assistant-ui/core/store";
160
+ export { ModelContextRegistry } from "@assistant-ui/core";
161
+ export type {
162
+ ModelContextRegistryToolHandle,
163
+ ModelContextRegistryInstructionHandle,
164
+ ModelContextRegistryProviderHandle,
165
+ } from "@assistant-ui/core";
166
+
167
+ // Client exports
168
+ export { ModelContext as ModelContextClient } from "@assistant-ui/core/store";
169
+ export { ChainOfThoughtClient } from "@assistant-ui/core/store";
170
+
171
+ // Component types
172
+ export type {
173
+ EmptyMessagePartComponent,
174
+ EmptyMessagePartProps,
175
+ TextMessagePartComponent,
176
+ TextMessagePartProps,
177
+ ReasoningMessagePartComponent,
178
+ ReasoningMessagePartProps,
179
+ ReasoningGroupProps,
180
+ ReasoningGroupComponent,
181
+ SourceMessagePartComponent,
182
+ SourceMessagePartProps,
183
+ ImageMessagePartComponent,
184
+ ImageMessagePartProps,
185
+ FileMessagePartComponent,
186
+ FileMessagePartProps,
187
+ Unstable_AudioMessagePartComponent,
188
+ Unstable_AudioMessagePartProps,
189
+ DataMessagePartComponent,
190
+ DataMessagePartProps,
191
+ ToolCallMessagePartComponent,
192
+ ToolCallMessagePartProps,
193
+ } from "@assistant-ui/core/react";
@@ -2,7 +2,7 @@ import type { ReactNode } from "react";
2
2
  import {
3
3
  useActionBarCopy,
4
4
  type UseActionBarCopyOptions,
5
- } from "../../primitive-hooks/useActionBarCopy";
5
+ } from "@assistant-ui/core/react";
6
6
  import { Pressable, type PressableProps } from "../internal/Pressable";
7
7
 
8
8
  export type ActionBarCopyProps = Omit<PressableProps, "onPress" | "children"> &
@@ -1,5 +1,5 @@
1
1
  import type { ReactNode } from "react";
2
- import { useActionBarEdit } from "../../primitive-hooks/useActionBarEdit";
2
+ import { useActionBarEdit } from "@assistant-ui/core/react";
3
3
  import { Pressable, type PressableProps } from "../internal/Pressable";
4
4
 
5
5
  export type ActionBarEditProps = Omit<PressableProps, "onPress"> & {
@@ -1,5 +1,5 @@
1
1
  import type { ReactNode } from "react";
2
- import { useActionBarFeedbackNegative } from "../../primitive-hooks/useActionBarFeedback";
2
+ import { useActionBarFeedbackNegative } from "@assistant-ui/core/react";
3
3
  import { Pressable, type PressableProps } from "../internal/Pressable";
4
4
 
5
5
  export type ActionBarFeedbackNegativeProps = Omit<
@@ -1,5 +1,5 @@
1
1
  import type { ReactNode } from "react";
2
- import { useActionBarFeedbackPositive } from "../../primitive-hooks/useActionBarFeedback";
2
+ import { useActionBarFeedbackPositive } from "@assistant-ui/core/react";
3
3
  import { Pressable, type PressableProps } from "../internal/Pressable";
4
4
 
5
5
  export type ActionBarFeedbackPositiveProps = Omit<
@@ -1,5 +1,5 @@
1
1
  import type { ReactNode } from "react";
2
- import { useActionBarReload } from "../../primitive-hooks/useActionBarReload";
2
+ import { useActionBarReload } from "@assistant-ui/core/react";
3
3
  import { Pressable, type PressableProps } from "../internal/Pressable";
4
4
 
5
5
  export type ActionBarReloadProps = Omit<PressableProps, "onPress"> & {
@@ -0,0 +1,20 @@
1
+ export {
2
+ ActionBarCopy as Copy,
3
+ type ActionBarCopyProps as CopyProps,
4
+ } from "./actionBar/ActionBarCopy";
5
+ export {
6
+ ActionBarEdit as Edit,
7
+ type ActionBarEditProps as EditProps,
8
+ } from "./actionBar/ActionBarEdit";
9
+ export {
10
+ ActionBarReload as Reload,
11
+ type ActionBarReloadProps as ReloadProps,
12
+ } from "./actionBar/ActionBarReload";
13
+ export {
14
+ ActionBarFeedbackPositive as FeedbackPositive,
15
+ type ActionBarFeedbackPositiveProps as FeedbackPositiveProps,
16
+ } from "./actionBar/ActionBarFeedbackPositive";
17
+ export {
18
+ ActionBarFeedbackNegative as FeedbackNegative,
19
+ type ActionBarFeedbackNegativeProps as FeedbackNegativeProps,
20
+ } from "./actionBar/ActionBarFeedbackNegative";
@@ -0,0 +1,16 @@
1
+ export {
2
+ AttachmentRoot as Root,
3
+ type AttachmentRootProps as RootProps,
4
+ } from "./attachment/AttachmentRoot";
5
+ export {
6
+ AttachmentName as Name,
7
+ type AttachmentNameProps as NameProps,
8
+ } from "./attachment/AttachmentName";
9
+ export {
10
+ AttachmentThumb as Thumb,
11
+ type AttachmentThumbProps as ThumbProps,
12
+ } from "./attachment/AttachmentThumb";
13
+ export {
14
+ AttachmentRemove as Remove,
15
+ type AttachmentRemoveProps as RemoveProps,
16
+ } from "./attachment/AttachmentRemove";
@@ -1,6 +1,5 @@
1
1
  import type { ReactNode } from "react";
2
- import { useCallback } from "react";
3
- import { useAui, useAuiState } from "@assistant-ui/store";
2
+ import { useBranchPickerNext } from "@assistant-ui/core/react";
4
3
  import { Pressable, type PressableProps } from "../internal/Pressable";
5
4
 
6
5
  export type BranchPickerNextProps = Omit<PressableProps, "onPress"> & {
@@ -12,22 +11,11 @@ export const BranchPickerNext = ({
12
11
  disabled: disabledProp,
13
12
  ...pressableProps
14
13
  }: BranchPickerNextProps) => {
15
- const aui = useAui();
16
- const disabled = useAuiState((s) => {
17
- if (s.message.branchNumber >= s.message.branchCount) return true;
18
- if (s.thread.isRunning && !s.thread.capabilities.switchBranchDuringRun) {
19
- return true;
20
- }
21
- return false;
22
- });
23
-
24
- const goToNext = useCallback(() => {
25
- aui.message().switchToBranch({ position: "next" });
26
- }, [aui]);
14
+ const { next, disabled } = useBranchPickerNext();
27
15
 
28
16
  return (
29
17
  <Pressable
30
- onPress={goToNext}
18
+ onPress={next}
31
19
  disabled={disabledProp ?? disabled}
32
20
  {...pressableProps}
33
21
  >
@@ -1,6 +1,5 @@
1
1
  import type { ReactNode } from "react";
2
- import { useCallback } from "react";
3
- import { useAui, useAuiState } from "@assistant-ui/store";
2
+ import { useBranchPickerPrevious } from "@assistant-ui/core/react";
4
3
  import { Pressable, type PressableProps } from "../internal/Pressable";
5
4
 
6
5
  export type BranchPickerPreviousProps = Omit<PressableProps, "onPress"> & {
@@ -12,22 +11,11 @@ export const BranchPickerPrevious = ({
12
11
  disabled: disabledProp,
13
12
  ...pressableProps
14
13
  }: BranchPickerPreviousProps) => {
15
- const aui = useAui();
16
- const disabled = useAuiState((s) => {
17
- if (s.message.branchNumber <= 1) return true;
18
- if (s.thread.isRunning && !s.thread.capabilities.switchBranchDuringRun) {
19
- return true;
20
- }
21
- return false;
22
- });
23
-
24
- const goToPrevious = useCallback(() => {
25
- aui.message().switchToBranch({ position: "previous" });
26
- }, [aui]);
14
+ const { previous, disabled } = useBranchPickerPrevious();
27
15
 
28
16
  return (
29
17
  <Pressable
30
- onPress={goToPrevious}
18
+ onPress={previous}
31
19
  disabled={disabledProp ?? disabled}
32
20
  {...pressableProps}
33
21
  >
@@ -0,0 +1,16 @@
1
+ export {
2
+ BranchPickerPrevious as Previous,
3
+ type BranchPickerPreviousProps as PreviousProps,
4
+ } from "./branchPicker/BranchPickerPrevious";
5
+ export {
6
+ BranchPickerNext as Next,
7
+ type BranchPickerNextProps as NextProps,
8
+ } from "./branchPicker/BranchPickerNext";
9
+ export {
10
+ BranchPickerNumber as Number,
11
+ type BranchPickerNumberProps as NumberProps,
12
+ } from "./branchPicker/BranchPickerNumber";
13
+ export {
14
+ BranchPickerCount as Count,
15
+ type BranchPickerCountProps as CountProps,
16
+ } from "./branchPicker/BranchPickerCount";
@@ -0,0 +1,9 @@
1
+ export {
2
+ ChainOfThoughtRoot as Root,
3
+ type ChainOfThoughtRootProps as RootProps,
4
+ } from "./chainOfThought/ChainOfThoughtRoot";
5
+ export {
6
+ ChainOfThoughtAccordionTrigger as AccordionTrigger,
7
+ type ChainOfThoughtAccordionTriggerProps as AccordionTriggerProps,
8
+ } from "./chainOfThought/ChainOfThoughtAccordionTrigger";
9
+ export { ChainOfThoughtPrimitiveParts as Parts } from "@assistant-ui/core/react";
@@ -1,6 +1,5 @@
1
1
  import type { ReactNode } from "react";
2
- import { useAuiState } from "@assistant-ui/store";
3
- import { useComposerAddAttachment } from "../../primitive-hooks/useComposerAddAttachment";
2
+ import { useComposerAddAttachment } from "@assistant-ui/core/react";
4
3
  import { Pressable, type PressableProps } from "../internal/Pressable";
5
4
 
6
5
  export type ComposerAddAttachmentProps = Omit<PressableProps, "onPress"> & {
@@ -12,11 +11,10 @@ export const ComposerAddAttachment = ({
12
11
  disabled: disabledProp,
13
12
  ...pressableProps
14
13
  }: ComposerAddAttachmentProps) => {
15
- const isDisabled = useAuiState((s) => !s.composer.isEditing);
16
- const { addAttachment: _addAttachment } = useComposerAddAttachment();
14
+ const { disabled } = useComposerAddAttachment();
17
15
 
18
16
  return (
19
- <Pressable disabled={disabledProp ?? isDisabled} {...pressableProps}>
17
+ <Pressable disabled={disabledProp ?? disabled} {...pressableProps}>
20
18
  {children}
21
19
  </Pressable>
22
20
  );
@@ -1,5 +1,5 @@
1
1
  import type { ReactNode } from "react";
2
- import { useComposerCancel } from "../../primitive-hooks/useComposerCancel";
2
+ import { useComposerCancel } from "@assistant-ui/core/react";
3
3
  import { Pressable, type PressableProps } from "../internal/Pressable";
4
4
 
5
5
  export type ComposerCancelProps = Omit<PressableProps, "onPress"> & {
@@ -11,12 +11,12 @@ export const ComposerCancel = ({
11
11
  disabled,
12
12
  ...pressableProps
13
13
  }: ComposerCancelProps) => {
14
- const { cancel, canCancel } = useComposerCancel();
14
+ const { cancel, disabled: hookDisabled } = useComposerCancel();
15
15
 
16
16
  return (
17
17
  <Pressable
18
18
  onPress={cancel}
19
- disabled={disabled ?? !canCancel}
19
+ disabled={disabled ?? hookDisabled}
20
20
  {...pressableProps}
21
21
  >
22
22
  {children}
@@ -1,5 +1,5 @@
1
1
  import type { ReactNode } from "react";
2
- import { useComposerSend } from "../../primitive-hooks/useComposerSend";
2
+ import { useComposerSend } from "@assistant-ui/core/react";
3
3
  import { Pressable, type PressableProps } from "../internal/Pressable";
4
4
 
5
5
  export type ComposerSendProps = Omit<PressableProps, "onPress"> & {
@@ -11,12 +11,12 @@ export const ComposerSend = ({
11
11
  disabled,
12
12
  ...pressableProps
13
13
  }: ComposerSendProps) => {
14
- const { send, canSend } = useComposerSend();
14
+ const { send, disabled: hookDisabled } = useComposerSend();
15
15
 
16
16
  return (
17
17
  <Pressable
18
18
  onPress={send}
19
- disabled={disabled ?? !canSend}
19
+ disabled={disabled ?? hookDisabled}
20
20
  {...pressableProps}
21
21
  >
22
22
  {children}
@@ -0,0 +1,25 @@
1
+ export {
2
+ ComposerRoot as Root,
3
+ type ComposerRootProps as RootProps,
4
+ } from "./composer/ComposerRoot";
5
+ export {
6
+ ComposerAttachments as Attachments,
7
+ ComposerAttachmentByIndex as AttachmentByIndex,
8
+ } from "./composer/ComposerAttachments";
9
+ export {
10
+ ComposerInput as Input,
11
+ type ComposerInputProps as InputProps,
12
+ } from "./composer/ComposerInput";
13
+ export {
14
+ ComposerSend as Send,
15
+ type ComposerSendProps as SendProps,
16
+ } from "./composer/ComposerSend";
17
+ export {
18
+ ComposerCancel as Cancel,
19
+ type ComposerCancelProps as CancelProps,
20
+ } from "./composer/ComposerCancel";
21
+ export {
22
+ ComposerAddAttachment as AddAttachment,
23
+ type ComposerAddAttachmentProps as AddAttachmentProps,
24
+ } from "./composer/ComposerAddAttachment";
25
+ export { ComposerIf as If } from "./composer/ComposerIf";
@@ -0,0 +1,17 @@
1
+ import type { ComponentProps, ReactNode } from "react";
2
+ import { Text } from "ink";
3
+ import { useMessageError } from "@assistant-ui/core/react";
4
+
5
+ export type ErrorMessageProps = ComponentProps<typeof Text> & {
6
+ children?: ReactNode;
7
+ };
8
+
9
+ export const ErrorMessage = ({ children, ...props }: ErrorMessageProps) => {
10
+ const error = useMessageError();
11
+
12
+ if (error === undefined) return null;
13
+
14
+ return <Text {...props}>{children ?? String(error)}</Text>;
15
+ };
16
+
17
+ ErrorMessage.displayName = "ErrorPrimitive.Message";
@@ -0,0 +1,16 @@
1
+ import type { ComponentProps, ReactNode } from "react";
2
+ import { Box } from "ink";
3
+ import { useMessageError } from "@assistant-ui/core/react";
4
+
5
+ export type ErrorRootProps = ComponentProps<typeof Box> & {
6
+ children: ReactNode;
7
+ };
8
+
9
+ export const ErrorRoot = ({ children, ...props }: ErrorRootProps) => {
10
+ const error = useMessageError();
11
+ if (error === undefined) return null;
12
+
13
+ return <Box {...props}>{children}</Box>;
14
+ };
15
+
16
+ ErrorRoot.displayName = "ErrorPrimitive.Root";
@@ -0,0 +1,8 @@
1
+ export {
2
+ ErrorRoot as Root,
3
+ type ErrorRootProps as RootProps,
4
+ } from "./ErrorRoot";
5
+ export {
6
+ ErrorMessage as Message,
7
+ type ErrorMessageProps as MessageProps,
8
+ } from "./ErrorMessage";
@@ -0,0 +1,83 @@
1
+ import type { ReactElement } from "react";
2
+ import { afterEach, describe, expect, it, vi } from "vitest";
3
+ import { cleanup, render } from "ink-testing-library";
4
+ import { MessageContent } from "./MessageContent";
5
+
6
+ const mockUseAui = vi.fn();
7
+ const mockUseAuiState = vi.fn();
8
+
9
+ type UseAuiStateSelector = Parameters<
10
+ typeof import("@assistant-ui/store")["useAuiState"]
11
+ >[0];
12
+
13
+ vi.mock("@assistant-ui/store", async (importOriginal) => {
14
+ const actual = await importOriginal<typeof import("@assistant-ui/store")>();
15
+ return {
16
+ ...actual,
17
+ useAui: () => mockUseAui(),
18
+ useAuiState: (selector: UseAuiStateSelector) => mockUseAuiState(selector),
19
+ };
20
+ });
21
+
22
+ const renderFrame = async (node: ReactElement) => {
23
+ const instance = render(node);
24
+ await new Promise((resolve) => setTimeout(resolve, 0));
25
+ return instance.lastFrame() ?? "";
26
+ };
27
+
28
+ afterEach(() => {
29
+ cleanup();
30
+ vi.clearAllMocks();
31
+ });
32
+
33
+ describe("MessageContent", () => {
34
+ it("renders incomplete tool calls as errors instead of running forever", async () => {
35
+ const state = {
36
+ tools: { tools: {} },
37
+ message: {
38
+ content: [
39
+ {
40
+ type: "tool-call",
41
+ toolCallId: "tool-call-1",
42
+ toolName: "search",
43
+ args: { query: "weather" },
44
+ argsText: '{"query":"weather"}',
45
+ },
46
+ ],
47
+ parts: [
48
+ {
49
+ type: "tool-call",
50
+ toolCallId: "tool-call-1",
51
+ toolName: "search",
52
+ args: { query: "weather" },
53
+ argsText: '{"query":"weather"}',
54
+ status: {
55
+ type: "incomplete",
56
+ reason: "error",
57
+ error: "request failed",
58
+ },
59
+ },
60
+ ],
61
+ },
62
+ };
63
+
64
+ mockUseAuiState.mockImplementation((selector: UseAuiStateSelector) =>
65
+ selector(state as never),
66
+ );
67
+ mockUseAui.mockReturnValue({
68
+ message: () => ({
69
+ part: () => ({
70
+ addToolResult: vi.fn(),
71
+ resumeToolCall: vi.fn(),
72
+ }),
73
+ }),
74
+ });
75
+
76
+ const frame = await renderFrame(<MessageContent />);
77
+
78
+ expect(frame).toContain("search");
79
+ expect(frame).toContain("Error:");
80
+ expect(frame).toContain("request failed");
81
+ expect(frame).not.toContain("Running...");
82
+ });
83
+ });
@@ -3,16 +3,17 @@ import { Text } from "ink";
3
3
  import type {
4
4
  ThreadUserMessagePart,
5
5
  ThreadAssistantMessagePart,
6
- ToolCallMessagePart,
7
- DataMessagePart,
6
+ MessagePartState,
8
7
  } from "@assistant-ui/core";
9
8
  import { useAui, useAuiState } from "@assistant-ui/store";
10
9
  import type {
11
10
  ToolCallMessagePartProps,
12
11
  DataMessagePartProps,
13
- } from "../../types";
12
+ } from "@assistant-ui/core/react";
13
+ import { ToolFallback } from "../toolCall/ToolFallback";
14
14
 
15
15
  type MessageContentPart = ThreadUserMessagePart | ThreadAssistantMessagePart;
16
+ type MessageContentStatePart = MessagePartState;
16
17
 
17
18
  export type MessageContentProps = {
18
19
  renderText?: (props: {
@@ -59,9 +60,12 @@ const ToolUIDisplay = ({
59
60
  index,
60
61
  }: {
61
62
  Fallback:
62
- | ((props: { part: ToolCallMessagePart; index: number }) => ReactElement)
63
+ | ((props: {
64
+ part: Extract<MessageContentPart, { type: "tool-call" }>;
65
+ index: number;
66
+ }) => ReactElement)
63
67
  | undefined;
64
- part: ToolCallMessagePart;
68
+ part: Extract<MessageContentStatePart, { type: "tool-call" }>;
65
69
  index: number;
66
70
  }) => {
67
71
  const aui = useAui();
@@ -75,18 +79,17 @@ const ToolUIDisplay = ({
75
79
  () => aui.message().part({ index }),
76
80
  [aui, index],
77
81
  );
82
+ const toolProps = {
83
+ ...(part as ToolCallMessagePartProps),
84
+ addResult: partMethods.addToolResult,
85
+ resume: partMethods.resumeToolCall,
86
+ };
78
87
 
79
88
  if (Render) {
80
- return (
81
- <Render
82
- {...(part as ToolCallMessagePartProps)}
83
- addResult={partMethods.addToolResult}
84
- resume={partMethods.resumeToolCall}
85
- />
86
- );
89
+ return <Render {...toolProps} />;
87
90
  }
88
91
  if (Fallback) return <Fallback part={part} index={index} />;
89
- return null;
92
+ return <ToolFallback {...toolProps} />;
90
93
  };
91
94
 
92
95
  const DataUIDisplay = ({
@@ -95,9 +98,12 @@ const DataUIDisplay = ({
95
98
  index,
96
99
  }: {
97
100
  Fallback:
98
- | ((props: { part: DataMessagePart; index: number }) => ReactElement)
101
+ | ((props: {
102
+ part: Extract<MessageContentPart, { type: "data" }>;
103
+ index: number;
104
+ }) => ReactElement)
99
105
  | undefined;
100
- part: DataMessagePart;
106
+ part: Extract<MessageContentStatePart, { type: "data" }>;
101
107
  index: number;
102
108
  }) => {
103
109
  const Render = useAuiState((s) => {
@@ -119,7 +125,7 @@ export const MessageContent = ({
119
125
  renderFile,
120
126
  renderData,
121
127
  }: MessageContentProps) => {
122
- const content = useAuiState((s) => s.message.content);
128
+ const content = useAuiState((s) => s.message.parts);
123
129
 
124
130
  return (
125
131
  <>