@superinterface/react 3.5.0 → 3.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +3 -2
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +15 -67
- package/dist/index.d.ts +15 -67
- package/dist/index.js +3 -2
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/domas/Developer/supercorp/superinterface/packages/react/dist/index.cjs","../src/lib/misc/merge/index.ts","../src/hooks/audioThreads/useMessageAudio/lib/isHtmlAudioSupported.ts","../src/index.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":["import_lodash2","__create","Object","create","__defProp","defineProperty","__getOwnPropDesc","getOwnPropertyDescriptor","__getOwnPropNames","getOwnPropertyNames","__getProtoOf","getPrototypeOf","__hasOwnProp","prototype","hasOwnProperty","__export","target","all","name","get","enumerable","__copyProps","to","from","except","desc","key2","call","__toESM","mod","isNodeMode","__esModule","value","__toCommonJS","src_exports","AssistantAvatarContext","AssistantNameContext","AssistantProvider","AudioThread","AudioThreadDialog","Avatar","ComponentsProvider","FunctionBase","FunctionComponentsContext","MarkdownContext","MarkdownProvider","RunStep","Suggestions","SuperinterfaceProvider","Thread","ThreadDialog","ThreadDialogContext","UserAvatarContext","useAssistant","useComponents","useCreateMessage","useIsMutatingMessage","useLatestMessage","useMarkdownContext","useMessageContext","useMessageFormContext","useMessages","useSuperinterfaceContext","useThreadContext","useThreadDialogContext","module","exports","import_react","require","import_lodash","customizer","objectValue","srcValue","_","isArray","merge","obj","sources","mergeWith","cloneDeep","baseUrl","import_js_cookie","key","assistantId","Cookies","set","threadId","import_js_cookie2","remove","import_js_cookie3","cookieOptions","window","localStorage","getItem","setItem","removeItem","localStorageOptions","isIframe","self","top","SuperinterfaceContext","createContext","variables","defaultOptions","queries","mutations","threadIdStorageOptions","createMessageAbortControllerRef","current","import_react2","useContext","import_jsx_runtime","children","superinterfaceContext","import_react3","useRef","jsx","Provider","import_themes","import_radash","StartingContentSkeleton","import_jsx_runtime2","Skeleton","loading","mt","height","width","style","borderRadius","flexShrink","import_react4","ToolCallBase","import_jsx_runtime3","import_themes2","Flex","py","ml","Button","size","color","variant","boxShadow","ToolCallTitle","import_jsx_runtime4","import_themes3","Text","weight","import_react_icons","ToolCallIcon","runStep","completed_at","import_jsx_runtime5","CheckCircledIcon","cancelled_at","failed_at","status","CircleBackslashIcon","CircleIcon","formattedJsonOrRaw","JSON","stringify","parse","error","Content","fn","args","import_react5","useMemo","arguments","output","import_jsx_runtime6","jsxs","import_themes4","Code","whiteSpace","wordBreak","Box","title","import_jsx_runtime7","import_themes5","Popover","Root","Trigger","maxHeight","DefaultFunction","import_jsx_runtime8","Fn","functionComponentsContext","import_react6","Component","import_jsx_runtime9","codeInterpreter","input","import_jsx_runtime10","import_themes6","outputs","CodeInterpreter","import_jsx_runtime11","import_themes7","FileSearch","toolCall","import_jsx_runtime12","Fallback","import_jsx_runtime13","type","ToolCall","import_jsx_runtime14","function","code_interpreter","Starting","import_jsx_runtime15","import_themes8","import_react_icons2","className","import_jsx_runtime16","import_themes9","direction","ToolCalls","stepDetails","tool_calls","length","map","id","step_details","import_jsx_runtime17","ComponentsContext","import_react7","components","RunSteps","runSteps","componentsContext","import_react8","import_jsx_runtime18","import_themes10","import_react_query","threadContext","mutatingMessagesCount","useIsMutating","mutationKey","isMutatingMessage","import_react9","MessageContext","import_react10","message","Attachments","attachments","import_jsx_runtime19","import_themes11","align","pb","Badge","import_react_icons3","FileIcon","import_mdx","runtime","import_recma_mdx_escape_missing_components","Paragraph","import_jsx_runtime20","import_themes12","Link","href","download","import_jsx_runtime21","import_themes13","RadixLink","UnorderedList","import_jsx_runtime22","import_themes14","asChild","listStylePosition","OrderedList","import_jsx_runtime23","import_themes15","ListItem","import_jsx_runtime24","import_themes16","Strong","import_jsx_runtime25","import_themes17","RadixStrong","Pre","import_jsx_runtime26","import_themes18","variableParams","queryOptions","queryKeyBase","path","queryClient","queryKey","import_react_query2","infiniteQueryOptions","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","import_react_query3","useQueryClient","useInfiniteQuery","import_react11","import_react12","latestMessage","import_react_children_utilities","import_dayjs","optimisticId","uid","newMessage","prevData","role","created_at","dayjs","unix","object","content","text","annotations","run_id","assistant_id","thread_id","metadata","pageParams","latestPage","pagesRest","onMutate","prevMessages","import_radash2","omit","cancelQueries","getQueryData","setQueryData","import_json_whatwg","threadCreated","isOptimistic","import_lodash3","startsWith","extendMessage","prevRunMessages","filter","m","prevOptimitisticRunMessages","import_radash3","last","appendMessage","threadMessageCreated","messagesQueryKey","updatedContentPart","prevContentPart","delta","import_radash4","updatedContent","result","import_lodash4","forEach","index","threadMessageDelta","messagesRest","threadMessageCompleted","import_radash5","replace","threadRunCreated","threadRunFailed","threadRunStepCreated","updatedToolCall","import_radash6","import_lodash5","entries","updatedRunStep","newToolCalls","threadRunStepDelta","rs","threadRunStepCompleted","import_radash7","threadRunRequiresAction","toolCalls","toolOutputs","required_action","submit_client_tool_outputs","import_radash8","parsedArgs","toolCallId","method","headers","body","handlers","handleResponse","handler","event","console","log","mutationFn","abortController","parser","reader","done","AbortController","signal","JSONParser","stringBufferSize","paths","separator","pipeThrough","getReader","read","mutationOptions","onError","getMutationDefaults","import_react_query4","useMutation","createMessage","import_radash9","partob","mutateAsync","ToastsContext","import_react13","toasts","addToast","useToasts","import_react14","createMessageDefaultOnError","invalidateQueries","Item","suggestion","isDisabled","import_react_query5","isPending","import_jsx_runtime27","onClick","import_themes19","disabled","minHeight","Spinner","import_react_icons4","ArrowUpIcon","suggestions","import_react15","onlyText","split","c","import_radash10","isEmpty","trim","import_jsx_runtime28","import_themes20","gap","wrap","latestMessageProps","import_react16","isBlocking","isLoading","import_jsx_runtime29","import_jsx_runtime30","import_themes21","RadixCode","Image","import_jsx_runtime31","import_themes22","maxWidth","videoExtensions","isVideoSrc","src","includes","pop","isAudioSrc","endsWith","import_base","PlayButton","isPaused","import_react17","useMediaState","import_jsx_runtime32","import_themes23","IconButton","VidstackPlayButton","import_react_icons5","PlayIcon","PauseIcon","VolumeButton","volume","import_react18","isMuted","remote","useMediaRemote","import_jsx_runtime33","import_themes24","HoverCard","MuteButton","import_react_icons6","SpeakerOffIcon","SpeakerModerateIcon","side","Slider","orientation","onValueChange","changeVolume","Time","time","import_react20","duration","seeking","canSeek","import_react19","useState","setValue","useEffect","step","import_jsx_runtime34","import_themes25","Number","isFinite","onValueCommit","seek","MediaContainer","import_jsx_runtime35","import_themes26","Card","mb","Inset","clip","display","flexDirection","FullscreenButton","isFullscreen","import_react21","import_jsx_runtime36","import_themes27","VidstackFullscreenButton","import_react_icons7","ExitFullScreenIcon","EnterFullScreenIcon","Video","import_jsx_runtime37","import_react22","MediaPlayer","playsInline","hideControlsOnMouseLeave","crossOrigin","MediaProvider","import_themes28","position","bottom","left","right","p","zIndex","background","Controls","flexGrow","Group","Audio","import_jsx_runtime38","import_react23","viewType","import_themes29","Img","import_jsx_runtime39","AnnotationBase","icon","import_jsx_runtime40","import_themes30","FilePathAnnotation","annotation","nextSearchParams","import_jsx_runtime41","file_path","file_id","Annotation","import_jsx_runtime42","import_react_icons8","QuoteIcon","a","strong","ul","ol","li","pre","code","img","h1","import_jsx_runtime43","import_themes31","Heading","as","h2","h3","h4","h5","h6","table","Fragment","Table","thead","Header","tbody","Body","tr","Row","td","rest","Cell","th","ColumnHeaderCell","import_remark_gfm","import_unist_util_flatmap","sortedAnnotations","sort","b","start_index","remarkAnnotation","tree","flatMap","node","processNodeWithAnnotations","processTextNode","linkNode","childNode","nodeStart","start","offset","nodeEnd","end","import_radash11","isNumber","newNodes","lastIndex","annotationStart","annotationEnd","end_index","Math","max","min","push","createTextNode","startOffset","endOffset","createAnnotationNode","valueStart","valueEnd","slice","hName","hProperties","getRemarkPlugins","remarkGfm","import_react24","import_react25","evaluate","Function","useMDXComponents","import_react27","TextContent","remarkPlugins","import_react26","MDXComponent","setMDXComponent","compileMDX","compiled","MDXContent","compile","outputFormat","recmaPlugins","recmaMdxEscapeMissingComponents","providerImportSource","String","default","import_jsx_runtime44","MDXProvider","ImageFileContent","import_jsx_runtime45","alt","image_file","ContentPart","import_jsx_runtime46","Message","import_react28","messageCreationRunStepIndex","findIndex","message_creation","message_id","nextRunStepIndex","findLastIndex","laterRunSteps","prevRunStepIndex","olderRunSteps","isInProgress","some","import_jsx_runtime47","import_themes32","import_radash12","order","import_radash13","newGroupItem","createdAt","newGroup","groups","messageGroups","import_lodash6","group","import_radash14","dropRight","useMessageGroups","import_react29","MessageGroupBase","import_react30","forwardRef","ref","import_jsx_runtime48","import_themes33","Container","Name","import_jsx_runtime49","import_themes34","MessagesSkeleton","import_react31","_props","import_jsx_runtime50","import_themes35","fallback","marginTop","import_react32","import_jsx_runtime51","import_themes36","import_react_icons9","LightningBoltIcon","AssistantAvatar","AssistantAvatarContextValue","import_react33","import_jsx_runtime52","import_themes37","overflow","import_react34","import_react35","import_jsx_runtime53","import_themes38","import_react_icons10","PersonIcon","UserAvatar","UserAvatarContextValue","import_react36","import_jsx_runtime54","import_themes39","messageGroup","import_jsx_runtime55","import_themes40","MessageGroup","assistantNameContext","import_react37","import_jsx_runtime56","import_themes41","isLoadingError","import_react38","import_jsx_runtime57","StartingSkeleton","import_react39","import_jsx_runtime58","import_themes42","Progress","isVisible","import_react40","import_jsx_runtime59","import_react_intersection_observer","useThrottledEffect","cb","delay","additionalDeps","cbRef","import_react41","throttledCb","useCallback","import_lodash7","throttle","leading","trailing","useInfiniteScroll","isFetchingNextPage","fetchNextPage","containerRef","import_react42","useInView","root","rootMargin","threshold","loaderRef","inView","import_jsx_runtime60","import_themes43","NextPageSkeleton","import_jsx_runtime61","Messages","import_jsx_runtime62","import_themes44","MessageFormContext","import_react43","files","setFiles","isFileLoading","import_react44","import_jsx_runtime63","import_themes45","abort","import_react_icons11","StopIcon","Submit","import_react_hook_form","import_zod","schema","z","string","formOptions","resolver","import_zod2","zodResolver","onSubmit","onSubmitArg","isDisabledArg","import_react45","formProps","useForm","handleSubmit","formState","isSubmitting","reset","watch","import_react_query6","file","import_radash15","tools","import_jsx_runtime64","FormProvider","import_themes46","usePrevious","state","import_react46","import_react_textarea_autosize","TextareaBase","import_react47","import_jsx_runtime65","TextareaAutosize","border","outline","boxSizing","resize","import_jsx_runtime66","import_themes47","pt","Input","import_react48","register","import_react_hook_form2","useFormContext","isSubmitDisabled","isDisabledPrevious","textareaRef","textareaProps","focus","minRows","placeholder","onKeyDown","e","shiftKey","preventDefault","currentTarget","form","requestSubmit","Control","Preview","import_jsx_runtime67","import_themes48","flexBasis","justify","minWidth","import_react_icons12","truncate","filename","prev","prevFile","Cross2Icon","formData","FormData","append","useCreateFile","import_react_query7","createFile","firstArg","restArgs","accept","onChange","import_react49","fileObjects","newFiles","Array","fileObject","purpose","import_dayjs2","bytes","import_radash16","newFile","onSuccess","import_jsx_runtime68","import_themes49","pr","import_react_icons13","FilePlusIcon","multiple","cursor","opacity","Files","import_react_hook_form3","errors","import_jsx_runtime69","import_themes50","RadixContainer","borderWidth","borderStyle","borderColor","backgroundColor","pl","Field","MessageForm","import_jsx_runtime70","Toast","CustomToast","toast","import_jsx_runtime71","import_themes51","Title","import_react_icons14","CrossCircledIcon","ToastsProvider","import_react50","setToasts","prevToasts","import_jsx_runtime72","Toast2","Viewport","padding","margin","listStyle","import_jsx_runtime73","import_themes52","import_jsx_runtime74","import_react51","publicApiKey","import_react_query8","tanstackQueryOptions","import_react_query9","useQuery","import_react52","assistant","import_react53","isOpen","setIsOpen","import_react54","threadDialogContext","import_react55","import_jsx_runtime75","import_jsx_runtime76","import_jsx_runtime77","import_themes53","radius","import_react_icons15","ChatBubbleIcon","import_jsx_runtime78","import_themes54","initial","sm","Close","import_jsx_runtime79","import_themes55","import_react_icons16","Cross1Icon","import_jsx_runtime80","import_themes56","paddingTop","paddingRight","paddingLeft","FormContainer","import_jsx_runtime81","AudioThreadContext","import_react56","recorderProps","stop","pause","resume","visualizationAnalyser","messageAudioProps","playing","paused","isReady","play","noop","on","addEventListener","off","removeEventListener","usePermission","permissionDesc","import_react57","setState","mounted","permissionStatus","navigator","permissions","query","catch","blobToData","blob","Promise","resolve","FileReader","onloadend","readAsDataURL","useStatus","createMessageProps","import_react58","isAudioPlayed","import_use_audio_capture","import_react_use_audio_player","useInterval","callback","savedCallback","import_react59","interval","setInterval","clearInterval","useRecorder","isStopOnSilence","onStart","onStop","import_react60","silenceStart","setSilenceStart","noiseStart","setNoiseStart","mediaStream","setMediaStream","setStatus","startAudioPlayer","useAudioPlayer","endAudioPlayer","isLoaded","setIsLoaded","audioCaptureProps","useAudioCapture","opts","isInited","onPause","onResume","audioEngine","setAudioEngine","audioContext","AudioContext","source","createMediaStreamSource","createAnalyser","connect","silenceAnalyser","minDecibels","handleSilence","frequencyData","Uint8Array","frequencyBinCount","getByteFrequencyData","isSilent","every","f","import_dayjs3","requestAnimationFrame","isBefore","subtract","import_compromise","import_howler","textContents","join","import_radash17","import_detect_browser","unsupportedNames","isHtmlAudioSupported","detect","FULL_SENTENCE_REGEX","getMessageSentences","messageId","sentences","nlp","sentence","useMessageAudio","onEnd","import_react61","setIsAudioPlayed","stoppedMessageIds","setStoppedMessageIds","playedMessageSentences","setPlayedMessageSentences","audioPlayer","import_react_use_audio_player2","nextAudioPlayer","isPlaying","setIsPlaying","unplayedMessageSentences","messageSentences","ms","find","pms","firstUnplayedMessageSentence","isFullSentence","test","searchParams","load","format","autoplay","html5","onplay","onstop","onload","nextUnplayedMessageSentence","isNextFullSentence","onend","Howler","_howls","_sounds","_node","isAudioEngineInited","createMediaElementSource","masterGain","ctx","destination","import_react_query10","_event","chunks","audioContent","Blob","microphonePermission","import_jsx_runtime82","import_themes57","useAudioThreadContext","import_react62","barCount","BarsVisualizer","barWidth","import_react63","barHeights","setBarHeights","draw","fill","clusteredFrequencyData","import_radash18","cluster","frequencyDataCluster","import_lodash8","mean","import_jsx_runtime83","import_themes58","Grid","columns","gridTemplateColumns","barHeight","Visualization","audioThreadContext","import_react64","scale","setScale","import_lodash9","import_jsx_runtime84","import_themes59","html","texts","i","StatusMessages","import_jsx_runtime85","import_themes60","dangerouslySetInnerHTML","__html","Status","import_jsx_runtime86","MicIcon","import_jsx_runtime87","xmlns","stroke","strokeWidth","viewBox","d","ActionButton","import_jsx_runtime88","import_themes61","mr","import_react_icons17","highContrast","ResumeIcon","Form","import_jsx_runtime89","import_themes62","px","import_jsx_runtime90","import_jsx_runtime91","prevMarkdownContext","import_react65","import_jsx_runtime92","imageAvatar","encodeURIComponent","url","host","URL","origin","optimizedSrc","ImageAvatar","import_jsx_runtime93","import_themes63","iconAvatarComponents","import_react_icons18","BackpackIcon","RocketIcon","MagicWandIcon","CubeIcon","TargetIcon","DiscIcon","GlobeIcon","StarIcon","FaceIcon","HeartIcon","IconAvatar","iconAvatar","import_react66","import_jsx_runtime94","import_themes64","avatar","import_jsx_runtime95","import_themes65","RadixAvatar","import_react67","prevComponents","import_react68","import_jsx_runtime96","import_jsx_runtime97"],"mappings":"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","sourcesContent":["\"use strict\";\nvar __create = Object.create;\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __getProtoOf = Object.getPrototypeOf;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __export = (target, all) => {\n for (var name in all)\n __defProp(target, name, { get: all[name], enumerable: true });\n};\nvar __copyProps = (to, from, except, desc) => {\n if (from && typeof from === \"object\" || typeof from === \"function\") {\n for (let key2 of __getOwnPropNames(from))\n if (!__hasOwnProp.call(to, key2) && key2 !== except)\n __defProp(to, key2, { get: () => from[key2], enumerable: !(desc = __getOwnPropDesc(from, key2)) || desc.enumerable });\n }\n return to;\n};\nvar __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(\n // If the importer is in node compatibility mode or this is not an ESM\n // file that has been converted to a CommonJS file using a Babel-\n // compatible transform (i.e. \"__esModule\" has not been set), then set\n // \"default\" to the CommonJS \"module.exports\" for node compatibility.\n isNodeMode || !mod || !mod.__esModule ? __defProp(target, \"default\", { value: mod, enumerable: true }) : target,\n mod\n));\nvar __toCommonJS = (mod) => __copyProps(__defProp({}, \"__esModule\", { value: true }), mod);\n\n// src/index.ts\nvar src_exports = {};\n__export(src_exports, {\n AssistantAvatarContext: () => AssistantAvatarContext,\n AssistantNameContext: () => AssistantNameContext,\n AssistantProvider: () => AssistantProvider,\n AudioThread: () => AudioThread,\n AudioThreadDialog: () => AudioThreadDialog,\n Avatar: () => Avatar6,\n ComponentsProvider: () => ComponentsProvider,\n FunctionBase: () => FunctionBase,\n FunctionComponentsContext: () => FunctionComponentsContext,\n MarkdownContext: () => MarkdownContext,\n MarkdownProvider: () => MarkdownProvider,\n RunStep: () => RunStep,\n Suggestions: () => Suggestions,\n SuperinterfaceProvider: () => SuperinterfaceProvider,\n Thread: () => Thread,\n ThreadDialog: () => ThreadDialog,\n ThreadDialogContext: () => ThreadDialogContext,\n UserAvatarContext: () => UserAvatarContext,\n useAssistant: () => useAssistant,\n useComponents: () => useComponents,\n useCreateMessage: () => useCreateMessage,\n useIsMutatingMessage: () => useIsMutatingMessage,\n useLatestMessage: () => useLatestMessage,\n useMarkdownContext: () => useMarkdownContext,\n useMessageContext: () => useMessageContext,\n useMessageFormContext: () => useMessageFormContext,\n useMessages: () => useMessages,\n useSuperinterfaceContext: () => useSuperinterfaceContext,\n useThreadContext: () => useSuperinterfaceContext,\n useThreadDialogContext: () => useThreadDialogContext\n});\nmodule.exports = __toCommonJS(src_exports);\n\n// src/components/core/SuperinterfaceProvider/index.tsx\nvar import_react3 = require(\"react\");\n\n// src/lib/misc/merge/index.ts\nvar import_lodash2 = __toESM(require(\"lodash\"), 1);\n\n// src/lib/misc/merge/customizer.ts\nvar import_lodash = __toESM(require(\"lodash\"), 1);\nvar customizer = (objectValue, srcValue) => {\n if (!import_lodash.default.isArray(objectValue)) return;\n return srcValue;\n};\n\n// src/lib/misc/merge/index.ts\nvar merge = (obj, ...sources) => import_lodash2.default.mergeWith(import_lodash2.default.cloneDeep(obj), ...sources, customizer);\n\n// src/contexts/core/SuperinterfaceContext/index.tsx\nvar import_react = require(\"react\");\n\n// src/lib/superinterfaceCloud/baseUrl.ts\nvar baseUrl = \"https://superinterface.ai/api/cloud\";\n\n// src/lib/threadIdStorage/cookieOptions/get.ts\nvar import_js_cookie = __toESM(require(\"js-cookie\"), 1);\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}) => import_js_cookie.default.get(key({ assistantId })) ?? null;\n\n// src/lib/threadIdStorage/cookieOptions/set.ts\nvar import_js_cookie2 = __toESM(require(\"js-cookie\"), 1);\nvar set = ({\n assistantId,\n threadId\n}) => import_js_cookie2.default.set(key({ assistantId }), threadId);\n\n// src/lib/threadIdStorage/cookieOptions/remove.ts\nvar import_js_cookie3 = __toESM(require(\"js-cookie\"), 1);\nvar remove = ({\n assistantId\n}) => import_js_cookie3.default.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 = (0, import_react.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\nvar import_react2 = require(\"react\");\nvar useSuperinterfaceContext = () => (0, import_react2.useContext)(SuperinterfaceContext);\n\n// src/components/core/SuperinterfaceProvider/index.tsx\nvar import_jsx_runtime = require(\"react/jsx-runtime\");\nvar SuperinterfaceProvider = ({\n children,\n baseUrl: baseUrl2,\n variables,\n defaultOptions,\n threadIdStorageOptions\n}) => {\n const superinterfaceContext = useSuperinterfaceContext();\n const createMessageAbortControllerRef = (0, import_react3.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__ */ (0, import_jsx_runtime.jsx)(\n SuperinterfaceContext.Provider,\n {\n value,\n children\n }\n );\n};\n\n// src/components/threads/Thread/Messages/index.tsx\nvar import_themes44 = require(\"@radix-ui/themes\");\n\n// src/components/threads/Thread/Message/index.tsx\nvar import_react28 = require(\"react\");\nvar import_radash12 = require(\"radash\");\nvar import_themes32 = require(\"@radix-ui/themes\");\n\n// src/components/skeletons/StartingContentSkeleton/index.tsx\nvar import_themes = require(\"@radix-ui/themes\");\nvar import_jsx_runtime2 = require(\"react/jsx-runtime\");\nvar StartingContentSkeleton = () => /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(\n import_themes.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\nvar import_themes10 = require(\"@radix-ui/themes\");\nvar import_react8 = require(\"react\");\n\n// src/contexts/components/ComponentsContext/index.tsx\nvar import_react7 = require(\"react\");\n\n// src/components/runSteps/RunStep/ToolCalls/index.tsx\nvar import_themes9 = require(\"@radix-ui/themes\");\n\n// src/components/runSteps/RunStep/ToolCalls/ToolCall/Fn/index.tsx\nvar import_react6 = require(\"react\");\n\n// src/contexts/functions/FunctionComponentsContext/index.tsx\nvar import_react4 = require(\"react\");\nvar FunctionComponentsContext = (0, import_react4.createContext)({});\n\n// src/components/functions/FunctionBase/index.tsx\nvar import_themes5 = require(\"@radix-ui/themes\");\n\n// src/components/toolCalls/ToolCallBase/index.tsx\nvar import_themes2 = require(\"@radix-ui/themes\");\nvar import_jsx_runtime3 = require(\"react/jsx-runtime\");\nvar ToolCallBase = ({\n children\n}) => /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(\n import_themes2.Flex,\n {\n py: \"1\",\n ml: \"-2\",\n children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(\n import_themes2.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\nvar import_themes3 = require(\"@radix-ui/themes\");\nvar import_jsx_runtime4 = require(\"react/jsx-runtime\");\nvar ToolCallTitle = ({\n children\n}) => /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(\n import_themes3.Text,\n {\n weight: \"regular\",\n children\n }\n);\n\n// src/components/toolCalls/ToolCallBase/ToolCallIcon.tsx\nvar import_react_icons = require(\"@radix-ui/react-icons\");\nvar import_jsx_runtime5 = require(\"react/jsx-runtime\");\nvar ToolCallIcon = ({\n runStep\n}) => {\n if (runStep.completed_at) {\n return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_react_icons.CheckCircledIcon, {});\n } else if (runStep.cancelled_at || runStep.failed_at || runStep.status === \"expired\") {\n return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_react_icons.CircleBackslashIcon, {});\n } else {\n return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_react_icons.CircleIcon, {});\n }\n};\n\n// src/components/functions/FunctionBase/Content/index.tsx\nvar import_react5 = require(\"react\");\nvar import_themes4 = require(\"@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\nvar import_jsx_runtime6 = require(\"react/jsx-runtime\");\nvar Content = ({\n fn\n}) => {\n const args = (0, import_react5.useMemo)(() => formattedJsonOrRaw({\n value: fn.arguments\n }), [fn]);\n const output = (0, import_react5.useMemo)(() => formattedJsonOrRaw({\n value: fn.output\n }), [fn]);\n return /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)(\n import_themes4.Code,\n {\n variant: \"ghost\",\n color: \"gold\",\n style: {\n whiteSpace: \"pre\",\n wordBreak: \"break-word\"\n },\n children: [\n args && /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_themes4.Box, { children: args }),\n output && /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_themes4.Box, { children: output })\n ]\n }\n );\n};\n\n// src/components/functions/FunctionBase/index.tsx\nvar import_jsx_runtime7 = require(\"react/jsx-runtime\");\nvar FunctionBase = ({\n fn,\n runStep,\n title: title2\n}) => /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)(import_themes5.Popover.Root, { children: [\n /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(import_themes5.Popover.Trigger, { children: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(import_themes5.Flex, { children: /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)(ToolCallBase, { children: [\n /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(ToolCallIcon, { runStep }),\n /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(ToolCallTitle, { children: title2 })\n ] }) }) }),\n /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(\n import_themes5.Popover.Content,\n {\n style: {\n maxHeight: \"200px\"\n },\n children: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(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\nvar import_jsx_runtime8 = require(\"react/jsx-runtime\");\nvar DefaultFunction = ({\n fn,\n runStep\n}) => /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(\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\nvar import_jsx_runtime9 = (\n // @ts-ignore-next-line\n require(\"react/jsx-runtime\")\n);\nvar Fn = ({\n fn,\n runStep\n}) => {\n const functionComponentsContext = (0, import_react6.useContext)(FunctionComponentsContext);\n const Component = functionComponentsContext[fn.name] || DefaultFunction;\n return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(\n Component,\n {\n fn,\n runStep\n }\n );\n};\n\n// src/components/runSteps/RunStep/ToolCalls/ToolCall/CodeInterpreter/index.tsx\nvar import_themes7 = require(\"@radix-ui/themes\");\n\n// src/components/runSteps/RunStep/ToolCalls/ToolCall/CodeInterpreter/Content.tsx\nvar import_themes6 = require(\"@radix-ui/themes\");\nvar import_jsx_runtime10 = require(\"react/jsx-runtime\");\nvar Content2 = ({\n codeInterpreter\n}) => {\n if (!codeInterpreter.input) {\n return null;\n }\n return /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(\n import_themes6.Code,\n {\n variant: \"ghost\",\n color: \"gold\",\n style: {\n whiteSpace: \"pre\",\n wordBreak: \"break-word\"\n },\n children: [\n /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(import_themes6.Box, { children: codeInterpreter.input }),\n /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(import_themes6.Box, { children: JSON.stringify(codeInterpreter.outputs) })\n ]\n }\n );\n};\n\n// src/components/runSteps/RunStep/ToolCalls/ToolCall/CodeInterpreter/index.tsx\nvar import_jsx_runtime11 = require(\"react/jsx-runtime\");\nvar CodeInterpreter = ({\n codeInterpreter,\n runStep\n}) => /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(import_themes7.Popover.Root, { children: [\n /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_themes7.Popover.Trigger, { children: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_themes7.Flex, { children: /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(ToolCallBase, { children: [\n /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(ToolCallIcon, { runStep }),\n /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(ToolCallTitle, { children: \"Using code interpreter\" })\n ] }) }) }),\n /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(\n import_themes7.Popover.Content,\n {\n maxHeight: \"200px\",\n children: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(\n Content2,\n {\n codeInterpreter\n }\n )\n }\n )\n] });\n\n// src/components/runSteps/RunStep/ToolCalls/ToolCall/FileSearch.tsx\nvar import_jsx_runtime12 = require(\"react/jsx-runtime\");\nvar FileSearch = ({\n runStep,\n toolCall\n}) => /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(ToolCallBase, { children: [\n /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(ToolCallIcon, { runStep }),\n /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(ToolCallTitle, { children: \"Searching files\" })\n] });\n\n// src/components/runSteps/RunStep/ToolCalls/ToolCall/Fallback.tsx\nvar import_jsx_runtime13 = require(\"react/jsx-runtime\");\nvar Fallback = ({\n runStep,\n toolCall\n}) => /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(ToolCallBase, { children: [\n /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(ToolCallIcon, { runStep }),\n /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(ToolCallTitle, { children: [\n \"Using tool: \",\n toolCall.type\n ] })\n] });\n\n// src/components/runSteps/RunStep/ToolCalls/ToolCall/index.tsx\nvar import_jsx_runtime14 = require(\"react/jsx-runtime\");\nvar ToolCall = ({\n toolCall,\n runStep\n}) => {\n if (toolCall.type === \"function\") {\n return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(\n Fn,\n {\n fn: toolCall.function,\n runStep\n }\n );\n }\n if (toolCall.type === \"code_interpreter\") {\n return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(\n CodeInterpreter,\n {\n codeInterpreter: toolCall.code_interpreter,\n runStep\n }\n );\n }\n if (toolCall.type === \"file_search\") {\n return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(\n FileSearch,\n {\n toolCall,\n runStep\n }\n );\n }\n return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(\n Fallback,\n {\n toolCall,\n runStep\n }\n );\n};\n\n// src/components/runSteps/RunStep/ToolCalls/Starting/index.tsx\nvar import_themes8 = require(\"@radix-ui/themes\");\nvar import_react_icons2 = require(\"@radix-ui/react-icons\");\nvar import_jsx_runtime15 = require(\"react/jsx-runtime\");\nvar Starting = () => /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(import_themes8.Popover.Root, { children: [\n /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(ToolCallBase, { children: [\n /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_react_icons2.CircleIcon, {}),\n /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(ToolCallTitle, { children: \"Starting actions\" })\n ] }),\n /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(\n import_themes8.Popover.Content,\n {\n style: {\n maxHeight: \"500px\"\n },\n children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_themes8.Text, { children: \"Getting ready to connect to domain API\" })\n }\n )\n] });\n\n// src/components/runSteps/RunStep/ToolCalls/index.tsx\nvar import_jsx_runtime16 = require(\"react/jsx-runtime\");\nvar Root = ({\n children,\n className,\n style\n}) => /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(\n import_themes9.Flex,\n {\n direction: \"column\",\n className,\n style,\n children\n }\n);\nvar ToolCalls = ({\n stepDetails,\n runStep,\n className,\n style\n}) => /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(\n Root,\n {\n className,\n style,\n children: [\n !stepDetails.tool_calls.length && /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(Starting, {}),\n stepDetails.tool_calls.map((toolCall) => /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(\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\nvar import_jsx_runtime17 = require(\"react/jsx-runtime\");\nvar RunStep = ({\n runStep,\n className,\n style\n}) => {\n if (runStep.step_details.type === \"tool_calls\") {\n return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(\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 = (0, import_react7.createContext)({\n components: {\n RunStep\n }\n});\n\n// src/components/runSteps/RunSteps/index.tsx\nvar import_jsx_runtime18 = require(\"react/jsx-runtime\");\nvar RunSteps = ({\n runSteps\n}) => {\n const componentsContext = (0, import_react8.useContext)(ComponentsContext);\n const Component = componentsContext.components.RunStep;\n return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(\n import_themes10.Flex,\n {\n direction: \"column-reverse\",\n children: runSteps.map((runStep) => /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(\n Component,\n {\n runStep\n },\n runStep.id\n ))\n }\n );\n};\n\n// src/hooks/messages/useIsMutatingMessage/index.ts\nvar import_react9 = require(\"react\");\nvar import_react_query = require(\"@tanstack/react-query\");\nvar useIsMutatingMessage = () => {\n const threadContext = useSuperinterfaceContext();\n const mutatingMessagesCount = (0, import_react_query.useIsMutating)({\n mutationKey: [\"createMessage\", threadContext.variables]\n });\n const isMutatingMessage = (0, import_react9.useMemo)(() => mutatingMessagesCount > 0, [mutatingMessagesCount]);\n return isMutatingMessage;\n};\n\n// src/contexts/messages/MessageContext/index.ts\nvar import_react10 = require(\"react\");\nvar MessageContext = (0, import_react10.createContext)({\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\nvar import_themes11 = require(\"@radix-ui/themes\");\nvar import_react_icons3 = require(\"@radix-ui/react-icons\");\nvar import_jsx_runtime19 = require(\"react/jsx-runtime\");\nvar Attachments = ({\n message\n}) => {\n if (!message.attachments?.length) return null;\n return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(\n import_themes11.Flex,\n {\n align: \"start\",\n pb: \"1\",\n children: /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(\n import_themes11.Badge,\n {\n color: \"gray\",\n variant: \"surface\",\n children: [\n /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_react_icons3.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\nvar import_react26 = require(\"react\");\nvar import_mdx = require(\"@mdx-js/mdx\");\nvar import_react27 = require(\"@mdx-js/react\");\nvar runtime = __toESM(require(\"react/jsx-runtime\"), 1);\nvar import_recma_mdx_escape_missing_components = __toESM(require(\"recma-mdx-escape-missing-components\"), 1);\n\n// src/hooks/markdown/useMarkdownContext/index.ts\nvar import_react25 = require(\"react\");\n\n// src/contexts/markdown/MarkdownContext/index.ts\nvar import_react24 = require(\"react\");\n\n// src/contexts/markdown/MarkdownContext/lib/components/index.tsx\nvar import_themes31 = require(\"@radix-ui/themes\");\n\n// src/contexts/markdown/MarkdownContext/lib/components/Paragraph.tsx\nvar import_themes12 = require(\"@radix-ui/themes\");\nvar import_jsx_runtime20 = require(\"react/jsx-runtime\");\nvar Paragraph = ({ children }) => /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(\n import_themes12.Box,\n {\n pb: \"3\",\n children: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(\n import_themes12.Text,\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\nvar import_themes13 = require(\"@radix-ui/themes\");\nvar import_jsx_runtime21 = require(\"react/jsx-runtime\");\nvar Link = ({\n children,\n href,\n download,\n target = \"_blank\"\n}) => /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(\n import_themes13.Link,\n {\n href,\n target,\n download,\n children\n }\n);\n\n// src/contexts/markdown/MarkdownContext/lib/components/UnorderedList.tsx\nvar import_themes14 = require(\"@radix-ui/themes\");\nvar import_jsx_runtime22 = require(\"react/jsx-runtime\");\nvar UnorderedList = ({ children }) => /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(\n import_themes14.Box,\n {\n pb: \"3\",\n asChild: true,\n children: /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(\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\nvar import_themes15 = require(\"@radix-ui/themes\");\nvar import_jsx_runtime23 = require(\"react/jsx-runtime\");\nvar OrderedList = ({ children }) => /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(\n import_themes15.Box,\n {\n pb: \"3\",\n asChild: true,\n children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(\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\nvar import_themes16 = require(\"@radix-ui/themes\");\nvar import_jsx_runtime24 = require(\"react/jsx-runtime\");\nvar ListItem = ({ children }) => /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(\n import_themes16.Box,\n {\n pb: \"1\",\n children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(\"li\", { children })\n }\n);\n\n// src/contexts/markdown/MarkdownContext/lib/components/Strong.tsx\nvar import_themes17 = require(\"@radix-ui/themes\");\nvar import_jsx_runtime25 = require(\"react/jsx-runtime\");\nvar Strong = ({ children }) => /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_themes17.Strong, { children });\n\n// src/contexts/markdown/MarkdownContext/lib/components/Pre.tsx\nvar import_themes18 = require(\"@radix-ui/themes\");\nvar import_jsx_runtime26 = require(\"react/jsx-runtime\");\nvar Pre = ({ children }) => /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(\n import_themes18.Box,\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\nvar import_themes21 = require(\"@radix-ui/themes\");\n\n// src/components/suggestions/Suggestions/index.tsx\nvar import_react16 = require(\"react\");\n\n// src/hooks/messages/useLatestMessage/index.ts\nvar import_react12 = require(\"react\");\n\n// src/hooks/messages/useMessages/index.tsx\nvar import_react11 = require(\"react\");\nvar import_react_query3 = require(\"@tanstack/react-query\");\n\n// src/lib/threads/queryOptions/index.ts\nvar import_react_query2 = require(\"@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 (0, import_react_query2.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 = (0, import_react_query3.useQueryClient)();\n const threadContext = useSuperinterfaceContext();\n const superinterfaceContext = useSuperinterfaceContext();\n const props = (0, import_react_query3.useInfiniteQuery)(messagesQueryOptions({\n queryClient,\n threadContext,\n superinterfaceContext\n }));\n return (0, import_react11.useMemo)(() => ({\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 (0, import_react12.useMemo)(() => ({\n ...props,\n latestMessage: props.messages[0] || null\n }), [props]);\n};\n\n// src/components/suggestions/Suggestions/Content.tsx\nvar import_react15 = require(\"react\");\nvar import_radash10 = require(\"radash\");\nvar import_react_children_utilities = require(\"react-children-utilities\");\nvar import_themes20 = require(\"@radix-ui/themes\");\n\n// src/components/suggestions/Suggestions/Item.tsx\nvar import_react_icons4 = require(\"@radix-ui/react-icons\");\nvar import_themes19 = require(\"@radix-ui/themes\");\n\n// src/hooks/messages/useCreateMessage/index.ts\nvar import_radash9 = require(\"radash\");\nvar import_react_query4 = require(\"@tanstack/react-query\");\n\n// src/hooks/messages/useCreateMessage/lib/mutationOptions/onMutate/index.ts\nvar import_radash2 = require(\"radash\");\n\n// src/hooks/messages/useCreateMessage/lib/mutationOptions/onMutate/data.ts\nvar import_dayjs = __toESM(require(\"dayjs\"), 1);\n\n// src/lib/optimistic/optimisticId.ts\nvar import_radash = require(\"radash\");\nvar optimisticId = () => `-${(0, import_radash.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: (0, import_dayjs.default)().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\", (0, import_radash2.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\nvar import_json_whatwg = require(\"@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\nvar import_lodash3 = __toESM(require(\"lodash\"), 1);\nvar isOptimistic = ({\n id\n}) => import_lodash3.default.startsWith(id, \"-\");\n\n// src/hooks/messages/useCreateMessage/lib/mutationOptions/mutationFn/handleResponse/handlers/extendMessage.ts\nvar import_radash3 = require(\"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 = (0, import_radash3.last)(prevOptimitisticRunMessages)?.runSteps ?? (0, import_radash3.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\nvar import_lodash4 = __toESM(require(\"lodash\"), 1);\nvar import_radash4 = require(\"radash\");\nvar updatedContentPart = ({\n prevContentPart,\n delta\n}) => {\n if (!prevContentPart) {\n return (0, import_radash4.omit)(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 = import_lodash4.default.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\nvar import_radash5 = require(\"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: (0, import_radash5.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\nvar import_lodash5 = __toESM(require(\"lodash\"), 1);\nvar import_radash6 = require(\"radash\");\nvar updatedToolCall = ({\n toolCall,\n delta\n}) => {\n if (!toolCall) {\n return (0, import_radash6.omit)(delta, [\"index\"]);\n }\n if (delta.type === \"function\" && delta.function && toolCall.type === \"function\" && toolCall.function) {\n const result = import_lodash5.default.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 = import_lodash5.default.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\nvar import_radash7 = require(\"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: (0, import_radash7.replace)(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\nvar import_radash8 = require(\"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 (0, import_radash8.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 import_json_whatwg.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 = (0, import_react_query4.useQueryClient)();\n const superinterfaceContext = useSuperinterfaceContext();\n const threadContext = useSuperinterfaceContext();\n const props = (0, import_react_query4.useMutation)(mutationOptions({\n queryClient,\n threadContext,\n superinterfaceContext,\n onError\n }));\n return {\n ...props,\n createMessage: (0, import_radash9.partob)(props.mutateAsync, threadContext.variables)\n };\n};\n\n// src/components/suggestions/Suggestions/Item.tsx\nvar import_react_query5 = require(\"@tanstack/react-query\");\n\n// src/hooks/toasts/useToasts/index.ts\nvar import_react14 = require(\"react\");\n\n// src/contexts/toasts/ToastsContext/index.ts\nvar import_react13 = require(\"react\");\nvar ToastsContext = (0, import_react13.createContext)({\n toasts: [],\n addToast: () => {\n }\n});\n\n// src/hooks/toasts/useToasts/index.ts\nvar useToasts = () => (0, import_react14.useContext)(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\nvar import_jsx_runtime27 = require(\"react/jsx-runtime\");\nvar Item = ({\n suggestion,\n isDisabled,\n className,\n style\n}) => {\n const { addToast } = useToasts();\n const queryClient = (0, import_react_query5.useQueryClient)();\n const threadContext = useSuperinterfaceContext();\n const { createMessage, isPending } = useCreateMessage({\n onError: createMessageDefaultOnError({\n queryClient,\n addToast,\n threadContext\n })\n });\n return /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(\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__ */ (0, import_jsx_runtime27.jsxs)(\n import_themes19.Button,\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__ */ (0, import_jsx_runtime27.jsx)(\n import_themes19.Text,\n {\n size: \"1\",\n weight: \"regular\",\n children\n }\n ),\n /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_themes19.Spinner, { loading: isPending, children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(\n import_react_icons4.ArrowUpIcon,\n {\n style: {\n flexShrink: 0\n }\n }\n ) })\n ]\n }\n);\nItem.Content = Content3;\n\n// src/components/suggestions/Suggestions/Content.tsx\nvar import_jsx_runtime28 = require(\"react/jsx-runtime\");\nvar Content4 = ({\n children,\n className,\n style\n}) => {\n const isMutatingMessage = useIsMutatingMessage();\n const suggestions = (0, import_react15.useMemo)(() => (0, import_react_children_utilities.onlyText)(children).split(/\\r?\\n/).filter((c) => !(0, import_radash10.isEmpty)(c)).map((c) => c.trim()), [children]);\n if ((0, import_radash10.isEmpty)(suggestions)) return null;\n return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(\n import_themes20.Flex,\n {\n gap: \"2\",\n py: \"2\",\n wrap: \"wrap\",\n className,\n style,\n children: suggestions.map((suggestion) => /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(\n Item,\n {\n suggestion,\n isDisabled: isMutatingMessage\n },\n suggestion\n ))\n }\n );\n};\n\n// src/components/suggestions/Suggestions/index.tsx\nvar import_jsx_runtime29 = require(\"react/jsx-runtime\");\nvar Suggestions = ({\n children,\n className,\n style\n}) => {\n const latestMessageProps = useLatestMessage();\n const isDisabled = (0, import_react16.useMemo)(() => (\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__ */ (0, import_jsx_runtime29.jsx)(\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\nvar import_jsx_runtime30 = require(\"react/jsx-runtime\");\nvar Code3 = ({\n children,\n className\n}) => {\n if (className === \"language-suggestions\") {\n return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(Suggestions, { children });\n }\n return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(import_themes21.Code, { children });\n};\n\n// src/components/images/Image.tsx\nvar import_themes22 = require(\"@radix-ui/themes\");\nvar import_jsx_runtime31 = require(\"react/jsx-runtime\");\nvar Image = (props) => /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(\n import_themes22.Box,\n {\n pb: \"3\",\n children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(\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\nvar import_themes28 = require(\"@radix-ui/themes\");\nvar import_base = require(\"@vidstack/react/player/styles/base.css\");\nvar import_react22 = require(\"@vidstack/react\");\n\n// src/components/media/PlayButton.tsx\nvar import_react17 = require(\"@vidstack/react\");\nvar import_themes23 = require(\"@radix-ui/themes\");\nvar import_react_icons5 = require(\"@radix-ui/react-icons\");\nvar import_jsx_runtime32 = require(\"react/jsx-runtime\");\nvar PlayButton = () => {\n const isPaused = (0, import_react17.useMediaState)(\"paused\");\n return /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(\n import_themes23.IconButton,\n {\n variant: \"ghost\",\n asChild: true,\n children: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_react17.PlayButton, { children: isPaused ? /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_react_icons5.PlayIcon, {}) : /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_react_icons5.PauseIcon, {}) })\n }\n );\n};\n\n// src/components/media/VolumeButton.tsx\nvar import_react18 = require(\"@vidstack/react\");\nvar import_themes24 = require(\"@radix-ui/themes\");\nvar import_react_icons6 = require(\"@radix-ui/react-icons\");\nvar import_jsx_runtime33 = require(\"react/jsx-runtime\");\nvar VolumeButton = () => {\n const volume = (0, import_react18.useMediaState)(\"volume\");\n const isMuted = (0, import_react18.useMediaState)(\"muted\");\n const remote = (0, import_react18.useMediaRemote)();\n return /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(import_themes24.HoverCard.Root, { children: [\n /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_themes24.HoverCard.Trigger, { children: /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(\n import_themes24.IconButton,\n {\n variant: \"ghost\",\n asChild: true,\n children: /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_react18.MuteButton, { children: isMuted || volume === 0 ? /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_react_icons6.SpeakerOffIcon, {}) : /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_react_icons6.SpeakerModerateIcon, {}) })\n }\n ) }),\n /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(\n import_themes24.HoverCard.Content,\n {\n size: \"1\",\n side: \"top\",\n height: \"100px\",\n children: /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(\n import_themes24.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\nvar import_react19 = require(\"react\");\nvar import_react20 = require(\"@vidstack/react\");\nvar import_themes25 = require(\"@radix-ui/themes\");\nvar import_jsx_runtime34 = require(\"react/jsx-runtime\");\nvar Time = () => {\n const time = (0, import_react20.useMediaState)(\"currentTime\");\n const duration = (0, import_react20.useMediaState)(\"duration\");\n const seeking = (0, import_react20.useMediaState)(\"seeking\");\n const canSeek = (0, import_react20.useMediaState)(\"canSeek\");\n const remote = (0, import_react20.useMediaRemote)();\n const [value, setValue] = (0, import_react19.useState)(0);\n (0, import_react19.useEffect)(() => {\n if (seeking) return;\n setValue(time / duration * 100);\n }, [time, duration, seeking]);\n const step = (0, import_react19.useMemo)(() => 1 / duration * 100, [duration]);\n return /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(\n import_themes25.Slider,\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\nvar import_themes26 = require(\"@radix-ui/themes\");\nvar import_jsx_runtime35 = require(\"react/jsx-runtime\");\nvar MediaContainer = ({\n children\n}) => /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(\n import_themes26.Card,\n {\n mb: \"3\",\n children: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(\n import_themes26.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\nvar import_react21 = require(\"@vidstack/react\");\nvar import_themes27 = require(\"@radix-ui/themes\");\nvar import_react_icons7 = require(\"@radix-ui/react-icons\");\nvar import_jsx_runtime36 = require(\"react/jsx-runtime\");\nvar FullscreenButton = () => {\n const isFullscreen = (0, import_react21.useMediaState)(\"fullscreen\");\n return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(\n import_themes27.IconButton,\n {\n variant: \"ghost\",\n asChild: true,\n children: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_react21.FullscreenButton, { children: isFullscreen ? /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_react_icons7.ExitFullScreenIcon, {}) : /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_react_icons7.EnterFullScreenIcon, {}) })\n }\n );\n};\n\n// src/contexts/markdown/MarkdownContext/lib/components/Img/Video/index.tsx\nvar import_jsx_runtime37 = require(\"react/jsx-runtime\");\nvar Video = ({\n src\n}) => /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(MediaContainer, { children: /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(\n import_react22.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__ */ (0, import_jsx_runtime37.jsx)(import_react22.MediaProvider, {}),\n /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(\"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__ */ (0, import_jsx_runtime37.jsx)(\n import_themes28.Flex,\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__ */ (0, import_jsx_runtime37.jsx)(import_react22.Controls.Root, { children: /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(\n import_themes28.Flex,\n {\n asChild: true,\n align: \"center\",\n gap: \"3\",\n flexGrow: \"1\",\n children: /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(import_react22.Controls.Group, { children: [\n /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(PlayButton, {}),\n /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(Time, {}),\n /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(VolumeButton, {}),\n /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(FullscreenButton, {})\n ] })\n }\n ) })\n }\n )\n ]\n }\n) });\n\n// src/contexts/markdown/MarkdownContext/lib/components/Img/Audio/index.tsx\nvar import_themes29 = require(\"@radix-ui/themes\");\nvar import_base2 = require(\"@vidstack/react/player/styles/base.css\");\nvar import_react23 = require(\"@vidstack/react\");\nvar import_jsx_runtime38 = require(\"react/jsx-runtime\");\nvar Audio = ({\n src\n}) => /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(MediaContainer, { children: /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(\n import_react23.MediaPlayer,\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__ */ (0, import_jsx_runtime38.jsx)(import_react23.MediaProvider, {}),\n /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(\n import_themes29.Flex,\n {\n asChild: true,\n p: \"3\",\n flexGrow: \"1\",\n style: {\n zIndex: 10,\n background: \"var(--accent-4)\"\n },\n children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(import_react23.Controls.Root, { children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(\n import_themes29.Flex,\n {\n asChild: true,\n align: \"center\",\n gap: \"3\",\n flexGrow: \"1\",\n children: /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(import_react23.Controls.Group, { children: [\n /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(PlayButton, {}),\n /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(Time, {}),\n /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(VolumeButton, {})\n ] })\n }\n ) })\n }\n )\n ]\n }\n) });\n\n// src/contexts/markdown/MarkdownContext/lib/components/Img/index.tsx\nvar import_jsx_runtime39 = require(\"react/jsx-runtime\");\nvar Img = (props) => {\n if (!props.src) {\n return /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(\n Image,\n {\n ...props\n }\n );\n } else if (isVideoSrc({ src: props.src })) {\n return /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(\n Video,\n {\n src: props.src\n }\n );\n } else if (isAudioSrc({ src: props.src })) {\n return /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(\n Audio,\n {\n src: props.src\n }\n );\n } else {\n return /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(\n Image,\n {\n ...props\n }\n );\n }\n};\n\n// src/contexts/markdown/MarkdownContext/lib/components/Annotation/index.tsx\nvar import_react_icons8 = require(\"@radix-ui/react-icons\");\n\n// src/contexts/markdown/MarkdownContext/lib/components/Annotation/AnnotationBase.tsx\nvar import_themes30 = require(\"@radix-ui/themes\");\nvar import_jsx_runtime40 = require(\"react/jsx-runtime\");\nvar AnnotationBase = ({\n icon,\n content\n}) => /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)(import_themes30.Popover.Root, { children: [\n /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(import_themes30.Popover.Trigger, { children: /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(\n import_themes30.IconButton,\n {\n variant: \"soft\",\n color: \"gray\",\n size: \"1\",\n children: icon\n }\n ) }),\n /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(\n import_themes30.Popover.Content,\n {\n size: \"1\",\n children: /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(\n import_themes30.Flex,\n {\n direction: \"column\",\n children: /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(\n import_themes30.Text,\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\nvar import_jsx_runtime41 = require(\"react/jsx-runtime\");\nvar FilePathAnnotation = ({\n annotation,\n children\n}) => {\n const superinterfaceContext = useSuperinterfaceContext();\n const nextSearchParams = new URLSearchParams(superinterfaceContext.variables);\n return /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(\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\nvar import_jsx_runtime42 = require(\"react/jsx-runtime\");\nvar Annotation = ({\n annotation,\n children\n}) => {\n if (annotation.type === \"file_citation\") {\n return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(\n AnnotationBase,\n {\n icon: /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(import_react_icons8.QuoteIcon, {}),\n content: \"File cited.\"\n }\n );\n } else if (annotation.type === \"file_path\") {\n return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(\n FilePathAnnotation,\n {\n annotation,\n children\n }\n );\n }\n return null;\n};\n\n// src/contexts/markdown/MarkdownContext/lib/components/index.tsx\nvar import_jsx_runtime43 = require(\"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__ */ (0, import_jsx_runtime43.jsx)(import_themes31.Heading, { as: \"h1\", children: props.children }),\n h2: (props) => /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(import_themes31.Heading, { as: \"h2\", size: \"5\", children: props.children }),\n h3: (props) => /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(import_themes31.Heading, { as: \"h3\", size: \"4\", children: props.children }),\n h4: (props) => /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(import_themes31.Heading, { as: \"h4\", size: \"3\", children: props.children }),\n h5: (props) => /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(import_themes31.Heading, { as: \"h5\", size: \"3\", children: props.children }),\n h6: (props) => /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(import_themes31.Heading, { as: \"h6\", size: \"3\", children: props.children }),\n table: (props) => /* @__PURE__ */ (0, import_jsx_runtime43.jsxs)(import_jsx_runtime43.Fragment, { children: [\n /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(\"style\", { children: `.rt-TableRootTable { overflow: inherit; }` }),\n /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(\n import_themes31.Table.Root,\n {\n ...props,\n variant: \"surface\",\n mb: \"3\"\n }\n )\n ] }),\n thead: (props) => /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(\n import_themes31.Table.Header,\n {\n ...props\n }\n ),\n tbody: (props) => /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(\n import_themes31.Table.Body,\n {\n ...props\n }\n ),\n tr: (props) => /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(\n import_themes31.Table.Row,\n {\n ...props\n }\n ),\n td: ({ width: width2, ...rest }) => /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(\n import_themes31.Table.Cell,\n {\n ...rest,\n width: width2\n }\n ),\n th: (props) => /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(\n import_themes31.Table.ColumnHeaderCell,\n {\n ...props\n }\n )\n};\n\n// src/contexts/markdown/MarkdownContext/lib/getRemarkPlugins.ts\nvar import_remark_gfm = __toESM(require(\"remark-gfm\"), 1);\n\n// src/lib/remark/remarkAnnotation.ts\nvar import_radash11 = require(\"radash\");\nvar import_unist_util_flatmap = __toESM(require(\"unist-util-flatmap\"), 1);\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 (0, import_unist_util_flatmap.default)(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 = (0, import_unist_util_flatmap.default)(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 (!(0, import_radash11.isNumber)(nodeStart) || !(0, import_radash11.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 import_remark_gfm.default\n];\n\n// src/contexts/markdown/MarkdownContext/index.ts\nvar MarkdownContext = (0, import_react24.createContext)({\n components,\n getRemarkPlugins\n});\n\n// src/hooks/markdown/useMarkdownContext/index.ts\nvar useMarkdownContext = () => (0, import_react25.useContext)(MarkdownContext);\n\n// src/components/threads/Thread/Message/ContentPart/TextContent.tsx\nvar import_jsx_runtime44 = require(\"react/jsx-runtime\");\nvar evaluate = async ({\n code\n}) => {\n const fn = new Function(\"runtime\", \"useMDXComponents\", code);\n return fn({ ...runtime, useMDXComponents: import_react27.useMDXComponents });\n};\nvar TextContent = ({\n content\n}) => {\n const { getRemarkPlugins: getRemarkPlugins2, components: components2 } = useMarkdownContext();\n const remarkPlugins = (0, import_react26.useMemo)(() => getRemarkPlugins2({ content }), [content, getRemarkPlugins2]);\n const [MDXComponent, setMDXComponent] = (0, import_react26.useState)(null);\n (0, import_react26.useEffect)(() => {\n const compileMDX = async () => {\n try {\n const compiled = await (0, import_mdx.compile)(content.text.value, {\n outputFormat: \"function-body\",\n remarkPlugins,\n recmaPlugins: [import_recma_mdx_escape_missing_components.default],\n providerImportSource: \"@mdx-js/react\"\n });\n const code = String(compiled);\n const module2 = await evaluate({ code });\n const { default: MDXContent } = module2;\n setMDXComponent(() => MDXContent);\n } catch (error) {\n }\n };\n compileMDX();\n }, [content, remarkPlugins]);\n if (!MDXComponent) return content.text.value;\n return /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(\n import_react27.MDXProvider,\n {\n components: components2,\n children: /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(MDXComponent, {})\n }\n );\n};\n\n// src/components/threads/Thread/Message/ContentPart/ImageFileContent.tsx\nvar import_jsx_runtime45 = require(\"react/jsx-runtime\");\nvar ImageFileContent = ({\n content\n}) => {\n const superinterfaceContext = useSuperinterfaceContext();\n const nextSearchParams = new URLSearchParams(superinterfaceContext.variables);\n return /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(\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\nvar import_jsx_runtime46 = require(\"react/jsx-runtime\");\nvar ContentPart = ({\n content\n}) => {\n if (content.type === \"text\") {\n return /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(\n TextContent,\n {\n content\n }\n );\n }\n if (content.type === \"image_file\") {\n return /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(\n ImageFileContent,\n {\n content\n }\n );\n }\n return null;\n};\n\n// src/components/threads/Thread/Message/index.tsx\nvar import_jsx_runtime47 = require(\"react/jsx-runtime\");\nvar Message = ({\n message,\n className,\n style\n}) => {\n const [olderRunSteps, laterRunSteps] = (0, import_react28.useMemo)(() => {\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 = (0, import_react28.useMemo)(() => {\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__ */ (0, import_jsx_runtime47.jsx)(Provider, { value: { message }, children: /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)(\n import_themes32.Box,\n {\n className,\n style,\n children: [\n /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(\n RunSteps,\n {\n runSteps: olderRunSteps\n }\n ),\n /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)(import_themes32.Box, { children: [\n /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(\n Attachments,\n {\n message\n }\n ),\n message.content.map((content, index) => /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(\n ContentPart,\n {\n content\n },\n index\n )),\n isInProgress && (0, import_radash12.isEmpty)(laterRunSteps) && /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(StartingContentSkeleton, {})\n ] }),\n /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(\n RunSteps,\n {\n runSteps: laterRunSteps\n }\n ),\n isInProgress && !(0, import_radash12.isEmpty)(laterRunSteps) && /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_themes32.Box, { children: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(StartingContentSkeleton, {}) })\n ]\n }\n ) });\n};\n\n// src/components/threads/Thread/Messages/Content/index.tsx\nvar import_react38 = require(\"react\");\n\n// src/hooks/messageGroups/useMessageGroups/index.ts\nvar import_react29 = require(\"react\");\n\n// src/hooks/messageGroups/useMessageGroups/lib/messageGroups/index.ts\nvar import_lodash6 = __toESM(require(\"lodash\"), 1);\nvar import_radash14 = require(\"radash\");\n\n// src/lib/messages/order.ts\nvar import_radash13 = require(\"radash\");\nvar order = ({ messages: messages2 }) => (0, import_radash13.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}) => import_lodash6.default.reduce(\n order({ messages: messages2 }),\n (groups, message) => {\n const group = (0, import_radash14.last)(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 ...import_lodash6.default.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}) => (0, import_react29.useMemo)(\n () => ({\n messageGroups: messageGroups({ messages: messages2 })\n }),\n [messages2]\n);\n\n// src/components/skeletons/MessagesSkeleton/index.tsx\nvar import_react31 = require(\"react\");\nvar import_themes35 = require(\"@radix-ui/themes\");\n\n// src/components/messageGroups/MessageGroupBase/index.tsx\nvar import_react30 = require(\"react\");\nvar import_themes33 = require(\"@radix-ui/themes\");\nvar import_jsx_runtime48 = require(\"react/jsx-runtime\");\nvar MessageGroupBase = (0, import_react30.forwardRef)(function MessageGroupBase2({\n children\n}, ref) {\n return /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(\n import_themes33.Container,\n {\n ref,\n size: \"2\",\n flexGrow: \"0\",\n children: /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(\n import_themes33.Flex,\n {\n flexShrink: \"0\",\n gap: \"3\",\n children\n }\n )\n }\n );\n});\n\n// src/components/messageGroups/MessageGroupBase/Name.tsx\nvar import_themes34 = require(\"@radix-ui/themes\");\nvar import_jsx_runtime49 = require(\"react/jsx-runtime\");\nvar Name = ({\n children\n}) => /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(\n import_themes34.Flex,\n {\n align: \"center\",\n height: \"var(--space-5)\",\n children: /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(\n import_themes34.Text,\n {\n size: \"2\",\n weight: \"bold\",\n children\n }\n )\n }\n);\n\n// src/components/skeletons/MessagesSkeleton/index.tsx\nvar import_jsx_runtime50 = require(\"react/jsx-runtime\");\nvar MessagesSkeleton = (0, import_react31.forwardRef)(function MessagesSkeleton2(_props, ref) {\n return /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)(\n MessageGroupBase,\n {\n ref,\n children: [\n /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(import_themes35.Skeleton, { loading: true, children: /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(\n import_themes35.Avatar,\n {\n fallback: /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(import_themes35.Flex, {}),\n size: \"1\"\n }\n ) }),\n /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)(\n import_themes35.Box,\n {\n pb: \"3\",\n children: [\n /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(Name, { children: /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(\n import_themes35.Skeleton,\n {\n loading: true,\n style: {\n width: \"128px\"\n }\n }\n ) }),\n /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(\n import_themes35.Skeleton,\n {\n loading: true,\n style: {\n width: \"256px\"\n }\n }\n ),\n /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(\n import_themes35.Skeleton,\n {\n loading: true,\n style: {\n width: \"256px\",\n marginTop: \"var(--space-2)\"\n }\n }\n ),\n /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(\n import_themes35.Skeleton,\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\nvar import_react37 = require(\"react\");\nvar import_themes41 = require(\"@radix-ui/themes\");\n\n// src/components/messageGroups/MessageGroupBase/AssistantAvatar.tsx\nvar import_react33 = require(\"react\");\nvar import_themes37 = require(\"@radix-ui/themes\");\n\n// src/contexts/assistants/AssistantAvatarContext/index.tsx\nvar import_react32 = require(\"react\");\nvar import_themes36 = require(\"@radix-ui/themes\");\nvar import_react_icons9 = require(\"@radix-ui/react-icons\");\nvar import_jsx_runtime51 = require(\"react/jsx-runtime\");\nvar AssistantAvatarContext = (0, import_react32.createContext)(\n /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(\n import_themes36.Avatar,\n {\n fallback: /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(import_react_icons9.LightningBoltIcon, {}),\n size: \"1\"\n }\n )\n);\n\n// src/components/messageGroups/MessageGroupBase/AssistantAvatar.tsx\nvar import_jsx_runtime52 = require(\"react/jsx-runtime\");\nvar AssistantAvatar = () => {\n const AssistantAvatarContextValue = (0, import_react33.useContext)(AssistantAvatarContext);\n return /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(\n import_themes37.Flex,\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\nvar import_react34 = require(\"react\");\nvar AssistantNameContext = (0, import_react34.createContext)(\"Assistant\");\n\n// src/components/messageGroups/MessageGroupBase/UserAvatar.tsx\nvar import_react36 = require(\"react\");\nvar import_themes39 = require(\"@radix-ui/themes\");\n\n// src/contexts/users/UserAvatarContext/index.tsx\nvar import_react35 = require(\"react\");\nvar import_themes38 = require(\"@radix-ui/themes\");\nvar import_react_icons10 = require(\"@radix-ui/react-icons\");\nvar import_jsx_runtime53 = require(\"react/jsx-runtime\");\nvar UserAvatarContext = (0, import_react35.createContext)(\n /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(\n import_themes38.Avatar,\n {\n fallback: /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(import_react_icons10.PersonIcon, {}),\n size: \"1\"\n }\n )\n);\n\n// src/components/messageGroups/MessageGroupBase/UserAvatar.tsx\nvar import_jsx_runtime54 = require(\"react/jsx-runtime\");\nvar UserAvatar = () => {\n const UserAvatarContextValue = (0, import_react36.useContext)(UserAvatarContext);\n return /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(\n import_themes39.Flex,\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\nvar import_themes40 = require(\"@radix-ui/themes\");\nvar import_jsx_runtime55 = require(\"react/jsx-runtime\");\nvar Content5 = ({\n messageGroup\n}) => /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(\n import_themes40.Flex,\n {\n direction: \"column-reverse\",\n children: messageGroup.messages.map((message) => /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(\n Message,\n {\n message\n },\n message.id\n ))\n }\n);\n\n// src/components/threads/Thread/Messages/Content/MessageGroup/index.tsx\nvar import_jsx_runtime56 = require(\"react/jsx-runtime\");\nvar MessageGroup = ({\n messageGroup\n}) => {\n const assistantNameContext = (0, import_react37.useContext)(AssistantNameContext);\n return /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)(MessageGroupBase, { children: [\n messageGroup.role === \"user\" ? /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(UserAvatar, {}) : /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(AssistantAvatar, {}),\n /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)(import_themes41.Box, { flexGrow: \"1\", children: [\n /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(Name, { children: messageGroup.role === \"user\" ? \"You\" : assistantNameContext }),\n /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(\n Content5,\n {\n messageGroup\n }\n )\n ] })\n ] });\n};\n\n// src/components/threads/Thread/Messages/Content/index.tsx\nvar import_jsx_runtime57 = require(\"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 (0, import_react38.useEffect)(() => {\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__ */ (0, import_jsx_runtime57.jsx)(MessagesSkeleton, {});\n }\n return /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(import_jsx_runtime57.Fragment, { children: messageGroups2.map((messageGroup) => /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(\n MessageGroup,\n {\n messageGroup\n },\n messageGroup.id\n )) });\n};\n\n// src/components/threads/Thread/Messages/Progress/index.tsx\nvar import_react40 = require(\"react\");\n\n// src/components/skeletons/StartingSkeleton/index.tsx\nvar import_react39 = require(\"react\");\nvar import_themes42 = require(\"@radix-ui/themes\");\nvar import_jsx_runtime58 = require(\"react/jsx-runtime\");\nvar StartingSkeleton = ({\n children\n}) => {\n const assistantNameContext = (0, import_react39.useContext)(AssistantNameContext);\n return /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)(MessageGroupBase, { children: [\n /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(AssistantAvatar, {}),\n /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)(import_themes42.Box, { children: [\n /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(Name, { children: assistantNameContext }),\n children,\n /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(StartingContentSkeleton, {})\n ] })\n ] });\n};\n\n// src/components/threads/Thread/Messages/Progress/index.tsx\nvar import_jsx_runtime59 = require(\"react/jsx-runtime\");\nvar Progress = () => {\n const { latestMessage } = useLatestMessage();\n const isMutatingMessage = useIsMutatingMessage();\n const isVisible = (0, import_react40.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 return true;\n }, [latestMessage, isMutatingMessage]);\n if (!isVisible) return null;\n return /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(StartingSkeleton, {});\n};\n\n// src/components/threads/Thread/Messages/Root/index.tsx\nvar import_themes43 = require(\"@radix-ui/themes\");\n\n// src/hooks/misc/useInfiniteScroll/index.tsx\nvar import_react42 = require(\"react\");\nvar import_react_intersection_observer = require(\"react-intersection-observer\");\n\n// src/hooks/misc/useThrottledEffect/index.tsx\nvar import_lodash7 = __toESM(require(\"lodash\"), 1);\nvar import_react41 = require(\"react\");\nvar useThrottledEffect = (cb, delay, additionalDeps) => {\n const cbRef = (0, import_react41.useRef)(cb);\n const throttledCb = (0, import_react41.useCallback)(\n import_lodash7.default.throttle((...args) => cbRef.current(...args), delay, {\n leading: true,\n trailing: true\n }),\n [delay]\n );\n (0, import_react41.useEffect)(() => {\n cbRef.current = cb;\n });\n (0, import_react41.useEffect)(throttledCb, [throttledCb, ...additionalDeps]);\n};\n\n// src/hooks/misc/useInfiniteScroll/index.tsx\nvar useInfiniteScroll = ({\n isFetchingNextPage,\n hasNextPage,\n fetchNextPage\n}) => {\n const containerRef = (0, import_react42.useRef)(null);\n const { ref: loaderRef, inView } = (0, import_react_intersection_observer.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\nvar import_jsx_runtime60 = require(\"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__ */ (0, import_jsx_runtime60.jsxs)(\n import_themes43.Flex,\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__ */ (0, import_jsx_runtime60.jsx)(\n import_themes43.Flex,\n {\n ref: loaderRef\n }\n ),\n /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(\n import_themes43.Flex,\n {\n flexShrink: \"0\",\n flexGrow: \"1\"\n }\n )\n ]\n }\n );\n};\n\n// src/components/threads/Thread/Messages/NextPageSkeleton.tsx\nvar import_jsx_runtime61 = require(\"react/jsx-runtime\");\nvar NextPageSkeleton = () => {\n const {\n hasNextPage\n } = useMessages();\n if (!hasNextPage) {\n return null;\n }\n return /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(MessagesSkeleton, {});\n};\n\n// src/components/threads/Thread/Messages/index.tsx\nvar import_jsx_runtime62 = require(\"react/jsx-runtime\");\nvar Messages = ({\n children,\n className,\n style\n}) => /* @__PURE__ */ (0, import_jsx_runtime62.jsxs)(\n Root2,\n {\n style,\n className,\n children: [\n /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(\n import_themes44.Flex,\n {\n flexShrink: \"0\",\n height: \"var(--space-3)\"\n }\n ),\n /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(Progress, {}),\n children,\n /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(Content6, {}),\n /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(NextPageSkeleton, {}),\n /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(\n import_themes44.Flex,\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\nvar import_react_icons11 = require(\"@radix-ui/react-icons\");\nvar import_themes45 = require(\"@radix-ui/themes\");\n\n// src/hooks/messages/useMessageFormContext/index.ts\nvar import_react44 = require(\"react\");\n\n// src/contexts/messages/MessageFormContext/index.ts\nvar import_react43 = require(\"react\");\nvar MessageFormContext = (0, import_react43.createContext)({\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 = () => (0, import_react44.useContext)(MessageFormContext);\n\n// src/components/threads/Thread/MessageForm/Submit/index.tsx\nvar import_jsx_runtime63 = require(\"react/jsx-runtime\");\nvar Root3 = ({\n children,\n style,\n className\n}) => /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(\n import_themes45.Flex,\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__ */ (0, import_jsx_runtime63.jsx)(\n import_themes45.IconButton,\n {\n type: \"button\",\n onClick: () => superinterfaceContext.createMessageAbortControllerRef.current?.abort(),\n ...props,\n children: /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(import_react_icons11.StopIcon, {})\n }\n );\n }\n return /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(\n import_themes45.IconButton,\n {\n type: \"submit\",\n disabled: isDisabled || isFileLoading,\n ...props,\n children: /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(import_react_icons11.ArrowUpIcon, {})\n }\n );\n};\nvar Submit = (props) => /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(Root3, { ...props, children: /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(Button3, {}) });\nSubmit.Root = Root3;\nSubmit.Button = Button3;\n\n// src/components/threads/Thread/MessageForm/Root/index.tsx\nvar import_react_query6 = require(\"@tanstack/react-query\");\nvar import_react45 = require(\"react\");\nvar import_react_hook_form = require(\"react-hook-form\");\nvar import_themes46 = require(\"@radix-ui/themes\");\n\n// src/components/threads/Thread/MessageForm/Root/lib/formOptions.ts\nvar import_zod = require(\"zod\");\nvar import_zod2 = require(\"@hookform/resolvers/zod\");\nvar schema = import_zod.z.object({\n content: import_zod.z.string().min(1)\n});\nvar formOptions = {\n resolver: (0, import_zod2.zodResolver)(schema)\n};\n\n// src/components/threads/Thread/MessageForm/Root/index.tsx\nvar import_radash15 = require(\"radash\");\nvar import_jsx_runtime64 = require(\"react/jsx-runtime\");\nvar Root4 = ({\n children,\n onSubmit: onSubmitArg,\n isDisabled: isDisabledArg,\n style,\n className\n}) => {\n const [files, setFiles] = (0, import_react45.useState)([]);\n const formProps = (0, import_react_hook_form.useForm)(formOptions);\n const {\n handleSubmit,\n formState: { isSubmitting },\n reset,\n watch\n } = formProps;\n const { addToast } = useToasts();\n const queryClient = (0, import_react_query6.useQueryClient)();\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 = (0, import_react45.useMemo)(() => files.some((file) => isOptimistic({ id: file.id })), [files]);\n const isLoading = (0, import_react45.useMemo)(() => isMutatingMessage || isSubmitting, [\n isMutatingMessage,\n isSubmitting\n ]);\n const { latestMessage } = useLatestMessage();\n const isDisabled = (0, import_react45.useMemo)(() => (\n // @ts-ignore-next-line\n latestMessage?.metadata?.isBlocking || isDisabledArg\n ), [latestMessage, isDisabledArg]);\n const onSubmit = onSubmitArg ? (0, import_radash15.partob)(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__ */ (0, import_jsx_runtime64.jsx)(\n MessageFormContext.Provider,\n {\n value: {\n isDisabled,\n isLoading,\n files,\n setFiles,\n isFileLoading,\n content\n },\n children: /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(import_react_hook_form.FormProvider, { ...formProps, children: /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(\n import_themes46.Box,\n {\n asChild: true,\n flexShrink: \"0\",\n style,\n className,\n children: /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(\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\nvar import_react_hook_form3 = require(\"react-hook-form\");\nvar import_themes50 = require(\"@radix-ui/themes\");\n\n// src/components/threads/Thread/MessageForm/Field/Control.tsx\nvar import_themes47 = require(\"@radix-ui/themes\");\nvar import_react_hook_form2 = require(\"react-hook-form\");\n\n// src/hooks/misc/usePrevious.ts\nvar import_react46 = require(\"react\");\nvar usePrevious = (state) => {\n const ref = (0, import_react46.useRef)();\n (0, import_react46.useEffect)(() => {\n ref.current = state;\n });\n return ref.current;\n};\n\n// src/components/threads/Thread/MessageForm/Field/Control.tsx\nvar import_react48 = require(\"react\");\n\n// src/components/textareas/TextareaBase/index.tsx\nvar import_react47 = require(\"react\");\nvar import_react_textarea_autosize = __toESM(require(\"react-textarea-autosize\"), 1);\nvar import_jsx_runtime65 = require(\"react/jsx-runtime\");\nvar TextareaBase = (0, import_react47.forwardRef)(function TextareaBase2({\n style,\n className,\n ...rest\n}, ref) {\n return /* @__PURE__ */ (0, import_jsx_runtime65.jsxs)(import_jsx_runtime65.Fragment, { children: [\n /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(\"style\", { children: `.superinterface-textarea { min-height: inherit; height: 30px; }\n.superinterface-textarea::placeholder { color: var(--gray-a10); }` }),\n /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(\n import_react_textarea_autosize.default,\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\nvar import_jsx_runtime66 = require(\"react/jsx-runtime\");\nvar Root5 = ({\n children,\n style,\n className\n}) => /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(\n import_themes47.Flex,\n {\n flexGrow: \"1\",\n pt: \"4px\",\n style,\n className,\n children\n }\n);\nvar Input = (props) => {\n const assistantNameContext = (0, import_react48.useContext)(AssistantNameContext);\n const {\n register\n } = (0, import_react_hook_form2.useFormContext)();\n const { isDisabled, isLoading } = useMessageFormContext();\n const isSubmitDisabled = (0, import_react48.useMemo)(() => isDisabled || isLoading, [isDisabled, isLoading]);\n const isDisabledPrevious = usePrevious(isDisabled);\n const textareaRef = (0, import_react48.useRef)(null);\n const textareaProps = register(\"content\");\n (0, import_react48.useEffect)(() => {\n if (isDisabled) return;\n if (!isDisabledPrevious) return;\n if (!textareaRef.current) return;\n textareaRef.current.focus();\n }, [isDisabled, isDisabledPrevious, textareaProps]);\n return /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(\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__ */ (0, import_jsx_runtime66.jsx)(Root5, { ...props, children: /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(Input, {}) });\nControl.Root = Root5;\nControl.Input = Input;\n\n// src/components/threads/Thread/MessageForm/Field/Files/Preview.tsx\nvar import_themes48 = require(\"@radix-ui/themes\");\nvar import_react_icons12 = require(\"@radix-ui/react-icons\");\nvar import_jsx_runtime67 = require(\"react/jsx-runtime\");\nvar Preview = (props) => {\n const { files, setFiles } = useMessageFormContext();\n if (!files.length) {\n return null;\n }\n return /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(\n import_themes48.Flex,\n {\n flexBasis: \"100%\",\n direction: \"column\",\n pb: \"2\",\n gap: \"1\",\n ...props,\n children: files.map((file) => /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(\n import_themes48.Card,\n {\n variant: \"ghost\",\n children: /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)(\n import_themes48.Flex,\n {\n align: \"center\",\n justify: \"between\",\n gap: \"1\",\n children: [\n /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)(\n import_themes48.Flex,\n {\n align: \"center\",\n gap: \"1\",\n flexShrink: \"1\",\n minWidth: \"0\",\n maxWidth: \"250px\",\n children: [\n /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(\n import_themes48.Flex,\n {\n flexShrink: \"0\",\n children: /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(\n import_themes48.Spinner,\n {\n loading: isOptimistic({ id: file.id }),\n children: /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(import_react_icons12.FileIcon, {})\n }\n )\n }\n ),\n /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(\n import_themes48.Text,\n {\n size: \"2\",\n truncate: true,\n wrap: \"nowrap\",\n children: file.filename\n }\n )\n ]\n }\n ),\n /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(\n import_themes48.Flex,\n {\n flexShrink: \"0\",\n children: /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(\n import_themes48.IconButton,\n {\n onClick: () => setFiles((prev) => prev.filter((prevFile) => prevFile.id !== file.id)),\n color: \"gray\",\n variant: \"ghost\",\n size: \"1\",\n children: /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(import_react_icons12.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\nvar import_react49 = require(\"react\");\nvar import_radash16 = require(\"radash\");\nvar import_dayjs2 = __toESM(require(\"dayjs\"), 1);\nvar import_react_icons13 = require(\"@radix-ui/react-icons\");\nvar import_themes49 = require(\"@radix-ui/themes\");\n\n// src/hooks/files/useCreateFile/index.ts\nvar import_react_query7 = require(\"@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 = (0, import_react_query7.useQueryClient)();\n const superinterfaceContext = useSuperinterfaceContext();\n const threadContext = useSuperinterfaceContext();\n const props = (0, import_react_query7.useMutation)(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\nvar import_jsx_runtime68 = require(\"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 = (0, import_react49.useCallback)(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: (0, import_dayjs2.default)().unix(),\n bytes: fileObject.size,\n status: \"processed\",\n fileObject\n }));\n setFiles((prev) => [\n ...prev,\n ...newFiles.map((file) => (0, import_radash16.omit)(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__ */ (0, import_jsx_runtime68.jsx)(\n import_themes49.Flex,\n {\n pt: \"2\",\n pr: \"2\",\n flexGrow: \"0\",\n ...props,\n children: /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)(\n import_themes49.IconButton,\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__ */ (0, import_jsx_runtime68.jsx)(import_react_icons13.FilePlusIcon, {}),\n /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(\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\nvar import_jsx_runtime69 = require(\"react/jsx-runtime\");\nvar Root6 = ({\n children,\n className,\n style\n}) => {\n const {\n formState: {\n errors\n }\n } = (0, import_react_hook_form3.useFormContext)();\n return /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(\n import_themes50.Container,\n {\n size: \"2\",\n flexGrow: \"0\",\n className,\n style,\n children: /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(\n import_themes50.Flex,\n {\n direction: \"column\",\n flexShrink: \"0\",\n children: /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(\n import_themes50.Flex,\n {\n direction: \"column\",\n flexShrink: \"0\",\n children: /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(\n import_themes50.Flex,\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\nvar import_jsx_runtime70 = require(\"react/jsx-runtime\");\nvar MessageForm = (props) => /* @__PURE__ */ (0, import_jsx_runtime70.jsx)(Root4, { ...props, children: /* @__PURE__ */ (0, import_jsx_runtime70.jsxs)(Field.Root, { children: [\n /* @__PURE__ */ (0, import_jsx_runtime70.jsx)(Field.Control, {}),\n /* @__PURE__ */ (0, import_jsx_runtime70.jsx)(Submit, {})\n] }) });\nMessageForm.Root = Root4;\nMessageForm.Field = Field;\nMessageForm.Submit = Submit;\n\n// src/components/threads/Thread/Root/index.tsx\nvar import_themes52 = require(\"@radix-ui/themes\");\n\n// src/components/threads/Thread/Provider/index.tsx\nvar Provider2 = SuperinterfaceProvider;\n\n// src/components/toasts/ToastsProvider/index.tsx\nvar import_react50 = require(\"react\");\nvar Toast2 = __toESM(require(\"@radix-ui/react-toast\"), 1);\n\n// src/components/toasts/ToastsProvider/CustomToast.tsx\nvar Toast = __toESM(require(\"@radix-ui/react-toast\"), 1);\nvar import_themes51 = require(\"@radix-ui/themes\");\nvar import_react_icons14 = require(\"@radix-ui/react-icons\");\nvar import_jsx_runtime71 = require(\"react/jsx-runtime\");\nvar CustomToast = ({\n toast\n}) => /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(Toast.Root, { children: /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(import_themes51.Card, { children: /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(Toast.Title, { children: /* @__PURE__ */ (0, import_jsx_runtime71.jsxs)(import_themes51.Flex, { children: [\n /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(\n import_themes51.Flex,\n {\n pr: \"2\",\n height: \"14px\",\n align: \"center\",\n children: toast.type === \"success\" ? /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(\n import_react_icons14.CheckCircledIcon,\n {\n color: \"var(--accent-9)\"\n }\n ) : /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(\n import_react_icons14.CrossCircledIcon,\n {\n color: \"var(--red-9)\"\n }\n )\n }\n ),\n /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(\n import_themes51.Text,\n {\n weight: \"medium\",\n size: \"1\",\n children: toast.message\n }\n )\n] }) }) }) });\n\n// src/components/toasts/ToastsProvider/index.tsx\nvar import_jsx_runtime72 = require(\"react/jsx-runtime\");\nvar ToastsProvider = ({\n children,\n bottom = 0\n}) => {\n const [toasts, setToasts] = (0, import_react50.useState)([]);\n const addToast = (0, import_react50.useCallback)((toast) => setToasts((prevToasts) => [\n ...prevToasts,\n toast\n ]), []);\n return /* @__PURE__ */ (0, import_jsx_runtime72.jsx)(\n ToastsContext.Provider,\n {\n value: {\n toasts,\n addToast\n },\n children: /* @__PURE__ */ (0, import_jsx_runtime72.jsxs)(Toast2.Provider, { children: [\n children,\n Array.from(toasts).map((toast, index) => /* @__PURE__ */ (0, import_jsx_runtime72.jsx)(\n CustomToast,\n {\n toast\n },\n index\n )),\n /* @__PURE__ */ (0, import_jsx_runtime72.jsx)(\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\nvar import_jsx_runtime73 = require(\"react/jsx-runtime\");\nvar Root8 = ({\n children,\n style,\n className,\n ...rest\n}) => /* @__PURE__ */ (0, import_jsx_runtime73.jsx)(ToastsProvider, { bottom: \"var(--space-9)\", children: /* @__PURE__ */ (0, import_jsx_runtime73.jsx)(Provider2, { ...rest, children: /* @__PURE__ */ (0, import_jsx_runtime73.jsx)(\n import_themes52.Flex,\n {\n direction: \"column\",\n flexGrow: \"1\",\n className,\n style,\n children\n }\n) }) });\n\n// src/components/threads/Thread/index.tsx\nvar import_jsx_runtime74 = require(\"react/jsx-runtime\");\nvar Thread = (props) => /* @__PURE__ */ (0, import_jsx_runtime74.jsxs)(Root8, { ...props, children: [\n /* @__PURE__ */ (0, import_jsx_runtime74.jsx)(Messages, {}),\n /* @__PURE__ */ (0, import_jsx_runtime74.jsx)(MessageForm, {})\n] });\nThread.Root = Root8;\nThread.Messages = Messages;\nThread.MessageForm = MessageForm;\n\n// src/hooks/messages/useMessageContext/index.ts\nvar import_react51 = require(\"react\");\nvar useMessageContext = () => (0, import_react51.useContext)(MessageContext);\n\n// src/hooks/assistants/useAssistant/index.ts\nvar import_react52 = require(\"react\");\nvar import_react_query9 = require(\"@tanstack/react-query\");\n\n// src/hooks/assistants/useAssistant/lib/queryOptions/index.ts\nvar import_react_query8 = require(\"@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}) => (0, import_react_query8.queryOptions)({\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 = (0, import_react_query9.useQuery)(queryOptions2({\n assistantId,\n superinterfaceContext\n }));\n return (0, import_react52.useMemo)(() => ({\n ...props,\n assistant: props.data ? props.data.assistant : null\n }), [props]);\n};\n\n// src/components/threads/ThreadDialog/Provider/index.tsx\nvar import_react55 = require(\"react\");\n\n// src/contexts/threads/ThreadDialogContext/index.ts\nvar import_react53 = require(\"react\");\nvar ThreadDialogContext = (0, import_react53.createContext)({\n isOpen: false,\n setIsOpen: () => {\n }\n});\n\n// src/hooks/threads/useThreadDialogContext/index.ts\nvar import_react54 = require(\"react\");\nvar useThreadDialogContext = () => (0, import_react54.useContext)(ThreadDialogContext);\n\n// src/components/threads/ThreadDialog/Provider/index.tsx\nvar import_jsx_runtime75 = require(\"react/jsx-runtime\");\nvar Provider4 = ({\n children\n}) => {\n const threadDialogContext = useThreadDialogContext();\n const [isOpen, setIsOpen] = (0, import_react55.useState)(threadDialogContext.isOpen);\n return /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(\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\nvar import_jsx_runtime76 = require(\"react/jsx-runtime\");\nvar Root9 = ({\n children\n}) => /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(Provider4, { children });\n\n// src/components/threads/ThreadDialog/Trigger/index.tsx\nvar import_themes54 = require(\"@radix-ui/themes\");\n\n// src/components/threads/ThreadDialog/Trigger/Button.tsx\nvar import_themes53 = require(\"@radix-ui/themes\");\nvar import_react_icons15 = require(\"@radix-ui/react-icons\");\nvar import_jsx_runtime77 = require(\"react/jsx-runtime\");\nvar Button4 = (props) => /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(\n import_themes53.IconButton,\n {\n size: \"4\",\n radius: \"full\",\n ...props,\n children: /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(import_react_icons15.ChatBubbleIcon, {})\n }\n);\n\n// src/components/threads/ThreadDialog/Trigger/index.tsx\nvar import_jsx_runtime78 = require(\"react/jsx-runtime\");\nvar Root10 = ({\n children,\n style,\n className\n}) => {\n const { setIsOpen, isOpen } = useThreadDialogContext();\n return /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(\n import_themes54.Flex,\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__ */ (0, import_jsx_runtime78.jsx)(Root10, { ...args, children: /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(Button4, {}) });\nTrigger.Root = Root10;\nTrigger.Button = Button4;\n\n// src/components/threads/ThreadDialog/Content/index.tsx\nvar import_themes56 = require(\"@radix-ui/themes\");\n\n// src/components/threads/ThreadDialog/Close/index.tsx\nvar import_react_icons16 = require(\"@radix-ui/react-icons\");\nvar import_themes55 = require(\"@radix-ui/themes\");\nvar import_jsx_runtime79 = require(\"react/jsx-runtime\");\nvar Close = () => {\n const { setIsOpen, isOpen } = useThreadDialogContext();\n return /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(\n import_themes55.Flex,\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__ */ (0, import_jsx_runtime79.jsx)(\n import_themes55.IconButton,\n {\n size: \"2\",\n variant: \"soft\",\n children: /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(import_react_icons16.Cross1Icon, {})\n }\n )\n }\n );\n};\n\n// src/components/threads/ThreadDialog/Content/index.tsx\nvar import_jsx_runtime80 = require(\"react/jsx-runtime\");\nvar Root11 = ({\n children,\n className,\n style\n}) => {\n const { isOpen } = useThreadDialogContext();\n if (!isOpen) return null;\n return /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(\n import_themes56.Flex,\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__ */ (0, import_jsx_runtime80.jsxs)(\n import_themes56.Card,\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__ */ (0, import_jsx_runtime80.jsx)(\n import_themes56.Inset,\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__ */ (0, import_jsx_runtime80.jsx)(Close, {})\n ]\n }\n )\n }\n );\n};\nvar Messages2 = ({\n className,\n style\n}) => /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(\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__ */ (0, import_jsx_runtime80.jsx)(\n import_themes56.Flex,\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__ */ (0, import_jsx_runtime80.jsx)(Root11, { ...props, children: /* @__PURE__ */ (0, import_jsx_runtime80.jsxs)(Thread.Root, { children: [\n /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(Messages2, {}),\n /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(FormContainer, { children: /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(Thread.MessageForm, {}) })\n] }) });\nContent7.Root = Root11;\nContent7.Messages = Messages2;\nContent7.FormContainer = FormContainer;\n\n// src/components/threads/ThreadDialog/index.tsx\nvar import_jsx_runtime81 = require(\"react/jsx-runtime\");\nvar ThreadDialog = () => /* @__PURE__ */ (0, import_jsx_runtime81.jsxs)(Root9, { children: [\n /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(Content7, {}),\n /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(Trigger, {})\n] });\nThreadDialog.Root = Root9;\nThreadDialog.Trigger = Trigger;\nThreadDialog.Content = Content7;\n\n// src/components/threads/AudioThread/Root/index.tsx\nvar import_themes57 = require(\"@radix-ui/themes\");\n\n// src/contexts/threads/AudioThreadContext/index.ts\nvar import_react56 = require(\"react\");\nvar AudioThreadContext = (0, import_react56.createContext)({\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\nvar import_react57 = require(\"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] = (0, import_react57.useState)(\"\");\n (0, import_react57.useEffect)(() => {\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\nvar import_react58 = require(\"react\");\nvar useStatus = ({\n messageAudioProps,\n recorderProps,\n createMessageProps\n}) => {\n const latestMessageProps = useLatestMessage();\n const status = (0, import_react58.useMemo)(() => {\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\nvar import_dayjs3 = __toESM(require(\"dayjs\"), 1);\nvar import_use_audio_capture = require(\"use-audio-capture\");\nvar import_react60 = require(\"react\");\nvar import_react_use_audio_player = require(\"react-use-audio-player\");\n\n// src/hooks/misc/useInterval.ts\nvar import_react59 = require(\"react\");\nvar useInterval = (callback, delay) => {\n const savedCallback = (0, import_react59.useRef)(() => {\n });\n (0, import_react59.useEffect)(() => {\n savedCallback.current = callback;\n });\n (0, import_react59.useEffect)(() => {\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] = (0, import_react60.useState)(null);\n const [noiseStart, setNoiseStart] = (0, import_react60.useState)(null);\n const [mediaStream, setMediaStream] = (0, import_react60.useState)(null);\n const [status, setStatus] = (0, import_react60.useState)(\"idle\");\n const startAudioPlayer = (0, import_react_use_audio_player.useAudioPlayer)();\n const endAudioPlayer = (0, import_react_use_audio_player.useAudioPlayer)();\n const [isLoaded, setIsLoaded] = (0, import_react60.useState)(false);\n (0, import_react60.useEffect)(() => {\n if (isLoaded) return;\n setIsLoaded(true);\n }, [isLoaded, startAudioPlayer, endAudioPlayer]);\n const audioCaptureProps = (0, import_use_audio_capture.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] = (0, import_react60.useState)(null);\n const isInited = (0, import_react60.useRef)(false);\n (0, import_react60.useEffect)(() => {\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 = (0, import_react60.useMemo)(() => {\n if (!audioEngine) return null;\n const result = audioEngine.audioContext.createAnalyser();\n audioEngine.source.connect(result);\n return result;\n }, [audioEngine]);\n const silenceAnalyser = (0, import_react60.useMemo)(() => {\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 = (0, import_react60.useCallback)(() => {\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 || (0, import_dayjs3.default)();\n return null;\n });\n setNoiseStart((noiseStart2) => {\n if (isSilent) return noiseStart2;\n return noiseStart2 || (0, import_dayjs3.default)();\n });\n requestAnimationFrame(() => handleSilence());\n }, [silenceAnalyser, setNoiseStart, setSilenceStart]);\n (0, import_react60.useEffect)(() => {\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((0, import_dayjs3.default)().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\nvar import_react61 = require(\"react\");\nvar import_compromise = __toESM(require(\"compromise\"), 1);\nvar import_howler = require(\"howler\");\nvar import_react_use_audio_player2 = require(\"react-use-audio-player\");\n\n// src/hooks/audioThreads/useMessageAudio/lib/input.ts\nvar import_radash17 = require(\"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 ((0, import_radash17.isEmpty)(result)) return null;\n return result;\n};\n\n// src/hooks/audioThreads/useMessageAudio/lib/isHtmlAudioSupported.ts\nvar import_detect_browser = require(\"detect-browser\");\nvar unsupportedNames = [\n \"safari\",\n \"ios\"\n];\nvar isHtmlAudioSupported = !unsupportedNames.includes((0, import_detect_browser.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 = (0, import_compromise.default)(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] = (0, import_react61.useState)(false);\n const [stoppedMessageIds, setStoppedMessageIds] = (0, import_react61.useState)([]);\n const [playedMessageSentences, setPlayedMessageSentences] = (0, import_react61.useState)([]);\n const audioPlayer = (0, import_react_use_audio_player2.useAudioPlayer)();\n const nextAudioPlayer = (0, import_react_use_audio_player2.useAudioPlayer)();\n const superinterfaceContext = useSuperinterfaceContext();\n const [isPlaying, setIsPlaying] = (0, import_react61.useState)(false);\n const latestMessageProps = useLatestMessage();\n const unplayedMessageSentences = (0, import_react61.useMemo)(() => {\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 (0, import_react61.useEffect)(() => {\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 (0, import_react61.useEffect)(() => {\n if (isHtmlAudioSupported) {\n if (!import_howler.Howler?._howls[0]?._sounds[0]?._node) return;\n import_howler.Howler._howls[0]._sounds[0]._node.crossOrigin = \"anonymous\";\n }\n }, [audioPlayer]);\n const [audioEngine, setAudioEngine] = (0, import_react61.useState)(null);\n const isAudioEngineInited = (0, import_react61.useRef)(false);\n (0, import_react61.useEffect)(() => {\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(import_howler.Howler._howls[0]._sounds[0]._node),\n audioContext\n });\n } else {\n setAudioEngine({\n source: import_howler.Howler.masterGain,\n audioContext: import_howler.Howler.ctx\n });\n }\n }, [audioPlayer, isAudioEngineInited]);\n const visualizationAnalyser = (0, import_react61.useMemo)(() => {\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 = (0, import_react61.useMemo)(() => 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\nvar import_react_query10 = require(\"@tanstack/react-query\");\nvar import_jsx_runtime82 = require(\"react/jsx-runtime\");\nvar Content8 = ({\n children,\n className,\n style\n}) => {\n const { addToast } = useToasts();\n const queryClient = (0, import_react_query10.useQueryClient)();\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__ */ (0, import_jsx_runtime82.jsx)(\n AudioThreadContext.Provider,\n {\n value: {\n status,\n recorderProps,\n messageAudioProps\n },\n children: /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(\n import_themes57.Flex,\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__ */ (0, import_jsx_runtime82.jsx)(ToastsProvider, { children: /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(Content8, { ...rest, children }) });\n\n// src/components/threads/AudioThread/Visualization/index.tsx\nvar import_react64 = require(\"react\");\nvar import_lodash9 = __toESM(require(\"lodash\"), 1);\nvar import_themes59 = require(\"@radix-ui/themes\");\n\n// src/hooks/threads/useAudioThreadContext/index.ts\nvar import_react62 = require(\"react\");\nvar useAudioThreadContext = () => (0, import_react62.useContext)(AudioThreadContext);\n\n// src/components/threads/AudioThread/BarsVisualizer/index.tsx\nvar import_lodash8 = __toESM(require(\"lodash\"), 1);\nvar import_themes58 = require(\"@radix-ui/themes\");\nvar import_react63 = require(\"react\");\nvar import_radash18 = require(\"radash\");\nvar import_jsx_runtime83 = require(\"react/jsx-runtime\");\nvar barCount = 4;\nvar BarsVisualizer = ({\n visualizationAnalyser,\n backgroundColor,\n height,\n barWidth\n}) => {\n const [barHeights, setBarHeights] = (0, import_react63.useState)([]);\n const draw = (0, import_react63.useCallback)(({ 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 = (0, import_radash18.cluster)(frequencyData, frequencyData.length / barCount);\n setBarHeights(\n clusteredFrequencyData.map((frequencyDataCluster) => import_lodash8.default.mean(frequencyDataCluster) / 255 * 100)\n );\n requestAnimationFrame(() => draw({ visualizationAnalyser: visualizationAnalyser2 }));\n }, []);\n (0, import_react63.useEffect)(() => {\n draw({ visualizationAnalyser });\n }, [draw, visualizationAnalyser]);\n return /* @__PURE__ */ (0, import_jsx_runtime83.jsx)(\n import_themes58.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__ */ (0, import_jsx_runtime83.jsx)(\n import_themes58.Flex,\n {\n direction: \"column\",\n align: \"center\",\n justify: \"center\",\n height,\n children: /* @__PURE__ */ (0, import_jsx_runtime83.jsx)(\n import_themes58.Flex,\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\nvar import_jsx_runtime84 = require(\"react/jsx-runtime\");\nvar Visualization = (props) => {\n const audioThreadContext = useAudioThreadContext();\n const assistantNameContext = (0, import_react64.useContext)(AssistantNameContext);\n const [scale, setScale] = (0, import_react64.useState)(0);\n const draw = (0, import_react64.useCallback)(({ 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 + import_lodash9.default.mean(frequencyData) / 255 / 10);\n requestAnimationFrame(() => draw({ visualizationAnalyser }));\n }, []);\n (0, import_react64.useEffect)(() => {\n draw({ visualizationAnalyser: audioThreadContext.recorderProps.visualizationAnalyser });\n }, [draw, audioThreadContext]);\n return /* @__PURE__ */ (0, import_jsx_runtime84.jsxs)(\n import_themes59.Flex,\n {\n direction: \"column\",\n align: \"center\",\n justify: \"center\",\n mb: \"3\",\n flexGrow: \"1\",\n ...props,\n children: [\n /* @__PURE__ */ (0, import_jsx_runtime84.jsx)(\n import_themes59.Flex,\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__ */ (0, import_jsx_runtime84.jsx)(\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__ */ (0, import_jsx_runtime84.jsxs)(\n import_themes59.Flex,\n {\n ml: \"-22.5px\",\n gap: \"3\",\n pt: \"5\",\n children: [\n /* @__PURE__ */ (0, import_jsx_runtime84.jsx)(AssistantAvatar, {}),\n /* @__PURE__ */ (0, import_jsx_runtime84.jsx)(Name, { children: assistantNameContext })\n ]\n }\n )\n ]\n }\n );\n};\n\n// src/components/threads/AudioThread/Status/StatusMessages.tsx\nvar import_themes60 = require(\"@radix-ui/themes\");\nvar import_jsx_runtime85 = require(\"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__ */ (0, import_jsx_runtime85.jsxs)(\n import_themes60.Flex,\n {\n justify: \"center\",\n pb: \"5\",\n className,\n style,\n children: [\n /* @__PURE__ */ (0, import_jsx_runtime85.jsx)(\n import_themes60.Text,\n {\n size: \"2\",\n weight: \"regular\",\n color: \"gray\",\n className: \"status-messages-texts\"\n }\n ),\n /* @__PURE__ */ (0, import_jsx_runtime85.jsx)(\n \"style\",\n {\n dangerouslySetInnerHTML: {\n __html: html({ texts })\n }\n }\n )\n ]\n }\n);\n\n// src/components/threads/AudioThread/Status/index.tsx\nvar import_jsx_runtime86 = require(\"react/jsx-runtime\");\nvar Status = (props) => {\n const audioThreadContext = useAudioThreadContext();\n if (audioThreadContext.status === \"recording\") {\n return /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(\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__ */ (0, import_jsx_runtime86.jsx)(\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__ */ (0, import_jsx_runtime86.jsx)(\n StatusMessages,\n {\n texts: [\n \"Click the button below to interrupt\"\n ],\n ...props\n }\n );\n }\n return /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(\n StatusMessages,\n {\n texts: [\n \"Thinking\"\n ],\n ...props\n }\n );\n};\n\n// src/components/threads/AudioThread/Form/index.tsx\nvar import_themes62 = require(\"@radix-ui/themes\");\n\n// src/components/threads/AudioThread/Form/MicIcon.tsx\nvar import_jsx_runtime87 = require(\"react/jsx-runtime\");\nvar MicIcon = (props) => /* @__PURE__ */ (0, import_jsx_runtime87.jsx)(\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__ */ (0, import_jsx_runtime87.jsx)(\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\nvar import_themes61 = require(\"@radix-ui/themes\");\nvar import_react_icons17 = require(\"@radix-ui/react-icons\");\nvar import_jsx_runtime88 = require(\"react/jsx-runtime\");\nvar ActionButton = () => {\n const audioThreadContext = useAudioThreadContext();\n const superinterfaceContext = useSuperinterfaceContext();\n if (audioThreadContext.status === \"recording\") {\n return /* @__PURE__ */ (0, import_jsx_runtime88.jsxs)(\n import_themes61.Flex,\n {\n align: \"center\",\n children: [\n /* @__PURE__ */ (0, import_jsx_runtime88.jsx)(\n import_themes61.Flex,\n {\n mr: \"3\",\n ml: \"-7\",\n children: /* @__PURE__ */ (0, import_jsx_runtime88.jsx)(\n import_themes61.IconButton,\n {\n onClick: audioThreadContext.recorderProps.pause,\n color: \"gray\",\n variant: \"soft\",\n size: \"1\",\n children: /* @__PURE__ */ (0, import_jsx_runtime88.jsx)(import_react_icons17.PauseIcon, {})\n }\n )\n }\n ),\n /* @__PURE__ */ (0, import_jsx_runtime88.jsx)(\n import_themes61.IconButton,\n {\n onClick: audioThreadContext.recorderProps.stop,\n highContrast: true,\n variant: \"soft\",\n size: \"4\",\n children: /* @__PURE__ */ (0, import_jsx_runtime88.jsx)(import_react_icons17.ArrowUpIcon, {})\n }\n )\n ]\n }\n );\n }\n if (audioThreadContext.status === \"recorderPaused\") {\n return /* @__PURE__ */ (0, import_jsx_runtime88.jsx)(\n import_themes61.IconButton,\n {\n onClick: audioThreadContext.recorderProps.resume,\n color: \"red\",\n size: \"4\",\n children: /* @__PURE__ */ (0, import_jsx_runtime88.jsx)(import_react_icons17.ResumeIcon, {})\n }\n );\n }\n if (audioThreadContext.status === \"idle\") {\n return /* @__PURE__ */ (0, import_jsx_runtime88.jsx)(\n import_themes61.IconButton,\n {\n onClick: () => audioThreadContext.recorderProps.start(),\n size: \"4\",\n color: \"red\"\n }\n );\n }\n if (audioThreadContext.status === \"playing\") {\n return /* @__PURE__ */ (0, import_jsx_runtime88.jsx)(\n import_themes61.IconButton,\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__ */ (0, import_jsx_runtime88.jsx)(import_react_icons17.StopIcon, {})\n }\n );\n }\n if (audioThreadContext.status === \"playerPaused\") {\n return /* @__PURE__ */ (0, import_jsx_runtime88.jsx)(\n import_themes61.IconButton,\n {\n onClick: () => audioThreadContext.messageAudioProps.play(),\n size: \"4\",\n children: /* @__PURE__ */ (0, import_jsx_runtime88.jsx)(import_react_icons17.ResumeIcon, {})\n }\n );\n }\n return /* @__PURE__ */ (0, import_jsx_runtime88.jsx)(\n import_themes61.IconButton,\n {\n size: \"4\",\n variant: \"soft\",\n disabled: true\n }\n );\n};\n\n// src/components/threads/AudioThread/Form/index.tsx\nvar import_jsx_runtime89 = require(\"react/jsx-runtime\");\nvar Form = (props) => {\n const audioThreadContext = useAudioThreadContext();\n return /* @__PURE__ */ (0, import_jsx_runtime89.jsxs)(\n import_themes62.Flex,\n {\n direction: \"column\",\n align: \"center\",\n ...props,\n children: [\n /* @__PURE__ */ (0, import_jsx_runtime89.jsxs)(\n import_themes62.Flex,\n {\n pb: \"3\",\n align: \"center\",\n children: [\n /* @__PURE__ */ (0, import_jsx_runtime89.jsx)(\n import_themes62.Flex,\n {\n ml: \"-22.5px\",\n mr: \"2\",\n align: \"center\",\n children: /* @__PURE__ */ (0, import_jsx_runtime89.jsx)(\n MicIcon,\n {\n style: {\n color: audioThreadContext.status === \"recording\" ? \"var(--accent-11)\" : \"var(--gray-11)\"\n }\n }\n )\n }\n ),\n /* @__PURE__ */ (0, import_jsx_runtime89.jsx)(\n import_themes62.Flex,\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__ */ (0, import_jsx_runtime89.jsx)(\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__ */ (0, import_jsx_runtime89.jsx)(ActionButton, {})\n ]\n }\n );\n};\n\n// src/components/threads/AudioThread/index.tsx\nvar import_jsx_runtime90 = require(\"react/jsx-runtime\");\nvar AudioThread = (props) => /* @__PURE__ */ (0, import_jsx_runtime90.jsxs)(Root12, { ...props, children: [\n /* @__PURE__ */ (0, import_jsx_runtime90.jsx)(Visualization, {}),\n /* @__PURE__ */ (0, import_jsx_runtime90.jsx)(Status, {}),\n /* @__PURE__ */ (0, import_jsx_runtime90.jsx)(Form, {})\n] });\nAudioThread.Root = Root12;\nAudioThread.Visualization = Visualization;\nAudioThread.Status = Status;\nAudioThread.Form = Form;\n\n// src/components/threads/AudioThreadDialog/index.tsx\nvar import_jsx_runtime91 = require(\"react/jsx-runtime\");\nvar AudioThreadDialog = (props) => /* @__PURE__ */ (0, import_jsx_runtime91.jsxs)(Root9, { ...props, children: [\n /* @__PURE__ */ (0, import_jsx_runtime91.jsx)(Content7.Root, { children: /* @__PURE__ */ (0, import_jsx_runtime91.jsx)(AudioThread, {}) }),\n /* @__PURE__ */ (0, import_jsx_runtime91.jsx)(Trigger, {})\n] });\nAudioThreadDialog.Root = Root9;\nAudioThreadDialog.Trigger = Trigger;\nAudioThreadDialog.Content = Content7;\n\n// src/components/markdown/MarkdownProvider/index.tsx\nvar import_react65 = require(\"react\");\nvar import_jsx_runtime92 = require(\"react/jsx-runtime\");\nvar MarkdownProvider = ({\n children,\n ...rest\n}) => {\n const prevMarkdownContext = useMarkdownContext();\n const value = (0, import_react65.useMemo)(() => merge(prevMarkdownContext, rest), [rest, prevMarkdownContext]);\n return /* @__PURE__ */ (0, import_jsx_runtime92.jsx)(\n MarkdownContext.Provider,\n {\n value,\n children\n }\n );\n};\n\n// src/components/avatars/Avatar.tsx\nvar import_themes65 = require(\"@radix-ui/themes\");\n\n// src/components/imageAvatars/ImageAvatar/index.tsx\nvar import_themes63 = require(\"@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\nvar import_jsx_runtime93 = require(\"react/jsx-runtime\");\nvar ImageAvatar = ({\n imageAvatar,\n size,\n className,\n style\n}) => {\n const superinterfaceContext = useSuperinterfaceContext();\n return /* @__PURE__ */ (0, import_jsx_runtime93.jsx)(\n import_themes63.Avatar,\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\nvar import_react66 = require(\"react\");\nvar import_themes64 = require(\"@radix-ui/themes\");\n\n// src/lib/iconAvatars/iconAvatarComponents.ts\nvar import_react_icons18 = require(\"@radix-ui/react-icons\");\nvar iconAvatarComponents = {\n [\"BACKPACK\" /* BACKPACK */]: import_react_icons18.BackpackIcon,\n [\"ROCKET\" /* ROCKET */]: import_react_icons18.RocketIcon,\n [\"MAGIC_WAND\" /* MAGIC_WAND */]: import_react_icons18.MagicWandIcon,\n [\"CUBE\" /* CUBE */]: import_react_icons18.CubeIcon,\n [\"TARGET\" /* TARGET */]: import_react_icons18.TargetIcon,\n [\"DISC\" /* DISC */]: import_react_icons18.DiscIcon,\n [\"GLOBE\" /* GLOBE */]: import_react_icons18.GlobeIcon,\n [\"STAR\" /* STAR */]: import_react_icons18.StarIcon,\n [\"LIGHTNING_BOLT\" /* LIGHTNING_BOLT */]: import_react_icons18.LightningBoltIcon,\n [\"FACE\" /* FACE */]: import_react_icons18.FaceIcon,\n [\"PERSON\" /* PERSON */]: import_react_icons18.PersonIcon,\n [\"HEART\" /* HEART */]: import_react_icons18.HeartIcon\n};\n\n// src/components/iconAvatars/IconAvatar.tsx\nvar import_jsx_runtime94 = require(\"react/jsx-runtime\");\nvar IconAvatar = ({\n iconAvatar,\n size,\n className,\n style\n}) => {\n const Component = (0, import_react66.useMemo)(() => iconAvatarComponents[iconAvatar.name], [iconAvatar]);\n return /* @__PURE__ */ (0, import_jsx_runtime94.jsx)(\n import_themes64.Avatar,\n {\n className,\n style,\n size,\n fallback: Component ? /* @__PURE__ */ (0, import_jsx_runtime94.jsx)(Component, {}) : \"\"\n }\n );\n};\n\n// src/components/avatars/Avatar.tsx\nvar import_jsx_runtime95 = require(\"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__ */ (0, import_jsx_runtime95.jsx)(\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__ */ (0, import_jsx_runtime95.jsx)(\n IconAvatar,\n {\n iconAvatar: avatar.iconAvatar,\n size,\n className,\n style\n }\n );\n }\n }\n return /* @__PURE__ */ (0, import_jsx_runtime95.jsx)(\n import_themes65.Avatar,\n {\n fallback: \"\",\n size,\n className,\n style\n }\n );\n};\n\n// src/components/components/ComponentsProvider.tsx\nvar import_react68 = require(\"react\");\n\n// src/hooks/components/useComponents.ts\nvar import_react67 = require(\"react\");\nvar useComponents = () => (0, import_react67.useContext)(ComponentsContext);\n\n// src/components/components/ComponentsProvider.tsx\nvar import_jsx_runtime96 = require(\"react/jsx-runtime\");\nvar ComponentsProvider = ({\n children,\n ...rest\n}) => {\n const prevComponents = useComponents();\n const value = (0, import_react68.useMemo)(() => merge(prevComponents, rest), [rest, prevComponents]);\n return /* @__PURE__ */ (0, import_jsx_runtime96.jsx)(\n ComponentsContext.Provider,\n {\n value,\n children\n }\n );\n};\n\n// src/components/assistants/AssistantProvider/index.tsx\nvar import_jsx_runtime97 = require(\"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__ */ (0, import_jsx_runtime97.jsx)(AssistantNameContext.Provider, { value: assistant?.name ?? \"\", children: /* @__PURE__ */ (0, import_jsx_runtime97.jsx)(\n AssistantAvatarContext.Provider,\n {\n value: /* @__PURE__ */ (0, import_jsx_runtime97.jsx)(Avatar6, { avatar: assistant?.avatar }),\n children\n }\n ) });\n};\n// Annotate the CommonJS export names for ESM import in node:\n0 && (module.exports = {\n AssistantAvatarContext,\n AssistantNameContext,\n AssistantProvider,\n AudioThread,\n AudioThreadDialog,\n 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 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","export { SuperinterfaceProvider } from '@/components/core/SuperinterfaceProvider'\nexport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\n\nexport { Thread } from '@/components/threads/Thread'\nexport { useThreadContext } from '@/hooks/threads/useThreadContext'\nexport { useMessages } from '@/hooks/messages/useMessages'\nexport { useMessageContext } from '@/hooks/messages/useMessageContext'\nexport { useLatestMessage } from '@/hooks/messages/useLatestMessage'\nexport { useCreateMessage } from '@/hooks/messages/useCreateMessage'\nexport { useMessageFormContext } from '@/hooks/messages/useMessageFormContext'\nexport { useIsMutatingMessage } from '@/hooks/messages/useIsMutatingMessage'\n\nexport { useAssistant } from '@/hooks/assistants/useAssistant'\n\nexport { ThreadDialog } from '@/components/threads/ThreadDialog'\nexport { ThreadDialogContext } from '@/contexts/threads/ThreadDialogContext'\nexport { AudioThreadDialog } from '@/components/threads/AudioThreadDialog'\nexport { AudioThread } from '@/components/threads/AudioThread'\nexport { useThreadDialogContext } from '@/hooks/threads/useThreadDialogContext'\n\nexport { Suggestions } from '@/components/suggestions/Suggestions'\n\nexport { MarkdownContext } from '@/contexts/markdown/MarkdownContext'\nexport { MarkdownProvider } from '@/components/markdown/MarkdownProvider'\nexport { useMarkdownContext } from '@/hooks/markdown/useMarkdownContext'\n\nexport { AssistantAvatarContext } from '@/contexts/assistants/AssistantAvatarContext'\nexport { AssistantNameContext } from '@/contexts/assistants/AssistantNameContext'\n\nexport { UserAvatarContext } from '@/contexts/users/UserAvatarContext'\nexport { Avatar } from '@/components/avatars/Avatar'\n\nexport { FunctionComponentsContext } from '@/contexts/functions/FunctionComponentsContext'\nexport { FunctionBase } from '@/components/functions/FunctionBase'\n\nexport { ComponentsProvider } from '@/components/components/ComponentsProvider'\nexport { useComponents } from '@/hooks/components/useComponents'\n\nexport { RunStep } from '@/components/runSteps/RunStep'\nexport { AssistantProvider } from '@/components/assistants/AssistantProvider'\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 const MarkdownContext = createContext({\n components,\n getRemarkPlugins,\n})\n","import { Heading, Table } from '@radix-ui/themes'\nimport { Paragraph } from './Paragraph'\nimport { Link } from './Link'\nimport { UnorderedList } from './UnorderedList'\nimport { OrderedList } from './OrderedList'\nimport { ListItem } from './ListItem'\nimport { Strong } from './Strong'\nimport { Pre } from './Pre'\nimport { Code } from './Code'\nimport { Img } from './Img'\nimport { Annotation } from './Annotation'\n\nexport const components = {\n p: Paragraph,\n a: Link,\n strong: Strong,\n ul: UnorderedList,\n ol: OrderedList,\n li: ListItem,\n pre: Pre,\n code: Code,\n img: Img,\n annotation: Annotation,\n h1: (props: JSX.IntrinsicElements['h1']) => <Heading as=\"h1\">{props.children}</Heading>,\n h2: (props: JSX.IntrinsicElements['h2']) => <Heading as=\"h2\" size=\"5\">{props.children}</Heading>,\n h3: (props: JSX.IntrinsicElements['h3']) => <Heading as=\"h3\" size=\"4\">{props.children}</Heading>,\n h4: (props: JSX.IntrinsicElements['h4']) => <Heading as=\"h4\" size=\"3\">{props.children}</Heading>,\n h5: (props: JSX.IntrinsicElements['h5']) => <Heading as=\"h5\" size=\"3\">{props.children}</Heading>,\n h6: (props: JSX.IntrinsicElements['h6']) => <Heading as=\"h6\" size=\"3\">{props.children}</Heading>,\n table: (props: JSX.IntrinsicElements['table']) => (\n <>\n <style>{`.rt-TableRootTable { overflow: inherit; }`}</style>\n <Table.Root\n {...props}\n variant=\"surface\"\n mb=\"3\"\n />\n </>\n ),\n thead: (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 } from '@/contexts/markdown/MarkdownContext'\nimport { useMarkdownContext } from '@/hooks/markdown/useMarkdownContext'\nimport { merge } from '@/lib/misc/merge'\n\nexport const MarkdownProvider = ({\n children,\n ...rest\n}: {\n children: React.ReactNode\n}) => {\n const prevMarkdownContext = useMarkdownContext()\n\n const value = useMemo(() => (\n merge(prevMarkdownContext, rest)\n ), [rest, prevMarkdownContext])\n\n return (\n <MarkdownContext.Provider\n value={value}\n >\n {children}\n </MarkdownContext.Provider>\n )\n}\n","import { AvatarType as AvatarTypeEnum } from '@/lib/enums'\nimport { Avatar as AvatarType, StyleProps } from '@/types'\nimport { Avatar as RadixAvatar } from '@radix-ui/themes'\nimport { ImageAvatar } from '@/components/imageAvatars/ImageAvatar'\nimport { IconAvatar } from '@/components/iconAvatars/IconAvatar'\n\nexport const Avatar = ({\n avatar,\n size = '1',\n className,\n style,\n}: {\n avatar: AvatarType\n size?: '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9'\n} & StyleProps) => {\n if (avatar) {\n if (avatar.type === AvatarTypeEnum.IMAGE && avatar.imageAvatar) {\n return (\n <ImageAvatar\n imageAvatar={avatar.imageAvatar}\n size={size}\n className={className}\n style={style}\n />\n )\n }\n\n if (avatar.type === AvatarTypeEnum.ICON && avatar.iconAvatar) {\n return (\n <IconAvatar\n iconAvatar={avatar.iconAvatar}\n size={size}\n className={className}\n style={style}\n />\n )\n }\n }\n\n return (\n <RadixAvatar\n fallback=\"\"\n size={size}\n className={className}\n style={style}\n />\n )\n}\n","import { Avatar } from '@radix-ui/themes'\nimport { Size, ImageAvatar as ImageAvatarType, StyleProps } from '@/types'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\nimport { optimizedSrc } from './lib/optimizedSrc'\n\nexport const ImageAvatar = ({\n imageAvatar,\n size,\n className,\n style,\n}: {\n imageAvatar: ImageAvatarType\n size: Size\n} & StyleProps) => {\n const superinterfaceContext = useSuperinterfaceContext()\n\n return (\n <Avatar\n className={className}\n style={style}\n fallback=\"\"\n src={optimizedSrc({ imageAvatar, size, superinterfaceContext })}\n size={size}\n />\n )\n}\n","import { Size, ImageAvatar } from '@/types'\n\nconst width = ({\n size,\n}: {\n size: Size\n}) => {\n if (size === '1') {\n return 48\n } else if (size === '2') {\n return 64\n } else if (size === '3') {\n return 96\n } else if (size === '4') {\n return 96\n } else if (size === '5') {\n return 128\n } else if (size === '6') {\n return 256\n } else if (size === '7') {\n return 256\n } else if (size === '8') {\n return 256\n } else if (size === '9') {\n return 384\n }\n\n return 384\n}\n\nexport const path = ({\n imageAvatar,\n size,\n}: {\n imageAvatar: ImageAvatar\n size: Size\n}) => (\n `/_next/image?url=${encodeURIComponent(imageAvatar.url)}&w=${width({ size })}&q=95`\n)\n","import { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\n\nexport const host = ({\n superinterfaceContext,\n}: {\n superinterfaceContext: ReturnType<typeof useSuperinterfaceContext>\n}) => {\n if (!superinterfaceContext.baseUrl) return ''\n if (!/^https?:\\/\\//i.test(superinterfaceContext.baseUrl)) return ''\n\n return new URL(superinterfaceContext.baseUrl).origin\n}\n","import { Size, ImageAvatar } from '@/types'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\nimport { path } from './path'\nimport { host } from './host'\n\nexport const optimizedSrc = ({\n imageAvatar,\n size,\n superinterfaceContext,\n}: {\n imageAvatar: ImageAvatar\n size: Size\n superinterfaceContext: ReturnType<typeof useSuperinterfaceContext>\n}) => {\n if (!imageAvatar.url) return ''\n if (imageAvatar.url.endsWith('.svg')) return imageAvatar.url\n\n return `${host({ superinterfaceContext })}${path({ imageAvatar, size })}`\n}\n","import { useMemo } from 'react'\nimport { IconAvatar as IconAvatarType, StyleProps } from '@/types'\nimport { Avatar } from '@radix-ui/themes'\nimport { iconAvatarComponents } from '@/lib/iconAvatars/iconAvatarComponents'\n\nexport const IconAvatar = ({\n iconAvatar,\n size,\n className,\n style,\n}: {\n iconAvatar: IconAvatarType\n size: '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9'\n} & StyleProps) => {\n const Component = useMemo(() => (\n iconAvatarComponents[iconAvatar.name]\n ), [iconAvatar])\n\n return (\n <Avatar\n className={className}\n style={style}\n size={size}\n fallback={(\n Component ? (\n <Component />\n ) : (\n ''\n )\n )}\n />\n )\n}\n","import { IconAvatarName } from '@/lib/enums'\nimport {\n BackpackIcon,\n RocketIcon,\n MagicWandIcon,\n CubeIcon,\n TargetIcon,\n DiscIcon,\n GlobeIcon,\n StarIcon,\n LightningBoltIcon,\n FaceIcon,\n PersonIcon,\n HeartIcon,\n} from '@radix-ui/react-icons'\n\nexport const iconAvatarComponents = {\n [IconAvatarName.BACKPACK]: BackpackIcon,\n [IconAvatarName.ROCKET]: RocketIcon,\n [IconAvatarName.MAGIC_WAND]: MagicWandIcon,\n [IconAvatarName.CUBE]: CubeIcon,\n [IconAvatarName.TARGET]: TargetIcon,\n [IconAvatarName.DISC]: DiscIcon,\n [IconAvatarName.GLOBE]: GlobeIcon,\n [IconAvatarName.STAR]: StarIcon,\n [IconAvatarName.LIGHTNING_BOLT]: LightningBoltIcon,\n [IconAvatarName.FACE]: FaceIcon,\n [IconAvatarName.PERSON]: PersonIcon,\n [IconAvatarName.HEART]: HeartIcon,\n}\n","import { useMemo } from 'react'\nimport { ComponentsContext } from '@/contexts/components/ComponentsContext'\nimport { useComponents } from '@/hooks/components/useComponents'\nimport { merge } from '@/lib/misc/merge'\n\nexport const ComponentsProvider = ({\n children,\n ...rest\n}: {\n children: React.ReactNode\n}) => {\n const prevComponents = useComponents()\n\n const value = useMemo(() => (\n merge(prevComponents, rest)\n ), [rest, prevComponents])\n\n return (\n <ComponentsContext.Provider\n value={value}\n >\n {children}\n </ComponentsContext.Provider>\n )\n}\n","import { useContext } from 'react'\nimport { ComponentsContext } from '@/contexts/components/ComponentsContext'\n\nexport const useComponents = () => (\n useContext(ComponentsContext)\n)\n","import { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\nimport { AssistantAvatarContext } from '@/contexts/assistants/AssistantAvatarContext'\nimport { AssistantNameContext } from '@/contexts/assistants/AssistantNameContext'\nimport { useAssistant } from '@/hooks/assistants/useAssistant'\nimport { Avatar } from '@/components/avatars/Avatar'\n\ntype Args = {\n children: React.ReactNode\n}\n\nexport const AssistantProvider = ({\n children,\n}: Args) => {\n const superinterfaceContext = useSuperinterfaceContext()\n const { assistant } = useAssistant({\n assistantId: superinterfaceContext.variables.assistantId,\n })\n\n return (\n <AssistantNameContext.Provider value={assistant?.name ?? ''}>\n <AssistantAvatarContext.Provider\n value={<Avatar avatar={assistant?.avatar} />}\n >\n {children}\n </AssistantAvatarContext.Provider>\n </AssistantNameContext.Provider>\n )\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["/Users/domas/Developer/supercorp/superinterface/packages/react/dist/index.cjs","../src/lib/misc/merge/index.ts","../src/hooks/audioThreads/useMessageAudio/lib/isHtmlAudioSupported.ts","../src/index.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":["import_lodash2","__create","Object","create","__defProp","defineProperty","__getOwnPropDesc","getOwnPropertyDescriptor","__getOwnPropNames","getOwnPropertyNames","__getProtoOf","getPrototypeOf","__hasOwnProp","prototype","hasOwnProperty","__export","target","all","name","get","enumerable","__copyProps","to","from","except","desc","key2","call","__toESM","mod","isNodeMode","__esModule","value","__toCommonJS","src_exports","AssistantAvatarContext","AssistantNameContext","AssistantProvider","AudioThread","AudioThreadDialog","Avatar","ComponentsProvider","FunctionBase","FunctionComponentsContext","MarkdownContext","MarkdownProvider","RunStep","Suggestions","SuperinterfaceProvider","Thread","ThreadDialog","ThreadDialogContext","UserAvatarContext","useAssistant","useComponents","useCreateMessage","useIsMutatingMessage","useLatestMessage","useMarkdownContext","useMessageContext","useMessageFormContext","useMessages","useSuperinterfaceContext","useThreadContext","useThreadDialogContext","module","exports","import_react","require","import_lodash","customizer","objectValue","srcValue","_","isArray","merge","obj","sources","mergeWith","cloneDeep","baseUrl","import_js_cookie","key","assistantId","Cookies","set","threadId","import_js_cookie2","remove","import_js_cookie3","cookieOptions","window","localStorage","getItem","setItem","removeItem","localStorageOptions","isIframe","self","top","SuperinterfaceContext","createContext","variables","defaultOptions","queries","mutations","threadIdStorageOptions","createMessageAbortControllerRef","current","import_react2","useContext","import_jsx_runtime","children","superinterfaceContext","import_react3","useRef","jsx","Provider","import_themes","import_radash","StartingContentSkeleton","import_jsx_runtime2","Skeleton","loading","mt","height","width","style","borderRadius","flexShrink","import_react4","ToolCallBase","import_jsx_runtime3","import_themes2","Flex","py","ml","Button","size","color","variant","boxShadow","ToolCallTitle","import_jsx_runtime4","import_themes3","Text","weight","import_react_icons","ToolCallIcon","runStep","completed_at","import_jsx_runtime5","CheckCircledIcon","cancelled_at","failed_at","status","CircleBackslashIcon","CircleIcon","formattedJsonOrRaw","JSON","stringify","parse","error","Content","fn","args","import_react5","useMemo","arguments","output","import_jsx_runtime6","jsxs","import_themes4","Code","whiteSpace","wordBreak","Box","title","import_jsx_runtime7","import_themes5","Popover","Root","Trigger","maxHeight","DefaultFunction","import_jsx_runtime8","Fn","functionComponentsContext","import_react6","Component","import_jsx_runtime9","codeInterpreter","input","import_jsx_runtime10","import_themes6","outputs","CodeInterpreter","import_jsx_runtime11","import_themes7","FileSearch","toolCall","import_jsx_runtime12","Fallback","import_jsx_runtime13","type","ToolCall","import_jsx_runtime14","function","code_interpreter","Starting","import_jsx_runtime15","import_themes8","import_react_icons2","className","import_jsx_runtime16","import_themes9","direction","ToolCalls","stepDetails","tool_calls","length","map","id","step_details","import_jsx_runtime17","ComponentsContext","import_react7","components","RunSteps","runSteps","componentsContext","import_react8","import_jsx_runtime18","import_themes10","import_react_query","threadContext","mutatingMessagesCount","useIsMutating","mutationKey","isMutatingMessage","import_react9","MessageContext","import_react10","message","Attachments","attachments","import_jsx_runtime19","import_themes11","align","pb","Badge","import_react_icons3","FileIcon","import_mdx","runtime","import_recma_mdx_escape_missing_components","Paragraph","import_jsx_runtime20","import_themes12","Link","href","download","import_jsx_runtime21","import_themes13","RadixLink","UnorderedList","import_jsx_runtime22","import_themes14","asChild","listStylePosition","OrderedList","import_jsx_runtime23","import_themes15","ListItem","import_jsx_runtime24","import_themes16","Strong","import_jsx_runtime25","import_themes17","RadixStrong","Pre","import_jsx_runtime26","import_themes18","variableParams","queryOptions","queryKeyBase","path","queryClient","queryKey","import_react_query2","infiniteQueryOptions","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","import_react_query3","useQueryClient","useInfiniteQuery","import_react11","import_react12","latestMessage","import_react_children_utilities","import_dayjs","optimisticId","uid","newMessage","prevData","role","created_at","dayjs","unix","object","content","text","annotations","run_id","assistant_id","thread_id","metadata","pageParams","latestPage","pagesRest","onMutate","prevMessages","import_radash2","omit","cancelQueries","getQueryData","setQueryData","import_json_whatwg","threadCreated","isOptimistic","import_lodash3","startsWith","extendMessage","prevRunMessages","filter","m","prevOptimitisticRunMessages","import_radash3","last","appendMessage","threadMessageCreated","messagesQueryKey","updatedContentPart","prevContentPart","delta","import_radash4","updatedContent","result","import_lodash4","forEach","index","threadMessageDelta","messagesRest","threadMessageCompleted","import_radash5","replace","threadRunCreated","threadRunFailed","threadRunStepCreated","updatedToolCall","import_radash6","import_lodash5","entries","updatedRunStep","newToolCalls","threadRunStepDelta","rs","threadRunStepCompleted","import_radash7","threadRunRequiresAction","toolCalls","toolOutputs","required_action","submit_client_tool_outputs","import_radash8","parsedArgs","toolCallId","method","headers","body","handlers","handleResponse","handler","event","console","log","mutationFn","abortController","parser","reader","done","AbortController","signal","JSONParser","stringBufferSize","paths","separator","pipeThrough","getReader","read","mutationOptions","onError","getMutationDefaults","import_react_query4","useMutation","createMessage","import_radash9","partob","mutateAsync","ToastsContext","import_react13","toasts","addToast","useToasts","import_react14","createMessageDefaultOnError","invalidateQueries","Item","suggestion","isDisabled","import_react_query5","isPending","import_jsx_runtime27","onClick","import_themes19","disabled","minHeight","Spinner","import_react_icons4","ArrowUpIcon","suggestions","import_react15","onlyText","split","c","import_radash10","isEmpty","trim","import_jsx_runtime28","import_themes20","gap","wrap","latestMessageProps","import_react16","isBlocking","isLoading","import_jsx_runtime29","import_jsx_runtime30","import_themes21","RadixCode","Image","import_jsx_runtime31","import_themes22","maxWidth","videoExtensions","isVideoSrc","src","includes","pop","isAudioSrc","endsWith","import_base","PlayButton","isPaused","import_react17","useMediaState","import_jsx_runtime32","import_themes23","IconButton","VidstackPlayButton","import_react_icons5","PlayIcon","PauseIcon","VolumeButton","volume","import_react18","isMuted","remote","useMediaRemote","import_jsx_runtime33","import_themes24","HoverCard","MuteButton","import_react_icons6","SpeakerOffIcon","SpeakerModerateIcon","side","Slider","orientation","onValueChange","changeVolume","Time","time","import_react20","duration","seeking","canSeek","import_react19","useState","setValue","useEffect","step","import_jsx_runtime34","import_themes25","Number","isFinite","onValueCommit","seek","MediaContainer","import_jsx_runtime35","import_themes26","Card","mb","Inset","clip","display","flexDirection","FullscreenButton","isFullscreen","import_react21","import_jsx_runtime36","import_themes27","VidstackFullscreenButton","import_react_icons7","ExitFullScreenIcon","EnterFullScreenIcon","Video","import_jsx_runtime37","import_react22","MediaPlayer","playsInline","hideControlsOnMouseLeave","crossOrigin","MediaProvider","import_themes28","position","bottom","left","right","p","zIndex","background","Controls","flexGrow","Group","Audio","import_jsx_runtime38","import_react23","viewType","import_themes29","Img","import_jsx_runtime39","AnnotationBase","icon","import_jsx_runtime40","import_themes30","FilePathAnnotation","annotation","nextSearchParams","import_jsx_runtime41","file_path","file_id","Annotation","import_jsx_runtime42","import_react_icons8","QuoteIcon","a","strong","ul","ol","li","pre","code","img","h1","import_jsx_runtime43","import_themes31","Heading","as","h2","h3","h4","h5","h6","table","Fragment","Table","thead","Header","tbody","Body","tr","Row","td","rest","Cell","th","ColumnHeaderCell","import_remark_gfm","import_unist_util_flatmap","sortedAnnotations","sort","b","start_index","remarkAnnotation","tree","flatMap","node","processNodeWithAnnotations","processTextNode","linkNode","childNode","nodeStart","start","offset","nodeEnd","end","import_radash11","isNumber","newNodes","lastIndex","annotationStart","annotationEnd","end_index","Math","max","min","push","createTextNode","startOffset","endOffset","createAnnotationNode","valueStart","valueEnd","slice","hName","hProperties","getRemarkPlugins","remarkGfm","import_react24","import_react25","evaluate","Function","useMDXComponents","import_react27","TextContent","remarkPlugins","import_react26","MDXComponent","setMDXComponent","compileMDX","compiled","MDXContent","compile","outputFormat","recmaPlugins","recmaMdxEscapeMissingComponents","providerImportSource","String","default","import_jsx_runtime44","MDXProvider","ImageFileContent","import_jsx_runtime45","alt","image_file","ContentPart","import_jsx_runtime46","Message","import_react28","messageCreationRunStepIndex","findIndex","message_creation","message_id","nextRunStepIndex","findLastIndex","laterRunSteps","prevRunStepIndex","olderRunSteps","isInProgress","some","import_jsx_runtime47","import_themes32","import_radash12","order","import_radash13","newGroupItem","createdAt","newGroup","groups","messageGroups","import_lodash6","group","import_radash14","dropRight","useMessageGroups","import_react29","MessageGroupBase","import_react30","forwardRef","ref","import_jsx_runtime48","import_themes33","Container","Name","import_jsx_runtime49","import_themes34","MessagesSkeleton","import_react31","_props","import_jsx_runtime50","import_themes35","fallback","marginTop","import_react32","import_jsx_runtime51","import_themes36","import_react_icons9","LightningBoltIcon","AssistantAvatar","AssistantAvatarContextValue","import_react33","import_jsx_runtime52","import_themes37","overflow","import_react34","import_react35","import_jsx_runtime53","import_themes38","import_react_icons10","PersonIcon","UserAvatar","UserAvatarContextValue","import_react36","import_jsx_runtime54","import_themes39","messageGroup","import_jsx_runtime55","import_themes40","MessageGroup","assistantNameContext","import_react37","import_jsx_runtime56","import_themes41","isLoadingError","import_react38","import_jsx_runtime57","StartingSkeleton","import_react39","import_jsx_runtime58","import_themes42","Progress","isVisible","import_react40","import_jsx_runtime59","import_react_intersection_observer","useThrottledEffect","cb","delay","additionalDeps","cbRef","import_react41","throttledCb","useCallback","import_lodash7","throttle","leading","trailing","useInfiniteScroll","isFetchingNextPage","fetchNextPage","containerRef","import_react42","useInView","root","rootMargin","threshold","loaderRef","inView","import_jsx_runtime60","import_themes43","NextPageSkeleton","import_jsx_runtime61","Messages","import_jsx_runtime62","import_themes44","MessageFormContext","import_react43","files","setFiles","isFileLoading","import_react44","import_jsx_runtime63","import_themes45","abort","import_react_icons11","StopIcon","Submit","import_react_hook_form","import_zod","schema","z","string","formOptions","resolver","import_zod2","zodResolver","onSubmit","onSubmitArg","isDisabledArg","import_react45","formProps","useForm","handleSubmit","formState","isSubmitting","reset","watch","import_react_query6","file","import_radash15","tools","import_jsx_runtime64","FormProvider","import_themes46","usePrevious","state","import_react46","import_react_textarea_autosize","TextareaBase","import_react47","import_jsx_runtime65","TextareaAutosize","border","outline","boxSizing","resize","import_jsx_runtime66","import_themes47","pt","Input","import_react48","register","import_react_hook_form2","useFormContext","isSubmitDisabled","isDisabledPrevious","textareaRef","textareaProps","focus","minRows","placeholder","onKeyDown","e","shiftKey","preventDefault","currentTarget","form","requestSubmit","Control","Preview","import_jsx_runtime67","import_themes48","flexBasis","justify","minWidth","import_react_icons12","truncate","filename","prev","prevFile","Cross2Icon","formData","FormData","append","useCreateFile","import_react_query7","createFile","firstArg","restArgs","accept","onChange","import_react49","fileObjects","newFiles","Array","fileObject","purpose","import_dayjs2","bytes","import_radash16","newFile","onSuccess","import_jsx_runtime68","import_themes49","pr","import_react_icons13","FilePlusIcon","multiple","cursor","opacity","Files","import_react_hook_form3","errors","import_jsx_runtime69","import_themes50","RadixContainer","borderWidth","borderStyle","borderColor","backgroundColor","pl","Field","MessageForm","import_jsx_runtime70","Toast","CustomToast","toast","import_jsx_runtime71","import_themes51","Title","import_react_icons14","CrossCircledIcon","ToastsProvider","import_react50","setToasts","prevToasts","import_jsx_runtime72","Toast2","Viewport","padding","margin","listStyle","import_jsx_runtime73","import_themes52","import_jsx_runtime74","import_react51","publicApiKey","import_react_query8","tanstackQueryOptions","import_react_query9","useQuery","import_react52","assistant","import_react53","isOpen","setIsOpen","import_react54","threadDialogContext","import_react55","import_jsx_runtime75","import_jsx_runtime76","import_jsx_runtime77","import_themes53","radius","import_react_icons15","ChatBubbleIcon","import_jsx_runtime78","import_themes54","initial","sm","Close","import_jsx_runtime79","import_themes55","import_react_icons16","Cross1Icon","import_jsx_runtime80","import_themes56","paddingTop","paddingRight","paddingLeft","FormContainer","import_jsx_runtime81","AudioThreadContext","import_react56","recorderProps","stop","pause","resume","visualizationAnalyser","messageAudioProps","playing","paused","isReady","play","noop","on","addEventListener","off","removeEventListener","usePermission","permissionDesc","import_react57","setState","mounted","permissionStatus","navigator","permissions","query","catch","blobToData","blob","Promise","resolve","FileReader","onloadend","readAsDataURL","useStatus","createMessageProps","import_react58","isAudioPlayed","import_use_audio_capture","import_react_use_audio_player","useInterval","callback","savedCallback","import_react59","interval","setInterval","clearInterval","useRecorder","isStopOnSilence","onStart","onStop","import_react60","silenceStart","setSilenceStart","noiseStart","setNoiseStart","mediaStream","setMediaStream","setStatus","startAudioPlayer","useAudioPlayer","endAudioPlayer","isLoaded","setIsLoaded","audioCaptureProps","useAudioCapture","opts","isInited","onPause","onResume","audioEngine","setAudioEngine","audioContext","AudioContext","source","createMediaStreamSource","createAnalyser","connect","silenceAnalyser","minDecibels","handleSilence","frequencyData","Uint8Array","frequencyBinCount","getByteFrequencyData","isSilent","every","f","import_dayjs3","requestAnimationFrame","isBefore","subtract","import_compromise","import_howler","textContents","join","import_radash17","import_detect_browser","unsupportedNames","isHtmlAudioSupported","detect","FULL_SENTENCE_REGEX","getMessageSentences","messageId","sentences","nlp","sentence","useMessageAudio","onEnd","import_react61","setIsAudioPlayed","stoppedMessageIds","setStoppedMessageIds","playedMessageSentences","setPlayedMessageSentences","audioPlayer","import_react_use_audio_player2","nextAudioPlayer","isPlaying","setIsPlaying","unplayedMessageSentences","messageSentences","ms","find","pms","firstUnplayedMessageSentence","isFullSentence","test","searchParams","load","format","autoplay","html5","onplay","onstop","onload","nextUnplayedMessageSentence","isNextFullSentence","onend","Howler","_howls","_sounds","_node","isAudioEngineInited","createMediaElementSource","masterGain","ctx","destination","import_react_query10","_event","chunks","audioContent","Blob","microphonePermission","import_jsx_runtime82","import_themes57","useAudioThreadContext","import_react62","barCount","BarsVisualizer","barWidth","import_react63","barHeights","setBarHeights","draw","fill","clusteredFrequencyData","import_radash18","cluster","frequencyDataCluster","import_lodash8","mean","import_jsx_runtime83","import_themes58","Grid","columns","gridTemplateColumns","barHeight","Visualization","audioThreadContext","import_react64","scale","setScale","import_lodash9","import_jsx_runtime84","import_themes59","html","texts","i","StatusMessages","import_jsx_runtime85","import_themes60","dangerouslySetInnerHTML","__html","Status","import_jsx_runtime86","MicIcon","import_jsx_runtime87","xmlns","stroke","strokeWidth","viewBox","d","ActionButton","import_jsx_runtime88","import_themes61","mr","import_react_icons17","highContrast","ResumeIcon","Form","import_jsx_runtime89","import_themes62","px","import_jsx_runtime90","import_jsx_runtime91","prevMarkdownContext","import_react65","import_jsx_runtime92","imageAvatar","encodeURIComponent","url","host","URL","origin","optimizedSrc","ImageAvatar","import_jsx_runtime93","import_themes63","iconAvatarComponents","import_react_icons18","BackpackIcon","RocketIcon","MagicWandIcon","CubeIcon","TargetIcon","DiscIcon","GlobeIcon","StarIcon","FaceIcon","HeartIcon","IconAvatar","iconAvatar","import_react66","import_jsx_runtime94","import_themes64","avatar","import_jsx_runtime95","import_themes65","RadixAvatar","import_react67","prevComponents","import_react68","import_jsx_runtime96","import_jsx_runtime97"],"mappings":"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","sourcesContent":["\"use strict\";\nvar __create = Object.create;\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __getProtoOf = Object.getPrototypeOf;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __export = (target, all) => {\n for (var name in all)\n __defProp(target, name, { get: all[name], enumerable: true });\n};\nvar __copyProps = (to, from, except, desc) => {\n if (from && typeof from === \"object\" || typeof from === \"function\") {\n for (let key2 of __getOwnPropNames(from))\n if (!__hasOwnProp.call(to, key2) && key2 !== except)\n __defProp(to, key2, { get: () => from[key2], enumerable: !(desc = __getOwnPropDesc(from, key2)) || desc.enumerable });\n }\n return to;\n};\nvar __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(\n // If the importer is in node compatibility mode or this is not an ESM\n // file that has been converted to a CommonJS file using a Babel-\n // compatible transform (i.e. \"__esModule\" has not been set), then set\n // \"default\" to the CommonJS \"module.exports\" for node compatibility.\n isNodeMode || !mod || !mod.__esModule ? __defProp(target, \"default\", { value: mod, enumerable: true }) : target,\n mod\n));\nvar __toCommonJS = (mod) => __copyProps(__defProp({}, \"__esModule\", { value: true }), mod);\n\n// src/index.ts\nvar src_exports = {};\n__export(src_exports, {\n AssistantAvatarContext: () => AssistantAvatarContext,\n AssistantNameContext: () => AssistantNameContext,\n AssistantProvider: () => AssistantProvider,\n AudioThread: () => AudioThread,\n AudioThreadDialog: () => AudioThreadDialog,\n Avatar: () => Avatar6,\n ComponentsProvider: () => ComponentsProvider,\n FunctionBase: () => FunctionBase,\n FunctionComponentsContext: () => FunctionComponentsContext,\n MarkdownContext: () => MarkdownContext,\n MarkdownProvider: () => MarkdownProvider,\n RunStep: () => RunStep,\n Suggestions: () => Suggestions,\n SuperinterfaceProvider: () => SuperinterfaceProvider,\n Thread: () => Thread,\n ThreadDialog: () => ThreadDialog,\n ThreadDialogContext: () => ThreadDialogContext,\n UserAvatarContext: () => UserAvatarContext,\n useAssistant: () => useAssistant,\n useComponents: () => useComponents,\n useCreateMessage: () => useCreateMessage,\n useIsMutatingMessage: () => useIsMutatingMessage,\n useLatestMessage: () => useLatestMessage,\n useMarkdownContext: () => useMarkdownContext,\n useMessageContext: () => useMessageContext,\n useMessageFormContext: () => useMessageFormContext,\n useMessages: () => useMessages,\n useSuperinterfaceContext: () => useSuperinterfaceContext,\n useThreadContext: () => useSuperinterfaceContext,\n useThreadDialogContext: () => useThreadDialogContext\n});\nmodule.exports = __toCommonJS(src_exports);\n\n// src/components/core/SuperinterfaceProvider/index.tsx\nvar import_react3 = require(\"react\");\n\n// src/lib/misc/merge/index.ts\nvar import_lodash2 = __toESM(require(\"lodash\"), 1);\n\n// src/lib/misc/merge/customizer.ts\nvar import_lodash = __toESM(require(\"lodash\"), 1);\nvar customizer = (objectValue, srcValue) => {\n if (!import_lodash.default.isArray(objectValue)) return;\n return srcValue;\n};\n\n// src/lib/misc/merge/index.ts\nvar merge = (obj, ...sources) => import_lodash2.default.mergeWith(import_lodash2.default.cloneDeep(obj), ...sources, customizer);\n\n// src/contexts/core/SuperinterfaceContext/index.tsx\nvar import_react = require(\"react\");\n\n// src/lib/superinterfaceCloud/baseUrl.ts\nvar baseUrl = \"https://superinterface.ai/api/cloud\";\n\n// src/lib/threadIdStorage/cookieOptions/get.ts\nvar import_js_cookie = __toESM(require(\"js-cookie\"), 1);\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}) => import_js_cookie.default.get(key({ assistantId })) ?? null;\n\n// src/lib/threadIdStorage/cookieOptions/set.ts\nvar import_js_cookie2 = __toESM(require(\"js-cookie\"), 1);\nvar set = ({\n assistantId,\n threadId\n}) => import_js_cookie2.default.set(key({ assistantId }), threadId);\n\n// src/lib/threadIdStorage/cookieOptions/remove.ts\nvar import_js_cookie3 = __toESM(require(\"js-cookie\"), 1);\nvar remove = ({\n assistantId\n}) => import_js_cookie3.default.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 = (0, import_react.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\nvar import_react2 = require(\"react\");\nvar useSuperinterfaceContext = () => (0, import_react2.useContext)(SuperinterfaceContext);\n\n// src/components/core/SuperinterfaceProvider/index.tsx\nvar import_jsx_runtime = require(\"react/jsx-runtime\");\nvar SuperinterfaceProvider = ({\n children,\n baseUrl: baseUrl2,\n variables,\n defaultOptions,\n threadIdStorageOptions\n}) => {\n const superinterfaceContext = useSuperinterfaceContext();\n const createMessageAbortControllerRef = (0, import_react3.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__ */ (0, import_jsx_runtime.jsx)(\n SuperinterfaceContext.Provider,\n {\n value,\n children\n }\n );\n};\n\n// src/components/threads/Thread/Messages/index.tsx\nvar import_themes44 = require(\"@radix-ui/themes\");\n\n// src/components/threads/Thread/Message/index.tsx\nvar import_react28 = require(\"react\");\nvar import_radash12 = require(\"radash\");\nvar import_themes32 = require(\"@radix-ui/themes\");\n\n// src/components/skeletons/StartingContentSkeleton/index.tsx\nvar import_themes = require(\"@radix-ui/themes\");\nvar import_jsx_runtime2 = require(\"react/jsx-runtime\");\nvar StartingContentSkeleton = () => /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(\n import_themes.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\nvar import_themes10 = require(\"@radix-ui/themes\");\nvar import_react8 = require(\"react\");\n\n// src/contexts/components/ComponentsContext/index.tsx\nvar import_react7 = require(\"react\");\n\n// src/components/runSteps/RunStep/ToolCalls/index.tsx\nvar import_themes9 = require(\"@radix-ui/themes\");\n\n// src/components/runSteps/RunStep/ToolCalls/ToolCall/Fn/index.tsx\nvar import_react6 = require(\"react\");\n\n// src/contexts/functions/FunctionComponentsContext/index.tsx\nvar import_react4 = require(\"react\");\nvar FunctionComponentsContext = (0, import_react4.createContext)({});\n\n// src/components/functions/FunctionBase/index.tsx\nvar import_themes5 = require(\"@radix-ui/themes\");\n\n// src/components/toolCalls/ToolCallBase/index.tsx\nvar import_themes2 = require(\"@radix-ui/themes\");\nvar import_jsx_runtime3 = require(\"react/jsx-runtime\");\nvar ToolCallBase = ({\n children\n}) => /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(\n import_themes2.Flex,\n {\n py: \"1\",\n ml: \"-2\",\n children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(\n import_themes2.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\nvar import_themes3 = require(\"@radix-ui/themes\");\nvar import_jsx_runtime4 = require(\"react/jsx-runtime\");\nvar ToolCallTitle = ({\n children\n}) => /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(\n import_themes3.Text,\n {\n weight: \"regular\",\n children\n }\n);\n\n// src/components/toolCalls/ToolCallBase/ToolCallIcon.tsx\nvar import_react_icons = require(\"@radix-ui/react-icons\");\nvar import_jsx_runtime5 = require(\"react/jsx-runtime\");\nvar ToolCallIcon = ({\n runStep\n}) => {\n if (runStep.completed_at) {\n return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_react_icons.CheckCircledIcon, {});\n } else if (runStep.cancelled_at || runStep.failed_at || runStep.status === \"expired\") {\n return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_react_icons.CircleBackslashIcon, {});\n } else {\n return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_react_icons.CircleIcon, {});\n }\n};\n\n// src/components/functions/FunctionBase/Content/index.tsx\nvar import_react5 = require(\"react\");\nvar import_themes4 = require(\"@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\nvar import_jsx_runtime6 = require(\"react/jsx-runtime\");\nvar Content = ({\n fn\n}) => {\n const args = (0, import_react5.useMemo)(() => formattedJsonOrRaw({\n value: fn.arguments\n }), [fn]);\n const output = (0, import_react5.useMemo)(() => formattedJsonOrRaw({\n value: fn.output\n }), [fn]);\n return /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)(\n import_themes4.Code,\n {\n variant: \"ghost\",\n color: \"gold\",\n style: {\n whiteSpace: \"pre\",\n wordBreak: \"break-word\"\n },\n children: [\n args && /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_themes4.Box, { children: args }),\n output && /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_themes4.Box, { children: output })\n ]\n }\n );\n};\n\n// src/components/functions/FunctionBase/index.tsx\nvar import_jsx_runtime7 = require(\"react/jsx-runtime\");\nvar FunctionBase = ({\n fn,\n runStep,\n title: title2\n}) => /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)(import_themes5.Popover.Root, { children: [\n /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(import_themes5.Popover.Trigger, { children: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(import_themes5.Flex, { children: /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)(ToolCallBase, { children: [\n /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(ToolCallIcon, { runStep }),\n /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(ToolCallTitle, { children: title2 })\n ] }) }) }),\n /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(\n import_themes5.Popover.Content,\n {\n style: {\n maxHeight: \"200px\"\n },\n children: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(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\nvar import_jsx_runtime8 = require(\"react/jsx-runtime\");\nvar DefaultFunction = ({\n fn,\n runStep\n}) => /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(\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\nvar import_jsx_runtime9 = (\n // @ts-ignore-next-line\n require(\"react/jsx-runtime\")\n);\nvar Fn = ({\n fn,\n runStep\n}) => {\n const functionComponentsContext = (0, import_react6.useContext)(FunctionComponentsContext);\n const Component = functionComponentsContext[fn.name] || DefaultFunction;\n return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(\n Component,\n {\n fn,\n runStep\n }\n );\n};\n\n// src/components/runSteps/RunStep/ToolCalls/ToolCall/CodeInterpreter/index.tsx\nvar import_themes7 = require(\"@radix-ui/themes\");\n\n// src/components/runSteps/RunStep/ToolCalls/ToolCall/CodeInterpreter/Content.tsx\nvar import_themes6 = require(\"@radix-ui/themes\");\nvar import_jsx_runtime10 = require(\"react/jsx-runtime\");\nvar Content2 = ({\n codeInterpreter\n}) => {\n if (!codeInterpreter.input) {\n return null;\n }\n return /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(\n import_themes6.Code,\n {\n variant: \"ghost\",\n color: \"gold\",\n style: {\n whiteSpace: \"pre\",\n wordBreak: \"break-word\"\n },\n children: [\n /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(import_themes6.Box, { children: codeInterpreter.input }),\n /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(import_themes6.Box, { children: JSON.stringify(codeInterpreter.outputs) })\n ]\n }\n );\n};\n\n// src/components/runSteps/RunStep/ToolCalls/ToolCall/CodeInterpreter/index.tsx\nvar import_jsx_runtime11 = require(\"react/jsx-runtime\");\nvar CodeInterpreter = ({\n codeInterpreter,\n runStep\n}) => /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(import_themes7.Popover.Root, { children: [\n /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_themes7.Popover.Trigger, { children: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_themes7.Flex, { children: /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(ToolCallBase, { children: [\n /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(ToolCallIcon, { runStep }),\n /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(ToolCallTitle, { children: \"Using code interpreter\" })\n ] }) }) }),\n /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(\n import_themes7.Popover.Content,\n {\n maxHeight: \"200px\",\n children: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(\n Content2,\n {\n codeInterpreter\n }\n )\n }\n )\n] });\n\n// src/components/runSteps/RunStep/ToolCalls/ToolCall/FileSearch.tsx\nvar import_jsx_runtime12 = require(\"react/jsx-runtime\");\nvar FileSearch = ({\n runStep,\n toolCall\n}) => /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(ToolCallBase, { children: [\n /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(ToolCallIcon, { runStep }),\n /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(ToolCallTitle, { children: \"Searching files\" })\n] });\n\n// src/components/runSteps/RunStep/ToolCalls/ToolCall/Fallback.tsx\nvar import_jsx_runtime13 = require(\"react/jsx-runtime\");\nvar Fallback = ({\n runStep,\n toolCall\n}) => /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(ToolCallBase, { children: [\n /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(ToolCallIcon, { runStep }),\n /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(ToolCallTitle, { children: [\n \"Using tool: \",\n toolCall.type\n ] })\n] });\n\n// src/components/runSteps/RunStep/ToolCalls/ToolCall/index.tsx\nvar import_jsx_runtime14 = require(\"react/jsx-runtime\");\nvar ToolCall = ({\n toolCall,\n runStep\n}) => {\n if (toolCall.type === \"function\") {\n return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(\n Fn,\n {\n fn: toolCall.function,\n runStep\n }\n );\n }\n if (toolCall.type === \"code_interpreter\") {\n return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(\n CodeInterpreter,\n {\n codeInterpreter: toolCall.code_interpreter,\n runStep\n }\n );\n }\n if (toolCall.type === \"file_search\") {\n return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(\n FileSearch,\n {\n toolCall,\n runStep\n }\n );\n }\n return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(\n Fallback,\n {\n toolCall,\n runStep\n }\n );\n};\n\n// src/components/runSteps/RunStep/ToolCalls/Starting/index.tsx\nvar import_themes8 = require(\"@radix-ui/themes\");\nvar import_react_icons2 = require(\"@radix-ui/react-icons\");\nvar import_jsx_runtime15 = require(\"react/jsx-runtime\");\nvar Starting = () => /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(import_themes8.Popover.Root, { children: [\n /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(ToolCallBase, { children: [\n /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_react_icons2.CircleIcon, {}),\n /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(ToolCallTitle, { children: \"Starting actions\" })\n ] }),\n /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(\n import_themes8.Popover.Content,\n {\n style: {\n maxHeight: \"500px\"\n },\n children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_themes8.Text, { children: \"Getting ready to connect to domain API\" })\n }\n )\n] });\n\n// src/components/runSteps/RunStep/ToolCalls/index.tsx\nvar import_jsx_runtime16 = require(\"react/jsx-runtime\");\nvar Root = ({\n children,\n className,\n style\n}) => /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(\n import_themes9.Flex,\n {\n direction: \"column\",\n className,\n style,\n children\n }\n);\nvar ToolCalls = ({\n stepDetails,\n runStep,\n className,\n style\n}) => /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(\n Root,\n {\n className,\n style,\n children: [\n !stepDetails.tool_calls.length && /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(Starting, {}),\n stepDetails.tool_calls.map((toolCall) => /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(\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\nvar import_jsx_runtime17 = require(\"react/jsx-runtime\");\nvar RunStep = ({\n runStep,\n className,\n style\n}) => {\n if (runStep.step_details.type === \"tool_calls\") {\n return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(\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 = (0, import_react7.createContext)({\n components: {\n RunStep\n }\n});\n\n// src/components/runSteps/RunSteps/index.tsx\nvar import_jsx_runtime18 = require(\"react/jsx-runtime\");\nvar RunSteps = ({\n runSteps\n}) => {\n const componentsContext = (0, import_react8.useContext)(ComponentsContext);\n const Component = componentsContext.components.RunStep;\n return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(\n import_themes10.Flex,\n {\n direction: \"column-reverse\",\n children: runSteps.map((runStep) => /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(\n Component,\n {\n runStep\n },\n runStep.id\n ))\n }\n );\n};\n\n// src/hooks/messages/useIsMutatingMessage/index.ts\nvar import_react9 = require(\"react\");\nvar import_react_query = require(\"@tanstack/react-query\");\nvar useIsMutatingMessage = () => {\n const threadContext = useSuperinterfaceContext();\n const mutatingMessagesCount = (0, import_react_query.useIsMutating)({\n mutationKey: [\"createMessage\", threadContext.variables]\n });\n const isMutatingMessage = (0, import_react9.useMemo)(() => mutatingMessagesCount > 0, [mutatingMessagesCount]);\n return isMutatingMessage;\n};\n\n// src/contexts/messages/MessageContext/index.ts\nvar import_react10 = require(\"react\");\nvar MessageContext = (0, import_react10.createContext)({\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\nvar import_themes11 = require(\"@radix-ui/themes\");\nvar import_react_icons3 = require(\"@radix-ui/react-icons\");\nvar import_jsx_runtime19 = require(\"react/jsx-runtime\");\nvar Attachments = ({\n message\n}) => {\n if (!message.attachments?.length) return null;\n return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(\n import_themes11.Flex,\n {\n align: \"start\",\n pb: \"1\",\n children: /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(\n import_themes11.Badge,\n {\n color: \"gray\",\n variant: \"surface\",\n children: [\n /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_react_icons3.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\nvar import_react26 = require(\"react\");\nvar import_mdx = require(\"@mdx-js/mdx\");\nvar import_react27 = require(\"@mdx-js/react\");\nvar runtime = __toESM(require(\"react/jsx-runtime\"), 1);\nvar import_recma_mdx_escape_missing_components = __toESM(require(\"recma-mdx-escape-missing-components\"), 1);\n\n// src/hooks/markdown/useMarkdownContext/index.ts\nvar import_react25 = require(\"react\");\n\n// src/contexts/markdown/MarkdownContext/index.ts\nvar import_react24 = require(\"react\");\n\n// src/contexts/markdown/MarkdownContext/lib/components/index.tsx\nvar import_themes31 = require(\"@radix-ui/themes\");\n\n// src/contexts/markdown/MarkdownContext/lib/components/Paragraph.tsx\nvar import_themes12 = require(\"@radix-ui/themes\");\nvar import_jsx_runtime20 = require(\"react/jsx-runtime\");\nvar Paragraph = ({ children }) => /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(\n import_themes12.Box,\n {\n pb: \"3\",\n children: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(\n import_themes12.Text,\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\nvar import_themes13 = require(\"@radix-ui/themes\");\nvar import_jsx_runtime21 = require(\"react/jsx-runtime\");\nvar Link = ({\n children,\n href,\n download,\n target = \"_blank\"\n}) => /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(\n import_themes13.Link,\n {\n href,\n target,\n download,\n children\n }\n);\n\n// src/contexts/markdown/MarkdownContext/lib/components/UnorderedList.tsx\nvar import_themes14 = require(\"@radix-ui/themes\");\nvar import_jsx_runtime22 = require(\"react/jsx-runtime\");\nvar UnorderedList = ({ children }) => /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(\n import_themes14.Box,\n {\n pb: \"3\",\n asChild: true,\n children: /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(\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\nvar import_themes15 = require(\"@radix-ui/themes\");\nvar import_jsx_runtime23 = require(\"react/jsx-runtime\");\nvar OrderedList = ({ children }) => /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(\n import_themes15.Box,\n {\n pb: \"3\",\n asChild: true,\n children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(\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\nvar import_themes16 = require(\"@radix-ui/themes\");\nvar import_jsx_runtime24 = require(\"react/jsx-runtime\");\nvar ListItem = ({ children }) => /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(\n import_themes16.Box,\n {\n pb: \"1\",\n children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(\"li\", { children })\n }\n);\n\n// src/contexts/markdown/MarkdownContext/lib/components/Strong.tsx\nvar import_themes17 = require(\"@radix-ui/themes\");\nvar import_jsx_runtime25 = require(\"react/jsx-runtime\");\nvar Strong = ({ children }) => /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_themes17.Strong, { children });\n\n// src/contexts/markdown/MarkdownContext/lib/components/Pre.tsx\nvar import_themes18 = require(\"@radix-ui/themes\");\nvar import_jsx_runtime26 = require(\"react/jsx-runtime\");\nvar Pre = ({ children }) => /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(\n import_themes18.Box,\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\nvar import_themes21 = require(\"@radix-ui/themes\");\n\n// src/components/suggestions/Suggestions/index.tsx\nvar import_react16 = require(\"react\");\n\n// src/hooks/messages/useLatestMessage/index.ts\nvar import_react12 = require(\"react\");\n\n// src/hooks/messages/useMessages/index.tsx\nvar import_react11 = require(\"react\");\nvar import_react_query3 = require(\"@tanstack/react-query\");\n\n// src/lib/threads/queryOptions/index.ts\nvar import_react_query2 = require(\"@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 (0, import_react_query2.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 = (0, import_react_query3.useQueryClient)();\n const threadContext = useSuperinterfaceContext();\n const superinterfaceContext = useSuperinterfaceContext();\n const props = (0, import_react_query3.useInfiniteQuery)(messagesQueryOptions({\n queryClient,\n threadContext,\n superinterfaceContext\n }));\n return (0, import_react11.useMemo)(() => ({\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 (0, import_react12.useMemo)(() => ({\n ...props,\n latestMessage: props.messages[0] || null\n }), [props]);\n};\n\n// src/components/suggestions/Suggestions/Content.tsx\nvar import_react15 = require(\"react\");\nvar import_radash10 = require(\"radash\");\nvar import_react_children_utilities = require(\"react-children-utilities\");\nvar import_themes20 = require(\"@radix-ui/themes\");\n\n// src/components/suggestions/Suggestions/Item.tsx\nvar import_react_icons4 = require(\"@radix-ui/react-icons\");\nvar import_themes19 = require(\"@radix-ui/themes\");\n\n// src/hooks/messages/useCreateMessage/index.ts\nvar import_radash9 = require(\"radash\");\nvar import_react_query4 = require(\"@tanstack/react-query\");\n\n// src/hooks/messages/useCreateMessage/lib/mutationOptions/onMutate/index.ts\nvar import_radash2 = require(\"radash\");\n\n// src/hooks/messages/useCreateMessage/lib/mutationOptions/onMutate/data.ts\nvar import_dayjs = __toESM(require(\"dayjs\"), 1);\n\n// src/lib/optimistic/optimisticId.ts\nvar import_radash = require(\"radash\");\nvar optimisticId = () => `-${(0, import_radash.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: (0, import_dayjs.default)().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\", (0, import_radash2.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\nvar import_json_whatwg = require(\"@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\nvar import_lodash3 = __toESM(require(\"lodash\"), 1);\nvar isOptimistic = ({\n id\n}) => import_lodash3.default.startsWith(id, \"-\");\n\n// src/hooks/messages/useCreateMessage/lib/mutationOptions/mutationFn/handleResponse/handlers/extendMessage.ts\nvar import_radash3 = require(\"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 = (0, import_radash3.last)(prevOptimitisticRunMessages)?.runSteps ?? (0, import_radash3.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\nvar import_lodash4 = __toESM(require(\"lodash\"), 1);\nvar import_radash4 = require(\"radash\");\nvar updatedContentPart = ({\n prevContentPart,\n delta\n}) => {\n if (!prevContentPart) {\n return (0, import_radash4.omit)(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 = import_lodash4.default.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\nvar import_radash5 = require(\"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: (0, import_radash5.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\nvar import_lodash5 = __toESM(require(\"lodash\"), 1);\nvar import_radash6 = require(\"radash\");\nvar updatedToolCall = ({\n toolCall,\n delta\n}) => {\n if (!toolCall) {\n return (0, import_radash6.omit)(delta, [\"index\"]);\n }\n if (delta.type === \"function\" && delta.function && toolCall.type === \"function\" && toolCall.function) {\n const result = import_lodash5.default.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 = import_lodash5.default.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\nvar import_radash7 = require(\"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: (0, import_radash7.replace)(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\nvar import_radash8 = require(\"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 (0, import_radash8.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 import_json_whatwg.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 = (0, import_react_query4.useQueryClient)();\n const superinterfaceContext = useSuperinterfaceContext();\n const threadContext = useSuperinterfaceContext();\n const props = (0, import_react_query4.useMutation)(mutationOptions({\n queryClient,\n threadContext,\n superinterfaceContext,\n onError\n }));\n return {\n ...props,\n createMessage: (0, import_radash9.partob)(props.mutateAsync, threadContext.variables)\n };\n};\n\n// src/components/suggestions/Suggestions/Item.tsx\nvar import_react_query5 = require(\"@tanstack/react-query\");\n\n// src/hooks/toasts/useToasts/index.ts\nvar import_react14 = require(\"react\");\n\n// src/contexts/toasts/ToastsContext/index.ts\nvar import_react13 = require(\"react\");\nvar ToastsContext = (0, import_react13.createContext)({\n toasts: [],\n addToast: () => {\n }\n});\n\n// src/hooks/toasts/useToasts/index.ts\nvar useToasts = () => (0, import_react14.useContext)(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\nvar import_jsx_runtime27 = require(\"react/jsx-runtime\");\nvar Item = ({\n suggestion,\n isDisabled,\n className,\n style\n}) => {\n const { addToast } = useToasts();\n const queryClient = (0, import_react_query5.useQueryClient)();\n const threadContext = useSuperinterfaceContext();\n const { createMessage, isPending } = useCreateMessage({\n onError: createMessageDefaultOnError({\n queryClient,\n addToast,\n threadContext\n })\n });\n return /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(\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__ */ (0, import_jsx_runtime27.jsxs)(\n import_themes19.Button,\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__ */ (0, import_jsx_runtime27.jsx)(\n import_themes19.Text,\n {\n size: \"1\",\n weight: \"regular\",\n children\n }\n ),\n /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_themes19.Spinner, { loading: isPending, children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(\n import_react_icons4.ArrowUpIcon,\n {\n style: {\n flexShrink: 0\n }\n }\n ) })\n ]\n }\n);\nItem.Content = Content3;\n\n// src/components/suggestions/Suggestions/Content.tsx\nvar import_jsx_runtime28 = require(\"react/jsx-runtime\");\nvar Content4 = ({\n children,\n className,\n style\n}) => {\n const isMutatingMessage = useIsMutatingMessage();\n const suggestions = (0, import_react15.useMemo)(() => (0, import_react_children_utilities.onlyText)(children).split(/\\r?\\n/).filter((c) => !(0, import_radash10.isEmpty)(c)).map((c) => c.trim()), [children]);\n if ((0, import_radash10.isEmpty)(suggestions)) return null;\n return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(\n import_themes20.Flex,\n {\n gap: \"2\",\n py: \"2\",\n wrap: \"wrap\",\n className,\n style,\n children: suggestions.map((suggestion) => /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(\n Item,\n {\n suggestion,\n isDisabled: isMutatingMessage\n },\n suggestion\n ))\n }\n );\n};\n\n// src/components/suggestions/Suggestions/index.tsx\nvar import_jsx_runtime29 = require(\"react/jsx-runtime\");\nvar Suggestions = ({\n children,\n className,\n style\n}) => {\n const latestMessageProps = useLatestMessage();\n const isDisabled = (0, import_react16.useMemo)(() => (\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__ */ (0, import_jsx_runtime29.jsx)(\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\nvar import_jsx_runtime30 = require(\"react/jsx-runtime\");\nvar Code3 = ({\n children,\n className\n}) => {\n if (className === \"language-suggestions\") {\n return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(Suggestions, { children });\n }\n return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(import_themes21.Code, { children });\n};\n\n// src/components/images/Image.tsx\nvar import_themes22 = require(\"@radix-ui/themes\");\nvar import_jsx_runtime31 = require(\"react/jsx-runtime\");\nvar Image = (props) => /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(\n import_themes22.Box,\n {\n pb: \"3\",\n children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(\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\nvar import_themes28 = require(\"@radix-ui/themes\");\nvar import_base = require(\"@vidstack/react/player/styles/base.css\");\nvar import_react22 = require(\"@vidstack/react\");\n\n// src/components/media/PlayButton.tsx\nvar import_react17 = require(\"@vidstack/react\");\nvar import_themes23 = require(\"@radix-ui/themes\");\nvar import_react_icons5 = require(\"@radix-ui/react-icons\");\nvar import_jsx_runtime32 = require(\"react/jsx-runtime\");\nvar PlayButton = () => {\n const isPaused = (0, import_react17.useMediaState)(\"paused\");\n return /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(\n import_themes23.IconButton,\n {\n variant: \"ghost\",\n asChild: true,\n children: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_react17.PlayButton, { children: isPaused ? /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_react_icons5.PlayIcon, {}) : /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_react_icons5.PauseIcon, {}) })\n }\n );\n};\n\n// src/components/media/VolumeButton.tsx\nvar import_react18 = require(\"@vidstack/react\");\nvar import_themes24 = require(\"@radix-ui/themes\");\nvar import_react_icons6 = require(\"@radix-ui/react-icons\");\nvar import_jsx_runtime33 = require(\"react/jsx-runtime\");\nvar VolumeButton = () => {\n const volume = (0, import_react18.useMediaState)(\"volume\");\n const isMuted = (0, import_react18.useMediaState)(\"muted\");\n const remote = (0, import_react18.useMediaRemote)();\n return /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(import_themes24.HoverCard.Root, { children: [\n /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_themes24.HoverCard.Trigger, { children: /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(\n import_themes24.IconButton,\n {\n variant: \"ghost\",\n asChild: true,\n children: /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_react18.MuteButton, { children: isMuted || volume === 0 ? /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_react_icons6.SpeakerOffIcon, {}) : /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_react_icons6.SpeakerModerateIcon, {}) })\n }\n ) }),\n /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(\n import_themes24.HoverCard.Content,\n {\n size: \"1\",\n side: \"top\",\n height: \"100px\",\n children: /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(\n import_themes24.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\nvar import_react19 = require(\"react\");\nvar import_react20 = require(\"@vidstack/react\");\nvar import_themes25 = require(\"@radix-ui/themes\");\nvar import_jsx_runtime34 = require(\"react/jsx-runtime\");\nvar Time = () => {\n const time = (0, import_react20.useMediaState)(\"currentTime\");\n const duration = (0, import_react20.useMediaState)(\"duration\");\n const seeking = (0, import_react20.useMediaState)(\"seeking\");\n const canSeek = (0, import_react20.useMediaState)(\"canSeek\");\n const remote = (0, import_react20.useMediaRemote)();\n const [value, setValue] = (0, import_react19.useState)(0);\n (0, import_react19.useEffect)(() => {\n if (seeking) return;\n setValue(time / duration * 100);\n }, [time, duration, seeking]);\n const step = (0, import_react19.useMemo)(() => 1 / duration * 100, [duration]);\n return /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(\n import_themes25.Slider,\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\nvar import_themes26 = require(\"@radix-ui/themes\");\nvar import_jsx_runtime35 = require(\"react/jsx-runtime\");\nvar MediaContainer = ({\n children\n}) => /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(\n import_themes26.Card,\n {\n mb: \"3\",\n children: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(\n import_themes26.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\nvar import_react21 = require(\"@vidstack/react\");\nvar import_themes27 = require(\"@radix-ui/themes\");\nvar import_react_icons7 = require(\"@radix-ui/react-icons\");\nvar import_jsx_runtime36 = require(\"react/jsx-runtime\");\nvar FullscreenButton = () => {\n const isFullscreen = (0, import_react21.useMediaState)(\"fullscreen\");\n return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(\n import_themes27.IconButton,\n {\n variant: \"ghost\",\n asChild: true,\n children: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_react21.FullscreenButton, { children: isFullscreen ? /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_react_icons7.ExitFullScreenIcon, {}) : /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_react_icons7.EnterFullScreenIcon, {}) })\n }\n );\n};\n\n// src/contexts/markdown/MarkdownContext/lib/components/Img/Video/index.tsx\nvar import_jsx_runtime37 = require(\"react/jsx-runtime\");\nvar Video = ({\n src\n}) => /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(MediaContainer, { children: /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(\n import_react22.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__ */ (0, import_jsx_runtime37.jsx)(import_react22.MediaProvider, {}),\n /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(\"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__ */ (0, import_jsx_runtime37.jsx)(\n import_themes28.Flex,\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__ */ (0, import_jsx_runtime37.jsx)(import_react22.Controls.Root, { children: /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(\n import_themes28.Flex,\n {\n asChild: true,\n align: \"center\",\n gap: \"3\",\n flexGrow: \"1\",\n children: /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(import_react22.Controls.Group, { children: [\n /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(PlayButton, {}),\n /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(Time, {}),\n /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(VolumeButton, {}),\n /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(FullscreenButton, {})\n ] })\n }\n ) })\n }\n )\n ]\n }\n) });\n\n// src/contexts/markdown/MarkdownContext/lib/components/Img/Audio/index.tsx\nvar import_themes29 = require(\"@radix-ui/themes\");\nvar import_base2 = require(\"@vidstack/react/player/styles/base.css\");\nvar import_react23 = require(\"@vidstack/react\");\nvar import_jsx_runtime38 = require(\"react/jsx-runtime\");\nvar Audio = ({\n src\n}) => /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(MediaContainer, { children: /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(\n import_react23.MediaPlayer,\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__ */ (0, import_jsx_runtime38.jsx)(import_react23.MediaProvider, {}),\n /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(\n import_themes29.Flex,\n {\n asChild: true,\n p: \"3\",\n flexGrow: \"1\",\n style: {\n zIndex: 10,\n background: \"var(--accent-4)\"\n },\n children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(import_react23.Controls.Root, { children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(\n import_themes29.Flex,\n {\n asChild: true,\n align: \"center\",\n gap: \"3\",\n flexGrow: \"1\",\n children: /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(import_react23.Controls.Group, { children: [\n /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(PlayButton, {}),\n /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(Time, {}),\n /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(VolumeButton, {})\n ] })\n }\n ) })\n }\n )\n ]\n }\n) });\n\n// src/contexts/markdown/MarkdownContext/lib/components/Img/index.tsx\nvar import_jsx_runtime39 = require(\"react/jsx-runtime\");\nvar Img = (props) => {\n if (!props.src) {\n return /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(\n Image,\n {\n ...props\n }\n );\n } else if (isVideoSrc({ src: props.src })) {\n return /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(\n Video,\n {\n src: props.src\n }\n );\n } else if (isAudioSrc({ src: props.src })) {\n return /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(\n Audio,\n {\n src: props.src\n }\n );\n } else {\n return /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(\n Image,\n {\n ...props\n }\n );\n }\n};\n\n// src/contexts/markdown/MarkdownContext/lib/components/Annotation/index.tsx\nvar import_react_icons8 = require(\"@radix-ui/react-icons\");\n\n// src/contexts/markdown/MarkdownContext/lib/components/Annotation/AnnotationBase.tsx\nvar import_themes30 = require(\"@radix-ui/themes\");\nvar import_jsx_runtime40 = require(\"react/jsx-runtime\");\nvar AnnotationBase = ({\n icon,\n content\n}) => /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)(import_themes30.Popover.Root, { children: [\n /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(import_themes30.Popover.Trigger, { children: /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(\n import_themes30.IconButton,\n {\n variant: \"soft\",\n color: \"gray\",\n size: \"1\",\n children: icon\n }\n ) }),\n /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(\n import_themes30.Popover.Content,\n {\n size: \"1\",\n children: /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(\n import_themes30.Flex,\n {\n direction: \"column\",\n children: /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(\n import_themes30.Text,\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\nvar import_jsx_runtime41 = require(\"react/jsx-runtime\");\nvar FilePathAnnotation = ({\n annotation,\n children\n}) => {\n const superinterfaceContext = useSuperinterfaceContext();\n const nextSearchParams = new URLSearchParams(superinterfaceContext.variables);\n return /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(\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\nvar import_jsx_runtime42 = require(\"react/jsx-runtime\");\nvar Annotation = ({\n annotation,\n children\n}) => {\n if (annotation.type === \"file_citation\") {\n return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(\n AnnotationBase,\n {\n icon: /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(import_react_icons8.QuoteIcon, {}),\n content: \"File cited.\"\n }\n );\n } else if (annotation.type === \"file_path\") {\n return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(\n FilePathAnnotation,\n {\n annotation,\n children\n }\n );\n }\n return null;\n};\n\n// src/contexts/markdown/MarkdownContext/lib/components/index.tsx\nvar import_jsx_runtime43 = require(\"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__ */ (0, import_jsx_runtime43.jsx)(import_themes31.Heading, { as: \"h1\", children: props.children }),\n h2: (props) => /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(import_themes31.Heading, { as: \"h2\", size: \"5\", children: props.children }),\n h3: (props) => /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(import_themes31.Heading, { as: \"h3\", size: \"4\", children: props.children }),\n h4: (props) => /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(import_themes31.Heading, { as: \"h4\", size: \"3\", children: props.children }),\n h5: (props) => /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(import_themes31.Heading, { as: \"h5\", size: \"3\", children: props.children }),\n h6: (props) => /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(import_themes31.Heading, { as: \"h6\", size: \"3\", children: props.children }),\n table: (props) => /* @__PURE__ */ (0, import_jsx_runtime43.jsxs)(import_jsx_runtime43.Fragment, { children: [\n /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(\"style\", { children: `.rt-TableRootTable { overflow: inherit; }` }),\n /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(\n import_themes31.Table.Root,\n {\n ...props,\n variant: \"surface\",\n mb: \"3\"\n }\n )\n ] }),\n thead: (props) => /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(\n import_themes31.Table.Header,\n {\n ...props\n }\n ),\n tbody: (props) => /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(\n import_themes31.Table.Body,\n {\n ...props\n }\n ),\n tr: (props) => /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(\n import_themes31.Table.Row,\n {\n ...props\n }\n ),\n td: ({ width: width2, ...rest }) => /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(\n import_themes31.Table.Cell,\n {\n ...rest,\n width: width2\n }\n ),\n th: (props) => /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(\n import_themes31.Table.ColumnHeaderCell,\n {\n ...props\n }\n )\n};\n\n// src/contexts/markdown/MarkdownContext/lib/getRemarkPlugins.ts\nvar import_remark_gfm = __toESM(require(\"remark-gfm\"), 1);\n\n// src/lib/remark/remarkAnnotation.ts\nvar import_radash11 = require(\"radash\");\nvar import_unist_util_flatmap = __toESM(require(\"unist-util-flatmap\"), 1);\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 (0, import_unist_util_flatmap.default)(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 = (0, import_unist_util_flatmap.default)(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 (!(0, import_radash11.isNumber)(nodeStart) || !(0, import_radash11.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 import_remark_gfm.default\n];\n\n// src/contexts/markdown/MarkdownContext/index.ts\nvar MarkdownContext = (0, import_react24.createContext)({\n components,\n getRemarkPlugins\n});\n\n// src/hooks/markdown/useMarkdownContext/index.ts\nvar useMarkdownContext = () => (0, import_react25.useContext)(MarkdownContext);\n\n// src/components/threads/Thread/Message/ContentPart/TextContent.tsx\nvar import_jsx_runtime44 = require(\"react/jsx-runtime\");\nvar evaluate = async ({\n code\n}) => {\n const fn = new Function(\"runtime\", \"useMDXComponents\", code);\n return fn({ ...runtime, useMDXComponents: import_react27.useMDXComponents });\n};\nvar TextContent = ({\n content\n}) => {\n const { getRemarkPlugins: getRemarkPlugins2, components: components2 } = useMarkdownContext();\n const remarkPlugins = (0, import_react26.useMemo)(() => getRemarkPlugins2({ content }), [content, getRemarkPlugins2]);\n const [MDXComponent, setMDXComponent] = (0, import_react26.useState)(null);\n (0, import_react26.useEffect)(() => {\n const compileMDX = async () => {\n try {\n const compiled = await (0, import_mdx.compile)(content.text.value, {\n outputFormat: \"function-body\",\n remarkPlugins,\n recmaPlugins: [import_recma_mdx_escape_missing_components.default],\n providerImportSource: \"@mdx-js/react\"\n });\n const code = String(compiled);\n const module2 = await evaluate({ code });\n const { default: MDXContent } = module2;\n setMDXComponent(() => MDXContent);\n } catch (error) {\n }\n };\n compileMDX();\n }, [content, remarkPlugins]);\n if (!MDXComponent) return content.text.value;\n return /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(\n import_react27.MDXProvider,\n {\n components: components2,\n children: /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(MDXComponent, {})\n }\n );\n};\n\n// src/components/threads/Thread/Message/ContentPart/ImageFileContent.tsx\nvar import_jsx_runtime45 = require(\"react/jsx-runtime\");\nvar ImageFileContent = ({\n content\n}) => {\n const superinterfaceContext = useSuperinterfaceContext();\n const nextSearchParams = new URLSearchParams(superinterfaceContext.variables);\n return /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(\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\nvar import_jsx_runtime46 = require(\"react/jsx-runtime\");\nvar ContentPart = ({\n content\n}) => {\n if (content.type === \"text\") {\n return /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(\n TextContent,\n {\n content\n }\n );\n }\n if (content.type === \"image_file\") {\n return /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(\n ImageFileContent,\n {\n content\n }\n );\n }\n return null;\n};\n\n// src/components/threads/Thread/Message/index.tsx\nvar import_jsx_runtime47 = require(\"react/jsx-runtime\");\nvar Message = ({\n message,\n className,\n style\n}) => {\n const [olderRunSteps, laterRunSteps] = (0, import_react28.useMemo)(() => {\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 = (0, import_react28.useMemo)(() => {\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__ */ (0, import_jsx_runtime47.jsx)(Provider, { value: { message }, children: /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)(\n import_themes32.Box,\n {\n className,\n style,\n children: [\n /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(\n RunSteps,\n {\n runSteps: olderRunSteps\n }\n ),\n /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)(import_themes32.Box, { children: [\n /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(\n Attachments,\n {\n message\n }\n ),\n message.content.map((content, index) => /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(\n ContentPart,\n {\n content\n },\n index\n )),\n isInProgress && (0, import_radash12.isEmpty)(laterRunSteps) && /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(StartingContentSkeleton, {})\n ] }),\n /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(\n RunSteps,\n {\n runSteps: laterRunSteps\n }\n ),\n isInProgress && !(0, import_radash12.isEmpty)(laterRunSteps) && /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_themes32.Box, { children: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(StartingContentSkeleton, {}) })\n ]\n }\n ) });\n};\n\n// src/components/threads/Thread/Messages/Content/index.tsx\nvar import_react38 = require(\"react\");\n\n// src/hooks/messageGroups/useMessageGroups/index.ts\nvar import_react29 = require(\"react\");\n\n// src/hooks/messageGroups/useMessageGroups/lib/messageGroups/index.ts\nvar import_lodash6 = __toESM(require(\"lodash\"), 1);\nvar import_radash14 = require(\"radash\");\n\n// src/lib/messages/order.ts\nvar import_radash13 = require(\"radash\");\nvar order = ({ messages: messages2 }) => (0, import_radash13.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}) => import_lodash6.default.reduce(\n order({ messages: messages2 }),\n (groups, message) => {\n const group = (0, import_radash14.last)(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 ...import_lodash6.default.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}) => (0, import_react29.useMemo)(\n () => ({\n messageGroups: messageGroups({ messages: messages2 })\n }),\n [messages2]\n);\n\n// src/components/skeletons/MessagesSkeleton/index.tsx\nvar import_react31 = require(\"react\");\nvar import_themes35 = require(\"@radix-ui/themes\");\n\n// src/components/messageGroups/MessageGroupBase/index.tsx\nvar import_react30 = require(\"react\");\nvar import_themes33 = require(\"@radix-ui/themes\");\nvar import_jsx_runtime48 = require(\"react/jsx-runtime\");\nvar MessageGroupBase = (0, import_react30.forwardRef)(function MessageGroupBase2({\n children\n}, ref) {\n return /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(\n import_themes33.Container,\n {\n ref,\n size: \"2\",\n flexGrow: \"0\",\n children: /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(\n import_themes33.Flex,\n {\n flexShrink: \"0\",\n gap: \"3\",\n children\n }\n )\n }\n );\n});\n\n// src/components/messageGroups/MessageGroupBase/Name.tsx\nvar import_themes34 = require(\"@radix-ui/themes\");\nvar import_jsx_runtime49 = require(\"react/jsx-runtime\");\nvar Name = ({\n children\n}) => /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(\n import_themes34.Flex,\n {\n align: \"center\",\n height: \"var(--space-5)\",\n children: /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(\n import_themes34.Text,\n {\n size: \"2\",\n weight: \"bold\",\n children\n }\n )\n }\n);\n\n// src/components/skeletons/MessagesSkeleton/index.tsx\nvar import_jsx_runtime50 = require(\"react/jsx-runtime\");\nvar MessagesSkeleton = (0, import_react31.forwardRef)(function MessagesSkeleton2(_props, ref) {\n return /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)(\n MessageGroupBase,\n {\n ref,\n children: [\n /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(import_themes35.Skeleton, { loading: true, children: /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(\n import_themes35.Avatar,\n {\n fallback: /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(import_themes35.Flex, {}),\n size: \"1\"\n }\n ) }),\n /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)(\n import_themes35.Box,\n {\n pb: \"3\",\n children: [\n /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(Name, { children: /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(\n import_themes35.Skeleton,\n {\n loading: true,\n style: {\n width: \"128px\"\n }\n }\n ) }),\n /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(\n import_themes35.Skeleton,\n {\n loading: true,\n style: {\n width: \"256px\"\n }\n }\n ),\n /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(\n import_themes35.Skeleton,\n {\n loading: true,\n style: {\n width: \"256px\",\n marginTop: \"var(--space-2)\"\n }\n }\n ),\n /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(\n import_themes35.Skeleton,\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\nvar import_react37 = require(\"react\");\nvar import_themes41 = require(\"@radix-ui/themes\");\n\n// src/components/messageGroups/MessageGroupBase/AssistantAvatar.tsx\nvar import_react33 = require(\"react\");\nvar import_themes37 = require(\"@radix-ui/themes\");\n\n// src/contexts/assistants/AssistantAvatarContext/index.tsx\nvar import_react32 = require(\"react\");\nvar import_themes36 = require(\"@radix-ui/themes\");\nvar import_react_icons9 = require(\"@radix-ui/react-icons\");\nvar import_jsx_runtime51 = require(\"react/jsx-runtime\");\nvar AssistantAvatarContext = (0, import_react32.createContext)(\n /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(\n import_themes36.Avatar,\n {\n fallback: /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(import_react_icons9.LightningBoltIcon, {}),\n size: \"1\"\n }\n )\n);\n\n// src/components/messageGroups/MessageGroupBase/AssistantAvatar.tsx\nvar import_jsx_runtime52 = require(\"react/jsx-runtime\");\nvar AssistantAvatar = () => {\n const AssistantAvatarContextValue = (0, import_react33.useContext)(AssistantAvatarContext);\n return /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(\n import_themes37.Flex,\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\nvar import_react34 = require(\"react\");\nvar AssistantNameContext = (0, import_react34.createContext)(\"Assistant\");\n\n// src/components/messageGroups/MessageGroupBase/UserAvatar.tsx\nvar import_react36 = require(\"react\");\nvar import_themes39 = require(\"@radix-ui/themes\");\n\n// src/contexts/users/UserAvatarContext/index.tsx\nvar import_react35 = require(\"react\");\nvar import_themes38 = require(\"@radix-ui/themes\");\nvar import_react_icons10 = require(\"@radix-ui/react-icons\");\nvar import_jsx_runtime53 = require(\"react/jsx-runtime\");\nvar UserAvatarContext = (0, import_react35.createContext)(\n /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(\n import_themes38.Avatar,\n {\n fallback: /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(import_react_icons10.PersonIcon, {}),\n size: \"1\"\n }\n )\n);\n\n// src/components/messageGroups/MessageGroupBase/UserAvatar.tsx\nvar import_jsx_runtime54 = require(\"react/jsx-runtime\");\nvar UserAvatar = () => {\n const UserAvatarContextValue = (0, import_react36.useContext)(UserAvatarContext);\n return /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(\n import_themes39.Flex,\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\nvar import_themes40 = require(\"@radix-ui/themes\");\nvar import_jsx_runtime55 = require(\"react/jsx-runtime\");\nvar Content5 = ({\n messageGroup\n}) => /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(\n import_themes40.Flex,\n {\n direction: \"column-reverse\",\n children: messageGroup.messages.map((message) => /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(\n Message,\n {\n message\n },\n message.id\n ))\n }\n);\n\n// src/components/threads/Thread/Messages/Content/MessageGroup/index.tsx\nvar import_jsx_runtime56 = require(\"react/jsx-runtime\");\nvar MessageGroup = ({\n messageGroup\n}) => {\n const assistantNameContext = (0, import_react37.useContext)(AssistantNameContext);\n return /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)(MessageGroupBase, { children: [\n messageGroup.role === \"user\" ? /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(UserAvatar, {}) : /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(AssistantAvatar, {}),\n /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)(import_themes41.Box, { flexGrow: \"1\", children: [\n /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(Name, { children: messageGroup.role === \"user\" ? \"You\" : assistantNameContext }),\n /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(\n Content5,\n {\n messageGroup\n }\n )\n ] })\n ] });\n};\n\n// src/components/threads/Thread/Messages/Content/index.tsx\nvar import_jsx_runtime57 = require(\"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 (0, import_react38.useEffect)(() => {\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__ */ (0, import_jsx_runtime57.jsx)(MessagesSkeleton, {});\n }\n return /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(import_jsx_runtime57.Fragment, { children: messageGroups2.map((messageGroup) => /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(\n MessageGroup,\n {\n messageGroup\n },\n messageGroup.id\n )) });\n};\n\n// src/components/threads/Thread/Messages/Progress/index.tsx\nvar import_react40 = require(\"react\");\n\n// src/components/skeletons/StartingSkeleton/index.tsx\nvar import_react39 = require(\"react\");\nvar import_themes42 = require(\"@radix-ui/themes\");\nvar import_jsx_runtime58 = require(\"react/jsx-runtime\");\nvar StartingSkeleton = ({\n children\n}) => {\n const assistantNameContext = (0, import_react39.useContext)(AssistantNameContext);\n return /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)(MessageGroupBase, { children: [\n /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(AssistantAvatar, {}),\n /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)(import_themes42.Box, { children: [\n /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(Name, { children: assistantNameContext }),\n children,\n /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(StartingContentSkeleton, {})\n ] })\n ] });\n};\n\n// src/components/threads/Thread/Messages/Progress/index.tsx\nvar import_jsx_runtime59 = require(\"react/jsx-runtime\");\nvar Progress = () => {\n const { latestMessage } = useLatestMessage();\n const isMutatingMessage = useIsMutatingMessage();\n const isVisible = (0, import_react40.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 return true;\n }, [latestMessage, isMutatingMessage]);\n if (!isVisible) return null;\n return /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(StartingSkeleton, {});\n};\n\n// src/components/threads/Thread/Messages/Root/index.tsx\nvar import_themes43 = require(\"@radix-ui/themes\");\n\n// src/hooks/misc/useInfiniteScroll/index.tsx\nvar import_react42 = require(\"react\");\nvar import_react_intersection_observer = require(\"react-intersection-observer\");\n\n// src/hooks/misc/useThrottledEffect/index.tsx\nvar import_lodash7 = __toESM(require(\"lodash\"), 1);\nvar import_react41 = require(\"react\");\nvar useThrottledEffect = (cb, delay, additionalDeps) => {\n const cbRef = (0, import_react41.useRef)(cb);\n const throttledCb = (0, import_react41.useCallback)(\n import_lodash7.default.throttle((...args) => cbRef.current(...args), delay, {\n leading: true,\n trailing: true\n }),\n [delay]\n );\n (0, import_react41.useEffect)(() => {\n cbRef.current = cb;\n });\n (0, import_react41.useEffect)(throttledCb, [throttledCb, ...additionalDeps]);\n};\n\n// src/hooks/misc/useInfiniteScroll/index.tsx\nvar useInfiniteScroll = ({\n isFetchingNextPage,\n hasNextPage,\n fetchNextPage\n}) => {\n const containerRef = (0, import_react42.useRef)(null);\n const { ref: loaderRef, inView } = (0, import_react_intersection_observer.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\nvar import_jsx_runtime60 = require(\"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__ */ (0, import_jsx_runtime60.jsxs)(\n import_themes43.Flex,\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__ */ (0, import_jsx_runtime60.jsx)(\n import_themes43.Flex,\n {\n ref: loaderRef\n }\n ),\n /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(\n import_themes43.Flex,\n {\n flexShrink: \"0\",\n flexGrow: \"1\"\n }\n )\n ]\n }\n );\n};\n\n// src/components/threads/Thread/Messages/NextPageSkeleton.tsx\nvar import_jsx_runtime61 = require(\"react/jsx-runtime\");\nvar NextPageSkeleton = () => {\n const {\n hasNextPage\n } = useMessages();\n if (!hasNextPage) {\n return null;\n }\n return /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(MessagesSkeleton, {});\n};\n\n// src/components/threads/Thread/Messages/index.tsx\nvar import_jsx_runtime62 = require(\"react/jsx-runtime\");\nvar Messages = ({\n children,\n className,\n style\n}) => /* @__PURE__ */ (0, import_jsx_runtime62.jsxs)(\n Root2,\n {\n style,\n className,\n children: [\n /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(\n import_themes44.Flex,\n {\n flexShrink: \"0\",\n height: \"var(--space-3)\"\n }\n ),\n /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(Progress, {}),\n children,\n /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(Content6, {}),\n /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(NextPageSkeleton, {}),\n /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(\n import_themes44.Flex,\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\nvar import_react_icons11 = require(\"@radix-ui/react-icons\");\nvar import_themes45 = require(\"@radix-ui/themes\");\n\n// src/hooks/messages/useMessageFormContext/index.ts\nvar import_react44 = require(\"react\");\n\n// src/contexts/messages/MessageFormContext/index.ts\nvar import_react43 = require(\"react\");\nvar MessageFormContext = (0, import_react43.createContext)({\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 = () => (0, import_react44.useContext)(MessageFormContext);\n\n// src/components/threads/Thread/MessageForm/Submit/index.tsx\nvar import_jsx_runtime63 = require(\"react/jsx-runtime\");\nvar Root3 = ({\n children,\n style,\n className\n}) => /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(\n import_themes45.Flex,\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__ */ (0, import_jsx_runtime63.jsx)(\n import_themes45.IconButton,\n {\n type: \"button\",\n onClick: () => superinterfaceContext.createMessageAbortControllerRef.current?.abort(),\n ...props,\n children: /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(import_react_icons11.StopIcon, {})\n }\n );\n }\n return /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(\n import_themes45.IconButton,\n {\n type: \"submit\",\n disabled: isDisabled || isFileLoading,\n ...props,\n children: /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(import_react_icons11.ArrowUpIcon, {})\n }\n );\n};\nvar Submit = (props) => /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(Root3, { ...props, children: /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(Button3, {}) });\nSubmit.Root = Root3;\nSubmit.Button = Button3;\n\n// src/components/threads/Thread/MessageForm/Root/index.tsx\nvar import_react_query6 = require(\"@tanstack/react-query\");\nvar import_react45 = require(\"react\");\nvar import_react_hook_form = require(\"react-hook-form\");\nvar import_themes46 = require(\"@radix-ui/themes\");\n\n// src/components/threads/Thread/MessageForm/Root/lib/formOptions.ts\nvar import_zod = require(\"zod\");\nvar import_zod2 = require(\"@hookform/resolvers/zod\");\nvar schema = import_zod.z.object({\n content: import_zod.z.string().min(1)\n});\nvar formOptions = {\n resolver: (0, import_zod2.zodResolver)(schema)\n};\n\n// src/components/threads/Thread/MessageForm/Root/index.tsx\nvar import_radash15 = require(\"radash\");\nvar import_jsx_runtime64 = require(\"react/jsx-runtime\");\nvar Root4 = ({\n children,\n onSubmit: onSubmitArg,\n isDisabled: isDisabledArg,\n style,\n className\n}) => {\n const [files, setFiles] = (0, import_react45.useState)([]);\n const formProps = (0, import_react_hook_form.useForm)(formOptions);\n const {\n handleSubmit,\n formState: { isSubmitting },\n reset,\n watch\n } = formProps;\n const { addToast } = useToasts();\n const queryClient = (0, import_react_query6.useQueryClient)();\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 = (0, import_react45.useMemo)(() => files.some((file) => isOptimistic({ id: file.id })), [files]);\n const isLoading = (0, import_react45.useMemo)(() => isMutatingMessage || isSubmitting, [\n isMutatingMessage,\n isSubmitting\n ]);\n const { latestMessage } = useLatestMessage();\n const isDisabled = (0, import_react45.useMemo)(() => (\n // @ts-ignore-next-line\n latestMessage?.metadata?.isBlocking || isDisabledArg\n ), [latestMessage, isDisabledArg]);\n const onSubmit = onSubmitArg ? (0, import_radash15.partob)(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__ */ (0, import_jsx_runtime64.jsx)(\n MessageFormContext.Provider,\n {\n value: {\n isDisabled,\n isLoading,\n files,\n setFiles,\n isFileLoading,\n content\n },\n children: /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(import_react_hook_form.FormProvider, { ...formProps, children: /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(\n import_themes46.Box,\n {\n asChild: true,\n flexShrink: \"0\",\n style,\n className,\n children: /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(\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\nvar import_react_hook_form3 = require(\"react-hook-form\");\nvar import_themes50 = require(\"@radix-ui/themes\");\n\n// src/components/threads/Thread/MessageForm/Field/Control.tsx\nvar import_themes47 = require(\"@radix-ui/themes\");\nvar import_react_hook_form2 = require(\"react-hook-form\");\n\n// src/hooks/misc/usePrevious.ts\nvar import_react46 = require(\"react\");\nvar usePrevious = (state) => {\n const ref = (0, import_react46.useRef)();\n (0, import_react46.useEffect)(() => {\n ref.current = state;\n });\n return ref.current;\n};\n\n// src/components/threads/Thread/MessageForm/Field/Control.tsx\nvar import_react48 = require(\"react\");\n\n// src/components/textareas/TextareaBase/index.tsx\nvar import_react47 = require(\"react\");\nvar import_react_textarea_autosize = __toESM(require(\"react-textarea-autosize\"), 1);\nvar import_jsx_runtime65 = require(\"react/jsx-runtime\");\nvar TextareaBase = (0, import_react47.forwardRef)(function TextareaBase2({\n style,\n className,\n ...rest\n}, ref) {\n return /* @__PURE__ */ (0, import_jsx_runtime65.jsxs)(import_jsx_runtime65.Fragment, { children: [\n /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(\"style\", { children: `.superinterface-textarea { min-height: inherit; height: 30px; }\n.superinterface-textarea::placeholder { color: var(--gray-a10); }` }),\n /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(\n import_react_textarea_autosize.default,\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\nvar import_jsx_runtime66 = require(\"react/jsx-runtime\");\nvar Root5 = ({\n children,\n style,\n className\n}) => /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(\n import_themes47.Flex,\n {\n flexGrow: \"1\",\n pt: \"4px\",\n style,\n className,\n children\n }\n);\nvar Input = (props) => {\n const assistantNameContext = (0, import_react48.useContext)(AssistantNameContext);\n const {\n register\n } = (0, import_react_hook_form2.useFormContext)();\n const { isDisabled, isLoading } = useMessageFormContext();\n const isSubmitDisabled = (0, import_react48.useMemo)(() => isDisabled || isLoading, [isDisabled, isLoading]);\n const isDisabledPrevious = usePrevious(isDisabled);\n const textareaRef = (0, import_react48.useRef)(null);\n const textareaProps = register(\"content\");\n (0, import_react48.useEffect)(() => {\n if (isDisabled) return;\n if (!isDisabledPrevious) return;\n if (!textareaRef.current) return;\n textareaRef.current.focus();\n }, [isDisabled, isDisabledPrevious, textareaProps]);\n return /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(\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__ */ (0, import_jsx_runtime66.jsx)(Root5, { ...props, children: /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(Input, {}) });\nControl.Root = Root5;\nControl.Input = Input;\n\n// src/components/threads/Thread/MessageForm/Field/Files/Preview.tsx\nvar import_themes48 = require(\"@radix-ui/themes\");\nvar import_react_icons12 = require(\"@radix-ui/react-icons\");\nvar import_jsx_runtime67 = require(\"react/jsx-runtime\");\nvar Preview = (props) => {\n const { files, setFiles } = useMessageFormContext();\n if (!files.length) {\n return null;\n }\n return /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(\n import_themes48.Flex,\n {\n flexBasis: \"100%\",\n direction: \"column\",\n pb: \"2\",\n gap: \"1\",\n ...props,\n children: files.map((file) => /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(\n import_themes48.Card,\n {\n variant: \"ghost\",\n children: /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)(\n import_themes48.Flex,\n {\n align: \"center\",\n justify: \"between\",\n gap: \"1\",\n children: [\n /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)(\n import_themes48.Flex,\n {\n align: \"center\",\n gap: \"1\",\n flexShrink: \"1\",\n minWidth: \"0\",\n maxWidth: \"250px\",\n children: [\n /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(\n import_themes48.Flex,\n {\n flexShrink: \"0\",\n children: /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(\n import_themes48.Spinner,\n {\n loading: isOptimistic({ id: file.id }),\n children: /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(import_react_icons12.FileIcon, {})\n }\n )\n }\n ),\n /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(\n import_themes48.Text,\n {\n size: \"2\",\n truncate: true,\n wrap: \"nowrap\",\n children: file.filename\n }\n )\n ]\n }\n ),\n /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(\n import_themes48.Flex,\n {\n flexShrink: \"0\",\n children: /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(\n import_themes48.IconButton,\n {\n onClick: () => setFiles((prev) => prev.filter((prevFile) => prevFile.id !== file.id)),\n color: \"gray\",\n variant: \"ghost\",\n size: \"1\",\n children: /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(import_react_icons12.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\nvar import_react49 = require(\"react\");\nvar import_radash16 = require(\"radash\");\nvar import_dayjs2 = __toESM(require(\"dayjs\"), 1);\nvar import_react_icons13 = require(\"@radix-ui/react-icons\");\nvar import_themes49 = require(\"@radix-ui/themes\");\n\n// src/hooks/files/useCreateFile/index.ts\nvar import_react_query7 = require(\"@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 = (0, import_react_query7.useQueryClient)();\n const superinterfaceContext = useSuperinterfaceContext();\n const threadContext = useSuperinterfaceContext();\n const props = (0, import_react_query7.useMutation)(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\nvar import_jsx_runtime68 = require(\"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 = (0, import_react49.useCallback)(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: (0, import_dayjs2.default)().unix(),\n bytes: fileObject.size,\n status: \"processed\",\n fileObject\n }));\n setFiles((prev) => [\n ...prev,\n ...newFiles.map((file) => (0, import_radash16.omit)(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__ */ (0, import_jsx_runtime68.jsx)(\n import_themes49.Flex,\n {\n pt: \"2\",\n pr: \"2\",\n flexGrow: \"0\",\n ...props,\n children: /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)(\n import_themes49.IconButton,\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__ */ (0, import_jsx_runtime68.jsx)(import_react_icons13.FilePlusIcon, {}),\n /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(\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\nvar import_jsx_runtime69 = require(\"react/jsx-runtime\");\nvar Root6 = ({\n children,\n className,\n style\n}) => {\n const {\n formState: {\n errors\n }\n } = (0, import_react_hook_form3.useFormContext)();\n return /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(\n import_themes50.Container,\n {\n size: \"2\",\n flexGrow: \"0\",\n className,\n style,\n children: /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(\n import_themes50.Flex,\n {\n direction: \"column\",\n flexShrink: \"0\",\n children: /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(\n import_themes50.Flex,\n {\n direction: \"column\",\n flexShrink: \"0\",\n children: /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(\n import_themes50.Flex,\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\nvar import_jsx_runtime70 = require(\"react/jsx-runtime\");\nvar MessageForm = (props) => /* @__PURE__ */ (0, import_jsx_runtime70.jsx)(Root4, { ...props, children: /* @__PURE__ */ (0, import_jsx_runtime70.jsxs)(Field.Root, { children: [\n /* @__PURE__ */ (0, import_jsx_runtime70.jsx)(Field.Control, {}),\n /* @__PURE__ */ (0, import_jsx_runtime70.jsx)(Submit, {})\n] }) });\nMessageForm.Root = Root4;\nMessageForm.Field = Field;\nMessageForm.Submit = Submit;\n\n// src/components/threads/Thread/Root/index.tsx\nvar import_themes52 = require(\"@radix-ui/themes\");\n\n// src/components/threads/Thread/Provider/index.tsx\nvar Provider2 = SuperinterfaceProvider;\n\n// src/components/toasts/ToastsProvider/index.tsx\nvar import_react50 = require(\"react\");\nvar Toast2 = __toESM(require(\"@radix-ui/react-toast\"), 1);\n\n// src/components/toasts/ToastsProvider/CustomToast.tsx\nvar Toast = __toESM(require(\"@radix-ui/react-toast\"), 1);\nvar import_themes51 = require(\"@radix-ui/themes\");\nvar import_react_icons14 = require(\"@radix-ui/react-icons\");\nvar import_jsx_runtime71 = require(\"react/jsx-runtime\");\nvar CustomToast = ({\n toast\n}) => /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(Toast.Root, { children: /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(import_themes51.Card, { children: /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(Toast.Title, { children: /* @__PURE__ */ (0, import_jsx_runtime71.jsxs)(import_themes51.Flex, { children: [\n /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(\n import_themes51.Flex,\n {\n pr: \"2\",\n height: \"14px\",\n align: \"center\",\n children: toast.type === \"success\" ? /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(\n import_react_icons14.CheckCircledIcon,\n {\n color: \"var(--accent-9)\"\n }\n ) : /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(\n import_react_icons14.CrossCircledIcon,\n {\n color: \"var(--red-9)\"\n }\n )\n }\n ),\n /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(\n import_themes51.Text,\n {\n weight: \"medium\",\n size: \"1\",\n children: toast.message\n }\n )\n] }) }) }) });\n\n// src/components/toasts/ToastsProvider/index.tsx\nvar import_jsx_runtime72 = require(\"react/jsx-runtime\");\nvar ToastsProvider = ({\n children,\n bottom = 0\n}) => {\n const [toasts, setToasts] = (0, import_react50.useState)([]);\n const addToast = (0, import_react50.useCallback)((toast) => setToasts((prevToasts) => [\n ...prevToasts,\n toast\n ]), []);\n return /* @__PURE__ */ (0, import_jsx_runtime72.jsx)(\n ToastsContext.Provider,\n {\n value: {\n toasts,\n addToast\n },\n children: /* @__PURE__ */ (0, import_jsx_runtime72.jsxs)(Toast2.Provider, { children: [\n children,\n Array.from(toasts).map((toast, index) => /* @__PURE__ */ (0, import_jsx_runtime72.jsx)(\n CustomToast,\n {\n toast\n },\n index\n )),\n /* @__PURE__ */ (0, import_jsx_runtime72.jsx)(\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\nvar import_jsx_runtime73 = require(\"react/jsx-runtime\");\nvar Root8 = ({\n children,\n style,\n className,\n ...rest\n}) => /* @__PURE__ */ (0, import_jsx_runtime73.jsx)(ToastsProvider, { bottom: \"var(--space-9)\", children: /* @__PURE__ */ (0, import_jsx_runtime73.jsx)(Provider2, { ...rest, children: /* @__PURE__ */ (0, import_jsx_runtime73.jsx)(\n import_themes52.Flex,\n {\n direction: \"column\",\n flexGrow: \"1\",\n className,\n style,\n children\n }\n) }) });\n\n// src/components/threads/Thread/index.tsx\nvar import_jsx_runtime74 = require(\"react/jsx-runtime\");\nvar Thread = (props) => /* @__PURE__ */ (0, import_jsx_runtime74.jsxs)(Root8, { ...props, children: [\n /* @__PURE__ */ (0, import_jsx_runtime74.jsx)(Messages, {}),\n /* @__PURE__ */ (0, import_jsx_runtime74.jsx)(MessageForm, {})\n] });\nThread.Root = Root8;\nThread.Messages = Messages;\nThread.MessageForm = MessageForm;\n\n// src/hooks/messages/useMessageContext/index.ts\nvar import_react51 = require(\"react\");\nvar useMessageContext = () => (0, import_react51.useContext)(MessageContext);\n\n// src/hooks/assistants/useAssistant/index.ts\nvar import_react52 = require(\"react\");\nvar import_react_query9 = require(\"@tanstack/react-query\");\n\n// src/hooks/assistants/useAssistant/lib/queryOptions/index.ts\nvar import_react_query8 = require(\"@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}) => (0, import_react_query8.queryOptions)({\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 = (0, import_react_query9.useQuery)(queryOptions2({\n assistantId,\n superinterfaceContext\n }));\n return (0, import_react52.useMemo)(() => ({\n ...props,\n assistant: props.data ? props.data.assistant : null\n }), [props]);\n};\n\n// src/components/threads/ThreadDialog/Provider/index.tsx\nvar import_react55 = require(\"react\");\n\n// src/contexts/threads/ThreadDialogContext/index.ts\nvar import_react53 = require(\"react\");\nvar ThreadDialogContext = (0, import_react53.createContext)({\n isOpen: false,\n setIsOpen: () => {\n }\n});\n\n// src/hooks/threads/useThreadDialogContext/index.ts\nvar import_react54 = require(\"react\");\nvar useThreadDialogContext = () => (0, import_react54.useContext)(ThreadDialogContext);\n\n// src/components/threads/ThreadDialog/Provider/index.tsx\nvar import_jsx_runtime75 = require(\"react/jsx-runtime\");\nvar Provider4 = ({\n children\n}) => {\n const threadDialogContext = useThreadDialogContext();\n const [isOpen, setIsOpen] = (0, import_react55.useState)(threadDialogContext.isOpen);\n return /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(\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\nvar import_jsx_runtime76 = require(\"react/jsx-runtime\");\nvar Root9 = ({\n children\n}) => /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(Provider4, { children });\n\n// src/components/threads/ThreadDialog/Trigger/index.tsx\nvar import_themes54 = require(\"@radix-ui/themes\");\n\n// src/components/threads/ThreadDialog/Trigger/Button.tsx\nvar import_themes53 = require(\"@radix-ui/themes\");\nvar import_react_icons15 = require(\"@radix-ui/react-icons\");\nvar import_jsx_runtime77 = require(\"react/jsx-runtime\");\nvar Button4 = (props) => /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(\n import_themes53.IconButton,\n {\n size: \"4\",\n radius: \"full\",\n ...props,\n children: /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(import_react_icons15.ChatBubbleIcon, {})\n }\n);\n\n// src/components/threads/ThreadDialog/Trigger/index.tsx\nvar import_jsx_runtime78 = require(\"react/jsx-runtime\");\nvar Root10 = ({\n children,\n style,\n className\n}) => {\n const { setIsOpen, isOpen } = useThreadDialogContext();\n return /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(\n import_themes54.Flex,\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__ */ (0, import_jsx_runtime78.jsx)(Root10, { ...args, children: /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(Button4, {}) });\nTrigger.Root = Root10;\nTrigger.Button = Button4;\n\n// src/components/threads/ThreadDialog/Content/index.tsx\nvar import_themes56 = require(\"@radix-ui/themes\");\n\n// src/components/threads/ThreadDialog/Close/index.tsx\nvar import_react_icons16 = require(\"@radix-ui/react-icons\");\nvar import_themes55 = require(\"@radix-ui/themes\");\nvar import_jsx_runtime79 = require(\"react/jsx-runtime\");\nvar Close = () => {\n const { setIsOpen, isOpen } = useThreadDialogContext();\n return /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(\n import_themes55.Flex,\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__ */ (0, import_jsx_runtime79.jsx)(\n import_themes55.IconButton,\n {\n size: \"2\",\n variant: \"soft\",\n children: /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(import_react_icons16.Cross1Icon, {})\n }\n )\n }\n );\n};\n\n// src/components/threads/ThreadDialog/Content/index.tsx\nvar import_jsx_runtime80 = require(\"react/jsx-runtime\");\nvar Root11 = ({\n children,\n className,\n style\n}) => {\n const { isOpen } = useThreadDialogContext();\n if (!isOpen) return null;\n return /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(\n import_themes56.Flex,\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__ */ (0, import_jsx_runtime80.jsxs)(\n import_themes56.Card,\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__ */ (0, import_jsx_runtime80.jsx)(\n import_themes56.Inset,\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__ */ (0, import_jsx_runtime80.jsx)(Close, {})\n ]\n }\n )\n }\n );\n};\nvar Messages2 = ({\n className,\n style\n}) => /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(\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__ */ (0, import_jsx_runtime80.jsx)(\n import_themes56.Flex,\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__ */ (0, import_jsx_runtime80.jsx)(Root11, { ...props, children: /* @__PURE__ */ (0, import_jsx_runtime80.jsxs)(Thread.Root, { children: [\n /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(Messages2, {}),\n /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(FormContainer, { children: /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(Thread.MessageForm, {}) })\n] }) });\nContent7.Root = Root11;\nContent7.Messages = Messages2;\nContent7.FormContainer = FormContainer;\n\n// src/components/threads/ThreadDialog/index.tsx\nvar import_jsx_runtime81 = require(\"react/jsx-runtime\");\nvar ThreadDialog = () => /* @__PURE__ */ (0, import_jsx_runtime81.jsxs)(Root9, { children: [\n /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(Content7, {}),\n /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(Trigger, {})\n] });\nThreadDialog.Root = Root9;\nThreadDialog.Trigger = Trigger;\nThreadDialog.Content = Content7;\n\n// src/components/threads/AudioThread/Root/index.tsx\nvar import_themes57 = require(\"@radix-ui/themes\");\n\n// src/contexts/threads/AudioThreadContext/index.ts\nvar import_react56 = require(\"react\");\nvar AudioThreadContext = (0, import_react56.createContext)({\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\nvar import_react57 = require(\"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] = (0, import_react57.useState)(\"\");\n (0, import_react57.useEffect)(() => {\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\nvar import_react58 = require(\"react\");\nvar useStatus = ({\n messageAudioProps,\n recorderProps,\n createMessageProps\n}) => {\n const latestMessageProps = useLatestMessage();\n const status = (0, import_react58.useMemo)(() => {\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\nvar import_dayjs3 = __toESM(require(\"dayjs\"), 1);\nvar import_use_audio_capture = require(\"use-audio-capture\");\nvar import_react60 = require(\"react\");\nvar import_react_use_audio_player = require(\"react-use-audio-player\");\n\n// src/hooks/misc/useInterval.ts\nvar import_react59 = require(\"react\");\nvar useInterval = (callback, delay) => {\n const savedCallback = (0, import_react59.useRef)(() => {\n });\n (0, import_react59.useEffect)(() => {\n savedCallback.current = callback;\n });\n (0, import_react59.useEffect)(() => {\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] = (0, import_react60.useState)(null);\n const [noiseStart, setNoiseStart] = (0, import_react60.useState)(null);\n const [mediaStream, setMediaStream] = (0, import_react60.useState)(null);\n const [status, setStatus] = (0, import_react60.useState)(\"idle\");\n const startAudioPlayer = (0, import_react_use_audio_player.useAudioPlayer)();\n const endAudioPlayer = (0, import_react_use_audio_player.useAudioPlayer)();\n const [isLoaded, setIsLoaded] = (0, import_react60.useState)(false);\n (0, import_react60.useEffect)(() => {\n if (isLoaded) return;\n setIsLoaded(true);\n }, [isLoaded, startAudioPlayer, endAudioPlayer]);\n const audioCaptureProps = (0, import_use_audio_capture.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] = (0, import_react60.useState)(null);\n const isInited = (0, import_react60.useRef)(false);\n (0, import_react60.useEffect)(() => {\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 = (0, import_react60.useMemo)(() => {\n if (!audioEngine) return null;\n const result = audioEngine.audioContext.createAnalyser();\n audioEngine.source.connect(result);\n return result;\n }, [audioEngine]);\n const silenceAnalyser = (0, import_react60.useMemo)(() => {\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 = (0, import_react60.useCallback)(() => {\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 || (0, import_dayjs3.default)();\n return null;\n });\n setNoiseStart((noiseStart2) => {\n if (isSilent) return noiseStart2;\n return noiseStart2 || (0, import_dayjs3.default)();\n });\n requestAnimationFrame(() => handleSilence());\n }, [silenceAnalyser, setNoiseStart, setSilenceStart]);\n (0, import_react60.useEffect)(() => {\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((0, import_dayjs3.default)().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\nvar import_react61 = require(\"react\");\nvar import_compromise = __toESM(require(\"compromise\"), 1);\nvar import_howler = require(\"howler\");\nvar import_react_use_audio_player2 = require(\"react-use-audio-player\");\n\n// src/hooks/audioThreads/useMessageAudio/lib/input.ts\nvar import_radash17 = require(\"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 ((0, import_radash17.isEmpty)(result)) return null;\n return result;\n};\n\n// src/hooks/audioThreads/useMessageAudio/lib/isHtmlAudioSupported.ts\nvar import_detect_browser = require(\"detect-browser\");\nvar unsupportedNames = [\n \"safari\",\n \"ios\"\n];\nvar isHtmlAudioSupported = !unsupportedNames.includes((0, import_detect_browser.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 = (0, import_compromise.default)(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] = (0, import_react61.useState)(false);\n const [stoppedMessageIds, setStoppedMessageIds] = (0, import_react61.useState)([]);\n const [playedMessageSentences, setPlayedMessageSentences] = (0, import_react61.useState)([]);\n const audioPlayer = (0, import_react_use_audio_player2.useAudioPlayer)();\n const nextAudioPlayer = (0, import_react_use_audio_player2.useAudioPlayer)();\n const superinterfaceContext = useSuperinterfaceContext();\n const [isPlaying, setIsPlaying] = (0, import_react61.useState)(false);\n const latestMessageProps = useLatestMessage();\n const unplayedMessageSentences = (0, import_react61.useMemo)(() => {\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 (0, import_react61.useEffect)(() => {\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 (0, import_react61.useEffect)(() => {\n if (isHtmlAudioSupported) {\n if (!import_howler.Howler?._howls[0]?._sounds[0]?._node) return;\n import_howler.Howler._howls[0]._sounds[0]._node.crossOrigin = \"anonymous\";\n }\n }, [audioPlayer]);\n const [audioEngine, setAudioEngine] = (0, import_react61.useState)(null);\n const isAudioEngineInited = (0, import_react61.useRef)(false);\n (0, import_react61.useEffect)(() => {\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(import_howler.Howler._howls[0]._sounds[0]._node),\n audioContext\n });\n } else {\n setAudioEngine({\n source: import_howler.Howler.masterGain,\n audioContext: import_howler.Howler.ctx\n });\n }\n }, [audioPlayer, isAudioEngineInited]);\n const visualizationAnalyser = (0, import_react61.useMemo)(() => {\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 = (0, import_react61.useMemo)(() => 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\nvar import_react_query10 = require(\"@tanstack/react-query\");\nvar import_jsx_runtime82 = require(\"react/jsx-runtime\");\nvar Content8 = ({\n children,\n className,\n style\n}) => {\n const { addToast } = useToasts();\n const queryClient = (0, import_react_query10.useQueryClient)();\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__ */ (0, import_jsx_runtime82.jsx)(\n AudioThreadContext.Provider,\n {\n value: {\n status,\n recorderProps,\n messageAudioProps\n },\n children: /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(\n import_themes57.Flex,\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__ */ (0, import_jsx_runtime82.jsx)(ToastsProvider, { children: /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(Content8, { ...rest, children }) });\n\n// src/components/threads/AudioThread/Visualization/index.tsx\nvar import_react64 = require(\"react\");\nvar import_lodash9 = __toESM(require(\"lodash\"), 1);\nvar import_themes59 = require(\"@radix-ui/themes\");\n\n// src/hooks/threads/useAudioThreadContext/index.ts\nvar import_react62 = require(\"react\");\nvar useAudioThreadContext = () => (0, import_react62.useContext)(AudioThreadContext);\n\n// src/components/threads/AudioThread/BarsVisualizer/index.tsx\nvar import_lodash8 = __toESM(require(\"lodash\"), 1);\nvar import_themes58 = require(\"@radix-ui/themes\");\nvar import_react63 = require(\"react\");\nvar import_radash18 = require(\"radash\");\nvar import_jsx_runtime83 = require(\"react/jsx-runtime\");\nvar barCount = 4;\nvar BarsVisualizer = ({\n visualizationAnalyser,\n backgroundColor,\n height,\n barWidth\n}) => {\n const [barHeights, setBarHeights] = (0, import_react63.useState)([]);\n const draw = (0, import_react63.useCallback)(({ 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 = (0, import_radash18.cluster)(frequencyData, frequencyData.length / barCount);\n setBarHeights(\n clusteredFrequencyData.map((frequencyDataCluster) => import_lodash8.default.mean(frequencyDataCluster) / 255 * 100)\n );\n requestAnimationFrame(() => draw({ visualizationAnalyser: visualizationAnalyser2 }));\n }, []);\n (0, import_react63.useEffect)(() => {\n draw({ visualizationAnalyser });\n }, [draw, visualizationAnalyser]);\n return /* @__PURE__ */ (0, import_jsx_runtime83.jsx)(\n import_themes58.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__ */ (0, import_jsx_runtime83.jsx)(\n import_themes58.Flex,\n {\n direction: \"column\",\n align: \"center\",\n justify: \"center\",\n height,\n children: /* @__PURE__ */ (0, import_jsx_runtime83.jsx)(\n import_themes58.Flex,\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\nvar import_jsx_runtime84 = require(\"react/jsx-runtime\");\nvar Visualization = (props) => {\n const audioThreadContext = useAudioThreadContext();\n const assistantNameContext = (0, import_react64.useContext)(AssistantNameContext);\n const [scale, setScale] = (0, import_react64.useState)(0);\n const draw = (0, import_react64.useCallback)(({ 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 + import_lodash9.default.mean(frequencyData) / 255 / 10);\n requestAnimationFrame(() => draw({ visualizationAnalyser }));\n }, []);\n (0, import_react64.useEffect)(() => {\n draw({ visualizationAnalyser: audioThreadContext.recorderProps.visualizationAnalyser });\n }, [draw, audioThreadContext]);\n return /* @__PURE__ */ (0, import_jsx_runtime84.jsxs)(\n import_themes59.Flex,\n {\n direction: \"column\",\n align: \"center\",\n justify: \"center\",\n mb: \"3\",\n flexGrow: \"1\",\n ...props,\n children: [\n /* @__PURE__ */ (0, import_jsx_runtime84.jsx)(\n import_themes59.Flex,\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__ */ (0, import_jsx_runtime84.jsx)(\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__ */ (0, import_jsx_runtime84.jsxs)(\n import_themes59.Flex,\n {\n ml: \"-22.5px\",\n gap: \"3\",\n pt: \"5\",\n children: [\n /* @__PURE__ */ (0, import_jsx_runtime84.jsx)(AssistantAvatar, {}),\n /* @__PURE__ */ (0, import_jsx_runtime84.jsx)(Name, { children: assistantNameContext })\n ]\n }\n )\n ]\n }\n );\n};\n\n// src/components/threads/AudioThread/Status/StatusMessages.tsx\nvar import_themes60 = require(\"@radix-ui/themes\");\nvar import_jsx_runtime85 = require(\"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__ */ (0, import_jsx_runtime85.jsxs)(\n import_themes60.Flex,\n {\n justify: \"center\",\n pb: \"5\",\n className,\n style,\n children: [\n /* @__PURE__ */ (0, import_jsx_runtime85.jsx)(\n import_themes60.Text,\n {\n size: \"2\",\n weight: \"regular\",\n color: \"gray\",\n className: \"status-messages-texts\"\n }\n ),\n /* @__PURE__ */ (0, import_jsx_runtime85.jsx)(\n \"style\",\n {\n dangerouslySetInnerHTML: {\n __html: html({ texts })\n }\n }\n )\n ]\n }\n);\n\n// src/components/threads/AudioThread/Status/index.tsx\nvar import_jsx_runtime86 = require(\"react/jsx-runtime\");\nvar Status = (props) => {\n const audioThreadContext = useAudioThreadContext();\n if (audioThreadContext.status === \"recording\") {\n return /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(\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__ */ (0, import_jsx_runtime86.jsx)(\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__ */ (0, import_jsx_runtime86.jsx)(\n StatusMessages,\n {\n texts: [\n \"Click the button below to interrupt\"\n ],\n ...props\n }\n );\n }\n return /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(\n StatusMessages,\n {\n texts: [\n \"Thinking\"\n ],\n ...props\n }\n );\n};\n\n// src/components/threads/AudioThread/Form/index.tsx\nvar import_themes62 = require(\"@radix-ui/themes\");\n\n// src/components/threads/AudioThread/Form/MicIcon.tsx\nvar import_jsx_runtime87 = require(\"react/jsx-runtime\");\nvar MicIcon = (props) => /* @__PURE__ */ (0, import_jsx_runtime87.jsx)(\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__ */ (0, import_jsx_runtime87.jsx)(\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\nvar import_themes61 = require(\"@radix-ui/themes\");\nvar import_react_icons17 = require(\"@radix-ui/react-icons\");\nvar import_jsx_runtime88 = require(\"react/jsx-runtime\");\nvar ActionButton = () => {\n const audioThreadContext = useAudioThreadContext();\n const superinterfaceContext = useSuperinterfaceContext();\n if (audioThreadContext.status === \"recording\") {\n return /* @__PURE__ */ (0, import_jsx_runtime88.jsxs)(\n import_themes61.Flex,\n {\n align: \"center\",\n children: [\n /* @__PURE__ */ (0, import_jsx_runtime88.jsx)(\n import_themes61.Flex,\n {\n mr: \"3\",\n ml: \"-7\",\n children: /* @__PURE__ */ (0, import_jsx_runtime88.jsx)(\n import_themes61.IconButton,\n {\n onClick: audioThreadContext.recorderProps.pause,\n color: \"gray\",\n variant: \"soft\",\n size: \"1\",\n children: /* @__PURE__ */ (0, import_jsx_runtime88.jsx)(import_react_icons17.PauseIcon, {})\n }\n )\n }\n ),\n /* @__PURE__ */ (0, import_jsx_runtime88.jsx)(\n import_themes61.IconButton,\n {\n onClick: audioThreadContext.recorderProps.stop,\n highContrast: true,\n variant: \"soft\",\n size: \"4\",\n children: /* @__PURE__ */ (0, import_jsx_runtime88.jsx)(import_react_icons17.ArrowUpIcon, {})\n }\n )\n ]\n }\n );\n }\n if (audioThreadContext.status === \"recorderPaused\") {\n return /* @__PURE__ */ (0, import_jsx_runtime88.jsx)(\n import_themes61.IconButton,\n {\n onClick: audioThreadContext.recorderProps.resume,\n color: \"red\",\n size: \"4\",\n children: /* @__PURE__ */ (0, import_jsx_runtime88.jsx)(import_react_icons17.ResumeIcon, {})\n }\n );\n }\n if (audioThreadContext.status === \"idle\") {\n return /* @__PURE__ */ (0, import_jsx_runtime88.jsx)(\n import_themes61.IconButton,\n {\n onClick: () => audioThreadContext.recorderProps.start(),\n size: \"4\",\n color: \"red\"\n }\n );\n }\n if (audioThreadContext.status === \"playing\") {\n return /* @__PURE__ */ (0, import_jsx_runtime88.jsx)(\n import_themes61.IconButton,\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__ */ (0, import_jsx_runtime88.jsx)(import_react_icons17.StopIcon, {})\n }\n );\n }\n if (audioThreadContext.status === \"playerPaused\") {\n return /* @__PURE__ */ (0, import_jsx_runtime88.jsx)(\n import_themes61.IconButton,\n {\n onClick: () => audioThreadContext.messageAudioProps.play(),\n size: \"4\",\n children: /* @__PURE__ */ (0, import_jsx_runtime88.jsx)(import_react_icons17.ResumeIcon, {})\n }\n );\n }\n return /* @__PURE__ */ (0, import_jsx_runtime88.jsx)(\n import_themes61.IconButton,\n {\n size: \"4\",\n variant: \"soft\",\n disabled: true\n }\n );\n};\n\n// src/components/threads/AudioThread/Form/index.tsx\nvar import_jsx_runtime89 = require(\"react/jsx-runtime\");\nvar Form = (props) => {\n const audioThreadContext = useAudioThreadContext();\n return /* @__PURE__ */ (0, import_jsx_runtime89.jsxs)(\n import_themes62.Flex,\n {\n direction: \"column\",\n align: \"center\",\n ...props,\n children: [\n /* @__PURE__ */ (0, import_jsx_runtime89.jsxs)(\n import_themes62.Flex,\n {\n pb: \"3\",\n align: \"center\",\n children: [\n /* @__PURE__ */ (0, import_jsx_runtime89.jsx)(\n import_themes62.Flex,\n {\n ml: \"-22.5px\",\n mr: \"2\",\n align: \"center\",\n children: /* @__PURE__ */ (0, import_jsx_runtime89.jsx)(\n MicIcon,\n {\n style: {\n color: audioThreadContext.status === \"recording\" ? \"var(--accent-11)\" : \"var(--gray-11)\"\n }\n }\n )\n }\n ),\n /* @__PURE__ */ (0, import_jsx_runtime89.jsx)(\n import_themes62.Flex,\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__ */ (0, import_jsx_runtime89.jsx)(\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__ */ (0, import_jsx_runtime89.jsx)(ActionButton, {})\n ]\n }\n );\n};\n\n// src/components/threads/AudioThread/index.tsx\nvar import_jsx_runtime90 = require(\"react/jsx-runtime\");\nvar AudioThread = (props) => /* @__PURE__ */ (0, import_jsx_runtime90.jsxs)(Root12, { ...props, children: [\n /* @__PURE__ */ (0, import_jsx_runtime90.jsx)(Visualization, {}),\n /* @__PURE__ */ (0, import_jsx_runtime90.jsx)(Status, {}),\n /* @__PURE__ */ (0, import_jsx_runtime90.jsx)(Form, {})\n] });\nAudioThread.Root = Root12;\nAudioThread.Visualization = Visualization;\nAudioThread.Status = Status;\nAudioThread.Form = Form;\n\n// src/components/threads/AudioThreadDialog/index.tsx\nvar import_jsx_runtime91 = require(\"react/jsx-runtime\");\nvar AudioThreadDialog = (props) => /* @__PURE__ */ (0, import_jsx_runtime91.jsxs)(Root9, { ...props, children: [\n /* @__PURE__ */ (0, import_jsx_runtime91.jsx)(Content7.Root, { children: /* @__PURE__ */ (0, import_jsx_runtime91.jsx)(AudioThread, {}) }),\n /* @__PURE__ */ (0, import_jsx_runtime91.jsx)(Trigger, {})\n] });\nAudioThreadDialog.Root = Root9;\nAudioThreadDialog.Trigger = Trigger;\nAudioThreadDialog.Content = Content7;\n\n// src/components/markdown/MarkdownProvider/index.tsx\nvar import_react65 = require(\"react\");\nvar import_jsx_runtime92 = require(\"react/jsx-runtime\");\nvar MarkdownProvider = ({\n children,\n components: components2,\n ...rest\n}) => {\n const prevMarkdownContext = useMarkdownContext();\n const value = (0, import_react65.useMemo)(() => merge(prevMarkdownContext, rest), [rest, prevMarkdownContext]);\n return /* @__PURE__ */ (0, import_jsx_runtime92.jsx)(\n MarkdownContext.Provider,\n {\n value,\n children\n }\n );\n};\n\n// src/components/avatars/Avatar.tsx\nvar import_themes65 = require(\"@radix-ui/themes\");\n\n// src/components/imageAvatars/ImageAvatar/index.tsx\nvar import_themes63 = require(\"@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\nvar import_jsx_runtime93 = require(\"react/jsx-runtime\");\nvar ImageAvatar = ({\n imageAvatar,\n size,\n className,\n style\n}) => {\n const superinterfaceContext = useSuperinterfaceContext();\n return /* @__PURE__ */ (0, import_jsx_runtime93.jsx)(\n import_themes63.Avatar,\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\nvar import_react66 = require(\"react\");\nvar import_themes64 = require(\"@radix-ui/themes\");\n\n// src/lib/iconAvatars/iconAvatarComponents.ts\nvar import_react_icons18 = require(\"@radix-ui/react-icons\");\nvar iconAvatarComponents = {\n [\"BACKPACK\" /* BACKPACK */]: import_react_icons18.BackpackIcon,\n [\"ROCKET\" /* ROCKET */]: import_react_icons18.RocketIcon,\n [\"MAGIC_WAND\" /* MAGIC_WAND */]: import_react_icons18.MagicWandIcon,\n [\"CUBE\" /* CUBE */]: import_react_icons18.CubeIcon,\n [\"TARGET\" /* TARGET */]: import_react_icons18.TargetIcon,\n [\"DISC\" /* DISC */]: import_react_icons18.DiscIcon,\n [\"GLOBE\" /* GLOBE */]: import_react_icons18.GlobeIcon,\n [\"STAR\" /* STAR */]: import_react_icons18.StarIcon,\n [\"LIGHTNING_BOLT\" /* LIGHTNING_BOLT */]: import_react_icons18.LightningBoltIcon,\n [\"FACE\" /* FACE */]: import_react_icons18.FaceIcon,\n [\"PERSON\" /* PERSON */]: import_react_icons18.PersonIcon,\n [\"HEART\" /* HEART */]: import_react_icons18.HeartIcon\n};\n\n// src/components/iconAvatars/IconAvatar.tsx\nvar import_jsx_runtime94 = require(\"react/jsx-runtime\");\nvar IconAvatar = ({\n iconAvatar,\n size,\n className,\n style\n}) => {\n const Component = (0, import_react66.useMemo)(() => iconAvatarComponents[iconAvatar.name], [iconAvatar]);\n return /* @__PURE__ */ (0, import_jsx_runtime94.jsx)(\n import_themes64.Avatar,\n {\n className,\n style,\n size,\n fallback: Component ? /* @__PURE__ */ (0, import_jsx_runtime94.jsx)(Component, {}) : \"\"\n }\n );\n};\n\n// src/components/avatars/Avatar.tsx\nvar import_jsx_runtime95 = require(\"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__ */ (0, import_jsx_runtime95.jsx)(\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__ */ (0, import_jsx_runtime95.jsx)(\n IconAvatar,\n {\n iconAvatar: avatar.iconAvatar,\n size,\n className,\n style\n }\n );\n }\n }\n return /* @__PURE__ */ (0, import_jsx_runtime95.jsx)(\n import_themes65.Avatar,\n {\n fallback: \"\",\n size,\n className,\n style\n }\n );\n};\n\n// src/components/components/ComponentsProvider.tsx\nvar import_react68 = require(\"react\");\n\n// src/hooks/components/useComponents.ts\nvar import_react67 = require(\"react\");\nvar useComponents = () => (0, import_react67.useContext)(ComponentsContext);\n\n// src/components/components/ComponentsProvider.tsx\nvar import_jsx_runtime96 = require(\"react/jsx-runtime\");\nvar ComponentsProvider = ({\n children,\n ...rest\n}) => {\n const prevComponents = useComponents();\n const value = (0, import_react68.useMemo)(() => merge(prevComponents, rest), [rest, prevComponents]);\n return /* @__PURE__ */ (0, import_jsx_runtime96.jsx)(\n ComponentsContext.Provider,\n {\n value,\n children\n }\n );\n};\n\n// src/components/assistants/AssistantProvider/index.tsx\nvar import_jsx_runtime97 = require(\"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__ */ (0, import_jsx_runtime97.jsx)(AssistantNameContext.Provider, { value: assistant?.name ?? \"\", children: /* @__PURE__ */ (0, import_jsx_runtime97.jsx)(\n AssistantAvatarContext.Provider,\n {\n value: /* @__PURE__ */ (0, import_jsx_runtime97.jsx)(Avatar6, { avatar: assistant?.avatar }),\n children\n }\n ) });\n};\n// Annotate the CommonJS export names for ESM import in node:\n0 && (module.exports = {\n AssistantAvatarContext,\n AssistantNameContext,\n AssistantProvider,\n AudioThread,\n AudioThreadDialog,\n 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 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","export { SuperinterfaceProvider } from '@/components/core/SuperinterfaceProvider'\nexport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\n\nexport { Thread } from '@/components/threads/Thread'\nexport { useThreadContext } from '@/hooks/threads/useThreadContext'\nexport { useMessages } from '@/hooks/messages/useMessages'\nexport { useMessageContext } from '@/hooks/messages/useMessageContext'\nexport { useLatestMessage } from '@/hooks/messages/useLatestMessage'\nexport { useCreateMessage } from '@/hooks/messages/useCreateMessage'\nexport { useMessageFormContext } from '@/hooks/messages/useMessageFormContext'\nexport { useIsMutatingMessage } from '@/hooks/messages/useIsMutatingMessage'\n\nexport { useAssistant } from '@/hooks/assistants/useAssistant'\n\nexport { ThreadDialog } from '@/components/threads/ThreadDialog'\nexport { ThreadDialogContext } from '@/contexts/threads/ThreadDialogContext'\nexport { AudioThreadDialog } from '@/components/threads/AudioThreadDialog'\nexport { AudioThread } from '@/components/threads/AudioThread'\nexport { useThreadDialogContext } from '@/hooks/threads/useThreadDialogContext'\n\nexport { Suggestions } from '@/components/suggestions/Suggestions'\n\nexport { MarkdownContext } from '@/contexts/markdown/MarkdownContext'\nexport { MarkdownProvider } from '@/components/markdown/MarkdownProvider'\nexport { useMarkdownContext } from '@/hooks/markdown/useMarkdownContext'\n\nexport { AssistantAvatarContext } from '@/contexts/assistants/AssistantAvatarContext'\nexport { AssistantNameContext } from '@/contexts/assistants/AssistantNameContext'\n\nexport { UserAvatarContext } from '@/contexts/users/UserAvatarContext'\nexport { Avatar } from '@/components/avatars/Avatar'\n\nexport { FunctionComponentsContext } from '@/contexts/functions/FunctionComponentsContext'\nexport { FunctionBase } from '@/components/functions/FunctionBase'\n\nexport { ComponentsProvider } from '@/components/components/ComponentsProvider'\nexport { useComponents } from '@/hooks/components/useComponents'\n\nexport { RunStep } from '@/components/runSteps/RunStep'\nexport { AssistantProvider } from '@/components/assistants/AssistantProvider'\n","'use client'\nimport { useRef } from 'react'\nimport { MessagesPage } from '@/types'\nimport {\n InfiniteData,\n UseInfiniteQueryOptions,\n UseMutationOptions,\n} from '@tanstack/react-query'\nimport { merge } from '@/lib/misc/merge'\nimport { SuperinterfaceContext } from '@/contexts/core/SuperinterfaceContext'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\nimport type { ThreadStorageOptions } from '@/types'\n\nexport type Args = {\n children: React.ReactNode\n baseUrl?: string\n variables?: {\n [key: string]: any\n }\n defaultOptions?: {\n queries?: UseInfiniteQueryOptions<InfiniteData<MessagesPage>>\n mutations?: UseMutationOptions\n }\n threadIdStorageOptions?: ThreadStorageOptions | null\n}\n\nexport const SuperinterfaceProvider = ({\n children,\n baseUrl,\n variables,\n defaultOptions,\n threadIdStorageOptions,\n}: Args) => {\n const superinterfaceContext = useSuperinterfaceContext()\n const createMessageAbortControllerRef = useRef<AbortController | null>(null)\n\n const value = merge(\n superinterfaceContext,\n {\n ...(baseUrl ? { baseUrl } : {}),\n ...(variables ? { variables } : {}),\n ...(defaultOptions ? { defaultOptions } : {}),\n ...(threadIdStorageOptions ? { threadIdStorageOptions } : {}),\n createMessageAbortControllerRef,\n }\n )\n\n return (\n <SuperinterfaceContext.Provider\n value={value}\n >\n {children}\n </SuperinterfaceContext.Provider>\n )\n}\n","import _ from 'lodash'\n\n// @ts-ignore-next-line\nexport const customizer = (objectValue, srcValue) => {\n if (!_.isArray(objectValue)) return\n\n return srcValue\n}\n","'use client'\n\nimport { createContext } from 'react'\nimport { baseUrl } from '@/lib/superinterfaceCloud/baseUrl'\nimport { cookieOptions } from '@/lib/threadIdStorage/cookieOptions'\nimport { localStorageOptions } from '@/lib/threadIdStorage/localStorageOptions'\nimport { isIframe } from '@/lib/iframes/isIframe'\nimport type { ThreadStorageOptions } from '@/types'\n\nexport const SuperinterfaceContext = createContext<{\n baseUrl: string | null\n variables: Record<string, any>\n defaultOptions: {\n queries: Record<string, any>\n mutations: Record<string, any>\n }\n threadIdStorageOptions: ThreadStorageOptions | null\n createMessageAbortControllerRef: React.MutableRefObject<AbortController | null>\n}>({\n baseUrl,\n variables: {},\n defaultOptions: {\n queries: {},\n mutations: {},\n },\n threadIdStorageOptions: isIframe() ? localStorageOptions : cookieOptions,\n createMessageAbortControllerRef: { current: null },\n})\n","export const baseUrl = 'https://superinterface.ai/api/cloud'\n","import Cookies from 'js-cookie'\nimport { key } from '@/lib/threadIdStorage/key'\n\nexport const get = ({\n assistantId,\n}: {\n assistantId: string\n}) => (\n Cookies.get(key({ assistantId })) ?? null\n)\n","export const key = ({\n assistantId,\n}: {\n assistantId: string\n}) => (\n `superinterface-${assistantId}-threadId`\n)\n","import Cookies from 'js-cookie'\nimport { key } from '@/lib/threadIdStorage/key'\n\nexport const set = ({\n assistantId,\n threadId,\n}: {\n assistantId: string\n threadId: string\n}) => (\n Cookies.set(key({ assistantId }), threadId)\n)\n","import Cookies from 'js-cookie'\nimport { key } from '@/lib/threadIdStorage/key'\n\nexport const remove = ({\n assistantId,\n}: {\n assistantId: string\n}) => (\n Cookies.remove(key({ assistantId }))\n)\n","import type { ThreadStorageOptions } from '@/types'\nimport { get } from './get'\nimport { set } from './set'\nimport { remove } from './remove'\n\nexport const cookieOptions: ThreadStorageOptions = {\n get,\n set,\n remove,\n}\n","import { key } from '@/lib/threadIdStorage/key'\n\nexport const get = ({\n assistantId,\n}: {\n assistantId: string\n}) => (\n window.localStorage.getItem(key({ assistantId }))\n)\n","import { key } from '@/lib/threadIdStorage/key'\n\nexport const set = ({\n assistantId,\n threadId,\n}: {\n assistantId: string\n threadId: string\n}) => (\n window.localStorage.setItem(key({ assistantId }), threadId)\n)\n","import { key } from '@/lib/threadIdStorage/key'\n\nexport const remove = ({\n assistantId,\n}: {\n assistantId: string\n}) => (\n window.localStorage.removeItem(key({ assistantId }))\n)\n","import type { ThreadStorageOptions } from '@/types'\nimport { get } from './get'\nimport { set } from './set'\nimport { remove } from './remove'\n\nexport const localStorageOptions: ThreadStorageOptions = {\n get,\n set,\n remove,\n}\n","export const isIframe = () => {\n if (typeof window === 'undefined') return false\n\n return window.self !== window.top\n}\n","'use client'\nimport { useContext } from 'react'\nimport { SuperinterfaceContext } from '@/contexts/core/SuperinterfaceContext'\n\nexport const useSuperinterfaceContext = () => (\n useContext(SuperinterfaceContext)\n)\n","import {\n Flex,\n} from '@radix-ui/themes'\nimport { Message } from '@/components/threads/Thread/Message'\nimport { StyleProps } from '@/types'\nimport { Content } from './Content'\nimport { Progress } from './Progress'\nimport { Root } from './Root'\nimport { NextPageSkeleton } from './NextPageSkeleton'\n\ntype Args = {\n children?: React.ReactNode\n} & StyleProps\n\nexport const Messages = ({\n children,\n className,\n style,\n}: Args) => (\n <Root\n style={style}\n className={className}\n >\n <Flex\n flexShrink=\"0\"\n height=\"var(--space-3)\"\n />\n\n <Progress />\n\n {children}\n\n <Content />\n\n <NextPageSkeleton />\n\n <Flex\n flexShrink=\"0\"\n flexGrow=\"1\"\n minHeight=\"var(--space-5)\"\n />\n </Root>\n)\n\nMessages.Root = Root\nMessages.Message = Message\nMessages.NextPageSkeleton = NextPageSkeleton\n","import _ from 'lodash'\nimport { useMemo } from 'react'\nimport { isEmpty } from 'radash'\nimport {\n Box,\n} from '@radix-ui/themes'\nimport { StartingContentSkeleton } from '@/components/skeletons/StartingContentSkeleton'\nimport { SerializedMessage } from '@/types'\nimport { RunSteps } from '@/components/runSteps/RunSteps'\nimport { useIsMutatingMessage } from '@/hooks/messages/useIsMutatingMessage'\nimport { Provider } from './Provider'\nimport { Attachments } from './Attachments'\nimport { ContentPart } from './ContentPart'\nimport type { StyleProps } from '@/types'\n\ntype Args = {\n message: SerializedMessage\n}\n\nexport const Message = ({\n message,\n className,\n style,\n}: Args & StyleProps) => {\n const [olderRunSteps, laterRunSteps] = useMemo(() => {\n if (!message.runSteps.length) return [[], []]\n\n const messageCreationRunStepIndex = message.runSteps.findIndex((runStep) => {\n if (runStep.step_details.type !== 'message_creation') return\n\n return runStep.step_details.message_creation.message_id === message.id\n })\n\n let nextRunStepIndex = message.runSteps.slice(0, messageCreationRunStepIndex).findLastIndex((runStep) => (\n runStep.step_details.type === 'message_creation'\n ))\n if (nextRunStepIndex === -1) {\n nextRunStepIndex = 0\n }\n const laterRunSteps = message.runSteps.slice(nextRunStepIndex, messageCreationRunStepIndex)\n\n const prevRunStepIndex = message.runSteps.slice(messageCreationRunStepIndex + 1).findIndex((runStep) => (\n runStep.step_details.type === 'message_creation'\n ))\n\n let olderRunSteps\n\n if (prevRunStepIndex === -1) {\n olderRunSteps = message.runSteps.slice(messageCreationRunStepIndex + 1)\n } else {\n olderRunSteps = message.runSteps.slice(messageCreationRunStepIndex + 1, messageCreationRunStepIndex + prevRunStepIndex)\n }\n\n return [olderRunSteps, laterRunSteps]\n }, [message])\n\n const isMutatingMessage = useIsMutatingMessage()\n\n const isInProgress = useMemo(() => {\n if (!isMutatingMessage) return false\n if (message.status === 'in_progress') return true\n\n return message.runSteps.some((rs) => rs.status === 'in_progress')\n }, [message])\n\n return (\n <Provider value={{ message }}>\n <Box\n className={className}\n style={style}\n >\n <RunSteps\n runSteps={olderRunSteps}\n />\n\n <Box>\n <Attachments\n message={message}\n />\n\n {message.content.map((content, index) => (\n <ContentPart\n key={index}\n content={content}\n />\n ))}\n\n {isInProgress && isEmpty(laterRunSteps) && (\n <StartingContentSkeleton />\n )}\n </Box>\n\n <RunSteps\n runSteps={laterRunSteps}\n />\n\n {isInProgress && !isEmpty(laterRunSteps) && (\n <Box>\n <StartingContentSkeleton />\n </Box>\n )}\n </Box>\n </Provider>\n )\n}\n","import {\n Skeleton,\n} from '@radix-ui/themes'\n\nexport const StartingContentSkeleton = () => (\n <Skeleton\n loading\n mt=\"1\"\n height=\"var(--space-4)\"\n width=\"var(--space-4)\"\n style={{\n borderRadius: 'var(--radius-6)',\n flexShrink: 0,\n }}\n />\n)\n","import { Flex } from '@radix-ui/themes'\nimport { useContext } from 'react'\nimport type { SerializedRunStep } from '@/types'\nimport { ComponentsContext } from '@/contexts/components/ComponentsContext'\n\ntype Args = {\n runSteps: SerializedRunStep[]\n}\n\nexport const RunSteps = ({\n runSteps,\n}: Args) => {\n const componentsContext = useContext(ComponentsContext)\n const Component = componentsContext.components.RunStep\n\n return (\n <Flex\n direction=\"column-reverse\"\n >\n {runSteps.map((runStep) => (\n <Component\n key={runStep.id}\n runStep={runStep}\n />\n ))}\n </Flex>\n )\n}\n","'use client'\nimport { createContext } from 'react'\nimport { RunStep } from '@/components/runSteps/RunStep'\n\nexport const ComponentsContext = createContext({\n components: {\n RunStep,\n },\n})\n","import OpenAI from 'openai'\nimport {\n Flex,\n} from '@radix-ui/themes'\nimport type { SerializedRunStep, StyleProps } from '@/types'\nimport { ToolCall } from './ToolCall'\nimport { Starting } from './Starting'\n\ntype Args = {\n stepDetails: OpenAI.Beta.Threads.Runs.ToolCallsStepDetails\n runStep: SerializedRunStep\n} & StyleProps\n\nconst Root = ({\n children,\n className,\n style,\n}: {\n children: React.ReactNode\n} & StyleProps) => (\n <Flex\n direction=\"column\"\n className={className}\n style={style}\n >\n {children}\n </Flex>\n)\n\nexport const ToolCalls = ({\n stepDetails,\n runStep,\n className,\n style,\n}: Args) => (\n <Root\n className={className}\n style={style}\n >\n {!stepDetails.tool_calls.length && (\n <Starting />\n )}\n {stepDetails.tool_calls.map((toolCall) => (\n <ToolCall\n key={toolCall.id}\n toolCall={toolCall}\n runStep={runStep}\n />\n ))}\n </Root>\n)\n\nToolCalls.Root = Root\nToolCalls.Starting = Starting\nToolCalls.ToolCall = ToolCall\n","'use client'\nimport { useContext } from 'react'\nimport OpenAI from 'openai'\nimport type { SerializedRunStep } from '@/types'\nimport { FunctionComponentsContext } from '@/contexts/functions/FunctionComponentsContext'\nimport { DefaultFunction } from './DefaultFunction'\n\ntype Args = {\n fn: OpenAI.Beta.Threads.Runs.FunctionToolCall.Function\n runStep: SerializedRunStep\n}\n\nexport const Fn = ({\n fn,\n runStep,\n}: Args) => {\n const functionComponentsContext = useContext(FunctionComponentsContext)\n const Component = functionComponentsContext[fn.name] || DefaultFunction\n\n return (\n // @ts-ignore-next-line\n <Component\n fn={fn}\n runStep={runStep}\n />\n )\n}\n","'use client'\nimport { createContext } from 'react'\n\ntype FunctionComponents = {\n [key: string]: React.ReactNode\n}\n\nexport const FunctionComponentsContext = createContext({} as FunctionComponents)\n","import OpenAI from 'openai'\nimport {\n Popover,\n Flex,\n} from '@radix-ui/themes'\nimport { ToolCallBase } from '@/components/toolCalls/ToolCallBase'\nimport { ToolCallTitle } from '@/components/toolCalls/ToolCallBase/ToolCallTitle'\nimport { ToolCallIcon } from '@/components/toolCalls/ToolCallBase/ToolCallIcon'\nimport { Content } from './Content'\n\ntype Args = {\n fn: OpenAI.Beta.Threads.Runs.FunctionToolCall.Function\n runStep: OpenAI.Beta.Threads.Runs.RunStep\n title: string\n}\n\nexport const FunctionBase = ({\n fn,\n runStep,\n title,\n}: Args) => (\n <Popover.Root>\n <Popover.Trigger>\n <Flex>\n <ToolCallBase>\n <ToolCallIcon runStep={runStep} />\n <ToolCallTitle>\n {title}\n </ToolCallTitle>\n </ToolCallBase>\n </Flex>\n </Popover.Trigger>\n <Popover.Content\n style={{\n maxHeight: '200px',\n }}\n >\n <Content fn={fn} />\n </Popover.Content>\n </Popover.Root>\n)\n","import {\n Flex,\n Button,\n} from '@radix-ui/themes'\n\nexport const ToolCallBase = ({\n children,\n}: {\n children: React.ReactNode\n}) => (\n <Flex\n py=\"1\"\n ml=\"-2\"\n >\n <Button\n size=\"1\"\n color=\"gold\"\n variant=\"outline\"\n style={{\n boxShadow: 'none',\n }}\n >\n {children}\n </Button>\n </Flex>\n)\n","import {\n Text,\n} from '@radix-ui/themes'\n\ntype Args = {\n children: React.ReactNode\n}\n\nexport const ToolCallTitle = ({\n children,\n}: Args) => (\n <Text\n weight=\"regular\"\n >\n {children}\n </Text>\n)\n","import {\n CircleIcon,\n CircleBackslashIcon,\n CheckCircledIcon,\n} from '@radix-ui/react-icons'\nimport type { SerializedRunStep } from '@/types'\n\ntype Args = {\n runStep: SerializedRunStep\n}\n\nexport const ToolCallIcon = ({\n runStep,\n}: Args) => {\n if (runStep.completed_at) {\n return (\n <CheckCircledIcon />\n )\n } else if (runStep.cancelled_at || runStep.failed_at || runStep.status === 'expired') {\n return (\n <CircleBackslashIcon />\n )\n } else {\n return (\n <CircleIcon />\n )\n }\n}\n","import { useMemo } from 'react'\nimport { Code, Box } from '@radix-ui/themes'\nimport OpenAI from 'openai'\nimport { formattedJsonOrRaw } from './lib/formattedJsonOrRaw'\n\ntype Args = {\n fn: OpenAI.Beta.Threads.Runs.FunctionToolCall.Function\n}\n\nexport const Content = ({\n fn,\n}: Args) => {\n const args = useMemo(() => (\n formattedJsonOrRaw({\n value: fn.arguments,\n })\n ), [fn])\n\n const output = useMemo(() => (\n formattedJsonOrRaw({\n value: fn.output,\n })\n ), [fn])\n\n return (\n <Code\n variant=\"ghost\"\n color=\"gold\"\n style={{\n whiteSpace: 'pre',\n wordBreak: 'break-word',\n }}\n >\n {args && <Box>\n {args}\n </Box>}\n {output && <Box>\n {output}\n </Box>}\n </Code>\n )\n}\n","export const formattedJsonOrRaw = ({\n value,\n}: {\n value: string | null\n}) => {\n if (!value) {\n return null\n }\n\n try {\n return JSON.stringify(JSON.parse(value), null, 2)\n } catch (error) {\n if (typeof value === 'string') {\n return value\n } else {\n return JSON.stringify(value, null, 2)\n }\n }\n}\n","import OpenAI from 'openai'\n\ntype Args = {\n fn: OpenAI.Beta.Threads.Runs.FunctionToolCall.Function\n runStep: OpenAI.Beta.Threads.Runs.RunStep\n}\n\nexport const title = ({\n fn,\n runStep,\n}: Args) => {\n if (runStep.completed_at) {\n return `Finished ${fn.name}`\n } else if (runStep.cancelled_at) {\n return `Cancelled ${fn.name}`\n } else {\n return `Calling ${fn.name}`\n }\n}\n","import OpenAI from 'openai'\nimport { FunctionBase } from '@/components/functions/FunctionBase'\nimport { title } from './lib/title'\n\ntype Args = {\n fn: OpenAI.Beta.Threads.Runs.FunctionToolCall.Function\n runStep: OpenAI.Beta.Threads.Runs.RunStep\n}\n\nexport const DefaultFunction = ({\n fn,\n runStep,\n}: Args) => (\n <FunctionBase\n fn={fn}\n runStep={runStep}\n title={title({ runStep, fn })}\n />\n)\n","import OpenAI from 'openai'\nimport {\n Popover,\n Flex,\n} from '@radix-ui/themes'\nimport { ToolCallBase } from '@/components/toolCalls/ToolCallBase'\nimport { ToolCallTitle } from '@/components/toolCalls/ToolCallBase/ToolCallTitle'\nimport { ToolCallIcon } from '@/components/toolCalls/ToolCallBase/ToolCallIcon'\nimport type { SerializedRunStep } from '@/types'\nimport { Content } from './Content'\n\nexport const CodeInterpreter = ({\n codeInterpreter,\n runStep,\n}: {\n codeInterpreter: OpenAI.Beta.Threads.Runs.CodeInterpreterToolCall.CodeInterpreter\n runStep: SerializedRunStep\n}) => (\n <Popover.Root>\n <Popover.Trigger>\n <Flex>\n <ToolCallBase>\n <ToolCallIcon runStep={runStep} />\n <ToolCallTitle>\n Using code interpreter\n </ToolCallTitle>\n </ToolCallBase>\n </Flex>\n </Popover.Trigger>\n <Popover.Content\n maxHeight=\"200px\"\n >\n <Content\n codeInterpreter={codeInterpreter}\n />\n </Popover.Content>\n </Popover.Root>\n)\n","import { Code, Box } from '@radix-ui/themes'\nimport OpenAI from 'openai'\n\ntype Args = {\n codeInterpreter: OpenAI.Beta.Threads.Runs.CodeInterpreterToolCall.CodeInterpreter\n}\n\nexport const Content = ({\n codeInterpreter,\n}: Args) => {\n if (!codeInterpreter.input) {\n return null\n }\n\n return (\n <Code\n variant=\"ghost\"\n color=\"gold\"\n style={{\n whiteSpace: 'pre',\n wordBreak: 'break-word',\n }}\n >\n <Box>\n {codeInterpreter.input}\n </Box>\n <Box>\n {JSON.stringify(codeInterpreter.outputs)}\n </Box>\n </Code>\n )\n}\n","import { ToolCallBase } from '@/components/toolCalls/ToolCallBase'\nimport { ToolCallTitle } from '@/components/toolCalls/ToolCallBase/ToolCallTitle'\nimport { ToolCallIcon } from '@/components/toolCalls/ToolCallBase/ToolCallIcon'\nimport type { SerializedRunStep, ToolCall } from '@/types'\n\nexport const FileSearch = ({\n runStep,\n toolCall,\n}: {\n toolCall: ToolCall\n runStep: SerializedRunStep\n}) => (\n <ToolCallBase>\n <ToolCallIcon runStep={runStep} />\n <ToolCallTitle>\n Searching files\n </ToolCallTitle>\n </ToolCallBase>\n)\n","import { ToolCallBase } from '@/components/toolCalls/ToolCallBase'\nimport { ToolCallTitle } from '@/components/toolCalls/ToolCallBase/ToolCallTitle'\nimport { ToolCallIcon } from '@/components/toolCalls/ToolCallBase/ToolCallIcon'\nimport type { SerializedRunStep, ToolCall } from '@/types'\n\nexport const Fallback = ({\n runStep,\n toolCall,\n}: {\n toolCall: ToolCall\n runStep: SerializedRunStep\n}) => (\n <ToolCallBase>\n <ToolCallIcon runStep={runStep} />\n <ToolCallTitle>\n Using tool: {toolCall.type}\n </ToolCallTitle>\n </ToolCallBase>\n)\n","import { Fn } from './Fn'\nimport { CodeInterpreter } from './CodeInterpreter'\nimport { FileSearch } from './FileSearch'\nimport { Fallback } from './Fallback'\nimport type { SerializedRunStep, ToolCall as ToolCallType } from '@/types'\n\ntype Args = {\n toolCall: ToolCallType\n runStep: SerializedRunStep\n}\n\nexport const ToolCall = ({\n toolCall,\n runStep,\n}: Args) => {\n if (toolCall.type === 'function') {\n return (\n <Fn\n fn={toolCall.function}\n runStep={runStep}\n />\n )\n }\n\n if (toolCall.type === 'code_interpreter') {\n return (\n <CodeInterpreter\n codeInterpreter={toolCall.code_interpreter}\n runStep={runStep}\n />\n )\n }\n\n if (toolCall.type === 'file_search') {\n return (\n <FileSearch\n toolCall={toolCall}\n runStep={runStep}\n />\n )\n }\n\n return (\n <Fallback\n toolCall={toolCall}\n runStep={runStep}\n />\n )\n}\n","import {\n Popover,\n Text,\n} from '@radix-ui/themes'\nimport {\n CircleIcon,\n} from '@radix-ui/react-icons'\nimport { ToolCallBase } from '@/components/toolCalls/ToolCallBase'\nimport { ToolCallTitle } from '@/components/toolCalls/ToolCallBase/ToolCallTitle'\n\nexport const Starting = () => (\n <Popover.Root>\n <ToolCallBase>\n <CircleIcon />\n <ToolCallTitle>\n Starting actions\n </ToolCallTitle>\n </ToolCallBase>\n <Popover.Content\n style={{\n maxHeight: '500px',\n }}\n >\n <Text>\n Getting ready to connect to domain API\n </Text>\n </Popover.Content>\n </Popover.Root>\n)\n","import type { SerializedRunStep, StyleProps } from '@/types'\nimport { ToolCalls } from './ToolCalls'\n\ntype Args = {\n runStep: SerializedRunStep\n} & StyleProps\n\nexport const RunStep = ({\n runStep,\n className,\n style,\n}: Args) => {\n if (runStep.step_details.type === 'tool_calls') {\n return (\n <ToolCalls\n className={className}\n style={style}\n stepDetails={runStep.step_details}\n runStep={runStep}\n />\n )\n }\n\n return null\n}\n\nRunStep.ToolCalls = ToolCalls\n","import { useMemo } from 'react'\nimport { useIsMutating } from '@tanstack/react-query'\nimport { useThreadContext } from '@/hooks/threads/useThreadContext'\n\nexport const useIsMutatingMessage = () => {\n const threadContext = useThreadContext()\n\n const mutatingMessagesCount = useIsMutating({\n mutationKey: ['createMessage', threadContext.variables],\n })\n\n const isMutatingMessage = useMemo(() => (\n mutatingMessagesCount > 0\n ), [mutatingMessagesCount])\n\n return isMutatingMessage\n}\n","'use client'\nimport { createContext } from 'react'\nimport { SerializedMessage } from '@/types'\n\nexport const MessageContext = createContext<{\n message: SerializedMessage | null\n}>({\n message: null,\n})\n","import { MessageContext } from '@/contexts/messages/MessageContext'\n\nexport const Provider = MessageContext.Provider\n","import { SerializedMessage } from '@/types'\nimport {\n Flex,\n Badge,\n} from '@radix-ui/themes'\nimport {\n FileIcon,\n} from '@radix-ui/react-icons'\n\nexport const Attachments = ({\n message,\n}: {\n message: SerializedMessage\n}) => {\n if (!message.attachments?.length) return null\n\n return (\n <Flex\n align=\"start\"\n pb=\"1\"\n >\n <Badge\n color=\"gray\"\n variant=\"surface\"\n >\n <FileIcon />\n {message.attachments.length} file{message.attachments.length > 1 ? 's' : ''}\n </Badge>\n </Flex>\n )\n}\n","import OpenAI from 'openai'\nimport React, { useState, useEffect, useMemo } from 'react'\nimport { compile } from '@mdx-js/mdx'\nimport { MDXProvider, useMDXComponents } from '@mdx-js/react'\nimport * as runtime from 'react/jsx-runtime'\nimport recmaMdxEscapeMissingComponents from 'recma-mdx-escape-missing-components'\nimport { useMarkdownContext } from '@/hooks/markdown/useMarkdownContext'\n\nconst evaluate = async ({\n code,\n}: {\n code: string\n}) => {\n const fn = new Function('runtime', 'useMDXComponents', code)\n return fn({ ...runtime, useMDXComponents })\n}\n\nexport const TextContent = ({\n content\n}: {\n content: OpenAI.Beta.Threads.Messages.TextContentBlock;\n}) => {\n const { getRemarkPlugins, components } = useMarkdownContext()\n const remarkPlugins = useMemo(() => getRemarkPlugins({ content }), [content, getRemarkPlugins])\n\n const [MDXComponent, setMDXComponent] = useState<React.ComponentType | null>(null)\n\n useEffect(() => {\n const compileMDX = async () => {\n try {\n const compiled = await compile(content.text.value, {\n outputFormat: 'function-body',\n remarkPlugins,\n recmaPlugins: [recmaMdxEscapeMissingComponents],\n providerImportSource: '@mdx-js/react',\n })\n\n const code = String(compiled)\n\n const module = await evaluate({ code })\n\n const { default: MDXContent } = module\n\n setMDXComponent(() => MDXContent)\n } catch (error) {\n }\n }\n\n compileMDX()\n }, [content, remarkPlugins])\n\n if (!MDXComponent) return content.text.value\n\n return (\n <MDXProvider\n components={components}\n >\n <MDXComponent />\n </MDXProvider>\n )\n}\n","import { useContext } from 'react'\nimport { MarkdownContext } from '@/contexts/markdown/MarkdownContext'\n\nexport const useMarkdownContext = () => (\n useContext(MarkdownContext)\n)\n","'use client'\nimport { createContext } from 'react'\nimport { components } from './lib/components'\nimport { getRemarkPlugins } from './lib/getRemarkPlugins'\n\nexport type MarkdownContextType = {\n components: typeof components,\n getRemarkPlugins: typeof getRemarkPlugins,\n}\n\nexport const MarkdownContext = createContext<MarkdownContextType>({\n components,\n getRemarkPlugins,\n})\n","import { Heading, Table } from '@radix-ui/themes'\nimport { Paragraph } from './Paragraph'\nimport { Link } from './Link'\nimport { UnorderedList } from './UnorderedList'\nimport { OrderedList } from './OrderedList'\nimport { ListItem } from './ListItem'\nimport { Strong } from './Strong'\nimport { Pre } from './Pre'\nimport { Code } from './Code'\nimport { Img } from './Img'\nimport { Annotation } from './Annotation'\n\nexport const components: Record<string, any> = {\n p: Paragraph,\n a: Link,\n strong: Strong,\n ul: UnorderedList,\n ol: OrderedList,\n li: ListItem,\n pre: Pre,\n code: Code,\n img: Img,\n annotation: Annotation,\n h1: (props: JSX.IntrinsicElements['h1']) => <Heading as=\"h1\">{props.children}</Heading>,\n h2: (props: JSX.IntrinsicElements['h2']) => <Heading as=\"h2\" size=\"5\">{props.children}</Heading>,\n h3: (props: JSX.IntrinsicElements['h3']) => <Heading as=\"h3\" size=\"4\">{props.children}</Heading>,\n h4: (props: JSX.IntrinsicElements['h4']) => <Heading as=\"h4\" size=\"3\">{props.children}</Heading>,\n h5: (props: JSX.IntrinsicElements['h5']) => <Heading as=\"h5\" size=\"3\">{props.children}</Heading>,\n h6: (props: JSX.IntrinsicElements['h6']) => <Heading as=\"h6\" size=\"3\">{props.children}</Heading>,\n table: (props: JSX.IntrinsicElements['table']) => (\n <>\n <style>{`.rt-TableRootTable { overflow: inherit; }`}</style>\n <Table.Root\n {...props}\n variant=\"surface\"\n mb=\"3\"\n />\n </>\n ),\n thead: (props: JSX.IntrinsicElements['thead']) => (\n <Table.Header\n {...props}\n />\n ),\n tbody: (props: JSX.IntrinsicElements['tbody']) => (\n <Table.Body\n {...props}\n />\n ),\n tr: (props: JSX.IntrinsicElements['tr']) => (\n <Table.Row\n {...props}\n />\n ),\n td: ({ width, ...rest }: JSX.IntrinsicElements['td']) => (\n <Table.Cell\n {...rest}\n width={width as string}\n />\n ),\n th: (props: JSX.IntrinsicElements['th']) => (\n <Table.ColumnHeaderCell\n {...props}\n />\n ),\n}\n","import {\n Box,\n Text,\n} from '@radix-ui/themes'\n\nexport const Paragraph = ({ children }: JSX.IntrinsicElements['p']) => (\n <Box\n pb=\"3\"\n >\n <Text\n size=\"3\"\n style={{\n whiteSpace: 'pre-line',\n wordBreak: 'break-word',\n }}\n >\n {children}\n </Text>\n </Box>\n)\n","import {\n Link as RadixLink,\n} from '@radix-ui/themes'\n\ntype Args = JSX.IntrinsicElements['a']\n\nexport const Link = ({\n children,\n href,\n download,\n target = '_blank',\n}: Args) => (\n <RadixLink\n href={href}\n target={target}\n download={download}\n >\n {children}\n </RadixLink>\n)\n","import {\n Box,\n} from '@radix-ui/themes'\n\nexport const UnorderedList = ({ children }: JSX.IntrinsicElements['ul']) => (\n <Box\n pb=\"3\"\n asChild\n >\n <ul\n style={{\n listStylePosition: 'inside',\n }}\n >\n {children}\n </ul>\n </Box>\n)\n","import {\n Box,\n} from '@radix-ui/themes'\n\nexport const OrderedList = ({ children }: JSX.IntrinsicElements['ul']) => (\n <Box\n pb=\"3\"\n asChild\n >\n <ol\n style={{\n listStylePosition: 'inside',\n }}\n >\n {children}\n </ol>\n </Box>\n)\n","import {\n Box,\n} from '@radix-ui/themes'\n\nexport const ListItem = ({ children }: JSX.IntrinsicElements['li']) => (\n <Box\n pb=\"1\"\n >\n <li>\n {children}\n </li>\n </Box>\n)\n","import {\n Strong as RadixStrong,\n} from '@radix-ui/themes'\n\nexport const Strong = ({ children }: JSX.IntrinsicElements['strong']) => (\n <RadixStrong>\n {children}\n </RadixStrong>\n)\n","import {\n Box,\n} from '@radix-ui/themes'\n\nexport const Pre = ({ children }: JSX.IntrinsicElements['pre']) => (\n <Box\n style={{\n whiteSpace: 'pre-wrap',\n wordBreak: 'break-word',\n }}\n >\n {children}\n </Box>\n)\n","import {\n Code as RadixCode,\n} from '@radix-ui/themes'\nimport { Suggestions } from '@/components/suggestions/Suggestions'\n\nexport const Code = ({\n children,\n className,\n}: JSX.IntrinsicElements['code']) => {\n if (className === 'language-suggestions') {\n return <Suggestions>{children}</Suggestions>\n }\n\n return (\n <RadixCode>\n {children}\n </RadixCode>\n )\n}\n","import { useMemo } from 'react'\nimport { useLatestMessage } from '@/hooks/messages/useLatestMessage'\nimport type { StyleProps } from '@/types'\nimport { Content } from './Content'\nimport { Item } from './Item'\n\nexport const Suggestions = ({\n children,\n className,\n style,\n}: {\n children: React.ReactNode\n} & StyleProps) => {\n const latestMessageProps = useLatestMessage()\n\n const isDisabled = useMemo(() => (\n // @ts-ignore-next-line\n latestMessageProps.latestMessage?.metadata?.isBlocking\n ), [latestMessageProps])\n\n if (latestMessageProps.isLoading) return null\n if (isDisabled) return null\n\n return (\n <Content\n className={className}\n style={style}\n >\n {children}\n </Content>\n )\n}\n\nSuggestions.Item = Item\n","import { useMemo } from 'react'\nimport { useMessages } from '@/hooks/messages/useMessages'\n\nexport const useLatestMessage = () => {\n const props = useMessages()\n\n return useMemo(() => ({\n ...props,\n latestMessage: props.messages[0] || null,\n }), [props])\n}\n","import { useMemo } from 'react'\nimport {\n InfiniteData,\n useInfiniteQuery,\n useQueryClient,\n} from '@tanstack/react-query'\nimport { SerializedMessage, MessagesPage } from '@/types'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\nimport { useThreadContext } from '@/hooks/threads/useThreadContext'\nimport { messagesQueryOptions } from '@/lib/messages/messagesQueryOptions'\n\nconst messages = ({\n props,\n}: {\n props: {\n data: InfiniteData<MessagesPage> | undefined\n },\n}) => {\n if (!props.data) return []\n\n return props.data.pages.reduce<SerializedMessage[]>((acc, page) => (\n acc.concat(page.data)\n ), [])\n}\n\n\nexport const useMessages = () => {\n const queryClient = useQueryClient()\n const threadContext = useThreadContext()\n const superinterfaceContext = useSuperinterfaceContext()\n\n const props = useInfiniteQuery(messagesQueryOptions({\n queryClient,\n threadContext,\n superinterfaceContext,\n }))\n\n return useMemo(() => ({\n ...props,\n // @ts-ignore-next-line\n messages: messages({ props }),\n }), [props])\n}\n","import {\n useQueryClient,\n infiniteQueryOptions,\n} from '@tanstack/react-query'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\nimport { useThreadContext } from '@/hooks/threads/useThreadContext'\nimport { MessagesPage } from '@/types'\nimport { variableParams } from './variableParams'\n\ntype QueryFunctionArgs = {\n queryKey: Readonly<[string, { [key: string]: any }]>\n pageParam?: string\n}\n\nexport const queryOptions = ({\n queryKeyBase,\n path,\n queryClient,\n threadContext,\n superinterfaceContext,\n}: {\n queryKeyBase: string[]\n path: string,\n queryClient: ReturnType<typeof useQueryClient>,\n threadContext: ReturnType<typeof useThreadContext>,\n superinterfaceContext: ReturnType<typeof useSuperinterfaceContext>,\n}) => {\n const queryKey = [...queryKeyBase, threadContext.variables]\n\n return infiniteQueryOptions<MessagesPage>({\n // @ts-ignore-next-line\n queryFn: async ({\n pageParam,\n queryKey,\n }: QueryFunctionArgs) => {\n const [_key, variables] = queryKey\n const params = new URLSearchParams({\n ...(pageParam ? { pageParam } : {}),\n ...variableParams({ variables, superinterfaceContext }),\n })\n\n return fetch(`${superinterfaceContext.baseUrl}${path}?${params}`)\n .then(async (response) => {\n if (response.status !== 200) {\n try {\n const errorResponse = await response.json() as { error: string }\n throw new Error(errorResponse.error)\n } catch (error) {\n throw new Error('Failed to fetch')\n }\n }\n\n return response.json() as Promise<MessagesPage>\n })\n },\n initialPageParam: undefined,\n getNextPageParam: (lastPage: MessagesPage) => {\n if (!lastPage.hasNextPage) return null\n\n return lastPage.lastId\n },\n limit: 10,\n ...threadContext.defaultOptions.queries,\n ...queryClient.getQueryDefaults(queryKey),\n queryKey,\n })\n}\n","import { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\n\nexport const variableParams = ({\n variables,\n superinterfaceContext,\n}: {\n variables: {\n [key: string]: any\n }\n superinterfaceContext: ReturnType<typeof useSuperinterfaceContext>\n}) => {\n if (variables.threadId) return variables\n if (!variables.assistantId) return variables\n if (!superinterfaceContext.threadIdStorageOptions?.get) return variables\n\n const threadId = superinterfaceContext.threadIdStorageOptions.get({ assistantId: variables.assistantId })\n if (!threadId) return variables\n\n return {\n ...variables,\n threadId,\n }\n}\n","import { useQueryClient } from '@tanstack/react-query'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\nimport { useThreadContext } from '@/hooks/threads/useThreadContext'\nimport { queryOptions } from '@/lib/threads/queryOptions'\n\nexport const messagesQueryOptions = ({\n queryClient,\n threadContext,\n superinterfaceContext,\n}: {\n queryClient: ReturnType<typeof useQueryClient>,\n threadContext: ReturnType<typeof useThreadContext>,\n superinterfaceContext: ReturnType<typeof useSuperinterfaceContext>,\n}) => (\n queryOptions({\n queryKeyBase: ['messages'],\n path: '/messages',\n queryClient,\n threadContext,\n superinterfaceContext,\n })\n)\n","import { useMemo } from 'react'\nimport { isEmpty } from 'radash'\nimport { onlyText } from 'react-children-utilities'\nimport { useIsMutatingMessage } from '@/hooks/messages/useIsMutatingMessage'\nimport {\n Flex,\n} from '@radix-ui/themes'\nimport type { StyleProps } from '@/types'\nimport { Item } from './Item'\n\nexport const Content = ({\n children,\n className,\n style,\n}: {\n children: React.ReactNode\n} & StyleProps) => {\n const isMutatingMessage = useIsMutatingMessage()\n\n const suggestions = useMemo(() => (\n onlyText(children).split(/\\r?\\n/).filter((c) => !isEmpty(c)).map((c) => c.trim())\n ), [children])\n\n if (isEmpty(suggestions)) return null\n\n return (\n <Flex\n gap=\"2\"\n py=\"2\"\n wrap=\"wrap\"\n className={className}\n style={style}\n >\n {suggestions.map((suggestion) => (\n <Item\n key={suggestion}\n suggestion={suggestion}\n isDisabled={isMutatingMessage}\n />\n ))}\n </Flex>\n )\n}\n","import {\n ArrowUpIcon,\n} from '@radix-ui/react-icons'\nimport {\n Text,\n Button,\n Spinner,\n} from '@radix-ui/themes'\nimport { useCreateMessage } from '@/hooks/messages/useCreateMessage'\nimport {\n useQueryClient,\n} from '@tanstack/react-query'\nimport { useThreadContext } from '@/hooks/threads/useThreadContext'\nimport { useToasts } from '@/hooks/toasts/useToasts'\nimport { createMessageDefaultOnError } from '@/lib/errors/createMessageDefaultOnError'\nimport type { StyleProps } from '@/types'\n\nexport const Item = ({\n suggestion,\n isDisabled,\n className,\n style,\n}: {\n suggestion: string\n isDisabled: boolean\n} & StyleProps) => {\n const { addToast } = useToasts()\n const queryClient = useQueryClient()\n const threadContext = useThreadContext()\n\n const { createMessage, isPending } = useCreateMessage({\n onError: createMessageDefaultOnError({\n queryClient,\n addToast,\n threadContext,\n }),\n })\n\n return (\n <Content\n onClick={() => {\n createMessage({\n // @ts-ignore-next-line\n content: suggestion,\n })\n }}\n isDisabled={isDisabled}\n isPending={isPending}\n className={className}\n style={style}\n >\n {suggestion}\n </Content>\n )\n}\n\nconst Content = ({\n onClick,\n isDisabled,\n isPending,\n children,\n className,\n style,\n}: {\n onClick: () => void\n isDisabled: boolean\n isPending: boolean\n children: React.ReactNode\n} & StyleProps) => (\n <Button\n className={className}\n variant=\"soft\"\n onClick={onClick}\n disabled={isDisabled}\n style={{\n minHeight: 'var(--base-button-height)',\n height: 'inherit',\n flexShrink: 1,\n ...(style ?? {}),\n }}\n >\n <Text\n size=\"1\"\n weight=\"regular\"\n >\n {children}\n </Text>\n\n <Spinner loading={isPending}>\n <ArrowUpIcon\n style={{\n flexShrink: 0,\n }}\n />\n </Spinner>\n </Button>\n)\n\nItem.Content = Content\n","import { partob } from 'radash'\nimport {\n useMutation,\n useQueryClient,\n} from '@tanstack/react-query'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\nimport { useThreadContext } from '@/hooks/threads/useThreadContext'\nimport { mutationOptions } from './lib/mutationOptions'\n\nexport const useCreateMessage = ({\n onError = () => {},\n}: {\n onError?: (error: unknown) => void\n} = {\n onError: () => {},\n}) => {\n const queryClient = useQueryClient()\n const superinterfaceContext = useSuperinterfaceContext()\n const threadContext = useThreadContext()\n\n const props = useMutation(mutationOptions({\n queryClient,\n threadContext,\n superinterfaceContext,\n onError,\n }))\n\n return {\n ...props,\n createMessage: partob(props.mutateAsync, threadContext.variables),\n }\n}\n","import OpenAI from 'openai'\nimport { omit } from 'radash'\nimport { QueryClient } from '@tanstack/react-query'\nimport { data } from './data'\n\ntype Variables = {\n content: string\n attachments: OpenAI.Beta.Threads.Messages.Message['attachments'] | undefined\n [key: string]: any\n}\n\nexport const onMutate = ({\n queryClient,\n}: {\n queryClient: QueryClient,\n}) => async (\n newMessage: Variables,\n) => {\n const queryKey = ['messages', omit(newMessage, ['content', 'attachments'])]\n await queryClient.cancelQueries({ queryKey })\n\n const prevMessages = queryClient.getQueryData(queryKey)\n\n queryClient.setQueryData(\n queryKey,\n data({ newMessage })\n )\n\n return {\n prevMessages,\n newMessage,\n }\n}\n","import dayjs from 'dayjs'\nimport OpenAI from 'openai'\nimport { optimisticId } from '@/lib/optimistic/optimisticId'\n\ntype Args = {\n newMessage: {\n content: string\n attachments: OpenAI.Beta.Threads.Messages.Message['attachments'] | undefined\n }\n}\n\nexport const data = ({\n newMessage,\n}: Args) => (prevData: any) => {\n const message = {\n id: optimisticId(),\n role: 'user' as OpenAI.Beta.Threads.Messages.Message['role'],\n created_at: dayjs().unix(),\n object: 'thread.message' as OpenAI.Beta.Threads.Messages.Message['object'],\n content: [\n {\n type: 'text',\n text: {\n annotations: [],\n value: newMessage.content,\n },\n } as OpenAI.Beta.Threads.Messages.TextContentBlock,\n ],\n run_id: null,\n assistant_id: null,\n thread_id: null,\n attachments: newMessage.attachments ?? [],\n metadata: {},\n runSteps: [],\n }\n\n if (!prevData) {\n return {\n pageParams: [],\n pages: [\n {\n data: [message],\n hasNextPage: false,\n lastId: message.id,\n },\n ],\n }\n }\n\n const [latestPage, ...pagesRest] = prevData.pages\n\n return {\n ...prevData,\n pages: [\n {\n ...latestPage,\n data: [\n message,\n ...latestPage.data,\n ],\n },\n ...pagesRest,\n ],\n }\n}\n","import { uid } from 'radash'\n\nexport const optimisticId = () => (\n `-${uid(24)}`\n)\n","import { JSONParser } from '@streamparser/json-whatwg'\nimport {\n useQueryClient,\n} from '@tanstack/react-query'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\nimport { useThreadContext } from '@/hooks/threads/useThreadContext'\nimport { handleResponse } from './handleResponse'\nimport { body } from './body'\n\nexport const mutationFn = ({\n superinterfaceContext,\n queryClient,\n threadContext,\n}: {\n superinterfaceContext: ReturnType<typeof useSuperinterfaceContext>\n queryClient: ReturnType<typeof useQueryClient>\n threadContext: ReturnType<typeof useThreadContext>\n}) => async (variables: {\n content: string\n [key: string]: any\n}) => {\n const abortController = new AbortController()\n superinterfaceContext.createMessageAbortControllerRef.current = abortController\n\n const response = await fetch(`${superinterfaceContext.baseUrl}/messages`, {\n method: 'POST',\n body: JSON.stringify(body({\n variables,\n superinterfaceContext,\n })),\n signal: abortController.signal,\n })\n\n if (response.status !== 200) {\n try {\n const errorResponse = await response.json() as { error: string }\n throw new Error(errorResponse.error)\n } catch (error) {\n throw new Error('Failed to send your message, try again. If you are the owner, check the logs.')\n }\n }\n\n if (response.body == null) {\n throw new Error('The response body is empty.');\n }\n\n const parser = new JSONParser({ stringBufferSize: undefined, paths: ['$'], separator: '' })\n const reader = response.body.pipeThrough(parser).getReader()\n\n const messagesQueryKey = ['messages', threadContext.variables]\n\n while (true) {\n const { done, value } = await reader.read()\n\n if (done) break\n\n handleResponse({\n value,\n messagesQueryKey,\n queryClient,\n superinterfaceContext,\n })\n }\n}\n","import OpenAI from 'openai'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\n\nexport const threadCreated = ({\n value,\n superinterfaceContext,\n}: {\n value: OpenAI.Beta.Assistants.AssistantStreamEvent.ThreadCreated\n superinterfaceContext: ReturnType<typeof useSuperinterfaceContext>\n}) => {\n if (!superinterfaceContext.threadIdStorageOptions?.set) return\n // @ts-ignore-next-line\n if (!value.data.metadata?.assistantId) return\n // @ts-ignore-next-line\n if (!value.data.metadata?.threadId) return\n\n superinterfaceContext.threadIdStorageOptions.set({\n // @ts-ignore-next-line\n assistantId: value.data.metadata.assistantId,\n // @ts-ignore-next-line\n threadId: value.data.metadata.threadId,\n })\n}\n","import _ from 'lodash'\n\ntype Args = {\n id: string\n}\n\nexport const isOptimistic = ({\n id,\n}: Args) => (\n _.startsWith(id, '-')\n)\n","import { last } from 'radash'\nimport { SerializedMessage } from '@/types'\nimport { isOptimistic } from '@/lib/optimistic/isOptimistic'\n\nexport const extendMessage = ({\n message,\n messages,\n}: {\n message: SerializedMessage\n messages: SerializedMessage[]\n}) => {\n const prevRunMessages = messages.filter((m: SerializedMessage) => (\n m.run_id === message.run_id\n ))\n\n const prevOptimitisticRunMessages = prevRunMessages.filter((m: SerializedMessage) => (\n isOptimistic({ id: m.id })\n ))\n\n const runSteps = last(prevOptimitisticRunMessages)?.runSteps ?? last(prevRunMessages)?.runSteps ?? []\n\n return {\n ...message,\n runSteps,\n }\n}\n","import { QueryClient } from '@tanstack/react-query'\nimport { SerializedMessage, ThreadMessageCreatedEvent } from '@/types'\nimport { isOptimistic } from '@/lib/optimistic/isOptimistic'\nimport { extendMessage } from './extendMessage'\nimport { MessagesQueryKey } from '@/types'\n\nconst appendMessage = ({\n message,\n messages,\n}: {\n message: SerializedMessage\n messages: SerializedMessage[]\n}) => {\n const prevMessages = messages.filter((m: SerializedMessage) => (\n m.run_id != message.run_id || !isOptimistic({ id: m.id })\n ))\n\n return [\n extendMessage({ message, messages }),\n ...prevMessages,\n ]\n}\n\nexport const threadMessageCreated = ({\n value,\n messagesQueryKey,\n queryClient,\n}: {\n value: ThreadMessageCreatedEvent\n messagesQueryKey: MessagesQueryKey\n queryClient: QueryClient\n}) => (\n queryClient.setQueryData(\n messagesQueryKey,\n (prevData: any) => {\n if (!prevData) {\n return {\n pageParams: [],\n pages: [\n {\n data: appendMessage({ message: value.data, messages: [] }),\n hasNextPage: false,\n lastId: value.data.id,\n },\n ],\n }\n }\n\n const [latestPage, ...pagesRest] = prevData.pages\n\n return {\n ...prevData,\n pages: [\n {\n ...latestPage,\n data: appendMessage({ message: value.data, messages: latestPage.data }),\n },\n ...pagesRest,\n ],\n }\n }\n )\n)\n","import { QueryClient } from '@tanstack/react-query'\nimport OpenAI from 'openai'\nimport _ from 'lodash'\nimport { omit } from 'radash'\nimport { MessagesQueryKey } from '@/types'\n\nconst updatedContentPart = ({\n prevContentPart,\n delta,\n}: {\n prevContentPart: OpenAI.Beta.Threads.Messages.MessageContent\n delta: OpenAI.Beta.Threads.Messages.MessageContentDelta\n}) => {\n if (!prevContentPart) {\n return omit(delta, ['index'])\n }\n\n if (delta.type === 'text' && delta.text && prevContentPart.type == 'text' && prevContentPart.text) {\n return {\n ...prevContentPart,\n text: {\n ...prevContentPart.text,\n value: `${prevContentPart.text.value}${delta.text.value}`,\n annotations: [\n ...(prevContentPart.text.annotations ?? []),\n ...(delta.text.annotations ?? []),\n ]\n },\n }\n }\n\n return prevContentPart\n}\n\nconst updatedContent = ({\n content,\n value,\n}: {\n content: OpenAI.Beta.Threads.Messages.MessageContent\n value: OpenAI.Beta.Assistants.AssistantStreamEvent.ThreadMessageDelta\n}) => {\n if (!value.data.delta.content) return content\n\n const result = _.cloneDeep(content)\n\n value.data.delta.content.forEach((delta: OpenAI.Beta.Threads.Messages.MessageContentDelta) => {\n // @ts-ignore-next-line\n result[delta.index] = updatedContentPart({\n // @ts-ignore-next-line\n prevContentPart: result[delta.index],\n delta,\n })\n })\n\n return result\n}\n\nexport const threadMessageDelta = ({\n value,\n queryClient,\n messagesQueryKey,\n}: {\n value: OpenAI.Beta.Assistants.AssistantStreamEvent.ThreadMessageDelta\n messagesQueryKey: MessagesQueryKey\n queryClient: QueryClient\n}) => (\n queryClient.setQueryData(\n messagesQueryKey,\n (prevData: any) => {\n if (!prevData) {\n return {\n pageParams: [],\n pages: [\n {\n data: [],\n hasNextPage: false,\n lastId: null,\n },\n ],\n }\n }\n\n const [latestPage, ...pagesRest] = prevData.pages\n const [latestMessage, ...messagesRest] = latestPage.data\n\n return {\n ...prevData,\n pages: [\n {\n ...latestPage,\n data: [\n {\n ...latestMessage,\n content: updatedContent({ content: latestMessage.content, value }),\n },\n ...messagesRest,\n ],\n },\n ...pagesRest,\n ],\n }\n }\n )\n)\n","import { replace } from 'radash'\nimport { ThreadMessageCompletedEvent } from '@/types'\nimport { extendMessage } from './extendMessage'\nimport {\n QueryClient,\n} from '@tanstack/react-query'\nimport { MessagesQueryKey } from '@/types'\n\nexport const threadMessageCompleted = ({\n value,\n queryClient,\n messagesQueryKey,\n}: {\n messagesQueryKey: MessagesQueryKey\n value: ThreadMessageCompletedEvent\n queryClient: QueryClient\n}) => (\n queryClient.setQueryData(\n messagesQueryKey,\n (prevData: any) => {\n if (!prevData) {\n return {\n pageParams: [],\n pages: [\n {\n data: [],\n hasNextPage: false,\n lastId: null,\n },\n ],\n }\n }\n\n const [latestPage, ...pagesRest] = prevData.pages\n\n return {\n ...prevData,\n pages: [\n {\n ...latestPage,\n data: replace(latestPage.data, extendMessage({ message: value.data, messages: latestPage.data }), (m) => m.id === value.data.id),\n },\n ...pagesRest,\n ],\n }\n }\n )\n)\n","import { QueryClient } from '@tanstack/react-query'\nimport OpenAI from 'openai'\nimport { optimisticId } from '@/lib/optimistic/optimisticId'\nimport { MessagesQueryKey } from '@/types'\n\nexport const threadRunCreated = ({\n value,\n queryClient,\n messagesQueryKey,\n}: {\n value: OpenAI.Beta.Assistants.AssistantStreamEvent.ThreadRunCreated\n messagesQueryKey: MessagesQueryKey\n queryClient: QueryClient\n}) => (\n queryClient.setQueryData(\n messagesQueryKey,\n (prevData: any) => {\n if (!prevData) return prevData\n\n const [latestPage, ...pagesRest] = prevData.pages\n\n return {\n ...prevData,\n pages: [\n {\n ...latestPage,\n data: [\n {\n id: optimisticId(),\n assistant_id: value.data.assistant_id,\n content: [],\n created_at: value.data.created_at,\n attachments: [],\n metadata: {},\n status: 'in_progress',\n role: 'assistant',\n runSteps: [],\n run_id: value.data.id,\n thread_id: value.data.thread_id,\n },\n ...latestPage.data,\n ]\n },\n ...pagesRest,\n ],\n }\n }\n )\n)\n","import { QueryClient } from '@tanstack/react-query'\nimport OpenAI from 'openai'\nimport { MessagesQueryKey } from '@/types'\n\nexport const threadRunFailed = ({\n value,\n queryClient,\n messagesQueryKey,\n}: {\n value: OpenAI.Beta.Assistants.AssistantStreamEvent.ThreadRunCreated\n messagesQueryKey: MessagesQueryKey\n queryClient: QueryClient\n}) => {\n throw new Error('Failed to send your message, try again. If you are the owner, check the logs.')\n}\n","import { QueryClient } from '@tanstack/react-query'\nimport OpenAI from 'openai'\nimport { SerializedMessage, MessagesQueryKey } from '@/types'\n\nexport const threadRunStepCreated = ({\n value,\n queryClient,\n messagesQueryKey,\n}: {\n value: OpenAI.Beta.Assistants.AssistantStreamEvent.ThreadRunStepCreated\n messagesQueryKey: MessagesQueryKey\n queryClient: QueryClient\n}) => (\n queryClient.setQueryData(\n messagesQueryKey,\n (prevData: any) => {\n if (!prevData) return prevData\n\n const [latestPage, ...pagesRest] = prevData.pages\n\n return {\n ...prevData,\n pages: [\n {\n ...latestPage,\n data: latestPage.data.map((m: SerializedMessage) => {\n if (m.run_id === value.data.run_id) {\n return {\n ...m,\n runSteps: [\n value.data,\n ...m.runSteps,\n ],\n }\n }\n\n return m\n }),\n },\n ...pagesRest,\n ],\n }\n }\n )\n)\n","import { QueryClient } from '@tanstack/react-query'\nimport _ from 'lodash'\nimport { omit } from 'radash'\nimport OpenAI from 'openai'\nimport { SerializedMessage, SerializedRunStep, ThreadRunStepDeltaEvent, MessagesQueryKey } from '@/types'\n\nconst updatedToolCall = ({\n toolCall,\n delta,\n}: {\n toolCall: OpenAI.Beta.Threads.Runs.ToolCall\n delta: OpenAI.Beta.Threads.Runs.ToolCallDelta\n}) => {\n if (!toolCall) {\n return omit(delta, ['index'])\n }\n\n if (delta.type === 'function' && delta.function && toolCall.type === 'function' && toolCall.function) {\n const result = _.cloneDeep(toolCall)\n\n for (const [key, value] of Object.entries(delta.function)) {\n // @ts-ignore-next-line\n result.function[key] = `${result.function[key] ?? ''}${value}`\n }\n\n return result\n }\n\n return toolCall\n}\n\nconst updatedRunStep = ({\n runStep,\n value,\n}: {\n runStep: SerializedRunStep\n value: ThreadRunStepDeltaEvent\n}) => {\n // @ts-ignore-next-line\n if (!runStep?.step_details?.tool_calls) return runStep\n\n if (value.data.delta?.step_details?.type === 'tool_calls') {\n if (!value.data.delta.step_details.tool_calls) return runStep\n\n // @ts-ignore-next-line\n const newToolCalls = _.cloneDeep(runStep.step_details.tool_calls)\n\n value.data.delta.step_details.tool_calls.forEach((delta: OpenAI.Beta.Threads.Runs.ToolCallDelta) => (\n newToolCalls[delta.index] = updatedToolCall({\n toolCall: newToolCalls[delta.index],\n delta,\n })\n ))\n\n return {\n ...runStep,\n step_details: {\n ...runStep.step_details,\n ...value.data.delta.step_details,\n tool_calls: newToolCalls,\n },\n }\n } else {\n return runStep\n }\n}\n\n\nexport const threadRunStepDelta = ({\n value,\n queryClient,\n messagesQueryKey,\n}: {\n value: ThreadRunStepDeltaEvent\n messagesQueryKey: MessagesQueryKey\n queryClient: QueryClient\n}) => (\n queryClient.setQueryData(\n messagesQueryKey,\n (prevData: any) => {\n if (!prevData) return prevData\n\n const [latestPage, ...pagesRest] = prevData.pages\n\n return {\n ...prevData,\n pages: [\n {\n ...latestPage,\n data: latestPage.data.map((m: SerializedMessage) => {\n if (m.run_id === value.data.run_id) {\n return {\n ...m,\n runSteps: m.runSteps.map((rs: SerializedRunStep) => {\n if (rs.id === value.data.id) {\n return updatedRunStep({ runStep: rs, value })\n }\n\n return rs\n }),\n }\n }\n\n return m\n }),\n },\n ...pagesRest,\n ],\n }\n }\n )\n)\n","import { QueryClient } from '@tanstack/react-query'\nimport OpenAI from 'openai'\nimport { SerializedRunStep, SerializedMessage, MessagesQueryKey } from '@/types'\nimport { replace } from 'radash'\n\nexport const threadRunStepCompleted = ({\n value,\n queryClient,\n messagesQueryKey,\n}: {\n value: OpenAI.Beta.Assistants.AssistantStreamEvent.ThreadRunStepCompleted\n messagesQueryKey: MessagesQueryKey\n queryClient: QueryClient\n}) => (\n queryClient.setQueryData(\n messagesQueryKey,\n (prevData: any) => {\n if (!prevData) return prevData\n\n const [latestPage, ...pagesRest] = prevData.pages\n\n return {\n ...prevData,\n pages: [\n {\n ...latestPage,\n data: latestPage.data.map((m: SerializedMessage) => {\n if (m.run_id === value.data.run_id) {\n return {\n ...m,\n runSteps: replace(m.runSteps, value.data, (rs: SerializedRunStep) => rs.id === value.data.id),\n }\n }\n\n return m\n }),\n },\n ...pagesRest,\n ],\n }\n }\n )\n)\n","import { QueryClient } from '@tanstack/react-query'\nimport { ToolCall } from '@/types'\nimport _ from 'lodash'\nimport OpenAI from 'openai'\nimport { map } from 'radash'\nimport { MessagesQueryKey } from '@/types'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\n\nexport const threadRunRequiresAction = async ({\n value,\n queryClient,\n messagesQueryKey,\n superinterfaceContext,\n}: {\n value: OpenAI.Beta.Assistants.AssistantStreamEvent.ThreadRunRequiresAction & {\n data: {\n required_action: {\n type: 'submit_client_tool_outputs'\n submit_client_tool_outputs: {\n tool_calls: ToolCall[]\n }\n }\n }\n }\n messagesQueryKey: MessagesQueryKey\n queryClient: QueryClient\n superinterfaceContext: ReturnType<typeof useSuperinterfaceContext>\n}) => {\n // @ts-ignore-next-line\n if (value.data.required_action.type === 'submit_client_tool_outputs') {\n // @ts-ignore-next-line\n const toolCalls = value.data.required_action.submit_client_tool_outputs.tool_calls\n\n const toolOutputs = await map(toolCalls, async (toolCall: ToolCall) => {\n if (toolCall.type !== 'function') {\n return {\n toolCallId: toolCall.id,\n output: `Error: client tool type ${toolCall.type} is not supported.`,\n }\n }\n\n // @ts-ignore-next-line\n const fn = window[toolCall.function.name as string]\n\n if (!fn) {\n return {\n toolCallId: toolCall.id,\n output: `Error: client function ${toolCall.function.name} is not defined.`,\n }\n }\n\n const args = toolCall.function.arguments\n const parsedArgs = JSON.parse(args)\n\n let output\n\n try {\n output = await fn(parsedArgs)\n } catch (error: any) {\n output = `Error: ${error.message}`\n }\n\n return {\n toolCallId: toolCall.id,\n output,\n }\n })\n\n return fetch(`${superinterfaceContext.baseUrl}/threads/runs/submit-client-tool-outputs`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n toolOutputs,\n ...superinterfaceContext.variables,\n })\n })\n }\n}\n","import { threadCreated } from './threadCreated'\nimport { threadMessageCreated } from './threadMessageCreated'\nimport { threadMessageDelta } from './threadMessageDelta'\nimport { threadMessageCompleted } from './threadMessageCompleted'\nimport { threadRunCreated } from './threadRunCreated'\nimport { threadRunFailed } from './threadRunFailed'\nimport { threadRunStepCreated } from './threadRunStepCreated'\nimport { threadRunStepDelta } from './threadRunStepDelta'\nimport { threadRunStepCompleted } from './threadRunStepCompleted'\nimport { threadRunRequiresAction } from './threadRunRequiresAction'\n\nexport const handlers = {\n 'thread.created': threadCreated,\n 'thread.message.created': threadMessageCreated,\n 'thread.message.delta': threadMessageDelta,\n 'thread.message.completed': threadMessageCompleted,\n 'thread.run.created': threadRunCreated,\n 'thread.run.failed': threadRunFailed,\n 'thread.run.step.created': threadRunStepCreated,\n 'thread.run.step.delta': threadRunStepDelta,\n 'thread.run.step.completed': threadRunStepCompleted,\n 'thread.run.requires_action': threadRunRequiresAction,\n}\n","import OpenAI from 'openai'\nimport {\n useQueryClient,\n} from '@tanstack/react-query'\nimport { MessagesQueryKey } from '@/types'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\nimport { handlers } from './handlers'\n\nexport const handleResponse = ({\n value,\n messagesQueryKey,\n queryClient,\n superinterfaceContext,\n}: {\n value: {\n value: OpenAI.Beta.Assistants.AssistantStreamEvent\n }\n messagesQueryKey: MessagesQueryKey\n queryClient: ReturnType<typeof useQueryClient>\n superinterfaceContext: ReturnType<typeof useSuperinterfaceContext>\n}) => {\n // @ts-ignore-next-line\n const handler = handlers[value.value.event]\n\n if (!handler) {\n return console.log('Missing handler', { value })\n }\n\n return handler({\n value: value.value,\n queryClient,\n messagesQueryKey,\n superinterfaceContext,\n })\n}\n","import { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\n\nexport const body = ({\n variables,\n superinterfaceContext,\n}: {\n variables: {\n [key: string]: any\n }\n superinterfaceContext: ReturnType<typeof useSuperinterfaceContext>\n}) => {\n if (variables.threadId) return variables\n if (!variables.assistantId) return variables\n if (!superinterfaceContext.threadIdStorageOptions?.get) return variables\n\n const threadId = superinterfaceContext.threadIdStorageOptions.get({ assistantId: variables.assistantId })\n if (!threadId) return variables\n\n return {\n ...variables,\n threadId,\n }\n}\n","import _ from 'lodash'\nimport {\n useQueryClient,\n} from '@tanstack/react-query'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\nimport { useThreadContext } from '@/hooks/threads/useThreadContext'\nimport { onMutate } from './onMutate'\nimport { mutationFn } from './mutationFn'\n\nexport const mutationOptions = ({\n queryClient,\n threadContext,\n superinterfaceContext,\n onError,\n}: {\n queryClient: ReturnType<typeof useQueryClient>,\n threadContext: ReturnType<typeof useThreadContext>,\n superinterfaceContext: ReturnType<typeof useSuperinterfaceContext>,\n onError: (error: unknown) => void\n}) => {\n const mutationKey = ['createMessage', threadContext.variables]\n\n return {\n mutationFn: mutationFn({\n queryClient,\n superinterfaceContext,\n threadContext,\n }),\n onMutate: onMutate({ queryClient }),\n onError,\n ...threadContext.defaultOptions.mutations,\n ...queryClient.getMutationDefaults(mutationKey),\n mutationKey,\n }\n}\n","import { useContext } from 'react'\nimport { ToastsContext } from '@/contexts/toasts/ToastsContext'\n\nexport const useToasts = () => (\n useContext(ToastsContext)\n)\n","'use client'\nimport { createContext } from 'react'\nimport { Toast } from '@/types'\n\nexport const ToastsContext = createContext<{\n toasts: Toast[]\n addToast: (toast: Toast) => void\n}>({\n toasts: [],\n addToast: () => {},\n})\n","import {\n QueryClient,\n} from '@tanstack/react-query'\nimport { Toast } from '@/types'\nimport { useThreadContext } from '@/hooks/threads/useThreadContext'\n\nexport const createMessageDefaultOnError = ({\n queryClient,\n addToast,\n threadContext,\n}: {\n queryClient: QueryClient\n addToast: (toast: Toast) => void\n threadContext: ReturnType<typeof useThreadContext>\n}) => (error: any) => {\n if (error.name === 'AbortError') {\n queryClient.invalidateQueries({ queryKey: ['messages', threadContext.variables] })\n queryClient.invalidateQueries({ queryKey: ['runs', threadContext.variables] })\n return\n }\n\n addToast({ type: 'error', message: error.message })\n}\n","import {\n Box,\n} from '@radix-ui/themes'\n\nexport const Image = (props: JSX.IntrinsicElements['img']) => (\n <Box\n pb=\"3\"\n >\n <img\n {...props}\n style={{\n maxWidth: '100%',\n height: 'auto',\n }}\n />\n </Box>\n)\n","// list is from https://www.npmjs.com/package/video-extensions\nconst videoExtensions = [\n '3g2',\n '3gp',\n 'aaf',\n 'asf',\n 'avchd',\n 'avi',\n 'drc',\n 'flv',\n 'm2v',\n 'm3u8',\n 'm4p',\n 'm4v',\n 'mkv',\n 'mng',\n 'mov',\n 'mp2',\n 'mp4',\n 'mpe',\n 'mpeg',\n 'mpg',\n 'mpv',\n 'mxf',\n 'nsv',\n 'ogg',\n 'ogv',\n 'qt',\n 'rm',\n 'rmvb',\n 'roq',\n 'svi',\n 'vob',\n 'webm',\n 'wmv',\n 'yuv',\n]\n\nexport const isVideoSrc = ({\n src,\n}: {\n src: string\n}) => (\n videoExtensions.includes(src.split('.').pop() || '')\n)\n","export const isAudioSrc = ({\n src,\n}: {\n src: string\n}) => (\n src.endsWith('.mp3') || src.endsWith('.wav')\n)\n","import {\n Flex,\n} from '@radix-ui/themes'\nimport '@vidstack/react/player/styles/base.css'\nimport {\n VideoMimeType,\n MediaPlayer,\n MediaProvider,\n Controls,\n} from '@vidstack/react'\nimport { PlayButton } from '@/components/media/PlayButton'\nimport { VolumeButton } from '@/components/media/VolumeButton'\nimport { Time } from '@/components/media/Time'\nimport { MediaContainer } from '@/components/media/MediaContainer'\nimport { FullscreenButton } from './FullscreenButton'\n\nexport const Video = ({\n src,\n}: {\n src: string\n}) => (\n <MediaContainer>\n <MediaPlayer\n src={{\n src,\n type: `video/${src.split('.').pop()}` as VideoMimeType,\n }}\n playsInline\n hideControlsOnMouseLeave\n crossOrigin\n >\n <MediaProvider />\n\n <style>\n {`\n .superinterface-video-controls {\n opacity: 0;\n transition: opacity 0.2s ease-out;\n }\n\n .superinterface-video-controls[data-visible] {\n opacity: 1;\n }\n `}\n </style>\n <Flex\n asChild\n position=\"absolute\"\n bottom=\"0\"\n left=\"0\"\n right=\"0\"\n className=\"superinterface-video-controls\"\n p=\"3\"\n style={{\n zIndex: 10,\n background: 'var(--accent-4)',\n }}\n >\n <Controls.Root>\n <Flex\n asChild\n align=\"center\"\n gap=\"3\"\n flexGrow=\"1\"\n >\n <Controls.Group>\n <PlayButton />\n <Time />\n <VolumeButton />\n <FullscreenButton />\n </Controls.Group>\n </Flex>\n </Controls.Root>\n </Flex>\n </MediaPlayer>\n </MediaContainer>\n)\n","import {\n PlayButton as VidstackPlayButton,\n useMediaState,\n} from '@vidstack/react'\nimport {\n IconButton,\n} from '@radix-ui/themes'\nimport {\n PlayIcon,\n PauseIcon,\n} from '@radix-ui/react-icons'\n\nexport const PlayButton = () => {\n const isPaused = useMediaState('paused')\n\n return (\n <IconButton\n variant=\"ghost\"\n asChild\n >\n <VidstackPlayButton>\n {isPaused ? <PlayIcon /> : <PauseIcon />}\n </VidstackPlayButton>\n </IconButton>\n )\n}\n","import {\n MuteButton,\n useMediaState,\n useMediaRemote,\n} from '@vidstack/react'\nimport {\n IconButton,\n HoverCard,\n Slider,\n} from '@radix-ui/themes'\nimport {\n SpeakerModerateIcon,\n SpeakerOffIcon,\n} from '@radix-ui/react-icons'\n\nexport const VolumeButton = () => {\n const volume = useMediaState('volume')\n const isMuted = useMediaState('muted')\n const remote = useMediaRemote()\n\n return (\n <HoverCard.Root>\n <HoverCard.Trigger>\n <IconButton\n variant=\"ghost\"\n asChild\n >\n <MuteButton>\n {(isMuted || volume === 0) ? <SpeakerOffIcon /> : <SpeakerModerateIcon />}\n </MuteButton>\n </IconButton>\n </HoverCard.Trigger>\n <HoverCard.Content\n size=\"1\"\n side=\"top\"\n height=\"100px\"\n >\n <Slider\n size=\"1\"\n variant=\"soft\"\n orientation=\"vertical\"\n value={[volume * 100]}\n onValueChange={([value]) => (\n remote.changeVolume(value / 100)\n )}\n />\n </HoverCard.Content>\n </HoverCard.Root>\n )\n}\n","import {\n useState,\n useEffect,\n useMemo,\n} from 'react'\nimport {\n useMediaState,\n useMediaRemote,\n} from '@vidstack/react'\nimport {\n Slider,\n} from '@radix-ui/themes'\n\nexport const Time = () => {\n const time = useMediaState('currentTime')\n const duration = useMediaState('duration')\n const seeking = useMediaState('seeking')\n const canSeek = useMediaState('canSeek')\n const remote = useMediaRemote()\n\n const [value, setValue] = useState(0)\n\n useEffect(() => {\n if (seeking) return;\n setValue((time / duration) * 100);\n }, [time, duration, seeking])\n\n const step = useMemo(() => (\n (1 / duration) * 100\n ), [duration])\n\n return (\n <Slider\n size=\"1\"\n variant=\"soft\"\n value={[value]}\n disabled={!canSeek}\n step={Number.isFinite(step) ? step : 1}\n onValueChange={([value]) => {\n setValue(value)\n remote.seeking((value / 100) * duration)\n }}\n onValueCommit={([value]) => {\n remote.seek((value / 100) * duration)\n }}\n />\n )\n}\n","import {\n Card,\n Inset,\n} from '@radix-ui/themes'\n\nexport const MediaContainer = ({\n children,\n}: {\n children: React.ReactNode\n}) => (\n <Card\n mb=\"3\"\n >\n <Inset\n clip=\"padding-box\"\n style={{\n display: 'flex',\n flexDirection: 'column',\n }}\n >\n {children}\n </Inset>\n </Card>\n)\n","import {\n FullscreenButton as VidstackFullscreenButton,\n useMediaState,\n} from '@vidstack/react'\nimport {\n IconButton,\n} from '@radix-ui/themes'\nimport {\n EnterFullScreenIcon,\n ExitFullScreenIcon,\n} from '@radix-ui/react-icons'\n\nexport const FullscreenButton = () => {\n const isFullscreen = useMediaState('fullscreen')\n\n return (\n <IconButton\n variant=\"ghost\"\n asChild\n >\n <VidstackFullscreenButton>\n {isFullscreen ? <ExitFullScreenIcon /> : <EnterFullScreenIcon />}\n </VidstackFullscreenButton>\n </IconButton>\n )\n}\n","import {\n Flex,\n} from '@radix-ui/themes'\nimport '@vidstack/react/player/styles/base.css'\nimport {\n MediaPlayer,\n MediaProvider,\n Controls,\n AudioMimeType,\n} from '@vidstack/react'\nimport { PlayButton } from '@/components/media/PlayButton'\nimport { VolumeButton } from '@/components/media/VolumeButton'\nimport { Time } from '@/components/media/Time'\nimport { MediaContainer } from '@/components/media/MediaContainer'\n\nexport const Audio = ({\n src,\n}: {\n src: string\n}) => (\n <MediaContainer>\n <MediaPlayer\n src={{\n src,\n type: `audio/${src.split('.').pop()}` as AudioMimeType,\n }}\n viewType=\"audio\"\n crossOrigin\n playsInline\n >\n <MediaProvider />\n\n <Flex\n asChild\n p=\"3\"\n flexGrow=\"1\"\n style={{\n zIndex: 10,\n background: 'var(--accent-4)',\n }}\n >\n <Controls.Root>\n <Flex\n asChild\n align=\"center\"\n gap=\"3\"\n flexGrow=\"1\"\n >\n <Controls.Group>\n <PlayButton />\n <Time />\n <VolumeButton />\n </Controls.Group>\n </Flex>\n </Controls.Root>\n </Flex>\n </MediaPlayer>\n </MediaContainer>\n)\n","import { Image } from '@/components/images/Image'\nimport { isVideoSrc } from './lib/isVideoSrc'\nimport { isAudioSrc } from './lib/isAudioSrc'\nimport { Video } from './Video'\nimport { Audio } from './Audio'\n\nexport const Img = (props: JSX.IntrinsicElements['img']) => {\n if (!props.src) {\n return (\n <Image\n {...props}\n />\n )\n } else if (isVideoSrc({ src: props.src })) {\n return (\n <Video\n src={props.src!}\n />\n )\n } else if (isAudioSrc({ src: props.src })) {\n return (\n <Audio\n src={props.src!}\n />\n )\n } else {\n return (\n <Image\n {...props}\n />\n )\n }\n}\n","import {\n QuoteIcon,\n} from '@radix-ui/react-icons'\nimport OpenAI from 'openai'\nimport { AnnotationBase } from './AnnotationBase'\nimport { FilePathAnnotation } from './FilePathAnnotation'\n\nexport const Annotation = ({\n annotation,\n children,\n}: {\n annotation: OpenAI.Beta.Threads.Messages.Annotation\n children: React.ReactNode\n}) => {\n if (annotation.type === 'file_citation') {\n return (\n <AnnotationBase\n icon={<QuoteIcon />}\n content=\"File cited.\"\n />\n )\n } else if (annotation.type === 'file_path') {\n return (\n <FilePathAnnotation\n annotation={annotation}\n >\n {children}\n </FilePathAnnotation>\n )\n }\n\n return null\n}\n","import {\n IconButton,\n Popover,\n Flex,\n Text,\n} from '@radix-ui/themes'\n\nexport const AnnotationBase = ({\n icon,\n content,\n}: {\n icon: React.ReactNode,\n content: string\n}) => (\n <Popover.Root>\n <Popover.Trigger>\n <IconButton\n variant=\"soft\"\n color=\"gray\"\n size=\"1\"\n >\n {icon}\n </IconButton>\n </Popover.Trigger>\n <Popover.Content\n size=\"1\"\n >\n <Flex\n direction=\"column\"\n >\n <Text\n size=\"1\"\n color=\"gray\"\n >\n {content}\n </Text>\n </Flex>\n </Popover.Content>\n </Popover.Root>\n)\n","import OpenAI from 'openai'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\nimport { Link } from '@/contexts/markdown/MarkdownContext/lib/components/Link'\n\nexport const FilePathAnnotation = ({\n annotation,\n children,\n}: {\n annotation: OpenAI.Beta.Threads.Messages.FilePathAnnotation\n children: React.ReactNode\n}) => {\n const superinterfaceContext = useSuperinterfaceContext()\n const nextSearchParams = new URLSearchParams(superinterfaceContext.variables)\n\n return (\n <Link\n href={`${superinterfaceContext.baseUrl}/files/${annotation.file_path.file_id}/contents?${nextSearchParams}`}\n target=\"_self\"\n download\n >\n {children}\n </Link>\n )\n}\n","import OpenAI from 'openai'\nimport remarkGfm from 'remark-gfm'\nimport { remarkAnnotation } from '@/lib/remark/remarkAnnotation'\n\nexport const getRemarkPlugins = ({\n content,\n}: {\n content: OpenAI.Beta.Threads.Messages.TextContentBlock\n}) => [\n remarkAnnotation({ content }),\n remarkGfm,\n]\n","import OpenAI from 'openai'\nimport { isNumber } from 'radash'\nimport type { Node, Literal, Position } from 'unist'\nimport type { Text, Link } from 'mdast'\n// @ts-ignore-next-line\nimport flatMap from 'unist-util-flatmap'\n\ninterface AnnotationNode extends Literal {\n type: 'annotation'\n value: string\n position?: Position\n data: {\n hName: 'annotation'\n hProperties: {\n annotation: any\n }\n }\n}\n\nconst sortedAnnotations = ({\n content,\n}: {\n content: OpenAI.Beta.Threads.Messages.TextContentBlock\n}) =>\n content.text.annotations.sort((a, b) => a.start_index - b.start_index)\n\nexport const remarkAnnotation = ({\n content,\n}: {\n content: OpenAI.Beta.Threads.Messages.TextContentBlock\n}) => {\n return () => {\n return (tree: any) => {\n flatMap(tree, (node: Node) => {\n // Process text and link nodes\n if (node.type === 'text' || node.type === 'link') {\n return processNodeWithAnnotations({ node, content })\n } else {\n // Return other nodes as-is\n return [node]\n }\n })\n }\n }\n}\n\nconst processNodeWithAnnotations = ({\n node,\n content,\n}: {\n node: Node\n content: OpenAI.Beta.Threads.Messages.TextContentBlock\n}): Node[] => {\n if (!content.text?.annotations?.length) {\n return [node]\n }\n\n if (!node.position) {\n return [node]\n }\n\n const annotations = sortedAnnotations({ content })\n\n if (node.type === 'text') {\n // node is a Text node\n return processTextNode({ node: node as Text, annotations })\n } else if (node.type === 'link') {\n // node is a Link node\n const linkNode = node as Link\n // Process link node's children\n linkNode.children = flatMap(linkNode.children, (childNode: Node) => {\n if (childNode.type === 'text') {\n return processTextNode({ node: childNode as Text, annotations })\n } else {\n return [childNode]\n }\n })\n return [linkNode]\n } else {\n // Return node as-is\n return [node]\n }\n}\n\nconst processTextNode = ({\n node,\n annotations,\n}: {\n node: Text\n annotations: any[]\n}): Node[] => {\n if (!node.position || !node.value) {\n return [node]\n }\n\n const nodeStart = node.position.start.offset!\n const nodeEnd = node.position.end.offset!\n\n if (!isNumber(nodeStart) || !isNumber(nodeEnd)) {\n return [node]\n }\n\n const newNodes: Node[] = []\n let lastIndex = nodeStart\n\n annotations.forEach((annotation) => {\n const annotationStart = annotation.start_index\n const annotationEnd = annotation.end_index\n\n if (nodeEnd <= annotationStart || nodeStart >= annotationEnd) {\n return\n }\n\n const start = Math.max(nodeStart, annotationStart)\n const end = Math.min(nodeEnd, annotationEnd)\n\n if (lastIndex < start) {\n newNodes.push(createTextNode({ node, startOffset: lastIndex, endOffset: start }))\n }\n\n newNodes.push(\n createAnnotationNode({\n node,\n startOffset: start,\n endOffset: end,\n annotation,\n })\n )\n lastIndex = end\n })\n\n if (lastIndex < nodeEnd) {\n newNodes.push(createTextNode({ node, startOffset: lastIndex, endOffset: nodeEnd }))\n }\n\n return newNodes\n}\n\nconst createTextNode = ({\n node,\n startOffset,\n endOffset,\n}: {\n node: Text\n startOffset: number\n endOffset: number\n}): Text => {\n const valueStart = startOffset - node.position!.start.offset!\n const valueEnd = endOffset - node.position!.start.offset!\n\n return {\n type: 'text',\n value: node.value.slice(valueStart, valueEnd),\n position: {\n start: {\n ...node.position!.start,\n offset: startOffset,\n },\n end: {\n ...node.position!.end,\n offset: endOffset,\n },\n },\n }\n}\n\nconst createAnnotationNode = ({\n node,\n startOffset,\n endOffset,\n annotation,\n}: {\n node: Text\n startOffset: number\n endOffset: number\n annotation: any\n}): AnnotationNode => {\n const valueStart = startOffset - node.position!.start.offset!\n const valueEnd = endOffset - node.position!.start.offset!\n\n return {\n type: 'annotation',\n value: node.value.slice(valueStart, valueEnd),\n position: {\n start: {\n ...node.position!.start,\n offset: startOffset,\n },\n end: {\n ...node.position!.end,\n offset: endOffset,\n },\n },\n data: {\n hName: 'annotation',\n hProperties: {\n annotation,\n },\n },\n }\n}\n","import OpenAI from 'openai'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\nimport { Image } from '@/components/images/Image'\n\nexport const ImageFileContent = ({\n content,\n}: {\n content: OpenAI.Beta.Threads.Messages.ImageFileContentBlock\n}) => {\n const superinterfaceContext = useSuperinterfaceContext()\n const nextSearchParams = new URLSearchParams(superinterfaceContext.variables)\n\n return (\n <Image\n alt=\"\"\n src={`${superinterfaceContext.baseUrl}/files/${content.image_file.file_id}/contents?${nextSearchParams}`}\n />\n )\n}\n","import OpenAI from 'openai'\nimport { TextContent } from './TextContent'\nimport { ImageFileContent } from './ImageFileContent'\n\nexport const ContentPart = ({\n content,\n}: {\n content: OpenAI.Beta.Threads.Messages.Message['content'][0]\n}) => {\n if (content.type === 'text') {\n return (\n <TextContent\n content={content}\n />\n )\n }\n\n if (content.type === 'image_file') {\n return (\n <ImageFileContent\n content={content}\n />\n )\n }\n\n return null\n}\n","'use client'\nimport { useEffect } from 'react'\nimport { useMessages } from '@/hooks/messages/useMessages'\nimport { useMessageGroups } from '@/hooks/messageGroups/useMessageGroups'\nimport { MessageGroup as MessageGroupType } from '@/types'\nimport { MessagesSkeleton } from '@/components/skeletons/MessagesSkeleton'\nimport { useToasts } from '@/hooks/toasts/useToasts'\nimport { MessageGroup } from './MessageGroup'\n\nexport const Content = () => {\n const {\n messages,\n isLoading,\n isLoadingError,\n } = useMessages()\n\n const { addToast } = useToasts()\n\n const { messageGroups } = useMessageGroups({\n messages,\n })\n\n useEffect(() => {\n if (isLoadingError) {\n addToast({ type: 'error', message: 'Could not load messages. Please try again.' })\n }\n }, [isLoadingError, addToast])\n\n if (isLoading || isLoadingError) {\n return (\n <MessagesSkeleton />\n )\n }\n\n return (\n <>\n {messageGroups.map((messageGroup: MessageGroupType) => (\n <MessageGroup\n key={messageGroup.id}\n messageGroup={messageGroup}\n />\n ))}\n </>\n )\n}\n","import { useMemo } from 'react'\nimport { messageGroups as getMessageGroups } from './lib/messageGroups'\nimport { SerializedMessage } from '@/types'\n\ntype Args = {\n messages: SerializedMessage[]\n}\n\nexport const useMessageGroups = ({\n messages,\n}: Args) => (\n useMemo(\n () => ({\n messageGroups: getMessageGroups({ messages }),\n }),\n [messages]\n )\n)\n","import _ from 'lodash'\nimport { last } from 'radash'\nimport { SerializedMessage, MessageGroup } from '@/types'\nimport { order } from '@/lib/messages/order'\nimport { newGroup } from './newGroup'\n\ntype Args = {\n messages: SerializedMessage[]\n}\n\nexport const messageGroups = ({\n messages,\n}: Args) =>\n _.reduce(\n order({ messages }),\n (groups: MessageGroup[], message: SerializedMessage) => {\n const group = last(groups)\n\n if (!group) return newGroup({ groups, message })\n\n if (group.role !== message.role) {\n return newGroup({\n groups,\n message,\n })\n }\n\n return [\n ..._.dropRight(groups),\n {\n ...group,\n messages: [...group.messages, message],\n },\n ]\n },\n []\n )\n","import { sort } from 'radash'\nimport { SerializedMessage } from '@/types'\n\ntype Args = {\n messages: SerializedMessage[]\n}\n\nexport const order = ({ messages }: Args) =>\n sort(messages, m => m.created_at, true)\n","import { SerializedMessage } from '@/types'\n\ntype Args = {\n message: SerializedMessage\n}\n\nexport const newGroupItem = ({ message }: Args) => ({\n id: message.id,\n role: message.role,\n createdAt: message.created_at,\n messages: [message],\n})\n","import { SerializedMessage, MessageGroup } from '@/types'\nimport { newGroupItem } from './newGroupItem'\n\ntype Args = {\n groups: MessageGroup[]\n message: SerializedMessage\n}\n\nexport const newGroup = ({ groups, message }: Args) => [\n ...groups,\n newGroupItem({\n message,\n }),\n]\n","import { forwardRef } from 'react'\nimport {\n Flex,\n Avatar,\n Box,\n Skeleton,\n} from '@radix-ui/themes'\nimport { MessageGroupBase } from '@/components/messageGroups/MessageGroupBase'\nimport { Name } from '@/components/messageGroups/MessageGroupBase/Name'\n\nexport const MessagesSkeleton = forwardRef(function MessagesSkeleton(_props, ref) {\n return (\n <MessageGroupBase\n // @ts-ignore-next-line\n ref={ref}\n >\n <Skeleton loading>\n <Avatar\n fallback={<Flex />}\n size=\"1\"\n />\n </Skeleton>\n\n <Box\n pb=\"3\"\n >\n <Name>\n <Skeleton\n loading\n style={{\n width: '128px',\n }}\n />\n </Name>\n\n <Skeleton\n loading\n style={{\n width: '256px',\n }}\n />\n\n <Skeleton\n loading\n style={{\n width: '256px',\n marginTop: 'var(--space-2)',\n }}\n />\n\n <Skeleton\n loading\n style={{\n width: '256px',\n marginTop: 'var(--space-2)',\n }}\n />\n </Box>\n </MessageGroupBase>\n )\n})\n","import { forwardRef } from 'react'\nimport {\n Flex,\n Container,\n} from '@radix-ui/themes'\n\ntype Args = {\n children: React.ReactNode\n}\n\nexport const MessageGroupBase = forwardRef(function MessageGroupBase({\n children,\n}: Args, ref: React.Ref<HTMLDivElement>) {\n return (\n <Container\n ref={ref}\n size=\"2\"\n flexGrow=\"0\"\n >\n <Flex\n flexShrink=\"0\"\n gap=\"3\"\n >\n {children}\n </Flex>\n </Container>\n )\n})\n","import {\n Flex,\n Text,\n} from '@radix-ui/themes'\n\ntype Args = {\n children: React.ReactNode\n}\n\nexport const Name = ({\n children,\n}: Args) => (\n <Flex\n align=\"center\"\n height=\"var(--space-5)\"\n >\n <Text\n size=\"2\"\n weight=\"bold\"\n >\n {children}\n </Text>\n </Flex>\n)\n","'use client'\nimport { useContext } from 'react'\nimport {\n Box,\n} from '@radix-ui/themes'\nimport { MessageGroupBase } from '@/components/messageGroups/MessageGroupBase'\nimport { Name } from '@/components/messageGroups/MessageGroupBase/Name'\nimport { AssistantAvatar } from '@/components/messageGroups/MessageGroupBase/AssistantAvatar'\nimport { AssistantNameContext } from '@/contexts/assistants/AssistantNameContext'\nimport { UserAvatar } from '@/components/messageGroups/MessageGroupBase/UserAvatar'\nimport { MessageGroup as MessageGroupType } from '@/types'\nimport { Content } from './Content'\n\ntype Args = {\n messageGroup: MessageGroupType\n}\n\nexport const MessageGroup = ({\n messageGroup,\n}: Args) => {\n const assistantNameContext = useContext(AssistantNameContext)\n\n return (\n <MessageGroupBase>\n {messageGroup.role === 'user' ? (\n <UserAvatar />\n ) : (\n <AssistantAvatar />\n )}\n\n <Box flexGrow=\"1\">\n <Name>\n {messageGroup.role === 'user' ? 'You' : assistantNameContext}\n </Name>\n\n <Content\n messageGroup={messageGroup}\n />\n </Box>\n </MessageGroupBase>\n )\n}\n","'use client'\nimport { useContext } from 'react'\nimport {\n Flex,\n} from '@radix-ui/themes'\nimport { AssistantAvatarContext } from '@/contexts/assistants/AssistantAvatarContext'\n\nexport const AssistantAvatar = () => {\n const AssistantAvatarContextValue = useContext(AssistantAvatarContext)\n\n return (\n <Flex\n flexShrink=\"0\"\n height=\"24px\"\n width=\"24px\"\n style={{\n borderRadius: 'var(--radius-3)',\n overflow: 'hidden',\n }}\n >\n {AssistantAvatarContextValue}\n </Flex>\n )\n}\n","'use client'\nimport { createContext } from 'react'\nimport {\n Avatar,\n} from '@radix-ui/themes'\nimport {\n LightningBoltIcon,\n} from '@radix-ui/react-icons'\n\nexport const AssistantAvatarContext = createContext(\n <Avatar\n fallback={<LightningBoltIcon />}\n size=\"1\"\n />\n)\n","'use client'\nimport { createContext } from 'react'\n\nexport const AssistantNameContext = createContext('Assistant')\n","'use client'\nimport { useContext } from 'react'\nimport {\n Flex,\n} from '@radix-ui/themes'\nimport { UserAvatarContext } from '@/contexts/users/UserAvatarContext'\n\nexport const UserAvatar = () => {\n const UserAvatarContextValue = useContext(UserAvatarContext)\n\n return (\n <Flex\n flexShrink=\"0\"\n height=\"24px\"\n width=\"24px\"\n style={{\n borderRadius: 'var(--radius-3)',\n overflow: 'hidden',\n }}\n >\n {UserAvatarContextValue}\n </Flex>\n )\n}\n","'use client'\nimport { createContext } from 'react'\nimport {\n Avatar,\n} from '@radix-ui/themes'\nimport {\n PersonIcon,\n} from '@radix-ui/react-icons'\n\nexport const UserAvatarContext = createContext(\n <Avatar\n fallback={<PersonIcon />}\n size=\"1\"\n />\n)\n","import { Flex } from '@radix-ui/themes'\nimport { MessageGroup } from '@/types'\nimport { Message } from '@/components/threads/Thread/Message'\n\ntype Args = {\n messageGroup: MessageGroup\n}\n\nexport const Content = ({\n messageGroup,\n}: Args) => (\n <Flex\n direction=\"column-reverse\"\n >\n {messageGroup.messages.map((message) => (\n <Message\n key={message.id}\n message={message}\n />\n ))}\n </Flex>\n)\n","import { useMemo } from 'react'\nimport { StartingSkeleton } from '@/components/skeletons/StartingSkeleton'\nimport { useLatestMessage } from '@/hooks/messages/useLatestMessage'\nimport { isOptimistic } from '@/lib/optimistic/isOptimistic'\nimport { useIsMutatingMessage } from '@/hooks/messages/useIsMutatingMessage'\n\nexport const Progress = () => {\n const { latestMessage } = useLatestMessage()\n const isMutatingMessage = useIsMutatingMessage()\n\n const isVisible = useMemo(() => {\n if (!latestMessage) return false\n if (latestMessage.role !== 'user') return false\n if (latestMessage.status === 'in_progress') return false\n if (!isOptimistic({ id: latestMessage.id })) return false\n if (!isMutatingMessage) return false\n\n return true\n }, [latestMessage, isMutatingMessage])\n\n if (!isVisible) return null\n\n return (\n <StartingSkeleton />\n )\n}\n","'use client'\nimport { useContext } from 'react'\nimport { Box } from '@radix-ui/themes'\nimport { StartingContentSkeleton } from '@/components/skeletons/StartingContentSkeleton'\nimport { MessageGroupBase } from '@/components/messageGroups/MessageGroupBase'\nimport { Name } from '@/components/messageGroups/MessageGroupBase/Name'\nimport { AssistantAvatar } from '@/components/messageGroups/MessageGroupBase/AssistantAvatar'\nimport { AssistantNameContext } from '@/contexts/assistants/AssistantNameContext'\n\ntype Args = {\n children?: React.ReactNode\n}\n\nexport const StartingSkeleton = ({\n children,\n}: Args) => {\n const assistantNameContext = useContext(AssistantNameContext)\n\n return (\n <MessageGroupBase>\n <AssistantAvatar />\n\n <Box>\n <Name>\n {assistantNameContext}\n </Name>\n\n {children}\n\n <StartingContentSkeleton />\n </Box>\n </MessageGroupBase>\n )\n}\n","'use client'\n\nimport { Flex } from '@radix-ui/themes'\nimport { useInfiniteScroll } from '@/hooks/misc/useInfiniteScroll'\nimport { useMessages } from '@/hooks/messages/useMessages'\nimport type { StyleProps } from '@/types'\n\nexport const Root = ({\n children,\n style,\n className,\n}: {\n children: React.ReactNode\n} & StyleProps) => {\n const {\n isFetchingNextPage,\n hasNextPage,\n fetchNextPage,\n } = useMessages()\n\n const { containerRef, loaderRef } = useInfiniteScroll({\n isFetchingNextPage,\n hasNextPage,\n fetchNextPage,\n })\n\n return (\n <Flex\n ref={containerRef}\n direction=\"column-reverse\"\n flexGrow=\"1\"\n style={{\n overflow: 'auto',\n ...(style ?? {}),\n }}\n className={className}\n >\n {children}\n\n {hasNextPage && (\n <Flex\n ref={loaderRef}\n />\n )}\n\n <Flex\n flexShrink=\"0\"\n flexGrow=\"1\"\n />\n </Flex>\n )\n}\n","import { useRef } from 'react'\nimport { useInView } from 'react-intersection-observer'\nimport { useThrottledEffect } from '@/hooks/misc/useThrottledEffect'\n\ntype Args = {\n isFetchingNextPage: boolean\n hasNextPage: boolean\n fetchNextPage: () => void\n}\n\nexport const useInfiniteScroll = ({\n isFetchingNextPage,\n hasNextPage,\n fetchNextPage,\n}: Args) => {\n const containerRef = useRef(null)\n\n const { ref: loaderRef, inView } = useInView({\n root: containerRef.current,\n rootMargin: '0px',\n threshold: 0.1,\n })\n\n useThrottledEffect(\n () => {\n if (isFetchingNextPage) return\n if (!inView) return\n if (!hasNextPage) return\n\n fetchNextPage()\n },\n 500,\n [inView, isFetchingNextPage, hasNextPage, fetchNextPage]\n )\n\n return {\n containerRef,\n loaderRef,\n inView,\n }\n}\n","import _ from 'lodash'\nimport { useRef, useEffect, useCallback } from 'react'\n\nexport const useThrottledEffect = (cb: Function, delay: number, additionalDeps: any[]) => {\n const cbRef = useRef(cb)\n\n const throttledCb = useCallback(\n _.throttle((...args: any[]) => cbRef.current(...args), delay, {\n leading: true,\n trailing: true,\n }),\n [delay]\n )\n useEffect(() => {\n cbRef.current = cb\n })\n // set additionalDeps to execute effect, when other values change (not only on delay change)\n useEffect(throttledCb, [throttledCb, ...additionalDeps])\n}\n","'use client'\nimport { useMessages } from '@/hooks/messages/useMessages'\nimport { MessagesSkeleton } from '@/components/skeletons/MessagesSkeleton'\n\nexport const NextPageSkeleton = () => {\n const {\n hasNextPage,\n } = useMessages()\n\n if (!hasNextPage) {\n return null\n }\n\n return (\n <MessagesSkeleton />\n )\n}\n","'use client'\n\nimport {\n ArrowUpIcon,\n StopIcon,\n} from '@radix-ui/react-icons'\nimport {\n IconButton,\n Flex,\n} from '@radix-ui/themes'\nimport { useMessageFormContext } from '@/hooks/messages/useMessageFormContext'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\nimport type { StyleProps } from '@/types'\n\nconst Root = ({\n children,\n style,\n className,\n}: {\n children: React.ReactNode\n} & StyleProps) => (\n <Flex\n flexShrink=\"0\"\n align=\"end\"\n style={style}\n className={className}\n >\n {children}\n </Flex>\n)\n\nconst Button = (props: StyleProps) => {\n const superinterfaceContext = useSuperinterfaceContext()\n const { isDisabled, isLoading, isFileLoading } = useMessageFormContext()\n\n if (isLoading) {\n return (\n <IconButton\n type=\"button\"\n onClick={() => superinterfaceContext.createMessageAbortControllerRef.current?.abort()}\n {...props}\n >\n <StopIcon />\n </IconButton>\n )\n }\n\n return (\n <IconButton\n type=\"submit\"\n disabled={isDisabled || isFileLoading}\n {...props}\n >\n <ArrowUpIcon />\n </IconButton>\n )\n}\n\nexport const Submit = (props: StyleProps) => (\n <Root {...props}>\n <Button />\n </Root>\n)\n\nSubmit.Root = Root\nSubmit.Button = Button\n","import { useContext } from 'react'\nimport { MessageFormContext } from '@/contexts/messages/MessageFormContext'\n\nexport const useMessageFormContext = () => (\n useContext(MessageFormContext)\n)\n","'use client'\nimport OpenAI from 'openai'\nimport { createContext, Dispatch, SetStateAction } from 'react'\n\nexport const MessageFormContext = createContext({\n content: '',\n isDisabled: false,\n isLoading: false,\n files: [] as OpenAI.Files.FileObject[],\n setFiles: (() => {}) as Dispatch<SetStateAction<OpenAI.Files.FileObject[]>>,\n isFileLoading: false,\n})\n","'use client'\nimport OpenAI from 'openai'\nimport {\n useQueryClient,\n} from '@tanstack/react-query'\nimport { useMemo, useState } from 'react'\nimport { useForm, SubmitHandler, FormProvider } from 'react-hook-form'\nimport { Box } from '@radix-ui/themes'\nimport { useLatestMessage } from '@/hooks/messages/useLatestMessage'\nimport { useCreateMessage } from '@/hooks/messages/useCreateMessage'\nimport { useThreadContext } from '@/hooks/threads/useThreadContext'\nimport { formOptions } from './lib/formOptions'\nimport { MessageFormContext } from '@/contexts/messages/MessageFormContext'\nimport { useToasts } from '@/hooks/toasts/useToasts'\nimport { useIsMutatingMessage } from '@/hooks/messages/useIsMutatingMessage'\nimport { partob } from 'radash'\nimport { isOptimistic } from '@/lib/optimistic/isOptimistic'\nimport { createMessageDefaultOnError } from '@/lib/errors/createMessageDefaultOnError'\nimport type { StyleProps } from '@/types'\n\ntype Inputs = {\n content: string\n attachments?: OpenAI.Beta.Threads.Message.Attachment[]\n}\n\nexport const Root = ({\n children,\n onSubmit: onSubmitArg,\n isDisabled: isDisabledArg,\n style,\n className,\n}: {\n children: React.ReactNode\n onSubmit?: SubmitHandler<Inputs & { reset: any, createMessage: any }>\n isDisabled?: boolean\n} & StyleProps) => {\n const [files, setFiles] = useState<OpenAI.Files.FileObject[]>([])\n const formProps = useForm<Inputs>(formOptions)\n\n const {\n handleSubmit,\n formState: { isSubmitting },\n reset,\n watch,\n } = formProps\n\n const { addToast } = useToasts()\n const queryClient = useQueryClient()\n const threadContext = useThreadContext()\n\n const { createMessage } = useCreateMessage({\n onError: createMessageDefaultOnError({\n queryClient,\n addToast,\n threadContext,\n }),\n })\n\n const isMutatingMessage = useIsMutatingMessage()\n\n const isFileLoading = useMemo(() => (\n files.some((file) => isOptimistic({ id: file.id }))\n ), [files])\n\n const isLoading = useMemo(() => (\n isMutatingMessage || isSubmitting\n ), [\n isMutatingMessage,\n isSubmitting,\n ])\n\n const { latestMessage } = useLatestMessage()\n\n const isDisabled = useMemo(() => (\n // @ts-ignore-next-line\n latestMessage?.metadata?.isBlocking || isDisabledArg\n ), [latestMessage, isDisabledArg])\n\n const onSubmit: SubmitHandler<Inputs> = onSubmitArg ? partob(onSubmitArg, { reset, createMessage }) : async (data) => {\n if (isFileLoading) return\n if (isLoading) return\n if (isDisabled) return\n\n reset()\n setFiles([])\n\n const attachments = files.map((file) => ({\n file_id: file.id,\n tools: [\n {\n type: 'file_search',\n },\n ],\n }))\n\n await createMessage({\n // @ts-ignore-next-line\n content: data.content,\n ...(attachments.length ? { attachments } : {}),\n })\n }\n\n const content = watch('content')\n\n return (\n <MessageFormContext.Provider\n value={{\n isDisabled,\n isLoading,\n files,\n setFiles,\n isFileLoading,\n content,\n }}\n >\n <FormProvider {...formProps}>\n <Box\n asChild\n flexShrink=\"0\"\n style={style}\n className={className}\n >\n <form\n onSubmit={handleSubmit(onSubmit)}\n >\n {children}\n </form>\n </Box>\n </FormProvider>\n </MessageFormContext.Provider>\n )\n}\n","import { z } from 'zod'\nimport { zodResolver } from '@hookform/resolvers/zod'\n\nconst schema = z.object({\n content: z.string().min(1),\n})\n\nexport const formOptions = {\n resolver: zodResolver(schema),\n}\n","'use client'\nimport { useFormContext } from 'react-hook-form'\nimport {\n Container as RadixContainer,\n Flex,\n} from '@radix-ui/themes'\nimport { Control } from './Control'\nimport { Files } from './Files'\nimport type { StyleProps } from '@/types'\n\nconst Root = ({\n children,\n className,\n style,\n}: {\n children: React.ReactNode\n} & StyleProps) => {\n const {\n formState: {\n errors,\n },\n } = useFormContext()\n\n return (\n <RadixContainer\n size=\"2\"\n flexGrow=\"0\"\n className={className}\n style={style}\n >\n <Flex\n direction=\"column\"\n flexShrink=\"0\"\n >\n <Flex\n direction=\"column\"\n flexShrink=\"0\"\n >\n <Flex\n style={{\n borderRadius: 'var(--radius-2)',\n borderWidth: '1px',\n borderStyle: 'solid',\n borderColor: errors.content ? 'var(--red-9)' : 'var(--gray-5)',\n ...(errors.content ? { backgroundColor: 'var(--red-2)' } : {}),\n }}\n p=\"2\"\n pl=\"3\"\n wrap=\"wrap\"\n >\n {children}\n </Flex>\n </Flex>\n </Flex>\n </RadixContainer>\n )\n}\n\nexport const Field = {\n Root,\n Control,\n Files,\n}\n","import {\n Flex,\n} from '@radix-ui/themes'\nimport { useFormContext } from 'react-hook-form'\nimport { usePrevious } from '@/hooks/misc/usePrevious'\nimport { useContext, useMemo, useRef, useEffect } from 'react'\nimport { AssistantNameContext } from '@/contexts/assistants/AssistantNameContext'\nimport { TextareaBase } from '@/components/textareas/TextareaBase'\nimport { useMessageFormContext } from '@/hooks/messages/useMessageFormContext'\nimport type { StyleProps } from '@/types'\n\nconst Root = ({\n children,\n style,\n className,\n}: {\n children: React.ReactNode\n} & StyleProps) => (\n <Flex\n flexGrow=\"1\"\n pt=\"4px\"\n style={style}\n className={className}\n >\n {children}\n </Flex>\n)\n\nconst Input = (props: Omit<StyleProps, 'style'> & {\n style?: Omit<React.CSSProperties, 'minHeight' | 'maxHeight' | 'height'>\n placeholder?: string\n}) => {\n const assistantNameContext = useContext(AssistantNameContext)\n const {\n register,\n } = useFormContext()\n\n const { isDisabled, isLoading } = useMessageFormContext()\n\n const isSubmitDisabled = useMemo(() => (\n isDisabled || isLoading\n ), [isDisabled, isLoading])\n\n const isDisabledPrevious = usePrevious(isDisabled)\n\n const textareaRef = useRef<HTMLTextAreaElement>(null)\n const textareaProps = register('content')\n\n useEffect(() => {\n if (isDisabled) return\n if (!isDisabledPrevious) return\n if (!textareaRef.current) return\n\n textareaRef.current.focus()\n }, [isDisabled, isDisabledPrevious, textareaProps])\n\n return (\n <TextareaBase\n minRows={1}\n placeholder={props.placeholder ?? `Message ${assistantNameContext}...`}\n disabled={isDisabled}\n onKeyDown={(e: any) => {\n if (e.key === 'Enter' && !e.shiftKey) {\n e.preventDefault()\n\n if (isSubmitDisabled) return\n e.currentTarget.form?.requestSubmit()\n }\n }}\n {...textareaProps}\n {...props}\n ref={(e: any) => {\n textareaProps.ref(e)\n // @ts-ignore-next-line\n textareaRef.current = e\n }}\n />\n )\n}\n\nexport const Control = (props: StyleProps) => (\n <Root {...props}>\n <Input />\n </Root>\n)\n\nControl.Root = Root\nControl.Input = Input\n","import { useEffect, useRef } from 'react'\n\nexport const usePrevious = <T,>(state: T): T | undefined => {\n const ref = useRef<T>()\n\n useEffect(() => {\n ref.current = state\n })\n\n return ref.current\n}\n","import { forwardRef } from 'react'\nimport TextareaAutosize from 'react-textarea-autosize'\nimport type { StyleProps } from '@/types'\n\ntype Props = React.ComponentProps<typeof TextareaAutosize> & StyleProps\n\nexport const TextareaBase = forwardRef(function TextareaBase({\n style,\n className,\n ...rest\n}: Props, ref) {\n return (\n <>\n <style>\n {`.superinterface-textarea { min-height: inherit; height: 30px; }\n.superinterface-textarea::placeholder { color: var(--gray-a10); }`}\n </style>\n\n <TextareaAutosize\n // @ts-ignore-next-line\n ref={ref}\n className={`rt-reset superinterface-textarea ${className ?? ''}`}\n style={{\n border: 0,\n outline: 0,\n boxSizing: 'border-box',\n resize: 'none',\n color: 'var(--gray-12)',\n flexGrow: 1,\n display: 'flex',\n ...(style ?? {}),\n }}\n {...rest}\n />\n </>\n )\n})\n","import {\n Flex,\n Card,\n Spinner,\n Text,\n IconButton,\n} from '@radix-ui/themes'\nimport {\n FileIcon,\n Cross2Icon,\n} from '@radix-ui/react-icons'\nimport { useMessageFormContext } from '@/hooks/messages/useMessageFormContext'\nimport { isOptimistic } from '@/lib/optimistic/isOptimistic'\nimport type { StyleProps } from '@/types'\n\nexport const Preview = (props: StyleProps) => {\n const { files, setFiles } = useMessageFormContext()\n\n if (!files.length) {\n return null\n }\n\n return (\n <Flex\n flexBasis=\"100%\"\n direction=\"column\"\n pb=\"2\"\n gap=\"1\"\n {...props}\n >\n {files.map((file) => (\n <Card\n key={file.id}\n variant=\"ghost\"\n >\n <Flex\n align=\"center\"\n justify=\"between\"\n gap=\"1\"\n >\n <Flex\n align=\"center\"\n gap=\"1\"\n flexShrink=\"1\"\n minWidth=\"0\"\n maxWidth=\"250px\"\n >\n <Flex\n flexShrink=\"0\"\n >\n <Spinner\n loading={isOptimistic({ id: file.id })}\n >\n <FileIcon />\n </Spinner>\n </Flex>\n\n <Text\n size=\"2\"\n truncate\n wrap=\"nowrap\"\n >\n {file.filename}\n </Text>\n </Flex>\n\n <Flex\n flexShrink=\"0\"\n >\n <IconButton\n onClick={() => (\n setFiles((prev) => (\n prev.filter((prevFile) => prevFile.id !== file.id)\n ))\n )}\n color=\"gray\"\n variant=\"ghost\"\n size=\"1\"\n >\n <Cross2Icon />\n </IconButton>\n </Flex>\n </Flex>\n </Card>\n ))}\n </Flex>\n )\n}\n","'use client'\n\nimport type OpenAI from 'openai'\nimport { useCallback } from 'react'\nimport { omit } from 'radash'\nimport dayjs from 'dayjs'\nimport { optimisticId } from '@/lib/optimistic/optimisticId'\nimport {\n FilePlusIcon,\n} from '@radix-ui/react-icons'\nimport {\n IconButton,\n Flex,\n} from '@radix-ui/themes'\nimport { useToasts } from '@/hooks/toasts/useToasts'\nimport { useMessageFormContext } from '@/hooks/messages/useMessageFormContext'\nimport { useCreateFile } from '@/hooks/files/useCreateFile'\nimport type { StyleProps } from '@/types'\n\nconst accept = `.c,text/x-c,\n.cs,text/x-csharp,\n.cpp,text/x-c++,\n.doc,application/msword,\n.docx,application/vnd.openxmlformats-officedocument.wordprocessingml.document,\n.html,text/html,\n.java,text/x-java,\n.json,application/json,\n.md,text/markdown,\n.pdf,application/pdf,\n.php,text/x-php,\n.pptx,application/vnd.openxmlformats-officedocument.presentationml.presentation,\n.py,text/x-python,\n.py,text/x-script.python,\n.rb,text/x-ruby,\n.tex,text/x-tex,\n.txt,text/plain,\n.css,text/css,\n.js,text/javascript,\n.sh,application/x-sh,\n.ts,application/typescript`\n\nexport const Control = (props: StyleProps) => {\n const { isDisabled, isLoading, setFiles } = useMessageFormContext()\n const { createFile } = useCreateFile()\n const { addToast } = useToasts()\n\n const onChange = useCallback(async (event: React.ChangeEvent<HTMLInputElement>) => {\n const fileObjects = event.target.files\n if (!fileObjects) return\n\n const newFiles = Array.from(fileObjects).map((fileObject) => ({\n id: optimisticId(),\n filename: fileObject.name,\n object: 'file' as 'file',\n purpose: 'assistants' as 'assistants',\n created_at: dayjs().unix(),\n bytes: fileObject.size,\n status: 'processed' as 'processed',\n fileObject,\n }))\n\n setFiles((prev: OpenAI.Files.FileObject[]) => [\n ...prev,\n ...newFiles.map((file) => omit(file, ['fileObject'])),\n ])\n\n for await (const newFile of newFiles) {\n await createFile({\n file: newFile.fileObject,\n },\n {\n onSuccess: ({\n file,\n }: {\n file: OpenAI.Files.FileObject\n }) => (\n setFiles((prev) => ([\n ...prev.filter((prevFile) => prevFile.id !== newFile.id),\n file,\n ]))\n ),\n onError: () => {\n addToast({ type: 'error', message: 'Could not upload file. Please try again.' })\n setFiles((prev) => (\n prev.filter((prevFile) => prevFile.id !== newFile.id)\n ))\n },\n })\n }\n }, [addToast, createFile, setFiles])\n\n return (\n <Flex\n pt=\"2\"\n pr=\"2\"\n flexGrow=\"0\"\n {...props}\n >\n <IconButton\n type=\"button\"\n variant=\"ghost\"\n color=\"gray\"\n disabled={isDisabled || isLoading}\n style={{\n position: 'relative',\n overflow: 'hidden',\n }}\n >\n <FilePlusIcon />\n <input\n type=\"file\"\n multiple\n accept={accept}\n onChange={onChange}\n style={{\n cursor: 'pointer',\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n opacity: 0,\n }}\n />\n </IconButton>\n </Flex>\n )\n}\n","import { partob } from 'radash'\nimport {\n useMutation,\n useQueryClient,\n} from '@tanstack/react-query'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\nimport { useThreadContext } from '@/hooks/threads/useThreadContext'\nimport { mutationOptions } from './lib/mutationOptions'\n\nexport const useCreateFile = ({\n onError = () => {},\n}: {\n onError?: (error: unknown) => void\n} = {\n onError: () => {},\n}) => {\n const queryClient = useQueryClient()\n const superinterfaceContext = useSuperinterfaceContext()\n const threadContext = useThreadContext()\n\n const props = useMutation(mutationOptions({\n queryClient,\n threadContext,\n superinterfaceContext,\n onError,\n }))\n\n return {\n ...props,\n createFile: (...args: any[]) => {\n const [firstArg, ...restArgs] = args\n return props.mutateAsync({\n ...threadContext.variables,\n ...firstArg,\n }, ...restArgs)\n },\n }\n}\n","export const formData = (variables: any) => {\n const data = new FormData()\n\n for (const key in variables) {\n data.append(key, variables[key])\n }\n\n return data\n}\n","import { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\nimport { formData } from './formData'\n\nexport const body = ({\n variables,\n superinterfaceContext,\n}: {\n variables: {\n [key: string]: any\n }\n superinterfaceContext: ReturnType<typeof useSuperinterfaceContext>\n}) => {\n if (variables.threadId) return formData(variables)\n if (!variables.assistantId) return formData(variables)\n if (!superinterfaceContext.threadIdStorageOptions?.get) return formData(variables)\n\n const threadId = superinterfaceContext.threadIdStorageOptions.get({ assistantId: variables.assistantId })\n if (!threadId) return formData(variables)\n\n return formData({\n ...variables,\n threadId,\n })\n}\n","import {\n useQueryClient,\n} from '@tanstack/react-query'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\nimport { useThreadContext } from '@/hooks/threads/useThreadContext'\nimport { body } from './body'\n\nexport const mutationFn = ({\n superinterfaceContext,\n queryClient,\n threadContext,\n}: {\n superinterfaceContext: ReturnType<typeof useSuperinterfaceContext>\n queryClient: ReturnType<typeof useQueryClient>\n threadContext: ReturnType<typeof useThreadContext>\n}) => async (variables: {\n content: string\n [key: string]: any\n}) => {\n const response = await fetch(`${superinterfaceContext.baseUrl}/files`, {\n method: 'POST',\n body: body({\n variables,\n superinterfaceContext,\n }),\n })\n\n const result = await response.json()\n return result\n}\n","import _ from 'lodash'\nimport {\n useQueryClient,\n} from '@tanstack/react-query'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\nimport { useThreadContext } from '@/hooks/threads/useThreadContext'\nimport { mutationFn } from './mutationFn'\n\nexport const mutationOptions = ({\n queryClient,\n threadContext,\n superinterfaceContext,\n onError,\n}: {\n queryClient: ReturnType<typeof useQueryClient>,\n threadContext: ReturnType<typeof useThreadContext>,\n superinterfaceContext: ReturnType<typeof useSuperinterfaceContext>,\n onError: (error: unknown) => void\n}) => {\n const mutationKey = ['createFile', threadContext.variables]\n\n return {\n mutationFn: mutationFn({\n queryClient,\n superinterfaceContext,\n threadContext,\n }),\n onError,\n ...threadContext.defaultOptions.mutations,\n ...queryClient.getMutationDefaults(mutationKey),\n mutationKey,\n }\n}\n","import { Preview } from './Preview'\nimport { Control } from './Control'\n\nexport const Files = {\n Preview,\n Control,\n}\n","import type { StyleProps } from '@/types'\nimport { Submit } from './Submit'\nimport { Root } from './Root'\nimport { Field } from './Field'\n\nexport const MessageForm = (props: StyleProps) => (\n <Root {...props}>\n <Field.Root>\n <Field.Control />\n <Submit />\n </Field.Root>\n </Root>\n)\n\nMessageForm.Root = Root\nMessageForm.Field = Field\nMessageForm.Submit = Submit\n","import { Flex } from '@radix-ui/themes'\nimport {\n Provider,\n Args as ThreadProviderArgs,\n} from '@/components/threads/Thread/Provider'\nimport type { StyleProps } from '@/types'\nimport { ToastsProvider } from '@/components/toasts/ToastsProvider'\n\nexport type Args = ThreadProviderArgs & StyleProps\n\nexport const Root = ({\n children,\n style,\n className,\n ...rest\n}: Args) => (\n <ToastsProvider bottom=\"var(--space-9)\">\n <Provider {...rest}>\n <Flex\n direction=\"column\"\n flexGrow=\"1\"\n className={className}\n style={style}\n >\n {children}\n </Flex>\n </Provider>\n </ToastsProvider>\n)\n","'use client'\n\nimport { SuperinterfaceProvider } from '@/components/core/SuperinterfaceProvider'\nimport type { Args as SuperinterfaceProviderArgs } from '@/components/core/SuperinterfaceProvider'\n\nexport type Args = SuperinterfaceProviderArgs\nexport const Provider = SuperinterfaceProvider\n","import { useState, useCallback } from 'react'\nimport * as Toast from '@radix-ui/react-toast'\nimport { ToastsContext } from '@/contexts/toasts/ToastsContext'\nimport { CustomToast } from './CustomToast'\nimport { Toast as ToastType } from '@/types'\n\nexport const ToastsProvider = ({\n children,\n bottom = 0,\n}: {\n children: React.ReactNode\n bottom?: number | string\n}) => {\n const [toasts, setToasts] = useState<ToastType[]>([])\n const addToast = useCallback((toast: ToastType) => (\n setToasts((prevToasts) => [\n ...prevToasts,\n toast,\n ])\n ), [])\n\n return (\n <ToastsContext.Provider\n value={{\n toasts,\n addToast,\n }}\n >\n <Toast.Provider>\n {children}\n\n {Array.from(toasts).map((toast: ToastType, index: number) => (\n <CustomToast\n key={index}\n toast={toast}\n />\n ))}\n\n <Toast.Viewport\n style={{\n position: 'absolute',\n bottom,\n right: 0,\n display: 'flex',\n flexDirection: 'column',\n padding: 'var(--space-5)',\n gap: 'var(--space-3)',\n width: '390px',\n maxWidth: '100vw',\n margin: 0,\n listStyle: 'none',\n zIndex: 99999999999999,\n outline: 'none',\n }}\n />\n </Toast.Provider>\n </ToastsContext.Provider>\n )\n}\n","import * as Toast from '@radix-ui/react-toast'\nimport {\n Card,\n Text,\n Flex,\n} from '@radix-ui/themes'\nimport {\n CheckCircledIcon,\n CrossCircledIcon,\n} from '@radix-ui/react-icons'\nimport { Toast as ToastType } from '@/types'\n\nexport const CustomToast = ({\n toast,\n}: {\n toast: ToastType,\n}) => (\n <Toast.Root>\n <Card>\n <Toast.Title>\n <Flex>\n <Flex\n pr=\"2\"\n height=\"14px\"\n align=\"center\"\n >\n {toast.type === 'success' ? (\n <CheckCircledIcon\n color=\"var(--accent-9)\"\n />\n ) : (\n <CrossCircledIcon\n color=\"var(--red-9)\"\n />\n )}\n </Flex>\n <Text\n weight=\"medium\"\n size=\"1\"\n >\n {toast.message}\n </Text>\n </Flex>\n </Toast.Title>\n </Card>\n </Toast.Root>\n)\n","import { Messages } from '@/components/threads/Thread/Messages'\nimport { MessageForm } from '@/components/threads/Thread/MessageForm'\nimport { Root, Args as RootArgs } from '@/components/threads/Thread/Root'\n\ntype Args = Omit<RootArgs, 'children'>\n\nexport const Thread = (props: Args) => (\n <Root {...props}>\n <Messages />\n <MessageForm />\n </Root>\n)\n\nThread.Root = Root\nThread.Messages = Messages\nThread.MessageForm = MessageForm\n","import { useContext } from 'react'\nimport { MessageContext } from '@/contexts/messages/MessageContext'\n\nexport const useMessageContext = () => (\n useContext(MessageContext)\n)\n","import { useMemo } from 'react'\nimport {\n useQuery,\n} from '@tanstack/react-query'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\nimport { queryOptions } from './lib/queryOptions'\n\ntype Args = {\n assistantId: string\n}\n\nexport const useAssistant = ({\n assistantId,\n}: Args) => {\n const superinterfaceContext = useSuperinterfaceContext()\n const props = useQuery(queryOptions({\n assistantId,\n superinterfaceContext,\n }))\n\n return useMemo(() => ({\n ...props,\n assistant: props.data ? props.data.assistant : null,\n }), [props])\n}\n","import { queryOptions as tanstackQueryOptions } from '@tanstack/react-query'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\nimport { queryFn } from './queryFn'\n\ntype Args = {\n assistantId: string\n superinterfaceContext: ReturnType<typeof useSuperinterfaceContext>\n}\n\nexport const queryOptions = ({\n assistantId,\n superinterfaceContext,\n}: Args) => (\n tanstackQueryOptions({\n queryKey: ['assistants', { assistantId }],\n queryFn: queryFn({ superinterfaceContext }),\n })\n)\n","import { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\n\ntype QueryFunctionArgs = {\n queryKey: Readonly<['assistants', { assistantId: string }]>\n}\n\nexport const queryFn = ({\n superinterfaceContext,\n}: {\n superinterfaceContext: ReturnType<typeof useSuperinterfaceContext>\n}) => async ({\n queryKey,\n}: QueryFunctionArgs) => {\n const [_key, { assistantId }] = queryKey\n\n const params = new URLSearchParams({\n publicApiKey: superinterfaceContext.variables.publicApiKey,\n })\n\n return fetch(`${superinterfaceContext.baseUrl}/assistants/${assistantId}?${params}`)\n .then(async (response) => {\n if (response.status !== 200) {\n try {\n const errorResponse = await response.json() as { error: string }\n throw new Error(errorResponse.error)\n } catch (error) {\n throw new Error('Failed to fetch')\n }\n }\n\n return response.json() as Promise<any>\n })\n}\n","import { useState } from 'react'\nimport { ThreadDialogContext } from '@/contexts/threads/ThreadDialogContext'\nimport { useThreadDialogContext } from '@/hooks/threads/useThreadDialogContext'\n\ntype Args = {\n children: React.ReactNode\n}\n\nexport const Provider = ({\n children,\n}: Args) => {\n const threadDialogContext = useThreadDialogContext()\n const [isOpen, setIsOpen] = useState<boolean>(threadDialogContext.isOpen)\n\n return (\n <ThreadDialogContext.Provider\n value={{\n isOpen,\n setIsOpen,\n }}\n >\n {children}\n </ThreadDialogContext.Provider>\n )\n}\n","'use client'\nimport { createContext, Dispatch, SetStateAction } from 'react'\n\nexport const ThreadDialogContext = createContext<{\n isOpen: boolean\n setIsOpen: Dispatch<SetStateAction<boolean>>\n}>({\n isOpen: false,\n setIsOpen: () => {},\n})\n","import { useContext } from 'react'\nimport { ThreadDialogContext } from '@/contexts/threads/ThreadDialogContext'\n\nexport const useThreadDialogContext = () => (\n useContext(ThreadDialogContext)\n)\n","import { Provider } from '@/components/threads/ThreadDialog/Provider'\n\ntype Args = {\n children: React.ReactNode\n}\n\nexport const Root = ({\n children,\n}: Args) => (\n <Provider>\n {children}\n </Provider>\n)\n","import {\n Flex,\n} from '@radix-ui/themes'\nimport { useThreadDialogContext } from '@/hooks/threads/useThreadDialogContext'\nimport { Button } from './Button'\nimport type { StyleProps } from '@/types'\n\ntype Args = {\n children: React.ReactNode\n} & StyleProps\n\nconst Root = ({\n children,\n style,\n className,\n}: Args) => {\n const { setIsOpen, isOpen } = useThreadDialogContext()\n\n return (\n <Flex\n display={{\n initial: isOpen ? 'none' : 'flex',\n sm: 'flex',\n }}\n onClick={() => setIsOpen((prev) => !prev)}\n direction=\"column\"\n flexShrink=\"0\"\n justify=\"end\"\n align=\"end\"\n position=\"fixed\"\n bottom=\"24px\"\n right=\"24px\"\n className={className}\n style={{\n zIndex: 9999999999,\n ...(style ?? {}),\n }}\n >\n {children}\n </Flex>\n )\n}\n\nexport const Trigger = (args: Omit<Args, 'children'>) => (\n <Root {...args}>\n <Button />\n </Root>\n)\n\nTrigger.Root = Root\nTrigger.Button = Button\n","import {\n IconButton,\n} from '@radix-ui/themes'\nimport {\n ChatBubbleIcon,\n} from '@radix-ui/react-icons'\nimport type { StyleProps } from '@/types'\n\nexport const Button = (props: StyleProps) => (\n <IconButton\n size=\"4\"\n radius=\"full\"\n {...props}\n >\n <ChatBubbleIcon />\n </IconButton>\n)\n","import {\n Card,\n Inset,\n Flex,\n} from '@radix-ui/themes'\nimport { useThreadDialogContext } from '@/hooks/threads/useThreadDialogContext'\nimport { Thread } from '@/components/threads/Thread'\nimport { Close } from '@/components/threads/ThreadDialog/Close'\nimport type { StyleProps } from '@/types'\n\ntype Args = {\n children: React.ReactNode\n} & StyleProps\n\nconst Root = ({\n children,\n className,\n style,\n}: Args) => {\n const { isOpen } = useThreadDialogContext()\n if (!isOpen) return null\n\n return (\n <Flex\n className={className}\n direction=\"column\"\n justify=\"end\"\n position=\"fixed\"\n bottom={{\n initial: '0',\n sm: '72px',\n }}\n right={{\n initial: '0',\n sm: '24px',\n }}\n maxHeight={{\n initial: undefined,\n sm: '720px',\n }}\n maxWidth={{\n initial: undefined,\n sm: '400px',\n }}\n width=\"100%\"\n height={{\n initial: '100%',\n sm: 'calc(100% - 96px)',\n }}\n style={{\n zIndex: 9999999999,\n ...style,\n }}\n >\n <Card\n mb={{\n initial: undefined,\n sm: '3',\n }}\n style={{\n position: 'relative',\n display: 'flex',\n flexGrow: 1,\n }}\n >\n <Inset\n clip=\"padding-box\"\n side=\"all\"\n pb=\"current\"\n style={{\n display: 'flex',\n flexGrow: 1,\n }}\n >\n {children}\n </Inset>\n <Close />\n </Card>\n </Flex>\n )\n}\n\nconst Messages = ({\n className,\n style,\n}: StyleProps) => (\n <Thread.Messages\n className={className}\n style={{\n paddingTop: 'var(--space-5)',\n paddingRight: 'var(--space-5)',\n paddingLeft: 'var(--space-5)',\n ...style,\n }}\n />\n)\n\nconst FormContainer = ({\n children,\n className,\n style,\n}: {\n children: React.ReactNode\n} & StyleProps) => (\n <Flex\n direction=\"column\"\n pl=\"5\"\n pr=\"5\"\n pb=\"3\"\n flexShrink=\"0\"\n className={className}\n style={style}\n >\n {children}\n </Flex>\n)\n\nexport const Content = (props: StyleProps) => (\n <Root {...props}>\n <Thread.Root>\n <Messages />\n <FormContainer>\n <Thread.MessageForm />\n </FormContainer>\n </Thread.Root>\n </Root>\n)\n\nContent.Root = Root\nContent.Messages = Messages\nContent.FormContainer = FormContainer\n","import {\n Cross1Icon,\n} from '@radix-ui/react-icons'\nimport {\n IconButton,\n Flex,\n} from '@radix-ui/themes'\nimport { useThreadDialogContext } from '@/hooks/threads/useThreadDialogContext'\n\nexport const Close = () => {\n const { setIsOpen, isOpen } = useThreadDialogContext()\n\n return (\n <Flex\n display={{\n initial: isOpen ? 'flex' : 'none',\n sm: 'none',\n }}\n onClick={() => setIsOpen((prev) => !prev)}\n direction=\"column\"\n flexShrink=\"0\"\n justify=\"end\"\n align=\"end\"\n position=\"absolute\"\n top=\"24px\"\n right='24px'\n style={{\n zIndex: 9999999999,\n }}\n >\n <IconButton\n size=\"2\"\n variant=\"soft\"\n >\n <Cross1Icon />\n </IconButton>\n </Flex>\n )\n}\n","import { Root } from '@/components/threads/ThreadDialog/Root'\nimport { Trigger } from '@/components/threads/ThreadDialog/Trigger'\nimport { Content } from '@/components/threads/ThreadDialog/Content'\n\nexport const ThreadDialog = () => (\n <Root>\n <Content />\n <Trigger />\n </Root>\n)\n\nThreadDialog.Root = Root\nThreadDialog.Trigger = Trigger\nThreadDialog.Content = Content\n","'use client'\n\n// import 'regenerator-runtime/runtime'\nimport { Flex } from '@radix-ui/themes'\nimport _ from 'lodash'\nimport { AudioThreadContext } from '@/contexts/threads/AudioThreadContext'\nimport { useCreateMessage } from '@/hooks/messages/useCreateMessage'\nimport { usePermission } from '@/hooks/misc/usePermission'\nimport { blobToData } from './lib/blobToData'\nimport { useStatus } from '@/hooks/audioThreads/useStatus'\nimport { useRecorder } from '@/hooks/audioThreads/useRecorder'\nimport { useMessageAudio } from '@/hooks/audioThreads/useMessageAudio'\nimport {\n useQueryClient,\n} from '@tanstack/react-query'\nimport { useThreadContext } from '@/hooks/threads/useThreadContext'\nimport { useToasts } from '@/hooks/toasts/useToasts'\nimport { createMessageDefaultOnError } from '@/lib/errors/createMessageDefaultOnError'\nimport { ToastsProvider } from '@/components/toasts/ToastsProvider'\nimport type { StyleProps } from '@/types'\n\nexport type Args = {\n children: React.ReactNode\n} & StyleProps\n\nconst Content = ({\n children,\n className,\n style,\n}: Args) => {\n const { addToast } = useToasts()\n const queryClient = useQueryClient()\n const threadContext = useThreadContext()\n\n const createMessageProps = useCreateMessage({\n onError: (error: unknown) => {\n createMessageDefaultOnError({\n queryClient,\n addToast,\n threadContext,\n })(error)\n\n recorderProps.start()\n }\n })\n\n const recorderProps = useRecorder({\n isStopOnSilence: true,\n onStart: async () => {\n },\n onStop: async (_event: any, chunks: BlobPart[]) => {\n // @ts-ignore-next-line\n const blob = new Blob(chunks, { type: chunks[0].type })\n const audioContent = await blobToData(blob)\n\n return createMessageProps.createMessage({\n // @ts-ignore-next-line\n audioContent,\n })\n },\n })\n\n const microphonePermission = usePermission({ name: 'microphone' })\n\n const messageAudioProps = useMessageAudio({\n onEnd: () => {\n if (microphonePermission === 'granted') {\n recorderProps.start()\n }\n }\n })\n\n const { status } = useStatus({\n recorderProps,\n createMessageProps,\n messageAudioProps,\n })\n\n return (\n <AudioThreadContext.Provider\n value={{\n status,\n recorderProps,\n messageAudioProps,\n }}\n >\n <Flex\n direction=\"column\"\n flexGrow=\"1\"\n p=\"9\"\n className={className}\n style={style}\n >\n {children}\n </Flex>\n </AudioThreadContext.Provider>\n )\n}\n\nexport const Root = ({\n children,\n ...rest\n}: Args) => (\n <ToastsProvider>\n <Content {...rest}>\n {children}\n </Content>\n </ToastsProvider>\n)\n","'use client'\nimport { createContext } from 'react'\nimport { statusMessages } from '@/hooks/audioThreads/useStatus/lib/statusMessages'\nimport { useRecorder } from '@/hooks/audioThreads/useRecorder'\nimport { useMessageAudio } from '@/hooks/audioThreads/useMessageAudio'\n\nexport const AudioThreadContext = createContext<{\n status: keyof typeof statusMessages\n recorderProps: ReturnType<typeof useRecorder>\n messageAudioProps: ReturnType<typeof useMessageAudio>\n}>({\n status: 'idle',\n recorderProps: {\n status: 'idle',\n start: async () => {},\n stop: async () => {},\n pause: async () => {},\n resume: async () => {},\n visualizationAnalyser: null,\n },\n // @ts-ignore-next-line\n messageAudioProps: {\n visualizationAnalyser: null,\n playing: false,\n paused: false,\n isReady: false,\n play: async () => {},\n pause: async () => {},\n },\n})\n","// From: https://github.com/streamich/react-use/blob/ade8d3905f544305515d010737b4ae604cc51024/src/usePermission.ts\nimport { useEffect, useState } from 'react';\nimport { noop, off, on } from './util';\n\nexport type IState = PermissionState | '';\n\ninterface IPushPermissionDescriptor extends PermissionDescriptor {\n name: 'push';\n userVisibleOnly?: boolean;\n}\n\n// @ts-ignore-next-line\ninterface IMidiPermissionDescriptor extends PermissionDescriptor {\n name: 'midi';\n sysex?: boolean;\n}\n\n// @ts-ignore-next-line\ninterface IDevicePermissionDescriptor extends PermissionDescriptor {\n name: 'camera' | 'microphone' | 'speaker';\n deviceId?: string;\n}\n\nexport type IPermissionDescriptor =\n | PermissionDescriptor\n | IPushPermissionDescriptor\n | IMidiPermissionDescriptor\n | IDevicePermissionDescriptor;\n\n// const usePermission = <T extends PermissionDescriptor>(permissionDesc: T): IState => {\nexport const usePermission = (permissionDesc: IPermissionDescriptor): IState => {\n const [state, setState] = useState<IState>('');\n\n useEffect(() => {\n let mounted = true;\n let permissionStatus: PermissionStatus | null = null;\n\n const onChange = () => {\n if (!mounted) {\n return;\n }\n setState(() => permissionStatus?.state ?? '');\n };\n\n navigator.permissions\n // @ts-ignore-next-line\n .query(permissionDesc)\n .then((status) => {\n permissionStatus = status;\n on(permissionStatus, 'change', onChange);\n onChange();\n })\n .catch(noop);\n\n return () => {\n permissionStatus && off(permissionStatus, 'change', onChange);\n mounted = false;\n permissionStatus = null;\n };\n }, [permissionDesc]);\n\n return state;\n};\n","// From: https://github.com/streamich/react-use/blob/ade8d3905f544305515d010737b4ae604cc51024/src/misc/util.ts\nexport const noop = () => {};\n\nexport function on<T extends Window | Document | HTMLElement | EventTarget>(\n obj: T | null,\n ...args: Parameters<T['addEventListener']> | [string, Function | null, ...any]\n): void {\n if (obj && obj.addEventListener) {\n obj.addEventListener(...(args as Parameters<HTMLElement['addEventListener']>));\n }\n}\n\nexport function off<T extends Window | Document | HTMLElement | EventTarget>(\n obj: T | null,\n ...args: Parameters<T['removeEventListener']> | [string, Function | null, ...any]\n): void {\n if (obj && obj.removeEventListener) {\n obj.removeEventListener(...(args as Parameters<HTMLElement['removeEventListener']>));\n }\n\n}\n","export const blobToData = (blob: Blob) => (\n new Promise((resolve) => {\n const reader = new FileReader()\n reader.onloadend = () => resolve(reader.result)\n reader.readAsDataURL(blob)\n })\n)\n","import { useMemo } from 'react'\nimport { useCreateMessage } from '@/hooks/messages/useCreateMessage'\nimport { useRecorder } from '@/hooks/audioThreads/useRecorder'\nimport { useMessageAudio } from '@/hooks/audioThreads/useMessageAudio'\nimport { useLatestMessage } from '@/hooks/messages/useLatestMessage'\nimport { statusMessages } from './lib/statusMessages'\n\ntype Args = {\n messageAudioProps: ReturnType<typeof useMessageAudio>\n recorderProps: ReturnType<typeof useRecorder>\n createMessageProps: ReturnType<typeof useCreateMessage>\n}\n\nexport const useStatus = ({\n messageAudioProps,\n recorderProps,\n createMessageProps,\n}: Args) => {\n const latestMessageProps = useLatestMessage()\n\n const status = useMemo((): keyof typeof statusMessages => {\n if (recorderProps.status === 'recording') return 'recording'\n if (createMessageProps.isPending) return 'creatingMessage'\n\n if (messageAudioProps.paused || !messageAudioProps.isAudioPlayed) return 'playerPaused'\n if (messageAudioProps.playing || messageAudioProps.isPending) return 'playing'\n if (!messageAudioProps.isAudioPlayed && !messageAudioProps.isReady) return 'loading'\n if (latestMessageProps.latestMessage?.status === 'in_progress') return 'creatingMessage'\n if (recorderProps.status === 'idle') return 'idle'\n if (recorderProps.status === 'paused') return 'recorderPaused'\n\n return 'loading'\n }, [\n latestMessageProps,\n messageAudioProps,\n recorderProps,\n createMessageProps,\n ])\n\n return {\n status,\n }\n}\n","import dayjs, { Dayjs } from 'dayjs'\nimport { useAudioCapture, UseAudioCaptureProps } from 'use-audio-capture'\nimport { useMemo, useRef, useState, useCallback, useEffect } from 'react'\nimport { useAudioPlayer } from 'react-use-audio-player'\nimport { useInterval } from '@/hooks/misc/useInterval'\nimport { AudioEngine } from '@/types'\n\ntype Args = UseAudioCaptureProps & {\n isStopOnSilence: boolean\n}\n\nexport const useRecorder = ({\n isStopOnSilence,\n onStart,\n onStop,\n}: Args) => {\n const [silenceStart, setSilenceStart] = useState<Dayjs | null>(null)\n const [noiseStart, setNoiseStart] = useState<Dayjs | null>(null)\n const [mediaStream, setMediaStream] = useState<MediaStream | null>(null)\n const [status, setStatus] = useState<'idle' | 'recording' | 'stopped' | 'paused'>('idle')\n const startAudioPlayer = useAudioPlayer()\n const endAudioPlayer = useAudioPlayer()\n const [isLoaded, setIsLoaded] = useState(false)\n\n useEffect(() => {\n if (isLoaded) return\n setIsLoaded(true)\n\n // startAudioPlayer.load('/sounds/warning.wav', {\n // html5: true,\n // })\n // endAudioPlayer.load('/sounds/success.wav', {\n // html5: true,\n // })\n }, [isLoaded, startAudioPlayer, endAudioPlayer])\n\n const audioCaptureProps = useAudioCapture({\n onStart: (event, opts) => {\n // startAudioPlayer.play()\n setStatus('recording')\n setMediaStream(opts.mediaStream)\n isInited.current = false\n if (onStart) onStart(event, opts)\n\n setSilenceStart(null)\n setNoiseStart(null)\n },\n onStop: async (...args) => {\n // endAudioPlayer.play()\n setStatus('stopped')\n if (onStop) await onStop(...args)\n setSilenceStart(null)\n setNoiseStart(null)\n },\n onPause: () => {\n setStatus('paused')\n\n setSilenceStart(null)\n setNoiseStart(null)\n },\n onResume: () => {\n setStatus('recording')\n\n setSilenceStart(null)\n setNoiseStart(null)\n },\n })\n\n const [audioEngine, setAudioEngine] = useState<AudioEngine | null>(null)\n\n const isInited = useRef(false)\n\n useEffect(() => {\n if (!mediaStream) return\n if (isInited.current) return\n isInited.current = true\n\n const audioContext = new AudioContext()\n\n setAudioEngine({\n source: audioContext.createMediaStreamSource(mediaStream),\n audioContext,\n })\n }, [isInited, mediaStream])\n\n const visualizationAnalyser = useMemo(() => {\n if (!audioEngine) return null\n\n const result = audioEngine.audioContext.createAnalyser()\n\n audioEngine.source.connect(result)\n return result\n }, [audioEngine])\n\n const silenceAnalyser = useMemo(() => {\n if (!audioEngine) return null\n\n const result = audioEngine.audioContext.createAnalyser()\n result.minDecibels = -60\n\n audioEngine.source.connect(result)\n return result\n }, [audioEngine])\n\n const handleSilence = useCallback(() => {\n if (!silenceAnalyser) return\n\n const frequencyData = new Uint8Array(silenceAnalyser.frequencyBinCount)\n silenceAnalyser.getByteFrequencyData(frequencyData)\n\n const isSilent = frequencyData.every((f) => f === 0)\n\n setSilenceStart((silenceStart: Dayjs | null) => {\n if (isSilent) return silenceStart || dayjs()\n\n return null\n })\n\n setNoiseStart((noiseStart: Dayjs | null) => {\n if (isSilent) return noiseStart\n\n return noiseStart || dayjs()\n })\n\n requestAnimationFrame(() => handleSilence())\n }, [silenceAnalyser, setNoiseStart, setSilenceStart])\n\n useEffect(() => {\n if (!isStopOnSilence) return\n\n requestAnimationFrame(() => handleSilence())\n }, [handleSilence, isStopOnSilence])\n\n useInterval(() => {\n if (!isStopOnSilence) return\n if (status !== 'recording') return\n if (!silenceStart) return\n if (!noiseStart) return\n if (!silenceStart.isBefore(dayjs().subtract(1.5, 'second'))) return\n\n audioCaptureProps.stop()\n }, 300)\n\n return {\n ...audioCaptureProps,\n status,\n visualizationAnalyser,\n }\n}\n","import { useEffect, useRef } from 'react';\n\nexport const useInterval = (callback: Function, delay?: number | null) => {\n const savedCallback = useRef<Function>(() => {})\n\n useEffect(() => {\n savedCallback.current = callback\n })\n\n useEffect(() => {\n if (delay !== null) {\n const interval = setInterval(() => savedCallback.current(), delay || 0)\n return () => clearInterval(interval)\n }\n\n return undefined\n }, [delay])\n}\n","import { useMemo, useRef, useState, useEffect } from 'react'\nimport nlp from 'compromise'\nimport { Howler } from 'howler'\nimport { useAudioPlayer } from 'react-use-audio-player'\nimport { useLatestMessage } from '@/hooks/messages/useLatestMessage'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\nimport { AudioEngine } from '@/types'\nimport { isOptimistic } from '@/lib/optimistic/isOptimistic'\nimport { input as getInput } from './lib/input'\nimport { isHtmlAudioSupported } from './lib/isHtmlAudioSupported'\n\ntype MessageSentence = {\n messageId: string\n sentence: string\n}\n\nconst FULL_SENTENCE_REGEX = /[\\.?!]$/\n\nconst getMessageSentences = ({\n messageId,\n input,\n}: {\n messageId: string\n input: string\n}) => {\n const sentences = nlp(input).sentences().json()\n\n return sentences.map((sentence: { text: string }) => ({\n messageId,\n sentence: sentence.text,\n }))\n}\n\nexport const useMessageAudio = ({\n onEnd,\n}: {\n onEnd: () => void\n}) => {\n const [isAudioPlayed, setIsAudioPlayed] = useState(false)\n const [stoppedMessageIds, setStoppedMessageIds] = useState<string[]>([])\n const [playedMessageSentences, setPlayedMessageSentences] = useState<MessageSentence[]>([])\n const audioPlayer = useAudioPlayer()\n const nextAudioPlayer = useAudioPlayer()\n const superinterfaceContext = useSuperinterfaceContext()\n const [isPlaying, setIsPlaying] = useState(false)\n\n const latestMessageProps = useLatestMessage()\n\n const unplayedMessageSentences = useMemo(() => {\n if (!latestMessageProps.latestMessage) return []\n if (latestMessageProps.latestMessage.role !== 'assistant') return []\n if (stoppedMessageIds.includes(latestMessageProps.latestMessage.id)) return []\n\n const input = getInput({\n message: latestMessageProps.latestMessage,\n })\n\n if (!input) return []\n\n const messageSentences = getMessageSentences({\n messageId: latestMessageProps.latestMessage.id,\n input,\n })\n\n return messageSentences.filter((ms: { messageId: string, sentence: string }) => (\n !playedMessageSentences.find((pms) => pms.messageId === ms.messageId && pms.sentence === ms.sentence)\n ))\n }, [latestMessageProps, playedMessageSentences])\n\n useEffect(() => {\n if (isPlaying) return\n if (audioPlayer.playing) return\n if (!latestMessageProps.latestMessage) return\n if (latestMessageProps.latestMessage.role !== 'assistant') return\n\n const firstUnplayedMessageSentence = unplayedMessageSentences[0]\n if (!firstUnplayedMessageSentence) {\n return\n }\n\n const isFullSentence = isOptimistic({ id: latestMessageProps.latestMessage.id }) ||\n latestMessageProps.latestMessage.status !== 'in_progress' ||\n FULL_SENTENCE_REGEX.test(firstUnplayedMessageSentence.sentence)\n\n if (!isFullSentence) return\n setIsPlaying(true)\n\n setPlayedMessageSentences((prev) => [...prev, firstUnplayedMessageSentence])\n\n const searchParams = new URLSearchParams({\n input: firstUnplayedMessageSentence.sentence,\n ...superinterfaceContext.variables,\n })\n\n audioPlayer.load(`${superinterfaceContext.baseUrl}/tts?${searchParams}`, {\n format: 'mp3',\n autoplay: isAudioPlayed,\n html5: isHtmlAudioSupported,\n onplay: () => {\n setIsAudioPlayed(true)\n },\n onstop: () => {\n setStoppedMessageIds((prev) => [...prev, firstUnplayedMessageSentence.messageId])\n setIsPlaying(false)\n },\n onload: () => {\n const nextUnplayedMessageSentence = unplayedMessageSentences[1]\n if (!nextUnplayedMessageSentence) return\n\n const isNextFullSentence = FULL_SENTENCE_REGEX.test(nextUnplayedMessageSentence.sentence)\n if (!isNextFullSentence) return\n\n const nextSearchParams = new URLSearchParams({\n input: nextUnplayedMessageSentence.sentence,\n ...superinterfaceContext.variables,\n })\n\n nextAudioPlayer.load(`${superinterfaceContext.baseUrl}/tts?${nextSearchParams}`, {\n format: 'mp3',\n autoplay: false,\n html5: isHtmlAudioSupported,\n })\n },\n onend: () => {\n setIsPlaying(false)\n\n if (unplayedMessageSentences.length === 1 && latestMessageProps.latestMessage.status !== 'in_progress') {\n onEnd()\n }\n },\n })\n }, [\n unplayedMessageSentences,\n isPlaying,\n superinterfaceContext,\n latestMessageProps,\n audioPlayer,\n nextAudioPlayer,\n playedMessageSentences,\n onEnd,\n ])\n\n useEffect(() => {\n if (isHtmlAudioSupported) {\n // @ts-ignore-next-line\n if (!Howler?._howls[0]?._sounds[0]?._node) return\n\n // @ts-ignore-next-line\n Howler._howls[0]._sounds[0]._node.crossOrigin = 'anonymous'\n }\n }, [audioPlayer])\n\n const [audioEngine, setAudioEngine] = useState<AudioEngine | null>(null)\n\n const isAudioEngineInited = useRef(false)\n\n useEffect(() => {\n if (!audioPlayer.playing) return\n if (isAudioEngineInited.current) return\n isAudioEngineInited.current = true\n\n if (isHtmlAudioSupported) {\n const audioContext = new AudioContext()\n setAudioEngine({\n // @ts-ignore-next-line\n source: audioContext.createMediaElementSource(Howler._howls[0]._sounds[0]._node),\n audioContext,\n })\n } else {\n setAudioEngine({\n source: Howler.masterGain,\n audioContext: Howler.ctx,\n })\n }\n }, [audioPlayer, isAudioEngineInited])\n\n const visualizationAnalyser = useMemo(() => {\n if (!audioEngine) return null\n\n const result = audioEngine.audioContext.createAnalyser()\n\n audioEngine.source.connect(audioEngine.audioContext.destination)\n audioEngine.source.connect(result)\n return result\n }, [audioEngine])\n\n const isPending = useMemo(() => isPlaying || unplayedMessageSentences.length > 0, [isPlaying, unplayedMessageSentences])\n\n return {\n isPending,\n isAudioPlayed,\n ...audioPlayer,\n visualizationAnalyser,\n }\n}\n","import OpenAI from 'openai'\nimport { isEmpty } from 'radash'\nimport { SerializedMessage } from '@/types'\n\ntype Args = {\n message: SerializedMessage\n}\n\nexport const input = ({\n message,\n}: Args) => {\n const textContents = (message.content as OpenAI.Beta.Threads.Messages.TextContentBlock[]).filter((c: OpenAI.Beta.Threads.Messages.TextContentBlock) => (\n c.type === 'text'\n ))\n\n const result = textContents.map((c: OpenAI.Beta.Threads.Messages.TextContentBlock) => (\n c.text.value\n )).join(' ')\n\n if (isEmpty(result)) return null\n\n return result\n}\n","import { useContext, useState, useCallback, useEffect } from 'react'\nimport _ from 'lodash'\nimport { Flex } from '@radix-ui/themes'\nimport { AssistantAvatar } from '@/components/messageGroups/MessageGroupBase/AssistantAvatar'\nimport { Name } from '@/components/messageGroups/MessageGroupBase/Name'\nimport { AssistantNameContext } from '@/contexts/assistants/AssistantNameContext'\nimport { useAudioThreadContext } from '@/hooks/threads/useAudioThreadContext'\nimport { BarsVisualizer } from '@/components/threads/AudioThread/BarsVisualizer'\nimport type { StyleProps } from '@/types'\n\nexport const Visualization = (props: StyleProps) => {\n const audioThreadContext = useAudioThreadContext()\n const assistantNameContext = useContext(AssistantNameContext)\n const [scale, setScale] = useState(0)\n\n const draw = useCallback(({ visualizationAnalyser }: { visualizationAnalyser: AnalyserNode | null }) => {\n if (!visualizationAnalyser) {\n setScale(1)\n return\n }\n\n const frequencyData = new Uint8Array(visualizationAnalyser.frequencyBinCount / 15)\n visualizationAnalyser.getByteFrequencyData(frequencyData)\n\n setScale(1 + _.mean(frequencyData) / 255 / 10)\n\n requestAnimationFrame(() => draw({ visualizationAnalyser }))\n }, [])\n\n useEffect(() => {\n draw({ visualizationAnalyser: audioThreadContext.recorderProps.visualizationAnalyser })\n }, [draw, audioThreadContext])\n\n return (\n <Flex\n direction=\"column\"\n align=\"center\"\n justify=\"center\"\n mb=\"3\"\n flexGrow=\"1\"\n {...props}\n >\n <Flex\n align=\"center\"\n justify=\"center\"\n height=\"200px\"\n width=\"200px\"\n style={{\n backgroundColor: audioThreadContext.status === 'playing' ? 'var(--accent-4)' : 'var(--gray-4)',\n borderRadius: '9999px',\n scale,\n }}\n >\n <BarsVisualizer\n visualizationAnalyser={audioThreadContext.messageAudioProps.visualizationAnalyser}\n backgroundColor={audioThreadContext.status === 'playing' ? 'var(--accent-11)' : 'var(--gray-11)'}\n height=\"40px\"\n barWidth=\"24px\"\n />\n </Flex>\n\n <Flex\n ml=\"-22.5px\"\n gap=\"3\"\n pt=\"5\"\n >\n <AssistantAvatar />\n <Name>\n {assistantNameContext}\n </Name>\n </Flex>\n </Flex>\n )\n}\n","import { useContext } from 'react'\nimport { AudioThreadContext } from '@/contexts/threads/AudioThreadContext'\n\nexport const useAudioThreadContext = () => (\n useContext(AudioThreadContext)\n)\n","'use client'\nimport _ from 'lodash'\nimport {\n Flex,\n Grid,\n} from '@radix-ui/themes'\nimport { useState, useEffect, useCallback } from 'react'\nimport { cluster } from 'radash'\n\nconst barCount = 4\n\nexport const BarsVisualizer = ({\n visualizationAnalyser,\n backgroundColor,\n height,\n barWidth,\n}: {\n visualizationAnalyser: AnalyserNode | null\n backgroundColor: string\n height: string\n barWidth: string\n}) => {\n const [barHeights, setBarHeights] = useState<number[]>([])\n\n const draw = useCallback(({ visualizationAnalyser }: { visualizationAnalyser: AnalyserNode | null }) => {\n if (!visualizationAnalyser) {\n setBarHeights(Array(barCount).fill(0))\n return\n }\n\n const frequencyData = new Uint8Array(visualizationAnalyser.frequencyBinCount / 15)\n visualizationAnalyser.getByteFrequencyData(frequencyData)\n\n // @ts-ignore-next-line\n const clusteredFrequencyData = cluster(frequencyData, frequencyData.length / barCount)\n\n setBarHeights(\n clusteredFrequencyData.map((frequencyDataCluster) => (\n _.mean(frequencyDataCluster) / 255 * 100\n ))\n )\n\n requestAnimationFrame(() => draw({ visualizationAnalyser }))\n }, [])\n\n useEffect(() => {\n draw({ visualizationAnalyser })\n }, [draw, visualizationAnalyser])\n\n return (\n <Grid\n columns={`${barCount}`}\n gap=\"1\"\n width=\"auto\"\n style={{\n // TODO not sure why we need this\n gridTemplateColumns: 'repeat(4, minmax(0, 1fr))',\n }}\n >\n {barHeights.map((barHeight, index) => (\n <Flex\n key={index}\n direction=\"column\"\n align=\"center\"\n justify=\"center\"\n height={height}\n >\n <Flex\n minHeight=\"50%\"\n maxHeight=\"100%\"\n height={`${barHeight + 20}%`}\n width={barWidth}\n style={{\n backgroundColor,\n borderRadius: 'var(--radius-6)',\n }}\n />\n </Flex>\n ))}\n </Grid>\n )\n}\n","import {\n Flex,\n Text,\n} from '@radix-ui/themes'\nimport type { StyleProps } from '@/types'\n\nconst html = ({ texts }: { texts: string[] }) => `\n .status-messages-texts:after {\n content: '${texts[0]}';\n animation: texts ${texts.length * 5}s linear infinite;\n }\n\n @keyframes texts {\n ${texts.map((_, i) => `\n ${i * 100 / texts.length}% {\n content: \"${texts[i]}\";\n }\n `).join('')}\n }`\n\nexport const StatusMessages = ({\n texts,\n className,\n style,\n}: {\n texts: string[]\n} & StyleProps) => (\n <Flex\n justify=\"center\"\n pb=\"5\"\n className={className}\n style={style}\n >\n <Text\n size=\"2\"\n weight=\"regular\"\n color=\"gray\"\n className=\"status-messages-texts\"\n />\n\n <style\n dangerouslySetInnerHTML={{\n __html: html({ texts }),\n }}\n />\n </Flex>\n)\n","import { useAudioThreadContext } from '@/hooks/threads/useAudioThreadContext'\nimport type { StyleProps } from '@/types'\nimport { StatusMessages } from './StatusMessages'\n\nexport const Status = (props: StyleProps) => {\n const audioThreadContext = useAudioThreadContext()\n\n if (audioThreadContext.status === 'recording') {\n return (\n <StatusMessages\n texts={[\n 'Start speaking',\n 'Listening',\n 'Finish speaking to send',\n 'Click the button below to send manually',\n ]}\n {...props}\n />\n )\n }\n\n if (['recorderPaused', 'idle', 'playerPaused'].includes(audioThreadContext.status)) {\n return (\n <StatusMessages\n texts={[\n 'Click the button below to activate',\n ]}\n {...props}\n />\n )\n }\n\n if (audioThreadContext.status === 'playing') {\n return (\n <StatusMessages\n texts={[\n 'Click the button below to interrupt',\n ]}\n {...props}\n />\n )\n }\n\n return (\n <StatusMessages\n texts={[\n 'Thinking',\n ]}\n {...props}\n />\n )\n}\n","import {\n Flex,\n} from '@radix-ui/themes'\nimport { BarsVisualizer } from '@/components/threads/AudioThread/BarsVisualizer'\nimport { useAudioThreadContext } from '@/hooks/threads/useAudioThreadContext'\nimport { MicIcon } from './MicIcon'\nimport { ActionButton } from './ActionButton'\nimport type { StyleProps } from '@/types'\n\nexport const Form = (props: StyleProps) => {\n const audioThreadContext = useAudioThreadContext()\n\n return (\n <Flex\n direction=\"column\"\n align=\"center\"\n {...props}\n >\n <Flex\n pb=\"3\"\n align=\"center\"\n >\n <Flex\n ml=\"-22.5px\"\n mr=\"2\"\n align=\"center\"\n >\n <MicIcon\n style={{\n color: audioThreadContext.status === 'recording' ? 'var(--accent-11)' : 'var(--gray-11)',\n }}\n />\n </Flex>\n\n <Flex\n px=\"2\"\n py=\"1\"\n style= {{\n backgroundColor: audioThreadContext.status === 'recording' ? 'var(--accent-4)' : 'var(--gray-4)',\n borderRadius: 'var(--radius-6)',\n }}\n >\n <BarsVisualizer\n visualizationAnalyser={audioThreadContext.recorderProps.visualizationAnalyser}\n backgroundColor={audioThreadContext.status === 'recording' ? 'var(--accent-11)' : 'var(--gray-11)'}\n height=\"20px\"\n barWidth=\"12px\"\n />\n </Flex>\n </Flex>\n\n <ActionButton />\n </Flex>\n )\n}\n","import { SVGProps } from 'react'\n\nexport const MicIcon = (props: SVGProps<SVGSVGElement>) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"currentColor\"\n stroke=\"currentColor\"\n strokeWidth={0}\n viewBox=\"0 0 384 512\"\n height=\"15\"\n width=\"15\"\n {...props}\n >\n <path\n stroke=\"none\"\n d=\"M192 0c-53 0-96 43-96 96v160c0 53 43 96 96 96s96-43 96-96V96c0-53-43-96-96-96zM64 216c0-13.3-10.7-24-24-24s-24 10.7-24 24v40c0 89.1 66.2 162.7 152 174.4V464h-48c-13.3 0-24 10.7-24 24s10.7 24 24 24h144c13.3 0 24-10.7 24-24s-10.7-24-24-24h-48v-33.6c85.8-11.7 152-85.3 152-174.4v-40c0-13.3-10.7-24-24-24s-24 10.7-24 24v40c0 70.7-57.3 128-128 128S64 326.7 64 256v-40z\"\n />\n </svg>\n)\n","import {\n Flex,\n IconButton,\n} from '@radix-ui/themes'\nimport {\n StopIcon,\n PauseIcon,\n ArrowUpIcon,\n ResumeIcon,\n} from '@radix-ui/react-icons'\nimport { useAudioThreadContext } from '@/hooks/threads/useAudioThreadContext'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\n\nexport const ActionButton = () => {\n const audioThreadContext = useAudioThreadContext()\n const superinterfaceContext = useSuperinterfaceContext()\n\n if (audioThreadContext.status === 'recording') {\n return (\n <Flex\n align=\"center\"\n >\n <Flex\n mr=\"3\"\n ml=\"-7\"\n >\n <IconButton\n onClick={audioThreadContext.recorderProps.pause}\n color=\"gray\"\n variant=\"soft\"\n size=\"1\"\n >\n <PauseIcon />\n </IconButton>\n </Flex>\n\n <IconButton\n onClick={audioThreadContext.recorderProps.stop}\n highContrast\n variant=\"soft\"\n size=\"4\"\n >\n <ArrowUpIcon />\n </IconButton>\n </Flex>\n )\n }\n\n if (audioThreadContext.status === 'recorderPaused') {\n return (\n <IconButton\n onClick={audioThreadContext.recorderProps.resume}\n color=\"red\"\n size=\"4\"\n >\n <ResumeIcon />\n </IconButton>\n )\n }\n\n if (audioThreadContext.status === 'idle') {\n return (\n <IconButton\n onClick={() => audioThreadContext.recorderProps.start()}\n size=\"4\"\n color=\"red\"\n />\n )\n }\n\n if (audioThreadContext.status === 'playing') {\n return (\n <IconButton\n onClick={() => {\n audioThreadContext.messageAudioProps.stop()\n superinterfaceContext.createMessageAbortControllerRef.current?.abort()\n audioThreadContext.recorderProps.start()\n }}\n size=\"4\"\n color=\"gray\"\n variant=\"soft\"\n >\n <StopIcon />\n </IconButton>\n )\n }\n\n if (audioThreadContext.status === 'playerPaused') {\n return (\n <IconButton\n onClick={() => audioThreadContext.messageAudioProps.play()}\n size=\"4\"\n >\n <ResumeIcon />\n </IconButton>\n )\n }\n\n return (\n <IconButton\n size=\"4\"\n variant=\"soft\"\n disabled\n />\n )\n}\n","import { Root, Args as RootArgs } from './Root'\nimport { Visualization } from './Visualization'\nimport { Status } from './Status'\nimport { Form } from './Form'\n\ntype Args = Omit<RootArgs, 'children'>\n\nexport const AudioThread = (props: Args) => (\n <Root {...props}>\n <Visualization />\n <Status />\n <Form />\n </Root>\n)\n\nAudioThread.Root = Root\nAudioThread.Visualization = Visualization\nAudioThread.Status = Status\nAudioThread.Form = Form\n","import { AudioThread } from '@/components/threads/AudioThread'\nimport { Root } from '@/components/threads/ThreadDialog/Root'\nimport { Trigger } from '@/components/threads/ThreadDialog/Trigger'\nimport { Content } from '@/components/threads/ThreadDialog/Content'\nimport type { StyleProps } from '@/types'\n\nexport const AudioThreadDialog = (props: StyleProps) => (\n <Root {...props}>\n <Content.Root>\n <AudioThread />\n </Content.Root>\n <Trigger />\n </Root>\n)\n\nAudioThreadDialog.Root = Root\nAudioThreadDialog.Trigger = Trigger\nAudioThreadDialog.Content = Content\n","import { useMemo } from 'react'\nimport { MarkdownContext, type MarkdownContextType } from '@/contexts/markdown/MarkdownContext'\nimport { useMarkdownContext } from '@/hooks/markdown/useMarkdownContext'\nimport { merge } from '@/lib/misc/merge'\n\nexport const MarkdownProvider = ({\n children,\n components,\n ...rest\n}: {\n children: React.ReactNode\n} & Partial<MarkdownContextType>) => {\n const prevMarkdownContext = useMarkdownContext()\n\n const value = useMemo(() => (\n merge(prevMarkdownContext, rest)\n ), [rest, prevMarkdownContext])\n\n return (\n <MarkdownContext.Provider\n value={value}\n >\n {children}\n </MarkdownContext.Provider>\n )\n}\n","import { AvatarType as AvatarTypeEnum } from '@/lib/enums'\nimport { Avatar as AvatarType, StyleProps } from '@/types'\nimport { Avatar as RadixAvatar } from '@radix-ui/themes'\nimport { ImageAvatar } from '@/components/imageAvatars/ImageAvatar'\nimport { IconAvatar } from '@/components/iconAvatars/IconAvatar'\n\nexport const Avatar = ({\n avatar,\n size = '1',\n className,\n style,\n}: {\n avatar: AvatarType\n size?: '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9'\n} & StyleProps) => {\n if (avatar) {\n if (avatar.type === AvatarTypeEnum.IMAGE && avatar.imageAvatar) {\n return (\n <ImageAvatar\n imageAvatar={avatar.imageAvatar}\n size={size}\n className={className}\n style={style}\n />\n )\n }\n\n if (avatar.type === AvatarTypeEnum.ICON && avatar.iconAvatar) {\n return (\n <IconAvatar\n iconAvatar={avatar.iconAvatar}\n size={size}\n className={className}\n style={style}\n />\n )\n }\n }\n\n return (\n <RadixAvatar\n fallback=\"\"\n size={size}\n className={className}\n style={style}\n />\n )\n}\n","import { Avatar } from '@radix-ui/themes'\nimport { Size, ImageAvatar as ImageAvatarType, StyleProps } from '@/types'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\nimport { optimizedSrc } from './lib/optimizedSrc'\n\nexport const ImageAvatar = ({\n imageAvatar,\n size,\n className,\n style,\n}: {\n imageAvatar: ImageAvatarType\n size: Size\n} & StyleProps) => {\n const superinterfaceContext = useSuperinterfaceContext()\n\n return (\n <Avatar\n className={className}\n style={style}\n fallback=\"\"\n src={optimizedSrc({ imageAvatar, size, superinterfaceContext })}\n size={size}\n />\n )\n}\n","import { Size, ImageAvatar } from '@/types'\n\nconst width = ({\n size,\n}: {\n size: Size\n}) => {\n if (size === '1') {\n return 48\n } else if (size === '2') {\n return 64\n } else if (size === '3') {\n return 96\n } else if (size === '4') {\n return 96\n } else if (size === '5') {\n return 128\n } else if (size === '6') {\n return 256\n } else if (size === '7') {\n return 256\n } else if (size === '8') {\n return 256\n } else if (size === '9') {\n return 384\n }\n\n return 384\n}\n\nexport const path = ({\n imageAvatar,\n size,\n}: {\n imageAvatar: ImageAvatar\n size: Size\n}) => (\n `/_next/image?url=${encodeURIComponent(imageAvatar.url)}&w=${width({ size })}&q=95`\n)\n","import { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\n\nexport const host = ({\n superinterfaceContext,\n}: {\n superinterfaceContext: ReturnType<typeof useSuperinterfaceContext>\n}) => {\n if (!superinterfaceContext.baseUrl) return ''\n if (!/^https?:\\/\\//i.test(superinterfaceContext.baseUrl)) return ''\n\n return new URL(superinterfaceContext.baseUrl).origin\n}\n","import { Size, ImageAvatar } from '@/types'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\nimport { path } from './path'\nimport { host } from './host'\n\nexport const optimizedSrc = ({\n imageAvatar,\n size,\n superinterfaceContext,\n}: {\n imageAvatar: ImageAvatar\n size: Size\n superinterfaceContext: ReturnType<typeof useSuperinterfaceContext>\n}) => {\n if (!imageAvatar.url) return ''\n if (imageAvatar.url.endsWith('.svg')) return imageAvatar.url\n\n return `${host({ superinterfaceContext })}${path({ imageAvatar, size })}`\n}\n","import { useMemo } from 'react'\nimport { IconAvatar as IconAvatarType, StyleProps } from '@/types'\nimport { Avatar } from '@radix-ui/themes'\nimport { iconAvatarComponents } from '@/lib/iconAvatars/iconAvatarComponents'\n\nexport const IconAvatar = ({\n iconAvatar,\n size,\n className,\n style,\n}: {\n iconAvatar: IconAvatarType\n size: '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9'\n} & StyleProps) => {\n const Component = useMemo(() => (\n iconAvatarComponents[iconAvatar.name]\n ), [iconAvatar])\n\n return (\n <Avatar\n className={className}\n style={style}\n size={size}\n fallback={(\n Component ? (\n <Component />\n ) : (\n ''\n )\n )}\n />\n )\n}\n","import { IconAvatarName } from '@/lib/enums'\nimport {\n BackpackIcon,\n RocketIcon,\n MagicWandIcon,\n CubeIcon,\n TargetIcon,\n DiscIcon,\n GlobeIcon,\n StarIcon,\n LightningBoltIcon,\n FaceIcon,\n PersonIcon,\n HeartIcon,\n} from '@radix-ui/react-icons'\n\nexport const iconAvatarComponents = {\n [IconAvatarName.BACKPACK]: BackpackIcon,\n [IconAvatarName.ROCKET]: RocketIcon,\n [IconAvatarName.MAGIC_WAND]: MagicWandIcon,\n [IconAvatarName.CUBE]: CubeIcon,\n [IconAvatarName.TARGET]: TargetIcon,\n [IconAvatarName.DISC]: DiscIcon,\n [IconAvatarName.GLOBE]: GlobeIcon,\n [IconAvatarName.STAR]: StarIcon,\n [IconAvatarName.LIGHTNING_BOLT]: LightningBoltIcon,\n [IconAvatarName.FACE]: FaceIcon,\n [IconAvatarName.PERSON]: PersonIcon,\n [IconAvatarName.HEART]: HeartIcon,\n}\n","import { useMemo } from 'react'\nimport { ComponentsContext } from '@/contexts/components/ComponentsContext'\nimport { useComponents } from '@/hooks/components/useComponents'\nimport { merge } from '@/lib/misc/merge'\n\nexport const ComponentsProvider = ({\n children,\n ...rest\n}: {\n children: React.ReactNode\n}) => {\n const prevComponents = useComponents()\n\n const value = useMemo(() => (\n merge(prevComponents, rest)\n ), [rest, prevComponents])\n\n return (\n <ComponentsContext.Provider\n value={value}\n >\n {children}\n </ComponentsContext.Provider>\n )\n}\n","import { useContext } from 'react'\nimport { ComponentsContext } from '@/contexts/components/ComponentsContext'\n\nexport const useComponents = () => (\n useContext(ComponentsContext)\n)\n","import { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\nimport { AssistantAvatarContext } from '@/contexts/assistants/AssistantAvatarContext'\nimport { AssistantNameContext } from '@/contexts/assistants/AssistantNameContext'\nimport { useAssistant } from '@/hooks/assistants/useAssistant'\nimport { Avatar } from '@/components/avatars/Avatar'\n\ntype Args = {\n children: React.ReactNode\n}\n\nexport const AssistantProvider = ({\n children,\n}: Args) => {\n const superinterfaceContext = useSuperinterfaceContext()\n const { assistant } = useAssistant({\n assistantId: superinterfaceContext.variables.assistantId,\n })\n\n return (\n <AssistantNameContext.Provider value={assistant?.name ?? ''}>\n <AssistantAvatarContext.Provider\n value={<Avatar avatar={assistant?.avatar} />}\n >\n {children}\n </AssistantAvatarContext.Provider>\n </AssistantNameContext.Provider>\n )\n}\n"]}
|