@assistant-ui/react 0.10.42 → 0.10.44

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 (58) hide show
  1. package/dist/primitives/composer/ComposerAttachments.d.ts +24 -0
  2. package/dist/primitives/composer/ComposerAttachments.d.ts.map +1 -1
  3. package/dist/primitives/composer/ComposerAttachments.js +14 -13
  4. package/dist/primitives/composer/ComposerAttachments.js.map +1 -1
  5. package/dist/primitives/composer/index.d.ts +1 -0
  6. package/dist/primitives/composer/index.d.ts.map +1 -1
  7. package/dist/primitives/composer/index.js +2 -0
  8. package/dist/primitives/composer/index.js.map +1 -1
  9. package/dist/primitives/message/MessageAttachments.d.ts +24 -0
  10. package/dist/primitives/message/MessageAttachments.d.ts.map +1 -1
  11. package/dist/primitives/message/MessageAttachments.js +14 -13
  12. package/dist/primitives/message/MessageAttachments.js.map +1 -1
  13. package/dist/primitives/message/MessageParts.d.ts +24 -0
  14. package/dist/primitives/message/MessageParts.d.ts.map +1 -1
  15. package/dist/primitives/message/MessageParts.js +16 -15
  16. package/dist/primitives/message/MessageParts.js.map +1 -1
  17. package/dist/primitives/message/index.d.ts +2 -0
  18. package/dist/primitives/message/index.d.ts.map +1 -1
  19. package/dist/primitives/message/index.js +4 -0
  20. package/dist/primitives/message/index.js.map +1 -1
  21. package/dist/primitives/thread/ThreadMessages.d.ts +24 -0
  22. package/dist/primitives/thread/ThreadMessages.d.ts.map +1 -1
  23. package/dist/primitives/thread/ThreadMessages.js +20 -15
  24. package/dist/primitives/thread/ThreadMessages.js.map +1 -1
  25. package/dist/primitives/thread/index.d.ts +1 -0
  26. package/dist/primitives/thread/index.d.ts.map +1 -1
  27. package/dist/primitives/thread/index.js +2 -0
  28. package/dist/primitives/thread/index.js.map +1 -1
  29. package/dist/primitives/threadList/ThreadListItems.d.ts +24 -0
  30. package/dist/primitives/threadList/ThreadListItems.d.ts.map +1 -1
  31. package/dist/primitives/threadList/ThreadListItems.js +15 -18
  32. package/dist/primitives/threadList/ThreadListItems.js.map +1 -1
  33. package/dist/primitives/threadList/index.d.ts +1 -0
  34. package/dist/primitives/threadList/index.d.ts.map +1 -1
  35. package/dist/primitives/threadList/index.js +2 -0
  36. package/dist/primitives/threadList/index.js.map +1 -1
  37. package/dist/runtimes/composer/BaseComposerRuntimeCore.d.ts.map +1 -1
  38. package/dist/runtimes/composer/BaseComposerRuntimeCore.js +5 -4
  39. package/dist/runtimes/composer/BaseComposerRuntimeCore.js.map +1 -1
  40. package/dist/runtimes/external-store/ExternalStoreThreadRuntimeCore.d.ts +4 -1
  41. package/dist/runtimes/external-store/ExternalStoreThreadRuntimeCore.d.ts.map +1 -1
  42. package/dist/runtimes/external-store/ExternalStoreThreadRuntimeCore.js +25 -10
  43. package/dist/runtimes/external-store/ExternalStoreThreadRuntimeCore.js.map +1 -1
  44. package/dist/types/MessagePartTypes.d.ts +2 -0
  45. package/dist/types/MessagePartTypes.d.ts.map +1 -1
  46. package/package.json +1 -1
  47. package/src/primitives/composer/ComposerAttachments.tsx +48 -24
  48. package/src/primitives/composer/index.ts +1 -0
  49. package/src/primitives/message/MessageAttachments.tsx +48 -24
  50. package/src/primitives/message/MessageParts.tsx +53 -33
  51. package/src/primitives/message/index.ts +2 -0
  52. package/src/primitives/thread/ThreadMessages.tsx +47 -27
  53. package/src/primitives/thread/index.ts +1 -0
  54. package/src/primitives/threadList/ThreadListItems.tsx +48 -33
  55. package/src/primitives/threadList/index.ts +1 -0
  56. package/src/runtimes/composer/BaseComposerRuntimeCore.tsx +5 -4
  57. package/src/runtimes/external-store/ExternalStoreThreadRuntimeCore.tsx +29 -11
  58. package/src/types/MessagePartTypes.ts +2 -0
@@ -43,28 +43,32 @@ var ThreadMessageComponent = ({
43
43
  const Component = getComponent(components, role, isEditing);
44
44
  return /* @__PURE__ */ jsx(Component, {});
45
45
  };
46
- var ThreadMessageImpl = ({
47
- messageIndex,
48
- components
49
- }) => {
50
- const threadRuntime = useThreadRuntime();
51
- const runtime = useMemo(
52
- () => threadRuntime.getMesssageByIndex(messageIndex),
53
- [threadRuntime, messageIndex]
54
- );
55
- return /* @__PURE__ */ jsx(MessageRuntimeProvider, { runtime, children: /* @__PURE__ */ jsx(ThreadMessageComponent, { components }) });
56
- };
57
- var ThreadMessage = memo(
58
- ThreadMessageImpl,
59
- (prev, next) => prev.messageIndex === next.messageIndex && isComponentsSame(prev.components, next.components)
46
+ var ThreadPrimitiveMessageByIndex = memo(
47
+ ({ index, components }) => {
48
+ const threadRuntime = useThreadRuntime();
49
+ const runtime = useMemo(
50
+ () => threadRuntime.getMesssageByIndex(index),
51
+ [threadRuntime, index]
52
+ );
53
+ return /* @__PURE__ */ jsx(MessageRuntimeProvider, { runtime, children: /* @__PURE__ */ jsx(ThreadMessageComponent, { components }) });
54
+ },
55
+ (prev, next) => prev.index === next.index && isComponentsSame(prev.components, next.components)
60
56
  );
57
+ ThreadPrimitiveMessageByIndex.displayName = "ThreadPrimitive.MessageByIndex";
61
58
  var ThreadPrimitiveMessagesImpl = ({
62
59
  components
63
60
  }) => {
64
61
  const messagesLength = useThread((t) => t.messages.length);
65
62
  const messageElements = useMemo(() => {
66
63
  if (messagesLength === 0) return null;
67
- return Array.from({ length: messagesLength }, (_, index) => /* @__PURE__ */ jsx(ThreadMessage, { messageIndex: index, components }, index));
64
+ return Array.from({ length: messagesLength }, (_, index) => /* @__PURE__ */ jsx(
65
+ ThreadPrimitiveMessageByIndex,
66
+ {
67
+ index,
68
+ components
69
+ },
70
+ index
71
+ ));
68
72
  }, [messagesLength, components]);
69
73
  return messageElements;
70
74
  };
@@ -74,6 +78,7 @@ var ThreadPrimitiveMessages = memo(
74
78
  (prev, next) => isComponentsSame(prev.components, next.components)
75
79
  );
76
80
  export {
81
+ ThreadPrimitiveMessageByIndex,
77
82
  ThreadPrimitiveMessages,
78
83
  ThreadPrimitiveMessagesImpl
79
84
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/primitives/thread/ThreadMessages.tsx"],"sourcesContent":["\"use client\";\n\nimport { type ComponentType, type FC, memo, useMemo } from \"react\";\nimport { useThread, useThreadRuntime } from \"../../context/react/ThreadContext\";\nimport { MessageRuntimeProvider } from \"../../context/providers/MessageRuntimeProvider\";\nimport { useEditComposer, useMessage } from \"../../context\";\nimport { ThreadMessage as ThreadMessageType } from \"../../types\";\n\nexport namespace ThreadPrimitiveMessages {\n export type Props = {\n /**\n * Component configuration for rendering different types of messages and composers.\n *\n * You can provide either:\n * 1. A single `Message` component that handles all message types\n * 2. Specific components for `UserMessage` and `AssistantMessage` (with optional `SystemMessage`)\n *\n * Optional edit composer components can be provided to customize the editing experience\n * for different message types when users edit their messages.\n */\n components:\n | {\n /** Component used to render all message types */\n Message: ComponentType;\n /** Component used when editing any message type */\n EditComposer?: ComponentType | undefined;\n /** Component used when editing user messages specifically */\n UserEditComposer?: ComponentType | undefined;\n /** Component used when editing assistant messages specifically */\n AssistantEditComposer?: ComponentType | undefined;\n /** Component used when editing system messages specifically */\n SystemEditComposer?: ComponentType | undefined;\n /** Component used to render user messages specifically */\n UserMessage?: ComponentType | undefined;\n /** Component used to render assistant messages specifically */\n AssistantMessage?: ComponentType | undefined;\n /** Component used to render system messages specifically */\n SystemMessage?: ComponentType | undefined;\n }\n | {\n /** Component used to render all message types (fallback) */\n Message?: ComponentType | undefined;\n /** Component used when editing any message type */\n EditComposer?: ComponentType | undefined;\n /** Component used when editing user messages specifically */\n UserEditComposer?: ComponentType | undefined;\n /** Component used when editing assistant messages specifically */\n AssistantEditComposer?: ComponentType | undefined;\n /** Component used when editing system messages specifically */\n SystemEditComposer?: ComponentType | undefined;\n /** Component used to render user messages */\n UserMessage: ComponentType;\n /** Component used to render assistant messages */\n AssistantMessage: ComponentType;\n /** Component used to render system messages */\n SystemMessage?: ComponentType | undefined;\n };\n };\n}\n\nconst isComponentsSame = (\n prev: ThreadPrimitiveMessages.Props[\"components\"],\n next: ThreadPrimitiveMessages.Props[\"components\"],\n) => {\n return (\n prev.Message === next.Message &&\n prev.EditComposer === next.EditComposer &&\n prev.UserEditComposer === next.UserEditComposer &&\n prev.AssistantEditComposer === next.AssistantEditComposer &&\n prev.SystemEditComposer === next.SystemEditComposer &&\n prev.UserMessage === next.UserMessage &&\n prev.AssistantMessage === next.AssistantMessage &&\n prev.SystemMessage === next.SystemMessage\n );\n};\n\nconst DEFAULT_SYSTEM_MESSAGE = () => null;\n\nconst getComponent = (\n components: ThreadPrimitiveMessages.Props[\"components\"],\n role: ThreadMessageType[\"role\"],\n isEditing: boolean,\n) => {\n switch (role) {\n case \"user\":\n if (isEditing) {\n return (\n components.UserEditComposer ??\n components.EditComposer ??\n components.UserMessage ??\n (components.Message as ComponentType)\n );\n } else {\n return components.UserMessage ?? (components.Message as ComponentType);\n }\n case \"assistant\":\n if (isEditing) {\n return (\n components.AssistantEditComposer ??\n components.EditComposer ??\n components.AssistantMessage ??\n (components.Message as ComponentType)\n );\n } else {\n return (\n components.AssistantMessage ?? (components.Message as ComponentType)\n );\n }\n case \"system\":\n if (isEditing) {\n return (\n components.SystemEditComposer ??\n components.EditComposer ??\n components.SystemMessage ??\n (components.Message as ComponentType)\n );\n } else {\n return components.SystemMessage ?? DEFAULT_SYSTEM_MESSAGE;\n }\n default:\n const _exhaustiveCheck: never = role;\n throw new Error(`Unknown message role: ${_exhaustiveCheck}`);\n }\n};\n\ntype ThreadMessageComponentProps = {\n components: ThreadPrimitiveMessages.Props[\"components\"];\n};\n\nconst ThreadMessageComponent: FC<ThreadMessageComponentProps> = ({\n components,\n}) => {\n const role = useMessage((m) => m.role);\n const isEditing = useEditComposer((c) => c.isEditing);\n const Component = getComponent(components, role, isEditing);\n\n return <Component />;\n};\n\ntype ThreadMessageProps = {\n messageIndex: number;\n components: ThreadPrimitiveMessages.Props[\"components\"];\n};\n\nconst ThreadMessageImpl: FC<ThreadMessageProps> = ({\n messageIndex,\n components,\n}) => {\n const threadRuntime = useThreadRuntime();\n const runtime = useMemo(\n () => threadRuntime.getMesssageByIndex(messageIndex),\n [threadRuntime, messageIndex],\n );\n\n return (\n <MessageRuntimeProvider runtime={runtime}>\n <ThreadMessageComponent components={components} />\n </MessageRuntimeProvider>\n );\n};\n\nconst ThreadMessage = memo(\n ThreadMessageImpl,\n (prev, next) =>\n prev.messageIndex === next.messageIndex &&\n isComponentsSame(prev.components, next.components),\n);\n\n/**\n * Renders all messages in the current thread using the provided component configuration.\n *\n * This component automatically renders all messages in the thread, providing the appropriate\n * message context for each message. It handles different message types (user, assistant, system)\n * and supports editing mode through the provided edit composer components.\n *\n * @example\n * ```tsx\n * <ThreadPrimitive.Messages\n * components={{\n * UserMessage: MyUserMessage,\n * AssistantMessage: MyAssistantMessage,\n * EditComposer: MyEditComposer\n * }}\n * />\n * ```\n */\nexport const ThreadPrimitiveMessagesImpl: FC<ThreadPrimitiveMessages.Props> = ({\n components,\n}) => {\n const messagesLength = useThread((t) => t.messages.length);\n\n const messageElements = useMemo(() => {\n if (messagesLength === 0) return null;\n return Array.from({ length: messagesLength }, (_, index) => (\n <ThreadMessage key={index} messageIndex={index} components={components} />\n ));\n }, [messagesLength, components]);\n\n return messageElements;\n};\n\nThreadPrimitiveMessagesImpl.displayName = \"ThreadPrimitive.Messages\";\n\nexport const ThreadPrimitiveMessages = memo(\n ThreadPrimitiveMessagesImpl,\n (prev, next) => isComponentsSame(prev.components, next.components),\n);\n"],"mappings":";;;AAEA,SAAsC,MAAM,eAAe;AAC3D,SAAS,WAAW,wBAAwB;AAC5C,SAAS,8BAA8B;AACvC,SAAS,iBAAiB,kBAAkB;AAmInC;AA5ET,IAAM,mBAAmB,CACvB,MACA,SACG;AACH,SACE,KAAK,YAAY,KAAK,WACtB,KAAK,iBAAiB,KAAK,gBAC3B,KAAK,qBAAqB,KAAK,oBAC/B,KAAK,0BAA0B,KAAK,yBACpC,KAAK,uBAAuB,KAAK,sBACjC,KAAK,gBAAgB,KAAK,eAC1B,KAAK,qBAAqB,KAAK,oBAC/B,KAAK,kBAAkB,KAAK;AAEhC;AAEA,IAAM,yBAAyB,MAAM;AAErC,IAAM,eAAe,CACnB,YACA,MACA,cACG;AACH,UAAQ,MAAM;AAAA,IACZ,KAAK;AACH,UAAI,WAAW;AACb,eACE,WAAW,oBACX,WAAW,gBACX,WAAW,eACV,WAAW;AAAA,MAEhB,OAAO;AACL,eAAO,WAAW,eAAgB,WAAW;AAAA,MAC/C;AAAA,IACF,KAAK;AACH,UAAI,WAAW;AACb,eACE,WAAW,yBACX,WAAW,gBACX,WAAW,oBACV,WAAW;AAAA,MAEhB,OAAO;AACL,eACE,WAAW,oBAAqB,WAAW;AAAA,MAE/C;AAAA,IACF,KAAK;AACH,UAAI,WAAW;AACb,eACE,WAAW,sBACX,WAAW,gBACX,WAAW,iBACV,WAAW;AAAA,MAEhB,OAAO;AACL,eAAO,WAAW,iBAAiB;AAAA,MACrC;AAAA,IACF;AACE,YAAM,mBAA0B;AAChC,YAAM,IAAI,MAAM,yBAAyB,gBAAgB,EAAE;AAAA,EAC/D;AACF;AAMA,IAAM,yBAA0D,CAAC;AAAA,EAC/D;AACF,MAAM;AACJ,QAAM,OAAO,WAAW,CAAC,MAAM,EAAE,IAAI;AACrC,QAAM,YAAY,gBAAgB,CAAC,MAAM,EAAE,SAAS;AACpD,QAAM,YAAY,aAAa,YAAY,MAAM,SAAS;AAE1D,SAAO,oBAAC,aAAU;AACpB;AAOA,IAAM,oBAA4C,CAAC;AAAA,EACjD;AAAA,EACA;AACF,MAAM;AACJ,QAAM,gBAAgB,iBAAiB;AACvC,QAAM,UAAU;AAAA,IACd,MAAM,cAAc,mBAAmB,YAAY;AAAA,IACnD,CAAC,eAAe,YAAY;AAAA,EAC9B;AAEA,SACE,oBAAC,0BAAuB,SACtB,8BAAC,0BAAuB,YAAwB,GAClD;AAEJ;AAEA,IAAM,gBAAgB;AAAA,EACpB;AAAA,EACA,CAAC,MAAM,SACL,KAAK,iBAAiB,KAAK,gBAC3B,iBAAiB,KAAK,YAAY,KAAK,UAAU;AACrD;AAoBO,IAAM,8BAAiE,CAAC;AAAA,EAC7E;AACF,MAAM;AACJ,QAAM,iBAAiB,UAAU,CAAC,MAAM,EAAE,SAAS,MAAM;AAEzD,QAAM,kBAAkB,QAAQ,MAAM;AACpC,QAAI,mBAAmB,EAAG,QAAO;AACjC,WAAO,MAAM,KAAK,EAAE,QAAQ,eAAe,GAAG,CAAC,GAAG,UAChD,oBAAC,iBAA0B,cAAc,OAAO,cAA5B,KAAoD,CACzE;AAAA,EACH,GAAG,CAAC,gBAAgB,UAAU,CAAC;AAE/B,SAAO;AACT;AAEA,4BAA4B,cAAc;AAEnC,IAAM,0BAA0B;AAAA,EACrC;AAAA,EACA,CAAC,MAAM,SAAS,iBAAiB,KAAK,YAAY,KAAK,UAAU;AACnE;","names":[]}
1
+ {"version":3,"sources":["../../../src/primitives/thread/ThreadMessages.tsx"],"sourcesContent":["\"use client\";\n\nimport { type ComponentType, type FC, memo, useMemo } from \"react\";\nimport { useThread, useThreadRuntime } from \"../../context/react/ThreadContext\";\nimport { MessageRuntimeProvider } from \"../../context/providers/MessageRuntimeProvider\";\nimport { useEditComposer, useMessage } from \"../../context\";\nimport { ThreadMessage as ThreadMessageType } from \"../../types\";\n\nexport namespace ThreadPrimitiveMessages {\n export type Props = {\n /**\n * Component configuration for rendering different types of messages and composers.\n *\n * You can provide either:\n * 1. A single `Message` component that handles all message types\n * 2. Specific components for `UserMessage` and `AssistantMessage` (with optional `SystemMessage`)\n *\n * Optional edit composer components can be provided to customize the editing experience\n * for different message types when users edit their messages.\n */\n components:\n | {\n /** Component used to render all message types */\n Message: ComponentType;\n /** Component used when editing any message type */\n EditComposer?: ComponentType | undefined;\n /** Component used when editing user messages specifically */\n UserEditComposer?: ComponentType | undefined;\n /** Component used when editing assistant messages specifically */\n AssistantEditComposer?: ComponentType | undefined;\n /** Component used when editing system messages specifically */\n SystemEditComposer?: ComponentType | undefined;\n /** Component used to render user messages specifically */\n UserMessage?: ComponentType | undefined;\n /** Component used to render assistant messages specifically */\n AssistantMessage?: ComponentType | undefined;\n /** Component used to render system messages specifically */\n SystemMessage?: ComponentType | undefined;\n }\n | {\n /** Component used to render all message types (fallback) */\n Message?: ComponentType | undefined;\n /** Component used when editing any message type */\n EditComposer?: ComponentType | undefined;\n /** Component used when editing user messages specifically */\n UserEditComposer?: ComponentType | undefined;\n /** Component used when editing assistant messages specifically */\n AssistantEditComposer?: ComponentType | undefined;\n /** Component used when editing system messages specifically */\n SystemEditComposer?: ComponentType | undefined;\n /** Component used to render user messages */\n UserMessage: ComponentType;\n /** Component used to render assistant messages */\n AssistantMessage: ComponentType;\n /** Component used to render system messages */\n SystemMessage?: ComponentType | undefined;\n };\n };\n}\n\nconst isComponentsSame = (\n prev: ThreadPrimitiveMessages.Props[\"components\"],\n next: ThreadPrimitiveMessages.Props[\"components\"],\n) => {\n return (\n prev.Message === next.Message &&\n prev.EditComposer === next.EditComposer &&\n prev.UserEditComposer === next.UserEditComposer &&\n prev.AssistantEditComposer === next.AssistantEditComposer &&\n prev.SystemEditComposer === next.SystemEditComposer &&\n prev.UserMessage === next.UserMessage &&\n prev.AssistantMessage === next.AssistantMessage &&\n prev.SystemMessage === next.SystemMessage\n );\n};\n\nconst DEFAULT_SYSTEM_MESSAGE = () => null;\n\nconst getComponent = (\n components: ThreadPrimitiveMessages.Props[\"components\"],\n role: ThreadMessageType[\"role\"],\n isEditing: boolean,\n) => {\n switch (role) {\n case \"user\":\n if (isEditing) {\n return (\n components.UserEditComposer ??\n components.EditComposer ??\n components.UserMessage ??\n (components.Message as ComponentType)\n );\n } else {\n return components.UserMessage ?? (components.Message as ComponentType);\n }\n case \"assistant\":\n if (isEditing) {\n return (\n components.AssistantEditComposer ??\n components.EditComposer ??\n components.AssistantMessage ??\n (components.Message as ComponentType)\n );\n } else {\n return (\n components.AssistantMessage ?? (components.Message as ComponentType)\n );\n }\n case \"system\":\n if (isEditing) {\n return (\n components.SystemEditComposer ??\n components.EditComposer ??\n components.SystemMessage ??\n (components.Message as ComponentType)\n );\n } else {\n return components.SystemMessage ?? DEFAULT_SYSTEM_MESSAGE;\n }\n default:\n const _exhaustiveCheck: never = role;\n throw new Error(`Unknown message role: ${_exhaustiveCheck}`);\n }\n};\n\ntype ThreadMessageComponentProps = {\n components: ThreadPrimitiveMessages.Props[\"components\"];\n};\n\nconst ThreadMessageComponent: FC<ThreadMessageComponentProps> = ({\n components,\n}) => {\n const role = useMessage((m) => m.role);\n const isEditing = useEditComposer((c) => c.isEditing);\n const Component = getComponent(components, role, isEditing);\n\n return <Component />;\n};\nexport namespace ThreadPrimitiveMessageByIndex {\n export type Props = {\n index: number;\n components: ThreadPrimitiveMessages.Props[\"components\"];\n };\n}\n\n/**\n * Renders a single message at the specified index in the current thread.\n *\n * This component provides message context for a specific message in the thread\n * and renders it using the provided component configuration.\n *\n * @example\n * ```tsx\n * <ThreadPrimitive.MessageByIndex\n * index={0}\n * components={{\n * UserMessage: MyUserMessage,\n * AssistantMessage: MyAssistantMessage\n * }}\n * />\n * ```\n */\nexport const ThreadPrimitiveMessageByIndex: FC<ThreadPrimitiveMessageByIndex.Props> =\n memo(\n ({ index, components }) => {\n const threadRuntime = useThreadRuntime();\n const runtime = useMemo(\n () => threadRuntime.getMesssageByIndex(index),\n [threadRuntime, index],\n );\n\n return (\n <MessageRuntimeProvider runtime={runtime}>\n <ThreadMessageComponent components={components} />\n </MessageRuntimeProvider>\n );\n },\n (prev, next) =>\n prev.index === next.index &&\n isComponentsSame(prev.components, next.components),\n );\n\nThreadPrimitiveMessageByIndex.displayName = \"ThreadPrimitive.MessageByIndex\";\n\n/**\n * Renders all messages in the current thread using the provided component configuration.\n *\n * This component automatically renders all messages in the thread, providing the appropriate\n * message context for each message. It handles different message types (user, assistant, system)\n * and supports editing mode through the provided edit composer components.\n *\n * @example\n * ```tsx\n * <ThreadPrimitive.Messages\n * components={{\n * UserMessage: MyUserMessage,\n * AssistantMessage: MyAssistantMessage,\n * EditComposer: MyEditComposer\n * }}\n * />\n * ```\n */\nexport const ThreadPrimitiveMessagesImpl: FC<ThreadPrimitiveMessages.Props> = ({\n components,\n}) => {\n const messagesLength = useThread((t) => t.messages.length);\n\n const messageElements = useMemo(() => {\n if (messagesLength === 0) return null;\n return Array.from({ length: messagesLength }, (_, index) => (\n <ThreadPrimitiveMessageByIndex\n key={index}\n index={index}\n components={components}\n />\n ));\n }, [messagesLength, components]);\n\n return messageElements;\n};\n\nThreadPrimitiveMessagesImpl.displayName = \"ThreadPrimitive.Messages\";\n\nexport const ThreadPrimitiveMessages = memo(\n ThreadPrimitiveMessagesImpl,\n (prev, next) => isComponentsSame(prev.components, next.components),\n);\n"],"mappings":";;;AAEA,SAAsC,MAAM,eAAe;AAC3D,SAAS,WAAW,wBAAwB;AAC5C,SAAS,8BAA8B;AACvC,SAAS,iBAAiB,kBAAkB;AAmInC;AA5ET,IAAM,mBAAmB,CACvB,MACA,SACG;AACH,SACE,KAAK,YAAY,KAAK,WACtB,KAAK,iBAAiB,KAAK,gBAC3B,KAAK,qBAAqB,KAAK,oBAC/B,KAAK,0BAA0B,KAAK,yBACpC,KAAK,uBAAuB,KAAK,sBACjC,KAAK,gBAAgB,KAAK,eAC1B,KAAK,qBAAqB,KAAK,oBAC/B,KAAK,kBAAkB,KAAK;AAEhC;AAEA,IAAM,yBAAyB,MAAM;AAErC,IAAM,eAAe,CACnB,YACA,MACA,cACG;AACH,UAAQ,MAAM;AAAA,IACZ,KAAK;AACH,UAAI,WAAW;AACb,eACE,WAAW,oBACX,WAAW,gBACX,WAAW,eACV,WAAW;AAAA,MAEhB,OAAO;AACL,eAAO,WAAW,eAAgB,WAAW;AAAA,MAC/C;AAAA,IACF,KAAK;AACH,UAAI,WAAW;AACb,eACE,WAAW,yBACX,WAAW,gBACX,WAAW,oBACV,WAAW;AAAA,MAEhB,OAAO;AACL,eACE,WAAW,oBAAqB,WAAW;AAAA,MAE/C;AAAA,IACF,KAAK;AACH,UAAI,WAAW;AACb,eACE,WAAW,sBACX,WAAW,gBACX,WAAW,iBACV,WAAW;AAAA,MAEhB,OAAO;AACL,eAAO,WAAW,iBAAiB;AAAA,MACrC;AAAA,IACF;AACE,YAAM,mBAA0B;AAChC,YAAM,IAAI,MAAM,yBAAyB,gBAAgB,EAAE;AAAA,EAC/D;AACF;AAMA,IAAM,yBAA0D,CAAC;AAAA,EAC/D;AACF,MAAM;AACJ,QAAM,OAAO,WAAW,CAAC,MAAM,EAAE,IAAI;AACrC,QAAM,YAAY,gBAAgB,CAAC,MAAM,EAAE,SAAS;AACpD,QAAM,YAAY,aAAa,YAAY,MAAM,SAAS;AAE1D,SAAO,oBAAC,aAAU;AACpB;AAyBO,IAAM,gCACX;AAAA,EACE,CAAC,EAAE,OAAO,WAAW,MAAM;AACzB,UAAM,gBAAgB,iBAAiB;AACvC,UAAM,UAAU;AAAA,MACd,MAAM,cAAc,mBAAmB,KAAK;AAAA,MAC5C,CAAC,eAAe,KAAK;AAAA,IACvB;AAEA,WACE,oBAAC,0BAAuB,SACtB,8BAAC,0BAAuB,YAAwB,GAClD;AAAA,EAEJ;AAAA,EACA,CAAC,MAAM,SACL,KAAK,UAAU,KAAK,SACpB,iBAAiB,KAAK,YAAY,KAAK,UAAU;AACrD;AAEF,8BAA8B,cAAc;AAoBrC,IAAM,8BAAiE,CAAC;AAAA,EAC7E;AACF,MAAM;AACJ,QAAM,iBAAiB,UAAU,CAAC,MAAM,EAAE,SAAS,MAAM;AAEzD,QAAM,kBAAkB,QAAQ,MAAM;AACpC,QAAI,mBAAmB,EAAG,QAAO;AACjC,WAAO,MAAM,KAAK,EAAE,QAAQ,eAAe,GAAG,CAAC,GAAG,UAChD;AAAA,MAAC;AAAA;AAAA,QAEC;AAAA,QACA;AAAA;AAAA,MAFK;AAAA,IAGP,CACD;AAAA,EACH,GAAG,CAAC,gBAAgB,UAAU,CAAC;AAE/B,SAAO;AACT;AAEA,4BAA4B,cAAc;AAEnC,IAAM,0BAA0B;AAAA,EACrC;AAAA,EACA,CAAC,MAAM,SAAS,iBAAiB,KAAK,YAAY,KAAK,UAAU;AACnE;","names":[]}
@@ -3,6 +3,7 @@ export { ThreadPrimitiveEmpty as Empty } from "./ThreadEmpty";
3
3
  export { ThreadPrimitiveIf as If } from "./ThreadIf";
4
4
  export { ThreadPrimitiveViewport as Viewport } from "./ThreadViewport";
5
5
  export { ThreadPrimitiveMessages as Messages } from "./ThreadMessages";
6
+ export { ThreadPrimitiveMessageByIndex as MessageByIndex } from "./ThreadMessages";
6
7
  export { ThreadPrimitiveScrollToBottom as ScrollToBottom } from "./ThreadScrollToBottom";
7
8
  export { ThreadPrimitiveSuggestion as Suggestion } from "./ThreadSuggestion";
8
9
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/primitives/thread/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,IAAI,IAAI,EAAE,MAAM,cAAc,CAAC;AAC3D,OAAO,EAAE,oBAAoB,IAAI,KAAK,EAAE,MAAM,eAAe,CAAC;AAC9D,OAAO,EAAE,iBAAiB,IAAI,EAAE,EAAE,MAAM,YAAY,CAAC;AACrD,OAAO,EAAE,uBAAuB,IAAI,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACvE,OAAO,EAAE,uBAAuB,IAAI,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACvE,OAAO,EAAE,6BAA6B,IAAI,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACzF,OAAO,EAAE,yBAAyB,IAAI,UAAU,EAAE,MAAM,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/primitives/thread/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,IAAI,IAAI,EAAE,MAAM,cAAc,CAAC;AAC3D,OAAO,EAAE,oBAAoB,IAAI,KAAK,EAAE,MAAM,eAAe,CAAC;AAC9D,OAAO,EAAE,iBAAiB,IAAI,EAAE,EAAE,MAAM,YAAY,CAAC;AACrD,OAAO,EAAE,uBAAuB,IAAI,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACvE,OAAO,EAAE,uBAAuB,IAAI,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACvE,OAAO,EAAE,6BAA6B,IAAI,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACnF,OAAO,EAAE,6BAA6B,IAAI,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACzF,OAAO,EAAE,yBAAyB,IAAI,UAAU,EAAE,MAAM,oBAAoB,CAAC"}
@@ -4,11 +4,13 @@ import { ThreadPrimitiveEmpty } from "./ThreadEmpty.js";
4
4
  import { ThreadPrimitiveIf } from "./ThreadIf.js";
5
5
  import { ThreadPrimitiveViewport } from "./ThreadViewport.js";
6
6
  import { ThreadPrimitiveMessages } from "./ThreadMessages.js";
7
+ import { ThreadPrimitiveMessageByIndex } from "./ThreadMessages.js";
7
8
  import { ThreadPrimitiveScrollToBottom } from "./ThreadScrollToBottom.js";
8
9
  import { ThreadPrimitiveSuggestion } from "./ThreadSuggestion.js";
9
10
  export {
10
11
  ThreadPrimitiveEmpty as Empty,
11
12
  ThreadPrimitiveIf as If,
13
+ ThreadPrimitiveMessageByIndex as MessageByIndex,
12
14
  ThreadPrimitiveMessages as Messages,
13
15
  ThreadPrimitiveRoot as Root,
14
16
  ThreadPrimitiveScrollToBottom as ScrollToBottom,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/primitives/thread/index.ts"],"sourcesContent":["export { ThreadPrimitiveRoot as Root } from \"./ThreadRoot\";\nexport { ThreadPrimitiveEmpty as Empty } from \"./ThreadEmpty\";\nexport { ThreadPrimitiveIf as If } from \"./ThreadIf\";\nexport { ThreadPrimitiveViewport as Viewport } from \"./ThreadViewport\";\nexport { ThreadPrimitiveMessages as Messages } from \"./ThreadMessages\";\nexport { ThreadPrimitiveScrollToBottom as ScrollToBottom } from \"./ThreadScrollToBottom\";\nexport { ThreadPrimitiveSuggestion as Suggestion } from \"./ThreadSuggestion\";\n"],"mappings":";AAAA,SAAgC,2BAAY;AAC5C,SAAiC,4BAAa;AAC9C,SAA8B,yBAAU;AACxC,SAAoC,+BAAgB;AACpD,SAAoC,+BAAgB;AACpD,SAA0C,qCAAsB;AAChE,SAAsC,iCAAkB;","names":[]}
1
+ {"version":3,"sources":["../../../src/primitives/thread/index.ts"],"sourcesContent":["export { ThreadPrimitiveRoot as Root } from \"./ThreadRoot\";\nexport { ThreadPrimitiveEmpty as Empty } from \"./ThreadEmpty\";\nexport { ThreadPrimitiveIf as If } from \"./ThreadIf\";\nexport { ThreadPrimitiveViewport as Viewport } from \"./ThreadViewport\";\nexport { ThreadPrimitiveMessages as Messages } from \"./ThreadMessages\";\nexport { ThreadPrimitiveMessageByIndex as MessageByIndex } from \"./ThreadMessages\";\nexport { ThreadPrimitiveScrollToBottom as ScrollToBottom } from \"./ThreadScrollToBottom\";\nexport { ThreadPrimitiveSuggestion as Suggestion } from \"./ThreadSuggestion\";\n"],"mappings":";AAAA,SAAgC,2BAAY;AAC5C,SAAiC,4BAAa;AAC9C,SAA8B,yBAAU;AACxC,SAAoC,+BAAgB;AACpD,SAAoC,+BAAgB;AACpD,SAA0C,qCAAsB;AAChE,SAA0C,qCAAsB;AAChE,SAAsC,iCAAkB;","names":[]}
@@ -7,5 +7,29 @@ export declare namespace ThreadListPrimitiveItems {
7
7
  };
8
8
  };
9
9
  }
10
+ export declare namespace ThreadListPrimitiveItemByIndex {
11
+ type Props = {
12
+ index: number;
13
+ archived?: boolean | undefined;
14
+ components: ThreadListPrimitiveItems.Props["components"];
15
+ };
16
+ }
17
+ /**
18
+ * Renders a single thread list item at the specified index.
19
+ *
20
+ * This component provides direct access to render a specific thread
21
+ * from the thread list using the provided component configuration.
22
+ *
23
+ * @example
24
+ * ```tsx
25
+ * <ThreadListPrimitive.ItemByIndex
26
+ * index={0}
27
+ * components={{
28
+ * ThreadListItem: MyThreadListItem
29
+ * }}
30
+ * />
31
+ * ```
32
+ */
33
+ export declare const ThreadListPrimitiveItemByIndex: FC<ThreadListPrimitiveItemByIndex.Props>;
10
34
  export declare const ThreadListPrimitiveItems: FC<ThreadListPrimitiveItems.Props>;
11
35
  //# sourceMappingURL=ThreadListItems.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ThreadListItems.d.ts","sourceRoot":"","sources":["../../../src/primitives/threadList/ThreadListItems.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,EAAE,EAAiB,MAAM,OAAO,CAAC;AAIzD,yBAAiB,wBAAwB,CAAC;IACxC,KAAY,KAAK,GAAG;QAClB,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;QAC/B,UAAU,EAAE;YACV,cAAc,EAAE,aAAa,CAAC;SAC/B,CAAC;KACH,CAAC;CACH;AAuCD,eAAO,MAAM,wBAAwB,EAAE,EAAE,CAAC,wBAAwB,CAAC,KAAK,CAoBvE,CAAC"}
1
+ {"version":3,"file":"ThreadListItems.d.ts","sourceRoot":"","sources":["../../../src/primitives/threadList/ThreadListItems.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,EAAE,EAAiB,MAAM,OAAO,CAAC;AAIzD,yBAAiB,wBAAwB,CAAC;IACxC,KAAY,KAAK,GAAG;QAClB,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;QAC/B,UAAU,EAAE;YACV,cAAc,EAAE,aAAa,CAAC;SAC/B,CAAC;KACH,CAAC;CACH;AAED,yBAAiB,8BAA8B,CAAC;IAC9C,KAAY,KAAK,GAAG;QAClB,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;QAC/B,UAAU,EAAE,wBAAwB,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;KAC1D,CAAC;CACH;AAED;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,8BAA8B,EAAE,EAAE,CAAC,8BAA8B,CAAC,KAAK,CAwBjF,CAAC;AAIJ,eAAO,MAAM,wBAAwB,EAAE,EAAE,CAAC,wBAAwB,CAAC,KAAK,CAoBvE,CAAC"}
@@ -5,23 +5,19 @@ import { memo, useMemo } from "react";
5
5
  import { ThreadListItemRuntimeProvider } from "../../context/providers/ThreadListItemRuntimeProvider.js";
6
6
  import { useAssistantRuntime, useThreadList } from "../../context/index.js";
7
7
  import { jsx } from "react/jsx-runtime";
8
- var ThreadListItemImpl = ({
9
- partIndex,
10
- archived,
11
- components
12
- }) => {
13
- const assistantRuntime = useAssistantRuntime();
14
- const runtime = useMemo(
15
- () => archived ? assistantRuntime.threads.getArchivedItemByIndex(partIndex) : assistantRuntime.threads.getItemByIndex(partIndex),
16
- [assistantRuntime, partIndex, archived]
17
- );
18
- const ThreadListItemComponent = components.ThreadListItem;
19
- return /* @__PURE__ */ jsx(ThreadListItemRuntimeProvider, { runtime, children: /* @__PURE__ */ jsx(ThreadListItemComponent, {}) });
20
- };
21
- var ThreadListItem = memo(
22
- ThreadListItemImpl,
23
- (prev, next) => prev.partIndex === next.partIndex && prev.archived === next.archived && prev.components.ThreadListItem === next.components.ThreadListItem
8
+ var ThreadListPrimitiveItemByIndex = memo(
9
+ ({ index, archived = false, components }) => {
10
+ const assistantRuntime = useAssistantRuntime();
11
+ const runtime = useMemo(
12
+ () => archived ? assistantRuntime.threads.getArchivedItemByIndex(index) : assistantRuntime.threads.getItemByIndex(index),
13
+ [assistantRuntime, index, archived]
14
+ );
15
+ const ThreadListItemComponent = components.ThreadListItem;
16
+ return /* @__PURE__ */ jsx(ThreadListItemRuntimeProvider, { runtime, children: /* @__PURE__ */ jsx(ThreadListItemComponent, {}) });
17
+ },
18
+ (prev, next) => prev.index === next.index && prev.archived === next.archived && prev.components.ThreadListItem === next.components.ThreadListItem
24
19
  );
20
+ ThreadListPrimitiveItemByIndex.displayName = "ThreadListPrimitive.ItemByIndex";
25
21
  var ThreadListPrimitiveItems = ({
26
22
  archived = false,
27
23
  components
@@ -31,9 +27,9 @@ var ThreadListPrimitiveItems = ({
31
27
  );
32
28
  const listElements = useMemo(() => {
33
29
  return Array.from({ length: contentLength }, (_, index) => /* @__PURE__ */ jsx(
34
- ThreadListItem,
30
+ ThreadListPrimitiveItemByIndex,
35
31
  {
36
- partIndex: index,
32
+ index,
37
33
  archived,
38
34
  components
39
35
  },
@@ -44,6 +40,7 @@ var ThreadListPrimitiveItems = ({
44
40
  };
45
41
  ThreadListPrimitiveItems.displayName = "ThreadListPrimitive.Items";
46
42
  export {
43
+ ThreadListPrimitiveItemByIndex,
47
44
  ThreadListPrimitiveItems
48
45
  };
49
46
  //# sourceMappingURL=ThreadListItems.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/primitives/threadList/ThreadListItems.tsx"],"sourcesContent":["\"use client\";\n\nimport { ComponentType, FC, memo, useMemo } from \"react\";\nimport { ThreadListItemRuntimeProvider } from \"../../context/providers/ThreadListItemRuntimeProvider\";\nimport { useAssistantRuntime, useThreadList } from \"../../context\";\n\nexport namespace ThreadListPrimitiveItems {\n export type Props = {\n archived?: boolean | undefined;\n components: {\n ThreadListItem: ComponentType;\n };\n };\n}\n\ntype ThreadListItemProps = {\n partIndex: number;\n archived: boolean;\n components: ThreadListPrimitiveItems.Props[\"components\"];\n};\n\nconst ThreadListItemImpl: FC<ThreadListItemProps> = ({\n partIndex,\n archived,\n components,\n}) => {\n const assistantRuntime = useAssistantRuntime();\n const runtime = useMemo(\n () =>\n archived\n ? assistantRuntime.threads.getArchivedItemByIndex(partIndex)\n : assistantRuntime.threads.getItemByIndex(partIndex),\n [assistantRuntime, partIndex, archived],\n );\n\n const ThreadListItemComponent = components.ThreadListItem;\n\n return (\n <ThreadListItemRuntimeProvider runtime={runtime}>\n <ThreadListItemComponent />\n </ThreadListItemRuntimeProvider>\n );\n};\n\nconst ThreadListItem = memo(\n ThreadListItemImpl,\n (prev, next) =>\n prev.partIndex === next.partIndex &&\n prev.archived === next.archived &&\n prev.components.ThreadListItem === next.components.ThreadListItem,\n);\n\nexport const ThreadListPrimitiveItems: FC<ThreadListPrimitiveItems.Props> = ({\n archived = false,\n components,\n}) => {\n const contentLength = useThreadList((s) =>\n archived ? s.archivedThreads.length : s.threads.length,\n );\n\n const listElements = useMemo(() => {\n return Array.from({ length: contentLength }, (_, index) => (\n <ThreadListItem\n key={index}\n partIndex={index}\n archived={archived}\n components={components}\n />\n ));\n }, [contentLength, archived, components]);\n\n return listElements;\n};\n\nThreadListPrimitiveItems.displayName = \"ThreadListPrimitive.Items\";\n"],"mappings":";;;AAEA,SAA4B,MAAM,eAAe;AACjD,SAAS,qCAAqC;AAC9C,SAAS,qBAAqB,qBAAqB;AAmC7C;AAlBN,IAAM,qBAA8C,CAAC;AAAA,EACnD;AAAA,EACA;AAAA,EACA;AACF,MAAM;AACJ,QAAM,mBAAmB,oBAAoB;AAC7C,QAAM,UAAU;AAAA,IACd,MACE,WACI,iBAAiB,QAAQ,uBAAuB,SAAS,IACzD,iBAAiB,QAAQ,eAAe,SAAS;AAAA,IACvD,CAAC,kBAAkB,WAAW,QAAQ;AAAA,EACxC;AAEA,QAAM,0BAA0B,WAAW;AAE3C,SACE,oBAAC,iCAA8B,SAC7B,8BAAC,2BAAwB,GAC3B;AAEJ;AAEA,IAAM,iBAAiB;AAAA,EACrB;AAAA,EACA,CAAC,MAAM,SACL,KAAK,cAAc,KAAK,aACxB,KAAK,aAAa,KAAK,YACvB,KAAK,WAAW,mBAAmB,KAAK,WAAW;AACvD;AAEO,IAAM,2BAA+D,CAAC;AAAA,EAC3E,WAAW;AAAA,EACX;AACF,MAAM;AACJ,QAAM,gBAAgB;AAAA,IAAc,CAAC,MACnC,WAAW,EAAE,gBAAgB,SAAS,EAAE,QAAQ;AAAA,EAClD;AAEA,QAAM,eAAe,QAAQ,MAAM;AACjC,WAAO,MAAM,KAAK,EAAE,QAAQ,cAAc,GAAG,CAAC,GAAG,UAC/C;AAAA,MAAC;AAAA;AAAA,QAEC,WAAW;AAAA,QACX;AAAA,QACA;AAAA;AAAA,MAHK;AAAA,IAIP,CACD;AAAA,EACH,GAAG,CAAC,eAAe,UAAU,UAAU,CAAC;AAExC,SAAO;AACT;AAEA,yBAAyB,cAAc;","names":[]}
1
+ {"version":3,"sources":["../../../src/primitives/threadList/ThreadListItems.tsx"],"sourcesContent":["\"use client\";\n\nimport { ComponentType, FC, memo, useMemo } from \"react\";\nimport { ThreadListItemRuntimeProvider } from \"../../context/providers/ThreadListItemRuntimeProvider\";\nimport { useAssistantRuntime, useThreadList } from \"../../context\";\n\nexport namespace ThreadListPrimitiveItems {\n export type Props = {\n archived?: boolean | undefined;\n components: {\n ThreadListItem: ComponentType;\n };\n };\n}\n\nexport namespace ThreadListPrimitiveItemByIndex {\n export type Props = {\n index: number;\n archived?: boolean | undefined;\n components: ThreadListPrimitiveItems.Props[\"components\"];\n };\n}\n\n/**\n * Renders a single thread list item at the specified index.\n *\n * This component provides direct access to render a specific thread\n * from the thread list using the provided component configuration.\n *\n * @example\n * ```tsx\n * <ThreadListPrimitive.ItemByIndex\n * index={0}\n * components={{\n * ThreadListItem: MyThreadListItem\n * }}\n * />\n * ```\n */\nexport const ThreadListPrimitiveItemByIndex: FC<ThreadListPrimitiveItemByIndex.Props> =\n memo(\n ({ index, archived = false, components }) => {\n const assistantRuntime = useAssistantRuntime();\n const runtime = useMemo(\n () =>\n archived\n ? assistantRuntime.threads.getArchivedItemByIndex(index)\n : assistantRuntime.threads.getItemByIndex(index),\n [assistantRuntime, index, archived],\n );\n\n const ThreadListItemComponent = components.ThreadListItem;\n\n return (\n <ThreadListItemRuntimeProvider runtime={runtime}>\n <ThreadListItemComponent />\n </ThreadListItemRuntimeProvider>\n );\n },\n (prev, next) =>\n prev.index === next.index &&\n prev.archived === next.archived &&\n prev.components.ThreadListItem === next.components.ThreadListItem,\n );\n\nThreadListPrimitiveItemByIndex.displayName = \"ThreadListPrimitive.ItemByIndex\";\n\nexport const ThreadListPrimitiveItems: FC<ThreadListPrimitiveItems.Props> = ({\n archived = false,\n components,\n}) => {\n const contentLength = useThreadList((s) =>\n archived ? s.archivedThreads.length : s.threads.length,\n );\n\n const listElements = useMemo(() => {\n return Array.from({ length: contentLength }, (_, index) => (\n <ThreadListPrimitiveItemByIndex\n key={index}\n index={index}\n archived={archived}\n components={components}\n />\n ));\n }, [contentLength, archived, components]);\n\n return listElements;\n};\n\nThreadListPrimitiveItems.displayName = \"ThreadListPrimitive.Items\";\n"],"mappings":";;;AAEA,SAA4B,MAAM,eAAe;AACjD,SAAS,qCAAqC;AAC9C,SAAS,qBAAqB,qBAAqB;AAmDzC;AAhBH,IAAM,iCACX;AAAA,EACE,CAAC,EAAE,OAAO,WAAW,OAAO,WAAW,MAAM;AAC3C,UAAM,mBAAmB,oBAAoB;AAC7C,UAAM,UAAU;AAAA,MACd,MACE,WACI,iBAAiB,QAAQ,uBAAuB,KAAK,IACrD,iBAAiB,QAAQ,eAAe,KAAK;AAAA,MACnD,CAAC,kBAAkB,OAAO,QAAQ;AAAA,IACpC;AAEA,UAAM,0BAA0B,WAAW;AAE3C,WACE,oBAAC,iCAA8B,SAC7B,8BAAC,2BAAwB,GAC3B;AAAA,EAEJ;AAAA,EACA,CAAC,MAAM,SACL,KAAK,UAAU,KAAK,SACpB,KAAK,aAAa,KAAK,YACvB,KAAK,WAAW,mBAAmB,KAAK,WAAW;AACvD;AAEF,+BAA+B,cAAc;AAEtC,IAAM,2BAA+D,CAAC;AAAA,EAC3E,WAAW;AAAA,EACX;AACF,MAAM;AACJ,QAAM,gBAAgB;AAAA,IAAc,CAAC,MACnC,WAAW,EAAE,gBAAgB,SAAS,EAAE,QAAQ;AAAA,EAClD;AAEA,QAAM,eAAe,QAAQ,MAAM;AACjC,WAAO,MAAM,KAAK,EAAE,QAAQ,cAAc,GAAG,CAAC,GAAG,UAC/C;AAAA,MAAC;AAAA;AAAA,QAEC;AAAA,QACA;AAAA,QACA;AAAA;AAAA,MAHK;AAAA,IAIP,CACD;AAAA,EACH,GAAG,CAAC,eAAe,UAAU,UAAU,CAAC;AAExC,SAAO;AACT;AAEA,yBAAyB,cAAc;","names":[]}
@@ -1,4 +1,5 @@
1
1
  export { ThreadListPrimitiveNew as New } from "./ThreadListNew";
2
2
  export { ThreadListPrimitiveItems as Items } from "./ThreadListItems";
3
+ export { ThreadListPrimitiveItemByIndex as ItemByIndex } from "./ThreadListItems";
3
4
  export { ThreadListPrimitiveRoot as Root } from "./ThreadListRoot";
4
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/primitives/threadList/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,IAAI,GAAG,EAAE,MAAM,iBAAiB,CAAC;AAChE,OAAO,EAAE,wBAAwB,IAAI,KAAK,EAAE,MAAM,mBAAmB,CAAC;AACtE,OAAO,EAAE,uBAAuB,IAAI,IAAI,EAAE,MAAM,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/primitives/threadList/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,IAAI,GAAG,EAAE,MAAM,iBAAiB,CAAC;AAChE,OAAO,EAAE,wBAAwB,IAAI,KAAK,EAAE,MAAM,mBAAmB,CAAC;AACtE,OAAO,EAAE,8BAA8B,IAAI,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAClF,OAAO,EAAE,uBAAuB,IAAI,IAAI,EAAE,MAAM,kBAAkB,CAAC"}
@@ -1,8 +1,10 @@
1
1
  // src/primitives/threadList/index.ts
2
2
  import { ThreadListPrimitiveNew } from "./ThreadListNew.js";
3
3
  import { ThreadListPrimitiveItems } from "./ThreadListItems.js";
4
+ import { ThreadListPrimitiveItemByIndex } from "./ThreadListItems.js";
4
5
  import { ThreadListPrimitiveRoot } from "./ThreadListRoot.js";
5
6
  export {
7
+ ThreadListPrimitiveItemByIndex as ItemByIndex,
6
8
  ThreadListPrimitiveItems as Items,
7
9
  ThreadListPrimitiveNew as New,
8
10
  ThreadListPrimitiveRoot as Root
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/primitives/threadList/index.ts"],"sourcesContent":["export { ThreadListPrimitiveNew as New } from \"./ThreadListNew\";\nexport { ThreadListPrimitiveItems as Items } from \"./ThreadListItems\";\nexport { ThreadListPrimitiveRoot as Root } from \"./ThreadListRoot\";\n"],"mappings":";AAAA,SAAmC,8BAAW;AAC9C,SAAqC,gCAAa;AAClD,SAAoC,+BAAY;","names":[]}
1
+ {"version":3,"sources":["../../../src/primitives/threadList/index.ts"],"sourcesContent":["export { ThreadListPrimitiveNew as New } from \"./ThreadListNew\";\nexport { ThreadListPrimitiveItems as Items } from \"./ThreadListItems\";\nexport { ThreadListPrimitiveItemByIndex as ItemByIndex } from \"./ThreadListItems\";\nexport { ThreadListPrimitiveRoot as Root } from \"./ThreadListRoot\";\n"],"mappings":";AAAA,SAAmC,8BAAW;AAC9C,SAAqC,gCAAa;AAClD,SAA2C,sCAAmB;AAC9D,SAAoC,+BAAY;","names":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"BaseComposerRuntimeCore.d.ts","sourceRoot":"","sources":["../../../src/runtimes/composer/BaseComposerRuntimeCore.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EAGX,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EACL,mBAAmB,EACnB,wBAAwB,EACzB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,wCAAwC,CAAC;AAK1E,8BAAsB,uBACpB,SAAQ,gBACR,YAAW,mBAAmB;IAE9B,SAAgB,SAAS,QAAQ;IAEjC,SAAS,CAAC,QAAQ,CAAC,oBAAoB,IAAI,iBAAiB,GAAG,SAAS;IAEjE,mBAAmB,IAAI,MAAM;IAIpC,OAAO,CAAC,YAAY,CAA6B;IACjD,IAAW,WAAW,0BAErB;IAED,SAAS,CAAC,cAAc,CAAC,KAAK,EAAE,SAAS,UAAU,EAAE;IAKrD,aAAoB,SAAS,IAAI,OAAO,CAAC;IAEzC,IAAW,OAAO,YAEjB;IAED,OAAO,CAAC,KAAK,CAAM;IAEnB,IAAI,IAAI,WAEP;IAED,OAAO,CAAC,KAAK,CAAuB;IAEpC,IAAI,IAAI,oCAEP;IAED,OAAO,CAAC,UAAU,CAAiB;IAEnC,IAAI,SAAS,cAEZ;IAEM,OAAO,CAAC,KAAK,EAAE,MAAM;IAOrB,OAAO,CAAC,IAAI,EAAE,WAAW;IAOzB,YAAY,CAAC,SAAS,EAAE,SAAS;IAOxC,OAAO,CAAC,wBAAwB;YAMlB,mBAAmB;IAOpB,KAAK;IAkBL,gBAAgB;IAOhB,IAAI;IA2BV,MAAM;IAIb,SAAS,CAAC,QAAQ,CAAC,UAAU,CAC3B,OAAO,EAAE,IAAI,CAAC,aAAa,EAAE,UAAU,GAAG,UAAU,CAAC,GACpD,IAAI;IACP,SAAS,CAAC,QAAQ,CAAC,YAAY,IAAI,IAAI;IAEjC,aAAa,CAAC,IAAI,EAAE,IAAI;IAmCxB,gBAAgB,CAAC,YAAY,EAAE,MAAM;IAkB3C,OAAO,CAAC,iBAAiB,CAGrB;IAEJ,SAAS,CAAC,uBAAuB,CAAC,KAAK,EAAE,wBAAwB;IAO1D,WAAW,CAAC,KAAK,EAAE,wBAAwB,EAAE,QAAQ,EAAE,MAAM,IAAI;CAczE"}
1
+ {"version":3,"file":"BaseComposerRuntimeCore.d.ts","sourceRoot":"","sources":["../../../src/runtimes/composer/BaseComposerRuntimeCore.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EAGX,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EACL,mBAAmB,EACnB,wBAAwB,EACzB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,wCAAwC,CAAC;AAK1E,8BAAsB,uBACpB,SAAQ,gBACR,YAAW,mBAAmB;IAE9B,SAAgB,SAAS,QAAQ;IAEjC,SAAS,CAAC,QAAQ,CAAC,oBAAoB,IAAI,iBAAiB,GAAG,SAAS;IAEjE,mBAAmB,IAAI,MAAM;IAIpC,OAAO,CAAC,YAAY,CAA6B;IACjD,IAAW,WAAW,0BAErB;IAED,SAAS,CAAC,cAAc,CAAC,KAAK,EAAE,SAAS,UAAU,EAAE;IAKrD,aAAoB,SAAS,IAAI,OAAO,CAAC;IAEzC,IAAW,OAAO,YAEjB;IAED,OAAO,CAAC,KAAK,CAAM;IAEnB,IAAI,IAAI,WAEP;IAED,OAAO,CAAC,KAAK,CAAuB;IAEpC,IAAI,IAAI,oCAEP;IAED,OAAO,CAAC,UAAU,CAAiB;IAEnC,IAAI,SAAS,cAEZ;IAEM,OAAO,CAAC,KAAK,EAAE,MAAM;IAOrB,OAAO,CAAC,IAAI,EAAE,WAAW;IAOzB,YAAY,CAAC,SAAS,EAAE,SAAS;IAOxC,OAAO,CAAC,wBAAwB;YAMlB,mBAAmB;IAOpB,KAAK;IAkBL,gBAAgB;IAOhB,IAAI;IA4BV,MAAM;IAIb,SAAS,CAAC,QAAQ,CAAC,UAAU,CAC3B,OAAO,EAAE,IAAI,CAAC,aAAa,EAAE,UAAU,GAAG,UAAU,CAAC,GACpD,IAAI;IACP,SAAS,CAAC,QAAQ,CAAC,YAAY,IAAI,IAAI;IAEjC,aAAa,CAAC,IAAI,EAAE,IAAI;IAmCxB,gBAAgB,CAAC,YAAY,EAAE,MAAM;IAkB3C,OAAO,CAAC,iBAAiB,CAGrB;IAEJ,SAAS,CAAC,uBAAuB,CAAC,KAAK,EAAE,wBAAwB;IAO1D,WAAW,CAAC,KAAK,EAAE,wBAAwB,EAAE,QAAQ,EAAE,MAAM,IAAI;CAczE"}
@@ -72,22 +72,23 @@ var BaseComposerRuntimeCore = class extends BaseSubscribable {
72
72
  }
73
73
  async send() {
74
74
  const adapter = this.getAttachmentAdapter();
75
- const attachments = adapter && this.attachments.length > 0 ? await Promise.all(
75
+ const attachments = adapter && this.attachments.length > 0 ? Promise.all(
76
76
  this.attachments.map(async (a) => {
77
77
  if (isAttachmentComplete(a)) return a;
78
78
  const result = await adapter.send(a);
79
79
  return result;
80
80
  })
81
81
  ) : [];
82
+ const text = this.text;
83
+ this._emptyTextAndAttachments();
82
84
  const message = {
83
85
  createdAt: /* @__PURE__ */ new Date(),
84
86
  role: this.role,
85
- content: this.text ? [{ type: "text", text: this.text }] : [],
86
- attachments,
87
+ content: text ? [{ type: "text", text }] : [],
88
+ attachments: await attachments,
87
89
  runConfig: this.runConfig,
88
90
  metadata: { custom: {} }
89
91
  };
90
- this._emptyTextAndAttachments();
91
92
  this.handleSend(message);
92
93
  this._notifyEventSubscribers("send");
93
94
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/runtimes/composer/BaseComposerRuntimeCore.tsx"],"sourcesContent":["import {\n Attachment,\n CompleteAttachment,\n PendingAttachment,\n} from \"../../types/AttachmentTypes\";\nimport { AppendMessage } from \"../../types\";\nimport { AttachmentAdapter } from \"../adapters/attachment\";\nimport {\n ComposerRuntimeCore,\n ComposerRuntimeEventType,\n} from \"../core/ComposerRuntimeCore\";\nimport { MessageRole, RunConfig } from \"../../types/AssistantTypes\";\nimport { BaseSubscribable } from \"../remote-thread-list/BaseSubscribable\";\n\nconst isAttachmentComplete = (a: Attachment): a is CompleteAttachment =>\n a.status.type === \"complete\";\n\nexport abstract class BaseComposerRuntimeCore\n extends BaseSubscribable\n implements ComposerRuntimeCore\n{\n public readonly isEditing = true;\n\n protected abstract getAttachmentAdapter(): AttachmentAdapter | undefined;\n\n public getAttachmentAccept(): string {\n return this.getAttachmentAdapter()?.accept ?? \"*\";\n }\n\n private _attachments: readonly Attachment[] = [];\n public get attachments() {\n return this._attachments;\n }\n\n protected setAttachments(value: readonly Attachment[]) {\n this._attachments = value;\n this._notifySubscribers();\n }\n\n public abstract get canCancel(): boolean;\n\n public get isEmpty() {\n return !this.text.trim() && !this.attachments.length;\n }\n\n private _text = \"\";\n\n get text() {\n return this._text;\n }\n\n private _role: MessageRole = \"user\";\n\n get role() {\n return this._role;\n }\n\n private _runConfig: RunConfig = {};\n\n get runConfig() {\n return this._runConfig;\n }\n\n public setText(value: string) {\n if (this._text === value) return;\n\n this._text = value;\n this._notifySubscribers();\n }\n\n public setRole(role: MessageRole) {\n if (this._role === role) return;\n\n this._role = role;\n this._notifySubscribers();\n }\n\n public setRunConfig(runConfig: RunConfig) {\n if (this._runConfig === runConfig) return;\n\n this._runConfig = runConfig;\n this._notifySubscribers();\n }\n\n private _emptyTextAndAttachments() {\n this._attachments = [];\n this._text = \"\";\n this._notifySubscribers();\n }\n\n private async _onClearAttachments() {\n const adapter = this.getAttachmentAdapter();\n if (adapter) {\n await Promise.all(this._attachments.map((a) => adapter.remove(a)));\n }\n }\n\n public async reset() {\n if (\n this._attachments.length === 0 &&\n this._text === \"\" &&\n this._role === \"user\" &&\n Object.keys(this._runConfig).length === 0\n ) {\n return;\n }\n\n this._role = \"user\";\n this._runConfig = {};\n\n const task = this._onClearAttachments();\n this._emptyTextAndAttachments();\n await task;\n }\n\n public async clearAttachments() {\n const task = this._onClearAttachments();\n this.setAttachments([]);\n\n await task;\n }\n\n public async send() {\n const adapter = this.getAttachmentAdapter();\n const attachments =\n adapter && this.attachments.length > 0\n ? await Promise.all(\n this.attachments.map(async (a) => {\n if (isAttachmentComplete(a)) return a;\n const result = await adapter.send(a);\n return result as CompleteAttachment;\n }),\n )\n : [];\n\n const message: Omit<AppendMessage, \"parentId\" | \"sourceId\"> = {\n createdAt: new Date(),\n role: this.role,\n content: this.text ? [{ type: \"text\", text: this.text }] : [],\n attachments,\n runConfig: this.runConfig,\n metadata: { custom: {} },\n };\n this._emptyTextAndAttachments();\n\n this.handleSend(message);\n this._notifyEventSubscribers(\"send\");\n }\n\n public cancel() {\n this.handleCancel();\n }\n\n protected abstract handleSend(\n message: Omit<AppendMessage, \"parentId\" | \"sourceId\">,\n ): void;\n protected abstract handleCancel(): void;\n\n async addAttachment(file: File) {\n const adapter = this.getAttachmentAdapter();\n if (!adapter) throw new Error(\"Attachments are not supported\");\n\n const upsertAttachment = (a: PendingAttachment) => {\n const idx = this._attachments.findIndex(\n (attachment) => attachment.id === a.id,\n );\n if (idx !== -1)\n this._attachments = [\n ...this._attachments.slice(0, idx),\n a,\n ...this._attachments.slice(idx + 1),\n ];\n else {\n this._attachments = [...this._attachments, a];\n this._notifyEventSubscribers(\"attachment_add\");\n }\n\n this._notifySubscribers();\n };\n\n const promiseOrGenerator = adapter.add({ file });\n if (Symbol.asyncIterator in promiseOrGenerator) {\n for await (const r of promiseOrGenerator) {\n upsertAttachment(r);\n }\n } else {\n upsertAttachment(await promiseOrGenerator);\n }\n\n this._notifyEventSubscribers(\"attachment_add\");\n this._notifySubscribers();\n }\n\n async removeAttachment(attachmentId: string) {\n const adapter = this.getAttachmentAdapter();\n if (!adapter) throw new Error(\"Attachments are not supported\");\n\n const index = this._attachments.findIndex((a) => a.id === attachmentId);\n if (index === -1) throw new Error(\"Attachment not found\");\n const attachment = this._attachments[index]!;\n\n await adapter.remove(attachment);\n\n // this._attachments.toSpliced(index, 1); - not yet widely supported\n this._attachments = [\n ...this._attachments.slice(0, index),\n ...this._attachments.slice(index + 1),\n ];\n this._notifySubscribers();\n }\n\n private _eventSubscribers = new Map<\n ComposerRuntimeEventType,\n Set<() => void>\n >();\n\n protected _notifyEventSubscribers(event: ComposerRuntimeEventType) {\n const subscribers = this._eventSubscribers.get(event);\n if (!subscribers) return;\n\n for (const callback of subscribers) callback();\n }\n\n public unstable_on(event: ComposerRuntimeEventType, callback: () => void) {\n const subscribers = this._eventSubscribers.get(event);\n if (!subscribers) {\n this._eventSubscribers.set(event, new Set([callback]));\n } else {\n subscribers.add(callback);\n }\n\n return () => {\n const subscribers = this._eventSubscribers.get(event);\n if (!subscribers) return;\n subscribers.delete(callback);\n };\n }\n}\n"],"mappings":"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","names":["subscribers"]}
1
+ {"version":3,"sources":["../../../src/runtimes/composer/BaseComposerRuntimeCore.tsx"],"sourcesContent":["import {\n Attachment,\n CompleteAttachment,\n PendingAttachment,\n} from \"../../types/AttachmentTypes\";\nimport { AppendMessage } from \"../../types\";\nimport { AttachmentAdapter } from \"../adapters/attachment\";\nimport {\n ComposerRuntimeCore,\n ComposerRuntimeEventType,\n} from \"../core/ComposerRuntimeCore\";\nimport { MessageRole, RunConfig } from \"../../types/AssistantTypes\";\nimport { BaseSubscribable } from \"../remote-thread-list/BaseSubscribable\";\n\nconst isAttachmentComplete = (a: Attachment): a is CompleteAttachment =>\n a.status.type === \"complete\";\n\nexport abstract class BaseComposerRuntimeCore\n extends BaseSubscribable\n implements ComposerRuntimeCore\n{\n public readonly isEditing = true;\n\n protected abstract getAttachmentAdapter(): AttachmentAdapter | undefined;\n\n public getAttachmentAccept(): string {\n return this.getAttachmentAdapter()?.accept ?? \"*\";\n }\n\n private _attachments: readonly Attachment[] = [];\n public get attachments() {\n return this._attachments;\n }\n\n protected setAttachments(value: readonly Attachment[]) {\n this._attachments = value;\n this._notifySubscribers();\n }\n\n public abstract get canCancel(): boolean;\n\n public get isEmpty() {\n return !this.text.trim() && !this.attachments.length;\n }\n\n private _text = \"\";\n\n get text() {\n return this._text;\n }\n\n private _role: MessageRole = \"user\";\n\n get role() {\n return this._role;\n }\n\n private _runConfig: RunConfig = {};\n\n get runConfig() {\n return this._runConfig;\n }\n\n public setText(value: string) {\n if (this._text === value) return;\n\n this._text = value;\n this._notifySubscribers();\n }\n\n public setRole(role: MessageRole) {\n if (this._role === role) return;\n\n this._role = role;\n this._notifySubscribers();\n }\n\n public setRunConfig(runConfig: RunConfig) {\n if (this._runConfig === runConfig) return;\n\n this._runConfig = runConfig;\n this._notifySubscribers();\n }\n\n private _emptyTextAndAttachments() {\n this._attachments = [];\n this._text = \"\";\n this._notifySubscribers();\n }\n\n private async _onClearAttachments() {\n const adapter = this.getAttachmentAdapter();\n if (adapter) {\n await Promise.all(this._attachments.map((a) => adapter.remove(a)));\n }\n }\n\n public async reset() {\n if (\n this._attachments.length === 0 &&\n this._text === \"\" &&\n this._role === \"user\" &&\n Object.keys(this._runConfig).length === 0\n ) {\n return;\n }\n\n this._role = \"user\";\n this._runConfig = {};\n\n const task = this._onClearAttachments();\n this._emptyTextAndAttachments();\n await task;\n }\n\n public async clearAttachments() {\n const task = this._onClearAttachments();\n this.setAttachments([]);\n\n await task;\n }\n\n public async send() {\n const adapter = this.getAttachmentAdapter();\n const attachments =\n adapter && this.attachments.length > 0\n ? Promise.all(\n this.attachments.map(async (a) => {\n if (isAttachmentComplete(a)) return a;\n const result = await adapter.send(a);\n return result as CompleteAttachment;\n }),\n )\n : [];\n\n const text = this.text;\n this._emptyTextAndAttachments();\n const message: Omit<AppendMessage, \"parentId\" | \"sourceId\"> = {\n createdAt: new Date(),\n role: this.role,\n content: text ? [{ type: \"text\", text }] : [],\n attachments: await attachments,\n runConfig: this.runConfig,\n metadata: { custom: {} },\n };\n\n this.handleSend(message);\n this._notifyEventSubscribers(\"send\");\n }\n\n public cancel() {\n this.handleCancel();\n }\n\n protected abstract handleSend(\n message: Omit<AppendMessage, \"parentId\" | \"sourceId\">,\n ): void;\n protected abstract handleCancel(): void;\n\n async addAttachment(file: File) {\n const adapter = this.getAttachmentAdapter();\n if (!adapter) throw new Error(\"Attachments are not supported\");\n\n const upsertAttachment = (a: PendingAttachment) => {\n const idx = this._attachments.findIndex(\n (attachment) => attachment.id === a.id,\n );\n if (idx !== -1)\n this._attachments = [\n ...this._attachments.slice(0, idx),\n a,\n ...this._attachments.slice(idx + 1),\n ];\n else {\n this._attachments = [...this._attachments, a];\n this._notifyEventSubscribers(\"attachment_add\");\n }\n\n this._notifySubscribers();\n };\n\n const promiseOrGenerator = adapter.add({ file });\n if (Symbol.asyncIterator in promiseOrGenerator) {\n for await (const r of promiseOrGenerator) {\n upsertAttachment(r);\n }\n } else {\n upsertAttachment(await promiseOrGenerator);\n }\n\n this._notifyEventSubscribers(\"attachment_add\");\n this._notifySubscribers();\n }\n\n async removeAttachment(attachmentId: string) {\n const adapter = this.getAttachmentAdapter();\n if (!adapter) throw new Error(\"Attachments are not supported\");\n\n const index = this._attachments.findIndex((a) => a.id === attachmentId);\n if (index === -1) throw new Error(\"Attachment not found\");\n const attachment = this._attachments[index]!;\n\n await adapter.remove(attachment);\n\n // this._attachments.toSpliced(index, 1); - not yet widely supported\n this._attachments = [\n ...this._attachments.slice(0, index),\n ...this._attachments.slice(index + 1),\n ];\n this._notifySubscribers();\n }\n\n private _eventSubscribers = new Map<\n ComposerRuntimeEventType,\n Set<() => void>\n >();\n\n protected _notifyEventSubscribers(event: ComposerRuntimeEventType) {\n const subscribers = this._eventSubscribers.get(event);\n if (!subscribers) return;\n\n for (const callback of subscribers) callback();\n }\n\n public unstable_on(event: ComposerRuntimeEventType, callback: () => void) {\n const subscribers = this._eventSubscribers.get(event);\n if (!subscribers) {\n this._eventSubscribers.set(event, new Set([callback]));\n } else {\n subscribers.add(callback);\n }\n\n return () => {\n const subscribers = this._eventSubscribers.get(event);\n if (!subscribers) return;\n subscribers.delete(callback);\n };\n }\n}\n"],"mappings":"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","names":["subscribers"]}
@@ -1,12 +1,14 @@
1
1
  import { AddToolResultOptions, StartRunConfig, ThreadSuggestion } from "../core/ThreadRuntimeCore";
2
2
  import { AppendMessage, ThreadMessage } from "../../types";
3
3
  import { ExternalStoreAdapter } from "./ExternalStoreAdapter";
4
+ import { ThreadMessageLike } from "./ThreadMessageLike";
4
5
  import { RuntimeCapabilities, ThreadRuntimeCore } from "../core/ThreadRuntimeCore";
5
6
  import { BaseThreadRuntimeCore } from "../core/BaseThreadRuntimeCore";
6
7
  import { ModelContextProvider } from "../../model-context";
7
8
  export declare const hasUpcomingMessage: (isRunning: boolean, messages: readonly ThreadMessage[]) => boolean;
8
9
  export declare class ExternalStoreThreadRuntimeCore extends BaseThreadRuntimeCore implements ThreadRuntimeCore {
9
- private assistantOptimisticId;
10
+ private _resetScheduled;
11
+ private _assistantOptimisticId;
10
12
  private _capabilities;
11
13
  get capabilities(): RuntimeCapabilities;
12
14
  private _messages;
@@ -32,6 +34,7 @@ export declare class ExternalStoreThreadRuntimeCore extends BaseThreadRuntimeCor
32
34
  resumeRun(): Promise<void>;
33
35
  cancelRun(): void;
34
36
  addToolResult(options: AddToolResultOptions): void;
37
+ reset(initialMessages?: readonly ThreadMessageLike[]): void;
35
38
  private updateMessages;
36
39
  }
37
40
  //# sourceMappingURL=ExternalStoreThreadRuntimeCore.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ExternalStoreThreadRuntimeCore.d.ts","sourceRoot":"","sources":["../../../src/runtimes/external-store/ExternalStoreThreadRuntimeCore.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,EACpB,cAAc,EACd,gBAAgB,EACjB,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAS9D,OAAO,EACL,mBAAmB,EACnB,iBAAiB,EAClB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAI3D,eAAO,MAAM,kBAAkB,GAC7B,WAAW,OAAO,EAClB,UAAU,SAAS,aAAa,EAAE,YAGnC,CAAC;AAEF,qBAAa,8BACX,SAAQ,qBACR,YAAW,iBAAiB;IAE5B,OAAO,CAAC,qBAAqB,CAAuB;IAEpD,OAAO,CAAC,aAAa,CASnB;IAEF,IAAW,YAAY,wBAEtB;IAED,OAAO,CAAC,SAAS,CAA4B;IACtC,UAAU,EAAG,OAAO,CAAC;IAC5B,IAAW,SAAS,YAEnB;IAED,IAAoB,QAAQ,6BAE3B;IAED,IAAW,QAAQ;;;;;kBAElB;IAEM,WAAW,EAAE,SAAS,gBAAgB,EAAE,CAAM;IAC9C,MAAM,EAAE,OAAO,CAAa;IAEnC,OAAO,CAAC,UAAU,CAAgC;IAElD,OAAO,CAAC,MAAM,CAA6B;IAE3B,SAAS,CAAC,SAAS,EAAE,MAAM;gBAQzC,eAAe,EAAE,oBAAoB,EACrC,KAAK,EAAE,oBAAoB,CAAC,GAAG,CAAC;IAM3B,qBAAqB,CAAC,KAAK,EAAE,oBAAoB,CAAC,GAAG,CAAC;IAgI7C,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAQzC,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAU7C,QAAQ,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAO/C,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAIhC,SAAS,IAAI,IAAI;IAiCjB,aAAa,CAAC,OAAO,EAAE,oBAAoB;IAMlD,OAAO,CAAC,cAAc,CAUpB;CACH"}
1
+ {"version":3,"file":"ExternalStoreThreadRuntimeCore.d.ts","sourceRoot":"","sources":["../../../src/runtimes/external-store/ExternalStoreThreadRuntimeCore.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,EACpB,cAAc,EACd,gBAAgB,EACjB,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAO9D,OAAO,EAAyB,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAE/E,OAAO,EACL,mBAAmB,EACnB,iBAAiB,EAClB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAQ3D,eAAO,MAAM,kBAAkB,GAC7B,WAAW,OAAO,EAClB,UAAU,SAAS,aAAa,EAAE,YAGnC,CAAC;AAEF,qBAAa,8BACX,SAAQ,qBACR,YAAW,iBAAiB;IAE5B,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,sBAAsB,CAAuB;IAErD,OAAO,CAAC,aAAa,CASnB;IAEF,IAAW,YAAY,wBAEtB;IAED,OAAO,CAAC,SAAS,CAA4B;IACtC,UAAU,EAAG,OAAO,CAAC;IAC5B,IAAW,SAAS,YAEnB;IAED,IAAoB,QAAQ,6BAE3B;IAED,IAAW,QAAQ;;;;;kBAElB;IAEM,WAAW,EAAE,SAAS,gBAAgB,EAAE,CAAM;IAC9C,MAAM,EAAE,OAAO,CAAa;IAEnC,OAAO,CAAC,UAAU,CAAgC;IAElD,OAAO,CAAC,MAAM,CAA6B;IAE3B,SAAS,CAAC,SAAS,EAAE,MAAM;gBAQzC,eAAe,EAAE,oBAAoB,EACrC,KAAK,EAAE,oBAAoB,CAAC,GAAG,CAAC;IAM3B,qBAAqB,CAAC,KAAK,EAAE,oBAAoB,CAAC,GAAG,CAAC;IAsI7C,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAQzC,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAU7C,QAAQ,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAO/C,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAIhC,SAAS,IAAI,IAAI;IAiCjB,aAAa,CAAC,OAAO,EAAE,oBAAoB;IAMlC,KAAK,CAAC,eAAe,CAAC,EAAE,SAAS,iBAAiB,EAAE;IAOpE,OAAO,CAAC,cAAc,CAUpB;CACH"}
@@ -8,12 +8,17 @@ import { getAutoStatus, isAutoStatus } from "./auto-status.js";
8
8
  import { fromThreadMessageLike } from "./ThreadMessageLike.js";
9
9
  import { getThreadMessageText } from "../../utils/getThreadMessageText.js";
10
10
  import { BaseThreadRuntimeCore } from "../core/BaseThreadRuntimeCore.js";
11
+ import {
12
+ ExportedMessageRepository,
13
+ MessageRepository
14
+ } from "../utils/MessageRepository.js";
11
15
  var EMPTY_ARRAY = Object.freeze([]);
12
16
  var hasUpcomingMessage = (isRunning, messages) => {
13
17
  return isRunning && messages[messages.length - 1]?.role !== "assistant";
14
18
  };
15
19
  var ExternalStoreThreadRuntimeCore = class extends BaseThreadRuntimeCore {
16
- assistantOptimisticId = null;
20
+ _resetScheduled = false;
21
+ _assistantOptimisticId = null;
17
22
  _capabilities = {
18
23
  switchToBranch: false,
19
24
  edit: false,
@@ -77,7 +82,7 @@ var ExternalStoreThreadRuntimeCore = class extends BaseThreadRuntimeCore {
77
82
  return;
78
83
  }
79
84
  this.repository.clear();
80
- this.assistantOptimisticId = null;
85
+ this._assistantOptimisticId = null;
81
86
  this.repository.import(store.messageRepository);
82
87
  messages = this.repository.getMessages();
83
88
  } else if (store.messages) {
@@ -104,6 +109,10 @@ var ExternalStoreThreadRuntimeCore = class extends BaseThreadRuntimeCore {
104
109
  newMessage[symbolInnerMessage] = m;
105
110
  return newMessage;
106
111
  });
112
+ if (this._resetScheduled || messages.length === 0) {
113
+ this._resetScheduled = false;
114
+ this.repository.clear();
115
+ }
107
116
  for (let i = 0; i < messages.length; i++) {
108
117
  const message = messages[i];
109
118
  const parent = messages[i - 1];
@@ -122,12 +131,12 @@ var ExternalStoreThreadRuntimeCore = class extends BaseThreadRuntimeCore {
122
131
  this._notifyEventSubscribers("run-end");
123
132
  }
124
133
  }
125
- if (this.assistantOptimisticId) {
126
- this.repository.deleteMessage(this.assistantOptimisticId);
127
- this.assistantOptimisticId = null;
134
+ if (this._assistantOptimisticId) {
135
+ this.repository.deleteMessage(this._assistantOptimisticId);
136
+ this._assistantOptimisticId = null;
128
137
  }
129
138
  if (hasUpcomingMessage(isRunning, messages)) {
130
- this.assistantOptimisticId = this.repository.appendOptimisticMessage(
139
+ this._assistantOptimisticId = this.repository.appendOptimisticMessage(
131
140
  messages.at(-1)?.id ?? null,
132
141
  {
133
142
  role: "assistant",
@@ -136,7 +145,7 @@ var ExternalStoreThreadRuntimeCore = class extends BaseThreadRuntimeCore {
136
145
  );
137
146
  }
138
147
  this.repository.resetHead(
139
- this.assistantOptimisticId ?? messages.at(-1)?.id ?? null
148
+ this._assistantOptimisticId ?? messages.at(-1)?.id ?? null
140
149
  );
141
150
  this._messages = this.repository.getMessages();
142
151
  this._notifySubscribers();
@@ -168,9 +177,9 @@ var ExternalStoreThreadRuntimeCore = class extends BaseThreadRuntimeCore {
168
177
  if (!this._store.onCancel)
169
178
  throw new Error("Runtime does not support cancelling runs.");
170
179
  this._store.onCancel();
171
- if (this.assistantOptimisticId) {
172
- this.repository.deleteMessage(this.assistantOptimisticId);
173
- this.assistantOptimisticId = null;
180
+ if (this._assistantOptimisticId) {
181
+ this.repository.deleteMessage(this._assistantOptimisticId);
182
+ this._assistantOptimisticId = null;
174
183
  }
175
184
  let messages = this.repository.getMessages();
176
185
  const previousMessage = messages[messages.length - 1];
@@ -192,6 +201,12 @@ var ExternalStoreThreadRuntimeCore = class extends BaseThreadRuntimeCore {
192
201
  throw new Error("Runtime does not support tool results.");
193
202
  this._store.onAddToolResult?.(options);
194
203
  }
204
+ reset(initialMessages) {
205
+ const repo = new MessageRepository();
206
+ repo.import(ExportedMessageRepository.fromArray(initialMessages ?? []));
207
+ this._resetScheduled = true;
208
+ this.updateMessages(repo.getMessages());
209
+ }
195
210
  updateMessages = (messages) => {
196
211
  const hasConverter = this._store.convertMessage !== void 0;
197
212
  if (hasConverter) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/runtimes/external-store/ExternalStoreThreadRuntimeCore.tsx"],"sourcesContent":["import {\n AddToolResultOptions,\n StartRunConfig,\n ThreadSuggestion,\n} from \"../core/ThreadRuntimeCore\";\n\nimport { AppendMessage, ThreadMessage } from \"../../types\";\nimport { ExternalStoreAdapter } from \"./ExternalStoreAdapter\";\nimport {\n getExternalStoreMessage,\n symbolInnerMessage,\n} from \"./getExternalStoreMessage\";\nimport { ThreadMessageConverter } from \"./ThreadMessageConverter\";\nimport { getAutoStatus, isAutoStatus } from \"./auto-status\";\nimport { fromThreadMessageLike } from \"./ThreadMessageLike\";\nimport { getThreadMessageText } from \"../../utils/getThreadMessageText\";\nimport {\n RuntimeCapabilities,\n ThreadRuntimeCore,\n} from \"../core/ThreadRuntimeCore\";\nimport { BaseThreadRuntimeCore } from \"../core/BaseThreadRuntimeCore\";\nimport { ModelContextProvider } from \"../../model-context\";\n\nconst EMPTY_ARRAY = Object.freeze([]);\n\nexport const hasUpcomingMessage = (\n isRunning: boolean,\n messages: readonly ThreadMessage[],\n) => {\n return isRunning && messages[messages.length - 1]?.role !== \"assistant\";\n};\n\nexport class ExternalStoreThreadRuntimeCore\n extends BaseThreadRuntimeCore\n implements ThreadRuntimeCore\n{\n private assistantOptimisticId: string | null = null;\n\n private _capabilities: RuntimeCapabilities = {\n switchToBranch: false,\n edit: false,\n reload: false,\n cancel: false,\n unstable_copy: false,\n speech: false,\n attachments: false,\n feedback: false,\n };\n\n public get capabilities() {\n return this._capabilities;\n }\n\n private _messages!: readonly ThreadMessage[];\n public isDisabled!: boolean;\n public get isLoading() {\n return this._store.isLoading ?? false;\n }\n\n public override get messages() {\n return this._messages;\n }\n\n public get adapters() {\n return this._store.adapters;\n }\n\n public suggestions: readonly ThreadSuggestion[] = [];\n public extras: unknown = undefined;\n\n private _converter = new ThreadMessageConverter();\n\n private _store!: ExternalStoreAdapter<any>;\n\n public override beginEdit(messageId: string) {\n if (!this._store.onEdit)\n throw new Error(\"Runtime does not support editing.\");\n\n super.beginEdit(messageId);\n }\n\n constructor(\n contextProvider: ModelContextProvider,\n store: ExternalStoreAdapter<any>,\n ) {\n super(contextProvider);\n this.__internal_setAdapter(store);\n }\n\n public __internal_setAdapter(store: ExternalStoreAdapter<any>) {\n if (this._store === store) return;\n\n const isRunning = store.isRunning ?? false;\n this.isDisabled = store.isDisabled ?? false;\n\n const oldStore = this._store as ExternalStoreAdapter<any> | undefined;\n this._store = store;\n this.extras = store.extras;\n this.suggestions = store.suggestions ?? EMPTY_ARRAY;\n this._capabilities = {\n switchToBranch: this._store.setMessages !== undefined,\n edit: this._store.onEdit !== undefined,\n reload: this._store.onReload !== undefined,\n cancel: this._store.onCancel !== undefined,\n speech: this._store.adapters?.speech !== undefined,\n unstable_copy: this._store.unstable_capabilities?.copy !== false, // default true\n attachments: !!this._store.adapters?.attachments,\n feedback: !!this._store.adapters?.feedback,\n };\n\n let messages: readonly ThreadMessage[];\n\n if (store.messageRepository) {\n // Handle messageRepository\n if (\n oldStore &&\n oldStore.isRunning === store.isRunning &&\n oldStore.messageRepository === store.messageRepository\n ) {\n this._notifySubscribers();\n return;\n }\n\n // Clear and import the message repository\n this.repository.clear();\n this.assistantOptimisticId = null;\n this.repository.import(store.messageRepository);\n\n messages = this.repository.getMessages();\n } else if (store.messages) {\n // Handle messages array\n\n if (oldStore) {\n // flush the converter cache when the convertMessage prop changes\n if (oldStore.convertMessage !== store.convertMessage) {\n this._converter = new ThreadMessageConverter();\n } else if (\n oldStore.isRunning === store.isRunning &&\n oldStore.messages === store.messages\n ) {\n this._notifySubscribers();\n // no conversion update\n return;\n }\n }\n\n messages = !store.convertMessage\n ? store.messages\n : this._converter.convertMessages(store.messages, (cache, m, idx) => {\n if (!store.convertMessage) return m;\n\n const isLast = idx === store.messages!.length - 1;\n const autoStatus = getAutoStatus(isLast, isRunning, false);\n\n if (\n cache &&\n (cache.role !== \"assistant\" ||\n !isAutoStatus(cache.status) ||\n cache.status === autoStatus)\n )\n return cache;\n\n const messageLike = store.convertMessage(m, idx);\n const newMessage = fromThreadMessageLike(\n messageLike,\n idx.toString(),\n autoStatus,\n );\n (newMessage as any)[symbolInnerMessage] = m;\n return newMessage;\n });\n\n for (let i = 0; i < messages.length; i++) {\n const message = messages[i]!;\n const parent = messages[i - 1];\n this.repository.addOrUpdateMessage(parent?.id ?? null, message);\n }\n } else {\n throw new Error(\n \"ExternalStoreAdapter must provide either 'messages' or 'messageRepository'\",\n );\n }\n\n // Common logic for both paths\n if (messages.length > 0) this.ensureInitialized();\n\n if ((oldStore?.isRunning ?? false) !== (store.isRunning ?? false)) {\n if (store.isRunning) {\n this._notifyEventSubscribers(\"run-start\");\n } else {\n this._notifyEventSubscribers(\"run-end\");\n }\n }\n\n if (this.assistantOptimisticId) {\n this.repository.deleteMessage(this.assistantOptimisticId);\n this.assistantOptimisticId = null;\n }\n\n if (hasUpcomingMessage(isRunning, messages)) {\n this.assistantOptimisticId = this.repository.appendOptimisticMessage(\n messages.at(-1)?.id ?? null,\n {\n role: \"assistant\",\n content: [],\n },\n );\n }\n\n this.repository.resetHead(\n this.assistantOptimisticId ?? messages.at(-1)?.id ?? null,\n );\n\n this._messages = this.repository.getMessages();\n this._notifySubscribers();\n }\n\n public override switchToBranch(branchId: string): void {\n if (!this._store.setMessages)\n throw new Error(\"Runtime does not support switching branches.\");\n\n this.repository.switchToBranch(branchId);\n this.updateMessages(this.repository.getMessages());\n }\n\n public async append(message: AppendMessage): Promise<void> {\n if (message.parentId !== (this.messages.at(-1)?.id ?? null)) {\n if (!this._store.onEdit)\n throw new Error(\"Runtime does not support editing messages.\");\n await this._store.onEdit(message);\n } else {\n await this._store.onNew(message);\n }\n }\n\n public async startRun(config: StartRunConfig): Promise<void> {\n if (!this._store.onReload)\n throw new Error(\"Runtime does not support reloading messages.\");\n\n await this._store.onReload(config.parentId, config);\n }\n\n public async resumeRun(): Promise<void> {\n throw new Error(\"Runtime does not support resuming runs.\");\n }\n\n public cancelRun(): void {\n if (!this._store.onCancel)\n throw new Error(\"Runtime does not support cancelling runs.\");\n\n this._store.onCancel();\n\n if (this.assistantOptimisticId) {\n this.repository.deleteMessage(this.assistantOptimisticId);\n this.assistantOptimisticId = null;\n }\n\n let messages = this.repository.getMessages();\n const previousMessage = messages[messages.length - 1];\n if (\n previousMessage?.role === \"user\" &&\n previousMessage.id === messages.at(-1)?.id // ensure the previous message is a leaf node\n ) {\n this.repository.deleteMessage(previousMessage.id);\n if (!this.composer.text.trim()) {\n this.composer.setText(getThreadMessageText(previousMessage));\n }\n\n messages = this.repository.getMessages();\n } else {\n this._notifySubscribers();\n }\n\n // resync messages (for reloading, to restore the previous branch)\n setTimeout(() => {\n this.updateMessages(messages);\n }, 0);\n }\n\n public addToolResult(options: AddToolResultOptions) {\n if (!this._store.onAddToolResult && !this._store.onAddToolResult)\n throw new Error(\"Runtime does not support tool results.\");\n this._store.onAddToolResult?.(options);\n }\n\n private updateMessages = (messages: readonly ThreadMessage[]) => {\n const hasConverter = this._store.convertMessage !== undefined;\n if (hasConverter) {\n this._store.setMessages?.(\n messages.flatMap(getExternalStoreMessage).filter((m) => m != null),\n );\n } else {\n // TODO mark this as readonly in v0.8.0\n this._store.setMessages?.(messages as ThreadMessage[]);\n }\n };\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../../src/runtimes/external-store/ExternalStoreThreadRuntimeCore.tsx"],"sourcesContent":["import {\n AddToolResultOptions,\n StartRunConfig,\n ThreadSuggestion,\n} from \"../core/ThreadRuntimeCore\";\n\nimport { AppendMessage, ThreadMessage } from \"../../types\";\nimport { ExternalStoreAdapter } from \"./ExternalStoreAdapter\";\nimport {\n getExternalStoreMessage,\n symbolInnerMessage,\n} from \"./getExternalStoreMessage\";\nimport { ThreadMessageConverter } from \"./ThreadMessageConverter\";\nimport { getAutoStatus, isAutoStatus } from \"./auto-status\";\nimport { fromThreadMessageLike, ThreadMessageLike } from \"./ThreadMessageLike\";\nimport { getThreadMessageText } from \"../../utils/getThreadMessageText\";\nimport {\n RuntimeCapabilities,\n ThreadRuntimeCore,\n} from \"../core/ThreadRuntimeCore\";\nimport { BaseThreadRuntimeCore } from \"../core/BaseThreadRuntimeCore\";\nimport { ModelContextProvider } from \"../../model-context\";\nimport {\n ExportedMessageRepository,\n MessageRepository,\n} from \"../utils/MessageRepository\";\n\nconst EMPTY_ARRAY = Object.freeze([]);\n\nexport const hasUpcomingMessage = (\n isRunning: boolean,\n messages: readonly ThreadMessage[],\n) => {\n return isRunning && messages[messages.length - 1]?.role !== \"assistant\";\n};\n\nexport class ExternalStoreThreadRuntimeCore\n extends BaseThreadRuntimeCore\n implements ThreadRuntimeCore\n{\n private _resetScheduled = false;\n private _assistantOptimisticId: string | null = null;\n\n private _capabilities: RuntimeCapabilities = {\n switchToBranch: false,\n edit: false,\n reload: false,\n cancel: false,\n unstable_copy: false,\n speech: false,\n attachments: false,\n feedback: false,\n };\n\n public get capabilities() {\n return this._capabilities;\n }\n\n private _messages!: readonly ThreadMessage[];\n public isDisabled!: boolean;\n public get isLoading() {\n return this._store.isLoading ?? false;\n }\n\n public override get messages() {\n return this._messages;\n }\n\n public get adapters() {\n return this._store.adapters;\n }\n\n public suggestions: readonly ThreadSuggestion[] = [];\n public extras: unknown = undefined;\n\n private _converter = new ThreadMessageConverter();\n\n private _store!: ExternalStoreAdapter<any>;\n\n public override beginEdit(messageId: string) {\n if (!this._store.onEdit)\n throw new Error(\"Runtime does not support editing.\");\n\n super.beginEdit(messageId);\n }\n\n constructor(\n contextProvider: ModelContextProvider,\n store: ExternalStoreAdapter<any>,\n ) {\n super(contextProvider);\n this.__internal_setAdapter(store);\n }\n\n public __internal_setAdapter(store: ExternalStoreAdapter<any>) {\n if (this._store === store) return;\n\n const isRunning = store.isRunning ?? false;\n this.isDisabled = store.isDisabled ?? false;\n\n const oldStore = this._store as ExternalStoreAdapter<any> | undefined;\n this._store = store;\n this.extras = store.extras;\n this.suggestions = store.suggestions ?? EMPTY_ARRAY;\n this._capabilities = {\n switchToBranch: this._store.setMessages !== undefined,\n edit: this._store.onEdit !== undefined,\n reload: this._store.onReload !== undefined,\n cancel: this._store.onCancel !== undefined,\n speech: this._store.adapters?.speech !== undefined,\n unstable_copy: this._store.unstable_capabilities?.copy !== false, // default true\n attachments: !!this._store.adapters?.attachments,\n feedback: !!this._store.adapters?.feedback,\n };\n\n let messages: readonly ThreadMessage[];\n\n if (store.messageRepository) {\n // Handle messageRepository\n if (\n oldStore &&\n oldStore.isRunning === store.isRunning &&\n oldStore.messageRepository === store.messageRepository\n ) {\n this._notifySubscribers();\n return;\n }\n\n // Clear and import the message repository\n this.repository.clear();\n this._assistantOptimisticId = null;\n this.repository.import(store.messageRepository);\n\n messages = this.repository.getMessages();\n } else if (store.messages) {\n // Handle messages array\n\n if (oldStore) {\n // flush the converter cache when the convertMessage prop changes\n if (oldStore.convertMessage !== store.convertMessage) {\n this._converter = new ThreadMessageConverter();\n } else if (\n oldStore.isRunning === store.isRunning &&\n oldStore.messages === store.messages\n ) {\n this._notifySubscribers();\n // no conversion update\n return;\n }\n }\n\n messages = !store.convertMessage\n ? store.messages\n : this._converter.convertMessages(store.messages, (cache, m, idx) => {\n if (!store.convertMessage) return m;\n\n const isLast = idx === store.messages!.length - 1;\n const autoStatus = getAutoStatus(isLast, isRunning, false);\n\n if (\n cache &&\n (cache.role !== \"assistant\" ||\n !isAutoStatus(cache.status) ||\n cache.status === autoStatus)\n )\n return cache;\n\n const messageLike = store.convertMessage(m, idx);\n const newMessage = fromThreadMessageLike(\n messageLike,\n idx.toString(),\n autoStatus,\n );\n (newMessage as any)[symbolInnerMessage] = m;\n return newMessage;\n });\n\n // special case: branches should be reset if an empty array is provided\n if (this._resetScheduled || messages.length === 0) {\n this._resetScheduled = false;\n this.repository.clear();\n }\n\n for (let i = 0; i < messages.length; i++) {\n const message = messages[i]!;\n const parent = messages[i - 1];\n this.repository.addOrUpdateMessage(parent?.id ?? null, message);\n }\n } else {\n throw new Error(\n \"ExternalStoreAdapter must provide either 'messages' or 'messageRepository'\",\n );\n }\n\n // Common logic for both paths\n if (messages.length > 0) this.ensureInitialized();\n\n if ((oldStore?.isRunning ?? false) !== (store.isRunning ?? false)) {\n if (store.isRunning) {\n this._notifyEventSubscribers(\"run-start\");\n } else {\n this._notifyEventSubscribers(\"run-end\");\n }\n }\n\n if (this._assistantOptimisticId) {\n this.repository.deleteMessage(this._assistantOptimisticId);\n this._assistantOptimisticId = null;\n }\n\n if (hasUpcomingMessage(isRunning, messages)) {\n this._assistantOptimisticId = this.repository.appendOptimisticMessage(\n messages.at(-1)?.id ?? null,\n {\n role: \"assistant\",\n content: [],\n },\n );\n }\n\n this.repository.resetHead(\n this._assistantOptimisticId ?? messages.at(-1)?.id ?? null,\n );\n\n this._messages = this.repository.getMessages();\n this._notifySubscribers();\n }\n\n public override switchToBranch(branchId: string): void {\n if (!this._store.setMessages)\n throw new Error(\"Runtime does not support switching branches.\");\n\n this.repository.switchToBranch(branchId);\n this.updateMessages(this.repository.getMessages());\n }\n\n public async append(message: AppendMessage): Promise<void> {\n if (message.parentId !== (this.messages.at(-1)?.id ?? null)) {\n if (!this._store.onEdit)\n throw new Error(\"Runtime does not support editing messages.\");\n await this._store.onEdit(message);\n } else {\n await this._store.onNew(message);\n }\n }\n\n public async startRun(config: StartRunConfig): Promise<void> {\n if (!this._store.onReload)\n throw new Error(\"Runtime does not support reloading messages.\");\n\n await this._store.onReload(config.parentId, config);\n }\n\n public async resumeRun(): Promise<void> {\n throw new Error(\"Runtime does not support resuming runs.\");\n }\n\n public cancelRun(): void {\n if (!this._store.onCancel)\n throw new Error(\"Runtime does not support cancelling runs.\");\n\n this._store.onCancel();\n\n if (this._assistantOptimisticId) {\n this.repository.deleteMessage(this._assistantOptimisticId);\n this._assistantOptimisticId = null;\n }\n\n let messages = this.repository.getMessages();\n const previousMessage = messages[messages.length - 1];\n if (\n previousMessage?.role === \"user\" &&\n previousMessage.id === messages.at(-1)?.id // ensure the previous message is a leaf node\n ) {\n this.repository.deleteMessage(previousMessage.id);\n if (!this.composer.text.trim()) {\n this.composer.setText(getThreadMessageText(previousMessage));\n }\n\n messages = this.repository.getMessages();\n } else {\n this._notifySubscribers();\n }\n\n // resync messages (for reloading, to restore the previous branch)\n setTimeout(() => {\n this.updateMessages(messages);\n }, 0);\n }\n\n public addToolResult(options: AddToolResultOptions) {\n if (!this._store.onAddToolResult && !this._store.onAddToolResult)\n throw new Error(\"Runtime does not support tool results.\");\n this._store.onAddToolResult?.(options);\n }\n\n public override reset(initialMessages?: readonly ThreadMessageLike[]) {\n const repo = new MessageRepository();\n repo.import(ExportedMessageRepository.fromArray(initialMessages ?? []));\n this._resetScheduled = true;\n this.updateMessages(repo.getMessages());\n }\n\n private updateMessages = (messages: readonly ThreadMessage[]) => {\n const hasConverter = this._store.convertMessage !== undefined;\n if (hasConverter) {\n this._store.setMessages?.(\n messages.flatMap(getExternalStoreMessage).filter((m) => m != null),\n );\n } else {\n // TODO mark this as readonly in v0.8.0\n this._store.setMessages?.(messages as ThreadMessage[]);\n }\n };\n}\n"],"mappings":"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","names":[]}
@@ -20,9 +20,11 @@ export type SourceMessagePart = {
20
20
  export type ImageMessagePart = {
21
21
  readonly type: "image";
22
22
  readonly image: string;
23
+ readonly filename?: string;
23
24
  };
24
25
  export type FileMessagePart = {
25
26
  readonly type: "file";
27
+ readonly filename?: string;
26
28
  readonly data: string;
27
29
  readonly mimeType: string;
28
30
  };
@@ -1 +1 @@
1
- {"version":3,"file":"MessagePartTypes.d.ts","sourceRoot":"","sources":["../../src/types/MessagePartTypes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAE5D,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IACxB,QAAQ,CAAC,UAAU,EAAE,KAAK,CAAC;IAC3B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG;IACtC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE;QACd,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QACtB,QAAQ,CAAC,MAAM,EAAE,KAAK,GAAG,KAAK,CAAC;KAChC,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,mBAAmB,CAC7B,KAAK,GAAG,kBAAkB,EAC1B,OAAO,GAAG,OAAO,IACf;IACF,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAC3B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;IACrB,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACtC,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACvC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAC7B,eAAe,GACf,gBAAgB,GAChB,eAAe,GACf,yBAAyB,CAAC;AAE9B,MAAM,MAAM,0BAA0B,GAClC,eAAe,GACf,oBAAoB,GACpB,mBAAmB,GACnB,iBAAiB,GACjB,eAAe,GACf,gBAAgB,CAAC"}
1
+ {"version":3,"file":"MessagePartTypes.d.ts","sourceRoot":"","sources":["../../src/types/MessagePartTypes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAE5D,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IACxB,QAAQ,CAAC,UAAU,EAAE,KAAK,CAAC;IAC3B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG;IACtC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE;QACd,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QACtB,QAAQ,CAAC,MAAM,EAAE,KAAK,GAAG,KAAK,CAAC;KAChC,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,mBAAmB,CAC7B,KAAK,GAAG,kBAAkB,EAC1B,OAAO,GAAG,OAAO,IACf;IACF,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAC3B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;IACrB,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACtC,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACvC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAC7B,eAAe,GACf,gBAAgB,GAChB,eAAe,GACf,yBAAyB,CAAC;AAE9B,MAAM,MAAM,0BAA0B,GAClC,eAAe,GACf,oBAAoB,GACpB,mBAAmB,GACnB,iBAAiB,GACjB,eAAe,GACf,gBAAgB,CAAC"}