@superinterface/react 3.4.1 → 3.5.1

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.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/domas/Developer/supercorp/superinterface/packages/react/dist/index.js","../src/lib/misc/merge/index.ts","../src/hooks/audioThreads/useMessageAudio/lib/isHtmlAudioSupported.ts","../src/components/core/SuperinterfaceProvider/index.tsx","../src/lib/misc/merge/customizer.ts","../src/contexts/core/SuperinterfaceContext/index.tsx","../src/lib/superinterfaceCloud/baseUrl.ts","../src/lib/threadIdStorage/cookieOptions/get.ts","../src/lib/threadIdStorage/key.ts","../src/lib/threadIdStorage/cookieOptions/set.ts","../src/lib/threadIdStorage/cookieOptions/remove.ts","../src/lib/threadIdStorage/cookieOptions/index.ts","../src/lib/threadIdStorage/localStorageOptions/get.ts","../src/lib/threadIdStorage/localStorageOptions/set.ts","../src/lib/threadIdStorage/localStorageOptions/remove.ts","../src/lib/threadIdStorage/localStorageOptions/index.ts","../src/lib/iframes/isIframe.ts","../src/hooks/core/useSuperinterfaceContext/index.ts","../src/components/threads/Thread/Messages/index.tsx","../src/components/threads/Thread/Message/index.tsx","../src/components/skeletons/StartingContentSkeleton/index.tsx","../src/components/runSteps/RunSteps/index.tsx","../src/contexts/components/ComponentsContext/index.tsx","../src/components/runSteps/RunStep/ToolCalls/index.tsx","../src/components/runSteps/RunStep/ToolCalls/ToolCall/Fn/index.tsx","../src/contexts/functions/FunctionComponentsContext/index.tsx","../src/components/functions/FunctionBase/index.tsx","../src/components/toolCalls/ToolCallBase/index.tsx","../src/components/toolCalls/ToolCallBase/ToolCallTitle.tsx","../src/components/toolCalls/ToolCallBase/ToolCallIcon.tsx","../src/components/functions/FunctionBase/Content/index.tsx","../src/components/functions/FunctionBase/Content/lib/formattedJsonOrRaw.ts","../src/components/runSteps/RunStep/ToolCalls/ToolCall/Fn/DefaultFunction/lib/title.ts","../src/components/runSteps/RunStep/ToolCalls/ToolCall/Fn/DefaultFunction/index.tsx","../src/components/runSteps/RunStep/ToolCalls/ToolCall/CodeInterpreter/index.tsx","../src/components/runSteps/RunStep/ToolCalls/ToolCall/CodeInterpreter/Content.tsx","../src/components/runSteps/RunStep/ToolCalls/ToolCall/FileSearch.tsx","../src/components/runSteps/RunStep/ToolCalls/ToolCall/Fallback.tsx","../src/components/runSteps/RunStep/ToolCalls/ToolCall/index.tsx","../src/components/runSteps/RunStep/ToolCalls/Starting/index.tsx","../src/components/runSteps/RunStep/index.tsx","../src/hooks/messages/useIsMutatingMessage/index.ts","../src/contexts/messages/MessageContext/index.ts","../src/components/threads/Thread/Message/Provider.tsx","../src/components/threads/Thread/Message/Attachments/index.tsx","../src/components/threads/Thread/Message/ContentPart/TextContent.tsx","../src/hooks/markdown/useMarkdownContext/index.ts","../src/contexts/markdown/MarkdownContext/index.ts","../src/contexts/markdown/MarkdownContext/lib/components/index.tsx","../src/contexts/markdown/MarkdownContext/lib/components/Paragraph.tsx","../src/contexts/markdown/MarkdownContext/lib/components/Link.tsx","../src/contexts/markdown/MarkdownContext/lib/components/UnorderedList.tsx","../src/contexts/markdown/MarkdownContext/lib/components/OrderedList.tsx","../src/contexts/markdown/MarkdownContext/lib/components/ListItem.tsx","../src/contexts/markdown/MarkdownContext/lib/components/Strong.tsx","../src/contexts/markdown/MarkdownContext/lib/components/Pre.tsx","../src/contexts/markdown/MarkdownContext/lib/components/Code.tsx","../src/components/suggestions/Suggestions/index.tsx","../src/hooks/messages/useLatestMessage/index.ts","../src/hooks/messages/useMessages/index.tsx","../src/lib/threads/queryOptions/index.ts","../src/lib/threads/queryOptions/variableParams.ts","../src/lib/messages/messagesQueryOptions.ts","../src/components/suggestions/Suggestions/Content.tsx","../src/components/suggestions/Suggestions/Item.tsx","../src/hooks/messages/useCreateMessage/index.ts","../src/hooks/messages/useCreateMessage/lib/mutationOptions/onMutate/index.ts","../src/hooks/messages/useCreateMessage/lib/mutationOptions/onMutate/data.ts","../src/lib/optimistic/optimisticId.ts","../src/hooks/messages/useCreateMessage/lib/mutationOptions/mutationFn/index.ts","../src/hooks/messages/useCreateMessage/lib/mutationOptions/mutationFn/handleResponse/handlers/threadCreated.ts","../src/lib/optimistic/isOptimistic.ts","../src/hooks/messages/useCreateMessage/lib/mutationOptions/mutationFn/handleResponse/handlers/extendMessage.ts","../src/hooks/messages/useCreateMessage/lib/mutationOptions/mutationFn/handleResponse/handlers/threadMessageCreated.ts","../src/hooks/messages/useCreateMessage/lib/mutationOptions/mutationFn/handleResponse/handlers/threadMessageDelta.ts","../src/hooks/messages/useCreateMessage/lib/mutationOptions/mutationFn/handleResponse/handlers/threadMessageCompleted.ts","../src/hooks/messages/useCreateMessage/lib/mutationOptions/mutationFn/handleResponse/handlers/threadRunCreated.ts","../src/hooks/messages/useCreateMessage/lib/mutationOptions/mutationFn/handleResponse/handlers/threadRunFailed.ts","../src/hooks/messages/useCreateMessage/lib/mutationOptions/mutationFn/handleResponse/handlers/threadRunStepCreated.ts","../src/hooks/messages/useCreateMessage/lib/mutationOptions/mutationFn/handleResponse/handlers/threadRunStepDelta.ts","../src/hooks/messages/useCreateMessage/lib/mutationOptions/mutationFn/handleResponse/handlers/threadRunStepCompleted.ts","../src/hooks/messages/useCreateMessage/lib/mutationOptions/mutationFn/handleResponse/handlers/threadRunRequiresAction.ts","../src/hooks/messages/useCreateMessage/lib/mutationOptions/mutationFn/handleResponse/handlers/index.ts","../src/hooks/messages/useCreateMessage/lib/mutationOptions/mutationFn/handleResponse/index.ts","../src/hooks/messages/useCreateMessage/lib/mutationOptions/mutationFn/body.ts","../src/hooks/messages/useCreateMessage/lib/mutationOptions/index.ts","../src/hooks/toasts/useToasts/index.ts","../src/contexts/toasts/ToastsContext/index.ts","../src/lib/errors/createMessageDefaultOnError.ts","../src/components/images/Image.tsx","../src/contexts/markdown/MarkdownContext/lib/components/Img/lib/isVideoSrc.ts","../src/contexts/markdown/MarkdownContext/lib/components/Img/lib/isAudioSrc.ts","../src/contexts/markdown/MarkdownContext/lib/components/Img/Video/index.tsx","../src/components/media/PlayButton.tsx","../src/components/media/VolumeButton.tsx","../src/components/media/Time.tsx","../src/components/media/MediaContainer.tsx","../src/contexts/markdown/MarkdownContext/lib/components/Img/Video/FullscreenButton.tsx","../src/contexts/markdown/MarkdownContext/lib/components/Img/Audio/index.tsx","../src/contexts/markdown/MarkdownContext/lib/components/Img/index.tsx","../src/contexts/markdown/MarkdownContext/lib/components/Annotation/index.tsx","../src/contexts/markdown/MarkdownContext/lib/components/Annotation/AnnotationBase.tsx","../src/contexts/markdown/MarkdownContext/lib/components/Annotation/FilePathAnnotation.tsx","../src/contexts/markdown/MarkdownContext/lib/getRemarkPlugins.ts","../src/lib/remark/remarkAnnotation.ts","../src/components/threads/Thread/Message/ContentPart/ImageFileContent.tsx","../src/components/threads/Thread/Message/ContentPart/index.tsx","../src/components/threads/Thread/Messages/Content/index.tsx","../src/hooks/messageGroups/useMessageGroups/index.ts","../src/hooks/messageGroups/useMessageGroups/lib/messageGroups/index.ts","../src/lib/messages/order.ts","../src/hooks/messageGroups/useMessageGroups/lib/messageGroups/newGroup/newGroupItem.ts","../src/hooks/messageGroups/useMessageGroups/lib/messageGroups/newGroup/index.ts","../src/components/skeletons/MessagesSkeleton/index.tsx","../src/components/messageGroups/MessageGroupBase/index.tsx","../src/components/messageGroups/MessageGroupBase/Name.tsx","../src/components/threads/Thread/Messages/Content/MessageGroup/index.tsx","../src/components/messageGroups/MessageGroupBase/AssistantAvatar.tsx","../src/contexts/assistants/AssistantAvatarContext/index.tsx","../src/contexts/assistants/AssistantNameContext/index.tsx","../src/components/messageGroups/MessageGroupBase/UserAvatar.tsx","../src/contexts/users/UserAvatarContext/index.tsx","../src/components/threads/Thread/Messages/Content/MessageGroup/Content/index.tsx","../src/components/threads/Thread/Messages/Progress/index.tsx","../src/components/skeletons/StartingSkeleton/index.tsx","../src/components/threads/Thread/Messages/Root/index.tsx","../src/hooks/misc/useInfiniteScroll/index.tsx","../src/hooks/misc/useThrottledEffect/index.tsx","../src/components/threads/Thread/Messages/NextPageSkeleton.tsx","../src/components/threads/Thread/MessageForm/Submit/index.tsx","../src/hooks/messages/useMessageFormContext/index.ts","../src/contexts/messages/MessageFormContext/index.ts","../src/components/threads/Thread/MessageForm/Root/index.tsx","../src/components/threads/Thread/MessageForm/Root/lib/formOptions.ts","../src/components/threads/Thread/MessageForm/Field/index.tsx","../src/components/threads/Thread/MessageForm/Field/Control.tsx","../src/hooks/misc/usePrevious.ts","../src/components/textareas/TextareaBase/index.tsx","../src/components/threads/Thread/MessageForm/Field/Files/Preview.tsx","../src/components/threads/Thread/MessageForm/Field/Files/Control.tsx","../src/hooks/files/useCreateFile/index.ts","../src/hooks/files/useCreateFile/lib/mutationOptions/mutationFn/body/formData.ts","../src/hooks/files/useCreateFile/lib/mutationOptions/mutationFn/body/index.ts","../src/hooks/files/useCreateFile/lib/mutationOptions/mutationFn/index.ts","../src/hooks/files/useCreateFile/lib/mutationOptions/index.ts","../src/components/threads/Thread/MessageForm/Field/Files/index.tsx","../src/components/threads/Thread/MessageForm/index.tsx","../src/components/threads/Thread/Root/index.tsx","../src/components/threads/Thread/Provider/index.tsx","../src/components/toasts/ToastsProvider/index.tsx","../src/components/toasts/ToastsProvider/CustomToast.tsx","../src/components/threads/Thread/index.tsx","../src/hooks/messages/useMessageContext/index.ts","../src/hooks/assistants/useAssistant/index.ts","../src/hooks/assistants/useAssistant/lib/queryOptions/index.ts","../src/hooks/assistants/useAssistant/lib/queryOptions/queryFn.ts","../src/components/threads/ThreadDialog/Provider/index.tsx","../src/contexts/threads/ThreadDialogContext/index.ts","../src/hooks/threads/useThreadDialogContext/index.ts","../src/components/threads/ThreadDialog/Root/index.tsx","../src/components/threads/ThreadDialog/Trigger/index.tsx","../src/components/threads/ThreadDialog/Trigger/Button.tsx","../src/components/threads/ThreadDialog/Content/index.tsx","../src/components/threads/ThreadDialog/Close/index.tsx","../src/components/threads/ThreadDialog/index.tsx","../src/components/threads/AudioThread/Root/index.tsx","../src/contexts/threads/AudioThreadContext/index.ts","../src/hooks/misc/usePermission/index.ts","../src/hooks/misc/usePermission/util.ts","../src/components/threads/AudioThread/Root/lib/blobToData.ts","../src/hooks/audioThreads/useStatus/index.ts","../src/hooks/audioThreads/useRecorder/index.ts","../src/hooks/misc/useInterval.ts","../src/hooks/audioThreads/useMessageAudio/index.ts","../src/hooks/audioThreads/useMessageAudio/lib/input.ts","../src/components/threads/AudioThread/Visualization/index.tsx","../src/hooks/threads/useAudioThreadContext/index.ts","../src/components/threads/AudioThread/BarsVisualizer/index.tsx","../src/components/threads/AudioThread/Status/StatusMessages.tsx","../src/components/threads/AudioThread/Status/index.tsx","../src/components/threads/AudioThread/Form/index.tsx","../src/components/threads/AudioThread/Form/MicIcon.tsx","../src/components/threads/AudioThread/Form/ActionButton/index.tsx","../src/components/threads/AudioThread/index.tsx","../src/components/threads/AudioThreadDialog/index.tsx","../src/components/markdown/MarkdownProvider/index.tsx","../src/components/avatars/Avatar.tsx","../src/components/imageAvatars/ImageAvatar/index.tsx","../src/components/imageAvatars/ImageAvatar/lib/optimizedSrc/path.ts","../src/components/imageAvatars/ImageAvatar/lib/optimizedSrc/host.ts","../src/components/imageAvatars/ImageAvatar/lib/optimizedSrc/index.ts","../src/components/iconAvatars/IconAvatar.tsx","../src/lib/iconAvatars/iconAvatarComponents.ts","../src/components/components/ComponentsProvider.tsx","../src/hooks/components/useComponents.ts","../src/components/assistants/AssistantProvider/index.tsx"],"names":["_","detect","useRef","customizer","objectValue","srcValue","isArray","merge","obj","sources","mergeWith","cloneDeep","createContext","baseUrl","Cookies","key","assistantId","get","set","threadId","remove","cookieOptions","window","localStorage","getItem","setItem","removeItem","localStorageOptions","isIframe","self","top","SuperinterfaceContext","variables","defaultOptions","queries","mutations","threadIdStorageOptions","createMessageAbortControllerRef","current","useContext","useSuperinterfaceContext","jsx","SuperinterfaceProvider","children","superinterfaceContext","value","Provider","Flex","useMemo","isEmpty","Box","Skeleton","StartingContentSkeleton","loading","mt","height","width","style","borderRadius","flexShrink","FunctionComponentsContext","Popover","Button","ToolCallBase","py","ml","size","color","variant","boxShadow","Text","ToolCallTitle","weight","CircleIcon","CircleBackslashIcon","CheckCircledIcon","ToolCallIcon","runStep","completed_at","cancelled_at","failed_at","status","Code","formattedJsonOrRaw","JSON","stringify","parse","error","jsxs","Content","fn","args","arguments","output","whiteSpace","wordBreak","FunctionBase","title","Root","Trigger","maxHeight","name","DefaultFunction","Fn","functionComponentsContext","Component","codeInterpreter","input","outputs","CodeInterpreter","FileSearch","toolCall","Fallback","type","ToolCall","function","code_interpreter","Starting","className","direction","ToolCalls","stepDetails","tool_calls","length","map","id","RunStep","step_details","ComponentsContext","components","RunSteps","runSteps","componentsContext","useIsMutating","useIsMutatingMessage","threadContext","mutatingMessagesCount","mutationKey","isMutatingMessage","MessageContext","message","Badge","FileIcon","Attachments","attachments","align","pb","Markdown","Heading","Table","Paragraph","Link","RadixLink","href","download","target","UnorderedList","asChild","listStylePosition","OrderedList","ListItem","Strong","RadixStrong","Pre","RadixCode","useInfiniteQuery","useQueryClient","infiniteQueryOptions","variableParams","queryOptions","queryKeyBase","path","queryClient","queryKey","queryFn","pageParam","_key","params","URLSearchParams","fetch","then","response","errorResponse","json","Error","initialPageParam","getNextPageParam","lastPage","hasNextPage","lastId","limit","getQueryDefaults","messagesQueryOptions","messages","props","data","pages","reduce","acc","page","concat","useMessages","useLatestMessage","latestMessage","onlyText","ArrowUpIcon","Spinner","partob","useMutation","omit","dayjs","uid","optimisticId","newMessage","prevData","role","created_at","unix","object","content","text","annotations","run_id","assistant_id","thread_id","metadata","pageParams","latestPage","pagesRest","onMutate","prevMessages","cancelQueries","getQueryData","setQueryData","JSONParser","threadCreated","isOptimistic","startsWith","last","extendMessage","prevRunMessages","filter","m","prevOptimitisticRunMessages","appendMessage","threadMessageCreated","messagesQueryKey","updatedContentPart","prevContentPart","delta","updatedContent","result","forEach","index","threadMessageDelta","messagesRest","replace","threadMessageCompleted","threadRunCreated","threadRunFailed","threadRunStepCreated","updatedToolCall","Object","entries","updatedRunStep","newToolCalls","threadRunStepDelta","rs","threadRunStepCompleted","threadRunRequiresAction","toolCalls","toolOutputs","required_action","submit_client_tool_outputs","parsedArgs","toolCallId","method","headers","body","handlers","handleResponse","handler","event","console","log","mutationFn","abortController","parser","reader","done","AbortController","signal","stringBufferSize","paths","separator","pipeThrough","getReader","read","mutationOptions","onError","getMutationDefaults","useCreateMessage","createMessage","mutateAsync","ToastsContext","toasts","addToast","useToasts","createMessageDefaultOnError","invalidateQueries","Item","suggestion","isDisabled","isPending","onClick","disabled","minHeight","suggestions","split","c","trim","gap","wrap","Suggestions","latestMessageProps","isBlocking","isLoading","Image","maxWidth","videoExtensions","isVideoSrc","src","includes","pop","isAudioSrc","endsWith","MediaPlayer","MediaProvider","Controls","PlayButton","VidstackPlayButton","useMediaState","IconButton","PlayIcon","PauseIcon","isPaused","MuteButton","useMediaRemote","HoverCard","Slider","SpeakerModerateIcon","SpeakerOffIcon","VolumeButton","volume","isMuted","remote","side","orientation","onValueChange","changeVolume","useState","useEffect","Time","time","duration","seeking","canSeek","setValue","step","Number","isFinite","onValueCommit","seek","Card","Inset","MediaContainer","mb","clip","display","flexDirection","FullscreenButton","VidstackFullscreenButton","EnterFullScreenIcon","ExitFullScreenIcon","isFullscreen","Video","playsInline","hideControlsOnMouseLeave","crossOrigin","position","bottom","left","right","p","zIndex","background","flexGrow","Group","Audio","viewType","Img","QuoteIcon","AnnotationBase","icon","FilePathAnnotation","annotation","nextSearchParams","file_path","file_id","Annotation","Fragment","a","strong","ul","ol","li","pre","code","img","h1","as","h2","h3","h4","h5","h6","table","thead","Header","tbody","Body","tr","Row","td","Cell","th","ColumnHeaderCell","remarkGfm","isNumber","flatMap","sortedAnnotations","sort","b","start_index","remarkAnnotation","tree","node","processNodeWithAnnotations","processTextNode","linkNode","childNode","nodeStart","start","offset","nodeEnd","end","newNodes","lastIndex","annotationStart","annotationEnd","end_index","Math","max","min","push","createTextNode","startOffset","endOffset","createAnnotationNode","valueStart","valueEnd","slice","hName","hProperties","getRemarkPlugins","MarkdownContext","useMarkdownContext","TextContent","rest","remarkPlugins","ImageFileContent","alt","image_file","ContentPart","Message","messageCreationRunStepIndex","findIndex","message_creation","message_id","nextRunStepIndex","findLastIndex","laterRunSteps","prevRunStepIndex","olderRunSteps","isInProgress","some","order","newGroupItem","createdAt","newGroup","groups","messageGroups","group","dropRight","useMessageGroups","forwardRef","Avatar","Container","MessageGroupBase","ref","Name","MessagesSkeleton","_props","fallback","marginTop","LightningBoltIcon","AssistantAvatarContext","AssistantAvatar","AssistantAvatarContextValue","overflow","AssistantNameContext","PersonIcon","UserAvatarContext","UserAvatar","UserAvatarContextValue","messageGroup","MessageGroup","assistantNameContext","isLoadingError","StartingSkeleton","Progress","isVisible","useInView","useCallback","useThrottledEffect","cb","delay","additionalDeps","cbRef","throttledCb","throttle","leading","trailing","useInfiniteScroll","isFetchingNextPage","fetchNextPage","containerRef","root","rootMargin","threshold","loaderRef","inView","NextPageSkeleton","Messages","StopIcon","MessageFormContext","files","setFiles","isFileLoading","useMessageFormContext","abort","Submit","useForm","FormProvider","z","zodResolver","schema","string","formOptions","resolver","onSubmit","onSubmitArg","isDisabledArg","formProps","handleSubmit","formState","isSubmitting","reset","watch","file","tools","useFormContext","RadixContainer","usePrevious","state","TextareaAutosize","TextareaBase","border","outline","boxSizing","resize","pt","Input","register","isSubmitDisabled","isDisabledPrevious","textareaRef","textareaProps","focus","minRows","placeholder","onKeyDown","e","shiftKey","preventDefault","currentTarget","form","requestSubmit","Control","Cross2Icon","Preview","flexBasis","justify","minWidth","truncate","filename","prev","prevFile","FilePlusIcon","formData","FormData","append","useCreateFile","createFile","firstArg","restArgs","accept","onChange","fileObjects","newFiles","Array","from","fileObject","purpose","bytes","newFile","onSuccess","pr","multiple","cursor","opacity","Files","errors","borderWidth","borderStyle","borderColor","backgroundColor","pl","Field","MessageForm","Toast","CrossCircledIcon","CustomToast","toast","Title","ToastsProvider","setToasts","prevToasts","Toast2","Viewport","padding","margin","listStyle","Thread","useMessageContext","useQuery","tanstackQueryOptions","publicApiKey","useAssistant","assistant","ThreadDialogContext","isOpen","setIsOpen","useThreadDialogContext","threadDialogContext","ChatBubbleIcon","radius","initial","sm","Cross1Icon","Close","paddingTop","paddingRight","paddingLeft","FormContainer","ThreadDialog","AudioThreadContext","recorderProps","stop","pause","resume","visualizationAnalyser","messageAudioProps","playing","paused","isReady","play","noop","on","addEventListener","off","removeEventListener","usePermission","permissionDesc","setState","mounted","permissionStatus","navigator","permissions","query","catch","blobToData","blob","Promise","resolve","FileReader","onloadend","readAsDataURL","useStatus","createMessageProps","isAudioPlayed","useAudioCapture","useAudioPlayer","useInterval","callback","savedCallback","interval","setInterval","clearInterval","useRecorder","isStopOnSilence","onStart","onStop","silenceStart","setSilenceStart","noiseStart","setNoiseStart","mediaStream","setMediaStream","setStatus","startAudioPlayer","endAudioPlayer","isLoaded","setIsLoaded","audioCaptureProps","opts","isInited","onPause","onResume","audioEngine","setAudioEngine","audioContext","AudioContext","source","createMediaStreamSource","createAnalyser","connect","silenceAnalyser","minDecibels","handleSilence","frequencyData","Uint8Array","frequencyBinCount","getByteFrequencyData","isSilent","every","f","requestAnimationFrame","isBefore","subtract","nlp","Howler","textContents","join","unsupportedNames","isHtmlAudioSupported","FULL_SENTENCE_REGEX","getMessageSentences","messageId","sentences","sentence","useMessageAudio","onEnd","setIsAudioPlayed","stoppedMessageIds","setStoppedMessageIds","playedMessageSentences","setPlayedMessageSentences","audioPlayer","nextAudioPlayer","isPlaying","setIsPlaying","unplayedMessageSentences","messageSentences","ms","find","pms","firstUnplayedMessageSentence","isFullSentence","test","searchParams","load","format","autoplay","html5","onplay","onstop","onload","nextUnplayedMessageSentence","isNextFullSentence","onend","_howls","_sounds","_node","isAudioEngineInited","createMediaElementSource","masterGain","ctx","destination","_event","chunks","audioContent","Blob","microphonePermission","useAudioThreadContext","Grid","cluster","barCount","BarsVisualizer","barWidth","barHeights","setBarHeights","draw","fill","clusteredFrequencyData","frequencyDataCluster","mean","columns","gridTemplateColumns","barHeight","Visualization","audioThreadContext","scale","setScale","html","texts","i","StatusMessages","dangerouslySetInnerHTML","__html","Status","MicIcon","xmlns","stroke","strokeWidth","viewBox","d","ResumeIcon","ActionButton","mr","highContrast","Form","px","AudioThread","AudioThreadDialog","MarkdownProvider","prevMarkdownContext","RadixAvatar","imageAvatar","encodeURIComponent","url","host","URL","origin","optimizedSrc","ImageAvatar","BackpackIcon","RocketIcon","MagicWandIcon","CubeIcon","TargetIcon","DiscIcon","GlobeIcon","StarIcon","FaceIcon","HeartIcon","iconAvatarComponents","IconAvatar","iconAvatar","avatar","useComponents","ComponentsProvider","prevComponents","AssistantProvider","Avatar6","useThreadContext"],"mappings":"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","sourcesContent":["// src/components/core/SuperinterfaceProvider/index.tsx\nimport { useRef } from \"react\";\n\n// src/lib/misc/merge/index.ts\nimport _2 from \"lodash\";\n\n// src/lib/misc/merge/customizer.ts\nimport _ from \"lodash\";\nvar customizer = (objectValue, srcValue) => {\n if (!_.isArray(objectValue)) return;\n return srcValue;\n};\n\n// src/lib/misc/merge/index.ts\nvar merge = (obj, ...sources) => _2.mergeWith(_2.cloneDeep(obj), ...sources, customizer);\n\n// src/contexts/core/SuperinterfaceContext/index.tsx\nimport { createContext } from \"react\";\n\n// src/lib/superinterfaceCloud/baseUrl.ts\nvar baseUrl = \"https://superinterface.ai/api/cloud\";\n\n// src/lib/threadIdStorage/cookieOptions/get.ts\nimport Cookies from \"js-cookie\";\n\n// src/lib/threadIdStorage/key.ts\nvar key = ({\n assistantId\n}) => `superinterface-${assistantId}-threadId`;\n\n// src/lib/threadIdStorage/cookieOptions/get.ts\nvar get = ({\n assistantId\n}) => Cookies.get(key({ assistantId })) ?? null;\n\n// src/lib/threadIdStorage/cookieOptions/set.ts\nimport Cookies2 from \"js-cookie\";\nvar set = ({\n assistantId,\n threadId\n}) => Cookies2.set(key({ assistantId }), threadId);\n\n// src/lib/threadIdStorage/cookieOptions/remove.ts\nimport Cookies3 from \"js-cookie\";\nvar remove = ({\n assistantId\n}) => Cookies3.remove(key({ assistantId }));\n\n// src/lib/threadIdStorage/cookieOptions/index.ts\nvar cookieOptions = {\n get,\n set,\n remove\n};\n\n// src/lib/threadIdStorage/localStorageOptions/get.ts\nvar get2 = ({\n assistantId\n}) => window.localStorage.getItem(key({ assistantId }));\n\n// src/lib/threadIdStorage/localStorageOptions/set.ts\nvar set2 = ({\n assistantId,\n threadId\n}) => window.localStorage.setItem(key({ assistantId }), threadId);\n\n// src/lib/threadIdStorage/localStorageOptions/remove.ts\nvar remove2 = ({\n assistantId\n}) => window.localStorage.removeItem(key({ assistantId }));\n\n// src/lib/threadIdStorage/localStorageOptions/index.ts\nvar localStorageOptions = {\n get: get2,\n set: set2,\n remove: remove2\n};\n\n// src/lib/iframes/isIframe.ts\nvar isIframe = () => {\n if (typeof window === \"undefined\") return false;\n return window.self !== window.top;\n};\n\n// src/contexts/core/SuperinterfaceContext/index.tsx\nvar SuperinterfaceContext = createContext({\n baseUrl,\n variables: {},\n defaultOptions: {\n queries: {},\n mutations: {}\n },\n threadIdStorageOptions: isIframe() ? localStorageOptions : cookieOptions,\n createMessageAbortControllerRef: { current: null }\n});\n\n// src/hooks/core/useSuperinterfaceContext/index.ts\nimport { useContext } from \"react\";\nvar useSuperinterfaceContext = () => useContext(SuperinterfaceContext);\n\n// src/components/core/SuperinterfaceProvider/index.tsx\nimport { jsx } from \"react/jsx-runtime\";\nvar SuperinterfaceProvider = ({\n children,\n baseUrl: baseUrl2,\n variables,\n defaultOptions,\n threadIdStorageOptions\n}) => {\n const superinterfaceContext = useSuperinterfaceContext();\n const createMessageAbortControllerRef = useRef(null);\n const value = merge(\n superinterfaceContext,\n {\n ...baseUrl2 ? { baseUrl: baseUrl2 } : {},\n ...variables ? { variables } : {},\n ...defaultOptions ? { defaultOptions } : {},\n ...threadIdStorageOptions ? { threadIdStorageOptions } : {},\n createMessageAbortControllerRef\n }\n );\n return /* @__PURE__ */ jsx(\n SuperinterfaceContext.Provider,\n {\n value,\n children\n }\n );\n};\n\n// src/components/threads/Thread/Messages/index.tsx\nimport {\n Flex as Flex18\n} from \"@radix-ui/themes\";\n\n// src/components/threads/Thread/Message/index.tsx\nimport { useMemo as useMemo8 } from \"react\";\nimport { isEmpty as isEmpty2 } from \"radash\";\nimport {\n Box as Box9\n} from \"@radix-ui/themes\";\n\n// src/components/skeletons/StartingContentSkeleton/index.tsx\nimport {\n Skeleton\n} from \"@radix-ui/themes\";\nimport { jsx as jsx2 } from \"react/jsx-runtime\";\nvar StartingContentSkeleton = () => /* @__PURE__ */ jsx2(\n Skeleton,\n {\n loading: true,\n mt: \"1\",\n height: \"var(--space-4)\",\n width: \"var(--space-4)\",\n style: {\n borderRadius: \"var(--radius-6)\",\n flexShrink: 0\n }\n }\n);\n\n// src/components/runSteps/RunSteps/index.tsx\nimport { Flex as Flex5 } from \"@radix-ui/themes\";\nimport { useContext as useContext3 } from \"react\";\n\n// src/contexts/components/ComponentsContext/index.tsx\nimport { createContext as createContext3 } from \"react\";\n\n// src/components/runSteps/RunStep/ToolCalls/index.tsx\nimport {\n Flex as Flex4\n} from \"@radix-ui/themes\";\n\n// src/components/runSteps/RunStep/ToolCalls/ToolCall/Fn/index.tsx\nimport { useContext as useContext2 } from \"react\";\n\n// src/contexts/functions/FunctionComponentsContext/index.tsx\nimport { createContext as createContext2 } from \"react\";\nvar FunctionComponentsContext = createContext2({});\n\n// src/components/functions/FunctionBase/index.tsx\nimport {\n Popover,\n Flex as Flex2\n} from \"@radix-ui/themes\";\n\n// src/components/toolCalls/ToolCallBase/index.tsx\nimport {\n Flex,\n Button\n} from \"@radix-ui/themes\";\nimport { jsx as jsx3 } from \"react/jsx-runtime\";\nvar ToolCallBase = ({\n children\n}) => /* @__PURE__ */ jsx3(\n Flex,\n {\n py: \"1\",\n ml: \"-2\",\n children: /* @__PURE__ */ jsx3(\n Button,\n {\n size: \"1\",\n color: \"gold\",\n variant: \"outline\",\n style: {\n boxShadow: \"none\"\n },\n children\n }\n )\n }\n);\n\n// src/components/toolCalls/ToolCallBase/ToolCallTitle.tsx\nimport {\n Text\n} from \"@radix-ui/themes\";\nimport { jsx as jsx4 } from \"react/jsx-runtime\";\nvar ToolCallTitle = ({\n children\n}) => /* @__PURE__ */ jsx4(\n Text,\n {\n weight: \"regular\",\n children\n }\n);\n\n// src/components/toolCalls/ToolCallBase/ToolCallIcon.tsx\nimport {\n CircleIcon,\n CircleBackslashIcon,\n CheckCircledIcon\n} from \"@radix-ui/react-icons\";\nimport { jsx as jsx5 } from \"react/jsx-runtime\";\nvar ToolCallIcon = ({\n runStep\n}) => {\n if (runStep.completed_at) {\n return /* @__PURE__ */ jsx5(CheckCircledIcon, {});\n } else if (runStep.cancelled_at || runStep.failed_at || runStep.status === \"expired\") {\n return /* @__PURE__ */ jsx5(CircleBackslashIcon, {});\n } else {\n return /* @__PURE__ */ jsx5(CircleIcon, {});\n }\n};\n\n// src/components/functions/FunctionBase/Content/index.tsx\nimport { useMemo } from \"react\";\nimport { Code, Box } from \"@radix-ui/themes\";\n\n// src/components/functions/FunctionBase/Content/lib/formattedJsonOrRaw.ts\nvar formattedJsonOrRaw = ({\n value\n}) => {\n if (!value) {\n return null;\n }\n try {\n return JSON.stringify(JSON.parse(value), null, 2);\n } catch (error) {\n if (typeof value === \"string\") {\n return value;\n } else {\n return JSON.stringify(value, null, 2);\n }\n }\n};\n\n// src/components/functions/FunctionBase/Content/index.tsx\nimport { jsx as jsx6, jsxs } from \"react/jsx-runtime\";\nvar Content = ({\n fn\n}) => {\n const args = useMemo(() => formattedJsonOrRaw({\n value: fn.arguments\n }), [fn]);\n const output = useMemo(() => formattedJsonOrRaw({\n value: fn.output\n }), [fn]);\n return /* @__PURE__ */ jsxs(\n Code,\n {\n variant: \"ghost\",\n color: \"gold\",\n style: {\n whiteSpace: \"pre\",\n wordBreak: \"break-word\"\n },\n children: [\n args && /* @__PURE__ */ jsx6(Box, { children: args }),\n output && /* @__PURE__ */ jsx6(Box, { children: output })\n ]\n }\n );\n};\n\n// src/components/functions/FunctionBase/index.tsx\nimport { jsx as jsx7, jsxs as jsxs2 } from \"react/jsx-runtime\";\nvar FunctionBase = ({\n fn,\n runStep,\n title: title2\n}) => /* @__PURE__ */ jsxs2(Popover.Root, { children: [\n /* @__PURE__ */ jsx7(Popover.Trigger, { children: /* @__PURE__ */ jsx7(Flex2, { children: /* @__PURE__ */ jsxs2(ToolCallBase, { children: [\n /* @__PURE__ */ jsx7(ToolCallIcon, { runStep }),\n /* @__PURE__ */ jsx7(ToolCallTitle, { children: title2 })\n ] }) }) }),\n /* @__PURE__ */ jsx7(\n Popover.Content,\n {\n style: {\n maxHeight: \"200px\"\n },\n children: /* @__PURE__ */ jsx7(Content, { fn })\n }\n )\n] });\n\n// src/components/runSteps/RunStep/ToolCalls/ToolCall/Fn/DefaultFunction/lib/title.ts\nvar title = ({\n fn,\n runStep\n}) => {\n if (runStep.completed_at) {\n return `Finished ${fn.name}`;\n } else if (runStep.cancelled_at) {\n return `Cancelled ${fn.name}`;\n } else {\n return `Calling ${fn.name}`;\n }\n};\n\n// src/components/runSteps/RunStep/ToolCalls/ToolCall/Fn/DefaultFunction/index.tsx\nimport { jsx as jsx8 } from \"react/jsx-runtime\";\nvar DefaultFunction = ({\n fn,\n runStep\n}) => /* @__PURE__ */ jsx8(\n FunctionBase,\n {\n fn,\n runStep,\n title: title({ runStep, fn })\n }\n);\n\n// src/components/runSteps/RunStep/ToolCalls/ToolCall/Fn/index.tsx\nimport { jsx as jsx9 } from \"react/jsx-runtime\";\nvar Fn = ({\n fn,\n runStep\n}) => {\n const functionComponentsContext = useContext2(FunctionComponentsContext);\n const Component = functionComponentsContext[fn.name] || DefaultFunction;\n return (\n // @ts-ignore-next-line\n /* @__PURE__ */ jsx9(\n Component,\n {\n fn,\n runStep\n }\n )\n );\n};\n\n// src/components/runSteps/RunStep/ToolCalls/ToolCall/CodeInterpreter/index.tsx\nimport {\n Popover as Popover2,\n Flex as Flex3\n} from \"@radix-ui/themes\";\n\n// src/components/runSteps/RunStep/ToolCalls/ToolCall/CodeInterpreter/Content.tsx\nimport { Code as Code2, Box as Box2 } from \"@radix-ui/themes\";\nimport { jsx as jsx10, jsxs as jsxs3 } from \"react/jsx-runtime\";\nvar Content2 = ({\n codeInterpreter\n}) => {\n if (!codeInterpreter.input) {\n return null;\n }\n return /* @__PURE__ */ jsxs3(\n Code2,\n {\n variant: \"ghost\",\n color: \"gold\",\n style: {\n whiteSpace: \"pre\",\n wordBreak: \"break-word\"\n },\n children: [\n /* @__PURE__ */ jsx10(Box2, { children: codeInterpreter.input }),\n /* @__PURE__ */ jsx10(Box2, { children: JSON.stringify(codeInterpreter.outputs) })\n ]\n }\n );\n};\n\n// src/components/runSteps/RunStep/ToolCalls/ToolCall/CodeInterpreter/index.tsx\nimport { jsx as jsx11, jsxs as jsxs4 } from \"react/jsx-runtime\";\nvar CodeInterpreter = ({\n codeInterpreter,\n runStep\n}) => /* @__PURE__ */ jsxs4(Popover2.Root, { children: [\n /* @__PURE__ */ jsx11(Popover2.Trigger, { children: /* @__PURE__ */ jsx11(Flex3, { children: /* @__PURE__ */ jsxs4(ToolCallBase, { children: [\n /* @__PURE__ */ jsx11(ToolCallIcon, { runStep }),\n /* @__PURE__ */ jsx11(ToolCallTitle, { children: \"Using code interpreter\" })\n ] }) }) }),\n /* @__PURE__ */ jsx11(\n Popover2.Content,\n {\n maxHeight: \"200px\",\n children: /* @__PURE__ */ jsx11(\n Content2,\n {\n codeInterpreter\n }\n )\n }\n )\n] });\n\n// src/components/runSteps/RunStep/ToolCalls/ToolCall/FileSearch.tsx\nimport { jsx as jsx12, jsxs as jsxs5 } from \"react/jsx-runtime\";\nvar FileSearch = ({\n runStep,\n toolCall\n}) => /* @__PURE__ */ jsxs5(ToolCallBase, { children: [\n /* @__PURE__ */ jsx12(ToolCallIcon, { runStep }),\n /* @__PURE__ */ jsx12(ToolCallTitle, { children: \"Searching files\" })\n] });\n\n// src/components/runSteps/RunStep/ToolCalls/ToolCall/Fallback.tsx\nimport { jsx as jsx13, jsxs as jsxs6 } from \"react/jsx-runtime\";\nvar Fallback = ({\n runStep,\n toolCall\n}) => /* @__PURE__ */ jsxs6(ToolCallBase, { children: [\n /* @__PURE__ */ jsx13(ToolCallIcon, { runStep }),\n /* @__PURE__ */ jsxs6(ToolCallTitle, { children: [\n \"Using tool: \",\n toolCall.type\n ] })\n] });\n\n// src/components/runSteps/RunStep/ToolCalls/ToolCall/index.tsx\nimport { jsx as jsx14 } from \"react/jsx-runtime\";\nvar ToolCall = ({\n toolCall,\n runStep\n}) => {\n if (toolCall.type === \"function\") {\n return /* @__PURE__ */ jsx14(\n Fn,\n {\n fn: toolCall.function,\n runStep\n }\n );\n }\n if (toolCall.type === \"code_interpreter\") {\n return /* @__PURE__ */ jsx14(\n CodeInterpreter,\n {\n codeInterpreter: toolCall.code_interpreter,\n runStep\n }\n );\n }\n if (toolCall.type === \"file_search\") {\n return /* @__PURE__ */ jsx14(\n FileSearch,\n {\n toolCall,\n runStep\n }\n );\n }\n return /* @__PURE__ */ jsx14(\n Fallback,\n {\n toolCall,\n runStep\n }\n );\n};\n\n// src/components/runSteps/RunStep/ToolCalls/Starting/index.tsx\nimport {\n Popover as Popover3,\n Text as Text2\n} from \"@radix-ui/themes\";\nimport {\n CircleIcon as CircleIcon2\n} from \"@radix-ui/react-icons\";\nimport { jsx as jsx15, jsxs as jsxs7 } from \"react/jsx-runtime\";\nvar Starting = () => /* @__PURE__ */ jsxs7(Popover3.Root, { children: [\n /* @__PURE__ */ jsxs7(ToolCallBase, { children: [\n /* @__PURE__ */ jsx15(CircleIcon2, {}),\n /* @__PURE__ */ jsx15(ToolCallTitle, { children: \"Starting actions\" })\n ] }),\n /* @__PURE__ */ jsx15(\n Popover3.Content,\n {\n style: {\n maxHeight: \"500px\"\n },\n children: /* @__PURE__ */ jsx15(Text2, { children: \"Getting ready to connect to domain API\" })\n }\n )\n] });\n\n// src/components/runSteps/RunStep/ToolCalls/index.tsx\nimport { jsx as jsx16, jsxs as jsxs8 } from \"react/jsx-runtime\";\nvar Root = ({\n children,\n className,\n style\n}) => /* @__PURE__ */ jsx16(\n Flex4,\n {\n direction: \"column\",\n className,\n style,\n children\n }\n);\nvar ToolCalls = ({\n stepDetails,\n runStep,\n className,\n style\n}) => /* @__PURE__ */ jsxs8(\n Root,\n {\n className,\n style,\n children: [\n !stepDetails.tool_calls.length && /* @__PURE__ */ jsx16(Starting, {}),\n stepDetails.tool_calls.map((toolCall) => /* @__PURE__ */ jsx16(\n ToolCall,\n {\n toolCall,\n runStep\n },\n toolCall.id\n ))\n ]\n }\n);\nToolCalls.Root = Root;\nToolCalls.Starting = Starting;\nToolCalls.ToolCall = ToolCall;\n\n// src/components/runSteps/RunStep/index.tsx\nimport { jsx as jsx17 } from \"react/jsx-runtime\";\nvar RunStep = ({\n runStep,\n className,\n style\n}) => {\n if (runStep.step_details.type === \"tool_calls\") {\n return /* @__PURE__ */ jsx17(\n ToolCalls,\n {\n className,\n style,\n stepDetails: runStep.step_details,\n runStep\n }\n );\n }\n return null;\n};\nRunStep.ToolCalls = ToolCalls;\n\n// src/contexts/components/ComponentsContext/index.tsx\nvar ComponentsContext = createContext3({\n components: {\n RunStep\n }\n});\n\n// src/components/runSteps/RunSteps/index.tsx\nimport { jsx as jsx18 } from \"react/jsx-runtime\";\nvar RunSteps = ({\n runSteps\n}) => {\n const componentsContext = useContext3(ComponentsContext);\n const Component = componentsContext.components.RunStep;\n return /* @__PURE__ */ jsx18(\n Flex5,\n {\n direction: \"column-reverse\",\n children: runSteps.map((runStep) => /* @__PURE__ */ jsx18(\n Component,\n {\n runStep\n },\n runStep.id\n ))\n }\n );\n};\n\n// src/hooks/messages/useIsMutatingMessage/index.ts\nimport { useMemo as useMemo2 } from \"react\";\nimport { useIsMutating } from \"@tanstack/react-query\";\nvar useIsMutatingMessage = () => {\n const threadContext = useSuperinterfaceContext();\n const mutatingMessagesCount = useIsMutating({\n mutationKey: [\"createMessage\", threadContext.variables]\n });\n const isMutatingMessage = useMemo2(() => mutatingMessagesCount > 0, [mutatingMessagesCount]);\n return isMutatingMessage;\n};\n\n// src/contexts/messages/MessageContext/index.ts\nimport { createContext as createContext4 } from \"react\";\nvar MessageContext = createContext4({\n message: null\n});\n\n// src/components/threads/Thread/Message/Provider.tsx\nvar Provider = MessageContext.Provider;\n\n// src/components/threads/Thread/Message/Attachments/index.tsx\nimport {\n Flex as Flex6,\n Badge\n} from \"@radix-ui/themes\";\nimport {\n FileIcon\n} from \"@radix-ui/react-icons\";\nimport { jsx as jsx19, jsxs as jsxs9 } from \"react/jsx-runtime\";\nvar Attachments = ({\n message\n}) => {\n if (!message.attachments?.length) return null;\n return /* @__PURE__ */ jsx19(\n Flex6,\n {\n align: \"start\",\n pb: \"1\",\n children: /* @__PURE__ */ jsxs9(\n Badge,\n {\n color: \"gray\",\n variant: \"surface\",\n children: [\n /* @__PURE__ */ jsx19(FileIcon, {}),\n message.attachments.length,\n \" file\",\n message.attachments.length > 1 ? \"s\" : \"\"\n ]\n }\n )\n }\n );\n};\n\n// src/components/threads/Thread/Message/ContentPart/TextContent.tsx\nimport Markdown from \"react-markdown\";\n\n// src/hooks/markdown/useMarkdownContext/index.ts\nimport { useContext as useContext5 } from \"react\";\n\n// src/contexts/markdown/MarkdownContext/index.ts\nimport { createContext as createContext6 } from \"react\";\n\n// src/contexts/markdown/MarkdownContext/lib/components/index.tsx\nimport { Heading, Table } from \"@radix-ui/themes\";\n\n// src/contexts/markdown/MarkdownContext/lib/components/Paragraph.tsx\nimport {\n Box as Box3,\n Text as Text3\n} from \"@radix-ui/themes\";\nimport { jsx as jsx20 } from \"react/jsx-runtime\";\nvar Paragraph = ({ children }) => /* @__PURE__ */ jsx20(\n Box3,\n {\n pb: \"3\",\n children: /* @__PURE__ */ jsx20(\n Text3,\n {\n size: \"3\",\n style: {\n whiteSpace: \"pre-line\",\n wordBreak: \"break-word\"\n },\n children\n }\n )\n }\n);\n\n// src/contexts/markdown/MarkdownContext/lib/components/Link.tsx\nimport {\n Link as RadixLink\n} from \"@radix-ui/themes\";\nimport { jsx as jsx21 } from \"react/jsx-runtime\";\nvar Link = ({\n children,\n href,\n download,\n target = \"_blank\"\n}) => /* @__PURE__ */ jsx21(\n RadixLink,\n {\n href,\n target,\n download,\n children\n }\n);\n\n// src/contexts/markdown/MarkdownContext/lib/components/UnorderedList.tsx\nimport {\n Box as Box4\n} from \"@radix-ui/themes\";\nimport { jsx as jsx22 } from \"react/jsx-runtime\";\nvar UnorderedList = ({ children }) => /* @__PURE__ */ jsx22(\n Box4,\n {\n pb: \"3\",\n asChild: true,\n children: /* @__PURE__ */ jsx22(\n \"ul\",\n {\n style: {\n listStylePosition: \"inside\"\n },\n children\n }\n )\n }\n);\n\n// src/contexts/markdown/MarkdownContext/lib/components/OrderedList.tsx\nimport {\n Box as Box5\n} from \"@radix-ui/themes\";\nimport { jsx as jsx23 } from \"react/jsx-runtime\";\nvar OrderedList = ({ children }) => /* @__PURE__ */ jsx23(\n Box5,\n {\n pb: \"3\",\n asChild: true,\n children: /* @__PURE__ */ jsx23(\n \"ol\",\n {\n style: {\n listStylePosition: \"inside\"\n },\n children\n }\n )\n }\n);\n\n// src/contexts/markdown/MarkdownContext/lib/components/ListItem.tsx\nimport {\n Box as Box6\n} from \"@radix-ui/themes\";\nimport { jsx as jsx24 } from \"react/jsx-runtime\";\nvar ListItem = ({ children }) => /* @__PURE__ */ jsx24(\n Box6,\n {\n pb: \"1\",\n children: /* @__PURE__ */ jsx24(\"li\", { children })\n }\n);\n\n// src/contexts/markdown/MarkdownContext/lib/components/Strong.tsx\nimport {\n Strong as RadixStrong\n} from \"@radix-ui/themes\";\nimport { jsx as jsx25 } from \"react/jsx-runtime\";\nvar Strong = ({ children }) => /* @__PURE__ */ jsx25(RadixStrong, { children });\n\n// src/contexts/markdown/MarkdownContext/lib/components/Pre.tsx\nimport {\n Box as Box7\n} from \"@radix-ui/themes\";\nimport { jsx as jsx26 } from \"react/jsx-runtime\";\nvar Pre = ({ children }) => /* @__PURE__ */ jsx26(\n Box7,\n {\n style: {\n whiteSpace: \"pre-wrap\",\n wordBreak: \"break-word\"\n },\n children\n }\n);\n\n// src/contexts/markdown/MarkdownContext/lib/components/Code.tsx\nimport {\n Code as RadixCode\n} from \"@radix-ui/themes\";\n\n// src/components/suggestions/Suggestions/index.tsx\nimport { useMemo as useMemo6 } from \"react\";\n\n// src/hooks/messages/useLatestMessage/index.ts\nimport { useMemo as useMemo4 } from \"react\";\n\n// src/hooks/messages/useMessages/index.tsx\nimport { useMemo as useMemo3 } from \"react\";\nimport {\n useInfiniteQuery,\n useQueryClient as useQueryClient2\n} from \"@tanstack/react-query\";\n\n// src/lib/threads/queryOptions/index.ts\nimport {\n infiniteQueryOptions\n} from \"@tanstack/react-query\";\n\n// src/lib/threads/queryOptions/variableParams.ts\nvar variableParams = ({\n variables,\n superinterfaceContext\n}) => {\n if (variables.threadId) return variables;\n if (!variables.assistantId) return variables;\n if (!superinterfaceContext.threadIdStorageOptions?.get) return variables;\n const threadId = superinterfaceContext.threadIdStorageOptions.get({ assistantId: variables.assistantId });\n if (!threadId) return variables;\n return {\n ...variables,\n threadId\n };\n};\n\n// src/lib/threads/queryOptions/index.ts\nvar queryOptions = ({\n queryKeyBase,\n path: path2,\n queryClient,\n threadContext,\n superinterfaceContext\n}) => {\n const queryKey = [...queryKeyBase, threadContext.variables];\n return infiniteQueryOptions({\n // @ts-ignore-next-line\n queryFn: async ({\n pageParam,\n queryKey: queryKey2\n }) => {\n const [_key, variables] = queryKey2;\n const params = new URLSearchParams({\n ...pageParam ? { pageParam } : {},\n ...variableParams({ variables, superinterfaceContext })\n });\n return fetch(`${superinterfaceContext.baseUrl}${path2}?${params}`).then(async (response) => {\n if (response.status !== 200) {\n try {\n const errorResponse = await response.json();\n throw new Error(errorResponse.error);\n } catch (error) {\n throw new Error(\"Failed to fetch\");\n }\n }\n return response.json();\n });\n },\n initialPageParam: void 0,\n getNextPageParam: (lastPage) => {\n if (!lastPage.hasNextPage) return null;\n return lastPage.lastId;\n },\n limit: 10,\n ...threadContext.defaultOptions.queries,\n ...queryClient.getQueryDefaults(queryKey),\n queryKey\n });\n};\n\n// src/lib/messages/messagesQueryOptions.ts\nvar messagesQueryOptions = ({\n queryClient,\n threadContext,\n superinterfaceContext\n}) => queryOptions({\n queryKeyBase: [\"messages\"],\n path: \"/messages\",\n queryClient,\n threadContext,\n superinterfaceContext\n});\n\n// src/hooks/messages/useMessages/index.tsx\nvar messages = ({\n props\n}) => {\n if (!props.data) return [];\n return props.data.pages.reduce((acc, page) => acc.concat(page.data), []);\n};\nvar useMessages = () => {\n const queryClient = useQueryClient2();\n const threadContext = useSuperinterfaceContext();\n const superinterfaceContext = useSuperinterfaceContext();\n const props = useInfiniteQuery(messagesQueryOptions({\n queryClient,\n threadContext,\n superinterfaceContext\n }));\n return useMemo3(() => ({\n ...props,\n // @ts-ignore-next-line\n messages: messages({ props })\n }), [props]);\n};\n\n// src/hooks/messages/useLatestMessage/index.ts\nvar useLatestMessage = () => {\n const props = useMessages();\n return useMemo4(() => ({\n ...props,\n latestMessage: props.messages[0] || null\n }), [props]);\n};\n\n// src/components/suggestions/Suggestions/Content.tsx\nimport { useMemo as useMemo5 } from \"react\";\nimport { isEmpty } from \"radash\";\nimport { onlyText } from \"react-children-utilities\";\nimport {\n Flex as Flex7\n} from \"@radix-ui/themes\";\n\n// src/components/suggestions/Suggestions/Item.tsx\nimport {\n ArrowUpIcon\n} from \"@radix-ui/react-icons\";\nimport {\n Text as Text4,\n Button as Button2,\n Spinner\n} from \"@radix-ui/themes\";\n\n// src/hooks/messages/useCreateMessage/index.ts\nimport { partob } from \"radash\";\nimport {\n useMutation,\n useQueryClient as useQueryClient3\n} from \"@tanstack/react-query\";\n\n// src/hooks/messages/useCreateMessage/lib/mutationOptions/onMutate/index.ts\nimport { omit } from \"radash\";\n\n// src/hooks/messages/useCreateMessage/lib/mutationOptions/onMutate/data.ts\nimport dayjs from \"dayjs\";\n\n// src/lib/optimistic/optimisticId.ts\nimport { uid } from \"radash\";\nvar optimisticId = () => `-${uid(24)}`;\n\n// src/hooks/messages/useCreateMessage/lib/mutationOptions/onMutate/data.ts\nvar data = ({\n newMessage\n}) => (prevData) => {\n const message = {\n id: optimisticId(),\n role: \"user\",\n created_at: dayjs().unix(),\n object: \"thread.message\",\n content: [\n {\n type: \"text\",\n text: {\n annotations: [],\n value: newMessage.content\n }\n }\n ],\n run_id: null,\n assistant_id: null,\n thread_id: null,\n attachments: newMessage.attachments ?? [],\n metadata: {},\n runSteps: []\n };\n if (!prevData) {\n return {\n pageParams: [],\n pages: [\n {\n data: [message],\n hasNextPage: false,\n lastId: message.id\n }\n ]\n };\n }\n const [latestPage, ...pagesRest] = prevData.pages;\n return {\n ...prevData,\n pages: [\n {\n ...latestPage,\n data: [\n message,\n ...latestPage.data\n ]\n },\n ...pagesRest\n ]\n };\n};\n\n// src/hooks/messages/useCreateMessage/lib/mutationOptions/onMutate/index.ts\nvar onMutate = ({\n queryClient\n}) => async (newMessage) => {\n const queryKey = [\"messages\", omit(newMessage, [\"content\", \"attachments\"])];\n await queryClient.cancelQueries({ queryKey });\n const prevMessages = queryClient.getQueryData(queryKey);\n queryClient.setQueryData(\n queryKey,\n data({ newMessage })\n );\n return {\n prevMessages,\n newMessage\n };\n};\n\n// src/hooks/messages/useCreateMessage/lib/mutationOptions/mutationFn/index.ts\nimport { JSONParser } from \"@streamparser/json-whatwg\";\n\n// src/hooks/messages/useCreateMessage/lib/mutationOptions/mutationFn/handleResponse/handlers/threadCreated.ts\nvar threadCreated = ({\n value,\n superinterfaceContext\n}) => {\n if (!superinterfaceContext.threadIdStorageOptions?.set) return;\n if (!value.data.metadata?.assistantId) return;\n if (!value.data.metadata?.threadId) return;\n superinterfaceContext.threadIdStorageOptions.set({\n // @ts-ignore-next-line\n assistantId: value.data.metadata.assistantId,\n // @ts-ignore-next-line\n threadId: value.data.metadata.threadId\n });\n};\n\n// src/lib/optimistic/isOptimistic.ts\nimport _3 from \"lodash\";\nvar isOptimistic = ({\n id\n}) => _3.startsWith(id, \"-\");\n\n// src/hooks/messages/useCreateMessage/lib/mutationOptions/mutationFn/handleResponse/handlers/extendMessage.ts\nimport { last } from \"radash\";\nvar extendMessage = ({\n message,\n messages: messages2\n}) => {\n const prevRunMessages = messages2.filter((m) => m.run_id === message.run_id);\n const prevOptimitisticRunMessages = prevRunMessages.filter((m) => isOptimistic({ id: m.id }));\n const runSteps = last(prevOptimitisticRunMessages)?.runSteps ?? last(prevRunMessages)?.runSteps ?? [];\n return {\n ...message,\n runSteps\n };\n};\n\n// src/hooks/messages/useCreateMessage/lib/mutationOptions/mutationFn/handleResponse/handlers/threadMessageCreated.ts\nvar appendMessage = ({\n message,\n messages: messages2\n}) => {\n const prevMessages = messages2.filter((m) => m.run_id != message.run_id || !isOptimistic({ id: m.id }));\n return [\n extendMessage({ message, messages: messages2 }),\n ...prevMessages\n ];\n};\nvar threadMessageCreated = ({\n value,\n messagesQueryKey,\n queryClient\n}) => queryClient.setQueryData(\n messagesQueryKey,\n (prevData) => {\n if (!prevData) {\n return {\n pageParams: [],\n pages: [\n {\n data: appendMessage({ message: value.data, messages: [] }),\n hasNextPage: false,\n lastId: value.data.id\n }\n ]\n };\n }\n const [latestPage, ...pagesRest] = prevData.pages;\n return {\n ...prevData,\n pages: [\n {\n ...latestPage,\n data: appendMessage({ message: value.data, messages: latestPage.data })\n },\n ...pagesRest\n ]\n };\n }\n);\n\n// src/hooks/messages/useCreateMessage/lib/mutationOptions/mutationFn/handleResponse/handlers/threadMessageDelta.ts\nimport _4 from \"lodash\";\nimport { omit as omit2 } from \"radash\";\nvar updatedContentPart = ({\n prevContentPart,\n delta\n}) => {\n if (!prevContentPart) {\n return omit2(delta, [\"index\"]);\n }\n if (delta.type === \"text\" && delta.text && prevContentPart.type == \"text\" && prevContentPart.text) {\n return {\n ...prevContentPart,\n text: {\n ...prevContentPart.text,\n value: `${prevContentPart.text.value}${delta.text.value}`,\n annotations: [\n ...prevContentPart.text.annotations ?? [],\n ...delta.text.annotations ?? []\n ]\n }\n };\n }\n return prevContentPart;\n};\nvar updatedContent = ({\n content,\n value\n}) => {\n if (!value.data.delta.content) return content;\n const result = _4.cloneDeep(content);\n value.data.delta.content.forEach((delta) => {\n result[delta.index] = updatedContentPart({\n // @ts-ignore-next-line\n prevContentPart: result[delta.index],\n delta\n });\n });\n return result;\n};\nvar threadMessageDelta = ({\n value,\n queryClient,\n messagesQueryKey\n}) => queryClient.setQueryData(\n messagesQueryKey,\n (prevData) => {\n if (!prevData) {\n return {\n pageParams: [],\n pages: [\n {\n data: [],\n hasNextPage: false,\n lastId: null\n }\n ]\n };\n }\n const [latestPage, ...pagesRest] = prevData.pages;\n const [latestMessage, ...messagesRest] = latestPage.data;\n return {\n ...prevData,\n pages: [\n {\n ...latestPage,\n data: [\n {\n ...latestMessage,\n content: updatedContent({ content: latestMessage.content, value })\n },\n ...messagesRest\n ]\n },\n ...pagesRest\n ]\n };\n }\n);\n\n// src/hooks/messages/useCreateMessage/lib/mutationOptions/mutationFn/handleResponse/handlers/threadMessageCompleted.ts\nimport { replace } from \"radash\";\nvar threadMessageCompleted = ({\n value,\n queryClient,\n messagesQueryKey\n}) => queryClient.setQueryData(\n messagesQueryKey,\n (prevData) => {\n if (!prevData) {\n return {\n pageParams: [],\n pages: [\n {\n data: [],\n hasNextPage: false,\n lastId: null\n }\n ]\n };\n }\n const [latestPage, ...pagesRest] = prevData.pages;\n return {\n ...prevData,\n pages: [\n {\n ...latestPage,\n data: replace(latestPage.data, extendMessage({ message: value.data, messages: latestPage.data }), (m) => m.id === value.data.id)\n },\n ...pagesRest\n ]\n };\n }\n);\n\n// src/hooks/messages/useCreateMessage/lib/mutationOptions/mutationFn/handleResponse/handlers/threadRunCreated.ts\nvar threadRunCreated = ({\n value,\n queryClient,\n messagesQueryKey\n}) => queryClient.setQueryData(\n messagesQueryKey,\n (prevData) => {\n if (!prevData) return prevData;\n const [latestPage, ...pagesRest] = prevData.pages;\n return {\n ...prevData,\n pages: [\n {\n ...latestPage,\n data: [\n {\n id: optimisticId(),\n assistant_id: value.data.assistant_id,\n content: [],\n created_at: value.data.created_at,\n attachments: [],\n metadata: {},\n status: \"in_progress\",\n role: \"assistant\",\n runSteps: [],\n run_id: value.data.id,\n thread_id: value.data.thread_id\n },\n ...latestPage.data\n ]\n },\n ...pagesRest\n ]\n };\n }\n);\n\n// src/hooks/messages/useCreateMessage/lib/mutationOptions/mutationFn/handleResponse/handlers/threadRunFailed.ts\nvar threadRunFailed = ({\n value,\n queryClient,\n messagesQueryKey\n}) => {\n throw new Error(\"Failed to send your message, try again. If you are the owner, check the logs.\");\n};\n\n// src/hooks/messages/useCreateMessage/lib/mutationOptions/mutationFn/handleResponse/handlers/threadRunStepCreated.ts\nvar threadRunStepCreated = ({\n value,\n queryClient,\n messagesQueryKey\n}) => queryClient.setQueryData(\n messagesQueryKey,\n (prevData) => {\n if (!prevData) return prevData;\n const [latestPage, ...pagesRest] = prevData.pages;\n return {\n ...prevData,\n pages: [\n {\n ...latestPage,\n data: latestPage.data.map((m) => {\n if (m.run_id === value.data.run_id) {\n return {\n ...m,\n runSteps: [\n value.data,\n ...m.runSteps\n ]\n };\n }\n return m;\n })\n },\n ...pagesRest\n ]\n };\n }\n);\n\n// src/hooks/messages/useCreateMessage/lib/mutationOptions/mutationFn/handleResponse/handlers/threadRunStepDelta.ts\nimport _5 from \"lodash\";\nimport { omit as omit3 } from \"radash\";\nvar updatedToolCall = ({\n toolCall,\n delta\n}) => {\n if (!toolCall) {\n return omit3(delta, [\"index\"]);\n }\n if (delta.type === \"function\" && delta.function && toolCall.type === \"function\" && toolCall.function) {\n const result = _5.cloneDeep(toolCall);\n for (const [key2, value] of Object.entries(delta.function)) {\n result.function[key2] = `${result.function[key2] ?? \"\"}${value}`;\n }\n return result;\n }\n return toolCall;\n};\nvar updatedRunStep = ({\n runStep,\n value\n}) => {\n if (!runStep?.step_details?.tool_calls) return runStep;\n if (value.data.delta?.step_details?.type === \"tool_calls\") {\n if (!value.data.delta.step_details.tool_calls) return runStep;\n const newToolCalls = _5.cloneDeep(runStep.step_details.tool_calls);\n value.data.delta.step_details.tool_calls.forEach((delta) => newToolCalls[delta.index] = updatedToolCall({\n toolCall: newToolCalls[delta.index],\n delta\n }));\n return {\n ...runStep,\n step_details: {\n ...runStep.step_details,\n ...value.data.delta.step_details,\n tool_calls: newToolCalls\n }\n };\n } else {\n return runStep;\n }\n};\nvar threadRunStepDelta = ({\n value,\n queryClient,\n messagesQueryKey\n}) => queryClient.setQueryData(\n messagesQueryKey,\n (prevData) => {\n if (!prevData) return prevData;\n const [latestPage, ...pagesRest] = prevData.pages;\n return {\n ...prevData,\n pages: [\n {\n ...latestPage,\n data: latestPage.data.map((m) => {\n if (m.run_id === value.data.run_id) {\n return {\n ...m,\n runSteps: m.runSteps.map((rs) => {\n if (rs.id === value.data.id) {\n return updatedRunStep({ runStep: rs, value });\n }\n return rs;\n })\n };\n }\n return m;\n })\n },\n ...pagesRest\n ]\n };\n }\n);\n\n// src/hooks/messages/useCreateMessage/lib/mutationOptions/mutationFn/handleResponse/handlers/threadRunStepCompleted.ts\nimport { replace as replace2 } from \"radash\";\nvar threadRunStepCompleted = ({\n value,\n queryClient,\n messagesQueryKey\n}) => queryClient.setQueryData(\n messagesQueryKey,\n (prevData) => {\n if (!prevData) return prevData;\n const [latestPage, ...pagesRest] = prevData.pages;\n return {\n ...prevData,\n pages: [\n {\n ...latestPage,\n data: latestPage.data.map((m) => {\n if (m.run_id === value.data.run_id) {\n return {\n ...m,\n runSteps: replace2(m.runSteps, value.data, (rs) => rs.id === value.data.id)\n };\n }\n return m;\n })\n },\n ...pagesRest\n ]\n };\n }\n);\n\n// src/hooks/messages/useCreateMessage/lib/mutationOptions/mutationFn/handleResponse/handlers/threadRunRequiresAction.ts\nimport { map } from \"radash\";\nvar threadRunRequiresAction = async ({\n value,\n queryClient,\n messagesQueryKey,\n superinterfaceContext\n}) => {\n if (value.data.required_action.type === \"submit_client_tool_outputs\") {\n const toolCalls = value.data.required_action.submit_client_tool_outputs.tool_calls;\n const toolOutputs = await map(toolCalls, async (toolCall) => {\n if (toolCall.type !== \"function\") {\n return {\n toolCallId: toolCall.id,\n output: `Error: client tool type ${toolCall.type} is not supported.`\n };\n }\n const fn = window[toolCall.function.name];\n if (!fn) {\n return {\n toolCallId: toolCall.id,\n output: `Error: client function ${toolCall.function.name} is not defined.`\n };\n }\n const args = toolCall.function.arguments;\n const parsedArgs = JSON.parse(args);\n let output;\n try {\n output = await fn(parsedArgs);\n } catch (error) {\n output = `Error: ${error.message}`;\n }\n return {\n toolCallId: toolCall.id,\n output\n };\n });\n return fetch(`${superinterfaceContext.baseUrl}/threads/runs/submit-client-tool-outputs`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({\n toolOutputs,\n ...superinterfaceContext.variables\n })\n });\n }\n};\n\n// src/hooks/messages/useCreateMessage/lib/mutationOptions/mutationFn/handleResponse/handlers/index.ts\nvar handlers = {\n \"thread.created\": threadCreated,\n \"thread.message.created\": threadMessageCreated,\n \"thread.message.delta\": threadMessageDelta,\n \"thread.message.completed\": threadMessageCompleted,\n \"thread.run.created\": threadRunCreated,\n \"thread.run.failed\": threadRunFailed,\n \"thread.run.step.created\": threadRunStepCreated,\n \"thread.run.step.delta\": threadRunStepDelta,\n \"thread.run.step.completed\": threadRunStepCompleted,\n \"thread.run.requires_action\": threadRunRequiresAction\n};\n\n// src/hooks/messages/useCreateMessage/lib/mutationOptions/mutationFn/handleResponse/index.ts\nvar handleResponse = ({\n value,\n messagesQueryKey,\n queryClient,\n superinterfaceContext\n}) => {\n const handler = handlers[value.value.event];\n if (!handler) {\n return console.log(\"Missing handler\", { value });\n }\n return handler({\n value: value.value,\n queryClient,\n messagesQueryKey,\n superinterfaceContext\n });\n};\n\n// src/hooks/messages/useCreateMessage/lib/mutationOptions/mutationFn/body.ts\nvar body = ({\n variables,\n superinterfaceContext\n}) => {\n if (variables.threadId) return variables;\n if (!variables.assistantId) return variables;\n if (!superinterfaceContext.threadIdStorageOptions?.get) return variables;\n const threadId = superinterfaceContext.threadIdStorageOptions.get({ assistantId: variables.assistantId });\n if (!threadId) return variables;\n return {\n ...variables,\n threadId\n };\n};\n\n// src/hooks/messages/useCreateMessage/lib/mutationOptions/mutationFn/index.ts\nvar mutationFn = ({\n superinterfaceContext,\n queryClient,\n threadContext\n}) => async (variables) => {\n const abortController = new AbortController();\n superinterfaceContext.createMessageAbortControllerRef.current = abortController;\n const response = await fetch(`${superinterfaceContext.baseUrl}/messages`, {\n method: \"POST\",\n body: JSON.stringify(body({\n variables,\n superinterfaceContext\n })),\n signal: abortController.signal\n });\n if (response.status !== 200) {\n try {\n const errorResponse = await response.json();\n throw new Error(errorResponse.error);\n } catch (error) {\n throw new Error(\"Failed to send your message, try again. If you are the owner, check the logs.\");\n }\n }\n if (response.body == null) {\n throw new Error(\"The response body is empty.\");\n }\n const parser = new JSONParser({ stringBufferSize: void 0, paths: [\"$\"], separator: \"\" });\n const reader = response.body.pipeThrough(parser).getReader();\n const messagesQueryKey = [\"messages\", threadContext.variables];\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n handleResponse({\n value,\n messagesQueryKey,\n queryClient,\n superinterfaceContext\n });\n }\n};\n\n// src/hooks/messages/useCreateMessage/lib/mutationOptions/index.ts\nvar mutationOptions = ({\n queryClient,\n threadContext,\n superinterfaceContext,\n onError\n}) => {\n const mutationKey = [\"createMessage\", threadContext.variables];\n return {\n mutationFn: mutationFn({\n queryClient,\n superinterfaceContext,\n threadContext\n }),\n onMutate: onMutate({ queryClient }),\n onError,\n ...threadContext.defaultOptions.mutations,\n ...queryClient.getMutationDefaults(mutationKey),\n mutationKey\n };\n};\n\n// src/hooks/messages/useCreateMessage/index.ts\nvar useCreateMessage = ({\n onError = () => {\n }\n} = {\n onError: () => {\n }\n}) => {\n const queryClient = useQueryClient3();\n const superinterfaceContext = useSuperinterfaceContext();\n const threadContext = useSuperinterfaceContext();\n const props = useMutation(mutationOptions({\n queryClient,\n threadContext,\n superinterfaceContext,\n onError\n }));\n return {\n ...props,\n createMessage: partob(props.mutateAsync, threadContext.variables)\n };\n};\n\n// src/components/suggestions/Suggestions/Item.tsx\nimport {\n useQueryClient as useQueryClient4\n} from \"@tanstack/react-query\";\n\n// src/hooks/toasts/useToasts/index.ts\nimport { useContext as useContext4 } from \"react\";\n\n// src/contexts/toasts/ToastsContext/index.ts\nimport { createContext as createContext5 } from \"react\";\nvar ToastsContext = createContext5({\n toasts: [],\n addToast: () => {\n }\n});\n\n// src/hooks/toasts/useToasts/index.ts\nvar useToasts = () => useContext4(ToastsContext);\n\n// src/lib/errors/createMessageDefaultOnError.ts\nvar createMessageDefaultOnError = ({\n queryClient,\n addToast,\n threadContext\n}) => (error) => {\n if (error.name === \"AbortError\") {\n queryClient.invalidateQueries({ queryKey: [\"messages\", threadContext.variables] });\n queryClient.invalidateQueries({ queryKey: [\"runs\", threadContext.variables] });\n return;\n }\n addToast({ type: \"error\", message: error.message });\n};\n\n// src/components/suggestions/Suggestions/Item.tsx\nimport { jsx as jsx27, jsxs as jsxs10 } from \"react/jsx-runtime\";\nvar Item = ({\n suggestion,\n isDisabled,\n className,\n style\n}) => {\n const { addToast } = useToasts();\n const queryClient = useQueryClient4();\n const threadContext = useSuperinterfaceContext();\n const { createMessage, isPending } = useCreateMessage({\n onError: createMessageDefaultOnError({\n queryClient,\n addToast,\n threadContext\n })\n });\n return /* @__PURE__ */ jsx27(\n Content3,\n {\n onClick: () => {\n createMessage({\n // @ts-ignore-next-line\n content: suggestion\n });\n },\n isDisabled,\n isPending,\n className,\n style,\n children: suggestion\n }\n );\n};\nvar Content3 = ({\n onClick,\n isDisabled,\n isPending,\n children,\n className,\n style\n}) => /* @__PURE__ */ jsxs10(\n Button2,\n {\n className,\n variant: \"soft\",\n onClick,\n disabled: isDisabled,\n style: {\n minHeight: \"var(--base-button-height)\",\n height: \"inherit\",\n flexShrink: 1,\n ...style ?? {}\n },\n children: [\n /* @__PURE__ */ jsx27(\n Text4,\n {\n size: \"1\",\n weight: \"regular\",\n children\n }\n ),\n /* @__PURE__ */ jsx27(Spinner, { loading: isPending, children: /* @__PURE__ */ jsx27(\n ArrowUpIcon,\n {\n style: {\n flexShrink: 0\n }\n }\n ) })\n ]\n }\n);\nItem.Content = Content3;\n\n// src/components/suggestions/Suggestions/Content.tsx\nimport { jsx as jsx28 } from \"react/jsx-runtime\";\nvar Content4 = ({\n children,\n className,\n style\n}) => {\n const isMutatingMessage = useIsMutatingMessage();\n const suggestions = useMemo5(() => onlyText(children).split(/\\r?\\n/).filter((c) => !isEmpty(c)).map((c) => c.trim()), [children]);\n if (isEmpty(suggestions)) return null;\n return /* @__PURE__ */ jsx28(\n Flex7,\n {\n gap: \"2\",\n py: \"2\",\n wrap: \"wrap\",\n className,\n style,\n children: suggestions.map((suggestion) => /* @__PURE__ */ jsx28(\n Item,\n {\n suggestion,\n isDisabled: isMutatingMessage\n },\n suggestion\n ))\n }\n );\n};\n\n// src/components/suggestions/Suggestions/index.tsx\nimport { jsx as jsx29 } from \"react/jsx-runtime\";\nvar Suggestions = ({\n children,\n className,\n style\n}) => {\n const latestMessageProps = useLatestMessage();\n const isDisabled = useMemo6(() => (\n // @ts-ignore-next-line\n latestMessageProps.latestMessage?.metadata?.isBlocking\n ), [latestMessageProps]);\n if (latestMessageProps.isLoading) return null;\n if (isDisabled) return null;\n return /* @__PURE__ */ jsx29(\n Content4,\n {\n className,\n style,\n children\n }\n );\n};\nSuggestions.Item = Item;\n\n// src/contexts/markdown/MarkdownContext/lib/components/Code.tsx\nimport { jsx as jsx30 } from \"react/jsx-runtime\";\nvar Code3 = ({\n children,\n className\n}) => {\n if (className === \"language-suggestions\") {\n return /* @__PURE__ */ jsx30(Suggestions, { children });\n }\n return /* @__PURE__ */ jsx30(RadixCode, { children });\n};\n\n// src/components/images/Image.tsx\nimport {\n Box as Box8\n} from \"@radix-ui/themes\";\nimport { jsx as jsx31 } from \"react/jsx-runtime\";\nvar Image = (props) => /* @__PURE__ */ jsx31(\n Box8,\n {\n pb: \"3\",\n children: /* @__PURE__ */ jsx31(\n \"img\",\n {\n ...props,\n style: {\n maxWidth: \"100%\",\n height: \"auto\"\n }\n }\n )\n }\n);\n\n// src/contexts/markdown/MarkdownContext/lib/components/Img/lib/isVideoSrc.ts\nvar videoExtensions = [\n \"3g2\",\n \"3gp\",\n \"aaf\",\n \"asf\",\n \"avchd\",\n \"avi\",\n \"drc\",\n \"flv\",\n \"m2v\",\n \"m3u8\",\n \"m4p\",\n \"m4v\",\n \"mkv\",\n \"mng\",\n \"mov\",\n \"mp2\",\n \"mp4\",\n \"mpe\",\n \"mpeg\",\n \"mpg\",\n \"mpv\",\n \"mxf\",\n \"nsv\",\n \"ogg\",\n \"ogv\",\n \"qt\",\n \"rm\",\n \"rmvb\",\n \"roq\",\n \"svi\",\n \"vob\",\n \"webm\",\n \"wmv\",\n \"yuv\"\n];\nvar isVideoSrc = ({\n src\n}) => videoExtensions.includes(src.split(\".\").pop() || \"\");\n\n// src/contexts/markdown/MarkdownContext/lib/components/Img/lib/isAudioSrc.ts\nvar isAudioSrc = ({\n src\n}) => src.endsWith(\".mp3\") || src.endsWith(\".wav\");\n\n// src/contexts/markdown/MarkdownContext/lib/components/Img/Video/index.tsx\nimport {\n Flex as Flex8\n} from \"@radix-ui/themes\";\nimport \"@vidstack/react/player/styles/base.css\";\nimport {\n MediaPlayer,\n MediaProvider,\n Controls\n} from \"@vidstack/react\";\n\n// src/components/media/PlayButton.tsx\nimport {\n PlayButton as VidstackPlayButton,\n useMediaState\n} from \"@vidstack/react\";\nimport {\n IconButton\n} from \"@radix-ui/themes\";\nimport {\n PlayIcon,\n PauseIcon\n} from \"@radix-ui/react-icons\";\nimport { jsx as jsx32 } from \"react/jsx-runtime\";\nvar PlayButton = () => {\n const isPaused = useMediaState(\"paused\");\n return /* @__PURE__ */ jsx32(\n IconButton,\n {\n variant: \"ghost\",\n asChild: true,\n children: /* @__PURE__ */ jsx32(VidstackPlayButton, { children: isPaused ? /* @__PURE__ */ jsx32(PlayIcon, {}) : /* @__PURE__ */ jsx32(PauseIcon, {}) })\n }\n );\n};\n\n// src/components/media/VolumeButton.tsx\nimport {\n MuteButton,\n useMediaState as useMediaState2,\n useMediaRemote\n} from \"@vidstack/react\";\nimport {\n IconButton as IconButton2,\n HoverCard,\n Slider\n} from \"@radix-ui/themes\";\nimport {\n SpeakerModerateIcon,\n SpeakerOffIcon\n} from \"@radix-ui/react-icons\";\nimport { jsx as jsx33, jsxs as jsxs11 } from \"react/jsx-runtime\";\nvar VolumeButton = () => {\n const volume = useMediaState2(\"volume\");\n const isMuted = useMediaState2(\"muted\");\n const remote = useMediaRemote();\n return /* @__PURE__ */ jsxs11(HoverCard.Root, { children: [\n /* @__PURE__ */ jsx33(HoverCard.Trigger, { children: /* @__PURE__ */ jsx33(\n IconButton2,\n {\n variant: \"ghost\",\n asChild: true,\n children: /* @__PURE__ */ jsx33(MuteButton, { children: isMuted || volume === 0 ? /* @__PURE__ */ jsx33(SpeakerOffIcon, {}) : /* @__PURE__ */ jsx33(SpeakerModerateIcon, {}) })\n }\n ) }),\n /* @__PURE__ */ jsx33(\n HoverCard.Content,\n {\n size: \"1\",\n side: \"top\",\n height: \"100px\",\n children: /* @__PURE__ */ jsx33(\n Slider,\n {\n size: \"1\",\n variant: \"soft\",\n orientation: \"vertical\",\n value: [volume * 100],\n onValueChange: ([value]) => remote.changeVolume(value / 100)\n }\n )\n }\n )\n ] });\n};\n\n// src/components/media/Time.tsx\nimport {\n useState,\n useEffect,\n useMemo as useMemo7\n} from \"react\";\nimport {\n useMediaState as useMediaState3,\n useMediaRemote as useMediaRemote2\n} from \"@vidstack/react\";\nimport {\n Slider as Slider2\n} from \"@radix-ui/themes\";\nimport { jsx as jsx34 } from \"react/jsx-runtime\";\nvar Time = () => {\n const time = useMediaState3(\"currentTime\");\n const duration = useMediaState3(\"duration\");\n const seeking = useMediaState3(\"seeking\");\n const canSeek = useMediaState3(\"canSeek\");\n const remote = useMediaRemote2();\n const [value, setValue] = useState(0);\n useEffect(() => {\n if (seeking) return;\n setValue(time / duration * 100);\n }, [time, duration, seeking]);\n const step = useMemo7(() => 1 / duration * 100, [duration]);\n return /* @__PURE__ */ jsx34(\n Slider2,\n {\n size: \"1\",\n variant: \"soft\",\n value: [value],\n disabled: !canSeek,\n step: Number.isFinite(step) ? step : 1,\n onValueChange: ([value2]) => {\n setValue(value2);\n remote.seeking(value2 / 100 * duration);\n },\n onValueCommit: ([value2]) => {\n remote.seek(value2 / 100 * duration);\n }\n }\n );\n};\n\n// src/components/media/MediaContainer.tsx\nimport {\n Card,\n Inset\n} from \"@radix-ui/themes\";\nimport { jsx as jsx35 } from \"react/jsx-runtime\";\nvar MediaContainer = ({\n children\n}) => /* @__PURE__ */ jsx35(\n Card,\n {\n mb: \"3\",\n children: /* @__PURE__ */ jsx35(\n Inset,\n {\n clip: \"padding-box\",\n style: {\n display: \"flex\",\n flexDirection: \"column\"\n },\n children\n }\n )\n }\n);\n\n// src/contexts/markdown/MarkdownContext/lib/components/Img/Video/FullscreenButton.tsx\nimport {\n FullscreenButton as VidstackFullscreenButton,\n useMediaState as useMediaState4\n} from \"@vidstack/react\";\nimport {\n IconButton as IconButton3\n} from \"@radix-ui/themes\";\nimport {\n EnterFullScreenIcon,\n ExitFullScreenIcon\n} from \"@radix-ui/react-icons\";\nimport { jsx as jsx36 } from \"react/jsx-runtime\";\nvar FullscreenButton = () => {\n const isFullscreen = useMediaState4(\"fullscreen\");\n return /* @__PURE__ */ jsx36(\n IconButton3,\n {\n variant: \"ghost\",\n asChild: true,\n children: /* @__PURE__ */ jsx36(VidstackFullscreenButton, { children: isFullscreen ? /* @__PURE__ */ jsx36(ExitFullScreenIcon, {}) : /* @__PURE__ */ jsx36(EnterFullScreenIcon, {}) })\n }\n );\n};\n\n// src/contexts/markdown/MarkdownContext/lib/components/Img/Video/index.tsx\nimport { jsx as jsx37, jsxs as jsxs12 } from \"react/jsx-runtime\";\nvar Video = ({\n src\n}) => /* @__PURE__ */ jsx37(MediaContainer, { children: /* @__PURE__ */ jsxs12(\n MediaPlayer,\n {\n src: {\n src,\n type: `video/${src.split(\".\").pop()}`\n },\n playsInline: true,\n hideControlsOnMouseLeave: true,\n crossOrigin: true,\n children: [\n /* @__PURE__ */ jsx37(MediaProvider, {}),\n /* @__PURE__ */ jsx37(\"style\", { children: `\n .superinterface-video-controls {\n opacity: 0;\n transition: opacity 0.2s ease-out;\n }\n\n .superinterface-video-controls[data-visible] {\n opacity: 1;\n }\n ` }),\n /* @__PURE__ */ jsx37(\n Flex8,\n {\n asChild: true,\n position: \"absolute\",\n bottom: \"0\",\n left: \"0\",\n right: \"0\",\n className: \"superinterface-video-controls\",\n p: \"3\",\n style: {\n zIndex: 10,\n background: \"var(--accent-4)\"\n },\n children: /* @__PURE__ */ jsx37(Controls.Root, { children: /* @__PURE__ */ jsx37(\n Flex8,\n {\n asChild: true,\n align: \"center\",\n gap: \"3\",\n flexGrow: \"1\",\n children: /* @__PURE__ */ jsxs12(Controls.Group, { children: [\n /* @__PURE__ */ jsx37(PlayButton, {}),\n /* @__PURE__ */ jsx37(Time, {}),\n /* @__PURE__ */ jsx37(VolumeButton, {}),\n /* @__PURE__ */ jsx37(FullscreenButton, {})\n ] })\n }\n ) })\n }\n )\n ]\n }\n) });\n\n// src/contexts/markdown/MarkdownContext/lib/components/Img/Audio/index.tsx\nimport {\n Flex as Flex9\n} from \"@radix-ui/themes\";\nimport \"@vidstack/react/player/styles/base.css\";\nimport {\n MediaPlayer as MediaPlayer2,\n MediaProvider as MediaProvider2,\n Controls as Controls2\n} from \"@vidstack/react\";\nimport { jsx as jsx38, jsxs as jsxs13 } from \"react/jsx-runtime\";\nvar Audio = ({\n src\n}) => /* @__PURE__ */ jsx38(MediaContainer, { children: /* @__PURE__ */ jsxs13(\n MediaPlayer2,\n {\n src: {\n src,\n type: `audio/${src.split(\".\").pop()}`\n },\n viewType: \"audio\",\n crossOrigin: true,\n playsInline: true,\n children: [\n /* @__PURE__ */ jsx38(MediaProvider2, {}),\n /* @__PURE__ */ jsx38(\n Flex9,\n {\n asChild: true,\n p: \"3\",\n flexGrow: \"1\",\n style: {\n zIndex: 10,\n background: \"var(--accent-4)\"\n },\n children: /* @__PURE__ */ jsx38(Controls2.Root, { children: /* @__PURE__ */ jsx38(\n Flex9,\n {\n asChild: true,\n align: \"center\",\n gap: \"3\",\n flexGrow: \"1\",\n children: /* @__PURE__ */ jsxs13(Controls2.Group, { children: [\n /* @__PURE__ */ jsx38(PlayButton, {}),\n /* @__PURE__ */ jsx38(Time, {}),\n /* @__PURE__ */ jsx38(VolumeButton, {})\n ] })\n }\n ) })\n }\n )\n ]\n }\n) });\n\n// src/contexts/markdown/MarkdownContext/lib/components/Img/index.tsx\nimport { jsx as jsx39 } from \"react/jsx-runtime\";\nvar Img = (props) => {\n if (!props.src) {\n return /* @__PURE__ */ jsx39(\n Image,\n {\n ...props\n }\n );\n } else if (isVideoSrc({ src: props.src })) {\n return /* @__PURE__ */ jsx39(\n Video,\n {\n src: props.src\n }\n );\n } else if (isAudioSrc({ src: props.src })) {\n return /* @__PURE__ */ jsx39(\n Audio,\n {\n src: props.src\n }\n );\n } else {\n return /* @__PURE__ */ jsx39(\n Image,\n {\n ...props\n }\n );\n }\n};\n\n// src/contexts/markdown/MarkdownContext/lib/components/Annotation/index.tsx\nimport {\n QuoteIcon\n} from \"@radix-ui/react-icons\";\n\n// src/contexts/markdown/MarkdownContext/lib/components/Annotation/AnnotationBase.tsx\nimport {\n IconButton as IconButton4,\n Popover as Popover4,\n Flex as Flex10,\n Text as Text5\n} from \"@radix-ui/themes\";\nimport { jsx as jsx40, jsxs as jsxs14 } from \"react/jsx-runtime\";\nvar AnnotationBase = ({\n icon,\n content\n}) => /* @__PURE__ */ jsxs14(Popover4.Root, { children: [\n /* @__PURE__ */ jsx40(Popover4.Trigger, { children: /* @__PURE__ */ jsx40(\n IconButton4,\n {\n variant: \"soft\",\n color: \"gray\",\n size: \"1\",\n children: icon\n }\n ) }),\n /* @__PURE__ */ jsx40(\n Popover4.Content,\n {\n size: \"1\",\n children: /* @__PURE__ */ jsx40(\n Flex10,\n {\n direction: \"column\",\n children: /* @__PURE__ */ jsx40(\n Text5,\n {\n size: \"1\",\n color: \"gray\",\n children: content\n }\n )\n }\n )\n }\n )\n] });\n\n// src/contexts/markdown/MarkdownContext/lib/components/Annotation/FilePathAnnotation.tsx\nimport { jsx as jsx41 } from \"react/jsx-runtime\";\nvar FilePathAnnotation = ({\n annotation,\n children\n}) => {\n const superinterfaceContext = useSuperinterfaceContext();\n const nextSearchParams = new URLSearchParams(superinterfaceContext.variables);\n return /* @__PURE__ */ jsx41(\n Link,\n {\n href: `${superinterfaceContext.baseUrl}/files/${annotation.file_path.file_id}/contents?${nextSearchParams}`,\n target: \"_self\",\n download: true,\n children\n }\n );\n};\n\n// src/contexts/markdown/MarkdownContext/lib/components/Annotation/index.tsx\nimport { jsx as jsx42 } from \"react/jsx-runtime\";\nvar Annotation = ({\n annotation,\n children\n}) => {\n if (annotation.type === \"file_citation\") {\n return /* @__PURE__ */ jsx42(\n AnnotationBase,\n {\n icon: /* @__PURE__ */ jsx42(QuoteIcon, {}),\n content: \"File cited.\"\n }\n );\n } else if (annotation.type === \"file_path\") {\n return /* @__PURE__ */ jsx42(\n FilePathAnnotation,\n {\n annotation,\n children\n }\n );\n }\n return null;\n};\n\n// src/contexts/markdown/MarkdownContext/lib/components/index.tsx\nimport { Fragment, jsx as jsx43, jsxs as jsxs15 } from \"react/jsx-runtime\";\nvar components = {\n p: Paragraph,\n a: Link,\n strong: Strong,\n ul: UnorderedList,\n ol: OrderedList,\n li: ListItem,\n pre: Pre,\n code: Code3,\n img: Img,\n annotation: Annotation,\n h1: (props) => /* @__PURE__ */ jsx43(Heading, { as: \"h1\", children: props.children }),\n h2: (props) => /* @__PURE__ */ jsx43(Heading, { as: \"h2\", size: \"5\", children: props.children }),\n h3: (props) => /* @__PURE__ */ jsx43(Heading, { as: \"h3\", size: \"4\", children: props.children }),\n h4: (props) => /* @__PURE__ */ jsx43(Heading, { as: \"h4\", size: \"3\", children: props.children }),\n h5: (props) => /* @__PURE__ */ jsx43(Heading, { as: \"h5\", size: \"3\", children: props.children }),\n h6: (props) => /* @__PURE__ */ jsx43(Heading, { as: \"h6\", size: \"3\", children: props.children }),\n table: (props) => /* @__PURE__ */ jsxs15(Fragment, { children: [\n /* @__PURE__ */ jsx43(\"style\", { children: `.rt-TableRootTable { overflow: inherit; }` }),\n /* @__PURE__ */ jsx43(\n Table.Root,\n {\n ...props,\n variant: \"surface\",\n mb: \"3\"\n }\n )\n ] }),\n thead: Table.Header,\n tbody: Table.Body,\n tr: Table.Row,\n td: Table.Cell,\n th: Table.ColumnHeaderCell\n};\n\n// src/contexts/markdown/MarkdownContext/lib/getRemarkPlugins.ts\nimport remarkGfm from \"remark-gfm\";\n\n// src/lib/remark/remarkAnnotation.ts\nimport { isNumber } from \"radash\";\nimport flatMap from \"unist-util-flatmap\";\nvar sortedAnnotations = ({\n content\n}) => content.text.annotations.sort((a, b) => a.start_index - b.start_index);\nvar remarkAnnotation = ({\n content\n}) => {\n return () => {\n return (tree) => {\n flatMap(tree, (node) => {\n if (node.type === \"text\" || node.type === \"link\") {\n return processNodeWithAnnotations({ node, content });\n } else {\n return [node];\n }\n });\n };\n };\n};\nvar processNodeWithAnnotations = ({\n node,\n content\n}) => {\n if (!content.text?.annotations?.length) {\n return [node];\n }\n if (!node.position) {\n return [node];\n }\n const annotations = sortedAnnotations({ content });\n if (node.type === \"text\") {\n return processTextNode({ node, annotations });\n } else if (node.type === \"link\") {\n const linkNode = node;\n linkNode.children = flatMap(linkNode.children, (childNode) => {\n if (childNode.type === \"text\") {\n return processTextNode({ node: childNode, annotations });\n } else {\n return [childNode];\n }\n });\n return [linkNode];\n } else {\n return [node];\n }\n};\nvar processTextNode = ({\n node,\n annotations\n}) => {\n if (!node.position || !node.value) {\n return [node];\n }\n const nodeStart = node.position.start.offset;\n const nodeEnd = node.position.end.offset;\n if (!isNumber(nodeStart) || !isNumber(nodeEnd)) {\n return [node];\n }\n const newNodes = [];\n let lastIndex = nodeStart;\n annotations.forEach((annotation) => {\n const annotationStart = annotation.start_index;\n const annotationEnd = annotation.end_index;\n if (nodeEnd <= annotationStart || nodeStart >= annotationEnd) {\n return;\n }\n const start = Math.max(nodeStart, annotationStart);\n const end = Math.min(nodeEnd, annotationEnd);\n if (lastIndex < start) {\n newNodes.push(createTextNode({ node, startOffset: lastIndex, endOffset: start }));\n }\n newNodes.push(\n createAnnotationNode({\n node,\n startOffset: start,\n endOffset: end,\n annotation\n })\n );\n lastIndex = end;\n });\n if (lastIndex < nodeEnd) {\n newNodes.push(createTextNode({ node, startOffset: lastIndex, endOffset: nodeEnd }));\n }\n return newNodes;\n};\nvar createTextNode = ({\n node,\n startOffset,\n endOffset\n}) => {\n const valueStart = startOffset - node.position.start.offset;\n const valueEnd = endOffset - node.position.start.offset;\n return {\n type: \"text\",\n value: node.value.slice(valueStart, valueEnd),\n position: {\n start: {\n ...node.position.start,\n offset: startOffset\n },\n end: {\n ...node.position.end,\n offset: endOffset\n }\n }\n };\n};\nvar createAnnotationNode = ({\n node,\n startOffset,\n endOffset,\n annotation\n}) => {\n const valueStart = startOffset - node.position.start.offset;\n const valueEnd = endOffset - node.position.start.offset;\n return {\n type: \"annotation\",\n value: node.value.slice(valueStart, valueEnd),\n position: {\n start: {\n ...node.position.start,\n offset: startOffset\n },\n end: {\n ...node.position.end,\n offset: endOffset\n }\n },\n data: {\n hName: \"annotation\",\n hProperties: {\n annotation\n }\n }\n };\n};\n\n// src/contexts/markdown/MarkdownContext/lib/getRemarkPlugins.ts\nvar getRemarkPlugins = ({\n content\n}) => [\n remarkAnnotation({ content }),\n remarkGfm\n];\n\n// src/contexts/markdown/MarkdownContext/index.ts\nvar MarkdownContext = createContext6({\n components,\n getRemarkPlugins\n});\n\n// src/hooks/markdown/useMarkdownContext/index.ts\nvar useMarkdownContext = () => useContext5(MarkdownContext);\n\n// src/components/threads/Thread/Message/ContentPart/TextContent.tsx\nimport { jsx as jsx44 } from \"react/jsx-runtime\";\nvar TextContent = ({\n content\n}) => {\n const {\n getRemarkPlugins: getRemarkPlugins2,\n ...rest\n } = useMarkdownContext();\n return (\n // @ts-ignore-next-line\n /* @__PURE__ */ jsx44(\n Markdown,\n {\n ...rest,\n remarkPlugins: getRemarkPlugins2({\n content\n }),\n children: content.text.value\n }\n )\n );\n};\n\n// src/components/threads/Thread/Message/ContentPart/ImageFileContent.tsx\nimport { jsx as jsx45 } from \"react/jsx-runtime\";\nvar ImageFileContent = ({\n content\n}) => {\n const superinterfaceContext = useSuperinterfaceContext();\n const nextSearchParams = new URLSearchParams(superinterfaceContext.variables);\n return /* @__PURE__ */ jsx45(\n Image,\n {\n alt: \"\",\n src: `${superinterfaceContext.baseUrl}/files/${content.image_file.file_id}/contents?${nextSearchParams}`\n }\n );\n};\n\n// src/components/threads/Thread/Message/ContentPart/index.tsx\nimport { jsx as jsx46 } from \"react/jsx-runtime\";\nvar ContentPart = ({\n content\n}) => {\n if (content.type === \"text\") {\n return /* @__PURE__ */ jsx46(\n TextContent,\n {\n content\n }\n );\n }\n if (content.type === \"image_file\") {\n return /* @__PURE__ */ jsx46(\n ImageFileContent,\n {\n content\n }\n );\n }\n return null;\n};\n\n// src/components/threads/Thread/Message/index.tsx\nimport { jsx as jsx47, jsxs as jsxs16 } from \"react/jsx-runtime\";\nvar Message = ({\n message,\n className,\n style\n}) => {\n const [olderRunSteps, laterRunSteps] = useMemo8(() => {\n if (!message.runSteps.length) return [[], []];\n const messageCreationRunStepIndex = message.runSteps.findIndex((runStep) => {\n if (runStep.step_details.type !== \"message_creation\") return;\n return runStep.step_details.message_creation.message_id === message.id;\n });\n let nextRunStepIndex = message.runSteps.slice(0, messageCreationRunStepIndex).findLastIndex((runStep) => runStep.step_details.type === \"message_creation\");\n if (nextRunStepIndex === -1) {\n nextRunStepIndex = 0;\n }\n const laterRunSteps2 = message.runSteps.slice(nextRunStepIndex, messageCreationRunStepIndex);\n const prevRunStepIndex = message.runSteps.slice(messageCreationRunStepIndex + 1).findIndex((runStep) => runStep.step_details.type === \"message_creation\");\n let olderRunSteps2;\n if (prevRunStepIndex === -1) {\n olderRunSteps2 = message.runSteps.slice(messageCreationRunStepIndex + 1);\n } else {\n olderRunSteps2 = message.runSteps.slice(messageCreationRunStepIndex + 1, messageCreationRunStepIndex + prevRunStepIndex);\n }\n return [olderRunSteps2, laterRunSteps2];\n }, [message]);\n const isMutatingMessage = useIsMutatingMessage();\n const isInProgress = useMemo8(() => {\n if (!isMutatingMessage) return false;\n if (message.status === \"in_progress\") return true;\n return message.runSteps.some((rs) => rs.status === \"in_progress\");\n }, [message]);\n return /* @__PURE__ */ jsx47(Provider, { value: { message }, children: /* @__PURE__ */ jsxs16(\n Box9,\n {\n className,\n style,\n children: [\n /* @__PURE__ */ jsx47(\n RunSteps,\n {\n runSteps: olderRunSteps\n }\n ),\n /* @__PURE__ */ jsxs16(Box9, { children: [\n /* @__PURE__ */ jsx47(\n Attachments,\n {\n message\n }\n ),\n message.content.map((content, index) => /* @__PURE__ */ jsx47(\n ContentPart,\n {\n content\n },\n index\n )),\n isInProgress && isEmpty2(laterRunSteps) && /* @__PURE__ */ jsx47(StartingContentSkeleton, {})\n ] }),\n /* @__PURE__ */ jsx47(\n RunSteps,\n {\n runSteps: laterRunSteps\n }\n ),\n isInProgress && !isEmpty2(laterRunSteps) && /* @__PURE__ */ jsx47(Box9, { children: /* @__PURE__ */ jsx47(StartingContentSkeleton, {}) })\n ]\n }\n ) });\n};\n\n// src/components/threads/Thread/Messages/Content/index.tsx\nimport { useEffect as useEffect2 } from \"react\";\n\n// src/hooks/messageGroups/useMessageGroups/index.ts\nimport { useMemo as useMemo9 } from \"react\";\n\n// src/hooks/messageGroups/useMessageGroups/lib/messageGroups/index.ts\nimport _6 from \"lodash\";\nimport { last as last2 } from \"radash\";\n\n// src/lib/messages/order.ts\nimport { sort } from \"radash\";\nvar order = ({ messages: messages2 }) => sort(messages2, (m) => m.created_at, true);\n\n// src/hooks/messageGroups/useMessageGroups/lib/messageGroups/newGroup/newGroupItem.ts\nvar newGroupItem = ({ message }) => ({\n id: message.id,\n role: message.role,\n createdAt: message.created_at,\n messages: [message]\n});\n\n// src/hooks/messageGroups/useMessageGroups/lib/messageGroups/newGroup/index.ts\nvar newGroup = ({ groups, message }) => [\n ...groups,\n newGroupItem({\n message\n })\n];\n\n// src/hooks/messageGroups/useMessageGroups/lib/messageGroups/index.ts\nvar messageGroups = ({\n messages: messages2\n}) => _6.reduce(\n order({ messages: messages2 }),\n (groups, message) => {\n const group = last2(groups);\n if (!group) return newGroup({ groups, message });\n if (group.role !== message.role) {\n return newGroup({\n groups,\n message\n });\n }\n return [\n ..._6.dropRight(groups),\n {\n ...group,\n messages: [...group.messages, message]\n }\n ];\n },\n []\n);\n\n// src/hooks/messageGroups/useMessageGroups/index.ts\nvar useMessageGroups = ({\n messages: messages2\n}) => useMemo9(\n () => ({\n messageGroups: messageGroups({ messages: messages2 })\n }),\n [messages2]\n);\n\n// src/components/skeletons/MessagesSkeleton/index.tsx\nimport { forwardRef as forwardRef2 } from \"react\";\nimport {\n Flex as Flex13,\n Avatar,\n Box as Box10,\n Skeleton as Skeleton2\n} from \"@radix-ui/themes\";\n\n// src/components/messageGroups/MessageGroupBase/index.tsx\nimport { forwardRef } from \"react\";\nimport {\n Flex as Flex11,\n Container\n} from \"@radix-ui/themes\";\nimport { jsx as jsx48 } from \"react/jsx-runtime\";\nvar MessageGroupBase = forwardRef(function MessageGroupBase2({\n children\n}, ref) {\n return /* @__PURE__ */ jsx48(\n Container,\n {\n ref,\n size: \"2\",\n flexGrow: \"0\",\n children: /* @__PURE__ */ jsx48(\n Flex11,\n {\n flexShrink: \"0\",\n gap: \"3\",\n children\n }\n )\n }\n );\n});\n\n// src/components/messageGroups/MessageGroupBase/Name.tsx\nimport {\n Flex as Flex12,\n Text as Text6\n} from \"@radix-ui/themes\";\nimport { jsx as jsx49 } from \"react/jsx-runtime\";\nvar Name = ({\n children\n}) => /* @__PURE__ */ jsx49(\n Flex12,\n {\n align: \"center\",\n height: \"var(--space-5)\",\n children: /* @__PURE__ */ jsx49(\n Text6,\n {\n size: \"2\",\n weight: \"bold\",\n children\n }\n )\n }\n);\n\n// src/components/skeletons/MessagesSkeleton/index.tsx\nimport { jsx as jsx50, jsxs as jsxs17 } from \"react/jsx-runtime\";\nvar MessagesSkeleton = forwardRef2(function MessagesSkeleton2(_props, ref) {\n return /* @__PURE__ */ jsxs17(\n MessageGroupBase,\n {\n ref,\n children: [\n /* @__PURE__ */ jsx50(Skeleton2, { loading: true, children: /* @__PURE__ */ jsx50(\n Avatar,\n {\n fallback: /* @__PURE__ */ jsx50(Flex13, {}),\n size: \"1\"\n }\n ) }),\n /* @__PURE__ */ jsxs17(\n Box10,\n {\n pb: \"3\",\n children: [\n /* @__PURE__ */ jsx50(Name, { children: /* @__PURE__ */ jsx50(\n Skeleton2,\n {\n loading: true,\n style: {\n width: \"128px\"\n }\n }\n ) }),\n /* @__PURE__ */ jsx50(\n Skeleton2,\n {\n loading: true,\n style: {\n width: \"256px\"\n }\n }\n ),\n /* @__PURE__ */ jsx50(\n Skeleton2,\n {\n loading: true,\n style: {\n width: \"256px\",\n marginTop: \"var(--space-2)\"\n }\n }\n ),\n /* @__PURE__ */ jsx50(\n Skeleton2,\n {\n loading: true,\n style: {\n width: \"256px\",\n marginTop: \"var(--space-2)\"\n }\n }\n )\n ]\n }\n )\n ]\n }\n );\n});\n\n// src/components/threads/Thread/Messages/Content/MessageGroup/index.tsx\nimport { useContext as useContext8 } from \"react\";\nimport {\n Box as Box11\n} from \"@radix-ui/themes\";\n\n// src/components/messageGroups/MessageGroupBase/AssistantAvatar.tsx\nimport { useContext as useContext6 } from \"react\";\nimport {\n Flex as Flex14\n} from \"@radix-ui/themes\";\n\n// src/contexts/assistants/AssistantAvatarContext/index.tsx\nimport { createContext as createContext7 } from \"react\";\nimport {\n Avatar as Avatar2\n} from \"@radix-ui/themes\";\nimport {\n LightningBoltIcon\n} from \"@radix-ui/react-icons\";\nimport { jsx as jsx51 } from \"react/jsx-runtime\";\nvar AssistantAvatarContext = createContext7(\n /* @__PURE__ */ jsx51(\n Avatar2,\n {\n fallback: /* @__PURE__ */ jsx51(LightningBoltIcon, {}),\n size: \"1\"\n }\n )\n);\n\n// src/components/messageGroups/MessageGroupBase/AssistantAvatar.tsx\nimport { jsx as jsx52 } from \"react/jsx-runtime\";\nvar AssistantAvatar = () => {\n const AssistantAvatarContextValue = useContext6(AssistantAvatarContext);\n return /* @__PURE__ */ jsx52(\n Flex14,\n {\n flexShrink: \"0\",\n height: \"24px\",\n width: \"24px\",\n style: {\n borderRadius: \"var(--radius-3)\",\n overflow: \"hidden\"\n },\n children: AssistantAvatarContextValue\n }\n );\n};\n\n// src/contexts/assistants/AssistantNameContext/index.tsx\nimport { createContext as createContext8 } from \"react\";\nvar AssistantNameContext = createContext8(\"Assistant\");\n\n// src/components/messageGroups/MessageGroupBase/UserAvatar.tsx\nimport { useContext as useContext7 } from \"react\";\nimport {\n Flex as Flex15\n} from \"@radix-ui/themes\";\n\n// src/contexts/users/UserAvatarContext/index.tsx\nimport { createContext as createContext9 } from \"react\";\nimport {\n Avatar as Avatar3\n} from \"@radix-ui/themes\";\nimport {\n PersonIcon\n} from \"@radix-ui/react-icons\";\nimport { jsx as jsx53 } from \"react/jsx-runtime\";\nvar UserAvatarContext = createContext9(\n /* @__PURE__ */ jsx53(\n Avatar3,\n {\n fallback: /* @__PURE__ */ jsx53(PersonIcon, {}),\n size: \"1\"\n }\n )\n);\n\n// src/components/messageGroups/MessageGroupBase/UserAvatar.tsx\nimport { jsx as jsx54 } from \"react/jsx-runtime\";\nvar UserAvatar = () => {\n const UserAvatarContextValue = useContext7(UserAvatarContext);\n return /* @__PURE__ */ jsx54(\n Flex15,\n {\n flexShrink: \"0\",\n height: \"24px\",\n width: \"24px\",\n style: {\n borderRadius: \"var(--radius-3)\",\n overflow: \"hidden\"\n },\n children: UserAvatarContextValue\n }\n );\n};\n\n// src/components/threads/Thread/Messages/Content/MessageGroup/Content/index.tsx\nimport { Flex as Flex16 } from \"@radix-ui/themes\";\nimport { jsx as jsx55 } from \"react/jsx-runtime\";\nvar Content5 = ({\n messageGroup\n}) => /* @__PURE__ */ jsx55(\n Flex16,\n {\n direction: \"column-reverse\",\n children: messageGroup.messages.map((message) => /* @__PURE__ */ jsx55(\n Message,\n {\n message\n },\n message.id\n ))\n }\n);\n\n// src/components/threads/Thread/Messages/Content/MessageGroup/index.tsx\nimport { jsx as jsx56, jsxs as jsxs18 } from \"react/jsx-runtime\";\nvar MessageGroup = ({\n messageGroup\n}) => {\n const assistantNameContext = useContext8(AssistantNameContext);\n return /* @__PURE__ */ jsxs18(MessageGroupBase, { children: [\n messageGroup.role === \"user\" ? /* @__PURE__ */ jsx56(UserAvatar, {}) : /* @__PURE__ */ jsx56(AssistantAvatar, {}),\n /* @__PURE__ */ jsxs18(Box11, { flexGrow: \"1\", children: [\n /* @__PURE__ */ jsx56(Name, { children: messageGroup.role === \"user\" ? \"You\" : assistantNameContext }),\n /* @__PURE__ */ jsx56(\n Content5,\n {\n messageGroup\n }\n )\n ] })\n ] });\n};\n\n// src/components/threads/Thread/Messages/Content/index.tsx\nimport { Fragment as Fragment2, jsx as jsx57 } from \"react/jsx-runtime\";\nvar Content6 = () => {\n const {\n messages: messages2,\n isLoading,\n isLoadingError\n } = useMessages();\n const { addToast } = useToasts();\n const { messageGroups: messageGroups2 } = useMessageGroups({\n messages: messages2\n });\n useEffect2(() => {\n if (isLoadingError) {\n addToast({ type: \"error\", message: \"Could not load messages. Please try again.\" });\n }\n }, [isLoadingError, addToast]);\n if (isLoading || isLoadingError) {\n return /* @__PURE__ */ jsx57(MessagesSkeleton, {});\n }\n return /* @__PURE__ */ jsx57(Fragment2, { children: messageGroups2.map((messageGroup) => /* @__PURE__ */ jsx57(\n MessageGroup,\n {\n messageGroup\n },\n messageGroup.id\n )) });\n};\n\n// src/components/threads/Thread/Messages/Progress/index.tsx\nimport { useMemo as useMemo10 } from \"react\";\n\n// src/components/skeletons/StartingSkeleton/index.tsx\nimport { useContext as useContext9 } from \"react\";\nimport { Box as Box12 } from \"@radix-ui/themes\";\nimport { jsx as jsx58, jsxs as jsxs19 } from \"react/jsx-runtime\";\nvar StartingSkeleton = ({\n children\n}) => {\n const assistantNameContext = useContext9(AssistantNameContext);\n return /* @__PURE__ */ jsxs19(MessageGroupBase, { children: [\n /* @__PURE__ */ jsx58(AssistantAvatar, {}),\n /* @__PURE__ */ jsxs19(Box12, { children: [\n /* @__PURE__ */ jsx58(Name, { children: assistantNameContext }),\n children,\n /* @__PURE__ */ jsx58(StartingContentSkeleton, {})\n ] })\n ] });\n};\n\n// src/components/threads/Thread/Messages/Progress/index.tsx\nimport { jsx as jsx59 } from \"react/jsx-runtime\";\nvar Progress = () => {\n const { latestMessage } = useLatestMessage();\n const isMutatingMessage = useIsMutatingMessage();\n const isVisible = useMemo10(() => {\n if (!latestMessage) return false;\n if (latestMessage.role !== \"user\") return false;\n if (latestMessage.status === \"in_progress\") return false;\n if (!isOptimistic({ id: latestMessage.id })) return false;\n if (!isMutatingMessage) return false;\n return true;\n }, [latestMessage, isMutatingMessage]);\n if (!isVisible) return null;\n return /* @__PURE__ */ jsx59(StartingSkeleton, {});\n};\n\n// src/components/threads/Thread/Messages/Root/index.tsx\nimport { Flex as Flex17 } from \"@radix-ui/themes\";\n\n// src/hooks/misc/useInfiniteScroll/index.tsx\nimport { useRef as useRef3 } from \"react\";\nimport { useInView } from \"react-intersection-observer\";\n\n// src/hooks/misc/useThrottledEffect/index.tsx\nimport _7 from \"lodash\";\nimport { useRef as useRef2, useEffect as useEffect3, useCallback } from \"react\";\nvar useThrottledEffect = (cb, delay, additionalDeps) => {\n const cbRef = useRef2(cb);\n const throttledCb = useCallback(\n _7.throttle((...args) => cbRef.current(...args), delay, {\n leading: true,\n trailing: true\n }),\n [delay]\n );\n useEffect3(() => {\n cbRef.current = cb;\n });\n useEffect3(throttledCb, [throttledCb, ...additionalDeps]);\n};\n\n// src/hooks/misc/useInfiniteScroll/index.tsx\nvar useInfiniteScroll = ({\n isFetchingNextPage,\n hasNextPage,\n fetchNextPage\n}) => {\n const containerRef = useRef3(null);\n const { ref: loaderRef, inView } = useInView({\n root: containerRef.current,\n rootMargin: \"0px\",\n threshold: 0.1\n });\n useThrottledEffect(\n () => {\n if (isFetchingNextPage) return;\n if (!inView) return;\n if (!hasNextPage) return;\n fetchNextPage();\n },\n 500,\n [inView, isFetchingNextPage, hasNextPage, fetchNextPage]\n );\n return {\n containerRef,\n loaderRef,\n inView\n };\n};\n\n// src/components/threads/Thread/Messages/Root/index.tsx\nimport { jsx as jsx60, jsxs as jsxs20 } from \"react/jsx-runtime\";\nvar Root2 = ({\n children,\n style,\n className\n}) => {\n const {\n isFetchingNextPage,\n hasNextPage,\n fetchNextPage\n } = useMessages();\n const { containerRef, loaderRef } = useInfiniteScroll({\n isFetchingNextPage,\n hasNextPage,\n fetchNextPage\n });\n return /* @__PURE__ */ jsxs20(\n Flex17,\n {\n ref: containerRef,\n direction: \"column-reverse\",\n flexGrow: \"1\",\n style: {\n overflow: \"auto\",\n ...style ?? {}\n },\n className,\n children: [\n children,\n hasNextPage && /* @__PURE__ */ jsx60(\n Flex17,\n {\n ref: loaderRef\n }\n ),\n /* @__PURE__ */ jsx60(\n Flex17,\n {\n flexShrink: \"0\",\n flexGrow: \"1\"\n }\n )\n ]\n }\n );\n};\n\n// src/components/threads/Thread/Messages/NextPageSkeleton.tsx\nimport { jsx as jsx61 } from \"react/jsx-runtime\";\nvar NextPageSkeleton = () => {\n const {\n hasNextPage\n } = useMessages();\n if (!hasNextPage) {\n return null;\n }\n return /* @__PURE__ */ jsx61(MessagesSkeleton, {});\n};\n\n// src/components/threads/Thread/Messages/index.tsx\nimport { jsx as jsx62, jsxs as jsxs21 } from \"react/jsx-runtime\";\nvar Messages = ({\n children,\n className,\n style\n}) => /* @__PURE__ */ jsxs21(\n Root2,\n {\n style,\n className,\n children: [\n /* @__PURE__ */ jsx62(\n Flex18,\n {\n flexShrink: \"0\",\n height: \"var(--space-3)\"\n }\n ),\n /* @__PURE__ */ jsx62(Progress, {}),\n children,\n /* @__PURE__ */ jsx62(Content6, {}),\n /* @__PURE__ */ jsx62(NextPageSkeleton, {}),\n /* @__PURE__ */ jsx62(\n Flex18,\n {\n flexShrink: \"0\",\n flexGrow: \"1\",\n minHeight: \"var(--space-5)\"\n }\n )\n ]\n }\n);\nMessages.Root = Root2;\nMessages.Message = Message;\nMessages.NextPageSkeleton = NextPageSkeleton;\n\n// src/components/threads/Thread/MessageForm/Submit/index.tsx\nimport {\n ArrowUpIcon as ArrowUpIcon2,\n StopIcon\n} from \"@radix-ui/react-icons\";\nimport {\n IconButton as IconButton5,\n Flex as Flex19\n} from \"@radix-ui/themes\";\n\n// src/hooks/messages/useMessageFormContext/index.ts\nimport { useContext as useContext10 } from \"react\";\n\n// src/contexts/messages/MessageFormContext/index.ts\nimport { createContext as createContext10 } from \"react\";\nvar MessageFormContext = createContext10({\n content: \"\",\n isDisabled: false,\n isLoading: false,\n files: [],\n setFiles: () => {\n },\n isFileLoading: false\n});\n\n// src/hooks/messages/useMessageFormContext/index.ts\nvar useMessageFormContext = () => useContext10(MessageFormContext);\n\n// src/components/threads/Thread/MessageForm/Submit/index.tsx\nimport { jsx as jsx63 } from \"react/jsx-runtime\";\nvar Root3 = ({\n children,\n style,\n className\n}) => /* @__PURE__ */ jsx63(\n Flex19,\n {\n flexShrink: \"0\",\n align: \"end\",\n style,\n className,\n children\n }\n);\nvar Button3 = (props) => {\n const superinterfaceContext = useSuperinterfaceContext();\n const { isDisabled, isLoading, isFileLoading } = useMessageFormContext();\n if (isLoading) {\n return /* @__PURE__ */ jsx63(\n IconButton5,\n {\n type: \"button\",\n onClick: () => superinterfaceContext.createMessageAbortControllerRef.current?.abort(),\n ...props,\n children: /* @__PURE__ */ jsx63(StopIcon, {})\n }\n );\n }\n return /* @__PURE__ */ jsx63(\n IconButton5,\n {\n type: \"submit\",\n disabled: isDisabled || isFileLoading,\n ...props,\n children: /* @__PURE__ */ jsx63(ArrowUpIcon2, {})\n }\n );\n};\nvar Submit = (props) => /* @__PURE__ */ jsx63(Root3, { ...props, children: /* @__PURE__ */ jsx63(Button3, {}) });\nSubmit.Root = Root3;\nSubmit.Button = Button3;\n\n// src/components/threads/Thread/MessageForm/Root/index.tsx\nimport {\n useQueryClient as useQueryClient5\n} from \"@tanstack/react-query\";\nimport { useMemo as useMemo11, useState as useState2 } from \"react\";\nimport { useForm, FormProvider } from \"react-hook-form\";\nimport { Box as Box13 } from \"@radix-ui/themes\";\n\n// src/components/threads/Thread/MessageForm/Root/lib/formOptions.ts\nimport { z } from \"zod\";\nimport { zodResolver } from \"@hookform/resolvers/zod\";\nvar schema = z.object({\n content: z.string().min(1)\n});\nvar formOptions = {\n resolver: zodResolver(schema)\n};\n\n// src/components/threads/Thread/MessageForm/Root/index.tsx\nimport { partob as partob2 } from \"radash\";\nimport { jsx as jsx64 } from \"react/jsx-runtime\";\nvar Root4 = ({\n children,\n onSubmit: onSubmitArg,\n isDisabled: isDisabledArg,\n style,\n className\n}) => {\n const [files, setFiles] = useState2([]);\n const formProps = useForm(formOptions);\n const {\n handleSubmit,\n formState: { isSubmitting },\n reset,\n watch\n } = formProps;\n const { addToast } = useToasts();\n const queryClient = useQueryClient5();\n const threadContext = useSuperinterfaceContext();\n const { createMessage } = useCreateMessage({\n onError: createMessageDefaultOnError({\n queryClient,\n addToast,\n threadContext\n })\n });\n const isMutatingMessage = useIsMutatingMessage();\n const isFileLoading = useMemo11(() => files.some((file) => isOptimistic({ id: file.id })), [files]);\n const isLoading = useMemo11(() => isMutatingMessage || isSubmitting, [\n isMutatingMessage,\n isSubmitting\n ]);\n const { latestMessage } = useLatestMessage();\n const isDisabled = useMemo11(() => (\n // @ts-ignore-next-line\n latestMessage?.metadata?.isBlocking || isDisabledArg\n ), [latestMessage, isDisabledArg]);\n const onSubmit = onSubmitArg ? partob2(onSubmitArg, { reset, createMessage }) : async (data2) => {\n if (isFileLoading) return;\n if (isLoading) return;\n if (isDisabled) return;\n reset();\n setFiles([]);\n const attachments = files.map((file) => ({\n file_id: file.id,\n tools: [\n {\n type: \"file_search\"\n }\n ]\n }));\n await createMessage({\n // @ts-ignore-next-line\n content: data2.content,\n ...attachments.length ? { attachments } : {}\n });\n };\n const content = watch(\"content\");\n return /* @__PURE__ */ jsx64(\n MessageFormContext.Provider,\n {\n value: {\n isDisabled,\n isLoading,\n files,\n setFiles,\n isFileLoading,\n content\n },\n children: /* @__PURE__ */ jsx64(FormProvider, { ...formProps, children: /* @__PURE__ */ jsx64(\n Box13,\n {\n asChild: true,\n flexShrink: \"0\",\n style,\n className,\n children: /* @__PURE__ */ jsx64(\n \"form\",\n {\n onSubmit: handleSubmit(onSubmit),\n children\n }\n )\n }\n ) })\n }\n );\n};\n\n// src/components/threads/Thread/MessageForm/Field/index.tsx\nimport { useFormContext as useFormContext2 } from \"react-hook-form\";\nimport {\n Container as RadixContainer,\n Flex as Flex23\n} from \"@radix-ui/themes\";\n\n// src/components/threads/Thread/MessageForm/Field/Control.tsx\nimport {\n Flex as Flex20\n} from \"@radix-ui/themes\";\nimport { useFormContext } from \"react-hook-form\";\n\n// src/hooks/misc/usePrevious.ts\nimport { useEffect as useEffect4, useRef as useRef4 } from \"react\";\nvar usePrevious = (state) => {\n const ref = useRef4();\n useEffect4(() => {\n ref.current = state;\n });\n return ref.current;\n};\n\n// src/components/threads/Thread/MessageForm/Field/Control.tsx\nimport { useContext as useContext11, useMemo as useMemo12, useRef as useRef5, useEffect as useEffect5 } from \"react\";\n\n// src/components/textareas/TextareaBase/index.tsx\nimport { forwardRef as forwardRef3 } from \"react\";\nimport TextareaAutosize from \"react-textarea-autosize\";\nimport { Fragment as Fragment3, jsx as jsx65, jsxs as jsxs22 } from \"react/jsx-runtime\";\nvar TextareaBase = forwardRef3(function TextareaBase2({\n style,\n className,\n ...rest\n}, ref) {\n return /* @__PURE__ */ jsxs22(Fragment3, { children: [\n /* @__PURE__ */ jsx65(\"style\", { children: `.superinterface-textarea { min-height: inherit; height: 30px; }\n.superinterface-textarea::placeholder { color: var(--gray-a10); }` }),\n /* @__PURE__ */ jsx65(\n TextareaAutosize,\n {\n ref,\n className: `rt-reset superinterface-textarea ${className ?? \"\"}`,\n style: {\n border: 0,\n outline: 0,\n boxSizing: \"border-box\",\n resize: \"none\",\n color: \"var(--gray-12)\",\n flexGrow: 1,\n display: \"flex\",\n ...style ?? {}\n },\n ...rest\n }\n )\n ] });\n});\n\n// src/components/threads/Thread/MessageForm/Field/Control.tsx\nimport { jsx as jsx66 } from \"react/jsx-runtime\";\nvar Root5 = ({\n children,\n style,\n className\n}) => /* @__PURE__ */ jsx66(\n Flex20,\n {\n flexGrow: \"1\",\n pt: \"4px\",\n style,\n className,\n children\n }\n);\nvar Input = (props) => {\n const assistantNameContext = useContext11(AssistantNameContext);\n const {\n register\n } = useFormContext();\n const { isDisabled, isLoading } = useMessageFormContext();\n const isSubmitDisabled = useMemo12(() => isDisabled || isLoading, [isDisabled, isLoading]);\n const isDisabledPrevious = usePrevious(isDisabled);\n const textareaRef = useRef5(null);\n const textareaProps = register(\"content\");\n useEffect5(() => {\n if (isDisabled) return;\n if (!isDisabledPrevious) return;\n if (!textareaRef.current) return;\n textareaRef.current.focus();\n }, [isDisabled, isDisabledPrevious, textareaProps]);\n return /* @__PURE__ */ jsx66(\n TextareaBase,\n {\n minRows: 1,\n placeholder: props.placeholder ?? `Message ${assistantNameContext}...`,\n disabled: isDisabled,\n onKeyDown: (e) => {\n if (e.key === \"Enter\" && !e.shiftKey) {\n e.preventDefault();\n if (isSubmitDisabled) return;\n e.currentTarget.form?.requestSubmit();\n }\n },\n ...textareaProps,\n ...props,\n ref: (e) => {\n textareaProps.ref(e);\n textareaRef.current = e;\n }\n }\n );\n};\nvar Control = (props) => /* @__PURE__ */ jsx66(Root5, { ...props, children: /* @__PURE__ */ jsx66(Input, {}) });\nControl.Root = Root5;\nControl.Input = Input;\n\n// src/components/threads/Thread/MessageForm/Field/Files/Preview.tsx\nimport {\n Flex as Flex21,\n Card as Card2,\n Spinner as Spinner2,\n Text as Text7,\n IconButton as IconButton6\n} from \"@radix-ui/themes\";\nimport {\n FileIcon as FileIcon2,\n Cross2Icon\n} from \"@radix-ui/react-icons\";\nimport { jsx as jsx67, jsxs as jsxs23 } from \"react/jsx-runtime\";\nvar Preview = (props) => {\n const { files, setFiles } = useMessageFormContext();\n if (!files.length) {\n return null;\n }\n return /* @__PURE__ */ jsx67(\n Flex21,\n {\n flexBasis: \"100%\",\n direction: \"column\",\n pb: \"2\",\n gap: \"1\",\n ...props,\n children: files.map((file) => /* @__PURE__ */ jsx67(\n Card2,\n {\n variant: \"ghost\",\n children: /* @__PURE__ */ jsxs23(\n Flex21,\n {\n align: \"center\",\n justify: \"between\",\n gap: \"1\",\n children: [\n /* @__PURE__ */ jsxs23(\n Flex21,\n {\n align: \"center\",\n gap: \"1\",\n flexShrink: \"1\",\n minWidth: \"0\",\n maxWidth: \"250px\",\n children: [\n /* @__PURE__ */ jsx67(\n Flex21,\n {\n flexShrink: \"0\",\n children: /* @__PURE__ */ jsx67(\n Spinner2,\n {\n loading: isOptimistic({ id: file.id }),\n children: /* @__PURE__ */ jsx67(FileIcon2, {})\n }\n )\n }\n ),\n /* @__PURE__ */ jsx67(\n Text7,\n {\n size: \"2\",\n truncate: true,\n wrap: \"nowrap\",\n children: file.filename\n }\n )\n ]\n }\n ),\n /* @__PURE__ */ jsx67(\n Flex21,\n {\n flexShrink: \"0\",\n children: /* @__PURE__ */ jsx67(\n IconButton6,\n {\n onClick: () => setFiles((prev) => prev.filter((prevFile) => prevFile.id !== file.id)),\n color: \"gray\",\n variant: \"ghost\",\n size: \"1\",\n children: /* @__PURE__ */ jsx67(Cross2Icon, {})\n }\n )\n }\n )\n ]\n }\n )\n },\n file.id\n ))\n }\n );\n};\n\n// src/components/threads/Thread/MessageForm/Field/Files/Control.tsx\nimport { useCallback as useCallback2 } from \"react\";\nimport { omit as omit4 } from \"radash\";\nimport dayjs2 from \"dayjs\";\nimport {\n FilePlusIcon\n} from \"@radix-ui/react-icons\";\nimport {\n IconButton as IconButton7,\n Flex as Flex22\n} from \"@radix-ui/themes\";\n\n// src/hooks/files/useCreateFile/index.ts\nimport {\n useMutation as useMutation2,\n useQueryClient as useQueryClient6\n} from \"@tanstack/react-query\";\n\n// src/hooks/files/useCreateFile/lib/mutationOptions/mutationFn/body/formData.ts\nvar formData = (variables) => {\n const data2 = new FormData();\n for (const key2 in variables) {\n data2.append(key2, variables[key2]);\n }\n return data2;\n};\n\n// src/hooks/files/useCreateFile/lib/mutationOptions/mutationFn/body/index.ts\nvar body2 = ({\n variables,\n superinterfaceContext\n}) => {\n if (variables.threadId) return formData(variables);\n if (!variables.assistantId) return formData(variables);\n if (!superinterfaceContext.threadIdStorageOptions?.get) return formData(variables);\n const threadId = superinterfaceContext.threadIdStorageOptions.get({ assistantId: variables.assistantId });\n if (!threadId) return formData(variables);\n return formData({\n ...variables,\n threadId\n });\n};\n\n// src/hooks/files/useCreateFile/lib/mutationOptions/mutationFn/index.ts\nvar mutationFn2 = ({\n superinterfaceContext,\n queryClient,\n threadContext\n}) => async (variables) => {\n const response = await fetch(`${superinterfaceContext.baseUrl}/files`, {\n method: \"POST\",\n body: body2({\n variables,\n superinterfaceContext\n })\n });\n const result = await response.json();\n return result;\n};\n\n// src/hooks/files/useCreateFile/lib/mutationOptions/index.ts\nvar mutationOptions2 = ({\n queryClient,\n threadContext,\n superinterfaceContext,\n onError\n}) => {\n const mutationKey = [\"createFile\", threadContext.variables];\n return {\n mutationFn: mutationFn2({\n queryClient,\n superinterfaceContext,\n threadContext\n }),\n onError,\n ...threadContext.defaultOptions.mutations,\n ...queryClient.getMutationDefaults(mutationKey),\n mutationKey\n };\n};\n\n// src/hooks/files/useCreateFile/index.ts\nvar useCreateFile = ({\n onError = () => {\n }\n} = {\n onError: () => {\n }\n}) => {\n const queryClient = useQueryClient6();\n const superinterfaceContext = useSuperinterfaceContext();\n const threadContext = useSuperinterfaceContext();\n const props = useMutation2(mutationOptions2({\n queryClient,\n threadContext,\n superinterfaceContext,\n onError\n }));\n return {\n ...props,\n createFile: (...args) => {\n const [firstArg, ...restArgs] = args;\n return props.mutateAsync({\n ...threadContext.variables,\n ...firstArg\n }, ...restArgs);\n }\n };\n};\n\n// src/components/threads/Thread/MessageForm/Field/Files/Control.tsx\nimport { jsx as jsx68, jsxs as jsxs24 } from \"react/jsx-runtime\";\nvar accept = `.c,text/x-c,\n.cs,text/x-csharp,\n.cpp,text/x-c++,\n.doc,application/msword,\n.docx,application/vnd.openxmlformats-officedocument.wordprocessingml.document,\n.html,text/html,\n.java,text/x-java,\n.json,application/json,\n.md,text/markdown,\n.pdf,application/pdf,\n.php,text/x-php,\n.pptx,application/vnd.openxmlformats-officedocument.presentationml.presentation,\n.py,text/x-python,\n.py,text/x-script.python,\n.rb,text/x-ruby,\n.tex,text/x-tex,\n.txt,text/plain,\n.css,text/css,\n.js,text/javascript,\n.sh,application/x-sh,\n.ts,application/typescript`;\nvar Control2 = (props) => {\n const { isDisabled, isLoading, setFiles } = useMessageFormContext();\n const { createFile } = useCreateFile();\n const { addToast } = useToasts();\n const onChange = useCallback2(async (event) => {\n const fileObjects = event.target.files;\n if (!fileObjects) return;\n const newFiles = Array.from(fileObjects).map((fileObject) => ({\n id: optimisticId(),\n filename: fileObject.name,\n object: \"file\",\n purpose: \"assistants\",\n created_at: dayjs2().unix(),\n bytes: fileObject.size,\n status: \"processed\",\n fileObject\n }));\n setFiles((prev) => [\n ...prev,\n ...newFiles.map((file) => omit4(file, [\"fileObject\"]))\n ]);\n for await (const newFile of newFiles) {\n await createFile(\n {\n file: newFile.fileObject\n },\n {\n onSuccess: ({\n file\n }) => setFiles((prev) => [\n ...prev.filter((prevFile) => prevFile.id !== newFile.id),\n file\n ]),\n onError: () => {\n addToast({ type: \"error\", message: \"Could not upload file. Please try again.\" });\n setFiles((prev) => prev.filter((prevFile) => prevFile.id !== newFile.id));\n }\n }\n );\n }\n }, [addToast, createFile, setFiles]);\n return /* @__PURE__ */ jsx68(\n Flex22,\n {\n pt: \"2\",\n pr: \"2\",\n flexGrow: \"0\",\n ...props,\n children: /* @__PURE__ */ jsxs24(\n IconButton7,\n {\n type: \"button\",\n variant: \"ghost\",\n color: \"gray\",\n disabled: isDisabled || isLoading,\n style: {\n position: \"relative\",\n overflow: \"hidden\"\n },\n children: [\n /* @__PURE__ */ jsx68(FilePlusIcon, {}),\n /* @__PURE__ */ jsx68(\n \"input\",\n {\n type: \"file\",\n multiple: true,\n accept,\n onChange,\n style: {\n cursor: \"pointer\",\n position: \"absolute\",\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n opacity: 0\n }\n }\n )\n ]\n }\n )\n }\n );\n};\n\n// src/components/threads/Thread/MessageForm/Field/Files/index.tsx\nvar Files = {\n Preview,\n Control: Control2\n};\n\n// src/components/threads/Thread/MessageForm/Field/index.tsx\nimport { jsx as jsx69 } from \"react/jsx-runtime\";\nvar Root6 = ({\n children,\n className,\n style\n}) => {\n const {\n formState: {\n errors\n }\n } = useFormContext2();\n return /* @__PURE__ */ jsx69(\n RadixContainer,\n {\n size: \"2\",\n flexGrow: \"0\",\n className,\n style,\n children: /* @__PURE__ */ jsx69(\n Flex23,\n {\n direction: \"column\",\n flexShrink: \"0\",\n children: /* @__PURE__ */ jsx69(\n Flex23,\n {\n direction: \"column\",\n flexShrink: \"0\",\n children: /* @__PURE__ */ jsx69(\n Flex23,\n {\n style: {\n borderRadius: \"var(--radius-2)\",\n borderWidth: \"1px\",\n borderStyle: \"solid\",\n borderColor: errors.content ? \"var(--red-9)\" : \"var(--gray-5)\",\n ...errors.content ? { backgroundColor: \"var(--red-2)\" } : {}\n },\n p: \"2\",\n pl: \"3\",\n wrap: \"wrap\",\n children\n }\n )\n }\n )\n }\n )\n }\n );\n};\nvar Field = {\n Root: Root6,\n Control,\n Files\n};\n\n// src/components/threads/Thread/MessageForm/index.tsx\nimport { jsx as jsx70, jsxs as jsxs25 } from \"react/jsx-runtime\";\nvar MessageForm = (props) => /* @__PURE__ */ jsx70(Root4, { ...props, children: /* @__PURE__ */ jsxs25(Field.Root, { children: [\n /* @__PURE__ */ jsx70(Field.Control, {}),\n /* @__PURE__ */ jsx70(Submit, {})\n] }) });\nMessageForm.Root = Root4;\nMessageForm.Field = Field;\nMessageForm.Submit = Submit;\n\n// src/components/threads/Thread/Root/index.tsx\nimport { Flex as Flex25 } from \"@radix-ui/themes\";\n\n// src/components/threads/Thread/Provider/index.tsx\nvar Provider2 = SuperinterfaceProvider;\n\n// src/components/toasts/ToastsProvider/index.tsx\nimport { useState as useState3, useCallback as useCallback3 } from \"react\";\nimport * as Toast2 from \"@radix-ui/react-toast\";\n\n// src/components/toasts/ToastsProvider/CustomToast.tsx\nimport * as Toast from \"@radix-ui/react-toast\";\nimport {\n Card as Card3,\n Text as Text8,\n Flex as Flex24\n} from \"@radix-ui/themes\";\nimport {\n CheckCircledIcon as CheckCircledIcon2,\n CrossCircledIcon\n} from \"@radix-ui/react-icons\";\nimport { jsx as jsx71, jsxs as jsxs26 } from \"react/jsx-runtime\";\nvar CustomToast = ({\n toast\n}) => /* @__PURE__ */ jsx71(Toast.Root, { children: /* @__PURE__ */ jsx71(Card3, { children: /* @__PURE__ */ jsx71(Toast.Title, { children: /* @__PURE__ */ jsxs26(Flex24, { children: [\n /* @__PURE__ */ jsx71(\n Flex24,\n {\n pr: \"2\",\n height: \"14px\",\n align: \"center\",\n children: toast.type === \"success\" ? /* @__PURE__ */ jsx71(\n CheckCircledIcon2,\n {\n color: \"var(--accent-9)\"\n }\n ) : /* @__PURE__ */ jsx71(\n CrossCircledIcon,\n {\n color: \"var(--red-9)\"\n }\n )\n }\n ),\n /* @__PURE__ */ jsx71(\n Text8,\n {\n weight: \"medium\",\n size: \"1\",\n children: toast.message\n }\n )\n] }) }) }) });\n\n// src/components/toasts/ToastsProvider/index.tsx\nimport { jsx as jsx72, jsxs as jsxs27 } from \"react/jsx-runtime\";\nvar ToastsProvider = ({\n children,\n bottom = 0\n}) => {\n const [toasts, setToasts] = useState3([]);\n const addToast = useCallback3((toast) => setToasts((prevToasts) => [\n ...prevToasts,\n toast\n ]), []);\n return /* @__PURE__ */ jsx72(\n ToastsContext.Provider,\n {\n value: {\n toasts,\n addToast\n },\n children: /* @__PURE__ */ jsxs27(Toast2.Provider, { children: [\n children,\n Array.from(toasts).map((toast, index) => /* @__PURE__ */ jsx72(\n CustomToast,\n {\n toast\n },\n index\n )),\n /* @__PURE__ */ jsx72(\n Toast2.Viewport,\n {\n style: {\n position: \"absolute\",\n bottom,\n right: 0,\n display: \"flex\",\n flexDirection: \"column\",\n padding: \"var(--space-5)\",\n gap: \"var(--space-3)\",\n width: \"390px\",\n maxWidth: \"100vw\",\n margin: 0,\n listStyle: \"none\",\n zIndex: 99999999999999,\n outline: \"none\"\n }\n }\n )\n ] })\n }\n );\n};\n\n// src/components/threads/Thread/Root/index.tsx\nimport { jsx as jsx73 } from \"react/jsx-runtime\";\nvar Root8 = ({\n children,\n style,\n className,\n ...rest\n}) => /* @__PURE__ */ jsx73(ToastsProvider, { bottom: \"var(--space-9)\", children: /* @__PURE__ */ jsx73(Provider2, { ...rest, children: /* @__PURE__ */ jsx73(\n Flex25,\n {\n direction: \"column\",\n flexGrow: \"1\",\n className,\n style,\n children\n }\n) }) });\n\n// src/components/threads/Thread/index.tsx\nimport { jsx as jsx74, jsxs as jsxs28 } from \"react/jsx-runtime\";\nvar Thread = (props) => /* @__PURE__ */ jsxs28(Root8, { ...props, children: [\n /* @__PURE__ */ jsx74(Messages, {}),\n /* @__PURE__ */ jsx74(MessageForm, {})\n] });\nThread.Root = Root8;\nThread.Messages = Messages;\nThread.MessageForm = MessageForm;\n\n// src/hooks/messages/useMessageContext/index.ts\nimport { useContext as useContext12 } from \"react\";\nvar useMessageContext = () => useContext12(MessageContext);\n\n// src/hooks/assistants/useAssistant/index.ts\nimport { useMemo as useMemo13 } from \"react\";\nimport {\n useQuery\n} from \"@tanstack/react-query\";\n\n// src/hooks/assistants/useAssistant/lib/queryOptions/index.ts\nimport { queryOptions as tanstackQueryOptions } from \"@tanstack/react-query\";\n\n// src/hooks/assistants/useAssistant/lib/queryOptions/queryFn.ts\nvar queryFn = ({\n superinterfaceContext\n}) => async ({\n queryKey\n}) => {\n const [_key, { assistantId }] = queryKey;\n const params = new URLSearchParams({\n publicApiKey: superinterfaceContext.variables.publicApiKey\n });\n return fetch(`${superinterfaceContext.baseUrl}/assistants/${assistantId}?${params}`).then(async (response) => {\n if (response.status !== 200) {\n try {\n const errorResponse = await response.json();\n throw new Error(errorResponse.error);\n } catch (error) {\n throw new Error(\"Failed to fetch\");\n }\n }\n return response.json();\n });\n};\n\n// src/hooks/assistants/useAssistant/lib/queryOptions/index.ts\nvar queryOptions2 = ({\n assistantId,\n superinterfaceContext\n}) => tanstackQueryOptions({\n queryKey: [\"assistants\", { assistantId }],\n queryFn: queryFn({ superinterfaceContext })\n});\n\n// src/hooks/assistants/useAssistant/index.ts\nvar useAssistant = ({\n assistantId\n}) => {\n const superinterfaceContext = useSuperinterfaceContext();\n const props = useQuery(queryOptions2({\n assistantId,\n superinterfaceContext\n }));\n return useMemo13(() => ({\n ...props,\n assistant: props.data ? props.data.assistant : null\n }), [props]);\n};\n\n// src/components/threads/ThreadDialog/Provider/index.tsx\nimport { useState as useState4 } from \"react\";\n\n// src/contexts/threads/ThreadDialogContext/index.ts\nimport { createContext as createContext11 } from \"react\";\nvar ThreadDialogContext = createContext11({\n isOpen: false,\n setIsOpen: () => {\n }\n});\n\n// src/hooks/threads/useThreadDialogContext/index.ts\nimport { useContext as useContext13 } from \"react\";\nvar useThreadDialogContext = () => useContext13(ThreadDialogContext);\n\n// src/components/threads/ThreadDialog/Provider/index.tsx\nimport { jsx as jsx75 } from \"react/jsx-runtime\";\nvar Provider4 = ({\n children\n}) => {\n const threadDialogContext = useThreadDialogContext();\n const [isOpen, setIsOpen] = useState4(threadDialogContext.isOpen);\n return /* @__PURE__ */ jsx75(\n ThreadDialogContext.Provider,\n {\n value: {\n isOpen,\n setIsOpen\n },\n children\n }\n );\n};\n\n// src/components/threads/ThreadDialog/Root/index.tsx\nimport { jsx as jsx76 } from \"react/jsx-runtime\";\nvar Root9 = ({\n children\n}) => /* @__PURE__ */ jsx76(Provider4, { children });\n\n// src/components/threads/ThreadDialog/Trigger/index.tsx\nimport {\n Flex as Flex26\n} from \"@radix-ui/themes\";\n\n// src/components/threads/ThreadDialog/Trigger/Button.tsx\nimport {\n IconButton as IconButton8\n} from \"@radix-ui/themes\";\nimport {\n ChatBubbleIcon\n} from \"@radix-ui/react-icons\";\nimport { jsx as jsx77 } from \"react/jsx-runtime\";\nvar Button4 = (props) => /* @__PURE__ */ jsx77(\n IconButton8,\n {\n size: \"4\",\n radius: \"full\",\n ...props,\n children: /* @__PURE__ */ jsx77(ChatBubbleIcon, {})\n }\n);\n\n// src/components/threads/ThreadDialog/Trigger/index.tsx\nimport { jsx as jsx78 } from \"react/jsx-runtime\";\nvar Root10 = ({\n children,\n style,\n className\n}) => {\n const { setIsOpen, isOpen } = useThreadDialogContext();\n return /* @__PURE__ */ jsx78(\n Flex26,\n {\n display: {\n initial: isOpen ? \"none\" : \"flex\",\n sm: \"flex\"\n },\n onClick: () => setIsOpen((prev) => !prev),\n direction: \"column\",\n flexShrink: \"0\",\n justify: \"end\",\n align: \"end\",\n position: \"fixed\",\n bottom: \"24px\",\n right: \"24px\",\n className,\n style: {\n zIndex: 9999999999,\n ...style ?? {}\n },\n children\n }\n );\n};\nvar Trigger = (args) => /* @__PURE__ */ jsx78(Root10, { ...args, children: /* @__PURE__ */ jsx78(Button4, {}) });\nTrigger.Root = Root10;\nTrigger.Button = Button4;\n\n// src/components/threads/ThreadDialog/Content/index.tsx\nimport {\n Card as Card4,\n Inset as Inset2,\n Flex as Flex28\n} from \"@radix-ui/themes\";\n\n// src/components/threads/ThreadDialog/Close/index.tsx\nimport {\n Cross1Icon\n} from \"@radix-ui/react-icons\";\nimport {\n IconButton as IconButton9,\n Flex as Flex27\n} from \"@radix-ui/themes\";\nimport { jsx as jsx79 } from \"react/jsx-runtime\";\nvar Close = () => {\n const { setIsOpen, isOpen } = useThreadDialogContext();\n return /* @__PURE__ */ jsx79(\n Flex27,\n {\n display: {\n initial: isOpen ? \"flex\" : \"none\",\n sm: \"none\"\n },\n onClick: () => setIsOpen((prev) => !prev),\n direction: \"column\",\n flexShrink: \"0\",\n justify: \"end\",\n align: \"end\",\n position: \"absolute\",\n top: \"24px\",\n right: \"24px\",\n style: {\n zIndex: 9999999999\n },\n children: /* @__PURE__ */ jsx79(\n IconButton9,\n {\n size: \"2\",\n variant: \"soft\",\n children: /* @__PURE__ */ jsx79(Cross1Icon, {})\n }\n )\n }\n );\n};\n\n// src/components/threads/ThreadDialog/Content/index.tsx\nimport { jsx as jsx80, jsxs as jsxs29 } from \"react/jsx-runtime\";\nvar Root11 = ({\n children,\n className,\n style\n}) => {\n const { isOpen } = useThreadDialogContext();\n if (!isOpen) return null;\n return /* @__PURE__ */ jsx80(\n Flex28,\n {\n className,\n direction: \"column\",\n justify: \"end\",\n position: \"fixed\",\n bottom: {\n initial: \"0\",\n sm: \"72px\"\n },\n right: {\n initial: \"0\",\n sm: \"24px\"\n },\n maxHeight: {\n initial: void 0,\n sm: \"720px\"\n },\n maxWidth: {\n initial: void 0,\n sm: \"400px\"\n },\n width: \"100%\",\n height: {\n initial: \"100%\",\n sm: \"calc(100% - 96px)\"\n },\n style: {\n zIndex: 9999999999,\n ...style\n },\n children: /* @__PURE__ */ jsxs29(\n Card4,\n {\n mb: {\n initial: void 0,\n sm: \"3\"\n },\n style: {\n position: \"relative\",\n display: \"flex\",\n flexGrow: 1\n },\n children: [\n /* @__PURE__ */ jsx80(\n Inset2,\n {\n clip: \"padding-box\",\n side: \"all\",\n pb: \"current\",\n style: {\n display: \"flex\",\n flexGrow: 1\n },\n children\n }\n ),\n /* @__PURE__ */ jsx80(Close, {})\n ]\n }\n )\n }\n );\n};\nvar Messages2 = ({\n className,\n style\n}) => /* @__PURE__ */ jsx80(\n Thread.Messages,\n {\n className,\n style: {\n paddingTop: \"var(--space-5)\",\n paddingRight: \"var(--space-5)\",\n paddingLeft: \"var(--space-5)\",\n ...style\n }\n }\n);\nvar FormContainer = ({\n children,\n className,\n style\n}) => /* @__PURE__ */ jsx80(\n Flex28,\n {\n direction: \"column\",\n pl: \"5\",\n pr: \"5\",\n pb: \"3\",\n flexShrink: \"0\",\n className,\n style,\n children\n }\n);\nvar Content7 = (props) => /* @__PURE__ */ jsx80(Root11, { ...props, children: /* @__PURE__ */ jsxs29(Thread.Root, { children: [\n /* @__PURE__ */ jsx80(Messages2, {}),\n /* @__PURE__ */ jsx80(FormContainer, { children: /* @__PURE__ */ jsx80(Thread.MessageForm, {}) })\n] }) });\nContent7.Root = Root11;\nContent7.Messages = Messages2;\nContent7.FormContainer = FormContainer;\n\n// src/components/threads/ThreadDialog/index.tsx\nimport { jsx as jsx81, jsxs as jsxs30 } from \"react/jsx-runtime\";\nvar ThreadDialog = () => /* @__PURE__ */ jsxs30(Root9, { children: [\n /* @__PURE__ */ jsx81(Content7, {}),\n /* @__PURE__ */ jsx81(Trigger, {})\n] });\nThreadDialog.Root = Root9;\nThreadDialog.Trigger = Trigger;\nThreadDialog.Content = Content7;\n\n// src/components/threads/AudioThread/Root/index.tsx\nimport { Flex as Flex29 } from \"@radix-ui/themes\";\n\n// src/contexts/threads/AudioThreadContext/index.ts\nimport { createContext as createContext12 } from \"react\";\nvar AudioThreadContext = createContext12({\n status: \"idle\",\n recorderProps: {\n status: \"idle\",\n start: async () => {\n },\n stop: async () => {\n },\n pause: async () => {\n },\n resume: async () => {\n },\n visualizationAnalyser: null\n },\n // @ts-ignore-next-line\n messageAudioProps: {\n visualizationAnalyser: null,\n playing: false,\n paused: false,\n isReady: false,\n play: async () => {\n },\n pause: async () => {\n }\n }\n});\n\n// src/hooks/misc/usePermission/index.ts\nimport { useEffect as useEffect6, useState as useState5 } from \"react\";\n\n// src/hooks/misc/usePermission/util.ts\nvar noop = () => {\n};\nfunction on(obj, ...args) {\n if (obj && obj.addEventListener) {\n obj.addEventListener(...args);\n }\n}\nfunction off(obj, ...args) {\n if (obj && obj.removeEventListener) {\n obj.removeEventListener(...args);\n }\n}\n\n// src/hooks/misc/usePermission/index.ts\nvar usePermission = (permissionDesc) => {\n const [state, setState] = useState5(\"\");\n useEffect6(() => {\n let mounted = true;\n let permissionStatus = null;\n const onChange = () => {\n if (!mounted) {\n return;\n }\n setState(() => permissionStatus?.state ?? \"\");\n };\n navigator.permissions.query(permissionDesc).then((status) => {\n permissionStatus = status;\n on(permissionStatus, \"change\", onChange);\n onChange();\n }).catch(noop);\n return () => {\n permissionStatus && off(permissionStatus, \"change\", onChange);\n mounted = false;\n permissionStatus = null;\n };\n }, [permissionDesc]);\n return state;\n};\n\n// src/components/threads/AudioThread/Root/lib/blobToData.ts\nvar blobToData = (blob) => new Promise((resolve) => {\n const reader = new FileReader();\n reader.onloadend = () => resolve(reader.result);\n reader.readAsDataURL(blob);\n});\n\n// src/hooks/audioThreads/useStatus/index.ts\nimport { useMemo as useMemo14 } from \"react\";\nvar useStatus = ({\n messageAudioProps,\n recorderProps,\n createMessageProps\n}) => {\n const latestMessageProps = useLatestMessage();\n const status = useMemo14(() => {\n if (recorderProps.status === \"recording\") return \"recording\";\n if (createMessageProps.isPending) return \"creatingMessage\";\n if (messageAudioProps.paused || !messageAudioProps.isAudioPlayed) return \"playerPaused\";\n if (messageAudioProps.playing || messageAudioProps.isPending) return \"playing\";\n if (!messageAudioProps.isAudioPlayed && !messageAudioProps.isReady) return \"loading\";\n if (latestMessageProps.latestMessage?.status === \"in_progress\") return \"creatingMessage\";\n if (recorderProps.status === \"idle\") return \"idle\";\n if (recorderProps.status === \"paused\") return \"recorderPaused\";\n return \"loading\";\n }, [\n latestMessageProps,\n messageAudioProps,\n recorderProps,\n createMessageProps\n ]);\n return {\n status\n };\n};\n\n// src/hooks/audioThreads/useRecorder/index.ts\nimport dayjs3 from \"dayjs\";\nimport { useAudioCapture } from \"use-audio-capture\";\nimport { useMemo as useMemo15, useRef as useRef7, useState as useState6, useCallback as useCallback4, useEffect as useEffect8 } from \"react\";\nimport { useAudioPlayer } from \"react-use-audio-player\";\n\n// src/hooks/misc/useInterval.ts\nimport { useEffect as useEffect7, useRef as useRef6 } from \"react\";\nvar useInterval = (callback, delay) => {\n const savedCallback = useRef6(() => {\n });\n useEffect7(() => {\n savedCallback.current = callback;\n });\n useEffect7(() => {\n if (delay !== null) {\n const interval = setInterval(() => savedCallback.current(), delay || 0);\n return () => clearInterval(interval);\n }\n return void 0;\n }, [delay]);\n};\n\n// src/hooks/audioThreads/useRecorder/index.ts\nvar useRecorder = ({\n isStopOnSilence,\n onStart,\n onStop\n}) => {\n const [silenceStart, setSilenceStart] = useState6(null);\n const [noiseStart, setNoiseStart] = useState6(null);\n const [mediaStream, setMediaStream] = useState6(null);\n const [status, setStatus] = useState6(\"idle\");\n const startAudioPlayer = useAudioPlayer();\n const endAudioPlayer = useAudioPlayer();\n const [isLoaded, setIsLoaded] = useState6(false);\n useEffect8(() => {\n if (isLoaded) return;\n setIsLoaded(true);\n }, [isLoaded, startAudioPlayer, endAudioPlayer]);\n const audioCaptureProps = useAudioCapture({\n onStart: (event, opts) => {\n setStatus(\"recording\");\n setMediaStream(opts.mediaStream);\n isInited.current = false;\n if (onStart) onStart(event, opts);\n setSilenceStart(null);\n setNoiseStart(null);\n },\n onStop: async (...args) => {\n setStatus(\"stopped\");\n if (onStop) await onStop(...args);\n setSilenceStart(null);\n setNoiseStart(null);\n },\n onPause: () => {\n setStatus(\"paused\");\n setSilenceStart(null);\n setNoiseStart(null);\n },\n onResume: () => {\n setStatus(\"recording\");\n setSilenceStart(null);\n setNoiseStart(null);\n }\n });\n const [audioEngine, setAudioEngine] = useState6(null);\n const isInited = useRef7(false);\n useEffect8(() => {\n if (!mediaStream) return;\n if (isInited.current) return;\n isInited.current = true;\n const audioContext = new AudioContext();\n setAudioEngine({\n source: audioContext.createMediaStreamSource(mediaStream),\n audioContext\n });\n }, [isInited, mediaStream]);\n const visualizationAnalyser = useMemo15(() => {\n if (!audioEngine) return null;\n const result = audioEngine.audioContext.createAnalyser();\n audioEngine.source.connect(result);\n return result;\n }, [audioEngine]);\n const silenceAnalyser = useMemo15(() => {\n if (!audioEngine) return null;\n const result = audioEngine.audioContext.createAnalyser();\n result.minDecibels = -60;\n audioEngine.source.connect(result);\n return result;\n }, [audioEngine]);\n const handleSilence = useCallback4(() => {\n if (!silenceAnalyser) return;\n const frequencyData = new Uint8Array(silenceAnalyser.frequencyBinCount);\n silenceAnalyser.getByteFrequencyData(frequencyData);\n const isSilent = frequencyData.every((f) => f === 0);\n setSilenceStart((silenceStart2) => {\n if (isSilent) return silenceStart2 || dayjs3();\n return null;\n });\n setNoiseStart((noiseStart2) => {\n if (isSilent) return noiseStart2;\n return noiseStart2 || dayjs3();\n });\n requestAnimationFrame(() => handleSilence());\n }, [silenceAnalyser, setNoiseStart, setSilenceStart]);\n useEffect8(() => {\n if (!isStopOnSilence) return;\n requestAnimationFrame(() => handleSilence());\n }, [handleSilence, isStopOnSilence]);\n useInterval(() => {\n if (!isStopOnSilence) return;\n if (status !== \"recording\") return;\n if (!silenceStart) return;\n if (!noiseStart) return;\n if (!silenceStart.isBefore(dayjs3().subtract(1.5, \"second\"))) return;\n audioCaptureProps.stop();\n }, 300);\n return {\n ...audioCaptureProps,\n status,\n visualizationAnalyser\n };\n};\n\n// src/hooks/audioThreads/useMessageAudio/index.ts\nimport { useMemo as useMemo16, useRef as useRef8, useState as useState7, useEffect as useEffect9 } from \"react\";\nimport nlp from \"compromise\";\nimport { Howler } from \"howler\";\nimport { useAudioPlayer as useAudioPlayer2 } from \"react-use-audio-player\";\n\n// src/hooks/audioThreads/useMessageAudio/lib/input.ts\nimport { isEmpty as isEmpty3 } from \"radash\";\nvar input = ({\n message\n}) => {\n const textContents = message.content.filter((c) => c.type === \"text\");\n const result = textContents.map((c) => c.text.value).join(\" \");\n if (isEmpty3(result)) return null;\n return result;\n};\n\n// src/hooks/audioThreads/useMessageAudio/lib/isHtmlAudioSupported.ts\nimport { detect } from \"detect-browser\";\nvar unsupportedNames = [\n \"safari\",\n \"ios\"\n];\nvar isHtmlAudioSupported = !unsupportedNames.includes(detect()?.name || \"\");\n\n// src/hooks/audioThreads/useMessageAudio/index.ts\nvar FULL_SENTENCE_REGEX = /[\\.?!]$/;\nvar getMessageSentences = ({\n messageId,\n input: input2\n}) => {\n const sentences = nlp(input2).sentences().json();\n return sentences.map((sentence) => ({\n messageId,\n sentence: sentence.text\n }));\n};\nvar useMessageAudio = ({\n onEnd\n}) => {\n const [isAudioPlayed, setIsAudioPlayed] = useState7(false);\n const [stoppedMessageIds, setStoppedMessageIds] = useState7([]);\n const [playedMessageSentences, setPlayedMessageSentences] = useState7([]);\n const audioPlayer = useAudioPlayer2();\n const nextAudioPlayer = useAudioPlayer2();\n const superinterfaceContext = useSuperinterfaceContext();\n const [isPlaying, setIsPlaying] = useState7(false);\n const latestMessageProps = useLatestMessage();\n const unplayedMessageSentences = useMemo16(() => {\n if (!latestMessageProps.latestMessage) return [];\n if (latestMessageProps.latestMessage.role !== \"assistant\") return [];\n if (stoppedMessageIds.includes(latestMessageProps.latestMessage.id)) return [];\n const input2 = input({\n message: latestMessageProps.latestMessage\n });\n if (!input2) return [];\n const messageSentences = getMessageSentences({\n messageId: latestMessageProps.latestMessage.id,\n input: input2\n });\n return messageSentences.filter((ms) => !playedMessageSentences.find((pms) => pms.messageId === ms.messageId && pms.sentence === ms.sentence));\n }, [latestMessageProps, playedMessageSentences]);\n useEffect9(() => {\n if (isPlaying) return;\n if (audioPlayer.playing) return;\n if (!latestMessageProps.latestMessage) return;\n if (latestMessageProps.latestMessage.role !== \"assistant\") return;\n const firstUnplayedMessageSentence = unplayedMessageSentences[0];\n if (!firstUnplayedMessageSentence) {\n return;\n }\n const isFullSentence = isOptimistic({ id: latestMessageProps.latestMessage.id }) || latestMessageProps.latestMessage.status !== \"in_progress\" || FULL_SENTENCE_REGEX.test(firstUnplayedMessageSentence.sentence);\n if (!isFullSentence) return;\n setIsPlaying(true);\n setPlayedMessageSentences((prev) => [...prev, firstUnplayedMessageSentence]);\n const searchParams = new URLSearchParams({\n input: firstUnplayedMessageSentence.sentence,\n ...superinterfaceContext.variables\n });\n audioPlayer.load(`${superinterfaceContext.baseUrl}/tts?${searchParams}`, {\n format: \"mp3\",\n autoplay: isAudioPlayed,\n html5: isHtmlAudioSupported,\n onplay: () => {\n setIsAudioPlayed(true);\n },\n onstop: () => {\n setStoppedMessageIds((prev) => [...prev, firstUnplayedMessageSentence.messageId]);\n setIsPlaying(false);\n },\n onload: () => {\n const nextUnplayedMessageSentence = unplayedMessageSentences[1];\n if (!nextUnplayedMessageSentence) return;\n const isNextFullSentence = FULL_SENTENCE_REGEX.test(nextUnplayedMessageSentence.sentence);\n if (!isNextFullSentence) return;\n const nextSearchParams = new URLSearchParams({\n input: nextUnplayedMessageSentence.sentence,\n ...superinterfaceContext.variables\n });\n nextAudioPlayer.load(`${superinterfaceContext.baseUrl}/tts?${nextSearchParams}`, {\n format: \"mp3\",\n autoplay: false,\n html5: isHtmlAudioSupported\n });\n },\n onend: () => {\n setIsPlaying(false);\n if (unplayedMessageSentences.length === 1 && latestMessageProps.latestMessage.status !== \"in_progress\") {\n onEnd();\n }\n }\n });\n }, [\n unplayedMessageSentences,\n isPlaying,\n superinterfaceContext,\n latestMessageProps,\n audioPlayer,\n nextAudioPlayer,\n playedMessageSentences,\n onEnd\n ]);\n useEffect9(() => {\n if (isHtmlAudioSupported) {\n if (!Howler?._howls[0]?._sounds[0]?._node) return;\n Howler._howls[0]._sounds[0]._node.crossOrigin = \"anonymous\";\n }\n }, [audioPlayer]);\n const [audioEngine, setAudioEngine] = useState7(null);\n const isAudioEngineInited = useRef8(false);\n useEffect9(() => {\n if (!audioPlayer.playing) return;\n if (isAudioEngineInited.current) return;\n isAudioEngineInited.current = true;\n if (isHtmlAudioSupported) {\n const audioContext = new AudioContext();\n setAudioEngine({\n // @ts-ignore-next-line\n source: audioContext.createMediaElementSource(Howler._howls[0]._sounds[0]._node),\n audioContext\n });\n } else {\n setAudioEngine({\n source: Howler.masterGain,\n audioContext: Howler.ctx\n });\n }\n }, [audioPlayer, isAudioEngineInited]);\n const visualizationAnalyser = useMemo16(() => {\n if (!audioEngine) return null;\n const result = audioEngine.audioContext.createAnalyser();\n audioEngine.source.connect(audioEngine.audioContext.destination);\n audioEngine.source.connect(result);\n return result;\n }, [audioEngine]);\n const isPending = useMemo16(() => isPlaying || unplayedMessageSentences.length > 0, [isPlaying, unplayedMessageSentences]);\n return {\n isPending,\n isAudioPlayed,\n ...audioPlayer,\n visualizationAnalyser\n };\n};\n\n// src/components/threads/AudioThread/Root/index.tsx\nimport {\n useQueryClient as useQueryClient7\n} from \"@tanstack/react-query\";\nimport { jsx as jsx82 } from \"react/jsx-runtime\";\nvar Content8 = ({\n children,\n className,\n style\n}) => {\n const { addToast } = useToasts();\n const queryClient = useQueryClient7();\n const threadContext = useSuperinterfaceContext();\n const createMessageProps = useCreateMessage({\n onError: (error) => {\n createMessageDefaultOnError({\n queryClient,\n addToast,\n threadContext\n })(error);\n recorderProps.start();\n }\n });\n const recorderProps = useRecorder({\n isStopOnSilence: true,\n onStart: async () => {\n },\n onStop: async (_event, chunks) => {\n const blob = new Blob(chunks, { type: chunks[0].type });\n const audioContent = await blobToData(blob);\n return createMessageProps.createMessage({\n // @ts-ignore-next-line\n audioContent\n });\n }\n });\n const microphonePermission = usePermission({ name: \"microphone\" });\n const messageAudioProps = useMessageAudio({\n onEnd: () => {\n if (microphonePermission === \"granted\") {\n recorderProps.start();\n }\n }\n });\n const { status } = useStatus({\n recorderProps,\n createMessageProps,\n messageAudioProps\n });\n return /* @__PURE__ */ jsx82(\n AudioThreadContext.Provider,\n {\n value: {\n status,\n recorderProps,\n messageAudioProps\n },\n children: /* @__PURE__ */ jsx82(\n Flex29,\n {\n direction: \"column\",\n flexGrow: \"1\",\n p: \"9\",\n className,\n style,\n children\n }\n )\n }\n );\n};\nvar Root12 = ({\n children,\n ...rest\n}) => /* @__PURE__ */ jsx82(ToastsProvider, { children: /* @__PURE__ */ jsx82(Content8, { ...rest, children }) });\n\n// src/components/threads/AudioThread/Visualization/index.tsx\nimport { useContext as useContext15, useState as useState9, useCallback as useCallback6, useEffect as useEffect11 } from \"react\";\nimport _9 from \"lodash\";\nimport { Flex as Flex31 } from \"@radix-ui/themes\";\n\n// src/hooks/threads/useAudioThreadContext/index.ts\nimport { useContext as useContext14 } from \"react\";\nvar useAudioThreadContext = () => useContext14(AudioThreadContext);\n\n// src/components/threads/AudioThread/BarsVisualizer/index.tsx\nimport _8 from \"lodash\";\nimport {\n Flex as Flex30,\n Grid\n} from \"@radix-ui/themes\";\nimport { useState as useState8, useEffect as useEffect10, useCallback as useCallback5 } from \"react\";\nimport { cluster } from \"radash\";\nimport { jsx as jsx83 } from \"react/jsx-runtime\";\nvar barCount = 4;\nvar BarsVisualizer = ({\n visualizationAnalyser,\n backgroundColor,\n height,\n barWidth\n}) => {\n const [barHeights, setBarHeights] = useState8([]);\n const draw = useCallback5(({ visualizationAnalyser: visualizationAnalyser2 }) => {\n if (!visualizationAnalyser2) {\n setBarHeights(Array(barCount).fill(0));\n return;\n }\n const frequencyData = new Uint8Array(visualizationAnalyser2.frequencyBinCount / 15);\n visualizationAnalyser2.getByteFrequencyData(frequencyData);\n const clusteredFrequencyData = cluster(frequencyData, frequencyData.length / barCount);\n setBarHeights(\n clusteredFrequencyData.map((frequencyDataCluster) => _8.mean(frequencyDataCluster) / 255 * 100)\n );\n requestAnimationFrame(() => draw({ visualizationAnalyser: visualizationAnalyser2 }));\n }, []);\n useEffect10(() => {\n draw({ visualizationAnalyser });\n }, [draw, visualizationAnalyser]);\n return /* @__PURE__ */ jsx83(\n Grid,\n {\n columns: `${barCount}`,\n gap: \"1\",\n width: \"auto\",\n style: {\n // TODO not sure why we need this\n gridTemplateColumns: \"repeat(4, minmax(0, 1fr))\"\n },\n children: barHeights.map((barHeight, index) => /* @__PURE__ */ jsx83(\n Flex30,\n {\n direction: \"column\",\n align: \"center\",\n justify: \"center\",\n height,\n children: /* @__PURE__ */ jsx83(\n Flex30,\n {\n minHeight: \"50%\",\n maxHeight: \"100%\",\n height: `${barHeight + 20}%`,\n width: barWidth,\n style: {\n backgroundColor,\n borderRadius: \"var(--radius-6)\"\n }\n }\n )\n },\n index\n ))\n }\n );\n};\n\n// src/components/threads/AudioThread/Visualization/index.tsx\nimport { jsx as jsx84, jsxs as jsxs31 } from \"react/jsx-runtime\";\nvar Visualization = (props) => {\n const audioThreadContext = useAudioThreadContext();\n const assistantNameContext = useContext15(AssistantNameContext);\n const [scale, setScale] = useState9(0);\n const draw = useCallback6(({ visualizationAnalyser }) => {\n if (!visualizationAnalyser) {\n setScale(1);\n return;\n }\n const frequencyData = new Uint8Array(visualizationAnalyser.frequencyBinCount / 15);\n visualizationAnalyser.getByteFrequencyData(frequencyData);\n setScale(1 + _9.mean(frequencyData) / 255 / 10);\n requestAnimationFrame(() => draw({ visualizationAnalyser }));\n }, []);\n useEffect11(() => {\n draw({ visualizationAnalyser: audioThreadContext.recorderProps.visualizationAnalyser });\n }, [draw, audioThreadContext]);\n return /* @__PURE__ */ jsxs31(\n Flex31,\n {\n direction: \"column\",\n align: \"center\",\n justify: \"center\",\n mb: \"3\",\n flexGrow: \"1\",\n ...props,\n children: [\n /* @__PURE__ */ jsx84(\n Flex31,\n {\n align: \"center\",\n justify: \"center\",\n height: \"200px\",\n width: \"200px\",\n style: {\n backgroundColor: audioThreadContext.status === \"playing\" ? \"var(--accent-4)\" : \"var(--gray-4)\",\n borderRadius: \"9999px\",\n scale\n },\n children: /* @__PURE__ */ jsx84(\n BarsVisualizer,\n {\n visualizationAnalyser: audioThreadContext.messageAudioProps.visualizationAnalyser,\n backgroundColor: audioThreadContext.status === \"playing\" ? \"var(--accent-11)\" : \"var(--gray-11)\",\n height: \"40px\",\n barWidth: \"24px\"\n }\n )\n }\n ),\n /* @__PURE__ */ jsxs31(\n Flex31,\n {\n ml: \"-22.5px\",\n gap: \"3\",\n pt: \"5\",\n children: [\n /* @__PURE__ */ jsx84(AssistantAvatar, {}),\n /* @__PURE__ */ jsx84(Name, { children: assistantNameContext })\n ]\n }\n )\n ]\n }\n );\n};\n\n// src/components/threads/AudioThread/Status/StatusMessages.tsx\nimport {\n Flex as Flex32,\n Text as Text9\n} from \"@radix-ui/themes\";\nimport { jsx as jsx85, jsxs as jsxs32 } from \"react/jsx-runtime\";\nvar html = ({ texts }) => `\n .status-messages-texts:after {\n content: '${texts[0]}';\n animation: texts ${texts.length * 5}s linear infinite;\n }\n\n @keyframes texts {\n ${texts.map((_10, i) => `\n ${i * 100 / texts.length}% {\n content: \"${texts[i]}\";\n }\n `).join(\"\")}\n }`;\nvar StatusMessages = ({\n texts,\n className,\n style\n}) => /* @__PURE__ */ jsxs32(\n Flex32,\n {\n justify: \"center\",\n pb: \"5\",\n className,\n style,\n children: [\n /* @__PURE__ */ jsx85(\n Text9,\n {\n size: \"2\",\n weight: \"regular\",\n color: \"gray\",\n className: \"status-messages-texts\"\n }\n ),\n /* @__PURE__ */ jsx85(\n \"style\",\n {\n dangerouslySetInnerHTML: {\n __html: html({ texts })\n }\n }\n )\n ]\n }\n);\n\n// src/components/threads/AudioThread/Status/index.tsx\nimport { jsx as jsx86 } from \"react/jsx-runtime\";\nvar Status = (props) => {\n const audioThreadContext = useAudioThreadContext();\n if (audioThreadContext.status === \"recording\") {\n return /* @__PURE__ */ jsx86(\n StatusMessages,\n {\n texts: [\n \"Start speaking\",\n \"Listening\",\n \"Finish speaking to send\",\n \"Click the button below to send manually\"\n ],\n ...props\n }\n );\n }\n if ([\"recorderPaused\", \"idle\", \"playerPaused\"].includes(audioThreadContext.status)) {\n return /* @__PURE__ */ jsx86(\n StatusMessages,\n {\n texts: [\n \"Click the button below to activate\"\n ],\n ...props\n }\n );\n }\n if (audioThreadContext.status === \"playing\") {\n return /* @__PURE__ */ jsx86(\n StatusMessages,\n {\n texts: [\n \"Click the button below to interrupt\"\n ],\n ...props\n }\n );\n }\n return /* @__PURE__ */ jsx86(\n StatusMessages,\n {\n texts: [\n \"Thinking\"\n ],\n ...props\n }\n );\n};\n\n// src/components/threads/AudioThread/Form/index.tsx\nimport {\n Flex as Flex34\n} from \"@radix-ui/themes\";\n\n// src/components/threads/AudioThread/Form/MicIcon.tsx\nimport { jsx as jsx87 } from \"react/jsx-runtime\";\nvar MicIcon = (props) => /* @__PURE__ */ jsx87(\n \"svg\",\n {\n xmlns: \"http://www.w3.org/2000/svg\",\n fill: \"currentColor\",\n stroke: \"currentColor\",\n strokeWidth: 0,\n viewBox: \"0 0 384 512\",\n height: \"15\",\n width: \"15\",\n ...props,\n children: /* @__PURE__ */ jsx87(\n \"path\",\n {\n stroke: \"none\",\n d: \"M192 0c-53 0-96 43-96 96v160c0 53 43 96 96 96s96-43 96-96V96c0-53-43-96-96-96zM64 216c0-13.3-10.7-24-24-24s-24 10.7-24 24v40c0 89.1 66.2 162.7 152 174.4V464h-48c-13.3 0-24 10.7-24 24s10.7 24 24 24h144c13.3 0 24-10.7 24-24s-10.7-24-24-24h-48v-33.6c85.8-11.7 152-85.3 152-174.4v-40c0-13.3-10.7-24-24-24s-24 10.7-24 24v40c0 70.7-57.3 128-128 128S64 326.7 64 256v-40z\"\n }\n )\n }\n);\n\n// src/components/threads/AudioThread/Form/ActionButton/index.tsx\nimport {\n Flex as Flex33,\n IconButton as IconButton10\n} from \"@radix-ui/themes\";\nimport {\n StopIcon as StopIcon2,\n PauseIcon as PauseIcon2,\n ArrowUpIcon as ArrowUpIcon3,\n ResumeIcon\n} from \"@radix-ui/react-icons\";\nimport { jsx as jsx88, jsxs as jsxs33 } from \"react/jsx-runtime\";\nvar ActionButton = () => {\n const audioThreadContext = useAudioThreadContext();\n const superinterfaceContext = useSuperinterfaceContext();\n if (audioThreadContext.status === \"recording\") {\n return /* @__PURE__ */ jsxs33(\n Flex33,\n {\n align: \"center\",\n children: [\n /* @__PURE__ */ jsx88(\n Flex33,\n {\n mr: \"3\",\n ml: \"-7\",\n children: /* @__PURE__ */ jsx88(\n IconButton10,\n {\n onClick: audioThreadContext.recorderProps.pause,\n color: \"gray\",\n variant: \"soft\",\n size: \"1\",\n children: /* @__PURE__ */ jsx88(PauseIcon2, {})\n }\n )\n }\n ),\n /* @__PURE__ */ jsx88(\n IconButton10,\n {\n onClick: audioThreadContext.recorderProps.stop,\n highContrast: true,\n variant: \"soft\",\n size: \"4\",\n children: /* @__PURE__ */ jsx88(ArrowUpIcon3, {})\n }\n )\n ]\n }\n );\n }\n if (audioThreadContext.status === \"recorderPaused\") {\n return /* @__PURE__ */ jsx88(\n IconButton10,\n {\n onClick: audioThreadContext.recorderProps.resume,\n color: \"red\",\n size: \"4\",\n children: /* @__PURE__ */ jsx88(ResumeIcon, {})\n }\n );\n }\n if (audioThreadContext.status === \"idle\") {\n return /* @__PURE__ */ jsx88(\n IconButton10,\n {\n onClick: () => audioThreadContext.recorderProps.start(),\n size: \"4\",\n color: \"red\"\n }\n );\n }\n if (audioThreadContext.status === \"playing\") {\n return /* @__PURE__ */ jsx88(\n IconButton10,\n {\n onClick: () => {\n audioThreadContext.messageAudioProps.stop();\n superinterfaceContext.createMessageAbortControllerRef.current?.abort();\n audioThreadContext.recorderProps.start();\n },\n size: \"4\",\n color: \"gray\",\n variant: \"soft\",\n children: /* @__PURE__ */ jsx88(StopIcon2, {})\n }\n );\n }\n if (audioThreadContext.status === \"playerPaused\") {\n return /* @__PURE__ */ jsx88(\n IconButton10,\n {\n onClick: () => audioThreadContext.messageAudioProps.play(),\n size: \"4\",\n children: /* @__PURE__ */ jsx88(ResumeIcon, {})\n }\n );\n }\n return /* @__PURE__ */ jsx88(\n IconButton10,\n {\n size: \"4\",\n variant: \"soft\",\n disabled: true\n }\n );\n};\n\n// src/components/threads/AudioThread/Form/index.tsx\nimport { jsx as jsx89, jsxs as jsxs34 } from \"react/jsx-runtime\";\nvar Form = (props) => {\n const audioThreadContext = useAudioThreadContext();\n return /* @__PURE__ */ jsxs34(\n Flex34,\n {\n direction: \"column\",\n align: \"center\",\n ...props,\n children: [\n /* @__PURE__ */ jsxs34(\n Flex34,\n {\n pb: \"3\",\n align: \"center\",\n children: [\n /* @__PURE__ */ jsx89(\n Flex34,\n {\n ml: \"-22.5px\",\n mr: \"2\",\n align: \"center\",\n children: /* @__PURE__ */ jsx89(\n MicIcon,\n {\n style: {\n color: audioThreadContext.status === \"recording\" ? \"var(--accent-11)\" : \"var(--gray-11)\"\n }\n }\n )\n }\n ),\n /* @__PURE__ */ jsx89(\n Flex34,\n {\n px: \"2\",\n py: \"1\",\n style: {\n backgroundColor: audioThreadContext.status === \"recording\" ? \"var(--accent-4)\" : \"var(--gray-4)\",\n borderRadius: \"var(--radius-6)\"\n },\n children: /* @__PURE__ */ jsx89(\n BarsVisualizer,\n {\n visualizationAnalyser: audioThreadContext.recorderProps.visualizationAnalyser,\n backgroundColor: audioThreadContext.status === \"recording\" ? \"var(--accent-11)\" : \"var(--gray-11)\",\n height: \"20px\",\n barWidth: \"12px\"\n }\n )\n }\n )\n ]\n }\n ),\n /* @__PURE__ */ jsx89(ActionButton, {})\n ]\n }\n );\n};\n\n// src/components/threads/AudioThread/index.tsx\nimport { jsx as jsx90, jsxs as jsxs35 } from \"react/jsx-runtime\";\nvar AudioThread = (props) => /* @__PURE__ */ jsxs35(Root12, { ...props, children: [\n /* @__PURE__ */ jsx90(Visualization, {}),\n /* @__PURE__ */ jsx90(Status, {}),\n /* @__PURE__ */ jsx90(Form, {})\n] });\nAudioThread.Root = Root12;\nAudioThread.Visualization = Visualization;\nAudioThread.Status = Status;\nAudioThread.Form = Form;\n\n// src/components/threads/AudioThreadDialog/index.tsx\nimport { jsx as jsx91, jsxs as jsxs36 } from \"react/jsx-runtime\";\nvar AudioThreadDialog = (props) => /* @__PURE__ */ jsxs36(Root9, { ...props, children: [\n /* @__PURE__ */ jsx91(Content7.Root, { children: /* @__PURE__ */ jsx91(AudioThread, {}) }),\n /* @__PURE__ */ jsx91(Trigger, {})\n] });\nAudioThreadDialog.Root = Root9;\nAudioThreadDialog.Trigger = Trigger;\nAudioThreadDialog.Content = Content7;\n\n// src/components/markdown/MarkdownProvider/index.tsx\nimport { useMemo as useMemo17 } from \"react\";\nimport { jsx as jsx92 } from \"react/jsx-runtime\";\nvar MarkdownProvider = ({\n children,\n ...rest\n}) => {\n const prevMarkdownContext = useMarkdownContext();\n const value = useMemo17(() => merge(prevMarkdownContext, rest), [rest, prevMarkdownContext]);\n return /* @__PURE__ */ jsx92(\n MarkdownContext.Provider,\n {\n value,\n children\n }\n );\n};\n\n// src/components/avatars/Avatar.tsx\nimport { Avatar as RadixAvatar } from \"@radix-ui/themes\";\n\n// src/components/imageAvatars/ImageAvatar/index.tsx\nimport { Avatar as Avatar4 } from \"@radix-ui/themes\";\n\n// src/components/imageAvatars/ImageAvatar/lib/optimizedSrc/path.ts\nvar width = ({\n size\n}) => {\n if (size === \"1\") {\n return 48;\n } else if (size === \"2\") {\n return 64;\n } else if (size === \"3\") {\n return 96;\n } else if (size === \"4\") {\n return 96;\n } else if (size === \"5\") {\n return 128;\n } else if (size === \"6\") {\n return 256;\n } else if (size === \"7\") {\n return 256;\n } else if (size === \"8\") {\n return 256;\n } else if (size === \"9\") {\n return 384;\n }\n return 384;\n};\nvar path = ({\n imageAvatar,\n size\n}) => `/_next/image?url=${encodeURIComponent(imageAvatar.url)}&w=${width({ size })}&q=95`;\n\n// src/components/imageAvatars/ImageAvatar/lib/optimizedSrc/host.ts\nvar host = ({\n superinterfaceContext\n}) => {\n if (!superinterfaceContext.baseUrl) return \"\";\n if (!/^https?:\\/\\//i.test(superinterfaceContext.baseUrl)) return \"\";\n return new URL(superinterfaceContext.baseUrl).origin;\n};\n\n// src/components/imageAvatars/ImageAvatar/lib/optimizedSrc/index.ts\nvar optimizedSrc = ({\n imageAvatar,\n size,\n superinterfaceContext\n}) => {\n if (!imageAvatar.url) return \"\";\n if (imageAvatar.url.endsWith(\".svg\")) return imageAvatar.url;\n return `${host({ superinterfaceContext })}${path({ imageAvatar, size })}`;\n};\n\n// src/components/imageAvatars/ImageAvatar/index.tsx\nimport { jsx as jsx93 } from \"react/jsx-runtime\";\nvar ImageAvatar = ({\n imageAvatar,\n size,\n className,\n style\n}) => {\n const superinterfaceContext = useSuperinterfaceContext();\n return /* @__PURE__ */ jsx93(\n Avatar4,\n {\n className,\n style,\n fallback: \"\",\n src: optimizedSrc({ imageAvatar, size, superinterfaceContext }),\n size\n }\n );\n};\n\n// src/components/iconAvatars/IconAvatar.tsx\nimport { useMemo as useMemo18 } from \"react\";\nimport { Avatar as Avatar5 } from \"@radix-ui/themes\";\n\n// src/lib/iconAvatars/iconAvatarComponents.ts\nimport {\n BackpackIcon,\n RocketIcon,\n MagicWandIcon,\n CubeIcon,\n TargetIcon,\n DiscIcon,\n GlobeIcon,\n StarIcon,\n LightningBoltIcon as LightningBoltIcon2,\n FaceIcon,\n PersonIcon as PersonIcon2,\n HeartIcon\n} from \"@radix-ui/react-icons\";\nvar iconAvatarComponents = {\n [\"BACKPACK\" /* BACKPACK */]: BackpackIcon,\n [\"ROCKET\" /* ROCKET */]: RocketIcon,\n [\"MAGIC_WAND\" /* MAGIC_WAND */]: MagicWandIcon,\n [\"CUBE\" /* CUBE */]: CubeIcon,\n [\"TARGET\" /* TARGET */]: TargetIcon,\n [\"DISC\" /* DISC */]: DiscIcon,\n [\"GLOBE\" /* GLOBE */]: GlobeIcon,\n [\"STAR\" /* STAR */]: StarIcon,\n [\"LIGHTNING_BOLT\" /* LIGHTNING_BOLT */]: LightningBoltIcon2,\n [\"FACE\" /* FACE */]: FaceIcon,\n [\"PERSON\" /* PERSON */]: PersonIcon2,\n [\"HEART\" /* HEART */]: HeartIcon\n};\n\n// src/components/iconAvatars/IconAvatar.tsx\nimport { jsx as jsx94 } from \"react/jsx-runtime\";\nvar IconAvatar = ({\n iconAvatar,\n size,\n className,\n style\n}) => {\n const Component = useMemo18(() => iconAvatarComponents[iconAvatar.name], [iconAvatar]);\n return /* @__PURE__ */ jsx94(\n Avatar5,\n {\n className,\n style,\n size,\n fallback: Component ? /* @__PURE__ */ jsx94(Component, {}) : \"\"\n }\n );\n};\n\n// src/components/avatars/Avatar.tsx\nimport { jsx as jsx95 } from \"react/jsx-runtime\";\nvar Avatar6 = ({\n avatar,\n size = \"1\",\n className,\n style\n}) => {\n if (avatar) {\n if (avatar.type === \"IMAGE\" /* IMAGE */ && avatar.imageAvatar) {\n return /* @__PURE__ */ jsx95(\n ImageAvatar,\n {\n imageAvatar: avatar.imageAvatar,\n size,\n className,\n style\n }\n );\n }\n if (avatar.type === \"ICON\" /* ICON */ && avatar.iconAvatar) {\n return /* @__PURE__ */ jsx95(\n IconAvatar,\n {\n iconAvatar: avatar.iconAvatar,\n size,\n className,\n style\n }\n );\n }\n }\n return /* @__PURE__ */ jsx95(\n RadixAvatar,\n {\n fallback: \"\",\n size,\n className,\n style\n }\n );\n};\n\n// src/components/components/ComponentsProvider.tsx\nimport { useMemo as useMemo19 } from \"react\";\n\n// src/hooks/components/useComponents.ts\nimport { useContext as useContext16 } from \"react\";\nvar useComponents = () => useContext16(ComponentsContext);\n\n// src/components/components/ComponentsProvider.tsx\nimport { jsx as jsx96 } from \"react/jsx-runtime\";\nvar ComponentsProvider = ({\n children,\n ...rest\n}) => {\n const prevComponents = useComponents();\n const value = useMemo19(() => merge(prevComponents, rest), [rest, prevComponents]);\n return /* @__PURE__ */ jsx96(\n ComponentsContext.Provider,\n {\n value,\n children\n }\n );\n};\n\n// src/components/assistants/AssistantProvider/index.tsx\nimport { jsx as jsx97 } from \"react/jsx-runtime\";\nvar AssistantProvider = ({\n children\n}) => {\n const superinterfaceContext = useSuperinterfaceContext();\n const { assistant } = useAssistant({\n assistantId: superinterfaceContext.variables.assistantId\n });\n return /* @__PURE__ */ jsx97(AssistantNameContext.Provider, { value: assistant?.name ?? \"\", children: /* @__PURE__ */ jsx97(\n AssistantAvatarContext.Provider,\n {\n value: /* @__PURE__ */ jsx97(Avatar6, { avatar: assistant?.avatar }),\n children\n }\n ) });\n};\nexport {\n AssistantAvatarContext,\n AssistantNameContext,\n AssistantProvider,\n AudioThread,\n AudioThreadDialog,\n Avatar6 as Avatar,\n ComponentsProvider,\n FunctionBase,\n FunctionComponentsContext,\n MarkdownContext,\n MarkdownProvider,\n RunStep,\n Suggestions,\n SuperinterfaceProvider,\n Thread,\n ThreadDialog,\n ThreadDialogContext,\n UserAvatarContext,\n useAssistant,\n useComponents,\n useCreateMessage,\n useIsMutatingMessage,\n useLatestMessage,\n useMarkdownContext,\n useMessageContext,\n useMessageFormContext,\n useMessages,\n useSuperinterfaceContext,\n useSuperinterfaceContext as useThreadContext,\n useThreadDialogContext\n};\n","import _ from 'lodash'\nimport { customizer } from './customizer'\n\n// @ts-ignore-next-line\nexport const merge = (obj, ...sources) =>\n _.mergeWith(_.cloneDeep(obj), ...sources, customizer)\n","import { detect } from 'detect-browser'\n\nconst unsupportedNames = [\n 'safari',\n 'ios',\n]\n\nexport const isHtmlAudioSupported = !unsupportedNames.includes(detect()?.name || '')\n","'use client'\nimport { useRef } from 'react'\nimport { MessagesPage } from '@/types'\nimport {\n InfiniteData,\n UseInfiniteQueryOptions,\n UseMutationOptions,\n} from '@tanstack/react-query'\nimport { merge } from '@/lib/misc/merge'\nimport { SuperinterfaceContext } from '@/contexts/core/SuperinterfaceContext'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\nimport type { ThreadStorageOptions } from '@/types'\n\nexport type Args = {\n children: React.ReactNode\n baseUrl?: string\n variables?: {\n [key: string]: any\n }\n defaultOptions?: {\n queries?: UseInfiniteQueryOptions<InfiniteData<MessagesPage>>\n mutations?: UseMutationOptions\n }\n threadIdStorageOptions?: ThreadStorageOptions | null\n}\n\nexport const SuperinterfaceProvider = ({\n children,\n baseUrl,\n variables,\n defaultOptions,\n threadIdStorageOptions,\n}: Args) => {\n const superinterfaceContext = useSuperinterfaceContext()\n const createMessageAbortControllerRef = useRef<AbortController | null>(null)\n\n const value = merge(\n superinterfaceContext,\n {\n ...(baseUrl ? { baseUrl } : {}),\n ...(variables ? { variables } : {}),\n ...(defaultOptions ? { defaultOptions } : {}),\n ...(threadIdStorageOptions ? { threadIdStorageOptions } : {}),\n createMessageAbortControllerRef,\n }\n )\n\n return (\n <SuperinterfaceContext.Provider\n value={value}\n >\n {children}\n </SuperinterfaceContext.Provider>\n )\n}\n","import _ from 'lodash'\n\n// @ts-ignore-next-line\nexport const customizer = (objectValue, srcValue) => {\n if (!_.isArray(objectValue)) return\n\n return srcValue\n}\n","'use client'\n\nimport { createContext } from 'react'\nimport { baseUrl } from '@/lib/superinterfaceCloud/baseUrl'\nimport { cookieOptions } from '@/lib/threadIdStorage/cookieOptions'\nimport { localStorageOptions } from '@/lib/threadIdStorage/localStorageOptions'\nimport { isIframe } from '@/lib/iframes/isIframe'\nimport type { ThreadStorageOptions } from '@/types'\n\nexport const SuperinterfaceContext = createContext<{\n baseUrl: string | null\n variables: Record<string, any>\n defaultOptions: {\n queries: Record<string, any>\n mutations: Record<string, any>\n }\n threadIdStorageOptions: ThreadStorageOptions | null\n createMessageAbortControllerRef: React.MutableRefObject<AbortController | null>\n}>({\n baseUrl,\n variables: {},\n defaultOptions: {\n queries: {},\n mutations: {},\n },\n threadIdStorageOptions: isIframe() ? localStorageOptions : cookieOptions,\n createMessageAbortControllerRef: { current: null },\n})\n","export const baseUrl = 'https://superinterface.ai/api/cloud'\n","import Cookies from 'js-cookie'\nimport { key } from '@/lib/threadIdStorage/key'\n\nexport const get = ({\n assistantId,\n}: {\n assistantId: string\n}) => (\n Cookies.get(key({ assistantId })) ?? null\n)\n","export const key = ({\n assistantId,\n}: {\n assistantId: string\n}) => (\n `superinterface-${assistantId}-threadId`\n)\n","import Cookies from 'js-cookie'\nimport { key } from '@/lib/threadIdStorage/key'\n\nexport const set = ({\n assistantId,\n threadId,\n}: {\n assistantId: string\n threadId: string\n}) => (\n Cookies.set(key({ assistantId }), threadId)\n)\n","import Cookies from 'js-cookie'\nimport { key } from '@/lib/threadIdStorage/key'\n\nexport const remove = ({\n assistantId,\n}: {\n assistantId: string\n}) => (\n Cookies.remove(key({ assistantId }))\n)\n","import type { ThreadStorageOptions } from '@/types'\nimport { get } from './get'\nimport { set } from './set'\nimport { remove } from './remove'\n\nexport const cookieOptions: ThreadStorageOptions = {\n get,\n set,\n remove,\n}\n","import { key } from '@/lib/threadIdStorage/key'\n\nexport const get = ({\n assistantId,\n}: {\n assistantId: string\n}) => (\n window.localStorage.getItem(key({ assistantId }))\n)\n","import { key } from '@/lib/threadIdStorage/key'\n\nexport const set = ({\n assistantId,\n threadId,\n}: {\n assistantId: string\n threadId: string\n}) => (\n window.localStorage.setItem(key({ assistantId }), threadId)\n)\n","import { key } from '@/lib/threadIdStorage/key'\n\nexport const remove = ({\n assistantId,\n}: {\n assistantId: string\n}) => (\n window.localStorage.removeItem(key({ assistantId }))\n)\n","import type { ThreadStorageOptions } from '@/types'\nimport { get } from './get'\nimport { set } from './set'\nimport { remove } from './remove'\n\nexport const localStorageOptions: ThreadStorageOptions = {\n get,\n set,\n remove,\n}\n","export const isIframe = () => {\n if (typeof window === 'undefined') return false\n\n return window.self !== window.top\n}\n","'use client'\nimport { useContext } from 'react'\nimport { SuperinterfaceContext } from '@/contexts/core/SuperinterfaceContext'\n\nexport const useSuperinterfaceContext = () => (\n useContext(SuperinterfaceContext)\n)\n","import {\n Flex,\n} from '@radix-ui/themes'\nimport { Message } from '@/components/threads/Thread/Message'\nimport { StyleProps } from '@/types'\nimport { Content } from './Content'\nimport { Progress } from './Progress'\nimport { Root } from './Root'\nimport { NextPageSkeleton } from './NextPageSkeleton'\n\ntype Args = {\n children?: React.ReactNode\n} & StyleProps\n\nexport const Messages = ({\n children,\n className,\n style,\n}: Args) => (\n <Root\n style={style}\n className={className}\n >\n <Flex\n flexShrink=\"0\"\n height=\"var(--space-3)\"\n />\n\n <Progress />\n\n {children}\n\n <Content />\n\n <NextPageSkeleton />\n\n <Flex\n flexShrink=\"0\"\n flexGrow=\"1\"\n minHeight=\"var(--space-5)\"\n />\n </Root>\n)\n\nMessages.Root = Root\nMessages.Message = Message\nMessages.NextPageSkeleton = NextPageSkeleton\n","import _ from 'lodash'\nimport { useMemo } from 'react'\nimport { isEmpty } from 'radash'\nimport {\n Box,\n} from '@radix-ui/themes'\nimport { StartingContentSkeleton } from '@/components/skeletons/StartingContentSkeleton'\nimport { SerializedMessage } from '@/types'\nimport { RunSteps } from '@/components/runSteps/RunSteps'\nimport { useIsMutatingMessage } from '@/hooks/messages/useIsMutatingMessage'\nimport { Provider } from './Provider'\nimport { Attachments } from './Attachments'\nimport { ContentPart } from './ContentPart'\nimport type { StyleProps } from '@/types'\n\ntype Args = {\n message: SerializedMessage\n}\n\nexport const Message = ({\n message,\n className,\n style,\n}: Args & StyleProps) => {\n const [olderRunSteps, laterRunSteps] = useMemo(() => {\n if (!message.runSteps.length) return [[], []]\n\n const messageCreationRunStepIndex = message.runSteps.findIndex((runStep) => {\n if (runStep.step_details.type !== 'message_creation') return\n\n return runStep.step_details.message_creation.message_id === message.id\n })\n\n let nextRunStepIndex = message.runSteps.slice(0, messageCreationRunStepIndex).findLastIndex((runStep) => (\n runStep.step_details.type === 'message_creation'\n ))\n if (nextRunStepIndex === -1) {\n nextRunStepIndex = 0\n }\n const laterRunSteps = message.runSteps.slice(nextRunStepIndex, messageCreationRunStepIndex)\n\n const prevRunStepIndex = message.runSteps.slice(messageCreationRunStepIndex + 1).findIndex((runStep) => (\n runStep.step_details.type === 'message_creation'\n ))\n\n let olderRunSteps\n\n if (prevRunStepIndex === -1) {\n olderRunSteps = message.runSteps.slice(messageCreationRunStepIndex + 1)\n } else {\n olderRunSteps = message.runSteps.slice(messageCreationRunStepIndex + 1, messageCreationRunStepIndex + prevRunStepIndex)\n }\n\n return [olderRunSteps, laterRunSteps]\n }, [message])\n\n const isMutatingMessage = useIsMutatingMessage()\n\n const isInProgress = useMemo(() => {\n if (!isMutatingMessage) return false\n if (message.status === 'in_progress') return true\n\n return message.runSteps.some((rs) => rs.status === 'in_progress')\n }, [message])\n\n return (\n <Provider value={{ message }}>\n <Box\n className={className}\n style={style}\n >\n <RunSteps\n runSteps={olderRunSteps}\n />\n\n <Box>\n <Attachments\n message={message}\n />\n\n {message.content.map((content, index) => (\n <ContentPart\n key={index}\n content={content}\n />\n ))}\n\n {isInProgress && isEmpty(laterRunSteps) && (\n <StartingContentSkeleton />\n )}\n </Box>\n\n <RunSteps\n runSteps={laterRunSteps}\n />\n\n {isInProgress && !isEmpty(laterRunSteps) && (\n <Box>\n <StartingContentSkeleton />\n </Box>\n )}\n </Box>\n </Provider>\n )\n}\n","import {\n Skeleton,\n} from '@radix-ui/themes'\n\nexport const StartingContentSkeleton = () => (\n <Skeleton\n loading\n mt=\"1\"\n height=\"var(--space-4)\"\n width=\"var(--space-4)\"\n style={{\n borderRadius: 'var(--radius-6)',\n flexShrink: 0,\n }}\n />\n)\n","import { Flex } from '@radix-ui/themes'\nimport { useContext } from 'react'\nimport type { SerializedRunStep } from '@/types'\nimport { ComponentsContext } from '@/contexts/components/ComponentsContext'\n\ntype Args = {\n runSteps: SerializedRunStep[]\n}\n\nexport const RunSteps = ({\n runSteps,\n}: Args) => {\n const componentsContext = useContext(ComponentsContext)\n const Component = componentsContext.components.RunStep\n\n return (\n <Flex\n direction=\"column-reverse\"\n >\n {runSteps.map((runStep) => (\n <Component\n key={runStep.id}\n runStep={runStep}\n />\n ))}\n </Flex>\n )\n}\n","'use client'\nimport { createContext } from 'react'\nimport { RunStep } from '@/components/runSteps/RunStep'\n\nexport const ComponentsContext = createContext({\n components: {\n RunStep,\n },\n})\n","import OpenAI from 'openai'\nimport {\n Flex,\n} from '@radix-ui/themes'\nimport type { SerializedRunStep, StyleProps } from '@/types'\nimport { ToolCall } from './ToolCall'\nimport { Starting } from './Starting'\n\ntype Args = {\n stepDetails: OpenAI.Beta.Threads.Runs.ToolCallsStepDetails\n runStep: SerializedRunStep\n} & StyleProps\n\nconst Root = ({\n children,\n className,\n style,\n}: {\n children: React.ReactNode\n} & StyleProps) => (\n <Flex\n direction=\"column\"\n className={className}\n style={style}\n >\n {children}\n </Flex>\n)\n\nexport const ToolCalls = ({\n stepDetails,\n runStep,\n className,\n style,\n}: Args) => (\n <Root\n className={className}\n style={style}\n >\n {!stepDetails.tool_calls.length && (\n <Starting />\n )}\n {stepDetails.tool_calls.map((toolCall) => (\n <ToolCall\n key={toolCall.id}\n toolCall={toolCall}\n runStep={runStep}\n />\n ))}\n </Root>\n)\n\nToolCalls.Root = Root\nToolCalls.Starting = Starting\nToolCalls.ToolCall = ToolCall\n","'use client'\nimport { useContext } from 'react'\nimport OpenAI from 'openai'\nimport type { SerializedRunStep } from '@/types'\nimport { FunctionComponentsContext } from '@/contexts/functions/FunctionComponentsContext'\nimport { DefaultFunction } from './DefaultFunction'\n\ntype Args = {\n fn: OpenAI.Beta.Threads.Runs.FunctionToolCall.Function\n runStep: SerializedRunStep\n}\n\nexport const Fn = ({\n fn,\n runStep,\n}: Args) => {\n const functionComponentsContext = useContext(FunctionComponentsContext)\n const Component = functionComponentsContext[fn.name] || DefaultFunction\n\n return (\n // @ts-ignore-next-line\n <Component\n fn={fn}\n runStep={runStep}\n />\n )\n}\n","'use client'\nimport { createContext } from 'react'\n\ntype FunctionComponents = {\n [key: string]: React.ReactNode\n}\n\nexport const FunctionComponentsContext = createContext({} as FunctionComponents)\n","import OpenAI from 'openai'\nimport {\n Popover,\n Flex,\n} from '@radix-ui/themes'\nimport { ToolCallBase } from '@/components/toolCalls/ToolCallBase'\nimport { ToolCallTitle } from '@/components/toolCalls/ToolCallBase/ToolCallTitle'\nimport { ToolCallIcon } from '@/components/toolCalls/ToolCallBase/ToolCallIcon'\nimport { Content } from './Content'\n\ntype Args = {\n fn: OpenAI.Beta.Threads.Runs.FunctionToolCall.Function\n runStep: OpenAI.Beta.Threads.Runs.RunStep\n title: string\n}\n\nexport const FunctionBase = ({\n fn,\n runStep,\n title,\n}: Args) => (\n <Popover.Root>\n <Popover.Trigger>\n <Flex>\n <ToolCallBase>\n <ToolCallIcon runStep={runStep} />\n <ToolCallTitle>\n {title}\n </ToolCallTitle>\n </ToolCallBase>\n </Flex>\n </Popover.Trigger>\n <Popover.Content\n style={{\n maxHeight: '200px',\n }}\n >\n <Content fn={fn} />\n </Popover.Content>\n </Popover.Root>\n)\n","import {\n Flex,\n Button,\n} from '@radix-ui/themes'\n\nexport const ToolCallBase = ({\n children,\n}: {\n children: React.ReactNode\n}) => (\n <Flex\n py=\"1\"\n ml=\"-2\"\n >\n <Button\n size=\"1\"\n color=\"gold\"\n variant=\"outline\"\n style={{\n boxShadow: 'none',\n }}\n >\n {children}\n </Button>\n </Flex>\n)\n","import {\n Text,\n} from '@radix-ui/themes'\n\ntype Args = {\n children: React.ReactNode\n}\n\nexport const ToolCallTitle = ({\n children,\n}: Args) => (\n <Text\n weight=\"regular\"\n >\n {children}\n </Text>\n)\n","import {\n CircleIcon,\n CircleBackslashIcon,\n CheckCircledIcon,\n} from '@radix-ui/react-icons'\nimport type { SerializedRunStep } from '@/types'\n\ntype Args = {\n runStep: SerializedRunStep\n}\n\nexport const ToolCallIcon = ({\n runStep,\n}: Args) => {\n if (runStep.completed_at) {\n return (\n <CheckCircledIcon />\n )\n } else if (runStep.cancelled_at || runStep.failed_at || runStep.status === 'expired') {\n return (\n <CircleBackslashIcon />\n )\n } else {\n return (\n <CircleIcon />\n )\n }\n}\n","import { useMemo } from 'react'\nimport { Code, Box } from '@radix-ui/themes'\nimport OpenAI from 'openai'\nimport { formattedJsonOrRaw } from './lib/formattedJsonOrRaw'\n\ntype Args = {\n fn: OpenAI.Beta.Threads.Runs.FunctionToolCall.Function\n}\n\nexport const Content = ({\n fn,\n}: Args) => {\n const args = useMemo(() => (\n formattedJsonOrRaw({\n value: fn.arguments,\n })\n ), [fn])\n\n const output = useMemo(() => (\n formattedJsonOrRaw({\n value: fn.output,\n })\n ), [fn])\n\n return (\n <Code\n variant=\"ghost\"\n color=\"gold\"\n style={{\n whiteSpace: 'pre',\n wordBreak: 'break-word',\n }}\n >\n {args && <Box>\n {args}\n </Box>}\n {output && <Box>\n {output}\n </Box>}\n </Code>\n )\n}\n","export const formattedJsonOrRaw = ({\n value,\n}: {\n value: string | null\n}) => {\n if (!value) {\n return null\n }\n\n try {\n return JSON.stringify(JSON.parse(value), null, 2)\n } catch (error) {\n if (typeof value === 'string') {\n return value\n } else {\n return JSON.stringify(value, null, 2)\n }\n }\n}\n","import OpenAI from 'openai'\n\ntype Args = {\n fn: OpenAI.Beta.Threads.Runs.FunctionToolCall.Function\n runStep: OpenAI.Beta.Threads.Runs.RunStep\n}\n\nexport const title = ({\n fn,\n runStep,\n}: Args) => {\n if (runStep.completed_at) {\n return `Finished ${fn.name}`\n } else if (runStep.cancelled_at) {\n return `Cancelled ${fn.name}`\n } else {\n return `Calling ${fn.name}`\n }\n}\n","import OpenAI from 'openai'\nimport { FunctionBase } from '@/components/functions/FunctionBase'\nimport { title } from './lib/title'\n\ntype Args = {\n fn: OpenAI.Beta.Threads.Runs.FunctionToolCall.Function\n runStep: OpenAI.Beta.Threads.Runs.RunStep\n}\n\nexport const DefaultFunction = ({\n fn,\n runStep,\n}: Args) => (\n <FunctionBase\n fn={fn}\n runStep={runStep}\n title={title({ runStep, fn })}\n />\n)\n","import OpenAI from 'openai'\nimport {\n Popover,\n Flex,\n} from '@radix-ui/themes'\nimport { ToolCallBase } from '@/components/toolCalls/ToolCallBase'\nimport { ToolCallTitle } from '@/components/toolCalls/ToolCallBase/ToolCallTitle'\nimport { ToolCallIcon } from '@/components/toolCalls/ToolCallBase/ToolCallIcon'\nimport type { SerializedRunStep } from '@/types'\nimport { Content } from './Content'\n\nexport const CodeInterpreter = ({\n codeInterpreter,\n runStep,\n}: {\n codeInterpreter: OpenAI.Beta.Threads.Runs.CodeInterpreterToolCall.CodeInterpreter\n runStep: SerializedRunStep\n}) => (\n <Popover.Root>\n <Popover.Trigger>\n <Flex>\n <ToolCallBase>\n <ToolCallIcon runStep={runStep} />\n <ToolCallTitle>\n Using code interpreter\n </ToolCallTitle>\n </ToolCallBase>\n </Flex>\n </Popover.Trigger>\n <Popover.Content\n maxHeight=\"200px\"\n >\n <Content\n codeInterpreter={codeInterpreter}\n />\n </Popover.Content>\n </Popover.Root>\n)\n","import { Code, Box } from '@radix-ui/themes'\nimport OpenAI from 'openai'\n\ntype Args = {\n codeInterpreter: OpenAI.Beta.Threads.Runs.CodeInterpreterToolCall.CodeInterpreter\n}\n\nexport const Content = ({\n codeInterpreter,\n}: Args) => {\n if (!codeInterpreter.input) {\n return null\n }\n\n return (\n <Code\n variant=\"ghost\"\n color=\"gold\"\n style={{\n whiteSpace: 'pre',\n wordBreak: 'break-word',\n }}\n >\n <Box>\n {codeInterpreter.input}\n </Box>\n <Box>\n {JSON.stringify(codeInterpreter.outputs)}\n </Box>\n </Code>\n )\n}\n","import { ToolCallBase } from '@/components/toolCalls/ToolCallBase'\nimport { ToolCallTitle } from '@/components/toolCalls/ToolCallBase/ToolCallTitle'\nimport { ToolCallIcon } from '@/components/toolCalls/ToolCallBase/ToolCallIcon'\nimport type { SerializedRunStep, ToolCall } from '@/types'\n\nexport const FileSearch = ({\n runStep,\n toolCall,\n}: {\n toolCall: ToolCall\n runStep: SerializedRunStep\n}) => (\n <ToolCallBase>\n <ToolCallIcon runStep={runStep} />\n <ToolCallTitle>\n Searching files\n </ToolCallTitle>\n </ToolCallBase>\n)\n","import { ToolCallBase } from '@/components/toolCalls/ToolCallBase'\nimport { ToolCallTitle } from '@/components/toolCalls/ToolCallBase/ToolCallTitle'\nimport { ToolCallIcon } from '@/components/toolCalls/ToolCallBase/ToolCallIcon'\nimport type { SerializedRunStep, ToolCall } from '@/types'\n\nexport const Fallback = ({\n runStep,\n toolCall,\n}: {\n toolCall: ToolCall\n runStep: SerializedRunStep\n}) => (\n <ToolCallBase>\n <ToolCallIcon runStep={runStep} />\n <ToolCallTitle>\n Using tool: {toolCall.type}\n </ToolCallTitle>\n </ToolCallBase>\n)\n","import { Fn } from './Fn'\nimport { CodeInterpreter } from './CodeInterpreter'\nimport { FileSearch } from './FileSearch'\nimport { Fallback } from './Fallback'\nimport type { SerializedRunStep, ToolCall as ToolCallType } from '@/types'\n\ntype Args = {\n toolCall: ToolCallType\n runStep: SerializedRunStep\n}\n\nexport const ToolCall = ({\n toolCall,\n runStep,\n}: Args) => {\n if (toolCall.type === 'function') {\n return (\n <Fn\n fn={toolCall.function}\n runStep={runStep}\n />\n )\n }\n\n if (toolCall.type === 'code_interpreter') {\n return (\n <CodeInterpreter\n codeInterpreter={toolCall.code_interpreter}\n runStep={runStep}\n />\n )\n }\n\n if (toolCall.type === 'file_search') {\n return (\n <FileSearch\n toolCall={toolCall}\n runStep={runStep}\n />\n )\n }\n\n return (\n <Fallback\n toolCall={toolCall}\n runStep={runStep}\n />\n )\n}\n","import {\n Popover,\n Text,\n} from '@radix-ui/themes'\nimport {\n CircleIcon,\n} from '@radix-ui/react-icons'\nimport { ToolCallBase } from '@/components/toolCalls/ToolCallBase'\nimport { ToolCallTitle } from '@/components/toolCalls/ToolCallBase/ToolCallTitle'\n\nexport const Starting = () => (\n <Popover.Root>\n <ToolCallBase>\n <CircleIcon />\n <ToolCallTitle>\n Starting actions\n </ToolCallTitle>\n </ToolCallBase>\n <Popover.Content\n style={{\n maxHeight: '500px',\n }}\n >\n <Text>\n Getting ready to connect to domain API\n </Text>\n </Popover.Content>\n </Popover.Root>\n)\n","import type { SerializedRunStep, StyleProps } from '@/types'\nimport { ToolCalls } from './ToolCalls'\n\ntype Args = {\n runStep: SerializedRunStep\n} & StyleProps\n\nexport const RunStep = ({\n runStep,\n className,\n style,\n}: Args) => {\n if (runStep.step_details.type === 'tool_calls') {\n return (\n <ToolCalls\n className={className}\n style={style}\n stepDetails={runStep.step_details}\n runStep={runStep}\n />\n )\n }\n\n return null\n}\n\nRunStep.ToolCalls = ToolCalls\n","import { useMemo } from 'react'\nimport { useIsMutating } from '@tanstack/react-query'\nimport { useThreadContext } from '@/hooks/threads/useThreadContext'\n\nexport const useIsMutatingMessage = () => {\n const threadContext = useThreadContext()\n\n const mutatingMessagesCount = useIsMutating({\n mutationKey: ['createMessage', threadContext.variables],\n })\n\n const isMutatingMessage = useMemo(() => (\n mutatingMessagesCount > 0\n ), [mutatingMessagesCount])\n\n return isMutatingMessage\n}\n","'use client'\nimport { createContext } from 'react'\nimport { SerializedMessage } from '@/types'\n\nexport const MessageContext = createContext<{\n message: SerializedMessage | null\n}>({\n message: null,\n})\n","import { MessageContext } from '@/contexts/messages/MessageContext'\n\nexport const Provider = MessageContext.Provider\n","import { SerializedMessage } from '@/types'\nimport {\n Flex,\n Badge,\n} from '@radix-ui/themes'\nimport {\n FileIcon,\n} from '@radix-ui/react-icons'\n\nexport const Attachments = ({\n message,\n}: {\n message: SerializedMessage\n}) => {\n if (!message.attachments?.length) return null\n\n return (\n <Flex\n align=\"start\"\n pb=\"1\"\n >\n <Badge\n color=\"gray\"\n variant=\"surface\"\n >\n <FileIcon />\n {message.attachments.length} file{message.attachments.length > 1 ? 's' : ''}\n </Badge>\n </Flex>\n )\n}\n","import OpenAI from 'openai'\nimport Markdown from 'react-markdown'\nimport { useMarkdownContext } from '@/hooks/markdown/useMarkdownContext'\n\ntype Args = {\n content: OpenAI.Beta.Threads.Messages.TextContentBlock\n}\n\nexport const TextContent = ({\n content,\n}: Args) => {\n const {\n getRemarkPlugins,\n ...rest\n } = useMarkdownContext()\n\n return (\n // @ts-ignore-next-line\n <Markdown\n {...rest}\n remarkPlugins={getRemarkPlugins({\n content,\n })}\n >\n {content.text.value}\n </Markdown>\n )\n}\n","import { useContext } from 'react'\nimport { MarkdownContext } from '@/contexts/markdown/MarkdownContext'\n\nexport const useMarkdownContext = () => (\n useContext(MarkdownContext)\n)\n","'use client'\nimport { createContext } from 'react'\nimport { components } from './lib/components'\nimport { getRemarkPlugins } from './lib/getRemarkPlugins'\n\nexport const MarkdownContext = createContext({\n components,\n getRemarkPlugins,\n})\n","import { Heading, Table } from '@radix-ui/themes'\nimport { Paragraph } from './Paragraph'\nimport { Link } from './Link'\nimport { UnorderedList } from './UnorderedList'\nimport { OrderedList } from './OrderedList'\nimport { ListItem } from './ListItem'\nimport { Strong } from './Strong'\nimport { Pre } from './Pre'\nimport { Code } from './Code'\nimport { Img } from './Img'\nimport { Annotation } from './Annotation'\n\nexport const components = {\n p: Paragraph,\n a: Link,\n strong: Strong,\n ul: UnorderedList,\n ol: OrderedList,\n li: ListItem,\n pre: Pre,\n code: Code,\n img: Img,\n annotation: Annotation,\n h1: (props: JSX.IntrinsicElements['h1']) => <Heading as=\"h1\">{props.children}</Heading>,\n h2: (props: JSX.IntrinsicElements['h2']) => <Heading as=\"h2\" size=\"5\">{props.children}</Heading>,\n h3: (props: JSX.IntrinsicElements['h3']) => <Heading as=\"h3\" size=\"4\">{props.children}</Heading>,\n h4: (props: JSX.IntrinsicElements['h4']) => <Heading as=\"h4\" size=\"3\">{props.children}</Heading>,\n h5: (props: JSX.IntrinsicElements['h5']) => <Heading as=\"h5\" size=\"3\">{props.children}</Heading>,\n h6: (props: JSX.IntrinsicElements['h6']) => <Heading as=\"h6\" size=\"3\">{props.children}</Heading>,\n table: (props: JSX.IntrinsicElements['table']) => (\n <>\n <style>{`.rt-TableRootTable { overflow: inherit; }`}</style>\n <Table.Root\n {...props}\n variant=\"surface\"\n mb=\"3\"\n />\n </>\n ),\n thead: Table.Header,\n tbody: Table.Body,\n tr: Table.Row,\n td: Table.Cell,\n th: Table.ColumnHeaderCell,\n}\n","import {\n Box,\n Text,\n} from '@radix-ui/themes'\n\nexport const Paragraph = ({ children }: JSX.IntrinsicElements['p']) => (\n <Box\n pb=\"3\"\n >\n <Text\n size=\"3\"\n style={{\n whiteSpace: 'pre-line',\n wordBreak: 'break-word',\n }}\n >\n {children}\n </Text>\n </Box>\n)\n","import {\n Link as RadixLink,\n} from '@radix-ui/themes'\n\ntype Args = JSX.IntrinsicElements['a']\n\nexport const Link = ({\n children,\n href,\n download,\n target = '_blank',\n}: Args) => (\n <RadixLink\n href={href}\n target={target}\n download={download}\n >\n {children}\n </RadixLink>\n)\n","import {\n Box,\n} from '@radix-ui/themes'\n\nexport const UnorderedList = ({ children }: JSX.IntrinsicElements['ul']) => (\n <Box\n pb=\"3\"\n asChild\n >\n <ul\n style={{\n listStylePosition: 'inside',\n }}\n >\n {children}\n </ul>\n </Box>\n)\n","import {\n Box,\n} from '@radix-ui/themes'\n\nexport const OrderedList = ({ children }: JSX.IntrinsicElements['ul']) => (\n <Box\n pb=\"3\"\n asChild\n >\n <ol\n style={{\n listStylePosition: 'inside',\n }}\n >\n {children}\n </ol>\n </Box>\n)\n","import {\n Box,\n} from '@radix-ui/themes'\n\nexport const ListItem = ({ children }: JSX.IntrinsicElements['li']) => (\n <Box\n pb=\"1\"\n >\n <li>\n {children}\n </li>\n </Box>\n)\n","import {\n Strong as RadixStrong,\n} from '@radix-ui/themes'\n\nexport const Strong = ({ children }: JSX.IntrinsicElements['strong']) => (\n <RadixStrong>\n {children}\n </RadixStrong>\n)\n","import {\n Box,\n} from '@radix-ui/themes'\n\nexport const Pre = ({ children }: JSX.IntrinsicElements['pre']) => (\n <Box\n style={{\n whiteSpace: 'pre-wrap',\n wordBreak: 'break-word',\n }}\n >\n {children}\n </Box>\n)\n","import {\n Code as RadixCode,\n} from '@radix-ui/themes'\nimport { Suggestions } from '@/components/suggestions/Suggestions'\n\nexport const Code = ({\n children,\n className,\n}: JSX.IntrinsicElements['code']) => {\n if (className === 'language-suggestions') {\n return <Suggestions>{children}</Suggestions>\n }\n\n return (\n <RadixCode>\n {children}\n </RadixCode>\n )\n}\n","import { useMemo } from 'react'\nimport { useLatestMessage } from '@/hooks/messages/useLatestMessage'\nimport type { StyleProps } from '@/types'\nimport { Content } from './Content'\nimport { Item } from './Item'\n\nexport const Suggestions = ({\n children,\n className,\n style,\n}: {\n children: React.ReactNode\n} & StyleProps) => {\n const latestMessageProps = useLatestMessage()\n\n const isDisabled = useMemo(() => (\n // @ts-ignore-next-line\n latestMessageProps.latestMessage?.metadata?.isBlocking\n ), [latestMessageProps])\n\n if (latestMessageProps.isLoading) return null\n if (isDisabled) return null\n\n return (\n <Content\n className={className}\n style={style}\n >\n {children}\n </Content>\n )\n}\n\nSuggestions.Item = Item\n","import { useMemo } from 'react'\nimport { useMessages } from '@/hooks/messages/useMessages'\n\nexport const useLatestMessage = () => {\n const props = useMessages()\n\n return useMemo(() => ({\n ...props,\n latestMessage: props.messages[0] || null,\n }), [props])\n}\n","import { useMemo } from 'react'\nimport {\n InfiniteData,\n useInfiniteQuery,\n useQueryClient,\n} from '@tanstack/react-query'\nimport { SerializedMessage, MessagesPage } from '@/types'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\nimport { useThreadContext } from '@/hooks/threads/useThreadContext'\nimport { messagesQueryOptions } from '@/lib/messages/messagesQueryOptions'\n\nconst messages = ({\n props,\n}: {\n props: {\n data: InfiniteData<MessagesPage> | undefined\n },\n}) => {\n if (!props.data) return []\n\n return props.data.pages.reduce<SerializedMessage[]>((acc, page) => (\n acc.concat(page.data)\n ), [])\n}\n\n\nexport const useMessages = () => {\n const queryClient = useQueryClient()\n const threadContext = useThreadContext()\n const superinterfaceContext = useSuperinterfaceContext()\n\n const props = useInfiniteQuery(messagesQueryOptions({\n queryClient,\n threadContext,\n superinterfaceContext,\n }))\n\n return useMemo(() => ({\n ...props,\n // @ts-ignore-next-line\n messages: messages({ props }),\n }), [props])\n}\n","import {\n useQueryClient,\n infiniteQueryOptions,\n} from '@tanstack/react-query'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\nimport { useThreadContext } from '@/hooks/threads/useThreadContext'\nimport { MessagesPage } from '@/types'\nimport { variableParams } from './variableParams'\n\ntype QueryFunctionArgs = {\n queryKey: Readonly<[string, { [key: string]: any }]>\n pageParam?: string\n}\n\nexport const queryOptions = ({\n queryKeyBase,\n path,\n queryClient,\n threadContext,\n superinterfaceContext,\n}: {\n queryKeyBase: string[]\n path: string,\n queryClient: ReturnType<typeof useQueryClient>,\n threadContext: ReturnType<typeof useThreadContext>,\n superinterfaceContext: ReturnType<typeof useSuperinterfaceContext>,\n}) => {\n const queryKey = [...queryKeyBase, threadContext.variables]\n\n return infiniteQueryOptions<MessagesPage>({\n // @ts-ignore-next-line\n queryFn: async ({\n pageParam,\n queryKey,\n }: QueryFunctionArgs) => {\n const [_key, variables] = queryKey\n const params = new URLSearchParams({\n ...(pageParam ? { pageParam } : {}),\n ...variableParams({ variables, superinterfaceContext }),\n })\n\n return fetch(`${superinterfaceContext.baseUrl}${path}?${params}`)\n .then(async (response) => {\n if (response.status !== 200) {\n try {\n const errorResponse = await response.json() as { error: string }\n throw new Error(errorResponse.error)\n } catch (error) {\n throw new Error('Failed to fetch')\n }\n }\n\n return response.json() as Promise<MessagesPage>\n })\n },\n initialPageParam: undefined,\n getNextPageParam: (lastPage: MessagesPage) => {\n if (!lastPage.hasNextPage) return null\n\n return lastPage.lastId\n },\n limit: 10,\n ...threadContext.defaultOptions.queries,\n ...queryClient.getQueryDefaults(queryKey),\n queryKey,\n })\n}\n","import { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\n\nexport const variableParams = ({\n variables,\n superinterfaceContext,\n}: {\n variables: {\n [key: string]: any\n }\n superinterfaceContext: ReturnType<typeof useSuperinterfaceContext>\n}) => {\n if (variables.threadId) return variables\n if (!variables.assistantId) return variables\n if (!superinterfaceContext.threadIdStorageOptions?.get) return variables\n\n const threadId = superinterfaceContext.threadIdStorageOptions.get({ assistantId: variables.assistantId })\n if (!threadId) return variables\n\n return {\n ...variables,\n threadId,\n }\n}\n","import { useQueryClient } from '@tanstack/react-query'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\nimport { useThreadContext } from '@/hooks/threads/useThreadContext'\nimport { queryOptions } from '@/lib/threads/queryOptions'\n\nexport const messagesQueryOptions = ({\n queryClient,\n threadContext,\n superinterfaceContext,\n}: {\n queryClient: ReturnType<typeof useQueryClient>,\n threadContext: ReturnType<typeof useThreadContext>,\n superinterfaceContext: ReturnType<typeof useSuperinterfaceContext>,\n}) => (\n queryOptions({\n queryKeyBase: ['messages'],\n path: '/messages',\n queryClient,\n threadContext,\n superinterfaceContext,\n })\n)\n","import { useMemo } from 'react'\nimport { isEmpty } from 'radash'\nimport { onlyText } from 'react-children-utilities'\nimport { useIsMutatingMessage } from '@/hooks/messages/useIsMutatingMessage'\nimport {\n Flex,\n} from '@radix-ui/themes'\nimport type { StyleProps } from '@/types'\nimport { Item } from './Item'\n\nexport const Content = ({\n children,\n className,\n style,\n}: {\n children: React.ReactNode\n} & StyleProps) => {\n const isMutatingMessage = useIsMutatingMessage()\n\n const suggestions = useMemo(() => (\n onlyText(children).split(/\\r?\\n/).filter((c) => !isEmpty(c)).map((c) => c.trim())\n ), [children])\n\n if (isEmpty(suggestions)) return null\n\n return (\n <Flex\n gap=\"2\"\n py=\"2\"\n wrap=\"wrap\"\n className={className}\n style={style}\n >\n {suggestions.map((suggestion) => (\n <Item\n key={suggestion}\n suggestion={suggestion}\n isDisabled={isMutatingMessage}\n />\n ))}\n </Flex>\n )\n}\n","import {\n ArrowUpIcon,\n} from '@radix-ui/react-icons'\nimport {\n Text,\n Button,\n Spinner,\n} from '@radix-ui/themes'\nimport { useCreateMessage } from '@/hooks/messages/useCreateMessage'\nimport {\n useQueryClient,\n} from '@tanstack/react-query'\nimport { useThreadContext } from '@/hooks/threads/useThreadContext'\nimport { useToasts } from '@/hooks/toasts/useToasts'\nimport { createMessageDefaultOnError } from '@/lib/errors/createMessageDefaultOnError'\nimport type { StyleProps } from '@/types'\n\nexport const Item = ({\n suggestion,\n isDisabled,\n className,\n style,\n}: {\n suggestion: string\n isDisabled: boolean\n} & StyleProps) => {\n const { addToast } = useToasts()\n const queryClient = useQueryClient()\n const threadContext = useThreadContext()\n\n const { createMessage, isPending } = useCreateMessage({\n onError: createMessageDefaultOnError({\n queryClient,\n addToast,\n threadContext,\n }),\n })\n\n return (\n <Content\n onClick={() => {\n createMessage({\n // @ts-ignore-next-line\n content: suggestion,\n })\n }}\n isDisabled={isDisabled}\n isPending={isPending}\n className={className}\n style={style}\n >\n {suggestion}\n </Content>\n )\n}\n\nconst Content = ({\n onClick,\n isDisabled,\n isPending,\n children,\n className,\n style,\n}: {\n onClick: () => void\n isDisabled: boolean\n isPending: boolean\n children: React.ReactNode\n} & StyleProps) => (\n <Button\n className={className}\n variant=\"soft\"\n onClick={onClick}\n disabled={isDisabled}\n style={{\n minHeight: 'var(--base-button-height)',\n height: 'inherit',\n flexShrink: 1,\n ...(style ?? {}),\n }}\n >\n <Text\n size=\"1\"\n weight=\"regular\"\n >\n {children}\n </Text>\n\n <Spinner loading={isPending}>\n <ArrowUpIcon\n style={{\n flexShrink: 0,\n }}\n />\n </Spinner>\n </Button>\n)\n\nItem.Content = Content\n","import { partob } from 'radash'\nimport {\n useMutation,\n useQueryClient,\n} from '@tanstack/react-query'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\nimport { useThreadContext } from '@/hooks/threads/useThreadContext'\nimport { mutationOptions } from './lib/mutationOptions'\n\nexport const useCreateMessage = ({\n onError = () => {},\n}: {\n onError?: (error: unknown) => void\n} = {\n onError: () => {},\n}) => {\n const queryClient = useQueryClient()\n const superinterfaceContext = useSuperinterfaceContext()\n const threadContext = useThreadContext()\n\n const props = useMutation(mutationOptions({\n queryClient,\n threadContext,\n superinterfaceContext,\n onError,\n }))\n\n return {\n ...props,\n createMessage: partob(props.mutateAsync, threadContext.variables),\n }\n}\n","import OpenAI from 'openai'\nimport { omit } from 'radash'\nimport { QueryClient } from '@tanstack/react-query'\nimport { data } from './data'\n\ntype Variables = {\n content: string\n attachments: OpenAI.Beta.Threads.Messages.Message['attachments'] | undefined\n [key: string]: any\n}\n\nexport const onMutate = ({\n queryClient,\n}: {\n queryClient: QueryClient,\n}) => async (\n newMessage: Variables,\n) => {\n const queryKey = ['messages', omit(newMessage, ['content', 'attachments'])]\n await queryClient.cancelQueries({ queryKey })\n\n const prevMessages = queryClient.getQueryData(queryKey)\n\n queryClient.setQueryData(\n queryKey,\n data({ newMessage })\n )\n\n return {\n prevMessages,\n newMessage,\n }\n}\n","import dayjs from 'dayjs'\nimport OpenAI from 'openai'\nimport { optimisticId } from '@/lib/optimistic/optimisticId'\n\ntype Args = {\n newMessage: {\n content: string\n attachments: OpenAI.Beta.Threads.Messages.Message['attachments'] | undefined\n }\n}\n\nexport const data = ({\n newMessage,\n}: Args) => (prevData: any) => {\n const message = {\n id: optimisticId(),\n role: 'user' as OpenAI.Beta.Threads.Messages.Message['role'],\n created_at: dayjs().unix(),\n object: 'thread.message' as OpenAI.Beta.Threads.Messages.Message['object'],\n content: [\n {\n type: 'text',\n text: {\n annotations: [],\n value: newMessage.content,\n },\n } as OpenAI.Beta.Threads.Messages.TextContentBlock,\n ],\n run_id: null,\n assistant_id: null,\n thread_id: null,\n attachments: newMessage.attachments ?? [],\n metadata: {},\n runSteps: [],\n }\n\n if (!prevData) {\n return {\n pageParams: [],\n pages: [\n {\n data: [message],\n hasNextPage: false,\n lastId: message.id,\n },\n ],\n }\n }\n\n const [latestPage, ...pagesRest] = prevData.pages\n\n return {\n ...prevData,\n pages: [\n {\n ...latestPage,\n data: [\n message,\n ...latestPage.data,\n ],\n },\n ...pagesRest,\n ],\n }\n}\n","import { uid } from 'radash'\n\nexport const optimisticId = () => (\n `-${uid(24)}`\n)\n","import { JSONParser } from '@streamparser/json-whatwg'\nimport {\n useQueryClient,\n} from '@tanstack/react-query'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\nimport { useThreadContext } from '@/hooks/threads/useThreadContext'\nimport { handleResponse } from './handleResponse'\nimport { body } from './body'\n\nexport const mutationFn = ({\n superinterfaceContext,\n queryClient,\n threadContext,\n}: {\n superinterfaceContext: ReturnType<typeof useSuperinterfaceContext>\n queryClient: ReturnType<typeof useQueryClient>\n threadContext: ReturnType<typeof useThreadContext>\n}) => async (variables: {\n content: string\n [key: string]: any\n}) => {\n const abortController = new AbortController()\n superinterfaceContext.createMessageAbortControllerRef.current = abortController\n\n const response = await fetch(`${superinterfaceContext.baseUrl}/messages`, {\n method: 'POST',\n body: JSON.stringify(body({\n variables,\n superinterfaceContext,\n })),\n signal: abortController.signal,\n })\n\n if (response.status !== 200) {\n try {\n const errorResponse = await response.json() as { error: string }\n throw new Error(errorResponse.error)\n } catch (error) {\n throw new Error('Failed to send your message, try again. If you are the owner, check the logs.')\n }\n }\n\n if (response.body == null) {\n throw new Error('The response body is empty.');\n }\n\n const parser = new JSONParser({ stringBufferSize: undefined, paths: ['$'], separator: '' })\n const reader = response.body.pipeThrough(parser).getReader()\n\n const messagesQueryKey = ['messages', threadContext.variables]\n\n while (true) {\n const { done, value } = await reader.read()\n\n if (done) break\n\n handleResponse({\n value,\n messagesQueryKey,\n queryClient,\n superinterfaceContext,\n })\n }\n}\n","import OpenAI from 'openai'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\n\nexport const threadCreated = ({\n value,\n superinterfaceContext,\n}: {\n value: OpenAI.Beta.Assistants.AssistantStreamEvent.ThreadCreated\n superinterfaceContext: ReturnType<typeof useSuperinterfaceContext>\n}) => {\n if (!superinterfaceContext.threadIdStorageOptions?.set) return\n // @ts-ignore-next-line\n if (!value.data.metadata?.assistantId) return\n // @ts-ignore-next-line\n if (!value.data.metadata?.threadId) return\n\n superinterfaceContext.threadIdStorageOptions.set({\n // @ts-ignore-next-line\n assistantId: value.data.metadata.assistantId,\n // @ts-ignore-next-line\n threadId: value.data.metadata.threadId,\n })\n}\n","import _ from 'lodash'\n\ntype Args = {\n id: string\n}\n\nexport const isOptimistic = ({\n id,\n}: Args) => (\n _.startsWith(id, '-')\n)\n","import { last } from 'radash'\nimport { SerializedMessage } from '@/types'\nimport { isOptimistic } from '@/lib/optimistic/isOptimistic'\n\nexport const extendMessage = ({\n message,\n messages,\n}: {\n message: SerializedMessage\n messages: SerializedMessage[]\n}) => {\n const prevRunMessages = messages.filter((m: SerializedMessage) => (\n m.run_id === message.run_id\n ))\n\n const prevOptimitisticRunMessages = prevRunMessages.filter((m: SerializedMessage) => (\n isOptimistic({ id: m.id })\n ))\n\n const runSteps = last(prevOptimitisticRunMessages)?.runSteps ?? last(prevRunMessages)?.runSteps ?? []\n\n return {\n ...message,\n runSteps,\n }\n}\n","import { QueryClient } from '@tanstack/react-query'\nimport { SerializedMessage, ThreadMessageCreatedEvent } from '@/types'\nimport { isOptimistic } from '@/lib/optimistic/isOptimistic'\nimport { extendMessage } from './extendMessage'\nimport { MessagesQueryKey } from '@/types'\n\nconst appendMessage = ({\n message,\n messages,\n}: {\n message: SerializedMessage\n messages: SerializedMessage[]\n}) => {\n const prevMessages = messages.filter((m: SerializedMessage) => (\n m.run_id != message.run_id || !isOptimistic({ id: m.id })\n ))\n\n return [\n extendMessage({ message, messages }),\n ...prevMessages,\n ]\n}\n\nexport const threadMessageCreated = ({\n value,\n messagesQueryKey,\n queryClient,\n}: {\n value: ThreadMessageCreatedEvent\n messagesQueryKey: MessagesQueryKey\n queryClient: QueryClient\n}) => (\n queryClient.setQueryData(\n messagesQueryKey,\n (prevData: any) => {\n if (!prevData) {\n return {\n pageParams: [],\n pages: [\n {\n data: appendMessage({ message: value.data, messages: [] }),\n hasNextPage: false,\n lastId: value.data.id,\n },\n ],\n }\n }\n\n const [latestPage, ...pagesRest] = prevData.pages\n\n return {\n ...prevData,\n pages: [\n {\n ...latestPage,\n data: appendMessage({ message: value.data, messages: latestPage.data }),\n },\n ...pagesRest,\n ],\n }\n }\n )\n)\n","import { QueryClient } from '@tanstack/react-query'\nimport OpenAI from 'openai'\nimport _ from 'lodash'\nimport { omit } from 'radash'\nimport { MessagesQueryKey } from '@/types'\n\nconst updatedContentPart = ({\n prevContentPart,\n delta,\n}: {\n prevContentPart: OpenAI.Beta.Threads.Messages.MessageContent\n delta: OpenAI.Beta.Threads.Messages.MessageContentDelta\n}) => {\n if (!prevContentPart) {\n return omit(delta, ['index'])\n }\n\n if (delta.type === 'text' && delta.text && prevContentPart.type == 'text' && prevContentPart.text) {\n return {\n ...prevContentPart,\n text: {\n ...prevContentPart.text,\n value: `${prevContentPart.text.value}${delta.text.value}`,\n annotations: [\n ...(prevContentPart.text.annotations ?? []),\n ...(delta.text.annotations ?? []),\n ]\n },\n }\n }\n\n return prevContentPart\n}\n\nconst updatedContent = ({\n content,\n value,\n}: {\n content: OpenAI.Beta.Threads.Messages.MessageContent\n value: OpenAI.Beta.Assistants.AssistantStreamEvent.ThreadMessageDelta\n}) => {\n if (!value.data.delta.content) return content\n\n const result = _.cloneDeep(content)\n\n value.data.delta.content.forEach((delta: OpenAI.Beta.Threads.Messages.MessageContentDelta) => {\n // @ts-ignore-next-line\n result[delta.index] = updatedContentPart({\n // @ts-ignore-next-line\n prevContentPart: result[delta.index],\n delta,\n })\n })\n\n return result\n}\n\nexport const threadMessageDelta = ({\n value,\n queryClient,\n messagesQueryKey,\n}: {\n value: OpenAI.Beta.Assistants.AssistantStreamEvent.ThreadMessageDelta\n messagesQueryKey: MessagesQueryKey\n queryClient: QueryClient\n}) => (\n queryClient.setQueryData(\n messagesQueryKey,\n (prevData: any) => {\n if (!prevData) {\n return {\n pageParams: [],\n pages: [\n {\n data: [],\n hasNextPage: false,\n lastId: null,\n },\n ],\n }\n }\n\n const [latestPage, ...pagesRest] = prevData.pages\n const [latestMessage, ...messagesRest] = latestPage.data\n\n return {\n ...prevData,\n pages: [\n {\n ...latestPage,\n data: [\n {\n ...latestMessage,\n content: updatedContent({ content: latestMessage.content, value }),\n },\n ...messagesRest,\n ],\n },\n ...pagesRest,\n ],\n }\n }\n )\n)\n","import { replace } from 'radash'\nimport { ThreadMessageCompletedEvent } from '@/types'\nimport { extendMessage } from './extendMessage'\nimport {\n QueryClient,\n} from '@tanstack/react-query'\nimport { MessagesQueryKey } from '@/types'\n\nexport const threadMessageCompleted = ({\n value,\n queryClient,\n messagesQueryKey,\n}: {\n messagesQueryKey: MessagesQueryKey\n value: ThreadMessageCompletedEvent\n queryClient: QueryClient\n}) => (\n queryClient.setQueryData(\n messagesQueryKey,\n (prevData: any) => {\n if (!prevData) {\n return {\n pageParams: [],\n pages: [\n {\n data: [],\n hasNextPage: false,\n lastId: null,\n },\n ],\n }\n }\n\n const [latestPage, ...pagesRest] = prevData.pages\n\n return {\n ...prevData,\n pages: [\n {\n ...latestPage,\n data: replace(latestPage.data, extendMessage({ message: value.data, messages: latestPage.data }), (m) => m.id === value.data.id),\n },\n ...pagesRest,\n ],\n }\n }\n )\n)\n","import { QueryClient } from '@tanstack/react-query'\nimport OpenAI from 'openai'\nimport { optimisticId } from '@/lib/optimistic/optimisticId'\nimport { MessagesQueryKey } from '@/types'\n\nexport const threadRunCreated = ({\n value,\n queryClient,\n messagesQueryKey,\n}: {\n value: OpenAI.Beta.Assistants.AssistantStreamEvent.ThreadRunCreated\n messagesQueryKey: MessagesQueryKey\n queryClient: QueryClient\n}) => (\n queryClient.setQueryData(\n messagesQueryKey,\n (prevData: any) => {\n if (!prevData) return prevData\n\n const [latestPage, ...pagesRest] = prevData.pages\n\n return {\n ...prevData,\n pages: [\n {\n ...latestPage,\n data: [\n {\n id: optimisticId(),\n assistant_id: value.data.assistant_id,\n content: [],\n created_at: value.data.created_at,\n attachments: [],\n metadata: {},\n status: 'in_progress',\n role: 'assistant',\n runSteps: [],\n run_id: value.data.id,\n thread_id: value.data.thread_id,\n },\n ...latestPage.data,\n ]\n },\n ...pagesRest,\n ],\n }\n }\n )\n)\n","import { QueryClient } from '@tanstack/react-query'\nimport OpenAI from 'openai'\nimport { MessagesQueryKey } from '@/types'\n\nexport const threadRunFailed = ({\n value,\n queryClient,\n messagesQueryKey,\n}: {\n value: OpenAI.Beta.Assistants.AssistantStreamEvent.ThreadRunCreated\n messagesQueryKey: MessagesQueryKey\n queryClient: QueryClient\n}) => {\n throw new Error('Failed to send your message, try again. If you are the owner, check the logs.')\n}\n","import { QueryClient } from '@tanstack/react-query'\nimport OpenAI from 'openai'\nimport { SerializedMessage, MessagesQueryKey } from '@/types'\n\nexport const threadRunStepCreated = ({\n value,\n queryClient,\n messagesQueryKey,\n}: {\n value: OpenAI.Beta.Assistants.AssistantStreamEvent.ThreadRunStepCreated\n messagesQueryKey: MessagesQueryKey\n queryClient: QueryClient\n}) => (\n queryClient.setQueryData(\n messagesQueryKey,\n (prevData: any) => {\n if (!prevData) return prevData\n\n const [latestPage, ...pagesRest] = prevData.pages\n\n return {\n ...prevData,\n pages: [\n {\n ...latestPage,\n data: latestPage.data.map((m: SerializedMessage) => {\n if (m.run_id === value.data.run_id) {\n return {\n ...m,\n runSteps: [\n value.data,\n ...m.runSteps,\n ],\n }\n }\n\n return m\n }),\n },\n ...pagesRest,\n ],\n }\n }\n )\n)\n","import { QueryClient } from '@tanstack/react-query'\nimport _ from 'lodash'\nimport { omit } from 'radash'\nimport OpenAI from 'openai'\nimport { SerializedMessage, SerializedRunStep, ThreadRunStepDeltaEvent, MessagesQueryKey } from '@/types'\n\nconst updatedToolCall = ({\n toolCall,\n delta,\n}: {\n toolCall: OpenAI.Beta.Threads.Runs.ToolCall\n delta: OpenAI.Beta.Threads.Runs.ToolCallDelta\n}) => {\n if (!toolCall) {\n return omit(delta, ['index'])\n }\n\n if (delta.type === 'function' && delta.function && toolCall.type === 'function' && toolCall.function) {\n const result = _.cloneDeep(toolCall)\n\n for (const [key, value] of Object.entries(delta.function)) {\n // @ts-ignore-next-line\n result.function[key] = `${result.function[key] ?? ''}${value}`\n }\n\n return result\n }\n\n return toolCall\n}\n\nconst updatedRunStep = ({\n runStep,\n value,\n}: {\n runStep: SerializedRunStep\n value: ThreadRunStepDeltaEvent\n}) => {\n // @ts-ignore-next-line\n if (!runStep?.step_details?.tool_calls) return runStep\n\n if (value.data.delta?.step_details?.type === 'tool_calls') {\n if (!value.data.delta.step_details.tool_calls) return runStep\n\n // @ts-ignore-next-line\n const newToolCalls = _.cloneDeep(runStep.step_details.tool_calls)\n\n value.data.delta.step_details.tool_calls.forEach((delta: OpenAI.Beta.Threads.Runs.ToolCallDelta) => (\n newToolCalls[delta.index] = updatedToolCall({\n toolCall: newToolCalls[delta.index],\n delta,\n })\n ))\n\n return {\n ...runStep,\n step_details: {\n ...runStep.step_details,\n ...value.data.delta.step_details,\n tool_calls: newToolCalls,\n },\n }\n } else {\n return runStep\n }\n}\n\n\nexport const threadRunStepDelta = ({\n value,\n queryClient,\n messagesQueryKey,\n}: {\n value: ThreadRunStepDeltaEvent\n messagesQueryKey: MessagesQueryKey\n queryClient: QueryClient\n}) => (\n queryClient.setQueryData(\n messagesQueryKey,\n (prevData: any) => {\n if (!prevData) return prevData\n\n const [latestPage, ...pagesRest] = prevData.pages\n\n return {\n ...prevData,\n pages: [\n {\n ...latestPage,\n data: latestPage.data.map((m: SerializedMessage) => {\n if (m.run_id === value.data.run_id) {\n return {\n ...m,\n runSteps: m.runSteps.map((rs: SerializedRunStep) => {\n if (rs.id === value.data.id) {\n return updatedRunStep({ runStep: rs, value })\n }\n\n return rs\n }),\n }\n }\n\n return m\n }),\n },\n ...pagesRest,\n ],\n }\n }\n )\n)\n","import { QueryClient } from '@tanstack/react-query'\nimport OpenAI from 'openai'\nimport { SerializedRunStep, SerializedMessage, MessagesQueryKey } from '@/types'\nimport { replace } from 'radash'\n\nexport const threadRunStepCompleted = ({\n value,\n queryClient,\n messagesQueryKey,\n}: {\n value: OpenAI.Beta.Assistants.AssistantStreamEvent.ThreadRunStepCompleted\n messagesQueryKey: MessagesQueryKey\n queryClient: QueryClient\n}) => (\n queryClient.setQueryData(\n messagesQueryKey,\n (prevData: any) => {\n if (!prevData) return prevData\n\n const [latestPage, ...pagesRest] = prevData.pages\n\n return {\n ...prevData,\n pages: [\n {\n ...latestPage,\n data: latestPage.data.map((m: SerializedMessage) => {\n if (m.run_id === value.data.run_id) {\n return {\n ...m,\n runSteps: replace(m.runSteps, value.data, (rs: SerializedRunStep) => rs.id === value.data.id),\n }\n }\n\n return m\n }),\n },\n ...pagesRest,\n ],\n }\n }\n )\n)\n","import { QueryClient } from '@tanstack/react-query'\nimport { ToolCall } from '@/types'\nimport _ from 'lodash'\nimport OpenAI from 'openai'\nimport { map } from 'radash'\nimport { MessagesQueryKey } from '@/types'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\n\nexport const threadRunRequiresAction = async ({\n value,\n queryClient,\n messagesQueryKey,\n superinterfaceContext,\n}: {\n value: OpenAI.Beta.Assistants.AssistantStreamEvent.ThreadRunRequiresAction & {\n data: {\n required_action: {\n type: 'submit_client_tool_outputs'\n submit_client_tool_outputs: {\n tool_calls: ToolCall[]\n }\n }\n }\n }\n messagesQueryKey: MessagesQueryKey\n queryClient: QueryClient\n superinterfaceContext: ReturnType<typeof useSuperinterfaceContext>\n}) => {\n // @ts-ignore-next-line\n if (value.data.required_action.type === 'submit_client_tool_outputs') {\n // @ts-ignore-next-line\n const toolCalls = value.data.required_action.submit_client_tool_outputs.tool_calls\n\n const toolOutputs = await map(toolCalls, async (toolCall: ToolCall) => {\n if (toolCall.type !== 'function') {\n return {\n toolCallId: toolCall.id,\n output: `Error: client tool type ${toolCall.type} is not supported.`,\n }\n }\n\n // @ts-ignore-next-line\n const fn = window[toolCall.function.name as string]\n\n if (!fn) {\n return {\n toolCallId: toolCall.id,\n output: `Error: client function ${toolCall.function.name} is not defined.`,\n }\n }\n\n const args = toolCall.function.arguments\n const parsedArgs = JSON.parse(args)\n\n let output\n\n try {\n output = await fn(parsedArgs)\n } catch (error: any) {\n output = `Error: ${error.message}`\n }\n\n return {\n toolCallId: toolCall.id,\n output,\n }\n })\n\n return fetch(`${superinterfaceContext.baseUrl}/threads/runs/submit-client-tool-outputs`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n toolOutputs,\n ...superinterfaceContext.variables,\n })\n })\n }\n}\n","import { threadCreated } from './threadCreated'\nimport { threadMessageCreated } from './threadMessageCreated'\nimport { threadMessageDelta } from './threadMessageDelta'\nimport { threadMessageCompleted } from './threadMessageCompleted'\nimport { threadRunCreated } from './threadRunCreated'\nimport { threadRunFailed } from './threadRunFailed'\nimport { threadRunStepCreated } from './threadRunStepCreated'\nimport { threadRunStepDelta } from './threadRunStepDelta'\nimport { threadRunStepCompleted } from './threadRunStepCompleted'\nimport { threadRunRequiresAction } from './threadRunRequiresAction'\n\nexport const handlers = {\n 'thread.created': threadCreated,\n 'thread.message.created': threadMessageCreated,\n 'thread.message.delta': threadMessageDelta,\n 'thread.message.completed': threadMessageCompleted,\n 'thread.run.created': threadRunCreated,\n 'thread.run.failed': threadRunFailed,\n 'thread.run.step.created': threadRunStepCreated,\n 'thread.run.step.delta': threadRunStepDelta,\n 'thread.run.step.completed': threadRunStepCompleted,\n 'thread.run.requires_action': threadRunRequiresAction,\n}\n","import OpenAI from 'openai'\nimport {\n useQueryClient,\n} from '@tanstack/react-query'\nimport { MessagesQueryKey } from '@/types'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\nimport { handlers } from './handlers'\n\nexport const handleResponse = ({\n value,\n messagesQueryKey,\n queryClient,\n superinterfaceContext,\n}: {\n value: {\n value: OpenAI.Beta.Assistants.AssistantStreamEvent\n }\n messagesQueryKey: MessagesQueryKey\n queryClient: ReturnType<typeof useQueryClient>\n superinterfaceContext: ReturnType<typeof useSuperinterfaceContext>\n}) => {\n // @ts-ignore-next-line\n const handler = handlers[value.value.event]\n\n if (!handler) {\n return console.log('Missing handler', { value })\n }\n\n return handler({\n value: value.value,\n queryClient,\n messagesQueryKey,\n superinterfaceContext,\n })\n}\n","import { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\n\nexport const body = ({\n variables,\n superinterfaceContext,\n}: {\n variables: {\n [key: string]: any\n }\n superinterfaceContext: ReturnType<typeof useSuperinterfaceContext>\n}) => {\n if (variables.threadId) return variables\n if (!variables.assistantId) return variables\n if (!superinterfaceContext.threadIdStorageOptions?.get) return variables\n\n const threadId = superinterfaceContext.threadIdStorageOptions.get({ assistantId: variables.assistantId })\n if (!threadId) return variables\n\n return {\n ...variables,\n threadId,\n }\n}\n","import _ from 'lodash'\nimport {\n useQueryClient,\n} from '@tanstack/react-query'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\nimport { useThreadContext } from '@/hooks/threads/useThreadContext'\nimport { onMutate } from './onMutate'\nimport { mutationFn } from './mutationFn'\n\nexport const mutationOptions = ({\n queryClient,\n threadContext,\n superinterfaceContext,\n onError,\n}: {\n queryClient: ReturnType<typeof useQueryClient>,\n threadContext: ReturnType<typeof useThreadContext>,\n superinterfaceContext: ReturnType<typeof useSuperinterfaceContext>,\n onError: (error: unknown) => void\n}) => {\n const mutationKey = ['createMessage', threadContext.variables]\n\n return {\n mutationFn: mutationFn({\n queryClient,\n superinterfaceContext,\n threadContext,\n }),\n onMutate: onMutate({ queryClient }),\n onError,\n ...threadContext.defaultOptions.mutations,\n ...queryClient.getMutationDefaults(mutationKey),\n mutationKey,\n }\n}\n","import { useContext } from 'react'\nimport { ToastsContext } from '@/contexts/toasts/ToastsContext'\n\nexport const useToasts = () => (\n useContext(ToastsContext)\n)\n","'use client'\nimport { createContext } from 'react'\nimport { Toast } from '@/types'\n\nexport const ToastsContext = createContext<{\n toasts: Toast[]\n addToast: (toast: Toast) => void\n}>({\n toasts: [],\n addToast: () => {},\n})\n","import {\n QueryClient,\n} from '@tanstack/react-query'\nimport { Toast } from '@/types'\nimport { useThreadContext } from '@/hooks/threads/useThreadContext'\n\nexport const createMessageDefaultOnError = ({\n queryClient,\n addToast,\n threadContext,\n}: {\n queryClient: QueryClient\n addToast: (toast: Toast) => void\n threadContext: ReturnType<typeof useThreadContext>\n}) => (error: any) => {\n if (error.name === 'AbortError') {\n queryClient.invalidateQueries({ queryKey: ['messages', threadContext.variables] })\n queryClient.invalidateQueries({ queryKey: ['runs', threadContext.variables] })\n return\n }\n\n addToast({ type: 'error', message: error.message })\n}\n","import {\n Box,\n} from '@radix-ui/themes'\n\nexport const Image = (props: JSX.IntrinsicElements['img']) => (\n <Box\n pb=\"3\"\n >\n <img\n {...props}\n style={{\n maxWidth: '100%',\n height: 'auto',\n }}\n />\n </Box>\n)\n","// list is from https://www.npmjs.com/package/video-extensions\nconst videoExtensions = [\n '3g2',\n '3gp',\n 'aaf',\n 'asf',\n 'avchd',\n 'avi',\n 'drc',\n 'flv',\n 'm2v',\n 'm3u8',\n 'm4p',\n 'm4v',\n 'mkv',\n 'mng',\n 'mov',\n 'mp2',\n 'mp4',\n 'mpe',\n 'mpeg',\n 'mpg',\n 'mpv',\n 'mxf',\n 'nsv',\n 'ogg',\n 'ogv',\n 'qt',\n 'rm',\n 'rmvb',\n 'roq',\n 'svi',\n 'vob',\n 'webm',\n 'wmv',\n 'yuv',\n]\n\nexport const isVideoSrc = ({\n src,\n}: {\n src: string\n}) => (\n videoExtensions.includes(src.split('.').pop() || '')\n)\n","export const isAudioSrc = ({\n src,\n}: {\n src: string\n}) => (\n src.endsWith('.mp3') || src.endsWith('.wav')\n)\n","import {\n Flex,\n} from '@radix-ui/themes'\nimport '@vidstack/react/player/styles/base.css'\nimport {\n VideoMimeType,\n MediaPlayer,\n MediaProvider,\n Controls,\n} from '@vidstack/react'\nimport { PlayButton } from '@/components/media/PlayButton'\nimport { VolumeButton } from '@/components/media/VolumeButton'\nimport { Time } from '@/components/media/Time'\nimport { MediaContainer } from '@/components/media/MediaContainer'\nimport { FullscreenButton } from './FullscreenButton'\n\nexport const Video = ({\n src,\n}: {\n src: string\n}) => (\n <MediaContainer>\n <MediaPlayer\n src={{\n src,\n type: `video/${src.split('.').pop()}` as VideoMimeType,\n }}\n playsInline\n hideControlsOnMouseLeave\n crossOrigin\n >\n <MediaProvider />\n\n <style>\n {`\n .superinterface-video-controls {\n opacity: 0;\n transition: opacity 0.2s ease-out;\n }\n\n .superinterface-video-controls[data-visible] {\n opacity: 1;\n }\n `}\n </style>\n <Flex\n asChild\n position=\"absolute\"\n bottom=\"0\"\n left=\"0\"\n right=\"0\"\n className=\"superinterface-video-controls\"\n p=\"3\"\n style={{\n zIndex: 10,\n background: 'var(--accent-4)',\n }}\n >\n <Controls.Root>\n <Flex\n asChild\n align=\"center\"\n gap=\"3\"\n flexGrow=\"1\"\n >\n <Controls.Group>\n <PlayButton />\n <Time />\n <VolumeButton />\n <FullscreenButton />\n </Controls.Group>\n </Flex>\n </Controls.Root>\n </Flex>\n </MediaPlayer>\n </MediaContainer>\n)\n","import {\n PlayButton as VidstackPlayButton,\n useMediaState,\n} from '@vidstack/react'\nimport {\n IconButton,\n} from '@radix-ui/themes'\nimport {\n PlayIcon,\n PauseIcon,\n} from '@radix-ui/react-icons'\n\nexport const PlayButton = () => {\n const isPaused = useMediaState('paused')\n\n return (\n <IconButton\n variant=\"ghost\"\n asChild\n >\n <VidstackPlayButton>\n {isPaused ? <PlayIcon /> : <PauseIcon />}\n </VidstackPlayButton>\n </IconButton>\n )\n}\n","import {\n MuteButton,\n useMediaState,\n useMediaRemote,\n} from '@vidstack/react'\nimport {\n IconButton,\n HoverCard,\n Slider,\n} from '@radix-ui/themes'\nimport {\n SpeakerModerateIcon,\n SpeakerOffIcon,\n} from '@radix-ui/react-icons'\n\nexport const VolumeButton = () => {\n const volume = useMediaState('volume')\n const isMuted = useMediaState('muted')\n const remote = useMediaRemote()\n\n return (\n <HoverCard.Root>\n <HoverCard.Trigger>\n <IconButton\n variant=\"ghost\"\n asChild\n >\n <MuteButton>\n {(isMuted || volume === 0) ? <SpeakerOffIcon /> : <SpeakerModerateIcon />}\n </MuteButton>\n </IconButton>\n </HoverCard.Trigger>\n <HoverCard.Content\n size=\"1\"\n side=\"top\"\n height=\"100px\"\n >\n <Slider\n size=\"1\"\n variant=\"soft\"\n orientation=\"vertical\"\n value={[volume * 100]}\n onValueChange={([value]) => (\n remote.changeVolume(value / 100)\n )}\n />\n </HoverCard.Content>\n </HoverCard.Root>\n )\n}\n","import {\n useState,\n useEffect,\n useMemo,\n} from 'react'\nimport {\n useMediaState,\n useMediaRemote,\n} from '@vidstack/react'\nimport {\n Slider,\n} from '@radix-ui/themes'\n\nexport const Time = () => {\n const time = useMediaState('currentTime')\n const duration = useMediaState('duration')\n const seeking = useMediaState('seeking')\n const canSeek = useMediaState('canSeek')\n const remote = useMediaRemote()\n\n const [value, setValue] = useState(0)\n\n useEffect(() => {\n if (seeking) return;\n setValue((time / duration) * 100);\n }, [time, duration, seeking])\n\n const step = useMemo(() => (\n (1 / duration) * 100\n ), [duration])\n\n return (\n <Slider\n size=\"1\"\n variant=\"soft\"\n value={[value]}\n disabled={!canSeek}\n step={Number.isFinite(step) ? step : 1}\n onValueChange={([value]) => {\n setValue(value)\n remote.seeking((value / 100) * duration)\n }}\n onValueCommit={([value]) => {\n remote.seek((value / 100) * duration)\n }}\n />\n )\n}\n","import {\n Card,\n Inset,\n} from '@radix-ui/themes'\n\nexport const MediaContainer = ({\n children,\n}: {\n children: React.ReactNode\n}) => (\n <Card\n mb=\"3\"\n >\n <Inset\n clip=\"padding-box\"\n style={{\n display: 'flex',\n flexDirection: 'column',\n }}\n >\n {children}\n </Inset>\n </Card>\n)\n","import {\n FullscreenButton as VidstackFullscreenButton,\n useMediaState,\n} from '@vidstack/react'\nimport {\n IconButton,\n} from '@radix-ui/themes'\nimport {\n EnterFullScreenIcon,\n ExitFullScreenIcon,\n} from '@radix-ui/react-icons'\n\nexport const FullscreenButton = () => {\n const isFullscreen = useMediaState('fullscreen')\n\n return (\n <IconButton\n variant=\"ghost\"\n asChild\n >\n <VidstackFullscreenButton>\n {isFullscreen ? <ExitFullScreenIcon /> : <EnterFullScreenIcon />}\n </VidstackFullscreenButton>\n </IconButton>\n )\n}\n","import {\n Flex,\n} from '@radix-ui/themes'\nimport '@vidstack/react/player/styles/base.css'\nimport {\n MediaPlayer,\n MediaProvider,\n Controls,\n AudioMimeType,\n} from '@vidstack/react'\nimport { PlayButton } from '@/components/media/PlayButton'\nimport { VolumeButton } from '@/components/media/VolumeButton'\nimport { Time } from '@/components/media/Time'\nimport { MediaContainer } from '@/components/media/MediaContainer'\n\nexport const Audio = ({\n src,\n}: {\n src: string\n}) => (\n <MediaContainer>\n <MediaPlayer\n src={{\n src,\n type: `audio/${src.split('.').pop()}` as AudioMimeType,\n }}\n viewType=\"audio\"\n crossOrigin\n playsInline\n >\n <MediaProvider />\n\n <Flex\n asChild\n p=\"3\"\n flexGrow=\"1\"\n style={{\n zIndex: 10,\n background: 'var(--accent-4)',\n }}\n >\n <Controls.Root>\n <Flex\n asChild\n align=\"center\"\n gap=\"3\"\n flexGrow=\"1\"\n >\n <Controls.Group>\n <PlayButton />\n <Time />\n <VolumeButton />\n </Controls.Group>\n </Flex>\n </Controls.Root>\n </Flex>\n </MediaPlayer>\n </MediaContainer>\n)\n","import { Image } from '@/components/images/Image'\nimport { isVideoSrc } from './lib/isVideoSrc'\nimport { isAudioSrc } from './lib/isAudioSrc'\nimport { Video } from './Video'\nimport { Audio } from './Audio'\n\nexport const Img = (props: JSX.IntrinsicElements['img']) => {\n if (!props.src) {\n return (\n <Image\n {...props}\n />\n )\n } else if (isVideoSrc({ src: props.src })) {\n return (\n <Video\n src={props.src!}\n />\n )\n } else if (isAudioSrc({ src: props.src })) {\n return (\n <Audio\n src={props.src!}\n />\n )\n } else {\n return (\n <Image\n {...props}\n />\n )\n }\n}\n","import {\n QuoteIcon,\n} from '@radix-ui/react-icons'\nimport OpenAI from 'openai'\nimport { AnnotationBase } from './AnnotationBase'\nimport { FilePathAnnotation } from './FilePathAnnotation'\n\nexport const Annotation = ({\n annotation,\n children,\n}: {\n annotation: OpenAI.Beta.Threads.Messages.Annotation\n children: React.ReactNode\n}) => {\n if (annotation.type === 'file_citation') {\n return (\n <AnnotationBase\n icon={<QuoteIcon />}\n content=\"File cited.\"\n />\n )\n } else if (annotation.type === 'file_path') {\n return (\n <FilePathAnnotation\n annotation={annotation}\n >\n {children}\n </FilePathAnnotation>\n )\n }\n\n return null\n}\n","import {\n IconButton,\n Popover,\n Flex,\n Text,\n} from '@radix-ui/themes'\n\nexport const AnnotationBase = ({\n icon,\n content,\n}: {\n icon: React.ReactNode,\n content: string\n}) => (\n <Popover.Root>\n <Popover.Trigger>\n <IconButton\n variant=\"soft\"\n color=\"gray\"\n size=\"1\"\n >\n {icon}\n </IconButton>\n </Popover.Trigger>\n <Popover.Content\n size=\"1\"\n >\n <Flex\n direction=\"column\"\n >\n <Text\n size=\"1\"\n color=\"gray\"\n >\n {content}\n </Text>\n </Flex>\n </Popover.Content>\n </Popover.Root>\n)\n","import OpenAI from 'openai'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\nimport { Link } from '@/contexts/markdown/MarkdownContext/lib/components/Link'\n\nexport const FilePathAnnotation = ({\n annotation,\n children,\n}: {\n annotation: OpenAI.Beta.Threads.Messages.FilePathAnnotation\n children: React.ReactNode\n}) => {\n const superinterfaceContext = useSuperinterfaceContext()\n const nextSearchParams = new URLSearchParams(superinterfaceContext.variables)\n\n return (\n <Link\n href={`${superinterfaceContext.baseUrl}/files/${annotation.file_path.file_id}/contents?${nextSearchParams}`}\n target=\"_self\"\n download\n >\n {children}\n </Link>\n )\n}\n","import OpenAI from 'openai'\nimport remarkGfm from 'remark-gfm'\nimport { remarkAnnotation } from '@/lib/remark/remarkAnnotation'\n\nexport const getRemarkPlugins = ({\n content,\n}: {\n content: OpenAI.Beta.Threads.Messages.TextContentBlock\n}) => [\n remarkAnnotation({ content }),\n remarkGfm,\n]\n","import OpenAI from 'openai'\nimport { isNumber } from 'radash'\nimport type { Node, Literal, Position } from 'unist'\nimport type { Text, Link } from 'mdast'\n// @ts-ignore-next-line\nimport flatMap from 'unist-util-flatmap'\n\ninterface AnnotationNode extends Literal {\n type: 'annotation'\n value: string\n position?: Position\n data: {\n hName: 'annotation'\n hProperties: {\n annotation: any\n }\n }\n}\n\nconst sortedAnnotations = ({\n content,\n}: {\n content: OpenAI.Beta.Threads.Messages.TextContentBlock\n}) =>\n content.text.annotations.sort((a, b) => a.start_index - b.start_index)\n\nexport const remarkAnnotation = ({\n content,\n}: {\n content: OpenAI.Beta.Threads.Messages.TextContentBlock\n}) => {\n return () => {\n return (tree: any) => {\n flatMap(tree, (node: Node) => {\n // Process text and link nodes\n if (node.type === 'text' || node.type === 'link') {\n return processNodeWithAnnotations({ node, content })\n } else {\n // Return other nodes as-is\n return [node]\n }\n })\n }\n }\n}\n\nconst processNodeWithAnnotations = ({\n node,\n content,\n}: {\n node: Node\n content: OpenAI.Beta.Threads.Messages.TextContentBlock\n}): Node[] => {\n if (!content.text?.annotations?.length) {\n return [node]\n }\n\n if (!node.position) {\n return [node]\n }\n\n const annotations = sortedAnnotations({ content })\n\n if (node.type === 'text') {\n // node is a Text node\n return processTextNode({ node: node as Text, annotations })\n } else if (node.type === 'link') {\n // node is a Link node\n const linkNode = node as Link\n // Process link node's children\n linkNode.children = flatMap(linkNode.children, (childNode: Node) => {\n if (childNode.type === 'text') {\n return processTextNode({ node: childNode as Text, annotations })\n } else {\n return [childNode]\n }\n })\n return [linkNode]\n } else {\n // Return node as-is\n return [node]\n }\n}\n\nconst processTextNode = ({\n node,\n annotations,\n}: {\n node: Text\n annotations: any[]\n}): Node[] => {\n if (!node.position || !node.value) {\n return [node]\n }\n\n const nodeStart = node.position.start.offset!\n const nodeEnd = node.position.end.offset!\n\n if (!isNumber(nodeStart) || !isNumber(nodeEnd)) {\n return [node]\n }\n\n const newNodes: Node[] = []\n let lastIndex = nodeStart\n\n annotations.forEach((annotation) => {\n const annotationStart = annotation.start_index\n const annotationEnd = annotation.end_index\n\n if (nodeEnd <= annotationStart || nodeStart >= annotationEnd) {\n return\n }\n\n const start = Math.max(nodeStart, annotationStart)\n const end = Math.min(nodeEnd, annotationEnd)\n\n if (lastIndex < start) {\n newNodes.push(createTextNode({ node, startOffset: lastIndex, endOffset: start }))\n }\n\n newNodes.push(\n createAnnotationNode({\n node,\n startOffset: start,\n endOffset: end,\n annotation,\n })\n )\n lastIndex = end\n })\n\n if (lastIndex < nodeEnd) {\n newNodes.push(createTextNode({ node, startOffset: lastIndex, endOffset: nodeEnd }))\n }\n\n return newNodes\n}\n\nconst createTextNode = ({\n node,\n startOffset,\n endOffset,\n}: {\n node: Text\n startOffset: number\n endOffset: number\n}): Text => {\n const valueStart = startOffset - node.position!.start.offset!\n const valueEnd = endOffset - node.position!.start.offset!\n\n return {\n type: 'text',\n value: node.value.slice(valueStart, valueEnd),\n position: {\n start: {\n ...node.position!.start,\n offset: startOffset,\n },\n end: {\n ...node.position!.end,\n offset: endOffset,\n },\n },\n }\n}\n\nconst createAnnotationNode = ({\n node,\n startOffset,\n endOffset,\n annotation,\n}: {\n node: Text\n startOffset: number\n endOffset: number\n annotation: any\n}): AnnotationNode => {\n const valueStart = startOffset - node.position!.start.offset!\n const valueEnd = endOffset - node.position!.start.offset!\n\n return {\n type: 'annotation',\n value: node.value.slice(valueStart, valueEnd),\n position: {\n start: {\n ...node.position!.start,\n offset: startOffset,\n },\n end: {\n ...node.position!.end,\n offset: endOffset,\n },\n },\n data: {\n hName: 'annotation',\n hProperties: {\n annotation,\n },\n },\n }\n}\n","import OpenAI from 'openai'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\nimport { Image } from '@/components/images/Image'\n\nexport const ImageFileContent = ({\n content,\n}: {\n content: OpenAI.Beta.Threads.Messages.ImageFileContentBlock\n}) => {\n const superinterfaceContext = useSuperinterfaceContext()\n const nextSearchParams = new URLSearchParams(superinterfaceContext.variables)\n\n return (\n <Image\n alt=\"\"\n src={`${superinterfaceContext.baseUrl}/files/${content.image_file.file_id}/contents?${nextSearchParams}`}\n />\n )\n}\n","import OpenAI from 'openai'\nimport { TextContent } from './TextContent'\nimport { ImageFileContent } from './ImageFileContent'\n\nexport const ContentPart = ({\n content,\n}: {\n content: OpenAI.Beta.Threads.Messages.Message['content'][0]\n}) => {\n if (content.type === 'text') {\n return (\n <TextContent\n content={content}\n />\n )\n }\n\n if (content.type === 'image_file') {\n return (\n <ImageFileContent\n content={content}\n />\n )\n }\n\n return null\n}\n","'use client'\nimport { useEffect } from 'react'\nimport { useMessages } from '@/hooks/messages/useMessages'\nimport { useMessageGroups } from '@/hooks/messageGroups/useMessageGroups'\nimport { MessageGroup as MessageGroupType } from '@/types'\nimport { MessagesSkeleton } from '@/components/skeletons/MessagesSkeleton'\nimport { useToasts } from '@/hooks/toasts/useToasts'\nimport { MessageGroup } from './MessageGroup'\n\nexport const Content = () => {\n const {\n messages,\n isLoading,\n isLoadingError,\n } = useMessages()\n\n const { addToast } = useToasts()\n\n const { messageGroups } = useMessageGroups({\n messages,\n })\n\n useEffect(() => {\n if (isLoadingError) {\n addToast({ type: 'error', message: 'Could not load messages. Please try again.' })\n }\n }, [isLoadingError, addToast])\n\n if (isLoading || isLoadingError) {\n return (\n <MessagesSkeleton />\n )\n }\n\n return (\n <>\n {messageGroups.map((messageGroup: MessageGroupType) => (\n <MessageGroup\n key={messageGroup.id}\n messageGroup={messageGroup}\n />\n ))}\n </>\n )\n}\n","import { useMemo } from 'react'\nimport { messageGroups as getMessageGroups } from './lib/messageGroups'\nimport { SerializedMessage } from '@/types'\n\ntype Args = {\n messages: SerializedMessage[]\n}\n\nexport const useMessageGroups = ({\n messages,\n}: Args) => (\n useMemo(\n () => ({\n messageGroups: getMessageGroups({ messages }),\n }),\n [messages]\n )\n)\n","import _ from 'lodash'\nimport { last } from 'radash'\nimport { SerializedMessage, MessageGroup } from '@/types'\nimport { order } from '@/lib/messages/order'\nimport { newGroup } from './newGroup'\n\ntype Args = {\n messages: SerializedMessage[]\n}\n\nexport const messageGroups = ({\n messages,\n}: Args) =>\n _.reduce(\n order({ messages }),\n (groups: MessageGroup[], message: SerializedMessage) => {\n const group = last(groups)\n\n if (!group) return newGroup({ groups, message })\n\n if (group.role !== message.role) {\n return newGroup({\n groups,\n message,\n })\n }\n\n return [\n ..._.dropRight(groups),\n {\n ...group,\n messages: [...group.messages, message],\n },\n ]\n },\n []\n )\n","import { sort } from 'radash'\nimport { SerializedMessage } from '@/types'\n\ntype Args = {\n messages: SerializedMessage[]\n}\n\nexport const order = ({ messages }: Args) =>\n sort(messages, m => m.created_at, true)\n","import { SerializedMessage } from '@/types'\n\ntype Args = {\n message: SerializedMessage\n}\n\nexport const newGroupItem = ({ message }: Args) => ({\n id: message.id,\n role: message.role,\n createdAt: message.created_at,\n messages: [message],\n})\n","import { SerializedMessage, MessageGroup } from '@/types'\nimport { newGroupItem } from './newGroupItem'\n\ntype Args = {\n groups: MessageGroup[]\n message: SerializedMessage\n}\n\nexport const newGroup = ({ groups, message }: Args) => [\n ...groups,\n newGroupItem({\n message,\n }),\n]\n","import { forwardRef } from 'react'\nimport {\n Flex,\n Avatar,\n Box,\n Skeleton,\n} from '@radix-ui/themes'\nimport { MessageGroupBase } from '@/components/messageGroups/MessageGroupBase'\nimport { Name } from '@/components/messageGroups/MessageGroupBase/Name'\n\nexport const MessagesSkeleton = forwardRef(function MessagesSkeleton(_props, ref) {\n return (\n <MessageGroupBase\n // @ts-ignore-next-line\n ref={ref}\n >\n <Skeleton loading>\n <Avatar\n fallback={<Flex />}\n size=\"1\"\n />\n </Skeleton>\n\n <Box\n pb=\"3\"\n >\n <Name>\n <Skeleton\n loading\n style={{\n width: '128px',\n }}\n />\n </Name>\n\n <Skeleton\n loading\n style={{\n width: '256px',\n }}\n />\n\n <Skeleton\n loading\n style={{\n width: '256px',\n marginTop: 'var(--space-2)',\n }}\n />\n\n <Skeleton\n loading\n style={{\n width: '256px',\n marginTop: 'var(--space-2)',\n }}\n />\n </Box>\n </MessageGroupBase>\n )\n})\n","import { forwardRef } from 'react'\nimport {\n Flex,\n Container,\n} from '@radix-ui/themes'\n\ntype Args = {\n children: React.ReactNode\n}\n\nexport const MessageGroupBase = forwardRef(function MessageGroupBase({\n children,\n}: Args, ref: React.Ref<HTMLDivElement>) {\n return (\n <Container\n ref={ref}\n size=\"2\"\n flexGrow=\"0\"\n >\n <Flex\n flexShrink=\"0\"\n gap=\"3\"\n >\n {children}\n </Flex>\n </Container>\n )\n})\n","import {\n Flex,\n Text,\n} from '@radix-ui/themes'\n\ntype Args = {\n children: React.ReactNode\n}\n\nexport const Name = ({\n children,\n}: Args) => (\n <Flex\n align=\"center\"\n height=\"var(--space-5)\"\n >\n <Text\n size=\"2\"\n weight=\"bold\"\n >\n {children}\n </Text>\n </Flex>\n)\n","'use client'\nimport { useContext } from 'react'\nimport {\n Box,\n} from '@radix-ui/themes'\nimport { MessageGroupBase } from '@/components/messageGroups/MessageGroupBase'\nimport { Name } from '@/components/messageGroups/MessageGroupBase/Name'\nimport { AssistantAvatar } from '@/components/messageGroups/MessageGroupBase/AssistantAvatar'\nimport { AssistantNameContext } from '@/contexts/assistants/AssistantNameContext'\nimport { UserAvatar } from '@/components/messageGroups/MessageGroupBase/UserAvatar'\nimport { MessageGroup as MessageGroupType } from '@/types'\nimport { Content } from './Content'\n\ntype Args = {\n messageGroup: MessageGroupType\n}\n\nexport const MessageGroup = ({\n messageGroup,\n}: Args) => {\n const assistantNameContext = useContext(AssistantNameContext)\n\n return (\n <MessageGroupBase>\n {messageGroup.role === 'user' ? (\n <UserAvatar />\n ) : (\n <AssistantAvatar />\n )}\n\n <Box flexGrow=\"1\">\n <Name>\n {messageGroup.role === 'user' ? 'You' : assistantNameContext}\n </Name>\n\n <Content\n messageGroup={messageGroup}\n />\n </Box>\n </MessageGroupBase>\n )\n}\n","'use client'\nimport { useContext } from 'react'\nimport {\n Flex,\n} from '@radix-ui/themes'\nimport { AssistantAvatarContext } from '@/contexts/assistants/AssistantAvatarContext'\n\nexport const AssistantAvatar = () => {\n const AssistantAvatarContextValue = useContext(AssistantAvatarContext)\n\n return (\n <Flex\n flexShrink=\"0\"\n height=\"24px\"\n width=\"24px\"\n style={{\n borderRadius: 'var(--radius-3)',\n overflow: 'hidden',\n }}\n >\n {AssistantAvatarContextValue}\n </Flex>\n )\n}\n","'use client'\nimport { createContext } from 'react'\nimport {\n Avatar,\n} from '@radix-ui/themes'\nimport {\n LightningBoltIcon,\n} from '@radix-ui/react-icons'\n\nexport const AssistantAvatarContext = createContext(\n <Avatar\n fallback={<LightningBoltIcon />}\n size=\"1\"\n />\n)\n","'use client'\nimport { createContext } from 'react'\n\nexport const AssistantNameContext = createContext('Assistant')\n","'use client'\nimport { useContext } from 'react'\nimport {\n Flex,\n} from '@radix-ui/themes'\nimport { UserAvatarContext } from '@/contexts/users/UserAvatarContext'\n\nexport const UserAvatar = () => {\n const UserAvatarContextValue = useContext(UserAvatarContext)\n\n return (\n <Flex\n flexShrink=\"0\"\n height=\"24px\"\n width=\"24px\"\n style={{\n borderRadius: 'var(--radius-3)',\n overflow: 'hidden',\n }}\n >\n {UserAvatarContextValue}\n </Flex>\n )\n}\n","'use client'\nimport { createContext } from 'react'\nimport {\n Avatar,\n} from '@radix-ui/themes'\nimport {\n PersonIcon,\n} from '@radix-ui/react-icons'\n\nexport const UserAvatarContext = createContext(\n <Avatar\n fallback={<PersonIcon />}\n size=\"1\"\n />\n)\n","import { Flex } from '@radix-ui/themes'\nimport { MessageGroup } from '@/types'\nimport { Message } from '@/components/threads/Thread/Message'\n\ntype Args = {\n messageGroup: MessageGroup\n}\n\nexport const Content = ({\n messageGroup,\n}: Args) => (\n <Flex\n direction=\"column-reverse\"\n >\n {messageGroup.messages.map((message) => (\n <Message\n key={message.id}\n message={message}\n />\n ))}\n </Flex>\n)\n","import { useMemo } from 'react'\nimport { StartingSkeleton } from '@/components/skeletons/StartingSkeleton'\nimport { useLatestMessage } from '@/hooks/messages/useLatestMessage'\nimport { isOptimistic } from '@/lib/optimistic/isOptimistic'\nimport { useIsMutatingMessage } from '@/hooks/messages/useIsMutatingMessage'\n\nexport const Progress = () => {\n const { latestMessage } = useLatestMessage()\n const isMutatingMessage = useIsMutatingMessage()\n\n const isVisible = useMemo(() => {\n if (!latestMessage) return false\n if (latestMessage.role !== 'user') return false\n if (latestMessage.status === 'in_progress') return false\n if (!isOptimistic({ id: latestMessage.id })) return false\n if (!isMutatingMessage) return false\n\n return true\n }, [latestMessage, isMutatingMessage])\n\n if (!isVisible) return null\n\n return (\n <StartingSkeleton />\n )\n}\n","'use client'\nimport { useContext } from 'react'\nimport { Box } from '@radix-ui/themes'\nimport { StartingContentSkeleton } from '@/components/skeletons/StartingContentSkeleton'\nimport { MessageGroupBase } from '@/components/messageGroups/MessageGroupBase'\nimport { Name } from '@/components/messageGroups/MessageGroupBase/Name'\nimport { AssistantAvatar } from '@/components/messageGroups/MessageGroupBase/AssistantAvatar'\nimport { AssistantNameContext } from '@/contexts/assistants/AssistantNameContext'\n\ntype Args = {\n children?: React.ReactNode\n}\n\nexport const StartingSkeleton = ({\n children,\n}: Args) => {\n const assistantNameContext = useContext(AssistantNameContext)\n\n return (\n <MessageGroupBase>\n <AssistantAvatar />\n\n <Box>\n <Name>\n {assistantNameContext}\n </Name>\n\n {children}\n\n <StartingContentSkeleton />\n </Box>\n </MessageGroupBase>\n )\n}\n","'use client'\n\nimport { Flex } from '@radix-ui/themes'\nimport { useInfiniteScroll } from '@/hooks/misc/useInfiniteScroll'\nimport { useMessages } from '@/hooks/messages/useMessages'\nimport type { StyleProps } from '@/types'\n\nexport const Root = ({\n children,\n style,\n className,\n}: {\n children: React.ReactNode\n} & StyleProps) => {\n const {\n isFetchingNextPage,\n hasNextPage,\n fetchNextPage,\n } = useMessages()\n\n const { containerRef, loaderRef } = useInfiniteScroll({\n isFetchingNextPage,\n hasNextPage,\n fetchNextPage,\n })\n\n return (\n <Flex\n ref={containerRef}\n direction=\"column-reverse\"\n flexGrow=\"1\"\n style={{\n overflow: 'auto',\n ...(style ?? {}),\n }}\n className={className}\n >\n {children}\n\n {hasNextPage && (\n <Flex\n ref={loaderRef}\n />\n )}\n\n <Flex\n flexShrink=\"0\"\n flexGrow=\"1\"\n />\n </Flex>\n )\n}\n","import { useRef } from 'react'\nimport { useInView } from 'react-intersection-observer'\nimport { useThrottledEffect } from '@/hooks/misc/useThrottledEffect'\n\ntype Args = {\n isFetchingNextPage: boolean\n hasNextPage: boolean\n fetchNextPage: () => void\n}\n\nexport const useInfiniteScroll = ({\n isFetchingNextPage,\n hasNextPage,\n fetchNextPage,\n}: Args) => {\n const containerRef = useRef(null)\n\n const { ref: loaderRef, inView } = useInView({\n root: containerRef.current,\n rootMargin: '0px',\n threshold: 0.1,\n })\n\n useThrottledEffect(\n () => {\n if (isFetchingNextPage) return\n if (!inView) return\n if (!hasNextPage) return\n\n fetchNextPage()\n },\n 500,\n [inView, isFetchingNextPage, hasNextPage, fetchNextPage]\n )\n\n return {\n containerRef,\n loaderRef,\n inView,\n }\n}\n","import _ from 'lodash'\nimport { useRef, useEffect, useCallback } from 'react'\n\nexport const useThrottledEffect = (cb: Function, delay: number, additionalDeps: any[]) => {\n const cbRef = useRef(cb)\n\n const throttledCb = useCallback(\n _.throttle((...args: any[]) => cbRef.current(...args), delay, {\n leading: true,\n trailing: true,\n }),\n [delay]\n )\n useEffect(() => {\n cbRef.current = cb\n })\n // set additionalDeps to execute effect, when other values change (not only on delay change)\n useEffect(throttledCb, [throttledCb, ...additionalDeps])\n}\n","'use client'\nimport { useMessages } from '@/hooks/messages/useMessages'\nimport { MessagesSkeleton } from '@/components/skeletons/MessagesSkeleton'\n\nexport const NextPageSkeleton = () => {\n const {\n hasNextPage,\n } = useMessages()\n\n if (!hasNextPage) {\n return null\n }\n\n return (\n <MessagesSkeleton />\n )\n}\n","'use client'\n\nimport {\n ArrowUpIcon,\n StopIcon,\n} from '@radix-ui/react-icons'\nimport {\n IconButton,\n Flex,\n} from '@radix-ui/themes'\nimport { useMessageFormContext } from '@/hooks/messages/useMessageFormContext'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\nimport type { StyleProps } from '@/types'\n\nconst Root = ({\n children,\n style,\n className,\n}: {\n children: React.ReactNode\n} & StyleProps) => (\n <Flex\n flexShrink=\"0\"\n align=\"end\"\n style={style}\n className={className}\n >\n {children}\n </Flex>\n)\n\nconst Button = (props: StyleProps) => {\n const superinterfaceContext = useSuperinterfaceContext()\n const { isDisabled, isLoading, isFileLoading } = useMessageFormContext()\n\n if (isLoading) {\n return (\n <IconButton\n type=\"button\"\n onClick={() => superinterfaceContext.createMessageAbortControllerRef.current?.abort()}\n {...props}\n >\n <StopIcon />\n </IconButton>\n )\n }\n\n return (\n <IconButton\n type=\"submit\"\n disabled={isDisabled || isFileLoading}\n {...props}\n >\n <ArrowUpIcon />\n </IconButton>\n )\n}\n\nexport const Submit = (props: StyleProps) => (\n <Root {...props}>\n <Button />\n </Root>\n)\n\nSubmit.Root = Root\nSubmit.Button = Button\n","import { useContext } from 'react'\nimport { MessageFormContext } from '@/contexts/messages/MessageFormContext'\n\nexport const useMessageFormContext = () => (\n useContext(MessageFormContext)\n)\n","'use client'\nimport OpenAI from 'openai'\nimport { createContext, Dispatch, SetStateAction } from 'react'\n\nexport const MessageFormContext = createContext({\n content: '',\n isDisabled: false,\n isLoading: false,\n files: [] as OpenAI.Files.FileObject[],\n setFiles: (() => {}) as Dispatch<SetStateAction<OpenAI.Files.FileObject[]>>,\n isFileLoading: false,\n})\n","'use client'\nimport OpenAI from 'openai'\nimport {\n useQueryClient,\n} from '@tanstack/react-query'\nimport { useMemo, useState } from 'react'\nimport { useForm, SubmitHandler, FormProvider } from 'react-hook-form'\nimport { Box } from '@radix-ui/themes'\nimport { useLatestMessage } from '@/hooks/messages/useLatestMessage'\nimport { useCreateMessage } from '@/hooks/messages/useCreateMessage'\nimport { useThreadContext } from '@/hooks/threads/useThreadContext'\nimport { formOptions } from './lib/formOptions'\nimport { MessageFormContext } from '@/contexts/messages/MessageFormContext'\nimport { useToasts } from '@/hooks/toasts/useToasts'\nimport { useIsMutatingMessage } from '@/hooks/messages/useIsMutatingMessage'\nimport { partob } from 'radash'\nimport { isOptimistic } from '@/lib/optimistic/isOptimistic'\nimport { createMessageDefaultOnError } from '@/lib/errors/createMessageDefaultOnError'\nimport type { StyleProps } from '@/types'\n\ntype Inputs = {\n content: string\n attachments?: OpenAI.Beta.Threads.Message.Attachment[]\n}\n\nexport const Root = ({\n children,\n onSubmit: onSubmitArg,\n isDisabled: isDisabledArg,\n style,\n className,\n}: {\n children: React.ReactNode\n onSubmit?: SubmitHandler<Inputs & { reset: any, createMessage: any }>\n isDisabled?: boolean\n} & StyleProps) => {\n const [files, setFiles] = useState<OpenAI.Files.FileObject[]>([])\n const formProps = useForm<Inputs>(formOptions)\n\n const {\n handleSubmit,\n formState: { isSubmitting },\n reset,\n watch,\n } = formProps\n\n const { addToast } = useToasts()\n const queryClient = useQueryClient()\n const threadContext = useThreadContext()\n\n const { createMessage } = useCreateMessage({\n onError: createMessageDefaultOnError({\n queryClient,\n addToast,\n threadContext,\n }),\n })\n\n const isMutatingMessage = useIsMutatingMessage()\n\n const isFileLoading = useMemo(() => (\n files.some((file) => isOptimistic({ id: file.id }))\n ), [files])\n\n const isLoading = useMemo(() => (\n isMutatingMessage || isSubmitting\n ), [\n isMutatingMessage,\n isSubmitting,\n ])\n\n const { latestMessage } = useLatestMessage()\n\n const isDisabled = useMemo(() => (\n // @ts-ignore-next-line\n latestMessage?.metadata?.isBlocking || isDisabledArg\n ), [latestMessage, isDisabledArg])\n\n const onSubmit: SubmitHandler<Inputs> = onSubmitArg ? partob(onSubmitArg, { reset, createMessage }) : async (data) => {\n if (isFileLoading) return\n if (isLoading) return\n if (isDisabled) return\n\n reset()\n setFiles([])\n\n const attachments = files.map((file) => ({\n file_id: file.id,\n tools: [\n {\n type: 'file_search',\n },\n ],\n }))\n\n await createMessage({\n // @ts-ignore-next-line\n content: data.content,\n ...(attachments.length ? { attachments } : {}),\n })\n }\n\n const content = watch('content')\n\n return (\n <MessageFormContext.Provider\n value={{\n isDisabled,\n isLoading,\n files,\n setFiles,\n isFileLoading,\n content,\n }}\n >\n <FormProvider {...formProps}>\n <Box\n asChild\n flexShrink=\"0\"\n style={style}\n className={className}\n >\n <form\n onSubmit={handleSubmit(onSubmit)}\n >\n {children}\n </form>\n </Box>\n </FormProvider>\n </MessageFormContext.Provider>\n )\n}\n","import { z } from 'zod'\nimport { zodResolver } from '@hookform/resolvers/zod'\n\nconst schema = z.object({\n content: z.string().min(1),\n})\n\nexport const formOptions = {\n resolver: zodResolver(schema),\n}\n","'use client'\nimport { useFormContext } from 'react-hook-form'\nimport {\n Container as RadixContainer,\n Flex,\n} from '@radix-ui/themes'\nimport { Control } from './Control'\nimport { Files } from './Files'\nimport type { StyleProps } from '@/types'\n\nconst Root = ({\n children,\n className,\n style,\n}: {\n children: React.ReactNode\n} & StyleProps) => {\n const {\n formState: {\n errors,\n },\n } = useFormContext()\n\n return (\n <RadixContainer\n size=\"2\"\n flexGrow=\"0\"\n className={className}\n style={style}\n >\n <Flex\n direction=\"column\"\n flexShrink=\"0\"\n >\n <Flex\n direction=\"column\"\n flexShrink=\"0\"\n >\n <Flex\n style={{\n borderRadius: 'var(--radius-2)',\n borderWidth: '1px',\n borderStyle: 'solid',\n borderColor: errors.content ? 'var(--red-9)' : 'var(--gray-5)',\n ...(errors.content ? { backgroundColor: 'var(--red-2)' } : {}),\n }}\n p=\"2\"\n pl=\"3\"\n wrap=\"wrap\"\n >\n {children}\n </Flex>\n </Flex>\n </Flex>\n </RadixContainer>\n )\n}\n\nexport const Field = {\n Root,\n Control,\n Files,\n}\n","import {\n Flex,\n} from '@radix-ui/themes'\nimport { useFormContext } from 'react-hook-form'\nimport { usePrevious } from '@/hooks/misc/usePrevious'\nimport { useContext, useMemo, useRef, useEffect } from 'react'\nimport { AssistantNameContext } from '@/contexts/assistants/AssistantNameContext'\nimport { TextareaBase } from '@/components/textareas/TextareaBase'\nimport { useMessageFormContext } from '@/hooks/messages/useMessageFormContext'\nimport type { StyleProps } from '@/types'\n\nconst Root = ({\n children,\n style,\n className,\n}: {\n children: React.ReactNode\n} & StyleProps) => (\n <Flex\n flexGrow=\"1\"\n pt=\"4px\"\n style={style}\n className={className}\n >\n {children}\n </Flex>\n)\n\nconst Input = (props: Omit<StyleProps, 'style'> & {\n style?: Omit<React.CSSProperties, 'minHeight' | 'maxHeight' | 'height'>\n placeholder?: string\n}) => {\n const assistantNameContext = useContext(AssistantNameContext)\n const {\n register,\n } = useFormContext()\n\n const { isDisabled, isLoading } = useMessageFormContext()\n\n const isSubmitDisabled = useMemo(() => (\n isDisabled || isLoading\n ), [isDisabled, isLoading])\n\n const isDisabledPrevious = usePrevious(isDisabled)\n\n const textareaRef = useRef<HTMLTextAreaElement>(null)\n const textareaProps = register('content')\n\n useEffect(() => {\n if (isDisabled) return\n if (!isDisabledPrevious) return\n if (!textareaRef.current) return\n\n textareaRef.current.focus()\n }, [isDisabled, isDisabledPrevious, textareaProps])\n\n return (\n <TextareaBase\n minRows={1}\n placeholder={props.placeholder ?? `Message ${assistantNameContext}...`}\n disabled={isDisabled}\n onKeyDown={(e: any) => {\n if (e.key === 'Enter' && !e.shiftKey) {\n e.preventDefault()\n\n if (isSubmitDisabled) return\n e.currentTarget.form?.requestSubmit()\n }\n }}\n {...textareaProps}\n {...props}\n ref={(e: any) => {\n textareaProps.ref(e)\n // @ts-ignore-next-line\n textareaRef.current = e\n }}\n />\n )\n}\n\nexport const Control = (props: StyleProps) => (\n <Root {...props}>\n <Input />\n </Root>\n)\n\nControl.Root = Root\nControl.Input = Input\n","import { useEffect, useRef } from 'react'\n\nexport const usePrevious = <T,>(state: T): T | undefined => {\n const ref = useRef<T>()\n\n useEffect(() => {\n ref.current = state\n })\n\n return ref.current\n}\n","import { forwardRef } from 'react'\nimport TextareaAutosize from 'react-textarea-autosize'\nimport type { StyleProps } from '@/types'\n\ntype Props = React.ComponentProps<typeof TextareaAutosize> & StyleProps\n\nexport const TextareaBase = forwardRef(function TextareaBase({\n style,\n className,\n ...rest\n}: Props, ref) {\n return (\n <>\n <style>\n {`.superinterface-textarea { min-height: inherit; height: 30px; }\n.superinterface-textarea::placeholder { color: var(--gray-a10); }`}\n </style>\n\n <TextareaAutosize\n // @ts-ignore-next-line\n ref={ref}\n className={`rt-reset superinterface-textarea ${className ?? ''}`}\n style={{\n border: 0,\n outline: 0,\n boxSizing: 'border-box',\n resize: 'none',\n color: 'var(--gray-12)',\n flexGrow: 1,\n display: 'flex',\n ...(style ?? {}),\n }}\n {...rest}\n />\n </>\n )\n})\n","import {\n Flex,\n Card,\n Spinner,\n Text,\n IconButton,\n} from '@radix-ui/themes'\nimport {\n FileIcon,\n Cross2Icon,\n} from '@radix-ui/react-icons'\nimport { useMessageFormContext } from '@/hooks/messages/useMessageFormContext'\nimport { isOptimistic } from '@/lib/optimistic/isOptimistic'\nimport type { StyleProps } from '@/types'\n\nexport const Preview = (props: StyleProps) => {\n const { files, setFiles } = useMessageFormContext()\n\n if (!files.length) {\n return null\n }\n\n return (\n <Flex\n flexBasis=\"100%\"\n direction=\"column\"\n pb=\"2\"\n gap=\"1\"\n {...props}\n >\n {files.map((file) => (\n <Card\n key={file.id}\n variant=\"ghost\"\n >\n <Flex\n align=\"center\"\n justify=\"between\"\n gap=\"1\"\n >\n <Flex\n align=\"center\"\n gap=\"1\"\n flexShrink=\"1\"\n minWidth=\"0\"\n maxWidth=\"250px\"\n >\n <Flex\n flexShrink=\"0\"\n >\n <Spinner\n loading={isOptimistic({ id: file.id })}\n >\n <FileIcon />\n </Spinner>\n </Flex>\n\n <Text\n size=\"2\"\n truncate\n wrap=\"nowrap\"\n >\n {file.filename}\n </Text>\n </Flex>\n\n <Flex\n flexShrink=\"0\"\n >\n <IconButton\n onClick={() => (\n setFiles((prev) => (\n prev.filter((prevFile) => prevFile.id !== file.id)\n ))\n )}\n color=\"gray\"\n variant=\"ghost\"\n size=\"1\"\n >\n <Cross2Icon />\n </IconButton>\n </Flex>\n </Flex>\n </Card>\n ))}\n </Flex>\n )\n}\n","'use client'\n\nimport type OpenAI from 'openai'\nimport { useCallback } from 'react'\nimport { omit } from 'radash'\nimport dayjs from 'dayjs'\nimport { optimisticId } from '@/lib/optimistic/optimisticId'\nimport {\n FilePlusIcon,\n} from '@radix-ui/react-icons'\nimport {\n IconButton,\n Flex,\n} from '@radix-ui/themes'\nimport { useToasts } from '@/hooks/toasts/useToasts'\nimport { useMessageFormContext } from '@/hooks/messages/useMessageFormContext'\nimport { useCreateFile } from '@/hooks/files/useCreateFile'\nimport type { StyleProps } from '@/types'\n\nconst accept = `.c,text/x-c,\n.cs,text/x-csharp,\n.cpp,text/x-c++,\n.doc,application/msword,\n.docx,application/vnd.openxmlformats-officedocument.wordprocessingml.document,\n.html,text/html,\n.java,text/x-java,\n.json,application/json,\n.md,text/markdown,\n.pdf,application/pdf,\n.php,text/x-php,\n.pptx,application/vnd.openxmlformats-officedocument.presentationml.presentation,\n.py,text/x-python,\n.py,text/x-script.python,\n.rb,text/x-ruby,\n.tex,text/x-tex,\n.txt,text/plain,\n.css,text/css,\n.js,text/javascript,\n.sh,application/x-sh,\n.ts,application/typescript`\n\nexport const Control = (props: StyleProps) => {\n const { isDisabled, isLoading, setFiles } = useMessageFormContext()\n const { createFile } = useCreateFile()\n const { addToast } = useToasts()\n\n const onChange = useCallback(async (event: React.ChangeEvent<HTMLInputElement>) => {\n const fileObjects = event.target.files\n if (!fileObjects) return\n\n const newFiles = Array.from(fileObjects).map((fileObject) => ({\n id: optimisticId(),\n filename: fileObject.name,\n object: 'file' as 'file',\n purpose: 'assistants' as 'assistants',\n created_at: dayjs().unix(),\n bytes: fileObject.size,\n status: 'processed' as 'processed',\n fileObject,\n }))\n\n setFiles((prev: OpenAI.Files.FileObject[]) => [\n ...prev,\n ...newFiles.map((file) => omit(file, ['fileObject'])),\n ])\n\n for await (const newFile of newFiles) {\n await createFile({\n file: newFile.fileObject,\n },\n {\n onSuccess: ({\n file,\n }: {\n file: OpenAI.Files.FileObject\n }) => (\n setFiles((prev) => ([\n ...prev.filter((prevFile) => prevFile.id !== newFile.id),\n file,\n ]))\n ),\n onError: () => {\n addToast({ type: 'error', message: 'Could not upload file. Please try again.' })\n setFiles((prev) => (\n prev.filter((prevFile) => prevFile.id !== newFile.id)\n ))\n },\n })\n }\n }, [addToast, createFile, setFiles])\n\n return (\n <Flex\n pt=\"2\"\n pr=\"2\"\n flexGrow=\"0\"\n {...props}\n >\n <IconButton\n type=\"button\"\n variant=\"ghost\"\n color=\"gray\"\n disabled={isDisabled || isLoading}\n style={{\n position: 'relative',\n overflow: 'hidden',\n }}\n >\n <FilePlusIcon />\n <input\n type=\"file\"\n multiple\n accept={accept}\n onChange={onChange}\n style={{\n cursor: 'pointer',\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n opacity: 0,\n }}\n />\n </IconButton>\n </Flex>\n )\n}\n","import { partob } from 'radash'\nimport {\n useMutation,\n useQueryClient,\n} from '@tanstack/react-query'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\nimport { useThreadContext } from '@/hooks/threads/useThreadContext'\nimport { mutationOptions } from './lib/mutationOptions'\n\nexport const useCreateFile = ({\n onError = () => {},\n}: {\n onError?: (error: unknown) => void\n} = {\n onError: () => {},\n}) => {\n const queryClient = useQueryClient()\n const superinterfaceContext = useSuperinterfaceContext()\n const threadContext = useThreadContext()\n\n const props = useMutation(mutationOptions({\n queryClient,\n threadContext,\n superinterfaceContext,\n onError,\n }))\n\n return {\n ...props,\n createFile: (...args: any[]) => {\n const [firstArg, ...restArgs] = args\n return props.mutateAsync({\n ...threadContext.variables,\n ...firstArg,\n }, ...restArgs)\n },\n }\n}\n","export const formData = (variables: any) => {\n const data = new FormData()\n\n for (const key in variables) {\n data.append(key, variables[key])\n }\n\n return data\n}\n","import { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\nimport { formData } from './formData'\n\nexport const body = ({\n variables,\n superinterfaceContext,\n}: {\n variables: {\n [key: string]: any\n }\n superinterfaceContext: ReturnType<typeof useSuperinterfaceContext>\n}) => {\n if (variables.threadId) return formData(variables)\n if (!variables.assistantId) return formData(variables)\n if (!superinterfaceContext.threadIdStorageOptions?.get) return formData(variables)\n\n const threadId = superinterfaceContext.threadIdStorageOptions.get({ assistantId: variables.assistantId })\n if (!threadId) return formData(variables)\n\n return formData({\n ...variables,\n threadId,\n })\n}\n","import {\n useQueryClient,\n} from '@tanstack/react-query'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\nimport { useThreadContext } from '@/hooks/threads/useThreadContext'\nimport { body } from './body'\n\nexport const mutationFn = ({\n superinterfaceContext,\n queryClient,\n threadContext,\n}: {\n superinterfaceContext: ReturnType<typeof useSuperinterfaceContext>\n queryClient: ReturnType<typeof useQueryClient>\n threadContext: ReturnType<typeof useThreadContext>\n}) => async (variables: {\n content: string\n [key: string]: any\n}) => {\n const response = await fetch(`${superinterfaceContext.baseUrl}/files`, {\n method: 'POST',\n body: body({\n variables,\n superinterfaceContext,\n }),\n })\n\n const result = await response.json()\n return result\n}\n","import _ from 'lodash'\nimport {\n useQueryClient,\n} from '@tanstack/react-query'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\nimport { useThreadContext } from '@/hooks/threads/useThreadContext'\nimport { mutationFn } from './mutationFn'\n\nexport const mutationOptions = ({\n queryClient,\n threadContext,\n superinterfaceContext,\n onError,\n}: {\n queryClient: ReturnType<typeof useQueryClient>,\n threadContext: ReturnType<typeof useThreadContext>,\n superinterfaceContext: ReturnType<typeof useSuperinterfaceContext>,\n onError: (error: unknown) => void\n}) => {\n const mutationKey = ['createFile', threadContext.variables]\n\n return {\n mutationFn: mutationFn({\n queryClient,\n superinterfaceContext,\n threadContext,\n }),\n onError,\n ...threadContext.defaultOptions.mutations,\n ...queryClient.getMutationDefaults(mutationKey),\n mutationKey,\n }\n}\n","import { Preview } from './Preview'\nimport { Control } from './Control'\n\nexport const Files = {\n Preview,\n Control,\n}\n","import type { StyleProps } from '@/types'\nimport { Submit } from './Submit'\nimport { Root } from './Root'\nimport { Field } from './Field'\n\nexport const MessageForm = (props: StyleProps) => (\n <Root {...props}>\n <Field.Root>\n <Field.Control />\n <Submit />\n </Field.Root>\n </Root>\n)\n\nMessageForm.Root = Root\nMessageForm.Field = Field\nMessageForm.Submit = Submit\n","import { Flex } from '@radix-ui/themes'\nimport {\n Provider,\n Args as ThreadProviderArgs,\n} from '@/components/threads/Thread/Provider'\nimport type { StyleProps } from '@/types'\nimport { ToastsProvider } from '@/components/toasts/ToastsProvider'\n\nexport type Args = ThreadProviderArgs & StyleProps\n\nexport const Root = ({\n children,\n style,\n className,\n ...rest\n}: Args) => (\n <ToastsProvider bottom=\"var(--space-9)\">\n <Provider {...rest}>\n <Flex\n direction=\"column\"\n flexGrow=\"1\"\n className={className}\n style={style}\n >\n {children}\n </Flex>\n </Provider>\n </ToastsProvider>\n)\n","'use client'\n\nimport { SuperinterfaceProvider } from '@/components/core/SuperinterfaceProvider'\nimport type { Args as SuperinterfaceProviderArgs } from '@/components/core/SuperinterfaceProvider'\n\nexport type Args = SuperinterfaceProviderArgs\nexport const Provider = SuperinterfaceProvider\n","import { useState, useCallback } from 'react'\nimport * as Toast from '@radix-ui/react-toast'\nimport { ToastsContext } from '@/contexts/toasts/ToastsContext'\nimport { CustomToast } from './CustomToast'\nimport { Toast as ToastType } from '@/types'\n\nexport const ToastsProvider = ({\n children,\n bottom = 0,\n}: {\n children: React.ReactNode\n bottom?: number | string\n}) => {\n const [toasts, setToasts] = useState<ToastType[]>([])\n const addToast = useCallback((toast: ToastType) => (\n setToasts((prevToasts) => [\n ...prevToasts,\n toast,\n ])\n ), [])\n\n return (\n <ToastsContext.Provider\n value={{\n toasts,\n addToast,\n }}\n >\n <Toast.Provider>\n {children}\n\n {Array.from(toasts).map((toast: ToastType, index: number) => (\n <CustomToast\n key={index}\n toast={toast}\n />\n ))}\n\n <Toast.Viewport\n style={{\n position: 'absolute',\n bottom,\n right: 0,\n display: 'flex',\n flexDirection: 'column',\n padding: 'var(--space-5)',\n gap: 'var(--space-3)',\n width: '390px',\n maxWidth: '100vw',\n margin: 0,\n listStyle: 'none',\n zIndex: 99999999999999,\n outline: 'none',\n }}\n />\n </Toast.Provider>\n </ToastsContext.Provider>\n )\n}\n","import * as Toast from '@radix-ui/react-toast'\nimport {\n Card,\n Text,\n Flex,\n} from '@radix-ui/themes'\nimport {\n CheckCircledIcon,\n CrossCircledIcon,\n} from '@radix-ui/react-icons'\nimport { Toast as ToastType } from '@/types'\n\nexport const CustomToast = ({\n toast,\n}: {\n toast: ToastType,\n}) => (\n <Toast.Root>\n <Card>\n <Toast.Title>\n <Flex>\n <Flex\n pr=\"2\"\n height=\"14px\"\n align=\"center\"\n >\n {toast.type === 'success' ? (\n <CheckCircledIcon\n color=\"var(--accent-9)\"\n />\n ) : (\n <CrossCircledIcon\n color=\"var(--red-9)\"\n />\n )}\n </Flex>\n <Text\n weight=\"medium\"\n size=\"1\"\n >\n {toast.message}\n </Text>\n </Flex>\n </Toast.Title>\n </Card>\n </Toast.Root>\n)\n","import { Messages } from '@/components/threads/Thread/Messages'\nimport { MessageForm } from '@/components/threads/Thread/MessageForm'\nimport { Root, Args as RootArgs } from '@/components/threads/Thread/Root'\n\ntype Args = Omit<RootArgs, 'children'>\n\nexport const Thread = (props: Args) => (\n <Root {...props}>\n <Messages />\n <MessageForm />\n </Root>\n)\n\nThread.Root = Root\nThread.Messages = Messages\nThread.MessageForm = MessageForm\n","import { useContext } from 'react'\nimport { MessageContext } from '@/contexts/messages/MessageContext'\n\nexport const useMessageContext = () => (\n useContext(MessageContext)\n)\n","import { useMemo } from 'react'\nimport {\n useQuery,\n} from '@tanstack/react-query'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\nimport { queryOptions } from './lib/queryOptions'\n\ntype Args = {\n assistantId: string\n}\n\nexport const useAssistant = ({\n assistantId,\n}: Args) => {\n const superinterfaceContext = useSuperinterfaceContext()\n const props = useQuery(queryOptions({\n assistantId,\n superinterfaceContext,\n }))\n\n return useMemo(() => ({\n ...props,\n assistant: props.data ? props.data.assistant : null,\n }), [props])\n}\n","import { queryOptions as tanstackQueryOptions } from '@tanstack/react-query'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\nimport { queryFn } from './queryFn'\n\ntype Args = {\n assistantId: string\n superinterfaceContext: ReturnType<typeof useSuperinterfaceContext>\n}\n\nexport const queryOptions = ({\n assistantId,\n superinterfaceContext,\n}: Args) => (\n tanstackQueryOptions({\n queryKey: ['assistants', { assistantId }],\n queryFn: queryFn({ superinterfaceContext }),\n })\n)\n","import { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\n\ntype QueryFunctionArgs = {\n queryKey: Readonly<['assistants', { assistantId: string }]>\n}\n\nexport const queryFn = ({\n superinterfaceContext,\n}: {\n superinterfaceContext: ReturnType<typeof useSuperinterfaceContext>\n}) => async ({\n queryKey,\n}: QueryFunctionArgs) => {\n const [_key, { assistantId }] = queryKey\n\n const params = new URLSearchParams({\n publicApiKey: superinterfaceContext.variables.publicApiKey,\n })\n\n return fetch(`${superinterfaceContext.baseUrl}/assistants/${assistantId}?${params}`)\n .then(async (response) => {\n if (response.status !== 200) {\n try {\n const errorResponse = await response.json() as { error: string }\n throw new Error(errorResponse.error)\n } catch (error) {\n throw new Error('Failed to fetch')\n }\n }\n\n return response.json() as Promise<any>\n })\n}\n","import { useState } from 'react'\nimport { ThreadDialogContext } from '@/contexts/threads/ThreadDialogContext'\nimport { useThreadDialogContext } from '@/hooks/threads/useThreadDialogContext'\n\ntype Args = {\n children: React.ReactNode\n}\n\nexport const Provider = ({\n children,\n}: Args) => {\n const threadDialogContext = useThreadDialogContext()\n const [isOpen, setIsOpen] = useState<boolean>(threadDialogContext.isOpen)\n\n return (\n <ThreadDialogContext.Provider\n value={{\n isOpen,\n setIsOpen,\n }}\n >\n {children}\n </ThreadDialogContext.Provider>\n )\n}\n","'use client'\nimport { createContext, Dispatch, SetStateAction } from 'react'\n\nexport const ThreadDialogContext = createContext<{\n isOpen: boolean\n setIsOpen: Dispatch<SetStateAction<boolean>>\n}>({\n isOpen: false,\n setIsOpen: () => {},\n})\n","import { useContext } from 'react'\nimport { ThreadDialogContext } from '@/contexts/threads/ThreadDialogContext'\n\nexport const useThreadDialogContext = () => (\n useContext(ThreadDialogContext)\n)\n","import { Provider } from '@/components/threads/ThreadDialog/Provider'\n\ntype Args = {\n children: React.ReactNode\n}\n\nexport const Root = ({\n children,\n}: Args) => (\n <Provider>\n {children}\n </Provider>\n)\n","import {\n Flex,\n} from '@radix-ui/themes'\nimport { useThreadDialogContext } from '@/hooks/threads/useThreadDialogContext'\nimport { Button } from './Button'\nimport type { StyleProps } from '@/types'\n\ntype Args = {\n children: React.ReactNode\n} & StyleProps\n\nconst Root = ({\n children,\n style,\n className,\n}: Args) => {\n const { setIsOpen, isOpen } = useThreadDialogContext()\n\n return (\n <Flex\n display={{\n initial: isOpen ? 'none' : 'flex',\n sm: 'flex',\n }}\n onClick={() => setIsOpen((prev) => !prev)}\n direction=\"column\"\n flexShrink=\"0\"\n justify=\"end\"\n align=\"end\"\n position=\"fixed\"\n bottom=\"24px\"\n right=\"24px\"\n className={className}\n style={{\n zIndex: 9999999999,\n ...(style ?? {}),\n }}\n >\n {children}\n </Flex>\n )\n}\n\nexport const Trigger = (args: Omit<Args, 'children'>) => (\n <Root {...args}>\n <Button />\n </Root>\n)\n\nTrigger.Root = Root\nTrigger.Button = Button\n","import {\n IconButton,\n} from '@radix-ui/themes'\nimport {\n ChatBubbleIcon,\n} from '@radix-ui/react-icons'\nimport type { StyleProps } from '@/types'\n\nexport const Button = (props: StyleProps) => (\n <IconButton\n size=\"4\"\n radius=\"full\"\n {...props}\n >\n <ChatBubbleIcon />\n </IconButton>\n)\n","import {\n Card,\n Inset,\n Flex,\n} from '@radix-ui/themes'\nimport { useThreadDialogContext } from '@/hooks/threads/useThreadDialogContext'\nimport { Thread } from '@/components/threads/Thread'\nimport { Close } from '@/components/threads/ThreadDialog/Close'\nimport type { StyleProps } from '@/types'\n\ntype Args = {\n children: React.ReactNode\n} & StyleProps\n\nconst Root = ({\n children,\n className,\n style,\n}: Args) => {\n const { isOpen } = useThreadDialogContext()\n if (!isOpen) return null\n\n return (\n <Flex\n className={className}\n direction=\"column\"\n justify=\"end\"\n position=\"fixed\"\n bottom={{\n initial: '0',\n sm: '72px',\n }}\n right={{\n initial: '0',\n sm: '24px',\n }}\n maxHeight={{\n initial: undefined,\n sm: '720px',\n }}\n maxWidth={{\n initial: undefined,\n sm: '400px',\n }}\n width=\"100%\"\n height={{\n initial: '100%',\n sm: 'calc(100% - 96px)',\n }}\n style={{\n zIndex: 9999999999,\n ...style,\n }}\n >\n <Card\n mb={{\n initial: undefined,\n sm: '3',\n }}\n style={{\n position: 'relative',\n display: 'flex',\n flexGrow: 1,\n }}\n >\n <Inset\n clip=\"padding-box\"\n side=\"all\"\n pb=\"current\"\n style={{\n display: 'flex',\n flexGrow: 1,\n }}\n >\n {children}\n </Inset>\n <Close />\n </Card>\n </Flex>\n )\n}\n\nconst Messages = ({\n className,\n style,\n}: StyleProps) => (\n <Thread.Messages\n className={className}\n style={{\n paddingTop: 'var(--space-5)',\n paddingRight: 'var(--space-5)',\n paddingLeft: 'var(--space-5)',\n ...style,\n }}\n />\n)\n\nconst FormContainer = ({\n children,\n className,\n style,\n}: {\n children: React.ReactNode\n} & StyleProps) => (\n <Flex\n direction=\"column\"\n pl=\"5\"\n pr=\"5\"\n pb=\"3\"\n flexShrink=\"0\"\n className={className}\n style={style}\n >\n {children}\n </Flex>\n)\n\nexport const Content = (props: StyleProps) => (\n <Root {...props}>\n <Thread.Root>\n <Messages />\n <FormContainer>\n <Thread.MessageForm />\n </FormContainer>\n </Thread.Root>\n </Root>\n)\n\nContent.Root = Root\nContent.Messages = Messages\nContent.FormContainer = FormContainer\n","import {\n Cross1Icon,\n} from '@radix-ui/react-icons'\nimport {\n IconButton,\n Flex,\n} from '@radix-ui/themes'\nimport { useThreadDialogContext } from '@/hooks/threads/useThreadDialogContext'\n\nexport const Close = () => {\n const { setIsOpen, isOpen } = useThreadDialogContext()\n\n return (\n <Flex\n display={{\n initial: isOpen ? 'flex' : 'none',\n sm: 'none',\n }}\n onClick={() => setIsOpen((prev) => !prev)}\n direction=\"column\"\n flexShrink=\"0\"\n justify=\"end\"\n align=\"end\"\n position=\"absolute\"\n top=\"24px\"\n right='24px'\n style={{\n zIndex: 9999999999,\n }}\n >\n <IconButton\n size=\"2\"\n variant=\"soft\"\n >\n <Cross1Icon />\n </IconButton>\n </Flex>\n )\n}\n","import { Root } from '@/components/threads/ThreadDialog/Root'\nimport { Trigger } from '@/components/threads/ThreadDialog/Trigger'\nimport { Content } from '@/components/threads/ThreadDialog/Content'\n\nexport const ThreadDialog = () => (\n <Root>\n <Content />\n <Trigger />\n </Root>\n)\n\nThreadDialog.Root = Root\nThreadDialog.Trigger = Trigger\nThreadDialog.Content = Content\n","'use client'\n\n// import 'regenerator-runtime/runtime'\nimport { Flex } from '@radix-ui/themes'\nimport _ from 'lodash'\nimport { AudioThreadContext } from '@/contexts/threads/AudioThreadContext'\nimport { useCreateMessage } from '@/hooks/messages/useCreateMessage'\nimport { usePermission } from '@/hooks/misc/usePermission'\nimport { blobToData } from './lib/blobToData'\nimport { useStatus } from '@/hooks/audioThreads/useStatus'\nimport { useRecorder } from '@/hooks/audioThreads/useRecorder'\nimport { useMessageAudio } from '@/hooks/audioThreads/useMessageAudio'\nimport {\n useQueryClient,\n} from '@tanstack/react-query'\nimport { useThreadContext } from '@/hooks/threads/useThreadContext'\nimport { useToasts } from '@/hooks/toasts/useToasts'\nimport { createMessageDefaultOnError } from '@/lib/errors/createMessageDefaultOnError'\nimport { ToastsProvider } from '@/components/toasts/ToastsProvider'\nimport type { StyleProps } from '@/types'\n\nexport type Args = {\n children: React.ReactNode\n} & StyleProps\n\nconst Content = ({\n children,\n className,\n style,\n}: Args) => {\n const { addToast } = useToasts()\n const queryClient = useQueryClient()\n const threadContext = useThreadContext()\n\n const createMessageProps = useCreateMessage({\n onError: (error: unknown) => {\n createMessageDefaultOnError({\n queryClient,\n addToast,\n threadContext,\n })(error)\n\n recorderProps.start()\n }\n })\n\n const recorderProps = useRecorder({\n isStopOnSilence: true,\n onStart: async () => {\n },\n onStop: async (_event: any, chunks: BlobPart[]) => {\n // @ts-ignore-next-line\n const blob = new Blob(chunks, { type: chunks[0].type })\n const audioContent = await blobToData(blob)\n\n return createMessageProps.createMessage({\n // @ts-ignore-next-line\n audioContent,\n })\n },\n })\n\n const microphonePermission = usePermission({ name: 'microphone' })\n\n const messageAudioProps = useMessageAudio({\n onEnd: () => {\n if (microphonePermission === 'granted') {\n recorderProps.start()\n }\n }\n })\n\n const { status } = useStatus({\n recorderProps,\n createMessageProps,\n messageAudioProps,\n })\n\n return (\n <AudioThreadContext.Provider\n value={{\n status,\n recorderProps,\n messageAudioProps,\n }}\n >\n <Flex\n direction=\"column\"\n flexGrow=\"1\"\n p=\"9\"\n className={className}\n style={style}\n >\n {children}\n </Flex>\n </AudioThreadContext.Provider>\n )\n}\n\nexport const Root = ({\n children,\n ...rest\n}: Args) => (\n <ToastsProvider>\n <Content {...rest}>\n {children}\n </Content>\n </ToastsProvider>\n)\n","'use client'\nimport { createContext } from 'react'\nimport { statusMessages } from '@/hooks/audioThreads/useStatus/lib/statusMessages'\nimport { useRecorder } from '@/hooks/audioThreads/useRecorder'\nimport { useMessageAudio } from '@/hooks/audioThreads/useMessageAudio'\n\nexport const AudioThreadContext = createContext<{\n status: keyof typeof statusMessages\n recorderProps: ReturnType<typeof useRecorder>\n messageAudioProps: ReturnType<typeof useMessageAudio>\n}>({\n status: 'idle',\n recorderProps: {\n status: 'idle',\n start: async () => {},\n stop: async () => {},\n pause: async () => {},\n resume: async () => {},\n visualizationAnalyser: null,\n },\n // @ts-ignore-next-line\n messageAudioProps: {\n visualizationAnalyser: null,\n playing: false,\n paused: false,\n isReady: false,\n play: async () => {},\n pause: async () => {},\n },\n})\n","// From: https://github.com/streamich/react-use/blob/ade8d3905f544305515d010737b4ae604cc51024/src/usePermission.ts\nimport { useEffect, useState } from 'react';\nimport { noop, off, on } from './util';\n\nexport type IState = PermissionState | '';\n\ninterface IPushPermissionDescriptor extends PermissionDescriptor {\n name: 'push';\n userVisibleOnly?: boolean;\n}\n\n// @ts-ignore-next-line\ninterface IMidiPermissionDescriptor extends PermissionDescriptor {\n name: 'midi';\n sysex?: boolean;\n}\n\n// @ts-ignore-next-line\ninterface IDevicePermissionDescriptor extends PermissionDescriptor {\n name: 'camera' | 'microphone' | 'speaker';\n deviceId?: string;\n}\n\nexport type IPermissionDescriptor =\n | PermissionDescriptor\n | IPushPermissionDescriptor\n | IMidiPermissionDescriptor\n | IDevicePermissionDescriptor;\n\n// const usePermission = <T extends PermissionDescriptor>(permissionDesc: T): IState => {\nexport const usePermission = (permissionDesc: IPermissionDescriptor): IState => {\n const [state, setState] = useState<IState>('');\n\n useEffect(() => {\n let mounted = true;\n let permissionStatus: PermissionStatus | null = null;\n\n const onChange = () => {\n if (!mounted) {\n return;\n }\n setState(() => permissionStatus?.state ?? '');\n };\n\n navigator.permissions\n // @ts-ignore-next-line\n .query(permissionDesc)\n .then((status) => {\n permissionStatus = status;\n on(permissionStatus, 'change', onChange);\n onChange();\n })\n .catch(noop);\n\n return () => {\n permissionStatus && off(permissionStatus, 'change', onChange);\n mounted = false;\n permissionStatus = null;\n };\n }, [permissionDesc]);\n\n return state;\n};\n","// From: https://github.com/streamich/react-use/blob/ade8d3905f544305515d010737b4ae604cc51024/src/misc/util.ts\nexport const noop = () => {};\n\nexport function on<T extends Window | Document | HTMLElement | EventTarget>(\n obj: T | null,\n ...args: Parameters<T['addEventListener']> | [string, Function | null, ...any]\n): void {\n if (obj && obj.addEventListener) {\n obj.addEventListener(...(args as Parameters<HTMLElement['addEventListener']>));\n }\n}\n\nexport function off<T extends Window | Document | HTMLElement | EventTarget>(\n obj: T | null,\n ...args: Parameters<T['removeEventListener']> | [string, Function | null, ...any]\n): void {\n if (obj && obj.removeEventListener) {\n obj.removeEventListener(...(args as Parameters<HTMLElement['removeEventListener']>));\n }\n\n}\n","export const blobToData = (blob: Blob) => (\n new Promise((resolve) => {\n const reader = new FileReader()\n reader.onloadend = () => resolve(reader.result)\n reader.readAsDataURL(blob)\n })\n)\n","import { useMemo } from 'react'\nimport { useCreateMessage } from '@/hooks/messages/useCreateMessage'\nimport { useRecorder } from '@/hooks/audioThreads/useRecorder'\nimport { useMessageAudio } from '@/hooks/audioThreads/useMessageAudio'\nimport { useLatestMessage } from '@/hooks/messages/useLatestMessage'\nimport { statusMessages } from './lib/statusMessages'\n\ntype Args = {\n messageAudioProps: ReturnType<typeof useMessageAudio>\n recorderProps: ReturnType<typeof useRecorder>\n createMessageProps: ReturnType<typeof useCreateMessage>\n}\n\nexport const useStatus = ({\n messageAudioProps,\n recorderProps,\n createMessageProps,\n}: Args) => {\n const latestMessageProps = useLatestMessage()\n\n const status = useMemo((): keyof typeof statusMessages => {\n if (recorderProps.status === 'recording') return 'recording'\n if (createMessageProps.isPending) return 'creatingMessage'\n\n if (messageAudioProps.paused || !messageAudioProps.isAudioPlayed) return 'playerPaused'\n if (messageAudioProps.playing || messageAudioProps.isPending) return 'playing'\n if (!messageAudioProps.isAudioPlayed && !messageAudioProps.isReady) return 'loading'\n if (latestMessageProps.latestMessage?.status === 'in_progress') return 'creatingMessage'\n if (recorderProps.status === 'idle') return 'idle'\n if (recorderProps.status === 'paused') return 'recorderPaused'\n\n return 'loading'\n }, [\n latestMessageProps,\n messageAudioProps,\n recorderProps,\n createMessageProps,\n ])\n\n return {\n status,\n }\n}\n","import dayjs, { Dayjs } from 'dayjs'\nimport { useAudioCapture, UseAudioCaptureProps } from 'use-audio-capture'\nimport { useMemo, useRef, useState, useCallback, useEffect } from 'react'\nimport { useAudioPlayer } from 'react-use-audio-player'\nimport { useInterval } from '@/hooks/misc/useInterval'\nimport { AudioEngine } from '@/types'\n\ntype Args = UseAudioCaptureProps & {\n isStopOnSilence: boolean\n}\n\nexport const useRecorder = ({\n isStopOnSilence,\n onStart,\n onStop,\n}: Args) => {\n const [silenceStart, setSilenceStart] = useState<Dayjs | null>(null)\n const [noiseStart, setNoiseStart] = useState<Dayjs | null>(null)\n const [mediaStream, setMediaStream] = useState<MediaStream | null>(null)\n const [status, setStatus] = useState<'idle' | 'recording' | 'stopped' | 'paused'>('idle')\n const startAudioPlayer = useAudioPlayer()\n const endAudioPlayer = useAudioPlayer()\n const [isLoaded, setIsLoaded] = useState(false)\n\n useEffect(() => {\n if (isLoaded) return\n setIsLoaded(true)\n\n // startAudioPlayer.load('/sounds/warning.wav', {\n // html5: true,\n // })\n // endAudioPlayer.load('/sounds/success.wav', {\n // html5: true,\n // })\n }, [isLoaded, startAudioPlayer, endAudioPlayer])\n\n const audioCaptureProps = useAudioCapture({\n onStart: (event, opts) => {\n // startAudioPlayer.play()\n setStatus('recording')\n setMediaStream(opts.mediaStream)\n isInited.current = false\n if (onStart) onStart(event, opts)\n\n setSilenceStart(null)\n setNoiseStart(null)\n },\n onStop: async (...args) => {\n // endAudioPlayer.play()\n setStatus('stopped')\n if (onStop) await onStop(...args)\n setSilenceStart(null)\n setNoiseStart(null)\n },\n onPause: () => {\n setStatus('paused')\n\n setSilenceStart(null)\n setNoiseStart(null)\n },\n onResume: () => {\n setStatus('recording')\n\n setSilenceStart(null)\n setNoiseStart(null)\n },\n })\n\n const [audioEngine, setAudioEngine] = useState<AudioEngine | null>(null)\n\n const isInited = useRef(false)\n\n useEffect(() => {\n if (!mediaStream) return\n if (isInited.current) return\n isInited.current = true\n\n const audioContext = new AudioContext()\n\n setAudioEngine({\n source: audioContext.createMediaStreamSource(mediaStream),\n audioContext,\n })\n }, [isInited, mediaStream])\n\n const visualizationAnalyser = useMemo(() => {\n if (!audioEngine) return null\n\n const result = audioEngine.audioContext.createAnalyser()\n\n audioEngine.source.connect(result)\n return result\n }, [audioEngine])\n\n const silenceAnalyser = useMemo(() => {\n if (!audioEngine) return null\n\n const result = audioEngine.audioContext.createAnalyser()\n result.minDecibels = -60\n\n audioEngine.source.connect(result)\n return result\n }, [audioEngine])\n\n const handleSilence = useCallback(() => {\n if (!silenceAnalyser) return\n\n const frequencyData = new Uint8Array(silenceAnalyser.frequencyBinCount)\n silenceAnalyser.getByteFrequencyData(frequencyData)\n\n const isSilent = frequencyData.every((f) => f === 0)\n\n setSilenceStart((silenceStart: Dayjs | null) => {\n if (isSilent) return silenceStart || dayjs()\n\n return null\n })\n\n setNoiseStart((noiseStart: Dayjs | null) => {\n if (isSilent) return noiseStart\n\n return noiseStart || dayjs()\n })\n\n requestAnimationFrame(() => handleSilence())\n }, [silenceAnalyser, setNoiseStart, setSilenceStart])\n\n useEffect(() => {\n if (!isStopOnSilence) return\n\n requestAnimationFrame(() => handleSilence())\n }, [handleSilence, isStopOnSilence])\n\n useInterval(() => {\n if (!isStopOnSilence) return\n if (status !== 'recording') return\n if (!silenceStart) return\n if (!noiseStart) return\n if (!silenceStart.isBefore(dayjs().subtract(1.5, 'second'))) return\n\n audioCaptureProps.stop()\n }, 300)\n\n return {\n ...audioCaptureProps,\n status,\n visualizationAnalyser,\n }\n}\n","import { useEffect, useRef } from 'react';\n\nexport const useInterval = (callback: Function, delay?: number | null) => {\n const savedCallback = useRef<Function>(() => {})\n\n useEffect(() => {\n savedCallback.current = callback\n })\n\n useEffect(() => {\n if (delay !== null) {\n const interval = setInterval(() => savedCallback.current(), delay || 0)\n return () => clearInterval(interval)\n }\n\n return undefined\n }, [delay])\n}\n","import { useMemo, useRef, useState, useEffect } from 'react'\nimport nlp from 'compromise'\nimport { Howler } from 'howler'\nimport { useAudioPlayer } from 'react-use-audio-player'\nimport { useLatestMessage } from '@/hooks/messages/useLatestMessage'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\nimport { AudioEngine } from '@/types'\nimport { isOptimistic } from '@/lib/optimistic/isOptimistic'\nimport { input as getInput } from './lib/input'\nimport { isHtmlAudioSupported } from './lib/isHtmlAudioSupported'\n\ntype MessageSentence = {\n messageId: string\n sentence: string\n}\n\nconst FULL_SENTENCE_REGEX = /[\\.?!]$/\n\nconst getMessageSentences = ({\n messageId,\n input,\n}: {\n messageId: string\n input: string\n}) => {\n const sentences = nlp(input).sentences().json()\n\n return sentences.map((sentence: { text: string }) => ({\n messageId,\n sentence: sentence.text,\n }))\n}\n\nexport const useMessageAudio = ({\n onEnd,\n}: {\n onEnd: () => void\n}) => {\n const [isAudioPlayed, setIsAudioPlayed] = useState(false)\n const [stoppedMessageIds, setStoppedMessageIds] = useState<string[]>([])\n const [playedMessageSentences, setPlayedMessageSentences] = useState<MessageSentence[]>([])\n const audioPlayer = useAudioPlayer()\n const nextAudioPlayer = useAudioPlayer()\n const superinterfaceContext = useSuperinterfaceContext()\n const [isPlaying, setIsPlaying] = useState(false)\n\n const latestMessageProps = useLatestMessage()\n\n const unplayedMessageSentences = useMemo(() => {\n if (!latestMessageProps.latestMessage) return []\n if (latestMessageProps.latestMessage.role !== 'assistant') return []\n if (stoppedMessageIds.includes(latestMessageProps.latestMessage.id)) return []\n\n const input = getInput({\n message: latestMessageProps.latestMessage,\n })\n\n if (!input) return []\n\n const messageSentences = getMessageSentences({\n messageId: latestMessageProps.latestMessage.id,\n input,\n })\n\n return messageSentences.filter((ms: { messageId: string, sentence: string }) => (\n !playedMessageSentences.find((pms) => pms.messageId === ms.messageId && pms.sentence === ms.sentence)\n ))\n }, [latestMessageProps, playedMessageSentences])\n\n useEffect(() => {\n if (isPlaying) return\n if (audioPlayer.playing) return\n if (!latestMessageProps.latestMessage) return\n if (latestMessageProps.latestMessage.role !== 'assistant') return\n\n const firstUnplayedMessageSentence = unplayedMessageSentences[0]\n if (!firstUnplayedMessageSentence) {\n return\n }\n\n const isFullSentence = isOptimistic({ id: latestMessageProps.latestMessage.id }) ||\n latestMessageProps.latestMessage.status !== 'in_progress' ||\n FULL_SENTENCE_REGEX.test(firstUnplayedMessageSentence.sentence)\n\n if (!isFullSentence) return\n setIsPlaying(true)\n\n setPlayedMessageSentences((prev) => [...prev, firstUnplayedMessageSentence])\n\n const searchParams = new URLSearchParams({\n input: firstUnplayedMessageSentence.sentence,\n ...superinterfaceContext.variables,\n })\n\n audioPlayer.load(`${superinterfaceContext.baseUrl}/tts?${searchParams}`, {\n format: 'mp3',\n autoplay: isAudioPlayed,\n html5: isHtmlAudioSupported,\n onplay: () => {\n setIsAudioPlayed(true)\n },\n onstop: () => {\n setStoppedMessageIds((prev) => [...prev, firstUnplayedMessageSentence.messageId])\n setIsPlaying(false)\n },\n onload: () => {\n const nextUnplayedMessageSentence = unplayedMessageSentences[1]\n if (!nextUnplayedMessageSentence) return\n\n const isNextFullSentence = FULL_SENTENCE_REGEX.test(nextUnplayedMessageSentence.sentence)\n if (!isNextFullSentence) return\n\n const nextSearchParams = new URLSearchParams({\n input: nextUnplayedMessageSentence.sentence,\n ...superinterfaceContext.variables,\n })\n\n nextAudioPlayer.load(`${superinterfaceContext.baseUrl}/tts?${nextSearchParams}`, {\n format: 'mp3',\n autoplay: false,\n html5: isHtmlAudioSupported,\n })\n },\n onend: () => {\n setIsPlaying(false)\n\n if (unplayedMessageSentences.length === 1 && latestMessageProps.latestMessage.status !== 'in_progress') {\n onEnd()\n }\n },\n })\n }, [\n unplayedMessageSentences,\n isPlaying,\n superinterfaceContext,\n latestMessageProps,\n audioPlayer,\n nextAudioPlayer,\n playedMessageSentences,\n onEnd,\n ])\n\n useEffect(() => {\n if (isHtmlAudioSupported) {\n // @ts-ignore-next-line\n if (!Howler?._howls[0]?._sounds[0]?._node) return\n\n // @ts-ignore-next-line\n Howler._howls[0]._sounds[0]._node.crossOrigin = 'anonymous'\n }\n }, [audioPlayer])\n\n const [audioEngine, setAudioEngine] = useState<AudioEngine | null>(null)\n\n const isAudioEngineInited = useRef(false)\n\n useEffect(() => {\n if (!audioPlayer.playing) return\n if (isAudioEngineInited.current) return\n isAudioEngineInited.current = true\n\n if (isHtmlAudioSupported) {\n const audioContext = new AudioContext()\n setAudioEngine({\n // @ts-ignore-next-line\n source: audioContext.createMediaElementSource(Howler._howls[0]._sounds[0]._node),\n audioContext,\n })\n } else {\n setAudioEngine({\n source: Howler.masterGain,\n audioContext: Howler.ctx,\n })\n }\n }, [audioPlayer, isAudioEngineInited])\n\n const visualizationAnalyser = useMemo(() => {\n if (!audioEngine) return null\n\n const result = audioEngine.audioContext.createAnalyser()\n\n audioEngine.source.connect(audioEngine.audioContext.destination)\n audioEngine.source.connect(result)\n return result\n }, [audioEngine])\n\n const isPending = useMemo(() => isPlaying || unplayedMessageSentences.length > 0, [isPlaying, unplayedMessageSentences])\n\n return {\n isPending,\n isAudioPlayed,\n ...audioPlayer,\n visualizationAnalyser,\n }\n}\n","import OpenAI from 'openai'\nimport { isEmpty } from 'radash'\nimport { SerializedMessage } from '@/types'\n\ntype Args = {\n message: SerializedMessage\n}\n\nexport const input = ({\n message,\n}: Args) => {\n const textContents = (message.content as OpenAI.Beta.Threads.Messages.TextContentBlock[]).filter((c: OpenAI.Beta.Threads.Messages.TextContentBlock) => (\n c.type === 'text'\n ))\n\n const result = textContents.map((c: OpenAI.Beta.Threads.Messages.TextContentBlock) => (\n c.text.value\n )).join(' ')\n\n if (isEmpty(result)) return null\n\n return result\n}\n","import { useContext, useState, useCallback, useEffect } from 'react'\nimport _ from 'lodash'\nimport { Flex } from '@radix-ui/themes'\nimport { AssistantAvatar } from '@/components/messageGroups/MessageGroupBase/AssistantAvatar'\nimport { Name } from '@/components/messageGroups/MessageGroupBase/Name'\nimport { AssistantNameContext } from '@/contexts/assistants/AssistantNameContext'\nimport { useAudioThreadContext } from '@/hooks/threads/useAudioThreadContext'\nimport { BarsVisualizer } from '@/components/threads/AudioThread/BarsVisualizer'\nimport type { StyleProps } from '@/types'\n\nexport const Visualization = (props: StyleProps) => {\n const audioThreadContext = useAudioThreadContext()\n const assistantNameContext = useContext(AssistantNameContext)\n const [scale, setScale] = useState(0)\n\n const draw = useCallback(({ visualizationAnalyser }: { visualizationAnalyser: AnalyserNode | null }) => {\n if (!visualizationAnalyser) {\n setScale(1)\n return\n }\n\n const frequencyData = new Uint8Array(visualizationAnalyser.frequencyBinCount / 15)\n visualizationAnalyser.getByteFrequencyData(frequencyData)\n\n setScale(1 + _.mean(frequencyData) / 255 / 10)\n\n requestAnimationFrame(() => draw({ visualizationAnalyser }))\n }, [])\n\n useEffect(() => {\n draw({ visualizationAnalyser: audioThreadContext.recorderProps.visualizationAnalyser })\n }, [draw, audioThreadContext])\n\n return (\n <Flex\n direction=\"column\"\n align=\"center\"\n justify=\"center\"\n mb=\"3\"\n flexGrow=\"1\"\n {...props}\n >\n <Flex\n align=\"center\"\n justify=\"center\"\n height=\"200px\"\n width=\"200px\"\n style={{\n backgroundColor: audioThreadContext.status === 'playing' ? 'var(--accent-4)' : 'var(--gray-4)',\n borderRadius: '9999px',\n scale,\n }}\n >\n <BarsVisualizer\n visualizationAnalyser={audioThreadContext.messageAudioProps.visualizationAnalyser}\n backgroundColor={audioThreadContext.status === 'playing' ? 'var(--accent-11)' : 'var(--gray-11)'}\n height=\"40px\"\n barWidth=\"24px\"\n />\n </Flex>\n\n <Flex\n ml=\"-22.5px\"\n gap=\"3\"\n pt=\"5\"\n >\n <AssistantAvatar />\n <Name>\n {assistantNameContext}\n </Name>\n </Flex>\n </Flex>\n )\n}\n","import { useContext } from 'react'\nimport { AudioThreadContext } from '@/contexts/threads/AudioThreadContext'\n\nexport const useAudioThreadContext = () => (\n useContext(AudioThreadContext)\n)\n","'use client'\nimport _ from 'lodash'\nimport {\n Flex,\n Grid,\n} from '@radix-ui/themes'\nimport { useState, useEffect, useCallback } from 'react'\nimport { cluster } from 'radash'\n\nconst barCount = 4\n\nexport const BarsVisualizer = ({\n visualizationAnalyser,\n backgroundColor,\n height,\n barWidth,\n}: {\n visualizationAnalyser: AnalyserNode | null\n backgroundColor: string\n height: string\n barWidth: string\n}) => {\n const [barHeights, setBarHeights] = useState<number[]>([])\n\n const draw = useCallback(({ visualizationAnalyser }: { visualizationAnalyser: AnalyserNode | null }) => {\n if (!visualizationAnalyser) {\n setBarHeights(Array(barCount).fill(0))\n return\n }\n\n const frequencyData = new Uint8Array(visualizationAnalyser.frequencyBinCount / 15)\n visualizationAnalyser.getByteFrequencyData(frequencyData)\n\n // @ts-ignore-next-line\n const clusteredFrequencyData = cluster(frequencyData, frequencyData.length / barCount)\n\n setBarHeights(\n clusteredFrequencyData.map((frequencyDataCluster) => (\n _.mean(frequencyDataCluster) / 255 * 100\n ))\n )\n\n requestAnimationFrame(() => draw({ visualizationAnalyser }))\n }, [])\n\n useEffect(() => {\n draw({ visualizationAnalyser })\n }, [draw, visualizationAnalyser])\n\n return (\n <Grid\n columns={`${barCount}`}\n gap=\"1\"\n width=\"auto\"\n style={{\n // TODO not sure why we need this\n gridTemplateColumns: 'repeat(4, minmax(0, 1fr))',\n }}\n >\n {barHeights.map((barHeight, index) => (\n <Flex\n key={index}\n direction=\"column\"\n align=\"center\"\n justify=\"center\"\n height={height}\n >\n <Flex\n minHeight=\"50%\"\n maxHeight=\"100%\"\n height={`${barHeight + 20}%`}\n width={barWidth}\n style={{\n backgroundColor,\n borderRadius: 'var(--radius-6)',\n }}\n />\n </Flex>\n ))}\n </Grid>\n )\n}\n","import {\n Flex,\n Text,\n} from '@radix-ui/themes'\nimport type { StyleProps } from '@/types'\n\nconst html = ({ texts }: { texts: string[] }) => `\n .status-messages-texts:after {\n content: '${texts[0]}';\n animation: texts ${texts.length * 5}s linear infinite;\n }\n\n @keyframes texts {\n ${texts.map((_, i) => `\n ${i * 100 / texts.length}% {\n content: \"${texts[i]}\";\n }\n `).join('')}\n }`\n\nexport const StatusMessages = ({\n texts,\n className,\n style,\n}: {\n texts: string[]\n} & StyleProps) => (\n <Flex\n justify=\"center\"\n pb=\"5\"\n className={className}\n style={style}\n >\n <Text\n size=\"2\"\n weight=\"regular\"\n color=\"gray\"\n className=\"status-messages-texts\"\n />\n\n <style\n dangerouslySetInnerHTML={{\n __html: html({ texts }),\n }}\n />\n </Flex>\n)\n","import { useAudioThreadContext } from '@/hooks/threads/useAudioThreadContext'\nimport type { StyleProps } from '@/types'\nimport { StatusMessages } from './StatusMessages'\n\nexport const Status = (props: StyleProps) => {\n const audioThreadContext = useAudioThreadContext()\n\n if (audioThreadContext.status === 'recording') {\n return (\n <StatusMessages\n texts={[\n 'Start speaking',\n 'Listening',\n 'Finish speaking to send',\n 'Click the button below to send manually',\n ]}\n {...props}\n />\n )\n }\n\n if (['recorderPaused', 'idle', 'playerPaused'].includes(audioThreadContext.status)) {\n return (\n <StatusMessages\n texts={[\n 'Click the button below to activate',\n ]}\n {...props}\n />\n )\n }\n\n if (audioThreadContext.status === 'playing') {\n return (\n <StatusMessages\n texts={[\n 'Click the button below to interrupt',\n ]}\n {...props}\n />\n )\n }\n\n return (\n <StatusMessages\n texts={[\n 'Thinking',\n ]}\n {...props}\n />\n )\n}\n","import {\n Flex,\n} from '@radix-ui/themes'\nimport { BarsVisualizer } from '@/components/threads/AudioThread/BarsVisualizer'\nimport { useAudioThreadContext } from '@/hooks/threads/useAudioThreadContext'\nimport { MicIcon } from './MicIcon'\nimport { ActionButton } from './ActionButton'\nimport type { StyleProps } from '@/types'\n\nexport const Form = (props: StyleProps) => {\n const audioThreadContext = useAudioThreadContext()\n\n return (\n <Flex\n direction=\"column\"\n align=\"center\"\n {...props}\n >\n <Flex\n pb=\"3\"\n align=\"center\"\n >\n <Flex\n ml=\"-22.5px\"\n mr=\"2\"\n align=\"center\"\n >\n <MicIcon\n style={{\n color: audioThreadContext.status === 'recording' ? 'var(--accent-11)' : 'var(--gray-11)',\n }}\n />\n </Flex>\n\n <Flex\n px=\"2\"\n py=\"1\"\n style= {{\n backgroundColor: audioThreadContext.status === 'recording' ? 'var(--accent-4)' : 'var(--gray-4)',\n borderRadius: 'var(--radius-6)',\n }}\n >\n <BarsVisualizer\n visualizationAnalyser={audioThreadContext.recorderProps.visualizationAnalyser}\n backgroundColor={audioThreadContext.status === 'recording' ? 'var(--accent-11)' : 'var(--gray-11)'}\n height=\"20px\"\n barWidth=\"12px\"\n />\n </Flex>\n </Flex>\n\n <ActionButton />\n </Flex>\n )\n}\n","import { SVGProps } from 'react'\n\nexport const MicIcon = (props: SVGProps<SVGSVGElement>) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"currentColor\"\n stroke=\"currentColor\"\n strokeWidth={0}\n viewBox=\"0 0 384 512\"\n height=\"15\"\n width=\"15\"\n {...props}\n >\n <path\n stroke=\"none\"\n d=\"M192 0c-53 0-96 43-96 96v160c0 53 43 96 96 96s96-43 96-96V96c0-53-43-96-96-96zM64 216c0-13.3-10.7-24-24-24s-24 10.7-24 24v40c0 89.1 66.2 162.7 152 174.4V464h-48c-13.3 0-24 10.7-24 24s10.7 24 24 24h144c13.3 0 24-10.7 24-24s-10.7-24-24-24h-48v-33.6c85.8-11.7 152-85.3 152-174.4v-40c0-13.3-10.7-24-24-24s-24 10.7-24 24v40c0 70.7-57.3 128-128 128S64 326.7 64 256v-40z\"\n />\n </svg>\n)\n","import {\n Flex,\n IconButton,\n} from '@radix-ui/themes'\nimport {\n StopIcon,\n PauseIcon,\n ArrowUpIcon,\n ResumeIcon,\n} from '@radix-ui/react-icons'\nimport { useAudioThreadContext } from '@/hooks/threads/useAudioThreadContext'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\n\nexport const ActionButton = () => {\n const audioThreadContext = useAudioThreadContext()\n const superinterfaceContext = useSuperinterfaceContext()\n\n if (audioThreadContext.status === 'recording') {\n return (\n <Flex\n align=\"center\"\n >\n <Flex\n mr=\"3\"\n ml=\"-7\"\n >\n <IconButton\n onClick={audioThreadContext.recorderProps.pause}\n color=\"gray\"\n variant=\"soft\"\n size=\"1\"\n >\n <PauseIcon />\n </IconButton>\n </Flex>\n\n <IconButton\n onClick={audioThreadContext.recorderProps.stop}\n highContrast\n variant=\"soft\"\n size=\"4\"\n >\n <ArrowUpIcon />\n </IconButton>\n </Flex>\n )\n }\n\n if (audioThreadContext.status === 'recorderPaused') {\n return (\n <IconButton\n onClick={audioThreadContext.recorderProps.resume}\n color=\"red\"\n size=\"4\"\n >\n <ResumeIcon />\n </IconButton>\n )\n }\n\n if (audioThreadContext.status === 'idle') {\n return (\n <IconButton\n onClick={() => audioThreadContext.recorderProps.start()}\n size=\"4\"\n color=\"red\"\n />\n )\n }\n\n if (audioThreadContext.status === 'playing') {\n return (\n <IconButton\n onClick={() => {\n audioThreadContext.messageAudioProps.stop()\n superinterfaceContext.createMessageAbortControllerRef.current?.abort()\n audioThreadContext.recorderProps.start()\n }}\n size=\"4\"\n color=\"gray\"\n variant=\"soft\"\n >\n <StopIcon />\n </IconButton>\n )\n }\n\n if (audioThreadContext.status === 'playerPaused') {\n return (\n <IconButton\n onClick={() => audioThreadContext.messageAudioProps.play()}\n size=\"4\"\n >\n <ResumeIcon />\n </IconButton>\n )\n }\n\n return (\n <IconButton\n size=\"4\"\n variant=\"soft\"\n disabled\n />\n )\n}\n","import { Root, Args as RootArgs } from './Root'\nimport { Visualization } from './Visualization'\nimport { Status } from './Status'\nimport { Form } from './Form'\n\ntype Args = Omit<RootArgs, 'children'>\n\nexport const AudioThread = (props: Args) => (\n <Root {...props}>\n <Visualization />\n <Status />\n <Form />\n </Root>\n)\n\nAudioThread.Root = Root\nAudioThread.Visualization = Visualization\nAudioThread.Status = Status\nAudioThread.Form = Form\n","import { AudioThread } from '@/components/threads/AudioThread'\nimport { Root } from '@/components/threads/ThreadDialog/Root'\nimport { Trigger } from '@/components/threads/ThreadDialog/Trigger'\nimport { Content } from '@/components/threads/ThreadDialog/Content'\nimport type { StyleProps } from '@/types'\n\nexport const AudioThreadDialog = (props: StyleProps) => (\n <Root {...props}>\n <Content.Root>\n <AudioThread />\n </Content.Root>\n <Trigger />\n </Root>\n)\n\nAudioThreadDialog.Root = Root\nAudioThreadDialog.Trigger = Trigger\nAudioThreadDialog.Content = Content\n","import { useMemo } from 'react'\nimport { MarkdownContext } from '@/contexts/markdown/MarkdownContext'\nimport { useMarkdownContext } from '@/hooks/markdown/useMarkdownContext'\nimport { merge } from '@/lib/misc/merge'\n\nexport const MarkdownProvider = ({\n children,\n ...rest\n}: {\n children: React.ReactNode\n}) => {\n const prevMarkdownContext = useMarkdownContext()\n\n const value = useMemo(() => (\n merge(prevMarkdownContext, rest)\n ), [rest, prevMarkdownContext])\n\n return (\n <MarkdownContext.Provider\n value={value}\n >\n {children}\n </MarkdownContext.Provider>\n )\n}\n","import { AvatarType as AvatarTypeEnum } from '@/lib/enums'\nimport { Avatar as AvatarType, StyleProps } from '@/types'\nimport { Avatar as RadixAvatar } from '@radix-ui/themes'\nimport { ImageAvatar } from '@/components/imageAvatars/ImageAvatar'\nimport { IconAvatar } from '@/components/iconAvatars/IconAvatar'\n\nexport const Avatar = ({\n avatar,\n size = '1',\n className,\n style,\n}: {\n avatar: AvatarType\n size?: '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9'\n} & StyleProps) => {\n if (avatar) {\n if (avatar.type === AvatarTypeEnum.IMAGE && avatar.imageAvatar) {\n return (\n <ImageAvatar\n imageAvatar={avatar.imageAvatar}\n size={size}\n className={className}\n style={style}\n />\n )\n }\n\n if (avatar.type === AvatarTypeEnum.ICON && avatar.iconAvatar) {\n return (\n <IconAvatar\n iconAvatar={avatar.iconAvatar}\n size={size}\n className={className}\n style={style}\n />\n )\n }\n }\n\n return (\n <RadixAvatar\n fallback=\"\"\n size={size}\n className={className}\n style={style}\n />\n )\n}\n","import { Avatar } from '@radix-ui/themes'\nimport { Size, ImageAvatar as ImageAvatarType, StyleProps } from '@/types'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\nimport { optimizedSrc } from './lib/optimizedSrc'\n\nexport const ImageAvatar = ({\n imageAvatar,\n size,\n className,\n style,\n}: {\n imageAvatar: ImageAvatarType\n size: Size\n} & StyleProps) => {\n const superinterfaceContext = useSuperinterfaceContext()\n\n return (\n <Avatar\n className={className}\n style={style}\n fallback=\"\"\n src={optimizedSrc({ imageAvatar, size, superinterfaceContext })}\n size={size}\n />\n )\n}\n","import { Size, ImageAvatar } from '@/types'\n\nconst width = ({\n size,\n}: {\n size: Size\n}) => {\n if (size === '1') {\n return 48\n } else if (size === '2') {\n return 64\n } else if (size === '3') {\n return 96\n } else if (size === '4') {\n return 96\n } else if (size === '5') {\n return 128\n } else if (size === '6') {\n return 256\n } else if (size === '7') {\n return 256\n } else if (size === '8') {\n return 256\n } else if (size === '9') {\n return 384\n }\n\n return 384\n}\n\nexport const path = ({\n imageAvatar,\n size,\n}: {\n imageAvatar: ImageAvatar\n size: Size\n}) => (\n `/_next/image?url=${encodeURIComponent(imageAvatar.url)}&w=${width({ size })}&q=95`\n)\n","import { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\n\nexport const host = ({\n superinterfaceContext,\n}: {\n superinterfaceContext: ReturnType<typeof useSuperinterfaceContext>\n}) => {\n if (!superinterfaceContext.baseUrl) return ''\n if (!/^https?:\\/\\//i.test(superinterfaceContext.baseUrl)) return ''\n\n return new URL(superinterfaceContext.baseUrl).origin\n}\n","import { Size, ImageAvatar } from '@/types'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\nimport { path } from './path'\nimport { host } from './host'\n\nexport const optimizedSrc = ({\n imageAvatar,\n size,\n superinterfaceContext,\n}: {\n imageAvatar: ImageAvatar\n size: Size\n superinterfaceContext: ReturnType<typeof useSuperinterfaceContext>\n}) => {\n if (!imageAvatar.url) return ''\n if (imageAvatar.url.endsWith('.svg')) return imageAvatar.url\n\n return `${host({ superinterfaceContext })}${path({ imageAvatar, size })}`\n}\n","import { useMemo } from 'react'\nimport { IconAvatar as IconAvatarType, StyleProps } from '@/types'\nimport { Avatar } from '@radix-ui/themes'\nimport { iconAvatarComponents } from '@/lib/iconAvatars/iconAvatarComponents'\n\nexport const IconAvatar = ({\n iconAvatar,\n size,\n className,\n style,\n}: {\n iconAvatar: IconAvatarType\n size: '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9'\n} & StyleProps) => {\n const Component = useMemo(() => (\n iconAvatarComponents[iconAvatar.name]\n ), [iconAvatar])\n\n return (\n <Avatar\n className={className}\n style={style}\n size={size}\n fallback={(\n Component ? (\n <Component />\n ) : (\n ''\n )\n )}\n />\n )\n}\n","import { IconAvatarName } from '@/lib/enums'\nimport {\n BackpackIcon,\n RocketIcon,\n MagicWandIcon,\n CubeIcon,\n TargetIcon,\n DiscIcon,\n GlobeIcon,\n StarIcon,\n LightningBoltIcon,\n FaceIcon,\n PersonIcon,\n HeartIcon,\n} from '@radix-ui/react-icons'\n\nexport const iconAvatarComponents = {\n [IconAvatarName.BACKPACK]: BackpackIcon,\n [IconAvatarName.ROCKET]: RocketIcon,\n [IconAvatarName.MAGIC_WAND]: MagicWandIcon,\n [IconAvatarName.CUBE]: CubeIcon,\n [IconAvatarName.TARGET]: TargetIcon,\n [IconAvatarName.DISC]: DiscIcon,\n [IconAvatarName.GLOBE]: GlobeIcon,\n [IconAvatarName.STAR]: StarIcon,\n [IconAvatarName.LIGHTNING_BOLT]: LightningBoltIcon,\n [IconAvatarName.FACE]: FaceIcon,\n [IconAvatarName.PERSON]: PersonIcon,\n [IconAvatarName.HEART]: HeartIcon,\n}\n","import { useMemo } from 'react'\nimport { ComponentsContext } from '@/contexts/components/ComponentsContext'\nimport { useComponents } from '@/hooks/components/useComponents'\nimport { merge } from '@/lib/misc/merge'\n\nexport const ComponentsProvider = ({\n children,\n ...rest\n}: {\n children: React.ReactNode\n}) => {\n const prevComponents = useComponents()\n\n const value = useMemo(() => (\n merge(prevComponents, rest)\n ), [rest, prevComponents])\n\n return (\n <ComponentsContext.Provider\n value={value}\n >\n {children}\n </ComponentsContext.Provider>\n )\n}\n","import { useContext } from 'react'\nimport { ComponentsContext } from '@/contexts/components/ComponentsContext'\n\nexport const useComponents = () => (\n useContext(ComponentsContext)\n)\n","import { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\nimport { AssistantAvatarContext } from '@/contexts/assistants/AssistantAvatarContext'\nimport { AssistantNameContext } from '@/contexts/assistants/AssistantNameContext'\nimport { useAssistant } from '@/hooks/assistants/useAssistant'\nimport { Avatar } from '@/components/avatars/Avatar'\n\ntype Args = {\n children: React.ReactNode\n}\n\nexport const AssistantProvider = ({\n children,\n}: Args) => {\n const superinterfaceContext = useSuperinterfaceContext()\n const { assistant } = useAssistant({\n assistantId: superinterfaceContext.variables.assistantId,\n })\n\n return (\n <AssistantNameContext.Provider value={assistant?.name ?? ''}>\n <AssistantAvatarContext.Provider\n value={<Avatar avatar={assistant?.avatar} />}\n >\n {children}\n </AssistantAvatarContext.Provider>\n </AssistantNameContext.Provider>\n )\n}\n"]}
1
+ {"version":3,"sources":["/Users/domas/Developer/supercorp/superinterface/packages/react/dist/index.js","../src/lib/misc/merge/index.ts","../src/hooks/audioThreads/useMessageAudio/lib/isHtmlAudioSupported.ts","../src/components/core/SuperinterfaceProvider/index.tsx","../src/lib/misc/merge/customizer.ts","../src/contexts/core/SuperinterfaceContext/index.tsx","../src/lib/superinterfaceCloud/baseUrl.ts","../src/lib/threadIdStorage/cookieOptions/get.ts","../src/lib/threadIdStorage/key.ts","../src/lib/threadIdStorage/cookieOptions/set.ts","../src/lib/threadIdStorage/cookieOptions/remove.ts","../src/lib/threadIdStorage/cookieOptions/index.ts","../src/lib/threadIdStorage/localStorageOptions/get.ts","../src/lib/threadIdStorage/localStorageOptions/set.ts","../src/lib/threadIdStorage/localStorageOptions/remove.ts","../src/lib/threadIdStorage/localStorageOptions/index.ts","../src/lib/iframes/isIframe.ts","../src/hooks/core/useSuperinterfaceContext/index.ts","../src/components/threads/Thread/Messages/index.tsx","../src/components/threads/Thread/Message/index.tsx","../src/components/skeletons/StartingContentSkeleton/index.tsx","../src/components/runSteps/RunSteps/index.tsx","../src/contexts/components/ComponentsContext/index.tsx","../src/components/runSteps/RunStep/ToolCalls/index.tsx","../src/components/runSteps/RunStep/ToolCalls/ToolCall/Fn/index.tsx","../src/contexts/functions/FunctionComponentsContext/index.tsx","../src/components/functions/FunctionBase/index.tsx","../src/components/toolCalls/ToolCallBase/index.tsx","../src/components/toolCalls/ToolCallBase/ToolCallTitle.tsx","../src/components/toolCalls/ToolCallBase/ToolCallIcon.tsx","../src/components/functions/FunctionBase/Content/index.tsx","../src/components/functions/FunctionBase/Content/lib/formattedJsonOrRaw.ts","../src/components/runSteps/RunStep/ToolCalls/ToolCall/Fn/DefaultFunction/lib/title.ts","../src/components/runSteps/RunStep/ToolCalls/ToolCall/Fn/DefaultFunction/index.tsx","../src/components/runSteps/RunStep/ToolCalls/ToolCall/CodeInterpreter/index.tsx","../src/components/runSteps/RunStep/ToolCalls/ToolCall/CodeInterpreter/Content.tsx","../src/components/runSteps/RunStep/ToolCalls/ToolCall/FileSearch.tsx","../src/components/runSteps/RunStep/ToolCalls/ToolCall/Fallback.tsx","../src/components/runSteps/RunStep/ToolCalls/ToolCall/index.tsx","../src/components/runSteps/RunStep/ToolCalls/Starting/index.tsx","../src/components/runSteps/RunStep/index.tsx","../src/hooks/messages/useIsMutatingMessage/index.ts","../src/contexts/messages/MessageContext/index.ts","../src/components/threads/Thread/Message/Provider.tsx","../src/components/threads/Thread/Message/Attachments/index.tsx","../src/components/threads/Thread/Message/ContentPart/TextContent.tsx","../src/hooks/markdown/useMarkdownContext/index.ts","../src/contexts/markdown/MarkdownContext/index.ts","../src/contexts/markdown/MarkdownContext/lib/components/index.tsx","../src/contexts/markdown/MarkdownContext/lib/components/Paragraph.tsx","../src/contexts/markdown/MarkdownContext/lib/components/Link.tsx","../src/contexts/markdown/MarkdownContext/lib/components/UnorderedList.tsx","../src/contexts/markdown/MarkdownContext/lib/components/OrderedList.tsx","../src/contexts/markdown/MarkdownContext/lib/components/ListItem.tsx","../src/contexts/markdown/MarkdownContext/lib/components/Strong.tsx","../src/contexts/markdown/MarkdownContext/lib/components/Pre.tsx","../src/contexts/markdown/MarkdownContext/lib/components/Code.tsx","../src/components/suggestions/Suggestions/index.tsx","../src/hooks/messages/useLatestMessage/index.ts","../src/hooks/messages/useMessages/index.tsx","../src/lib/threads/queryOptions/index.ts","../src/lib/threads/queryOptions/variableParams.ts","../src/lib/messages/messagesQueryOptions.ts","../src/components/suggestions/Suggestions/Content.tsx","../src/components/suggestions/Suggestions/Item.tsx","../src/hooks/messages/useCreateMessage/index.ts","../src/hooks/messages/useCreateMessage/lib/mutationOptions/onMutate/index.ts","../src/hooks/messages/useCreateMessage/lib/mutationOptions/onMutate/data.ts","../src/lib/optimistic/optimisticId.ts","../src/hooks/messages/useCreateMessage/lib/mutationOptions/mutationFn/index.ts","../src/hooks/messages/useCreateMessage/lib/mutationOptions/mutationFn/handleResponse/handlers/threadCreated.ts","../src/lib/optimistic/isOptimistic.ts","../src/hooks/messages/useCreateMessage/lib/mutationOptions/mutationFn/handleResponse/handlers/extendMessage.ts","../src/hooks/messages/useCreateMessage/lib/mutationOptions/mutationFn/handleResponse/handlers/threadMessageCreated.ts","../src/hooks/messages/useCreateMessage/lib/mutationOptions/mutationFn/handleResponse/handlers/threadMessageDelta.ts","../src/hooks/messages/useCreateMessage/lib/mutationOptions/mutationFn/handleResponse/handlers/threadMessageCompleted.ts","../src/hooks/messages/useCreateMessage/lib/mutationOptions/mutationFn/handleResponse/handlers/threadRunCreated.ts","../src/hooks/messages/useCreateMessage/lib/mutationOptions/mutationFn/handleResponse/handlers/threadRunFailed.ts","../src/hooks/messages/useCreateMessage/lib/mutationOptions/mutationFn/handleResponse/handlers/threadRunStepCreated.ts","../src/hooks/messages/useCreateMessage/lib/mutationOptions/mutationFn/handleResponse/handlers/threadRunStepDelta.ts","../src/hooks/messages/useCreateMessage/lib/mutationOptions/mutationFn/handleResponse/handlers/threadRunStepCompleted.ts","../src/hooks/messages/useCreateMessage/lib/mutationOptions/mutationFn/handleResponse/handlers/threadRunRequiresAction.ts","../src/hooks/messages/useCreateMessage/lib/mutationOptions/mutationFn/handleResponse/handlers/index.ts","../src/hooks/messages/useCreateMessage/lib/mutationOptions/mutationFn/handleResponse/index.ts","../src/hooks/messages/useCreateMessage/lib/mutationOptions/mutationFn/body.ts","../src/hooks/messages/useCreateMessage/lib/mutationOptions/index.ts","../src/hooks/toasts/useToasts/index.ts","../src/contexts/toasts/ToastsContext/index.ts","../src/lib/errors/createMessageDefaultOnError.ts","../src/components/images/Image.tsx","../src/contexts/markdown/MarkdownContext/lib/components/Img/lib/isVideoSrc.ts","../src/contexts/markdown/MarkdownContext/lib/components/Img/lib/isAudioSrc.ts","../src/contexts/markdown/MarkdownContext/lib/components/Img/Video/index.tsx","../src/components/media/PlayButton.tsx","../src/components/media/VolumeButton.tsx","../src/components/media/Time.tsx","../src/components/media/MediaContainer.tsx","../src/contexts/markdown/MarkdownContext/lib/components/Img/Video/FullscreenButton.tsx","../src/contexts/markdown/MarkdownContext/lib/components/Img/Audio/index.tsx","../src/contexts/markdown/MarkdownContext/lib/components/Img/index.tsx","../src/contexts/markdown/MarkdownContext/lib/components/Annotation/index.tsx","../src/contexts/markdown/MarkdownContext/lib/components/Annotation/AnnotationBase.tsx","../src/contexts/markdown/MarkdownContext/lib/components/Annotation/FilePathAnnotation.tsx","../src/contexts/markdown/MarkdownContext/lib/getRemarkPlugins.ts","../src/lib/remark/remarkAnnotation.ts","../src/components/threads/Thread/Message/ContentPart/ImageFileContent.tsx","../src/components/threads/Thread/Message/ContentPart/index.tsx","../src/components/threads/Thread/Messages/Content/index.tsx","../src/hooks/messageGroups/useMessageGroups/index.ts","../src/hooks/messageGroups/useMessageGroups/lib/messageGroups/index.ts","../src/lib/messages/order.ts","../src/hooks/messageGroups/useMessageGroups/lib/messageGroups/newGroup/newGroupItem.ts","../src/hooks/messageGroups/useMessageGroups/lib/messageGroups/newGroup/index.ts","../src/components/skeletons/MessagesSkeleton/index.tsx","../src/components/messageGroups/MessageGroupBase/index.tsx","../src/components/messageGroups/MessageGroupBase/Name.tsx","../src/components/threads/Thread/Messages/Content/MessageGroup/index.tsx","../src/components/messageGroups/MessageGroupBase/AssistantAvatar.tsx","../src/contexts/assistants/AssistantAvatarContext/index.tsx","../src/contexts/assistants/AssistantNameContext/index.tsx","../src/components/messageGroups/MessageGroupBase/UserAvatar.tsx","../src/contexts/users/UserAvatarContext/index.tsx","../src/components/threads/Thread/Messages/Content/MessageGroup/Content/index.tsx","../src/components/threads/Thread/Messages/Progress/index.tsx","../src/components/skeletons/StartingSkeleton/index.tsx","../src/components/threads/Thread/Messages/Root/index.tsx","../src/hooks/misc/useInfiniteScroll/index.tsx","../src/hooks/misc/useThrottledEffect/index.tsx","../src/components/threads/Thread/Messages/NextPageSkeleton.tsx","../src/components/threads/Thread/MessageForm/Submit/index.tsx","../src/hooks/messages/useMessageFormContext/index.ts","../src/contexts/messages/MessageFormContext/index.ts","../src/components/threads/Thread/MessageForm/Root/index.tsx","../src/components/threads/Thread/MessageForm/Root/lib/formOptions.ts","../src/components/threads/Thread/MessageForm/Field/index.tsx","../src/components/threads/Thread/MessageForm/Field/Control.tsx","../src/hooks/misc/usePrevious.ts","../src/components/textareas/TextareaBase/index.tsx","../src/components/threads/Thread/MessageForm/Field/Files/Preview.tsx","../src/components/threads/Thread/MessageForm/Field/Files/Control.tsx","../src/hooks/files/useCreateFile/index.ts","../src/hooks/files/useCreateFile/lib/mutationOptions/mutationFn/body/formData.ts","../src/hooks/files/useCreateFile/lib/mutationOptions/mutationFn/body/index.ts","../src/hooks/files/useCreateFile/lib/mutationOptions/mutationFn/index.ts","../src/hooks/files/useCreateFile/lib/mutationOptions/index.ts","../src/components/threads/Thread/MessageForm/Field/Files/index.tsx","../src/components/threads/Thread/MessageForm/index.tsx","../src/components/threads/Thread/Root/index.tsx","../src/components/threads/Thread/Provider/index.tsx","../src/components/toasts/ToastsProvider/index.tsx","../src/components/toasts/ToastsProvider/CustomToast.tsx","../src/components/threads/Thread/index.tsx","../src/hooks/messages/useMessageContext/index.ts","../src/hooks/assistants/useAssistant/index.ts","../src/hooks/assistants/useAssistant/lib/queryOptions/index.ts","../src/hooks/assistants/useAssistant/lib/queryOptions/queryFn.ts","../src/components/threads/ThreadDialog/Provider/index.tsx","../src/contexts/threads/ThreadDialogContext/index.ts","../src/hooks/threads/useThreadDialogContext/index.ts","../src/components/threads/ThreadDialog/Root/index.tsx","../src/components/threads/ThreadDialog/Trigger/index.tsx","../src/components/threads/ThreadDialog/Trigger/Button.tsx","../src/components/threads/ThreadDialog/Content/index.tsx","../src/components/threads/ThreadDialog/Close/index.tsx","../src/components/threads/ThreadDialog/index.tsx","../src/components/threads/AudioThread/Root/index.tsx","../src/contexts/threads/AudioThreadContext/index.ts","../src/hooks/misc/usePermission/index.ts","../src/hooks/misc/usePermission/util.ts","../src/components/threads/AudioThread/Root/lib/blobToData.ts","../src/hooks/audioThreads/useStatus/index.ts","../src/hooks/audioThreads/useRecorder/index.ts","../src/hooks/misc/useInterval.ts","../src/hooks/audioThreads/useMessageAudio/index.ts","../src/hooks/audioThreads/useMessageAudio/lib/input.ts","../src/components/threads/AudioThread/Visualization/index.tsx","../src/hooks/threads/useAudioThreadContext/index.ts","../src/components/threads/AudioThread/BarsVisualizer/index.tsx","../src/components/threads/AudioThread/Status/StatusMessages.tsx","../src/components/threads/AudioThread/Status/index.tsx","../src/components/threads/AudioThread/Form/index.tsx","../src/components/threads/AudioThread/Form/MicIcon.tsx","../src/components/threads/AudioThread/Form/ActionButton/index.tsx","../src/components/threads/AudioThread/index.tsx","../src/components/threads/AudioThreadDialog/index.tsx","../src/components/markdown/MarkdownProvider/index.tsx","../src/components/avatars/Avatar.tsx","../src/components/imageAvatars/ImageAvatar/index.tsx","../src/components/imageAvatars/ImageAvatar/lib/optimizedSrc/path.ts","../src/components/imageAvatars/ImageAvatar/lib/optimizedSrc/host.ts","../src/components/imageAvatars/ImageAvatar/lib/optimizedSrc/index.ts","../src/components/iconAvatars/IconAvatar.tsx","../src/lib/iconAvatars/iconAvatarComponents.ts","../src/components/components/ComponentsProvider.tsx","../src/hooks/components/useComponents.ts","../src/components/assistants/AssistantProvider/index.tsx"],"names":["_","detect","useRef","customizer","objectValue","srcValue","isArray","merge","obj","sources","mergeWith","cloneDeep","createContext","baseUrl","Cookies","key","assistantId","get","set","threadId","remove","cookieOptions","window","localStorage","getItem","setItem","removeItem","localStorageOptions","isIframe","self","top","SuperinterfaceContext","variables","defaultOptions","queries","mutations","threadIdStorageOptions","createMessageAbortControllerRef","current","useContext","useSuperinterfaceContext","jsx","SuperinterfaceProvider","children","superinterfaceContext","value","Provider","Flex","useMemo","isEmpty","Box","Skeleton","StartingContentSkeleton","loading","mt","height","width","style","borderRadius","flexShrink","FunctionComponentsContext","Popover","Button","ToolCallBase","py","ml","size","color","variant","boxShadow","Text","ToolCallTitle","weight","CircleIcon","CircleBackslashIcon","CheckCircledIcon","ToolCallIcon","runStep","completed_at","cancelled_at","failed_at","status","Code","formattedJsonOrRaw","JSON","stringify","parse","error","jsxs","Content","fn","args","arguments","output","whiteSpace","wordBreak","FunctionBase","title","Root","Trigger","maxHeight","name","DefaultFunction","Fn","functionComponentsContext","Component","codeInterpreter","input","outputs","CodeInterpreter","FileSearch","toolCall","Fallback","type","ToolCall","function","code_interpreter","Starting","className","direction","ToolCalls","stepDetails","tool_calls","length","map","id","RunStep","step_details","ComponentsContext","components","RunSteps","runSteps","componentsContext","useIsMutating","useIsMutatingMessage","threadContext","mutatingMessagesCount","mutationKey","isMutatingMessage","MessageContext","message","Badge","FileIcon","Attachments","attachments","align","pb","useState","useEffect","compile","MDXProvider","useMDXComponents","runtime","recmaMdxEscapeMissingComponents","Heading","Table","Paragraph","Link","RadixLink","href","download","target","UnorderedList","asChild","listStylePosition","OrderedList","ListItem","Strong","RadixStrong","Pre","RadixCode","useInfiniteQuery","useQueryClient","infiniteQueryOptions","variableParams","queryOptions","queryKeyBase","path","queryClient","queryKey","queryFn","pageParam","_key","params","URLSearchParams","fetch","then","response","errorResponse","json","Error","initialPageParam","getNextPageParam","lastPage","hasNextPage","lastId","limit","getQueryDefaults","messagesQueryOptions","messages","props","data","pages","reduce","acc","page","concat","useMessages","useLatestMessage","latestMessage","onlyText","ArrowUpIcon","Spinner","partob","useMutation","omit","dayjs","uid","optimisticId","newMessage","prevData","role","created_at","unix","object","content","text","annotations","run_id","assistant_id","thread_id","metadata","pageParams","latestPage","pagesRest","onMutate","prevMessages","cancelQueries","getQueryData","setQueryData","JSONParser","threadCreated","isOptimistic","startsWith","last","extendMessage","prevRunMessages","filter","m","prevOptimitisticRunMessages","appendMessage","threadMessageCreated","messagesQueryKey","updatedContentPart","prevContentPart","delta","updatedContent","result","forEach","index","threadMessageDelta","messagesRest","replace","threadMessageCompleted","threadRunCreated","threadRunFailed","threadRunStepCreated","updatedToolCall","Object","entries","updatedRunStep","newToolCalls","threadRunStepDelta","rs","threadRunStepCompleted","threadRunRequiresAction","toolCalls","toolOutputs","required_action","submit_client_tool_outputs","parsedArgs","toolCallId","method","headers","body","handlers","handleResponse","handler","event","console","log","mutationFn","abortController","parser","reader","done","AbortController","signal","stringBufferSize","paths","separator","pipeThrough","getReader","read","mutationOptions","onError","getMutationDefaults","useCreateMessage","createMessage","mutateAsync","ToastsContext","toasts","addToast","useToasts","createMessageDefaultOnError","invalidateQueries","Item","suggestion","isDisabled","isPending","onClick","disabled","minHeight","suggestions","split","c","trim","gap","wrap","Suggestions","latestMessageProps","isBlocking","isLoading","Image","maxWidth","videoExtensions","isVideoSrc","src","includes","pop","isAudioSrc","endsWith","MediaPlayer","MediaProvider","Controls","PlayButton","VidstackPlayButton","useMediaState","IconButton","PlayIcon","PauseIcon","isPaused","MuteButton","useMediaRemote","HoverCard","Slider","SpeakerModerateIcon","SpeakerOffIcon","VolumeButton","volume","isMuted","remote","side","orientation","onValueChange","changeVolume","Time","time","duration","seeking","canSeek","setValue","step","Number","isFinite","onValueCommit","seek","Card","Inset","MediaContainer","mb","clip","display","flexDirection","FullscreenButton","VidstackFullscreenButton","EnterFullScreenIcon","ExitFullScreenIcon","isFullscreen","Video","playsInline","hideControlsOnMouseLeave","crossOrigin","position","bottom","left","right","p","zIndex","background","flexGrow","Group","Audio","viewType","Img","QuoteIcon","AnnotationBase","icon","FilePathAnnotation","annotation","nextSearchParams","file_path","file_id","Annotation","Fragment","a","strong","ul","ol","li","pre","code","img","h1","as","h2","h3","h4","h5","h6","table","thead","Header","tbody","Body","tr","Row","td","rest","Cell","th","ColumnHeaderCell","remarkGfm","isNumber","flatMap","sortedAnnotations","sort","b","start_index","remarkAnnotation","tree","node","processNodeWithAnnotations","processTextNode","linkNode","childNode","nodeStart","start","offset","nodeEnd","end","newNodes","lastIndex","annotationStart","annotationEnd","end_index","Math","max","min","push","createTextNode","startOffset","endOffset","createAnnotationNode","valueStart","valueEnd","slice","hName","hProperties","getRemarkPlugins","MarkdownContext","useMarkdownContext","evaluate","Function","TextContent","remarkPlugins","MDXComponent","setMDXComponent","compileMDX","compiled","module","MDXContent","outputFormat","recmaPlugins","providerImportSource","String","default","ImageFileContent","alt","image_file","ContentPart","Message","messageCreationRunStepIndex","findIndex","message_creation","message_id","nextRunStepIndex","findLastIndex","laterRunSteps","prevRunStepIndex","olderRunSteps","isInProgress","some","order","newGroupItem","createdAt","newGroup","groups","messageGroups","group","dropRight","useMessageGroups","forwardRef","Avatar","Container","MessageGroupBase","ref","Name","MessagesSkeleton","_props","fallback","marginTop","LightningBoltIcon","AssistantAvatarContext","AssistantAvatar","AssistantAvatarContextValue","overflow","AssistantNameContext","PersonIcon","UserAvatarContext","UserAvatar","UserAvatarContextValue","messageGroup","MessageGroup","assistantNameContext","isLoadingError","StartingSkeleton","Progress","isVisible","useInView","useCallback","useThrottledEffect","cb","delay","additionalDeps","cbRef","throttledCb","throttle","leading","trailing","useInfiniteScroll","isFetchingNextPage","fetchNextPage","containerRef","root","rootMargin","threshold","loaderRef","inView","NextPageSkeleton","Messages","StopIcon","MessageFormContext","files","setFiles","isFileLoading","useMessageFormContext","abort","Submit","useForm","FormProvider","z","zodResolver","schema","string","formOptions","resolver","onSubmit","onSubmitArg","isDisabledArg","formProps","handleSubmit","formState","isSubmitting","reset","watch","file","tools","useFormContext","RadixContainer","usePrevious","state","TextareaAutosize","TextareaBase","border","outline","boxSizing","resize","pt","Input","register","isSubmitDisabled","isDisabledPrevious","textareaRef","textareaProps","focus","minRows","placeholder","onKeyDown","e","shiftKey","preventDefault","currentTarget","form","requestSubmit","Control","Cross2Icon","Preview","flexBasis","justify","minWidth","truncate","filename","prev","prevFile","FilePlusIcon","formData","FormData","append","useCreateFile","createFile","firstArg","restArgs","accept","onChange","fileObjects","newFiles","Array","from","fileObject","purpose","bytes","newFile","onSuccess","pr","multiple","cursor","opacity","Files","errors","borderWidth","borderStyle","borderColor","backgroundColor","pl","Field","MessageForm","Toast","CrossCircledIcon","CustomToast","toast","Title","ToastsProvider","setToasts","prevToasts","Toast2","Viewport","padding","margin","listStyle","Thread","useMessageContext","useQuery","tanstackQueryOptions","publicApiKey","useAssistant","assistant","ThreadDialogContext","isOpen","setIsOpen","useThreadDialogContext","threadDialogContext","ChatBubbleIcon","radius","initial","sm","Cross1Icon","Close","paddingTop","paddingRight","paddingLeft","FormContainer","ThreadDialog","AudioThreadContext","recorderProps","stop","pause","resume","visualizationAnalyser","messageAudioProps","playing","paused","isReady","play","noop","on","addEventListener","off","removeEventListener","usePermission","permissionDesc","setState","mounted","permissionStatus","navigator","permissions","query","catch","blobToData","blob","Promise","resolve","FileReader","onloadend","readAsDataURL","useStatus","createMessageProps","isAudioPlayed","useAudioCapture","useAudioPlayer","useInterval","callback","savedCallback","interval","setInterval","clearInterval","useRecorder","isStopOnSilence","onStart","onStop","silenceStart","setSilenceStart","noiseStart","setNoiseStart","mediaStream","setMediaStream","setStatus","startAudioPlayer","endAudioPlayer","isLoaded","setIsLoaded","audioCaptureProps","opts","isInited","onPause","onResume","audioEngine","setAudioEngine","audioContext","AudioContext","source","createMediaStreamSource","createAnalyser","connect","silenceAnalyser","minDecibels","handleSilence","frequencyData","Uint8Array","frequencyBinCount","getByteFrequencyData","isSilent","every","f","requestAnimationFrame","isBefore","subtract","nlp","Howler","textContents","join","unsupportedNames","isHtmlAudioSupported","FULL_SENTENCE_REGEX","getMessageSentences","messageId","sentences","sentence","useMessageAudio","onEnd","setIsAudioPlayed","stoppedMessageIds","setStoppedMessageIds","playedMessageSentences","setPlayedMessageSentences","audioPlayer","nextAudioPlayer","isPlaying","setIsPlaying","unplayedMessageSentences","messageSentences","ms","find","pms","firstUnplayedMessageSentence","isFullSentence","test","searchParams","load","format","autoplay","html5","onplay","onstop","onload","nextUnplayedMessageSentence","isNextFullSentence","onend","_howls","_sounds","_node","isAudioEngineInited","createMediaElementSource","masterGain","ctx","destination","_event","chunks","audioContent","Blob","microphonePermission","useAudioThreadContext","Grid","cluster","barCount","BarsVisualizer","barWidth","barHeights","setBarHeights","draw","fill","clusteredFrequencyData","frequencyDataCluster","mean","columns","gridTemplateColumns","barHeight","Visualization","audioThreadContext","scale","setScale","html","texts","i","StatusMessages","dangerouslySetInnerHTML","__html","Status","MicIcon","xmlns","stroke","strokeWidth","viewBox","d","ResumeIcon","ActionButton","mr","highContrast","Form","px","AudioThread","AudioThreadDialog","MarkdownProvider","prevMarkdownContext","RadixAvatar","imageAvatar","encodeURIComponent","url","host","URL","origin","optimizedSrc","ImageAvatar","BackpackIcon","RocketIcon","MagicWandIcon","CubeIcon","TargetIcon","DiscIcon","GlobeIcon","StarIcon","FaceIcon","HeartIcon","iconAvatarComponents","IconAvatar","iconAvatar","avatar","useComponents","ComponentsProvider","prevComponents","AssistantProvider","Avatar6","useThreadContext"],"mappings":"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","sourcesContent":["// src/components/core/SuperinterfaceProvider/index.tsx\nimport { useRef } from \"react\";\n\n// src/lib/misc/merge/index.ts\nimport _2 from \"lodash\";\n\n// src/lib/misc/merge/customizer.ts\nimport _ from \"lodash\";\nvar customizer = (objectValue, srcValue) => {\n if (!_.isArray(objectValue)) return;\n return srcValue;\n};\n\n// src/lib/misc/merge/index.ts\nvar merge = (obj, ...sources) => _2.mergeWith(_2.cloneDeep(obj), ...sources, customizer);\n\n// src/contexts/core/SuperinterfaceContext/index.tsx\nimport { createContext } from \"react\";\n\n// src/lib/superinterfaceCloud/baseUrl.ts\nvar baseUrl = \"https://superinterface.ai/api/cloud\";\n\n// src/lib/threadIdStorage/cookieOptions/get.ts\nimport Cookies from \"js-cookie\";\n\n// src/lib/threadIdStorage/key.ts\nvar key = ({\n assistantId\n}) => `superinterface-${assistantId}-threadId`;\n\n// src/lib/threadIdStorage/cookieOptions/get.ts\nvar get = ({\n assistantId\n}) => Cookies.get(key({ assistantId })) ?? null;\n\n// src/lib/threadIdStorage/cookieOptions/set.ts\nimport Cookies2 from \"js-cookie\";\nvar set = ({\n assistantId,\n threadId\n}) => Cookies2.set(key({ assistantId }), threadId);\n\n// src/lib/threadIdStorage/cookieOptions/remove.ts\nimport Cookies3 from \"js-cookie\";\nvar remove = ({\n assistantId\n}) => Cookies3.remove(key({ assistantId }));\n\n// src/lib/threadIdStorage/cookieOptions/index.ts\nvar cookieOptions = {\n get,\n set,\n remove\n};\n\n// src/lib/threadIdStorage/localStorageOptions/get.ts\nvar get2 = ({\n assistantId\n}) => window.localStorage.getItem(key({ assistantId }));\n\n// src/lib/threadIdStorage/localStorageOptions/set.ts\nvar set2 = ({\n assistantId,\n threadId\n}) => window.localStorage.setItem(key({ assistantId }), threadId);\n\n// src/lib/threadIdStorage/localStorageOptions/remove.ts\nvar remove2 = ({\n assistantId\n}) => window.localStorage.removeItem(key({ assistantId }));\n\n// src/lib/threadIdStorage/localStorageOptions/index.ts\nvar localStorageOptions = {\n get: get2,\n set: set2,\n remove: remove2\n};\n\n// src/lib/iframes/isIframe.ts\nvar isIframe = () => {\n if (typeof window === \"undefined\") return false;\n return window.self !== window.top;\n};\n\n// src/contexts/core/SuperinterfaceContext/index.tsx\nvar SuperinterfaceContext = createContext({\n baseUrl,\n variables: {},\n defaultOptions: {\n queries: {},\n mutations: {}\n },\n threadIdStorageOptions: isIframe() ? localStorageOptions : cookieOptions,\n createMessageAbortControllerRef: { current: null }\n});\n\n// src/hooks/core/useSuperinterfaceContext/index.ts\nimport { useContext } from \"react\";\nvar useSuperinterfaceContext = () => useContext(SuperinterfaceContext);\n\n// src/components/core/SuperinterfaceProvider/index.tsx\nimport { jsx } from \"react/jsx-runtime\";\nvar SuperinterfaceProvider = ({\n children,\n baseUrl: baseUrl2,\n variables,\n defaultOptions,\n threadIdStorageOptions\n}) => {\n const superinterfaceContext = useSuperinterfaceContext();\n const createMessageAbortControllerRef = useRef(null);\n const value = merge(\n superinterfaceContext,\n {\n ...baseUrl2 ? { baseUrl: baseUrl2 } : {},\n ...variables ? { variables } : {},\n ...defaultOptions ? { defaultOptions } : {},\n ...threadIdStorageOptions ? { threadIdStorageOptions } : {},\n createMessageAbortControllerRef\n }\n );\n return /* @__PURE__ */ jsx(\n SuperinterfaceContext.Provider,\n {\n value,\n children\n }\n );\n};\n\n// src/components/threads/Thread/Messages/index.tsx\nimport {\n Flex as Flex18\n} from \"@radix-ui/themes\";\n\n// src/components/threads/Thread/Message/index.tsx\nimport { useMemo as useMemo9 } from \"react\";\nimport { isEmpty as isEmpty2 } from \"radash\";\nimport {\n Box as Box9\n} from \"@radix-ui/themes\";\n\n// src/components/skeletons/StartingContentSkeleton/index.tsx\nimport {\n Skeleton\n} from \"@radix-ui/themes\";\nimport { jsx as jsx2 } from \"react/jsx-runtime\";\nvar StartingContentSkeleton = () => /* @__PURE__ */ jsx2(\n Skeleton,\n {\n loading: true,\n mt: \"1\",\n height: \"var(--space-4)\",\n width: \"var(--space-4)\",\n style: {\n borderRadius: \"var(--radius-6)\",\n flexShrink: 0\n }\n }\n);\n\n// src/components/runSteps/RunSteps/index.tsx\nimport { Flex as Flex5 } from \"@radix-ui/themes\";\nimport { useContext as useContext3 } from \"react\";\n\n// src/contexts/components/ComponentsContext/index.tsx\nimport { createContext as createContext3 } from \"react\";\n\n// src/components/runSteps/RunStep/ToolCalls/index.tsx\nimport {\n Flex as Flex4\n} from \"@radix-ui/themes\";\n\n// src/components/runSteps/RunStep/ToolCalls/ToolCall/Fn/index.tsx\nimport { useContext as useContext2 } from \"react\";\n\n// src/contexts/functions/FunctionComponentsContext/index.tsx\nimport { createContext as createContext2 } from \"react\";\nvar FunctionComponentsContext = createContext2({});\n\n// src/components/functions/FunctionBase/index.tsx\nimport {\n Popover,\n Flex as Flex2\n} from \"@radix-ui/themes\";\n\n// src/components/toolCalls/ToolCallBase/index.tsx\nimport {\n Flex,\n Button\n} from \"@radix-ui/themes\";\nimport { jsx as jsx3 } from \"react/jsx-runtime\";\nvar ToolCallBase = ({\n children\n}) => /* @__PURE__ */ jsx3(\n Flex,\n {\n py: \"1\",\n ml: \"-2\",\n children: /* @__PURE__ */ jsx3(\n Button,\n {\n size: \"1\",\n color: \"gold\",\n variant: \"outline\",\n style: {\n boxShadow: \"none\"\n },\n children\n }\n )\n }\n);\n\n// src/components/toolCalls/ToolCallBase/ToolCallTitle.tsx\nimport {\n Text\n} from \"@radix-ui/themes\";\nimport { jsx as jsx4 } from \"react/jsx-runtime\";\nvar ToolCallTitle = ({\n children\n}) => /* @__PURE__ */ jsx4(\n Text,\n {\n weight: \"regular\",\n children\n }\n);\n\n// src/components/toolCalls/ToolCallBase/ToolCallIcon.tsx\nimport {\n CircleIcon,\n CircleBackslashIcon,\n CheckCircledIcon\n} from \"@radix-ui/react-icons\";\nimport { jsx as jsx5 } from \"react/jsx-runtime\";\nvar ToolCallIcon = ({\n runStep\n}) => {\n if (runStep.completed_at) {\n return /* @__PURE__ */ jsx5(CheckCircledIcon, {});\n } else if (runStep.cancelled_at || runStep.failed_at || runStep.status === \"expired\") {\n return /* @__PURE__ */ jsx5(CircleBackslashIcon, {});\n } else {\n return /* @__PURE__ */ jsx5(CircleIcon, {});\n }\n};\n\n// src/components/functions/FunctionBase/Content/index.tsx\nimport { useMemo } from \"react\";\nimport { Code, Box } from \"@radix-ui/themes\";\n\n// src/components/functions/FunctionBase/Content/lib/formattedJsonOrRaw.ts\nvar formattedJsonOrRaw = ({\n value\n}) => {\n if (!value) {\n return null;\n }\n try {\n return JSON.stringify(JSON.parse(value), null, 2);\n } catch (error) {\n if (typeof value === \"string\") {\n return value;\n } else {\n return JSON.stringify(value, null, 2);\n }\n }\n};\n\n// src/components/functions/FunctionBase/Content/index.tsx\nimport { jsx as jsx6, jsxs } from \"react/jsx-runtime\";\nvar Content = ({\n fn\n}) => {\n const args = useMemo(() => formattedJsonOrRaw({\n value: fn.arguments\n }), [fn]);\n const output = useMemo(() => formattedJsonOrRaw({\n value: fn.output\n }), [fn]);\n return /* @__PURE__ */ jsxs(\n Code,\n {\n variant: \"ghost\",\n color: \"gold\",\n style: {\n whiteSpace: \"pre\",\n wordBreak: \"break-word\"\n },\n children: [\n args && /* @__PURE__ */ jsx6(Box, { children: args }),\n output && /* @__PURE__ */ jsx6(Box, { children: output })\n ]\n }\n );\n};\n\n// src/components/functions/FunctionBase/index.tsx\nimport { jsx as jsx7, jsxs as jsxs2 } from \"react/jsx-runtime\";\nvar FunctionBase = ({\n fn,\n runStep,\n title: title2\n}) => /* @__PURE__ */ jsxs2(Popover.Root, { children: [\n /* @__PURE__ */ jsx7(Popover.Trigger, { children: /* @__PURE__ */ jsx7(Flex2, { children: /* @__PURE__ */ jsxs2(ToolCallBase, { children: [\n /* @__PURE__ */ jsx7(ToolCallIcon, { runStep }),\n /* @__PURE__ */ jsx7(ToolCallTitle, { children: title2 })\n ] }) }) }),\n /* @__PURE__ */ jsx7(\n Popover.Content,\n {\n style: {\n maxHeight: \"200px\"\n },\n children: /* @__PURE__ */ jsx7(Content, { fn })\n }\n )\n] });\n\n// src/components/runSteps/RunStep/ToolCalls/ToolCall/Fn/DefaultFunction/lib/title.ts\nvar title = ({\n fn,\n runStep\n}) => {\n if (runStep.completed_at) {\n return `Finished ${fn.name}`;\n } else if (runStep.cancelled_at) {\n return `Cancelled ${fn.name}`;\n } else {\n return `Calling ${fn.name}`;\n }\n};\n\n// src/components/runSteps/RunStep/ToolCalls/ToolCall/Fn/DefaultFunction/index.tsx\nimport { jsx as jsx8 } from \"react/jsx-runtime\";\nvar DefaultFunction = ({\n fn,\n runStep\n}) => /* @__PURE__ */ jsx8(\n FunctionBase,\n {\n fn,\n runStep,\n title: title({ runStep, fn })\n }\n);\n\n// src/components/runSteps/RunStep/ToolCalls/ToolCall/Fn/index.tsx\nimport { jsx as jsx9 } from \"react/jsx-runtime\";\nvar Fn = ({\n fn,\n runStep\n}) => {\n const functionComponentsContext = useContext2(FunctionComponentsContext);\n const Component = functionComponentsContext[fn.name] || DefaultFunction;\n return (\n // @ts-ignore-next-line\n /* @__PURE__ */ jsx9(\n Component,\n {\n fn,\n runStep\n }\n )\n );\n};\n\n// src/components/runSteps/RunStep/ToolCalls/ToolCall/CodeInterpreter/index.tsx\nimport {\n Popover as Popover2,\n Flex as Flex3\n} from \"@radix-ui/themes\";\n\n// src/components/runSteps/RunStep/ToolCalls/ToolCall/CodeInterpreter/Content.tsx\nimport { Code as Code2, Box as Box2 } from \"@radix-ui/themes\";\nimport { jsx as jsx10, jsxs as jsxs3 } from \"react/jsx-runtime\";\nvar Content2 = ({\n codeInterpreter\n}) => {\n if (!codeInterpreter.input) {\n return null;\n }\n return /* @__PURE__ */ jsxs3(\n Code2,\n {\n variant: \"ghost\",\n color: \"gold\",\n style: {\n whiteSpace: \"pre\",\n wordBreak: \"break-word\"\n },\n children: [\n /* @__PURE__ */ jsx10(Box2, { children: codeInterpreter.input }),\n /* @__PURE__ */ jsx10(Box2, { children: JSON.stringify(codeInterpreter.outputs) })\n ]\n }\n );\n};\n\n// src/components/runSteps/RunStep/ToolCalls/ToolCall/CodeInterpreter/index.tsx\nimport { jsx as jsx11, jsxs as jsxs4 } from \"react/jsx-runtime\";\nvar CodeInterpreter = ({\n codeInterpreter,\n runStep\n}) => /* @__PURE__ */ jsxs4(Popover2.Root, { children: [\n /* @__PURE__ */ jsx11(Popover2.Trigger, { children: /* @__PURE__ */ jsx11(Flex3, { children: /* @__PURE__ */ jsxs4(ToolCallBase, { children: [\n /* @__PURE__ */ jsx11(ToolCallIcon, { runStep }),\n /* @__PURE__ */ jsx11(ToolCallTitle, { children: \"Using code interpreter\" })\n ] }) }) }),\n /* @__PURE__ */ jsx11(\n Popover2.Content,\n {\n maxHeight: \"200px\",\n children: /* @__PURE__ */ jsx11(\n Content2,\n {\n codeInterpreter\n }\n )\n }\n )\n] });\n\n// src/components/runSteps/RunStep/ToolCalls/ToolCall/FileSearch.tsx\nimport { jsx as jsx12, jsxs as jsxs5 } from \"react/jsx-runtime\";\nvar FileSearch = ({\n runStep,\n toolCall\n}) => /* @__PURE__ */ jsxs5(ToolCallBase, { children: [\n /* @__PURE__ */ jsx12(ToolCallIcon, { runStep }),\n /* @__PURE__ */ jsx12(ToolCallTitle, { children: \"Searching files\" })\n] });\n\n// src/components/runSteps/RunStep/ToolCalls/ToolCall/Fallback.tsx\nimport { jsx as jsx13, jsxs as jsxs6 } from \"react/jsx-runtime\";\nvar Fallback = ({\n runStep,\n toolCall\n}) => /* @__PURE__ */ jsxs6(ToolCallBase, { children: [\n /* @__PURE__ */ jsx13(ToolCallIcon, { runStep }),\n /* @__PURE__ */ jsxs6(ToolCallTitle, { children: [\n \"Using tool: \",\n toolCall.type\n ] })\n] });\n\n// src/components/runSteps/RunStep/ToolCalls/ToolCall/index.tsx\nimport { jsx as jsx14 } from \"react/jsx-runtime\";\nvar ToolCall = ({\n toolCall,\n runStep\n}) => {\n if (toolCall.type === \"function\") {\n return /* @__PURE__ */ jsx14(\n Fn,\n {\n fn: toolCall.function,\n runStep\n }\n );\n }\n if (toolCall.type === \"code_interpreter\") {\n return /* @__PURE__ */ jsx14(\n CodeInterpreter,\n {\n codeInterpreter: toolCall.code_interpreter,\n runStep\n }\n );\n }\n if (toolCall.type === \"file_search\") {\n return /* @__PURE__ */ jsx14(\n FileSearch,\n {\n toolCall,\n runStep\n }\n );\n }\n return /* @__PURE__ */ jsx14(\n Fallback,\n {\n toolCall,\n runStep\n }\n );\n};\n\n// src/components/runSteps/RunStep/ToolCalls/Starting/index.tsx\nimport {\n Popover as Popover3,\n Text as Text2\n} from \"@radix-ui/themes\";\nimport {\n CircleIcon as CircleIcon2\n} from \"@radix-ui/react-icons\";\nimport { jsx as jsx15, jsxs as jsxs7 } from \"react/jsx-runtime\";\nvar Starting = () => /* @__PURE__ */ jsxs7(Popover3.Root, { children: [\n /* @__PURE__ */ jsxs7(ToolCallBase, { children: [\n /* @__PURE__ */ jsx15(CircleIcon2, {}),\n /* @__PURE__ */ jsx15(ToolCallTitle, { children: \"Starting actions\" })\n ] }),\n /* @__PURE__ */ jsx15(\n Popover3.Content,\n {\n style: {\n maxHeight: \"500px\"\n },\n children: /* @__PURE__ */ jsx15(Text2, { children: \"Getting ready to connect to domain API\" })\n }\n )\n] });\n\n// src/components/runSteps/RunStep/ToolCalls/index.tsx\nimport { jsx as jsx16, jsxs as jsxs8 } from \"react/jsx-runtime\";\nvar Root = ({\n children,\n className,\n style\n}) => /* @__PURE__ */ jsx16(\n Flex4,\n {\n direction: \"column\",\n className,\n style,\n children\n }\n);\nvar ToolCalls = ({\n stepDetails,\n runStep,\n className,\n style\n}) => /* @__PURE__ */ jsxs8(\n Root,\n {\n className,\n style,\n children: [\n !stepDetails.tool_calls.length && /* @__PURE__ */ jsx16(Starting, {}),\n stepDetails.tool_calls.map((toolCall) => /* @__PURE__ */ jsx16(\n ToolCall,\n {\n toolCall,\n runStep\n },\n toolCall.id\n ))\n ]\n }\n);\nToolCalls.Root = Root;\nToolCalls.Starting = Starting;\nToolCalls.ToolCall = ToolCall;\n\n// src/components/runSteps/RunStep/index.tsx\nimport { jsx as jsx17 } from \"react/jsx-runtime\";\nvar RunStep = ({\n runStep,\n className,\n style\n}) => {\n if (runStep.step_details.type === \"tool_calls\") {\n return /* @__PURE__ */ jsx17(\n ToolCalls,\n {\n className,\n style,\n stepDetails: runStep.step_details,\n runStep\n }\n );\n }\n return null;\n};\nRunStep.ToolCalls = ToolCalls;\n\n// src/contexts/components/ComponentsContext/index.tsx\nvar ComponentsContext = createContext3({\n components: {\n RunStep\n }\n});\n\n// src/components/runSteps/RunSteps/index.tsx\nimport { jsx as jsx18 } from \"react/jsx-runtime\";\nvar RunSteps = ({\n runSteps\n}) => {\n const componentsContext = useContext3(ComponentsContext);\n const Component = componentsContext.components.RunStep;\n return /* @__PURE__ */ jsx18(\n Flex5,\n {\n direction: \"column-reverse\",\n children: runSteps.map((runStep) => /* @__PURE__ */ jsx18(\n Component,\n {\n runStep\n },\n runStep.id\n ))\n }\n );\n};\n\n// src/hooks/messages/useIsMutatingMessage/index.ts\nimport { useMemo as useMemo2 } from \"react\";\nimport { useIsMutating } from \"@tanstack/react-query\";\nvar useIsMutatingMessage = () => {\n const threadContext = useSuperinterfaceContext();\n const mutatingMessagesCount = useIsMutating({\n mutationKey: [\"createMessage\", threadContext.variables]\n });\n const isMutatingMessage = useMemo2(() => mutatingMessagesCount > 0, [mutatingMessagesCount]);\n return isMutatingMessage;\n};\n\n// src/contexts/messages/MessageContext/index.ts\nimport { createContext as createContext4 } from \"react\";\nvar MessageContext = createContext4({\n message: null\n});\n\n// src/components/threads/Thread/Message/Provider.tsx\nvar Provider = MessageContext.Provider;\n\n// src/components/threads/Thread/Message/Attachments/index.tsx\nimport {\n Flex as Flex6,\n Badge\n} from \"@radix-ui/themes\";\nimport {\n FileIcon\n} from \"@radix-ui/react-icons\";\nimport { jsx as jsx19, jsxs as jsxs9 } from \"react/jsx-runtime\";\nvar Attachments = ({\n message\n}) => {\n if (!message.attachments?.length) return null;\n return /* @__PURE__ */ jsx19(\n Flex6,\n {\n align: \"start\",\n pb: \"1\",\n children: /* @__PURE__ */ jsxs9(\n Badge,\n {\n color: \"gray\",\n variant: \"surface\",\n children: [\n /* @__PURE__ */ jsx19(FileIcon, {}),\n message.attachments.length,\n \" file\",\n message.attachments.length > 1 ? \"s\" : \"\"\n ]\n }\n )\n }\n );\n};\n\n// src/components/threads/Thread/Message/ContentPart/TextContent.tsx\nimport { useState as useState2, useEffect as useEffect2, useMemo as useMemo8 } from \"react\";\nimport { compile } from \"@mdx-js/mdx\";\nimport { MDXProvider, useMDXComponents } from \"@mdx-js/react\";\nimport * as runtime from \"react/jsx-runtime\";\nimport recmaMdxEscapeMissingComponents from \"recma-mdx-escape-missing-components\";\n\n// src/hooks/markdown/useMarkdownContext/index.ts\nimport { useContext as useContext5 } from \"react\";\n\n// src/contexts/markdown/MarkdownContext/index.ts\nimport { createContext as createContext6 } from \"react\";\n\n// src/contexts/markdown/MarkdownContext/lib/components/index.tsx\nimport { Heading, Table } from \"@radix-ui/themes\";\n\n// src/contexts/markdown/MarkdownContext/lib/components/Paragraph.tsx\nimport {\n Box as Box3,\n Text as Text3\n} from \"@radix-ui/themes\";\nimport { jsx as jsx20 } from \"react/jsx-runtime\";\nvar Paragraph = ({ children }) => /* @__PURE__ */ jsx20(\n Box3,\n {\n pb: \"3\",\n children: /* @__PURE__ */ jsx20(\n Text3,\n {\n size: \"3\",\n style: {\n whiteSpace: \"pre-line\",\n wordBreak: \"break-word\"\n },\n children\n }\n )\n }\n);\n\n// src/contexts/markdown/MarkdownContext/lib/components/Link.tsx\nimport {\n Link as RadixLink\n} from \"@radix-ui/themes\";\nimport { jsx as jsx21 } from \"react/jsx-runtime\";\nvar Link = ({\n children,\n href,\n download,\n target = \"_blank\"\n}) => /* @__PURE__ */ jsx21(\n RadixLink,\n {\n href,\n target,\n download,\n children\n }\n);\n\n// src/contexts/markdown/MarkdownContext/lib/components/UnorderedList.tsx\nimport {\n Box as Box4\n} from \"@radix-ui/themes\";\nimport { jsx as jsx22 } from \"react/jsx-runtime\";\nvar UnorderedList = ({ children }) => /* @__PURE__ */ jsx22(\n Box4,\n {\n pb: \"3\",\n asChild: true,\n children: /* @__PURE__ */ jsx22(\n \"ul\",\n {\n style: {\n listStylePosition: \"inside\"\n },\n children\n }\n )\n }\n);\n\n// src/contexts/markdown/MarkdownContext/lib/components/OrderedList.tsx\nimport {\n Box as Box5\n} from \"@radix-ui/themes\";\nimport { jsx as jsx23 } from \"react/jsx-runtime\";\nvar OrderedList = ({ children }) => /* @__PURE__ */ jsx23(\n Box5,\n {\n pb: \"3\",\n asChild: true,\n children: /* @__PURE__ */ jsx23(\n \"ol\",\n {\n style: {\n listStylePosition: \"inside\"\n },\n children\n }\n )\n }\n);\n\n// src/contexts/markdown/MarkdownContext/lib/components/ListItem.tsx\nimport {\n Box as Box6\n} from \"@radix-ui/themes\";\nimport { jsx as jsx24 } from \"react/jsx-runtime\";\nvar ListItem = ({ children }) => /* @__PURE__ */ jsx24(\n Box6,\n {\n pb: \"1\",\n children: /* @__PURE__ */ jsx24(\"li\", { children })\n }\n);\n\n// src/contexts/markdown/MarkdownContext/lib/components/Strong.tsx\nimport {\n Strong as RadixStrong\n} from \"@radix-ui/themes\";\nimport { jsx as jsx25 } from \"react/jsx-runtime\";\nvar Strong = ({ children }) => /* @__PURE__ */ jsx25(RadixStrong, { children });\n\n// src/contexts/markdown/MarkdownContext/lib/components/Pre.tsx\nimport {\n Box as Box7\n} from \"@radix-ui/themes\";\nimport { jsx as jsx26 } from \"react/jsx-runtime\";\nvar Pre = ({ children }) => /* @__PURE__ */ jsx26(\n Box7,\n {\n style: {\n whiteSpace: \"pre-wrap\",\n wordBreak: \"break-word\"\n },\n children\n }\n);\n\n// src/contexts/markdown/MarkdownContext/lib/components/Code.tsx\nimport {\n Code as RadixCode\n} from \"@radix-ui/themes\";\n\n// src/components/suggestions/Suggestions/index.tsx\nimport { useMemo as useMemo6 } from \"react\";\n\n// src/hooks/messages/useLatestMessage/index.ts\nimport { useMemo as useMemo4 } from \"react\";\n\n// src/hooks/messages/useMessages/index.tsx\nimport { useMemo as useMemo3 } from \"react\";\nimport {\n useInfiniteQuery,\n useQueryClient as useQueryClient2\n} from \"@tanstack/react-query\";\n\n// src/lib/threads/queryOptions/index.ts\nimport {\n infiniteQueryOptions\n} from \"@tanstack/react-query\";\n\n// src/lib/threads/queryOptions/variableParams.ts\nvar variableParams = ({\n variables,\n superinterfaceContext\n}) => {\n if (variables.threadId) return variables;\n if (!variables.assistantId) return variables;\n if (!superinterfaceContext.threadIdStorageOptions?.get) return variables;\n const threadId = superinterfaceContext.threadIdStorageOptions.get({ assistantId: variables.assistantId });\n if (!threadId) return variables;\n return {\n ...variables,\n threadId\n };\n};\n\n// src/lib/threads/queryOptions/index.ts\nvar queryOptions = ({\n queryKeyBase,\n path: path2,\n queryClient,\n threadContext,\n superinterfaceContext\n}) => {\n const queryKey = [...queryKeyBase, threadContext.variables];\n return infiniteQueryOptions({\n // @ts-ignore-next-line\n queryFn: async ({\n pageParam,\n queryKey: queryKey2\n }) => {\n const [_key, variables] = queryKey2;\n const params = new URLSearchParams({\n ...pageParam ? { pageParam } : {},\n ...variableParams({ variables, superinterfaceContext })\n });\n return fetch(`${superinterfaceContext.baseUrl}${path2}?${params}`).then(async (response) => {\n if (response.status !== 200) {\n try {\n const errorResponse = await response.json();\n throw new Error(errorResponse.error);\n } catch (error) {\n throw new Error(\"Failed to fetch\");\n }\n }\n return response.json();\n });\n },\n initialPageParam: void 0,\n getNextPageParam: (lastPage) => {\n if (!lastPage.hasNextPage) return null;\n return lastPage.lastId;\n },\n limit: 10,\n ...threadContext.defaultOptions.queries,\n ...queryClient.getQueryDefaults(queryKey),\n queryKey\n });\n};\n\n// src/lib/messages/messagesQueryOptions.ts\nvar messagesQueryOptions = ({\n queryClient,\n threadContext,\n superinterfaceContext\n}) => queryOptions({\n queryKeyBase: [\"messages\"],\n path: \"/messages\",\n queryClient,\n threadContext,\n superinterfaceContext\n});\n\n// src/hooks/messages/useMessages/index.tsx\nvar messages = ({\n props\n}) => {\n if (!props.data) return [];\n return props.data.pages.reduce((acc, page) => acc.concat(page.data), []);\n};\nvar useMessages = () => {\n const queryClient = useQueryClient2();\n const threadContext = useSuperinterfaceContext();\n const superinterfaceContext = useSuperinterfaceContext();\n const props = useInfiniteQuery(messagesQueryOptions({\n queryClient,\n threadContext,\n superinterfaceContext\n }));\n return useMemo3(() => ({\n ...props,\n // @ts-ignore-next-line\n messages: messages({ props })\n }), [props]);\n};\n\n// src/hooks/messages/useLatestMessage/index.ts\nvar useLatestMessage = () => {\n const props = useMessages();\n return useMemo4(() => ({\n ...props,\n latestMessage: props.messages[0] || null\n }), [props]);\n};\n\n// src/components/suggestions/Suggestions/Content.tsx\nimport { useMemo as useMemo5 } from \"react\";\nimport { isEmpty } from \"radash\";\nimport { onlyText } from \"react-children-utilities\";\nimport {\n Flex as Flex7\n} from \"@radix-ui/themes\";\n\n// src/components/suggestions/Suggestions/Item.tsx\nimport {\n ArrowUpIcon\n} from \"@radix-ui/react-icons\";\nimport {\n Text as Text4,\n Button as Button2,\n Spinner\n} from \"@radix-ui/themes\";\n\n// src/hooks/messages/useCreateMessage/index.ts\nimport { partob } from \"radash\";\nimport {\n useMutation,\n useQueryClient as useQueryClient3\n} from \"@tanstack/react-query\";\n\n// src/hooks/messages/useCreateMessage/lib/mutationOptions/onMutate/index.ts\nimport { omit } from \"radash\";\n\n// src/hooks/messages/useCreateMessage/lib/mutationOptions/onMutate/data.ts\nimport dayjs from \"dayjs\";\n\n// src/lib/optimistic/optimisticId.ts\nimport { uid } from \"radash\";\nvar optimisticId = () => `-${uid(24)}`;\n\n// src/hooks/messages/useCreateMessage/lib/mutationOptions/onMutate/data.ts\nvar data = ({\n newMessage\n}) => (prevData) => {\n const message = {\n id: optimisticId(),\n role: \"user\",\n created_at: dayjs().unix(),\n object: \"thread.message\",\n content: [\n {\n type: \"text\",\n text: {\n annotations: [],\n value: newMessage.content\n }\n }\n ],\n run_id: null,\n assistant_id: null,\n thread_id: null,\n attachments: newMessage.attachments ?? [],\n metadata: {},\n runSteps: []\n };\n if (!prevData) {\n return {\n pageParams: [],\n pages: [\n {\n data: [message],\n hasNextPage: false,\n lastId: message.id\n }\n ]\n };\n }\n const [latestPage, ...pagesRest] = prevData.pages;\n return {\n ...prevData,\n pages: [\n {\n ...latestPage,\n data: [\n message,\n ...latestPage.data\n ]\n },\n ...pagesRest\n ]\n };\n};\n\n// src/hooks/messages/useCreateMessage/lib/mutationOptions/onMutate/index.ts\nvar onMutate = ({\n queryClient\n}) => async (newMessage) => {\n const queryKey = [\"messages\", omit(newMessage, [\"content\", \"attachments\"])];\n await queryClient.cancelQueries({ queryKey });\n const prevMessages = queryClient.getQueryData(queryKey);\n queryClient.setQueryData(\n queryKey,\n data({ newMessage })\n );\n return {\n prevMessages,\n newMessage\n };\n};\n\n// src/hooks/messages/useCreateMessage/lib/mutationOptions/mutationFn/index.ts\nimport { JSONParser } from \"@streamparser/json-whatwg\";\n\n// src/hooks/messages/useCreateMessage/lib/mutationOptions/mutationFn/handleResponse/handlers/threadCreated.ts\nvar threadCreated = ({\n value,\n superinterfaceContext\n}) => {\n if (!superinterfaceContext.threadIdStorageOptions?.set) return;\n if (!value.data.metadata?.assistantId) return;\n if (!value.data.metadata?.threadId) return;\n superinterfaceContext.threadIdStorageOptions.set({\n // @ts-ignore-next-line\n assistantId: value.data.metadata.assistantId,\n // @ts-ignore-next-line\n threadId: value.data.metadata.threadId\n });\n};\n\n// src/lib/optimistic/isOptimistic.ts\nimport _3 from \"lodash\";\nvar isOptimistic = ({\n id\n}) => _3.startsWith(id, \"-\");\n\n// src/hooks/messages/useCreateMessage/lib/mutationOptions/mutationFn/handleResponse/handlers/extendMessage.ts\nimport { last } from \"radash\";\nvar extendMessage = ({\n message,\n messages: messages2\n}) => {\n const prevRunMessages = messages2.filter((m) => m.run_id === message.run_id);\n const prevOptimitisticRunMessages = prevRunMessages.filter((m) => isOptimistic({ id: m.id }));\n const runSteps = last(prevOptimitisticRunMessages)?.runSteps ?? last(prevRunMessages)?.runSteps ?? [];\n return {\n ...message,\n runSteps\n };\n};\n\n// src/hooks/messages/useCreateMessage/lib/mutationOptions/mutationFn/handleResponse/handlers/threadMessageCreated.ts\nvar appendMessage = ({\n message,\n messages: messages2\n}) => {\n const prevMessages = messages2.filter((m) => m.run_id != message.run_id || !isOptimistic({ id: m.id }));\n return [\n extendMessage({ message, messages: messages2 }),\n ...prevMessages\n ];\n};\nvar threadMessageCreated = ({\n value,\n messagesQueryKey,\n queryClient\n}) => queryClient.setQueryData(\n messagesQueryKey,\n (prevData) => {\n if (!prevData) {\n return {\n pageParams: [],\n pages: [\n {\n data: appendMessage({ message: value.data, messages: [] }),\n hasNextPage: false,\n lastId: value.data.id\n }\n ]\n };\n }\n const [latestPage, ...pagesRest] = prevData.pages;\n return {\n ...prevData,\n pages: [\n {\n ...latestPage,\n data: appendMessage({ message: value.data, messages: latestPage.data })\n },\n ...pagesRest\n ]\n };\n }\n);\n\n// src/hooks/messages/useCreateMessage/lib/mutationOptions/mutationFn/handleResponse/handlers/threadMessageDelta.ts\nimport _4 from \"lodash\";\nimport { omit as omit2 } from \"radash\";\nvar updatedContentPart = ({\n prevContentPart,\n delta\n}) => {\n if (!prevContentPart) {\n return omit2(delta, [\"index\"]);\n }\n if (delta.type === \"text\" && delta.text && prevContentPart.type == \"text\" && prevContentPart.text) {\n return {\n ...prevContentPart,\n text: {\n ...prevContentPart.text,\n value: `${prevContentPart.text.value}${delta.text.value}`,\n annotations: [\n ...prevContentPart.text.annotations ?? [],\n ...delta.text.annotations ?? []\n ]\n }\n };\n }\n return prevContentPart;\n};\nvar updatedContent = ({\n content,\n value\n}) => {\n if (!value.data.delta.content) return content;\n const result = _4.cloneDeep(content);\n value.data.delta.content.forEach((delta) => {\n result[delta.index] = updatedContentPart({\n // @ts-ignore-next-line\n prevContentPart: result[delta.index],\n delta\n });\n });\n return result;\n};\nvar threadMessageDelta = ({\n value,\n queryClient,\n messagesQueryKey\n}) => queryClient.setQueryData(\n messagesQueryKey,\n (prevData) => {\n if (!prevData) {\n return {\n pageParams: [],\n pages: [\n {\n data: [],\n hasNextPage: false,\n lastId: null\n }\n ]\n };\n }\n const [latestPage, ...pagesRest] = prevData.pages;\n const [latestMessage, ...messagesRest] = latestPage.data;\n return {\n ...prevData,\n pages: [\n {\n ...latestPage,\n data: [\n {\n ...latestMessage,\n content: updatedContent({ content: latestMessage.content, value })\n },\n ...messagesRest\n ]\n },\n ...pagesRest\n ]\n };\n }\n);\n\n// src/hooks/messages/useCreateMessage/lib/mutationOptions/mutationFn/handleResponse/handlers/threadMessageCompleted.ts\nimport { replace } from \"radash\";\nvar threadMessageCompleted = ({\n value,\n queryClient,\n messagesQueryKey\n}) => queryClient.setQueryData(\n messagesQueryKey,\n (prevData) => {\n if (!prevData) {\n return {\n pageParams: [],\n pages: [\n {\n data: [],\n hasNextPage: false,\n lastId: null\n }\n ]\n };\n }\n const [latestPage, ...pagesRest] = prevData.pages;\n return {\n ...prevData,\n pages: [\n {\n ...latestPage,\n data: replace(latestPage.data, extendMessage({ message: value.data, messages: latestPage.data }), (m) => m.id === value.data.id)\n },\n ...pagesRest\n ]\n };\n }\n);\n\n// src/hooks/messages/useCreateMessage/lib/mutationOptions/mutationFn/handleResponse/handlers/threadRunCreated.ts\nvar threadRunCreated = ({\n value,\n queryClient,\n messagesQueryKey\n}) => queryClient.setQueryData(\n messagesQueryKey,\n (prevData) => {\n if (!prevData) return prevData;\n const [latestPage, ...pagesRest] = prevData.pages;\n return {\n ...prevData,\n pages: [\n {\n ...latestPage,\n data: [\n {\n id: optimisticId(),\n assistant_id: value.data.assistant_id,\n content: [],\n created_at: value.data.created_at,\n attachments: [],\n metadata: {},\n status: \"in_progress\",\n role: \"assistant\",\n runSteps: [],\n run_id: value.data.id,\n thread_id: value.data.thread_id\n },\n ...latestPage.data\n ]\n },\n ...pagesRest\n ]\n };\n }\n);\n\n// src/hooks/messages/useCreateMessage/lib/mutationOptions/mutationFn/handleResponse/handlers/threadRunFailed.ts\nvar threadRunFailed = ({\n value,\n queryClient,\n messagesQueryKey\n}) => {\n throw new Error(\"Failed to send your message, try again. If you are the owner, check the logs.\");\n};\n\n// src/hooks/messages/useCreateMessage/lib/mutationOptions/mutationFn/handleResponse/handlers/threadRunStepCreated.ts\nvar threadRunStepCreated = ({\n value,\n queryClient,\n messagesQueryKey\n}) => queryClient.setQueryData(\n messagesQueryKey,\n (prevData) => {\n if (!prevData) return prevData;\n const [latestPage, ...pagesRest] = prevData.pages;\n return {\n ...prevData,\n pages: [\n {\n ...latestPage,\n data: latestPage.data.map((m) => {\n if (m.run_id === value.data.run_id) {\n return {\n ...m,\n runSteps: [\n value.data,\n ...m.runSteps\n ]\n };\n }\n return m;\n })\n },\n ...pagesRest\n ]\n };\n }\n);\n\n// src/hooks/messages/useCreateMessage/lib/mutationOptions/mutationFn/handleResponse/handlers/threadRunStepDelta.ts\nimport _5 from \"lodash\";\nimport { omit as omit3 } from \"radash\";\nvar updatedToolCall = ({\n toolCall,\n delta\n}) => {\n if (!toolCall) {\n return omit3(delta, [\"index\"]);\n }\n if (delta.type === \"function\" && delta.function && toolCall.type === \"function\" && toolCall.function) {\n const result = _5.cloneDeep(toolCall);\n for (const [key2, value] of Object.entries(delta.function)) {\n result.function[key2] = `${result.function[key2] ?? \"\"}${value}`;\n }\n return result;\n }\n return toolCall;\n};\nvar updatedRunStep = ({\n runStep,\n value\n}) => {\n if (!runStep?.step_details?.tool_calls) return runStep;\n if (value.data.delta?.step_details?.type === \"tool_calls\") {\n if (!value.data.delta.step_details.tool_calls) return runStep;\n const newToolCalls = _5.cloneDeep(runStep.step_details.tool_calls);\n value.data.delta.step_details.tool_calls.forEach((delta) => newToolCalls[delta.index] = updatedToolCall({\n toolCall: newToolCalls[delta.index],\n delta\n }));\n return {\n ...runStep,\n step_details: {\n ...runStep.step_details,\n ...value.data.delta.step_details,\n tool_calls: newToolCalls\n }\n };\n } else {\n return runStep;\n }\n};\nvar threadRunStepDelta = ({\n value,\n queryClient,\n messagesQueryKey\n}) => queryClient.setQueryData(\n messagesQueryKey,\n (prevData) => {\n if (!prevData) return prevData;\n const [latestPage, ...pagesRest] = prevData.pages;\n return {\n ...prevData,\n pages: [\n {\n ...latestPage,\n data: latestPage.data.map((m) => {\n if (m.run_id === value.data.run_id) {\n return {\n ...m,\n runSteps: m.runSteps.map((rs) => {\n if (rs.id === value.data.id) {\n return updatedRunStep({ runStep: rs, value });\n }\n return rs;\n })\n };\n }\n return m;\n })\n },\n ...pagesRest\n ]\n };\n }\n);\n\n// src/hooks/messages/useCreateMessage/lib/mutationOptions/mutationFn/handleResponse/handlers/threadRunStepCompleted.ts\nimport { replace as replace2 } from \"radash\";\nvar threadRunStepCompleted = ({\n value,\n queryClient,\n messagesQueryKey\n}) => queryClient.setQueryData(\n messagesQueryKey,\n (prevData) => {\n if (!prevData) return prevData;\n const [latestPage, ...pagesRest] = prevData.pages;\n return {\n ...prevData,\n pages: [\n {\n ...latestPage,\n data: latestPage.data.map((m) => {\n if (m.run_id === value.data.run_id) {\n return {\n ...m,\n runSteps: replace2(m.runSteps, value.data, (rs) => rs.id === value.data.id)\n };\n }\n return m;\n })\n },\n ...pagesRest\n ]\n };\n }\n);\n\n// src/hooks/messages/useCreateMessage/lib/mutationOptions/mutationFn/handleResponse/handlers/threadRunRequiresAction.ts\nimport { map } from \"radash\";\nvar threadRunRequiresAction = async ({\n value,\n queryClient,\n messagesQueryKey,\n superinterfaceContext\n}) => {\n if (value.data.required_action.type === \"submit_client_tool_outputs\") {\n const toolCalls = value.data.required_action.submit_client_tool_outputs.tool_calls;\n const toolOutputs = await map(toolCalls, async (toolCall) => {\n if (toolCall.type !== \"function\") {\n return {\n toolCallId: toolCall.id,\n output: `Error: client tool type ${toolCall.type} is not supported.`\n };\n }\n const fn = window[toolCall.function.name];\n if (!fn) {\n return {\n toolCallId: toolCall.id,\n output: `Error: client function ${toolCall.function.name} is not defined.`\n };\n }\n const args = toolCall.function.arguments;\n const parsedArgs = JSON.parse(args);\n let output;\n try {\n output = await fn(parsedArgs);\n } catch (error) {\n output = `Error: ${error.message}`;\n }\n return {\n toolCallId: toolCall.id,\n output\n };\n });\n return fetch(`${superinterfaceContext.baseUrl}/threads/runs/submit-client-tool-outputs`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({\n toolOutputs,\n ...superinterfaceContext.variables\n })\n });\n }\n};\n\n// src/hooks/messages/useCreateMessage/lib/mutationOptions/mutationFn/handleResponse/handlers/index.ts\nvar handlers = {\n \"thread.created\": threadCreated,\n \"thread.message.created\": threadMessageCreated,\n \"thread.message.delta\": threadMessageDelta,\n \"thread.message.completed\": threadMessageCompleted,\n \"thread.run.created\": threadRunCreated,\n \"thread.run.failed\": threadRunFailed,\n \"thread.run.step.created\": threadRunStepCreated,\n \"thread.run.step.delta\": threadRunStepDelta,\n \"thread.run.step.completed\": threadRunStepCompleted,\n \"thread.run.requires_action\": threadRunRequiresAction\n};\n\n// src/hooks/messages/useCreateMessage/lib/mutationOptions/mutationFn/handleResponse/index.ts\nvar handleResponse = ({\n value,\n messagesQueryKey,\n queryClient,\n superinterfaceContext\n}) => {\n const handler = handlers[value.value.event];\n if (!handler) {\n return console.log(\"Missing handler\", { value });\n }\n return handler({\n value: value.value,\n queryClient,\n messagesQueryKey,\n superinterfaceContext\n });\n};\n\n// src/hooks/messages/useCreateMessage/lib/mutationOptions/mutationFn/body.ts\nvar body = ({\n variables,\n superinterfaceContext\n}) => {\n if (variables.threadId) return variables;\n if (!variables.assistantId) return variables;\n if (!superinterfaceContext.threadIdStorageOptions?.get) return variables;\n const threadId = superinterfaceContext.threadIdStorageOptions.get({ assistantId: variables.assistantId });\n if (!threadId) return variables;\n return {\n ...variables,\n threadId\n };\n};\n\n// src/hooks/messages/useCreateMessage/lib/mutationOptions/mutationFn/index.ts\nvar mutationFn = ({\n superinterfaceContext,\n queryClient,\n threadContext\n}) => async (variables) => {\n const abortController = new AbortController();\n superinterfaceContext.createMessageAbortControllerRef.current = abortController;\n const response = await fetch(`${superinterfaceContext.baseUrl}/messages`, {\n method: \"POST\",\n body: JSON.stringify(body({\n variables,\n superinterfaceContext\n })),\n signal: abortController.signal\n });\n if (response.status !== 200) {\n try {\n const errorResponse = await response.json();\n throw new Error(errorResponse.error);\n } catch (error) {\n throw new Error(\"Failed to send your message, try again. If you are the owner, check the logs.\");\n }\n }\n if (response.body == null) {\n throw new Error(\"The response body is empty.\");\n }\n const parser = new JSONParser({ stringBufferSize: void 0, paths: [\"$\"], separator: \"\" });\n const reader = response.body.pipeThrough(parser).getReader();\n const messagesQueryKey = [\"messages\", threadContext.variables];\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n handleResponse({\n value,\n messagesQueryKey,\n queryClient,\n superinterfaceContext\n });\n }\n};\n\n// src/hooks/messages/useCreateMessage/lib/mutationOptions/index.ts\nvar mutationOptions = ({\n queryClient,\n threadContext,\n superinterfaceContext,\n onError\n}) => {\n const mutationKey = [\"createMessage\", threadContext.variables];\n return {\n mutationFn: mutationFn({\n queryClient,\n superinterfaceContext,\n threadContext\n }),\n onMutate: onMutate({ queryClient }),\n onError,\n ...threadContext.defaultOptions.mutations,\n ...queryClient.getMutationDefaults(mutationKey),\n mutationKey\n };\n};\n\n// src/hooks/messages/useCreateMessage/index.ts\nvar useCreateMessage = ({\n onError = () => {\n }\n} = {\n onError: () => {\n }\n}) => {\n const queryClient = useQueryClient3();\n const superinterfaceContext = useSuperinterfaceContext();\n const threadContext = useSuperinterfaceContext();\n const props = useMutation(mutationOptions({\n queryClient,\n threadContext,\n superinterfaceContext,\n onError\n }));\n return {\n ...props,\n createMessage: partob(props.mutateAsync, threadContext.variables)\n };\n};\n\n// src/components/suggestions/Suggestions/Item.tsx\nimport {\n useQueryClient as useQueryClient4\n} from \"@tanstack/react-query\";\n\n// src/hooks/toasts/useToasts/index.ts\nimport { useContext as useContext4 } from \"react\";\n\n// src/contexts/toasts/ToastsContext/index.ts\nimport { createContext as createContext5 } from \"react\";\nvar ToastsContext = createContext5({\n toasts: [],\n addToast: () => {\n }\n});\n\n// src/hooks/toasts/useToasts/index.ts\nvar useToasts = () => useContext4(ToastsContext);\n\n// src/lib/errors/createMessageDefaultOnError.ts\nvar createMessageDefaultOnError = ({\n queryClient,\n addToast,\n threadContext\n}) => (error) => {\n if (error.name === \"AbortError\") {\n queryClient.invalidateQueries({ queryKey: [\"messages\", threadContext.variables] });\n queryClient.invalidateQueries({ queryKey: [\"runs\", threadContext.variables] });\n return;\n }\n addToast({ type: \"error\", message: error.message });\n};\n\n// src/components/suggestions/Suggestions/Item.tsx\nimport { jsx as jsx27, jsxs as jsxs10 } from \"react/jsx-runtime\";\nvar Item = ({\n suggestion,\n isDisabled,\n className,\n style\n}) => {\n const { addToast } = useToasts();\n const queryClient = useQueryClient4();\n const threadContext = useSuperinterfaceContext();\n const { createMessage, isPending } = useCreateMessage({\n onError: createMessageDefaultOnError({\n queryClient,\n addToast,\n threadContext\n })\n });\n return /* @__PURE__ */ jsx27(\n Content3,\n {\n onClick: () => {\n createMessage({\n // @ts-ignore-next-line\n content: suggestion\n });\n },\n isDisabled,\n isPending,\n className,\n style,\n children: suggestion\n }\n );\n};\nvar Content3 = ({\n onClick,\n isDisabled,\n isPending,\n children,\n className,\n style\n}) => /* @__PURE__ */ jsxs10(\n Button2,\n {\n className,\n variant: \"soft\",\n onClick,\n disabled: isDisabled,\n style: {\n minHeight: \"var(--base-button-height)\",\n height: \"inherit\",\n flexShrink: 1,\n ...style ?? {}\n },\n children: [\n /* @__PURE__ */ jsx27(\n Text4,\n {\n size: \"1\",\n weight: \"regular\",\n children\n }\n ),\n /* @__PURE__ */ jsx27(Spinner, { loading: isPending, children: /* @__PURE__ */ jsx27(\n ArrowUpIcon,\n {\n style: {\n flexShrink: 0\n }\n }\n ) })\n ]\n }\n);\nItem.Content = Content3;\n\n// src/components/suggestions/Suggestions/Content.tsx\nimport { jsx as jsx28 } from \"react/jsx-runtime\";\nvar Content4 = ({\n children,\n className,\n style\n}) => {\n const isMutatingMessage = useIsMutatingMessage();\n const suggestions = useMemo5(() => onlyText(children).split(/\\r?\\n/).filter((c) => !isEmpty(c)).map((c) => c.trim()), [children]);\n if (isEmpty(suggestions)) return null;\n return /* @__PURE__ */ jsx28(\n Flex7,\n {\n gap: \"2\",\n py: \"2\",\n wrap: \"wrap\",\n className,\n style,\n children: suggestions.map((suggestion) => /* @__PURE__ */ jsx28(\n Item,\n {\n suggestion,\n isDisabled: isMutatingMessage\n },\n suggestion\n ))\n }\n );\n};\n\n// src/components/suggestions/Suggestions/index.tsx\nimport { jsx as jsx29 } from \"react/jsx-runtime\";\nvar Suggestions = ({\n children,\n className,\n style\n}) => {\n const latestMessageProps = useLatestMessage();\n const isDisabled = useMemo6(() => (\n // @ts-ignore-next-line\n latestMessageProps.latestMessage?.metadata?.isBlocking\n ), [latestMessageProps]);\n if (latestMessageProps.isLoading) return null;\n if (isDisabled) return null;\n return /* @__PURE__ */ jsx29(\n Content4,\n {\n className,\n style,\n children\n }\n );\n};\nSuggestions.Item = Item;\n\n// src/contexts/markdown/MarkdownContext/lib/components/Code.tsx\nimport { jsx as jsx30 } from \"react/jsx-runtime\";\nvar Code3 = ({\n children,\n className\n}) => {\n if (className === \"language-suggestions\") {\n return /* @__PURE__ */ jsx30(Suggestions, { children });\n }\n return /* @__PURE__ */ jsx30(RadixCode, { children });\n};\n\n// src/components/images/Image.tsx\nimport {\n Box as Box8\n} from \"@radix-ui/themes\";\nimport { jsx as jsx31 } from \"react/jsx-runtime\";\nvar Image = (props) => /* @__PURE__ */ jsx31(\n Box8,\n {\n pb: \"3\",\n children: /* @__PURE__ */ jsx31(\n \"img\",\n {\n ...props,\n style: {\n maxWidth: \"100%\",\n height: \"auto\"\n }\n }\n )\n }\n);\n\n// src/contexts/markdown/MarkdownContext/lib/components/Img/lib/isVideoSrc.ts\nvar videoExtensions = [\n \"3g2\",\n \"3gp\",\n \"aaf\",\n \"asf\",\n \"avchd\",\n \"avi\",\n \"drc\",\n \"flv\",\n \"m2v\",\n \"m3u8\",\n \"m4p\",\n \"m4v\",\n \"mkv\",\n \"mng\",\n \"mov\",\n \"mp2\",\n \"mp4\",\n \"mpe\",\n \"mpeg\",\n \"mpg\",\n \"mpv\",\n \"mxf\",\n \"nsv\",\n \"ogg\",\n \"ogv\",\n \"qt\",\n \"rm\",\n \"rmvb\",\n \"roq\",\n \"svi\",\n \"vob\",\n \"webm\",\n \"wmv\",\n \"yuv\"\n];\nvar isVideoSrc = ({\n src\n}) => videoExtensions.includes(src.split(\".\").pop() || \"\");\n\n// src/contexts/markdown/MarkdownContext/lib/components/Img/lib/isAudioSrc.ts\nvar isAudioSrc = ({\n src\n}) => src.endsWith(\".mp3\") || src.endsWith(\".wav\");\n\n// src/contexts/markdown/MarkdownContext/lib/components/Img/Video/index.tsx\nimport {\n Flex as Flex8\n} from \"@radix-ui/themes\";\nimport \"@vidstack/react/player/styles/base.css\";\nimport {\n MediaPlayer,\n MediaProvider,\n Controls\n} from \"@vidstack/react\";\n\n// src/components/media/PlayButton.tsx\nimport {\n PlayButton as VidstackPlayButton,\n useMediaState\n} from \"@vidstack/react\";\nimport {\n IconButton\n} from \"@radix-ui/themes\";\nimport {\n PlayIcon,\n PauseIcon\n} from \"@radix-ui/react-icons\";\nimport { jsx as jsx32 } from \"react/jsx-runtime\";\nvar PlayButton = () => {\n const isPaused = useMediaState(\"paused\");\n return /* @__PURE__ */ jsx32(\n IconButton,\n {\n variant: \"ghost\",\n asChild: true,\n children: /* @__PURE__ */ jsx32(VidstackPlayButton, { children: isPaused ? /* @__PURE__ */ jsx32(PlayIcon, {}) : /* @__PURE__ */ jsx32(PauseIcon, {}) })\n }\n );\n};\n\n// src/components/media/VolumeButton.tsx\nimport {\n MuteButton,\n useMediaState as useMediaState2,\n useMediaRemote\n} from \"@vidstack/react\";\nimport {\n IconButton as IconButton2,\n HoverCard,\n Slider\n} from \"@radix-ui/themes\";\nimport {\n SpeakerModerateIcon,\n SpeakerOffIcon\n} from \"@radix-ui/react-icons\";\nimport { jsx as jsx33, jsxs as jsxs11 } from \"react/jsx-runtime\";\nvar VolumeButton = () => {\n const volume = useMediaState2(\"volume\");\n const isMuted = useMediaState2(\"muted\");\n const remote = useMediaRemote();\n return /* @__PURE__ */ jsxs11(HoverCard.Root, { children: [\n /* @__PURE__ */ jsx33(HoverCard.Trigger, { children: /* @__PURE__ */ jsx33(\n IconButton2,\n {\n variant: \"ghost\",\n asChild: true,\n children: /* @__PURE__ */ jsx33(MuteButton, { children: isMuted || volume === 0 ? /* @__PURE__ */ jsx33(SpeakerOffIcon, {}) : /* @__PURE__ */ jsx33(SpeakerModerateIcon, {}) })\n }\n ) }),\n /* @__PURE__ */ jsx33(\n HoverCard.Content,\n {\n size: \"1\",\n side: \"top\",\n height: \"100px\",\n children: /* @__PURE__ */ jsx33(\n Slider,\n {\n size: \"1\",\n variant: \"soft\",\n orientation: \"vertical\",\n value: [volume * 100],\n onValueChange: ([value]) => remote.changeVolume(value / 100)\n }\n )\n }\n )\n ] });\n};\n\n// src/components/media/Time.tsx\nimport {\n useState,\n useEffect,\n useMemo as useMemo7\n} from \"react\";\nimport {\n useMediaState as useMediaState3,\n useMediaRemote as useMediaRemote2\n} from \"@vidstack/react\";\nimport {\n Slider as Slider2\n} from \"@radix-ui/themes\";\nimport { jsx as jsx34 } from \"react/jsx-runtime\";\nvar Time = () => {\n const time = useMediaState3(\"currentTime\");\n const duration = useMediaState3(\"duration\");\n const seeking = useMediaState3(\"seeking\");\n const canSeek = useMediaState3(\"canSeek\");\n const remote = useMediaRemote2();\n const [value, setValue] = useState(0);\n useEffect(() => {\n if (seeking) return;\n setValue(time / duration * 100);\n }, [time, duration, seeking]);\n const step = useMemo7(() => 1 / duration * 100, [duration]);\n return /* @__PURE__ */ jsx34(\n Slider2,\n {\n size: \"1\",\n variant: \"soft\",\n value: [value],\n disabled: !canSeek,\n step: Number.isFinite(step) ? step : 1,\n onValueChange: ([value2]) => {\n setValue(value2);\n remote.seeking(value2 / 100 * duration);\n },\n onValueCommit: ([value2]) => {\n remote.seek(value2 / 100 * duration);\n }\n }\n );\n};\n\n// src/components/media/MediaContainer.tsx\nimport {\n Card,\n Inset\n} from \"@radix-ui/themes\";\nimport { jsx as jsx35 } from \"react/jsx-runtime\";\nvar MediaContainer = ({\n children\n}) => /* @__PURE__ */ jsx35(\n Card,\n {\n mb: \"3\",\n children: /* @__PURE__ */ jsx35(\n Inset,\n {\n clip: \"padding-box\",\n style: {\n display: \"flex\",\n flexDirection: \"column\"\n },\n children\n }\n )\n }\n);\n\n// src/contexts/markdown/MarkdownContext/lib/components/Img/Video/FullscreenButton.tsx\nimport {\n FullscreenButton as VidstackFullscreenButton,\n useMediaState as useMediaState4\n} from \"@vidstack/react\";\nimport {\n IconButton as IconButton3\n} from \"@radix-ui/themes\";\nimport {\n EnterFullScreenIcon,\n ExitFullScreenIcon\n} from \"@radix-ui/react-icons\";\nimport { jsx as jsx36 } from \"react/jsx-runtime\";\nvar FullscreenButton = () => {\n const isFullscreen = useMediaState4(\"fullscreen\");\n return /* @__PURE__ */ jsx36(\n IconButton3,\n {\n variant: \"ghost\",\n asChild: true,\n children: /* @__PURE__ */ jsx36(VidstackFullscreenButton, { children: isFullscreen ? /* @__PURE__ */ jsx36(ExitFullScreenIcon, {}) : /* @__PURE__ */ jsx36(EnterFullScreenIcon, {}) })\n }\n );\n};\n\n// src/contexts/markdown/MarkdownContext/lib/components/Img/Video/index.tsx\nimport { jsx as jsx37, jsxs as jsxs12 } from \"react/jsx-runtime\";\nvar Video = ({\n src\n}) => /* @__PURE__ */ jsx37(MediaContainer, { children: /* @__PURE__ */ jsxs12(\n MediaPlayer,\n {\n src: {\n src,\n type: `video/${src.split(\".\").pop()}`\n },\n playsInline: true,\n hideControlsOnMouseLeave: true,\n crossOrigin: true,\n children: [\n /* @__PURE__ */ jsx37(MediaProvider, {}),\n /* @__PURE__ */ jsx37(\"style\", { children: `\n .superinterface-video-controls {\n opacity: 0;\n transition: opacity 0.2s ease-out;\n }\n\n .superinterface-video-controls[data-visible] {\n opacity: 1;\n }\n ` }),\n /* @__PURE__ */ jsx37(\n Flex8,\n {\n asChild: true,\n position: \"absolute\",\n bottom: \"0\",\n left: \"0\",\n right: \"0\",\n className: \"superinterface-video-controls\",\n p: \"3\",\n style: {\n zIndex: 10,\n background: \"var(--accent-4)\"\n },\n children: /* @__PURE__ */ jsx37(Controls.Root, { children: /* @__PURE__ */ jsx37(\n Flex8,\n {\n asChild: true,\n align: \"center\",\n gap: \"3\",\n flexGrow: \"1\",\n children: /* @__PURE__ */ jsxs12(Controls.Group, { children: [\n /* @__PURE__ */ jsx37(PlayButton, {}),\n /* @__PURE__ */ jsx37(Time, {}),\n /* @__PURE__ */ jsx37(VolumeButton, {}),\n /* @__PURE__ */ jsx37(FullscreenButton, {})\n ] })\n }\n ) })\n }\n )\n ]\n }\n) });\n\n// src/contexts/markdown/MarkdownContext/lib/components/Img/Audio/index.tsx\nimport {\n Flex as Flex9\n} from \"@radix-ui/themes\";\nimport \"@vidstack/react/player/styles/base.css\";\nimport {\n MediaPlayer as MediaPlayer2,\n MediaProvider as MediaProvider2,\n Controls as Controls2\n} from \"@vidstack/react\";\nimport { jsx as jsx38, jsxs as jsxs13 } from \"react/jsx-runtime\";\nvar Audio = ({\n src\n}) => /* @__PURE__ */ jsx38(MediaContainer, { children: /* @__PURE__ */ jsxs13(\n MediaPlayer2,\n {\n src: {\n src,\n type: `audio/${src.split(\".\").pop()}`\n },\n viewType: \"audio\",\n crossOrigin: true,\n playsInline: true,\n children: [\n /* @__PURE__ */ jsx38(MediaProvider2, {}),\n /* @__PURE__ */ jsx38(\n Flex9,\n {\n asChild: true,\n p: \"3\",\n flexGrow: \"1\",\n style: {\n zIndex: 10,\n background: \"var(--accent-4)\"\n },\n children: /* @__PURE__ */ jsx38(Controls2.Root, { children: /* @__PURE__ */ jsx38(\n Flex9,\n {\n asChild: true,\n align: \"center\",\n gap: \"3\",\n flexGrow: \"1\",\n children: /* @__PURE__ */ jsxs13(Controls2.Group, { children: [\n /* @__PURE__ */ jsx38(PlayButton, {}),\n /* @__PURE__ */ jsx38(Time, {}),\n /* @__PURE__ */ jsx38(VolumeButton, {})\n ] })\n }\n ) })\n }\n )\n ]\n }\n) });\n\n// src/contexts/markdown/MarkdownContext/lib/components/Img/index.tsx\nimport { jsx as jsx39 } from \"react/jsx-runtime\";\nvar Img = (props) => {\n if (!props.src) {\n return /* @__PURE__ */ jsx39(\n Image,\n {\n ...props\n }\n );\n } else if (isVideoSrc({ src: props.src })) {\n return /* @__PURE__ */ jsx39(\n Video,\n {\n src: props.src\n }\n );\n } else if (isAudioSrc({ src: props.src })) {\n return /* @__PURE__ */ jsx39(\n Audio,\n {\n src: props.src\n }\n );\n } else {\n return /* @__PURE__ */ jsx39(\n Image,\n {\n ...props\n }\n );\n }\n};\n\n// src/contexts/markdown/MarkdownContext/lib/components/Annotation/index.tsx\nimport {\n QuoteIcon\n} from \"@radix-ui/react-icons\";\n\n// src/contexts/markdown/MarkdownContext/lib/components/Annotation/AnnotationBase.tsx\nimport {\n IconButton as IconButton4,\n Popover as Popover4,\n Flex as Flex10,\n Text as Text5\n} from \"@radix-ui/themes\";\nimport { jsx as jsx40, jsxs as jsxs14 } from \"react/jsx-runtime\";\nvar AnnotationBase = ({\n icon,\n content\n}) => /* @__PURE__ */ jsxs14(Popover4.Root, { children: [\n /* @__PURE__ */ jsx40(Popover4.Trigger, { children: /* @__PURE__ */ jsx40(\n IconButton4,\n {\n variant: \"soft\",\n color: \"gray\",\n size: \"1\",\n children: icon\n }\n ) }),\n /* @__PURE__ */ jsx40(\n Popover4.Content,\n {\n size: \"1\",\n children: /* @__PURE__ */ jsx40(\n Flex10,\n {\n direction: \"column\",\n children: /* @__PURE__ */ jsx40(\n Text5,\n {\n size: \"1\",\n color: \"gray\",\n children: content\n }\n )\n }\n )\n }\n )\n] });\n\n// src/contexts/markdown/MarkdownContext/lib/components/Annotation/FilePathAnnotation.tsx\nimport { jsx as jsx41 } from \"react/jsx-runtime\";\nvar FilePathAnnotation = ({\n annotation,\n children\n}) => {\n const superinterfaceContext = useSuperinterfaceContext();\n const nextSearchParams = new URLSearchParams(superinterfaceContext.variables);\n return /* @__PURE__ */ jsx41(\n Link,\n {\n href: `${superinterfaceContext.baseUrl}/files/${annotation.file_path.file_id}/contents?${nextSearchParams}`,\n target: \"_self\",\n download: true,\n children\n }\n );\n};\n\n// src/contexts/markdown/MarkdownContext/lib/components/Annotation/index.tsx\nimport { jsx as jsx42 } from \"react/jsx-runtime\";\nvar Annotation = ({\n annotation,\n children\n}) => {\n if (annotation.type === \"file_citation\") {\n return /* @__PURE__ */ jsx42(\n AnnotationBase,\n {\n icon: /* @__PURE__ */ jsx42(QuoteIcon, {}),\n content: \"File cited.\"\n }\n );\n } else if (annotation.type === \"file_path\") {\n return /* @__PURE__ */ jsx42(\n FilePathAnnotation,\n {\n annotation,\n children\n }\n );\n }\n return null;\n};\n\n// src/contexts/markdown/MarkdownContext/lib/components/index.tsx\nimport { Fragment, jsx as jsx43, jsxs as jsxs15 } from \"react/jsx-runtime\";\nvar components = {\n p: Paragraph,\n a: Link,\n strong: Strong,\n ul: UnorderedList,\n ol: OrderedList,\n li: ListItem,\n pre: Pre,\n code: Code3,\n img: Img,\n annotation: Annotation,\n h1: (props) => /* @__PURE__ */ jsx43(Heading, { as: \"h1\", children: props.children }),\n h2: (props) => /* @__PURE__ */ jsx43(Heading, { as: \"h2\", size: \"5\", children: props.children }),\n h3: (props) => /* @__PURE__ */ jsx43(Heading, { as: \"h3\", size: \"4\", children: props.children }),\n h4: (props) => /* @__PURE__ */ jsx43(Heading, { as: \"h4\", size: \"3\", children: props.children }),\n h5: (props) => /* @__PURE__ */ jsx43(Heading, { as: \"h5\", size: \"3\", children: props.children }),\n h6: (props) => /* @__PURE__ */ jsx43(Heading, { as: \"h6\", size: \"3\", children: props.children }),\n table: (props) => /* @__PURE__ */ jsxs15(Fragment, { children: [\n /* @__PURE__ */ jsx43(\"style\", { children: `.rt-TableRootTable { overflow: inherit; }` }),\n /* @__PURE__ */ jsx43(\n Table.Root,\n {\n ...props,\n variant: \"surface\",\n mb: \"3\"\n }\n )\n ] }),\n thead: (props) => /* @__PURE__ */ jsx43(\n Table.Header,\n {\n ...props\n }\n ),\n tbody: (props) => /* @__PURE__ */ jsx43(\n Table.Body,\n {\n ...props\n }\n ),\n tr: (props) => /* @__PURE__ */ jsx43(\n Table.Row,\n {\n ...props\n }\n ),\n td: ({ width: width2, ...rest }) => /* @__PURE__ */ jsx43(\n Table.Cell,\n {\n ...rest,\n width: width2\n }\n ),\n th: (props) => /* @__PURE__ */ jsx43(\n Table.ColumnHeaderCell,\n {\n ...props\n }\n )\n};\n\n// src/contexts/markdown/MarkdownContext/lib/getRemarkPlugins.ts\nimport remarkGfm from \"remark-gfm\";\n\n// src/lib/remark/remarkAnnotation.ts\nimport { isNumber } from \"radash\";\nimport flatMap from \"unist-util-flatmap\";\nvar sortedAnnotations = ({\n content\n}) => content.text.annotations.sort((a, b) => a.start_index - b.start_index);\nvar remarkAnnotation = ({\n content\n}) => {\n return () => {\n return (tree) => {\n flatMap(tree, (node) => {\n if (node.type === \"text\" || node.type === \"link\") {\n return processNodeWithAnnotations({ node, content });\n } else {\n return [node];\n }\n });\n };\n };\n};\nvar processNodeWithAnnotations = ({\n node,\n content\n}) => {\n if (!content.text?.annotations?.length) {\n return [node];\n }\n if (!node.position) {\n return [node];\n }\n const annotations = sortedAnnotations({ content });\n if (node.type === \"text\") {\n return processTextNode({ node, annotations });\n } else if (node.type === \"link\") {\n const linkNode = node;\n linkNode.children = flatMap(linkNode.children, (childNode) => {\n if (childNode.type === \"text\") {\n return processTextNode({ node: childNode, annotations });\n } else {\n return [childNode];\n }\n });\n return [linkNode];\n } else {\n return [node];\n }\n};\nvar processTextNode = ({\n node,\n annotations\n}) => {\n if (!node.position || !node.value) {\n return [node];\n }\n const nodeStart = node.position.start.offset;\n const nodeEnd = node.position.end.offset;\n if (!isNumber(nodeStart) || !isNumber(nodeEnd)) {\n return [node];\n }\n const newNodes = [];\n let lastIndex = nodeStart;\n annotations.forEach((annotation) => {\n const annotationStart = annotation.start_index;\n const annotationEnd = annotation.end_index;\n if (nodeEnd <= annotationStart || nodeStart >= annotationEnd) {\n return;\n }\n const start = Math.max(nodeStart, annotationStart);\n const end = Math.min(nodeEnd, annotationEnd);\n if (lastIndex < start) {\n newNodes.push(createTextNode({ node, startOffset: lastIndex, endOffset: start }));\n }\n newNodes.push(\n createAnnotationNode({\n node,\n startOffset: start,\n endOffset: end,\n annotation\n })\n );\n lastIndex = end;\n });\n if (lastIndex < nodeEnd) {\n newNodes.push(createTextNode({ node, startOffset: lastIndex, endOffset: nodeEnd }));\n }\n return newNodes;\n};\nvar createTextNode = ({\n node,\n startOffset,\n endOffset\n}) => {\n const valueStart = startOffset - node.position.start.offset;\n const valueEnd = endOffset - node.position.start.offset;\n return {\n type: \"text\",\n value: node.value.slice(valueStart, valueEnd),\n position: {\n start: {\n ...node.position.start,\n offset: startOffset\n },\n end: {\n ...node.position.end,\n offset: endOffset\n }\n }\n };\n};\nvar createAnnotationNode = ({\n node,\n startOffset,\n endOffset,\n annotation\n}) => {\n const valueStart = startOffset - node.position.start.offset;\n const valueEnd = endOffset - node.position.start.offset;\n return {\n type: \"annotation\",\n value: node.value.slice(valueStart, valueEnd),\n position: {\n start: {\n ...node.position.start,\n offset: startOffset\n },\n end: {\n ...node.position.end,\n offset: endOffset\n }\n },\n data: {\n hName: \"annotation\",\n hProperties: {\n annotation\n }\n }\n };\n};\n\n// src/contexts/markdown/MarkdownContext/lib/getRemarkPlugins.ts\nvar getRemarkPlugins = ({\n content\n}) => [\n remarkAnnotation({ content }),\n remarkGfm\n];\n\n// src/contexts/markdown/MarkdownContext/index.ts\nvar MarkdownContext = createContext6({\n components,\n getRemarkPlugins\n});\n\n// src/hooks/markdown/useMarkdownContext/index.ts\nvar useMarkdownContext = () => useContext5(MarkdownContext);\n\n// src/components/threads/Thread/Message/ContentPart/TextContent.tsx\nimport { jsx as jsx44 } from \"react/jsx-runtime\";\nvar evaluate = async ({\n code\n}) => {\n const fn = new Function(\"runtime\", \"useMDXComponents\", code);\n return fn({ ...runtime, useMDXComponents });\n};\nvar TextContent = ({\n content\n}) => {\n const { getRemarkPlugins: getRemarkPlugins2, components: components2 } = useMarkdownContext();\n const remarkPlugins = useMemo8(() => getRemarkPlugins2({ content }), [content, getRemarkPlugins2]);\n const [MDXComponent, setMDXComponent] = useState2(null);\n useEffect2(() => {\n const compileMDX = async () => {\n try {\n const compiled = await compile(content.text.value, {\n outputFormat: \"function-body\",\n remarkPlugins,\n recmaPlugins: [recmaMdxEscapeMissingComponents],\n providerImportSource: \"@mdx-js/react\"\n });\n const code = String(compiled);\n const module = await evaluate({ code });\n const { default: MDXContent } = module;\n setMDXComponent(() => MDXContent);\n } catch (error) {\n }\n };\n compileMDX();\n }, [content, remarkPlugins]);\n if (!MDXComponent) return content.text.value;\n return /* @__PURE__ */ jsx44(\n MDXProvider,\n {\n components: components2,\n children: /* @__PURE__ */ jsx44(MDXComponent, {})\n }\n );\n};\n\n// src/components/threads/Thread/Message/ContentPart/ImageFileContent.tsx\nimport { jsx as jsx45 } from \"react/jsx-runtime\";\nvar ImageFileContent = ({\n content\n}) => {\n const superinterfaceContext = useSuperinterfaceContext();\n const nextSearchParams = new URLSearchParams(superinterfaceContext.variables);\n return /* @__PURE__ */ jsx45(\n Image,\n {\n alt: \"\",\n src: `${superinterfaceContext.baseUrl}/files/${content.image_file.file_id}/contents?${nextSearchParams}`\n }\n );\n};\n\n// src/components/threads/Thread/Message/ContentPart/index.tsx\nimport { jsx as jsx46 } from \"react/jsx-runtime\";\nvar ContentPart = ({\n content\n}) => {\n if (content.type === \"text\") {\n return /* @__PURE__ */ jsx46(\n TextContent,\n {\n content\n }\n );\n }\n if (content.type === \"image_file\") {\n return /* @__PURE__ */ jsx46(\n ImageFileContent,\n {\n content\n }\n );\n }\n return null;\n};\n\n// src/components/threads/Thread/Message/index.tsx\nimport { jsx as jsx47, jsxs as jsxs16 } from \"react/jsx-runtime\";\nvar Message = ({\n message,\n className,\n style\n}) => {\n const [olderRunSteps, laterRunSteps] = useMemo9(() => {\n if (!message.runSteps.length) return [[], []];\n const messageCreationRunStepIndex = message.runSteps.findIndex((runStep) => {\n if (runStep.step_details.type !== \"message_creation\") return;\n return runStep.step_details.message_creation.message_id === message.id;\n });\n let nextRunStepIndex = message.runSteps.slice(0, messageCreationRunStepIndex).findLastIndex((runStep) => runStep.step_details.type === \"message_creation\");\n if (nextRunStepIndex === -1) {\n nextRunStepIndex = 0;\n }\n const laterRunSteps2 = message.runSteps.slice(nextRunStepIndex, messageCreationRunStepIndex);\n const prevRunStepIndex = message.runSteps.slice(messageCreationRunStepIndex + 1).findIndex((runStep) => runStep.step_details.type === \"message_creation\");\n let olderRunSteps2;\n if (prevRunStepIndex === -1) {\n olderRunSteps2 = message.runSteps.slice(messageCreationRunStepIndex + 1);\n } else {\n olderRunSteps2 = message.runSteps.slice(messageCreationRunStepIndex + 1, messageCreationRunStepIndex + prevRunStepIndex);\n }\n return [olderRunSteps2, laterRunSteps2];\n }, [message]);\n const isMutatingMessage = useIsMutatingMessage();\n const isInProgress = useMemo9(() => {\n if (!isMutatingMessage) return false;\n if (message.status === \"in_progress\") return true;\n return message.runSteps.some((rs) => rs.status === \"in_progress\");\n }, [message]);\n return /* @__PURE__ */ jsx47(Provider, { value: { message }, children: /* @__PURE__ */ jsxs16(\n Box9,\n {\n className,\n style,\n children: [\n /* @__PURE__ */ jsx47(\n RunSteps,\n {\n runSteps: olderRunSteps\n }\n ),\n /* @__PURE__ */ jsxs16(Box9, { children: [\n /* @__PURE__ */ jsx47(\n Attachments,\n {\n message\n }\n ),\n message.content.map((content, index) => /* @__PURE__ */ jsx47(\n ContentPart,\n {\n content\n },\n index\n )),\n isInProgress && isEmpty2(laterRunSteps) && /* @__PURE__ */ jsx47(StartingContentSkeleton, {})\n ] }),\n /* @__PURE__ */ jsx47(\n RunSteps,\n {\n runSteps: laterRunSteps\n }\n ),\n isInProgress && !isEmpty2(laterRunSteps) && /* @__PURE__ */ jsx47(Box9, { children: /* @__PURE__ */ jsx47(StartingContentSkeleton, {}) })\n ]\n }\n ) });\n};\n\n// src/components/threads/Thread/Messages/Content/index.tsx\nimport { useEffect as useEffect3 } from \"react\";\n\n// src/hooks/messageGroups/useMessageGroups/index.ts\nimport { useMemo as useMemo10 } from \"react\";\n\n// src/hooks/messageGroups/useMessageGroups/lib/messageGroups/index.ts\nimport _6 from \"lodash\";\nimport { last as last2 } from \"radash\";\n\n// src/lib/messages/order.ts\nimport { sort } from \"radash\";\nvar order = ({ messages: messages2 }) => sort(messages2, (m) => m.created_at, true);\n\n// src/hooks/messageGroups/useMessageGroups/lib/messageGroups/newGroup/newGroupItem.ts\nvar newGroupItem = ({ message }) => ({\n id: message.id,\n role: message.role,\n createdAt: message.created_at,\n messages: [message]\n});\n\n// src/hooks/messageGroups/useMessageGroups/lib/messageGroups/newGroup/index.ts\nvar newGroup = ({ groups, message }) => [\n ...groups,\n newGroupItem({\n message\n })\n];\n\n// src/hooks/messageGroups/useMessageGroups/lib/messageGroups/index.ts\nvar messageGroups = ({\n messages: messages2\n}) => _6.reduce(\n order({ messages: messages2 }),\n (groups, message) => {\n const group = last2(groups);\n if (!group) return newGroup({ groups, message });\n if (group.role !== message.role) {\n return newGroup({\n groups,\n message\n });\n }\n return [\n ..._6.dropRight(groups),\n {\n ...group,\n messages: [...group.messages, message]\n }\n ];\n },\n []\n);\n\n// src/hooks/messageGroups/useMessageGroups/index.ts\nvar useMessageGroups = ({\n messages: messages2\n}) => useMemo10(\n () => ({\n messageGroups: messageGroups({ messages: messages2 })\n }),\n [messages2]\n);\n\n// src/components/skeletons/MessagesSkeleton/index.tsx\nimport { forwardRef as forwardRef2 } from \"react\";\nimport {\n Flex as Flex13,\n Avatar,\n Box as Box10,\n Skeleton as Skeleton2\n} from \"@radix-ui/themes\";\n\n// src/components/messageGroups/MessageGroupBase/index.tsx\nimport { forwardRef } from \"react\";\nimport {\n Flex as Flex11,\n Container\n} from \"@radix-ui/themes\";\nimport { jsx as jsx48 } from \"react/jsx-runtime\";\nvar MessageGroupBase = forwardRef(function MessageGroupBase2({\n children\n}, ref) {\n return /* @__PURE__ */ jsx48(\n Container,\n {\n ref,\n size: \"2\",\n flexGrow: \"0\",\n children: /* @__PURE__ */ jsx48(\n Flex11,\n {\n flexShrink: \"0\",\n gap: \"3\",\n children\n }\n )\n }\n );\n});\n\n// src/components/messageGroups/MessageGroupBase/Name.tsx\nimport {\n Flex as Flex12,\n Text as Text6\n} from \"@radix-ui/themes\";\nimport { jsx as jsx49 } from \"react/jsx-runtime\";\nvar Name = ({\n children\n}) => /* @__PURE__ */ jsx49(\n Flex12,\n {\n align: \"center\",\n height: \"var(--space-5)\",\n children: /* @__PURE__ */ jsx49(\n Text6,\n {\n size: \"2\",\n weight: \"bold\",\n children\n }\n )\n }\n);\n\n// src/components/skeletons/MessagesSkeleton/index.tsx\nimport { jsx as jsx50, jsxs as jsxs17 } from \"react/jsx-runtime\";\nvar MessagesSkeleton = forwardRef2(function MessagesSkeleton2(_props, ref) {\n return /* @__PURE__ */ jsxs17(\n MessageGroupBase,\n {\n ref,\n children: [\n /* @__PURE__ */ jsx50(Skeleton2, { loading: true, children: /* @__PURE__ */ jsx50(\n Avatar,\n {\n fallback: /* @__PURE__ */ jsx50(Flex13, {}),\n size: \"1\"\n }\n ) }),\n /* @__PURE__ */ jsxs17(\n Box10,\n {\n pb: \"3\",\n children: [\n /* @__PURE__ */ jsx50(Name, { children: /* @__PURE__ */ jsx50(\n Skeleton2,\n {\n loading: true,\n style: {\n width: \"128px\"\n }\n }\n ) }),\n /* @__PURE__ */ jsx50(\n Skeleton2,\n {\n loading: true,\n style: {\n width: \"256px\"\n }\n }\n ),\n /* @__PURE__ */ jsx50(\n Skeleton2,\n {\n loading: true,\n style: {\n width: \"256px\",\n marginTop: \"var(--space-2)\"\n }\n }\n ),\n /* @__PURE__ */ jsx50(\n Skeleton2,\n {\n loading: true,\n style: {\n width: \"256px\",\n marginTop: \"var(--space-2)\"\n }\n }\n )\n ]\n }\n )\n ]\n }\n );\n});\n\n// src/components/threads/Thread/Messages/Content/MessageGroup/index.tsx\nimport { useContext as useContext8 } from \"react\";\nimport {\n Box as Box11\n} from \"@radix-ui/themes\";\n\n// src/components/messageGroups/MessageGroupBase/AssistantAvatar.tsx\nimport { useContext as useContext6 } from \"react\";\nimport {\n Flex as Flex14\n} from \"@radix-ui/themes\";\n\n// src/contexts/assistants/AssistantAvatarContext/index.tsx\nimport { createContext as createContext7 } from \"react\";\nimport {\n Avatar as Avatar2\n} from \"@radix-ui/themes\";\nimport {\n LightningBoltIcon\n} from \"@radix-ui/react-icons\";\nimport { jsx as jsx51 } from \"react/jsx-runtime\";\nvar AssistantAvatarContext = createContext7(\n /* @__PURE__ */ jsx51(\n Avatar2,\n {\n fallback: /* @__PURE__ */ jsx51(LightningBoltIcon, {}),\n size: \"1\"\n }\n )\n);\n\n// src/components/messageGroups/MessageGroupBase/AssistantAvatar.tsx\nimport { jsx as jsx52 } from \"react/jsx-runtime\";\nvar AssistantAvatar = () => {\n const AssistantAvatarContextValue = useContext6(AssistantAvatarContext);\n return /* @__PURE__ */ jsx52(\n Flex14,\n {\n flexShrink: \"0\",\n height: \"24px\",\n width: \"24px\",\n style: {\n borderRadius: \"var(--radius-3)\",\n overflow: \"hidden\"\n },\n children: AssistantAvatarContextValue\n }\n );\n};\n\n// src/contexts/assistants/AssistantNameContext/index.tsx\nimport { createContext as createContext8 } from \"react\";\nvar AssistantNameContext = createContext8(\"Assistant\");\n\n// src/components/messageGroups/MessageGroupBase/UserAvatar.tsx\nimport { useContext as useContext7 } from \"react\";\nimport {\n Flex as Flex15\n} from \"@radix-ui/themes\";\n\n// src/contexts/users/UserAvatarContext/index.tsx\nimport { createContext as createContext9 } from \"react\";\nimport {\n Avatar as Avatar3\n} from \"@radix-ui/themes\";\nimport {\n PersonIcon\n} from \"@radix-ui/react-icons\";\nimport { jsx as jsx53 } from \"react/jsx-runtime\";\nvar UserAvatarContext = createContext9(\n /* @__PURE__ */ jsx53(\n Avatar3,\n {\n fallback: /* @__PURE__ */ jsx53(PersonIcon, {}),\n size: \"1\"\n }\n )\n);\n\n// src/components/messageGroups/MessageGroupBase/UserAvatar.tsx\nimport { jsx as jsx54 } from \"react/jsx-runtime\";\nvar UserAvatar = () => {\n const UserAvatarContextValue = useContext7(UserAvatarContext);\n return /* @__PURE__ */ jsx54(\n Flex15,\n {\n flexShrink: \"0\",\n height: \"24px\",\n width: \"24px\",\n style: {\n borderRadius: \"var(--radius-3)\",\n overflow: \"hidden\"\n },\n children: UserAvatarContextValue\n }\n );\n};\n\n// src/components/threads/Thread/Messages/Content/MessageGroup/Content/index.tsx\nimport { Flex as Flex16 } from \"@radix-ui/themes\";\nimport { jsx as jsx55 } from \"react/jsx-runtime\";\nvar Content5 = ({\n messageGroup\n}) => /* @__PURE__ */ jsx55(\n Flex16,\n {\n direction: \"column-reverse\",\n children: messageGroup.messages.map((message) => /* @__PURE__ */ jsx55(\n Message,\n {\n message\n },\n message.id\n ))\n }\n);\n\n// src/components/threads/Thread/Messages/Content/MessageGroup/index.tsx\nimport { jsx as jsx56, jsxs as jsxs18 } from \"react/jsx-runtime\";\nvar MessageGroup = ({\n messageGroup\n}) => {\n const assistantNameContext = useContext8(AssistantNameContext);\n return /* @__PURE__ */ jsxs18(MessageGroupBase, { children: [\n messageGroup.role === \"user\" ? /* @__PURE__ */ jsx56(UserAvatar, {}) : /* @__PURE__ */ jsx56(AssistantAvatar, {}),\n /* @__PURE__ */ jsxs18(Box11, { flexGrow: \"1\", children: [\n /* @__PURE__ */ jsx56(Name, { children: messageGroup.role === \"user\" ? \"You\" : assistantNameContext }),\n /* @__PURE__ */ jsx56(\n Content5,\n {\n messageGroup\n }\n )\n ] })\n ] });\n};\n\n// src/components/threads/Thread/Messages/Content/index.tsx\nimport { Fragment as Fragment2, jsx as jsx57 } from \"react/jsx-runtime\";\nvar Content6 = () => {\n const {\n messages: messages2,\n isLoading,\n isLoadingError\n } = useMessages();\n const { addToast } = useToasts();\n const { messageGroups: messageGroups2 } = useMessageGroups({\n messages: messages2\n });\n useEffect3(() => {\n if (isLoadingError) {\n addToast({ type: \"error\", message: \"Could not load messages. Please try again.\" });\n }\n }, [isLoadingError, addToast]);\n if (isLoading || isLoadingError) {\n return /* @__PURE__ */ jsx57(MessagesSkeleton, {});\n }\n return /* @__PURE__ */ jsx57(Fragment2, { children: messageGroups2.map((messageGroup) => /* @__PURE__ */ jsx57(\n MessageGroup,\n {\n messageGroup\n },\n messageGroup.id\n )) });\n};\n\n// src/components/threads/Thread/Messages/Progress/index.tsx\nimport { useMemo as useMemo11 } from \"react\";\n\n// src/components/skeletons/StartingSkeleton/index.tsx\nimport { useContext as useContext9 } from \"react\";\nimport { Box as Box12 } from \"@radix-ui/themes\";\nimport { jsx as jsx58, jsxs as jsxs19 } from \"react/jsx-runtime\";\nvar StartingSkeleton = ({\n children\n}) => {\n const assistantNameContext = useContext9(AssistantNameContext);\n return /* @__PURE__ */ jsxs19(MessageGroupBase, { children: [\n /* @__PURE__ */ jsx58(AssistantAvatar, {}),\n /* @__PURE__ */ jsxs19(Box12, { children: [\n /* @__PURE__ */ jsx58(Name, { children: assistantNameContext }),\n children,\n /* @__PURE__ */ jsx58(StartingContentSkeleton, {})\n ] })\n ] });\n};\n\n// src/components/threads/Thread/Messages/Progress/index.tsx\nimport { jsx as jsx59 } from \"react/jsx-runtime\";\nvar Progress = () => {\n const { latestMessage } = useLatestMessage();\n const isMutatingMessage = useIsMutatingMessage();\n const isVisible = useMemo11(() => {\n if (!latestMessage) return false;\n if (latestMessage.role !== \"user\") return false;\n if (latestMessage.status === \"in_progress\") return false;\n if (!isOptimistic({ id: latestMessage.id })) return false;\n if (!isMutatingMessage) return false;\n return true;\n }, [latestMessage, isMutatingMessage]);\n if (!isVisible) return null;\n return /* @__PURE__ */ jsx59(StartingSkeleton, {});\n};\n\n// src/components/threads/Thread/Messages/Root/index.tsx\nimport { Flex as Flex17 } from \"@radix-ui/themes\";\n\n// src/hooks/misc/useInfiniteScroll/index.tsx\nimport { useRef as useRef3 } from \"react\";\nimport { useInView } from \"react-intersection-observer\";\n\n// src/hooks/misc/useThrottledEffect/index.tsx\nimport _7 from \"lodash\";\nimport { useRef as useRef2, useEffect as useEffect4, useCallback } from \"react\";\nvar useThrottledEffect = (cb, delay, additionalDeps) => {\n const cbRef = useRef2(cb);\n const throttledCb = useCallback(\n _7.throttle((...args) => cbRef.current(...args), delay, {\n leading: true,\n trailing: true\n }),\n [delay]\n );\n useEffect4(() => {\n cbRef.current = cb;\n });\n useEffect4(throttledCb, [throttledCb, ...additionalDeps]);\n};\n\n// src/hooks/misc/useInfiniteScroll/index.tsx\nvar useInfiniteScroll = ({\n isFetchingNextPage,\n hasNextPage,\n fetchNextPage\n}) => {\n const containerRef = useRef3(null);\n const { ref: loaderRef, inView } = useInView({\n root: containerRef.current,\n rootMargin: \"0px\",\n threshold: 0.1\n });\n useThrottledEffect(\n () => {\n if (isFetchingNextPage) return;\n if (!inView) return;\n if (!hasNextPage) return;\n fetchNextPage();\n },\n 500,\n [inView, isFetchingNextPage, hasNextPage, fetchNextPage]\n );\n return {\n containerRef,\n loaderRef,\n inView\n };\n};\n\n// src/components/threads/Thread/Messages/Root/index.tsx\nimport { jsx as jsx60, jsxs as jsxs20 } from \"react/jsx-runtime\";\nvar Root2 = ({\n children,\n style,\n className\n}) => {\n const {\n isFetchingNextPage,\n hasNextPage,\n fetchNextPage\n } = useMessages();\n const { containerRef, loaderRef } = useInfiniteScroll({\n isFetchingNextPage,\n hasNextPage,\n fetchNextPage\n });\n return /* @__PURE__ */ jsxs20(\n Flex17,\n {\n ref: containerRef,\n direction: \"column-reverse\",\n flexGrow: \"1\",\n style: {\n overflow: \"auto\",\n ...style ?? {}\n },\n className,\n children: [\n children,\n hasNextPage && /* @__PURE__ */ jsx60(\n Flex17,\n {\n ref: loaderRef\n }\n ),\n /* @__PURE__ */ jsx60(\n Flex17,\n {\n flexShrink: \"0\",\n flexGrow: \"1\"\n }\n )\n ]\n }\n );\n};\n\n// src/components/threads/Thread/Messages/NextPageSkeleton.tsx\nimport { jsx as jsx61 } from \"react/jsx-runtime\";\nvar NextPageSkeleton = () => {\n const {\n hasNextPage\n } = useMessages();\n if (!hasNextPage) {\n return null;\n }\n return /* @__PURE__ */ jsx61(MessagesSkeleton, {});\n};\n\n// src/components/threads/Thread/Messages/index.tsx\nimport { jsx as jsx62, jsxs as jsxs21 } from \"react/jsx-runtime\";\nvar Messages = ({\n children,\n className,\n style\n}) => /* @__PURE__ */ jsxs21(\n Root2,\n {\n style,\n className,\n children: [\n /* @__PURE__ */ jsx62(\n Flex18,\n {\n flexShrink: \"0\",\n height: \"var(--space-3)\"\n }\n ),\n /* @__PURE__ */ jsx62(Progress, {}),\n children,\n /* @__PURE__ */ jsx62(Content6, {}),\n /* @__PURE__ */ jsx62(NextPageSkeleton, {}),\n /* @__PURE__ */ jsx62(\n Flex18,\n {\n flexShrink: \"0\",\n flexGrow: \"1\",\n minHeight: \"var(--space-5)\"\n }\n )\n ]\n }\n);\nMessages.Root = Root2;\nMessages.Message = Message;\nMessages.NextPageSkeleton = NextPageSkeleton;\n\n// src/components/threads/Thread/MessageForm/Submit/index.tsx\nimport {\n ArrowUpIcon as ArrowUpIcon2,\n StopIcon\n} from \"@radix-ui/react-icons\";\nimport {\n IconButton as IconButton5,\n Flex as Flex19\n} from \"@radix-ui/themes\";\n\n// src/hooks/messages/useMessageFormContext/index.ts\nimport { useContext as useContext10 } from \"react\";\n\n// src/contexts/messages/MessageFormContext/index.ts\nimport { createContext as createContext10 } from \"react\";\nvar MessageFormContext = createContext10({\n content: \"\",\n isDisabled: false,\n isLoading: false,\n files: [],\n setFiles: () => {\n },\n isFileLoading: false\n});\n\n// src/hooks/messages/useMessageFormContext/index.ts\nvar useMessageFormContext = () => useContext10(MessageFormContext);\n\n// src/components/threads/Thread/MessageForm/Submit/index.tsx\nimport { jsx as jsx63 } from \"react/jsx-runtime\";\nvar Root3 = ({\n children,\n style,\n className\n}) => /* @__PURE__ */ jsx63(\n Flex19,\n {\n flexShrink: \"0\",\n align: \"end\",\n style,\n className,\n children\n }\n);\nvar Button3 = (props) => {\n const superinterfaceContext = useSuperinterfaceContext();\n const { isDisabled, isLoading, isFileLoading } = useMessageFormContext();\n if (isLoading) {\n return /* @__PURE__ */ jsx63(\n IconButton5,\n {\n type: \"button\",\n onClick: () => superinterfaceContext.createMessageAbortControllerRef.current?.abort(),\n ...props,\n children: /* @__PURE__ */ jsx63(StopIcon, {})\n }\n );\n }\n return /* @__PURE__ */ jsx63(\n IconButton5,\n {\n type: \"submit\",\n disabled: isDisabled || isFileLoading,\n ...props,\n children: /* @__PURE__ */ jsx63(ArrowUpIcon2, {})\n }\n );\n};\nvar Submit = (props) => /* @__PURE__ */ jsx63(Root3, { ...props, children: /* @__PURE__ */ jsx63(Button3, {}) });\nSubmit.Root = Root3;\nSubmit.Button = Button3;\n\n// src/components/threads/Thread/MessageForm/Root/index.tsx\nimport {\n useQueryClient as useQueryClient5\n} from \"@tanstack/react-query\";\nimport { useMemo as useMemo12, useState as useState3 } from \"react\";\nimport { useForm, FormProvider } from \"react-hook-form\";\nimport { Box as Box13 } from \"@radix-ui/themes\";\n\n// src/components/threads/Thread/MessageForm/Root/lib/formOptions.ts\nimport { z } from \"zod\";\nimport { zodResolver } from \"@hookform/resolvers/zod\";\nvar schema = z.object({\n content: z.string().min(1)\n});\nvar formOptions = {\n resolver: zodResolver(schema)\n};\n\n// src/components/threads/Thread/MessageForm/Root/index.tsx\nimport { partob as partob2 } from \"radash\";\nimport { jsx as jsx64 } from \"react/jsx-runtime\";\nvar Root4 = ({\n children,\n onSubmit: onSubmitArg,\n isDisabled: isDisabledArg,\n style,\n className\n}) => {\n const [files, setFiles] = useState3([]);\n const formProps = useForm(formOptions);\n const {\n handleSubmit,\n formState: { isSubmitting },\n reset,\n watch\n } = formProps;\n const { addToast } = useToasts();\n const queryClient = useQueryClient5();\n const threadContext = useSuperinterfaceContext();\n const { createMessage } = useCreateMessage({\n onError: createMessageDefaultOnError({\n queryClient,\n addToast,\n threadContext\n })\n });\n const isMutatingMessage = useIsMutatingMessage();\n const isFileLoading = useMemo12(() => files.some((file) => isOptimistic({ id: file.id })), [files]);\n const isLoading = useMemo12(() => isMutatingMessage || isSubmitting, [\n isMutatingMessage,\n isSubmitting\n ]);\n const { latestMessage } = useLatestMessage();\n const isDisabled = useMemo12(() => (\n // @ts-ignore-next-line\n latestMessage?.metadata?.isBlocking || isDisabledArg\n ), [latestMessage, isDisabledArg]);\n const onSubmit = onSubmitArg ? partob2(onSubmitArg, { reset, createMessage }) : async (data2) => {\n if (isFileLoading) return;\n if (isLoading) return;\n if (isDisabled) return;\n reset();\n setFiles([]);\n const attachments = files.map((file) => ({\n file_id: file.id,\n tools: [\n {\n type: \"file_search\"\n }\n ]\n }));\n await createMessage({\n // @ts-ignore-next-line\n content: data2.content,\n ...attachments.length ? { attachments } : {}\n });\n };\n const content = watch(\"content\");\n return /* @__PURE__ */ jsx64(\n MessageFormContext.Provider,\n {\n value: {\n isDisabled,\n isLoading,\n files,\n setFiles,\n isFileLoading,\n content\n },\n children: /* @__PURE__ */ jsx64(FormProvider, { ...formProps, children: /* @__PURE__ */ jsx64(\n Box13,\n {\n asChild: true,\n flexShrink: \"0\",\n style,\n className,\n children: /* @__PURE__ */ jsx64(\n \"form\",\n {\n onSubmit: handleSubmit(onSubmit),\n children\n }\n )\n }\n ) })\n }\n );\n};\n\n// src/components/threads/Thread/MessageForm/Field/index.tsx\nimport { useFormContext as useFormContext2 } from \"react-hook-form\";\nimport {\n Container as RadixContainer,\n Flex as Flex23\n} from \"@radix-ui/themes\";\n\n// src/components/threads/Thread/MessageForm/Field/Control.tsx\nimport {\n Flex as Flex20\n} from \"@radix-ui/themes\";\nimport { useFormContext } from \"react-hook-form\";\n\n// src/hooks/misc/usePrevious.ts\nimport { useEffect as useEffect5, useRef as useRef4 } from \"react\";\nvar usePrevious = (state) => {\n const ref = useRef4();\n useEffect5(() => {\n ref.current = state;\n });\n return ref.current;\n};\n\n// src/components/threads/Thread/MessageForm/Field/Control.tsx\nimport { useContext as useContext11, useMemo as useMemo13, useRef as useRef5, useEffect as useEffect6 } from \"react\";\n\n// src/components/textareas/TextareaBase/index.tsx\nimport { forwardRef as forwardRef3 } from \"react\";\nimport TextareaAutosize from \"react-textarea-autosize\";\nimport { Fragment as Fragment3, jsx as jsx65, jsxs as jsxs22 } from \"react/jsx-runtime\";\nvar TextareaBase = forwardRef3(function TextareaBase2({\n style,\n className,\n ...rest\n}, ref) {\n return /* @__PURE__ */ jsxs22(Fragment3, { children: [\n /* @__PURE__ */ jsx65(\"style\", { children: `.superinterface-textarea { min-height: inherit; height: 30px; }\n.superinterface-textarea::placeholder { color: var(--gray-a10); }` }),\n /* @__PURE__ */ jsx65(\n TextareaAutosize,\n {\n ref,\n className: `rt-reset superinterface-textarea ${className ?? \"\"}`,\n style: {\n border: 0,\n outline: 0,\n boxSizing: \"border-box\",\n resize: \"none\",\n color: \"var(--gray-12)\",\n flexGrow: 1,\n display: \"flex\",\n ...style ?? {}\n },\n ...rest\n }\n )\n ] });\n});\n\n// src/components/threads/Thread/MessageForm/Field/Control.tsx\nimport { jsx as jsx66 } from \"react/jsx-runtime\";\nvar Root5 = ({\n children,\n style,\n className\n}) => /* @__PURE__ */ jsx66(\n Flex20,\n {\n flexGrow: \"1\",\n pt: \"4px\",\n style,\n className,\n children\n }\n);\nvar Input = (props) => {\n const assistantNameContext = useContext11(AssistantNameContext);\n const {\n register\n } = useFormContext();\n const { isDisabled, isLoading } = useMessageFormContext();\n const isSubmitDisabled = useMemo13(() => isDisabled || isLoading, [isDisabled, isLoading]);\n const isDisabledPrevious = usePrevious(isDisabled);\n const textareaRef = useRef5(null);\n const textareaProps = register(\"content\");\n useEffect6(() => {\n if (isDisabled) return;\n if (!isDisabledPrevious) return;\n if (!textareaRef.current) return;\n textareaRef.current.focus();\n }, [isDisabled, isDisabledPrevious, textareaProps]);\n return /* @__PURE__ */ jsx66(\n TextareaBase,\n {\n minRows: 1,\n placeholder: props.placeholder ?? `Message ${assistantNameContext}...`,\n disabled: isDisabled,\n onKeyDown: (e) => {\n if (e.key === \"Enter\" && !e.shiftKey) {\n e.preventDefault();\n if (isSubmitDisabled) return;\n e.currentTarget.form?.requestSubmit();\n }\n },\n ...textareaProps,\n ...props,\n ref: (e) => {\n textareaProps.ref(e);\n textareaRef.current = e;\n }\n }\n );\n};\nvar Control = (props) => /* @__PURE__ */ jsx66(Root5, { ...props, children: /* @__PURE__ */ jsx66(Input, {}) });\nControl.Root = Root5;\nControl.Input = Input;\n\n// src/components/threads/Thread/MessageForm/Field/Files/Preview.tsx\nimport {\n Flex as Flex21,\n Card as Card2,\n Spinner as Spinner2,\n Text as Text7,\n IconButton as IconButton6\n} from \"@radix-ui/themes\";\nimport {\n FileIcon as FileIcon2,\n Cross2Icon\n} from \"@radix-ui/react-icons\";\nimport { jsx as jsx67, jsxs as jsxs23 } from \"react/jsx-runtime\";\nvar Preview = (props) => {\n const { files, setFiles } = useMessageFormContext();\n if (!files.length) {\n return null;\n }\n return /* @__PURE__ */ jsx67(\n Flex21,\n {\n flexBasis: \"100%\",\n direction: \"column\",\n pb: \"2\",\n gap: \"1\",\n ...props,\n children: files.map((file) => /* @__PURE__ */ jsx67(\n Card2,\n {\n variant: \"ghost\",\n children: /* @__PURE__ */ jsxs23(\n Flex21,\n {\n align: \"center\",\n justify: \"between\",\n gap: \"1\",\n children: [\n /* @__PURE__ */ jsxs23(\n Flex21,\n {\n align: \"center\",\n gap: \"1\",\n flexShrink: \"1\",\n minWidth: \"0\",\n maxWidth: \"250px\",\n children: [\n /* @__PURE__ */ jsx67(\n Flex21,\n {\n flexShrink: \"0\",\n children: /* @__PURE__ */ jsx67(\n Spinner2,\n {\n loading: isOptimistic({ id: file.id }),\n children: /* @__PURE__ */ jsx67(FileIcon2, {})\n }\n )\n }\n ),\n /* @__PURE__ */ jsx67(\n Text7,\n {\n size: \"2\",\n truncate: true,\n wrap: \"nowrap\",\n children: file.filename\n }\n )\n ]\n }\n ),\n /* @__PURE__ */ jsx67(\n Flex21,\n {\n flexShrink: \"0\",\n children: /* @__PURE__ */ jsx67(\n IconButton6,\n {\n onClick: () => setFiles((prev) => prev.filter((prevFile) => prevFile.id !== file.id)),\n color: \"gray\",\n variant: \"ghost\",\n size: \"1\",\n children: /* @__PURE__ */ jsx67(Cross2Icon, {})\n }\n )\n }\n )\n ]\n }\n )\n },\n file.id\n ))\n }\n );\n};\n\n// src/components/threads/Thread/MessageForm/Field/Files/Control.tsx\nimport { useCallback as useCallback2 } from \"react\";\nimport { omit as omit4 } from \"radash\";\nimport dayjs2 from \"dayjs\";\nimport {\n FilePlusIcon\n} from \"@radix-ui/react-icons\";\nimport {\n IconButton as IconButton7,\n Flex as Flex22\n} from \"@radix-ui/themes\";\n\n// src/hooks/files/useCreateFile/index.ts\nimport {\n useMutation as useMutation2,\n useQueryClient as useQueryClient6\n} from \"@tanstack/react-query\";\n\n// src/hooks/files/useCreateFile/lib/mutationOptions/mutationFn/body/formData.ts\nvar formData = (variables) => {\n const data2 = new FormData();\n for (const key2 in variables) {\n data2.append(key2, variables[key2]);\n }\n return data2;\n};\n\n// src/hooks/files/useCreateFile/lib/mutationOptions/mutationFn/body/index.ts\nvar body2 = ({\n variables,\n superinterfaceContext\n}) => {\n if (variables.threadId) return formData(variables);\n if (!variables.assistantId) return formData(variables);\n if (!superinterfaceContext.threadIdStorageOptions?.get) return formData(variables);\n const threadId = superinterfaceContext.threadIdStorageOptions.get({ assistantId: variables.assistantId });\n if (!threadId) return formData(variables);\n return formData({\n ...variables,\n threadId\n });\n};\n\n// src/hooks/files/useCreateFile/lib/mutationOptions/mutationFn/index.ts\nvar mutationFn2 = ({\n superinterfaceContext,\n queryClient,\n threadContext\n}) => async (variables) => {\n const response = await fetch(`${superinterfaceContext.baseUrl}/files`, {\n method: \"POST\",\n body: body2({\n variables,\n superinterfaceContext\n })\n });\n const result = await response.json();\n return result;\n};\n\n// src/hooks/files/useCreateFile/lib/mutationOptions/index.ts\nvar mutationOptions2 = ({\n queryClient,\n threadContext,\n superinterfaceContext,\n onError\n}) => {\n const mutationKey = [\"createFile\", threadContext.variables];\n return {\n mutationFn: mutationFn2({\n queryClient,\n superinterfaceContext,\n threadContext\n }),\n onError,\n ...threadContext.defaultOptions.mutations,\n ...queryClient.getMutationDefaults(mutationKey),\n mutationKey\n };\n};\n\n// src/hooks/files/useCreateFile/index.ts\nvar useCreateFile = ({\n onError = () => {\n }\n} = {\n onError: () => {\n }\n}) => {\n const queryClient = useQueryClient6();\n const superinterfaceContext = useSuperinterfaceContext();\n const threadContext = useSuperinterfaceContext();\n const props = useMutation2(mutationOptions2({\n queryClient,\n threadContext,\n superinterfaceContext,\n onError\n }));\n return {\n ...props,\n createFile: (...args) => {\n const [firstArg, ...restArgs] = args;\n return props.mutateAsync({\n ...threadContext.variables,\n ...firstArg\n }, ...restArgs);\n }\n };\n};\n\n// src/components/threads/Thread/MessageForm/Field/Files/Control.tsx\nimport { jsx as jsx68, jsxs as jsxs24 } from \"react/jsx-runtime\";\nvar accept = `.c,text/x-c,\n.cs,text/x-csharp,\n.cpp,text/x-c++,\n.doc,application/msword,\n.docx,application/vnd.openxmlformats-officedocument.wordprocessingml.document,\n.html,text/html,\n.java,text/x-java,\n.json,application/json,\n.md,text/markdown,\n.pdf,application/pdf,\n.php,text/x-php,\n.pptx,application/vnd.openxmlformats-officedocument.presentationml.presentation,\n.py,text/x-python,\n.py,text/x-script.python,\n.rb,text/x-ruby,\n.tex,text/x-tex,\n.txt,text/plain,\n.css,text/css,\n.js,text/javascript,\n.sh,application/x-sh,\n.ts,application/typescript`;\nvar Control2 = (props) => {\n const { isDisabled, isLoading, setFiles } = useMessageFormContext();\n const { createFile } = useCreateFile();\n const { addToast } = useToasts();\n const onChange = useCallback2(async (event) => {\n const fileObjects = event.target.files;\n if (!fileObjects) return;\n const newFiles = Array.from(fileObjects).map((fileObject) => ({\n id: optimisticId(),\n filename: fileObject.name,\n object: \"file\",\n purpose: \"assistants\",\n created_at: dayjs2().unix(),\n bytes: fileObject.size,\n status: \"processed\",\n fileObject\n }));\n setFiles((prev) => [\n ...prev,\n ...newFiles.map((file) => omit4(file, [\"fileObject\"]))\n ]);\n for await (const newFile of newFiles) {\n await createFile(\n {\n file: newFile.fileObject\n },\n {\n onSuccess: ({\n file\n }) => setFiles((prev) => [\n ...prev.filter((prevFile) => prevFile.id !== newFile.id),\n file\n ]),\n onError: () => {\n addToast({ type: \"error\", message: \"Could not upload file. Please try again.\" });\n setFiles((prev) => prev.filter((prevFile) => prevFile.id !== newFile.id));\n }\n }\n );\n }\n }, [addToast, createFile, setFiles]);\n return /* @__PURE__ */ jsx68(\n Flex22,\n {\n pt: \"2\",\n pr: \"2\",\n flexGrow: \"0\",\n ...props,\n children: /* @__PURE__ */ jsxs24(\n IconButton7,\n {\n type: \"button\",\n variant: \"ghost\",\n color: \"gray\",\n disabled: isDisabled || isLoading,\n style: {\n position: \"relative\",\n overflow: \"hidden\"\n },\n children: [\n /* @__PURE__ */ jsx68(FilePlusIcon, {}),\n /* @__PURE__ */ jsx68(\n \"input\",\n {\n type: \"file\",\n multiple: true,\n accept,\n onChange,\n style: {\n cursor: \"pointer\",\n position: \"absolute\",\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n opacity: 0\n }\n }\n )\n ]\n }\n )\n }\n );\n};\n\n// src/components/threads/Thread/MessageForm/Field/Files/index.tsx\nvar Files = {\n Preview,\n Control: Control2\n};\n\n// src/components/threads/Thread/MessageForm/Field/index.tsx\nimport { jsx as jsx69 } from \"react/jsx-runtime\";\nvar Root6 = ({\n children,\n className,\n style\n}) => {\n const {\n formState: {\n errors\n }\n } = useFormContext2();\n return /* @__PURE__ */ jsx69(\n RadixContainer,\n {\n size: \"2\",\n flexGrow: \"0\",\n className,\n style,\n children: /* @__PURE__ */ jsx69(\n Flex23,\n {\n direction: \"column\",\n flexShrink: \"0\",\n children: /* @__PURE__ */ jsx69(\n Flex23,\n {\n direction: \"column\",\n flexShrink: \"0\",\n children: /* @__PURE__ */ jsx69(\n Flex23,\n {\n style: {\n borderRadius: \"var(--radius-2)\",\n borderWidth: \"1px\",\n borderStyle: \"solid\",\n borderColor: errors.content ? \"var(--red-9)\" : \"var(--gray-5)\",\n ...errors.content ? { backgroundColor: \"var(--red-2)\" } : {}\n },\n p: \"2\",\n pl: \"3\",\n wrap: \"wrap\",\n children\n }\n )\n }\n )\n }\n )\n }\n );\n};\nvar Field = {\n Root: Root6,\n Control,\n Files\n};\n\n// src/components/threads/Thread/MessageForm/index.tsx\nimport { jsx as jsx70, jsxs as jsxs25 } from \"react/jsx-runtime\";\nvar MessageForm = (props) => /* @__PURE__ */ jsx70(Root4, { ...props, children: /* @__PURE__ */ jsxs25(Field.Root, { children: [\n /* @__PURE__ */ jsx70(Field.Control, {}),\n /* @__PURE__ */ jsx70(Submit, {})\n] }) });\nMessageForm.Root = Root4;\nMessageForm.Field = Field;\nMessageForm.Submit = Submit;\n\n// src/components/threads/Thread/Root/index.tsx\nimport { Flex as Flex25 } from \"@radix-ui/themes\";\n\n// src/components/threads/Thread/Provider/index.tsx\nvar Provider2 = SuperinterfaceProvider;\n\n// src/components/toasts/ToastsProvider/index.tsx\nimport { useState as useState4, useCallback as useCallback3 } from \"react\";\nimport * as Toast2 from \"@radix-ui/react-toast\";\n\n// src/components/toasts/ToastsProvider/CustomToast.tsx\nimport * as Toast from \"@radix-ui/react-toast\";\nimport {\n Card as Card3,\n Text as Text8,\n Flex as Flex24\n} from \"@radix-ui/themes\";\nimport {\n CheckCircledIcon as CheckCircledIcon2,\n CrossCircledIcon\n} from \"@radix-ui/react-icons\";\nimport { jsx as jsx71, jsxs as jsxs26 } from \"react/jsx-runtime\";\nvar CustomToast = ({\n toast\n}) => /* @__PURE__ */ jsx71(Toast.Root, { children: /* @__PURE__ */ jsx71(Card3, { children: /* @__PURE__ */ jsx71(Toast.Title, { children: /* @__PURE__ */ jsxs26(Flex24, { children: [\n /* @__PURE__ */ jsx71(\n Flex24,\n {\n pr: \"2\",\n height: \"14px\",\n align: \"center\",\n children: toast.type === \"success\" ? /* @__PURE__ */ jsx71(\n CheckCircledIcon2,\n {\n color: \"var(--accent-9)\"\n }\n ) : /* @__PURE__ */ jsx71(\n CrossCircledIcon,\n {\n color: \"var(--red-9)\"\n }\n )\n }\n ),\n /* @__PURE__ */ jsx71(\n Text8,\n {\n weight: \"medium\",\n size: \"1\",\n children: toast.message\n }\n )\n] }) }) }) });\n\n// src/components/toasts/ToastsProvider/index.tsx\nimport { jsx as jsx72, jsxs as jsxs27 } from \"react/jsx-runtime\";\nvar ToastsProvider = ({\n children,\n bottom = 0\n}) => {\n const [toasts, setToasts] = useState4([]);\n const addToast = useCallback3((toast) => setToasts((prevToasts) => [\n ...prevToasts,\n toast\n ]), []);\n return /* @__PURE__ */ jsx72(\n ToastsContext.Provider,\n {\n value: {\n toasts,\n addToast\n },\n children: /* @__PURE__ */ jsxs27(Toast2.Provider, { children: [\n children,\n Array.from(toasts).map((toast, index) => /* @__PURE__ */ jsx72(\n CustomToast,\n {\n toast\n },\n index\n )),\n /* @__PURE__ */ jsx72(\n Toast2.Viewport,\n {\n style: {\n position: \"absolute\",\n bottom,\n right: 0,\n display: \"flex\",\n flexDirection: \"column\",\n padding: \"var(--space-5)\",\n gap: \"var(--space-3)\",\n width: \"390px\",\n maxWidth: \"100vw\",\n margin: 0,\n listStyle: \"none\",\n zIndex: 99999999999999,\n outline: \"none\"\n }\n }\n )\n ] })\n }\n );\n};\n\n// src/components/threads/Thread/Root/index.tsx\nimport { jsx as jsx73 } from \"react/jsx-runtime\";\nvar Root8 = ({\n children,\n style,\n className,\n ...rest\n}) => /* @__PURE__ */ jsx73(ToastsProvider, { bottom: \"var(--space-9)\", children: /* @__PURE__ */ jsx73(Provider2, { ...rest, children: /* @__PURE__ */ jsx73(\n Flex25,\n {\n direction: \"column\",\n flexGrow: \"1\",\n className,\n style,\n children\n }\n) }) });\n\n// src/components/threads/Thread/index.tsx\nimport { jsx as jsx74, jsxs as jsxs28 } from \"react/jsx-runtime\";\nvar Thread = (props) => /* @__PURE__ */ jsxs28(Root8, { ...props, children: [\n /* @__PURE__ */ jsx74(Messages, {}),\n /* @__PURE__ */ jsx74(MessageForm, {})\n] });\nThread.Root = Root8;\nThread.Messages = Messages;\nThread.MessageForm = MessageForm;\n\n// src/hooks/messages/useMessageContext/index.ts\nimport { useContext as useContext12 } from \"react\";\nvar useMessageContext = () => useContext12(MessageContext);\n\n// src/hooks/assistants/useAssistant/index.ts\nimport { useMemo as useMemo14 } from \"react\";\nimport {\n useQuery\n} from \"@tanstack/react-query\";\n\n// src/hooks/assistants/useAssistant/lib/queryOptions/index.ts\nimport { queryOptions as tanstackQueryOptions } from \"@tanstack/react-query\";\n\n// src/hooks/assistants/useAssistant/lib/queryOptions/queryFn.ts\nvar queryFn = ({\n superinterfaceContext\n}) => async ({\n queryKey\n}) => {\n const [_key, { assistantId }] = queryKey;\n const params = new URLSearchParams({\n publicApiKey: superinterfaceContext.variables.publicApiKey\n });\n return fetch(`${superinterfaceContext.baseUrl}/assistants/${assistantId}?${params}`).then(async (response) => {\n if (response.status !== 200) {\n try {\n const errorResponse = await response.json();\n throw new Error(errorResponse.error);\n } catch (error) {\n throw new Error(\"Failed to fetch\");\n }\n }\n return response.json();\n });\n};\n\n// src/hooks/assistants/useAssistant/lib/queryOptions/index.ts\nvar queryOptions2 = ({\n assistantId,\n superinterfaceContext\n}) => tanstackQueryOptions({\n queryKey: [\"assistants\", { assistantId }],\n queryFn: queryFn({ superinterfaceContext })\n});\n\n// src/hooks/assistants/useAssistant/index.ts\nvar useAssistant = ({\n assistantId\n}) => {\n const superinterfaceContext = useSuperinterfaceContext();\n const props = useQuery(queryOptions2({\n assistantId,\n superinterfaceContext\n }));\n return useMemo14(() => ({\n ...props,\n assistant: props.data ? props.data.assistant : null\n }), [props]);\n};\n\n// src/components/threads/ThreadDialog/Provider/index.tsx\nimport { useState as useState5 } from \"react\";\n\n// src/contexts/threads/ThreadDialogContext/index.ts\nimport { createContext as createContext11 } from \"react\";\nvar ThreadDialogContext = createContext11({\n isOpen: false,\n setIsOpen: () => {\n }\n});\n\n// src/hooks/threads/useThreadDialogContext/index.ts\nimport { useContext as useContext13 } from \"react\";\nvar useThreadDialogContext = () => useContext13(ThreadDialogContext);\n\n// src/components/threads/ThreadDialog/Provider/index.tsx\nimport { jsx as jsx75 } from \"react/jsx-runtime\";\nvar Provider4 = ({\n children\n}) => {\n const threadDialogContext = useThreadDialogContext();\n const [isOpen, setIsOpen] = useState5(threadDialogContext.isOpen);\n return /* @__PURE__ */ jsx75(\n ThreadDialogContext.Provider,\n {\n value: {\n isOpen,\n setIsOpen\n },\n children\n }\n );\n};\n\n// src/components/threads/ThreadDialog/Root/index.tsx\nimport { jsx as jsx76 } from \"react/jsx-runtime\";\nvar Root9 = ({\n children\n}) => /* @__PURE__ */ jsx76(Provider4, { children });\n\n// src/components/threads/ThreadDialog/Trigger/index.tsx\nimport {\n Flex as Flex26\n} from \"@radix-ui/themes\";\n\n// src/components/threads/ThreadDialog/Trigger/Button.tsx\nimport {\n IconButton as IconButton8\n} from \"@radix-ui/themes\";\nimport {\n ChatBubbleIcon\n} from \"@radix-ui/react-icons\";\nimport { jsx as jsx77 } from \"react/jsx-runtime\";\nvar Button4 = (props) => /* @__PURE__ */ jsx77(\n IconButton8,\n {\n size: \"4\",\n radius: \"full\",\n ...props,\n children: /* @__PURE__ */ jsx77(ChatBubbleIcon, {})\n }\n);\n\n// src/components/threads/ThreadDialog/Trigger/index.tsx\nimport { jsx as jsx78 } from \"react/jsx-runtime\";\nvar Root10 = ({\n children,\n style,\n className\n}) => {\n const { setIsOpen, isOpen } = useThreadDialogContext();\n return /* @__PURE__ */ jsx78(\n Flex26,\n {\n display: {\n initial: isOpen ? \"none\" : \"flex\",\n sm: \"flex\"\n },\n onClick: () => setIsOpen((prev) => !prev),\n direction: \"column\",\n flexShrink: \"0\",\n justify: \"end\",\n align: \"end\",\n position: \"fixed\",\n bottom: \"24px\",\n right: \"24px\",\n className,\n style: {\n zIndex: 9999999999,\n ...style ?? {}\n },\n children\n }\n );\n};\nvar Trigger = (args) => /* @__PURE__ */ jsx78(Root10, { ...args, children: /* @__PURE__ */ jsx78(Button4, {}) });\nTrigger.Root = Root10;\nTrigger.Button = Button4;\n\n// src/components/threads/ThreadDialog/Content/index.tsx\nimport {\n Card as Card4,\n Inset as Inset2,\n Flex as Flex28\n} from \"@radix-ui/themes\";\n\n// src/components/threads/ThreadDialog/Close/index.tsx\nimport {\n Cross1Icon\n} from \"@radix-ui/react-icons\";\nimport {\n IconButton as IconButton9,\n Flex as Flex27\n} from \"@radix-ui/themes\";\nimport { jsx as jsx79 } from \"react/jsx-runtime\";\nvar Close = () => {\n const { setIsOpen, isOpen } = useThreadDialogContext();\n return /* @__PURE__ */ jsx79(\n Flex27,\n {\n display: {\n initial: isOpen ? \"flex\" : \"none\",\n sm: \"none\"\n },\n onClick: () => setIsOpen((prev) => !prev),\n direction: \"column\",\n flexShrink: \"0\",\n justify: \"end\",\n align: \"end\",\n position: \"absolute\",\n top: \"24px\",\n right: \"24px\",\n style: {\n zIndex: 9999999999\n },\n children: /* @__PURE__ */ jsx79(\n IconButton9,\n {\n size: \"2\",\n variant: \"soft\",\n children: /* @__PURE__ */ jsx79(Cross1Icon, {})\n }\n )\n }\n );\n};\n\n// src/components/threads/ThreadDialog/Content/index.tsx\nimport { jsx as jsx80, jsxs as jsxs29 } from \"react/jsx-runtime\";\nvar Root11 = ({\n children,\n className,\n style\n}) => {\n const { isOpen } = useThreadDialogContext();\n if (!isOpen) return null;\n return /* @__PURE__ */ jsx80(\n Flex28,\n {\n className,\n direction: \"column\",\n justify: \"end\",\n position: \"fixed\",\n bottom: {\n initial: \"0\",\n sm: \"72px\"\n },\n right: {\n initial: \"0\",\n sm: \"24px\"\n },\n maxHeight: {\n initial: void 0,\n sm: \"720px\"\n },\n maxWidth: {\n initial: void 0,\n sm: \"400px\"\n },\n width: \"100%\",\n height: {\n initial: \"100%\",\n sm: \"calc(100% - 96px)\"\n },\n style: {\n zIndex: 9999999999,\n ...style\n },\n children: /* @__PURE__ */ jsxs29(\n Card4,\n {\n mb: {\n initial: void 0,\n sm: \"3\"\n },\n style: {\n position: \"relative\",\n display: \"flex\",\n flexGrow: 1\n },\n children: [\n /* @__PURE__ */ jsx80(\n Inset2,\n {\n clip: \"padding-box\",\n side: \"all\",\n pb: \"current\",\n style: {\n display: \"flex\",\n flexGrow: 1\n },\n children\n }\n ),\n /* @__PURE__ */ jsx80(Close, {})\n ]\n }\n )\n }\n );\n};\nvar Messages2 = ({\n className,\n style\n}) => /* @__PURE__ */ jsx80(\n Thread.Messages,\n {\n className,\n style: {\n paddingTop: \"var(--space-5)\",\n paddingRight: \"var(--space-5)\",\n paddingLeft: \"var(--space-5)\",\n ...style\n }\n }\n);\nvar FormContainer = ({\n children,\n className,\n style\n}) => /* @__PURE__ */ jsx80(\n Flex28,\n {\n direction: \"column\",\n pl: \"5\",\n pr: \"5\",\n pb: \"3\",\n flexShrink: \"0\",\n className,\n style,\n children\n }\n);\nvar Content7 = (props) => /* @__PURE__ */ jsx80(Root11, { ...props, children: /* @__PURE__ */ jsxs29(Thread.Root, { children: [\n /* @__PURE__ */ jsx80(Messages2, {}),\n /* @__PURE__ */ jsx80(FormContainer, { children: /* @__PURE__ */ jsx80(Thread.MessageForm, {}) })\n] }) });\nContent7.Root = Root11;\nContent7.Messages = Messages2;\nContent7.FormContainer = FormContainer;\n\n// src/components/threads/ThreadDialog/index.tsx\nimport { jsx as jsx81, jsxs as jsxs30 } from \"react/jsx-runtime\";\nvar ThreadDialog = () => /* @__PURE__ */ jsxs30(Root9, { children: [\n /* @__PURE__ */ jsx81(Content7, {}),\n /* @__PURE__ */ jsx81(Trigger, {})\n] });\nThreadDialog.Root = Root9;\nThreadDialog.Trigger = Trigger;\nThreadDialog.Content = Content7;\n\n// src/components/threads/AudioThread/Root/index.tsx\nimport { Flex as Flex29 } from \"@radix-ui/themes\";\n\n// src/contexts/threads/AudioThreadContext/index.ts\nimport { createContext as createContext12 } from \"react\";\nvar AudioThreadContext = createContext12({\n status: \"idle\",\n recorderProps: {\n status: \"idle\",\n start: async () => {\n },\n stop: async () => {\n },\n pause: async () => {\n },\n resume: async () => {\n },\n visualizationAnalyser: null\n },\n // @ts-ignore-next-line\n messageAudioProps: {\n visualizationAnalyser: null,\n playing: false,\n paused: false,\n isReady: false,\n play: async () => {\n },\n pause: async () => {\n }\n }\n});\n\n// src/hooks/misc/usePermission/index.ts\nimport { useEffect as useEffect7, useState as useState6 } from \"react\";\n\n// src/hooks/misc/usePermission/util.ts\nvar noop = () => {\n};\nfunction on(obj, ...args) {\n if (obj && obj.addEventListener) {\n obj.addEventListener(...args);\n }\n}\nfunction off(obj, ...args) {\n if (obj && obj.removeEventListener) {\n obj.removeEventListener(...args);\n }\n}\n\n// src/hooks/misc/usePermission/index.ts\nvar usePermission = (permissionDesc) => {\n const [state, setState] = useState6(\"\");\n useEffect7(() => {\n let mounted = true;\n let permissionStatus = null;\n const onChange = () => {\n if (!mounted) {\n return;\n }\n setState(() => permissionStatus?.state ?? \"\");\n };\n navigator.permissions.query(permissionDesc).then((status) => {\n permissionStatus = status;\n on(permissionStatus, \"change\", onChange);\n onChange();\n }).catch(noop);\n return () => {\n permissionStatus && off(permissionStatus, \"change\", onChange);\n mounted = false;\n permissionStatus = null;\n };\n }, [permissionDesc]);\n return state;\n};\n\n// src/components/threads/AudioThread/Root/lib/blobToData.ts\nvar blobToData = (blob) => new Promise((resolve) => {\n const reader = new FileReader();\n reader.onloadend = () => resolve(reader.result);\n reader.readAsDataURL(blob);\n});\n\n// src/hooks/audioThreads/useStatus/index.ts\nimport { useMemo as useMemo15 } from \"react\";\nvar useStatus = ({\n messageAudioProps,\n recorderProps,\n createMessageProps\n}) => {\n const latestMessageProps = useLatestMessage();\n const status = useMemo15(() => {\n if (recorderProps.status === \"recording\") return \"recording\";\n if (createMessageProps.isPending) return \"creatingMessage\";\n if (messageAudioProps.paused || !messageAudioProps.isAudioPlayed) return \"playerPaused\";\n if (messageAudioProps.playing || messageAudioProps.isPending) return \"playing\";\n if (!messageAudioProps.isAudioPlayed && !messageAudioProps.isReady) return \"loading\";\n if (latestMessageProps.latestMessage?.status === \"in_progress\") return \"creatingMessage\";\n if (recorderProps.status === \"idle\") return \"idle\";\n if (recorderProps.status === \"paused\") return \"recorderPaused\";\n return \"loading\";\n }, [\n latestMessageProps,\n messageAudioProps,\n recorderProps,\n createMessageProps\n ]);\n return {\n status\n };\n};\n\n// src/hooks/audioThreads/useRecorder/index.ts\nimport dayjs3 from \"dayjs\";\nimport { useAudioCapture } from \"use-audio-capture\";\nimport { useMemo as useMemo16, useRef as useRef7, useState as useState7, useCallback as useCallback4, useEffect as useEffect9 } from \"react\";\nimport { useAudioPlayer } from \"react-use-audio-player\";\n\n// src/hooks/misc/useInterval.ts\nimport { useEffect as useEffect8, useRef as useRef6 } from \"react\";\nvar useInterval = (callback, delay) => {\n const savedCallback = useRef6(() => {\n });\n useEffect8(() => {\n savedCallback.current = callback;\n });\n useEffect8(() => {\n if (delay !== null) {\n const interval = setInterval(() => savedCallback.current(), delay || 0);\n return () => clearInterval(interval);\n }\n return void 0;\n }, [delay]);\n};\n\n// src/hooks/audioThreads/useRecorder/index.ts\nvar useRecorder = ({\n isStopOnSilence,\n onStart,\n onStop\n}) => {\n const [silenceStart, setSilenceStart] = useState7(null);\n const [noiseStart, setNoiseStart] = useState7(null);\n const [mediaStream, setMediaStream] = useState7(null);\n const [status, setStatus] = useState7(\"idle\");\n const startAudioPlayer = useAudioPlayer();\n const endAudioPlayer = useAudioPlayer();\n const [isLoaded, setIsLoaded] = useState7(false);\n useEffect9(() => {\n if (isLoaded) return;\n setIsLoaded(true);\n }, [isLoaded, startAudioPlayer, endAudioPlayer]);\n const audioCaptureProps = useAudioCapture({\n onStart: (event, opts) => {\n setStatus(\"recording\");\n setMediaStream(opts.mediaStream);\n isInited.current = false;\n if (onStart) onStart(event, opts);\n setSilenceStart(null);\n setNoiseStart(null);\n },\n onStop: async (...args) => {\n setStatus(\"stopped\");\n if (onStop) await onStop(...args);\n setSilenceStart(null);\n setNoiseStart(null);\n },\n onPause: () => {\n setStatus(\"paused\");\n setSilenceStart(null);\n setNoiseStart(null);\n },\n onResume: () => {\n setStatus(\"recording\");\n setSilenceStart(null);\n setNoiseStart(null);\n }\n });\n const [audioEngine, setAudioEngine] = useState7(null);\n const isInited = useRef7(false);\n useEffect9(() => {\n if (!mediaStream) return;\n if (isInited.current) return;\n isInited.current = true;\n const audioContext = new AudioContext();\n setAudioEngine({\n source: audioContext.createMediaStreamSource(mediaStream),\n audioContext\n });\n }, [isInited, mediaStream]);\n const visualizationAnalyser = useMemo16(() => {\n if (!audioEngine) return null;\n const result = audioEngine.audioContext.createAnalyser();\n audioEngine.source.connect(result);\n return result;\n }, [audioEngine]);\n const silenceAnalyser = useMemo16(() => {\n if (!audioEngine) return null;\n const result = audioEngine.audioContext.createAnalyser();\n result.minDecibels = -60;\n audioEngine.source.connect(result);\n return result;\n }, [audioEngine]);\n const handleSilence = useCallback4(() => {\n if (!silenceAnalyser) return;\n const frequencyData = new Uint8Array(silenceAnalyser.frequencyBinCount);\n silenceAnalyser.getByteFrequencyData(frequencyData);\n const isSilent = frequencyData.every((f) => f === 0);\n setSilenceStart((silenceStart2) => {\n if (isSilent) return silenceStart2 || dayjs3();\n return null;\n });\n setNoiseStart((noiseStart2) => {\n if (isSilent) return noiseStart2;\n return noiseStart2 || dayjs3();\n });\n requestAnimationFrame(() => handleSilence());\n }, [silenceAnalyser, setNoiseStart, setSilenceStart]);\n useEffect9(() => {\n if (!isStopOnSilence) return;\n requestAnimationFrame(() => handleSilence());\n }, [handleSilence, isStopOnSilence]);\n useInterval(() => {\n if (!isStopOnSilence) return;\n if (status !== \"recording\") return;\n if (!silenceStart) return;\n if (!noiseStart) return;\n if (!silenceStart.isBefore(dayjs3().subtract(1.5, \"second\"))) return;\n audioCaptureProps.stop();\n }, 300);\n return {\n ...audioCaptureProps,\n status,\n visualizationAnalyser\n };\n};\n\n// src/hooks/audioThreads/useMessageAudio/index.ts\nimport { useMemo as useMemo17, useRef as useRef8, useState as useState8, useEffect as useEffect10 } from \"react\";\nimport nlp from \"compromise\";\nimport { Howler } from \"howler\";\nimport { useAudioPlayer as useAudioPlayer2 } from \"react-use-audio-player\";\n\n// src/hooks/audioThreads/useMessageAudio/lib/input.ts\nimport { isEmpty as isEmpty3 } from \"radash\";\nvar input = ({\n message\n}) => {\n const textContents = message.content.filter((c) => c.type === \"text\");\n const result = textContents.map((c) => c.text.value).join(\" \");\n if (isEmpty3(result)) return null;\n return result;\n};\n\n// src/hooks/audioThreads/useMessageAudio/lib/isHtmlAudioSupported.ts\nimport { detect } from \"detect-browser\";\nvar unsupportedNames = [\n \"safari\",\n \"ios\"\n];\nvar isHtmlAudioSupported = !unsupportedNames.includes(detect()?.name || \"\");\n\n// src/hooks/audioThreads/useMessageAudio/index.ts\nvar FULL_SENTENCE_REGEX = /[\\.?!]$/;\nvar getMessageSentences = ({\n messageId,\n input: input2\n}) => {\n const sentences = nlp(input2).sentences().json();\n return sentences.map((sentence) => ({\n messageId,\n sentence: sentence.text\n }));\n};\nvar useMessageAudio = ({\n onEnd\n}) => {\n const [isAudioPlayed, setIsAudioPlayed] = useState8(false);\n const [stoppedMessageIds, setStoppedMessageIds] = useState8([]);\n const [playedMessageSentences, setPlayedMessageSentences] = useState8([]);\n const audioPlayer = useAudioPlayer2();\n const nextAudioPlayer = useAudioPlayer2();\n const superinterfaceContext = useSuperinterfaceContext();\n const [isPlaying, setIsPlaying] = useState8(false);\n const latestMessageProps = useLatestMessage();\n const unplayedMessageSentences = useMemo17(() => {\n if (!latestMessageProps.latestMessage) return [];\n if (latestMessageProps.latestMessage.role !== \"assistant\") return [];\n if (stoppedMessageIds.includes(latestMessageProps.latestMessage.id)) return [];\n const input2 = input({\n message: latestMessageProps.latestMessage\n });\n if (!input2) return [];\n const messageSentences = getMessageSentences({\n messageId: latestMessageProps.latestMessage.id,\n input: input2\n });\n return messageSentences.filter((ms) => !playedMessageSentences.find((pms) => pms.messageId === ms.messageId && pms.sentence === ms.sentence));\n }, [latestMessageProps, playedMessageSentences]);\n useEffect10(() => {\n if (isPlaying) return;\n if (audioPlayer.playing) return;\n if (!latestMessageProps.latestMessage) return;\n if (latestMessageProps.latestMessage.role !== \"assistant\") return;\n const firstUnplayedMessageSentence = unplayedMessageSentences[0];\n if (!firstUnplayedMessageSentence) {\n return;\n }\n const isFullSentence = isOptimistic({ id: latestMessageProps.latestMessage.id }) || latestMessageProps.latestMessage.status !== \"in_progress\" || FULL_SENTENCE_REGEX.test(firstUnplayedMessageSentence.sentence);\n if (!isFullSentence) return;\n setIsPlaying(true);\n setPlayedMessageSentences((prev) => [...prev, firstUnplayedMessageSentence]);\n const searchParams = new URLSearchParams({\n input: firstUnplayedMessageSentence.sentence,\n ...superinterfaceContext.variables\n });\n audioPlayer.load(`${superinterfaceContext.baseUrl}/tts?${searchParams}`, {\n format: \"mp3\",\n autoplay: isAudioPlayed,\n html5: isHtmlAudioSupported,\n onplay: () => {\n setIsAudioPlayed(true);\n },\n onstop: () => {\n setStoppedMessageIds((prev) => [...prev, firstUnplayedMessageSentence.messageId]);\n setIsPlaying(false);\n },\n onload: () => {\n const nextUnplayedMessageSentence = unplayedMessageSentences[1];\n if (!nextUnplayedMessageSentence) return;\n const isNextFullSentence = FULL_SENTENCE_REGEX.test(nextUnplayedMessageSentence.sentence);\n if (!isNextFullSentence) return;\n const nextSearchParams = new URLSearchParams({\n input: nextUnplayedMessageSentence.sentence,\n ...superinterfaceContext.variables\n });\n nextAudioPlayer.load(`${superinterfaceContext.baseUrl}/tts?${nextSearchParams}`, {\n format: \"mp3\",\n autoplay: false,\n html5: isHtmlAudioSupported\n });\n },\n onend: () => {\n setIsPlaying(false);\n if (unplayedMessageSentences.length === 1 && latestMessageProps.latestMessage.status !== \"in_progress\") {\n onEnd();\n }\n }\n });\n }, [\n unplayedMessageSentences,\n isPlaying,\n superinterfaceContext,\n latestMessageProps,\n audioPlayer,\n nextAudioPlayer,\n playedMessageSentences,\n onEnd\n ]);\n useEffect10(() => {\n if (isHtmlAudioSupported) {\n if (!Howler?._howls[0]?._sounds[0]?._node) return;\n Howler._howls[0]._sounds[0]._node.crossOrigin = \"anonymous\";\n }\n }, [audioPlayer]);\n const [audioEngine, setAudioEngine] = useState8(null);\n const isAudioEngineInited = useRef8(false);\n useEffect10(() => {\n if (!audioPlayer.playing) return;\n if (isAudioEngineInited.current) return;\n isAudioEngineInited.current = true;\n if (isHtmlAudioSupported) {\n const audioContext = new AudioContext();\n setAudioEngine({\n // @ts-ignore-next-line\n source: audioContext.createMediaElementSource(Howler._howls[0]._sounds[0]._node),\n audioContext\n });\n } else {\n setAudioEngine({\n source: Howler.masterGain,\n audioContext: Howler.ctx\n });\n }\n }, [audioPlayer, isAudioEngineInited]);\n const visualizationAnalyser = useMemo17(() => {\n if (!audioEngine) return null;\n const result = audioEngine.audioContext.createAnalyser();\n audioEngine.source.connect(audioEngine.audioContext.destination);\n audioEngine.source.connect(result);\n return result;\n }, [audioEngine]);\n const isPending = useMemo17(() => isPlaying || unplayedMessageSentences.length > 0, [isPlaying, unplayedMessageSentences]);\n return {\n isPending,\n isAudioPlayed,\n ...audioPlayer,\n visualizationAnalyser\n };\n};\n\n// src/components/threads/AudioThread/Root/index.tsx\nimport {\n useQueryClient as useQueryClient7\n} from \"@tanstack/react-query\";\nimport { jsx as jsx82 } from \"react/jsx-runtime\";\nvar Content8 = ({\n children,\n className,\n style\n}) => {\n const { addToast } = useToasts();\n const queryClient = useQueryClient7();\n const threadContext = useSuperinterfaceContext();\n const createMessageProps = useCreateMessage({\n onError: (error) => {\n createMessageDefaultOnError({\n queryClient,\n addToast,\n threadContext\n })(error);\n recorderProps.start();\n }\n });\n const recorderProps = useRecorder({\n isStopOnSilence: true,\n onStart: async () => {\n },\n onStop: async (_event, chunks) => {\n const blob = new Blob(chunks, { type: chunks[0].type });\n const audioContent = await blobToData(blob);\n return createMessageProps.createMessage({\n // @ts-ignore-next-line\n audioContent\n });\n }\n });\n const microphonePermission = usePermission({ name: \"microphone\" });\n const messageAudioProps = useMessageAudio({\n onEnd: () => {\n if (microphonePermission === \"granted\") {\n recorderProps.start();\n }\n }\n });\n const { status } = useStatus({\n recorderProps,\n createMessageProps,\n messageAudioProps\n });\n return /* @__PURE__ */ jsx82(\n AudioThreadContext.Provider,\n {\n value: {\n status,\n recorderProps,\n messageAudioProps\n },\n children: /* @__PURE__ */ jsx82(\n Flex29,\n {\n direction: \"column\",\n flexGrow: \"1\",\n p: \"9\",\n className,\n style,\n children\n }\n )\n }\n );\n};\nvar Root12 = ({\n children,\n ...rest\n}) => /* @__PURE__ */ jsx82(ToastsProvider, { children: /* @__PURE__ */ jsx82(Content8, { ...rest, children }) });\n\n// src/components/threads/AudioThread/Visualization/index.tsx\nimport { useContext as useContext15, useState as useState10, useCallback as useCallback6, useEffect as useEffect12 } from \"react\";\nimport _9 from \"lodash\";\nimport { Flex as Flex31 } from \"@radix-ui/themes\";\n\n// src/hooks/threads/useAudioThreadContext/index.ts\nimport { useContext as useContext14 } from \"react\";\nvar useAudioThreadContext = () => useContext14(AudioThreadContext);\n\n// src/components/threads/AudioThread/BarsVisualizer/index.tsx\nimport _8 from \"lodash\";\nimport {\n Flex as Flex30,\n Grid\n} from \"@radix-ui/themes\";\nimport { useState as useState9, useEffect as useEffect11, useCallback as useCallback5 } from \"react\";\nimport { cluster } from \"radash\";\nimport { jsx as jsx83 } from \"react/jsx-runtime\";\nvar barCount = 4;\nvar BarsVisualizer = ({\n visualizationAnalyser,\n backgroundColor,\n height,\n barWidth\n}) => {\n const [barHeights, setBarHeights] = useState9([]);\n const draw = useCallback5(({ visualizationAnalyser: visualizationAnalyser2 }) => {\n if (!visualizationAnalyser2) {\n setBarHeights(Array(barCount).fill(0));\n return;\n }\n const frequencyData = new Uint8Array(visualizationAnalyser2.frequencyBinCount / 15);\n visualizationAnalyser2.getByteFrequencyData(frequencyData);\n const clusteredFrequencyData = cluster(frequencyData, frequencyData.length / barCount);\n setBarHeights(\n clusteredFrequencyData.map((frequencyDataCluster) => _8.mean(frequencyDataCluster) / 255 * 100)\n );\n requestAnimationFrame(() => draw({ visualizationAnalyser: visualizationAnalyser2 }));\n }, []);\n useEffect11(() => {\n draw({ visualizationAnalyser });\n }, [draw, visualizationAnalyser]);\n return /* @__PURE__ */ jsx83(\n Grid,\n {\n columns: `${barCount}`,\n gap: \"1\",\n width: \"auto\",\n style: {\n // TODO not sure why we need this\n gridTemplateColumns: \"repeat(4, minmax(0, 1fr))\"\n },\n children: barHeights.map((barHeight, index) => /* @__PURE__ */ jsx83(\n Flex30,\n {\n direction: \"column\",\n align: \"center\",\n justify: \"center\",\n height,\n children: /* @__PURE__ */ jsx83(\n Flex30,\n {\n minHeight: \"50%\",\n maxHeight: \"100%\",\n height: `${barHeight + 20}%`,\n width: barWidth,\n style: {\n backgroundColor,\n borderRadius: \"var(--radius-6)\"\n }\n }\n )\n },\n index\n ))\n }\n );\n};\n\n// src/components/threads/AudioThread/Visualization/index.tsx\nimport { jsx as jsx84, jsxs as jsxs31 } from \"react/jsx-runtime\";\nvar Visualization = (props) => {\n const audioThreadContext = useAudioThreadContext();\n const assistantNameContext = useContext15(AssistantNameContext);\n const [scale, setScale] = useState10(0);\n const draw = useCallback6(({ visualizationAnalyser }) => {\n if (!visualizationAnalyser) {\n setScale(1);\n return;\n }\n const frequencyData = new Uint8Array(visualizationAnalyser.frequencyBinCount / 15);\n visualizationAnalyser.getByteFrequencyData(frequencyData);\n setScale(1 + _9.mean(frequencyData) / 255 / 10);\n requestAnimationFrame(() => draw({ visualizationAnalyser }));\n }, []);\n useEffect12(() => {\n draw({ visualizationAnalyser: audioThreadContext.recorderProps.visualizationAnalyser });\n }, [draw, audioThreadContext]);\n return /* @__PURE__ */ jsxs31(\n Flex31,\n {\n direction: \"column\",\n align: \"center\",\n justify: \"center\",\n mb: \"3\",\n flexGrow: \"1\",\n ...props,\n children: [\n /* @__PURE__ */ jsx84(\n Flex31,\n {\n align: \"center\",\n justify: \"center\",\n height: \"200px\",\n width: \"200px\",\n style: {\n backgroundColor: audioThreadContext.status === \"playing\" ? \"var(--accent-4)\" : \"var(--gray-4)\",\n borderRadius: \"9999px\",\n scale\n },\n children: /* @__PURE__ */ jsx84(\n BarsVisualizer,\n {\n visualizationAnalyser: audioThreadContext.messageAudioProps.visualizationAnalyser,\n backgroundColor: audioThreadContext.status === \"playing\" ? \"var(--accent-11)\" : \"var(--gray-11)\",\n height: \"40px\",\n barWidth: \"24px\"\n }\n )\n }\n ),\n /* @__PURE__ */ jsxs31(\n Flex31,\n {\n ml: \"-22.5px\",\n gap: \"3\",\n pt: \"5\",\n children: [\n /* @__PURE__ */ jsx84(AssistantAvatar, {}),\n /* @__PURE__ */ jsx84(Name, { children: assistantNameContext })\n ]\n }\n )\n ]\n }\n );\n};\n\n// src/components/threads/AudioThread/Status/StatusMessages.tsx\nimport {\n Flex as Flex32,\n Text as Text9\n} from \"@radix-ui/themes\";\nimport { jsx as jsx85, jsxs as jsxs32 } from \"react/jsx-runtime\";\nvar html = ({ texts }) => `\n .status-messages-texts:after {\n content: '${texts[0]}';\n animation: texts ${texts.length * 5}s linear infinite;\n }\n\n @keyframes texts {\n ${texts.map((_10, i) => `\n ${i * 100 / texts.length}% {\n content: \"${texts[i]}\";\n }\n `).join(\"\")}\n }`;\nvar StatusMessages = ({\n texts,\n className,\n style\n}) => /* @__PURE__ */ jsxs32(\n Flex32,\n {\n justify: \"center\",\n pb: \"5\",\n className,\n style,\n children: [\n /* @__PURE__ */ jsx85(\n Text9,\n {\n size: \"2\",\n weight: \"regular\",\n color: \"gray\",\n className: \"status-messages-texts\"\n }\n ),\n /* @__PURE__ */ jsx85(\n \"style\",\n {\n dangerouslySetInnerHTML: {\n __html: html({ texts })\n }\n }\n )\n ]\n }\n);\n\n// src/components/threads/AudioThread/Status/index.tsx\nimport { jsx as jsx86 } from \"react/jsx-runtime\";\nvar Status = (props) => {\n const audioThreadContext = useAudioThreadContext();\n if (audioThreadContext.status === \"recording\") {\n return /* @__PURE__ */ jsx86(\n StatusMessages,\n {\n texts: [\n \"Start speaking\",\n \"Listening\",\n \"Finish speaking to send\",\n \"Click the button below to send manually\"\n ],\n ...props\n }\n );\n }\n if ([\"recorderPaused\", \"idle\", \"playerPaused\"].includes(audioThreadContext.status)) {\n return /* @__PURE__ */ jsx86(\n StatusMessages,\n {\n texts: [\n \"Click the button below to activate\"\n ],\n ...props\n }\n );\n }\n if (audioThreadContext.status === \"playing\") {\n return /* @__PURE__ */ jsx86(\n StatusMessages,\n {\n texts: [\n \"Click the button below to interrupt\"\n ],\n ...props\n }\n );\n }\n return /* @__PURE__ */ jsx86(\n StatusMessages,\n {\n texts: [\n \"Thinking\"\n ],\n ...props\n }\n );\n};\n\n// src/components/threads/AudioThread/Form/index.tsx\nimport {\n Flex as Flex34\n} from \"@radix-ui/themes\";\n\n// src/components/threads/AudioThread/Form/MicIcon.tsx\nimport { jsx as jsx87 } from \"react/jsx-runtime\";\nvar MicIcon = (props) => /* @__PURE__ */ jsx87(\n \"svg\",\n {\n xmlns: \"http://www.w3.org/2000/svg\",\n fill: \"currentColor\",\n stroke: \"currentColor\",\n strokeWidth: 0,\n viewBox: \"0 0 384 512\",\n height: \"15\",\n width: \"15\",\n ...props,\n children: /* @__PURE__ */ jsx87(\n \"path\",\n {\n stroke: \"none\",\n d: \"M192 0c-53 0-96 43-96 96v160c0 53 43 96 96 96s96-43 96-96V96c0-53-43-96-96-96zM64 216c0-13.3-10.7-24-24-24s-24 10.7-24 24v40c0 89.1 66.2 162.7 152 174.4V464h-48c-13.3 0-24 10.7-24 24s10.7 24 24 24h144c13.3 0 24-10.7 24-24s-10.7-24-24-24h-48v-33.6c85.8-11.7 152-85.3 152-174.4v-40c0-13.3-10.7-24-24-24s-24 10.7-24 24v40c0 70.7-57.3 128-128 128S64 326.7 64 256v-40z\"\n }\n )\n }\n);\n\n// src/components/threads/AudioThread/Form/ActionButton/index.tsx\nimport {\n Flex as Flex33,\n IconButton as IconButton10\n} from \"@radix-ui/themes\";\nimport {\n StopIcon as StopIcon2,\n PauseIcon as PauseIcon2,\n ArrowUpIcon as ArrowUpIcon3,\n ResumeIcon\n} from \"@radix-ui/react-icons\";\nimport { jsx as jsx88, jsxs as jsxs33 } from \"react/jsx-runtime\";\nvar ActionButton = () => {\n const audioThreadContext = useAudioThreadContext();\n const superinterfaceContext = useSuperinterfaceContext();\n if (audioThreadContext.status === \"recording\") {\n return /* @__PURE__ */ jsxs33(\n Flex33,\n {\n align: \"center\",\n children: [\n /* @__PURE__ */ jsx88(\n Flex33,\n {\n mr: \"3\",\n ml: \"-7\",\n children: /* @__PURE__ */ jsx88(\n IconButton10,\n {\n onClick: audioThreadContext.recorderProps.pause,\n color: \"gray\",\n variant: \"soft\",\n size: \"1\",\n children: /* @__PURE__ */ jsx88(PauseIcon2, {})\n }\n )\n }\n ),\n /* @__PURE__ */ jsx88(\n IconButton10,\n {\n onClick: audioThreadContext.recorderProps.stop,\n highContrast: true,\n variant: \"soft\",\n size: \"4\",\n children: /* @__PURE__ */ jsx88(ArrowUpIcon3, {})\n }\n )\n ]\n }\n );\n }\n if (audioThreadContext.status === \"recorderPaused\") {\n return /* @__PURE__ */ jsx88(\n IconButton10,\n {\n onClick: audioThreadContext.recorderProps.resume,\n color: \"red\",\n size: \"4\",\n children: /* @__PURE__ */ jsx88(ResumeIcon, {})\n }\n );\n }\n if (audioThreadContext.status === \"idle\") {\n return /* @__PURE__ */ jsx88(\n IconButton10,\n {\n onClick: () => audioThreadContext.recorderProps.start(),\n size: \"4\",\n color: \"red\"\n }\n );\n }\n if (audioThreadContext.status === \"playing\") {\n return /* @__PURE__ */ jsx88(\n IconButton10,\n {\n onClick: () => {\n audioThreadContext.messageAudioProps.stop();\n superinterfaceContext.createMessageAbortControllerRef.current?.abort();\n audioThreadContext.recorderProps.start();\n },\n size: \"4\",\n color: \"gray\",\n variant: \"soft\",\n children: /* @__PURE__ */ jsx88(StopIcon2, {})\n }\n );\n }\n if (audioThreadContext.status === \"playerPaused\") {\n return /* @__PURE__ */ jsx88(\n IconButton10,\n {\n onClick: () => audioThreadContext.messageAudioProps.play(),\n size: \"4\",\n children: /* @__PURE__ */ jsx88(ResumeIcon, {})\n }\n );\n }\n return /* @__PURE__ */ jsx88(\n IconButton10,\n {\n size: \"4\",\n variant: \"soft\",\n disabled: true\n }\n );\n};\n\n// src/components/threads/AudioThread/Form/index.tsx\nimport { jsx as jsx89, jsxs as jsxs34 } from \"react/jsx-runtime\";\nvar Form = (props) => {\n const audioThreadContext = useAudioThreadContext();\n return /* @__PURE__ */ jsxs34(\n Flex34,\n {\n direction: \"column\",\n align: \"center\",\n ...props,\n children: [\n /* @__PURE__ */ jsxs34(\n Flex34,\n {\n pb: \"3\",\n align: \"center\",\n children: [\n /* @__PURE__ */ jsx89(\n Flex34,\n {\n ml: \"-22.5px\",\n mr: \"2\",\n align: \"center\",\n children: /* @__PURE__ */ jsx89(\n MicIcon,\n {\n style: {\n color: audioThreadContext.status === \"recording\" ? \"var(--accent-11)\" : \"var(--gray-11)\"\n }\n }\n )\n }\n ),\n /* @__PURE__ */ jsx89(\n Flex34,\n {\n px: \"2\",\n py: \"1\",\n style: {\n backgroundColor: audioThreadContext.status === \"recording\" ? \"var(--accent-4)\" : \"var(--gray-4)\",\n borderRadius: \"var(--radius-6)\"\n },\n children: /* @__PURE__ */ jsx89(\n BarsVisualizer,\n {\n visualizationAnalyser: audioThreadContext.recorderProps.visualizationAnalyser,\n backgroundColor: audioThreadContext.status === \"recording\" ? \"var(--accent-11)\" : \"var(--gray-11)\",\n height: \"20px\",\n barWidth: \"12px\"\n }\n )\n }\n )\n ]\n }\n ),\n /* @__PURE__ */ jsx89(ActionButton, {})\n ]\n }\n );\n};\n\n// src/components/threads/AudioThread/index.tsx\nimport { jsx as jsx90, jsxs as jsxs35 } from \"react/jsx-runtime\";\nvar AudioThread = (props) => /* @__PURE__ */ jsxs35(Root12, { ...props, children: [\n /* @__PURE__ */ jsx90(Visualization, {}),\n /* @__PURE__ */ jsx90(Status, {}),\n /* @__PURE__ */ jsx90(Form, {})\n] });\nAudioThread.Root = Root12;\nAudioThread.Visualization = Visualization;\nAudioThread.Status = Status;\nAudioThread.Form = Form;\n\n// src/components/threads/AudioThreadDialog/index.tsx\nimport { jsx as jsx91, jsxs as jsxs36 } from \"react/jsx-runtime\";\nvar AudioThreadDialog = (props) => /* @__PURE__ */ jsxs36(Root9, { ...props, children: [\n /* @__PURE__ */ jsx91(Content7.Root, { children: /* @__PURE__ */ jsx91(AudioThread, {}) }),\n /* @__PURE__ */ jsx91(Trigger, {})\n] });\nAudioThreadDialog.Root = Root9;\nAudioThreadDialog.Trigger = Trigger;\nAudioThreadDialog.Content = Content7;\n\n// src/components/markdown/MarkdownProvider/index.tsx\nimport { useMemo as useMemo18 } from \"react\";\nimport { jsx as jsx92 } from \"react/jsx-runtime\";\nvar MarkdownProvider = ({\n children,\n components: components2,\n ...rest\n}) => {\n const prevMarkdownContext = useMarkdownContext();\n const value = useMemo18(() => merge(prevMarkdownContext, rest), [rest, prevMarkdownContext]);\n return /* @__PURE__ */ jsx92(\n MarkdownContext.Provider,\n {\n value,\n children\n }\n );\n};\n\n// src/components/avatars/Avatar.tsx\nimport { Avatar as RadixAvatar } from \"@radix-ui/themes\";\n\n// src/components/imageAvatars/ImageAvatar/index.tsx\nimport { Avatar as Avatar4 } from \"@radix-ui/themes\";\n\n// src/components/imageAvatars/ImageAvatar/lib/optimizedSrc/path.ts\nvar width = ({\n size\n}) => {\n if (size === \"1\") {\n return 48;\n } else if (size === \"2\") {\n return 64;\n } else if (size === \"3\") {\n return 96;\n } else if (size === \"4\") {\n return 96;\n } else if (size === \"5\") {\n return 128;\n } else if (size === \"6\") {\n return 256;\n } else if (size === \"7\") {\n return 256;\n } else if (size === \"8\") {\n return 256;\n } else if (size === \"9\") {\n return 384;\n }\n return 384;\n};\nvar path = ({\n imageAvatar,\n size\n}) => `/_next/image?url=${encodeURIComponent(imageAvatar.url)}&w=${width({ size })}&q=95`;\n\n// src/components/imageAvatars/ImageAvatar/lib/optimizedSrc/host.ts\nvar host = ({\n superinterfaceContext\n}) => {\n if (!superinterfaceContext.baseUrl) return \"\";\n if (!/^https?:\\/\\//i.test(superinterfaceContext.baseUrl)) return \"\";\n return new URL(superinterfaceContext.baseUrl).origin;\n};\n\n// src/components/imageAvatars/ImageAvatar/lib/optimizedSrc/index.ts\nvar optimizedSrc = ({\n imageAvatar,\n size,\n superinterfaceContext\n}) => {\n if (!imageAvatar.url) return \"\";\n if (imageAvatar.url.endsWith(\".svg\")) return imageAvatar.url;\n return `${host({ superinterfaceContext })}${path({ imageAvatar, size })}`;\n};\n\n// src/components/imageAvatars/ImageAvatar/index.tsx\nimport { jsx as jsx93 } from \"react/jsx-runtime\";\nvar ImageAvatar = ({\n imageAvatar,\n size,\n className,\n style\n}) => {\n const superinterfaceContext = useSuperinterfaceContext();\n return /* @__PURE__ */ jsx93(\n Avatar4,\n {\n className,\n style,\n fallback: \"\",\n src: optimizedSrc({ imageAvatar, size, superinterfaceContext }),\n size\n }\n );\n};\n\n// src/components/iconAvatars/IconAvatar.tsx\nimport { useMemo as useMemo19 } from \"react\";\nimport { Avatar as Avatar5 } from \"@radix-ui/themes\";\n\n// src/lib/iconAvatars/iconAvatarComponents.ts\nimport {\n BackpackIcon,\n RocketIcon,\n MagicWandIcon,\n CubeIcon,\n TargetIcon,\n DiscIcon,\n GlobeIcon,\n StarIcon,\n LightningBoltIcon as LightningBoltIcon2,\n FaceIcon,\n PersonIcon as PersonIcon2,\n HeartIcon\n} from \"@radix-ui/react-icons\";\nvar iconAvatarComponents = {\n [\"BACKPACK\" /* BACKPACK */]: BackpackIcon,\n [\"ROCKET\" /* ROCKET */]: RocketIcon,\n [\"MAGIC_WAND\" /* MAGIC_WAND */]: MagicWandIcon,\n [\"CUBE\" /* CUBE */]: CubeIcon,\n [\"TARGET\" /* TARGET */]: TargetIcon,\n [\"DISC\" /* DISC */]: DiscIcon,\n [\"GLOBE\" /* GLOBE */]: GlobeIcon,\n [\"STAR\" /* STAR */]: StarIcon,\n [\"LIGHTNING_BOLT\" /* LIGHTNING_BOLT */]: LightningBoltIcon2,\n [\"FACE\" /* FACE */]: FaceIcon,\n [\"PERSON\" /* PERSON */]: PersonIcon2,\n [\"HEART\" /* HEART */]: HeartIcon\n};\n\n// src/components/iconAvatars/IconAvatar.tsx\nimport { jsx as jsx94 } from \"react/jsx-runtime\";\nvar IconAvatar = ({\n iconAvatar,\n size,\n className,\n style\n}) => {\n const Component = useMemo19(() => iconAvatarComponents[iconAvatar.name], [iconAvatar]);\n return /* @__PURE__ */ jsx94(\n Avatar5,\n {\n className,\n style,\n size,\n fallback: Component ? /* @__PURE__ */ jsx94(Component, {}) : \"\"\n }\n );\n};\n\n// src/components/avatars/Avatar.tsx\nimport { jsx as jsx95 } from \"react/jsx-runtime\";\nvar Avatar6 = ({\n avatar,\n size = \"1\",\n className,\n style\n}) => {\n if (avatar) {\n if (avatar.type === \"IMAGE\" /* IMAGE */ && avatar.imageAvatar) {\n return /* @__PURE__ */ jsx95(\n ImageAvatar,\n {\n imageAvatar: avatar.imageAvatar,\n size,\n className,\n style\n }\n );\n }\n if (avatar.type === \"ICON\" /* ICON */ && avatar.iconAvatar) {\n return /* @__PURE__ */ jsx95(\n IconAvatar,\n {\n iconAvatar: avatar.iconAvatar,\n size,\n className,\n style\n }\n );\n }\n }\n return /* @__PURE__ */ jsx95(\n RadixAvatar,\n {\n fallback: \"\",\n size,\n className,\n style\n }\n );\n};\n\n// src/components/components/ComponentsProvider.tsx\nimport { useMemo as useMemo20 } from \"react\";\n\n// src/hooks/components/useComponents.ts\nimport { useContext as useContext16 } from \"react\";\nvar useComponents = () => useContext16(ComponentsContext);\n\n// src/components/components/ComponentsProvider.tsx\nimport { jsx as jsx96 } from \"react/jsx-runtime\";\nvar ComponentsProvider = ({\n children,\n ...rest\n}) => {\n const prevComponents = useComponents();\n const value = useMemo20(() => merge(prevComponents, rest), [rest, prevComponents]);\n return /* @__PURE__ */ jsx96(\n ComponentsContext.Provider,\n {\n value,\n children\n }\n );\n};\n\n// src/components/assistants/AssistantProvider/index.tsx\nimport { jsx as jsx97 } from \"react/jsx-runtime\";\nvar AssistantProvider = ({\n children\n}) => {\n const superinterfaceContext = useSuperinterfaceContext();\n const { assistant } = useAssistant({\n assistantId: superinterfaceContext.variables.assistantId\n });\n return /* @__PURE__ */ jsx97(AssistantNameContext.Provider, { value: assistant?.name ?? \"\", children: /* @__PURE__ */ jsx97(\n AssistantAvatarContext.Provider,\n {\n value: /* @__PURE__ */ jsx97(Avatar6, { avatar: assistant?.avatar }),\n children\n }\n ) });\n};\nexport {\n AssistantAvatarContext,\n AssistantNameContext,\n AssistantProvider,\n AudioThread,\n AudioThreadDialog,\n Avatar6 as Avatar,\n ComponentsProvider,\n FunctionBase,\n FunctionComponentsContext,\n MarkdownContext,\n MarkdownProvider,\n RunStep,\n Suggestions,\n SuperinterfaceProvider,\n Thread,\n ThreadDialog,\n ThreadDialogContext,\n UserAvatarContext,\n useAssistant,\n useComponents,\n useCreateMessage,\n useIsMutatingMessage,\n useLatestMessage,\n useMarkdownContext,\n useMessageContext,\n useMessageFormContext,\n useMessages,\n useSuperinterfaceContext,\n useSuperinterfaceContext as useThreadContext,\n useThreadDialogContext\n};\n","import _ from 'lodash'\nimport { customizer } from './customizer'\n\n// @ts-ignore-next-line\nexport const merge = (obj, ...sources) =>\n _.mergeWith(_.cloneDeep(obj), ...sources, customizer)\n","import { detect } from 'detect-browser'\n\nconst unsupportedNames = [\n 'safari',\n 'ios',\n]\n\nexport const isHtmlAudioSupported = !unsupportedNames.includes(detect()?.name || '')\n","'use client'\nimport { useRef } from 'react'\nimport { MessagesPage } from '@/types'\nimport {\n InfiniteData,\n UseInfiniteQueryOptions,\n UseMutationOptions,\n} from '@tanstack/react-query'\nimport { merge } from '@/lib/misc/merge'\nimport { SuperinterfaceContext } from '@/contexts/core/SuperinterfaceContext'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\nimport type { ThreadStorageOptions } from '@/types'\n\nexport type Args = {\n children: React.ReactNode\n baseUrl?: string\n variables?: {\n [key: string]: any\n }\n defaultOptions?: {\n queries?: UseInfiniteQueryOptions<InfiniteData<MessagesPage>>\n mutations?: UseMutationOptions\n }\n threadIdStorageOptions?: ThreadStorageOptions | null\n}\n\nexport const SuperinterfaceProvider = ({\n children,\n baseUrl,\n variables,\n defaultOptions,\n threadIdStorageOptions,\n}: Args) => {\n const superinterfaceContext = useSuperinterfaceContext()\n const createMessageAbortControllerRef = useRef<AbortController | null>(null)\n\n const value = merge(\n superinterfaceContext,\n {\n ...(baseUrl ? { baseUrl } : {}),\n ...(variables ? { variables } : {}),\n ...(defaultOptions ? { defaultOptions } : {}),\n ...(threadIdStorageOptions ? { threadIdStorageOptions } : {}),\n createMessageAbortControllerRef,\n }\n )\n\n return (\n <SuperinterfaceContext.Provider\n value={value}\n >\n {children}\n </SuperinterfaceContext.Provider>\n )\n}\n","import _ from 'lodash'\n\n// @ts-ignore-next-line\nexport const customizer = (objectValue, srcValue) => {\n if (!_.isArray(objectValue)) return\n\n return srcValue\n}\n","'use client'\n\nimport { createContext } from 'react'\nimport { baseUrl } from '@/lib/superinterfaceCloud/baseUrl'\nimport { cookieOptions } from '@/lib/threadIdStorage/cookieOptions'\nimport { localStorageOptions } from '@/lib/threadIdStorage/localStorageOptions'\nimport { isIframe } from '@/lib/iframes/isIframe'\nimport type { ThreadStorageOptions } from '@/types'\n\nexport const SuperinterfaceContext = createContext<{\n baseUrl: string | null\n variables: Record<string, any>\n defaultOptions: {\n queries: Record<string, any>\n mutations: Record<string, any>\n }\n threadIdStorageOptions: ThreadStorageOptions | null\n createMessageAbortControllerRef: React.MutableRefObject<AbortController | null>\n}>({\n baseUrl,\n variables: {},\n defaultOptions: {\n queries: {},\n mutations: {},\n },\n threadIdStorageOptions: isIframe() ? localStorageOptions : cookieOptions,\n createMessageAbortControllerRef: { current: null },\n})\n","export const baseUrl = 'https://superinterface.ai/api/cloud'\n","import Cookies from 'js-cookie'\nimport { key } from '@/lib/threadIdStorage/key'\n\nexport const get = ({\n assistantId,\n}: {\n assistantId: string\n}) => (\n Cookies.get(key({ assistantId })) ?? null\n)\n","export const key = ({\n assistantId,\n}: {\n assistantId: string\n}) => (\n `superinterface-${assistantId}-threadId`\n)\n","import Cookies from 'js-cookie'\nimport { key } from '@/lib/threadIdStorage/key'\n\nexport const set = ({\n assistantId,\n threadId,\n}: {\n assistantId: string\n threadId: string\n}) => (\n Cookies.set(key({ assistantId }), threadId)\n)\n","import Cookies from 'js-cookie'\nimport { key } from '@/lib/threadIdStorage/key'\n\nexport const remove = ({\n assistantId,\n}: {\n assistantId: string\n}) => (\n Cookies.remove(key({ assistantId }))\n)\n","import type { ThreadStorageOptions } from '@/types'\nimport { get } from './get'\nimport { set } from './set'\nimport { remove } from './remove'\n\nexport const cookieOptions: ThreadStorageOptions = {\n get,\n set,\n remove,\n}\n","import { key } from '@/lib/threadIdStorage/key'\n\nexport const get = ({\n assistantId,\n}: {\n assistantId: string\n}) => (\n window.localStorage.getItem(key({ assistantId }))\n)\n","import { key } from '@/lib/threadIdStorage/key'\n\nexport const set = ({\n assistantId,\n threadId,\n}: {\n assistantId: string\n threadId: string\n}) => (\n window.localStorage.setItem(key({ assistantId }), threadId)\n)\n","import { key } from '@/lib/threadIdStorage/key'\n\nexport const remove = ({\n assistantId,\n}: {\n assistantId: string\n}) => (\n window.localStorage.removeItem(key({ assistantId }))\n)\n","import type { ThreadStorageOptions } from '@/types'\nimport { get } from './get'\nimport { set } from './set'\nimport { remove } from './remove'\n\nexport const localStorageOptions: ThreadStorageOptions = {\n get,\n set,\n remove,\n}\n","export const isIframe = () => {\n if (typeof window === 'undefined') return false\n\n return window.self !== window.top\n}\n","'use client'\nimport { useContext } from 'react'\nimport { SuperinterfaceContext } from '@/contexts/core/SuperinterfaceContext'\n\nexport const useSuperinterfaceContext = () => (\n useContext(SuperinterfaceContext)\n)\n","import {\n Flex,\n} from '@radix-ui/themes'\nimport { Message } from '@/components/threads/Thread/Message'\nimport { StyleProps } from '@/types'\nimport { Content } from './Content'\nimport { Progress } from './Progress'\nimport { Root } from './Root'\nimport { NextPageSkeleton } from './NextPageSkeleton'\n\ntype Args = {\n children?: React.ReactNode\n} & StyleProps\n\nexport const Messages = ({\n children,\n className,\n style,\n}: Args) => (\n <Root\n style={style}\n className={className}\n >\n <Flex\n flexShrink=\"0\"\n height=\"var(--space-3)\"\n />\n\n <Progress />\n\n {children}\n\n <Content />\n\n <NextPageSkeleton />\n\n <Flex\n flexShrink=\"0\"\n flexGrow=\"1\"\n minHeight=\"var(--space-5)\"\n />\n </Root>\n)\n\nMessages.Root = Root\nMessages.Message = Message\nMessages.NextPageSkeleton = NextPageSkeleton\n","import _ from 'lodash'\nimport { useMemo } from 'react'\nimport { isEmpty } from 'radash'\nimport {\n Box,\n} from '@radix-ui/themes'\nimport { StartingContentSkeleton } from '@/components/skeletons/StartingContentSkeleton'\nimport { SerializedMessage } from '@/types'\nimport { RunSteps } from '@/components/runSteps/RunSteps'\nimport { useIsMutatingMessage } from '@/hooks/messages/useIsMutatingMessage'\nimport { Provider } from './Provider'\nimport { Attachments } from './Attachments'\nimport { ContentPart } from './ContentPart'\nimport type { StyleProps } from '@/types'\n\ntype Args = {\n message: SerializedMessage\n}\n\nexport const Message = ({\n message,\n className,\n style,\n}: Args & StyleProps) => {\n const [olderRunSteps, laterRunSteps] = useMemo(() => {\n if (!message.runSteps.length) return [[], []]\n\n const messageCreationRunStepIndex = message.runSteps.findIndex((runStep) => {\n if (runStep.step_details.type !== 'message_creation') return\n\n return runStep.step_details.message_creation.message_id === message.id\n })\n\n let nextRunStepIndex = message.runSteps.slice(0, messageCreationRunStepIndex).findLastIndex((runStep) => (\n runStep.step_details.type === 'message_creation'\n ))\n if (nextRunStepIndex === -1) {\n nextRunStepIndex = 0\n }\n const laterRunSteps = message.runSteps.slice(nextRunStepIndex, messageCreationRunStepIndex)\n\n const prevRunStepIndex = message.runSteps.slice(messageCreationRunStepIndex + 1).findIndex((runStep) => (\n runStep.step_details.type === 'message_creation'\n ))\n\n let olderRunSteps\n\n if (prevRunStepIndex === -1) {\n olderRunSteps = message.runSteps.slice(messageCreationRunStepIndex + 1)\n } else {\n olderRunSteps = message.runSteps.slice(messageCreationRunStepIndex + 1, messageCreationRunStepIndex + prevRunStepIndex)\n }\n\n return [olderRunSteps, laterRunSteps]\n }, [message])\n\n const isMutatingMessage = useIsMutatingMessage()\n\n const isInProgress = useMemo(() => {\n if (!isMutatingMessage) return false\n if (message.status === 'in_progress') return true\n\n return message.runSteps.some((rs) => rs.status === 'in_progress')\n }, [message])\n\n return (\n <Provider value={{ message }}>\n <Box\n className={className}\n style={style}\n >\n <RunSteps\n runSteps={olderRunSteps}\n />\n\n <Box>\n <Attachments\n message={message}\n />\n\n {message.content.map((content, index) => (\n <ContentPart\n key={index}\n content={content}\n />\n ))}\n\n {isInProgress && isEmpty(laterRunSteps) && (\n <StartingContentSkeleton />\n )}\n </Box>\n\n <RunSteps\n runSteps={laterRunSteps}\n />\n\n {isInProgress && !isEmpty(laterRunSteps) && (\n <Box>\n <StartingContentSkeleton />\n </Box>\n )}\n </Box>\n </Provider>\n )\n}\n","import {\n Skeleton,\n} from '@radix-ui/themes'\n\nexport const StartingContentSkeleton = () => (\n <Skeleton\n loading\n mt=\"1\"\n height=\"var(--space-4)\"\n width=\"var(--space-4)\"\n style={{\n borderRadius: 'var(--radius-6)',\n flexShrink: 0,\n }}\n />\n)\n","import { Flex } from '@radix-ui/themes'\nimport { useContext } from 'react'\nimport type { SerializedRunStep } from '@/types'\nimport { ComponentsContext } from '@/contexts/components/ComponentsContext'\n\ntype Args = {\n runSteps: SerializedRunStep[]\n}\n\nexport const RunSteps = ({\n runSteps,\n}: Args) => {\n const componentsContext = useContext(ComponentsContext)\n const Component = componentsContext.components.RunStep\n\n return (\n <Flex\n direction=\"column-reverse\"\n >\n {runSteps.map((runStep) => (\n <Component\n key={runStep.id}\n runStep={runStep}\n />\n ))}\n </Flex>\n )\n}\n","'use client'\nimport { createContext } from 'react'\nimport { RunStep } from '@/components/runSteps/RunStep'\n\nexport const ComponentsContext = createContext({\n components: {\n RunStep,\n },\n})\n","import OpenAI from 'openai'\nimport {\n Flex,\n} from '@radix-ui/themes'\nimport type { SerializedRunStep, StyleProps } from '@/types'\nimport { ToolCall } from './ToolCall'\nimport { Starting } from './Starting'\n\ntype Args = {\n stepDetails: OpenAI.Beta.Threads.Runs.ToolCallsStepDetails\n runStep: SerializedRunStep\n} & StyleProps\n\nconst Root = ({\n children,\n className,\n style,\n}: {\n children: React.ReactNode\n} & StyleProps) => (\n <Flex\n direction=\"column\"\n className={className}\n style={style}\n >\n {children}\n </Flex>\n)\n\nexport const ToolCalls = ({\n stepDetails,\n runStep,\n className,\n style,\n}: Args) => (\n <Root\n className={className}\n style={style}\n >\n {!stepDetails.tool_calls.length && (\n <Starting />\n )}\n {stepDetails.tool_calls.map((toolCall) => (\n <ToolCall\n key={toolCall.id}\n toolCall={toolCall}\n runStep={runStep}\n />\n ))}\n </Root>\n)\n\nToolCalls.Root = Root\nToolCalls.Starting = Starting\nToolCalls.ToolCall = ToolCall\n","'use client'\nimport { useContext } from 'react'\nimport OpenAI from 'openai'\nimport type { SerializedRunStep } from '@/types'\nimport { FunctionComponentsContext } from '@/contexts/functions/FunctionComponentsContext'\nimport { DefaultFunction } from './DefaultFunction'\n\ntype Args = {\n fn: OpenAI.Beta.Threads.Runs.FunctionToolCall.Function\n runStep: SerializedRunStep\n}\n\nexport const Fn = ({\n fn,\n runStep,\n}: Args) => {\n const functionComponentsContext = useContext(FunctionComponentsContext)\n const Component = functionComponentsContext[fn.name] || DefaultFunction\n\n return (\n // @ts-ignore-next-line\n <Component\n fn={fn}\n runStep={runStep}\n />\n )\n}\n","'use client'\nimport { createContext } from 'react'\n\ntype FunctionComponents = {\n [key: string]: React.ReactNode\n}\n\nexport const FunctionComponentsContext = createContext({} as FunctionComponents)\n","import OpenAI from 'openai'\nimport {\n Popover,\n Flex,\n} from '@radix-ui/themes'\nimport { ToolCallBase } from '@/components/toolCalls/ToolCallBase'\nimport { ToolCallTitle } from '@/components/toolCalls/ToolCallBase/ToolCallTitle'\nimport { ToolCallIcon } from '@/components/toolCalls/ToolCallBase/ToolCallIcon'\nimport { Content } from './Content'\n\ntype Args = {\n fn: OpenAI.Beta.Threads.Runs.FunctionToolCall.Function\n runStep: OpenAI.Beta.Threads.Runs.RunStep\n title: string\n}\n\nexport const FunctionBase = ({\n fn,\n runStep,\n title,\n}: Args) => (\n <Popover.Root>\n <Popover.Trigger>\n <Flex>\n <ToolCallBase>\n <ToolCallIcon runStep={runStep} />\n <ToolCallTitle>\n {title}\n </ToolCallTitle>\n </ToolCallBase>\n </Flex>\n </Popover.Trigger>\n <Popover.Content\n style={{\n maxHeight: '200px',\n }}\n >\n <Content fn={fn} />\n </Popover.Content>\n </Popover.Root>\n)\n","import {\n Flex,\n Button,\n} from '@radix-ui/themes'\n\nexport const ToolCallBase = ({\n children,\n}: {\n children: React.ReactNode\n}) => (\n <Flex\n py=\"1\"\n ml=\"-2\"\n >\n <Button\n size=\"1\"\n color=\"gold\"\n variant=\"outline\"\n style={{\n boxShadow: 'none',\n }}\n >\n {children}\n </Button>\n </Flex>\n)\n","import {\n Text,\n} from '@radix-ui/themes'\n\ntype Args = {\n children: React.ReactNode\n}\n\nexport const ToolCallTitle = ({\n children,\n}: Args) => (\n <Text\n weight=\"regular\"\n >\n {children}\n </Text>\n)\n","import {\n CircleIcon,\n CircleBackslashIcon,\n CheckCircledIcon,\n} from '@radix-ui/react-icons'\nimport type { SerializedRunStep } from '@/types'\n\ntype Args = {\n runStep: SerializedRunStep\n}\n\nexport const ToolCallIcon = ({\n runStep,\n}: Args) => {\n if (runStep.completed_at) {\n return (\n <CheckCircledIcon />\n )\n } else if (runStep.cancelled_at || runStep.failed_at || runStep.status === 'expired') {\n return (\n <CircleBackslashIcon />\n )\n } else {\n return (\n <CircleIcon />\n )\n }\n}\n","import { useMemo } from 'react'\nimport { Code, Box } from '@radix-ui/themes'\nimport OpenAI from 'openai'\nimport { formattedJsonOrRaw } from './lib/formattedJsonOrRaw'\n\ntype Args = {\n fn: OpenAI.Beta.Threads.Runs.FunctionToolCall.Function\n}\n\nexport const Content = ({\n fn,\n}: Args) => {\n const args = useMemo(() => (\n formattedJsonOrRaw({\n value: fn.arguments,\n })\n ), [fn])\n\n const output = useMemo(() => (\n formattedJsonOrRaw({\n value: fn.output,\n })\n ), [fn])\n\n return (\n <Code\n variant=\"ghost\"\n color=\"gold\"\n style={{\n whiteSpace: 'pre',\n wordBreak: 'break-word',\n }}\n >\n {args && <Box>\n {args}\n </Box>}\n {output && <Box>\n {output}\n </Box>}\n </Code>\n )\n}\n","export const formattedJsonOrRaw = ({\n value,\n}: {\n value: string | null\n}) => {\n if (!value) {\n return null\n }\n\n try {\n return JSON.stringify(JSON.parse(value), null, 2)\n } catch (error) {\n if (typeof value === 'string') {\n return value\n } else {\n return JSON.stringify(value, null, 2)\n }\n }\n}\n","import OpenAI from 'openai'\n\ntype Args = {\n fn: OpenAI.Beta.Threads.Runs.FunctionToolCall.Function\n runStep: OpenAI.Beta.Threads.Runs.RunStep\n}\n\nexport const title = ({\n fn,\n runStep,\n}: Args) => {\n if (runStep.completed_at) {\n return `Finished ${fn.name}`\n } else if (runStep.cancelled_at) {\n return `Cancelled ${fn.name}`\n } else {\n return `Calling ${fn.name}`\n }\n}\n","import OpenAI from 'openai'\nimport { FunctionBase } from '@/components/functions/FunctionBase'\nimport { title } from './lib/title'\n\ntype Args = {\n fn: OpenAI.Beta.Threads.Runs.FunctionToolCall.Function\n runStep: OpenAI.Beta.Threads.Runs.RunStep\n}\n\nexport const DefaultFunction = ({\n fn,\n runStep,\n}: Args) => (\n <FunctionBase\n fn={fn}\n runStep={runStep}\n title={title({ runStep, fn })}\n />\n)\n","import OpenAI from 'openai'\nimport {\n Popover,\n Flex,\n} from '@radix-ui/themes'\nimport { ToolCallBase } from '@/components/toolCalls/ToolCallBase'\nimport { ToolCallTitle } from '@/components/toolCalls/ToolCallBase/ToolCallTitle'\nimport { ToolCallIcon } from '@/components/toolCalls/ToolCallBase/ToolCallIcon'\nimport type { SerializedRunStep } from '@/types'\nimport { Content } from './Content'\n\nexport const CodeInterpreter = ({\n codeInterpreter,\n runStep,\n}: {\n codeInterpreter: OpenAI.Beta.Threads.Runs.CodeInterpreterToolCall.CodeInterpreter\n runStep: SerializedRunStep\n}) => (\n <Popover.Root>\n <Popover.Trigger>\n <Flex>\n <ToolCallBase>\n <ToolCallIcon runStep={runStep} />\n <ToolCallTitle>\n Using code interpreter\n </ToolCallTitle>\n </ToolCallBase>\n </Flex>\n </Popover.Trigger>\n <Popover.Content\n maxHeight=\"200px\"\n >\n <Content\n codeInterpreter={codeInterpreter}\n />\n </Popover.Content>\n </Popover.Root>\n)\n","import { Code, Box } from '@radix-ui/themes'\nimport OpenAI from 'openai'\n\ntype Args = {\n codeInterpreter: OpenAI.Beta.Threads.Runs.CodeInterpreterToolCall.CodeInterpreter\n}\n\nexport const Content = ({\n codeInterpreter,\n}: Args) => {\n if (!codeInterpreter.input) {\n return null\n }\n\n return (\n <Code\n variant=\"ghost\"\n color=\"gold\"\n style={{\n whiteSpace: 'pre',\n wordBreak: 'break-word',\n }}\n >\n <Box>\n {codeInterpreter.input}\n </Box>\n <Box>\n {JSON.stringify(codeInterpreter.outputs)}\n </Box>\n </Code>\n )\n}\n","import { ToolCallBase } from '@/components/toolCalls/ToolCallBase'\nimport { ToolCallTitle } from '@/components/toolCalls/ToolCallBase/ToolCallTitle'\nimport { ToolCallIcon } from '@/components/toolCalls/ToolCallBase/ToolCallIcon'\nimport type { SerializedRunStep, ToolCall } from '@/types'\n\nexport const FileSearch = ({\n runStep,\n toolCall,\n}: {\n toolCall: ToolCall\n runStep: SerializedRunStep\n}) => (\n <ToolCallBase>\n <ToolCallIcon runStep={runStep} />\n <ToolCallTitle>\n Searching files\n </ToolCallTitle>\n </ToolCallBase>\n)\n","import { ToolCallBase } from '@/components/toolCalls/ToolCallBase'\nimport { ToolCallTitle } from '@/components/toolCalls/ToolCallBase/ToolCallTitle'\nimport { ToolCallIcon } from '@/components/toolCalls/ToolCallBase/ToolCallIcon'\nimport type { SerializedRunStep, ToolCall } from '@/types'\n\nexport const Fallback = ({\n runStep,\n toolCall,\n}: {\n toolCall: ToolCall\n runStep: SerializedRunStep\n}) => (\n <ToolCallBase>\n <ToolCallIcon runStep={runStep} />\n <ToolCallTitle>\n Using tool: {toolCall.type}\n </ToolCallTitle>\n </ToolCallBase>\n)\n","import { Fn } from './Fn'\nimport { CodeInterpreter } from './CodeInterpreter'\nimport { FileSearch } from './FileSearch'\nimport { Fallback } from './Fallback'\nimport type { SerializedRunStep, ToolCall as ToolCallType } from '@/types'\n\ntype Args = {\n toolCall: ToolCallType\n runStep: SerializedRunStep\n}\n\nexport const ToolCall = ({\n toolCall,\n runStep,\n}: Args) => {\n if (toolCall.type === 'function') {\n return (\n <Fn\n fn={toolCall.function}\n runStep={runStep}\n />\n )\n }\n\n if (toolCall.type === 'code_interpreter') {\n return (\n <CodeInterpreter\n codeInterpreter={toolCall.code_interpreter}\n runStep={runStep}\n />\n )\n }\n\n if (toolCall.type === 'file_search') {\n return (\n <FileSearch\n toolCall={toolCall}\n runStep={runStep}\n />\n )\n }\n\n return (\n <Fallback\n toolCall={toolCall}\n runStep={runStep}\n />\n )\n}\n","import {\n Popover,\n Text,\n} from '@radix-ui/themes'\nimport {\n CircleIcon,\n} from '@radix-ui/react-icons'\nimport { ToolCallBase } from '@/components/toolCalls/ToolCallBase'\nimport { ToolCallTitle } from '@/components/toolCalls/ToolCallBase/ToolCallTitle'\n\nexport const Starting = () => (\n <Popover.Root>\n <ToolCallBase>\n <CircleIcon />\n <ToolCallTitle>\n Starting actions\n </ToolCallTitle>\n </ToolCallBase>\n <Popover.Content\n style={{\n maxHeight: '500px',\n }}\n >\n <Text>\n Getting ready to connect to domain API\n </Text>\n </Popover.Content>\n </Popover.Root>\n)\n","import type { SerializedRunStep, StyleProps } from '@/types'\nimport { ToolCalls } from './ToolCalls'\n\ntype Args = {\n runStep: SerializedRunStep\n} & StyleProps\n\nexport const RunStep = ({\n runStep,\n className,\n style,\n}: Args) => {\n if (runStep.step_details.type === 'tool_calls') {\n return (\n <ToolCalls\n className={className}\n style={style}\n stepDetails={runStep.step_details}\n runStep={runStep}\n />\n )\n }\n\n return null\n}\n\nRunStep.ToolCalls = ToolCalls\n","import { useMemo } from 'react'\nimport { useIsMutating } from '@tanstack/react-query'\nimport { useThreadContext } from '@/hooks/threads/useThreadContext'\n\nexport const useIsMutatingMessage = () => {\n const threadContext = useThreadContext()\n\n const mutatingMessagesCount = useIsMutating({\n mutationKey: ['createMessage', threadContext.variables],\n })\n\n const isMutatingMessage = useMemo(() => (\n mutatingMessagesCount > 0\n ), [mutatingMessagesCount])\n\n return isMutatingMessage\n}\n","'use client'\nimport { createContext } from 'react'\nimport { SerializedMessage } from '@/types'\n\nexport const MessageContext = createContext<{\n message: SerializedMessage | null\n}>({\n message: null,\n})\n","import { MessageContext } from '@/contexts/messages/MessageContext'\n\nexport const Provider = MessageContext.Provider\n","import { SerializedMessage } from '@/types'\nimport {\n Flex,\n Badge,\n} from '@radix-ui/themes'\nimport {\n FileIcon,\n} from '@radix-ui/react-icons'\n\nexport const Attachments = ({\n message,\n}: {\n message: SerializedMessage\n}) => {\n if (!message.attachments?.length) return null\n\n return (\n <Flex\n align=\"start\"\n pb=\"1\"\n >\n <Badge\n color=\"gray\"\n variant=\"surface\"\n >\n <FileIcon />\n {message.attachments.length} file{message.attachments.length > 1 ? 's' : ''}\n </Badge>\n </Flex>\n )\n}\n","import OpenAI from 'openai'\nimport React, { useState, useEffect, useMemo } from 'react'\nimport { compile } from '@mdx-js/mdx'\nimport { MDXProvider, useMDXComponents } from '@mdx-js/react'\nimport * as runtime from 'react/jsx-runtime'\nimport recmaMdxEscapeMissingComponents from 'recma-mdx-escape-missing-components'\nimport { useMarkdownContext } from '@/hooks/markdown/useMarkdownContext'\n\nconst evaluate = async ({\n code,\n}: {\n code: string\n}) => {\n const fn = new Function('runtime', 'useMDXComponents', code)\n return fn({ ...runtime, useMDXComponents })\n}\n\nexport const TextContent = ({\n content\n}: {\n content: OpenAI.Beta.Threads.Messages.TextContentBlock;\n}) => {\n const { getRemarkPlugins, components } = useMarkdownContext()\n const remarkPlugins = useMemo(() => getRemarkPlugins({ content }), [content, getRemarkPlugins])\n\n const [MDXComponent, setMDXComponent] = useState<React.ComponentType | null>(null)\n\n useEffect(() => {\n const compileMDX = async () => {\n try {\n const compiled = await compile(content.text.value, {\n outputFormat: 'function-body',\n remarkPlugins,\n recmaPlugins: [recmaMdxEscapeMissingComponents],\n providerImportSource: '@mdx-js/react',\n })\n\n const code = String(compiled)\n\n const module = await evaluate({ code })\n\n const { default: MDXContent } = module\n\n setMDXComponent(() => MDXContent)\n } catch (error) {\n }\n }\n\n compileMDX()\n }, [content, remarkPlugins])\n\n if (!MDXComponent) return content.text.value\n\n return (\n <MDXProvider\n components={components}\n >\n <MDXComponent />\n </MDXProvider>\n )\n}\n","import { useContext } from 'react'\nimport { MarkdownContext } from '@/contexts/markdown/MarkdownContext'\n\nexport const useMarkdownContext = () => (\n useContext(MarkdownContext)\n)\n","'use client'\nimport { createContext } from 'react'\nimport { components } from './lib/components'\nimport { getRemarkPlugins } from './lib/getRemarkPlugins'\n\nexport type MarkdownContextType = {\n components: typeof components,\n getRemarkPlugins: typeof getRemarkPlugins,\n}\n\nexport const MarkdownContext = createContext<MarkdownContextType>({\n components,\n getRemarkPlugins,\n})\n","import { Heading, Table } from '@radix-ui/themes'\nimport { Paragraph } from './Paragraph'\nimport { Link } from './Link'\nimport { UnorderedList } from './UnorderedList'\nimport { OrderedList } from './OrderedList'\nimport { ListItem } from './ListItem'\nimport { Strong } from './Strong'\nimport { Pre } from './Pre'\nimport { Code } from './Code'\nimport { Img } from './Img'\nimport { Annotation } from './Annotation'\n\nexport const components: Record<string, any> = {\n p: Paragraph,\n a: Link,\n strong: Strong,\n ul: UnorderedList,\n ol: OrderedList,\n li: ListItem,\n pre: Pre,\n code: Code,\n img: Img,\n annotation: Annotation,\n h1: (props: JSX.IntrinsicElements['h1']) => <Heading as=\"h1\">{props.children}</Heading>,\n h2: (props: JSX.IntrinsicElements['h2']) => <Heading as=\"h2\" size=\"5\">{props.children}</Heading>,\n h3: (props: JSX.IntrinsicElements['h3']) => <Heading as=\"h3\" size=\"4\">{props.children}</Heading>,\n h4: (props: JSX.IntrinsicElements['h4']) => <Heading as=\"h4\" size=\"3\">{props.children}</Heading>,\n h5: (props: JSX.IntrinsicElements['h5']) => <Heading as=\"h5\" size=\"3\">{props.children}</Heading>,\n h6: (props: JSX.IntrinsicElements['h6']) => <Heading as=\"h6\" size=\"3\">{props.children}</Heading>,\n table: (props: JSX.IntrinsicElements['table']) => (\n <>\n <style>{`.rt-TableRootTable { overflow: inherit; }`}</style>\n <Table.Root\n {...props}\n variant=\"surface\"\n mb=\"3\"\n />\n </>\n ),\n thead: (props: JSX.IntrinsicElements['thead']) => (\n <Table.Header\n {...props}\n />\n ),\n tbody: (props: JSX.IntrinsicElements['tbody']) => (\n <Table.Body\n {...props}\n />\n ),\n tr: (props: JSX.IntrinsicElements['tr']) => (\n <Table.Row\n {...props}\n />\n ),\n td: ({ width, ...rest }: JSX.IntrinsicElements['td']) => (\n <Table.Cell\n {...rest}\n width={width as string}\n />\n ),\n th: (props: JSX.IntrinsicElements['th']) => (\n <Table.ColumnHeaderCell\n {...props}\n />\n ),\n}\n","import {\n Box,\n Text,\n} from '@radix-ui/themes'\n\nexport const Paragraph = ({ children }: JSX.IntrinsicElements['p']) => (\n <Box\n pb=\"3\"\n >\n <Text\n size=\"3\"\n style={{\n whiteSpace: 'pre-line',\n wordBreak: 'break-word',\n }}\n >\n {children}\n </Text>\n </Box>\n)\n","import {\n Link as RadixLink,\n} from '@radix-ui/themes'\n\ntype Args = JSX.IntrinsicElements['a']\n\nexport const Link = ({\n children,\n href,\n download,\n target = '_blank',\n}: Args) => (\n <RadixLink\n href={href}\n target={target}\n download={download}\n >\n {children}\n </RadixLink>\n)\n","import {\n Box,\n} from '@radix-ui/themes'\n\nexport const UnorderedList = ({ children }: JSX.IntrinsicElements['ul']) => (\n <Box\n pb=\"3\"\n asChild\n >\n <ul\n style={{\n listStylePosition: 'inside',\n }}\n >\n {children}\n </ul>\n </Box>\n)\n","import {\n Box,\n} from '@radix-ui/themes'\n\nexport const OrderedList = ({ children }: JSX.IntrinsicElements['ul']) => (\n <Box\n pb=\"3\"\n asChild\n >\n <ol\n style={{\n listStylePosition: 'inside',\n }}\n >\n {children}\n </ol>\n </Box>\n)\n","import {\n Box,\n} from '@radix-ui/themes'\n\nexport const ListItem = ({ children }: JSX.IntrinsicElements['li']) => (\n <Box\n pb=\"1\"\n >\n <li>\n {children}\n </li>\n </Box>\n)\n","import {\n Strong as RadixStrong,\n} from '@radix-ui/themes'\n\nexport const Strong = ({ children }: JSX.IntrinsicElements['strong']) => (\n <RadixStrong>\n {children}\n </RadixStrong>\n)\n","import {\n Box,\n} from '@radix-ui/themes'\n\nexport const Pre = ({ children }: JSX.IntrinsicElements['pre']) => (\n <Box\n style={{\n whiteSpace: 'pre-wrap',\n wordBreak: 'break-word',\n }}\n >\n {children}\n </Box>\n)\n","import {\n Code as RadixCode,\n} from '@radix-ui/themes'\nimport { Suggestions } from '@/components/suggestions/Suggestions'\n\nexport const Code = ({\n children,\n className,\n}: JSX.IntrinsicElements['code']) => {\n if (className === 'language-suggestions') {\n return <Suggestions>{children}</Suggestions>\n }\n\n return (\n <RadixCode>\n {children}\n </RadixCode>\n )\n}\n","import { useMemo } from 'react'\nimport { useLatestMessage } from '@/hooks/messages/useLatestMessage'\nimport type { StyleProps } from '@/types'\nimport { Content } from './Content'\nimport { Item } from './Item'\n\nexport const Suggestions = ({\n children,\n className,\n style,\n}: {\n children: React.ReactNode\n} & StyleProps) => {\n const latestMessageProps = useLatestMessage()\n\n const isDisabled = useMemo(() => (\n // @ts-ignore-next-line\n latestMessageProps.latestMessage?.metadata?.isBlocking\n ), [latestMessageProps])\n\n if (latestMessageProps.isLoading) return null\n if (isDisabled) return null\n\n return (\n <Content\n className={className}\n style={style}\n >\n {children}\n </Content>\n )\n}\n\nSuggestions.Item = Item\n","import { useMemo } from 'react'\nimport { useMessages } from '@/hooks/messages/useMessages'\n\nexport const useLatestMessage = () => {\n const props = useMessages()\n\n return useMemo(() => ({\n ...props,\n latestMessage: props.messages[0] || null,\n }), [props])\n}\n","import { useMemo } from 'react'\nimport {\n InfiniteData,\n useInfiniteQuery,\n useQueryClient,\n} from '@tanstack/react-query'\nimport { SerializedMessage, MessagesPage } from '@/types'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\nimport { useThreadContext } from '@/hooks/threads/useThreadContext'\nimport { messagesQueryOptions } from '@/lib/messages/messagesQueryOptions'\n\nconst messages = ({\n props,\n}: {\n props: {\n data: InfiniteData<MessagesPage> | undefined\n },\n}) => {\n if (!props.data) return []\n\n return props.data.pages.reduce<SerializedMessage[]>((acc, page) => (\n acc.concat(page.data)\n ), [])\n}\n\n\nexport const useMessages = () => {\n const queryClient = useQueryClient()\n const threadContext = useThreadContext()\n const superinterfaceContext = useSuperinterfaceContext()\n\n const props = useInfiniteQuery(messagesQueryOptions({\n queryClient,\n threadContext,\n superinterfaceContext,\n }))\n\n return useMemo(() => ({\n ...props,\n // @ts-ignore-next-line\n messages: messages({ props }),\n }), [props])\n}\n","import {\n useQueryClient,\n infiniteQueryOptions,\n} from '@tanstack/react-query'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\nimport { useThreadContext } from '@/hooks/threads/useThreadContext'\nimport { MessagesPage } from '@/types'\nimport { variableParams } from './variableParams'\n\ntype QueryFunctionArgs = {\n queryKey: Readonly<[string, { [key: string]: any }]>\n pageParam?: string\n}\n\nexport const queryOptions = ({\n queryKeyBase,\n path,\n queryClient,\n threadContext,\n superinterfaceContext,\n}: {\n queryKeyBase: string[]\n path: string,\n queryClient: ReturnType<typeof useQueryClient>,\n threadContext: ReturnType<typeof useThreadContext>,\n superinterfaceContext: ReturnType<typeof useSuperinterfaceContext>,\n}) => {\n const queryKey = [...queryKeyBase, threadContext.variables]\n\n return infiniteQueryOptions<MessagesPage>({\n // @ts-ignore-next-line\n queryFn: async ({\n pageParam,\n queryKey,\n }: QueryFunctionArgs) => {\n const [_key, variables] = queryKey\n const params = new URLSearchParams({\n ...(pageParam ? { pageParam } : {}),\n ...variableParams({ variables, superinterfaceContext }),\n })\n\n return fetch(`${superinterfaceContext.baseUrl}${path}?${params}`)\n .then(async (response) => {\n if (response.status !== 200) {\n try {\n const errorResponse = await response.json() as { error: string }\n throw new Error(errorResponse.error)\n } catch (error) {\n throw new Error('Failed to fetch')\n }\n }\n\n return response.json() as Promise<MessagesPage>\n })\n },\n initialPageParam: undefined,\n getNextPageParam: (lastPage: MessagesPage) => {\n if (!lastPage.hasNextPage) return null\n\n return lastPage.lastId\n },\n limit: 10,\n ...threadContext.defaultOptions.queries,\n ...queryClient.getQueryDefaults(queryKey),\n queryKey,\n })\n}\n","import { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\n\nexport const variableParams = ({\n variables,\n superinterfaceContext,\n}: {\n variables: {\n [key: string]: any\n }\n superinterfaceContext: ReturnType<typeof useSuperinterfaceContext>\n}) => {\n if (variables.threadId) return variables\n if (!variables.assistantId) return variables\n if (!superinterfaceContext.threadIdStorageOptions?.get) return variables\n\n const threadId = superinterfaceContext.threadIdStorageOptions.get({ assistantId: variables.assistantId })\n if (!threadId) return variables\n\n return {\n ...variables,\n threadId,\n }\n}\n","import { useQueryClient } from '@tanstack/react-query'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\nimport { useThreadContext } from '@/hooks/threads/useThreadContext'\nimport { queryOptions } from '@/lib/threads/queryOptions'\n\nexport const messagesQueryOptions = ({\n queryClient,\n threadContext,\n superinterfaceContext,\n}: {\n queryClient: ReturnType<typeof useQueryClient>,\n threadContext: ReturnType<typeof useThreadContext>,\n superinterfaceContext: ReturnType<typeof useSuperinterfaceContext>,\n}) => (\n queryOptions({\n queryKeyBase: ['messages'],\n path: '/messages',\n queryClient,\n threadContext,\n superinterfaceContext,\n })\n)\n","import { useMemo } from 'react'\nimport { isEmpty } from 'radash'\nimport { onlyText } from 'react-children-utilities'\nimport { useIsMutatingMessage } from '@/hooks/messages/useIsMutatingMessage'\nimport {\n Flex,\n} from '@radix-ui/themes'\nimport type { StyleProps } from '@/types'\nimport { Item } from './Item'\n\nexport const Content = ({\n children,\n className,\n style,\n}: {\n children: React.ReactNode\n} & StyleProps) => {\n const isMutatingMessage = useIsMutatingMessage()\n\n const suggestions = useMemo(() => (\n onlyText(children).split(/\\r?\\n/).filter((c) => !isEmpty(c)).map((c) => c.trim())\n ), [children])\n\n if (isEmpty(suggestions)) return null\n\n return (\n <Flex\n gap=\"2\"\n py=\"2\"\n wrap=\"wrap\"\n className={className}\n style={style}\n >\n {suggestions.map((suggestion) => (\n <Item\n key={suggestion}\n suggestion={suggestion}\n isDisabled={isMutatingMessage}\n />\n ))}\n </Flex>\n )\n}\n","import {\n ArrowUpIcon,\n} from '@radix-ui/react-icons'\nimport {\n Text,\n Button,\n Spinner,\n} from '@radix-ui/themes'\nimport { useCreateMessage } from '@/hooks/messages/useCreateMessage'\nimport {\n useQueryClient,\n} from '@tanstack/react-query'\nimport { useThreadContext } from '@/hooks/threads/useThreadContext'\nimport { useToasts } from '@/hooks/toasts/useToasts'\nimport { createMessageDefaultOnError } from '@/lib/errors/createMessageDefaultOnError'\nimport type { StyleProps } from '@/types'\n\nexport const Item = ({\n suggestion,\n isDisabled,\n className,\n style,\n}: {\n suggestion: string\n isDisabled: boolean\n} & StyleProps) => {\n const { addToast } = useToasts()\n const queryClient = useQueryClient()\n const threadContext = useThreadContext()\n\n const { createMessage, isPending } = useCreateMessage({\n onError: createMessageDefaultOnError({\n queryClient,\n addToast,\n threadContext,\n }),\n })\n\n return (\n <Content\n onClick={() => {\n createMessage({\n // @ts-ignore-next-line\n content: suggestion,\n })\n }}\n isDisabled={isDisabled}\n isPending={isPending}\n className={className}\n style={style}\n >\n {suggestion}\n </Content>\n )\n}\n\nconst Content = ({\n onClick,\n isDisabled,\n isPending,\n children,\n className,\n style,\n}: {\n onClick: () => void\n isDisabled: boolean\n isPending: boolean\n children: React.ReactNode\n} & StyleProps) => (\n <Button\n className={className}\n variant=\"soft\"\n onClick={onClick}\n disabled={isDisabled}\n style={{\n minHeight: 'var(--base-button-height)',\n height: 'inherit',\n flexShrink: 1,\n ...(style ?? {}),\n }}\n >\n <Text\n size=\"1\"\n weight=\"regular\"\n >\n {children}\n </Text>\n\n <Spinner loading={isPending}>\n <ArrowUpIcon\n style={{\n flexShrink: 0,\n }}\n />\n </Spinner>\n </Button>\n)\n\nItem.Content = Content\n","import { partob } from 'radash'\nimport {\n useMutation,\n useQueryClient,\n} from '@tanstack/react-query'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\nimport { useThreadContext } from '@/hooks/threads/useThreadContext'\nimport { mutationOptions } from './lib/mutationOptions'\n\nexport const useCreateMessage = ({\n onError = () => {},\n}: {\n onError?: (error: unknown) => void\n} = {\n onError: () => {},\n}) => {\n const queryClient = useQueryClient()\n const superinterfaceContext = useSuperinterfaceContext()\n const threadContext = useThreadContext()\n\n const props = useMutation(mutationOptions({\n queryClient,\n threadContext,\n superinterfaceContext,\n onError,\n }))\n\n return {\n ...props,\n createMessage: partob(props.mutateAsync, threadContext.variables),\n }\n}\n","import OpenAI from 'openai'\nimport { omit } from 'radash'\nimport { QueryClient } from '@tanstack/react-query'\nimport { data } from './data'\n\ntype Variables = {\n content: string\n attachments: OpenAI.Beta.Threads.Messages.Message['attachments'] | undefined\n [key: string]: any\n}\n\nexport const onMutate = ({\n queryClient,\n}: {\n queryClient: QueryClient,\n}) => async (\n newMessage: Variables,\n) => {\n const queryKey = ['messages', omit(newMessage, ['content', 'attachments'])]\n await queryClient.cancelQueries({ queryKey })\n\n const prevMessages = queryClient.getQueryData(queryKey)\n\n queryClient.setQueryData(\n queryKey,\n data({ newMessage })\n )\n\n return {\n prevMessages,\n newMessage,\n }\n}\n","import dayjs from 'dayjs'\nimport OpenAI from 'openai'\nimport { optimisticId } from '@/lib/optimistic/optimisticId'\n\ntype Args = {\n newMessage: {\n content: string\n attachments: OpenAI.Beta.Threads.Messages.Message['attachments'] | undefined\n }\n}\n\nexport const data = ({\n newMessage,\n}: Args) => (prevData: any) => {\n const message = {\n id: optimisticId(),\n role: 'user' as OpenAI.Beta.Threads.Messages.Message['role'],\n created_at: dayjs().unix(),\n object: 'thread.message' as OpenAI.Beta.Threads.Messages.Message['object'],\n content: [\n {\n type: 'text',\n text: {\n annotations: [],\n value: newMessage.content,\n },\n } as OpenAI.Beta.Threads.Messages.TextContentBlock,\n ],\n run_id: null,\n assistant_id: null,\n thread_id: null,\n attachments: newMessage.attachments ?? [],\n metadata: {},\n runSteps: [],\n }\n\n if (!prevData) {\n return {\n pageParams: [],\n pages: [\n {\n data: [message],\n hasNextPage: false,\n lastId: message.id,\n },\n ],\n }\n }\n\n const [latestPage, ...pagesRest] = prevData.pages\n\n return {\n ...prevData,\n pages: [\n {\n ...latestPage,\n data: [\n message,\n ...latestPage.data,\n ],\n },\n ...pagesRest,\n ],\n }\n}\n","import { uid } from 'radash'\n\nexport const optimisticId = () => (\n `-${uid(24)}`\n)\n","import { JSONParser } from '@streamparser/json-whatwg'\nimport {\n useQueryClient,\n} from '@tanstack/react-query'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\nimport { useThreadContext } from '@/hooks/threads/useThreadContext'\nimport { handleResponse } from './handleResponse'\nimport { body } from './body'\n\nexport const mutationFn = ({\n superinterfaceContext,\n queryClient,\n threadContext,\n}: {\n superinterfaceContext: ReturnType<typeof useSuperinterfaceContext>\n queryClient: ReturnType<typeof useQueryClient>\n threadContext: ReturnType<typeof useThreadContext>\n}) => async (variables: {\n content: string\n [key: string]: any\n}) => {\n const abortController = new AbortController()\n superinterfaceContext.createMessageAbortControllerRef.current = abortController\n\n const response = await fetch(`${superinterfaceContext.baseUrl}/messages`, {\n method: 'POST',\n body: JSON.stringify(body({\n variables,\n superinterfaceContext,\n })),\n signal: abortController.signal,\n })\n\n if (response.status !== 200) {\n try {\n const errorResponse = await response.json() as { error: string }\n throw new Error(errorResponse.error)\n } catch (error) {\n throw new Error('Failed to send your message, try again. If you are the owner, check the logs.')\n }\n }\n\n if (response.body == null) {\n throw new Error('The response body is empty.');\n }\n\n const parser = new JSONParser({ stringBufferSize: undefined, paths: ['$'], separator: '' })\n const reader = response.body.pipeThrough(parser).getReader()\n\n const messagesQueryKey = ['messages', threadContext.variables]\n\n while (true) {\n const { done, value } = await reader.read()\n\n if (done) break\n\n handleResponse({\n value,\n messagesQueryKey,\n queryClient,\n superinterfaceContext,\n })\n }\n}\n","import OpenAI from 'openai'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\n\nexport const threadCreated = ({\n value,\n superinterfaceContext,\n}: {\n value: OpenAI.Beta.Assistants.AssistantStreamEvent.ThreadCreated\n superinterfaceContext: ReturnType<typeof useSuperinterfaceContext>\n}) => {\n if (!superinterfaceContext.threadIdStorageOptions?.set) return\n // @ts-ignore-next-line\n if (!value.data.metadata?.assistantId) return\n // @ts-ignore-next-line\n if (!value.data.metadata?.threadId) return\n\n superinterfaceContext.threadIdStorageOptions.set({\n // @ts-ignore-next-line\n assistantId: value.data.metadata.assistantId,\n // @ts-ignore-next-line\n threadId: value.data.metadata.threadId,\n })\n}\n","import _ from 'lodash'\n\ntype Args = {\n id: string\n}\n\nexport const isOptimistic = ({\n id,\n}: Args) => (\n _.startsWith(id, '-')\n)\n","import { last } from 'radash'\nimport { SerializedMessage } from '@/types'\nimport { isOptimistic } from '@/lib/optimistic/isOptimistic'\n\nexport const extendMessage = ({\n message,\n messages,\n}: {\n message: SerializedMessage\n messages: SerializedMessage[]\n}) => {\n const prevRunMessages = messages.filter((m: SerializedMessage) => (\n m.run_id === message.run_id\n ))\n\n const prevOptimitisticRunMessages = prevRunMessages.filter((m: SerializedMessage) => (\n isOptimistic({ id: m.id })\n ))\n\n const runSteps = last(prevOptimitisticRunMessages)?.runSteps ?? last(prevRunMessages)?.runSteps ?? []\n\n return {\n ...message,\n runSteps,\n }\n}\n","import { QueryClient } from '@tanstack/react-query'\nimport { SerializedMessage, ThreadMessageCreatedEvent } from '@/types'\nimport { isOptimistic } from '@/lib/optimistic/isOptimistic'\nimport { extendMessage } from './extendMessage'\nimport { MessagesQueryKey } from '@/types'\n\nconst appendMessage = ({\n message,\n messages,\n}: {\n message: SerializedMessage\n messages: SerializedMessage[]\n}) => {\n const prevMessages = messages.filter((m: SerializedMessage) => (\n m.run_id != message.run_id || !isOptimistic({ id: m.id })\n ))\n\n return [\n extendMessage({ message, messages }),\n ...prevMessages,\n ]\n}\n\nexport const threadMessageCreated = ({\n value,\n messagesQueryKey,\n queryClient,\n}: {\n value: ThreadMessageCreatedEvent\n messagesQueryKey: MessagesQueryKey\n queryClient: QueryClient\n}) => (\n queryClient.setQueryData(\n messagesQueryKey,\n (prevData: any) => {\n if (!prevData) {\n return {\n pageParams: [],\n pages: [\n {\n data: appendMessage({ message: value.data, messages: [] }),\n hasNextPage: false,\n lastId: value.data.id,\n },\n ],\n }\n }\n\n const [latestPage, ...pagesRest] = prevData.pages\n\n return {\n ...prevData,\n pages: [\n {\n ...latestPage,\n data: appendMessage({ message: value.data, messages: latestPage.data }),\n },\n ...pagesRest,\n ],\n }\n }\n )\n)\n","import { QueryClient } from '@tanstack/react-query'\nimport OpenAI from 'openai'\nimport _ from 'lodash'\nimport { omit } from 'radash'\nimport { MessagesQueryKey } from '@/types'\n\nconst updatedContentPart = ({\n prevContentPart,\n delta,\n}: {\n prevContentPart: OpenAI.Beta.Threads.Messages.MessageContent\n delta: OpenAI.Beta.Threads.Messages.MessageContentDelta\n}) => {\n if (!prevContentPart) {\n return omit(delta, ['index'])\n }\n\n if (delta.type === 'text' && delta.text && prevContentPart.type == 'text' && prevContentPart.text) {\n return {\n ...prevContentPart,\n text: {\n ...prevContentPart.text,\n value: `${prevContentPart.text.value}${delta.text.value}`,\n annotations: [\n ...(prevContentPart.text.annotations ?? []),\n ...(delta.text.annotations ?? []),\n ]\n },\n }\n }\n\n return prevContentPart\n}\n\nconst updatedContent = ({\n content,\n value,\n}: {\n content: OpenAI.Beta.Threads.Messages.MessageContent\n value: OpenAI.Beta.Assistants.AssistantStreamEvent.ThreadMessageDelta\n}) => {\n if (!value.data.delta.content) return content\n\n const result = _.cloneDeep(content)\n\n value.data.delta.content.forEach((delta: OpenAI.Beta.Threads.Messages.MessageContentDelta) => {\n // @ts-ignore-next-line\n result[delta.index] = updatedContentPart({\n // @ts-ignore-next-line\n prevContentPart: result[delta.index],\n delta,\n })\n })\n\n return result\n}\n\nexport const threadMessageDelta = ({\n value,\n queryClient,\n messagesQueryKey,\n}: {\n value: OpenAI.Beta.Assistants.AssistantStreamEvent.ThreadMessageDelta\n messagesQueryKey: MessagesQueryKey\n queryClient: QueryClient\n}) => (\n queryClient.setQueryData(\n messagesQueryKey,\n (prevData: any) => {\n if (!prevData) {\n return {\n pageParams: [],\n pages: [\n {\n data: [],\n hasNextPage: false,\n lastId: null,\n },\n ],\n }\n }\n\n const [latestPage, ...pagesRest] = prevData.pages\n const [latestMessage, ...messagesRest] = latestPage.data\n\n return {\n ...prevData,\n pages: [\n {\n ...latestPage,\n data: [\n {\n ...latestMessage,\n content: updatedContent({ content: latestMessage.content, value }),\n },\n ...messagesRest,\n ],\n },\n ...pagesRest,\n ],\n }\n }\n )\n)\n","import { replace } from 'radash'\nimport { ThreadMessageCompletedEvent } from '@/types'\nimport { extendMessage } from './extendMessage'\nimport {\n QueryClient,\n} from '@tanstack/react-query'\nimport { MessagesQueryKey } from '@/types'\n\nexport const threadMessageCompleted = ({\n value,\n queryClient,\n messagesQueryKey,\n}: {\n messagesQueryKey: MessagesQueryKey\n value: ThreadMessageCompletedEvent\n queryClient: QueryClient\n}) => (\n queryClient.setQueryData(\n messagesQueryKey,\n (prevData: any) => {\n if (!prevData) {\n return {\n pageParams: [],\n pages: [\n {\n data: [],\n hasNextPage: false,\n lastId: null,\n },\n ],\n }\n }\n\n const [latestPage, ...pagesRest] = prevData.pages\n\n return {\n ...prevData,\n pages: [\n {\n ...latestPage,\n data: replace(latestPage.data, extendMessage({ message: value.data, messages: latestPage.data }), (m) => m.id === value.data.id),\n },\n ...pagesRest,\n ],\n }\n }\n )\n)\n","import { QueryClient } from '@tanstack/react-query'\nimport OpenAI from 'openai'\nimport { optimisticId } from '@/lib/optimistic/optimisticId'\nimport { MessagesQueryKey } from '@/types'\n\nexport const threadRunCreated = ({\n value,\n queryClient,\n messagesQueryKey,\n}: {\n value: OpenAI.Beta.Assistants.AssistantStreamEvent.ThreadRunCreated\n messagesQueryKey: MessagesQueryKey\n queryClient: QueryClient\n}) => (\n queryClient.setQueryData(\n messagesQueryKey,\n (prevData: any) => {\n if (!prevData) return prevData\n\n const [latestPage, ...pagesRest] = prevData.pages\n\n return {\n ...prevData,\n pages: [\n {\n ...latestPage,\n data: [\n {\n id: optimisticId(),\n assistant_id: value.data.assistant_id,\n content: [],\n created_at: value.data.created_at,\n attachments: [],\n metadata: {},\n status: 'in_progress',\n role: 'assistant',\n runSteps: [],\n run_id: value.data.id,\n thread_id: value.data.thread_id,\n },\n ...latestPage.data,\n ]\n },\n ...pagesRest,\n ],\n }\n }\n )\n)\n","import { QueryClient } from '@tanstack/react-query'\nimport OpenAI from 'openai'\nimport { MessagesQueryKey } from '@/types'\n\nexport const threadRunFailed = ({\n value,\n queryClient,\n messagesQueryKey,\n}: {\n value: OpenAI.Beta.Assistants.AssistantStreamEvent.ThreadRunCreated\n messagesQueryKey: MessagesQueryKey\n queryClient: QueryClient\n}) => {\n throw new Error('Failed to send your message, try again. If you are the owner, check the logs.')\n}\n","import { QueryClient } from '@tanstack/react-query'\nimport OpenAI from 'openai'\nimport { SerializedMessage, MessagesQueryKey } from '@/types'\n\nexport const threadRunStepCreated = ({\n value,\n queryClient,\n messagesQueryKey,\n}: {\n value: OpenAI.Beta.Assistants.AssistantStreamEvent.ThreadRunStepCreated\n messagesQueryKey: MessagesQueryKey\n queryClient: QueryClient\n}) => (\n queryClient.setQueryData(\n messagesQueryKey,\n (prevData: any) => {\n if (!prevData) return prevData\n\n const [latestPage, ...pagesRest] = prevData.pages\n\n return {\n ...prevData,\n pages: [\n {\n ...latestPage,\n data: latestPage.data.map((m: SerializedMessage) => {\n if (m.run_id === value.data.run_id) {\n return {\n ...m,\n runSteps: [\n value.data,\n ...m.runSteps,\n ],\n }\n }\n\n return m\n }),\n },\n ...pagesRest,\n ],\n }\n }\n )\n)\n","import { QueryClient } from '@tanstack/react-query'\nimport _ from 'lodash'\nimport { omit } from 'radash'\nimport OpenAI from 'openai'\nimport { SerializedMessage, SerializedRunStep, ThreadRunStepDeltaEvent, MessagesQueryKey } from '@/types'\n\nconst updatedToolCall = ({\n toolCall,\n delta,\n}: {\n toolCall: OpenAI.Beta.Threads.Runs.ToolCall\n delta: OpenAI.Beta.Threads.Runs.ToolCallDelta\n}) => {\n if (!toolCall) {\n return omit(delta, ['index'])\n }\n\n if (delta.type === 'function' && delta.function && toolCall.type === 'function' && toolCall.function) {\n const result = _.cloneDeep(toolCall)\n\n for (const [key, value] of Object.entries(delta.function)) {\n // @ts-ignore-next-line\n result.function[key] = `${result.function[key] ?? ''}${value}`\n }\n\n return result\n }\n\n return toolCall\n}\n\nconst updatedRunStep = ({\n runStep,\n value,\n}: {\n runStep: SerializedRunStep\n value: ThreadRunStepDeltaEvent\n}) => {\n // @ts-ignore-next-line\n if (!runStep?.step_details?.tool_calls) return runStep\n\n if (value.data.delta?.step_details?.type === 'tool_calls') {\n if (!value.data.delta.step_details.tool_calls) return runStep\n\n // @ts-ignore-next-line\n const newToolCalls = _.cloneDeep(runStep.step_details.tool_calls)\n\n value.data.delta.step_details.tool_calls.forEach((delta: OpenAI.Beta.Threads.Runs.ToolCallDelta) => (\n newToolCalls[delta.index] = updatedToolCall({\n toolCall: newToolCalls[delta.index],\n delta,\n })\n ))\n\n return {\n ...runStep,\n step_details: {\n ...runStep.step_details,\n ...value.data.delta.step_details,\n tool_calls: newToolCalls,\n },\n }\n } else {\n return runStep\n }\n}\n\n\nexport const threadRunStepDelta = ({\n value,\n queryClient,\n messagesQueryKey,\n}: {\n value: ThreadRunStepDeltaEvent\n messagesQueryKey: MessagesQueryKey\n queryClient: QueryClient\n}) => (\n queryClient.setQueryData(\n messagesQueryKey,\n (prevData: any) => {\n if (!prevData) return prevData\n\n const [latestPage, ...pagesRest] = prevData.pages\n\n return {\n ...prevData,\n pages: [\n {\n ...latestPage,\n data: latestPage.data.map((m: SerializedMessage) => {\n if (m.run_id === value.data.run_id) {\n return {\n ...m,\n runSteps: m.runSteps.map((rs: SerializedRunStep) => {\n if (rs.id === value.data.id) {\n return updatedRunStep({ runStep: rs, value })\n }\n\n return rs\n }),\n }\n }\n\n return m\n }),\n },\n ...pagesRest,\n ],\n }\n }\n )\n)\n","import { QueryClient } from '@tanstack/react-query'\nimport OpenAI from 'openai'\nimport { SerializedRunStep, SerializedMessage, MessagesQueryKey } from '@/types'\nimport { replace } from 'radash'\n\nexport const threadRunStepCompleted = ({\n value,\n queryClient,\n messagesQueryKey,\n}: {\n value: OpenAI.Beta.Assistants.AssistantStreamEvent.ThreadRunStepCompleted\n messagesQueryKey: MessagesQueryKey\n queryClient: QueryClient\n}) => (\n queryClient.setQueryData(\n messagesQueryKey,\n (prevData: any) => {\n if (!prevData) return prevData\n\n const [latestPage, ...pagesRest] = prevData.pages\n\n return {\n ...prevData,\n pages: [\n {\n ...latestPage,\n data: latestPage.data.map((m: SerializedMessage) => {\n if (m.run_id === value.data.run_id) {\n return {\n ...m,\n runSteps: replace(m.runSteps, value.data, (rs: SerializedRunStep) => rs.id === value.data.id),\n }\n }\n\n return m\n }),\n },\n ...pagesRest,\n ],\n }\n }\n )\n)\n","import { QueryClient } from '@tanstack/react-query'\nimport { ToolCall } from '@/types'\nimport _ from 'lodash'\nimport OpenAI from 'openai'\nimport { map } from 'radash'\nimport { MessagesQueryKey } from '@/types'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\n\nexport const threadRunRequiresAction = async ({\n value,\n queryClient,\n messagesQueryKey,\n superinterfaceContext,\n}: {\n value: OpenAI.Beta.Assistants.AssistantStreamEvent.ThreadRunRequiresAction & {\n data: {\n required_action: {\n type: 'submit_client_tool_outputs'\n submit_client_tool_outputs: {\n tool_calls: ToolCall[]\n }\n }\n }\n }\n messagesQueryKey: MessagesQueryKey\n queryClient: QueryClient\n superinterfaceContext: ReturnType<typeof useSuperinterfaceContext>\n}) => {\n // @ts-ignore-next-line\n if (value.data.required_action.type === 'submit_client_tool_outputs') {\n // @ts-ignore-next-line\n const toolCalls = value.data.required_action.submit_client_tool_outputs.tool_calls\n\n const toolOutputs = await map(toolCalls, async (toolCall: ToolCall) => {\n if (toolCall.type !== 'function') {\n return {\n toolCallId: toolCall.id,\n output: `Error: client tool type ${toolCall.type} is not supported.`,\n }\n }\n\n // @ts-ignore-next-line\n const fn = window[toolCall.function.name as string]\n\n if (!fn) {\n return {\n toolCallId: toolCall.id,\n output: `Error: client function ${toolCall.function.name} is not defined.`,\n }\n }\n\n const args = toolCall.function.arguments\n const parsedArgs = JSON.parse(args)\n\n let output\n\n try {\n output = await fn(parsedArgs)\n } catch (error: any) {\n output = `Error: ${error.message}`\n }\n\n return {\n toolCallId: toolCall.id,\n output,\n }\n })\n\n return fetch(`${superinterfaceContext.baseUrl}/threads/runs/submit-client-tool-outputs`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n toolOutputs,\n ...superinterfaceContext.variables,\n })\n })\n }\n}\n","import { threadCreated } from './threadCreated'\nimport { threadMessageCreated } from './threadMessageCreated'\nimport { threadMessageDelta } from './threadMessageDelta'\nimport { threadMessageCompleted } from './threadMessageCompleted'\nimport { threadRunCreated } from './threadRunCreated'\nimport { threadRunFailed } from './threadRunFailed'\nimport { threadRunStepCreated } from './threadRunStepCreated'\nimport { threadRunStepDelta } from './threadRunStepDelta'\nimport { threadRunStepCompleted } from './threadRunStepCompleted'\nimport { threadRunRequiresAction } from './threadRunRequiresAction'\n\nexport const handlers = {\n 'thread.created': threadCreated,\n 'thread.message.created': threadMessageCreated,\n 'thread.message.delta': threadMessageDelta,\n 'thread.message.completed': threadMessageCompleted,\n 'thread.run.created': threadRunCreated,\n 'thread.run.failed': threadRunFailed,\n 'thread.run.step.created': threadRunStepCreated,\n 'thread.run.step.delta': threadRunStepDelta,\n 'thread.run.step.completed': threadRunStepCompleted,\n 'thread.run.requires_action': threadRunRequiresAction,\n}\n","import OpenAI from 'openai'\nimport {\n useQueryClient,\n} from '@tanstack/react-query'\nimport { MessagesQueryKey } from '@/types'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\nimport { handlers } from './handlers'\n\nexport const handleResponse = ({\n value,\n messagesQueryKey,\n queryClient,\n superinterfaceContext,\n}: {\n value: {\n value: OpenAI.Beta.Assistants.AssistantStreamEvent\n }\n messagesQueryKey: MessagesQueryKey\n queryClient: ReturnType<typeof useQueryClient>\n superinterfaceContext: ReturnType<typeof useSuperinterfaceContext>\n}) => {\n // @ts-ignore-next-line\n const handler = handlers[value.value.event]\n\n if (!handler) {\n return console.log('Missing handler', { value })\n }\n\n return handler({\n value: value.value,\n queryClient,\n messagesQueryKey,\n superinterfaceContext,\n })\n}\n","import { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\n\nexport const body = ({\n variables,\n superinterfaceContext,\n}: {\n variables: {\n [key: string]: any\n }\n superinterfaceContext: ReturnType<typeof useSuperinterfaceContext>\n}) => {\n if (variables.threadId) return variables\n if (!variables.assistantId) return variables\n if (!superinterfaceContext.threadIdStorageOptions?.get) return variables\n\n const threadId = superinterfaceContext.threadIdStorageOptions.get({ assistantId: variables.assistantId })\n if (!threadId) return variables\n\n return {\n ...variables,\n threadId,\n }\n}\n","import _ from 'lodash'\nimport {\n useQueryClient,\n} from '@tanstack/react-query'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\nimport { useThreadContext } from '@/hooks/threads/useThreadContext'\nimport { onMutate } from './onMutate'\nimport { mutationFn } from './mutationFn'\n\nexport const mutationOptions = ({\n queryClient,\n threadContext,\n superinterfaceContext,\n onError,\n}: {\n queryClient: ReturnType<typeof useQueryClient>,\n threadContext: ReturnType<typeof useThreadContext>,\n superinterfaceContext: ReturnType<typeof useSuperinterfaceContext>,\n onError: (error: unknown) => void\n}) => {\n const mutationKey = ['createMessage', threadContext.variables]\n\n return {\n mutationFn: mutationFn({\n queryClient,\n superinterfaceContext,\n threadContext,\n }),\n onMutate: onMutate({ queryClient }),\n onError,\n ...threadContext.defaultOptions.mutations,\n ...queryClient.getMutationDefaults(mutationKey),\n mutationKey,\n }\n}\n","import { useContext } from 'react'\nimport { ToastsContext } from '@/contexts/toasts/ToastsContext'\n\nexport const useToasts = () => (\n useContext(ToastsContext)\n)\n","'use client'\nimport { createContext } from 'react'\nimport { Toast } from '@/types'\n\nexport const ToastsContext = createContext<{\n toasts: Toast[]\n addToast: (toast: Toast) => void\n}>({\n toasts: [],\n addToast: () => {},\n})\n","import {\n QueryClient,\n} from '@tanstack/react-query'\nimport { Toast } from '@/types'\nimport { useThreadContext } from '@/hooks/threads/useThreadContext'\n\nexport const createMessageDefaultOnError = ({\n queryClient,\n addToast,\n threadContext,\n}: {\n queryClient: QueryClient\n addToast: (toast: Toast) => void\n threadContext: ReturnType<typeof useThreadContext>\n}) => (error: any) => {\n if (error.name === 'AbortError') {\n queryClient.invalidateQueries({ queryKey: ['messages', threadContext.variables] })\n queryClient.invalidateQueries({ queryKey: ['runs', threadContext.variables] })\n return\n }\n\n addToast({ type: 'error', message: error.message })\n}\n","import {\n Box,\n} from '@radix-ui/themes'\n\nexport const Image = (props: JSX.IntrinsicElements['img']) => (\n <Box\n pb=\"3\"\n >\n <img\n {...props}\n style={{\n maxWidth: '100%',\n height: 'auto',\n }}\n />\n </Box>\n)\n","// list is from https://www.npmjs.com/package/video-extensions\nconst videoExtensions = [\n '3g2',\n '3gp',\n 'aaf',\n 'asf',\n 'avchd',\n 'avi',\n 'drc',\n 'flv',\n 'm2v',\n 'm3u8',\n 'm4p',\n 'm4v',\n 'mkv',\n 'mng',\n 'mov',\n 'mp2',\n 'mp4',\n 'mpe',\n 'mpeg',\n 'mpg',\n 'mpv',\n 'mxf',\n 'nsv',\n 'ogg',\n 'ogv',\n 'qt',\n 'rm',\n 'rmvb',\n 'roq',\n 'svi',\n 'vob',\n 'webm',\n 'wmv',\n 'yuv',\n]\n\nexport const isVideoSrc = ({\n src,\n}: {\n src: string\n}) => (\n videoExtensions.includes(src.split('.').pop() || '')\n)\n","export const isAudioSrc = ({\n src,\n}: {\n src: string\n}) => (\n src.endsWith('.mp3') || src.endsWith('.wav')\n)\n","import {\n Flex,\n} from '@radix-ui/themes'\nimport '@vidstack/react/player/styles/base.css'\nimport {\n VideoMimeType,\n MediaPlayer,\n MediaProvider,\n Controls,\n} from '@vidstack/react'\nimport { PlayButton } from '@/components/media/PlayButton'\nimport { VolumeButton } from '@/components/media/VolumeButton'\nimport { Time } from '@/components/media/Time'\nimport { MediaContainer } from '@/components/media/MediaContainer'\nimport { FullscreenButton } from './FullscreenButton'\n\nexport const Video = ({\n src,\n}: {\n src: string\n}) => (\n <MediaContainer>\n <MediaPlayer\n src={{\n src,\n type: `video/${src.split('.').pop()}` as VideoMimeType,\n }}\n playsInline\n hideControlsOnMouseLeave\n crossOrigin\n >\n <MediaProvider />\n\n <style>\n {`\n .superinterface-video-controls {\n opacity: 0;\n transition: opacity 0.2s ease-out;\n }\n\n .superinterface-video-controls[data-visible] {\n opacity: 1;\n }\n `}\n </style>\n <Flex\n asChild\n position=\"absolute\"\n bottom=\"0\"\n left=\"0\"\n right=\"0\"\n className=\"superinterface-video-controls\"\n p=\"3\"\n style={{\n zIndex: 10,\n background: 'var(--accent-4)',\n }}\n >\n <Controls.Root>\n <Flex\n asChild\n align=\"center\"\n gap=\"3\"\n flexGrow=\"1\"\n >\n <Controls.Group>\n <PlayButton />\n <Time />\n <VolumeButton />\n <FullscreenButton />\n </Controls.Group>\n </Flex>\n </Controls.Root>\n </Flex>\n </MediaPlayer>\n </MediaContainer>\n)\n","import {\n PlayButton as VidstackPlayButton,\n useMediaState,\n} from '@vidstack/react'\nimport {\n IconButton,\n} from '@radix-ui/themes'\nimport {\n PlayIcon,\n PauseIcon,\n} from '@radix-ui/react-icons'\n\nexport const PlayButton = () => {\n const isPaused = useMediaState('paused')\n\n return (\n <IconButton\n variant=\"ghost\"\n asChild\n >\n <VidstackPlayButton>\n {isPaused ? <PlayIcon /> : <PauseIcon />}\n </VidstackPlayButton>\n </IconButton>\n )\n}\n","import {\n MuteButton,\n useMediaState,\n useMediaRemote,\n} from '@vidstack/react'\nimport {\n IconButton,\n HoverCard,\n Slider,\n} from '@radix-ui/themes'\nimport {\n SpeakerModerateIcon,\n SpeakerOffIcon,\n} from '@radix-ui/react-icons'\n\nexport const VolumeButton = () => {\n const volume = useMediaState('volume')\n const isMuted = useMediaState('muted')\n const remote = useMediaRemote()\n\n return (\n <HoverCard.Root>\n <HoverCard.Trigger>\n <IconButton\n variant=\"ghost\"\n asChild\n >\n <MuteButton>\n {(isMuted || volume === 0) ? <SpeakerOffIcon /> : <SpeakerModerateIcon />}\n </MuteButton>\n </IconButton>\n </HoverCard.Trigger>\n <HoverCard.Content\n size=\"1\"\n side=\"top\"\n height=\"100px\"\n >\n <Slider\n size=\"1\"\n variant=\"soft\"\n orientation=\"vertical\"\n value={[volume * 100]}\n onValueChange={([value]) => (\n remote.changeVolume(value / 100)\n )}\n />\n </HoverCard.Content>\n </HoverCard.Root>\n )\n}\n","import {\n useState,\n useEffect,\n useMemo,\n} from 'react'\nimport {\n useMediaState,\n useMediaRemote,\n} from '@vidstack/react'\nimport {\n Slider,\n} from '@radix-ui/themes'\n\nexport const Time = () => {\n const time = useMediaState('currentTime')\n const duration = useMediaState('duration')\n const seeking = useMediaState('seeking')\n const canSeek = useMediaState('canSeek')\n const remote = useMediaRemote()\n\n const [value, setValue] = useState(0)\n\n useEffect(() => {\n if (seeking) return;\n setValue((time / duration) * 100);\n }, [time, duration, seeking])\n\n const step = useMemo(() => (\n (1 / duration) * 100\n ), [duration])\n\n return (\n <Slider\n size=\"1\"\n variant=\"soft\"\n value={[value]}\n disabled={!canSeek}\n step={Number.isFinite(step) ? step : 1}\n onValueChange={([value]) => {\n setValue(value)\n remote.seeking((value / 100) * duration)\n }}\n onValueCommit={([value]) => {\n remote.seek((value / 100) * duration)\n }}\n />\n )\n}\n","import {\n Card,\n Inset,\n} from '@radix-ui/themes'\n\nexport const MediaContainer = ({\n children,\n}: {\n children: React.ReactNode\n}) => (\n <Card\n mb=\"3\"\n >\n <Inset\n clip=\"padding-box\"\n style={{\n display: 'flex',\n flexDirection: 'column',\n }}\n >\n {children}\n </Inset>\n </Card>\n)\n","import {\n FullscreenButton as VidstackFullscreenButton,\n useMediaState,\n} from '@vidstack/react'\nimport {\n IconButton,\n} from '@radix-ui/themes'\nimport {\n EnterFullScreenIcon,\n ExitFullScreenIcon,\n} from '@radix-ui/react-icons'\n\nexport const FullscreenButton = () => {\n const isFullscreen = useMediaState('fullscreen')\n\n return (\n <IconButton\n variant=\"ghost\"\n asChild\n >\n <VidstackFullscreenButton>\n {isFullscreen ? <ExitFullScreenIcon /> : <EnterFullScreenIcon />}\n </VidstackFullscreenButton>\n </IconButton>\n )\n}\n","import {\n Flex,\n} from '@radix-ui/themes'\nimport '@vidstack/react/player/styles/base.css'\nimport {\n MediaPlayer,\n MediaProvider,\n Controls,\n AudioMimeType,\n} from '@vidstack/react'\nimport { PlayButton } from '@/components/media/PlayButton'\nimport { VolumeButton } from '@/components/media/VolumeButton'\nimport { Time } from '@/components/media/Time'\nimport { MediaContainer } from '@/components/media/MediaContainer'\n\nexport const Audio = ({\n src,\n}: {\n src: string\n}) => (\n <MediaContainer>\n <MediaPlayer\n src={{\n src,\n type: `audio/${src.split('.').pop()}` as AudioMimeType,\n }}\n viewType=\"audio\"\n crossOrigin\n playsInline\n >\n <MediaProvider />\n\n <Flex\n asChild\n p=\"3\"\n flexGrow=\"1\"\n style={{\n zIndex: 10,\n background: 'var(--accent-4)',\n }}\n >\n <Controls.Root>\n <Flex\n asChild\n align=\"center\"\n gap=\"3\"\n flexGrow=\"1\"\n >\n <Controls.Group>\n <PlayButton />\n <Time />\n <VolumeButton />\n </Controls.Group>\n </Flex>\n </Controls.Root>\n </Flex>\n </MediaPlayer>\n </MediaContainer>\n)\n","import { Image } from '@/components/images/Image'\nimport { isVideoSrc } from './lib/isVideoSrc'\nimport { isAudioSrc } from './lib/isAudioSrc'\nimport { Video } from './Video'\nimport { Audio } from './Audio'\n\nexport const Img = (props: JSX.IntrinsicElements['img']) => {\n if (!props.src) {\n return (\n <Image\n {...props}\n />\n )\n } else if (isVideoSrc({ src: props.src })) {\n return (\n <Video\n src={props.src!}\n />\n )\n } else if (isAudioSrc({ src: props.src })) {\n return (\n <Audio\n src={props.src!}\n />\n )\n } else {\n return (\n <Image\n {...props}\n />\n )\n }\n}\n","import {\n QuoteIcon,\n} from '@radix-ui/react-icons'\nimport OpenAI from 'openai'\nimport { AnnotationBase } from './AnnotationBase'\nimport { FilePathAnnotation } from './FilePathAnnotation'\n\nexport const Annotation = ({\n annotation,\n children,\n}: {\n annotation: OpenAI.Beta.Threads.Messages.Annotation\n children: React.ReactNode\n}) => {\n if (annotation.type === 'file_citation') {\n return (\n <AnnotationBase\n icon={<QuoteIcon />}\n content=\"File cited.\"\n />\n )\n } else if (annotation.type === 'file_path') {\n return (\n <FilePathAnnotation\n annotation={annotation}\n >\n {children}\n </FilePathAnnotation>\n )\n }\n\n return null\n}\n","import {\n IconButton,\n Popover,\n Flex,\n Text,\n} from '@radix-ui/themes'\n\nexport const AnnotationBase = ({\n icon,\n content,\n}: {\n icon: React.ReactNode,\n content: string\n}) => (\n <Popover.Root>\n <Popover.Trigger>\n <IconButton\n variant=\"soft\"\n color=\"gray\"\n size=\"1\"\n >\n {icon}\n </IconButton>\n </Popover.Trigger>\n <Popover.Content\n size=\"1\"\n >\n <Flex\n direction=\"column\"\n >\n <Text\n size=\"1\"\n color=\"gray\"\n >\n {content}\n </Text>\n </Flex>\n </Popover.Content>\n </Popover.Root>\n)\n","import OpenAI from 'openai'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\nimport { Link } from '@/contexts/markdown/MarkdownContext/lib/components/Link'\n\nexport const FilePathAnnotation = ({\n annotation,\n children,\n}: {\n annotation: OpenAI.Beta.Threads.Messages.FilePathAnnotation\n children: React.ReactNode\n}) => {\n const superinterfaceContext = useSuperinterfaceContext()\n const nextSearchParams = new URLSearchParams(superinterfaceContext.variables)\n\n return (\n <Link\n href={`${superinterfaceContext.baseUrl}/files/${annotation.file_path.file_id}/contents?${nextSearchParams}`}\n target=\"_self\"\n download\n >\n {children}\n </Link>\n )\n}\n","import OpenAI from 'openai'\nimport remarkGfm from 'remark-gfm'\nimport { remarkAnnotation } from '@/lib/remark/remarkAnnotation'\n\nexport const getRemarkPlugins = ({\n content,\n}: {\n content: OpenAI.Beta.Threads.Messages.TextContentBlock\n}) => [\n remarkAnnotation({ content }),\n remarkGfm,\n]\n","import OpenAI from 'openai'\nimport { isNumber } from 'radash'\nimport type { Node, Literal, Position } from 'unist'\nimport type { Text, Link } from 'mdast'\n// @ts-ignore-next-line\nimport flatMap from 'unist-util-flatmap'\n\ninterface AnnotationNode extends Literal {\n type: 'annotation'\n value: string\n position?: Position\n data: {\n hName: 'annotation'\n hProperties: {\n annotation: any\n }\n }\n}\n\nconst sortedAnnotations = ({\n content,\n}: {\n content: OpenAI.Beta.Threads.Messages.TextContentBlock\n}) =>\n content.text.annotations.sort((a, b) => a.start_index - b.start_index)\n\nexport const remarkAnnotation = ({\n content,\n}: {\n content: OpenAI.Beta.Threads.Messages.TextContentBlock\n}) => {\n return () => {\n return (tree: any) => {\n flatMap(tree, (node: Node) => {\n // Process text and link nodes\n if (node.type === 'text' || node.type === 'link') {\n return processNodeWithAnnotations({ node, content })\n } else {\n // Return other nodes as-is\n return [node]\n }\n })\n }\n }\n}\n\nconst processNodeWithAnnotations = ({\n node,\n content,\n}: {\n node: Node\n content: OpenAI.Beta.Threads.Messages.TextContentBlock\n}): Node[] => {\n if (!content.text?.annotations?.length) {\n return [node]\n }\n\n if (!node.position) {\n return [node]\n }\n\n const annotations = sortedAnnotations({ content })\n\n if (node.type === 'text') {\n // node is a Text node\n return processTextNode({ node: node as Text, annotations })\n } else if (node.type === 'link') {\n // node is a Link node\n const linkNode = node as Link\n // Process link node's children\n linkNode.children = flatMap(linkNode.children, (childNode: Node) => {\n if (childNode.type === 'text') {\n return processTextNode({ node: childNode as Text, annotations })\n } else {\n return [childNode]\n }\n })\n return [linkNode]\n } else {\n // Return node as-is\n return [node]\n }\n}\n\nconst processTextNode = ({\n node,\n annotations,\n}: {\n node: Text\n annotations: any[]\n}): Node[] => {\n if (!node.position || !node.value) {\n return [node]\n }\n\n const nodeStart = node.position.start.offset!\n const nodeEnd = node.position.end.offset!\n\n if (!isNumber(nodeStart) || !isNumber(nodeEnd)) {\n return [node]\n }\n\n const newNodes: Node[] = []\n let lastIndex = nodeStart\n\n annotations.forEach((annotation) => {\n const annotationStart = annotation.start_index\n const annotationEnd = annotation.end_index\n\n if (nodeEnd <= annotationStart || nodeStart >= annotationEnd) {\n return\n }\n\n const start = Math.max(nodeStart, annotationStart)\n const end = Math.min(nodeEnd, annotationEnd)\n\n if (lastIndex < start) {\n newNodes.push(createTextNode({ node, startOffset: lastIndex, endOffset: start }))\n }\n\n newNodes.push(\n createAnnotationNode({\n node,\n startOffset: start,\n endOffset: end,\n annotation,\n })\n )\n lastIndex = end\n })\n\n if (lastIndex < nodeEnd) {\n newNodes.push(createTextNode({ node, startOffset: lastIndex, endOffset: nodeEnd }))\n }\n\n return newNodes\n}\n\nconst createTextNode = ({\n node,\n startOffset,\n endOffset,\n}: {\n node: Text\n startOffset: number\n endOffset: number\n}): Text => {\n const valueStart = startOffset - node.position!.start.offset!\n const valueEnd = endOffset - node.position!.start.offset!\n\n return {\n type: 'text',\n value: node.value.slice(valueStart, valueEnd),\n position: {\n start: {\n ...node.position!.start,\n offset: startOffset,\n },\n end: {\n ...node.position!.end,\n offset: endOffset,\n },\n },\n }\n}\n\nconst createAnnotationNode = ({\n node,\n startOffset,\n endOffset,\n annotation,\n}: {\n node: Text\n startOffset: number\n endOffset: number\n annotation: any\n}): AnnotationNode => {\n const valueStart = startOffset - node.position!.start.offset!\n const valueEnd = endOffset - node.position!.start.offset!\n\n return {\n type: 'annotation',\n value: node.value.slice(valueStart, valueEnd),\n position: {\n start: {\n ...node.position!.start,\n offset: startOffset,\n },\n end: {\n ...node.position!.end,\n offset: endOffset,\n },\n },\n data: {\n hName: 'annotation',\n hProperties: {\n annotation,\n },\n },\n }\n}\n","import OpenAI from 'openai'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\nimport { Image } from '@/components/images/Image'\n\nexport const ImageFileContent = ({\n content,\n}: {\n content: OpenAI.Beta.Threads.Messages.ImageFileContentBlock\n}) => {\n const superinterfaceContext = useSuperinterfaceContext()\n const nextSearchParams = new URLSearchParams(superinterfaceContext.variables)\n\n return (\n <Image\n alt=\"\"\n src={`${superinterfaceContext.baseUrl}/files/${content.image_file.file_id}/contents?${nextSearchParams}`}\n />\n )\n}\n","import OpenAI from 'openai'\nimport { TextContent } from './TextContent'\nimport { ImageFileContent } from './ImageFileContent'\n\nexport const ContentPart = ({\n content,\n}: {\n content: OpenAI.Beta.Threads.Messages.Message['content'][0]\n}) => {\n if (content.type === 'text') {\n return (\n <TextContent\n content={content}\n />\n )\n }\n\n if (content.type === 'image_file') {\n return (\n <ImageFileContent\n content={content}\n />\n )\n }\n\n return null\n}\n","'use client'\nimport { useEffect } from 'react'\nimport { useMessages } from '@/hooks/messages/useMessages'\nimport { useMessageGroups } from '@/hooks/messageGroups/useMessageGroups'\nimport { MessageGroup as MessageGroupType } from '@/types'\nimport { MessagesSkeleton } from '@/components/skeletons/MessagesSkeleton'\nimport { useToasts } from '@/hooks/toasts/useToasts'\nimport { MessageGroup } from './MessageGroup'\n\nexport const Content = () => {\n const {\n messages,\n isLoading,\n isLoadingError,\n } = useMessages()\n\n const { addToast } = useToasts()\n\n const { messageGroups } = useMessageGroups({\n messages,\n })\n\n useEffect(() => {\n if (isLoadingError) {\n addToast({ type: 'error', message: 'Could not load messages. Please try again.' })\n }\n }, [isLoadingError, addToast])\n\n if (isLoading || isLoadingError) {\n return (\n <MessagesSkeleton />\n )\n }\n\n return (\n <>\n {messageGroups.map((messageGroup: MessageGroupType) => (\n <MessageGroup\n key={messageGroup.id}\n messageGroup={messageGroup}\n />\n ))}\n </>\n )\n}\n","import { useMemo } from 'react'\nimport { messageGroups as getMessageGroups } from './lib/messageGroups'\nimport { SerializedMessage } from '@/types'\n\ntype Args = {\n messages: SerializedMessage[]\n}\n\nexport const useMessageGroups = ({\n messages,\n}: Args) => (\n useMemo(\n () => ({\n messageGroups: getMessageGroups({ messages }),\n }),\n [messages]\n )\n)\n","import _ from 'lodash'\nimport { last } from 'radash'\nimport { SerializedMessage, MessageGroup } from '@/types'\nimport { order } from '@/lib/messages/order'\nimport { newGroup } from './newGroup'\n\ntype Args = {\n messages: SerializedMessage[]\n}\n\nexport const messageGroups = ({\n messages,\n}: Args) =>\n _.reduce(\n order({ messages }),\n (groups: MessageGroup[], message: SerializedMessage) => {\n const group = last(groups)\n\n if (!group) return newGroup({ groups, message })\n\n if (group.role !== message.role) {\n return newGroup({\n groups,\n message,\n })\n }\n\n return [\n ..._.dropRight(groups),\n {\n ...group,\n messages: [...group.messages, message],\n },\n ]\n },\n []\n )\n","import { sort } from 'radash'\nimport { SerializedMessage } from '@/types'\n\ntype Args = {\n messages: SerializedMessage[]\n}\n\nexport const order = ({ messages }: Args) =>\n sort(messages, m => m.created_at, true)\n","import { SerializedMessage } from '@/types'\n\ntype Args = {\n message: SerializedMessage\n}\n\nexport const newGroupItem = ({ message }: Args) => ({\n id: message.id,\n role: message.role,\n createdAt: message.created_at,\n messages: [message],\n})\n","import { SerializedMessage, MessageGroup } from '@/types'\nimport { newGroupItem } from './newGroupItem'\n\ntype Args = {\n groups: MessageGroup[]\n message: SerializedMessage\n}\n\nexport const newGroup = ({ groups, message }: Args) => [\n ...groups,\n newGroupItem({\n message,\n }),\n]\n","import { forwardRef } from 'react'\nimport {\n Flex,\n Avatar,\n Box,\n Skeleton,\n} from '@radix-ui/themes'\nimport { MessageGroupBase } from '@/components/messageGroups/MessageGroupBase'\nimport { Name } from '@/components/messageGroups/MessageGroupBase/Name'\n\nexport const MessagesSkeleton = forwardRef(function MessagesSkeleton(_props, ref) {\n return (\n <MessageGroupBase\n // @ts-ignore-next-line\n ref={ref}\n >\n <Skeleton loading>\n <Avatar\n fallback={<Flex />}\n size=\"1\"\n />\n </Skeleton>\n\n <Box\n pb=\"3\"\n >\n <Name>\n <Skeleton\n loading\n style={{\n width: '128px',\n }}\n />\n </Name>\n\n <Skeleton\n loading\n style={{\n width: '256px',\n }}\n />\n\n <Skeleton\n loading\n style={{\n width: '256px',\n marginTop: 'var(--space-2)',\n }}\n />\n\n <Skeleton\n loading\n style={{\n width: '256px',\n marginTop: 'var(--space-2)',\n }}\n />\n </Box>\n </MessageGroupBase>\n )\n})\n","import { forwardRef } from 'react'\nimport {\n Flex,\n Container,\n} from '@radix-ui/themes'\n\ntype Args = {\n children: React.ReactNode\n}\n\nexport const MessageGroupBase = forwardRef(function MessageGroupBase({\n children,\n}: Args, ref: React.Ref<HTMLDivElement>) {\n return (\n <Container\n ref={ref}\n size=\"2\"\n flexGrow=\"0\"\n >\n <Flex\n flexShrink=\"0\"\n gap=\"3\"\n >\n {children}\n </Flex>\n </Container>\n )\n})\n","import {\n Flex,\n Text,\n} from '@radix-ui/themes'\n\ntype Args = {\n children: React.ReactNode\n}\n\nexport const Name = ({\n children,\n}: Args) => (\n <Flex\n align=\"center\"\n height=\"var(--space-5)\"\n >\n <Text\n size=\"2\"\n weight=\"bold\"\n >\n {children}\n </Text>\n </Flex>\n)\n","'use client'\nimport { useContext } from 'react'\nimport {\n Box,\n} from '@radix-ui/themes'\nimport { MessageGroupBase } from '@/components/messageGroups/MessageGroupBase'\nimport { Name } from '@/components/messageGroups/MessageGroupBase/Name'\nimport { AssistantAvatar } from '@/components/messageGroups/MessageGroupBase/AssistantAvatar'\nimport { AssistantNameContext } from '@/contexts/assistants/AssistantNameContext'\nimport { UserAvatar } from '@/components/messageGroups/MessageGroupBase/UserAvatar'\nimport { MessageGroup as MessageGroupType } from '@/types'\nimport { Content } from './Content'\n\ntype Args = {\n messageGroup: MessageGroupType\n}\n\nexport const MessageGroup = ({\n messageGroup,\n}: Args) => {\n const assistantNameContext = useContext(AssistantNameContext)\n\n return (\n <MessageGroupBase>\n {messageGroup.role === 'user' ? (\n <UserAvatar />\n ) : (\n <AssistantAvatar />\n )}\n\n <Box flexGrow=\"1\">\n <Name>\n {messageGroup.role === 'user' ? 'You' : assistantNameContext}\n </Name>\n\n <Content\n messageGroup={messageGroup}\n />\n </Box>\n </MessageGroupBase>\n )\n}\n","'use client'\nimport { useContext } from 'react'\nimport {\n Flex,\n} from '@radix-ui/themes'\nimport { AssistantAvatarContext } from '@/contexts/assistants/AssistantAvatarContext'\n\nexport const AssistantAvatar = () => {\n const AssistantAvatarContextValue = useContext(AssistantAvatarContext)\n\n return (\n <Flex\n flexShrink=\"0\"\n height=\"24px\"\n width=\"24px\"\n style={{\n borderRadius: 'var(--radius-3)',\n overflow: 'hidden',\n }}\n >\n {AssistantAvatarContextValue}\n </Flex>\n )\n}\n","'use client'\nimport { createContext } from 'react'\nimport {\n Avatar,\n} from '@radix-ui/themes'\nimport {\n LightningBoltIcon,\n} from '@radix-ui/react-icons'\n\nexport const AssistantAvatarContext = createContext(\n <Avatar\n fallback={<LightningBoltIcon />}\n size=\"1\"\n />\n)\n","'use client'\nimport { createContext } from 'react'\n\nexport const AssistantNameContext = createContext('Assistant')\n","'use client'\nimport { useContext } from 'react'\nimport {\n Flex,\n} from '@radix-ui/themes'\nimport { UserAvatarContext } from '@/contexts/users/UserAvatarContext'\n\nexport const UserAvatar = () => {\n const UserAvatarContextValue = useContext(UserAvatarContext)\n\n return (\n <Flex\n flexShrink=\"0\"\n height=\"24px\"\n width=\"24px\"\n style={{\n borderRadius: 'var(--radius-3)',\n overflow: 'hidden',\n }}\n >\n {UserAvatarContextValue}\n </Flex>\n )\n}\n","'use client'\nimport { createContext } from 'react'\nimport {\n Avatar,\n} from '@radix-ui/themes'\nimport {\n PersonIcon,\n} from '@radix-ui/react-icons'\n\nexport const UserAvatarContext = createContext(\n <Avatar\n fallback={<PersonIcon />}\n size=\"1\"\n />\n)\n","import { Flex } from '@radix-ui/themes'\nimport { MessageGroup } from '@/types'\nimport { Message } from '@/components/threads/Thread/Message'\n\ntype Args = {\n messageGroup: MessageGroup\n}\n\nexport const Content = ({\n messageGroup,\n}: Args) => (\n <Flex\n direction=\"column-reverse\"\n >\n {messageGroup.messages.map((message) => (\n <Message\n key={message.id}\n message={message}\n />\n ))}\n </Flex>\n)\n","import { useMemo } from 'react'\nimport { StartingSkeleton } from '@/components/skeletons/StartingSkeleton'\nimport { useLatestMessage } from '@/hooks/messages/useLatestMessage'\nimport { isOptimistic } from '@/lib/optimistic/isOptimistic'\nimport { useIsMutatingMessage } from '@/hooks/messages/useIsMutatingMessage'\n\nexport const Progress = () => {\n const { latestMessage } = useLatestMessage()\n const isMutatingMessage = useIsMutatingMessage()\n\n const isVisible = useMemo(() => {\n if (!latestMessage) return false\n if (latestMessage.role !== 'user') return false\n if (latestMessage.status === 'in_progress') return false\n if (!isOptimistic({ id: latestMessage.id })) return false\n if (!isMutatingMessage) return false\n\n return true\n }, [latestMessage, isMutatingMessage])\n\n if (!isVisible) return null\n\n return (\n <StartingSkeleton />\n )\n}\n","'use client'\nimport { useContext } from 'react'\nimport { Box } from '@radix-ui/themes'\nimport { StartingContentSkeleton } from '@/components/skeletons/StartingContentSkeleton'\nimport { MessageGroupBase } from '@/components/messageGroups/MessageGroupBase'\nimport { Name } from '@/components/messageGroups/MessageGroupBase/Name'\nimport { AssistantAvatar } from '@/components/messageGroups/MessageGroupBase/AssistantAvatar'\nimport { AssistantNameContext } from '@/contexts/assistants/AssistantNameContext'\n\ntype Args = {\n children?: React.ReactNode\n}\n\nexport const StartingSkeleton = ({\n children,\n}: Args) => {\n const assistantNameContext = useContext(AssistantNameContext)\n\n return (\n <MessageGroupBase>\n <AssistantAvatar />\n\n <Box>\n <Name>\n {assistantNameContext}\n </Name>\n\n {children}\n\n <StartingContentSkeleton />\n </Box>\n </MessageGroupBase>\n )\n}\n","'use client'\n\nimport { Flex } from '@radix-ui/themes'\nimport { useInfiniteScroll } from '@/hooks/misc/useInfiniteScroll'\nimport { useMessages } from '@/hooks/messages/useMessages'\nimport type { StyleProps } from '@/types'\n\nexport const Root = ({\n children,\n style,\n className,\n}: {\n children: React.ReactNode\n} & StyleProps) => {\n const {\n isFetchingNextPage,\n hasNextPage,\n fetchNextPage,\n } = useMessages()\n\n const { containerRef, loaderRef } = useInfiniteScroll({\n isFetchingNextPage,\n hasNextPage,\n fetchNextPage,\n })\n\n return (\n <Flex\n ref={containerRef}\n direction=\"column-reverse\"\n flexGrow=\"1\"\n style={{\n overflow: 'auto',\n ...(style ?? {}),\n }}\n className={className}\n >\n {children}\n\n {hasNextPage && (\n <Flex\n ref={loaderRef}\n />\n )}\n\n <Flex\n flexShrink=\"0\"\n flexGrow=\"1\"\n />\n </Flex>\n )\n}\n","import { useRef } from 'react'\nimport { useInView } from 'react-intersection-observer'\nimport { useThrottledEffect } from '@/hooks/misc/useThrottledEffect'\n\ntype Args = {\n isFetchingNextPage: boolean\n hasNextPage: boolean\n fetchNextPage: () => void\n}\n\nexport const useInfiniteScroll = ({\n isFetchingNextPage,\n hasNextPage,\n fetchNextPage,\n}: Args) => {\n const containerRef = useRef(null)\n\n const { ref: loaderRef, inView } = useInView({\n root: containerRef.current,\n rootMargin: '0px',\n threshold: 0.1,\n })\n\n useThrottledEffect(\n () => {\n if (isFetchingNextPage) return\n if (!inView) return\n if (!hasNextPage) return\n\n fetchNextPage()\n },\n 500,\n [inView, isFetchingNextPage, hasNextPage, fetchNextPage]\n )\n\n return {\n containerRef,\n loaderRef,\n inView,\n }\n}\n","import _ from 'lodash'\nimport { useRef, useEffect, useCallback } from 'react'\n\nexport const useThrottledEffect = (cb: Function, delay: number, additionalDeps: any[]) => {\n const cbRef = useRef(cb)\n\n const throttledCb = useCallback(\n _.throttle((...args: any[]) => cbRef.current(...args), delay, {\n leading: true,\n trailing: true,\n }),\n [delay]\n )\n useEffect(() => {\n cbRef.current = cb\n })\n // set additionalDeps to execute effect, when other values change (not only on delay change)\n useEffect(throttledCb, [throttledCb, ...additionalDeps])\n}\n","'use client'\nimport { useMessages } from '@/hooks/messages/useMessages'\nimport { MessagesSkeleton } from '@/components/skeletons/MessagesSkeleton'\n\nexport const NextPageSkeleton = () => {\n const {\n hasNextPage,\n } = useMessages()\n\n if (!hasNextPage) {\n return null\n }\n\n return (\n <MessagesSkeleton />\n )\n}\n","'use client'\n\nimport {\n ArrowUpIcon,\n StopIcon,\n} from '@radix-ui/react-icons'\nimport {\n IconButton,\n Flex,\n} from '@radix-ui/themes'\nimport { useMessageFormContext } from '@/hooks/messages/useMessageFormContext'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\nimport type { StyleProps } from '@/types'\n\nconst Root = ({\n children,\n style,\n className,\n}: {\n children: React.ReactNode\n} & StyleProps) => (\n <Flex\n flexShrink=\"0\"\n align=\"end\"\n style={style}\n className={className}\n >\n {children}\n </Flex>\n)\n\nconst Button = (props: StyleProps) => {\n const superinterfaceContext = useSuperinterfaceContext()\n const { isDisabled, isLoading, isFileLoading } = useMessageFormContext()\n\n if (isLoading) {\n return (\n <IconButton\n type=\"button\"\n onClick={() => superinterfaceContext.createMessageAbortControllerRef.current?.abort()}\n {...props}\n >\n <StopIcon />\n </IconButton>\n )\n }\n\n return (\n <IconButton\n type=\"submit\"\n disabled={isDisabled || isFileLoading}\n {...props}\n >\n <ArrowUpIcon />\n </IconButton>\n )\n}\n\nexport const Submit = (props: StyleProps) => (\n <Root {...props}>\n <Button />\n </Root>\n)\n\nSubmit.Root = Root\nSubmit.Button = Button\n","import { useContext } from 'react'\nimport { MessageFormContext } from '@/contexts/messages/MessageFormContext'\n\nexport const useMessageFormContext = () => (\n useContext(MessageFormContext)\n)\n","'use client'\nimport OpenAI from 'openai'\nimport { createContext, Dispatch, SetStateAction } from 'react'\n\nexport const MessageFormContext = createContext({\n content: '',\n isDisabled: false,\n isLoading: false,\n files: [] as OpenAI.Files.FileObject[],\n setFiles: (() => {}) as Dispatch<SetStateAction<OpenAI.Files.FileObject[]>>,\n isFileLoading: false,\n})\n","'use client'\nimport OpenAI from 'openai'\nimport {\n useQueryClient,\n} from '@tanstack/react-query'\nimport { useMemo, useState } from 'react'\nimport { useForm, SubmitHandler, FormProvider } from 'react-hook-form'\nimport { Box } from '@radix-ui/themes'\nimport { useLatestMessage } from '@/hooks/messages/useLatestMessage'\nimport { useCreateMessage } from '@/hooks/messages/useCreateMessage'\nimport { useThreadContext } from '@/hooks/threads/useThreadContext'\nimport { formOptions } from './lib/formOptions'\nimport { MessageFormContext } from '@/contexts/messages/MessageFormContext'\nimport { useToasts } from '@/hooks/toasts/useToasts'\nimport { useIsMutatingMessage } from '@/hooks/messages/useIsMutatingMessage'\nimport { partob } from 'radash'\nimport { isOptimistic } from '@/lib/optimistic/isOptimistic'\nimport { createMessageDefaultOnError } from '@/lib/errors/createMessageDefaultOnError'\nimport type { StyleProps } from '@/types'\n\ntype Inputs = {\n content: string\n attachments?: OpenAI.Beta.Threads.Message.Attachment[]\n}\n\nexport const Root = ({\n children,\n onSubmit: onSubmitArg,\n isDisabled: isDisabledArg,\n style,\n className,\n}: {\n children: React.ReactNode\n onSubmit?: SubmitHandler<Inputs & { reset: any, createMessage: any }>\n isDisabled?: boolean\n} & StyleProps) => {\n const [files, setFiles] = useState<OpenAI.Files.FileObject[]>([])\n const formProps = useForm<Inputs>(formOptions)\n\n const {\n handleSubmit,\n formState: { isSubmitting },\n reset,\n watch,\n } = formProps\n\n const { addToast } = useToasts()\n const queryClient = useQueryClient()\n const threadContext = useThreadContext()\n\n const { createMessage } = useCreateMessage({\n onError: createMessageDefaultOnError({\n queryClient,\n addToast,\n threadContext,\n }),\n })\n\n const isMutatingMessage = useIsMutatingMessage()\n\n const isFileLoading = useMemo(() => (\n files.some((file) => isOptimistic({ id: file.id }))\n ), [files])\n\n const isLoading = useMemo(() => (\n isMutatingMessage || isSubmitting\n ), [\n isMutatingMessage,\n isSubmitting,\n ])\n\n const { latestMessage } = useLatestMessage()\n\n const isDisabled = useMemo(() => (\n // @ts-ignore-next-line\n latestMessage?.metadata?.isBlocking || isDisabledArg\n ), [latestMessage, isDisabledArg])\n\n const onSubmit: SubmitHandler<Inputs> = onSubmitArg ? partob(onSubmitArg, { reset, createMessage }) : async (data) => {\n if (isFileLoading) return\n if (isLoading) return\n if (isDisabled) return\n\n reset()\n setFiles([])\n\n const attachments = files.map((file) => ({\n file_id: file.id,\n tools: [\n {\n type: 'file_search',\n },\n ],\n }))\n\n await createMessage({\n // @ts-ignore-next-line\n content: data.content,\n ...(attachments.length ? { attachments } : {}),\n })\n }\n\n const content = watch('content')\n\n return (\n <MessageFormContext.Provider\n value={{\n isDisabled,\n isLoading,\n files,\n setFiles,\n isFileLoading,\n content,\n }}\n >\n <FormProvider {...formProps}>\n <Box\n asChild\n flexShrink=\"0\"\n style={style}\n className={className}\n >\n <form\n onSubmit={handleSubmit(onSubmit)}\n >\n {children}\n </form>\n </Box>\n </FormProvider>\n </MessageFormContext.Provider>\n )\n}\n","import { z } from 'zod'\nimport { zodResolver } from '@hookform/resolvers/zod'\n\nconst schema = z.object({\n content: z.string().min(1),\n})\n\nexport const formOptions = {\n resolver: zodResolver(schema),\n}\n","'use client'\nimport { useFormContext } from 'react-hook-form'\nimport {\n Container as RadixContainer,\n Flex,\n} from '@radix-ui/themes'\nimport { Control } from './Control'\nimport { Files } from './Files'\nimport type { StyleProps } from '@/types'\n\nconst Root = ({\n children,\n className,\n style,\n}: {\n children: React.ReactNode\n} & StyleProps) => {\n const {\n formState: {\n errors,\n },\n } = useFormContext()\n\n return (\n <RadixContainer\n size=\"2\"\n flexGrow=\"0\"\n className={className}\n style={style}\n >\n <Flex\n direction=\"column\"\n flexShrink=\"0\"\n >\n <Flex\n direction=\"column\"\n flexShrink=\"0\"\n >\n <Flex\n style={{\n borderRadius: 'var(--radius-2)',\n borderWidth: '1px',\n borderStyle: 'solid',\n borderColor: errors.content ? 'var(--red-9)' : 'var(--gray-5)',\n ...(errors.content ? { backgroundColor: 'var(--red-2)' } : {}),\n }}\n p=\"2\"\n pl=\"3\"\n wrap=\"wrap\"\n >\n {children}\n </Flex>\n </Flex>\n </Flex>\n </RadixContainer>\n )\n}\n\nexport const Field = {\n Root,\n Control,\n Files,\n}\n","import {\n Flex,\n} from '@radix-ui/themes'\nimport { useFormContext } from 'react-hook-form'\nimport { usePrevious } from '@/hooks/misc/usePrevious'\nimport { useContext, useMemo, useRef, useEffect } from 'react'\nimport { AssistantNameContext } from '@/contexts/assistants/AssistantNameContext'\nimport { TextareaBase } from '@/components/textareas/TextareaBase'\nimport { useMessageFormContext } from '@/hooks/messages/useMessageFormContext'\nimport type { StyleProps } from '@/types'\n\nconst Root = ({\n children,\n style,\n className,\n}: {\n children: React.ReactNode\n} & StyleProps) => (\n <Flex\n flexGrow=\"1\"\n pt=\"4px\"\n style={style}\n className={className}\n >\n {children}\n </Flex>\n)\n\nconst Input = (props: Omit<StyleProps, 'style'> & {\n style?: Omit<React.CSSProperties, 'minHeight' | 'maxHeight' | 'height'>\n placeholder?: string\n}) => {\n const assistantNameContext = useContext(AssistantNameContext)\n const {\n register,\n } = useFormContext()\n\n const { isDisabled, isLoading } = useMessageFormContext()\n\n const isSubmitDisabled = useMemo(() => (\n isDisabled || isLoading\n ), [isDisabled, isLoading])\n\n const isDisabledPrevious = usePrevious(isDisabled)\n\n const textareaRef = useRef<HTMLTextAreaElement>(null)\n const textareaProps = register('content')\n\n useEffect(() => {\n if (isDisabled) return\n if (!isDisabledPrevious) return\n if (!textareaRef.current) return\n\n textareaRef.current.focus()\n }, [isDisabled, isDisabledPrevious, textareaProps])\n\n return (\n <TextareaBase\n minRows={1}\n placeholder={props.placeholder ?? `Message ${assistantNameContext}...`}\n disabled={isDisabled}\n onKeyDown={(e: any) => {\n if (e.key === 'Enter' && !e.shiftKey) {\n e.preventDefault()\n\n if (isSubmitDisabled) return\n e.currentTarget.form?.requestSubmit()\n }\n }}\n {...textareaProps}\n {...props}\n ref={(e: any) => {\n textareaProps.ref(e)\n // @ts-ignore-next-line\n textareaRef.current = e\n }}\n />\n )\n}\n\nexport const Control = (props: StyleProps) => (\n <Root {...props}>\n <Input />\n </Root>\n)\n\nControl.Root = Root\nControl.Input = Input\n","import { useEffect, useRef } from 'react'\n\nexport const usePrevious = <T,>(state: T): T | undefined => {\n const ref = useRef<T>()\n\n useEffect(() => {\n ref.current = state\n })\n\n return ref.current\n}\n","import { forwardRef } from 'react'\nimport TextareaAutosize from 'react-textarea-autosize'\nimport type { StyleProps } from '@/types'\n\ntype Props = React.ComponentProps<typeof TextareaAutosize> & StyleProps\n\nexport const TextareaBase = forwardRef(function TextareaBase({\n style,\n className,\n ...rest\n}: Props, ref) {\n return (\n <>\n <style>\n {`.superinterface-textarea { min-height: inherit; height: 30px; }\n.superinterface-textarea::placeholder { color: var(--gray-a10); }`}\n </style>\n\n <TextareaAutosize\n // @ts-ignore-next-line\n ref={ref}\n className={`rt-reset superinterface-textarea ${className ?? ''}`}\n style={{\n border: 0,\n outline: 0,\n boxSizing: 'border-box',\n resize: 'none',\n color: 'var(--gray-12)',\n flexGrow: 1,\n display: 'flex',\n ...(style ?? {}),\n }}\n {...rest}\n />\n </>\n )\n})\n","import {\n Flex,\n Card,\n Spinner,\n Text,\n IconButton,\n} from '@radix-ui/themes'\nimport {\n FileIcon,\n Cross2Icon,\n} from '@radix-ui/react-icons'\nimport { useMessageFormContext } from '@/hooks/messages/useMessageFormContext'\nimport { isOptimistic } from '@/lib/optimistic/isOptimistic'\nimport type { StyleProps } from '@/types'\n\nexport const Preview = (props: StyleProps) => {\n const { files, setFiles } = useMessageFormContext()\n\n if (!files.length) {\n return null\n }\n\n return (\n <Flex\n flexBasis=\"100%\"\n direction=\"column\"\n pb=\"2\"\n gap=\"1\"\n {...props}\n >\n {files.map((file) => (\n <Card\n key={file.id}\n variant=\"ghost\"\n >\n <Flex\n align=\"center\"\n justify=\"between\"\n gap=\"1\"\n >\n <Flex\n align=\"center\"\n gap=\"1\"\n flexShrink=\"1\"\n minWidth=\"0\"\n maxWidth=\"250px\"\n >\n <Flex\n flexShrink=\"0\"\n >\n <Spinner\n loading={isOptimistic({ id: file.id })}\n >\n <FileIcon />\n </Spinner>\n </Flex>\n\n <Text\n size=\"2\"\n truncate\n wrap=\"nowrap\"\n >\n {file.filename}\n </Text>\n </Flex>\n\n <Flex\n flexShrink=\"0\"\n >\n <IconButton\n onClick={() => (\n setFiles((prev) => (\n prev.filter((prevFile) => prevFile.id !== file.id)\n ))\n )}\n color=\"gray\"\n variant=\"ghost\"\n size=\"1\"\n >\n <Cross2Icon />\n </IconButton>\n </Flex>\n </Flex>\n </Card>\n ))}\n </Flex>\n )\n}\n","'use client'\n\nimport type OpenAI from 'openai'\nimport { useCallback } from 'react'\nimport { omit } from 'radash'\nimport dayjs from 'dayjs'\nimport { optimisticId } from '@/lib/optimistic/optimisticId'\nimport {\n FilePlusIcon,\n} from '@radix-ui/react-icons'\nimport {\n IconButton,\n Flex,\n} from '@radix-ui/themes'\nimport { useToasts } from '@/hooks/toasts/useToasts'\nimport { useMessageFormContext } from '@/hooks/messages/useMessageFormContext'\nimport { useCreateFile } from '@/hooks/files/useCreateFile'\nimport type { StyleProps } from '@/types'\n\nconst accept = `.c,text/x-c,\n.cs,text/x-csharp,\n.cpp,text/x-c++,\n.doc,application/msword,\n.docx,application/vnd.openxmlformats-officedocument.wordprocessingml.document,\n.html,text/html,\n.java,text/x-java,\n.json,application/json,\n.md,text/markdown,\n.pdf,application/pdf,\n.php,text/x-php,\n.pptx,application/vnd.openxmlformats-officedocument.presentationml.presentation,\n.py,text/x-python,\n.py,text/x-script.python,\n.rb,text/x-ruby,\n.tex,text/x-tex,\n.txt,text/plain,\n.css,text/css,\n.js,text/javascript,\n.sh,application/x-sh,\n.ts,application/typescript`\n\nexport const Control = (props: StyleProps) => {\n const { isDisabled, isLoading, setFiles } = useMessageFormContext()\n const { createFile } = useCreateFile()\n const { addToast } = useToasts()\n\n const onChange = useCallback(async (event: React.ChangeEvent<HTMLInputElement>) => {\n const fileObjects = event.target.files\n if (!fileObjects) return\n\n const newFiles = Array.from(fileObjects).map((fileObject) => ({\n id: optimisticId(),\n filename: fileObject.name,\n object: 'file' as 'file',\n purpose: 'assistants' as 'assistants',\n created_at: dayjs().unix(),\n bytes: fileObject.size,\n status: 'processed' as 'processed',\n fileObject,\n }))\n\n setFiles((prev: OpenAI.Files.FileObject[]) => [\n ...prev,\n ...newFiles.map((file) => omit(file, ['fileObject'])),\n ])\n\n for await (const newFile of newFiles) {\n await createFile({\n file: newFile.fileObject,\n },\n {\n onSuccess: ({\n file,\n }: {\n file: OpenAI.Files.FileObject\n }) => (\n setFiles((prev) => ([\n ...prev.filter((prevFile) => prevFile.id !== newFile.id),\n file,\n ]))\n ),\n onError: () => {\n addToast({ type: 'error', message: 'Could not upload file. Please try again.' })\n setFiles((prev) => (\n prev.filter((prevFile) => prevFile.id !== newFile.id)\n ))\n },\n })\n }\n }, [addToast, createFile, setFiles])\n\n return (\n <Flex\n pt=\"2\"\n pr=\"2\"\n flexGrow=\"0\"\n {...props}\n >\n <IconButton\n type=\"button\"\n variant=\"ghost\"\n color=\"gray\"\n disabled={isDisabled || isLoading}\n style={{\n position: 'relative',\n overflow: 'hidden',\n }}\n >\n <FilePlusIcon />\n <input\n type=\"file\"\n multiple\n accept={accept}\n onChange={onChange}\n style={{\n cursor: 'pointer',\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n opacity: 0,\n }}\n />\n </IconButton>\n </Flex>\n )\n}\n","import { partob } from 'radash'\nimport {\n useMutation,\n useQueryClient,\n} from '@tanstack/react-query'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\nimport { useThreadContext } from '@/hooks/threads/useThreadContext'\nimport { mutationOptions } from './lib/mutationOptions'\n\nexport const useCreateFile = ({\n onError = () => {},\n}: {\n onError?: (error: unknown) => void\n} = {\n onError: () => {},\n}) => {\n const queryClient = useQueryClient()\n const superinterfaceContext = useSuperinterfaceContext()\n const threadContext = useThreadContext()\n\n const props = useMutation(mutationOptions({\n queryClient,\n threadContext,\n superinterfaceContext,\n onError,\n }))\n\n return {\n ...props,\n createFile: (...args: any[]) => {\n const [firstArg, ...restArgs] = args\n return props.mutateAsync({\n ...threadContext.variables,\n ...firstArg,\n }, ...restArgs)\n },\n }\n}\n","export const formData = (variables: any) => {\n const data = new FormData()\n\n for (const key in variables) {\n data.append(key, variables[key])\n }\n\n return data\n}\n","import { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\nimport { formData } from './formData'\n\nexport const body = ({\n variables,\n superinterfaceContext,\n}: {\n variables: {\n [key: string]: any\n }\n superinterfaceContext: ReturnType<typeof useSuperinterfaceContext>\n}) => {\n if (variables.threadId) return formData(variables)\n if (!variables.assistantId) return formData(variables)\n if (!superinterfaceContext.threadIdStorageOptions?.get) return formData(variables)\n\n const threadId = superinterfaceContext.threadIdStorageOptions.get({ assistantId: variables.assistantId })\n if (!threadId) return formData(variables)\n\n return formData({\n ...variables,\n threadId,\n })\n}\n","import {\n useQueryClient,\n} from '@tanstack/react-query'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\nimport { useThreadContext } from '@/hooks/threads/useThreadContext'\nimport { body } from './body'\n\nexport const mutationFn = ({\n superinterfaceContext,\n queryClient,\n threadContext,\n}: {\n superinterfaceContext: ReturnType<typeof useSuperinterfaceContext>\n queryClient: ReturnType<typeof useQueryClient>\n threadContext: ReturnType<typeof useThreadContext>\n}) => async (variables: {\n content: string\n [key: string]: any\n}) => {\n const response = await fetch(`${superinterfaceContext.baseUrl}/files`, {\n method: 'POST',\n body: body({\n variables,\n superinterfaceContext,\n }),\n })\n\n const result = await response.json()\n return result\n}\n","import _ from 'lodash'\nimport {\n useQueryClient,\n} from '@tanstack/react-query'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\nimport { useThreadContext } from '@/hooks/threads/useThreadContext'\nimport { mutationFn } from './mutationFn'\n\nexport const mutationOptions = ({\n queryClient,\n threadContext,\n superinterfaceContext,\n onError,\n}: {\n queryClient: ReturnType<typeof useQueryClient>,\n threadContext: ReturnType<typeof useThreadContext>,\n superinterfaceContext: ReturnType<typeof useSuperinterfaceContext>,\n onError: (error: unknown) => void\n}) => {\n const mutationKey = ['createFile', threadContext.variables]\n\n return {\n mutationFn: mutationFn({\n queryClient,\n superinterfaceContext,\n threadContext,\n }),\n onError,\n ...threadContext.defaultOptions.mutations,\n ...queryClient.getMutationDefaults(mutationKey),\n mutationKey,\n }\n}\n","import { Preview } from './Preview'\nimport { Control } from './Control'\n\nexport const Files = {\n Preview,\n Control,\n}\n","import type { StyleProps } from '@/types'\nimport { Submit } from './Submit'\nimport { Root } from './Root'\nimport { Field } from './Field'\n\nexport const MessageForm = (props: StyleProps) => (\n <Root {...props}>\n <Field.Root>\n <Field.Control />\n <Submit />\n </Field.Root>\n </Root>\n)\n\nMessageForm.Root = Root\nMessageForm.Field = Field\nMessageForm.Submit = Submit\n","import { Flex } from '@radix-ui/themes'\nimport {\n Provider,\n Args as ThreadProviderArgs,\n} from '@/components/threads/Thread/Provider'\nimport type { StyleProps } from '@/types'\nimport { ToastsProvider } from '@/components/toasts/ToastsProvider'\n\nexport type Args = ThreadProviderArgs & StyleProps\n\nexport const Root = ({\n children,\n style,\n className,\n ...rest\n}: Args) => (\n <ToastsProvider bottom=\"var(--space-9)\">\n <Provider {...rest}>\n <Flex\n direction=\"column\"\n flexGrow=\"1\"\n className={className}\n style={style}\n >\n {children}\n </Flex>\n </Provider>\n </ToastsProvider>\n)\n","'use client'\n\nimport { SuperinterfaceProvider } from '@/components/core/SuperinterfaceProvider'\nimport type { Args as SuperinterfaceProviderArgs } from '@/components/core/SuperinterfaceProvider'\n\nexport type Args = SuperinterfaceProviderArgs\nexport const Provider = SuperinterfaceProvider\n","import { useState, useCallback } from 'react'\nimport * as Toast from '@radix-ui/react-toast'\nimport { ToastsContext } from '@/contexts/toasts/ToastsContext'\nimport { CustomToast } from './CustomToast'\nimport { Toast as ToastType } from '@/types'\n\nexport const ToastsProvider = ({\n children,\n bottom = 0,\n}: {\n children: React.ReactNode\n bottom?: number | string\n}) => {\n const [toasts, setToasts] = useState<ToastType[]>([])\n const addToast = useCallback((toast: ToastType) => (\n setToasts((prevToasts) => [\n ...prevToasts,\n toast,\n ])\n ), [])\n\n return (\n <ToastsContext.Provider\n value={{\n toasts,\n addToast,\n }}\n >\n <Toast.Provider>\n {children}\n\n {Array.from(toasts).map((toast: ToastType, index: number) => (\n <CustomToast\n key={index}\n toast={toast}\n />\n ))}\n\n <Toast.Viewport\n style={{\n position: 'absolute',\n bottom,\n right: 0,\n display: 'flex',\n flexDirection: 'column',\n padding: 'var(--space-5)',\n gap: 'var(--space-3)',\n width: '390px',\n maxWidth: '100vw',\n margin: 0,\n listStyle: 'none',\n zIndex: 99999999999999,\n outline: 'none',\n }}\n />\n </Toast.Provider>\n </ToastsContext.Provider>\n )\n}\n","import * as Toast from '@radix-ui/react-toast'\nimport {\n Card,\n Text,\n Flex,\n} from '@radix-ui/themes'\nimport {\n CheckCircledIcon,\n CrossCircledIcon,\n} from '@radix-ui/react-icons'\nimport { Toast as ToastType } from '@/types'\n\nexport const CustomToast = ({\n toast,\n}: {\n toast: ToastType,\n}) => (\n <Toast.Root>\n <Card>\n <Toast.Title>\n <Flex>\n <Flex\n pr=\"2\"\n height=\"14px\"\n align=\"center\"\n >\n {toast.type === 'success' ? (\n <CheckCircledIcon\n color=\"var(--accent-9)\"\n />\n ) : (\n <CrossCircledIcon\n color=\"var(--red-9)\"\n />\n )}\n </Flex>\n <Text\n weight=\"medium\"\n size=\"1\"\n >\n {toast.message}\n </Text>\n </Flex>\n </Toast.Title>\n </Card>\n </Toast.Root>\n)\n","import { Messages } from '@/components/threads/Thread/Messages'\nimport { MessageForm } from '@/components/threads/Thread/MessageForm'\nimport { Root, Args as RootArgs } from '@/components/threads/Thread/Root'\n\ntype Args = Omit<RootArgs, 'children'>\n\nexport const Thread = (props: Args) => (\n <Root {...props}>\n <Messages />\n <MessageForm />\n </Root>\n)\n\nThread.Root = Root\nThread.Messages = Messages\nThread.MessageForm = MessageForm\n","import { useContext } from 'react'\nimport { MessageContext } from '@/contexts/messages/MessageContext'\n\nexport const useMessageContext = () => (\n useContext(MessageContext)\n)\n","import { useMemo } from 'react'\nimport {\n useQuery,\n} from '@tanstack/react-query'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\nimport { queryOptions } from './lib/queryOptions'\n\ntype Args = {\n assistantId: string\n}\n\nexport const useAssistant = ({\n assistantId,\n}: Args) => {\n const superinterfaceContext = useSuperinterfaceContext()\n const props = useQuery(queryOptions({\n assistantId,\n superinterfaceContext,\n }))\n\n return useMemo(() => ({\n ...props,\n assistant: props.data ? props.data.assistant : null,\n }), [props])\n}\n","import { queryOptions as tanstackQueryOptions } from '@tanstack/react-query'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\nimport { queryFn } from './queryFn'\n\ntype Args = {\n assistantId: string\n superinterfaceContext: ReturnType<typeof useSuperinterfaceContext>\n}\n\nexport const queryOptions = ({\n assistantId,\n superinterfaceContext,\n}: Args) => (\n tanstackQueryOptions({\n queryKey: ['assistants', { assistantId }],\n queryFn: queryFn({ superinterfaceContext }),\n })\n)\n","import { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\n\ntype QueryFunctionArgs = {\n queryKey: Readonly<['assistants', { assistantId: string }]>\n}\n\nexport const queryFn = ({\n superinterfaceContext,\n}: {\n superinterfaceContext: ReturnType<typeof useSuperinterfaceContext>\n}) => async ({\n queryKey,\n}: QueryFunctionArgs) => {\n const [_key, { assistantId }] = queryKey\n\n const params = new URLSearchParams({\n publicApiKey: superinterfaceContext.variables.publicApiKey,\n })\n\n return fetch(`${superinterfaceContext.baseUrl}/assistants/${assistantId}?${params}`)\n .then(async (response) => {\n if (response.status !== 200) {\n try {\n const errorResponse = await response.json() as { error: string }\n throw new Error(errorResponse.error)\n } catch (error) {\n throw new Error('Failed to fetch')\n }\n }\n\n return response.json() as Promise<any>\n })\n}\n","import { useState } from 'react'\nimport { ThreadDialogContext } from '@/contexts/threads/ThreadDialogContext'\nimport { useThreadDialogContext } from '@/hooks/threads/useThreadDialogContext'\n\ntype Args = {\n children: React.ReactNode\n}\n\nexport const Provider = ({\n children,\n}: Args) => {\n const threadDialogContext = useThreadDialogContext()\n const [isOpen, setIsOpen] = useState<boolean>(threadDialogContext.isOpen)\n\n return (\n <ThreadDialogContext.Provider\n value={{\n isOpen,\n setIsOpen,\n }}\n >\n {children}\n </ThreadDialogContext.Provider>\n )\n}\n","'use client'\nimport { createContext, Dispatch, SetStateAction } from 'react'\n\nexport const ThreadDialogContext = createContext<{\n isOpen: boolean\n setIsOpen: Dispatch<SetStateAction<boolean>>\n}>({\n isOpen: false,\n setIsOpen: () => {},\n})\n","import { useContext } from 'react'\nimport { ThreadDialogContext } from '@/contexts/threads/ThreadDialogContext'\n\nexport const useThreadDialogContext = () => (\n useContext(ThreadDialogContext)\n)\n","import { Provider } from '@/components/threads/ThreadDialog/Provider'\n\ntype Args = {\n children: React.ReactNode\n}\n\nexport const Root = ({\n children,\n}: Args) => (\n <Provider>\n {children}\n </Provider>\n)\n","import {\n Flex,\n} from '@radix-ui/themes'\nimport { useThreadDialogContext } from '@/hooks/threads/useThreadDialogContext'\nimport { Button } from './Button'\nimport type { StyleProps } from '@/types'\n\ntype Args = {\n children: React.ReactNode\n} & StyleProps\n\nconst Root = ({\n children,\n style,\n className,\n}: Args) => {\n const { setIsOpen, isOpen } = useThreadDialogContext()\n\n return (\n <Flex\n display={{\n initial: isOpen ? 'none' : 'flex',\n sm: 'flex',\n }}\n onClick={() => setIsOpen((prev) => !prev)}\n direction=\"column\"\n flexShrink=\"0\"\n justify=\"end\"\n align=\"end\"\n position=\"fixed\"\n bottom=\"24px\"\n right=\"24px\"\n className={className}\n style={{\n zIndex: 9999999999,\n ...(style ?? {}),\n }}\n >\n {children}\n </Flex>\n )\n}\n\nexport const Trigger = (args: Omit<Args, 'children'>) => (\n <Root {...args}>\n <Button />\n </Root>\n)\n\nTrigger.Root = Root\nTrigger.Button = Button\n","import {\n IconButton,\n} from '@radix-ui/themes'\nimport {\n ChatBubbleIcon,\n} from '@radix-ui/react-icons'\nimport type { StyleProps } from '@/types'\n\nexport const Button = (props: StyleProps) => (\n <IconButton\n size=\"4\"\n radius=\"full\"\n {...props}\n >\n <ChatBubbleIcon />\n </IconButton>\n)\n","import {\n Card,\n Inset,\n Flex,\n} from '@radix-ui/themes'\nimport { useThreadDialogContext } from '@/hooks/threads/useThreadDialogContext'\nimport { Thread } from '@/components/threads/Thread'\nimport { Close } from '@/components/threads/ThreadDialog/Close'\nimport type { StyleProps } from '@/types'\n\ntype Args = {\n children: React.ReactNode\n} & StyleProps\n\nconst Root = ({\n children,\n className,\n style,\n}: Args) => {\n const { isOpen } = useThreadDialogContext()\n if (!isOpen) return null\n\n return (\n <Flex\n className={className}\n direction=\"column\"\n justify=\"end\"\n position=\"fixed\"\n bottom={{\n initial: '0',\n sm: '72px',\n }}\n right={{\n initial: '0',\n sm: '24px',\n }}\n maxHeight={{\n initial: undefined,\n sm: '720px',\n }}\n maxWidth={{\n initial: undefined,\n sm: '400px',\n }}\n width=\"100%\"\n height={{\n initial: '100%',\n sm: 'calc(100% - 96px)',\n }}\n style={{\n zIndex: 9999999999,\n ...style,\n }}\n >\n <Card\n mb={{\n initial: undefined,\n sm: '3',\n }}\n style={{\n position: 'relative',\n display: 'flex',\n flexGrow: 1,\n }}\n >\n <Inset\n clip=\"padding-box\"\n side=\"all\"\n pb=\"current\"\n style={{\n display: 'flex',\n flexGrow: 1,\n }}\n >\n {children}\n </Inset>\n <Close />\n </Card>\n </Flex>\n )\n}\n\nconst Messages = ({\n className,\n style,\n}: StyleProps) => (\n <Thread.Messages\n className={className}\n style={{\n paddingTop: 'var(--space-5)',\n paddingRight: 'var(--space-5)',\n paddingLeft: 'var(--space-5)',\n ...style,\n }}\n />\n)\n\nconst FormContainer = ({\n children,\n className,\n style,\n}: {\n children: React.ReactNode\n} & StyleProps) => (\n <Flex\n direction=\"column\"\n pl=\"5\"\n pr=\"5\"\n pb=\"3\"\n flexShrink=\"0\"\n className={className}\n style={style}\n >\n {children}\n </Flex>\n)\n\nexport const Content = (props: StyleProps) => (\n <Root {...props}>\n <Thread.Root>\n <Messages />\n <FormContainer>\n <Thread.MessageForm />\n </FormContainer>\n </Thread.Root>\n </Root>\n)\n\nContent.Root = Root\nContent.Messages = Messages\nContent.FormContainer = FormContainer\n","import {\n Cross1Icon,\n} from '@radix-ui/react-icons'\nimport {\n IconButton,\n Flex,\n} from '@radix-ui/themes'\nimport { useThreadDialogContext } from '@/hooks/threads/useThreadDialogContext'\n\nexport const Close = () => {\n const { setIsOpen, isOpen } = useThreadDialogContext()\n\n return (\n <Flex\n display={{\n initial: isOpen ? 'flex' : 'none',\n sm: 'none',\n }}\n onClick={() => setIsOpen((prev) => !prev)}\n direction=\"column\"\n flexShrink=\"0\"\n justify=\"end\"\n align=\"end\"\n position=\"absolute\"\n top=\"24px\"\n right='24px'\n style={{\n zIndex: 9999999999,\n }}\n >\n <IconButton\n size=\"2\"\n variant=\"soft\"\n >\n <Cross1Icon />\n </IconButton>\n </Flex>\n )\n}\n","import { Root } from '@/components/threads/ThreadDialog/Root'\nimport { Trigger } from '@/components/threads/ThreadDialog/Trigger'\nimport { Content } from '@/components/threads/ThreadDialog/Content'\n\nexport const ThreadDialog = () => (\n <Root>\n <Content />\n <Trigger />\n </Root>\n)\n\nThreadDialog.Root = Root\nThreadDialog.Trigger = Trigger\nThreadDialog.Content = Content\n","'use client'\n\n// import 'regenerator-runtime/runtime'\nimport { Flex } from '@radix-ui/themes'\nimport _ from 'lodash'\nimport { AudioThreadContext } from '@/contexts/threads/AudioThreadContext'\nimport { useCreateMessage } from '@/hooks/messages/useCreateMessage'\nimport { usePermission } from '@/hooks/misc/usePermission'\nimport { blobToData } from './lib/blobToData'\nimport { useStatus } from '@/hooks/audioThreads/useStatus'\nimport { useRecorder } from '@/hooks/audioThreads/useRecorder'\nimport { useMessageAudio } from '@/hooks/audioThreads/useMessageAudio'\nimport {\n useQueryClient,\n} from '@tanstack/react-query'\nimport { useThreadContext } from '@/hooks/threads/useThreadContext'\nimport { useToasts } from '@/hooks/toasts/useToasts'\nimport { createMessageDefaultOnError } from '@/lib/errors/createMessageDefaultOnError'\nimport { ToastsProvider } from '@/components/toasts/ToastsProvider'\nimport type { StyleProps } from '@/types'\n\nexport type Args = {\n children: React.ReactNode\n} & StyleProps\n\nconst Content = ({\n children,\n className,\n style,\n}: Args) => {\n const { addToast } = useToasts()\n const queryClient = useQueryClient()\n const threadContext = useThreadContext()\n\n const createMessageProps = useCreateMessage({\n onError: (error: unknown) => {\n createMessageDefaultOnError({\n queryClient,\n addToast,\n threadContext,\n })(error)\n\n recorderProps.start()\n }\n })\n\n const recorderProps = useRecorder({\n isStopOnSilence: true,\n onStart: async () => {\n },\n onStop: async (_event: any, chunks: BlobPart[]) => {\n // @ts-ignore-next-line\n const blob = new Blob(chunks, { type: chunks[0].type })\n const audioContent = await blobToData(blob)\n\n return createMessageProps.createMessage({\n // @ts-ignore-next-line\n audioContent,\n })\n },\n })\n\n const microphonePermission = usePermission({ name: 'microphone' })\n\n const messageAudioProps = useMessageAudio({\n onEnd: () => {\n if (microphonePermission === 'granted') {\n recorderProps.start()\n }\n }\n })\n\n const { status } = useStatus({\n recorderProps,\n createMessageProps,\n messageAudioProps,\n })\n\n return (\n <AudioThreadContext.Provider\n value={{\n status,\n recorderProps,\n messageAudioProps,\n }}\n >\n <Flex\n direction=\"column\"\n flexGrow=\"1\"\n p=\"9\"\n className={className}\n style={style}\n >\n {children}\n </Flex>\n </AudioThreadContext.Provider>\n )\n}\n\nexport const Root = ({\n children,\n ...rest\n}: Args) => (\n <ToastsProvider>\n <Content {...rest}>\n {children}\n </Content>\n </ToastsProvider>\n)\n","'use client'\nimport { createContext } from 'react'\nimport { statusMessages } from '@/hooks/audioThreads/useStatus/lib/statusMessages'\nimport { useRecorder } from '@/hooks/audioThreads/useRecorder'\nimport { useMessageAudio } from '@/hooks/audioThreads/useMessageAudio'\n\nexport const AudioThreadContext = createContext<{\n status: keyof typeof statusMessages\n recorderProps: ReturnType<typeof useRecorder>\n messageAudioProps: ReturnType<typeof useMessageAudio>\n}>({\n status: 'idle',\n recorderProps: {\n status: 'idle',\n start: async () => {},\n stop: async () => {},\n pause: async () => {},\n resume: async () => {},\n visualizationAnalyser: null,\n },\n // @ts-ignore-next-line\n messageAudioProps: {\n visualizationAnalyser: null,\n playing: false,\n paused: false,\n isReady: false,\n play: async () => {},\n pause: async () => {},\n },\n})\n","// From: https://github.com/streamich/react-use/blob/ade8d3905f544305515d010737b4ae604cc51024/src/usePermission.ts\nimport { useEffect, useState } from 'react';\nimport { noop, off, on } from './util';\n\nexport type IState = PermissionState | '';\n\ninterface IPushPermissionDescriptor extends PermissionDescriptor {\n name: 'push';\n userVisibleOnly?: boolean;\n}\n\n// @ts-ignore-next-line\ninterface IMidiPermissionDescriptor extends PermissionDescriptor {\n name: 'midi';\n sysex?: boolean;\n}\n\n// @ts-ignore-next-line\ninterface IDevicePermissionDescriptor extends PermissionDescriptor {\n name: 'camera' | 'microphone' | 'speaker';\n deviceId?: string;\n}\n\nexport type IPermissionDescriptor =\n | PermissionDescriptor\n | IPushPermissionDescriptor\n | IMidiPermissionDescriptor\n | IDevicePermissionDescriptor;\n\n// const usePermission = <T extends PermissionDescriptor>(permissionDesc: T): IState => {\nexport const usePermission = (permissionDesc: IPermissionDescriptor): IState => {\n const [state, setState] = useState<IState>('');\n\n useEffect(() => {\n let mounted = true;\n let permissionStatus: PermissionStatus | null = null;\n\n const onChange = () => {\n if (!mounted) {\n return;\n }\n setState(() => permissionStatus?.state ?? '');\n };\n\n navigator.permissions\n // @ts-ignore-next-line\n .query(permissionDesc)\n .then((status) => {\n permissionStatus = status;\n on(permissionStatus, 'change', onChange);\n onChange();\n })\n .catch(noop);\n\n return () => {\n permissionStatus && off(permissionStatus, 'change', onChange);\n mounted = false;\n permissionStatus = null;\n };\n }, [permissionDesc]);\n\n return state;\n};\n","// From: https://github.com/streamich/react-use/blob/ade8d3905f544305515d010737b4ae604cc51024/src/misc/util.ts\nexport const noop = () => {};\n\nexport function on<T extends Window | Document | HTMLElement | EventTarget>(\n obj: T | null,\n ...args: Parameters<T['addEventListener']> | [string, Function | null, ...any]\n): void {\n if (obj && obj.addEventListener) {\n obj.addEventListener(...(args as Parameters<HTMLElement['addEventListener']>));\n }\n}\n\nexport function off<T extends Window | Document | HTMLElement | EventTarget>(\n obj: T | null,\n ...args: Parameters<T['removeEventListener']> | [string, Function | null, ...any]\n): void {\n if (obj && obj.removeEventListener) {\n obj.removeEventListener(...(args as Parameters<HTMLElement['removeEventListener']>));\n }\n\n}\n","export const blobToData = (blob: Blob) => (\n new Promise((resolve) => {\n const reader = new FileReader()\n reader.onloadend = () => resolve(reader.result)\n reader.readAsDataURL(blob)\n })\n)\n","import { useMemo } from 'react'\nimport { useCreateMessage } from '@/hooks/messages/useCreateMessage'\nimport { useRecorder } from '@/hooks/audioThreads/useRecorder'\nimport { useMessageAudio } from '@/hooks/audioThreads/useMessageAudio'\nimport { useLatestMessage } from '@/hooks/messages/useLatestMessage'\nimport { statusMessages } from './lib/statusMessages'\n\ntype Args = {\n messageAudioProps: ReturnType<typeof useMessageAudio>\n recorderProps: ReturnType<typeof useRecorder>\n createMessageProps: ReturnType<typeof useCreateMessage>\n}\n\nexport const useStatus = ({\n messageAudioProps,\n recorderProps,\n createMessageProps,\n}: Args) => {\n const latestMessageProps = useLatestMessage()\n\n const status = useMemo((): keyof typeof statusMessages => {\n if (recorderProps.status === 'recording') return 'recording'\n if (createMessageProps.isPending) return 'creatingMessage'\n\n if (messageAudioProps.paused || !messageAudioProps.isAudioPlayed) return 'playerPaused'\n if (messageAudioProps.playing || messageAudioProps.isPending) return 'playing'\n if (!messageAudioProps.isAudioPlayed && !messageAudioProps.isReady) return 'loading'\n if (latestMessageProps.latestMessage?.status === 'in_progress') return 'creatingMessage'\n if (recorderProps.status === 'idle') return 'idle'\n if (recorderProps.status === 'paused') return 'recorderPaused'\n\n return 'loading'\n }, [\n latestMessageProps,\n messageAudioProps,\n recorderProps,\n createMessageProps,\n ])\n\n return {\n status,\n }\n}\n","import dayjs, { Dayjs } from 'dayjs'\nimport { useAudioCapture, UseAudioCaptureProps } from 'use-audio-capture'\nimport { useMemo, useRef, useState, useCallback, useEffect } from 'react'\nimport { useAudioPlayer } from 'react-use-audio-player'\nimport { useInterval } from '@/hooks/misc/useInterval'\nimport { AudioEngine } from '@/types'\n\ntype Args = UseAudioCaptureProps & {\n isStopOnSilence: boolean\n}\n\nexport const useRecorder = ({\n isStopOnSilence,\n onStart,\n onStop,\n}: Args) => {\n const [silenceStart, setSilenceStart] = useState<Dayjs | null>(null)\n const [noiseStart, setNoiseStart] = useState<Dayjs | null>(null)\n const [mediaStream, setMediaStream] = useState<MediaStream | null>(null)\n const [status, setStatus] = useState<'idle' | 'recording' | 'stopped' | 'paused'>('idle')\n const startAudioPlayer = useAudioPlayer()\n const endAudioPlayer = useAudioPlayer()\n const [isLoaded, setIsLoaded] = useState(false)\n\n useEffect(() => {\n if (isLoaded) return\n setIsLoaded(true)\n\n // startAudioPlayer.load('/sounds/warning.wav', {\n // html5: true,\n // })\n // endAudioPlayer.load('/sounds/success.wav', {\n // html5: true,\n // })\n }, [isLoaded, startAudioPlayer, endAudioPlayer])\n\n const audioCaptureProps = useAudioCapture({\n onStart: (event, opts) => {\n // startAudioPlayer.play()\n setStatus('recording')\n setMediaStream(opts.mediaStream)\n isInited.current = false\n if (onStart) onStart(event, opts)\n\n setSilenceStart(null)\n setNoiseStart(null)\n },\n onStop: async (...args) => {\n // endAudioPlayer.play()\n setStatus('stopped')\n if (onStop) await onStop(...args)\n setSilenceStart(null)\n setNoiseStart(null)\n },\n onPause: () => {\n setStatus('paused')\n\n setSilenceStart(null)\n setNoiseStart(null)\n },\n onResume: () => {\n setStatus('recording')\n\n setSilenceStart(null)\n setNoiseStart(null)\n },\n })\n\n const [audioEngine, setAudioEngine] = useState<AudioEngine | null>(null)\n\n const isInited = useRef(false)\n\n useEffect(() => {\n if (!mediaStream) return\n if (isInited.current) return\n isInited.current = true\n\n const audioContext = new AudioContext()\n\n setAudioEngine({\n source: audioContext.createMediaStreamSource(mediaStream),\n audioContext,\n })\n }, [isInited, mediaStream])\n\n const visualizationAnalyser = useMemo(() => {\n if (!audioEngine) return null\n\n const result = audioEngine.audioContext.createAnalyser()\n\n audioEngine.source.connect(result)\n return result\n }, [audioEngine])\n\n const silenceAnalyser = useMemo(() => {\n if (!audioEngine) return null\n\n const result = audioEngine.audioContext.createAnalyser()\n result.minDecibels = -60\n\n audioEngine.source.connect(result)\n return result\n }, [audioEngine])\n\n const handleSilence = useCallback(() => {\n if (!silenceAnalyser) return\n\n const frequencyData = new Uint8Array(silenceAnalyser.frequencyBinCount)\n silenceAnalyser.getByteFrequencyData(frequencyData)\n\n const isSilent = frequencyData.every((f) => f === 0)\n\n setSilenceStart((silenceStart: Dayjs | null) => {\n if (isSilent) return silenceStart || dayjs()\n\n return null\n })\n\n setNoiseStart((noiseStart: Dayjs | null) => {\n if (isSilent) return noiseStart\n\n return noiseStart || dayjs()\n })\n\n requestAnimationFrame(() => handleSilence())\n }, [silenceAnalyser, setNoiseStart, setSilenceStart])\n\n useEffect(() => {\n if (!isStopOnSilence) return\n\n requestAnimationFrame(() => handleSilence())\n }, [handleSilence, isStopOnSilence])\n\n useInterval(() => {\n if (!isStopOnSilence) return\n if (status !== 'recording') return\n if (!silenceStart) return\n if (!noiseStart) return\n if (!silenceStart.isBefore(dayjs().subtract(1.5, 'second'))) return\n\n audioCaptureProps.stop()\n }, 300)\n\n return {\n ...audioCaptureProps,\n status,\n visualizationAnalyser,\n }\n}\n","import { useEffect, useRef } from 'react';\n\nexport const useInterval = (callback: Function, delay?: number | null) => {\n const savedCallback = useRef<Function>(() => {})\n\n useEffect(() => {\n savedCallback.current = callback\n })\n\n useEffect(() => {\n if (delay !== null) {\n const interval = setInterval(() => savedCallback.current(), delay || 0)\n return () => clearInterval(interval)\n }\n\n return undefined\n }, [delay])\n}\n","import { useMemo, useRef, useState, useEffect } from 'react'\nimport nlp from 'compromise'\nimport { Howler } from 'howler'\nimport { useAudioPlayer } from 'react-use-audio-player'\nimport { useLatestMessage } from '@/hooks/messages/useLatestMessage'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\nimport { AudioEngine } from '@/types'\nimport { isOptimistic } from '@/lib/optimistic/isOptimistic'\nimport { input as getInput } from './lib/input'\nimport { isHtmlAudioSupported } from './lib/isHtmlAudioSupported'\n\ntype MessageSentence = {\n messageId: string\n sentence: string\n}\n\nconst FULL_SENTENCE_REGEX = /[\\.?!]$/\n\nconst getMessageSentences = ({\n messageId,\n input,\n}: {\n messageId: string\n input: string\n}) => {\n const sentences = nlp(input).sentences().json()\n\n return sentences.map((sentence: { text: string }) => ({\n messageId,\n sentence: sentence.text,\n }))\n}\n\nexport const useMessageAudio = ({\n onEnd,\n}: {\n onEnd: () => void\n}) => {\n const [isAudioPlayed, setIsAudioPlayed] = useState(false)\n const [stoppedMessageIds, setStoppedMessageIds] = useState<string[]>([])\n const [playedMessageSentences, setPlayedMessageSentences] = useState<MessageSentence[]>([])\n const audioPlayer = useAudioPlayer()\n const nextAudioPlayer = useAudioPlayer()\n const superinterfaceContext = useSuperinterfaceContext()\n const [isPlaying, setIsPlaying] = useState(false)\n\n const latestMessageProps = useLatestMessage()\n\n const unplayedMessageSentences = useMemo(() => {\n if (!latestMessageProps.latestMessage) return []\n if (latestMessageProps.latestMessage.role !== 'assistant') return []\n if (stoppedMessageIds.includes(latestMessageProps.latestMessage.id)) return []\n\n const input = getInput({\n message: latestMessageProps.latestMessage,\n })\n\n if (!input) return []\n\n const messageSentences = getMessageSentences({\n messageId: latestMessageProps.latestMessage.id,\n input,\n })\n\n return messageSentences.filter((ms: { messageId: string, sentence: string }) => (\n !playedMessageSentences.find((pms) => pms.messageId === ms.messageId && pms.sentence === ms.sentence)\n ))\n }, [latestMessageProps, playedMessageSentences])\n\n useEffect(() => {\n if (isPlaying) return\n if (audioPlayer.playing) return\n if (!latestMessageProps.latestMessage) return\n if (latestMessageProps.latestMessage.role !== 'assistant') return\n\n const firstUnplayedMessageSentence = unplayedMessageSentences[0]\n if (!firstUnplayedMessageSentence) {\n return\n }\n\n const isFullSentence = isOptimistic({ id: latestMessageProps.latestMessage.id }) ||\n latestMessageProps.latestMessage.status !== 'in_progress' ||\n FULL_SENTENCE_REGEX.test(firstUnplayedMessageSentence.sentence)\n\n if (!isFullSentence) return\n setIsPlaying(true)\n\n setPlayedMessageSentences((prev) => [...prev, firstUnplayedMessageSentence])\n\n const searchParams = new URLSearchParams({\n input: firstUnplayedMessageSentence.sentence,\n ...superinterfaceContext.variables,\n })\n\n audioPlayer.load(`${superinterfaceContext.baseUrl}/tts?${searchParams}`, {\n format: 'mp3',\n autoplay: isAudioPlayed,\n html5: isHtmlAudioSupported,\n onplay: () => {\n setIsAudioPlayed(true)\n },\n onstop: () => {\n setStoppedMessageIds((prev) => [...prev, firstUnplayedMessageSentence.messageId])\n setIsPlaying(false)\n },\n onload: () => {\n const nextUnplayedMessageSentence = unplayedMessageSentences[1]\n if (!nextUnplayedMessageSentence) return\n\n const isNextFullSentence = FULL_SENTENCE_REGEX.test(nextUnplayedMessageSentence.sentence)\n if (!isNextFullSentence) return\n\n const nextSearchParams = new URLSearchParams({\n input: nextUnplayedMessageSentence.sentence,\n ...superinterfaceContext.variables,\n })\n\n nextAudioPlayer.load(`${superinterfaceContext.baseUrl}/tts?${nextSearchParams}`, {\n format: 'mp3',\n autoplay: false,\n html5: isHtmlAudioSupported,\n })\n },\n onend: () => {\n setIsPlaying(false)\n\n if (unplayedMessageSentences.length === 1 && latestMessageProps.latestMessage.status !== 'in_progress') {\n onEnd()\n }\n },\n })\n }, [\n unplayedMessageSentences,\n isPlaying,\n superinterfaceContext,\n latestMessageProps,\n audioPlayer,\n nextAudioPlayer,\n playedMessageSentences,\n onEnd,\n ])\n\n useEffect(() => {\n if (isHtmlAudioSupported) {\n // @ts-ignore-next-line\n if (!Howler?._howls[0]?._sounds[0]?._node) return\n\n // @ts-ignore-next-line\n Howler._howls[0]._sounds[0]._node.crossOrigin = 'anonymous'\n }\n }, [audioPlayer])\n\n const [audioEngine, setAudioEngine] = useState<AudioEngine | null>(null)\n\n const isAudioEngineInited = useRef(false)\n\n useEffect(() => {\n if (!audioPlayer.playing) return\n if (isAudioEngineInited.current) return\n isAudioEngineInited.current = true\n\n if (isHtmlAudioSupported) {\n const audioContext = new AudioContext()\n setAudioEngine({\n // @ts-ignore-next-line\n source: audioContext.createMediaElementSource(Howler._howls[0]._sounds[0]._node),\n audioContext,\n })\n } else {\n setAudioEngine({\n source: Howler.masterGain,\n audioContext: Howler.ctx,\n })\n }\n }, [audioPlayer, isAudioEngineInited])\n\n const visualizationAnalyser = useMemo(() => {\n if (!audioEngine) return null\n\n const result = audioEngine.audioContext.createAnalyser()\n\n audioEngine.source.connect(audioEngine.audioContext.destination)\n audioEngine.source.connect(result)\n return result\n }, [audioEngine])\n\n const isPending = useMemo(() => isPlaying || unplayedMessageSentences.length > 0, [isPlaying, unplayedMessageSentences])\n\n return {\n isPending,\n isAudioPlayed,\n ...audioPlayer,\n visualizationAnalyser,\n }\n}\n","import OpenAI from 'openai'\nimport { isEmpty } from 'radash'\nimport { SerializedMessage } from '@/types'\n\ntype Args = {\n message: SerializedMessage\n}\n\nexport const input = ({\n message,\n}: Args) => {\n const textContents = (message.content as OpenAI.Beta.Threads.Messages.TextContentBlock[]).filter((c: OpenAI.Beta.Threads.Messages.TextContentBlock) => (\n c.type === 'text'\n ))\n\n const result = textContents.map((c: OpenAI.Beta.Threads.Messages.TextContentBlock) => (\n c.text.value\n )).join(' ')\n\n if (isEmpty(result)) return null\n\n return result\n}\n","import { useContext, useState, useCallback, useEffect } from 'react'\nimport _ from 'lodash'\nimport { Flex } from '@radix-ui/themes'\nimport { AssistantAvatar } from '@/components/messageGroups/MessageGroupBase/AssistantAvatar'\nimport { Name } from '@/components/messageGroups/MessageGroupBase/Name'\nimport { AssistantNameContext } from '@/contexts/assistants/AssistantNameContext'\nimport { useAudioThreadContext } from '@/hooks/threads/useAudioThreadContext'\nimport { BarsVisualizer } from '@/components/threads/AudioThread/BarsVisualizer'\nimport type { StyleProps } from '@/types'\n\nexport const Visualization = (props: StyleProps) => {\n const audioThreadContext = useAudioThreadContext()\n const assistantNameContext = useContext(AssistantNameContext)\n const [scale, setScale] = useState(0)\n\n const draw = useCallback(({ visualizationAnalyser }: { visualizationAnalyser: AnalyserNode | null }) => {\n if (!visualizationAnalyser) {\n setScale(1)\n return\n }\n\n const frequencyData = new Uint8Array(visualizationAnalyser.frequencyBinCount / 15)\n visualizationAnalyser.getByteFrequencyData(frequencyData)\n\n setScale(1 + _.mean(frequencyData) / 255 / 10)\n\n requestAnimationFrame(() => draw({ visualizationAnalyser }))\n }, [])\n\n useEffect(() => {\n draw({ visualizationAnalyser: audioThreadContext.recorderProps.visualizationAnalyser })\n }, [draw, audioThreadContext])\n\n return (\n <Flex\n direction=\"column\"\n align=\"center\"\n justify=\"center\"\n mb=\"3\"\n flexGrow=\"1\"\n {...props}\n >\n <Flex\n align=\"center\"\n justify=\"center\"\n height=\"200px\"\n width=\"200px\"\n style={{\n backgroundColor: audioThreadContext.status === 'playing' ? 'var(--accent-4)' : 'var(--gray-4)',\n borderRadius: '9999px',\n scale,\n }}\n >\n <BarsVisualizer\n visualizationAnalyser={audioThreadContext.messageAudioProps.visualizationAnalyser}\n backgroundColor={audioThreadContext.status === 'playing' ? 'var(--accent-11)' : 'var(--gray-11)'}\n height=\"40px\"\n barWidth=\"24px\"\n />\n </Flex>\n\n <Flex\n ml=\"-22.5px\"\n gap=\"3\"\n pt=\"5\"\n >\n <AssistantAvatar />\n <Name>\n {assistantNameContext}\n </Name>\n </Flex>\n </Flex>\n )\n}\n","import { useContext } from 'react'\nimport { AudioThreadContext } from '@/contexts/threads/AudioThreadContext'\n\nexport const useAudioThreadContext = () => (\n useContext(AudioThreadContext)\n)\n","'use client'\nimport _ from 'lodash'\nimport {\n Flex,\n Grid,\n} from '@radix-ui/themes'\nimport { useState, useEffect, useCallback } from 'react'\nimport { cluster } from 'radash'\n\nconst barCount = 4\n\nexport const BarsVisualizer = ({\n visualizationAnalyser,\n backgroundColor,\n height,\n barWidth,\n}: {\n visualizationAnalyser: AnalyserNode | null\n backgroundColor: string\n height: string\n barWidth: string\n}) => {\n const [barHeights, setBarHeights] = useState<number[]>([])\n\n const draw = useCallback(({ visualizationAnalyser }: { visualizationAnalyser: AnalyserNode | null }) => {\n if (!visualizationAnalyser) {\n setBarHeights(Array(barCount).fill(0))\n return\n }\n\n const frequencyData = new Uint8Array(visualizationAnalyser.frequencyBinCount / 15)\n visualizationAnalyser.getByteFrequencyData(frequencyData)\n\n // @ts-ignore-next-line\n const clusteredFrequencyData = cluster(frequencyData, frequencyData.length / barCount)\n\n setBarHeights(\n clusteredFrequencyData.map((frequencyDataCluster) => (\n _.mean(frequencyDataCluster) / 255 * 100\n ))\n )\n\n requestAnimationFrame(() => draw({ visualizationAnalyser }))\n }, [])\n\n useEffect(() => {\n draw({ visualizationAnalyser })\n }, [draw, visualizationAnalyser])\n\n return (\n <Grid\n columns={`${barCount}`}\n gap=\"1\"\n width=\"auto\"\n style={{\n // TODO not sure why we need this\n gridTemplateColumns: 'repeat(4, minmax(0, 1fr))',\n }}\n >\n {barHeights.map((barHeight, index) => (\n <Flex\n key={index}\n direction=\"column\"\n align=\"center\"\n justify=\"center\"\n height={height}\n >\n <Flex\n minHeight=\"50%\"\n maxHeight=\"100%\"\n height={`${barHeight + 20}%`}\n width={barWidth}\n style={{\n backgroundColor,\n borderRadius: 'var(--radius-6)',\n }}\n />\n </Flex>\n ))}\n </Grid>\n )\n}\n","import {\n Flex,\n Text,\n} from '@radix-ui/themes'\nimport type { StyleProps } from '@/types'\n\nconst html = ({ texts }: { texts: string[] }) => `\n .status-messages-texts:after {\n content: '${texts[0]}';\n animation: texts ${texts.length * 5}s linear infinite;\n }\n\n @keyframes texts {\n ${texts.map((_, i) => `\n ${i * 100 / texts.length}% {\n content: \"${texts[i]}\";\n }\n `).join('')}\n }`\n\nexport const StatusMessages = ({\n texts,\n className,\n style,\n}: {\n texts: string[]\n} & StyleProps) => (\n <Flex\n justify=\"center\"\n pb=\"5\"\n className={className}\n style={style}\n >\n <Text\n size=\"2\"\n weight=\"regular\"\n color=\"gray\"\n className=\"status-messages-texts\"\n />\n\n <style\n dangerouslySetInnerHTML={{\n __html: html({ texts }),\n }}\n />\n </Flex>\n)\n","import { useAudioThreadContext } from '@/hooks/threads/useAudioThreadContext'\nimport type { StyleProps } from '@/types'\nimport { StatusMessages } from './StatusMessages'\n\nexport const Status = (props: StyleProps) => {\n const audioThreadContext = useAudioThreadContext()\n\n if (audioThreadContext.status === 'recording') {\n return (\n <StatusMessages\n texts={[\n 'Start speaking',\n 'Listening',\n 'Finish speaking to send',\n 'Click the button below to send manually',\n ]}\n {...props}\n />\n )\n }\n\n if (['recorderPaused', 'idle', 'playerPaused'].includes(audioThreadContext.status)) {\n return (\n <StatusMessages\n texts={[\n 'Click the button below to activate',\n ]}\n {...props}\n />\n )\n }\n\n if (audioThreadContext.status === 'playing') {\n return (\n <StatusMessages\n texts={[\n 'Click the button below to interrupt',\n ]}\n {...props}\n />\n )\n }\n\n return (\n <StatusMessages\n texts={[\n 'Thinking',\n ]}\n {...props}\n />\n )\n}\n","import {\n Flex,\n} from '@radix-ui/themes'\nimport { BarsVisualizer } from '@/components/threads/AudioThread/BarsVisualizer'\nimport { useAudioThreadContext } from '@/hooks/threads/useAudioThreadContext'\nimport { MicIcon } from './MicIcon'\nimport { ActionButton } from './ActionButton'\nimport type { StyleProps } from '@/types'\n\nexport const Form = (props: StyleProps) => {\n const audioThreadContext = useAudioThreadContext()\n\n return (\n <Flex\n direction=\"column\"\n align=\"center\"\n {...props}\n >\n <Flex\n pb=\"3\"\n align=\"center\"\n >\n <Flex\n ml=\"-22.5px\"\n mr=\"2\"\n align=\"center\"\n >\n <MicIcon\n style={{\n color: audioThreadContext.status === 'recording' ? 'var(--accent-11)' : 'var(--gray-11)',\n }}\n />\n </Flex>\n\n <Flex\n px=\"2\"\n py=\"1\"\n style= {{\n backgroundColor: audioThreadContext.status === 'recording' ? 'var(--accent-4)' : 'var(--gray-4)',\n borderRadius: 'var(--radius-6)',\n }}\n >\n <BarsVisualizer\n visualizationAnalyser={audioThreadContext.recorderProps.visualizationAnalyser}\n backgroundColor={audioThreadContext.status === 'recording' ? 'var(--accent-11)' : 'var(--gray-11)'}\n height=\"20px\"\n barWidth=\"12px\"\n />\n </Flex>\n </Flex>\n\n <ActionButton />\n </Flex>\n )\n}\n","import { SVGProps } from 'react'\n\nexport const MicIcon = (props: SVGProps<SVGSVGElement>) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"currentColor\"\n stroke=\"currentColor\"\n strokeWidth={0}\n viewBox=\"0 0 384 512\"\n height=\"15\"\n width=\"15\"\n {...props}\n >\n <path\n stroke=\"none\"\n d=\"M192 0c-53 0-96 43-96 96v160c0 53 43 96 96 96s96-43 96-96V96c0-53-43-96-96-96zM64 216c0-13.3-10.7-24-24-24s-24 10.7-24 24v40c0 89.1 66.2 162.7 152 174.4V464h-48c-13.3 0-24 10.7-24 24s10.7 24 24 24h144c13.3 0 24-10.7 24-24s-10.7-24-24-24h-48v-33.6c85.8-11.7 152-85.3 152-174.4v-40c0-13.3-10.7-24-24-24s-24 10.7-24 24v40c0 70.7-57.3 128-128 128S64 326.7 64 256v-40z\"\n />\n </svg>\n)\n","import {\n Flex,\n IconButton,\n} from '@radix-ui/themes'\nimport {\n StopIcon,\n PauseIcon,\n ArrowUpIcon,\n ResumeIcon,\n} from '@radix-ui/react-icons'\nimport { useAudioThreadContext } from '@/hooks/threads/useAudioThreadContext'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\n\nexport const ActionButton = () => {\n const audioThreadContext = useAudioThreadContext()\n const superinterfaceContext = useSuperinterfaceContext()\n\n if (audioThreadContext.status === 'recording') {\n return (\n <Flex\n align=\"center\"\n >\n <Flex\n mr=\"3\"\n ml=\"-7\"\n >\n <IconButton\n onClick={audioThreadContext.recorderProps.pause}\n color=\"gray\"\n variant=\"soft\"\n size=\"1\"\n >\n <PauseIcon />\n </IconButton>\n </Flex>\n\n <IconButton\n onClick={audioThreadContext.recorderProps.stop}\n highContrast\n variant=\"soft\"\n size=\"4\"\n >\n <ArrowUpIcon />\n </IconButton>\n </Flex>\n )\n }\n\n if (audioThreadContext.status === 'recorderPaused') {\n return (\n <IconButton\n onClick={audioThreadContext.recorderProps.resume}\n color=\"red\"\n size=\"4\"\n >\n <ResumeIcon />\n </IconButton>\n )\n }\n\n if (audioThreadContext.status === 'idle') {\n return (\n <IconButton\n onClick={() => audioThreadContext.recorderProps.start()}\n size=\"4\"\n color=\"red\"\n />\n )\n }\n\n if (audioThreadContext.status === 'playing') {\n return (\n <IconButton\n onClick={() => {\n audioThreadContext.messageAudioProps.stop()\n superinterfaceContext.createMessageAbortControllerRef.current?.abort()\n audioThreadContext.recorderProps.start()\n }}\n size=\"4\"\n color=\"gray\"\n variant=\"soft\"\n >\n <StopIcon />\n </IconButton>\n )\n }\n\n if (audioThreadContext.status === 'playerPaused') {\n return (\n <IconButton\n onClick={() => audioThreadContext.messageAudioProps.play()}\n size=\"4\"\n >\n <ResumeIcon />\n </IconButton>\n )\n }\n\n return (\n <IconButton\n size=\"4\"\n variant=\"soft\"\n disabled\n />\n )\n}\n","import { Root, Args as RootArgs } from './Root'\nimport { Visualization } from './Visualization'\nimport { Status } from './Status'\nimport { Form } from './Form'\n\ntype Args = Omit<RootArgs, 'children'>\n\nexport const AudioThread = (props: Args) => (\n <Root {...props}>\n <Visualization />\n <Status />\n <Form />\n </Root>\n)\n\nAudioThread.Root = Root\nAudioThread.Visualization = Visualization\nAudioThread.Status = Status\nAudioThread.Form = Form\n","import { AudioThread } from '@/components/threads/AudioThread'\nimport { Root } from '@/components/threads/ThreadDialog/Root'\nimport { Trigger } from '@/components/threads/ThreadDialog/Trigger'\nimport { Content } from '@/components/threads/ThreadDialog/Content'\nimport type { StyleProps } from '@/types'\n\nexport const AudioThreadDialog = (props: StyleProps) => (\n <Root {...props}>\n <Content.Root>\n <AudioThread />\n </Content.Root>\n <Trigger />\n </Root>\n)\n\nAudioThreadDialog.Root = Root\nAudioThreadDialog.Trigger = Trigger\nAudioThreadDialog.Content = Content\n","import { useMemo } from 'react'\nimport { MarkdownContext, type MarkdownContextType } from '@/contexts/markdown/MarkdownContext'\nimport { useMarkdownContext } from '@/hooks/markdown/useMarkdownContext'\nimport { merge } from '@/lib/misc/merge'\n\nexport const MarkdownProvider = ({\n children,\n components,\n ...rest\n}: {\n children: React.ReactNode\n} & Partial<MarkdownContextType>) => {\n const prevMarkdownContext = useMarkdownContext()\n\n const value = useMemo(() => (\n merge(prevMarkdownContext, rest)\n ), [rest, prevMarkdownContext])\n\n return (\n <MarkdownContext.Provider\n value={value}\n >\n {children}\n </MarkdownContext.Provider>\n )\n}\n","import { AvatarType as AvatarTypeEnum } from '@/lib/enums'\nimport { Avatar as AvatarType, StyleProps } from '@/types'\nimport { Avatar as RadixAvatar } from '@radix-ui/themes'\nimport { ImageAvatar } from '@/components/imageAvatars/ImageAvatar'\nimport { IconAvatar } from '@/components/iconAvatars/IconAvatar'\n\nexport const Avatar = ({\n avatar,\n size = '1',\n className,\n style,\n}: {\n avatar: AvatarType\n size?: '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9'\n} & StyleProps) => {\n if (avatar) {\n if (avatar.type === AvatarTypeEnum.IMAGE && avatar.imageAvatar) {\n return (\n <ImageAvatar\n imageAvatar={avatar.imageAvatar}\n size={size}\n className={className}\n style={style}\n />\n )\n }\n\n if (avatar.type === AvatarTypeEnum.ICON && avatar.iconAvatar) {\n return (\n <IconAvatar\n iconAvatar={avatar.iconAvatar}\n size={size}\n className={className}\n style={style}\n />\n )\n }\n }\n\n return (\n <RadixAvatar\n fallback=\"\"\n size={size}\n className={className}\n style={style}\n />\n )\n}\n","import { Avatar } from '@radix-ui/themes'\nimport { Size, ImageAvatar as ImageAvatarType, StyleProps } from '@/types'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\nimport { optimizedSrc } from './lib/optimizedSrc'\n\nexport const ImageAvatar = ({\n imageAvatar,\n size,\n className,\n style,\n}: {\n imageAvatar: ImageAvatarType\n size: Size\n} & StyleProps) => {\n const superinterfaceContext = useSuperinterfaceContext()\n\n return (\n <Avatar\n className={className}\n style={style}\n fallback=\"\"\n src={optimizedSrc({ imageAvatar, size, superinterfaceContext })}\n size={size}\n />\n )\n}\n","import { Size, ImageAvatar } from '@/types'\n\nconst width = ({\n size,\n}: {\n size: Size\n}) => {\n if (size === '1') {\n return 48\n } else if (size === '2') {\n return 64\n } else if (size === '3') {\n return 96\n } else if (size === '4') {\n return 96\n } else if (size === '5') {\n return 128\n } else if (size === '6') {\n return 256\n } else if (size === '7') {\n return 256\n } else if (size === '8') {\n return 256\n } else if (size === '9') {\n return 384\n }\n\n return 384\n}\n\nexport const path = ({\n imageAvatar,\n size,\n}: {\n imageAvatar: ImageAvatar\n size: Size\n}) => (\n `/_next/image?url=${encodeURIComponent(imageAvatar.url)}&w=${width({ size })}&q=95`\n)\n","import { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\n\nexport const host = ({\n superinterfaceContext,\n}: {\n superinterfaceContext: ReturnType<typeof useSuperinterfaceContext>\n}) => {\n if (!superinterfaceContext.baseUrl) return ''\n if (!/^https?:\\/\\//i.test(superinterfaceContext.baseUrl)) return ''\n\n return new URL(superinterfaceContext.baseUrl).origin\n}\n","import { Size, ImageAvatar } from '@/types'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\nimport { path } from './path'\nimport { host } from './host'\n\nexport const optimizedSrc = ({\n imageAvatar,\n size,\n superinterfaceContext,\n}: {\n imageAvatar: ImageAvatar\n size: Size\n superinterfaceContext: ReturnType<typeof useSuperinterfaceContext>\n}) => {\n if (!imageAvatar.url) return ''\n if (imageAvatar.url.endsWith('.svg')) return imageAvatar.url\n\n return `${host({ superinterfaceContext })}${path({ imageAvatar, size })}`\n}\n","import { useMemo } from 'react'\nimport { IconAvatar as IconAvatarType, StyleProps } from '@/types'\nimport { Avatar } from '@radix-ui/themes'\nimport { iconAvatarComponents } from '@/lib/iconAvatars/iconAvatarComponents'\n\nexport const IconAvatar = ({\n iconAvatar,\n size,\n className,\n style,\n}: {\n iconAvatar: IconAvatarType\n size: '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9'\n} & StyleProps) => {\n const Component = useMemo(() => (\n iconAvatarComponents[iconAvatar.name]\n ), [iconAvatar])\n\n return (\n <Avatar\n className={className}\n style={style}\n size={size}\n fallback={(\n Component ? (\n <Component />\n ) : (\n ''\n )\n )}\n />\n )\n}\n","import { IconAvatarName } from '@/lib/enums'\nimport {\n BackpackIcon,\n RocketIcon,\n MagicWandIcon,\n CubeIcon,\n TargetIcon,\n DiscIcon,\n GlobeIcon,\n StarIcon,\n LightningBoltIcon,\n FaceIcon,\n PersonIcon,\n HeartIcon,\n} from '@radix-ui/react-icons'\n\nexport const iconAvatarComponents = {\n [IconAvatarName.BACKPACK]: BackpackIcon,\n [IconAvatarName.ROCKET]: RocketIcon,\n [IconAvatarName.MAGIC_WAND]: MagicWandIcon,\n [IconAvatarName.CUBE]: CubeIcon,\n [IconAvatarName.TARGET]: TargetIcon,\n [IconAvatarName.DISC]: DiscIcon,\n [IconAvatarName.GLOBE]: GlobeIcon,\n [IconAvatarName.STAR]: StarIcon,\n [IconAvatarName.LIGHTNING_BOLT]: LightningBoltIcon,\n [IconAvatarName.FACE]: FaceIcon,\n [IconAvatarName.PERSON]: PersonIcon,\n [IconAvatarName.HEART]: HeartIcon,\n}\n","import { useMemo } from 'react'\nimport { ComponentsContext } from '@/contexts/components/ComponentsContext'\nimport { useComponents } from '@/hooks/components/useComponents'\nimport { merge } from '@/lib/misc/merge'\n\nexport const ComponentsProvider = ({\n children,\n ...rest\n}: {\n children: React.ReactNode\n}) => {\n const prevComponents = useComponents()\n\n const value = useMemo(() => (\n merge(prevComponents, rest)\n ), [rest, prevComponents])\n\n return (\n <ComponentsContext.Provider\n value={value}\n >\n {children}\n </ComponentsContext.Provider>\n )\n}\n","import { useContext } from 'react'\nimport { ComponentsContext } from '@/contexts/components/ComponentsContext'\n\nexport const useComponents = () => (\n useContext(ComponentsContext)\n)\n","import { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\nimport { AssistantAvatarContext } from '@/contexts/assistants/AssistantAvatarContext'\nimport { AssistantNameContext } from '@/contexts/assistants/AssistantNameContext'\nimport { useAssistant } from '@/hooks/assistants/useAssistant'\nimport { Avatar } from '@/components/avatars/Avatar'\n\ntype Args = {\n children: React.ReactNode\n}\n\nexport const AssistantProvider = ({\n children,\n}: Args) => {\n const superinterfaceContext = useSuperinterfaceContext()\n const { assistant } = useAssistant({\n assistantId: superinterfaceContext.variables.assistantId,\n })\n\n return (\n <AssistantNameContext.Provider value={assistant?.name ?? ''}>\n <AssistantAvatarContext.Provider\n value={<Avatar avatar={assistant?.avatar} />}\n >\n {children}\n </AssistantAvatarContext.Provider>\n </AssistantNameContext.Provider>\n )\n}\n"]}