@assistant-ui/react-ink 0.0.1 → 0.0.4

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 (244) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +86 -0
  3. package/dist/context/AssistantContext.d.ts +1 -7
  4. package/dist/context/AssistantContext.d.ts.map +1 -1
  5. package/dist/context/AssistantContext.js +1 -15
  6. package/dist/context/AssistantContext.js.map +1 -1
  7. package/dist/context/index.d.ts +1 -1
  8. package/dist/context/index.d.ts.map +1 -1
  9. package/dist/context/index.js +1 -1
  10. package/dist/context/index.js.map +1 -1
  11. package/dist/index.d.ts +13 -14
  12. package/dist/index.d.ts.map +1 -1
  13. package/dist/index.js +13 -16
  14. package/dist/index.js.map +1 -1
  15. package/dist/primitives/actionBar/ActionBarCopy.d.ts +1 -1
  16. package/dist/primitives/actionBar/ActionBarCopy.d.ts.map +1 -1
  17. package/dist/primitives/actionBar/ActionBarCopy.js +1 -1
  18. package/dist/primitives/actionBar/ActionBarCopy.js.map +1 -1
  19. package/dist/primitives/actionBar/ActionBarEdit.js +1 -1
  20. package/dist/primitives/actionBar/ActionBarEdit.js.map +1 -1
  21. package/dist/primitives/actionBar/ActionBarFeedbackNegative.js +1 -1
  22. package/dist/primitives/actionBar/ActionBarFeedbackNegative.js.map +1 -1
  23. package/dist/primitives/actionBar/ActionBarFeedbackPositive.js +1 -1
  24. package/dist/primitives/actionBar/ActionBarFeedbackPositive.js.map +1 -1
  25. package/dist/primitives/actionBar/ActionBarReload.js +1 -1
  26. package/dist/primitives/actionBar/ActionBarReload.js.map +1 -1
  27. package/dist/primitives/actionBar/index.d.ts +5 -5
  28. package/dist/primitives/actionBar/index.d.ts.map +1 -1
  29. package/dist/primitives/actionBar/index.js +5 -5
  30. package/dist/primitives/actionBar/index.js.map +1 -1
  31. package/dist/primitives/attachment/index.d.ts +4 -4
  32. package/dist/primitives/attachment/index.d.ts.map +1 -1
  33. package/dist/primitives/attachment/index.js +4 -4
  34. package/dist/primitives/attachment/index.js.map +1 -1
  35. package/dist/primitives/branchPicker/index.d.ts +4 -4
  36. package/dist/primitives/branchPicker/index.d.ts.map +1 -1
  37. package/dist/primitives/branchPicker/index.js +4 -4
  38. package/dist/primitives/branchPicker/index.js.map +1 -1
  39. package/dist/primitives/chainOfThought/index.d.ts +3 -3
  40. package/dist/primitives/chainOfThought/index.d.ts.map +1 -1
  41. package/dist/primitives/chainOfThought/index.js +3 -3
  42. package/dist/primitives/chainOfThought/index.js.map +1 -1
  43. package/dist/primitives/composer/ComposerAddAttachment.d.ts.map +1 -1
  44. package/dist/primitives/composer/ComposerAddAttachment.js +3 -5
  45. package/dist/primitives/composer/ComposerAddAttachment.js.map +1 -1
  46. package/dist/primitives/composer/ComposerCancel.js +3 -3
  47. package/dist/primitives/composer/ComposerCancel.js.map +1 -1
  48. package/dist/primitives/composer/ComposerSend.js +3 -3
  49. package/dist/primitives/composer/ComposerSend.js.map +1 -1
  50. package/dist/primitives/composer/index.d.ts +7 -10
  51. package/dist/primitives/composer/index.d.ts.map +1 -1
  52. package/dist/primitives/composer/index.js +7 -10
  53. package/dist/primitives/composer/index.js.map +1 -1
  54. package/dist/primitives/message/MessageContent.d.ts.map +1 -1
  55. package/dist/primitives/message/MessageContent.js +9 -3
  56. package/dist/primitives/message/MessageContent.js.map +1 -1
  57. package/dist/primitives/message/index.d.ts +5 -5
  58. package/dist/primitives/message/index.d.ts.map +1 -1
  59. package/dist/primitives/message/index.js +5 -5
  60. package/dist/primitives/message/index.js.map +1 -1
  61. package/dist/primitives/suggestion/index.d.ts +3 -3
  62. package/dist/primitives/suggestion/index.d.ts.map +1 -1
  63. package/dist/primitives/suggestion/index.js +3 -3
  64. package/dist/primitives/suggestion/index.js.map +1 -1
  65. package/dist/primitives/thread/ThreadEmpty.js +1 -1
  66. package/dist/primitives/thread/ThreadEmpty.js.map +1 -1
  67. package/dist/primitives/thread/ThreadMessages.d.ts +23 -7
  68. package/dist/primitives/thread/ThreadMessages.d.ts.map +1 -1
  69. package/dist/primitives/thread/ThreadMessages.js +67 -13
  70. package/dist/primitives/thread/ThreadMessages.js.map +1 -1
  71. package/dist/primitives/thread/index.d.ts +7 -7
  72. package/dist/primitives/thread/index.d.ts.map +1 -1
  73. package/dist/primitives/thread/index.js +7 -7
  74. package/dist/primitives/thread/index.js.map +1 -1
  75. package/dist/primitives/threadList/index.d.ts +3 -3
  76. package/dist/primitives/threadList/index.d.ts.map +1 -1
  77. package/dist/primitives/threadList/index.js +3 -3
  78. package/dist/primitives/threadList/index.js.map +1 -1
  79. package/dist/primitives/threadListItem/index.d.ts +6 -6
  80. package/dist/primitives/threadListItem/index.d.ts.map +1 -1
  81. package/dist/primitives/threadListItem/index.js +6 -6
  82. package/dist/primitives/threadListItem/index.js.map +1 -1
  83. package/dist/primitives/toolCall/ToolFallback.d.ts +33 -0
  84. package/dist/primitives/toolCall/ToolFallback.d.ts.map +1 -0
  85. package/dist/primitives/toolCall/ToolFallback.js +103 -0
  86. package/dist/primitives/toolCall/ToolFallback.js.map +1 -0
  87. package/dist/primitives/toolCall/index.d.ts +2 -0
  88. package/dist/primitives/toolCall/index.d.ts.map +1 -0
  89. package/dist/primitives/toolCall/index.js +2 -0
  90. package/dist/primitives/toolCall/index.js.map +1 -0
  91. package/dist/runtimes/RemoteThreadListHookInstanceManager.d.ts +1 -95
  92. package/dist/runtimes/RemoteThreadListHookInstanceManager.d.ts.map +1 -1
  93. package/dist/runtimes/RemoteThreadListHookInstanceManager.js +1 -109
  94. package/dist/runtimes/RemoteThreadListHookInstanceManager.js.map +1 -1
  95. package/dist/runtimes/RemoteThreadListThreadListRuntimeCore.d.ts +1 -112
  96. package/dist/runtimes/RemoteThreadListThreadListRuntimeCore.d.ts.map +1 -1
  97. package/dist/runtimes/RemoteThreadListThreadListRuntimeCore.js +1 -439
  98. package/dist/runtimes/RemoteThreadListThreadListRuntimeCore.js.map +1 -1
  99. package/dist/runtimes/useLocalRuntime.d.ts +1 -17
  100. package/dist/runtimes/useLocalRuntime.d.ts.map +1 -1
  101. package/dist/runtimes/useLocalRuntime.js +1 -61
  102. package/dist/runtimes/useLocalRuntime.js.map +1 -1
  103. package/dist/runtimes/useRemoteThreadListRuntime.d.ts +1 -3
  104. package/dist/runtimes/useRemoteThreadListRuntime.d.ts.map +1 -1
  105. package/dist/runtimes/useRemoteThreadListRuntime.js +1 -46
  106. package/dist/runtimes/useRemoteThreadListRuntime.js.map +1 -1
  107. package/package.json +13 -11
  108. package/src/context/AssistantContext.tsx +4 -31
  109. package/src/context/index.ts +4 -1
  110. package/src/index.ts +13 -39
  111. package/src/primitives/actionBar/ActionBarCopy.tsx +1 -1
  112. package/src/primitives/actionBar/ActionBarEdit.tsx +1 -1
  113. package/src/primitives/actionBar/ActionBarFeedbackNegative.tsx +1 -1
  114. package/src/primitives/actionBar/ActionBarFeedbackPositive.tsx +1 -1
  115. package/src/primitives/actionBar/ActionBarReload.tsx +1 -1
  116. package/src/primitives/actionBar/index.ts +16 -7
  117. package/src/primitives/attachment/index.ts +14 -5
  118. package/src/primitives/branchPicker/index.ts +8 -8
  119. package/src/primitives/chainOfThought/index.ts +5 -5
  120. package/src/primitives/composer/ComposerAddAttachment.tsx +3 -5
  121. package/src/primitives/composer/ComposerCancel.tsx +3 -3
  122. package/src/primitives/composer/ComposerSend.tsx +3 -3
  123. package/src/primitives/composer/index.ts +19 -19
  124. package/src/primitives/message/MessageContent.test.tsx +83 -0
  125. package/src/primitives/message/MessageContent.tsx +21 -15
  126. package/src/primitives/message/index.ts +13 -7
  127. package/src/primitives/suggestion/index.ts +6 -6
  128. package/src/primitives/thread/ThreadEmpty.tsx +1 -1
  129. package/src/primitives/thread/ThreadMessages.tsx +122 -27
  130. package/src/primitives/thread/index.ts +17 -11
  131. package/src/primitives/threadList/index.ts +12 -3
  132. package/src/primitives/threadListItem/index.ts +11 -11
  133. package/src/primitives/toolCall/ToolFallback.test.tsx +40 -0
  134. package/src/primitives/toolCall/ToolFallback.tsx +227 -0
  135. package/src/primitives/toolCall/index.ts +5 -0
  136. package/src/runtimes/RemoteThreadListHookInstanceManager.tsx +1 -180
  137. package/src/runtimes/RemoteThreadListThreadListRuntimeCore.tsx +1 -538
  138. package/src/runtimes/useLocalRuntime.ts +4 -105
  139. package/src/runtimes/useRemoteThreadListRuntime.ts +1 -80
  140. package/dist/adapters/LocalStorageThreadListAdapter.d.ts +0 -15
  141. package/dist/adapters/LocalStorageThreadListAdapter.d.ts.map +0 -1
  142. package/dist/adapters/LocalStorageThreadListAdapter.js +0 -154
  143. package/dist/adapters/LocalStorageThreadListAdapter.js.map +0 -1
  144. package/dist/adapters/TitleGenerationAdapter.d.ts +0 -6
  145. package/dist/adapters/TitleGenerationAdapter.d.ts.map +0 -1
  146. package/dist/adapters/TitleGenerationAdapter.js +0 -15
  147. package/dist/adapters/TitleGenerationAdapter.js.map +0 -1
  148. package/dist/adapters/index.d.ts +0 -3
  149. package/dist/adapters/index.d.ts.map +0 -1
  150. package/dist/adapters/index.js +0 -3
  151. package/dist/adapters/index.js.map +0 -1
  152. package/dist/primitive-hooks/index.d.ts +0 -15
  153. package/dist/primitive-hooks/index.d.ts.map +0 -1
  154. package/dist/primitive-hooks/index.js +0 -15
  155. package/dist/primitive-hooks/index.js.map +0 -1
  156. package/dist/primitive-hooks/useActionBarCopy.d.ts +0 -10
  157. package/dist/primitive-hooks/useActionBarCopy.d.ts.map +0 -1
  158. package/dist/primitive-hooks/useActionBarCopy.js +0 -26
  159. package/dist/primitive-hooks/useActionBarCopy.js.map +0 -1
  160. package/dist/primitive-hooks/useActionBarEdit.d.ts +0 -5
  161. package/dist/primitive-hooks/useActionBarEdit.d.ts.map +0 -1
  162. package/dist/primitive-hooks/useActionBarEdit.js +0 -11
  163. package/dist/primitive-hooks/useActionBarEdit.js.map +0 -1
  164. package/dist/primitive-hooks/useActionBarFeedback.d.ts +0 -9
  165. package/dist/primitive-hooks/useActionBarFeedback.d.ts.map +0 -1
  166. package/dist/primitive-hooks/useActionBarFeedback.js +0 -19
  167. package/dist/primitive-hooks/useActionBarFeedback.js.map +0 -1
  168. package/dist/primitive-hooks/useActionBarReload.d.ts +0 -5
  169. package/dist/primitive-hooks/useActionBarReload.d.ts.map +0 -1
  170. package/dist/primitive-hooks/useActionBarReload.js +0 -13
  171. package/dist/primitive-hooks/useActionBarReload.js.map +0 -1
  172. package/dist/primitive-hooks/useComposerAddAttachment.d.ts +0 -5
  173. package/dist/primitive-hooks/useComposerAddAttachment.d.ts.map +0 -1
  174. package/dist/primitive-hooks/useComposerAddAttachment.js +0 -10
  175. package/dist/primitive-hooks/useComposerAddAttachment.js.map +0 -1
  176. package/dist/primitive-hooks/useComposerCancel.d.ts +0 -5
  177. package/dist/primitive-hooks/useComposerCancel.d.ts.map +0 -1
  178. package/dist/primitive-hooks/useComposerCancel.js +0 -11
  179. package/dist/primitive-hooks/useComposerCancel.js.map +0 -1
  180. package/dist/primitive-hooks/useComposerSend.d.ts +0 -5
  181. package/dist/primitive-hooks/useComposerSend.d.ts.map +0 -1
  182. package/dist/primitive-hooks/useComposerSend.js +0 -11
  183. package/dist/primitive-hooks/useComposerSend.js.map +0 -1
  184. package/dist/primitive-hooks/useEditComposerCancel.d.ts +0 -4
  185. package/dist/primitive-hooks/useEditComposerCancel.d.ts.map +0 -1
  186. package/dist/primitive-hooks/useEditComposerCancel.js +0 -10
  187. package/dist/primitive-hooks/useEditComposerCancel.js.map +0 -1
  188. package/dist/primitive-hooks/useEditComposerSend.d.ts +0 -5
  189. package/dist/primitive-hooks/useEditComposerSend.d.ts.map +0 -1
  190. package/dist/primitive-hooks/useEditComposerSend.js +0 -11
  191. package/dist/primitive-hooks/useEditComposerSend.js.map +0 -1
  192. package/dist/primitive-hooks/useMessageBranching.d.ts +0 -7
  193. package/dist/primitive-hooks/useMessageBranching.d.ts.map +0 -1
  194. package/dist/primitive-hooks/useMessageBranching.js +0 -15
  195. package/dist/primitive-hooks/useMessageBranching.js.map +0 -1
  196. package/dist/primitive-hooks/useMessageReload.d.ts +0 -5
  197. package/dist/primitive-hooks/useMessageReload.d.ts.map +0 -1
  198. package/dist/primitive-hooks/useMessageReload.js +0 -11
  199. package/dist/primitive-hooks/useMessageReload.js.map +0 -1
  200. package/dist/primitive-hooks/useThreadIsEmpty.d.ts +0 -2
  201. package/dist/primitive-hooks/useThreadIsEmpty.d.ts.map +0 -1
  202. package/dist/primitive-hooks/useThreadIsEmpty.js +0 -5
  203. package/dist/primitive-hooks/useThreadIsEmpty.js.map +0 -1
  204. package/dist/primitive-hooks/useThreadIsRunning.d.ts +0 -2
  205. package/dist/primitive-hooks/useThreadIsRunning.d.ts.map +0 -1
  206. package/dist/primitive-hooks/useThreadIsRunning.js +0 -5
  207. package/dist/primitive-hooks/useThreadIsRunning.js.map +0 -1
  208. package/dist/primitive-hooks/useThreadMessages.d.ts +0 -3
  209. package/dist/primitive-hooks/useThreadMessages.d.ts.map +0 -1
  210. package/dist/primitive-hooks/useThreadMessages.js +0 -5
  211. package/dist/primitive-hooks/useThreadMessages.js.map +0 -1
  212. package/dist/primitives/composer/EditComposerCancel.d.ts +0 -7
  213. package/dist/primitives/composer/EditComposerCancel.d.ts.map +0 -1
  214. package/dist/primitives/composer/EditComposerCancel.js +0 -8
  215. package/dist/primitives/composer/EditComposerCancel.js.map +0 -1
  216. package/dist/primitives/composer/EditComposerInput.d.ts +0 -10
  217. package/dist/primitives/composer/EditComposerInput.d.ts.map +0 -1
  218. package/dist/primitives/composer/EditComposerInput.js +0 -19
  219. package/dist/primitives/composer/EditComposerInput.js.map +0 -1
  220. package/dist/primitives/composer/EditComposerSend.d.ts +0 -7
  221. package/dist/primitives/composer/EditComposerSend.d.ts.map +0 -1
  222. package/dist/primitives/composer/EditComposerSend.js +0 -8
  223. package/dist/primitives/composer/EditComposerSend.js.map +0 -1
  224. package/src/adapters/LocalStorageThreadListAdapter.tsx +0 -227
  225. package/src/adapters/TitleGenerationAdapter.ts +0 -20
  226. package/src/adapters/index.ts +0 -5
  227. package/src/primitive-hooks/index.ts +0 -20
  228. package/src/primitive-hooks/useActionBarCopy.ts +0 -38
  229. package/src/primitive-hooks/useActionBarEdit.ts +0 -13
  230. package/src/primitive-hooks/useActionBarFeedback.ts +0 -28
  231. package/src/primitive-hooks/useActionBarReload.ts +0 -18
  232. package/src/primitive-hooks/useComposerAddAttachment.ts +0 -16
  233. package/src/primitive-hooks/useComposerCancel.ts +0 -13
  234. package/src/primitive-hooks/useComposerSend.ts +0 -13
  235. package/src/primitive-hooks/useEditComposerCancel.ts +0 -12
  236. package/src/primitive-hooks/useEditComposerSend.ts +0 -13
  237. package/src/primitive-hooks/useMessageBranching.ts +0 -18
  238. package/src/primitive-hooks/useMessageReload.ts +0 -13
  239. package/src/primitive-hooks/useThreadIsEmpty.ts +0 -5
  240. package/src/primitive-hooks/useThreadIsRunning.ts +0 -5
  241. package/src/primitive-hooks/useThreadMessages.ts +0 -6
  242. package/src/primitives/composer/EditComposerCancel.tsx +0 -20
  243. package/src/primitives/composer/EditComposerInput.tsx +0 -40
  244. package/src/primitives/composer/EditComposerSend.tsx +0 -25
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@assistant-ui/react-ink",
3
- "version": "0.0.1",
3
+ "version": "0.0.4",
4
4
  "description": "React Ink (terminal UI) bindings for assistant-ui",
5
5
  "keywords": [
6
6
  "assistant",
@@ -33,16 +33,12 @@
33
33
  "README.md"
34
34
  ],
35
35
  "sideEffects": false,
36
- "scripts": {
37
- "build": "aui-build",
38
- "test": "vitest run",
39
- "test:watch": "vitest"
40
- },
41
36
  "dependencies": {
42
- "@assistant-ui/core": "^0.1.2",
37
+ "@assistant-ui/core": "^0.1.5",
43
38
  "@assistant-ui/store": "^0.2.2",
44
39
  "@assistant-ui/tap": "^0.5.2",
45
- "assistant-stream": "^0.3.4",
40
+ "assistant-stream": "^0.3.5",
41
+ "ink-spinner": "^5.0.0",
46
42
  "zustand": "^5.0.11"
47
43
  },
48
44
  "peerDependencies": {
@@ -56,11 +52,12 @@
56
52
  }
57
53
  },
58
54
  "devDependencies": {
59
- "@assistant-ui/x-buildutils": "workspace:*",
60
55
  "@types/react": "^19.2.14",
61
56
  "ink": "^5.2.0",
57
+ "ink-testing-library": "^4.0.0",
62
58
  "react": "18.3.1",
63
- "vitest": "^4.0.18"
59
+ "vitest": "^4.0.18",
60
+ "@assistant-ui/x-buildutils": "0.0.2"
64
61
  },
65
62
  "publishConfig": {
66
63
  "access": "public",
@@ -74,5 +71,10 @@
74
71
  },
75
72
  "bugs": {
76
73
  "url": "https://github.com/assistant-ui/assistant-ui/issues"
74
+ },
75
+ "scripts": {
76
+ "build": "aui-build",
77
+ "test": "vitest run",
78
+ "test:watch": "vitest"
77
79
  }
78
- }
80
+ }
@@ -1,31 +1,4 @@
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 {
2
+ AssistantRuntimeProvider,
3
+ useAssistantRuntime,
4
+ } from "@assistant-ui/core/react";
@@ -1 +1,4 @@
1
- export { AssistantProvider, useAssistantRuntime } from "./AssistantContext";
1
+ export {
2
+ AssistantRuntimeProvider,
3
+ useAssistantRuntime,
4
+ } from "./AssistantContext";
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 {
@@ -92,27 +92,7 @@ export {
92
92
  } from "@assistant-ui/store";
93
93
 
94
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";
95
+ export { AssistantRuntimeProvider, useAssistantRuntime } from "./context";
116
96
 
117
97
  // Runtime
118
98
  export {
@@ -122,16 +102,17 @@ export {
122
102
  } from "./runtimes";
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";
135
116
 
136
117
  // Re-export shared providers from core/react
137
118
  export {
@@ -148,10 +129,3 @@ export {
148
129
  export * from "./model-context";
149
130
  export * from "./client";
150
131
  export * from "./types";
151
-
152
- // Adapters
153
- export {
154
- type TitleGenerationAdapter,
155
- createSimpleTitleAdapter,
156
- createLocalStorageAdapter,
157
- } from "./adapters";
@@ -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"> & {
@@ -1,11 +1,20 @@
1
- export { ActionBarCopy, type ActionBarCopyProps } from "./ActionBarCopy";
2
- export { ActionBarEdit, type ActionBarEditProps } from "./ActionBarEdit";
3
- export { ActionBarReload, type ActionBarReloadProps } from "./ActionBarReload";
4
1
  export {
5
- ActionBarFeedbackPositive,
6
- type ActionBarFeedbackPositiveProps,
2
+ ActionBarCopy as Copy,
3
+ type ActionBarCopyProps as CopyProps,
4
+ } from "./ActionBarCopy";
5
+ export {
6
+ ActionBarEdit as Edit,
7
+ type ActionBarEditProps as EditProps,
8
+ } from "./ActionBarEdit";
9
+ export {
10
+ ActionBarReload as Reload,
11
+ type ActionBarReloadProps as ReloadProps,
12
+ } from "./ActionBarReload";
13
+ export {
14
+ ActionBarFeedbackPositive as FeedbackPositive,
15
+ type ActionBarFeedbackPositiveProps as FeedbackPositiveProps,
7
16
  } from "./ActionBarFeedbackPositive";
8
17
  export {
9
- ActionBarFeedbackNegative,
10
- type ActionBarFeedbackNegativeProps,
18
+ ActionBarFeedbackNegative as FeedbackNegative,
19
+ type ActionBarFeedbackNegativeProps as FeedbackNegativeProps,
11
20
  } from "./ActionBarFeedbackNegative";
@@ -1,7 +1,16 @@
1
- export { AttachmentRoot, type AttachmentRootProps } from "./AttachmentRoot";
2
- export { AttachmentName, type AttachmentNameProps } from "./AttachmentName";
3
- export { AttachmentThumb, type AttachmentThumbProps } from "./AttachmentThumb";
4
1
  export {
5
- AttachmentRemove,
6
- type AttachmentRemoveProps,
2
+ AttachmentRoot as Root,
3
+ type AttachmentRootProps as RootProps,
4
+ } from "./AttachmentRoot";
5
+ export {
6
+ AttachmentName as Name,
7
+ type AttachmentNameProps as NameProps,
8
+ } from "./AttachmentName";
9
+ export {
10
+ AttachmentThumb as Thumb,
11
+ type AttachmentThumbProps as ThumbProps,
12
+ } from "./AttachmentThumb";
13
+ export {
14
+ AttachmentRemove as Remove,
15
+ type AttachmentRemoveProps as RemoveProps,
7
16
  } from "./AttachmentRemove";
@@ -1,16 +1,16 @@
1
1
  export {
2
- BranchPickerPrevious,
3
- type BranchPickerPreviousProps,
2
+ BranchPickerPrevious as Previous,
3
+ type BranchPickerPreviousProps as PreviousProps,
4
4
  } from "./BranchPickerPrevious";
5
5
  export {
6
- BranchPickerNext,
7
- type BranchPickerNextProps,
6
+ BranchPickerNext as Next,
7
+ type BranchPickerNextProps as NextProps,
8
8
  } from "./BranchPickerNext";
9
9
  export {
10
- BranchPickerNumber,
11
- type BranchPickerNumberProps,
10
+ BranchPickerNumber as Number,
11
+ type BranchPickerNumberProps as NumberProps,
12
12
  } from "./BranchPickerNumber";
13
13
  export {
14
- BranchPickerCount,
15
- type BranchPickerCountProps,
14
+ BranchPickerCount as Count,
15
+ type BranchPickerCountProps as CountProps,
16
16
  } from "./BranchPickerCount";
@@ -1,9 +1,9 @@
1
1
  export {
2
- ChainOfThoughtRoot,
3
- type ChainOfThoughtRootProps,
2
+ ChainOfThoughtRoot as Root,
3
+ type ChainOfThoughtRootProps as RootProps,
4
4
  } from "./ChainOfThoughtRoot";
5
5
  export {
6
- ChainOfThoughtAccordionTrigger,
7
- type ChainOfThoughtAccordionTriggerProps,
6
+ ChainOfThoughtAccordionTrigger as AccordionTrigger,
7
+ type ChainOfThoughtAccordionTriggerProps as AccordionTriggerProps,
8
8
  } from "./ChainOfThoughtAccordionTrigger";
9
- export { ChainOfThoughtPrimitiveParts } from "@assistant-ui/core/react";
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}
@@ -1,25 +1,25 @@
1
- export { ComposerRoot, type ComposerRootProps } from "./ComposerRoot";
2
1
  export {
3
- ComposerAttachments,
4
- ComposerAttachmentByIndex,
2
+ ComposerRoot as Root,
3
+ type ComposerRootProps as RootProps,
4
+ } from "./ComposerRoot";
5
+ export {
6
+ ComposerAttachments as Attachments,
7
+ ComposerAttachmentByIndex as AttachmentByIndex,
5
8
  } from "./ComposerAttachments";
6
- export { ComposerInput, type ComposerInputProps } from "./ComposerInput";
7
- export { ComposerSend, type ComposerSendProps } from "./ComposerSend";
8
- export { ComposerCancel, type ComposerCancelProps } from "./ComposerCancel";
9
9
  export {
10
- ComposerAddAttachment,
11
- type ComposerAddAttachmentProps,
12
- } from "./ComposerAddAttachment";
13
- export { ComposerIf } from "./ComposerIf";
10
+ ComposerInput as Input,
11
+ type ComposerInputProps as InputProps,
12
+ } from "./ComposerInput";
14
13
  export {
15
- EditComposerInput,
16
- type EditComposerInputProps,
17
- } from "./EditComposerInput";
14
+ ComposerSend as Send,
15
+ type ComposerSendProps as SendProps,
16
+ } from "./ComposerSend";
18
17
  export {
19
- EditComposerSend,
20
- type EditComposerSendProps,
21
- } from "./EditComposerSend";
18
+ ComposerCancel as Cancel,
19
+ type ComposerCancelProps as CancelProps,
20
+ } from "./ComposerCancel";
22
21
  export {
23
- EditComposerCancel,
24
- type EditComposerCancelProps,
25
- } from "./EditComposerCancel";
22
+ ComposerAddAttachment as AddAttachment,
23
+ type ComposerAddAttachmentProps as AddAttachmentProps,
24
+ } from "./ComposerAddAttachment";
25
+ export { ComposerIf as If } from "./ComposerIf";
@@ -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
12
  } from "../../types";
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
  <>
@@ -1,11 +1,17 @@
1
- export { MessageRoot, type MessageRootProps } from "./MessageRoot";
2
- export { MessageContent, type MessageContentProps } from "./MessageContent";
3
1
  export {
4
- MessagePrimitiveParts,
5
- MessagePrimitivePartByIndex,
2
+ MessageRoot as Root,
3
+ type MessageRootProps as RootProps,
4
+ } from "./MessageRoot";
5
+ export {
6
+ MessageContent as Content,
7
+ type MessageContentProps as ContentProps,
8
+ } from "./MessageContent";
9
+ export {
10
+ MessagePrimitiveParts as Parts,
11
+ MessagePrimitivePartByIndex as PartByIndex,
6
12
  } from "./MessageParts";
7
- export { MessageIf, type MessageIfProps } from "./MessageIf";
13
+ export { MessageIf as If, type MessageIfProps as IfProps } from "./MessageIf";
8
14
  export {
9
- MessageAttachments,
10
- MessageAttachmentByIndex,
15
+ MessageAttachments as Attachments,
16
+ MessageAttachmentByIndex as AttachmentByIndex,
11
17
  } from "./MessageAttachments";
@@ -1,12 +1,12 @@
1
1
  export {
2
- SuggestionTitle,
3
- type SuggestionTitleProps,
2
+ SuggestionTitle as Title,
3
+ type SuggestionTitleProps as TitleProps,
4
4
  } from "./SuggestionTitle";
5
5
  export {
6
- SuggestionDescription,
7
- type SuggestionDescriptionProps,
6
+ SuggestionDescription as Description,
7
+ type SuggestionDescriptionProps as DescriptionProps,
8
8
  } from "./SuggestionDescription";
9
9
  export {
10
- SuggestionTrigger,
11
- type SuggestionTriggerProps,
10
+ SuggestionTrigger as Trigger,
11
+ type SuggestionTriggerProps as TriggerProps,
12
12
  } from "./SuggestionTrigger";
@@ -1,5 +1,5 @@
1
1
  import type { ReactNode } from "react";
2
- import { useThreadIsEmpty } from "../../primitive-hooks/useThreadIsEmpty";
2
+ import { useThreadIsEmpty } from "@assistant-ui/core/react";
3
3
 
4
4
  export type ThreadEmptyProps = {
5
5
  children: ReactNode;