@assistant-ui/react 0.5.22 → 0.5.24
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.
- package/dist/index.d.mts +39 -25
- package/dist/index.d.ts +39 -25
- package/dist/index.js +132 -139
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +113 -120
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
    
        package/dist/index.mjs
    CHANGED
    
    | @@ -2144,6 +2144,13 @@ var MessageRepository = class { | |
| 2144 2144 | 
             
                  }
         | 
| 2145 2145 | 
             
                }
         | 
| 2146 2146 | 
             
                if (operation !== "cut") {
         | 
| 2147 | 
            +
                  for (let current = newParent; current; current = current.prev) {
         | 
| 2148 | 
            +
                    if (current.current.id === child.current.id) {
         | 
| 2149 | 
            +
                      throw new Error(
         | 
| 2150 | 
            +
                        "MessageRepository(performOp/link): A message with the same id already exists in the parent tree. This error occurs if the same message id is found multiple times. This is likely an internal bug in assistant-ui."
         | 
| 2151 | 
            +
                      );
         | 
| 2152 | 
            +
                    }
         | 
| 2153 | 
            +
                  }
         | 
| 2147 2154 | 
             
                  newParentOrRoot.children = [
         | 
| 2148 2155 | 
             
                    ...newParentOrRoot.children,
         | 
| 2149 2156 | 
             
                    child.current.id
         | 
| @@ -2273,6 +2280,25 @@ var MessageRepository = class { | |
| 2273 2280 | 
             
                  }
         | 
| 2274 2281 | 
             
                }
         | 
| 2275 2282 | 
             
              }
         | 
| 2283 | 
            +
              export() {
         | 
| 2284 | 
            +
                const exportItems = [];
         | 
| 2285 | 
            +
                for (const [, message] of this.messages) {
         | 
| 2286 | 
            +
                  exportItems.push({
         | 
| 2287 | 
            +
                    message: message.current,
         | 
| 2288 | 
            +
                    parentId: message.prev?.current.id ?? null
         | 
| 2289 | 
            +
                  });
         | 
| 2290 | 
            +
                }
         | 
| 2291 | 
            +
                return {
         | 
| 2292 | 
            +
                  headId: this.head?.current.id ?? null,
         | 
| 2293 | 
            +
                  messages: exportItems
         | 
| 2294 | 
            +
                };
         | 
| 2295 | 
            +
              }
         | 
| 2296 | 
            +
              import({ headId, messages }) {
         | 
| 2297 | 
            +
                for (const { message, parentId } of messages) {
         | 
| 2298 | 
            +
                  this.addOrUpdateMessage(parentId, message);
         | 
| 2299 | 
            +
                }
         | 
| 2300 | 
            +
                this.resetHead(headId ?? messages.at(-1)?.message.id ?? null);
         | 
| 2301 | 
            +
              }
         | 
| 2276 2302 | 
             
            };
         | 
| 2277 2303 |  | 
| 2278 2304 | 
             
            // src/ui/base/tooltip-icon-button.tsx
         | 
| @@ -2831,6 +2857,13 @@ var LocalThreadRuntime = class { | |
| 2831 2857 | 
             
                  this.performRoundtrip(parentId, message);
         | 
| 2832 2858 | 
             
                }
         | 
| 2833 2859 | 
             
              }
         | 
| 2860 | 
            +
              export() {
         | 
| 2861 | 
            +
                return this.repository.export();
         | 
| 2862 | 
            +
              }
         | 
| 2863 | 
            +
              import(data) {
         | 
| 2864 | 
            +
                this.repository.import(data);
         | 
| 2865 | 
            +
                this.notifySubscribers();
         | 
| 2866 | 
            +
              }
         | 
| 2834 2867 | 
             
            };
         | 
| 2835 2868 |  | 
| 2836 2869 | 
             
            // src/runtimes/local/LocalRuntime.tsx
         | 
| @@ -2867,18 +2900,12 @@ var useLocalRuntime = (adapter, options) => { | |
| 2867 2900 | 
             
              return runtime;
         | 
| 2868 2901 | 
             
            };
         | 
| 2869 2902 |  | 
| 2870 | 
            -
            // src/runtimes/external-store/ExternalStoreThreadRuntime.tsx
         | 
| 2871 | 
            -
            import { create as create15 } from "zustand";
         | 
| 2872 | 
            -
             | 
| 2873 2903 | 
             
            // src/runtimes/external-store/getExternalStoreMessage.tsx
         | 
| 2874 2904 | 
             
            var symbolInnerMessage = Symbol("innerMessage");
         | 
| 2875 2905 | 
             
            var getExternalStoreMessage = (message) => {
         | 
| 2876 2906 | 
             
              return message[symbolInnerMessage];
         | 
| 2877 2907 | 
             
            };
         | 
| 2878 2908 |  | 
| 2879 | 
            -
            // src/runtimes/external-store/useExternalStoreSync.tsx
         | 
| 2880 | 
            -
            import { useEffect as useEffect11, useInsertionEffect as useInsertionEffect4, useMemo as useMemo4, useRef as useRef6 } from "react";
         | 
| 2881 | 
            -
             | 
| 2882 2909 | 
             
            // src/runtimes/external-store/ThreadMessageConverter.ts
         | 
| 2883 2910 | 
             
            var ThreadMessageConverter = class {
         | 
| 2884 2911 | 
             
              cache = /* @__PURE__ */ new WeakMap();
         | 
| @@ -2899,6 +2926,7 @@ var AUTO_STATUS_COMPLETE = Object.freeze({ | |
| 2899 2926 | 
             
              type: "complete",
         | 
| 2900 2927 | 
             
              reason: "unknown"
         | 
| 2901 2928 | 
             
            });
         | 
| 2929 | 
            +
            var isAutoStatus = (status) => status === AUTO_STATUS_RUNNING || status === AUTO_STATUS_COMPLETE;
         | 
| 2902 2930 | 
             
            var getAutoStatus = (isLast, isRunning) => isLast && isRunning ? AUTO_STATUS_RUNNING : AUTO_STATUS_COMPLETE;
         | 
| 2903 2931 |  | 
| 2904 2932 | 
             
            // src/runtimes/external-store/ThreadMessageLike.tsx
         | 
| @@ -2969,106 +2997,114 @@ var fromThreadMessageLike = (like, fallbackId, fallbackStatus) => { | |
| 2969 2997 | 
             
              }
         | 
| 2970 2998 | 
             
            };
         | 
| 2971 2999 |  | 
| 2972 | 
            -
            // src/runtimes/external-store/useExternalStoreSync.tsx
         | 
| 2973 | 
            -
            var useExternalStoreSync = (adapter, updateData) => {
         | 
| 2974 | 
            -
              const adapterRef = useRef6(adapter);
         | 
| 2975 | 
            -
              useInsertionEffect4(() => {
         | 
| 2976 | 
            -
                adapterRef.current = adapter;
         | 
| 2977 | 
            -
              });
         | 
| 2978 | 
            -
              const [converter, convertCallback] = useMemo4(() => {
         | 
| 2979 | 
            -
                const converter2 = adapter.convertMessage ?? ((m) => m);
         | 
| 2980 | 
            -
                const convertCallback2 = (cache, m, idx) => {
         | 
| 2981 | 
            -
                  const autoStatus = getAutoStatus(
         | 
| 2982 | 
            -
                    adapterRef.current.messages.at(-1) === m,
         | 
| 2983 | 
            -
                    adapterRef.current.isRunning ?? false
         | 
| 2984 | 
            -
                  );
         | 
| 2985 | 
            -
                  if (cache && (cache.role !== "assistant" || cache.status === autoStatus))
         | 
| 2986 | 
            -
                    return cache;
         | 
| 2987 | 
            -
                  const newMessage = fromThreadMessageLike(
         | 
| 2988 | 
            -
                    converter2(m, idx),
         | 
| 2989 | 
            -
                    idx.toString(),
         | 
| 2990 | 
            -
                    autoStatus
         | 
| 2991 | 
            -
                  );
         | 
| 2992 | 
            -
                  newMessage[symbolInnerMessage] = m;
         | 
| 2993 | 
            -
                  return newMessage;
         | 
| 2994 | 
            -
                };
         | 
| 2995 | 
            -
                return [new ThreadMessageConverter(), convertCallback2];
         | 
| 2996 | 
            -
              }, [adapter.convertMessage]);
         | 
| 2997 | 
            -
              useEffect11(() => {
         | 
| 2998 | 
            -
                updateData(
         | 
| 2999 | 
            -
                  adapter.isDisabled ?? false,
         | 
| 3000 | 
            -
                  adapter.isRunning ?? false,
         | 
| 3001 | 
            -
                  converter.convertMessages(adapter.messages, convertCallback)
         | 
| 3002 | 
            -
                );
         | 
| 3003 | 
            -
              }, [
         | 
| 3004 | 
            -
                updateData,
         | 
| 3005 | 
            -
                converter,
         | 
| 3006 | 
            -
                convertCallback,
         | 
| 3007 | 
            -
                adapter.isDisabled,
         | 
| 3008 | 
            -
                adapter.isRunning,
         | 
| 3009 | 
            -
                adapter.messages
         | 
| 3010 | 
            -
              ]);
         | 
| 3011 | 
            -
            };
         | 
| 3012 | 
            -
             | 
| 3013 3000 | 
             
            // src/runtimes/external-store/ExternalStoreThreadRuntime.tsx
         | 
| 3014 3001 | 
             
            var hasUpcomingMessage = (isRunning, messages) => {
         | 
| 3015 3002 | 
             
              return isRunning && messages[messages.length - 1]?.role !== "assistant";
         | 
| 3016 3003 | 
             
            };
         | 
| 3017 3004 | 
             
            var ExternalStoreThreadRuntime = class {
         | 
| 3018 | 
            -
              constructor(store) {
         | 
| 3019 | 
            -
                this.store = store;
         | 
| 3020 | 
            -
                this.updateData(
         | 
| 3021 | 
            -
                  store.isDisabled ?? false,
         | 
| 3022 | 
            -
                  store.isRunning ?? false,
         | 
| 3023 | 
            -
                  store.messages
         | 
| 3024 | 
            -
                );
         | 
| 3025 | 
            -
                this.useStore = create15(() => ({
         | 
| 3026 | 
            -
                  store
         | 
| 3027 | 
            -
                }));
         | 
| 3028 | 
            -
              }
         | 
| 3029 3005 | 
             
              _subscriptions = /* @__PURE__ */ new Set();
         | 
| 3030 3006 | 
             
              repository = new MessageRepository();
         | 
| 3031 3007 | 
             
              assistantOptimisticId = null;
         | 
| 3032 | 
            -
              useStore;
         | 
| 3033 3008 | 
             
              get capabilities() {
         | 
| 3034 3009 | 
             
                return {
         | 
| 3035 | 
            -
                  switchToBranch: this. | 
| 3036 | 
            -
                  edit: this. | 
| 3037 | 
            -
                  reload: this. | 
| 3038 | 
            -
                  cancel: this. | 
| 3039 | 
            -
                  copy: this. | 
| 3010 | 
            +
                  switchToBranch: this._store.setMessages !== void 0,
         | 
| 3011 | 
            +
                  edit: this._store.onEdit !== void 0,
         | 
| 3012 | 
            +
                  reload: this._store.onReload !== void 0,
         | 
| 3013 | 
            +
                  cancel: this._store.onCancel !== void 0,
         | 
| 3014 | 
            +
                  copy: this._store.onCopy !== null
         | 
| 3040 3015 | 
             
                };
         | 
| 3041 3016 | 
             
              }
         | 
| 3042 3017 | 
             
              messages = [];
         | 
| 3043 3018 | 
             
              isDisabled = false;
         | 
| 3044 3019 | 
             
              isRunning = false;
         | 
| 3020 | 
            +
              converter = new ThreadMessageConverter();
         | 
| 3021 | 
            +
              _store;
         | 
| 3022 | 
            +
              constructor(store) {
         | 
| 3023 | 
            +
                this.store = store;
         | 
| 3024 | 
            +
              }
         | 
| 3025 | 
            +
              set store(store) {
         | 
| 3026 | 
            +
                const oldStore = this._store;
         | 
| 3027 | 
            +
                if (oldStore) {
         | 
| 3028 | 
            +
                  if (oldStore.convertMessage !== store.convertMessage) {
         | 
| 3029 | 
            +
                    this.converter = new ThreadMessageConverter();
         | 
| 3030 | 
            +
                  } else if (oldStore.isDisabled === store.isDisabled && oldStore.isRunning === store.isRunning && oldStore.messages === store.messages) {
         | 
| 3031 | 
            +
                    return;
         | 
| 3032 | 
            +
                  }
         | 
| 3033 | 
            +
                }
         | 
| 3034 | 
            +
                this._store = store;
         | 
| 3035 | 
            +
                const isRunning = store.isRunning ?? false;
         | 
| 3036 | 
            +
                const isDisabled = store.isDisabled ?? false;
         | 
| 3037 | 
            +
                const convertCallback = (cache, m, idx) => {
         | 
| 3038 | 
            +
                  if (!store.convertMessage) return m;
         | 
| 3039 | 
            +
                  const isLast = idx === store.messages.length - 1;
         | 
| 3040 | 
            +
                  const autoStatus = getAutoStatus(isLast, isRunning);
         | 
| 3041 | 
            +
                  if (cache && (cache.role !== "assistant" || !isAutoStatus(cache.status) || cache.status === autoStatus))
         | 
| 3042 | 
            +
                    return cache;
         | 
| 3043 | 
            +
                  const newMessage = fromThreadMessageLike(
         | 
| 3044 | 
            +
                    store.convertMessage(m, idx),
         | 
| 3045 | 
            +
                    idx.toString(),
         | 
| 3046 | 
            +
                    autoStatus
         | 
| 3047 | 
            +
                  );
         | 
| 3048 | 
            +
                  newMessage[symbolInnerMessage] = m;
         | 
| 3049 | 
            +
                  return newMessage;
         | 
| 3050 | 
            +
                };
         | 
| 3051 | 
            +
                const messages = this.converter.convertMessages(
         | 
| 3052 | 
            +
                  store.messages,
         | 
| 3053 | 
            +
                  convertCallback
         | 
| 3054 | 
            +
                );
         | 
| 3055 | 
            +
                for (let i = 0; i < messages.length; i++) {
         | 
| 3056 | 
            +
                  const message = messages[i];
         | 
| 3057 | 
            +
                  const parent = messages[i - 1];
         | 
| 3058 | 
            +
                  this.repository.addOrUpdateMessage(parent?.id ?? null, message);
         | 
| 3059 | 
            +
                }
         | 
| 3060 | 
            +
                if (this.assistantOptimisticId) {
         | 
| 3061 | 
            +
                  this.repository.deleteMessage(this.assistantOptimisticId);
         | 
| 3062 | 
            +
                  this.assistantOptimisticId = null;
         | 
| 3063 | 
            +
                }
         | 
| 3064 | 
            +
                if (hasUpcomingMessage(isRunning, messages)) {
         | 
| 3065 | 
            +
                  this.assistantOptimisticId = this.repository.appendOptimisticMessage(
         | 
| 3066 | 
            +
                    messages.at(-1)?.id ?? null,
         | 
| 3067 | 
            +
                    {
         | 
| 3068 | 
            +
                      role: "assistant",
         | 
| 3069 | 
            +
                      content: []
         | 
| 3070 | 
            +
                    }
         | 
| 3071 | 
            +
                  );
         | 
| 3072 | 
            +
                }
         | 
| 3073 | 
            +
                this.repository.resetHead(
         | 
| 3074 | 
            +
                  this.assistantOptimisticId ?? messages.at(-1)?.id ?? null
         | 
| 3075 | 
            +
                );
         | 
| 3076 | 
            +
                this.messages = this.repository.getMessages();
         | 
| 3077 | 
            +
                this.isDisabled = isDisabled;
         | 
| 3078 | 
            +
                this.isRunning = isRunning;
         | 
| 3079 | 
            +
                for (const callback of this._subscriptions) callback();
         | 
| 3080 | 
            +
              }
         | 
| 3045 3081 | 
             
              getBranches(messageId) {
         | 
| 3046 3082 | 
             
                return this.repository.getBranches(messageId);
         | 
| 3047 3083 | 
             
              }
         | 
| 3048 3084 | 
             
              switchToBranch(branchId) {
         | 
| 3049 | 
            -
                if (!this. | 
| 3085 | 
            +
                if (!this._store.setMessages)
         | 
| 3050 3086 | 
             
                  throw new Error("Runtime does not support switching branches.");
         | 
| 3051 3087 | 
             
                this.repository.switchToBranch(branchId);
         | 
| 3052 3088 | 
             
                this.updateMessages(this.repository.getMessages());
         | 
| 3053 3089 | 
             
              }
         | 
| 3054 3090 | 
             
              async append(message) {
         | 
| 3055 3091 | 
             
                if (message.parentId !== (this.messages.at(-1)?.id ?? null)) {
         | 
| 3056 | 
            -
                  if (!this. | 
| 3092 | 
            +
                  if (!this._store.onEdit)
         | 
| 3057 3093 | 
             
                    throw new Error("Runtime does not support editing messages.");
         | 
| 3058 | 
            -
                  await this. | 
| 3094 | 
            +
                  await this._store.onEdit(message);
         | 
| 3059 3095 | 
             
                } else {
         | 
| 3060 | 
            -
                  await this. | 
| 3096 | 
            +
                  await this._store.onNew(message);
         | 
| 3061 3097 | 
             
                }
         | 
| 3062 3098 | 
             
              }
         | 
| 3063 3099 | 
             
              async startRun(parentId) {
         | 
| 3064 | 
            -
                if (!this. | 
| 3100 | 
            +
                if (!this._store.onReload)
         | 
| 3065 3101 | 
             
                  throw new Error("Runtime does not support reloading messages.");
         | 
| 3066 | 
            -
                await this. | 
| 3102 | 
            +
                await this._store.onReload(parentId);
         | 
| 3067 3103 | 
             
              }
         | 
| 3068 3104 | 
             
              cancelRun() {
         | 
| 3069 | 
            -
                if (!this. | 
| 3105 | 
            +
                if (!this._store.onCancel)
         | 
| 3070 3106 | 
             
                  throw new Error("Runtime does not support cancelling runs.");
         | 
| 3071 | 
            -
                this. | 
| 3107 | 
            +
                this._store.onCancel();
         | 
| 3072 3108 | 
             
                if (this.assistantOptimisticId) {
         | 
| 3073 3109 | 
             
                  this.repository.deleteMessage(this.assistantOptimisticId);
         | 
| 3074 3110 | 
             
                  this.assistantOptimisticId = null;
         | 
| @@ -3083,51 +3119,14 @@ var ExternalStoreThreadRuntime = class { | |
| 3083 3119 | 
             
                return () => this._subscriptions.delete(callback);
         | 
| 3084 3120 | 
             
              }
         | 
| 3085 3121 | 
             
              updateMessages = (messages) => {
         | 
| 3086 | 
            -
                this. | 
| 3122 | 
            +
                this._store.setMessages?.(
         | 
| 3087 3123 | 
             
                  messages.flatMap(getExternalStoreMessage).filter((m) => m != null)
         | 
| 3088 3124 | 
             
                );
         | 
| 3089 3125 | 
             
              };
         | 
| 3090 | 
            -
              onStoreUpdated() {
         | 
| 3091 | 
            -
                if (this.useStore.getState().store !== this.store) {
         | 
| 3092 | 
            -
                  this.useStore.setState({ store: this.store });
         | 
| 3093 | 
            -
                }
         | 
| 3094 | 
            -
              }
         | 
| 3095 | 
            -
              updateData = (isDisabled, isRunning, vm) => {
         | 
| 3096 | 
            -
                for (let i = 0; i < vm.length; i++) {
         | 
| 3097 | 
            -
                  const message = vm[i];
         | 
| 3098 | 
            -
                  const parent = vm[i - 1];
         | 
| 3099 | 
            -
                  this.repository.addOrUpdateMessage(parent?.id ?? null, message);
         | 
| 3100 | 
            -
                }
         | 
| 3101 | 
            -
                if (this.assistantOptimisticId) {
         | 
| 3102 | 
            -
                  this.repository.deleteMessage(this.assistantOptimisticId);
         | 
| 3103 | 
            -
                  this.assistantOptimisticId = null;
         | 
| 3104 | 
            -
                }
         | 
| 3105 | 
            -
                if (hasUpcomingMessage(isRunning, vm)) {
         | 
| 3106 | 
            -
                  this.assistantOptimisticId = this.repository.appendOptimisticMessage(
         | 
| 3107 | 
            -
                    vm.at(-1)?.id ?? null,
         | 
| 3108 | 
            -
                    {
         | 
| 3109 | 
            -
                      role: "assistant",
         | 
| 3110 | 
            -
                      content: []
         | 
| 3111 | 
            -
                    }
         | 
| 3112 | 
            -
                  );
         | 
| 3113 | 
            -
                }
         | 
| 3114 | 
            -
                this.repository.resetHead(
         | 
| 3115 | 
            -
                  this.assistantOptimisticId ?? vm.at(-1)?.id ?? null
         | 
| 3116 | 
            -
                );
         | 
| 3117 | 
            -
                this.messages = this.repository.getMessages();
         | 
| 3118 | 
            -
                this.isDisabled = isDisabled;
         | 
| 3119 | 
            -
                this.isRunning = isRunning;
         | 
| 3120 | 
            -
                for (const callback of this._subscriptions) callback();
         | 
| 3121 | 
            -
              };
         | 
| 3122 | 
            -
              unstable_synchronizer = () => {
         | 
| 3123 | 
            -
                const { store } = this.useStore();
         | 
| 3124 | 
            -
                useExternalStoreSync(store, this.updateData);
         | 
| 3125 | 
            -
                return null;
         | 
| 3126 | 
            -
              };
         | 
| 3127 3126 | 
             
              addToolResult(options) {
         | 
| 3128 | 
            -
                if (!this. | 
| 3127 | 
            +
                if (!this._store.onAddToolResult)
         | 
| 3129 3128 | 
             
                  throw new Error("Runtime does not support tool results.");
         | 
| 3130 | 
            -
                this. | 
| 3129 | 
            +
                this._store.onAddToolResult(options);
         | 
| 3131 3130 | 
             
              }
         | 
| 3132 3131 | 
             
            };
         | 
| 3133 3132 |  | 
| @@ -3140,9 +3139,6 @@ var ExternalStoreRuntime = class extends BaseAssistantRuntime { | |
| 3140 3139 | 
             
              set store(store) {
         | 
| 3141 3140 | 
             
                this.thread.store = store;
         | 
| 3142 3141 | 
             
              }
         | 
| 3143 | 
            -
              onStoreUpdated() {
         | 
| 3144 | 
            -
                return this.thread.onStoreUpdated();
         | 
| 3145 | 
            -
              }
         | 
| 3146 3142 | 
             
              getModelConfig() {
         | 
| 3147 3143 | 
             
                return this._proxyConfigProvider.getModelConfig();
         | 
| 3148 3144 | 
             
              }
         | 
| @@ -3163,15 +3159,12 @@ var ExternalStoreRuntime = class extends BaseAssistantRuntime { | |
| 3163 3159 | 
             
            };
         | 
| 3164 3160 |  | 
| 3165 3161 | 
             
            // src/runtimes/external-store/useExternalStoreRuntime.tsx
         | 
| 3166 | 
            -
            import {  | 
| 3162 | 
            +
            import { useInsertionEffect as useInsertionEffect4, useState as useState10 } from "react";
         | 
| 3167 3163 | 
             
            var useExternalStoreRuntime = (store) => {
         | 
| 3168 3164 | 
             
              const [runtime] = useState10(() => new ExternalStoreRuntime(store));
         | 
| 3169 | 
            -
               | 
| 3165 | 
            +
              useInsertionEffect4(() => {
         | 
| 3170 3166 | 
             
                runtime.store = store;
         | 
| 3171 3167 | 
             
              });
         | 
| 3172 | 
            -
              useEffect12(() => {
         | 
| 3173 | 
            -
                runtime.onStoreUpdated();
         | 
| 3174 | 
            -
              });
         | 
| 3175 3168 | 
             
              return runtime;
         | 
| 3176 3169 | 
             
            };
         | 
| 3177 3170 |  |