@superinterface/react 3.5.2 → 3.5.4

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","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 ...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 ...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"]}
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/lib/recma/recmaFallbackComponentPlugin.ts","../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","visit","CONTINUE","SKIP","recmaFallbackComponentPlugin","tree","node","kind","varDecl","declarations","declarator","init","funcNode","body","test","consequent","argument","params","operator","left","right","generator","async","alternate","ifNode","componentName","expression","callee","assignmentExpr","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","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","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","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","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","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\";\n\n// src/lib/recma/recmaFallbackComponentPlugin.ts\nimport { visit, CONTINUE, SKIP } from \"estree-util-visit\";\nvar recmaFallbackComponentPlugin = () => {\n return (tree) => {\n visit(tree, (node) => {\n if (node.type === \"VariableDeclaration\" && node.kind === \"const\") {\n const varDecl = node;\n for (const declarator of varDecl.declarations) {\n if (declarator.id.type === \"ObjectPattern\" && declarator.init?.type === \"Identifier\" && declarator.init.name === \"_components\" || declarator.id.type === \"ObjectPattern\" && declarator.init?.type === \"ObjectExpression\") {\n varDecl.kind = \"let\";\n return SKIP;\n }\n }\n }\n return CONTINUE;\n });\n visit(tree, (node) => {\n if (node.type === \"FunctionDeclaration\" && node.id?.type === \"Identifier\" && node.id.name === \"_missingMdxReference\") {\n const funcNode = node;\n funcNode.body = {\n type: \"BlockStatement\",\n body: [\n {\n type: \"IfStatement\",\n test: { type: \"Identifier\", name: \"component\" },\n consequent: {\n type: \"ReturnStatement\",\n argument: {\n type: \"FunctionExpression\",\n id: null,\n params: [{ type: \"Identifier\", name: \"props\" }],\n body: {\n type: \"BlockStatement\",\n body: [\n {\n type: \"ReturnStatement\",\n argument: {\n type: \"BinaryExpression\",\n operator: \"+\",\n left: {\n type: \"BinaryExpression\",\n operator: \"+\",\n left: { type: \"Literal\", value: \"<\" },\n right: { type: \"Identifier\", name: \"id\" }\n },\n right: {\n type: \"BinaryExpression\",\n operator: \"+\",\n left: { type: \"Literal\", value: \"></\" },\n right: {\n type: \"BinaryExpression\",\n operator: \"+\",\n left: { type: \"Identifier\", name: \"id\" },\n right: { type: \"Literal\", value: \">\" }\n }\n }\n }\n }\n ]\n },\n generator: false,\n async: false\n }\n },\n alternate: null\n }\n ]\n };\n return SKIP;\n }\n return CONTINUE;\n });\n visit(tree, (node) => {\n if (node.type === \"IfStatement\") {\n const ifNode = node;\n if (ifNode.test.type === \"UnaryExpression\" && ifNode.test.operator === \"!\" && ifNode.test.argument.type === \"Identifier\") {\n const componentName = ifNode.test.argument.name;\n if (ifNode.consequent.type === \"ExpressionStatement\" && ifNode.consequent.expression.type === \"CallExpression\" && ifNode.consequent.expression.callee.type === \"Identifier\" && ifNode.consequent.expression.callee.name === \"_missingMdxReference\") {\n const assignmentExpr = {\n type: \"AssignmentExpression\",\n operator: \"=\",\n left: { type: \"Identifier\", name: componentName },\n right: ifNode.consequent.expression\n };\n ifNode.consequent = {\n type: \"ExpressionStatement\",\n expression: assignmentExpr\n };\n return SKIP;\n }\n }\n }\n return CONTINUE;\n });\n };\n};\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: [recmaFallbackComponentPlugin],\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 ...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 { recmaFallbackComponentPlugin } from '@/lib/recma/recmaFallbackComponentPlugin'\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: [recmaFallbackComponentPlugin],\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 { visit, CONTINUE, SKIP } from 'estree-util-visit';\nimport type {\n Node,\n VariableDeclaration,\n FunctionDeclaration,\n BlockStatement,\n IfStatement,\n CallExpression,\n AssignmentExpression,\n} from 'estree';\n\nexport const recmaFallbackComponentPlugin = () => {\n return (tree: Node) => {\n // Step 1: Change variable declarations from 'const' to 'let'\n visit(tree, (node) => {\n if (node.type === 'VariableDeclaration' && node.kind === 'const') {\n const varDecl = node as VariableDeclaration;\n\n for (const declarator of varDecl.declarations) {\n // Check for both _components and direct component destructuring patterns\n if (\n (declarator.id.type === 'ObjectPattern' &&\n declarator.init?.type === 'Identifier' &&\n declarator.init.name === '_components') ||\n (declarator.id.type === 'ObjectPattern' &&\n declarator.init?.type === 'ObjectExpression')\n ) {\n varDecl.kind = 'let';\n return SKIP;\n }\n }\n }\n return CONTINUE;\n });\n\n // Step 2: Modify the _missingMdxReference function\n visit(tree, (node) => {\n if (\n node.type === 'FunctionDeclaration' &&\n node.id?.type === 'Identifier' &&\n node.id.name === '_missingMdxReference'\n ) {\n const funcNode = node as FunctionDeclaration;\n\n funcNode.body = {\n type: 'BlockStatement',\n body: [\n {\n type: 'IfStatement',\n test: { type: 'Identifier', name: 'component' },\n consequent: {\n type: 'ReturnStatement',\n argument: {\n type: 'FunctionExpression',\n id: null,\n params: [{ type: 'Identifier', name: 'props' }],\n body: {\n type: 'BlockStatement',\n body: [\n {\n type: 'ReturnStatement',\n argument: {\n type: 'BinaryExpression',\n operator: '+',\n left: {\n type: 'BinaryExpression',\n operator: '+',\n left: { type: 'Literal', value: '<' },\n right: { type: 'Identifier', name: 'id' }\n },\n right: {\n type: 'BinaryExpression',\n operator: '+',\n left: { type: 'Literal', value: '></'},\n right: {\n type: 'BinaryExpression',\n operator: '+',\n left: { type: 'Identifier', name: 'id' },\n right: { type: 'Literal', value: '>' }\n }\n }\n }\n }\n ]\n },\n generator: false,\n async: false\n }\n },\n alternate: null\n }\n ]\n } as BlockStatement;\n\n return SKIP;\n }\n return CONTINUE;\n });\n\n // Step 3: Modify the if statements to assign the missing component\n visit(tree, (node) => {\n if (node.type === 'IfStatement') {\n const ifNode = node as IfStatement;\n\n if (\n ifNode.test.type === 'UnaryExpression' &&\n ifNode.test.operator === '!' &&\n ifNode.test.argument.type === 'Identifier'\n ) {\n const componentName = ifNode.test.argument.name;\n\n if (\n ifNode.consequent.type === 'ExpressionStatement' &&\n ifNode.consequent.expression.type === 'CallExpression' &&\n ifNode.consequent.expression.callee.type === 'Identifier' &&\n ifNode.consequent.expression.callee.name === '_missingMdxReference'\n ) {\n // Create the assignment expression\n const assignmentExpr: AssignmentExpression = {\n type: 'AssignmentExpression',\n operator: '=',\n left: { type: 'Identifier', name: componentName },\n right: ifNode.consequent.expression as CallExpression,\n };\n\n ifNode.consequent = {\n type: 'ExpressionStatement',\n expression: assignmentExpr,\n };\n\n return SKIP;\n }\n }\n }\n return CONTINUE;\n });\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 ...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"]}