@assistant-ui/react 0.1.7 → 0.1.9

Sign up to get free protection for your applications and to get access to all the features.
package/README.md CHANGED
@@ -1,6 +1,8 @@
1
- # `assistant-ui`
1
+ <a href="https://www.assistant-ui.com">
2
+ <img src="https://raw.githubusercontent.com/Yonom/assistant-ui/main/.github/assets/header.svg" alt="assistant-ui Header" width="100%" />
3
+ </a>
2
4
 
3
- `assistant-ui` is a set of React components for AI chat.
5
+ assistant-ui is a set of React components for AI chat.
4
6
 
5
7
  - [Discord](https://discord.gg/S9dwgCNEFs)
6
8
  - [Website](https://assistant-ui.com/)
@@ -25,4 +27,4 @@ Step 3: Run the app:
25
27
 
26
28
  ```sh
27
29
  npm run dev
28
- ```
30
+ ```
@@ -61,6 +61,7 @@ type UIContentPartComponent = ComponentType<UIContentPartProps>;
61
61
  type ToolCallContentPartProps<TArgs = any, TResult = any> = {
62
62
  part: ToolCallContentPart<TArgs, TResult>;
63
63
  status: ContentPartStatus;
64
+ addResult: (result: any) => void;
64
65
  };
65
66
  type ToolCallContentPartComponent<TArgs = any, TResult = any> = ComponentType<ToolCallContentPartProps<TArgs, TResult>>;
66
67
 
@@ -79,14 +80,18 @@ type ModelConfigProvider = () => ModelConfig;
79
80
 
80
81
  type Unsubscribe = () => void;
81
82
 
82
- type ThreadState = {
83
+ type ThreadState = Readonly<{
83
84
  messages: readonly ThreadMessage[];
84
85
  isRunning: boolean;
86
+ }>;
87
+
88
+ type ThreadActionsState = Readonly<{
85
89
  getBranches: (messageId: string) => readonly string[];
86
90
  switchToBranch: (branchId: string) => void;
87
91
  append: (message: AppendMessage) => void;
88
92
  startRun: (parentId: string | null) => void;
89
93
  cancelRun: () => void;
90
- };
94
+ addToolResult: (toolCallId: string, result: any) => void;
95
+ }>;
91
96
 
92
- export type { AssistantContentPart as A, ImageContentPartComponent as I, ModelConfigProvider as M, TextContentPartComponent as T, UIContentPartComponent as U, ToolCallContentPartComponent as a, ToolCallContentPartProps as b, ThreadState as c, Unsubscribe as d, ThreadMessage as e, ModelConfig as f, AppendMessage as g, AssistantMessage as h, UserMessage as i, UserContentPart as j, AppendContentPart as k, TextContentPart as l, Tool as m, ImageContentPart as n, ToolCallContentPart as o, UIContentPart as p, TextContentPartProps as q, ImageContentPartProps as r, UIContentPartProps as s };
97
+ export type { AssistantContentPart as A, ImageContentPartComponent as I, ModelConfigProvider as M, TextContentPartComponent as T, UIContentPartComponent as U, ToolCallContentPartComponent as a, ToolCallContentPartProps as b, ThreadState as c, ThreadActionsState as d, Unsubscribe as e, ThreadMessage as f, ModelConfig as g, AppendMessage as h, AssistantMessage as i, UserMessage as j, UserContentPart as k, AppendContentPart as l, TextContentPart as m, Tool as n, ImageContentPart as o, ToolCallContentPart as p, UIContentPart as q, TextContentPartProps as r, ImageContentPartProps as s, UIContentPartProps as t };
@@ -61,6 +61,7 @@ type UIContentPartComponent = ComponentType<UIContentPartProps>;
61
61
  type ToolCallContentPartProps<TArgs = any, TResult = any> = {
62
62
  part: ToolCallContentPart<TArgs, TResult>;
63
63
  status: ContentPartStatus;
64
+ addResult: (result: any) => void;
64
65
  };
65
66
  type ToolCallContentPartComponent<TArgs = any, TResult = any> = ComponentType<ToolCallContentPartProps<TArgs, TResult>>;
66
67
 
@@ -79,14 +80,18 @@ type ModelConfigProvider = () => ModelConfig;
79
80
 
80
81
  type Unsubscribe = () => void;
81
82
 
82
- type ThreadState = {
83
+ type ThreadState = Readonly<{
83
84
  messages: readonly ThreadMessage[];
84
85
  isRunning: boolean;
86
+ }>;
87
+
88
+ type ThreadActionsState = Readonly<{
85
89
  getBranches: (messageId: string) => readonly string[];
86
90
  switchToBranch: (branchId: string) => void;
87
91
  append: (message: AppendMessage) => void;
88
92
  startRun: (parentId: string | null) => void;
89
93
  cancelRun: () => void;
90
- };
94
+ addToolResult: (toolCallId: string, result: any) => void;
95
+ }>;
91
96
 
92
- export type { AssistantContentPart as A, ImageContentPartComponent as I, ModelConfigProvider as M, TextContentPartComponent as T, UIContentPartComponent as U, ToolCallContentPartComponent as a, ToolCallContentPartProps as b, ThreadState as c, Unsubscribe as d, ThreadMessage as e, ModelConfig as f, AppendMessage as g, AssistantMessage as h, UserMessage as i, UserContentPart as j, AppendContentPart as k, TextContentPart as l, Tool as m, ImageContentPart as n, ToolCallContentPart as o, UIContentPart as p, TextContentPartProps as q, ImageContentPartProps as r, UIContentPartProps as s };
97
+ export type { AssistantContentPart as A, ImageContentPartComponent as I, ModelConfigProvider as M, TextContentPartComponent as T, UIContentPartComponent as U, ToolCallContentPartComponent as a, ToolCallContentPartProps as b, ThreadState as c, ThreadActionsState as d, Unsubscribe as e, ThreadMessage as f, ModelConfig as g, AppendMessage as h, AssistantMessage as i, UserMessage as j, UserContentPart as k, AppendContentPart as l, TextContentPart as m, Tool as n, ImageContentPart as o, ToolCallContentPart as p, UIContentPart as q, TextContentPartProps as r, ImageContentPartProps as s, UIContentPartProps as t };
@@ -82,4 +82,4 @@ export {
82
82
  ContentPartContext,
83
83
  useContentPartContext
84
84
  };
85
- //# sourceMappingURL=chunk-XVZ2GVQM.mjs.map
85
+ //# sourceMappingURL=chunk-7O2URLFI.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/context/MessageContext.ts","../src/context/ThreadContext.ts","../src/context/ComposerContext.ts","../src/context/AssistantContext.ts","../src/context/ContentPartContext.ts"],"sourcesContent":["import { createContext, useContext } from \"react\";\nimport type { MessageState } from \"./stores/Message\";\nimport type { EditComposerState } from \"./stores/MessageComposer\";\nimport { ReadonlyStore } from \"./ReadonlyStore\";\nimport { MessageUtilsState } from \"./stores/MessageUtils\";\n\nexport type MessageContextValue = {\n useMessage: ReadonlyStore<MessageState>;\n useMessageUtils: ReadonlyStore<MessageUtilsState>;\n useComposer: ReadonlyStore<EditComposerState>;\n};\n\nexport const MessageContext = createContext<MessageContextValue | null>(null);\n\nexport const useMessageContext = () => {\n const context = useContext(MessageContext);\n if (!context)\n throw new Error(\n \"This component can only be used inside a component passed to <ThreadPrimitive.Messages components={...} />.\",\n );\n return context;\n};\n","import { createContext, useContext } from \"react\";\nimport type { ComposerState } from \"./stores/Composer\";\nimport type { ThreadState } from \"./stores/Thread\";\nimport type { ThreadViewportState } from \"./stores/ThreadViewport\";\nimport { ThreadActionsState } from \"./stores/ThreadActions\";\nimport { ReadonlyStore } from \"./ReadonlyStore\";\n\nexport type ThreadContextValue = {\n useThread: ReadonlyStore<ThreadState>;\n useThreadActions: ReadonlyStore<ThreadActionsState>;\n useComposer: ReadonlyStore<ComposerState>;\n useViewport: ReadonlyStore<ThreadViewportState>;\n};\n\nexport const ThreadContext = createContext<ThreadContextValue | null>(null);\n\nexport const useThreadContext = (): ThreadContextValue => {\n const context = useContext(ThreadContext);\n if (!context)\n throw new Error(\n \"This component must be used within an AssistantRuntimeProvider.\",\n );\n return context;\n};\n","import { useContext, useMemo } from \"react\";\nimport { MessageContext } from \"./MessageContext\";\nimport { useThreadContext } from \"./ThreadContext\";\nimport type { ComposerState } from \"./stores/Composer\";\nimport type { EditComposerState } from \"./stores/MessageComposer\";\nimport { ReadonlyStore } from \"./ReadonlyStore\";\n\nexport type ComposerContextValue = {\n useComposer: ReadonlyStore<EditComposerState | ComposerState>;\n type: \"edit\" | \"new\";\n};\n\nexport const useComposerContext = (): ComposerContextValue => {\n const { useComposer } = useThreadContext();\n const { useComposer: useEditComposer } = useContext(MessageContext) ?? {};\n return useMemo(\n () => ({\n useComposer: (useEditComposer ?? useComposer) as ReadonlyStore<\n EditComposerState | ComposerState\n >,\n type: useEditComposer ? (\"edit\" as const) : (\"new\" as const),\n }),\n [useEditComposer, useComposer],\n );\n};\n","import { createContext, useContext } from \"react\";\nimport type { AssistantModelConfigState } from \"./stores/AssistantModelConfig\";\nimport type { AssistantToolUIsState } from \"./stores/AssistantToolUIs\";\nimport { ReadonlyStore } from \"./ReadonlyStore\";\n\nexport type AssistantContextValue = {\n useModelConfig: ReadonlyStore<AssistantModelConfigState>;\n useToolUIs: ReadonlyStore<AssistantToolUIsState>;\n};\n\nexport const AssistantContext = createContext<AssistantContextValue | null>(\n null,\n);\n\nexport const useAssistantContext = (): AssistantContextValue => {\n const context = useContext(AssistantContext);\n if (!context)\n throw new Error(\n \"This component must be used within an AssistantRuntimeProvider.\",\n );\n return context;\n};\n","import { createContext, useContext } from \"react\";\nimport type { ContentPartState } from \"./stores/ContentPart\";\nimport { ReadonlyStore } from \"./ReadonlyStore\";\n\nexport type ContentPartContextValue = {\n useContentPart: ReadonlyStore<ContentPartState>;\n};\n\nexport const ContentPartContext = createContext<ContentPartContextValue | null>(\n null,\n);\n\nexport const useContentPartContext = (): ContentPartContextValue => {\n const context = useContext(ContentPartContext);\n if (!context)\n throw new Error(\n \"This component can only be used inside a component passed to <MessagePrimitive.Content components={...} >.\",\n );\n return context;\n};\n"],"mappings":";;;;;;;AAAA,SAAS,eAAe,kBAAkB;AAYnC,IAAM,iBAAiB,cAA0C,IAAI;AAErE,IAAM,oBAAoB,MAAM;AACrC,QAAM,UAAU,WAAW,cAAc;AACzC,MAAI,CAAC;AACH,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AACF,SAAO;AACT;;;ACrBA,SAAS,iBAAAA,gBAAe,cAAAC,mBAAkB;AAcnC,IAAM,gBAAgBD,eAAyC,IAAI;AAEnE,IAAM,mBAAmB,MAA0B;AACxD,QAAM,UAAUC,YAAW,aAAa;AACxC,MAAI,CAAC;AACH,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AACF,SAAO;AACT;;;ACvBA,SAAS,cAAAC,aAAY,eAAe;AAY7B,IAAM,qBAAqB,MAA4B;AAC5D,QAAM,EAAE,YAAY,IAAI,iBAAiB;AACzC,QAAM,EAAE,aAAa,gBAAgB,IAAIC,YAAW,cAAc,KAAK,CAAC;AACxE,SAAO;AAAA,IACL,OAAO;AAAA,MACL,aAAc,mBAAmB;AAAA,MAGjC,MAAM,kBAAmB,SAAoB;AAAA,IAC/C;AAAA,IACA,CAAC,iBAAiB,WAAW;AAAA,EAC/B;AACF;;;ACxBA,SAAS,iBAAAC,gBAAe,cAAAC,mBAAkB;AAUnC,IAAM,mBAAmBD;AAAA,EAC9B;AACF;AAEO,IAAM,sBAAsB,MAA6B;AAC9D,QAAM,UAAUC,YAAW,gBAAgB;AAC3C,MAAI,CAAC;AACH,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AACF,SAAO;AACT;;;ACrBA,SAAS,iBAAAC,gBAAe,cAAAC,mBAAkB;AAQnC,IAAM,qBAAqBD;AAAA,EAChC;AACF;AAEO,IAAM,wBAAwB,MAA+B;AAClE,QAAM,UAAUC,YAAW,kBAAkB;AAC7C,MAAI,CAAC;AACH,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AACF,SAAO;AACT;","names":["createContext","useContext","useContext","useContext","createContext","useContext","createContext","useContext"]}
@@ -1,13 +1,13 @@
1
- import { M as ModelConfigProvider, e as ThreadMessage, d as Unsubscribe, a as ToolCallContentPartComponent, c as ThreadState, m as Tool } from './Thread-ZUDFhMtm.mjs';
2
- export { n as ImageContentPart, I as ImageContentPartComponent, r as ImageContentPartProps, f as ModelConfig, T as TextContentPartComponent, q as TextContentPartProps, o as ToolCallContentPart, b as ToolCallContentPartProps, p as UIContentPart, U as UIContentPartComponent, s as UIContentPartProps } from './Thread-ZUDFhMtm.mjs';
3
- import { ReactNode } from 'react';
1
+ import { M as ModelConfigProvider, f as ThreadMessage, e as Unsubscribe, a as ToolCallContentPartComponent, c as ThreadState, d as ThreadActionsState, n as Tool } from './ThreadActions-DqqhRbf1.mjs';
2
+ export { o as ImageContentPart, I as ImageContentPartComponent, s as ImageContentPartProps, g as ModelConfig, T as TextContentPartComponent, r as TextContentPartProps, p as ToolCallContentPart, b as ToolCallContentPartProps, q as UIContentPart, U as UIContentPartComponent, t as UIContentPartProps } from './ThreadActions-DqqhRbf1.mjs';
4
3
  import { UseBoundStore, StoreApi } from 'zustand';
4
+ import { ReactNode } from 'react';
5
5
  import 'zod';
6
6
 
7
- type AssistantModelConfigState = {
7
+ type AssistantModelConfigState = Readonly<{
8
8
  getModelConfig: ModelConfigProvider;
9
9
  registerModelConfigProvider: (provider: ModelConfigProvider) => () => void;
10
- };
10
+ }>;
11
11
 
12
12
  type ContentPartState = Readonly<{
13
13
  status: "in_progress" | "done" | "error";
@@ -19,12 +19,6 @@ type MessageState = Readonly<{
19
19
  parentId: string | null;
20
20
  branches: readonly string[];
21
21
  isLast: boolean;
22
- inProgressIndicator: ReactNode | null;
23
- setInProgressIndicator: (value: ReactNode | null) => void;
24
- isCopied: boolean;
25
- setIsCopied: (value: boolean) => void;
26
- isHovering: boolean;
27
- setIsHovering: (value: boolean) => void;
28
22
  }>;
29
23
 
30
24
  type BaseComposerState = Readonly<{
@@ -32,6 +26,8 @@ type BaseComposerState = Readonly<{
32
26
  setValue: (value: string) => void;
33
27
  }>;
34
28
 
29
+ type ReadonlyStore<T> = UseBoundStore<Omit<StoreApi<T>, "setState" | "destroy" | "getInitialState">>;
30
+
35
31
  type EditComposerState = BaseComposerState & Readonly<{
36
32
  isEditing: boolean;
37
33
  edit: () => void;
@@ -45,63 +41,74 @@ type ComposerState = BaseComposerState & Readonly<{
45
41
  cancel: () => boolean;
46
42
  }>;
47
43
 
48
- type ThreadViewportState = {
44
+ type ThreadViewportState = Readonly<{
49
45
  isAtBottom: boolean;
50
46
  scrollToBottom: () => void;
51
47
  onScrollToBottom: (callback: () => void) => Unsubscribe;
52
- };
48
+ }>;
53
49
 
54
- type AssistantToolRenderersState = {
55
- getToolRenderer: (name: string) => ToolCallContentPartComponent | null;
56
- setToolRenderer: (name: string, render: ToolCallContentPartComponent) => () => void;
57
- };
50
+ type AssistantToolUIsState = Readonly<{
51
+ getToolUI: (toolName: string) => ToolCallContentPartComponent | null;
52
+ setToolUI: (toolName: string, render: ToolCallContentPartComponent) => () => void;
53
+ }>;
58
54
 
59
55
  type AssistantContextValue = {
60
- useModelConfig: UseBoundStore<StoreApi<AssistantModelConfigState>>;
61
- useToolRenderers: UseBoundStore<StoreApi<AssistantToolRenderersState>>;
56
+ useModelConfig: ReadonlyStore<AssistantModelConfigState>;
57
+ useToolUIs: ReadonlyStore<AssistantToolUIsState>;
62
58
  };
63
59
  declare const useAssistantContext: () => AssistantContextValue;
64
60
 
65
61
  type ThreadContextValue = {
66
- useThread: UseBoundStore<StoreApi<ThreadState>>;
67
- useComposer: UseBoundStore<StoreApi<ComposerState>>;
68
- useViewport: UseBoundStore<StoreApi<ThreadViewportState>>;
62
+ useThread: ReadonlyStore<ThreadState>;
63
+ useThreadActions: ReadonlyStore<ThreadActionsState>;
64
+ useComposer: ReadonlyStore<ComposerState>;
65
+ useViewport: ReadonlyStore<ThreadViewportState>;
69
66
  };
70
67
  declare const useThreadContext: () => ThreadContextValue;
71
68
 
72
69
  type ComposerContextValue = {
73
- useComposer: UseBoundStore<StoreApi<EditComposerState | ComposerState>>;
70
+ useComposer: ReadonlyStore<EditComposerState | ComposerState>;
74
71
  type: "edit" | "new";
75
72
  };
76
73
  declare const useComposerContext: () => ComposerContextValue;
77
74
 
75
+ type MessageUtilsState = Readonly<{
76
+ inProgressIndicator: ReactNode | null;
77
+ setInProgressIndicator: (value: ReactNode | null) => void;
78
+ isCopied: boolean;
79
+ setIsCopied: (value: boolean) => void;
80
+ isHovering: boolean;
81
+ setIsHovering: (value: boolean) => void;
82
+ }>;
83
+
78
84
  type MessageContextValue = {
79
- useMessage: UseBoundStore<StoreApi<MessageState>>;
80
- useComposer: UseBoundStore<StoreApi<EditComposerState>>;
85
+ useMessage: ReadonlyStore<MessageState>;
86
+ useMessageUtils: ReadonlyStore<MessageUtilsState>;
87
+ useComposer: ReadonlyStore<EditComposerState>;
81
88
  };
82
89
  declare const useMessageContext: () => MessageContextValue;
83
90
 
84
91
  type ContentPartContextValue = {
85
- useContentPart: UseBoundStore<StoreApi<ContentPartState>>;
92
+ useContentPart: ReadonlyStore<ContentPartState>;
86
93
  };
87
94
  declare const useContentPartContext: () => ContentPartContextValue;
88
95
 
89
96
  declare const useAssistantInstructions: (instruction: string) => void;
90
97
 
91
98
  type AssistantToolProps<TArgs, TResult> = Tool<TArgs, TResult> & {
92
- name: string;
99
+ toolName: string;
93
100
  render?: ToolCallContentPartComponent<TArgs, TResult>;
94
101
  };
95
102
  declare const useAssistantTool: <TArgs, TResult>(tool: AssistantToolProps<TArgs, TResult>) => void;
96
103
 
97
- type AssistantToolRendererProps<TArgs, TResult> = {
98
- name: string;
104
+ type AssistantToolUIProps<TArgs, TResult> = {
105
+ toolName: string;
99
106
  render: ToolCallContentPartComponent<TArgs, TResult>;
100
107
  };
101
- declare const useAssistantToolRenderer: (tool: AssistantToolRendererProps<any, any> | null) => void;
108
+ declare const useAssistantToolUI: (tool: AssistantToolUIProps<any, any> | null) => void;
102
109
 
103
- declare const makeTool: <TArgs, TResult>(tool: AssistantToolProps<TArgs, TResult>) => () => null;
110
+ declare const makeAssistantTool: <TArgs, TResult>(tool: AssistantToolProps<TArgs, TResult>) => () => null;
104
111
 
105
- declare const makeToolRenderer: <TArgs, TResult>(tool: AssistantToolRendererProps<TArgs, TResult>) => () => null;
112
+ declare const makeAssistantToolUI: <TArgs, TResult>(tool: AssistantToolUIProps<TArgs, TResult>) => () => null;
106
113
 
107
- export { type AssistantContextValue, type AssistantModelConfigState, type AssistantToolProps, type AssistantToolRendererProps, type ComposerContextValue, type ComposerState, type ContentPartContextValue, type ContentPartState, type EditComposerState, type MessageContextValue, type MessageState, ModelConfigProvider, type ThreadContextValue, ThreadState, type ThreadViewportState, ToolCallContentPartComponent, makeTool, makeToolRenderer, useAssistantContext, useAssistantInstructions, useAssistantTool, useAssistantToolRenderer, useComposerContext, useContentPartContext, useMessageContext, useThreadContext };
114
+ export { type AssistantContextValue, type AssistantModelConfigState, type AssistantToolProps, type AssistantToolUIProps, type ComposerContextValue, type ComposerState, type ContentPartContextValue, type ContentPartState, type EditComposerState, type MessageContextValue, type MessageState, ModelConfigProvider, type ThreadContextValue, ThreadState, type ThreadViewportState, ToolCallContentPartComponent, makeAssistantTool, makeAssistantToolUI, useAssistantContext, useAssistantInstructions, useAssistantTool, useAssistantToolUI, useComposerContext, useContentPartContext, useMessageContext, useThreadContext };
@@ -1,13 +1,13 @@
1
- import { M as ModelConfigProvider, e as ThreadMessage, d as Unsubscribe, a as ToolCallContentPartComponent, c as ThreadState, m as Tool } from './Thread-ZUDFhMtm.js';
2
- export { n as ImageContentPart, I as ImageContentPartComponent, r as ImageContentPartProps, f as ModelConfig, T as TextContentPartComponent, q as TextContentPartProps, o as ToolCallContentPart, b as ToolCallContentPartProps, p as UIContentPart, U as UIContentPartComponent, s as UIContentPartProps } from './Thread-ZUDFhMtm.js';
3
- import { ReactNode } from 'react';
1
+ import { M as ModelConfigProvider, f as ThreadMessage, e as Unsubscribe, a as ToolCallContentPartComponent, c as ThreadState, d as ThreadActionsState, n as Tool } from './ThreadActions-DqqhRbf1.js';
2
+ export { o as ImageContentPart, I as ImageContentPartComponent, s as ImageContentPartProps, g as ModelConfig, T as TextContentPartComponent, r as TextContentPartProps, p as ToolCallContentPart, b as ToolCallContentPartProps, q as UIContentPart, U as UIContentPartComponent, t as UIContentPartProps } from './ThreadActions-DqqhRbf1.js';
4
3
  import { UseBoundStore, StoreApi } from 'zustand';
4
+ import { ReactNode } from 'react';
5
5
  import 'zod';
6
6
 
7
- type AssistantModelConfigState = {
7
+ type AssistantModelConfigState = Readonly<{
8
8
  getModelConfig: ModelConfigProvider;
9
9
  registerModelConfigProvider: (provider: ModelConfigProvider) => () => void;
10
- };
10
+ }>;
11
11
 
12
12
  type ContentPartState = Readonly<{
13
13
  status: "in_progress" | "done" | "error";
@@ -19,12 +19,6 @@ type MessageState = Readonly<{
19
19
  parentId: string | null;
20
20
  branches: readonly string[];
21
21
  isLast: boolean;
22
- inProgressIndicator: ReactNode | null;
23
- setInProgressIndicator: (value: ReactNode | null) => void;
24
- isCopied: boolean;
25
- setIsCopied: (value: boolean) => void;
26
- isHovering: boolean;
27
- setIsHovering: (value: boolean) => void;
28
22
  }>;
29
23
 
30
24
  type BaseComposerState = Readonly<{
@@ -32,6 +26,8 @@ type BaseComposerState = Readonly<{
32
26
  setValue: (value: string) => void;
33
27
  }>;
34
28
 
29
+ type ReadonlyStore<T> = UseBoundStore<Omit<StoreApi<T>, "setState" | "destroy" | "getInitialState">>;
30
+
35
31
  type EditComposerState = BaseComposerState & Readonly<{
36
32
  isEditing: boolean;
37
33
  edit: () => void;
@@ -45,63 +41,74 @@ type ComposerState = BaseComposerState & Readonly<{
45
41
  cancel: () => boolean;
46
42
  }>;
47
43
 
48
- type ThreadViewportState = {
44
+ type ThreadViewportState = Readonly<{
49
45
  isAtBottom: boolean;
50
46
  scrollToBottom: () => void;
51
47
  onScrollToBottom: (callback: () => void) => Unsubscribe;
52
- };
48
+ }>;
53
49
 
54
- type AssistantToolRenderersState = {
55
- getToolRenderer: (name: string) => ToolCallContentPartComponent | null;
56
- setToolRenderer: (name: string, render: ToolCallContentPartComponent) => () => void;
57
- };
50
+ type AssistantToolUIsState = Readonly<{
51
+ getToolUI: (toolName: string) => ToolCallContentPartComponent | null;
52
+ setToolUI: (toolName: string, render: ToolCallContentPartComponent) => () => void;
53
+ }>;
58
54
 
59
55
  type AssistantContextValue = {
60
- useModelConfig: UseBoundStore<StoreApi<AssistantModelConfigState>>;
61
- useToolRenderers: UseBoundStore<StoreApi<AssistantToolRenderersState>>;
56
+ useModelConfig: ReadonlyStore<AssistantModelConfigState>;
57
+ useToolUIs: ReadonlyStore<AssistantToolUIsState>;
62
58
  };
63
59
  declare const useAssistantContext: () => AssistantContextValue;
64
60
 
65
61
  type ThreadContextValue = {
66
- useThread: UseBoundStore<StoreApi<ThreadState>>;
67
- useComposer: UseBoundStore<StoreApi<ComposerState>>;
68
- useViewport: UseBoundStore<StoreApi<ThreadViewportState>>;
62
+ useThread: ReadonlyStore<ThreadState>;
63
+ useThreadActions: ReadonlyStore<ThreadActionsState>;
64
+ useComposer: ReadonlyStore<ComposerState>;
65
+ useViewport: ReadonlyStore<ThreadViewportState>;
69
66
  };
70
67
  declare const useThreadContext: () => ThreadContextValue;
71
68
 
72
69
  type ComposerContextValue = {
73
- useComposer: UseBoundStore<StoreApi<EditComposerState | ComposerState>>;
70
+ useComposer: ReadonlyStore<EditComposerState | ComposerState>;
74
71
  type: "edit" | "new";
75
72
  };
76
73
  declare const useComposerContext: () => ComposerContextValue;
77
74
 
75
+ type MessageUtilsState = Readonly<{
76
+ inProgressIndicator: ReactNode | null;
77
+ setInProgressIndicator: (value: ReactNode | null) => void;
78
+ isCopied: boolean;
79
+ setIsCopied: (value: boolean) => void;
80
+ isHovering: boolean;
81
+ setIsHovering: (value: boolean) => void;
82
+ }>;
83
+
78
84
  type MessageContextValue = {
79
- useMessage: UseBoundStore<StoreApi<MessageState>>;
80
- useComposer: UseBoundStore<StoreApi<EditComposerState>>;
85
+ useMessage: ReadonlyStore<MessageState>;
86
+ useMessageUtils: ReadonlyStore<MessageUtilsState>;
87
+ useComposer: ReadonlyStore<EditComposerState>;
81
88
  };
82
89
  declare const useMessageContext: () => MessageContextValue;
83
90
 
84
91
  type ContentPartContextValue = {
85
- useContentPart: UseBoundStore<StoreApi<ContentPartState>>;
92
+ useContentPart: ReadonlyStore<ContentPartState>;
86
93
  };
87
94
  declare const useContentPartContext: () => ContentPartContextValue;
88
95
 
89
96
  declare const useAssistantInstructions: (instruction: string) => void;
90
97
 
91
98
  type AssistantToolProps<TArgs, TResult> = Tool<TArgs, TResult> & {
92
- name: string;
99
+ toolName: string;
93
100
  render?: ToolCallContentPartComponent<TArgs, TResult>;
94
101
  };
95
102
  declare const useAssistantTool: <TArgs, TResult>(tool: AssistantToolProps<TArgs, TResult>) => void;
96
103
 
97
- type AssistantToolRendererProps<TArgs, TResult> = {
98
- name: string;
104
+ type AssistantToolUIProps<TArgs, TResult> = {
105
+ toolName: string;
99
106
  render: ToolCallContentPartComponent<TArgs, TResult>;
100
107
  };
101
- declare const useAssistantToolRenderer: (tool: AssistantToolRendererProps<any, any> | null) => void;
108
+ declare const useAssistantToolUI: (tool: AssistantToolUIProps<any, any> | null) => void;
102
109
 
103
- declare const makeTool: <TArgs, TResult>(tool: AssistantToolProps<TArgs, TResult>) => () => null;
110
+ declare const makeAssistantTool: <TArgs, TResult>(tool: AssistantToolProps<TArgs, TResult>) => () => null;
104
111
 
105
- declare const makeToolRenderer: <TArgs, TResult>(tool: AssistantToolRendererProps<TArgs, TResult>) => () => null;
112
+ declare const makeAssistantToolUI: <TArgs, TResult>(tool: AssistantToolUIProps<TArgs, TResult>) => () => null;
106
113
 
107
- export { type AssistantContextValue, type AssistantModelConfigState, type AssistantToolProps, type AssistantToolRendererProps, type ComposerContextValue, type ComposerState, type ContentPartContextValue, type ContentPartState, type EditComposerState, type MessageContextValue, type MessageState, ModelConfigProvider, type ThreadContextValue, ThreadState, type ThreadViewportState, ToolCallContentPartComponent, makeTool, makeToolRenderer, useAssistantContext, useAssistantInstructions, useAssistantTool, useAssistantToolRenderer, useComposerContext, useContentPartContext, useMessageContext, useThreadContext };
114
+ export { type AssistantContextValue, type AssistantModelConfigState, type AssistantToolProps, type AssistantToolUIProps, type ComposerContextValue, type ComposerState, type ContentPartContextValue, type ContentPartState, type EditComposerState, type MessageContextValue, type MessageState, ModelConfigProvider, type ThreadContextValue, ThreadState, type ThreadViewportState, ToolCallContentPartComponent, makeAssistantTool, makeAssistantToolUI, useAssistantContext, useAssistantInstructions, useAssistantTool, useAssistantToolUI, useComposerContext, useContentPartContext, useMessageContext, useThreadContext };
@@ -20,12 +20,12 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
20
20
  // src/experimental.ts
21
21
  var experimental_exports = {};
22
22
  __export(experimental_exports, {
23
- makeTool: () => makeTool,
24
- makeToolRenderer: () => makeToolRenderer,
23
+ makeAssistantTool: () => makeAssistantTool,
24
+ makeAssistantToolUI: () => makeAssistantToolUI,
25
25
  useAssistantContext: () => useAssistantContext,
26
26
  useAssistantInstructions: () => useAssistantInstructions,
27
27
  useAssistantTool: () => useAssistantTool,
28
- useAssistantToolRenderer: () => useAssistantToolRenderer,
28
+ useAssistantToolUI: () => useAssistantToolUI,
29
29
  useComposerContext: () => useComposerContext,
30
30
  useContentPartContext: () => useContentPartContext,
31
31
  useMessageContext: () => useMessageContext,
@@ -119,41 +119,41 @@ var useAssistantInstructions = (instruction) => {
119
119
  // src/model-config/useAssistantTool.tsx
120
120
  var import_react7 = require("react");
121
121
  var useAssistantTool = (tool) => {
122
- const { useModelConfig, useToolRenderers } = useAssistantContext();
122
+ const { useModelConfig, useToolUIs } = useAssistantContext();
123
123
  const registerModelConfigProvider = useModelConfig(
124
124
  (s) => s.registerModelConfigProvider
125
125
  );
126
- const setToolRenderer = useToolRenderers((s) => s.setToolRenderer);
126
+ const setToolUI = useToolUIs((s) => s.setToolUI);
127
127
  (0, import_react7.useEffect)(() => {
128
- const { name, render, ...rest } = tool;
128
+ const { toolName, render, ...rest } = tool;
129
129
  const config = {
130
130
  tools: {
131
- [tool.name]: rest
131
+ [tool.toolName]: rest
132
132
  }
133
133
  };
134
134
  const unsub1 = registerModelConfigProvider(() => config);
135
- const unsub2 = render ? setToolRenderer(name, render) : void 0;
135
+ const unsub2 = render ? setToolUI(toolName, render) : void 0;
136
136
  return () => {
137
137
  unsub1();
138
138
  unsub2?.();
139
139
  };
140
- }, [registerModelConfigProvider, setToolRenderer, tool]);
140
+ }, [registerModelConfigProvider, setToolUI, tool]);
141
141
  };
142
142
 
143
- // src/model-config/useAssistantToolRenderer.tsx
143
+ // src/model-config/useAssistantToolUI.tsx
144
144
  var import_react8 = require("react");
145
- var useAssistantToolRenderer = (tool) => {
146
- const { useToolRenderers } = useAssistantContext();
147
- const setToolRenderer = useToolRenderers((s) => s.setToolRenderer);
145
+ var useAssistantToolUI = (tool) => {
146
+ const { useToolUIs } = useAssistantContext();
147
+ const setToolUI = useToolUIs((s) => s.setToolUI);
148
148
  (0, import_react8.useEffect)(() => {
149
149
  if (!tool) return;
150
- const { name, render } = tool;
151
- return setToolRenderer(name, render);
152
- }, [setToolRenderer, tool]);
150
+ const { toolName, render } = tool;
151
+ return setToolUI(toolName, render);
152
+ }, [setToolUI, tool]);
153
153
  };
154
154
 
155
- // src/model-config/makeTool.tsx
156
- var makeTool = (tool) => {
155
+ // src/model-config/makeAssistantTool.tsx
156
+ var makeAssistantTool = (tool) => {
157
157
  const Tool = () => {
158
158
  useAssistantTool(tool);
159
159
  return null;
@@ -161,22 +161,22 @@ var makeTool = (tool) => {
161
161
  return Tool;
162
162
  };
163
163
 
164
- // src/model-config/makeToolRenderer.tsx
165
- var makeToolRenderer = (tool) => {
166
- const ToolRenderer = () => {
167
- useAssistantToolRenderer(tool);
164
+ // src/model-config/makeAssistantToolUI.tsx
165
+ var makeAssistantToolUI = (tool) => {
166
+ const ToolUI = () => {
167
+ useAssistantToolUI(tool);
168
168
  return null;
169
169
  };
170
- return ToolRenderer;
170
+ return ToolUI;
171
171
  };
172
172
  // Annotate the CommonJS export names for ESM import in node:
173
173
  0 && (module.exports = {
174
- makeTool,
175
- makeToolRenderer,
174
+ makeAssistantTool,
175
+ makeAssistantToolUI,
176
176
  useAssistantContext,
177
177
  useAssistantInstructions,
178
178
  useAssistantTool,
179
- useAssistantToolRenderer,
179
+ useAssistantToolUI,
180
180
  useComposerContext,
181
181
  useContentPartContext,
182
182
  useMessageContext,
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/experimental.ts","../src/context/AssistantContext.ts","../src/context/ThreadContext.ts","../src/context/ComposerContext.ts","../src/context/MessageContext.ts","../src/context/ContentPartContext.ts","../src/model-config/useAssistantInstructions.tsx","../src/model-config/useAssistantTool.tsx","../src/model-config/useAssistantToolRenderer.tsx","../src/model-config/makeTool.tsx","../src/model-config/makeToolRenderer.tsx"],"sourcesContent":["export type {\n ImageContentPart,\n ToolCallContentPart,\n UIContentPart,\n} from \"./utils/AssistantTypes\";\n\nexport type {\n ModelConfigProvider,\n ModelConfig,\n} from \"./utils/ModelConfigTypes\";\n\nexport type {\n TextContentPartProps,\n TextContentPartComponent,\n ImageContentPartProps,\n ImageContentPartComponent,\n UIContentPartProps,\n UIContentPartComponent,\n ToolCallContentPartProps,\n ToolCallContentPartComponent,\n} from \"./primitives/message/ContentPartComponentTypes\";\n\nexport * from \"./context\";\nexport { useAssistantInstructions } from \"./model-config/useAssistantInstructions\";\nexport {\n useAssistantTool,\n type AssistantToolProps,\n} from \"./model-config/useAssistantTool\";\nexport {\n useAssistantToolRenderer,\n type AssistantToolRendererProps,\n} from \"./model-config/useAssistantToolRenderer\";\nexport { makeTool } from \"./model-config/makeTool\";\nexport { makeToolRenderer } from \"./model-config/makeToolRenderer\";\n","import { createContext, useContext } from \"react\";\nimport type { StoreApi, UseBoundStore } from \"zustand\";\nimport type { AssistantModelConfigState } from \"./stores/AssistantModelConfig\";\nimport type { AssistantToolRenderersState } from \"./stores/AssistantToolRenderers\";\n\nexport type AssistantContextValue = {\n useModelConfig: UseBoundStore<StoreApi<AssistantModelConfigState>>;\n useToolRenderers: UseBoundStore<StoreApi<AssistantToolRenderersState>>;\n};\n\nexport const AssistantContext = createContext<AssistantContextValue | null>(\n null,\n);\n\nexport const useAssistantContext = (): AssistantContextValue => {\n const context = useContext(AssistantContext);\n if (!context)\n throw new Error(\n \"This component must be used within an AssistantRuntimeProvider.\",\n );\n return context;\n};\n","import { createContext, useContext } from \"react\";\nimport type { StoreApi, UseBoundStore } from \"zustand\";\nimport type { ComposerState } from \"./stores/Composer\";\nimport type { ThreadState } from \"./stores/Thread\";\nimport type { ThreadViewportState } from \"./stores/ThreadViewport\";\n\nexport type ThreadContextValue = {\n useThread: UseBoundStore<StoreApi<ThreadState>>;\n useComposer: UseBoundStore<StoreApi<ComposerState>>;\n useViewport: UseBoundStore<StoreApi<ThreadViewportState>>;\n};\n\nexport const ThreadContext = createContext<ThreadContextValue | null>(null);\n\nexport const useThreadContext = (): ThreadContextValue => {\n const context = useContext(ThreadContext);\n if (!context)\n throw new Error(\n \"This component must be used within an AssistantRuntimeProvider.\",\n );\n return context;\n};\n","import { useContext, useMemo } from \"react\";\nimport type { StoreApi, UseBoundStore } from \"zustand\";\nimport { MessageContext } from \"./MessageContext\";\nimport { useThreadContext } from \"./ThreadContext\";\nimport type { ComposerState } from \"./stores/Composer\";\nimport type { EditComposerState } from \"./stores/MessageComposer\";\n\nexport type ComposerContextValue = {\n useComposer: UseBoundStore<StoreApi<EditComposerState | ComposerState>>;\n type: \"edit\" | \"new\";\n};\n\nexport const useComposerContext = (): ComposerContextValue => {\n const { useComposer } = useThreadContext();\n const { useComposer: useEditComposer } = useContext(MessageContext) ?? {};\n return useMemo(\n () => ({\n useComposer: (useEditComposer ?? useComposer) as UseBoundStore<\n StoreApi<EditComposerState | ComposerState>\n >,\n type: useEditComposer ? (\"edit\" as const) : (\"new\" as const),\n }),\n [useEditComposer, useComposer],\n );\n};\n","import { createContext, useContext } from \"react\";\nimport type { StoreApi, UseBoundStore } from \"zustand\";\nimport type { MessageState } from \"./stores/Message\";\nimport type { EditComposerState } from \"./stores/MessageComposer\";\n\nexport type MessageContextValue = {\n useMessage: UseBoundStore<StoreApi<MessageState>>;\n useComposer: UseBoundStore<StoreApi<EditComposerState>>;\n};\n\nexport const MessageContext = createContext<MessageContextValue | null>(null);\n\nexport const useMessageContext = () => {\n const context = useContext(MessageContext);\n if (!context)\n throw new Error(\n \"This component can only be used inside a component passed to <ThreadPrimitive.Messages components={...} />.\",\n );\n return context;\n};\n","import { createContext, useContext } from \"react\";\nimport type { StoreApi, UseBoundStore } from \"zustand\";\nimport type { ContentPartState } from \"./stores/ContentPart\";\n\nexport type ContentPartContextValue = {\n useContentPart: UseBoundStore<StoreApi<ContentPartState>>;\n};\n\nexport const ContentPartContext = createContext<ContentPartContextValue | null>(\n null,\n);\n\nexport const useContentPartContext = (): ContentPartContextValue => {\n const context = useContext(ContentPartContext);\n if (!context)\n throw new Error(\n \"This component can only be used inside a component passed to <MessagePrimitive.Content components={...} >.\",\n );\n return context;\n};\n","\"use client\";\n\nimport { useEffect } from \"react\";\nimport { useAssistantContext } from \"../context/AssistantContext\";\n\nexport const useAssistantInstructions = (instruction: string) => {\n const { useModelConfig } = useAssistantContext();\n const registerModelConfigProvider = useModelConfig(\n (s) => s.registerModelConfigProvider,\n );\n useEffect(() => {\n const config = {\n system: instruction,\n };\n return registerModelConfigProvider(() => config);\n }, [registerModelConfigProvider, instruction]);\n};\n","\"use client\";\n\nimport { useEffect } from \"react\";\nimport { useAssistantContext } from \"../context/AssistantContext\";\nimport type { ToolCallContentPartComponent } from \"../primitives/message/ContentPartComponentTypes\";\nimport type { Tool } from \"../utils/ModelConfigTypes\";\n\nexport type AssistantToolProps<TArgs, TResult> = Tool<TArgs, TResult> & {\n name: string;\n render?: ToolCallContentPartComponent<TArgs, TResult>;\n};\n\nexport const useAssistantTool = <TArgs, TResult>(\n tool: AssistantToolProps<TArgs, TResult>,\n) => {\n const { useModelConfig, useToolRenderers } = useAssistantContext();\n const registerModelConfigProvider = useModelConfig(\n (s) => s.registerModelConfigProvider,\n );\n const setToolRenderer = useToolRenderers((s) => s.setToolRenderer);\n useEffect(() => {\n const { name, render, ...rest } = tool;\n const config = {\n tools: {\n [tool.name]: rest,\n },\n };\n const unsub1 = registerModelConfigProvider(() => config);\n const unsub2 = render ? setToolRenderer(name, render) : undefined;\n return () => {\n unsub1();\n unsub2?.();\n };\n }, [registerModelConfigProvider, setToolRenderer, tool]);\n};\n","\"use client\";\nimport { useEffect } from \"react\";\nimport { useAssistantContext } from \"../context/AssistantContext\";\nimport type { ToolCallContentPartComponent } from \"../primitives/message/ContentPartComponentTypes\";\n\nexport type AssistantToolRendererProps<TArgs, TResult> = {\n name: string;\n render: ToolCallContentPartComponent<TArgs, TResult>;\n};\n\nexport const useAssistantToolRenderer = (\n tool: AssistantToolRendererProps<any, any> | null,\n) => {\n const { useToolRenderers } = useAssistantContext();\n const setToolRenderer = useToolRenderers((s) => s.setToolRenderer);\n useEffect(() => {\n if (!tool) return;\n const { name, render } = tool;\n return setToolRenderer(name, render);\n }, [setToolRenderer, tool]);\n};\n","\"use client\";\nimport { type AssistantToolProps, useAssistantTool } from \"./useAssistantTool\";\n\nexport const makeTool = <TArgs, TResult>(\n tool: AssistantToolProps<TArgs, TResult>,\n) => {\n const Tool = () => {\n useAssistantTool(tool);\n return null;\n };\n return Tool;\n};\n","\"use client\";\nimport {\n type AssistantToolRendererProps,\n useAssistantToolRenderer,\n} from \"./useAssistantToolRenderer\";\n\nexport const makeToolRenderer = <TArgs, TResult>(\n tool: AssistantToolRendererProps<TArgs, TResult>,\n) => {\n const ToolRenderer = () => {\n useAssistantToolRenderer(tool);\n return null;\n };\n return ToolRenderer;\n};\n"],"mappings":"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","names":["import_react","import_react","import_react","import_react","import_react","import_react","import_react"]}
1
+ {"version":3,"sources":["../src/experimental.ts","../src/context/AssistantContext.ts","../src/context/ThreadContext.ts","../src/context/ComposerContext.ts","../src/context/MessageContext.ts","../src/context/ContentPartContext.ts","../src/model-config/useAssistantInstructions.tsx","../src/model-config/useAssistantTool.tsx","../src/model-config/useAssistantToolUI.tsx","../src/model-config/makeAssistantTool.tsx","../src/model-config/makeAssistantToolUI.tsx"],"sourcesContent":["export type {\n ImageContentPart,\n ToolCallContentPart,\n UIContentPart,\n} from \"./utils/AssistantTypes\";\n\nexport type {\n ModelConfigProvider,\n ModelConfig,\n} from \"./utils/ModelConfigTypes\";\n\nexport type {\n TextContentPartProps,\n TextContentPartComponent,\n ImageContentPartProps,\n ImageContentPartComponent,\n UIContentPartProps,\n UIContentPartComponent,\n ToolCallContentPartProps,\n ToolCallContentPartComponent,\n} from \"./primitives/message/ContentPartComponentTypes\";\n\nexport * from \"./context\";\nexport { useAssistantInstructions } from \"./model-config/useAssistantInstructions\";\nexport {\n useAssistantTool,\n type AssistantToolProps,\n} from \"./model-config/useAssistantTool\";\nexport {\n useAssistantToolUI,\n type AssistantToolUIProps,\n} from \"./model-config/useAssistantToolUI\";\nexport { makeAssistantTool } from \"./model-config/makeAssistantTool\";\nexport { makeAssistantToolUI } from \"./model-config/makeAssistantToolUI\";\n","import { createContext, useContext } from \"react\";\nimport type { AssistantModelConfigState } from \"./stores/AssistantModelConfig\";\nimport type { AssistantToolUIsState } from \"./stores/AssistantToolUIs\";\nimport { ReadonlyStore } from \"./ReadonlyStore\";\n\nexport type AssistantContextValue = {\n useModelConfig: ReadonlyStore<AssistantModelConfigState>;\n useToolUIs: ReadonlyStore<AssistantToolUIsState>;\n};\n\nexport const AssistantContext = createContext<AssistantContextValue | null>(\n null,\n);\n\nexport const useAssistantContext = (): AssistantContextValue => {\n const context = useContext(AssistantContext);\n if (!context)\n throw new Error(\n \"This component must be used within an AssistantRuntimeProvider.\",\n );\n return context;\n};\n","import { createContext, useContext } from \"react\";\nimport type { ComposerState } from \"./stores/Composer\";\nimport type { ThreadState } from \"./stores/Thread\";\nimport type { ThreadViewportState } from \"./stores/ThreadViewport\";\nimport { ThreadActionsState } from \"./stores/ThreadActions\";\nimport { ReadonlyStore } from \"./ReadonlyStore\";\n\nexport type ThreadContextValue = {\n useThread: ReadonlyStore<ThreadState>;\n useThreadActions: ReadonlyStore<ThreadActionsState>;\n useComposer: ReadonlyStore<ComposerState>;\n useViewport: ReadonlyStore<ThreadViewportState>;\n};\n\nexport const ThreadContext = createContext<ThreadContextValue | null>(null);\n\nexport const useThreadContext = (): ThreadContextValue => {\n const context = useContext(ThreadContext);\n if (!context)\n throw new Error(\n \"This component must be used within an AssistantRuntimeProvider.\",\n );\n return context;\n};\n","import { useContext, useMemo } from \"react\";\nimport { MessageContext } from \"./MessageContext\";\nimport { useThreadContext } from \"./ThreadContext\";\nimport type { ComposerState } from \"./stores/Composer\";\nimport type { EditComposerState } from \"./stores/MessageComposer\";\nimport { ReadonlyStore } from \"./ReadonlyStore\";\n\nexport type ComposerContextValue = {\n useComposer: ReadonlyStore<EditComposerState | ComposerState>;\n type: \"edit\" | \"new\";\n};\n\nexport const useComposerContext = (): ComposerContextValue => {\n const { useComposer } = useThreadContext();\n const { useComposer: useEditComposer } = useContext(MessageContext) ?? {};\n return useMemo(\n () => ({\n useComposer: (useEditComposer ?? useComposer) as ReadonlyStore<\n EditComposerState | ComposerState\n >,\n type: useEditComposer ? (\"edit\" as const) : (\"new\" as const),\n }),\n [useEditComposer, useComposer],\n );\n};\n","import { createContext, useContext } from \"react\";\nimport type { MessageState } from \"./stores/Message\";\nimport type { EditComposerState } from \"./stores/MessageComposer\";\nimport { ReadonlyStore } from \"./ReadonlyStore\";\nimport { MessageUtilsState } from \"./stores/MessageUtils\";\n\nexport type MessageContextValue = {\n useMessage: ReadonlyStore<MessageState>;\n useMessageUtils: ReadonlyStore<MessageUtilsState>;\n useComposer: ReadonlyStore<EditComposerState>;\n};\n\nexport const MessageContext = createContext<MessageContextValue | null>(null);\n\nexport const useMessageContext = () => {\n const context = useContext(MessageContext);\n if (!context)\n throw new Error(\n \"This component can only be used inside a component passed to <ThreadPrimitive.Messages components={...} />.\",\n );\n return context;\n};\n","import { createContext, useContext } from \"react\";\nimport type { ContentPartState } from \"./stores/ContentPart\";\nimport { ReadonlyStore } from \"./ReadonlyStore\";\n\nexport type ContentPartContextValue = {\n useContentPart: ReadonlyStore<ContentPartState>;\n};\n\nexport const ContentPartContext = createContext<ContentPartContextValue | null>(\n null,\n);\n\nexport const useContentPartContext = (): ContentPartContextValue => {\n const context = useContext(ContentPartContext);\n if (!context)\n throw new Error(\n \"This component can only be used inside a component passed to <MessagePrimitive.Content components={...} >.\",\n );\n return context;\n};\n","\"use client\";\n\nimport { useEffect } from \"react\";\nimport { useAssistantContext } from \"../context/AssistantContext\";\n\nexport const useAssistantInstructions = (instruction: string) => {\n const { useModelConfig } = useAssistantContext();\n const registerModelConfigProvider = useModelConfig(\n (s) => s.registerModelConfigProvider,\n );\n useEffect(() => {\n const config = {\n system: instruction,\n };\n return registerModelConfigProvider(() => config);\n }, [registerModelConfigProvider, instruction]);\n};\n","\"use client\";\n\nimport { useEffect } from \"react\";\nimport { useAssistantContext } from \"../context/AssistantContext\";\nimport type { ToolCallContentPartComponent } from \"../primitives/message/ContentPartComponentTypes\";\nimport type { Tool } from \"../utils/ModelConfigTypes\";\n\nexport type AssistantToolProps<TArgs, TResult> = Tool<TArgs, TResult> & {\n toolName: string;\n render?: ToolCallContentPartComponent<TArgs, TResult>;\n};\n\nexport const useAssistantTool = <TArgs, TResult>(\n tool: AssistantToolProps<TArgs, TResult>,\n) => {\n const { useModelConfig, useToolUIs } = useAssistantContext();\n const registerModelConfigProvider = useModelConfig(\n (s) => s.registerModelConfigProvider,\n );\n const setToolUI = useToolUIs((s) => s.setToolUI);\n useEffect(() => {\n const { toolName, render, ...rest } = tool;\n const config = {\n tools: {\n [tool.toolName]: rest,\n },\n };\n const unsub1 = registerModelConfigProvider(() => config);\n const unsub2 = render ? setToolUI(toolName, render) : undefined;\n return () => {\n unsub1();\n unsub2?.();\n };\n }, [registerModelConfigProvider, setToolUI, tool]);\n};\n","\"use client\";\nimport { useEffect } from \"react\";\nimport { useAssistantContext } from \"../context/AssistantContext\";\nimport type { ToolCallContentPartComponent } from \"../primitives/message/ContentPartComponentTypes\";\n\nexport type AssistantToolUIProps<TArgs, TResult> = {\n toolName: string;\n render: ToolCallContentPartComponent<TArgs, TResult>;\n};\n\nexport const useAssistantToolUI = (\n tool: AssistantToolUIProps<any, any> | null,\n) => {\n const { useToolUIs } = useAssistantContext();\n const setToolUI = useToolUIs((s) => s.setToolUI);\n useEffect(() => {\n if (!tool) return;\n const { toolName, render } = tool;\n return setToolUI(toolName, render);\n }, [setToolUI, tool]);\n};\n","\"use client\";\nimport { type AssistantToolProps, useAssistantTool } from \"./useAssistantTool\";\n\nexport const makeAssistantTool = <TArgs, TResult>(\n tool: AssistantToolProps<TArgs, TResult>,\n) => {\n const Tool = () => {\n useAssistantTool(tool);\n return null;\n };\n return Tool;\n};\n","\"use client\";\nimport {\n type AssistantToolUIProps,\n useAssistantToolUI,\n} from \"./useAssistantToolUI\";\n\nexport const makeAssistantToolUI = <TArgs, TResult>(\n tool: AssistantToolUIProps<TArgs, TResult>,\n) => {\n const ToolUI = () => {\n useAssistantToolUI(tool);\n return null;\n };\n return ToolUI;\n};\n"],"mappings":"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","names":["import_react","import_react","import_react","import_react","import_react","import_react","import_react"]}