@assistant-ui/react-ink 0.0.4 → 0.0.7

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 (271) hide show
  1. package/README.md +1 -0
  2. package/dist/context/AssistantContext.d.ts +1 -1
  3. package/dist/context/AssistantContext.d.ts.map +1 -1
  4. package/dist/context/AssistantContext.js +1 -1
  5. package/dist/context/AssistantContext.js.map +1 -1
  6. package/dist/index.d.ts +28 -16
  7. package/dist/index.d.ts.map +1 -1
  8. package/dist/index.js +26 -17
  9. package/dist/index.js.map +1 -1
  10. package/dist/primitives/{actionBar/index.d.ts → actionBar.d.ts} +6 -6
  11. package/dist/primitives/actionBar.d.ts.map +1 -0
  12. package/dist/primitives/actionBar.js +6 -0
  13. package/dist/primitives/actionBar.js.map +1 -0
  14. package/dist/primitives/{attachment/index.d.ts → attachment.d.ts} +5 -5
  15. package/dist/primitives/attachment.d.ts.map +1 -0
  16. package/dist/primitives/attachment.js +5 -0
  17. package/dist/primitives/attachment.js.map +1 -0
  18. package/dist/primitives/branchPicker/BranchPickerNext.d.ts.map +1 -1
  19. package/dist/primitives/branchPicker/BranchPickerNext.js +3 -15
  20. package/dist/primitives/branchPicker/BranchPickerNext.js.map +1 -1
  21. package/dist/primitives/branchPicker/BranchPickerPrevious.d.ts.map +1 -1
  22. package/dist/primitives/branchPicker/BranchPickerPrevious.js +3 -15
  23. package/dist/primitives/branchPicker/BranchPickerPrevious.js.map +1 -1
  24. package/dist/primitives/branchPicker.d.ts +5 -0
  25. package/dist/primitives/branchPicker.d.ts.map +1 -0
  26. package/dist/primitives/branchPicker.js +5 -0
  27. package/dist/primitives/branchPicker.js.map +1 -0
  28. package/dist/primitives/{chainOfThought/index.d.ts → chainOfThought.d.ts} +3 -3
  29. package/dist/primitives/chainOfThought.d.ts.map +1 -0
  30. package/dist/primitives/chainOfThought.js +4 -0
  31. package/dist/primitives/chainOfThought.js.map +1 -0
  32. package/dist/primitives/composer/ComposerSend.js +1 -1
  33. package/dist/primitives/composer/ComposerSend.js.map +1 -1
  34. package/dist/primitives/composer.d.ts +8 -0
  35. package/dist/primitives/composer.d.ts.map +1 -0
  36. package/dist/primitives/composer.js +8 -0
  37. package/dist/primitives/composer.js.map +1 -0
  38. package/dist/primitives/diff/DiffContent.d.ts +22 -0
  39. package/dist/primitives/diff/DiffContent.d.ts.map +1 -0
  40. package/dist/primitives/diff/DiffContent.js +40 -0
  41. package/dist/primitives/diff/DiffContent.js.map +1 -0
  42. package/dist/primitives/diff/DiffContext.d.ts +8 -0
  43. package/dist/primitives/diff/DiffContext.d.ts.map +1 -0
  44. package/dist/primitives/diff/DiffContext.js +11 -0
  45. package/dist/primitives/diff/DiffContext.js.map +1 -0
  46. package/dist/primitives/diff/DiffHeader.d.ts +10 -0
  47. package/dist/primitives/diff/DiffHeader.d.ts.map +1 -0
  48. package/dist/primitives/diff/DiffHeader.js +18 -0
  49. package/dist/primitives/diff/DiffHeader.js.map +1 -0
  50. package/dist/primitives/diff/DiffLine.d.ts +13 -0
  51. package/dist/primitives/diff/DiffLine.d.ts.map +1 -0
  52. package/dist/primitives/diff/DiffLine.js +20 -0
  53. package/dist/primitives/diff/DiffLine.js.map +1 -0
  54. package/dist/primitives/diff/DiffRoot.d.ts +12 -0
  55. package/dist/primitives/diff/DiffRoot.d.ts.map +1 -0
  56. package/dist/primitives/diff/DiffRoot.js +8 -0
  57. package/dist/primitives/diff/DiffRoot.js.map +1 -0
  58. package/dist/primitives/diff/DiffStats.d.ts +10 -0
  59. package/dist/primitives/diff/DiffStats.d.ts.map +1 -0
  60. package/dist/primitives/diff/DiffStats.js +12 -0
  61. package/dist/primitives/diff/DiffStats.js.map +1 -0
  62. package/dist/primitives/diff/DiffView.d.ts +13 -0
  63. package/dist/primitives/diff/DiffView.d.ts.map +1 -0
  64. package/dist/primitives/diff/DiffView.js +76 -0
  65. package/dist/primitives/diff/DiffView.js.map +1 -0
  66. package/dist/primitives/diff/diff-utils.d.ts +9 -0
  67. package/dist/primitives/diff/diff-utils.d.ts.map +1 -0
  68. package/dist/primitives/diff/diff-utils.js +125 -0
  69. package/dist/primitives/diff/diff-utils.js.map +1 -0
  70. package/dist/primitives/diff/index.d.ts +7 -0
  71. package/dist/primitives/diff/index.d.ts.map +1 -0
  72. package/dist/primitives/diff/index.js +6 -0
  73. package/dist/primitives/diff/index.js.map +1 -0
  74. package/dist/primitives/diff/types.d.ts +24 -0
  75. package/dist/primitives/diff/types.d.ts.map +1 -0
  76. package/dist/primitives/diff/types.js +2 -0
  77. package/dist/primitives/diff/types.js.map +1 -0
  78. package/dist/primitives/diff.d.ts +2 -0
  79. package/dist/primitives/diff.d.ts.map +1 -0
  80. package/dist/primitives/diff.js +2 -0
  81. package/dist/primitives/diff.js.map +1 -0
  82. package/dist/primitives/error/ErrorMessage.d.ts +10 -0
  83. package/dist/primitives/error/ErrorMessage.d.ts.map +1 -0
  84. package/dist/primitives/error/ErrorMessage.js +11 -0
  85. package/dist/primitives/error/ErrorMessage.js.map +1 -0
  86. package/dist/primitives/error/ErrorRoot.d.ts +10 -0
  87. package/dist/primitives/error/ErrorRoot.d.ts.map +1 -0
  88. package/dist/primitives/error/ErrorRoot.js +11 -0
  89. package/dist/primitives/error/ErrorRoot.js.map +1 -0
  90. package/dist/primitives/error/index.d.ts +3 -0
  91. package/dist/primitives/error/index.d.ts.map +1 -0
  92. package/dist/primitives/error/index.js +3 -0
  93. package/dist/primitives/error/index.js.map +1 -0
  94. package/dist/primitives/message/MessageError.d.ts +3 -0
  95. package/dist/primitives/message/MessageError.d.ts.map +1 -0
  96. package/dist/primitives/message/MessageError.js +7 -0
  97. package/dist/primitives/message/MessageError.js.map +1 -0
  98. package/dist/primitives/message/MessageParts.d.ts.map +1 -1
  99. package/dist/primitives/message/MessageParts.js +5 -1
  100. package/dist/primitives/message/MessageParts.js.map +1 -1
  101. package/dist/primitives/message.d.ts +7 -0
  102. package/dist/primitives/message.d.ts.map +1 -0
  103. package/dist/primitives/message.js +7 -0
  104. package/dist/primitives/message.js.map +1 -0
  105. package/dist/primitives/suggestion/SuggestionTrigger.d.ts +1 -1
  106. package/dist/primitives/suggestion/SuggestionTrigger.d.ts.map +1 -1
  107. package/dist/primitives/suggestion/SuggestionTrigger.js +8 -29
  108. package/dist/primitives/suggestion/SuggestionTrigger.js.map +1 -1
  109. package/dist/primitives/suggestion.d.ts +4 -0
  110. package/dist/primitives/suggestion.d.ts.map +1 -0
  111. package/dist/primitives/suggestion.js +4 -0
  112. package/dist/primitives/suggestion.js.map +1 -0
  113. package/dist/primitives/thread/ThreadMessages.d.ts +9 -2
  114. package/dist/primitives/thread/ThreadMessages.d.ts.map +1 -1
  115. package/dist/primitives/thread/ThreadMessages.js +18 -18
  116. package/dist/primitives/thread/ThreadMessages.js.map +1 -1
  117. package/dist/primitives/thread/ThreadSuggestion.d.ts +1 -1
  118. package/dist/primitives/thread/ThreadSuggestion.d.ts.map +1 -1
  119. package/dist/primitives/thread/ThreadSuggestion.js +7 -29
  120. package/dist/primitives/thread/ThreadSuggestion.js.map +1 -1
  121. package/dist/primitives/{thread/index.d.ts → thread.d.ts} +6 -6
  122. package/dist/primitives/thread.d.ts.map +1 -0
  123. package/dist/primitives/thread.js +8 -0
  124. package/dist/primitives/thread.js.map +1 -0
  125. package/dist/primitives/threadList/ThreadListNew.d.ts +1 -1
  126. package/dist/primitives/threadList/ThreadListNew.d.ts.map +1 -1
  127. package/dist/primitives/threadList/ThreadListNew.js +3 -7
  128. package/dist/primitives/threadList/ThreadListNew.js.map +1 -1
  129. package/dist/primitives/{threadList/index.d.ts → threadList.d.ts} +4 -4
  130. package/dist/primitives/threadList.d.ts.map +1 -0
  131. package/dist/primitives/threadList.js +4 -0
  132. package/dist/primitives/threadList.js.map +1 -0
  133. package/dist/primitives/threadListItem/ThreadListItemArchive.d.ts +1 -1
  134. package/dist/primitives/threadListItem/ThreadListItemArchive.d.ts.map +1 -1
  135. package/dist/primitives/threadListItem/ThreadListItemArchive.js +3 -7
  136. package/dist/primitives/threadListItem/ThreadListItemArchive.js.map +1 -1
  137. package/dist/primitives/threadListItem/ThreadListItemDelete.d.ts +1 -1
  138. package/dist/primitives/threadListItem/ThreadListItemDelete.d.ts.map +1 -1
  139. package/dist/primitives/threadListItem/ThreadListItemDelete.js +3 -7
  140. package/dist/primitives/threadListItem/ThreadListItemDelete.js.map +1 -1
  141. package/dist/primitives/threadListItem/ThreadListItemTrigger.d.ts +1 -1
  142. package/dist/primitives/threadListItem/ThreadListItemTrigger.d.ts.map +1 -1
  143. package/dist/primitives/threadListItem/ThreadListItemTrigger.js +3 -7
  144. package/dist/primitives/threadListItem/ThreadListItemTrigger.js.map +1 -1
  145. package/dist/primitives/threadListItem/ThreadListItemUnarchive.d.ts +1 -1
  146. package/dist/primitives/threadListItem/ThreadListItemUnarchive.d.ts.map +1 -1
  147. package/dist/primitives/threadListItem/ThreadListItemUnarchive.js +3 -7
  148. package/dist/primitives/threadListItem/ThreadListItemUnarchive.js.map +1 -1
  149. package/dist/primitives/threadListItem.d.ts +7 -0
  150. package/dist/primitives/threadListItem.d.ts.map +1 -0
  151. package/dist/primitives/threadListItem.js +7 -0
  152. package/dist/primitives/threadListItem.js.map +1 -0
  153. package/dist/primitives/toolCall/ToolFallback.d.ts +1 -1
  154. package/dist/primitives/toolCall/ToolFallback.d.ts.map +1 -1
  155. package/dist/primitives/toolCall.d.ts +2 -0
  156. package/dist/primitives/toolCall.d.ts.map +1 -0
  157. package/dist/primitives/toolCall.js +2 -0
  158. package/dist/primitives/toolCall.js.map +1 -0
  159. package/package.json +14 -12
  160. package/src/context/AssistantContext.tsx +1 -4
  161. package/src/index.ts +71 -7
  162. package/src/primitives/{actionBar/index.ts → actionBar.ts} +5 -5
  163. package/src/primitives/{attachment/index.ts → attachment.ts} +4 -4
  164. package/src/primitives/branchPicker/BranchPickerNext.tsx +3 -15
  165. package/src/primitives/branchPicker/BranchPickerPrevious.tsx +3 -15
  166. package/src/primitives/{branchPicker/index.ts → branchPicker.ts} +4 -4
  167. package/src/primitives/{chainOfThought/index.ts → chainOfThought.ts} +2 -2
  168. package/src/primitives/composer/ComposerSend.tsx +1 -1
  169. package/src/primitives/{composer/index.ts → composer.ts} +7 -7
  170. package/src/primitives/diff/DiffContent.tsx +77 -0
  171. package/src/primitives/diff/DiffContext.tsx +18 -0
  172. package/src/primitives/diff/DiffHeader.tsx +38 -0
  173. package/src/primitives/diff/DiffLine.tsx +42 -0
  174. package/src/primitives/diff/DiffRoot.tsx +25 -0
  175. package/src/primitives/diff/DiffStats.tsx +22 -0
  176. package/src/primitives/diff/DiffView.test.tsx +340 -0
  177. package/src/primitives/diff/DiffView.tsx +204 -0
  178. package/src/primitives/diff/diff-utils.ts +149 -0
  179. package/src/primitives/diff/index.ts +25 -0
  180. package/src/primitives/diff/types.ts +28 -0
  181. package/src/primitives/diff.ts +1 -0
  182. package/src/primitives/error/ErrorMessage.tsx +17 -0
  183. package/src/primitives/error/ErrorRoot.tsx +16 -0
  184. package/src/primitives/error/index.ts +8 -0
  185. package/src/primitives/message/MessageContent.tsx +1 -1
  186. package/src/primitives/message/MessageError.tsx +9 -0
  187. package/src/primitives/message/MessageParts.tsx +10 -4
  188. package/src/primitives/{message/index.ts → message.ts} +9 -5
  189. package/src/primitives/suggestion/SuggestionTrigger.tsx +10 -30
  190. package/src/primitives/{suggestion/index.ts → suggestion.ts} +3 -3
  191. package/src/primitives/thread/ThreadMessages.tsx +46 -37
  192. package/src/primitives/thread/ThreadSuggestion.tsx +9 -30
  193. package/src/primitives/{thread/index.ts → thread.ts} +8 -5
  194. package/src/primitives/threadList/ThreadListNew.tsx +4 -8
  195. package/src/primitives/{threadList/index.ts → threadList.ts} +3 -3
  196. package/src/primitives/threadListItem/ThreadListItemArchive.tsx +4 -8
  197. package/src/primitives/threadListItem/ThreadListItemDelete.tsx +4 -8
  198. package/src/primitives/threadListItem/ThreadListItemTrigger.tsx +4 -8
  199. package/src/primitives/threadListItem/ThreadListItemUnarchive.tsx +4 -8
  200. package/src/primitives/{threadListItem/index.ts → threadListItem.ts} +5 -5
  201. package/src/primitives/toolCall/ToolFallback.tsx +1 -1
  202. package/src/primitives/{toolCall/index.ts → toolCall.ts} +1 -1
  203. package/dist/client/index.d.ts +0 -5
  204. package/dist/client/index.d.ts.map +0 -1
  205. package/dist/client/index.js +0 -7
  206. package/dist/client/index.js.map +0 -1
  207. package/dist/context/index.d.ts +0 -2
  208. package/dist/context/index.d.ts.map +0 -1
  209. package/dist/context/index.js +0 -2
  210. package/dist/context/index.js.map +0 -1
  211. package/dist/model-context/index.d.ts +0 -9
  212. package/dist/model-context/index.d.ts.map +0 -1
  213. package/dist/model-context/index.js +0 -7
  214. package/dist/model-context/index.js.map +0 -1
  215. package/dist/primitives/actionBar/index.d.ts.map +0 -1
  216. package/dist/primitives/actionBar/index.js +0 -6
  217. package/dist/primitives/actionBar/index.js.map +0 -1
  218. package/dist/primitives/attachment/index.d.ts.map +0 -1
  219. package/dist/primitives/attachment/index.js +0 -5
  220. package/dist/primitives/attachment/index.js.map +0 -1
  221. package/dist/primitives/branchPicker/index.d.ts +0 -5
  222. package/dist/primitives/branchPicker/index.d.ts.map +0 -1
  223. package/dist/primitives/branchPicker/index.js +0 -5
  224. package/dist/primitives/branchPicker/index.js.map +0 -1
  225. package/dist/primitives/chainOfThought/index.d.ts.map +0 -1
  226. package/dist/primitives/chainOfThought/index.js +0 -4
  227. package/dist/primitives/chainOfThought/index.js.map +0 -1
  228. package/dist/primitives/composer/index.d.ts +0 -8
  229. package/dist/primitives/composer/index.d.ts.map +0 -1
  230. package/dist/primitives/composer/index.js +0 -8
  231. package/dist/primitives/composer/index.js.map +0 -1
  232. package/dist/primitives/message/index.d.ts +0 -6
  233. package/dist/primitives/message/index.d.ts.map +0 -1
  234. package/dist/primitives/message/index.js +0 -6
  235. package/dist/primitives/message/index.js.map +0 -1
  236. package/dist/primitives/suggestion/index.d.ts +0 -4
  237. package/dist/primitives/suggestion/index.d.ts.map +0 -1
  238. package/dist/primitives/suggestion/index.js +0 -4
  239. package/dist/primitives/suggestion/index.js.map +0 -1
  240. package/dist/primitives/thread/index.d.ts.map +0 -1
  241. package/dist/primitives/thread/index.js +0 -8
  242. package/dist/primitives/thread/index.js.map +0 -1
  243. package/dist/primitives/threadList/index.d.ts.map +0 -1
  244. package/dist/primitives/threadList/index.js +0 -4
  245. package/dist/primitives/threadList/index.js.map +0 -1
  246. package/dist/primitives/threadListItem/index.d.ts +0 -7
  247. package/dist/primitives/threadListItem/index.d.ts.map +0 -1
  248. package/dist/primitives/threadListItem/index.js +0 -7
  249. package/dist/primitives/threadListItem/index.js.map +0 -1
  250. package/dist/primitives/toolCall/index.d.ts +0 -2
  251. package/dist/primitives/toolCall/index.d.ts.map +0 -1
  252. package/dist/primitives/toolCall/index.js +0 -2
  253. package/dist/primitives/toolCall/index.js.map +0 -1
  254. package/dist/runtimes/index.d.ts +0 -3
  255. package/dist/runtimes/index.d.ts.map +0 -1
  256. package/dist/runtimes/index.js +0 -3
  257. package/dist/runtimes/index.js.map +0 -1
  258. package/dist/types/index.d.ts +0 -2
  259. package/dist/types/index.d.ts.map +0 -1
  260. package/dist/types/index.js +0 -2
  261. package/dist/types/index.js.map +0 -1
  262. package/dist/types/scopes/index.d.ts +0 -3
  263. package/dist/types/scopes/index.d.ts.map +0 -1
  264. package/dist/types/scopes/index.js +0 -2
  265. package/dist/types/scopes/index.js.map +0 -1
  266. package/src/client/index.ts +0 -7
  267. package/src/context/index.ts +0 -4
  268. package/src/model-context/index.ts +0 -44
  269. package/src/runtimes/index.ts +0 -2
  270. package/src/types/index.ts +0 -23
  271. package/src/types/scopes/index.ts +0 -59
@@ -0,0 +1,28 @@
1
+ export type DiffLineType = "add" | "del" | "normal";
2
+
3
+ export interface ParsedLine {
4
+ type: DiffLineType;
5
+ content: string;
6
+ oldLineNumber?: number;
7
+ newLineNumber?: number;
8
+ }
9
+
10
+ export interface ParsedFile {
11
+ oldName?: string | undefined;
12
+ newName?: string | undefined;
13
+ lines: ParsedLine[];
14
+ additions: number;
15
+ deletions: number;
16
+ }
17
+
18
+ export interface FoldedRegion {
19
+ type: "fold";
20
+ hiddenCount: number;
21
+ }
22
+
23
+ export type DisplayLine = ParsedLine | FoldedRegion;
24
+
25
+ export interface DiffFileInput {
26
+ content: string;
27
+ name?: string | undefined;
28
+ }
@@ -0,0 +1 @@
1
+ export * from "./diff/index";
@@ -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";
@@ -9,7 +9,7 @@ import { useAui, useAuiState } from "@assistant-ui/store";
9
9
  import type {
10
10
  ToolCallMessagePartProps,
11
11
  DataMessagePartProps,
12
- } from "../../types";
12
+ } from "@assistant-ui/core/react";
13
13
  import { ToolFallback } from "../toolCall/ToolFallback";
14
14
 
15
15
  type MessageContentPart = ThreadUserMessagePart | ThreadAssistantMessagePart;
@@ -0,0 +1,9 @@
1
+ import type { FC, PropsWithChildren } from "react";
2
+ import { useMessageError } from "@assistant-ui/core/react";
3
+
4
+ export const MessageError: FC<PropsWithChildren> = ({ children }) => {
5
+ const error = useMessageError();
6
+ return error !== undefined ? children : null;
7
+ };
8
+
9
+ MessageError.displayName = "MessagePrimitive.Error";
@@ -19,10 +19,16 @@ export namespace MessagePrimitiveParts {
19
19
  /**
20
20
  * Renders the parts of a message with Ink-specific default components.
21
21
  */
22
- export const MessagePrimitiveParts: FC<MessagePrimitiveParts.Props> = ({
23
- components,
24
- ...rest
25
- }) => {
22
+ export const MessagePrimitiveParts: FC<MessagePrimitiveParts.Props> = (
23
+ props,
24
+ ) => {
25
+ if ("children" in props) {
26
+ return (
27
+ <MessagePrimitivePartsBase>{props.children}</MessagePrimitivePartsBase>
28
+ );
29
+ }
30
+
31
+ const { components, ...rest } = props;
26
32
  const merged = components
27
33
  ? {
28
34
  Text: components.Text ?? inkDefaultComponents.Text,
@@ -1,17 +1,21 @@
1
1
  export {
2
2
  MessageRoot as Root,
3
3
  type MessageRootProps as RootProps,
4
- } from "./MessageRoot";
4
+ } from "./message/MessageRoot";
5
5
  export {
6
6
  MessageContent as Content,
7
7
  type MessageContentProps as ContentProps,
8
- } from "./MessageContent";
8
+ } from "./message/MessageContent";
9
9
  export {
10
10
  MessagePrimitiveParts as Parts,
11
11
  MessagePrimitivePartByIndex as PartByIndex,
12
- } from "./MessageParts";
13
- export { MessageIf as If, type MessageIfProps as IfProps } from "./MessageIf";
12
+ } from "./message/MessageParts";
13
+ export {
14
+ MessageIf as If,
15
+ type MessageIfProps as IfProps,
16
+ } from "./message/MessageIf";
14
17
  export {
15
18
  MessageAttachments as Attachments,
16
19
  MessageAttachmentByIndex as AttachmentByIndex,
17
- } from "./MessageAttachments";
20
+ } from "./message/MessageAttachments";
21
+ export { MessageError as Error } from "./message/MessageError";
@@ -1,5 +1,6 @@
1
- import { useCallback, type ReactNode } from "react";
2
- import { useAuiState, useAui } from "@assistant-ui/store";
1
+ import type { ReactNode } from "react";
2
+ import { useAuiState } from "@assistant-ui/store";
3
+ import { useSuggestionTrigger } from "@assistant-ui/core/react";
3
4
  import { Pressable, type PressableProps } from "../internal/Pressable";
4
5
 
5
6
  export type SuggestionTriggerProps = Omit<PressableProps, "onPress"> & {
@@ -15,38 +16,17 @@ export const SuggestionTrigger = ({
15
16
  disabled: disabledProp,
16
17
  ...pressableProps
17
18
  }: SuggestionTriggerProps) => {
18
- const aui = useAui();
19
- const isDisabled = useAuiState((s) => s.thread.isDisabled);
20
19
  const prompt = useAuiState((s) => s.suggestion.prompt);
21
- const resolvedSend = send ?? false;
22
-
23
- const onPress = useCallback(() => {
24
- const isRunning = aui.thread().getState().isRunning;
25
-
26
- if (resolvedSend && !isRunning) {
27
- aui.thread().append({
28
- content: [{ type: "text", text: prompt }],
29
- runConfig: aui.composer().getState().runConfig,
30
- });
31
- if (clearComposer) {
32
- aui.composer().setText("");
33
- }
34
- } else {
35
- if (clearComposer) {
36
- aui.composer().setText(prompt);
37
- } else {
38
- const currentText = aui.composer().getState().text;
39
- aui
40
- .composer()
41
- .setText(currentText.trim() ? `${currentText} ${prompt}` : prompt);
42
- }
43
- }
44
- }, [aui, resolvedSend, clearComposer, prompt]);
20
+ const { trigger, disabled } = useSuggestionTrigger({
21
+ prompt,
22
+ send,
23
+ clearComposer,
24
+ });
45
25
 
46
26
  return (
47
27
  <Pressable
48
- onPress={onPress}
49
- disabled={disabledProp ?? isDisabled}
28
+ onPress={trigger}
29
+ disabled={disabledProp ?? disabled}
50
30
  {...pressableProps}
51
31
  >
52
32
  {children}
@@ -1,12 +1,12 @@
1
1
  export {
2
2
  SuggestionTitle as Title,
3
3
  type SuggestionTitleProps as TitleProps,
4
- } from "./SuggestionTitle";
4
+ } from "./suggestion/SuggestionTitle";
5
5
  export {
6
6
  SuggestionDescription as Description,
7
7
  type SuggestionDescriptionProps as DescriptionProps,
8
- } from "./SuggestionDescription";
8
+ } from "./suggestion/SuggestionDescription";
9
9
  export {
10
10
  SuggestionTrigger as Trigger,
11
11
  type SuggestionTriggerProps as TriggerProps,
12
- } from "./SuggestionTrigger";
12
+ } from "./suggestion/SuggestionTrigger";
@@ -1,7 +1,7 @@
1
- import { type ComponentType, type FC, memo } from "react";
1
+ import { type ComponentType, type FC, type ReactNode, useMemo } from "react";
2
2
  import { Box } from "ink";
3
3
  import type { ThreadMessage } from "@assistant-ui/core";
4
- import { useAuiState } from "@assistant-ui/store";
4
+ import { RenderChildrenWithAccessor, useAuiState } from "@assistant-ui/store";
5
5
  import { MessageByIndexProvider } from "@assistant-ui/core/react";
6
6
 
7
7
  type MessageComponents =
@@ -26,9 +26,15 @@ type MessageComponents =
26
26
  SystemMessage?: ComponentType | undefined;
27
27
  };
28
28
 
29
- export type ThreadMessagesProps = {
30
- components: MessageComponents;
31
- };
29
+ export type ThreadMessagesProps =
30
+ | {
31
+ components: MessageComponents;
32
+ children?: never;
33
+ }
34
+ | {
35
+ children: (value: { message: ThreadMessage }) => ReactNode;
36
+ components?: never;
37
+ };
32
38
 
33
39
  const DEFAULT_SYSTEM_MESSAGE = () => null;
34
40
 
@@ -95,44 +101,47 @@ const ThreadMessageComponent: FC<{ components: MessageComponents }> = ({
95
101
  return <Component />;
96
102
  };
97
103
 
98
- const isComponentsSame = (prev: MessageComponents, next: MessageComponents) => {
99
- return (
100
- prev.Message === next.Message &&
101
- prev.EditComposer === next.EditComposer &&
102
- prev.UserEditComposer === next.UserEditComposer &&
103
- prev.AssistantEditComposer === next.AssistantEditComposer &&
104
- prev.SystemEditComposer === next.SystemEditComposer &&
105
- prev.UserMessage === next.UserMessage &&
106
- prev.AssistantMessage === next.AssistantMessage &&
107
- prev.SystemMessage === next.SystemMessage
108
- );
104
+ const ThreadMessagesInner: FC<{
105
+ children: (value: { message: ThreadMessage }) => ReactNode;
106
+ }> = ({ children }) => {
107
+ const messagesLength = useAuiState((s) => s.thread.messages.length);
108
+
109
+ return useMemo(() => {
110
+ if (messagesLength === 0) return null;
111
+ return Array.from({ length: messagesLength }, (_, index) => (
112
+ <MessageByIndexProvider key={index} index={index}>
113
+ <RenderChildrenWithAccessor
114
+ getItemState={(aui) => aui.thread().message({ index }).getState()}
115
+ >
116
+ {(getItem) =>
117
+ children({
118
+ get message() {
119
+ return getItem();
120
+ },
121
+ })
122
+ }
123
+ </RenderChildrenWithAccessor>
124
+ </MessageByIndexProvider>
125
+ ));
126
+ }, [messagesLength, children]);
109
127
  };
110
128
 
111
- const ThreadMessageByIndex = memo(
112
- ({ index, components }: { index: number; components: MessageComponents }) => {
129
+ export const ThreadMessages: FC<ThreadMessagesProps> = ({
130
+ components,
131
+ children,
132
+ }) => {
133
+ if (components) {
113
134
  return (
114
- <MessageByIndexProvider index={index}>
115
- <ThreadMessageComponent components={components} />
116
- </MessageByIndexProvider>
135
+ <Box flexDirection="column">
136
+ <ThreadMessagesInner>
137
+ {() => <ThreadMessageComponent components={components} />}
138
+ </ThreadMessagesInner>
139
+ </Box>
117
140
  );
118
- },
119
- (prev, next) =>
120
- prev.index === next.index &&
121
- isComponentsSame(prev.components, next.components),
122
- );
123
-
124
- export const ThreadMessages = ({ components }: ThreadMessagesProps) => {
125
- const messagesLength = useAuiState((s) => s.thread.messages.length);
126
-
141
+ }
127
142
  return (
128
143
  <Box flexDirection="column">
129
- {Array.from({ length: messagesLength }, (_, index) => (
130
- <ThreadMessageByIndex
131
- key={index}
132
- index={index}
133
- components={components}
134
- />
135
- ))}
144
+ <ThreadMessagesInner>{children}</ThreadMessagesInner>
136
145
  </Box>
137
146
  );
138
147
  };
@@ -1,5 +1,5 @@
1
- import { useCallback, type ReactNode } from "react";
2
- import { useAuiState, useAui } from "@assistant-ui/store";
1
+ import type { ReactNode } from "react";
2
+ import { useSuggestionTrigger } from "@assistant-ui/core/react";
3
3
  import { Pressable, type PressableProps } from "../internal/Pressable";
4
4
 
5
5
  export type ThreadSuggestionProps = Omit<PressableProps, "onPress"> & {
@@ -17,37 +17,16 @@ export const ThreadSuggestion = ({
17
17
  disabled: disabledProp,
18
18
  ...pressableProps
19
19
  }: ThreadSuggestionProps) => {
20
- const aui = useAui();
21
- const isDisabled = useAuiState((s) => s.thread.isDisabled);
22
- const resolvedSend = send ?? false;
23
-
24
- const onPress = useCallback(() => {
25
- const isRunning = aui.thread().getState().isRunning;
26
-
27
- if (resolvedSend && !isRunning) {
28
- aui.thread().append({
29
- content: [{ type: "text", text: prompt }],
30
- runConfig: aui.composer().getState().runConfig,
31
- });
32
- if (clearComposer) {
33
- aui.composer().setText("");
34
- }
35
- } else {
36
- if (clearComposer) {
37
- aui.composer().setText(prompt);
38
- } else {
39
- const currentText = aui.composer().getState().text;
40
- aui
41
- .composer()
42
- .setText(currentText.trim() ? `${currentText} ${prompt}` : prompt);
43
- }
44
- }
45
- }, [aui, resolvedSend, clearComposer, prompt]);
20
+ const { trigger, disabled } = useSuggestionTrigger({
21
+ prompt,
22
+ send,
23
+ clearComposer,
24
+ });
46
25
 
47
26
  return (
48
27
  <Pressable
49
- onPress={onPress}
50
- disabled={disabledProp ?? isDisabled}
28
+ onPress={trigger}
29
+ disabled={disabledProp ?? disabled}
51
30
  {...pressableProps}
52
31
  >
53
32
  {children}
@@ -1,21 +1,24 @@
1
1
  export {
2
2
  ThreadRoot as Root,
3
3
  type ThreadRootProps as RootProps,
4
- } from "./ThreadRoot";
4
+ } from "./thread/ThreadRoot";
5
5
  export {
6
6
  ThreadMessages as Messages,
7
7
  type ThreadMessagesProps as MessagesProps,
8
- } from "./ThreadMessages";
8
+ } from "./thread/ThreadMessages";
9
9
  export { ThreadPrimitiveMessageByIndex as MessageByIndex } from "@assistant-ui/core/react";
10
10
  export {
11
11
  ThreadEmpty as Empty,
12
12
  type ThreadEmptyProps as EmptyProps,
13
- } from "./ThreadEmpty";
14
- export { ThreadIf as If, type ThreadIfProps as IfProps } from "./ThreadIf";
13
+ } from "./thread/ThreadEmpty";
14
+ export {
15
+ ThreadIf as If,
16
+ type ThreadIfProps as IfProps,
17
+ } from "./thread/ThreadIf";
15
18
  export {
16
19
  ThreadSuggestion as Suggestion,
17
20
  type ThreadSuggestionProps as SuggestionProps,
18
- } from "./ThreadSuggestion";
21
+ } from "./thread/ThreadSuggestion";
19
22
  export {
20
23
  ThreadPrimitiveSuggestions as Suggestions,
21
24
  ThreadPrimitiveSuggestionByIndex as SuggestionByIndex,
@@ -1,5 +1,5 @@
1
- import { useCallback, type ReactNode } from "react";
2
- import { useAui } from "@assistant-ui/store";
1
+ import type { ReactNode } from "react";
2
+ import { useThreadListNew } from "@assistant-ui/core/react";
3
3
  import { Pressable, type PressableProps } from "../internal/Pressable";
4
4
 
5
5
  export type ThreadListNewProps = Omit<PressableProps, "onPress"> & {
@@ -10,14 +10,10 @@ export const ThreadListNew = ({
10
10
  children,
11
11
  ...pressableProps
12
12
  }: ThreadListNewProps) => {
13
- const aui = useAui();
14
-
15
- const onPress = useCallback(() => {
16
- aui.threads().switchToNewThread();
17
- }, [aui]);
13
+ const { switchToNewThread } = useThreadListNew();
18
14
 
19
15
  return (
20
- <Pressable onPress={onPress} {...pressableProps}>
16
+ <Pressable onPress={switchToNewThread} {...pressableProps}>
21
17
  {children}
22
18
  </Pressable>
23
19
  );
@@ -1,12 +1,12 @@
1
1
  export {
2
2
  ThreadListRoot as Root,
3
3
  type ThreadListRootProps as RootProps,
4
- } from "./ThreadListRoot";
4
+ } from "./threadList/ThreadListRoot";
5
5
  export {
6
6
  ThreadListItems as Items,
7
7
  type ThreadListItemsProps as ItemsProps,
8
- } from "./ThreadListItems";
8
+ } from "./threadList/ThreadListItems";
9
9
  export {
10
10
  ThreadListNew as New,
11
11
  type ThreadListNewProps as NewProps,
12
- } from "./ThreadListNew";
12
+ } from "./threadList/ThreadListNew";
@@ -1,5 +1,5 @@
1
- import { useCallback, type ReactNode } from "react";
2
- import { useAui } from "@assistant-ui/store";
1
+ import type { ReactNode } from "react";
2
+ import { useThreadListItemArchive } from "@assistant-ui/core/react";
3
3
  import { Pressable, type PressableProps } from "../internal/Pressable";
4
4
 
5
5
  export type ThreadListItemArchiveProps = Omit<PressableProps, "onPress"> & {
@@ -10,14 +10,10 @@ export const ThreadListItemArchive = ({
10
10
  children,
11
11
  ...pressableProps
12
12
  }: ThreadListItemArchiveProps) => {
13
- const aui = useAui();
14
-
15
- const onPress = useCallback(() => {
16
- aui.threadListItem().archive();
17
- }, [aui]);
13
+ const { archive } = useThreadListItemArchive();
18
14
 
19
15
  return (
20
- <Pressable onPress={onPress} {...pressableProps}>
16
+ <Pressable onPress={archive} {...pressableProps}>
21
17
  {children}
22
18
  </Pressable>
23
19
  );
@@ -1,5 +1,5 @@
1
- import { useCallback, type ReactNode } from "react";
2
- import { useAui } from "@assistant-ui/store";
1
+ import type { ReactNode } from "react";
2
+ import { useThreadListItemDelete } from "@assistant-ui/core/react";
3
3
  import { Pressable, type PressableProps } from "../internal/Pressable";
4
4
 
5
5
  export type ThreadListItemDeleteProps = Omit<PressableProps, "onPress"> & {
@@ -10,14 +10,10 @@ export const ThreadListItemDelete = ({
10
10
  children,
11
11
  ...pressableProps
12
12
  }: ThreadListItemDeleteProps) => {
13
- const aui = useAui();
14
-
15
- const onPress = useCallback(() => {
16
- aui.threadListItem().delete();
17
- }, [aui]);
13
+ const { delete: deleteThread } = useThreadListItemDelete();
18
14
 
19
15
  return (
20
- <Pressable onPress={onPress} {...pressableProps}>
16
+ <Pressable onPress={deleteThread} {...pressableProps}>
21
17
  {children}
22
18
  </Pressable>
23
19
  );
@@ -1,5 +1,5 @@
1
- import { useCallback, type ReactNode } from "react";
2
- import { useAui } from "@assistant-ui/store";
1
+ import type { ReactNode } from "react";
2
+ import { useThreadListItemTrigger } from "@assistant-ui/core/react";
3
3
  import { Pressable, type PressableProps } from "../internal/Pressable";
4
4
 
5
5
  export type ThreadListItemTriggerProps = Omit<PressableProps, "onPress"> & {
@@ -10,14 +10,10 @@ export const ThreadListItemTrigger = ({
10
10
  children,
11
11
  ...pressableProps
12
12
  }: ThreadListItemTriggerProps) => {
13
- const aui = useAui();
14
-
15
- const onPress = useCallback(() => {
16
- aui.threadListItem().switchTo();
17
- }, [aui]);
13
+ const { switchTo } = useThreadListItemTrigger();
18
14
 
19
15
  return (
20
- <Pressable onPress={onPress} {...pressableProps}>
16
+ <Pressable onPress={switchTo} {...pressableProps}>
21
17
  {children}
22
18
  </Pressable>
23
19
  );
@@ -1,5 +1,5 @@
1
- import { useCallback, type ReactNode } from "react";
2
- import { useAui } from "@assistant-ui/store";
1
+ import type { ReactNode } from "react";
2
+ import { useThreadListItemUnarchive } from "@assistant-ui/core/react";
3
3
  import { Pressable, type PressableProps } from "../internal/Pressable";
4
4
 
5
5
  export type ThreadListItemUnarchiveProps = Omit<PressableProps, "onPress"> & {
@@ -10,14 +10,10 @@ export const ThreadListItemUnarchive = ({
10
10
  children,
11
11
  ...pressableProps
12
12
  }: ThreadListItemUnarchiveProps) => {
13
- const aui = useAui();
14
-
15
- const onPress = useCallback(() => {
16
- aui.threadListItem().unarchive();
17
- }, [aui]);
13
+ const { unarchive } = useThreadListItemUnarchive();
18
14
 
19
15
  return (
20
- <Pressable onPress={onPress} {...pressableProps}>
16
+ <Pressable onPress={unarchive} {...pressableProps}>
21
17
  {children}
22
18
  </Pressable>
23
19
  );
@@ -1,21 +1,21 @@
1
1
  export {
2
2
  ThreadListItemRoot as Root,
3
3
  type ThreadListItemRootProps as RootProps,
4
- } from "./ThreadListItemRoot";
4
+ } from "./threadListItem/ThreadListItemRoot";
5
5
  export { ThreadListItemPrimitiveTitle as Title } from "@assistant-ui/core/react";
6
6
  export {
7
7
  ThreadListItemTrigger as Trigger,
8
8
  type ThreadListItemTriggerProps as TriggerProps,
9
- } from "./ThreadListItemTrigger";
9
+ } from "./threadListItem/ThreadListItemTrigger";
10
10
  export {
11
11
  ThreadListItemDelete as Delete,
12
12
  type ThreadListItemDeleteProps as DeleteProps,
13
- } from "./ThreadListItemDelete";
13
+ } from "./threadListItem/ThreadListItemDelete";
14
14
  export {
15
15
  ThreadListItemArchive as Archive,
16
16
  type ThreadListItemArchiveProps as ArchiveProps,
17
- } from "./ThreadListItemArchive";
17
+ } from "./threadListItem/ThreadListItemArchive";
18
18
  export {
19
19
  ThreadListItemUnarchive as Unarchive,
20
20
  type ThreadListItemUnarchiveProps as UnarchiveProps,
21
- } from "./ThreadListItemUnarchive";
21
+ } from "./threadListItem/ThreadListItemUnarchive";
@@ -2,7 +2,7 @@ import { type ReactNode, useMemo } from "react";
2
2
  import { Box, Text } from "ink";
3
3
  import Spinner from "ink-spinner";
4
4
  import type { ToolCallMessagePartStatus } from "@assistant-ui/core";
5
- import type { ToolCallMessagePartProps } from "../../types";
5
+ import type { ToolCallMessagePartProps } from "@assistant-ui/core/react";
6
6
 
7
7
  export type ToolCallStatus =
8
8
  | "running"
@@ -2,4 +2,4 @@ export {
2
2
  ToolFallback as Fallback,
3
3
  type ToolFallbackProps as FallbackProps,
4
4
  type ToolCallStatus,
5
- } from "./ToolFallback";
5
+ } from "./toolCall/ToolFallback";
@@ -1,5 +0,0 @@
1
- export { Tools, DataRenderers } from "@assistant-ui/core/react";
2
- export { ModelContext as ModelContextClient } from "@assistant-ui/core/store";
3
- export { Suggestions, type SuggestionConfig } from "@assistant-ui/core/store";
4
- export { ChainOfThoughtClient } from "@assistant-ui/core/store";
5
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAGhE,OAAO,EAAE,YAAY,IAAI,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9E,OAAO,EAAE,WAAW,EAAE,KAAK,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC9E,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC"}
@@ -1,7 +0,0 @@
1
- // Re-export shared clients from core/react
2
- export { Tools, DataRenderers } from "@assistant-ui/core/react";
3
- // Re-export clients from core
4
- export { ModelContext as ModelContextClient } from "@assistant-ui/core/store";
5
- export { Suggestions } from "@assistant-ui/core/store";
6
- export { ChainOfThoughtClient } from "@assistant-ui/core/store";
7
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"AAAA,2CAA2C;AAC3C,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAEhE,8BAA8B;AAC9B,OAAO,EAAE,YAAY,IAAI,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9E,OAAO,EAAE,WAAW,EAAyB,MAAM,0BAA0B,CAAC;AAC9E,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC"}
@@ -1,2 +0,0 @@
1
- export { AssistantRuntimeProvider, useAssistantRuntime, } from "./AssistantContext.js";
2
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/context/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,wBAAwB,EACxB,mBAAmB,GACpB,8BAA2B"}
@@ -1,2 +0,0 @@
1
- export { AssistantRuntimeProvider, useAssistantRuntime, } from "./AssistantContext.js";
2
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/context/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,wBAAwB,EACxB,mBAAmB,GACpB,8BAA2B"}
@@ -1,9 +0,0 @@
1
- export { makeAssistantTool, type AssistantTool, makeAssistantToolUI, type AssistantToolUI, makeAssistantDataUI, type AssistantDataUI, useAssistantTool, type AssistantToolProps, useAssistantToolUI, type AssistantToolUIProps, useAssistantDataUI, type AssistantDataUIProps, useAssistantInstructions, useInlineRender, type Toolkit, type ToolDefinition, Tools, DataRenderers, } from "@assistant-ui/core/react";
2
- export type { ModelContext, ModelContextProvider, LanguageModelConfig, LanguageModelV1CallSettings, } from "@assistant-ui/core";
3
- export { mergeModelContexts } from "@assistant-ui/core";
4
- export type { Tool } from "assistant-stream";
5
- export { tool } from "@assistant-ui/core";
6
- export { Suggestions, type SuggestionConfig } from "@assistant-ui/core/store";
7
- export { ModelContextRegistry } from "@assistant-ui/core";
8
- export type { ModelContextRegistryToolHandle, ModelContextRegistryInstructionHandle, ModelContextRegistryProviderHandle, } from "@assistant-ui/core";
9
- //# sourceMappingURL=index.d.ts.map