@assistant-ui/react 0.11.15 → 0.11.17

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 (38) hide show
  1. package/dist/context/providers/{AttachmentProvider.d.ts → AttachmentByIndexProvider.d.ts} +1 -1
  2. package/dist/context/providers/AttachmentByIndexProvider.d.ts.map +1 -0
  3. package/dist/context/providers/{AttachmentProvider.js → AttachmentByIndexProvider.js} +2 -2
  4. package/dist/context/providers/AttachmentByIndexProvider.js.map +1 -0
  5. package/dist/context/providers/MessageByIndexProvider.d.ts +5 -0
  6. package/dist/context/providers/MessageByIndexProvider.d.ts.map +1 -0
  7. package/dist/context/providers/MessageByIndexProvider.js +47 -0
  8. package/dist/context/providers/MessageByIndexProvider.js.map +1 -0
  9. package/dist/context/providers/MessageProvider.d.ts +9 -3
  10. package/dist/context/providers/MessageProvider.d.ts.map +1 -1
  11. package/dist/context/providers/MessageProvider.js +191 -28
  12. package/dist/context/providers/MessageProvider.js.map +1 -1
  13. package/dist/context/providers/{PartProvider.d.ts → PartByIndexProvider.d.ts} +1 -1
  14. package/dist/context/providers/PartByIndexProvider.d.ts.map +1 -0
  15. package/dist/context/providers/{PartProvider.js → PartByIndexProvider.js} +2 -2
  16. package/dist/context/providers/PartByIndexProvider.js.map +1 -0
  17. package/dist/context/providers/index.d.ts +4 -3
  18. package/dist/context/providers/index.d.ts.map +1 -1
  19. package/dist/context/providers/index.js +5 -3
  20. package/dist/context/providers/index.js.map +1 -1
  21. package/dist/context/react/AssistantApiContext.d.ts +3 -0
  22. package/dist/context/react/AssistantApiContext.d.ts.map +1 -1
  23. package/dist/context/react/AssistantApiContext.js.map +1 -1
  24. package/dist/legacy-runtime/runtime-cores/external-store/createMessageConverter.d.ts +1 -1
  25. package/dist/legacy-runtime/runtime-cores/external-store/createMessageConverter.js +2 -2
  26. package/dist/legacy-runtime/runtime-cores/external-store/createMessageConverter.js.map +1 -1
  27. package/package.json +1 -1
  28. package/src/context/providers/MessageByIndexProvider.tsx +52 -0
  29. package/src/context/providers/MessageProvider.tsx +236 -37
  30. package/src/context/providers/index.ts +4 -3
  31. package/src/context/react/AssistantApiContext.tsx +9 -4
  32. package/src/legacy-runtime/runtime-cores/external-store/createMessageConverter.tsx +2 -2
  33. package/dist/context/providers/AttachmentProvider.d.ts.map +0 -1
  34. package/dist/context/providers/AttachmentProvider.js.map +0 -1
  35. package/dist/context/providers/PartProvider.d.ts.map +0 -1
  36. package/dist/context/providers/PartProvider.js.map +0 -1
  37. /package/src/context/providers/{AttachmentProvider.tsx → AttachmentByIndexProvider.tsx} +0 -0
  38. /package/src/context/providers/{PartProvider.tsx → PartByIndexProvider.tsx} +0 -0
@@ -5,4 +5,4 @@ export declare const MessageAttachmentByIndexProvider: FC<PropsWithChildren<{
5
5
  export declare const ComposerAttachmentByIndexProvider: FC<PropsWithChildren<{
6
6
  index: number;
7
7
  }>>;
8
- //# sourceMappingURL=AttachmentProvider.d.ts.map
8
+ //# sourceMappingURL=AttachmentByIndexProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AttachmentByIndexProvider.d.ts","sourceRoot":"","sources":["../../../src/context/providers/AttachmentByIndexProvider.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAW,KAAK,EAAE,EAAE,KAAK,iBAAiB,EAAE,MAAM,OAAO,CAAC;AASjE,eAAO,MAAM,gCAAgC,EAAE,EAAE,CAC/C,iBAAiB,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;CACf,CAAC,CAcH,CAAC;AAEF,eAAO,MAAM,iCAAiC,EAAE,EAAE,CAChD,iBAAiB,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;CACf,CAAC,CAcH,CAAC"}
@@ -1,6 +1,6 @@
1
1
  "use client";
2
2
 
3
- // src/context/providers/AttachmentProvider.tsx
3
+ // src/context/providers/AttachmentByIndexProvider.tsx
4
4
  import { useMemo } from "react";
5
5
  import {
6
6
  AssistantProvider,
@@ -38,4 +38,4 @@ export {
38
38
  ComposerAttachmentByIndexProvider,
39
39
  MessageAttachmentByIndexProvider
40
40
  };
41
- //# sourceMappingURL=AttachmentProvider.js.map
41
+ //# sourceMappingURL=AttachmentByIndexProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/context/providers/AttachmentByIndexProvider.tsx"],"sourcesContent":["\"use client\";\n\nimport { useMemo, type FC, type PropsWithChildren } from \"react\";\n\nimport {\n AssistantApi,\n AssistantProvider,\n useAssistantApi,\n createAssistantApiField,\n} from \"../react/AssistantApiContext\";\n\nexport const MessageAttachmentByIndexProvider: FC<\n PropsWithChildren<{\n index: number;\n }>\n> = ({ index, children }) => {\n const api = useAssistantApi();\n const api2 = useMemo(() => {\n return {\n attachment: createAssistantApiField({\n source: \"message\",\n query: { type: \"index\", index },\n get: () => api.message().attachment({ index }),\n }),\n } satisfies Partial<AssistantApi>;\n }, [api, index]);\n\n return <AssistantProvider api={api2}>{children}</AssistantProvider>;\n};\n\nexport const ComposerAttachmentByIndexProvider: FC<\n PropsWithChildren<{\n index: number;\n }>\n> = ({ index, children }) => {\n const api = useAssistantApi();\n const api2 = useMemo(() => {\n return {\n attachment: createAssistantApiField({\n source: \"composer\",\n query: { type: \"index\", index },\n get: () => api.composer().attachment({ index }),\n }),\n } satisfies Partial<AssistantApi>;\n }, [api, index]);\n\n return <AssistantProvider api={api2}>{children}</AssistantProvider>;\n};\n"],"mappings":";;;AAEA,SAAS,eAAgD;AAEzD;AAAA,EAEE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAkBE;AAhBF,IAAM,mCAIT,CAAC,EAAE,OAAO,SAAS,MAAM;AAC3B,QAAM,MAAM,gBAAgB;AAC5B,QAAM,OAAO,QAAQ,MAAM;AACzB,WAAO;AAAA,MACL,YAAY,wBAAwB;AAAA,QAClC,QAAQ;AAAA,QACR,OAAO,EAAE,MAAM,SAAS,MAAM;AAAA,QAC9B,KAAK,MAAM,IAAI,QAAQ,EAAE,WAAW,EAAE,MAAM,CAAC;AAAA,MAC/C,CAAC;AAAA,IACH;AAAA,EACF,GAAG,CAAC,KAAK,KAAK,CAAC;AAEf,SAAO,oBAAC,qBAAkB,KAAK,MAAO,UAAS;AACjD;AAEO,IAAM,oCAIT,CAAC,EAAE,OAAO,SAAS,MAAM;AAC3B,QAAM,MAAM,gBAAgB;AAC5B,QAAM,OAAO,QAAQ,MAAM;AACzB,WAAO;AAAA,MACL,YAAY,wBAAwB;AAAA,QAClC,QAAQ;AAAA,QACR,OAAO,EAAE,MAAM,SAAS,MAAM;AAAA,QAC9B,KAAK,MAAM,IAAI,SAAS,EAAE,WAAW,EAAE,MAAM,CAAC;AAAA,MAChD,CAAC;AAAA,IACH;AAAA,EACF,GAAG,CAAC,KAAK,KAAK,CAAC;AAEf,SAAO,oBAAC,qBAAkB,KAAK,MAAO,UAAS;AACjD;","names":[]}
@@ -0,0 +1,5 @@
1
+ import { type FC, type PropsWithChildren } from "react";
2
+ export declare const MessageByIndexProvider: FC<PropsWithChildren<{
3
+ index: number;
4
+ }>>;
5
+ //# sourceMappingURL=MessageByIndexProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MessageByIndexProvider.d.ts","sourceRoot":"","sources":["../../../src/context/providers/MessageByIndexProvider.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAW,KAAK,EAAE,EAAE,KAAK,iBAAiB,EAAE,MAAM,OAAO,CAAC;AAYjE,eAAO,MAAM,sBAAsB,EAAE,EAAE,CACrC,iBAAiB,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;CACf,CAAC,CAkCH,CAAC"}
@@ -0,0 +1,47 @@
1
+ "use client";
2
+
3
+ // src/context/providers/MessageByIndexProvider.tsx
4
+ import { useMemo } from "react";
5
+ import {
6
+ AssistantProvider,
7
+ useAssistantApi,
8
+ createAssistantApiField
9
+ } from "../react/AssistantApiContext.js";
10
+ import {
11
+ checkEventScope,
12
+ normalizeEventSelector
13
+ } from "../../types/EventTypes.js";
14
+ import { jsx } from "react/jsx-runtime";
15
+ var MessageByIndexProvider = ({ index, children }) => {
16
+ const api = useAssistantApi();
17
+ const api2 = useMemo(() => {
18
+ const getMessage = () => api.thread().message({ index });
19
+ return {
20
+ message: createAssistantApiField({
21
+ source: "thread",
22
+ query: { type: "index", index },
23
+ get: () => getMessage()
24
+ }),
25
+ composer: createAssistantApiField({
26
+ source: "message",
27
+ query: {},
28
+ get: () => getMessage().composer
29
+ }),
30
+ on(selector, callback) {
31
+ const { event, scope } = normalizeEventSelector(selector);
32
+ if (!checkEventScope("composer", scope, event) && !checkEventScope("message", scope, event))
33
+ return api.on(selector, callback);
34
+ return api.on({ scope: "thread", event }, (e) => {
35
+ if (e.messageId === getMessage().getState().id) {
36
+ callback(e);
37
+ }
38
+ });
39
+ }
40
+ };
41
+ }, [api, index]);
42
+ return /* @__PURE__ */ jsx(AssistantProvider, { api: api2, children });
43
+ };
44
+ export {
45
+ MessageByIndexProvider
46
+ };
47
+ //# sourceMappingURL=MessageByIndexProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/context/providers/MessageByIndexProvider.tsx"],"sourcesContent":["\"use client\";\n\nimport { useMemo, type FC, type PropsWithChildren } from \"react\";\nimport {\n AssistantApi,\n AssistantProvider,\n useAssistantApi,\n createAssistantApiField,\n} from \"../react/AssistantApiContext\";\nimport {\n checkEventScope,\n normalizeEventSelector,\n} from \"../../types/EventTypes\";\n\nexport const MessageByIndexProvider: FC<\n PropsWithChildren<{\n index: number;\n }>\n> = ({ index, children }) => {\n const api = useAssistantApi();\n const api2 = useMemo(() => {\n const getMessage = () => api.thread().message({ index });\n return {\n message: createAssistantApiField({\n source: \"thread\",\n query: { type: \"index\", index },\n get: () => getMessage(),\n }),\n composer: createAssistantApiField({\n source: \"message\",\n query: {},\n get: () => getMessage().composer,\n }),\n on(selector, callback) {\n const { event, scope } = normalizeEventSelector(selector);\n if (\n !checkEventScope(\"composer\", scope, event) &&\n !checkEventScope(\"message\", scope, event)\n )\n return api.on(selector, callback);\n\n return api.on({ scope: \"thread\", event }, (e) => {\n if (e.messageId === getMessage().getState().id) {\n callback(e);\n }\n });\n },\n } satisfies Partial<AssistantApi>;\n }, [api, index]);\n\n return <AssistantProvider api={api2}>{children}</AssistantProvider>;\n};\n"],"mappings":";;;AAEA,SAAS,eAAgD;AACzD;AAAA,EAEE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP;AAAA,EACE;AAAA,EACA;AAAA,OACK;AAsCE;AApCF,IAAM,yBAIT,CAAC,EAAE,OAAO,SAAS,MAAM;AAC3B,QAAM,MAAM,gBAAgB;AAC5B,QAAM,OAAO,QAAQ,MAAM;AACzB,UAAM,aAAa,MAAM,IAAI,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC;AACvD,WAAO;AAAA,MACL,SAAS,wBAAwB;AAAA,QAC/B,QAAQ;AAAA,QACR,OAAO,EAAE,MAAM,SAAS,MAAM;AAAA,QAC9B,KAAK,MAAM,WAAW;AAAA,MACxB,CAAC;AAAA,MACD,UAAU,wBAAwB;AAAA,QAChC,QAAQ;AAAA,QACR,OAAO,CAAC;AAAA,QACR,KAAK,MAAM,WAAW,EAAE;AAAA,MAC1B,CAAC;AAAA,MACD,GAAG,UAAU,UAAU;AACrB,cAAM,EAAE,OAAO,MAAM,IAAI,uBAAuB,QAAQ;AACxD,YACE,CAAC,gBAAgB,YAAY,OAAO,KAAK,KACzC,CAAC,gBAAgB,WAAW,OAAO,KAAK;AAExC,iBAAO,IAAI,GAAG,UAAU,QAAQ;AAElC,eAAO,IAAI,GAAG,EAAE,OAAO,UAAU,MAAM,GAAG,CAAC,MAAM;AAC/C,cAAI,EAAE,cAAc,WAAW,EAAE,SAAS,EAAE,IAAI;AAC9C,qBAAS,CAAC;AAAA,UACZ;AAAA,QACF,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF,GAAG,CAAC,KAAK,KAAK,CAAC;AAEf,SAAO,oBAAC,qBAAkB,KAAK,MAAO,UAAS;AACjD;","names":[]}
@@ -1,5 +1,11 @@
1
1
  import { type FC, type PropsWithChildren } from "react";
2
- export declare const MessageByIndexProvider: FC<PropsWithChildren<{
3
- index: number;
4
- }>>;
2
+ import { ThreadMessage } from "../../types/AssistantTypes";
3
+ type ThreadMessageClientProps = {
4
+ message: ThreadMessage;
5
+ isLast?: boolean;
6
+ branchNumber?: number;
7
+ branchCount?: number;
8
+ };
9
+ export declare const MessageProvider: FC<PropsWithChildren<ThreadMessageClientProps>>;
10
+ export {};
5
11
  //# sourceMappingURL=MessageProvider.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"MessageProvider.d.ts","sourceRoot":"","sources":["../../../src/context/providers/MessageProvider.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAW,KAAK,EAAE,EAAE,KAAK,iBAAiB,EAAE,MAAM,OAAO,CAAC;AAYjE,eAAO,MAAM,sBAAsB,EAAE,EAAE,CACrC,iBAAiB,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;CACf,CAAC,CAkCH,CAAC"}
1
+ {"version":3,"file":"MessageProvider.d.ts","sourceRoot":"","sources":["../../../src/context/providers/MessageProvider.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAW,KAAK,EAAE,EAAE,KAAK,iBAAiB,EAAE,MAAM,OAAO,CAAC;AAkBjE,OAAO,EAEL,aAAa,EAEd,MAAM,4BAA4B,CAAC;AA4GpC,KAAK,wBAAwB,GAAG;IAC9B,OAAO,EAAE,aAAa,CAAC;IACvB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAgGF,eAAO,MAAM,eAAe,EAAE,EAAE,CAC9B,iBAAiB,CAAC,wBAAwB,CAAC,CAgB5C,CAAC"}
@@ -4,44 +4,207 @@
4
4
  import { useMemo } from "react";
5
5
  import {
6
6
  AssistantProvider,
7
- useAssistantApi,
8
7
  createAssistantApiField
9
8
  } from "../react/AssistantApiContext.js";
10
9
  import {
11
- checkEventScope,
12
- normalizeEventSelector
13
- } from "../../types/EventTypes.js";
10
+ resource,
11
+ tapInlineResource,
12
+ tapMemo,
13
+ tapState
14
+ } from "@assistant-ui/tap";
15
+ import { useResource } from "@assistant-ui/tap/react";
16
+ import { asStore, tapApi } from "../../utils/tap-store/index.js";
17
+ import { tapLookupResources } from "../../client/util-hooks/tapLookupResources.js";
14
18
  import { jsx } from "react/jsx-runtime";
15
- var MessageByIndexProvider = ({ index, children }) => {
16
- const api = useAssistantApi();
17
- const api2 = useMemo(() => {
18
- const getMessage = () => api.thread().message({ index });
19
+ var NoOpComposerClient = resource(({ type }) => {
20
+ const state = tapMemo(() => {
21
+ return {
22
+ isEditing: false,
23
+ isEmpty: true,
24
+ text: "",
25
+ attachmentAccept: "*",
26
+ attachments: [],
27
+ role: "user",
28
+ runConfig: {},
29
+ canCancel: false,
30
+ type
31
+ };
32
+ }, [type]);
33
+ return tapApi({
34
+ getState: () => state,
35
+ setText: () => {
36
+ throw new Error("Not supported");
37
+ },
38
+ setRole: () => {
39
+ throw new Error("Not supported");
40
+ },
41
+ setRunConfig: () => {
42
+ throw new Error("Not supported");
43
+ },
44
+ addAttachment: () => {
45
+ throw new Error("Not supported");
46
+ },
47
+ clearAttachments: () => {
48
+ throw new Error("Not supported");
49
+ },
50
+ attachment: () => {
51
+ throw new Error("Not supported");
52
+ },
53
+ reset: () => {
54
+ throw new Error("Not supported");
55
+ },
56
+ send: () => {
57
+ throw new Error("Not supported");
58
+ },
59
+ cancel: () => {
60
+ throw new Error("Not supported");
61
+ },
62
+ beginEdit: () => {
63
+ throw new Error("Not supported");
64
+ },
65
+ __internal_getRuntime: () => null
66
+ });
67
+ });
68
+ var ThreadMessagePartClient = resource(
69
+ ({ part }) => {
70
+ const state = tapMemo(() => {
71
+ return {
72
+ ...part,
73
+ status: { type: "complete" }
74
+ };
75
+ }, [part]);
76
+ return tapApi(
77
+ {
78
+ getState: () => state,
79
+ addToolResult: () => {
80
+ throw new Error("Not supported");
81
+ },
82
+ __internal_getRuntime: () => null
83
+ },
84
+ {
85
+ key: state.type === "tool-call" ? "toolCallId-" + state.toolCallId : void 0
86
+ }
87
+ );
88
+ }
89
+ );
90
+ var ThreadMessageAttachmentClient = resource(
91
+ ({ attachment }) => {
92
+ return tapApi(
93
+ {
94
+ getState: () => attachment,
95
+ remove: () => {
96
+ throw new Error("Not supported");
97
+ },
98
+ __internal_getRuntime: () => null
99
+ },
100
+ {
101
+ key: attachment.id
102
+ }
103
+ );
104
+ }
105
+ );
106
+ var ThreadMessageClient = resource(
107
+ ({
108
+ message,
109
+ isLast = true,
110
+ branchNumber = 1,
111
+ branchCount = 1
112
+ }) => {
113
+ const [isCopiedState, setIsCopied] = tapState(false);
114
+ const [isHoveringState, setIsHovering] = tapState(false);
115
+ const parts = tapLookupResources(
116
+ message.content.map(
117
+ (_, idx) => ThreadMessagePartClient({ part: message.content[idx] }, { key: idx })
118
+ )
119
+ );
120
+ const attachments = tapLookupResources(
121
+ message.attachments?.map(
122
+ (_, idx) => ThreadMessageAttachmentClient(
123
+ { attachment: message.attachments[idx] },
124
+ { key: idx }
125
+ )
126
+ ) ?? []
127
+ );
128
+ const composerState = tapInlineResource(
129
+ NoOpComposerClient({ type: "edit" })
130
+ );
131
+ const state = tapMemo(() => {
132
+ return {
133
+ ...message,
134
+ parts: parts.state,
135
+ composer: composerState.state,
136
+ parentId: null,
137
+ isLast,
138
+ branchNumber,
139
+ branchCount,
140
+ speech: void 0,
141
+ submittedFeedback: void 0,
142
+ isCopied: isCopiedState,
143
+ isHovering: isHoveringState
144
+ };
145
+ }, [message, isCopiedState, isHoveringState, isLast]);
146
+ return tapApi({
147
+ getState: () => state,
148
+ composer: composerState.api,
149
+ part: (selector) => {
150
+ if ("index" in selector) {
151
+ return parts.api({ index: selector.index });
152
+ } else {
153
+ return parts.api({ key: "toolCallId-" + selector.toolCallId });
154
+ }
155
+ },
156
+ attachment: (selector) => {
157
+ if ("id" in selector) {
158
+ return attachments.api({ key: selector.id });
159
+ } else {
160
+ return attachments.api(selector);
161
+ }
162
+ },
163
+ reload: () => {
164
+ throw new Error("Not supported in ThreadMessageProvider");
165
+ },
166
+ speak: () => {
167
+ throw new Error("Not supported in ThreadMessageProvider");
168
+ },
169
+ stopSpeaking: () => {
170
+ throw new Error("Not supported in ThreadMessageProvider");
171
+ },
172
+ submitFeedback: () => {
173
+ throw new Error("Not supported in ThreadMessageProvider");
174
+ },
175
+ switchToBranch: () => {
176
+ throw new Error("Not supported in ThreadMessageProvider");
177
+ },
178
+ getCopyText: () => {
179
+ return message.content.map((part) => {
180
+ if ("text" in part && typeof part.text === "string") {
181
+ return part.text;
182
+ }
183
+ return "";
184
+ }).join("\n");
185
+ },
186
+ setIsCopied,
187
+ setIsHovering,
188
+ __internal_getRuntime: () => null
189
+ });
190
+ }
191
+ );
192
+ var MessageProvider = ({ children, ...props }) => {
193
+ const store = useResource(asStore(ThreadMessageClient(props)));
194
+ const api = useMemo(() => {
19
195
  return {
20
196
  message: createAssistantApiField({
21
- source: "thread",
22
- query: { type: "index", index },
23
- get: () => getMessage()
24
- }),
25
- composer: createAssistantApiField({
26
- source: "message",
197
+ source: "root",
27
198
  query: {},
28
- get: () => getMessage().composer
199
+ get: () => store.getState().api
29
200
  }),
30
- on(selector, callback) {
31
- const { event, scope } = normalizeEventSelector(selector);
32
- if (!checkEventScope("composer", scope, event) && !checkEventScope("message", scope, event))
33
- return api.on(selector, callback);
34
- return api.on({ scope: "thread", event }, (e) => {
35
- if (e.messageId === getMessage().getState().id) {
36
- callback(e);
37
- }
38
- });
39
- }
201
+ subscribe: store.subscribe,
202
+ flushSync: store.flushSync
40
203
  };
41
- }, [api, index]);
42
- return /* @__PURE__ */ jsx(AssistantProvider, { api: api2, children });
204
+ }, [store]);
205
+ return /* @__PURE__ */ jsx(AssistantProvider, { api, children });
43
206
  };
44
207
  export {
45
- MessageByIndexProvider
208
+ MessageProvider
46
209
  };
47
210
  //# sourceMappingURL=MessageProvider.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/context/providers/MessageProvider.tsx"],"sourcesContent":["\"use client\";\n\nimport { useMemo, type FC, type PropsWithChildren } from \"react\";\nimport {\n AssistantApi,\n AssistantProvider,\n useAssistantApi,\n createAssistantApiField,\n} from \"../react/AssistantApiContext\";\nimport {\n checkEventScope,\n normalizeEventSelector,\n} from \"../../types/EventTypes\";\n\nexport const MessageByIndexProvider: FC<\n PropsWithChildren<{\n index: number;\n }>\n> = ({ index, children }) => {\n const api = useAssistantApi();\n const api2 = useMemo(() => {\n const getMessage = () => api.thread().message({ index });\n return {\n message: createAssistantApiField({\n source: \"thread\",\n query: { type: \"index\", index },\n get: () => getMessage(),\n }),\n composer: createAssistantApiField({\n source: \"message\",\n query: {},\n get: () => getMessage().composer,\n }),\n on(selector, callback) {\n const { event, scope } = normalizeEventSelector(selector);\n if (\n !checkEventScope(\"composer\", scope, event) &&\n !checkEventScope(\"message\", scope, event)\n )\n return api.on(selector, callback);\n\n return api.on({ scope: \"thread\", event }, (e) => {\n if (e.messageId === getMessage().getState().id) {\n callback(e);\n }\n });\n },\n } satisfies Partial<AssistantApi>;\n }, [api, index]);\n\n return <AssistantProvider api={api2}>{children}</AssistantProvider>;\n};\n"],"mappings":";;;AAEA,SAAS,eAAgD;AACzD;AAAA,EAEE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP;AAAA,EACE;AAAA,EACA;AAAA,OACK;AAsCE;AApCF,IAAM,yBAIT,CAAC,EAAE,OAAO,SAAS,MAAM;AAC3B,QAAM,MAAM,gBAAgB;AAC5B,QAAM,OAAO,QAAQ,MAAM;AACzB,UAAM,aAAa,MAAM,IAAI,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC;AACvD,WAAO;AAAA,MACL,SAAS,wBAAwB;AAAA,QAC/B,QAAQ;AAAA,QACR,OAAO,EAAE,MAAM,SAAS,MAAM;AAAA,QAC9B,KAAK,MAAM,WAAW;AAAA,MACxB,CAAC;AAAA,MACD,UAAU,wBAAwB;AAAA,QAChC,QAAQ;AAAA,QACR,OAAO,CAAC;AAAA,QACR,KAAK,MAAM,WAAW,EAAE;AAAA,MAC1B,CAAC;AAAA,MACD,GAAG,UAAU,UAAU;AACrB,cAAM,EAAE,OAAO,MAAM,IAAI,uBAAuB,QAAQ;AACxD,YACE,CAAC,gBAAgB,YAAY,OAAO,KAAK,KACzC,CAAC,gBAAgB,WAAW,OAAO,KAAK;AAExC,iBAAO,IAAI,GAAG,UAAU,QAAQ;AAElC,eAAO,IAAI,GAAG,EAAE,OAAO,UAAU,MAAM,GAAG,CAAC,MAAM;AAC/C,cAAI,EAAE,cAAc,WAAW,EAAE,SAAS,EAAE,IAAI;AAC9C,qBAAS,CAAC;AAAA,UACZ;AAAA,QACF,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF,GAAG,CAAC,KAAK,KAAK,CAAC;AAEf,SAAO,oBAAC,qBAAkB,KAAK,MAAO,UAAS;AACjD;","names":[]}
1
+ {"version":3,"sources":["../../../src/context/providers/MessageProvider.tsx"],"sourcesContent":["\"use client\";\n\nimport { useMemo, type FC, type PropsWithChildren } from \"react\";\nimport {\n AssistantProvider,\n AssistantApi,\n createAssistantApiField,\n} from \"../react/AssistantApiContext\";\nimport {\n MessageClientApi,\n MessageClientState,\n} from \"../../client/types/Message\";\nimport {\n resource,\n tapInlineResource,\n tapMemo,\n tapState,\n} from \"@assistant-ui/tap\";\nimport { useResource } from \"@assistant-ui/tap/react\";\nimport { asStore, tapApi } from \"../../utils/tap-store\";\nimport {\n ThreadAssistantMessagePart,\n ThreadMessage,\n ThreadUserMessagePart,\n} from \"../../types/AssistantTypes\";\nimport {\n ComposerClientApi,\n ComposerClientState,\n} from \"../../client/types/Composer\";\nimport {\n MessagePartClientApi,\n MessagePartClientState,\n} from \"../../client/types/Part\";\nimport { tapLookupResources } from \"../../client/util-hooks/tapLookupResources\";\nimport { Attachment } from \"../../types\";\nimport { AttachmentClientApi } from \"../../client/types/Attachment\";\n\nconst NoOpComposerClient = resource(({ type }: { type: \"edit\" | \"thread\" }) => {\n const state = tapMemo<ComposerClientState>(() => {\n return {\n isEditing: false,\n isEmpty: true,\n text: \"\",\n attachmentAccept: \"*\",\n attachments: [],\n role: \"user\",\n runConfig: {},\n canCancel: false,\n type: type,\n };\n }, [type]);\n\n return tapApi<ComposerClientApi>({\n getState: () => state,\n setText: () => {\n throw new Error(\"Not supported\");\n },\n setRole: () => {\n throw new Error(\"Not supported\");\n },\n setRunConfig: () => {\n throw new Error(\"Not supported\");\n },\n addAttachment: () => {\n throw new Error(\"Not supported\");\n },\n clearAttachments: () => {\n throw new Error(\"Not supported\");\n },\n attachment: () => {\n throw new Error(\"Not supported\");\n },\n reset: () => {\n throw new Error(\"Not supported\");\n },\n send: () => {\n throw new Error(\"Not supported\");\n },\n cancel: () => {\n throw new Error(\"Not supported\");\n },\n beginEdit: () => {\n throw new Error(\"Not supported\");\n },\n __internal_getRuntime: () => null,\n });\n});\n\nconst ThreadMessagePartClient = resource(\n ({ part }: { part: ThreadAssistantMessagePart | ThreadUserMessagePart }) => {\n const state = tapMemo<MessagePartClientState>(() => {\n return {\n ...part,\n status: { type: \"complete\" },\n };\n }, [part]);\n\n return tapApi<MessagePartClientApi>(\n {\n getState: () => state,\n addToolResult: () => {\n throw new Error(\"Not supported\");\n },\n __internal_getRuntime: () => null,\n },\n {\n key:\n state.type === \"tool-call\"\n ? \"toolCallId-\" + state.toolCallId\n : undefined,\n },\n );\n },\n);\n\nconst ThreadMessageAttachmentClient = resource(\n ({ attachment }: { attachment: Attachment }) => {\n return tapApi<AttachmentClientApi>(\n {\n getState: () => attachment,\n remove: () => {\n throw new Error(\"Not supported\");\n },\n __internal_getRuntime: () => null,\n },\n {\n key: attachment.id,\n },\n );\n },\n);\n\ntype ThreadMessageClientProps = {\n message: ThreadMessage;\n isLast?: boolean;\n branchNumber?: number;\n branchCount?: number;\n};\n\nconst ThreadMessageClient = resource(\n ({\n message,\n isLast = true,\n branchNumber = 1,\n branchCount = 1,\n }: ThreadMessageClientProps) => {\n const [isCopiedState, setIsCopied] = tapState(false);\n const [isHoveringState, setIsHovering] = tapState(false);\n\n const parts = tapLookupResources(\n message.content.map((_, idx) =>\n ThreadMessagePartClient({ part: message.content[idx]! }, { key: idx }),\n ),\n );\n\n const attachments = tapLookupResources(\n message.attachments?.map((_, idx) =>\n ThreadMessageAttachmentClient(\n { attachment: message.attachments![idx]! },\n { key: idx },\n ),\n ) ?? [],\n );\n\n const composerState = tapInlineResource(\n NoOpComposerClient({ type: \"edit\" }),\n );\n\n const state = tapMemo<MessageClientState>(() => {\n return {\n ...message,\n parts: parts.state,\n composer: composerState.state,\n parentId: null,\n isLast,\n branchNumber,\n branchCount,\n speech: undefined,\n submittedFeedback: undefined,\n isCopied: isCopiedState,\n isHovering: isHoveringState,\n };\n }, [message, isCopiedState, isHoveringState, isLast]);\n\n return tapApi<MessageClientApi>({\n getState: () => state,\n composer: composerState.api,\n part: (selector) => {\n if (\"index\" in selector) {\n return parts.api({ index: selector.index });\n } else {\n return parts.api({ key: \"toolCallId-\" + selector.toolCallId });\n }\n },\n attachment: (selector) => {\n if (\"id\" in selector) {\n return attachments.api({ key: selector.id });\n } else {\n return attachments.api(selector);\n }\n },\n reload: () => {\n throw new Error(\"Not supported in ThreadMessageProvider\");\n },\n speak: () => {\n throw new Error(\"Not supported in ThreadMessageProvider\");\n },\n stopSpeaking: () => {\n throw new Error(\"Not supported in ThreadMessageProvider\");\n },\n submitFeedback: () => {\n throw new Error(\"Not supported in ThreadMessageProvider\");\n },\n switchToBranch: () => {\n throw new Error(\"Not supported in ThreadMessageProvider\");\n },\n getCopyText: () => {\n return message.content\n .map((part) => {\n if (\"text\" in part && typeof part.text === \"string\") {\n return part.text;\n }\n return \"\";\n })\n .join(\"\\n\");\n },\n setIsCopied,\n setIsHovering,\n __internal_getRuntime: () => null,\n });\n },\n);\n\nexport const MessageProvider: FC<\n PropsWithChildren<ThreadMessageClientProps>\n> = ({ children, ...props }) => {\n const store = useResource(asStore(ThreadMessageClient(props)));\n const api = useMemo(() => {\n return {\n message: createAssistantApiField({\n source: \"root\",\n query: {},\n get: () => store.getState().api,\n }),\n subscribe: store.subscribe,\n flushSync: store.flushSync,\n } satisfies Partial<AssistantApi>;\n }, [store]);\n\n return <AssistantProvider api={api}>{children}</AssistantProvider>;\n};\n"],"mappings":";;;AAEA,SAAS,eAAgD;AACzD;AAAA,EACE;AAAA,EAEA;AAAA,OACK;AAKP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,mBAAmB;AAC5B,SAAS,SAAS,cAAc;AAchC,SAAS,0BAA0B;AAwN1B;AApNT,IAAM,qBAAqB,SAAS,CAAC,EAAE,KAAK,MAAmC;AAC7E,QAAM,QAAQ,QAA6B,MAAM;AAC/C,WAAO;AAAA,MACL,WAAW;AAAA,MACX,SAAS;AAAA,MACT,MAAM;AAAA,MACN,kBAAkB;AAAA,MAClB,aAAa,CAAC;AAAA,MACd,MAAM;AAAA,MACN,WAAW,CAAC;AAAA,MACZ,WAAW;AAAA,MACX;AAAA,IACF;AAAA,EACF,GAAG,CAAC,IAAI,CAAC;AAET,SAAO,OAA0B;AAAA,IAC/B,UAAU,MAAM;AAAA,IAChB,SAAS,MAAM;AACb,YAAM,IAAI,MAAM,eAAe;AAAA,IACjC;AAAA,IACA,SAAS,MAAM;AACb,YAAM,IAAI,MAAM,eAAe;AAAA,IACjC;AAAA,IACA,cAAc,MAAM;AAClB,YAAM,IAAI,MAAM,eAAe;AAAA,IACjC;AAAA,IACA,eAAe,MAAM;AACnB,YAAM,IAAI,MAAM,eAAe;AAAA,IACjC;AAAA,IACA,kBAAkB,MAAM;AACtB,YAAM,IAAI,MAAM,eAAe;AAAA,IACjC;AAAA,IACA,YAAY,MAAM;AAChB,YAAM,IAAI,MAAM,eAAe;AAAA,IACjC;AAAA,IACA,OAAO,MAAM;AACX,YAAM,IAAI,MAAM,eAAe;AAAA,IACjC;AAAA,IACA,MAAM,MAAM;AACV,YAAM,IAAI,MAAM,eAAe;AAAA,IACjC;AAAA,IACA,QAAQ,MAAM;AACZ,YAAM,IAAI,MAAM,eAAe;AAAA,IACjC;AAAA,IACA,WAAW,MAAM;AACf,YAAM,IAAI,MAAM,eAAe;AAAA,IACjC;AAAA,IACA,uBAAuB,MAAM;AAAA,EAC/B,CAAC;AACH,CAAC;AAED,IAAM,0BAA0B;AAAA,EAC9B,CAAC,EAAE,KAAK,MAAoE;AAC1E,UAAM,QAAQ,QAAgC,MAAM;AAClD,aAAO;AAAA,QACL,GAAG;AAAA,QACH,QAAQ,EAAE,MAAM,WAAW;AAAA,MAC7B;AAAA,IACF,GAAG,CAAC,IAAI,CAAC;AAET,WAAO;AAAA,MACL;AAAA,QACE,UAAU,MAAM;AAAA,QAChB,eAAe,MAAM;AACnB,gBAAM,IAAI,MAAM,eAAe;AAAA,QACjC;AAAA,QACA,uBAAuB,MAAM;AAAA,MAC/B;AAAA,MACA;AAAA,QACE,KACE,MAAM,SAAS,cACX,gBAAgB,MAAM,aACtB;AAAA,MACR;AAAA,IACF;AAAA,EACF;AACF;AAEA,IAAM,gCAAgC;AAAA,EACpC,CAAC,EAAE,WAAW,MAAkC;AAC9C,WAAO;AAAA,MACL;AAAA,QACE,UAAU,MAAM;AAAA,QAChB,QAAQ,MAAM;AACZ,gBAAM,IAAI,MAAM,eAAe;AAAA,QACjC;AAAA,QACA,uBAAuB,MAAM;AAAA,MAC/B;AAAA,MACA;AAAA,QACE,KAAK,WAAW;AAAA,MAClB;AAAA,IACF;AAAA,EACF;AACF;AASA,IAAM,sBAAsB;AAAA,EAC1B,CAAC;AAAA,IACC;AAAA,IACA,SAAS;AAAA,IACT,eAAe;AAAA,IACf,cAAc;AAAA,EAChB,MAAgC;AAC9B,UAAM,CAAC,eAAe,WAAW,IAAI,SAAS,KAAK;AACnD,UAAM,CAAC,iBAAiB,aAAa,IAAI,SAAS,KAAK;AAEvD,UAAM,QAAQ;AAAA,MACZ,QAAQ,QAAQ;AAAA,QAAI,CAAC,GAAG,QACtB,wBAAwB,EAAE,MAAM,QAAQ,QAAQ,GAAG,EAAG,GAAG,EAAE,KAAK,IAAI,CAAC;AAAA,MACvE;AAAA,IACF;AAEA,UAAM,cAAc;AAAA,MAClB,QAAQ,aAAa;AAAA,QAAI,CAAC,GAAG,QAC3B;AAAA,UACE,EAAE,YAAY,QAAQ,YAAa,GAAG,EAAG;AAAA,UACzC,EAAE,KAAK,IAAI;AAAA,QACb;AAAA,MACF,KAAK,CAAC;AAAA,IACR;AAEA,UAAM,gBAAgB;AAAA,MACpB,mBAAmB,EAAE,MAAM,OAAO,CAAC;AAAA,IACrC;AAEA,UAAM,QAAQ,QAA4B,MAAM;AAC9C,aAAO;AAAA,QACL,GAAG;AAAA,QACH,OAAO,MAAM;AAAA,QACb,UAAU,cAAc;AAAA,QACxB,UAAU;AAAA,QACV;AAAA,QACA;AAAA,QACA;AAAA,QACA,QAAQ;AAAA,QACR,mBAAmB;AAAA,QACnB,UAAU;AAAA,QACV,YAAY;AAAA,MACd;AAAA,IACF,GAAG,CAAC,SAAS,eAAe,iBAAiB,MAAM,CAAC;AAEpD,WAAO,OAAyB;AAAA,MAC9B,UAAU,MAAM;AAAA,MAChB,UAAU,cAAc;AAAA,MACxB,MAAM,CAAC,aAAa;AAClB,YAAI,WAAW,UAAU;AACvB,iBAAO,MAAM,IAAI,EAAE,OAAO,SAAS,MAAM,CAAC;AAAA,QAC5C,OAAO;AACL,iBAAO,MAAM,IAAI,EAAE,KAAK,gBAAgB,SAAS,WAAW,CAAC;AAAA,QAC/D;AAAA,MACF;AAAA,MACA,YAAY,CAAC,aAAa;AACxB,YAAI,QAAQ,UAAU;AACpB,iBAAO,YAAY,IAAI,EAAE,KAAK,SAAS,GAAG,CAAC;AAAA,QAC7C,OAAO;AACL,iBAAO,YAAY,IAAI,QAAQ;AAAA,QACjC;AAAA,MACF;AAAA,MACA,QAAQ,MAAM;AACZ,cAAM,IAAI,MAAM,wCAAwC;AAAA,MAC1D;AAAA,MACA,OAAO,MAAM;AACX,cAAM,IAAI,MAAM,wCAAwC;AAAA,MAC1D;AAAA,MACA,cAAc,MAAM;AAClB,cAAM,IAAI,MAAM,wCAAwC;AAAA,MAC1D;AAAA,MACA,gBAAgB,MAAM;AACpB,cAAM,IAAI,MAAM,wCAAwC;AAAA,MAC1D;AAAA,MACA,gBAAgB,MAAM;AACpB,cAAM,IAAI,MAAM,wCAAwC;AAAA,MAC1D;AAAA,MACA,aAAa,MAAM;AACjB,eAAO,QAAQ,QACZ,IAAI,CAAC,SAAS;AACb,cAAI,UAAU,QAAQ,OAAO,KAAK,SAAS,UAAU;AACnD,mBAAO,KAAK;AAAA,UACd;AACA,iBAAO;AAAA,QACT,CAAC,EACA,KAAK,IAAI;AAAA,MACd;AAAA,MACA;AAAA,MACA;AAAA,MACA,uBAAuB,MAAM;AAAA,IAC/B,CAAC;AAAA,EACH;AACF;AAEO,IAAM,kBAET,CAAC,EAAE,UAAU,GAAG,MAAM,MAAM;AAC9B,QAAM,QAAQ,YAAY,QAAQ,oBAAoB,KAAK,CAAC,CAAC;AAC7D,QAAM,MAAM,QAAQ,MAAM;AACxB,WAAO;AAAA,MACL,SAAS,wBAAwB;AAAA,QAC/B,QAAQ;AAAA,QACR,OAAO,CAAC;AAAA,QACR,KAAK,MAAM,MAAM,SAAS,EAAE;AAAA,MAC9B,CAAC;AAAA,MACD,WAAW,MAAM;AAAA,MACjB,WAAW,MAAM;AAAA,IACnB;AAAA,EACF,GAAG,CAAC,KAAK,CAAC;AAEV,SAAO,oBAAC,qBAAkB,KAAW,UAAS;AAChD;","names":[]}
@@ -2,4 +2,4 @@ import { type FC, type PropsWithChildren } from "react";
2
2
  export declare const PartByIndexProvider: FC<PropsWithChildren<{
3
3
  index: number;
4
4
  }>>;
5
- //# sourceMappingURL=PartProvider.d.ts.map
5
+ //# sourceMappingURL=PartByIndexProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PartByIndexProvider.d.ts","sourceRoot":"","sources":["../../../src/context/providers/PartByIndexProvider.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAW,KAAK,EAAE,EAAE,KAAK,iBAAiB,EAAE,MAAM,OAAO,CAAC;AAQjE,eAAO,MAAM,mBAAmB,EAAE,EAAE,CAClC,iBAAiB,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;CACf,CAAC,CAcH,CAAC"}
@@ -1,6 +1,6 @@
1
1
  "use client";
2
2
 
3
- // src/context/providers/PartProvider.tsx
3
+ // src/context/providers/PartByIndexProvider.tsx
4
4
  import { useMemo } from "react";
5
5
  import {
6
6
  AssistantProvider,
@@ -24,4 +24,4 @@ var PartByIndexProvider = ({ index, children }) => {
24
24
  export {
25
25
  PartByIndexProvider
26
26
  };
27
- //# sourceMappingURL=PartProvider.js.map
27
+ //# sourceMappingURL=PartByIndexProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/context/providers/PartByIndexProvider.tsx"],"sourcesContent":["\"use client\";\n\nimport { useMemo, type FC, type PropsWithChildren } from \"react\";\nimport {\n AssistantApi,\n AssistantProvider,\n useAssistantApi,\n createAssistantApiField,\n} from \"../react/AssistantApiContext\";\n\nexport const PartByIndexProvider: FC<\n PropsWithChildren<{\n index: number;\n }>\n> = ({ index, children }) => {\n const api = useAssistantApi();\n const api2 = useMemo(() => {\n return {\n part: createAssistantApiField({\n source: \"message\",\n query: { type: \"index\", index },\n get: () => api.message().part({ index }),\n }),\n } satisfies Partial<AssistantApi>;\n }, [api, index]);\n\n return <AssistantProvider api={api2}>{children}</AssistantProvider>;\n};\n"],"mappings":";;;AAEA,SAAS,eAAgD;AACzD;AAAA,EAEE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAkBE;AAhBF,IAAM,sBAIT,CAAC,EAAE,OAAO,SAAS,MAAM;AAC3B,QAAM,MAAM,gBAAgB;AAC5B,QAAM,OAAO,QAAQ,MAAM;AACzB,WAAO;AAAA,MACL,MAAM,wBAAwB;AAAA,QAC5B,QAAQ;AAAA,QACR,OAAO,EAAE,MAAM,SAAS,MAAM;AAAA,QAC9B,KAAK,MAAM,IAAI,QAAQ,EAAE,KAAK,EAAE,MAAM,CAAC;AAAA,MACzC,CAAC;AAAA,IACH;AAAA,EACF,GAAG,CAAC,KAAK,KAAK,CAAC;AAEf,SAAO,oBAAC,qBAAkB,KAAK,MAAO,UAAS;AACjD;","names":[]}
@@ -1,7 +1,8 @@
1
1
  export { AssistantRuntimeProvider } from "../../legacy-runtime/AssistantRuntimeProvider";
2
2
  export { ThreadListItemByIndexProvider, ThreadListItemByIdProvider, } from "./ThreadListItemProvider";
3
- export { MessageByIndexProvider } from "./MessageProvider";
4
- export { PartByIndexProvider } from "./PartProvider";
5
- export { MessageAttachmentByIndexProvider, ComposerAttachmentByIndexProvider, } from "./AttachmentProvider";
3
+ export { MessageByIndexProvider } from "./MessageByIndexProvider";
4
+ export { PartByIndexProvider } from "./PartByIndexProvider";
5
+ export { MessageAttachmentByIndexProvider, ComposerAttachmentByIndexProvider, } from "./AttachmentByIndexProvider";
6
6
  export { TextMessagePartProvider } from "./TextMessagePartProvider";
7
+ export { MessageProvider } from "./MessageProvider";
7
8
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/context/providers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,+CAA+C,CAAC;AACzF,OAAO,EACL,6BAA6B,EAC7B,0BAA0B,GAC3B,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,EACL,gCAAgC,EAChC,iCAAiC,GAClC,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/context/providers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,+CAA+C,CAAC;AACzF,OAAO,EACL,6BAA6B,EAC7B,0BAA0B,GAC3B,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EACL,gCAAgC,EAChC,iCAAiC,GAClC,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC"}
@@ -4,18 +4,20 @@ import {
4
4
  ThreadListItemByIndexProvider,
5
5
  ThreadListItemByIdProvider
6
6
  } from "./ThreadListItemProvider.js";
7
- import { MessageByIndexProvider } from "./MessageProvider.js";
8
- import { PartByIndexProvider } from "./PartProvider.js";
7
+ import { MessageByIndexProvider } from "./MessageByIndexProvider.js";
8
+ import { PartByIndexProvider } from "./PartByIndexProvider.js";
9
9
  import {
10
10
  MessageAttachmentByIndexProvider,
11
11
  ComposerAttachmentByIndexProvider
12
- } from "./AttachmentProvider.js";
12
+ } from "./AttachmentByIndexProvider.js";
13
13
  import { TextMessagePartProvider } from "./TextMessagePartProvider.js";
14
+ import { MessageProvider } from "./MessageProvider.js";
14
15
  export {
15
16
  AssistantRuntimeProvider,
16
17
  ComposerAttachmentByIndexProvider,
17
18
  MessageAttachmentByIndexProvider,
18
19
  MessageByIndexProvider,
20
+ MessageProvider,
19
21
  PartByIndexProvider,
20
22
  TextMessagePartProvider,
21
23
  ThreadListItemByIdProvider,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/context/providers/index.ts"],"sourcesContent":["export { AssistantRuntimeProvider } from \"../../legacy-runtime/AssistantRuntimeProvider\";\nexport {\n ThreadListItemByIndexProvider,\n ThreadListItemByIdProvider,\n} from \"./ThreadListItemProvider\";\nexport { MessageByIndexProvider } from \"./MessageProvider\";\nexport { PartByIndexProvider } from \"./PartProvider\";\nexport {\n MessageAttachmentByIndexProvider,\n ComposerAttachmentByIndexProvider,\n} from \"./AttachmentProvider\";\nexport { TextMessagePartProvider } from \"./TextMessagePartProvider\";\n"],"mappings":";AAAA,SAAS,gCAAgC;AACzC;AAAA,EACE;AAAA,EACA;AAAA,OACK;AACP,SAAS,8BAA8B;AACvC,SAAS,2BAA2B;AACpC;AAAA,EACE;AAAA,EACA;AAAA,OACK;AACP,SAAS,+BAA+B;","names":[]}
1
+ {"version":3,"sources":["../../../src/context/providers/index.ts"],"sourcesContent":["export { AssistantRuntimeProvider } from \"../../legacy-runtime/AssistantRuntimeProvider\";\nexport {\n ThreadListItemByIndexProvider,\n ThreadListItemByIdProvider,\n} from \"./ThreadListItemProvider\";\nexport { MessageByIndexProvider } from \"./MessageByIndexProvider\";\nexport { PartByIndexProvider } from \"./PartByIndexProvider\";\nexport {\n MessageAttachmentByIndexProvider,\n ComposerAttachmentByIndexProvider,\n} from \"./AttachmentByIndexProvider\";\nexport { TextMessagePartProvider } from \"./TextMessagePartProvider\";\nexport { MessageProvider } from \"./MessageProvider\";\n"],"mappings":";AAAA,SAAS,gCAAgC;AACzC;AAAA,EACE;AAAA,EACA;AAAA,OACK;AACP,SAAS,8BAA8B;AACvC,SAAS,2BAA2B;AACpC;AAAA,EACE;AAAA,EACA;AAAA,OACK;AACP,SAAS,+BAA+B;AACxC,SAAS,uBAAuB;","names":[]}
@@ -60,6 +60,9 @@ type MessageMeta = {
60
60
  type: "index";
61
61
  index: number;
62
62
  };
63
+ } | {
64
+ source: "root";
65
+ query: Record<string, never>;
63
66
  };
64
67
  type PartMeta = {
65
68
  source: "message" | "root";
@@ -1 +1 @@
1
- {"version":3,"file":"AssistantApiContext.d.ts","sourceRoot":"","sources":["../../../src/context/react/AssistantApiContext.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"AssistantApiContext.d.ts","sourceRoot":"","sources":["../../../src/context/react/AssistantApiContext.tsx"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/context/react/AssistantApiContext.tsx"],"sourcesContent":["\"use client\";\n\nimport {\n createContext,\n FC,\n PropsWithChildren,\n useContext,\n useMemo,\n} from \"react\";\n\nimport { ToolUIApi, ToolUIState, ToolUIMeta } from \"../../client/types/ToolUI\";\nimport {\n MessageClientApi,\n MessageClientState,\n} from \"../../client/types/Message\";\nimport {\n ThreadListItemClientApi,\n ThreadListItemClientState,\n} from \"../../client/types/ThreadListItem\";\nimport {\n MessagePartClientApi,\n MessagePartClientState,\n} from \"../../client/types/Part\";\nimport { ThreadClientApi, ThreadClientState } from \"../../client/types/Thread\";\nimport {\n ComposerClientApi,\n ComposerClientState,\n} from \"../../client/types/Composer\";\nimport {\n AttachmentClientApi,\n AttachmentClientState,\n} from \"../../client/types/Attachment\";\nimport { Unsubscribe } from \"@assistant-ui/tap\";\nimport { ModelContextProvider } from \"../../model-context\";\nimport { AssistantRuntime } from \"../../legacy-runtime/runtime/AssistantRuntime\";\nimport {\n AssistantEvent,\n AssistantEventCallback,\n AssistantEventSelector,\n normalizeEventSelector,\n} from \"../../types/EventTypes\";\nimport {\n ThreadListClientApi,\n ThreadListClientState,\n} from \"../../client/types/ThreadList\";\nimport { ThreadViewportProvider } from \"../providers/ThreadViewportProvider\";\n\nexport type AssistantState = {\n readonly threads: ThreadListClientState;\n readonly toolUIs: ToolUIState;\n\n readonly threadListItem: ThreadListItemClientState;\n readonly thread: ThreadClientState;\n readonly composer: ComposerClientState;\n readonly message: MessageClientState;\n readonly part: MessagePartClientState;\n readonly attachment: AttachmentClientState;\n};\n\ntype AssistantApiField<\n TApi,\n TMeta extends { source: string | null; query: any },\n> = (() => TApi) & (TMeta | { source: null; query: Record<string, never> });\n\n// Meta types for each API method\ntype ThreadsMeta = {\n source: \"root\";\n query: Record<string, never>;\n};\n\ntype ThreadListItemMeta = {\n source: \"threads\";\n query:\n | { type: \"index\"; index: number; archived: boolean }\n | { type: \"main\" }\n | { type: \"id\"; id: string };\n};\n\ntype ThreadMeta = {\n source: \"threads\";\n query: { type: \"main\" };\n};\n\ntype ComposerMeta = {\n source: \"message\" | \"thread\";\n query: Record<string, never>;\n};\n\ntype MessageMeta = {\n source: \"thread\";\n query: { type: \"index\"; index: number };\n};\n\ntype PartMeta = {\n source: \"message\" | \"root\";\n query: { type: \"index\"; index: number } | Record<string, never>;\n};\n\ntype AttachmentMeta = {\n source: \"message\" | \"composer\";\n query: { type: \"index\"; index: number };\n};\n\nexport type AssistantApi = {\n threads: AssistantApiField<ThreadListClientApi, ThreadsMeta>;\n toolUIs: AssistantApiField<ToolUIApi, ToolUIMeta>;\n threadListItem: AssistantApiField<\n ThreadListItemClientApi,\n ThreadListItemMeta\n >;\n thread: AssistantApiField<ThreadClientApi, ThreadMeta>;\n composer: AssistantApiField<ComposerClientApi, ComposerMeta>;\n message: AssistantApiField<MessageClientApi, MessageMeta>;\n part: AssistantApiField<MessagePartClientApi, PartMeta>;\n attachment: AssistantApiField<AttachmentClientApi, AttachmentMeta>;\n\n subscribe(listener: () => void): Unsubscribe;\n flushSync(): void;\n\n on<TEvent extends AssistantEvent>(\n event: AssistantEventSelector<TEvent>,\n callback: AssistantEventCallback<TEvent>,\n ): Unsubscribe;\n\n // temp\n registerModelContextProvider(provider: ModelContextProvider): void;\n /** @internal */\n __internal_getRuntime(): AssistantRuntime | null;\n};\n\nexport const createAssistantApiField = <\n TApi,\n TMeta extends { source: any; query: any },\n>(\n config: {\n get: () => TApi;\n } & (TMeta | { source: null; query: Record<string, never> }),\n): AssistantApiField<TApi, TMeta> => {\n const fn = config.get as AssistantApiField<TApi, TMeta>;\n fn.source = config.source;\n fn.query = config.query;\n return fn;\n};\n\nconst NO_OP_FN = () => () => {};\n\nconst AssistantApiContext = createContext<AssistantApi>({\n threads: createAssistantApiField({\n source: null,\n query: {},\n get: () => {\n throw new Error(\"Threads is only available inside <AssistantProvider />\");\n },\n }),\n toolUIs: createAssistantApiField({\n source: null,\n query: {},\n get: (): never => {\n throw new Error(\"ToolUIs is only available inside <AssistantProvider />\");\n },\n }),\n threadListItem: createAssistantApiField({\n source: null,\n query: {},\n get: (): never => {\n throw new Error(\n \"ThreadListItem is only available inside <AssistantProvider />\",\n );\n },\n }),\n thread: createAssistantApiField({\n source: null,\n query: {},\n get: (): never => {\n throw new Error(\"Thread is only available inside <AssistantProvider />\");\n },\n }),\n composer: createAssistantApiField({\n source: null,\n query: {},\n get: (): never => {\n throw new Error(\n \"Composer is only available inside <AssistantProvider />\",\n );\n },\n }),\n message: createAssistantApiField({\n source: null,\n query: {},\n get: (): never => {\n throw new Error(\n \"Message is only available inside <ThreadPrimitive.Messages />\",\n );\n },\n }),\n part: createAssistantApiField({\n source: null,\n query: {},\n get: (): never => {\n throw new Error(\n \"Part is only available inside <MessagePrimitive.Parts />\",\n );\n },\n }),\n attachment: createAssistantApiField({\n source: null,\n query: {},\n get: (): never => {\n throw new Error(\n \"Attachment is only available inside <MessagePrimitive.Attachments /> or <ComposerPrimitive.Attachments />\",\n );\n },\n }),\n\n subscribe: NO_OP_FN,\n flushSync: NO_OP_FN,\n on: (selector) => {\n const { scope } = normalizeEventSelector(selector);\n throw new Error(`Event scope is not available in this component: ${scope}`);\n },\n\n registerModelContextProvider: () => {\n throw new Error(\n \"Registering model context providers is only available inside <AssistantProvider />\",\n );\n },\n __internal_getRuntime: () => {\n return null;\n },\n});\n\nexport const useAssistantApi = (): AssistantApi => {\n return useContext(AssistantApiContext);\n};\n\nconst mergeFns = <TArgs extends Array<unknown>>(\n fn1: (...args: TArgs) => void,\n fn2: (...args: TArgs) => void,\n) => {\n if (fn1 === NO_OP_FN) return fn2;\n if (fn2 === NO_OP_FN) return fn1;\n\n return (...args: TArgs) => {\n fn1(...args);\n fn2(...args);\n };\n};\n\nconst mergeFnsWithUnsubscribe = <TArgs extends Array<unknown>>(\n fn1: (...args: TArgs) => Unsubscribe,\n fn2: (...args: TArgs) => Unsubscribe,\n) => {\n if (fn1 === NO_OP_FN) return fn2;\n if (fn2 === NO_OP_FN) return fn1;\n\n return (...args: TArgs) => {\n const unsubscribe1 = fn1(...args);\n const unsubscribe2 = fn2(...args);\n\n return () => {\n unsubscribe1();\n unsubscribe2();\n };\n };\n};\n\nconst extendApi = (\n api: AssistantApi,\n api2: Partial<AssistantApi>,\n): AssistantApi => {\n const api2Subscribe = api2.subscribe;\n const api2FlushSync = api2.flushSync;\n return {\n ...api,\n ...api2,\n subscribe: mergeFnsWithUnsubscribe(\n api.subscribe,\n api2Subscribe ?? NO_OP_FN,\n ),\n flushSync: mergeFns(api.flushSync, api2FlushSync ?? NO_OP_FN),\n };\n};\n\nexport const AssistantProvider: FC<\n PropsWithChildren<{ api: Partial<AssistantApi> }>\n> = ({ api: api2, children }) => {\n const api = useAssistantApi();\n const extendedApi = useMemo(() => extendApi(api, api2), [api, api2]);\n\n return (\n <AssistantApiContext.Provider value={extendedApi}>\n {/* TODO temporarily allow accessing viewport state from outside the viewport */}\n {/* TODO figure out if this behavior should be deprecated, since it is quite hacky */}\n <ThreadViewportProvider>{children}</ThreadViewportProvider>\n </AssistantApiContext.Provider>\n );\n};\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../../src/context/react/AssistantApiContext.tsx"],"sourcesContent":["\"use client\";\n\nimport {\n createContext,\n FC,\n PropsWithChildren,\n useContext,\n useMemo,\n} from \"react\";\n\nimport { ToolUIApi, ToolUIState, ToolUIMeta } from \"../../client/types/ToolUI\";\nimport {\n MessageClientApi,\n MessageClientState,\n} from \"../../client/types/Message\";\nimport {\n ThreadListItemClientApi,\n ThreadListItemClientState,\n} from \"../../client/types/ThreadListItem\";\nimport {\n MessagePartClientApi,\n MessagePartClientState,\n} from \"../../client/types/Part\";\nimport { ThreadClientApi, ThreadClientState } from \"../../client/types/Thread\";\nimport {\n ComposerClientApi,\n ComposerClientState,\n} from \"../../client/types/Composer\";\nimport {\n AttachmentClientApi,\n AttachmentClientState,\n} from \"../../client/types/Attachment\";\nimport { Unsubscribe } from \"@assistant-ui/tap\";\nimport { ModelContextProvider } from \"../../model-context\";\nimport { AssistantRuntime } from \"../../legacy-runtime/runtime/AssistantRuntime\";\nimport {\n AssistantEvent,\n AssistantEventCallback,\n AssistantEventSelector,\n normalizeEventSelector,\n} from \"../../types/EventTypes\";\nimport {\n ThreadListClientApi,\n ThreadListClientState,\n} from \"../../client/types/ThreadList\";\nimport { ThreadViewportProvider } from \"../providers/ThreadViewportProvider\";\n\nexport type AssistantState = {\n readonly threads: ThreadListClientState;\n readonly toolUIs: ToolUIState;\n\n readonly threadListItem: ThreadListItemClientState;\n readonly thread: ThreadClientState;\n readonly composer: ComposerClientState;\n readonly message: MessageClientState;\n readonly part: MessagePartClientState;\n readonly attachment: AttachmentClientState;\n};\n\ntype AssistantApiField<\n TApi,\n TMeta extends { source: string | null; query: any },\n> = (() => TApi) & (TMeta | { source: null; query: Record<string, never> });\n\n// Meta types for each API method\ntype ThreadsMeta = {\n source: \"root\";\n query: Record<string, never>;\n};\n\ntype ThreadListItemMeta = {\n source: \"threads\";\n query:\n | { type: \"index\"; index: number; archived: boolean }\n | { type: \"main\" }\n | { type: \"id\"; id: string };\n};\n\ntype ThreadMeta = {\n source: \"threads\";\n query: { type: \"main\" };\n};\n\ntype ComposerMeta = {\n source: \"message\" | \"thread\";\n query: Record<string, never>;\n};\n\ntype MessageMeta =\n | {\n source: \"thread\";\n query: { type: \"index\"; index: number };\n }\n | {\n source: \"root\";\n query: Record<string, never>;\n };\n\ntype PartMeta = {\n source: \"message\" | \"root\";\n query: { type: \"index\"; index: number } | Record<string, never>;\n};\n\ntype AttachmentMeta = {\n source: \"message\" | \"composer\";\n query: { type: \"index\"; index: number };\n};\n\nexport type AssistantApi = {\n threads: AssistantApiField<ThreadListClientApi, ThreadsMeta>;\n toolUIs: AssistantApiField<ToolUIApi, ToolUIMeta>;\n threadListItem: AssistantApiField<\n ThreadListItemClientApi,\n ThreadListItemMeta\n >;\n thread: AssistantApiField<ThreadClientApi, ThreadMeta>;\n composer: AssistantApiField<ComposerClientApi, ComposerMeta>;\n message: AssistantApiField<MessageClientApi, MessageMeta>;\n part: AssistantApiField<MessagePartClientApi, PartMeta>;\n attachment: AssistantApiField<AttachmentClientApi, AttachmentMeta>;\n\n subscribe(listener: () => void): Unsubscribe;\n flushSync(): void;\n\n on<TEvent extends AssistantEvent>(\n event: AssistantEventSelector<TEvent>,\n callback: AssistantEventCallback<TEvent>,\n ): Unsubscribe;\n\n // temp\n registerModelContextProvider(provider: ModelContextProvider): void;\n /** @internal */\n __internal_getRuntime(): AssistantRuntime | null;\n};\n\nexport const createAssistantApiField = <\n TApi,\n TMeta extends { source: any; query: any },\n>(\n config: {\n get: () => TApi;\n } & (TMeta | { source: null; query: Record<string, never> }),\n): AssistantApiField<TApi, TMeta> => {\n const fn = config.get as AssistantApiField<TApi, TMeta>;\n fn.source = config.source;\n fn.query = config.query;\n return fn;\n};\n\nconst NO_OP_FN = () => () => {};\n\nconst AssistantApiContext = createContext<AssistantApi>({\n threads: createAssistantApiField({\n source: null,\n query: {},\n get: () => {\n throw new Error(\"Threads is only available inside <AssistantProvider />\");\n },\n }),\n toolUIs: createAssistantApiField({\n source: null,\n query: {},\n get: (): never => {\n throw new Error(\"ToolUIs is only available inside <AssistantProvider />\");\n },\n }),\n threadListItem: createAssistantApiField({\n source: null,\n query: {},\n get: (): never => {\n throw new Error(\n \"ThreadListItem is only available inside <AssistantProvider />\",\n );\n },\n }),\n thread: createAssistantApiField({\n source: null,\n query: {},\n get: (): never => {\n throw new Error(\"Thread is only available inside <AssistantProvider />\");\n },\n }),\n composer: createAssistantApiField({\n source: null,\n query: {},\n get: (): never => {\n throw new Error(\n \"Composer is only available inside <AssistantProvider />\",\n );\n },\n }),\n message: createAssistantApiField({\n source: null,\n query: {},\n get: (): never => {\n throw new Error(\n \"Message is only available inside <ThreadPrimitive.Messages />\",\n );\n },\n }),\n part: createAssistantApiField({\n source: null,\n query: {},\n get: (): never => {\n throw new Error(\n \"Part is only available inside <MessagePrimitive.Parts />\",\n );\n },\n }),\n attachment: createAssistantApiField({\n source: null,\n query: {},\n get: (): never => {\n throw new Error(\n \"Attachment is only available inside <MessagePrimitive.Attachments /> or <ComposerPrimitive.Attachments />\",\n );\n },\n }),\n\n subscribe: NO_OP_FN,\n flushSync: NO_OP_FN,\n on: (selector) => {\n const { scope } = normalizeEventSelector(selector);\n throw new Error(`Event scope is not available in this component: ${scope}`);\n },\n\n registerModelContextProvider: () => {\n throw new Error(\n \"Registering model context providers is only available inside <AssistantProvider />\",\n );\n },\n __internal_getRuntime: () => {\n return null;\n },\n});\n\nexport const useAssistantApi = (): AssistantApi => {\n return useContext(AssistantApiContext);\n};\n\nconst mergeFns = <TArgs extends Array<unknown>>(\n fn1: (...args: TArgs) => void,\n fn2: (...args: TArgs) => void,\n) => {\n if (fn1 === NO_OP_FN) return fn2;\n if (fn2 === NO_OP_FN) return fn1;\n\n return (...args: TArgs) => {\n fn1(...args);\n fn2(...args);\n };\n};\n\nconst mergeFnsWithUnsubscribe = <TArgs extends Array<unknown>>(\n fn1: (...args: TArgs) => Unsubscribe,\n fn2: (...args: TArgs) => Unsubscribe,\n) => {\n if (fn1 === NO_OP_FN) return fn2;\n if (fn2 === NO_OP_FN) return fn1;\n\n return (...args: TArgs) => {\n const unsubscribe1 = fn1(...args);\n const unsubscribe2 = fn2(...args);\n\n return () => {\n unsubscribe1();\n unsubscribe2();\n };\n };\n};\n\nconst extendApi = (\n api: AssistantApi,\n api2: Partial<AssistantApi>,\n): AssistantApi => {\n const api2Subscribe = api2.subscribe;\n const api2FlushSync = api2.flushSync;\n return {\n ...api,\n ...api2,\n subscribe: mergeFnsWithUnsubscribe(\n api.subscribe,\n api2Subscribe ?? NO_OP_FN,\n ),\n flushSync: mergeFns(api.flushSync, api2FlushSync ?? NO_OP_FN),\n };\n};\n\nexport const AssistantProvider: FC<\n PropsWithChildren<{ api: Partial<AssistantApi> }>\n> = ({ api: api2, children }) => {\n const api = useAssistantApi();\n const extendedApi = useMemo(() => extendApi(api, api2), [api, api2]);\n\n return (\n <AssistantApiContext.Provider value={extendedApi}>\n {/* TODO temporarily allow accessing viewport state from outside the viewport */}\n {/* TODO figure out if this behavior should be deprecated, since it is quite hacky */}\n <ThreadViewportProvider>{children}</ThreadViewportProvider>\n </AssistantApiContext.Provider>\n );\n};\n"],"mappings":"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","names":[]}
@@ -7,7 +7,7 @@ export declare const createMessageConverter: <T extends object>(callback: useExt
7
7
  isRunning: boolean;
8
8
  joinStrategy?: "concat-content" | "none" | undefined;
9
9
  }) => ThreadMessage[];
10
- toThreadMessages: (messages: T[]) => ThreadMessage[];
10
+ toThreadMessages: (messages: T[], isRunning?: boolean) => ThreadMessage[];
11
11
  toOriginalMessages: (input: ThreadState | ThreadMessage | ThreadMessage["content"][number]) => unknown[];
12
12
  toOriginalMessage: (input: ThreadState | ThreadMessage | ThreadMessage["content"][number]) => {};
13
13
  useOriginalMessage: () => {};
@@ -21,8 +21,8 @@ var createMessageConverter = (callback) => {
21
21
  joinStrategy
22
22
  });
23
23
  },
24
- toThreadMessages: (messages) => {
25
- return convertExternalMessages(messages, callback, false);
24
+ toThreadMessages: (messages, isRunning = false) => {
25
+ return convertExternalMessages(messages, callback, isRunning);
26
26
  },
27
27
  toOriginalMessages: (input) => {
28
28
  const messages = getExternalStoreMessages(input);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/legacy-runtime/runtime-cores/external-store/createMessageConverter.tsx"],"sourcesContent":["\"use client\";\nimport { ThreadState } from \"../../runtime\";\nimport { useAssistantApi, useAssistantState } from \"../../../context\";\nimport { ThreadMessage } from \"../../../types\";\nimport {\n useExternalMessageConverter,\n convertExternalMessages,\n} from \"./external-message-converter\";\nimport { getExternalStoreMessages } from \"./getExternalStoreMessage\";\n\nexport const createMessageConverter = <T extends object>(\n callback: useExternalMessageConverter.Callback<T>,\n) => {\n const result = {\n useThreadMessages: ({\n messages,\n isRunning,\n joinStrategy,\n }: {\n messages: T[];\n isRunning: boolean;\n joinStrategy?: \"concat-content\" | \"none\" | undefined;\n }) => {\n return useExternalMessageConverter<T>({\n callback,\n messages,\n isRunning,\n joinStrategy,\n });\n },\n toThreadMessages: (messages: T[]) => {\n return convertExternalMessages(messages, callback, false); // TODO figure out isRunning\n },\n toOriginalMessages: (\n input: ThreadState | ThreadMessage | ThreadMessage[\"content\"][number],\n ) => {\n const messages = getExternalStoreMessages(input);\n if (messages.length === 0) throw new Error(\"No original messages found\");\n return messages;\n },\n toOriginalMessage: (\n input: ThreadState | ThreadMessage | ThreadMessage[\"content\"][number],\n ) => {\n const messages = result.toOriginalMessages(input);\n return messages[0]!;\n },\n useOriginalMessage: () => {\n const messageMessages = result.useOriginalMessages();\n const first = messageMessages[0]!;\n return first;\n },\n useOriginalMessages: () => {\n const api = useAssistantApi();\n const partMessages = useAssistantState((s) => {\n if (api.part.source) return getExternalStoreMessages(s.part);\n return undefined;\n });\n\n const messageMessages = useAssistantState<T[]>(({ message }) =>\n getExternalStoreMessages(message),\n );\n\n const messages = partMessages ?? messageMessages;\n if (messages.length === 0) throw new Error(\"No original messages found\");\n return messages;\n },\n };\n\n return result;\n};\n"],"mappings":";;;AAEA,SAAS,iBAAiB,yBAAyB;AAEnD;AAAA,EACE;AAAA,EACA;AAAA,OACK;AACP,SAAS,gCAAgC;AAElC,IAAM,yBAAyB,CACpC,aACG;AACH,QAAM,SAAS;AAAA,IACb,mBAAmB,CAAC;AAAA,MAClB;AAAA,MACA;AAAA,MACA;AAAA,IACF,MAIM;AACJ,aAAO,4BAA+B;AAAA,QACpC;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,CAAC;AAAA,IACH;AAAA,IACA,kBAAkB,CAAC,aAAkB;AACnC,aAAO,wBAAwB,UAAU,UAAU,KAAK;AAAA,IAC1D;AAAA,IACA,oBAAoB,CAClB,UACG;AACH,YAAM,WAAW,yBAAyB,KAAK;AAC/C,UAAI,SAAS,WAAW,EAAG,OAAM,IAAI,MAAM,4BAA4B;AACvE,aAAO;AAAA,IACT;AAAA,IACA,mBAAmB,CACjB,UACG;AACH,YAAM,WAAW,OAAO,mBAAmB,KAAK;AAChD,aAAO,SAAS,CAAC;AAAA,IACnB;AAAA,IACA,oBAAoB,MAAM;AACxB,YAAM,kBAAkB,OAAO,oBAAoB;AACnD,YAAM,QAAQ,gBAAgB,CAAC;AAC/B,aAAO;AAAA,IACT;AAAA,IACA,qBAAqB,MAAM;AACzB,YAAM,MAAM,gBAAgB;AAC5B,YAAM,eAAe,kBAAkB,CAAC,MAAM;AAC5C,YAAI,IAAI,KAAK,OAAQ,QAAO,yBAAyB,EAAE,IAAI;AAC3D,eAAO;AAAA,MACT,CAAC;AAED,YAAM,kBAAkB;AAAA,QAAuB,CAAC,EAAE,QAAQ,MACxD,yBAAyB,OAAO;AAAA,MAClC;AAEA,YAAM,WAAW,gBAAgB;AACjC,UAAI,SAAS,WAAW,EAAG,OAAM,IAAI,MAAM,4BAA4B;AACvE,aAAO;AAAA,IACT;AAAA,EACF;AAEA,SAAO;AACT;","names":[]}
1
+ {"version":3,"sources":["../../../../src/legacy-runtime/runtime-cores/external-store/createMessageConverter.tsx"],"sourcesContent":["\"use client\";\nimport { ThreadState } from \"../../runtime\";\nimport { useAssistantApi, useAssistantState } from \"../../../context\";\nimport { ThreadMessage } from \"../../../types\";\nimport {\n useExternalMessageConverter,\n convertExternalMessages,\n} from \"./external-message-converter\";\nimport { getExternalStoreMessages } from \"./getExternalStoreMessage\";\n\nexport const createMessageConverter = <T extends object>(\n callback: useExternalMessageConverter.Callback<T>,\n) => {\n const result = {\n useThreadMessages: ({\n messages,\n isRunning,\n joinStrategy,\n }: {\n messages: T[];\n isRunning: boolean;\n joinStrategy?: \"concat-content\" | \"none\" | undefined;\n }) => {\n return useExternalMessageConverter<T>({\n callback,\n messages,\n isRunning,\n joinStrategy,\n });\n },\n toThreadMessages: (messages: T[], isRunning = false) => {\n return convertExternalMessages(messages, callback, isRunning);\n },\n toOriginalMessages: (\n input: ThreadState | ThreadMessage | ThreadMessage[\"content\"][number],\n ) => {\n const messages = getExternalStoreMessages(input);\n if (messages.length === 0) throw new Error(\"No original messages found\");\n return messages;\n },\n toOriginalMessage: (\n input: ThreadState | ThreadMessage | ThreadMessage[\"content\"][number],\n ) => {\n const messages = result.toOriginalMessages(input);\n return messages[0]!;\n },\n useOriginalMessage: () => {\n const messageMessages = result.useOriginalMessages();\n const first = messageMessages[0]!;\n return first;\n },\n useOriginalMessages: () => {\n const api = useAssistantApi();\n const partMessages = useAssistantState((s) => {\n if (api.part.source) return getExternalStoreMessages(s.part);\n return undefined;\n });\n\n const messageMessages = useAssistantState<T[]>(({ message }) =>\n getExternalStoreMessages(message),\n );\n\n const messages = partMessages ?? messageMessages;\n if (messages.length === 0) throw new Error(\"No original messages found\");\n return messages;\n },\n };\n\n return result;\n};\n"],"mappings":";;;AAEA,SAAS,iBAAiB,yBAAyB;AAEnD;AAAA,EACE;AAAA,EACA;AAAA,OACK;AACP,SAAS,gCAAgC;AAElC,IAAM,yBAAyB,CACpC,aACG;AACH,QAAM,SAAS;AAAA,IACb,mBAAmB,CAAC;AAAA,MAClB;AAAA,MACA;AAAA,MACA;AAAA,IACF,MAIM;AACJ,aAAO,4BAA+B;AAAA,QACpC;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,CAAC;AAAA,IACH;AAAA,IACA,kBAAkB,CAAC,UAAe,YAAY,UAAU;AACtD,aAAO,wBAAwB,UAAU,UAAU,SAAS;AAAA,IAC9D;AAAA,IACA,oBAAoB,CAClB,UACG;AACH,YAAM,WAAW,yBAAyB,KAAK;AAC/C,UAAI,SAAS,WAAW,EAAG,OAAM,IAAI,MAAM,4BAA4B;AACvE,aAAO;AAAA,IACT;AAAA,IACA,mBAAmB,CACjB,UACG;AACH,YAAM,WAAW,OAAO,mBAAmB,KAAK;AAChD,aAAO,SAAS,CAAC;AAAA,IACnB;AAAA,IACA,oBAAoB,MAAM;AACxB,YAAM,kBAAkB,OAAO,oBAAoB;AACnD,YAAM,QAAQ,gBAAgB,CAAC;AAC/B,aAAO;AAAA,IACT;AAAA,IACA,qBAAqB,MAAM;AACzB,YAAM,MAAM,gBAAgB;AAC5B,YAAM,eAAe,kBAAkB,CAAC,MAAM;AAC5C,YAAI,IAAI,KAAK,OAAQ,QAAO,yBAAyB,EAAE,IAAI;AAC3D,eAAO;AAAA,MACT,CAAC;AAED,YAAM,kBAAkB;AAAA,QAAuB,CAAC,EAAE,QAAQ,MACxD,yBAAyB,OAAO;AAAA,MAClC;AAEA,YAAM,WAAW,gBAAgB;AACjC,UAAI,SAAS,WAAW,EAAG,OAAM,IAAI,MAAM,4BAA4B;AACvE,aAAO;AAAA,IACT;AAAA,EACF;AAEA,SAAO;AACT;","names":[]}
package/package.json CHANGED
@@ -28,7 +28,7 @@
28
28
  "conversational-ui",
29
29
  "conversational-ai"
30
30
  ],
31
- "version": "0.11.15",
31
+ "version": "0.11.17",
32
32
  "license": "MIT",
33
33
  "type": "module",
34
34
  "exports": {
@@ -0,0 +1,52 @@
1
+ "use client";
2
+
3
+ import { useMemo, type FC, type PropsWithChildren } from "react";
4
+ import {
5
+ AssistantApi,
6
+ AssistantProvider,
7
+ useAssistantApi,
8
+ createAssistantApiField,
9
+ } from "../react/AssistantApiContext";
10
+ import {
11
+ checkEventScope,
12
+ normalizeEventSelector,
13
+ } from "../../types/EventTypes";
14
+
15
+ export const MessageByIndexProvider: FC<
16
+ PropsWithChildren<{
17
+ index: number;
18
+ }>
19
+ > = ({ index, children }) => {
20
+ const api = useAssistantApi();
21
+ const api2 = useMemo(() => {
22
+ const getMessage = () => api.thread().message({ index });
23
+ return {
24
+ message: createAssistantApiField({
25
+ source: "thread",
26
+ query: { type: "index", index },
27
+ get: () => getMessage(),
28
+ }),
29
+ composer: createAssistantApiField({
30
+ source: "message",
31
+ query: {},
32
+ get: () => getMessage().composer,
33
+ }),
34
+ on(selector, callback) {
35
+ const { event, scope } = normalizeEventSelector(selector);
36
+ if (
37
+ !checkEventScope("composer", scope, event) &&
38
+ !checkEventScope("message", scope, event)
39
+ )
40
+ return api.on(selector, callback);
41
+
42
+ return api.on({ scope: "thread", event }, (e) => {
43
+ if (e.messageId === getMessage().getState().id) {
44
+ callback(e);
45
+ }
46
+ });
47
+ },
48
+ } satisfies Partial<AssistantApi>;
49
+ }, [api, index]);
50
+
51
+ return <AssistantProvider api={api2}>{children}</AssistantProvider>;
52
+ };
@@ -2,51 +2,250 @@
2
2
 
3
3
  import { useMemo, type FC, type PropsWithChildren } from "react";
4
4
  import {
5
- AssistantApi,
6
5
  AssistantProvider,
7
- useAssistantApi,
6
+ AssistantApi,
8
7
  createAssistantApiField,
9
8
  } from "../react/AssistantApiContext";
10
9
  import {
11
- checkEventScope,
12
- normalizeEventSelector,
13
- } from "../../types/EventTypes";
14
-
15
- export const MessageByIndexProvider: FC<
16
- PropsWithChildren<{
17
- index: number;
18
- }>
19
- > = ({ index, children }) => {
20
- const api = useAssistantApi();
21
- const api2 = useMemo(() => {
22
- const getMessage = () => api.thread().message({ index });
10
+ MessageClientApi,
11
+ MessageClientState,
12
+ } from "../../client/types/Message";
13
+ import {
14
+ resource,
15
+ tapInlineResource,
16
+ tapMemo,
17
+ tapState,
18
+ } from "@assistant-ui/tap";
19
+ import { useResource } from "@assistant-ui/tap/react";
20
+ import { asStore, tapApi } from "../../utils/tap-store";
21
+ import {
22
+ ThreadAssistantMessagePart,
23
+ ThreadMessage,
24
+ ThreadUserMessagePart,
25
+ } from "../../types/AssistantTypes";
26
+ import {
27
+ ComposerClientApi,
28
+ ComposerClientState,
29
+ } from "../../client/types/Composer";
30
+ import {
31
+ MessagePartClientApi,
32
+ MessagePartClientState,
33
+ } from "../../client/types/Part";
34
+ import { tapLookupResources } from "../../client/util-hooks/tapLookupResources";
35
+ import { Attachment } from "../../types";
36
+ import { AttachmentClientApi } from "../../client/types/Attachment";
37
+
38
+ const NoOpComposerClient = resource(({ type }: { type: "edit" | "thread" }) => {
39
+ const state = tapMemo<ComposerClientState>(() => {
40
+ return {
41
+ isEditing: false,
42
+ isEmpty: true,
43
+ text: "",
44
+ attachmentAccept: "*",
45
+ attachments: [],
46
+ role: "user",
47
+ runConfig: {},
48
+ canCancel: false,
49
+ type: type,
50
+ };
51
+ }, [type]);
52
+
53
+ return tapApi<ComposerClientApi>({
54
+ getState: () => state,
55
+ setText: () => {
56
+ throw new Error("Not supported");
57
+ },
58
+ setRole: () => {
59
+ throw new Error("Not supported");
60
+ },
61
+ setRunConfig: () => {
62
+ throw new Error("Not supported");
63
+ },
64
+ addAttachment: () => {
65
+ throw new Error("Not supported");
66
+ },
67
+ clearAttachments: () => {
68
+ throw new Error("Not supported");
69
+ },
70
+ attachment: () => {
71
+ throw new Error("Not supported");
72
+ },
73
+ reset: () => {
74
+ throw new Error("Not supported");
75
+ },
76
+ send: () => {
77
+ throw new Error("Not supported");
78
+ },
79
+ cancel: () => {
80
+ throw new Error("Not supported");
81
+ },
82
+ beginEdit: () => {
83
+ throw new Error("Not supported");
84
+ },
85
+ __internal_getRuntime: () => null,
86
+ });
87
+ });
88
+
89
+ const ThreadMessagePartClient = resource(
90
+ ({ part }: { part: ThreadAssistantMessagePart | ThreadUserMessagePart }) => {
91
+ const state = tapMemo<MessagePartClientState>(() => {
92
+ return {
93
+ ...part,
94
+ status: { type: "complete" },
95
+ };
96
+ }, [part]);
97
+
98
+ return tapApi<MessagePartClientApi>(
99
+ {
100
+ getState: () => state,
101
+ addToolResult: () => {
102
+ throw new Error("Not supported");
103
+ },
104
+ __internal_getRuntime: () => null,
105
+ },
106
+ {
107
+ key:
108
+ state.type === "tool-call"
109
+ ? "toolCallId-" + state.toolCallId
110
+ : undefined,
111
+ },
112
+ );
113
+ },
114
+ );
115
+
116
+ const ThreadMessageAttachmentClient = resource(
117
+ ({ attachment }: { attachment: Attachment }) => {
118
+ return tapApi<AttachmentClientApi>(
119
+ {
120
+ getState: () => attachment,
121
+ remove: () => {
122
+ throw new Error("Not supported");
123
+ },
124
+ __internal_getRuntime: () => null,
125
+ },
126
+ {
127
+ key: attachment.id,
128
+ },
129
+ );
130
+ },
131
+ );
132
+
133
+ type ThreadMessageClientProps = {
134
+ message: ThreadMessage;
135
+ isLast?: boolean;
136
+ branchNumber?: number;
137
+ branchCount?: number;
138
+ };
139
+
140
+ const ThreadMessageClient = resource(
141
+ ({
142
+ message,
143
+ isLast = true,
144
+ branchNumber = 1,
145
+ branchCount = 1,
146
+ }: ThreadMessageClientProps) => {
147
+ const [isCopiedState, setIsCopied] = tapState(false);
148
+ const [isHoveringState, setIsHovering] = tapState(false);
149
+
150
+ const parts = tapLookupResources(
151
+ message.content.map((_, idx) =>
152
+ ThreadMessagePartClient({ part: message.content[idx]! }, { key: idx }),
153
+ ),
154
+ );
155
+
156
+ const attachments = tapLookupResources(
157
+ message.attachments?.map((_, idx) =>
158
+ ThreadMessageAttachmentClient(
159
+ { attachment: message.attachments![idx]! },
160
+ { key: idx },
161
+ ),
162
+ ) ?? [],
163
+ );
164
+
165
+ const composerState = tapInlineResource(
166
+ NoOpComposerClient({ type: "edit" }),
167
+ );
168
+
169
+ const state = tapMemo<MessageClientState>(() => {
170
+ return {
171
+ ...message,
172
+ parts: parts.state,
173
+ composer: composerState.state,
174
+ parentId: null,
175
+ isLast,
176
+ branchNumber,
177
+ branchCount,
178
+ speech: undefined,
179
+ submittedFeedback: undefined,
180
+ isCopied: isCopiedState,
181
+ isHovering: isHoveringState,
182
+ };
183
+ }, [message, isCopiedState, isHoveringState, isLast]);
184
+
185
+ return tapApi<MessageClientApi>({
186
+ getState: () => state,
187
+ composer: composerState.api,
188
+ part: (selector) => {
189
+ if ("index" in selector) {
190
+ return parts.api({ index: selector.index });
191
+ } else {
192
+ return parts.api({ key: "toolCallId-" + selector.toolCallId });
193
+ }
194
+ },
195
+ attachment: (selector) => {
196
+ if ("id" in selector) {
197
+ return attachments.api({ key: selector.id });
198
+ } else {
199
+ return attachments.api(selector);
200
+ }
201
+ },
202
+ reload: () => {
203
+ throw new Error("Not supported in ThreadMessageProvider");
204
+ },
205
+ speak: () => {
206
+ throw new Error("Not supported in ThreadMessageProvider");
207
+ },
208
+ stopSpeaking: () => {
209
+ throw new Error("Not supported in ThreadMessageProvider");
210
+ },
211
+ submitFeedback: () => {
212
+ throw new Error("Not supported in ThreadMessageProvider");
213
+ },
214
+ switchToBranch: () => {
215
+ throw new Error("Not supported in ThreadMessageProvider");
216
+ },
217
+ getCopyText: () => {
218
+ return message.content
219
+ .map((part) => {
220
+ if ("text" in part && typeof part.text === "string") {
221
+ return part.text;
222
+ }
223
+ return "";
224
+ })
225
+ .join("\n");
226
+ },
227
+ setIsCopied,
228
+ setIsHovering,
229
+ __internal_getRuntime: () => null,
230
+ });
231
+ },
232
+ );
233
+
234
+ export const MessageProvider: FC<
235
+ PropsWithChildren<ThreadMessageClientProps>
236
+ > = ({ children, ...props }) => {
237
+ const store = useResource(asStore(ThreadMessageClient(props)));
238
+ const api = useMemo(() => {
23
239
  return {
24
240
  message: createAssistantApiField({
25
- source: "thread",
26
- query: { type: "index", index },
27
- get: () => getMessage(),
28
- }),
29
- composer: createAssistantApiField({
30
- source: "message",
241
+ source: "root",
31
242
  query: {},
32
- get: () => getMessage().composer,
243
+ get: () => store.getState().api,
33
244
  }),
34
- on(selector, callback) {
35
- const { event, scope } = normalizeEventSelector(selector);
36
- if (
37
- !checkEventScope("composer", scope, event) &&
38
- !checkEventScope("message", scope, event)
39
- )
40
- return api.on(selector, callback);
41
-
42
- return api.on({ scope: "thread", event }, (e) => {
43
- if (e.messageId === getMessage().getState().id) {
44
- callback(e);
45
- }
46
- });
47
- },
245
+ subscribe: store.subscribe,
246
+ flushSync: store.flushSync,
48
247
  } satisfies Partial<AssistantApi>;
49
- }, [api, index]);
248
+ }, [store]);
50
249
 
51
- return <AssistantProvider api={api2}>{children}</AssistantProvider>;
250
+ return <AssistantProvider api={api}>{children}</AssistantProvider>;
52
251
  };
@@ -3,10 +3,11 @@ export {
3
3
  ThreadListItemByIndexProvider,
4
4
  ThreadListItemByIdProvider,
5
5
  } from "./ThreadListItemProvider";
6
- export { MessageByIndexProvider } from "./MessageProvider";
7
- export { PartByIndexProvider } from "./PartProvider";
6
+ export { MessageByIndexProvider } from "./MessageByIndexProvider";
7
+ export { PartByIndexProvider } from "./PartByIndexProvider";
8
8
  export {
9
9
  MessageAttachmentByIndexProvider,
10
10
  ComposerAttachmentByIndexProvider,
11
- } from "./AttachmentProvider";
11
+ } from "./AttachmentByIndexProvider";
12
12
  export { TextMessagePartProvider } from "./TextMessagePartProvider";
13
+ export { MessageProvider } from "./MessageProvider";
@@ -86,10 +86,15 @@ type ComposerMeta = {
86
86
  query: Record<string, never>;
87
87
  };
88
88
 
89
- type MessageMeta = {
90
- source: "thread";
91
- query: { type: "index"; index: number };
92
- };
89
+ type MessageMeta =
90
+ | {
91
+ source: "thread";
92
+ query: { type: "index"; index: number };
93
+ }
94
+ | {
95
+ source: "root";
96
+ query: Record<string, never>;
97
+ };
93
98
 
94
99
  type PartMeta = {
95
100
  source: "message" | "root";
@@ -28,8 +28,8 @@ export const createMessageConverter = <T extends object>(
28
28
  joinStrategy,
29
29
  });
30
30
  },
31
- toThreadMessages: (messages: T[]) => {
32
- return convertExternalMessages(messages, callback, false); // TODO figure out isRunning
31
+ toThreadMessages: (messages: T[], isRunning = false) => {
32
+ return convertExternalMessages(messages, callback, isRunning);
33
33
  },
34
34
  toOriginalMessages: (
35
35
  input: ThreadState | ThreadMessage | ThreadMessage["content"][number],
@@ -1 +0,0 @@
1
- {"version":3,"file":"AttachmentProvider.d.ts","sourceRoot":"","sources":["../../../src/context/providers/AttachmentProvider.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAW,KAAK,EAAE,EAAE,KAAK,iBAAiB,EAAE,MAAM,OAAO,CAAC;AASjE,eAAO,MAAM,gCAAgC,EAAE,EAAE,CAC/C,iBAAiB,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;CACf,CAAC,CAcH,CAAC;AAEF,eAAO,MAAM,iCAAiC,EAAE,EAAE,CAChD,iBAAiB,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;CACf,CAAC,CAcH,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/context/providers/AttachmentProvider.tsx"],"sourcesContent":["\"use client\";\n\nimport { useMemo, type FC, type PropsWithChildren } from \"react\";\n\nimport {\n AssistantApi,\n AssistantProvider,\n useAssistantApi,\n createAssistantApiField,\n} from \"../react/AssistantApiContext\";\n\nexport const MessageAttachmentByIndexProvider: FC<\n PropsWithChildren<{\n index: number;\n }>\n> = ({ index, children }) => {\n const api = useAssistantApi();\n const api2 = useMemo(() => {\n return {\n attachment: createAssistantApiField({\n source: \"message\",\n query: { type: \"index\", index },\n get: () => api.message().attachment({ index }),\n }),\n } satisfies Partial<AssistantApi>;\n }, [api, index]);\n\n return <AssistantProvider api={api2}>{children}</AssistantProvider>;\n};\n\nexport const ComposerAttachmentByIndexProvider: FC<\n PropsWithChildren<{\n index: number;\n }>\n> = ({ index, children }) => {\n const api = useAssistantApi();\n const api2 = useMemo(() => {\n return {\n attachment: createAssistantApiField({\n source: \"composer\",\n query: { type: \"index\", index },\n get: () => api.composer().attachment({ index }),\n }),\n } satisfies Partial<AssistantApi>;\n }, [api, index]);\n\n return <AssistantProvider api={api2}>{children}</AssistantProvider>;\n};\n"],"mappings":";;;AAEA,SAAS,eAAgD;AAEzD;AAAA,EAEE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAkBE;AAhBF,IAAM,mCAIT,CAAC,EAAE,OAAO,SAAS,MAAM;AAC3B,QAAM,MAAM,gBAAgB;AAC5B,QAAM,OAAO,QAAQ,MAAM;AACzB,WAAO;AAAA,MACL,YAAY,wBAAwB;AAAA,QAClC,QAAQ;AAAA,QACR,OAAO,EAAE,MAAM,SAAS,MAAM;AAAA,QAC9B,KAAK,MAAM,IAAI,QAAQ,EAAE,WAAW,EAAE,MAAM,CAAC;AAAA,MAC/C,CAAC;AAAA,IACH;AAAA,EACF,GAAG,CAAC,KAAK,KAAK,CAAC;AAEf,SAAO,oBAAC,qBAAkB,KAAK,MAAO,UAAS;AACjD;AAEO,IAAM,oCAIT,CAAC,EAAE,OAAO,SAAS,MAAM;AAC3B,QAAM,MAAM,gBAAgB;AAC5B,QAAM,OAAO,QAAQ,MAAM;AACzB,WAAO;AAAA,MACL,YAAY,wBAAwB;AAAA,QAClC,QAAQ;AAAA,QACR,OAAO,EAAE,MAAM,SAAS,MAAM;AAAA,QAC9B,KAAK,MAAM,IAAI,SAAS,EAAE,WAAW,EAAE,MAAM,CAAC;AAAA,MAChD,CAAC;AAAA,IACH;AAAA,EACF,GAAG,CAAC,KAAK,KAAK,CAAC;AAEf,SAAO,oBAAC,qBAAkB,KAAK,MAAO,UAAS;AACjD;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"PartProvider.d.ts","sourceRoot":"","sources":["../../../src/context/providers/PartProvider.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAW,KAAK,EAAE,EAAE,KAAK,iBAAiB,EAAE,MAAM,OAAO,CAAC;AAQjE,eAAO,MAAM,mBAAmB,EAAE,EAAE,CAClC,iBAAiB,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;CACf,CAAC,CAcH,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/context/providers/PartProvider.tsx"],"sourcesContent":["\"use client\";\n\nimport { useMemo, type FC, type PropsWithChildren } from \"react\";\nimport {\n AssistantApi,\n AssistantProvider,\n useAssistantApi,\n createAssistantApiField,\n} from \"../react/AssistantApiContext\";\n\nexport const PartByIndexProvider: FC<\n PropsWithChildren<{\n index: number;\n }>\n> = ({ index, children }) => {\n const api = useAssistantApi();\n const api2 = useMemo(() => {\n return {\n part: createAssistantApiField({\n source: \"message\",\n query: { type: \"index\", index },\n get: () => api.message().part({ index }),\n }),\n } satisfies Partial<AssistantApi>;\n }, [api, index]);\n\n return <AssistantProvider api={api2}>{children}</AssistantProvider>;\n};\n"],"mappings":";;;AAEA,SAAS,eAAgD;AACzD;AAAA,EAEE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAkBE;AAhBF,IAAM,sBAIT,CAAC,EAAE,OAAO,SAAS,MAAM;AAC3B,QAAM,MAAM,gBAAgB;AAC5B,QAAM,OAAO,QAAQ,MAAM;AACzB,WAAO;AAAA,MACL,MAAM,wBAAwB;AAAA,QAC5B,QAAQ;AAAA,QACR,OAAO,EAAE,MAAM,SAAS,MAAM;AAAA,QAC9B,KAAK,MAAM,IAAI,QAAQ,EAAE,KAAK,EAAE,MAAM,CAAC;AAAA,MACzC,CAAC;AAAA,IACH;AAAA,EACF,GAAG,CAAC,KAAK,KAAK,CAAC;AAEf,SAAO,oBAAC,qBAAkB,KAAK,MAAO,UAAS;AACjD;","names":[]}