@superinterface/react 3.3.0 → 3.4.0
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 +68 -28
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +4 -14
- package/dist/index.d.ts +4 -14
- package/dist/index.js +68 -28
- package/dist/index.js.map +1 -1
- package/dist/types/index.cjs.map +1 -1
- package/dist/types/index.d.cts +13 -1
- package/dist/types/index.d.ts +13 -1
- package/dist/utils.cjs +3 -3
- package/dist/utils.cjs.map +1 -1
- package/dist/utils.d.cts +1 -1
- package/dist/utils.d.ts +1 -1
- package/dist/utils.js +2 -2
- package/dist/utils.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/threadIdCookies/options/get.ts","../src/lib/threadIdCookies/key.ts","../src/lib/threadIdCookies/options/set.ts","../src/lib/threadIdCookies/options/index.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","expires","options","SuperinterfaceContext","createContext","variables","defaultOptions","queries","mutations","threadIdCookieOptions","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_react_markdown","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","window","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","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","TextContent","rest","import_jsx_runtime44","Markdown","remarkPlugins","ImageFileContent","import_jsx_runtime45","alt","image_file","ContentPart","import_jsx_runtime46","Message","import_react26","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_react27","MessageGroupBase","import_react28","forwardRef","ref","import_jsx_runtime48","import_themes33","Container","Name","import_jsx_runtime49","import_themes34","MessagesSkeleton","import_react29","_props","import_jsx_runtime50","import_themes35","fallback","marginTop","import_react30","import_jsx_runtime51","import_themes36","import_react_icons9","LightningBoltIcon","AssistantAvatar","AssistantAvatarContextValue","import_react31","import_jsx_runtime52","import_themes37","overflow","import_react32","import_react33","import_jsx_runtime53","import_themes38","import_react_icons10","PersonIcon","UserAvatar","UserAvatarContextValue","import_react34","import_jsx_runtime54","import_themes39","messageGroup","import_jsx_runtime55","import_themes40","MessageGroup","assistantNameContext","import_react35","import_jsx_runtime56","import_themes41","isLoadingError","import_react36","import_jsx_runtime57","StartingSkeleton","import_react37","import_jsx_runtime58","import_themes42","Progress","isVisible","import_react38","import_jsx_runtime59","import_react_intersection_observer","useThrottledEffect","cb","delay","additionalDeps","cbRef","import_react39","throttledCb","useCallback","import_lodash7","throttle","leading","trailing","useInfiniteScroll","isFetchingNextPage","fetchNextPage","containerRef","import_react40","useInView","root","rootMargin","threshold","loaderRef","inView","import_jsx_runtime60","import_themes43","NextPageSkeleton","import_jsx_runtime61","Messages","import_jsx_runtime62","import_themes44","MessageFormContext","import_react41","files","setFiles","isFileLoading","import_react42","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_react43","formProps","useForm","handleSubmit","formState","isSubmitting","reset","watch","import_react_query6","file","import_radash15","tools","import_jsx_runtime64","FormProvider","import_themes46","usePrevious","state","import_react44","import_react_textarea_autosize","TextareaBase","import_react45","import_jsx_runtime65","TextareaAutosize","border","outline","boxSizing","resize","import_jsx_runtime66","import_themes47","pt","Input","import_react46","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_react47","fileObjects","newFiles","Array","fileObject","purpose","import_dayjs2","bytes","import_radash16","newFile","onSuccess","import_jsx_runtime68","import_themes49","pr","import_react_icons13","FilePlusIcon","multiple","cursor","top","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_react48","setToasts","prevToasts","import_jsx_runtime72","Toast2","Viewport","padding","margin","listStyle","import_jsx_runtime73","import_themes52","import_jsx_runtime74","import_react49","publicApiKey","import_react_query8","tanstackQueryOptions","import_react_query9","useQuery","import_react50","assistant","import_react51","isOpen","setIsOpen","import_react52","threadDialogContext","import_react53","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_react54","recorderProps","stop","pause","resume","visualizationAnalyser","messageAudioProps","playing","paused","isReady","play","noop","on","addEventListener","off","removeEventListener","usePermission","permissionDesc","import_react55","setState","mounted","permissionStatus","navigator","permissions","query","catch","blobToData","blob","Promise","resolve","FileReader","onloadend","readAsDataURL","useStatus","createMessageProps","import_react56","isAudioPlayed","import_use_audio_capture","import_react_use_audio_player","useInterval","callback","savedCallback","import_react57","interval","setInterval","clearInterval","useRecorder","isStopOnSilence","onStart","onStop","import_react58","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_react59","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_react60","barCount","BarsVisualizer","barWidth","import_react61","barHeights","setBarHeights","draw","fill","clusteredFrequencyData","import_radash18","cluster","frequencyDataCluster","import_lodash8","mean","import_jsx_runtime83","import_themes58","Grid","columns","gridTemplateColumns","barHeight","Visualization","audioThreadContext","import_react62","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_react63","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_react64","import_jsx_runtime94","import_themes64","avatar","import_jsx_runtime95","import_themes65","RadixAvatar","import_react65","prevComponents","import_react66","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/threadIdCookies/options/get.ts\nvar import_js_cookie = __toESM(require(\"js-cookie\"), 1);\n\n// src/lib/threadIdCookies/key.ts\nvar key = ({\n assistantId\n}) => `superinterface-${assistantId}-threadId`;\n\n// src/lib/threadIdCookies/options/get.ts\nvar get = ({\n assistantId\n}) => import_js_cookie.default.get(key({ assistantId }));\n\n// src/lib/threadIdCookies/options/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 expires: 7\n});\n\n// src/lib/threadIdCookies/options/index.ts\nvar options = {\n get,\n set\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 threadIdCookieOptions: options,\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 threadIdCookieOptions\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 ...threadIdCookieOptions ? { threadIdCookieOptions } : {},\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_react26 = 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_react_markdown = __toESM(require(\"react-markdown\"), 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.threadIdCookieOptions?.get) return variables;\n const threadId = superinterfaceContext.threadIdCookieOptions.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.threadIdCookieOptions?.set) return;\n if (!value.data.metadata?.assistantId) return;\n if (!value.data.metadata?.threadId) return;\n superinterfaceContext.threadIdCookieOptions.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.threadIdCookieOptions?.get) return variables;\n const threadId = superinterfaceContext.threadIdCookieOptions.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: import_themes31.Table.Header,\n tbody: import_themes31.Table.Body,\n tr: import_themes31.Table.Row,\n td: import_themes31.Table.Cell,\n th: import_themes31.Table.ColumnHeaderCell\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 = (\n // @ts-ignore-next-line\n require(\"react/jsx-runtime\")\n);\nvar TextContent = ({\n content\n}) => {\n const {\n getRemarkPlugins: getRemarkPlugins2,\n ...rest\n } = useMarkdownContext();\n return /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(\n import_react_markdown.default,\n {\n ...rest,\n remarkPlugins: getRemarkPlugins2({\n content\n }),\n children: content.text.value\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_react26.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_react26.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_react36 = require(\"react\");\n\n// src/hooks/messageGroups/useMessageGroups/index.ts\nvar import_react27 = 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_react27.useMemo)(\n () => ({\n messageGroups: messageGroups({ messages: messages2 })\n }),\n [messages2]\n);\n\n// src/components/skeletons/MessagesSkeleton/index.tsx\nvar import_react29 = require(\"react\");\nvar import_themes35 = require(\"@radix-ui/themes\");\n\n// src/components/messageGroups/MessageGroupBase/index.tsx\nvar import_react28 = require(\"react\");\nvar import_themes33 = require(\"@radix-ui/themes\");\nvar import_jsx_runtime48 = require(\"react/jsx-runtime\");\nvar MessageGroupBase = (0, import_react28.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_react29.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_react35 = require(\"react\");\nvar import_themes41 = require(\"@radix-ui/themes\");\n\n// src/components/messageGroups/MessageGroupBase/AssistantAvatar.tsx\nvar import_react31 = require(\"react\");\nvar import_themes37 = require(\"@radix-ui/themes\");\n\n// src/contexts/assistants/AssistantAvatarContext/index.tsx\nvar import_react30 = 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_react30.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_react31.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_react32 = require(\"react\");\nvar AssistantNameContext = (0, import_react32.createContext)(\"Assistant\");\n\n// src/components/messageGroups/MessageGroupBase/UserAvatar.tsx\nvar import_react34 = require(\"react\");\nvar import_themes39 = require(\"@radix-ui/themes\");\n\n// src/contexts/users/UserAvatarContext/index.tsx\nvar import_react33 = 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_react33.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_react34.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_react35.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_react36.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_react38 = require(\"react\");\n\n// src/components/skeletons/StartingSkeleton/index.tsx\nvar import_react37 = 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_react37.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_react38.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_react40 = 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_react39 = require(\"react\");\nvar useThrottledEffect = (cb, delay, additionalDeps) => {\n const cbRef = (0, import_react39.useRef)(cb);\n const throttledCb = (0, import_react39.useCallback)(\n import_lodash7.default.throttle((...args) => cbRef.current(...args), delay, {\n leading: true,\n trailing: true\n }),\n [delay]\n );\n (0, import_react39.useEffect)(() => {\n cbRef.current = cb;\n });\n (0, import_react39.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_react40.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_react42 = require(\"react\");\n\n// src/contexts/messages/MessageFormContext/index.ts\nvar import_react41 = require(\"react\");\nvar MessageFormContext = (0, import_react41.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_react42.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_react43 = 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_react43.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_react43.useMemo)(() => files.some((file) => isOptimistic({ id: file.id })), [files]);\n const isLoading = (0, import_react43.useMemo)(() => isMutatingMessage || isSubmitting, [\n isMutatingMessage,\n isSubmitting\n ]);\n const { latestMessage } = useLatestMessage();\n const isDisabled = (0, import_react43.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_react44 = require(\"react\");\nvar usePrevious = (state) => {\n const ref = (0, import_react44.useRef)();\n (0, import_react44.useEffect)(() => {\n ref.current = state;\n });\n return ref.current;\n};\n\n// src/components/threads/Thread/MessageForm/Field/Control.tsx\nvar import_react46 = require(\"react\");\n\n// src/components/textareas/TextareaBase/index.tsx\nvar import_react45 = 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_react45.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_react46.useContext)(AssistantNameContext);\n const {\n register\n } = (0, import_react_hook_form2.useFormContext)();\n const { isDisabled, isLoading } = useMessageFormContext();\n const isSubmitDisabled = (0, import_react46.useMemo)(() => isDisabled || isLoading, [isDisabled, isLoading]);\n const isDisabledPrevious = usePrevious(isDisabled);\n const textareaRef = (0, import_react46.useRef)(null);\n const textareaProps = register(\"content\");\n (0, import_react46.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_react47 = 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.threadIdCookieOptions?.get) return formData(variables);\n const threadId = superinterfaceContext.threadIdCookieOptions.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_react47.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_react48 = 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_react48.useState)([]);\n const addToast = (0, import_react48.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_react49 = require(\"react\");\nvar useMessageContext = () => (0, import_react49.useContext)(MessageContext);\n\n// src/hooks/assistants/useAssistant/index.ts\nvar import_react50 = 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_react50.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_react53 = require(\"react\");\n\n// src/contexts/threads/ThreadDialogContext/index.ts\nvar import_react51 = require(\"react\");\nvar ThreadDialogContext = (0, import_react51.createContext)({\n isOpen: false,\n setIsOpen: () => {\n }\n});\n\n// src/hooks/threads/useThreadDialogContext/index.ts\nvar import_react52 = require(\"react\");\nvar useThreadDialogContext = () => (0, import_react52.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_react53.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_react54 = require(\"react\");\nvar AudioThreadContext = (0, import_react54.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_react55 = 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_react55.useState)(\"\");\n (0, import_react55.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_react56 = require(\"react\");\nvar useStatus = ({\n messageAudioProps,\n recorderProps,\n createMessageProps\n}) => {\n const latestMessageProps = useLatestMessage();\n const status = (0, import_react56.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_react58 = require(\"react\");\nvar import_react_use_audio_player = require(\"react-use-audio-player\");\n\n// src/hooks/misc/useInterval.ts\nvar import_react57 = require(\"react\");\nvar useInterval = (callback, delay) => {\n const savedCallback = (0, import_react57.useRef)(() => {\n });\n (0, import_react57.useEffect)(() => {\n savedCallback.current = callback;\n });\n (0, import_react57.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_react58.useState)(null);\n const [noiseStart, setNoiseStart] = (0, import_react58.useState)(null);\n const [mediaStream, setMediaStream] = (0, import_react58.useState)(null);\n const [status, setStatus] = (0, import_react58.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_react58.useState)(false);\n (0, import_react58.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_react58.useState)(null);\n const isInited = (0, import_react58.useRef)(false);\n (0, import_react58.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_react58.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_react58.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_react58.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_react58.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_react59 = 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_react59.useState)(false);\n const [stoppedMessageIds, setStoppedMessageIds] = (0, import_react59.useState)([]);\n const [playedMessageSentences, setPlayedMessageSentences] = (0, import_react59.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_react59.useState)(false);\n const latestMessageProps = useLatestMessage();\n const unplayedMessageSentences = (0, import_react59.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_react59.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_react59.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_react59.useState)(null);\n const isAudioEngineInited = (0, import_react59.useRef)(false);\n (0, import_react59.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_react59.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_react59.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_react62 = 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_react60 = require(\"react\");\nvar useAudioThreadContext = () => (0, import_react60.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_react61 = 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_react61.useState)([]);\n const draw = (0, import_react61.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_react61.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_react62.useContext)(AssistantNameContext);\n const [scale, setScale] = (0, import_react62.useState)(0);\n const draw = (0, import_react62.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_react62.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_react63 = 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_react63.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_react64 = 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_react64.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_react66 = require(\"react\");\n\n// src/hooks/components/useComponents.ts\nvar import_react65 = require(\"react\");\nvar useComponents = () => (0, import_react65.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_react66.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 { options } from '@/lib/threadIdCookies/options'\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 threadIdCookieOptions?: typeof options | null\n}\n\nexport const SuperinterfaceProvider = ({\n children,\n baseUrl,\n variables,\n defaultOptions,\n threadIdCookieOptions,\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 ...(threadIdCookieOptions ? { threadIdCookieOptions } : {}),\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'\nimport { createContext } from 'react'\nimport { baseUrl } from '@/lib/superinterfaceCloud/baseUrl'\nimport { options } from '@/lib/threadIdCookies/options'\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 threadIdCookieOptions: typeof options | null\n createMessageAbortControllerRef: React.MutableRefObject<AbortController | null>\n}>({\n baseUrl,\n variables: {},\n defaultOptions: {\n queries: {},\n mutations: {},\n },\n threadIdCookieOptions: options,\n createMessageAbortControllerRef: { current: null },\n})\n","export const baseUrl = 'https://superinterface.ai/api/cloud'\n","import Cookies from 'js-cookie'\nimport { key } from '@/lib/threadIdCookies/key'\n\nexport const get = ({\n assistantId,\n}: {\n assistantId: string\n}) => (\n Cookies.get(key({ assistantId }))\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/threadIdCookies/key'\n\nexport const set = ({\n assistantId,\n threadId,\n}: {\n assistantId: string\n threadId: string\n}) => (\n Cookies.set(key({ assistantId }), threadId, {\n expires: 7,\n })\n)\n","import { get } from './get'\nimport { set } from './set'\n\nexport const options = {\n get,\n set,\n}\n","'use client'\nimport { useContext } from 'react'\nimport { SuperinterfaceContext } from '@/contexts/core/SuperinterfaceContext'\n\nexport const useSuperinterfaceContext = () => (\n useContext(SuperinterfaceContext)\n)\n","import {\n Flex,\n} from '@radix-ui/themes'\nimport { Message } from '@/components/threads/Thread/Message'\nimport { StyleProps } from '@/types'\nimport { Content } from './Content'\nimport { Progress } from './Progress'\nimport { Root } from './Root'\nimport { NextPageSkeleton } from './NextPageSkeleton'\n\ntype Args = {\n children?: React.ReactNode\n} & StyleProps\n\nexport const Messages = ({\n children,\n className,\n style,\n}: Args) => (\n <Root\n style={style}\n className={className}\n >\n <Flex\n flexShrink=\"0\"\n height=\"var(--space-3)\"\n />\n\n <Progress />\n\n {children}\n\n <Content />\n\n <NextPageSkeleton />\n\n <Flex\n flexShrink=\"0\"\n flexGrow=\"1\"\n minHeight=\"var(--space-5)\"\n />\n </Root>\n)\n\nMessages.Root = Root\nMessages.Message = Message\nMessages.NextPageSkeleton = NextPageSkeleton\n","import _ from 'lodash'\nimport { useMemo } from 'react'\nimport { isEmpty } from 'radash'\nimport {\n Box,\n} from '@radix-ui/themes'\nimport { StartingContentSkeleton } from '@/components/skeletons/StartingContentSkeleton'\nimport { SerializedMessage } from '@/types'\nimport { RunSteps } from '@/components/runSteps/RunSteps'\nimport { useIsMutatingMessage } from '@/hooks/messages/useIsMutatingMessage'\nimport { Provider } from './Provider'\nimport { Attachments } from './Attachments'\nimport { ContentPart } from './ContentPart'\nimport type { StyleProps } from '@/types'\n\ntype Args = {\n message: SerializedMessage\n}\n\nexport const Message = ({\n message,\n className,\n style,\n}: Args & StyleProps) => {\n const [olderRunSteps, laterRunSteps] = useMemo(() => {\n if (!message.runSteps.length) return [[], []]\n\n const messageCreationRunStepIndex = message.runSteps.findIndex((runStep) => {\n if (runStep.step_details.type !== 'message_creation') return\n\n return runStep.step_details.message_creation.message_id === message.id\n })\n\n let nextRunStepIndex = message.runSteps.slice(0, messageCreationRunStepIndex).findLastIndex((runStep) => (\n runStep.step_details.type === 'message_creation'\n ))\n if (nextRunStepIndex === -1) {\n nextRunStepIndex = 0\n }\n const laterRunSteps = message.runSteps.slice(nextRunStepIndex, messageCreationRunStepIndex)\n\n const prevRunStepIndex = message.runSteps.slice(messageCreationRunStepIndex + 1).findIndex((runStep) => (\n runStep.step_details.type === 'message_creation'\n ))\n\n let olderRunSteps\n\n if (prevRunStepIndex === -1) {\n olderRunSteps = message.runSteps.slice(messageCreationRunStepIndex + 1)\n } else {\n olderRunSteps = message.runSteps.slice(messageCreationRunStepIndex + 1, messageCreationRunStepIndex + prevRunStepIndex)\n }\n\n return [olderRunSteps, laterRunSteps]\n }, [message])\n\n const isMutatingMessage = useIsMutatingMessage()\n\n const isInProgress = useMemo(() => {\n if (!isMutatingMessage) return false\n if (message.status === 'in_progress') return true\n\n return message.runSteps.some((rs) => rs.status === 'in_progress')\n }, [message])\n\n return (\n <Provider value={{ message }}>\n <Box\n className={className}\n style={style}\n >\n <RunSteps\n runSteps={olderRunSteps}\n />\n\n <Box>\n <Attachments\n message={message}\n />\n\n {message.content.map((content, index) => (\n <ContentPart\n key={index}\n content={content}\n />\n ))}\n\n {isInProgress && isEmpty(laterRunSteps) && (\n <StartingContentSkeleton />\n )}\n </Box>\n\n <RunSteps\n runSteps={laterRunSteps}\n />\n\n {isInProgress && !isEmpty(laterRunSteps) && (\n <Box>\n <StartingContentSkeleton />\n </Box>\n )}\n </Box>\n </Provider>\n )\n}\n","import {\n Skeleton,\n} from '@radix-ui/themes'\n\nexport const StartingContentSkeleton = () => (\n <Skeleton\n loading\n mt=\"1\"\n height=\"var(--space-4)\"\n width=\"var(--space-4)\"\n style={{\n borderRadius: 'var(--radius-6)',\n flexShrink: 0,\n }}\n />\n)\n","import { Flex } from '@radix-ui/themes'\nimport { useContext } from 'react'\nimport type { SerializedRunStep } from '@/types'\nimport { ComponentsContext } from '@/contexts/components/ComponentsContext'\n\ntype Args = {\n runSteps: SerializedRunStep[]\n}\n\nexport const RunSteps = ({\n runSteps,\n}: Args) => {\n const componentsContext = useContext(ComponentsContext)\n const Component = componentsContext.components.RunStep\n\n return (\n <Flex\n direction=\"column-reverse\"\n >\n {runSteps.map((runStep) => (\n <Component\n key={runStep.id}\n runStep={runStep}\n />\n ))}\n </Flex>\n )\n}\n","'use client'\nimport { createContext } from 'react'\nimport { RunStep } from '@/components/runSteps/RunStep'\n\nexport const ComponentsContext = createContext({\n components: {\n RunStep,\n },\n})\n","import OpenAI from 'openai'\nimport {\n Flex,\n} from '@radix-ui/themes'\nimport type { SerializedRunStep, StyleProps } from '@/types'\nimport { ToolCall } from './ToolCall'\nimport { Starting } from './Starting'\n\ntype Args = {\n stepDetails: OpenAI.Beta.Threads.Runs.ToolCallsStepDetails\n runStep: SerializedRunStep\n} & StyleProps\n\nconst Root = ({\n children,\n className,\n style,\n}: {\n children: React.ReactNode\n} & StyleProps) => (\n <Flex\n direction=\"column\"\n className={className}\n style={style}\n >\n {children}\n </Flex>\n)\n\nexport const ToolCalls = ({\n stepDetails,\n runStep,\n className,\n style,\n}: Args) => (\n <Root\n className={className}\n style={style}\n >\n {!stepDetails.tool_calls.length && (\n <Starting />\n )}\n {stepDetails.tool_calls.map((toolCall) => (\n <ToolCall\n key={toolCall.id}\n toolCall={toolCall}\n runStep={runStep}\n />\n ))}\n </Root>\n)\n\nToolCalls.Root = Root\nToolCalls.Starting = Starting\nToolCalls.ToolCall = ToolCall\n","'use client'\nimport { useContext } from 'react'\nimport OpenAI from 'openai'\nimport type { SerializedRunStep } from '@/types'\nimport { FunctionComponentsContext } from '@/contexts/functions/FunctionComponentsContext'\nimport { DefaultFunction } from './DefaultFunction'\n\ntype Args = {\n fn: OpenAI.Beta.Threads.Runs.FunctionToolCall.Function\n runStep: SerializedRunStep\n}\n\nexport const Fn = ({\n fn,\n runStep,\n}: Args) => {\n const functionComponentsContext = useContext(FunctionComponentsContext)\n const Component = functionComponentsContext[fn.name] || DefaultFunction\n\n return (\n // @ts-ignore-next-line\n <Component\n fn={fn}\n runStep={runStep}\n />\n )\n}\n","'use client'\nimport { createContext } from 'react'\n\ntype FunctionComponents = {\n [key: string]: React.ReactNode\n}\n\nexport const FunctionComponentsContext = createContext({} as FunctionComponents)\n","import OpenAI from 'openai'\nimport {\n Popover,\n Flex,\n} from '@radix-ui/themes'\nimport { ToolCallBase } from '@/components/toolCalls/ToolCallBase'\nimport { ToolCallTitle } from '@/components/toolCalls/ToolCallBase/ToolCallTitle'\nimport { ToolCallIcon } from '@/components/toolCalls/ToolCallBase/ToolCallIcon'\nimport { Content } from './Content'\n\ntype Args = {\n fn: OpenAI.Beta.Threads.Runs.FunctionToolCall.Function\n runStep: OpenAI.Beta.Threads.Runs.RunStep\n title: string\n}\n\nexport const FunctionBase = ({\n fn,\n runStep,\n title,\n}: Args) => (\n <Popover.Root>\n <Popover.Trigger>\n <Flex>\n <ToolCallBase>\n <ToolCallIcon runStep={runStep} />\n <ToolCallTitle>\n {title}\n </ToolCallTitle>\n </ToolCallBase>\n </Flex>\n </Popover.Trigger>\n <Popover.Content\n style={{\n maxHeight: '200px',\n }}\n >\n <Content fn={fn} />\n </Popover.Content>\n </Popover.Root>\n)\n","import {\n Flex,\n Button,\n} from '@radix-ui/themes'\n\nexport const ToolCallBase = ({\n children,\n}: {\n children: React.ReactNode\n}) => (\n <Flex\n py=\"1\"\n ml=\"-2\"\n >\n <Button\n size=\"1\"\n color=\"gold\"\n variant=\"outline\"\n style={{\n boxShadow: 'none',\n }}\n >\n {children}\n </Button>\n </Flex>\n)\n","import {\n Text,\n} from '@radix-ui/themes'\n\ntype Args = {\n children: React.ReactNode\n}\n\nexport const ToolCallTitle = ({\n children,\n}: Args) => (\n <Text\n weight=\"regular\"\n >\n {children}\n </Text>\n)\n","import {\n CircleIcon,\n CircleBackslashIcon,\n CheckCircledIcon,\n} from '@radix-ui/react-icons'\nimport type { SerializedRunStep } from '@/types'\n\ntype Args = {\n runStep: SerializedRunStep\n}\n\nexport const ToolCallIcon = ({\n runStep,\n}: Args) => {\n if (runStep.completed_at) {\n return (\n <CheckCircledIcon />\n )\n } else if (runStep.cancelled_at || runStep.failed_at || runStep.status === 'expired') {\n return (\n <CircleBackslashIcon />\n )\n } else {\n return (\n <CircleIcon />\n )\n }\n}\n","import { useMemo } from 'react'\nimport { Code, Box } from '@radix-ui/themes'\nimport OpenAI from 'openai'\nimport { formattedJsonOrRaw } from './lib/formattedJsonOrRaw'\n\ntype Args = {\n fn: OpenAI.Beta.Threads.Runs.FunctionToolCall.Function\n}\n\nexport const Content = ({\n fn,\n}: Args) => {\n const args = useMemo(() => (\n formattedJsonOrRaw({\n value: fn.arguments,\n })\n ), [fn])\n\n const output = useMemo(() => (\n formattedJsonOrRaw({\n value: fn.output,\n })\n ), [fn])\n\n return (\n <Code\n variant=\"ghost\"\n color=\"gold\"\n style={{\n whiteSpace: 'pre',\n wordBreak: 'break-word',\n }}\n >\n {args && <Box>\n {args}\n </Box>}\n {output && <Box>\n {output}\n </Box>}\n </Code>\n )\n}\n","export const formattedJsonOrRaw = ({\n value,\n}: {\n value: string | null\n}) => {\n if (!value) {\n return null\n }\n\n try {\n return JSON.stringify(JSON.parse(value), null, 2)\n } catch (error) {\n if (typeof value === 'string') {\n return value\n } else {\n return JSON.stringify(value, null, 2)\n }\n }\n}\n","import OpenAI from 'openai'\n\ntype Args = {\n fn: OpenAI.Beta.Threads.Runs.FunctionToolCall.Function\n runStep: OpenAI.Beta.Threads.Runs.RunStep\n}\n\nexport const title = ({\n fn,\n runStep,\n}: Args) => {\n if (runStep.completed_at) {\n return `Finished ${fn.name}`\n } else if (runStep.cancelled_at) {\n return `Cancelled ${fn.name}`\n } else {\n return `Calling ${fn.name}`\n }\n}\n","import OpenAI from 'openai'\nimport { FunctionBase } from '@/components/functions/FunctionBase'\nimport { title } from './lib/title'\n\ntype Args = {\n fn: OpenAI.Beta.Threads.Runs.FunctionToolCall.Function\n runStep: OpenAI.Beta.Threads.Runs.RunStep\n}\n\nexport const DefaultFunction = ({\n fn,\n runStep,\n}: Args) => (\n <FunctionBase\n fn={fn}\n runStep={runStep}\n title={title({ runStep, fn })}\n />\n)\n","import OpenAI from 'openai'\nimport {\n Popover,\n Flex,\n} from '@radix-ui/themes'\nimport { ToolCallBase } from '@/components/toolCalls/ToolCallBase'\nimport { ToolCallTitle } from '@/components/toolCalls/ToolCallBase/ToolCallTitle'\nimport { ToolCallIcon } from '@/components/toolCalls/ToolCallBase/ToolCallIcon'\nimport type { SerializedRunStep } from '@/types'\nimport { Content } from './Content'\n\nexport const CodeInterpreter = ({\n codeInterpreter,\n runStep,\n}: {\n codeInterpreter: OpenAI.Beta.Threads.Runs.CodeInterpreterToolCall.CodeInterpreter\n runStep: SerializedRunStep\n}) => (\n <Popover.Root>\n <Popover.Trigger>\n <Flex>\n <ToolCallBase>\n <ToolCallIcon runStep={runStep} />\n <ToolCallTitle>\n Using code interpreter\n </ToolCallTitle>\n </ToolCallBase>\n </Flex>\n </Popover.Trigger>\n <Popover.Content\n maxHeight=\"200px\"\n >\n <Content\n codeInterpreter={codeInterpreter}\n />\n </Popover.Content>\n </Popover.Root>\n)\n","import { Code, Box } from '@radix-ui/themes'\nimport OpenAI from 'openai'\n\ntype Args = {\n codeInterpreter: OpenAI.Beta.Threads.Runs.CodeInterpreterToolCall.CodeInterpreter\n}\n\nexport const Content = ({\n codeInterpreter,\n}: Args) => {\n if (!codeInterpreter.input) {\n return null\n }\n\n return (\n <Code\n variant=\"ghost\"\n color=\"gold\"\n style={{\n whiteSpace: 'pre',\n wordBreak: 'break-word',\n }}\n >\n <Box>\n {codeInterpreter.input}\n </Box>\n <Box>\n {JSON.stringify(codeInterpreter.outputs)}\n </Box>\n </Code>\n )\n}\n","import { ToolCallBase } from '@/components/toolCalls/ToolCallBase'\nimport { ToolCallTitle } from '@/components/toolCalls/ToolCallBase/ToolCallTitle'\nimport { ToolCallIcon } from '@/components/toolCalls/ToolCallBase/ToolCallIcon'\nimport type { SerializedRunStep, ToolCall } from '@/types'\n\nexport const FileSearch = ({\n runStep,\n toolCall,\n}: {\n toolCall: ToolCall\n runStep: SerializedRunStep\n}) => (\n <ToolCallBase>\n <ToolCallIcon runStep={runStep} />\n <ToolCallTitle>\n Searching files\n </ToolCallTitle>\n </ToolCallBase>\n)\n","import { ToolCallBase } from '@/components/toolCalls/ToolCallBase'\nimport { ToolCallTitle } from '@/components/toolCalls/ToolCallBase/ToolCallTitle'\nimport { ToolCallIcon } from '@/components/toolCalls/ToolCallBase/ToolCallIcon'\nimport type { SerializedRunStep, ToolCall } from '@/types'\n\nexport const Fallback = ({\n runStep,\n toolCall,\n}: {\n toolCall: ToolCall\n runStep: SerializedRunStep\n}) => (\n <ToolCallBase>\n <ToolCallIcon runStep={runStep} />\n <ToolCallTitle>\n Using tool: {toolCall.type}\n </ToolCallTitle>\n </ToolCallBase>\n)\n","import { Fn } from './Fn'\nimport { CodeInterpreter } from './CodeInterpreter'\nimport { FileSearch } from './FileSearch'\nimport { Fallback } from './Fallback'\nimport type { SerializedRunStep, ToolCall as ToolCallType } from '@/types'\n\ntype Args = {\n toolCall: ToolCallType\n runStep: SerializedRunStep\n}\n\nexport const ToolCall = ({\n toolCall,\n runStep,\n}: Args) => {\n if (toolCall.type === 'function') {\n return (\n <Fn\n fn={toolCall.function}\n runStep={runStep}\n />\n )\n }\n\n if (toolCall.type === 'code_interpreter') {\n return (\n <CodeInterpreter\n codeInterpreter={toolCall.code_interpreter}\n runStep={runStep}\n />\n )\n }\n\n if (toolCall.type === 'file_search') {\n return (\n <FileSearch\n toolCall={toolCall}\n runStep={runStep}\n />\n )\n }\n\n return (\n <Fallback\n toolCall={toolCall}\n runStep={runStep}\n />\n )\n}\n","import {\n Popover,\n Text,\n} from '@radix-ui/themes'\nimport {\n CircleIcon,\n} from '@radix-ui/react-icons'\nimport { ToolCallBase } from '@/components/toolCalls/ToolCallBase'\nimport { ToolCallTitle } from '@/components/toolCalls/ToolCallBase/ToolCallTitle'\n\nexport const Starting = () => (\n <Popover.Root>\n <ToolCallBase>\n <CircleIcon />\n <ToolCallTitle>\n Starting actions\n </ToolCallTitle>\n </ToolCallBase>\n <Popover.Content\n style={{\n maxHeight: '500px',\n }}\n >\n <Text>\n Getting ready to connect to domain API\n </Text>\n </Popover.Content>\n </Popover.Root>\n)\n","import type { SerializedRunStep, StyleProps } from '@/types'\nimport { ToolCalls } from './ToolCalls'\n\ntype Args = {\n runStep: SerializedRunStep\n} & StyleProps\n\nexport const RunStep = ({\n runStep,\n className,\n style,\n}: Args) => {\n if (runStep.step_details.type === 'tool_calls') {\n return (\n <ToolCalls\n className={className}\n style={style}\n stepDetails={runStep.step_details}\n runStep={runStep}\n />\n )\n }\n\n return null\n}\n\nRunStep.ToolCalls = ToolCalls\n","import { useMemo } from 'react'\nimport { useIsMutating } from '@tanstack/react-query'\nimport { useThreadContext } from '@/hooks/threads/useThreadContext'\n\nexport const useIsMutatingMessage = () => {\n const threadContext = useThreadContext()\n\n const mutatingMessagesCount = useIsMutating({\n mutationKey: ['createMessage', threadContext.variables],\n })\n\n const isMutatingMessage = useMemo(() => (\n mutatingMessagesCount > 0\n ), [mutatingMessagesCount])\n\n return isMutatingMessage\n}\n","'use client'\nimport { createContext } from 'react'\nimport { SerializedMessage } from '@/types'\n\nexport const MessageContext = createContext<{\n message: SerializedMessage | null\n}>({\n message: null,\n})\n","import { MessageContext } from '@/contexts/messages/MessageContext'\n\nexport const Provider = MessageContext.Provider\n","import { SerializedMessage } from '@/types'\nimport {\n Flex,\n Badge,\n} from '@radix-ui/themes'\nimport {\n FileIcon,\n} from '@radix-ui/react-icons'\n\nexport const Attachments = ({\n message,\n}: {\n message: SerializedMessage\n}) => {\n if (!message.attachments?.length) return null\n\n return (\n <Flex\n align=\"start\"\n pb=\"1\"\n >\n <Badge\n color=\"gray\"\n variant=\"surface\"\n >\n <FileIcon />\n {message.attachments.length} file{message.attachments.length > 1 ? 's' : ''}\n </Badge>\n </Flex>\n )\n}\n","import OpenAI from 'openai'\nimport Markdown from 'react-markdown'\nimport { useMarkdownContext } from '@/hooks/markdown/useMarkdownContext'\n\ntype Args = {\n content: OpenAI.Beta.Threads.Messages.TextContentBlock\n}\n\nexport const TextContent = ({\n content,\n}: Args) => {\n const {\n getRemarkPlugins,\n ...rest\n } = useMarkdownContext()\n\n return (\n // @ts-ignore-next-line\n <Markdown\n {...rest}\n remarkPlugins={getRemarkPlugins({\n content,\n })}\n >\n {content.text.value}\n </Markdown>\n )\n}\n","import { useContext } from 'react'\nimport { MarkdownContext } from '@/contexts/markdown/MarkdownContext'\n\nexport const useMarkdownContext = () => (\n useContext(MarkdownContext)\n)\n","'use client'\nimport { createContext } from 'react'\nimport { components } from './lib/components'\nimport { getRemarkPlugins } from './lib/getRemarkPlugins'\n\nexport const MarkdownContext = createContext({\n components,\n getRemarkPlugins,\n})\n","import { Heading, Table } from '@radix-ui/themes'\nimport { Paragraph } from './Paragraph'\nimport { Link } from './Link'\nimport { UnorderedList } from './UnorderedList'\nimport { OrderedList } from './OrderedList'\nimport { ListItem } from './ListItem'\nimport { Strong } from './Strong'\nimport { Pre } from './Pre'\nimport { Code } from './Code'\nimport { Img } from './Img'\nimport { Annotation } from './Annotation'\n\nexport const components = {\n p: Paragraph,\n a: Link,\n strong: Strong,\n ul: UnorderedList,\n ol: OrderedList,\n li: ListItem,\n pre: Pre,\n code: Code,\n img: Img,\n annotation: Annotation,\n h1: (props: JSX.IntrinsicElements['h1']) => <Heading as=\"h1\">{props.children}</Heading>,\n h2: (props: JSX.IntrinsicElements['h2']) => <Heading as=\"h2\" size=\"5\">{props.children}</Heading>,\n h3: (props: JSX.IntrinsicElements['h3']) => <Heading as=\"h3\" size=\"4\">{props.children}</Heading>,\n h4: (props: JSX.IntrinsicElements['h4']) => <Heading as=\"h4\" size=\"3\">{props.children}</Heading>,\n h5: (props: JSX.IntrinsicElements['h5']) => <Heading as=\"h5\" size=\"3\">{props.children}</Heading>,\n h6: (props: JSX.IntrinsicElements['h6']) => <Heading as=\"h6\" size=\"3\">{props.children}</Heading>,\n table: (props: JSX.IntrinsicElements['table']) => (\n <>\n <style>{`.rt-TableRootTable { overflow: inherit; }`}</style>\n <Table.Root\n {...props}\n variant=\"surface\"\n mb=\"3\"\n />\n </>\n ),\n thead: Table.Header,\n tbody: Table.Body,\n tr: Table.Row,\n td: Table.Cell,\n th: Table.ColumnHeaderCell,\n}\n","import {\n Box,\n Text,\n} from '@radix-ui/themes'\n\nexport const Paragraph = ({ children }: JSX.IntrinsicElements['p']) => (\n <Box\n pb=\"3\"\n >\n <Text\n size=\"3\"\n style={{\n whiteSpace: 'pre-line',\n wordBreak: 'break-word',\n }}\n >\n {children}\n </Text>\n </Box>\n)\n","import {\n Link as RadixLink,\n} from '@radix-ui/themes'\n\ntype Args = JSX.IntrinsicElements['a']\n\nexport const Link = ({\n children,\n href,\n download,\n target = '_blank',\n}: Args) => (\n <RadixLink\n href={href}\n target={target}\n download={download}\n >\n {children}\n </RadixLink>\n)\n","import {\n Box,\n} from '@radix-ui/themes'\n\nexport const UnorderedList = ({ children }: JSX.IntrinsicElements['ul']) => (\n <Box\n pb=\"3\"\n asChild\n >\n <ul\n style={{\n listStylePosition: 'inside',\n }}\n >\n {children}\n </ul>\n </Box>\n)\n","import {\n Box,\n} from '@radix-ui/themes'\n\nexport const OrderedList = ({ children }: JSX.IntrinsicElements['ul']) => (\n <Box\n pb=\"3\"\n asChild\n >\n <ol\n style={{\n listStylePosition: 'inside',\n }}\n >\n {children}\n </ol>\n </Box>\n)\n","import {\n Box,\n} from '@radix-ui/themes'\n\nexport const ListItem = ({ children }: JSX.IntrinsicElements['li']) => (\n <Box\n pb=\"1\"\n >\n <li>\n {children}\n </li>\n </Box>\n)\n","import {\n Strong as RadixStrong,\n} from '@radix-ui/themes'\n\nexport const Strong = ({ children }: JSX.IntrinsicElements['strong']) => (\n <RadixStrong>\n {children}\n </RadixStrong>\n)\n","import {\n Box,\n} from '@radix-ui/themes'\n\nexport const Pre = ({ children }: JSX.IntrinsicElements['pre']) => (\n <Box\n style={{\n whiteSpace: 'pre-wrap',\n wordBreak: 'break-word',\n }}\n >\n {children}\n </Box>\n)\n","import {\n Code as RadixCode,\n} from '@radix-ui/themes'\nimport { Suggestions } from '@/components/suggestions/Suggestions'\n\nexport const Code = ({\n children,\n className,\n}: JSX.IntrinsicElements['code']) => {\n if (className === 'language-suggestions') {\n return <Suggestions>{children}</Suggestions>\n }\n\n return (\n <RadixCode>\n {children}\n </RadixCode>\n )\n}\n","import { useMemo } from 'react'\nimport { useLatestMessage } from '@/hooks/messages/useLatestMessage'\nimport type { StyleProps } from '@/types'\nimport { Content } from './Content'\nimport { Item } from './Item'\n\nexport const Suggestions = ({\n children,\n className,\n style,\n}: {\n children: React.ReactNode\n} & StyleProps) => {\n const latestMessageProps = useLatestMessage()\n\n const isDisabled = useMemo(() => (\n // @ts-ignore-next-line\n latestMessageProps.latestMessage?.metadata?.isBlocking\n ), [latestMessageProps])\n\n if (latestMessageProps.isLoading) return null\n if (isDisabled) return null\n\n return (\n <Content\n className={className}\n style={style}\n >\n {children}\n </Content>\n )\n}\n\nSuggestions.Item = Item\n","import { useMemo } from 'react'\nimport { useMessages } from '@/hooks/messages/useMessages'\n\nexport const useLatestMessage = () => {\n const props = useMessages()\n\n return useMemo(() => ({\n ...props,\n latestMessage: props.messages[0] || null,\n }), [props])\n}\n","import { useMemo } from 'react'\nimport {\n InfiniteData,\n useInfiniteQuery,\n useQueryClient,\n} from '@tanstack/react-query'\nimport { SerializedMessage, MessagesPage } from '@/types'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\nimport { useThreadContext } from '@/hooks/threads/useThreadContext'\nimport { messagesQueryOptions } from '@/lib/messages/messagesQueryOptions'\n\nconst messages = ({\n props,\n}: {\n props: {\n data: InfiniteData<MessagesPage> | undefined\n },\n}) => {\n if (!props.data) return []\n\n return props.data.pages.reduce<SerializedMessage[]>((acc, page) => (\n acc.concat(page.data)\n ), [])\n}\n\n\nexport const useMessages = () => {\n const queryClient = useQueryClient()\n const threadContext = useThreadContext()\n const superinterfaceContext = useSuperinterfaceContext()\n\n const props = useInfiniteQuery(messagesQueryOptions({\n queryClient,\n threadContext,\n superinterfaceContext,\n }))\n\n return useMemo(() => ({\n ...props,\n // @ts-ignore-next-line\n messages: messages({ props }),\n }), [props])\n}\n","import {\n useQueryClient,\n infiniteQueryOptions,\n} from '@tanstack/react-query'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\nimport { useThreadContext } from '@/hooks/threads/useThreadContext'\nimport { MessagesPage } from '@/types'\nimport { variableParams } from './variableParams'\n\ntype QueryFunctionArgs = {\n queryKey: Readonly<[string, { [key: string]: any }]>\n pageParam?: string\n}\n\nexport const queryOptions = ({\n queryKeyBase,\n path,\n queryClient,\n threadContext,\n superinterfaceContext,\n}: {\n queryKeyBase: string[]\n path: string,\n queryClient: ReturnType<typeof useQueryClient>,\n threadContext: ReturnType<typeof useThreadContext>,\n superinterfaceContext: ReturnType<typeof useSuperinterfaceContext>,\n}) => {\n const queryKey = [...queryKeyBase, threadContext.variables]\n\n return infiniteQueryOptions<MessagesPage>({\n // @ts-ignore-next-line\n queryFn: async ({\n pageParam,\n queryKey,\n }: QueryFunctionArgs) => {\n const [_key, variables] = queryKey\n const params = new URLSearchParams({\n ...(pageParam ? { pageParam } : {}),\n ...variableParams({ variables, superinterfaceContext }),\n })\n\n return fetch(`${superinterfaceContext.baseUrl}${path}?${params}`)\n .then(async (response) => {\n if (response.status !== 200) {\n try {\n const errorResponse = await response.json() as { error: string }\n throw new Error(errorResponse.error)\n } catch (error) {\n throw new Error('Failed to fetch')\n }\n }\n\n return response.json() as Promise<MessagesPage>\n })\n },\n initialPageParam: undefined,\n getNextPageParam: (lastPage: MessagesPage) => {\n if (!lastPage.hasNextPage) return null\n\n return lastPage.lastId\n },\n limit: 10,\n ...threadContext.defaultOptions.queries,\n ...queryClient.getQueryDefaults(queryKey),\n queryKey,\n })\n}\n","import { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\n\nexport const variableParams = ({\n variables,\n superinterfaceContext,\n}: {\n variables: {\n [key: string]: any\n }\n superinterfaceContext: ReturnType<typeof useSuperinterfaceContext>\n}) => {\n if (variables.threadId) return variables\n if (!variables.assistantId) return variables\n if (!superinterfaceContext.threadIdCookieOptions?.get) return variables\n\n const threadId = superinterfaceContext.threadIdCookieOptions.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.threadIdCookieOptions?.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.threadIdCookieOptions.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.threadIdCookieOptions?.get) return variables\n\n const threadId = superinterfaceContext.threadIdCookieOptions.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.threadIdCookieOptions?.get) return formData(variables)\n\n const threadId = superinterfaceContext.threadIdCookieOptions.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_react_markdown","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","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","TextContent","rest","import_jsx_runtime44","Markdown","remarkPlugins","ImageFileContent","import_jsx_runtime45","alt","image_file","ContentPart","import_jsx_runtime46","Message","import_react26","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_react27","MessageGroupBase","import_react28","forwardRef","ref","import_jsx_runtime48","import_themes33","Container","Name","import_jsx_runtime49","import_themes34","MessagesSkeleton","import_react29","_props","import_jsx_runtime50","import_themes35","fallback","marginTop","import_react30","import_jsx_runtime51","import_themes36","import_react_icons9","LightningBoltIcon","AssistantAvatar","AssistantAvatarContextValue","import_react31","import_jsx_runtime52","import_themes37","overflow","import_react32","import_react33","import_jsx_runtime53","import_themes38","import_react_icons10","PersonIcon","UserAvatar","UserAvatarContextValue","import_react34","import_jsx_runtime54","import_themes39","messageGroup","import_jsx_runtime55","import_themes40","MessageGroup","assistantNameContext","import_react35","import_jsx_runtime56","import_themes41","isLoadingError","import_react36","import_jsx_runtime57","StartingSkeleton","import_react37","import_jsx_runtime58","import_themes42","Progress","isVisible","import_react38","import_jsx_runtime59","import_react_intersection_observer","useThrottledEffect","cb","delay","additionalDeps","cbRef","import_react39","throttledCb","useCallback","import_lodash7","throttle","leading","trailing","useInfiniteScroll","isFetchingNextPage","fetchNextPage","containerRef","import_react40","useInView","root","rootMargin","threshold","loaderRef","inView","import_jsx_runtime60","import_themes43","NextPageSkeleton","import_jsx_runtime61","Messages","import_jsx_runtime62","import_themes44","MessageFormContext","import_react41","files","setFiles","isFileLoading","import_react42","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_react43","formProps","useForm","handleSubmit","formState","isSubmitting","reset","watch","import_react_query6","file","import_radash15","tools","import_jsx_runtime64","FormProvider","import_themes46","usePrevious","state","import_react44","import_react_textarea_autosize","TextareaBase","import_react45","import_jsx_runtime65","TextareaAutosize","border","outline","boxSizing","resize","import_jsx_runtime66","import_themes47","pt","Input","import_react46","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_react47","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_react48","setToasts","prevToasts","import_jsx_runtime72","Toast2","Viewport","padding","margin","listStyle","import_jsx_runtime73","import_themes52","import_jsx_runtime74","import_react49","publicApiKey","import_react_query8","tanstackQueryOptions","import_react_query9","useQuery","import_react50","assistant","import_react51","isOpen","setIsOpen","import_react52","threadDialogContext","import_react53","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_react54","recorderProps","stop","pause","resume","visualizationAnalyser","messageAudioProps","playing","paused","isReady","play","noop","on","addEventListener","off","removeEventListener","usePermission","permissionDesc","import_react55","setState","mounted","permissionStatus","navigator","permissions","query","catch","blobToData","blob","Promise","resolve","FileReader","onloadend","readAsDataURL","useStatus","createMessageProps","import_react56","isAudioPlayed","import_use_audio_capture","import_react_use_audio_player","useInterval","callback","savedCallback","import_react57","interval","setInterval","clearInterval","useRecorder","isStopOnSilence","onStart","onStop","import_react58","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_react59","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_react60","barCount","BarsVisualizer","barWidth","import_react61","barHeights","setBarHeights","draw","fill","clusteredFrequencyData","import_radash18","cluster","frequencyDataCluster","import_lodash8","mean","import_jsx_runtime83","import_themes58","Grid","columns","gridTemplateColumns","barHeight","Visualization","audioThreadContext","import_react62","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_react63","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_react64","import_jsx_runtime94","import_themes64","avatar","import_jsx_runtime95","import_themes65","RadixAvatar","import_react65","prevComponents","import_react66","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_react26 = 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_react_markdown = __toESM(require(\"react-markdown\"), 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: import_themes31.Table.Header,\n tbody: import_themes31.Table.Body,\n tr: import_themes31.Table.Row,\n td: import_themes31.Table.Cell,\n th: import_themes31.Table.ColumnHeaderCell\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 = (\n // @ts-ignore-next-line\n require(\"react/jsx-runtime\")\n);\nvar TextContent = ({\n content\n}) => {\n const {\n getRemarkPlugins: getRemarkPlugins2,\n ...rest\n } = useMarkdownContext();\n return /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(\n import_react_markdown.default,\n {\n ...rest,\n remarkPlugins: getRemarkPlugins2({\n content\n }),\n children: content.text.value\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_react26.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_react26.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_react36 = require(\"react\");\n\n// src/hooks/messageGroups/useMessageGroups/index.ts\nvar import_react27 = 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_react27.useMemo)(\n () => ({\n messageGroups: messageGroups({ messages: messages2 })\n }),\n [messages2]\n);\n\n// src/components/skeletons/MessagesSkeleton/index.tsx\nvar import_react29 = require(\"react\");\nvar import_themes35 = require(\"@radix-ui/themes\");\n\n// src/components/messageGroups/MessageGroupBase/index.tsx\nvar import_react28 = require(\"react\");\nvar import_themes33 = require(\"@radix-ui/themes\");\nvar import_jsx_runtime48 = require(\"react/jsx-runtime\");\nvar MessageGroupBase = (0, import_react28.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_react29.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_react35 = require(\"react\");\nvar import_themes41 = require(\"@radix-ui/themes\");\n\n// src/components/messageGroups/MessageGroupBase/AssistantAvatar.tsx\nvar import_react31 = require(\"react\");\nvar import_themes37 = require(\"@radix-ui/themes\");\n\n// src/contexts/assistants/AssistantAvatarContext/index.tsx\nvar import_react30 = 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_react30.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_react31.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_react32 = require(\"react\");\nvar AssistantNameContext = (0, import_react32.createContext)(\"Assistant\");\n\n// src/components/messageGroups/MessageGroupBase/UserAvatar.tsx\nvar import_react34 = require(\"react\");\nvar import_themes39 = require(\"@radix-ui/themes\");\n\n// src/contexts/users/UserAvatarContext/index.tsx\nvar import_react33 = 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_react33.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_react34.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_react35.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_react36.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_react38 = require(\"react\");\n\n// src/components/skeletons/StartingSkeleton/index.tsx\nvar import_react37 = 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_react37.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_react38.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_react40 = 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_react39 = require(\"react\");\nvar useThrottledEffect = (cb, delay, additionalDeps) => {\n const cbRef = (0, import_react39.useRef)(cb);\n const throttledCb = (0, import_react39.useCallback)(\n import_lodash7.default.throttle((...args) => cbRef.current(...args), delay, {\n leading: true,\n trailing: true\n }),\n [delay]\n );\n (0, import_react39.useEffect)(() => {\n cbRef.current = cb;\n });\n (0, import_react39.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_react40.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_react42 = require(\"react\");\n\n// src/contexts/messages/MessageFormContext/index.ts\nvar import_react41 = require(\"react\");\nvar MessageFormContext = (0, import_react41.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_react42.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_react43 = 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_react43.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_react43.useMemo)(() => files.some((file) => isOptimistic({ id: file.id })), [files]);\n const isLoading = (0, import_react43.useMemo)(() => isMutatingMessage || isSubmitting, [\n isMutatingMessage,\n isSubmitting\n ]);\n const { latestMessage } = useLatestMessage();\n const isDisabled = (0, import_react43.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_react44 = require(\"react\");\nvar usePrevious = (state) => {\n const ref = (0, import_react44.useRef)();\n (0, import_react44.useEffect)(() => {\n ref.current = state;\n });\n return ref.current;\n};\n\n// src/components/threads/Thread/MessageForm/Field/Control.tsx\nvar import_react46 = require(\"react\");\n\n// src/components/textareas/TextareaBase/index.tsx\nvar import_react45 = 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_react45.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_react46.useContext)(AssistantNameContext);\n const {\n register\n } = (0, import_react_hook_form2.useFormContext)();\n const { isDisabled, isLoading } = useMessageFormContext();\n const isSubmitDisabled = (0, import_react46.useMemo)(() => isDisabled || isLoading, [isDisabled, isLoading]);\n const isDisabledPrevious = usePrevious(isDisabled);\n const textareaRef = (0, import_react46.useRef)(null);\n const textareaProps = register(\"content\");\n (0, import_react46.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_react47 = 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_react47.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_react48 = 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_react48.useState)([]);\n const addToast = (0, import_react48.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_react49 = require(\"react\");\nvar useMessageContext = () => (0, import_react49.useContext)(MessageContext);\n\n// src/hooks/assistants/useAssistant/index.ts\nvar import_react50 = 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_react50.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_react53 = require(\"react\");\n\n// src/contexts/threads/ThreadDialogContext/index.ts\nvar import_react51 = require(\"react\");\nvar ThreadDialogContext = (0, import_react51.createContext)({\n isOpen: false,\n setIsOpen: () => {\n }\n});\n\n// src/hooks/threads/useThreadDialogContext/index.ts\nvar import_react52 = require(\"react\");\nvar useThreadDialogContext = () => (0, import_react52.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_react53.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_react54 = require(\"react\");\nvar AudioThreadContext = (0, import_react54.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_react55 = 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_react55.useState)(\"\");\n (0, import_react55.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_react56 = require(\"react\");\nvar useStatus = ({\n messageAudioProps,\n recorderProps,\n createMessageProps\n}) => {\n const latestMessageProps = useLatestMessage();\n const status = (0, import_react56.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_react58 = require(\"react\");\nvar import_react_use_audio_player = require(\"react-use-audio-player\");\n\n// src/hooks/misc/useInterval.ts\nvar import_react57 = require(\"react\");\nvar useInterval = (callback, delay) => {\n const savedCallback = (0, import_react57.useRef)(() => {\n });\n (0, import_react57.useEffect)(() => {\n savedCallback.current = callback;\n });\n (0, import_react57.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_react58.useState)(null);\n const [noiseStart, setNoiseStart] = (0, import_react58.useState)(null);\n const [mediaStream, setMediaStream] = (0, import_react58.useState)(null);\n const [status, setStatus] = (0, import_react58.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_react58.useState)(false);\n (0, import_react58.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_react58.useState)(null);\n const isInited = (0, import_react58.useRef)(false);\n (0, import_react58.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_react58.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_react58.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_react58.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_react58.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_react59 = 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_react59.useState)(false);\n const [stoppedMessageIds, setStoppedMessageIds] = (0, import_react59.useState)([]);\n const [playedMessageSentences, setPlayedMessageSentences] = (0, import_react59.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_react59.useState)(false);\n const latestMessageProps = useLatestMessage();\n const unplayedMessageSentences = (0, import_react59.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_react59.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_react59.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_react59.useState)(null);\n const isAudioEngineInited = (0, import_react59.useRef)(false);\n (0, import_react59.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_react59.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_react59.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_react62 = 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_react60 = require(\"react\");\nvar useAudioThreadContext = () => (0, import_react60.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_react61 = 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_react61.useState)([]);\n const draw = (0, import_react61.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_react61.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_react62.useContext)(AssistantNameContext);\n const [scale, setScale] = (0, import_react62.useState)(0);\n const draw = (0, import_react62.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_react62.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_react63 = 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_react63.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_react64 = 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_react64.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_react66 = require(\"react\");\n\n// src/hooks/components/useComponents.ts\nvar import_react65 = require(\"react\");\nvar useComponents = () => (0, import_react65.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_react66.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 Markdown from 'react-markdown'\nimport { useMarkdownContext } from '@/hooks/markdown/useMarkdownContext'\n\ntype Args = {\n content: OpenAI.Beta.Threads.Messages.TextContentBlock\n}\n\nexport const TextContent = ({\n content,\n}: Args) => {\n const {\n getRemarkPlugins,\n ...rest\n } = useMarkdownContext()\n\n return (\n // @ts-ignore-next-line\n <Markdown\n {...rest}\n remarkPlugins={getRemarkPlugins({\n content,\n })}\n >\n {content.text.value}\n </Markdown>\n )\n}\n","import { useContext } from 'react'\nimport { MarkdownContext } from '@/contexts/markdown/MarkdownContext'\n\nexport const useMarkdownContext = () => (\n useContext(MarkdownContext)\n)\n","'use client'\nimport { createContext } from 'react'\nimport { components } from './lib/components'\nimport { getRemarkPlugins } from './lib/getRemarkPlugins'\n\nexport const MarkdownContext = createContext({\n components,\n getRemarkPlugins,\n})\n","import { Heading, Table } from '@radix-ui/themes'\nimport { Paragraph } from './Paragraph'\nimport { Link } from './Link'\nimport { UnorderedList } from './UnorderedList'\nimport { OrderedList } from './OrderedList'\nimport { ListItem } from './ListItem'\nimport { Strong } from './Strong'\nimport { Pre } from './Pre'\nimport { Code } from './Code'\nimport { Img } from './Img'\nimport { Annotation } from './Annotation'\n\nexport const components = {\n p: Paragraph,\n a: Link,\n strong: Strong,\n ul: UnorderedList,\n ol: OrderedList,\n li: ListItem,\n pre: Pre,\n code: Code,\n img: Img,\n annotation: Annotation,\n h1: (props: JSX.IntrinsicElements['h1']) => <Heading as=\"h1\">{props.children}</Heading>,\n h2: (props: JSX.IntrinsicElements['h2']) => <Heading as=\"h2\" size=\"5\">{props.children}</Heading>,\n h3: (props: JSX.IntrinsicElements['h3']) => <Heading as=\"h3\" size=\"4\">{props.children}</Heading>,\n h4: (props: JSX.IntrinsicElements['h4']) => <Heading as=\"h4\" size=\"3\">{props.children}</Heading>,\n h5: (props: JSX.IntrinsicElements['h5']) => <Heading as=\"h5\" size=\"3\">{props.children}</Heading>,\n h6: (props: JSX.IntrinsicElements['h6']) => <Heading as=\"h6\" size=\"3\">{props.children}</Heading>,\n table: (props: JSX.IntrinsicElements['table']) => (\n <>\n <style>{`.rt-TableRootTable { overflow: inherit; }`}</style>\n <Table.Root\n {...props}\n variant=\"surface\"\n mb=\"3\"\n />\n </>\n ),\n thead: Table.Header,\n tbody: Table.Body,\n tr: Table.Row,\n td: Table.Cell,\n th: Table.ColumnHeaderCell,\n}\n","import {\n Box,\n Text,\n} from '@radix-ui/themes'\n\nexport const Paragraph = ({ children }: JSX.IntrinsicElements['p']) => (\n <Box\n pb=\"3\"\n >\n <Text\n size=\"3\"\n style={{\n whiteSpace: 'pre-line',\n wordBreak: 'break-word',\n }}\n >\n {children}\n </Text>\n </Box>\n)\n","import {\n Link as RadixLink,\n} from '@radix-ui/themes'\n\ntype Args = JSX.IntrinsicElements['a']\n\nexport const Link = ({\n children,\n href,\n download,\n target = '_blank',\n}: Args) => (\n <RadixLink\n href={href}\n target={target}\n download={download}\n >\n {children}\n </RadixLink>\n)\n","import {\n Box,\n} from '@radix-ui/themes'\n\nexport const UnorderedList = ({ children }: JSX.IntrinsicElements['ul']) => (\n <Box\n pb=\"3\"\n asChild\n >\n <ul\n style={{\n listStylePosition: 'inside',\n }}\n >\n {children}\n </ul>\n </Box>\n)\n","import {\n Box,\n} from '@radix-ui/themes'\n\nexport const OrderedList = ({ children }: JSX.IntrinsicElements['ul']) => (\n <Box\n pb=\"3\"\n asChild\n >\n <ol\n style={{\n listStylePosition: 'inside',\n }}\n >\n {children}\n </ol>\n </Box>\n)\n","import {\n Box,\n} from '@radix-ui/themes'\n\nexport const ListItem = ({ children }: JSX.IntrinsicElements['li']) => (\n <Box\n pb=\"1\"\n >\n <li>\n {children}\n </li>\n </Box>\n)\n","import {\n Strong as RadixStrong,\n} from '@radix-ui/themes'\n\nexport const Strong = ({ children }: JSX.IntrinsicElements['strong']) => (\n <RadixStrong>\n {children}\n </RadixStrong>\n)\n","import {\n Box,\n} from '@radix-ui/themes'\n\nexport const Pre = ({ children }: JSX.IntrinsicElements['pre']) => (\n <Box\n style={{\n whiteSpace: 'pre-wrap',\n wordBreak: 'break-word',\n }}\n >\n {children}\n </Box>\n)\n","import {\n Code as RadixCode,\n} from '@radix-ui/themes'\nimport { Suggestions } from '@/components/suggestions/Suggestions'\n\nexport const Code = ({\n children,\n className,\n}: JSX.IntrinsicElements['code']) => {\n if (className === 'language-suggestions') {\n return <Suggestions>{children}</Suggestions>\n }\n\n return (\n <RadixCode>\n {children}\n </RadixCode>\n )\n}\n","import { useMemo } from 'react'\nimport { useLatestMessage } from '@/hooks/messages/useLatestMessage'\nimport type { StyleProps } from '@/types'\nimport { Content } from './Content'\nimport { Item } from './Item'\n\nexport const Suggestions = ({\n children,\n className,\n style,\n}: {\n children: React.ReactNode\n} & StyleProps) => {\n const latestMessageProps = useLatestMessage()\n\n const isDisabled = useMemo(() => (\n // @ts-ignore-next-line\n latestMessageProps.latestMessage?.metadata?.isBlocking\n ), [latestMessageProps])\n\n if (latestMessageProps.isLoading) return null\n if (isDisabled) return null\n\n return (\n <Content\n className={className}\n style={style}\n >\n {children}\n </Content>\n )\n}\n\nSuggestions.Item = Item\n","import { useMemo } from 'react'\nimport { useMessages } from '@/hooks/messages/useMessages'\n\nexport const useLatestMessage = () => {\n const props = useMessages()\n\n return useMemo(() => ({\n ...props,\n latestMessage: props.messages[0] || null,\n }), [props])\n}\n","import { useMemo } from 'react'\nimport {\n InfiniteData,\n useInfiniteQuery,\n useQueryClient,\n} from '@tanstack/react-query'\nimport { SerializedMessage, MessagesPage } from '@/types'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\nimport { useThreadContext } from '@/hooks/threads/useThreadContext'\nimport { messagesQueryOptions } from '@/lib/messages/messagesQueryOptions'\n\nconst messages = ({\n props,\n}: {\n props: {\n data: InfiniteData<MessagesPage> | undefined\n },\n}) => {\n if (!props.data) return []\n\n return props.data.pages.reduce<SerializedMessage[]>((acc, page) => (\n acc.concat(page.data)\n ), [])\n}\n\n\nexport const useMessages = () => {\n const queryClient = useQueryClient()\n const threadContext = useThreadContext()\n const superinterfaceContext = useSuperinterfaceContext()\n\n const props = useInfiniteQuery(messagesQueryOptions({\n queryClient,\n threadContext,\n superinterfaceContext,\n }))\n\n return useMemo(() => ({\n ...props,\n // @ts-ignore-next-line\n messages: messages({ props }),\n }), [props])\n}\n","import {\n useQueryClient,\n infiniteQueryOptions,\n} from '@tanstack/react-query'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\nimport { useThreadContext } from '@/hooks/threads/useThreadContext'\nimport { MessagesPage } from '@/types'\nimport { variableParams } from './variableParams'\n\ntype QueryFunctionArgs = {\n queryKey: Readonly<[string, { [key: string]: any }]>\n pageParam?: string\n}\n\nexport const queryOptions = ({\n queryKeyBase,\n path,\n queryClient,\n threadContext,\n superinterfaceContext,\n}: {\n queryKeyBase: string[]\n path: string,\n queryClient: ReturnType<typeof useQueryClient>,\n threadContext: ReturnType<typeof useThreadContext>,\n superinterfaceContext: ReturnType<typeof useSuperinterfaceContext>,\n}) => {\n const queryKey = [...queryKeyBase, threadContext.variables]\n\n return infiniteQueryOptions<MessagesPage>({\n // @ts-ignore-next-line\n queryFn: async ({\n pageParam,\n queryKey,\n }: QueryFunctionArgs) => {\n const [_key, variables] = queryKey\n const params = new URLSearchParams({\n ...(pageParam ? { pageParam } : {}),\n ...variableParams({ variables, superinterfaceContext }),\n })\n\n return fetch(`${superinterfaceContext.baseUrl}${path}?${params}`)\n .then(async (response) => {\n if (response.status !== 200) {\n try {\n const errorResponse = await response.json() as { error: string }\n throw new Error(errorResponse.error)\n } catch (error) {\n throw new Error('Failed to fetch')\n }\n }\n\n return response.json() as Promise<MessagesPage>\n })\n },\n initialPageParam: undefined,\n getNextPageParam: (lastPage: MessagesPage) => {\n if (!lastPage.hasNextPage) return null\n\n return lastPage.lastId\n },\n limit: 10,\n ...threadContext.defaultOptions.queries,\n ...queryClient.getQueryDefaults(queryKey),\n queryKey,\n })\n}\n","import { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\n\nexport const variableParams = ({\n variables,\n superinterfaceContext,\n}: {\n variables: {\n [key: string]: any\n }\n superinterfaceContext: ReturnType<typeof useSuperinterfaceContext>\n}) => {\n if (variables.threadId) return variables\n if (!variables.assistantId) return variables\n if (!superinterfaceContext.threadIdStorageOptions?.get) return variables\n\n const threadId = superinterfaceContext.threadIdStorageOptions.get({ assistantId: variables.assistantId })\n if (!threadId) return variables\n\n return {\n ...variables,\n threadId,\n }\n}\n","import { useQueryClient } from '@tanstack/react-query'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\nimport { useThreadContext } from '@/hooks/threads/useThreadContext'\nimport { queryOptions } from '@/lib/threads/queryOptions'\n\nexport const messagesQueryOptions = ({\n queryClient,\n threadContext,\n superinterfaceContext,\n}: {\n queryClient: ReturnType<typeof useQueryClient>,\n threadContext: ReturnType<typeof useThreadContext>,\n superinterfaceContext: ReturnType<typeof useSuperinterfaceContext>,\n}) => (\n queryOptions({\n queryKeyBase: ['messages'],\n path: '/messages',\n queryClient,\n threadContext,\n superinterfaceContext,\n })\n)\n","import { useMemo } from 'react'\nimport { isEmpty } from 'radash'\nimport { onlyText } from 'react-children-utilities'\nimport { useIsMutatingMessage } from '@/hooks/messages/useIsMutatingMessage'\nimport {\n Flex,\n} from '@radix-ui/themes'\nimport type { StyleProps } from '@/types'\nimport { Item } from './Item'\n\nexport const Content = ({\n children,\n className,\n style,\n}: {\n children: React.ReactNode\n} & StyleProps) => {\n const isMutatingMessage = useIsMutatingMessage()\n\n const suggestions = useMemo(() => (\n onlyText(children).split(/\\r?\\n/).filter((c) => !isEmpty(c)).map((c) => c.trim())\n ), [children])\n\n if (isEmpty(suggestions)) return null\n\n return (\n <Flex\n gap=\"2\"\n py=\"2\"\n wrap=\"wrap\"\n className={className}\n style={style}\n >\n {suggestions.map((suggestion) => (\n <Item\n key={suggestion}\n suggestion={suggestion}\n isDisabled={isMutatingMessage}\n />\n ))}\n </Flex>\n )\n}\n","import {\n ArrowUpIcon,\n} from '@radix-ui/react-icons'\nimport {\n Text,\n Button,\n Spinner,\n} from '@radix-ui/themes'\nimport { useCreateMessage } from '@/hooks/messages/useCreateMessage'\nimport {\n useQueryClient,\n} from '@tanstack/react-query'\nimport { useThreadContext } from '@/hooks/threads/useThreadContext'\nimport { useToasts } from '@/hooks/toasts/useToasts'\nimport { createMessageDefaultOnError } from '@/lib/errors/createMessageDefaultOnError'\nimport type { StyleProps } from '@/types'\n\nexport const Item = ({\n suggestion,\n isDisabled,\n className,\n style,\n}: {\n suggestion: string\n isDisabled: boolean\n} & StyleProps) => {\n const { addToast } = useToasts()\n const queryClient = useQueryClient()\n const threadContext = useThreadContext()\n\n const { createMessage, isPending } = useCreateMessage({\n onError: createMessageDefaultOnError({\n queryClient,\n addToast,\n threadContext,\n }),\n })\n\n return (\n <Content\n onClick={() => {\n createMessage({\n // @ts-ignore-next-line\n content: suggestion,\n })\n }}\n isDisabled={isDisabled}\n isPending={isPending}\n className={className}\n style={style}\n >\n {suggestion}\n </Content>\n )\n}\n\nconst Content = ({\n onClick,\n isDisabled,\n isPending,\n children,\n className,\n style,\n}: {\n onClick: () => void\n isDisabled: boolean\n isPending: boolean\n children: React.ReactNode\n} & StyleProps) => (\n <Button\n className={className}\n variant=\"soft\"\n onClick={onClick}\n disabled={isDisabled}\n style={{\n minHeight: 'var(--base-button-height)',\n height: 'inherit',\n flexShrink: 1,\n ...(style ?? {}),\n }}\n >\n <Text\n size=\"1\"\n weight=\"regular\"\n >\n {children}\n </Text>\n\n <Spinner loading={isPending}>\n <ArrowUpIcon\n style={{\n flexShrink: 0,\n }}\n />\n </Spinner>\n </Button>\n)\n\nItem.Content = Content\n","import { partob } from 'radash'\nimport {\n useMutation,\n useQueryClient,\n} from '@tanstack/react-query'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\nimport { useThreadContext } from '@/hooks/threads/useThreadContext'\nimport { mutationOptions } from './lib/mutationOptions'\n\nexport const useCreateMessage = ({\n onError = () => {},\n}: {\n onError?: (error: unknown) => void\n} = {\n onError: () => {},\n}) => {\n const queryClient = useQueryClient()\n const superinterfaceContext = useSuperinterfaceContext()\n const threadContext = useThreadContext()\n\n const props = useMutation(mutationOptions({\n queryClient,\n threadContext,\n superinterfaceContext,\n onError,\n }))\n\n return {\n ...props,\n createMessage: partob(props.mutateAsync, threadContext.variables),\n }\n}\n","import OpenAI from 'openai'\nimport { omit } from 'radash'\nimport { QueryClient } from '@tanstack/react-query'\nimport { data } from './data'\n\ntype Variables = {\n content: string\n attachments: OpenAI.Beta.Threads.Messages.Message['attachments'] | undefined\n [key: string]: any\n}\n\nexport const onMutate = ({\n queryClient,\n}: {\n queryClient: QueryClient,\n}) => async (\n newMessage: Variables,\n) => {\n const queryKey = ['messages', omit(newMessage, ['content', 'attachments'])]\n await queryClient.cancelQueries({ queryKey })\n\n const prevMessages = queryClient.getQueryData(queryKey)\n\n queryClient.setQueryData(\n queryKey,\n data({ newMessage })\n )\n\n return {\n prevMessages,\n newMessage,\n }\n}\n","import dayjs from 'dayjs'\nimport OpenAI from 'openai'\nimport { optimisticId } from '@/lib/optimistic/optimisticId'\n\ntype Args = {\n newMessage: {\n content: string\n attachments: OpenAI.Beta.Threads.Messages.Message['attachments'] | undefined\n }\n}\n\nexport const data = ({\n newMessage,\n}: Args) => (prevData: any) => {\n const message = {\n id: optimisticId(),\n role: 'user' as OpenAI.Beta.Threads.Messages.Message['role'],\n created_at: dayjs().unix(),\n object: 'thread.message' as OpenAI.Beta.Threads.Messages.Message['object'],\n content: [\n {\n type: 'text',\n text: {\n annotations: [],\n value: newMessage.content,\n },\n } as OpenAI.Beta.Threads.Messages.TextContentBlock,\n ],\n run_id: null,\n assistant_id: null,\n thread_id: null,\n attachments: newMessage.attachments ?? [],\n metadata: {},\n runSteps: [],\n }\n\n if (!prevData) {\n return {\n pageParams: [],\n pages: [\n {\n data: [message],\n hasNextPage: false,\n lastId: message.id,\n },\n ],\n }\n }\n\n const [latestPage, ...pagesRest] = prevData.pages\n\n return {\n ...prevData,\n pages: [\n {\n ...latestPage,\n data: [\n message,\n ...latestPage.data,\n ],\n },\n ...pagesRest,\n ],\n }\n}\n","import { uid } from 'radash'\n\nexport const optimisticId = () => (\n `-${uid(24)}`\n)\n","import { JSONParser } from '@streamparser/json-whatwg'\nimport {\n useQueryClient,\n} from '@tanstack/react-query'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\nimport { useThreadContext } from '@/hooks/threads/useThreadContext'\nimport { handleResponse } from './handleResponse'\nimport { body } from './body'\n\nexport const mutationFn = ({\n superinterfaceContext,\n queryClient,\n threadContext,\n}: {\n superinterfaceContext: ReturnType<typeof useSuperinterfaceContext>\n queryClient: ReturnType<typeof useQueryClient>\n threadContext: ReturnType<typeof useThreadContext>\n}) => async (variables: {\n content: string\n [key: string]: any\n}) => {\n const abortController = new AbortController()\n superinterfaceContext.createMessageAbortControllerRef.current = abortController\n\n const response = await fetch(`${superinterfaceContext.baseUrl}/messages`, {\n method: 'POST',\n body: JSON.stringify(body({\n variables,\n superinterfaceContext,\n })),\n signal: abortController.signal,\n })\n\n if (response.status !== 200) {\n try {\n const errorResponse = await response.json() as { error: string }\n throw new Error(errorResponse.error)\n } catch (error) {\n throw new Error('Failed to send your message, try again. If you are the owner, check the logs.')\n }\n }\n\n if (response.body == null) {\n throw new Error('The response body is empty.');\n }\n\n const parser = new JSONParser({ stringBufferSize: undefined, paths: ['$'], separator: '' })\n const reader = response.body.pipeThrough(parser).getReader()\n\n const messagesQueryKey = ['messages', threadContext.variables]\n\n while (true) {\n const { done, value } = await reader.read()\n\n if (done) break\n\n handleResponse({\n value,\n messagesQueryKey,\n queryClient,\n superinterfaceContext,\n })\n }\n}\n","import OpenAI from 'openai'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\n\nexport const threadCreated = ({\n value,\n superinterfaceContext,\n}: {\n value: OpenAI.Beta.Assistants.AssistantStreamEvent.ThreadCreated\n superinterfaceContext: ReturnType<typeof useSuperinterfaceContext>\n}) => {\n if (!superinterfaceContext.threadIdStorageOptions?.set) return\n // @ts-ignore-next-line\n if (!value.data.metadata?.assistantId) return\n // @ts-ignore-next-line\n if (!value.data.metadata?.threadId) return\n\n superinterfaceContext.threadIdStorageOptions.set({\n // @ts-ignore-next-line\n assistantId: value.data.metadata.assistantId,\n // @ts-ignore-next-line\n threadId: value.data.metadata.threadId,\n })\n}\n","import _ from 'lodash'\n\ntype Args = {\n id: string\n}\n\nexport const isOptimistic = ({\n id,\n}: Args) => (\n _.startsWith(id, '-')\n)\n","import { last } from 'radash'\nimport { SerializedMessage } from '@/types'\nimport { isOptimistic } from '@/lib/optimistic/isOptimistic'\n\nexport const extendMessage = ({\n message,\n messages,\n}: {\n message: SerializedMessage\n messages: SerializedMessage[]\n}) => {\n const prevRunMessages = messages.filter((m: SerializedMessage) => (\n m.run_id === message.run_id\n ))\n\n const prevOptimitisticRunMessages = prevRunMessages.filter((m: SerializedMessage) => (\n isOptimistic({ id: m.id })\n ))\n\n const runSteps = last(prevOptimitisticRunMessages)?.runSteps ?? last(prevRunMessages)?.runSteps ?? []\n\n return {\n ...message,\n runSteps,\n }\n}\n","import { QueryClient } from '@tanstack/react-query'\nimport { SerializedMessage, ThreadMessageCreatedEvent } from '@/types'\nimport { isOptimistic } from '@/lib/optimistic/isOptimistic'\nimport { extendMessage } from './extendMessage'\nimport { MessagesQueryKey } from '@/types'\n\nconst appendMessage = ({\n message,\n messages,\n}: {\n message: SerializedMessage\n messages: SerializedMessage[]\n}) => {\n const prevMessages = messages.filter((m: SerializedMessage) => (\n m.run_id != message.run_id || !isOptimistic({ id: m.id })\n ))\n\n return [\n extendMessage({ message, messages }),\n ...prevMessages,\n ]\n}\n\nexport const threadMessageCreated = ({\n value,\n messagesQueryKey,\n queryClient,\n}: {\n value: ThreadMessageCreatedEvent\n messagesQueryKey: MessagesQueryKey\n queryClient: QueryClient\n}) => (\n queryClient.setQueryData(\n messagesQueryKey,\n (prevData: any) => {\n if (!prevData) {\n return {\n pageParams: [],\n pages: [\n {\n data: appendMessage({ message: value.data, messages: [] }),\n hasNextPage: false,\n lastId: value.data.id,\n },\n ],\n }\n }\n\n const [latestPage, ...pagesRest] = prevData.pages\n\n return {\n ...prevData,\n pages: [\n {\n ...latestPage,\n data: appendMessage({ message: value.data, messages: latestPage.data }),\n },\n ...pagesRest,\n ],\n }\n }\n )\n)\n","import { QueryClient } from '@tanstack/react-query'\nimport OpenAI from 'openai'\nimport _ from 'lodash'\nimport { omit } from 'radash'\nimport { MessagesQueryKey } from '@/types'\n\nconst updatedContentPart = ({\n prevContentPart,\n delta,\n}: {\n prevContentPart: OpenAI.Beta.Threads.Messages.MessageContent\n delta: OpenAI.Beta.Threads.Messages.MessageContentDelta\n}) => {\n if (!prevContentPart) {\n return omit(delta, ['index'])\n }\n\n if (delta.type === 'text' && delta.text && prevContentPart.type == 'text' && prevContentPart.text) {\n return {\n ...prevContentPart,\n text: {\n ...prevContentPart.text,\n value: `${prevContentPart.text.value}${delta.text.value}`,\n annotations: [\n ...(prevContentPart.text.annotations ?? []),\n ...(delta.text.annotations ?? []),\n ]\n },\n }\n }\n\n return prevContentPart\n}\n\nconst updatedContent = ({\n content,\n value,\n}: {\n content: OpenAI.Beta.Threads.Messages.MessageContent\n value: OpenAI.Beta.Assistants.AssistantStreamEvent.ThreadMessageDelta\n}) => {\n if (!value.data.delta.content) return content\n\n const result = _.cloneDeep(content)\n\n value.data.delta.content.forEach((delta: OpenAI.Beta.Threads.Messages.MessageContentDelta) => {\n // @ts-ignore-next-line\n result[delta.index] = updatedContentPart({\n // @ts-ignore-next-line\n prevContentPart: result[delta.index],\n delta,\n })\n })\n\n return result\n}\n\nexport const threadMessageDelta = ({\n value,\n queryClient,\n messagesQueryKey,\n}: {\n value: OpenAI.Beta.Assistants.AssistantStreamEvent.ThreadMessageDelta\n messagesQueryKey: MessagesQueryKey\n queryClient: QueryClient\n}) => (\n queryClient.setQueryData(\n messagesQueryKey,\n (prevData: any) => {\n if (!prevData) {\n return {\n pageParams: [],\n pages: [\n {\n data: [],\n hasNextPage: false,\n lastId: null,\n },\n ],\n }\n }\n\n const [latestPage, ...pagesRest] = prevData.pages\n const [latestMessage, ...messagesRest] = latestPage.data\n\n return {\n ...prevData,\n pages: [\n {\n ...latestPage,\n data: [\n {\n ...latestMessage,\n content: updatedContent({ content: latestMessage.content, value }),\n },\n ...messagesRest,\n ],\n },\n ...pagesRest,\n ],\n }\n }\n )\n)\n","import { replace } from 'radash'\nimport { ThreadMessageCompletedEvent } from '@/types'\nimport { extendMessage } from './extendMessage'\nimport {\n QueryClient,\n} from '@tanstack/react-query'\nimport { MessagesQueryKey } from '@/types'\n\nexport const threadMessageCompleted = ({\n value,\n queryClient,\n messagesQueryKey,\n}: {\n messagesQueryKey: MessagesQueryKey\n value: ThreadMessageCompletedEvent\n queryClient: QueryClient\n}) => (\n queryClient.setQueryData(\n messagesQueryKey,\n (prevData: any) => {\n if (!prevData) {\n return {\n pageParams: [],\n pages: [\n {\n data: [],\n hasNextPage: false,\n lastId: null,\n },\n ],\n }\n }\n\n const [latestPage, ...pagesRest] = prevData.pages\n\n return {\n ...prevData,\n pages: [\n {\n ...latestPage,\n data: replace(latestPage.data, extendMessage({ message: value.data, messages: latestPage.data }), (m) => m.id === value.data.id),\n },\n ...pagesRest,\n ],\n }\n }\n )\n)\n","import { QueryClient } from '@tanstack/react-query'\nimport OpenAI from 'openai'\nimport { optimisticId } from '@/lib/optimistic/optimisticId'\nimport { MessagesQueryKey } from '@/types'\n\nexport const threadRunCreated = ({\n value,\n queryClient,\n messagesQueryKey,\n}: {\n value: OpenAI.Beta.Assistants.AssistantStreamEvent.ThreadRunCreated\n messagesQueryKey: MessagesQueryKey\n queryClient: QueryClient\n}) => (\n queryClient.setQueryData(\n messagesQueryKey,\n (prevData: any) => {\n if (!prevData) return prevData\n\n const [latestPage, ...pagesRest] = prevData.pages\n\n return {\n ...prevData,\n pages: [\n {\n ...latestPage,\n data: [\n {\n id: optimisticId(),\n assistant_id: value.data.assistant_id,\n content: [],\n created_at: value.data.created_at,\n attachments: [],\n metadata: {},\n status: 'in_progress',\n role: 'assistant',\n runSteps: [],\n run_id: value.data.id,\n thread_id: value.data.thread_id,\n },\n ...latestPage.data,\n ]\n },\n ...pagesRest,\n ],\n }\n }\n )\n)\n","import { QueryClient } from '@tanstack/react-query'\nimport OpenAI from 'openai'\nimport { MessagesQueryKey } from '@/types'\n\nexport const threadRunFailed = ({\n value,\n queryClient,\n messagesQueryKey,\n}: {\n value: OpenAI.Beta.Assistants.AssistantStreamEvent.ThreadRunCreated\n messagesQueryKey: MessagesQueryKey\n queryClient: QueryClient\n}) => {\n throw new Error('Failed to send your message, try again. If you are the owner, check the logs.')\n}\n","import { QueryClient } from '@tanstack/react-query'\nimport OpenAI from 'openai'\nimport { SerializedMessage, MessagesQueryKey } from '@/types'\n\nexport const threadRunStepCreated = ({\n value,\n queryClient,\n messagesQueryKey,\n}: {\n value: OpenAI.Beta.Assistants.AssistantStreamEvent.ThreadRunStepCreated\n messagesQueryKey: MessagesQueryKey\n queryClient: QueryClient\n}) => (\n queryClient.setQueryData(\n messagesQueryKey,\n (prevData: any) => {\n if (!prevData) return prevData\n\n const [latestPage, ...pagesRest] = prevData.pages\n\n return {\n ...prevData,\n pages: [\n {\n ...latestPage,\n data: latestPage.data.map((m: SerializedMessage) => {\n if (m.run_id === value.data.run_id) {\n return {\n ...m,\n runSteps: [\n value.data,\n ...m.runSteps,\n ],\n }\n }\n\n return m\n }),\n },\n ...pagesRest,\n ],\n }\n }\n )\n)\n","import { QueryClient } from '@tanstack/react-query'\nimport _ from 'lodash'\nimport { omit } from 'radash'\nimport OpenAI from 'openai'\nimport { SerializedMessage, SerializedRunStep, ThreadRunStepDeltaEvent, MessagesQueryKey } from '@/types'\n\nconst updatedToolCall = ({\n toolCall,\n delta,\n}: {\n toolCall: OpenAI.Beta.Threads.Runs.ToolCall\n delta: OpenAI.Beta.Threads.Runs.ToolCallDelta\n}) => {\n if (!toolCall) {\n return omit(delta, ['index'])\n }\n\n if (delta.type === 'function' && delta.function && toolCall.type === 'function' && toolCall.function) {\n const result = _.cloneDeep(toolCall)\n\n for (const [key, value] of Object.entries(delta.function)) {\n // @ts-ignore-next-line\n result.function[key] = `${result.function[key] ?? ''}${value}`\n }\n\n return result\n }\n\n return toolCall\n}\n\nconst updatedRunStep = ({\n runStep,\n value,\n}: {\n runStep: SerializedRunStep\n value: ThreadRunStepDeltaEvent\n}) => {\n // @ts-ignore-next-line\n if (!runStep?.step_details?.tool_calls) return runStep\n\n if (value.data.delta?.step_details?.type === 'tool_calls') {\n if (!value.data.delta.step_details.tool_calls) return runStep\n\n // @ts-ignore-next-line\n const newToolCalls = _.cloneDeep(runStep.step_details.tool_calls)\n\n value.data.delta.step_details.tool_calls.forEach((delta: OpenAI.Beta.Threads.Runs.ToolCallDelta) => (\n newToolCalls[delta.index] = updatedToolCall({\n toolCall: newToolCalls[delta.index],\n delta,\n })\n ))\n\n return {\n ...runStep,\n step_details: {\n ...runStep.step_details,\n ...value.data.delta.step_details,\n tool_calls: newToolCalls,\n },\n }\n } else {\n return runStep\n }\n}\n\n\nexport const threadRunStepDelta = ({\n value,\n queryClient,\n messagesQueryKey,\n}: {\n value: ThreadRunStepDeltaEvent\n messagesQueryKey: MessagesQueryKey\n queryClient: QueryClient\n}) => (\n queryClient.setQueryData(\n messagesQueryKey,\n (prevData: any) => {\n if (!prevData) return prevData\n\n const [latestPage, ...pagesRest] = prevData.pages\n\n return {\n ...prevData,\n pages: [\n {\n ...latestPage,\n data: latestPage.data.map((m: SerializedMessage) => {\n if (m.run_id === value.data.run_id) {\n return {\n ...m,\n runSteps: m.runSteps.map((rs: SerializedRunStep) => {\n if (rs.id === value.data.id) {\n return updatedRunStep({ runStep: rs, value })\n }\n\n return rs\n }),\n }\n }\n\n return m\n }),\n },\n ...pagesRest,\n ],\n }\n }\n )\n)\n","import { QueryClient } from '@tanstack/react-query'\nimport OpenAI from 'openai'\nimport { SerializedRunStep, SerializedMessage, MessagesQueryKey } from '@/types'\nimport { replace } from 'radash'\n\nexport const threadRunStepCompleted = ({\n value,\n queryClient,\n messagesQueryKey,\n}: {\n value: OpenAI.Beta.Assistants.AssistantStreamEvent.ThreadRunStepCompleted\n messagesQueryKey: MessagesQueryKey\n queryClient: QueryClient\n}) => (\n queryClient.setQueryData(\n messagesQueryKey,\n (prevData: any) => {\n if (!prevData) return prevData\n\n const [latestPage, ...pagesRest] = prevData.pages\n\n return {\n ...prevData,\n pages: [\n {\n ...latestPage,\n data: latestPage.data.map((m: SerializedMessage) => {\n if (m.run_id === value.data.run_id) {\n return {\n ...m,\n runSteps: replace(m.runSteps, value.data, (rs: SerializedRunStep) => rs.id === value.data.id),\n }\n }\n\n return m\n }),\n },\n ...pagesRest,\n ],\n }\n }\n )\n)\n","import { QueryClient } from '@tanstack/react-query'\nimport { ToolCall } from '@/types'\nimport _ from 'lodash'\nimport OpenAI from 'openai'\nimport { map } from 'radash'\nimport { MessagesQueryKey } from '@/types'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\n\nexport const threadRunRequiresAction = async ({\n value,\n queryClient,\n messagesQueryKey,\n superinterfaceContext,\n}: {\n value: OpenAI.Beta.Assistants.AssistantStreamEvent.ThreadRunRequiresAction & {\n data: {\n required_action: {\n type: 'submit_client_tool_outputs'\n submit_client_tool_outputs: {\n tool_calls: ToolCall[]\n }\n }\n }\n }\n messagesQueryKey: MessagesQueryKey\n queryClient: QueryClient\n superinterfaceContext: ReturnType<typeof useSuperinterfaceContext>\n}) => {\n // @ts-ignore-next-line\n if (value.data.required_action.type === 'submit_client_tool_outputs') {\n // @ts-ignore-next-line\n const toolCalls = value.data.required_action.submit_client_tool_outputs.tool_calls\n\n const toolOutputs = await map(toolCalls, async (toolCall: ToolCall) => {\n if (toolCall.type !== 'function') {\n return {\n toolCallId: toolCall.id,\n output: `Error: client tool type ${toolCall.type} is not supported.`,\n }\n }\n\n // @ts-ignore-next-line\n const fn = window[toolCall.function.name as string]\n\n if (!fn) {\n return {\n toolCallId: toolCall.id,\n output: `Error: client function ${toolCall.function.name} is not defined.`,\n }\n }\n\n const args = toolCall.function.arguments\n const parsedArgs = JSON.parse(args)\n\n let output\n\n try {\n output = await fn(parsedArgs)\n } catch (error: any) {\n output = `Error: ${error.message}`\n }\n\n return {\n toolCallId: toolCall.id,\n output,\n }\n })\n\n return fetch(`${superinterfaceContext.baseUrl}/threads/runs/submit-client-tool-outputs`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n toolOutputs,\n ...superinterfaceContext.variables,\n })\n })\n }\n}\n","import { threadCreated } from './threadCreated'\nimport { threadMessageCreated } from './threadMessageCreated'\nimport { threadMessageDelta } from './threadMessageDelta'\nimport { threadMessageCompleted } from './threadMessageCompleted'\nimport { threadRunCreated } from './threadRunCreated'\nimport { threadRunFailed } from './threadRunFailed'\nimport { threadRunStepCreated } from './threadRunStepCreated'\nimport { threadRunStepDelta } from './threadRunStepDelta'\nimport { threadRunStepCompleted } from './threadRunStepCompleted'\nimport { threadRunRequiresAction } from './threadRunRequiresAction'\n\nexport const handlers = {\n 'thread.created': threadCreated,\n 'thread.message.created': threadMessageCreated,\n 'thread.message.delta': threadMessageDelta,\n 'thread.message.completed': threadMessageCompleted,\n 'thread.run.created': threadRunCreated,\n 'thread.run.failed': threadRunFailed,\n 'thread.run.step.created': threadRunStepCreated,\n 'thread.run.step.delta': threadRunStepDelta,\n 'thread.run.step.completed': threadRunStepCompleted,\n 'thread.run.requires_action': threadRunRequiresAction,\n}\n","import OpenAI from 'openai'\nimport {\n useQueryClient,\n} from '@tanstack/react-query'\nimport { MessagesQueryKey } from '@/types'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\nimport { handlers } from './handlers'\n\nexport const handleResponse = ({\n value,\n messagesQueryKey,\n queryClient,\n superinterfaceContext,\n}: {\n value: {\n value: OpenAI.Beta.Assistants.AssistantStreamEvent\n }\n messagesQueryKey: MessagesQueryKey\n queryClient: ReturnType<typeof useQueryClient>\n superinterfaceContext: ReturnType<typeof useSuperinterfaceContext>\n}) => {\n // @ts-ignore-next-line\n const handler = handlers[value.value.event]\n\n if (!handler) {\n return console.log('Missing handler', { value })\n }\n\n return handler({\n value: value.value,\n queryClient,\n messagesQueryKey,\n superinterfaceContext,\n })\n}\n","import { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\n\nexport const body = ({\n variables,\n superinterfaceContext,\n}: {\n variables: {\n [key: string]: any\n }\n superinterfaceContext: ReturnType<typeof useSuperinterfaceContext>\n}) => {\n if (variables.threadId) return variables\n if (!variables.assistantId) return variables\n if (!superinterfaceContext.threadIdStorageOptions?.get) return variables\n\n const threadId = superinterfaceContext.threadIdStorageOptions.get({ assistantId: variables.assistantId })\n if (!threadId) return variables\n\n return {\n ...variables,\n threadId,\n }\n}\n","import _ from 'lodash'\nimport {\n useQueryClient,\n} from '@tanstack/react-query'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\nimport { useThreadContext } from '@/hooks/threads/useThreadContext'\nimport { onMutate } from './onMutate'\nimport { mutationFn } from './mutationFn'\n\nexport const mutationOptions = ({\n queryClient,\n threadContext,\n superinterfaceContext,\n onError,\n}: {\n queryClient: ReturnType<typeof useQueryClient>,\n threadContext: ReturnType<typeof useThreadContext>,\n superinterfaceContext: ReturnType<typeof useSuperinterfaceContext>,\n onError: (error: unknown) => void\n}) => {\n const mutationKey = ['createMessage', threadContext.variables]\n\n return {\n mutationFn: mutationFn({\n queryClient,\n superinterfaceContext,\n threadContext,\n }),\n onMutate: onMutate({ queryClient }),\n onError,\n ...threadContext.defaultOptions.mutations,\n ...queryClient.getMutationDefaults(mutationKey),\n mutationKey,\n }\n}\n","import { useContext } from 'react'\nimport { ToastsContext } from '@/contexts/toasts/ToastsContext'\n\nexport const useToasts = () => (\n useContext(ToastsContext)\n)\n","'use client'\nimport { createContext } from 'react'\nimport { Toast } from '@/types'\n\nexport const ToastsContext = createContext<{\n toasts: Toast[]\n addToast: (toast: Toast) => void\n}>({\n toasts: [],\n addToast: () => {},\n})\n","import {\n QueryClient,\n} from '@tanstack/react-query'\nimport { Toast } from '@/types'\nimport { useThreadContext } from '@/hooks/threads/useThreadContext'\n\nexport const createMessageDefaultOnError = ({\n queryClient,\n addToast,\n threadContext,\n}: {\n queryClient: QueryClient\n addToast: (toast: Toast) => void\n threadContext: ReturnType<typeof useThreadContext>\n}) => (error: any) => {\n if (error.name === 'AbortError') {\n queryClient.invalidateQueries({ queryKey: ['messages', threadContext.variables] })\n queryClient.invalidateQueries({ queryKey: ['runs', threadContext.variables] })\n return\n }\n\n addToast({ type: 'error', message: error.message })\n}\n","import {\n Box,\n} from '@radix-ui/themes'\n\nexport const Image = (props: JSX.IntrinsicElements['img']) => (\n <Box\n pb=\"3\"\n >\n <img\n {...props}\n style={{\n maxWidth: '100%',\n height: 'auto',\n }}\n />\n </Box>\n)\n","// list is from https://www.npmjs.com/package/video-extensions\nconst videoExtensions = [\n '3g2',\n '3gp',\n 'aaf',\n 'asf',\n 'avchd',\n 'avi',\n 'drc',\n 'flv',\n 'm2v',\n 'm3u8',\n 'm4p',\n 'm4v',\n 'mkv',\n 'mng',\n 'mov',\n 'mp2',\n 'mp4',\n 'mpe',\n 'mpeg',\n 'mpg',\n 'mpv',\n 'mxf',\n 'nsv',\n 'ogg',\n 'ogv',\n 'qt',\n 'rm',\n 'rmvb',\n 'roq',\n 'svi',\n 'vob',\n 'webm',\n 'wmv',\n 'yuv',\n]\n\nexport const isVideoSrc = ({\n src,\n}: {\n src: string\n}) => (\n videoExtensions.includes(src.split('.').pop() || '')\n)\n","export const isAudioSrc = ({\n src,\n}: {\n src: string\n}) => (\n src.endsWith('.mp3') || src.endsWith('.wav')\n)\n","import {\n Flex,\n} from '@radix-ui/themes'\nimport '@vidstack/react/player/styles/base.css'\nimport {\n VideoMimeType,\n MediaPlayer,\n MediaProvider,\n Controls,\n} from '@vidstack/react'\nimport { PlayButton } from '@/components/media/PlayButton'\nimport { VolumeButton } from '@/components/media/VolumeButton'\nimport { Time } from '@/components/media/Time'\nimport { MediaContainer } from '@/components/media/MediaContainer'\nimport { FullscreenButton } from './FullscreenButton'\n\nexport const Video = ({\n src,\n}: {\n src: string\n}) => (\n <MediaContainer>\n <MediaPlayer\n src={{\n src,\n type: `video/${src.split('.').pop()}` as VideoMimeType,\n }}\n playsInline\n hideControlsOnMouseLeave\n crossOrigin\n >\n <MediaProvider />\n\n <style>\n {`\n .superinterface-video-controls {\n opacity: 0;\n transition: opacity 0.2s ease-out;\n }\n\n .superinterface-video-controls[data-visible] {\n opacity: 1;\n }\n `}\n </style>\n <Flex\n asChild\n position=\"absolute\"\n bottom=\"0\"\n left=\"0\"\n right=\"0\"\n className=\"superinterface-video-controls\"\n p=\"3\"\n style={{\n zIndex: 10,\n background: 'var(--accent-4)',\n }}\n >\n <Controls.Root>\n <Flex\n asChild\n align=\"center\"\n gap=\"3\"\n flexGrow=\"1\"\n >\n <Controls.Group>\n <PlayButton />\n <Time />\n <VolumeButton />\n <FullscreenButton />\n </Controls.Group>\n </Flex>\n </Controls.Root>\n </Flex>\n </MediaPlayer>\n </MediaContainer>\n)\n","import {\n PlayButton as VidstackPlayButton,\n useMediaState,\n} from '@vidstack/react'\nimport {\n IconButton,\n} from '@radix-ui/themes'\nimport {\n PlayIcon,\n PauseIcon,\n} from '@radix-ui/react-icons'\n\nexport const PlayButton = () => {\n const isPaused = useMediaState('paused')\n\n return (\n <IconButton\n variant=\"ghost\"\n asChild\n >\n <VidstackPlayButton>\n {isPaused ? <PlayIcon /> : <PauseIcon />}\n </VidstackPlayButton>\n </IconButton>\n )\n}\n","import {\n MuteButton,\n useMediaState,\n useMediaRemote,\n} from '@vidstack/react'\nimport {\n IconButton,\n HoverCard,\n Slider,\n} from '@radix-ui/themes'\nimport {\n SpeakerModerateIcon,\n SpeakerOffIcon,\n} from '@radix-ui/react-icons'\n\nexport const VolumeButton = () => {\n const volume = useMediaState('volume')\n const isMuted = useMediaState('muted')\n const remote = useMediaRemote()\n\n return (\n <HoverCard.Root>\n <HoverCard.Trigger>\n <IconButton\n variant=\"ghost\"\n asChild\n >\n <MuteButton>\n {(isMuted || volume === 0) ? <SpeakerOffIcon /> : <SpeakerModerateIcon />}\n </MuteButton>\n </IconButton>\n </HoverCard.Trigger>\n <HoverCard.Content\n size=\"1\"\n side=\"top\"\n height=\"100px\"\n >\n <Slider\n size=\"1\"\n variant=\"soft\"\n orientation=\"vertical\"\n value={[volume * 100]}\n onValueChange={([value]) => (\n remote.changeVolume(value / 100)\n )}\n />\n </HoverCard.Content>\n </HoverCard.Root>\n )\n}\n","import {\n useState,\n useEffect,\n useMemo,\n} from 'react'\nimport {\n useMediaState,\n useMediaRemote,\n} from '@vidstack/react'\nimport {\n Slider,\n} from '@radix-ui/themes'\n\nexport const Time = () => {\n const time = useMediaState('currentTime')\n const duration = useMediaState('duration')\n const seeking = useMediaState('seeking')\n const canSeek = useMediaState('canSeek')\n const remote = useMediaRemote()\n\n const [value, setValue] = useState(0)\n\n useEffect(() => {\n if (seeking) return;\n setValue((time / duration) * 100);\n }, [time, duration, seeking])\n\n const step = useMemo(() => (\n (1 / duration) * 100\n ), [duration])\n\n return (\n <Slider\n size=\"1\"\n variant=\"soft\"\n value={[value]}\n disabled={!canSeek}\n step={Number.isFinite(step) ? step : 1}\n onValueChange={([value]) => {\n setValue(value)\n remote.seeking((value / 100) * duration)\n }}\n onValueCommit={([value]) => {\n remote.seek((value / 100) * duration)\n }}\n />\n )\n}\n","import {\n Card,\n Inset,\n} from '@radix-ui/themes'\n\nexport const MediaContainer = ({\n children,\n}: {\n children: React.ReactNode\n}) => (\n <Card\n mb=\"3\"\n >\n <Inset\n clip=\"padding-box\"\n style={{\n display: 'flex',\n flexDirection: 'column',\n }}\n >\n {children}\n </Inset>\n </Card>\n)\n","import {\n FullscreenButton as VidstackFullscreenButton,\n useMediaState,\n} from '@vidstack/react'\nimport {\n IconButton,\n} from '@radix-ui/themes'\nimport {\n EnterFullScreenIcon,\n ExitFullScreenIcon,\n} from '@radix-ui/react-icons'\n\nexport const FullscreenButton = () => {\n const isFullscreen = useMediaState('fullscreen')\n\n return (\n <IconButton\n variant=\"ghost\"\n asChild\n >\n <VidstackFullscreenButton>\n {isFullscreen ? <ExitFullScreenIcon /> : <EnterFullScreenIcon />}\n </VidstackFullscreenButton>\n </IconButton>\n )\n}\n","import {\n Flex,\n} from '@radix-ui/themes'\nimport '@vidstack/react/player/styles/base.css'\nimport {\n MediaPlayer,\n MediaProvider,\n Controls,\n AudioMimeType,\n} from '@vidstack/react'\nimport { PlayButton } from '@/components/media/PlayButton'\nimport { VolumeButton } from '@/components/media/VolumeButton'\nimport { Time } from '@/components/media/Time'\nimport { MediaContainer } from '@/components/media/MediaContainer'\n\nexport const Audio = ({\n src,\n}: {\n src: string\n}) => (\n <MediaContainer>\n <MediaPlayer\n src={{\n src,\n type: `audio/${src.split('.').pop()}` as AudioMimeType,\n }}\n viewType=\"audio\"\n crossOrigin\n playsInline\n >\n <MediaProvider />\n\n <Flex\n asChild\n p=\"3\"\n flexGrow=\"1\"\n style={{\n zIndex: 10,\n background: 'var(--accent-4)',\n }}\n >\n <Controls.Root>\n <Flex\n asChild\n align=\"center\"\n gap=\"3\"\n flexGrow=\"1\"\n >\n <Controls.Group>\n <PlayButton />\n <Time />\n <VolumeButton />\n </Controls.Group>\n </Flex>\n </Controls.Root>\n </Flex>\n </MediaPlayer>\n </MediaContainer>\n)\n","import { Image } from '@/components/images/Image'\nimport { isVideoSrc } from './lib/isVideoSrc'\nimport { isAudioSrc } from './lib/isAudioSrc'\nimport { Video } from './Video'\nimport { Audio } from './Audio'\n\nexport const Img = (props: JSX.IntrinsicElements['img']) => {\n if (!props.src) {\n return (\n <Image\n {...props}\n />\n )\n } else if (isVideoSrc({ src: props.src })) {\n return (\n <Video\n src={props.src!}\n />\n )\n } else if (isAudioSrc({ src: props.src })) {\n return (\n <Audio\n src={props.src!}\n />\n )\n } else {\n return (\n <Image\n {...props}\n />\n )\n }\n}\n","import {\n QuoteIcon,\n} from '@radix-ui/react-icons'\nimport OpenAI from 'openai'\nimport { AnnotationBase } from './AnnotationBase'\nimport { FilePathAnnotation } from './FilePathAnnotation'\n\nexport const Annotation = ({\n annotation,\n children,\n}: {\n annotation: OpenAI.Beta.Threads.Messages.Annotation\n children: React.ReactNode\n}) => {\n if (annotation.type === 'file_citation') {\n return (\n <AnnotationBase\n icon={<QuoteIcon />}\n content=\"File cited.\"\n />\n )\n } else if (annotation.type === 'file_path') {\n return (\n <FilePathAnnotation\n annotation={annotation}\n >\n {children}\n </FilePathAnnotation>\n )\n }\n\n return null\n}\n","import {\n IconButton,\n Popover,\n Flex,\n Text,\n} from '@radix-ui/themes'\n\nexport const AnnotationBase = ({\n icon,\n content,\n}: {\n icon: React.ReactNode,\n content: string\n}) => (\n <Popover.Root>\n <Popover.Trigger>\n <IconButton\n variant=\"soft\"\n color=\"gray\"\n size=\"1\"\n >\n {icon}\n </IconButton>\n </Popover.Trigger>\n <Popover.Content\n size=\"1\"\n >\n <Flex\n direction=\"column\"\n >\n <Text\n size=\"1\"\n color=\"gray\"\n >\n {content}\n </Text>\n </Flex>\n </Popover.Content>\n </Popover.Root>\n)\n","import OpenAI from 'openai'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\nimport { Link } from '@/contexts/markdown/MarkdownContext/lib/components/Link'\n\nexport const FilePathAnnotation = ({\n annotation,\n children,\n}: {\n annotation: OpenAI.Beta.Threads.Messages.FilePathAnnotation\n children: React.ReactNode\n}) => {\n const superinterfaceContext = useSuperinterfaceContext()\n const nextSearchParams = new URLSearchParams(superinterfaceContext.variables)\n\n return (\n <Link\n href={`${superinterfaceContext.baseUrl}/files/${annotation.file_path.file_id}/contents?${nextSearchParams}`}\n target=\"_self\"\n download\n >\n {children}\n </Link>\n )\n}\n","import OpenAI from 'openai'\nimport remarkGfm from 'remark-gfm'\nimport { remarkAnnotation } from '@/lib/remark/remarkAnnotation'\n\nexport const getRemarkPlugins = ({\n content,\n}: {\n content: OpenAI.Beta.Threads.Messages.TextContentBlock\n}) => [\n remarkAnnotation({ content }),\n remarkGfm,\n]\n","import OpenAI from 'openai'\nimport { isNumber } from 'radash'\nimport type { Node, Literal, Position } from 'unist'\nimport type { Text, Link } from 'mdast'\n// @ts-ignore-next-line\nimport flatMap from 'unist-util-flatmap'\n\ninterface AnnotationNode extends Literal {\n type: 'annotation'\n value: string\n position?: Position\n data: {\n hName: 'annotation'\n hProperties: {\n annotation: any\n }\n }\n}\n\nconst sortedAnnotations = ({\n content,\n}: {\n content: OpenAI.Beta.Threads.Messages.TextContentBlock\n}) =>\n content.text.annotations.sort((a, b) => a.start_index - b.start_index)\n\nexport const remarkAnnotation = ({\n content,\n}: {\n content: OpenAI.Beta.Threads.Messages.TextContentBlock\n}) => {\n return () => {\n return (tree: any) => {\n flatMap(tree, (node: Node) => {\n // Process text and link nodes\n if (node.type === 'text' || node.type === 'link') {\n return processNodeWithAnnotations({ node, content })\n } else {\n // Return other nodes as-is\n return [node]\n }\n })\n }\n }\n}\n\nconst processNodeWithAnnotations = ({\n node,\n content,\n}: {\n node: Node\n content: OpenAI.Beta.Threads.Messages.TextContentBlock\n}): Node[] => {\n if (!content.text?.annotations?.length) {\n return [node]\n }\n\n if (!node.position) {\n return [node]\n }\n\n const annotations = sortedAnnotations({ content })\n\n if (node.type === 'text') {\n // node is a Text node\n return processTextNode({ node: node as Text, annotations })\n } else if (node.type === 'link') {\n // node is a Link node\n const linkNode = node as Link\n // Process link node's children\n linkNode.children = flatMap(linkNode.children, (childNode: Node) => {\n if (childNode.type === 'text') {\n return processTextNode({ node: childNode as Text, annotations })\n } else {\n return [childNode]\n }\n })\n return [linkNode]\n } else {\n // Return node as-is\n return [node]\n }\n}\n\nconst processTextNode = ({\n node,\n annotations,\n}: {\n node: Text\n annotations: any[]\n}): Node[] => {\n if (!node.position || !node.value) {\n return [node]\n }\n\n const nodeStart = node.position.start.offset!\n const nodeEnd = node.position.end.offset!\n\n if (!isNumber(nodeStart) || !isNumber(nodeEnd)) {\n return [node]\n }\n\n const newNodes: Node[] = []\n let lastIndex = nodeStart\n\n annotations.forEach((annotation) => {\n const annotationStart = annotation.start_index\n const annotationEnd = annotation.end_index\n\n if (nodeEnd <= annotationStart || nodeStart >= annotationEnd) {\n return\n }\n\n const start = Math.max(nodeStart, annotationStart)\n const end = Math.min(nodeEnd, annotationEnd)\n\n if (lastIndex < start) {\n newNodes.push(createTextNode({ node, startOffset: lastIndex, endOffset: start }))\n }\n\n newNodes.push(\n createAnnotationNode({\n node,\n startOffset: start,\n endOffset: end,\n annotation,\n })\n )\n lastIndex = end\n })\n\n if (lastIndex < nodeEnd) {\n newNodes.push(createTextNode({ node, startOffset: lastIndex, endOffset: nodeEnd }))\n }\n\n return newNodes\n}\n\nconst createTextNode = ({\n node,\n startOffset,\n endOffset,\n}: {\n node: Text\n startOffset: number\n endOffset: number\n}): Text => {\n const valueStart = startOffset - node.position!.start.offset!\n const valueEnd = endOffset - node.position!.start.offset!\n\n return {\n type: 'text',\n value: node.value.slice(valueStart, valueEnd),\n position: {\n start: {\n ...node.position!.start,\n offset: startOffset,\n },\n end: {\n ...node.position!.end,\n offset: endOffset,\n },\n },\n }\n}\n\nconst createAnnotationNode = ({\n node,\n startOffset,\n endOffset,\n annotation,\n}: {\n node: Text\n startOffset: number\n endOffset: number\n annotation: any\n}): AnnotationNode => {\n const valueStart = startOffset - node.position!.start.offset!\n const valueEnd = endOffset - node.position!.start.offset!\n\n return {\n type: 'annotation',\n value: node.value.slice(valueStart, valueEnd),\n position: {\n start: {\n ...node.position!.start,\n offset: startOffset,\n },\n end: {\n ...node.position!.end,\n offset: endOffset,\n },\n },\n data: {\n hName: 'annotation',\n hProperties: {\n annotation,\n },\n },\n }\n}\n","import OpenAI from 'openai'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\nimport { Image } from '@/components/images/Image'\n\nexport const ImageFileContent = ({\n content,\n}: {\n content: OpenAI.Beta.Threads.Messages.ImageFileContentBlock\n}) => {\n const superinterfaceContext = useSuperinterfaceContext()\n const nextSearchParams = new URLSearchParams(superinterfaceContext.variables)\n\n return (\n <Image\n alt=\"\"\n src={`${superinterfaceContext.baseUrl}/files/${content.image_file.file_id}/contents?${nextSearchParams}`}\n />\n )\n}\n","import OpenAI from 'openai'\nimport { TextContent } from './TextContent'\nimport { ImageFileContent } from './ImageFileContent'\n\nexport const ContentPart = ({\n content,\n}: {\n content: OpenAI.Beta.Threads.Messages.Message['content'][0]\n}) => {\n if (content.type === 'text') {\n return (\n <TextContent\n content={content}\n />\n )\n }\n\n if (content.type === 'image_file') {\n return (\n <ImageFileContent\n content={content}\n />\n )\n }\n\n return null\n}\n","'use client'\nimport { useEffect } from 'react'\nimport { useMessages } from '@/hooks/messages/useMessages'\nimport { useMessageGroups } from '@/hooks/messageGroups/useMessageGroups'\nimport { MessageGroup as MessageGroupType } from '@/types'\nimport { MessagesSkeleton } from '@/components/skeletons/MessagesSkeleton'\nimport { useToasts } from '@/hooks/toasts/useToasts'\nimport { MessageGroup } from './MessageGroup'\n\nexport const Content = () => {\n const {\n messages,\n isLoading,\n isLoadingError,\n } = useMessages()\n\n const { addToast } = useToasts()\n\n const { messageGroups } = useMessageGroups({\n messages,\n })\n\n useEffect(() => {\n if (isLoadingError) {\n addToast({ type: 'error', message: 'Could not load messages. Please try again.' })\n }\n }, [isLoadingError, addToast])\n\n if (isLoading || isLoadingError) {\n return (\n <MessagesSkeleton />\n )\n }\n\n return (\n <>\n {messageGroups.map((messageGroup: MessageGroupType) => (\n <MessageGroup\n key={messageGroup.id}\n messageGroup={messageGroup}\n />\n ))}\n </>\n )\n}\n","import { useMemo } from 'react'\nimport { messageGroups as getMessageGroups } from './lib/messageGroups'\nimport { SerializedMessage } from '@/types'\n\ntype Args = {\n messages: SerializedMessage[]\n}\n\nexport const useMessageGroups = ({\n messages,\n}: Args) => (\n useMemo(\n () => ({\n messageGroups: getMessageGroups({ messages }),\n }),\n [messages]\n )\n)\n","import _ from 'lodash'\nimport { last } from 'radash'\nimport { SerializedMessage, MessageGroup } from '@/types'\nimport { order } from '@/lib/messages/order'\nimport { newGroup } from './newGroup'\n\ntype Args = {\n messages: SerializedMessage[]\n}\n\nexport const messageGroups = ({\n messages,\n}: Args) =>\n _.reduce(\n order({ messages }),\n (groups: MessageGroup[], message: SerializedMessage) => {\n const group = last(groups)\n\n if (!group) return newGroup({ groups, message })\n\n if (group.role !== message.role) {\n return newGroup({\n groups,\n message,\n })\n }\n\n return [\n ..._.dropRight(groups),\n {\n ...group,\n messages: [...group.messages, message],\n },\n ]\n },\n []\n )\n","import { sort } from 'radash'\nimport { SerializedMessage } from '@/types'\n\ntype Args = {\n messages: SerializedMessage[]\n}\n\nexport const order = ({ messages }: Args) =>\n sort(messages, m => m.created_at, true)\n","import { SerializedMessage } from '@/types'\n\ntype Args = {\n message: SerializedMessage\n}\n\nexport const newGroupItem = ({ message }: Args) => ({\n id: message.id,\n role: message.role,\n createdAt: message.created_at,\n messages: [message],\n})\n","import { SerializedMessage, MessageGroup } from '@/types'\nimport { newGroupItem } from './newGroupItem'\n\ntype Args = {\n groups: MessageGroup[]\n message: SerializedMessage\n}\n\nexport const newGroup = ({ groups, message }: Args) => [\n ...groups,\n newGroupItem({\n message,\n }),\n]\n","import { forwardRef } from 'react'\nimport {\n Flex,\n Avatar,\n Box,\n Skeleton,\n} from '@radix-ui/themes'\nimport { MessageGroupBase } from '@/components/messageGroups/MessageGroupBase'\nimport { Name } from '@/components/messageGroups/MessageGroupBase/Name'\n\nexport const MessagesSkeleton = forwardRef(function MessagesSkeleton(_props, ref) {\n return (\n <MessageGroupBase\n // @ts-ignore-next-line\n ref={ref}\n >\n <Skeleton loading>\n <Avatar\n fallback={<Flex />}\n size=\"1\"\n />\n </Skeleton>\n\n <Box\n pb=\"3\"\n >\n <Name>\n <Skeleton\n loading\n style={{\n width: '128px',\n }}\n />\n </Name>\n\n <Skeleton\n loading\n style={{\n width: '256px',\n }}\n />\n\n <Skeleton\n loading\n style={{\n width: '256px',\n marginTop: 'var(--space-2)',\n }}\n />\n\n <Skeleton\n loading\n style={{\n width: '256px',\n marginTop: 'var(--space-2)',\n }}\n />\n </Box>\n </MessageGroupBase>\n )\n})\n","import { forwardRef } from 'react'\nimport {\n Flex,\n Container,\n} from '@radix-ui/themes'\n\ntype Args = {\n children: React.ReactNode\n}\n\nexport const MessageGroupBase = forwardRef(function MessageGroupBase({\n children,\n}: Args, ref: React.Ref<HTMLDivElement>) {\n return (\n <Container\n ref={ref}\n size=\"2\"\n flexGrow=\"0\"\n >\n <Flex\n flexShrink=\"0\"\n gap=\"3\"\n >\n {children}\n </Flex>\n </Container>\n )\n})\n","import {\n Flex,\n Text,\n} from '@radix-ui/themes'\n\ntype Args = {\n children: React.ReactNode\n}\n\nexport const Name = ({\n children,\n}: Args) => (\n <Flex\n align=\"center\"\n height=\"var(--space-5)\"\n >\n <Text\n size=\"2\"\n weight=\"bold\"\n >\n {children}\n </Text>\n </Flex>\n)\n","'use client'\nimport { useContext } from 'react'\nimport {\n Box,\n} from '@radix-ui/themes'\nimport { MessageGroupBase } from '@/components/messageGroups/MessageGroupBase'\nimport { Name } from '@/components/messageGroups/MessageGroupBase/Name'\nimport { AssistantAvatar } from '@/components/messageGroups/MessageGroupBase/AssistantAvatar'\nimport { AssistantNameContext } from '@/contexts/assistants/AssistantNameContext'\nimport { UserAvatar } from '@/components/messageGroups/MessageGroupBase/UserAvatar'\nimport { MessageGroup as MessageGroupType } from '@/types'\nimport { Content } from './Content'\n\ntype Args = {\n messageGroup: MessageGroupType\n}\n\nexport const MessageGroup = ({\n messageGroup,\n}: Args) => {\n const assistantNameContext = useContext(AssistantNameContext)\n\n return (\n <MessageGroupBase>\n {messageGroup.role === 'user' ? (\n <UserAvatar />\n ) : (\n <AssistantAvatar />\n )}\n\n <Box flexGrow=\"1\">\n <Name>\n {messageGroup.role === 'user' ? 'You' : assistantNameContext}\n </Name>\n\n <Content\n messageGroup={messageGroup}\n />\n </Box>\n </MessageGroupBase>\n )\n}\n","'use client'\nimport { useContext } from 'react'\nimport {\n Flex,\n} from '@radix-ui/themes'\nimport { AssistantAvatarContext } from '@/contexts/assistants/AssistantAvatarContext'\n\nexport const AssistantAvatar = () => {\n const AssistantAvatarContextValue = useContext(AssistantAvatarContext)\n\n return (\n <Flex\n flexShrink=\"0\"\n height=\"24px\"\n width=\"24px\"\n style={{\n borderRadius: 'var(--radius-3)',\n overflow: 'hidden',\n }}\n >\n {AssistantAvatarContextValue}\n </Flex>\n )\n}\n","'use client'\nimport { createContext } from 'react'\nimport {\n Avatar,\n} from '@radix-ui/themes'\nimport {\n LightningBoltIcon,\n} from '@radix-ui/react-icons'\n\nexport const AssistantAvatarContext = createContext(\n <Avatar\n fallback={<LightningBoltIcon />}\n size=\"1\"\n />\n)\n","'use client'\nimport { createContext } from 'react'\n\nexport const AssistantNameContext = createContext('Assistant')\n","'use client'\nimport { useContext } from 'react'\nimport {\n Flex,\n} from '@radix-ui/themes'\nimport { UserAvatarContext } from '@/contexts/users/UserAvatarContext'\n\nexport const UserAvatar = () => {\n const UserAvatarContextValue = useContext(UserAvatarContext)\n\n return (\n <Flex\n flexShrink=\"0\"\n height=\"24px\"\n width=\"24px\"\n style={{\n borderRadius: 'var(--radius-3)',\n overflow: 'hidden',\n }}\n >\n {UserAvatarContextValue}\n </Flex>\n )\n}\n","'use client'\nimport { createContext } from 'react'\nimport {\n Avatar,\n} from '@radix-ui/themes'\nimport {\n PersonIcon,\n} from '@radix-ui/react-icons'\n\nexport const UserAvatarContext = createContext(\n <Avatar\n fallback={<PersonIcon />}\n size=\"1\"\n />\n)\n","import { Flex } from '@radix-ui/themes'\nimport { MessageGroup } from '@/types'\nimport { Message } from '@/components/threads/Thread/Message'\n\ntype Args = {\n messageGroup: MessageGroup\n}\n\nexport const Content = ({\n messageGroup,\n}: Args) => (\n <Flex\n direction=\"column-reverse\"\n >\n {messageGroup.messages.map((message) => (\n <Message\n key={message.id}\n message={message}\n />\n ))}\n </Flex>\n)\n","import { useMemo } from 'react'\nimport { StartingSkeleton } from '@/components/skeletons/StartingSkeleton'\nimport { useLatestMessage } from '@/hooks/messages/useLatestMessage'\nimport { isOptimistic } from '@/lib/optimistic/isOptimistic'\nimport { useIsMutatingMessage } from '@/hooks/messages/useIsMutatingMessage'\n\nexport const Progress = () => {\n const { latestMessage } = useLatestMessage()\n const isMutatingMessage = useIsMutatingMessage()\n\n const isVisible = useMemo(() => {\n if (!latestMessage) return false\n if (latestMessage.role !== 'user') return false\n if (latestMessage.status === 'in_progress') return false\n if (!isOptimistic({ id: latestMessage.id })) return false\n if (!isMutatingMessage) return false\n\n return true\n }, [latestMessage, isMutatingMessage])\n\n if (!isVisible) return null\n\n return (\n <StartingSkeleton />\n )\n}\n","'use client'\nimport { useContext } from 'react'\nimport { Box } from '@radix-ui/themes'\nimport { StartingContentSkeleton } from '@/components/skeletons/StartingContentSkeleton'\nimport { MessageGroupBase } from '@/components/messageGroups/MessageGroupBase'\nimport { Name } from '@/components/messageGroups/MessageGroupBase/Name'\nimport { AssistantAvatar } from '@/components/messageGroups/MessageGroupBase/AssistantAvatar'\nimport { AssistantNameContext } from '@/contexts/assistants/AssistantNameContext'\n\ntype Args = {\n children?: React.ReactNode\n}\n\nexport const StartingSkeleton = ({\n children,\n}: Args) => {\n const assistantNameContext = useContext(AssistantNameContext)\n\n return (\n <MessageGroupBase>\n <AssistantAvatar />\n\n <Box>\n <Name>\n {assistantNameContext}\n </Name>\n\n {children}\n\n <StartingContentSkeleton />\n </Box>\n </MessageGroupBase>\n )\n}\n","'use client'\n\nimport { Flex } from '@radix-ui/themes'\nimport { useInfiniteScroll } from '@/hooks/misc/useInfiniteScroll'\nimport { useMessages } from '@/hooks/messages/useMessages'\nimport type { StyleProps } from '@/types'\n\nexport const Root = ({\n children,\n style,\n className,\n}: {\n children: React.ReactNode\n} & StyleProps) => {\n const {\n isFetchingNextPage,\n hasNextPage,\n fetchNextPage,\n } = useMessages()\n\n const { containerRef, loaderRef } = useInfiniteScroll({\n isFetchingNextPage,\n hasNextPage,\n fetchNextPage,\n })\n\n return (\n <Flex\n ref={containerRef}\n direction=\"column-reverse\"\n flexGrow=\"1\"\n style={{\n overflow: 'auto',\n ...(style ?? {}),\n }}\n className={className}\n >\n {children}\n\n {hasNextPage && (\n <Flex\n ref={loaderRef}\n />\n )}\n\n <Flex\n flexShrink=\"0\"\n flexGrow=\"1\"\n />\n </Flex>\n )\n}\n","import { useRef } from 'react'\nimport { useInView } from 'react-intersection-observer'\nimport { useThrottledEffect } from '@/hooks/misc/useThrottledEffect'\n\ntype Args = {\n isFetchingNextPage: boolean\n hasNextPage: boolean\n fetchNextPage: () => void\n}\n\nexport const useInfiniteScroll = ({\n isFetchingNextPage,\n hasNextPage,\n fetchNextPage,\n}: Args) => {\n const containerRef = useRef(null)\n\n const { ref: loaderRef, inView } = useInView({\n root: containerRef.current,\n rootMargin: '0px',\n threshold: 0.1,\n })\n\n useThrottledEffect(\n () => {\n if (isFetchingNextPage) return\n if (!inView) return\n if (!hasNextPage) return\n\n fetchNextPage()\n },\n 500,\n [inView, isFetchingNextPage, hasNextPage, fetchNextPage]\n )\n\n return {\n containerRef,\n loaderRef,\n inView,\n }\n}\n","import _ from 'lodash'\nimport { useRef, useEffect, useCallback } from 'react'\n\nexport const useThrottledEffect = (cb: Function, delay: number, additionalDeps: any[]) => {\n const cbRef = useRef(cb)\n\n const throttledCb = useCallback(\n _.throttle((...args: any[]) => cbRef.current(...args), delay, {\n leading: true,\n trailing: true,\n }),\n [delay]\n )\n useEffect(() => {\n cbRef.current = cb\n })\n // set additionalDeps to execute effect, when other values change (not only on delay change)\n useEffect(throttledCb, [throttledCb, ...additionalDeps])\n}\n","'use client'\nimport { useMessages } from '@/hooks/messages/useMessages'\nimport { MessagesSkeleton } from '@/components/skeletons/MessagesSkeleton'\n\nexport const NextPageSkeleton = () => {\n const {\n hasNextPage,\n } = useMessages()\n\n if (!hasNextPage) {\n return null\n }\n\n return (\n <MessagesSkeleton />\n )\n}\n","'use client'\n\nimport {\n ArrowUpIcon,\n StopIcon,\n} from '@radix-ui/react-icons'\nimport {\n IconButton,\n Flex,\n} from '@radix-ui/themes'\nimport { useMessageFormContext } from '@/hooks/messages/useMessageFormContext'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\nimport type { StyleProps } from '@/types'\n\nconst Root = ({\n children,\n style,\n className,\n}: {\n children: React.ReactNode\n} & StyleProps) => (\n <Flex\n flexShrink=\"0\"\n align=\"end\"\n style={style}\n className={className}\n >\n {children}\n </Flex>\n)\n\nconst Button = (props: StyleProps) => {\n const superinterfaceContext = useSuperinterfaceContext()\n const { isDisabled, isLoading, isFileLoading } = useMessageFormContext()\n\n if (isLoading) {\n return (\n <IconButton\n type=\"button\"\n onClick={() => superinterfaceContext.createMessageAbortControllerRef.current?.abort()}\n {...props}\n >\n <StopIcon />\n </IconButton>\n )\n }\n\n return (\n <IconButton\n type=\"submit\"\n disabled={isDisabled || isFileLoading}\n {...props}\n >\n <ArrowUpIcon />\n </IconButton>\n )\n}\n\nexport const Submit = (props: StyleProps) => (\n <Root {...props}>\n <Button />\n </Root>\n)\n\nSubmit.Root = Root\nSubmit.Button = Button\n","import { useContext } from 'react'\nimport { MessageFormContext } from '@/contexts/messages/MessageFormContext'\n\nexport const useMessageFormContext = () => (\n useContext(MessageFormContext)\n)\n","'use client'\nimport OpenAI from 'openai'\nimport { createContext, Dispatch, SetStateAction } from 'react'\n\nexport const MessageFormContext = createContext({\n content: '',\n isDisabled: false,\n isLoading: false,\n files: [] as OpenAI.Files.FileObject[],\n setFiles: (() => {}) as Dispatch<SetStateAction<OpenAI.Files.FileObject[]>>,\n isFileLoading: false,\n})\n","'use client'\nimport OpenAI from 'openai'\nimport {\n useQueryClient,\n} from '@tanstack/react-query'\nimport { useMemo, useState } from 'react'\nimport { useForm, SubmitHandler, FormProvider } from 'react-hook-form'\nimport { Box } from '@radix-ui/themes'\nimport { useLatestMessage } from '@/hooks/messages/useLatestMessage'\nimport { useCreateMessage } from '@/hooks/messages/useCreateMessage'\nimport { useThreadContext } from '@/hooks/threads/useThreadContext'\nimport { formOptions } from './lib/formOptions'\nimport { MessageFormContext } from '@/contexts/messages/MessageFormContext'\nimport { useToasts } from '@/hooks/toasts/useToasts'\nimport { useIsMutatingMessage } from '@/hooks/messages/useIsMutatingMessage'\nimport { partob } from 'radash'\nimport { isOptimistic } from '@/lib/optimistic/isOptimistic'\nimport { createMessageDefaultOnError } from '@/lib/errors/createMessageDefaultOnError'\nimport type { StyleProps } from '@/types'\n\ntype Inputs = {\n content: string\n attachments?: OpenAI.Beta.Threads.Message.Attachment[]\n}\n\nexport const Root = ({\n children,\n onSubmit: onSubmitArg,\n isDisabled: isDisabledArg,\n style,\n className,\n}: {\n children: React.ReactNode\n onSubmit?: SubmitHandler<Inputs & { reset: any, createMessage: any }>\n isDisabled?: boolean\n} & StyleProps) => {\n const [files, setFiles] = useState<OpenAI.Files.FileObject[]>([])\n const formProps = useForm<Inputs>(formOptions)\n\n const {\n handleSubmit,\n formState: { isSubmitting },\n reset,\n watch,\n } = formProps\n\n const { addToast } = useToasts()\n const queryClient = useQueryClient()\n const threadContext = useThreadContext()\n\n const { createMessage } = useCreateMessage({\n onError: createMessageDefaultOnError({\n queryClient,\n addToast,\n threadContext,\n }),\n })\n\n const isMutatingMessage = useIsMutatingMessage()\n\n const isFileLoading = useMemo(() => (\n files.some((file) => isOptimistic({ id: file.id }))\n ), [files])\n\n const isLoading = useMemo(() => (\n isMutatingMessage || isSubmitting\n ), [\n isMutatingMessage,\n isSubmitting,\n ])\n\n const { latestMessage } = useLatestMessage()\n\n const isDisabled = useMemo(() => (\n // @ts-ignore-next-line\n latestMessage?.metadata?.isBlocking || isDisabledArg\n ), [latestMessage, isDisabledArg])\n\n const onSubmit: SubmitHandler<Inputs> = onSubmitArg ? partob(onSubmitArg, { reset, createMessage }) : async (data) => {\n if (isFileLoading) return\n if (isLoading) return\n if (isDisabled) return\n\n reset()\n setFiles([])\n\n const attachments = files.map((file) => ({\n file_id: file.id,\n tools: [\n {\n type: 'file_search',\n },\n ],\n }))\n\n await createMessage({\n // @ts-ignore-next-line\n content: data.content,\n ...(attachments.length ? { attachments } : {}),\n })\n }\n\n const content = watch('content')\n\n return (\n <MessageFormContext.Provider\n value={{\n isDisabled,\n isLoading,\n files,\n setFiles,\n isFileLoading,\n content,\n }}\n >\n <FormProvider {...formProps}>\n <Box\n asChild\n flexShrink=\"0\"\n style={style}\n className={className}\n >\n <form\n onSubmit={handleSubmit(onSubmit)}\n >\n {children}\n </form>\n </Box>\n </FormProvider>\n </MessageFormContext.Provider>\n )\n}\n","import { z } from 'zod'\nimport { zodResolver } from '@hookform/resolvers/zod'\n\nconst schema = z.object({\n content: z.string().min(1),\n})\n\nexport const formOptions = {\n resolver: zodResolver(schema),\n}\n","'use client'\nimport { useFormContext } from 'react-hook-form'\nimport {\n Container as RadixContainer,\n Flex,\n} from '@radix-ui/themes'\nimport { Control } from './Control'\nimport { Files } from './Files'\nimport type { StyleProps } from '@/types'\n\nconst Root = ({\n children,\n className,\n style,\n}: {\n children: React.ReactNode\n} & StyleProps) => {\n const {\n formState: {\n errors,\n },\n } = useFormContext()\n\n return (\n <RadixContainer\n size=\"2\"\n flexGrow=\"0\"\n className={className}\n style={style}\n >\n <Flex\n direction=\"column\"\n flexShrink=\"0\"\n >\n <Flex\n direction=\"column\"\n flexShrink=\"0\"\n >\n <Flex\n style={{\n borderRadius: 'var(--radius-2)',\n borderWidth: '1px',\n borderStyle: 'solid',\n borderColor: errors.content ? 'var(--red-9)' : 'var(--gray-5)',\n ...(errors.content ? { backgroundColor: 'var(--red-2)' } : {}),\n }}\n p=\"2\"\n pl=\"3\"\n wrap=\"wrap\"\n >\n {children}\n </Flex>\n </Flex>\n </Flex>\n </RadixContainer>\n )\n}\n\nexport const Field = {\n Root,\n Control,\n Files,\n}\n","import {\n Flex,\n} from '@radix-ui/themes'\nimport { useFormContext } from 'react-hook-form'\nimport { usePrevious } from '@/hooks/misc/usePrevious'\nimport { useContext, useMemo, useRef, useEffect } from 'react'\nimport { AssistantNameContext } from '@/contexts/assistants/AssistantNameContext'\nimport { TextareaBase } from '@/components/textareas/TextareaBase'\nimport { useMessageFormContext } from '@/hooks/messages/useMessageFormContext'\nimport type { StyleProps } from '@/types'\n\nconst Root = ({\n children,\n style,\n className,\n}: {\n children: React.ReactNode\n} & StyleProps) => (\n <Flex\n flexGrow=\"1\"\n pt=\"4px\"\n style={style}\n className={className}\n >\n {children}\n </Flex>\n)\n\nconst Input = (props: Omit<StyleProps, 'style'> & {\n style?: Omit<React.CSSProperties, 'minHeight' | 'maxHeight' | 'height'>\n placeholder?: string\n}) => {\n const assistantNameContext = useContext(AssistantNameContext)\n const {\n register,\n } = useFormContext()\n\n const { isDisabled, isLoading } = useMessageFormContext()\n\n const isSubmitDisabled = useMemo(() => (\n isDisabled || isLoading\n ), [isDisabled, isLoading])\n\n const isDisabledPrevious = usePrevious(isDisabled)\n\n const textareaRef = useRef<HTMLTextAreaElement>(null)\n const textareaProps = register('content')\n\n useEffect(() => {\n if (isDisabled) return\n if (!isDisabledPrevious) return\n if (!textareaRef.current) return\n\n textareaRef.current.focus()\n }, [isDisabled, isDisabledPrevious, textareaProps])\n\n return (\n <TextareaBase\n minRows={1}\n placeholder={props.placeholder ?? `Message ${assistantNameContext}...`}\n disabled={isDisabled}\n onKeyDown={(e: any) => {\n if (e.key === 'Enter' && !e.shiftKey) {\n e.preventDefault()\n\n if (isSubmitDisabled) return\n e.currentTarget.form?.requestSubmit()\n }\n }}\n {...textareaProps}\n {...props}\n ref={(e: any) => {\n textareaProps.ref(e)\n // @ts-ignore-next-line\n textareaRef.current = e\n }}\n />\n )\n}\n\nexport const Control = (props: StyleProps) => (\n <Root {...props}>\n <Input />\n </Root>\n)\n\nControl.Root = Root\nControl.Input = Input\n","import { useEffect, useRef } from 'react'\n\nexport const usePrevious = <T,>(state: T): T | undefined => {\n const ref = useRef<T>()\n\n useEffect(() => {\n ref.current = state\n })\n\n return ref.current\n}\n","import { forwardRef } from 'react'\nimport TextareaAutosize from 'react-textarea-autosize'\nimport type { StyleProps } from '@/types'\n\ntype Props = React.ComponentProps<typeof TextareaAutosize> & StyleProps\n\nexport const TextareaBase = forwardRef(function TextareaBase({\n style,\n className,\n ...rest\n}: Props, ref) {\n return (\n <>\n <style>\n {`.superinterface-textarea { min-height: inherit; height: 30px; }\n.superinterface-textarea::placeholder { color: var(--gray-a10); }`}\n </style>\n\n <TextareaAutosize\n // @ts-ignore-next-line\n ref={ref}\n className={`rt-reset superinterface-textarea ${className ?? ''}`}\n style={{\n border: 0,\n outline: 0,\n boxSizing: 'border-box',\n resize: 'none',\n color: 'var(--gray-12)',\n flexGrow: 1,\n display: 'flex',\n ...(style ?? {}),\n }}\n {...rest}\n />\n </>\n )\n})\n","import {\n Flex,\n Card,\n Spinner,\n Text,\n IconButton,\n} from '@radix-ui/themes'\nimport {\n FileIcon,\n Cross2Icon,\n} from '@radix-ui/react-icons'\nimport { useMessageFormContext } from '@/hooks/messages/useMessageFormContext'\nimport { isOptimistic } from '@/lib/optimistic/isOptimistic'\nimport type { StyleProps } from '@/types'\n\nexport const Preview = (props: StyleProps) => {\n const { files, setFiles } = useMessageFormContext()\n\n if (!files.length) {\n return null\n }\n\n return (\n <Flex\n flexBasis=\"100%\"\n direction=\"column\"\n pb=\"2\"\n gap=\"1\"\n {...props}\n >\n {files.map((file) => (\n <Card\n key={file.id}\n variant=\"ghost\"\n >\n <Flex\n align=\"center\"\n justify=\"between\"\n gap=\"1\"\n >\n <Flex\n align=\"center\"\n gap=\"1\"\n flexShrink=\"1\"\n minWidth=\"0\"\n maxWidth=\"250px\"\n >\n <Flex\n flexShrink=\"0\"\n >\n <Spinner\n loading={isOptimistic({ id: file.id })}\n >\n <FileIcon />\n </Spinner>\n </Flex>\n\n <Text\n size=\"2\"\n truncate\n wrap=\"nowrap\"\n >\n {file.filename}\n </Text>\n </Flex>\n\n <Flex\n flexShrink=\"0\"\n >\n <IconButton\n onClick={() => (\n setFiles((prev) => (\n prev.filter((prevFile) => prevFile.id !== file.id)\n ))\n )}\n color=\"gray\"\n variant=\"ghost\"\n size=\"1\"\n >\n <Cross2Icon />\n </IconButton>\n </Flex>\n </Flex>\n </Card>\n ))}\n </Flex>\n )\n}\n","'use client'\n\nimport type OpenAI from 'openai'\nimport { useCallback } from 'react'\nimport { omit } from 'radash'\nimport dayjs from 'dayjs'\nimport { optimisticId } from '@/lib/optimistic/optimisticId'\nimport {\n FilePlusIcon,\n} from '@radix-ui/react-icons'\nimport {\n IconButton,\n Flex,\n} from '@radix-ui/themes'\nimport { useToasts } from '@/hooks/toasts/useToasts'\nimport { useMessageFormContext } from '@/hooks/messages/useMessageFormContext'\nimport { useCreateFile } from '@/hooks/files/useCreateFile'\nimport type { StyleProps } from '@/types'\n\nconst accept = `.c,text/x-c,\n.cs,text/x-csharp,\n.cpp,text/x-c++,\n.doc,application/msword,\n.docx,application/vnd.openxmlformats-officedocument.wordprocessingml.document,\n.html,text/html,\n.java,text/x-java,\n.json,application/json,\n.md,text/markdown,\n.pdf,application/pdf,\n.php,text/x-php,\n.pptx,application/vnd.openxmlformats-officedocument.presentationml.presentation,\n.py,text/x-python,\n.py,text/x-script.python,\n.rb,text/x-ruby,\n.tex,text/x-tex,\n.txt,text/plain,\n.css,text/css,\n.js,text/javascript,\n.sh,application/x-sh,\n.ts,application/typescript`\n\nexport const Control = (props: StyleProps) => {\n const { isDisabled, isLoading, setFiles } = useMessageFormContext()\n const { createFile } = useCreateFile()\n const { addToast } = useToasts()\n\n const onChange = useCallback(async (event: React.ChangeEvent<HTMLInputElement>) => {\n const fileObjects = event.target.files\n if (!fileObjects) return\n\n const newFiles = Array.from(fileObjects).map((fileObject) => ({\n id: optimisticId(),\n filename: fileObject.name,\n object: 'file' as 'file',\n purpose: 'assistants' as 'assistants',\n created_at: dayjs().unix(),\n bytes: fileObject.size,\n status: 'processed' as 'processed',\n fileObject,\n }))\n\n setFiles((prev: OpenAI.Files.FileObject[]) => [\n ...prev,\n ...newFiles.map((file) => omit(file, ['fileObject'])),\n ])\n\n for await (const newFile of newFiles) {\n await createFile({\n file: newFile.fileObject,\n },\n {\n onSuccess: ({\n file,\n }: {\n file: OpenAI.Files.FileObject\n }) => (\n setFiles((prev) => ([\n ...prev.filter((prevFile) => prevFile.id !== newFile.id),\n file,\n ]))\n ),\n onError: () => {\n addToast({ type: 'error', message: 'Could not upload file. Please try again.' })\n setFiles((prev) => (\n prev.filter((prevFile) => prevFile.id !== newFile.id)\n ))\n },\n })\n }\n }, [addToast, createFile, setFiles])\n\n return (\n <Flex\n pt=\"2\"\n pr=\"2\"\n flexGrow=\"0\"\n {...props}\n >\n <IconButton\n type=\"button\"\n variant=\"ghost\"\n color=\"gray\"\n disabled={isDisabled || isLoading}\n style={{\n position: 'relative',\n overflow: 'hidden',\n }}\n >\n <FilePlusIcon />\n <input\n type=\"file\"\n multiple\n accept={accept}\n onChange={onChange}\n style={{\n cursor: 'pointer',\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n opacity: 0,\n }}\n />\n </IconButton>\n </Flex>\n )\n}\n","import { partob } from 'radash'\nimport {\n useMutation,\n useQueryClient,\n} from '@tanstack/react-query'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\nimport { useThreadContext } from '@/hooks/threads/useThreadContext'\nimport { mutationOptions } from './lib/mutationOptions'\n\nexport const useCreateFile = ({\n onError = () => {},\n}: {\n onError?: (error: unknown) => void\n} = {\n onError: () => {},\n}) => {\n const queryClient = useQueryClient()\n const superinterfaceContext = useSuperinterfaceContext()\n const threadContext = useThreadContext()\n\n const props = useMutation(mutationOptions({\n queryClient,\n threadContext,\n superinterfaceContext,\n onError,\n }))\n\n return {\n ...props,\n createFile: (...args: any[]) => {\n const [firstArg, ...restArgs] = args\n return props.mutateAsync({\n ...threadContext.variables,\n ...firstArg,\n }, ...restArgs)\n },\n }\n}\n","export const formData = (variables: any) => {\n const data = new FormData()\n\n for (const key in variables) {\n data.append(key, variables[key])\n }\n\n return data\n}\n","import { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\nimport { formData } from './formData'\n\nexport const body = ({\n variables,\n superinterfaceContext,\n}: {\n variables: {\n [key: string]: any\n }\n superinterfaceContext: ReturnType<typeof useSuperinterfaceContext>\n}) => {\n if (variables.threadId) return formData(variables)\n if (!variables.assistantId) return formData(variables)\n if (!superinterfaceContext.threadIdStorageOptions?.get) return formData(variables)\n\n const threadId = superinterfaceContext.threadIdStorageOptions.get({ assistantId: variables.assistantId })\n if (!threadId) return formData(variables)\n\n return formData({\n ...variables,\n threadId,\n })\n}\n","import {\n useQueryClient,\n} from '@tanstack/react-query'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\nimport { useThreadContext } from '@/hooks/threads/useThreadContext'\nimport { body } from './body'\n\nexport const mutationFn = ({\n superinterfaceContext,\n queryClient,\n threadContext,\n}: {\n superinterfaceContext: ReturnType<typeof useSuperinterfaceContext>\n queryClient: ReturnType<typeof useQueryClient>\n threadContext: ReturnType<typeof useThreadContext>\n}) => async (variables: {\n content: string\n [key: string]: any\n}) => {\n const response = await fetch(`${superinterfaceContext.baseUrl}/files`, {\n method: 'POST',\n body: body({\n variables,\n superinterfaceContext,\n }),\n })\n\n const result = await response.json()\n return result\n}\n","import _ from 'lodash'\nimport {\n useQueryClient,\n} from '@tanstack/react-query'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\nimport { useThreadContext } from '@/hooks/threads/useThreadContext'\nimport { mutationFn } from './mutationFn'\n\nexport const mutationOptions = ({\n queryClient,\n threadContext,\n superinterfaceContext,\n onError,\n}: {\n queryClient: ReturnType<typeof useQueryClient>,\n threadContext: ReturnType<typeof useThreadContext>,\n superinterfaceContext: ReturnType<typeof useSuperinterfaceContext>,\n onError: (error: unknown) => void\n}) => {\n const mutationKey = ['createFile', threadContext.variables]\n\n return {\n mutationFn: mutationFn({\n queryClient,\n superinterfaceContext,\n threadContext,\n }),\n onError,\n ...threadContext.defaultOptions.mutations,\n ...queryClient.getMutationDefaults(mutationKey),\n mutationKey,\n }\n}\n","import { Preview } from './Preview'\nimport { Control } from './Control'\n\nexport const Files = {\n Preview,\n Control,\n}\n","import type { StyleProps } from '@/types'\nimport { Submit } from './Submit'\nimport { Root } from './Root'\nimport { Field } from './Field'\n\nexport const MessageForm = (props: StyleProps) => (\n <Root {...props}>\n <Field.Root>\n <Field.Control />\n <Submit />\n </Field.Root>\n </Root>\n)\n\nMessageForm.Root = Root\nMessageForm.Field = Field\nMessageForm.Submit = Submit\n","import { Flex } from '@radix-ui/themes'\nimport {\n Provider,\n Args as ThreadProviderArgs,\n} from '@/components/threads/Thread/Provider'\nimport type { StyleProps } from '@/types'\nimport { ToastsProvider } from '@/components/toasts/ToastsProvider'\n\nexport type Args = ThreadProviderArgs & StyleProps\n\nexport const Root = ({\n children,\n style,\n className,\n ...rest\n}: Args) => (\n <ToastsProvider bottom=\"var(--space-9)\">\n <Provider {...rest}>\n <Flex\n direction=\"column\"\n flexGrow=\"1\"\n className={className}\n style={style}\n >\n {children}\n </Flex>\n </Provider>\n </ToastsProvider>\n)\n","'use client'\n\nimport { SuperinterfaceProvider } from '@/components/core/SuperinterfaceProvider'\nimport type { Args as SuperinterfaceProviderArgs } from '@/components/core/SuperinterfaceProvider'\n\nexport type Args = SuperinterfaceProviderArgs\nexport const Provider = SuperinterfaceProvider\n","import { useState, useCallback } from 'react'\nimport * as Toast from '@radix-ui/react-toast'\nimport { ToastsContext } from '@/contexts/toasts/ToastsContext'\nimport { CustomToast } from './CustomToast'\nimport { Toast as ToastType } from '@/types'\n\nexport const ToastsProvider = ({\n children,\n bottom = 0,\n}: {\n children: React.ReactNode\n bottom?: number | string\n}) => {\n const [toasts, setToasts] = useState<ToastType[]>([])\n const addToast = useCallback((toast: ToastType) => (\n setToasts((prevToasts) => [\n ...prevToasts,\n toast,\n ])\n ), [])\n\n return (\n <ToastsContext.Provider\n value={{\n toasts,\n addToast,\n }}\n >\n <Toast.Provider>\n {children}\n\n {Array.from(toasts).map((toast: ToastType, index: number) => (\n <CustomToast\n key={index}\n toast={toast}\n />\n ))}\n\n <Toast.Viewport\n style={{\n position: 'absolute',\n bottom,\n right: 0,\n display: 'flex',\n flexDirection: 'column',\n padding: 'var(--space-5)',\n gap: 'var(--space-3)',\n width: '390px',\n maxWidth: '100vw',\n margin: 0,\n listStyle: 'none',\n zIndex: 99999999999999,\n outline: 'none',\n }}\n />\n </Toast.Provider>\n </ToastsContext.Provider>\n )\n}\n","import * as Toast from '@radix-ui/react-toast'\nimport {\n Card,\n Text,\n Flex,\n} from '@radix-ui/themes'\nimport {\n CheckCircledIcon,\n CrossCircledIcon,\n} from '@radix-ui/react-icons'\nimport { Toast as ToastType } from '@/types'\n\nexport const CustomToast = ({\n toast,\n}: {\n toast: ToastType,\n}) => (\n <Toast.Root>\n <Card>\n <Toast.Title>\n <Flex>\n <Flex\n pr=\"2\"\n height=\"14px\"\n align=\"center\"\n >\n {toast.type === 'success' ? (\n <CheckCircledIcon\n color=\"var(--accent-9)\"\n />\n ) : (\n <CrossCircledIcon\n color=\"var(--red-9)\"\n />\n )}\n </Flex>\n <Text\n weight=\"medium\"\n size=\"1\"\n >\n {toast.message}\n </Text>\n </Flex>\n </Toast.Title>\n </Card>\n </Toast.Root>\n)\n","import { Messages } from '@/components/threads/Thread/Messages'\nimport { MessageForm } from '@/components/threads/Thread/MessageForm'\nimport { Root, Args as RootArgs } from '@/components/threads/Thread/Root'\n\ntype Args = Omit<RootArgs, 'children'>\n\nexport const Thread = (props: Args) => (\n <Root {...props}>\n <Messages />\n <MessageForm />\n </Root>\n)\n\nThread.Root = Root\nThread.Messages = Messages\nThread.MessageForm = MessageForm\n","import { useContext } from 'react'\nimport { MessageContext } from '@/contexts/messages/MessageContext'\n\nexport const useMessageContext = () => (\n useContext(MessageContext)\n)\n","import { useMemo } from 'react'\nimport {\n useQuery,\n} from '@tanstack/react-query'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\nimport { queryOptions } from './lib/queryOptions'\n\ntype Args = {\n assistantId: string\n}\n\nexport const useAssistant = ({\n assistantId,\n}: Args) => {\n const superinterfaceContext = useSuperinterfaceContext()\n const props = useQuery(queryOptions({\n assistantId,\n superinterfaceContext,\n }))\n\n return useMemo(() => ({\n ...props,\n assistant: props.data ? props.data.assistant : null,\n }), [props])\n}\n","import { queryOptions as tanstackQueryOptions } from '@tanstack/react-query'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\nimport { queryFn } from './queryFn'\n\ntype Args = {\n assistantId: string\n superinterfaceContext: ReturnType<typeof useSuperinterfaceContext>\n}\n\nexport const queryOptions = ({\n assistantId,\n superinterfaceContext,\n}: Args) => (\n tanstackQueryOptions({\n queryKey: ['assistants', { assistantId }],\n queryFn: queryFn({ superinterfaceContext }),\n })\n)\n","import { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\n\ntype QueryFunctionArgs = {\n queryKey: Readonly<['assistants', { assistantId: string }]>\n}\n\nexport const queryFn = ({\n superinterfaceContext,\n}: {\n superinterfaceContext: ReturnType<typeof useSuperinterfaceContext>\n}) => async ({\n queryKey,\n}: QueryFunctionArgs) => {\n const [_key, { assistantId }] = queryKey\n\n const params = new URLSearchParams({\n publicApiKey: superinterfaceContext.variables.publicApiKey,\n })\n\n return fetch(`${superinterfaceContext.baseUrl}/assistants/${assistantId}?${params}`)\n .then(async (response) => {\n if (response.status !== 200) {\n try {\n const errorResponse = await response.json() as { error: string }\n throw new Error(errorResponse.error)\n } catch (error) {\n throw new Error('Failed to fetch')\n }\n }\n\n return response.json() as Promise<any>\n })\n}\n","import { useState } from 'react'\nimport { ThreadDialogContext } from '@/contexts/threads/ThreadDialogContext'\nimport { useThreadDialogContext } from '@/hooks/threads/useThreadDialogContext'\n\ntype Args = {\n children: React.ReactNode\n}\n\nexport const Provider = ({\n children,\n}: Args) => {\n const threadDialogContext = useThreadDialogContext()\n const [isOpen, setIsOpen] = useState<boolean>(threadDialogContext.isOpen)\n\n return (\n <ThreadDialogContext.Provider\n value={{\n isOpen,\n setIsOpen,\n }}\n >\n {children}\n </ThreadDialogContext.Provider>\n )\n}\n","'use client'\nimport { createContext, Dispatch, SetStateAction } from 'react'\n\nexport const ThreadDialogContext = createContext<{\n isOpen: boolean\n setIsOpen: Dispatch<SetStateAction<boolean>>\n}>({\n isOpen: false,\n setIsOpen: () => {},\n})\n","import { useContext } from 'react'\nimport { ThreadDialogContext } from '@/contexts/threads/ThreadDialogContext'\n\nexport const useThreadDialogContext = () => (\n useContext(ThreadDialogContext)\n)\n","import { Provider } from '@/components/threads/ThreadDialog/Provider'\n\ntype Args = {\n children: React.ReactNode\n}\n\nexport const Root = ({\n children,\n}: Args) => (\n <Provider>\n {children}\n </Provider>\n)\n","import {\n Flex,\n} from '@radix-ui/themes'\nimport { useThreadDialogContext } from '@/hooks/threads/useThreadDialogContext'\nimport { Button } from './Button'\nimport type { StyleProps } from '@/types'\n\ntype Args = {\n children: React.ReactNode\n} & StyleProps\n\nconst Root = ({\n children,\n style,\n className,\n}: Args) => {\n const { setIsOpen, isOpen } = useThreadDialogContext()\n\n return (\n <Flex\n display={{\n initial: isOpen ? 'none' : 'flex',\n sm: 'flex',\n }}\n onClick={() => setIsOpen((prev) => !prev)}\n direction=\"column\"\n flexShrink=\"0\"\n justify=\"end\"\n align=\"end\"\n position=\"fixed\"\n bottom=\"24px\"\n right=\"24px\"\n className={className}\n style={{\n zIndex: 9999999999,\n ...(style ?? {}),\n }}\n >\n {children}\n </Flex>\n )\n}\n\nexport const Trigger = (args: Omit<Args, 'children'>) => (\n <Root {...args}>\n <Button />\n </Root>\n)\n\nTrigger.Root = Root\nTrigger.Button = Button\n","import {\n IconButton,\n} from '@radix-ui/themes'\nimport {\n ChatBubbleIcon,\n} from '@radix-ui/react-icons'\nimport type { StyleProps } from '@/types'\n\nexport const Button = (props: StyleProps) => (\n <IconButton\n size=\"4\"\n radius=\"full\"\n {...props}\n >\n <ChatBubbleIcon />\n </IconButton>\n)\n","import {\n Card,\n Inset,\n Flex,\n} from '@radix-ui/themes'\nimport { useThreadDialogContext } from '@/hooks/threads/useThreadDialogContext'\nimport { Thread } from '@/components/threads/Thread'\nimport { Close } from '@/components/threads/ThreadDialog/Close'\nimport type { StyleProps } from '@/types'\n\ntype Args = {\n children: React.ReactNode\n} & StyleProps\n\nconst Root = ({\n children,\n className,\n style,\n}: Args) => {\n const { isOpen } = useThreadDialogContext()\n if (!isOpen) return null\n\n return (\n <Flex\n className={className}\n direction=\"column\"\n justify=\"end\"\n position=\"fixed\"\n bottom={{\n initial: '0',\n sm: '72px',\n }}\n right={{\n initial: '0',\n sm: '24px',\n }}\n maxHeight={{\n initial: undefined,\n sm: '720px',\n }}\n maxWidth={{\n initial: undefined,\n sm: '400px',\n }}\n width=\"100%\"\n height={{\n initial: '100%',\n sm: 'calc(100% - 96px)',\n }}\n style={{\n zIndex: 9999999999,\n ...style,\n }}\n >\n <Card\n mb={{\n initial: undefined,\n sm: '3',\n }}\n style={{\n position: 'relative',\n display: 'flex',\n flexGrow: 1,\n }}\n >\n <Inset\n clip=\"padding-box\"\n side=\"all\"\n pb=\"current\"\n style={{\n display: 'flex',\n flexGrow: 1,\n }}\n >\n {children}\n </Inset>\n <Close />\n </Card>\n </Flex>\n )\n}\n\nconst Messages = ({\n className,\n style,\n}: StyleProps) => (\n <Thread.Messages\n className={className}\n style={{\n paddingTop: 'var(--space-5)',\n paddingRight: 'var(--space-5)',\n paddingLeft: 'var(--space-5)',\n ...style,\n }}\n />\n)\n\nconst FormContainer = ({\n children,\n className,\n style,\n}: {\n children: React.ReactNode\n} & StyleProps) => (\n <Flex\n direction=\"column\"\n pl=\"5\"\n pr=\"5\"\n pb=\"3\"\n flexShrink=\"0\"\n className={className}\n style={style}\n >\n {children}\n </Flex>\n)\n\nexport const Content = (props: StyleProps) => (\n <Root {...props}>\n <Thread.Root>\n <Messages />\n <FormContainer>\n <Thread.MessageForm />\n </FormContainer>\n </Thread.Root>\n </Root>\n)\n\nContent.Root = Root\nContent.Messages = Messages\nContent.FormContainer = FormContainer\n","import {\n Cross1Icon,\n} from '@radix-ui/react-icons'\nimport {\n IconButton,\n Flex,\n} from '@radix-ui/themes'\nimport { useThreadDialogContext } from '@/hooks/threads/useThreadDialogContext'\n\nexport const Close = () => {\n const { setIsOpen, isOpen } = useThreadDialogContext()\n\n return (\n <Flex\n display={{\n initial: isOpen ? 'flex' : 'none',\n sm: 'none',\n }}\n onClick={() => setIsOpen((prev) => !prev)}\n direction=\"column\"\n flexShrink=\"0\"\n justify=\"end\"\n align=\"end\"\n position=\"absolute\"\n top=\"24px\"\n right='24px'\n style={{\n zIndex: 9999999999,\n }}\n >\n <IconButton\n size=\"2\"\n variant=\"soft\"\n >\n <Cross1Icon />\n </IconButton>\n </Flex>\n )\n}\n","import { Root } from '@/components/threads/ThreadDialog/Root'\nimport { Trigger } from '@/components/threads/ThreadDialog/Trigger'\nimport { Content } from '@/components/threads/ThreadDialog/Content'\n\nexport const ThreadDialog = () => (\n <Root>\n <Content />\n <Trigger />\n </Root>\n)\n\nThreadDialog.Root = Root\nThreadDialog.Trigger = Trigger\nThreadDialog.Content = Content\n","'use client'\n\n// import 'regenerator-runtime/runtime'\nimport { Flex } from '@radix-ui/themes'\nimport _ from 'lodash'\nimport { AudioThreadContext } from '@/contexts/threads/AudioThreadContext'\nimport { useCreateMessage } from '@/hooks/messages/useCreateMessage'\nimport { usePermission } from '@/hooks/misc/usePermission'\nimport { blobToData } from './lib/blobToData'\nimport { useStatus } from '@/hooks/audioThreads/useStatus'\nimport { useRecorder } from '@/hooks/audioThreads/useRecorder'\nimport { useMessageAudio } from '@/hooks/audioThreads/useMessageAudio'\nimport {\n useQueryClient,\n} from '@tanstack/react-query'\nimport { useThreadContext } from '@/hooks/threads/useThreadContext'\nimport { useToasts } from '@/hooks/toasts/useToasts'\nimport { createMessageDefaultOnError } from '@/lib/errors/createMessageDefaultOnError'\nimport { ToastsProvider } from '@/components/toasts/ToastsProvider'\nimport type { StyleProps } from '@/types'\n\nexport type Args = {\n children: React.ReactNode\n} & StyleProps\n\nconst Content = ({\n children,\n className,\n style,\n}: Args) => {\n const { addToast } = useToasts()\n const queryClient = useQueryClient()\n const threadContext = useThreadContext()\n\n const createMessageProps = useCreateMessage({\n onError: (error: unknown) => {\n createMessageDefaultOnError({\n queryClient,\n addToast,\n threadContext,\n })(error)\n\n recorderProps.start()\n }\n })\n\n const recorderProps = useRecorder({\n isStopOnSilence: true,\n onStart: async () => {\n },\n onStop: async (_event: any, chunks: BlobPart[]) => {\n // @ts-ignore-next-line\n const blob = new Blob(chunks, { type: chunks[0].type })\n const audioContent = await blobToData(blob)\n\n return createMessageProps.createMessage({\n // @ts-ignore-next-line\n audioContent,\n })\n },\n })\n\n const microphonePermission = usePermission({ name: 'microphone' })\n\n const messageAudioProps = useMessageAudio({\n onEnd: () => {\n if (microphonePermission === 'granted') {\n recorderProps.start()\n }\n }\n })\n\n const { status } = useStatus({\n recorderProps,\n createMessageProps,\n messageAudioProps,\n })\n\n return (\n <AudioThreadContext.Provider\n value={{\n status,\n recorderProps,\n messageAudioProps,\n }}\n >\n <Flex\n direction=\"column\"\n flexGrow=\"1\"\n p=\"9\"\n className={className}\n style={style}\n >\n {children}\n </Flex>\n </AudioThreadContext.Provider>\n )\n}\n\nexport const Root = ({\n children,\n ...rest\n}: Args) => (\n <ToastsProvider>\n <Content {...rest}>\n {children}\n </Content>\n </ToastsProvider>\n)\n","'use client'\nimport { createContext } from 'react'\nimport { statusMessages } from '@/hooks/audioThreads/useStatus/lib/statusMessages'\nimport { useRecorder } from '@/hooks/audioThreads/useRecorder'\nimport { useMessageAudio } from '@/hooks/audioThreads/useMessageAudio'\n\nexport const AudioThreadContext = createContext<{\n status: keyof typeof statusMessages\n recorderProps: ReturnType<typeof useRecorder>\n messageAudioProps: ReturnType<typeof useMessageAudio>\n}>({\n status: 'idle',\n recorderProps: {\n status: 'idle',\n start: async () => {},\n stop: async () => {},\n pause: async () => {},\n resume: async () => {},\n visualizationAnalyser: null,\n },\n // @ts-ignore-next-line\n messageAudioProps: {\n visualizationAnalyser: null,\n playing: false,\n paused: false,\n isReady: false,\n play: async () => {},\n pause: async () => {},\n },\n})\n","// From: https://github.com/streamich/react-use/blob/ade8d3905f544305515d010737b4ae604cc51024/src/usePermission.ts\nimport { useEffect, useState } from 'react';\nimport { noop, off, on } from './util';\n\nexport type IState = PermissionState | '';\n\ninterface IPushPermissionDescriptor extends PermissionDescriptor {\n name: 'push';\n userVisibleOnly?: boolean;\n}\n\n// @ts-ignore-next-line\ninterface IMidiPermissionDescriptor extends PermissionDescriptor {\n name: 'midi';\n sysex?: boolean;\n}\n\n// @ts-ignore-next-line\ninterface IDevicePermissionDescriptor extends PermissionDescriptor {\n name: 'camera' | 'microphone' | 'speaker';\n deviceId?: string;\n}\n\nexport type IPermissionDescriptor =\n | PermissionDescriptor\n | IPushPermissionDescriptor\n | IMidiPermissionDescriptor\n | IDevicePermissionDescriptor;\n\n// const usePermission = <T extends PermissionDescriptor>(permissionDesc: T): IState => {\nexport const usePermission = (permissionDesc: IPermissionDescriptor): IState => {\n const [state, setState] = useState<IState>('');\n\n useEffect(() => {\n let mounted = true;\n let permissionStatus: PermissionStatus | null = null;\n\n const onChange = () => {\n if (!mounted) {\n return;\n }\n setState(() => permissionStatus?.state ?? '');\n };\n\n navigator.permissions\n // @ts-ignore-next-line\n .query(permissionDesc)\n .then((status) => {\n permissionStatus = status;\n on(permissionStatus, 'change', onChange);\n onChange();\n })\n .catch(noop);\n\n return () => {\n permissionStatus && off(permissionStatus, 'change', onChange);\n mounted = false;\n permissionStatus = null;\n };\n }, [permissionDesc]);\n\n return state;\n};\n","// From: https://github.com/streamich/react-use/blob/ade8d3905f544305515d010737b4ae604cc51024/src/misc/util.ts\nexport const noop = () => {};\n\nexport function on<T extends Window | Document | HTMLElement | EventTarget>(\n obj: T | null,\n ...args: Parameters<T['addEventListener']> | [string, Function | null, ...any]\n): void {\n if (obj && obj.addEventListener) {\n obj.addEventListener(...(args as Parameters<HTMLElement['addEventListener']>));\n }\n}\n\nexport function off<T extends Window | Document | HTMLElement | EventTarget>(\n obj: T | null,\n ...args: Parameters<T['removeEventListener']> | [string, Function | null, ...any]\n): void {\n if (obj && obj.removeEventListener) {\n obj.removeEventListener(...(args as Parameters<HTMLElement['removeEventListener']>));\n }\n\n}\n","export const blobToData = (blob: Blob) => (\n new Promise((resolve) => {\n const reader = new FileReader()\n reader.onloadend = () => resolve(reader.result)\n reader.readAsDataURL(blob)\n })\n)\n","import { useMemo } from 'react'\nimport { useCreateMessage } from '@/hooks/messages/useCreateMessage'\nimport { useRecorder } from '@/hooks/audioThreads/useRecorder'\nimport { useMessageAudio } from '@/hooks/audioThreads/useMessageAudio'\nimport { useLatestMessage } from '@/hooks/messages/useLatestMessage'\nimport { statusMessages } from './lib/statusMessages'\n\ntype Args = {\n messageAudioProps: ReturnType<typeof useMessageAudio>\n recorderProps: ReturnType<typeof useRecorder>\n createMessageProps: ReturnType<typeof useCreateMessage>\n}\n\nexport const useStatus = ({\n messageAudioProps,\n recorderProps,\n createMessageProps,\n}: Args) => {\n const latestMessageProps = useLatestMessage()\n\n const status = useMemo((): keyof typeof statusMessages => {\n if (recorderProps.status === 'recording') return 'recording'\n if (createMessageProps.isPending) return 'creatingMessage'\n\n if (messageAudioProps.paused || !messageAudioProps.isAudioPlayed) return 'playerPaused'\n if (messageAudioProps.playing || messageAudioProps.isPending) return 'playing'\n if (!messageAudioProps.isAudioPlayed && !messageAudioProps.isReady) return 'loading'\n if (latestMessageProps.latestMessage?.status === 'in_progress') return 'creatingMessage'\n if (recorderProps.status === 'idle') return 'idle'\n if (recorderProps.status === 'paused') return 'recorderPaused'\n\n return 'loading'\n }, [\n latestMessageProps,\n messageAudioProps,\n recorderProps,\n createMessageProps,\n ])\n\n return {\n status,\n }\n}\n","import dayjs, { Dayjs } from 'dayjs'\nimport { useAudioCapture, UseAudioCaptureProps } from 'use-audio-capture'\nimport { useMemo, useRef, useState, useCallback, useEffect } from 'react'\nimport { useAudioPlayer } from 'react-use-audio-player'\nimport { useInterval } from '@/hooks/misc/useInterval'\nimport { AudioEngine } from '@/types'\n\ntype Args = UseAudioCaptureProps & {\n isStopOnSilence: boolean\n}\n\nexport const useRecorder = ({\n isStopOnSilence,\n onStart,\n onStop,\n}: Args) => {\n const [silenceStart, setSilenceStart] = useState<Dayjs | null>(null)\n const [noiseStart, setNoiseStart] = useState<Dayjs | null>(null)\n const [mediaStream, setMediaStream] = useState<MediaStream | null>(null)\n const [status, setStatus] = useState<'idle' | 'recording' | 'stopped' | 'paused'>('idle')\n const startAudioPlayer = useAudioPlayer()\n const endAudioPlayer = useAudioPlayer()\n const [isLoaded, setIsLoaded] = useState(false)\n\n useEffect(() => {\n if (isLoaded) return\n setIsLoaded(true)\n\n // startAudioPlayer.load('/sounds/warning.wav', {\n // html5: true,\n // })\n // endAudioPlayer.load('/sounds/success.wav', {\n // html5: true,\n // })\n }, [isLoaded, startAudioPlayer, endAudioPlayer])\n\n const audioCaptureProps = useAudioCapture({\n onStart: (event, opts) => {\n // startAudioPlayer.play()\n setStatus('recording')\n setMediaStream(opts.mediaStream)\n isInited.current = false\n if (onStart) onStart(event, opts)\n\n setSilenceStart(null)\n setNoiseStart(null)\n },\n onStop: async (...args) => {\n // endAudioPlayer.play()\n setStatus('stopped')\n if (onStop) await onStop(...args)\n setSilenceStart(null)\n setNoiseStart(null)\n },\n onPause: () => {\n setStatus('paused')\n\n setSilenceStart(null)\n setNoiseStart(null)\n },\n onResume: () => {\n setStatus('recording')\n\n setSilenceStart(null)\n setNoiseStart(null)\n },\n })\n\n const [audioEngine, setAudioEngine] = useState<AudioEngine | null>(null)\n\n const isInited = useRef(false)\n\n useEffect(() => {\n if (!mediaStream) return\n if (isInited.current) return\n isInited.current = true\n\n const audioContext = new AudioContext()\n\n setAudioEngine({\n source: audioContext.createMediaStreamSource(mediaStream),\n audioContext,\n })\n }, [isInited, mediaStream])\n\n const visualizationAnalyser = useMemo(() => {\n if (!audioEngine) return null\n\n const result = audioEngine.audioContext.createAnalyser()\n\n audioEngine.source.connect(result)\n return result\n }, [audioEngine])\n\n const silenceAnalyser = useMemo(() => {\n if (!audioEngine) return null\n\n const result = audioEngine.audioContext.createAnalyser()\n result.minDecibels = -60\n\n audioEngine.source.connect(result)\n return result\n }, [audioEngine])\n\n const handleSilence = useCallback(() => {\n if (!silenceAnalyser) return\n\n const frequencyData = new Uint8Array(silenceAnalyser.frequencyBinCount)\n silenceAnalyser.getByteFrequencyData(frequencyData)\n\n const isSilent = frequencyData.every((f) => f === 0)\n\n setSilenceStart((silenceStart: Dayjs | null) => {\n if (isSilent) return silenceStart || dayjs()\n\n return null\n })\n\n setNoiseStart((noiseStart: Dayjs | null) => {\n if (isSilent) return noiseStart\n\n return noiseStart || dayjs()\n })\n\n requestAnimationFrame(() => handleSilence())\n }, [silenceAnalyser, setNoiseStart, setSilenceStart])\n\n useEffect(() => {\n if (!isStopOnSilence) return\n\n requestAnimationFrame(() => handleSilence())\n }, [handleSilence, isStopOnSilence])\n\n useInterval(() => {\n if (!isStopOnSilence) return\n if (status !== 'recording') return\n if (!silenceStart) return\n if (!noiseStart) return\n if (!silenceStart.isBefore(dayjs().subtract(1.5, 'second'))) return\n\n audioCaptureProps.stop()\n }, 300)\n\n return {\n ...audioCaptureProps,\n status,\n visualizationAnalyser,\n }\n}\n","import { useEffect, useRef } from 'react';\n\nexport const useInterval = (callback: Function, delay?: number | null) => {\n const savedCallback = useRef<Function>(() => {})\n\n useEffect(() => {\n savedCallback.current = callback\n })\n\n useEffect(() => {\n if (delay !== null) {\n const interval = setInterval(() => savedCallback.current(), delay || 0)\n return () => clearInterval(interval)\n }\n\n return undefined\n }, [delay])\n}\n","import { useMemo, useRef, useState, useEffect } from 'react'\nimport nlp from 'compromise'\nimport { Howler } from 'howler'\nimport { useAudioPlayer } from 'react-use-audio-player'\nimport { useLatestMessage } from '@/hooks/messages/useLatestMessage'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\nimport { AudioEngine } from '@/types'\nimport { isOptimistic } from '@/lib/optimistic/isOptimistic'\nimport { input as getInput } from './lib/input'\nimport { isHtmlAudioSupported } from './lib/isHtmlAudioSupported'\n\ntype MessageSentence = {\n messageId: string\n sentence: string\n}\n\nconst FULL_SENTENCE_REGEX = /[\\.?!]$/\n\nconst getMessageSentences = ({\n messageId,\n input,\n}: {\n messageId: string\n input: string\n}) => {\n const sentences = nlp(input).sentences().json()\n\n return sentences.map((sentence: { text: string }) => ({\n messageId,\n sentence: sentence.text,\n }))\n}\n\nexport const useMessageAudio = ({\n onEnd,\n}: {\n onEnd: () => void\n}) => {\n const [isAudioPlayed, setIsAudioPlayed] = useState(false)\n const [stoppedMessageIds, setStoppedMessageIds] = useState<string[]>([])\n const [playedMessageSentences, setPlayedMessageSentences] = useState<MessageSentence[]>([])\n const audioPlayer = useAudioPlayer()\n const nextAudioPlayer = useAudioPlayer()\n const superinterfaceContext = useSuperinterfaceContext()\n const [isPlaying, setIsPlaying] = useState(false)\n\n const latestMessageProps = useLatestMessage()\n\n const unplayedMessageSentences = useMemo(() => {\n if (!latestMessageProps.latestMessage) return []\n if (latestMessageProps.latestMessage.role !== 'assistant') return []\n if (stoppedMessageIds.includes(latestMessageProps.latestMessage.id)) return []\n\n const input = getInput({\n message: latestMessageProps.latestMessage,\n })\n\n if (!input) return []\n\n const messageSentences = getMessageSentences({\n messageId: latestMessageProps.latestMessage.id,\n input,\n })\n\n return messageSentences.filter((ms: { messageId: string, sentence: string }) => (\n !playedMessageSentences.find((pms) => pms.messageId === ms.messageId && pms.sentence === ms.sentence)\n ))\n }, [latestMessageProps, playedMessageSentences])\n\n useEffect(() => {\n if (isPlaying) return\n if (audioPlayer.playing) return\n if (!latestMessageProps.latestMessage) return\n if (latestMessageProps.latestMessage.role !== 'assistant') return\n\n const firstUnplayedMessageSentence = unplayedMessageSentences[0]\n if (!firstUnplayedMessageSentence) {\n return\n }\n\n const isFullSentence = isOptimistic({ id: latestMessageProps.latestMessage.id }) ||\n latestMessageProps.latestMessage.status !== 'in_progress' ||\n FULL_SENTENCE_REGEX.test(firstUnplayedMessageSentence.sentence)\n\n if (!isFullSentence) return\n setIsPlaying(true)\n\n setPlayedMessageSentences((prev) => [...prev, firstUnplayedMessageSentence])\n\n const searchParams = new URLSearchParams({\n input: firstUnplayedMessageSentence.sentence,\n ...superinterfaceContext.variables,\n })\n\n audioPlayer.load(`${superinterfaceContext.baseUrl}/tts?${searchParams}`, {\n format: 'mp3',\n autoplay: isAudioPlayed,\n html5: isHtmlAudioSupported,\n onplay: () => {\n setIsAudioPlayed(true)\n },\n onstop: () => {\n setStoppedMessageIds((prev) => [...prev, firstUnplayedMessageSentence.messageId])\n setIsPlaying(false)\n },\n onload: () => {\n const nextUnplayedMessageSentence = unplayedMessageSentences[1]\n if (!nextUnplayedMessageSentence) return\n\n const isNextFullSentence = FULL_SENTENCE_REGEX.test(nextUnplayedMessageSentence.sentence)\n if (!isNextFullSentence) return\n\n const nextSearchParams = new URLSearchParams({\n input: nextUnplayedMessageSentence.sentence,\n ...superinterfaceContext.variables,\n })\n\n nextAudioPlayer.load(`${superinterfaceContext.baseUrl}/tts?${nextSearchParams}`, {\n format: 'mp3',\n autoplay: false,\n html5: isHtmlAudioSupported,\n })\n },\n onend: () => {\n setIsPlaying(false)\n\n if (unplayedMessageSentences.length === 1 && latestMessageProps.latestMessage.status !== 'in_progress') {\n onEnd()\n }\n },\n })\n }, [\n unplayedMessageSentences,\n isPlaying,\n superinterfaceContext,\n latestMessageProps,\n audioPlayer,\n nextAudioPlayer,\n playedMessageSentences,\n onEnd,\n ])\n\n useEffect(() => {\n if (isHtmlAudioSupported) {\n // @ts-ignore-next-line\n if (!Howler?._howls[0]?._sounds[0]?._node) return\n\n // @ts-ignore-next-line\n Howler._howls[0]._sounds[0]._node.crossOrigin = 'anonymous'\n }\n }, [audioPlayer])\n\n const [audioEngine, setAudioEngine] = useState<AudioEngine | null>(null)\n\n const isAudioEngineInited = useRef(false)\n\n useEffect(() => {\n if (!audioPlayer.playing) return\n if (isAudioEngineInited.current) return\n isAudioEngineInited.current = true\n\n if (isHtmlAudioSupported) {\n const audioContext = new AudioContext()\n setAudioEngine({\n // @ts-ignore-next-line\n source: audioContext.createMediaElementSource(Howler._howls[0]._sounds[0]._node),\n audioContext,\n })\n } else {\n setAudioEngine({\n source: Howler.masterGain,\n audioContext: Howler.ctx,\n })\n }\n }, [audioPlayer, isAudioEngineInited])\n\n const visualizationAnalyser = useMemo(() => {\n if (!audioEngine) return null\n\n const result = audioEngine.audioContext.createAnalyser()\n\n audioEngine.source.connect(audioEngine.audioContext.destination)\n audioEngine.source.connect(result)\n return result\n }, [audioEngine])\n\n const isPending = useMemo(() => isPlaying || unplayedMessageSentences.length > 0, [isPlaying, unplayedMessageSentences])\n\n return {\n isPending,\n isAudioPlayed,\n ...audioPlayer,\n visualizationAnalyser,\n }\n}\n","import OpenAI from 'openai'\nimport { isEmpty } from 'radash'\nimport { SerializedMessage } from '@/types'\n\ntype Args = {\n message: SerializedMessage\n}\n\nexport const input = ({\n message,\n}: Args) => {\n const textContents = (message.content as OpenAI.Beta.Threads.Messages.TextContentBlock[]).filter((c: OpenAI.Beta.Threads.Messages.TextContentBlock) => (\n c.type === 'text'\n ))\n\n const result = textContents.map((c: OpenAI.Beta.Threads.Messages.TextContentBlock) => (\n c.text.value\n )).join(' ')\n\n if (isEmpty(result)) return null\n\n return result\n}\n","import { useContext, useState, useCallback, useEffect } from 'react'\nimport _ from 'lodash'\nimport { Flex } from '@radix-ui/themes'\nimport { AssistantAvatar } from '@/components/messageGroups/MessageGroupBase/AssistantAvatar'\nimport { Name } from '@/components/messageGroups/MessageGroupBase/Name'\nimport { AssistantNameContext } from '@/contexts/assistants/AssistantNameContext'\nimport { useAudioThreadContext } from '@/hooks/threads/useAudioThreadContext'\nimport { BarsVisualizer } from '@/components/threads/AudioThread/BarsVisualizer'\nimport type { StyleProps } from '@/types'\n\nexport const Visualization = (props: StyleProps) => {\n const audioThreadContext = useAudioThreadContext()\n const assistantNameContext = useContext(AssistantNameContext)\n const [scale, setScale] = useState(0)\n\n const draw = useCallback(({ visualizationAnalyser }: { visualizationAnalyser: AnalyserNode | null }) => {\n if (!visualizationAnalyser) {\n setScale(1)\n return\n }\n\n const frequencyData = new Uint8Array(visualizationAnalyser.frequencyBinCount / 15)\n visualizationAnalyser.getByteFrequencyData(frequencyData)\n\n setScale(1 + _.mean(frequencyData) / 255 / 10)\n\n requestAnimationFrame(() => draw({ visualizationAnalyser }))\n }, [])\n\n useEffect(() => {\n draw({ visualizationAnalyser: audioThreadContext.recorderProps.visualizationAnalyser })\n }, [draw, audioThreadContext])\n\n return (\n <Flex\n direction=\"column\"\n align=\"center\"\n justify=\"center\"\n mb=\"3\"\n flexGrow=\"1\"\n {...props}\n >\n <Flex\n align=\"center\"\n justify=\"center\"\n height=\"200px\"\n width=\"200px\"\n style={{\n backgroundColor: audioThreadContext.status === 'playing' ? 'var(--accent-4)' : 'var(--gray-4)',\n borderRadius: '9999px',\n scale,\n }}\n >\n <BarsVisualizer\n visualizationAnalyser={audioThreadContext.messageAudioProps.visualizationAnalyser}\n backgroundColor={audioThreadContext.status === 'playing' ? 'var(--accent-11)' : 'var(--gray-11)'}\n height=\"40px\"\n barWidth=\"24px\"\n />\n </Flex>\n\n <Flex\n ml=\"-22.5px\"\n gap=\"3\"\n pt=\"5\"\n >\n <AssistantAvatar />\n <Name>\n {assistantNameContext}\n </Name>\n </Flex>\n </Flex>\n )\n}\n","import { useContext } from 'react'\nimport { AudioThreadContext } from '@/contexts/threads/AudioThreadContext'\n\nexport const useAudioThreadContext = () => (\n useContext(AudioThreadContext)\n)\n","'use client'\nimport _ from 'lodash'\nimport {\n Flex,\n Grid,\n} from '@radix-ui/themes'\nimport { useState, useEffect, useCallback } from 'react'\nimport { cluster } from 'radash'\n\nconst barCount = 4\n\nexport const BarsVisualizer = ({\n visualizationAnalyser,\n backgroundColor,\n height,\n barWidth,\n}: {\n visualizationAnalyser: AnalyserNode | null\n backgroundColor: string\n height: string\n barWidth: string\n}) => {\n const [barHeights, setBarHeights] = useState<number[]>([])\n\n const draw = useCallback(({ visualizationAnalyser }: { visualizationAnalyser: AnalyserNode | null }) => {\n if (!visualizationAnalyser) {\n setBarHeights(Array(barCount).fill(0))\n return\n }\n\n const frequencyData = new Uint8Array(visualizationAnalyser.frequencyBinCount / 15)\n visualizationAnalyser.getByteFrequencyData(frequencyData)\n\n // @ts-ignore-next-line\n const clusteredFrequencyData = cluster(frequencyData, frequencyData.length / barCount)\n\n setBarHeights(\n clusteredFrequencyData.map((frequencyDataCluster) => (\n _.mean(frequencyDataCluster) / 255 * 100\n ))\n )\n\n requestAnimationFrame(() => draw({ visualizationAnalyser }))\n }, [])\n\n useEffect(() => {\n draw({ visualizationAnalyser })\n }, [draw, visualizationAnalyser])\n\n return (\n <Grid\n columns={`${barCount}`}\n gap=\"1\"\n width=\"auto\"\n style={{\n // TODO not sure why we need this\n gridTemplateColumns: 'repeat(4, minmax(0, 1fr))',\n }}\n >\n {barHeights.map((barHeight, index) => (\n <Flex\n key={index}\n direction=\"column\"\n align=\"center\"\n justify=\"center\"\n height={height}\n >\n <Flex\n minHeight=\"50%\"\n maxHeight=\"100%\"\n height={`${barHeight + 20}%`}\n width={barWidth}\n style={{\n backgroundColor,\n borderRadius: 'var(--radius-6)',\n }}\n />\n </Flex>\n ))}\n </Grid>\n )\n}\n","import {\n Flex,\n Text,\n} from '@radix-ui/themes'\nimport type { StyleProps } from '@/types'\n\nconst html = ({ texts }: { texts: string[] }) => `\n .status-messages-texts:after {\n content: '${texts[0]}';\n animation: texts ${texts.length * 5}s linear infinite;\n }\n\n @keyframes texts {\n ${texts.map((_, i) => `\n ${i * 100 / texts.length}% {\n content: \"${texts[i]}\";\n }\n `).join('')}\n }`\n\nexport const StatusMessages = ({\n texts,\n className,\n style,\n}: {\n texts: string[]\n} & StyleProps) => (\n <Flex\n justify=\"center\"\n pb=\"5\"\n className={className}\n style={style}\n >\n <Text\n size=\"2\"\n weight=\"regular\"\n color=\"gray\"\n className=\"status-messages-texts\"\n />\n\n <style\n dangerouslySetInnerHTML={{\n __html: html({ texts }),\n }}\n />\n </Flex>\n)\n","import { useAudioThreadContext } from '@/hooks/threads/useAudioThreadContext'\nimport type { StyleProps } from '@/types'\nimport { StatusMessages } from './StatusMessages'\n\nexport const Status = (props: StyleProps) => {\n const audioThreadContext = useAudioThreadContext()\n\n if (audioThreadContext.status === 'recording') {\n return (\n <StatusMessages\n texts={[\n 'Start speaking',\n 'Listening',\n 'Finish speaking to send',\n 'Click the button below to send manually',\n ]}\n {...props}\n />\n )\n }\n\n if (['recorderPaused', 'idle', 'playerPaused'].includes(audioThreadContext.status)) {\n return (\n <StatusMessages\n texts={[\n 'Click the button below to activate',\n ]}\n {...props}\n />\n )\n }\n\n if (audioThreadContext.status === 'playing') {\n return (\n <StatusMessages\n texts={[\n 'Click the button below to interrupt',\n ]}\n {...props}\n />\n )\n }\n\n return (\n <StatusMessages\n texts={[\n 'Thinking',\n ]}\n {...props}\n />\n )\n}\n","import {\n Flex,\n} from '@radix-ui/themes'\nimport { BarsVisualizer } from '@/components/threads/AudioThread/BarsVisualizer'\nimport { useAudioThreadContext } from '@/hooks/threads/useAudioThreadContext'\nimport { MicIcon } from './MicIcon'\nimport { ActionButton } from './ActionButton'\nimport type { StyleProps } from '@/types'\n\nexport const Form = (props: StyleProps) => {\n const audioThreadContext = useAudioThreadContext()\n\n return (\n <Flex\n direction=\"column\"\n align=\"center\"\n {...props}\n >\n <Flex\n pb=\"3\"\n align=\"center\"\n >\n <Flex\n ml=\"-22.5px\"\n mr=\"2\"\n align=\"center\"\n >\n <MicIcon\n style={{\n color: audioThreadContext.status === 'recording' ? 'var(--accent-11)' : 'var(--gray-11)',\n }}\n />\n </Flex>\n\n <Flex\n px=\"2\"\n py=\"1\"\n style= {{\n backgroundColor: audioThreadContext.status === 'recording' ? 'var(--accent-4)' : 'var(--gray-4)',\n borderRadius: 'var(--radius-6)',\n }}\n >\n <BarsVisualizer\n visualizationAnalyser={audioThreadContext.recorderProps.visualizationAnalyser}\n backgroundColor={audioThreadContext.status === 'recording' ? 'var(--accent-11)' : 'var(--gray-11)'}\n height=\"20px\"\n barWidth=\"12px\"\n />\n </Flex>\n </Flex>\n\n <ActionButton />\n </Flex>\n )\n}\n","import { SVGProps } from 'react'\n\nexport const MicIcon = (props: SVGProps<SVGSVGElement>) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"currentColor\"\n stroke=\"currentColor\"\n strokeWidth={0}\n viewBox=\"0 0 384 512\"\n height=\"15\"\n width=\"15\"\n {...props}\n >\n <path\n stroke=\"none\"\n d=\"M192 0c-53 0-96 43-96 96v160c0 53 43 96 96 96s96-43 96-96V96c0-53-43-96-96-96zM64 216c0-13.3-10.7-24-24-24s-24 10.7-24 24v40c0 89.1 66.2 162.7 152 174.4V464h-48c-13.3 0-24 10.7-24 24s10.7 24 24 24h144c13.3 0 24-10.7 24-24s-10.7-24-24-24h-48v-33.6c85.8-11.7 152-85.3 152-174.4v-40c0-13.3-10.7-24-24-24s-24 10.7-24 24v40c0 70.7-57.3 128-128 128S64 326.7 64 256v-40z\"\n />\n </svg>\n)\n","import {\n Flex,\n IconButton,\n} from '@radix-ui/themes'\nimport {\n StopIcon,\n PauseIcon,\n ArrowUpIcon,\n ResumeIcon,\n} from '@radix-ui/react-icons'\nimport { useAudioThreadContext } from '@/hooks/threads/useAudioThreadContext'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\n\nexport const ActionButton = () => {\n const audioThreadContext = useAudioThreadContext()\n const superinterfaceContext = useSuperinterfaceContext()\n\n if (audioThreadContext.status === 'recording') {\n return (\n <Flex\n align=\"center\"\n >\n <Flex\n mr=\"3\"\n ml=\"-7\"\n >\n <IconButton\n onClick={audioThreadContext.recorderProps.pause}\n color=\"gray\"\n variant=\"soft\"\n size=\"1\"\n >\n <PauseIcon />\n </IconButton>\n </Flex>\n\n <IconButton\n onClick={audioThreadContext.recorderProps.stop}\n highContrast\n variant=\"soft\"\n size=\"4\"\n >\n <ArrowUpIcon />\n </IconButton>\n </Flex>\n )\n }\n\n if (audioThreadContext.status === 'recorderPaused') {\n return (\n <IconButton\n onClick={audioThreadContext.recorderProps.resume}\n color=\"red\"\n size=\"4\"\n >\n <ResumeIcon />\n </IconButton>\n )\n }\n\n if (audioThreadContext.status === 'idle') {\n return (\n <IconButton\n onClick={() => audioThreadContext.recorderProps.start()}\n size=\"4\"\n color=\"red\"\n />\n )\n }\n\n if (audioThreadContext.status === 'playing') {\n return (\n <IconButton\n onClick={() => {\n audioThreadContext.messageAudioProps.stop()\n superinterfaceContext.createMessageAbortControllerRef.current?.abort()\n audioThreadContext.recorderProps.start()\n }}\n size=\"4\"\n color=\"gray\"\n variant=\"soft\"\n >\n <StopIcon />\n </IconButton>\n )\n }\n\n if (audioThreadContext.status === 'playerPaused') {\n return (\n <IconButton\n onClick={() => audioThreadContext.messageAudioProps.play()}\n size=\"4\"\n >\n <ResumeIcon />\n </IconButton>\n )\n }\n\n return (\n <IconButton\n size=\"4\"\n variant=\"soft\"\n disabled\n />\n )\n}\n","import { Root, Args as RootArgs } from './Root'\nimport { Visualization } from './Visualization'\nimport { Status } from './Status'\nimport { Form } from './Form'\n\ntype Args = Omit<RootArgs, 'children'>\n\nexport const AudioThread = (props: Args) => (\n <Root {...props}>\n <Visualization />\n <Status />\n <Form />\n </Root>\n)\n\nAudioThread.Root = Root\nAudioThread.Visualization = Visualization\nAudioThread.Status = Status\nAudioThread.Form = Form\n","import { AudioThread } from '@/components/threads/AudioThread'\nimport { Root } from '@/components/threads/ThreadDialog/Root'\nimport { Trigger } from '@/components/threads/ThreadDialog/Trigger'\nimport { Content } from '@/components/threads/ThreadDialog/Content'\nimport type { StyleProps } from '@/types'\n\nexport const AudioThreadDialog = (props: StyleProps) => (\n <Root {...props}>\n <Content.Root>\n <AudioThread />\n </Content.Root>\n <Trigger />\n </Root>\n)\n\nAudioThreadDialog.Root = Root\nAudioThreadDialog.Trigger = Trigger\nAudioThreadDialog.Content = Content\n","import { useMemo } from 'react'\nimport { MarkdownContext } from '@/contexts/markdown/MarkdownContext'\nimport { useMarkdownContext } from '@/hooks/markdown/useMarkdownContext'\nimport { merge } from '@/lib/misc/merge'\n\nexport const MarkdownProvider = ({\n children,\n ...rest\n}: {\n children: React.ReactNode\n}) => {\n const prevMarkdownContext = useMarkdownContext()\n\n const value = useMemo(() => (\n merge(prevMarkdownContext, rest)\n ), [rest, prevMarkdownContext])\n\n return (\n <MarkdownContext.Provider\n value={value}\n >\n {children}\n </MarkdownContext.Provider>\n )\n}\n","import { AvatarType as AvatarTypeEnum } from '@/lib/enums'\nimport { Avatar as AvatarType, StyleProps } from '@/types'\nimport { Avatar as RadixAvatar } from '@radix-ui/themes'\nimport { ImageAvatar } from '@/components/imageAvatars/ImageAvatar'\nimport { IconAvatar } from '@/components/iconAvatars/IconAvatar'\n\nexport const Avatar = ({\n avatar,\n size = '1',\n className,\n style,\n}: {\n avatar: AvatarType\n size?: '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9'\n} & StyleProps) => {\n if (avatar) {\n if (avatar.type === AvatarTypeEnum.IMAGE && avatar.imageAvatar) {\n return (\n <ImageAvatar\n imageAvatar={avatar.imageAvatar}\n size={size}\n className={className}\n style={style}\n />\n )\n }\n\n if (avatar.type === AvatarTypeEnum.ICON && avatar.iconAvatar) {\n return (\n <IconAvatar\n iconAvatar={avatar.iconAvatar}\n size={size}\n className={className}\n style={style}\n />\n )\n }\n }\n\n return (\n <RadixAvatar\n fallback=\"\"\n size={size}\n className={className}\n style={style}\n />\n )\n}\n","import { Avatar } from '@radix-ui/themes'\nimport { Size, ImageAvatar as ImageAvatarType, StyleProps } from '@/types'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\nimport { optimizedSrc } from './lib/optimizedSrc'\n\nexport const ImageAvatar = ({\n imageAvatar,\n size,\n className,\n style,\n}: {\n imageAvatar: ImageAvatarType\n size: Size\n} & StyleProps) => {\n const superinterfaceContext = useSuperinterfaceContext()\n\n return (\n <Avatar\n className={className}\n style={style}\n fallback=\"\"\n src={optimizedSrc({ imageAvatar, size, superinterfaceContext })}\n size={size}\n />\n )\n}\n","import { Size, ImageAvatar } from '@/types'\n\nconst width = ({\n size,\n}: {\n size: Size\n}) => {\n if (size === '1') {\n return 48\n } else if (size === '2') {\n return 64\n } else if (size === '3') {\n return 96\n } else if (size === '4') {\n return 96\n } else if (size === '5') {\n return 128\n } else if (size === '6') {\n return 256\n } else if (size === '7') {\n return 256\n } else if (size === '8') {\n return 256\n } else if (size === '9') {\n return 384\n }\n\n return 384\n}\n\nexport const path = ({\n imageAvatar,\n size,\n}: {\n imageAvatar: ImageAvatar\n size: Size\n}) => (\n `/_next/image?url=${encodeURIComponent(imageAvatar.url)}&w=${width({ size })}&q=95`\n)\n","import { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\n\nexport const host = ({\n superinterfaceContext,\n}: {\n superinterfaceContext: ReturnType<typeof useSuperinterfaceContext>\n}) => {\n if (!superinterfaceContext.baseUrl) return ''\n if (!/^https?:\\/\\//i.test(superinterfaceContext.baseUrl)) return ''\n\n return new URL(superinterfaceContext.baseUrl).origin\n}\n","import { Size, ImageAvatar } from '@/types'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\nimport { path } from './path'\nimport { host } from './host'\n\nexport const optimizedSrc = ({\n imageAvatar,\n size,\n superinterfaceContext,\n}: {\n imageAvatar: ImageAvatar\n size: Size\n superinterfaceContext: ReturnType<typeof useSuperinterfaceContext>\n}) => {\n if (!imageAvatar.url) return ''\n if (imageAvatar.url.endsWith('.svg')) return imageAvatar.url\n\n return `${host({ superinterfaceContext })}${path({ imageAvatar, size })}`\n}\n","import { useMemo } from 'react'\nimport { IconAvatar as IconAvatarType, StyleProps } from '@/types'\nimport { Avatar } from '@radix-ui/themes'\nimport { iconAvatarComponents } from '@/lib/iconAvatars/iconAvatarComponents'\n\nexport const IconAvatar = ({\n iconAvatar,\n size,\n className,\n style,\n}: {\n iconAvatar: IconAvatarType\n size: '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9'\n} & StyleProps) => {\n const Component = useMemo(() => (\n iconAvatarComponents[iconAvatar.name]\n ), [iconAvatar])\n\n return (\n <Avatar\n className={className}\n style={style}\n size={size}\n fallback={(\n Component ? (\n <Component />\n ) : (\n ''\n )\n )}\n />\n )\n}\n","import { IconAvatarName } from '@/lib/enums'\nimport {\n BackpackIcon,\n RocketIcon,\n MagicWandIcon,\n CubeIcon,\n TargetIcon,\n DiscIcon,\n GlobeIcon,\n StarIcon,\n LightningBoltIcon,\n FaceIcon,\n PersonIcon,\n HeartIcon,\n} from '@radix-ui/react-icons'\n\nexport const iconAvatarComponents = {\n [IconAvatarName.BACKPACK]: BackpackIcon,\n [IconAvatarName.ROCKET]: RocketIcon,\n [IconAvatarName.MAGIC_WAND]: MagicWandIcon,\n [IconAvatarName.CUBE]: CubeIcon,\n [IconAvatarName.TARGET]: TargetIcon,\n [IconAvatarName.DISC]: DiscIcon,\n [IconAvatarName.GLOBE]: GlobeIcon,\n [IconAvatarName.STAR]: StarIcon,\n [IconAvatarName.LIGHTNING_BOLT]: LightningBoltIcon,\n [IconAvatarName.FACE]: FaceIcon,\n [IconAvatarName.PERSON]: PersonIcon,\n [IconAvatarName.HEART]: HeartIcon,\n}\n","import { useMemo } from 'react'\nimport { ComponentsContext } from '@/contexts/components/ComponentsContext'\nimport { useComponents } from '@/hooks/components/useComponents'\nimport { merge } from '@/lib/misc/merge'\n\nexport const ComponentsProvider = ({\n children,\n ...rest\n}: {\n children: React.ReactNode\n}) => {\n const prevComponents = useComponents()\n\n const value = useMemo(() => (\n merge(prevComponents, rest)\n ), [rest, prevComponents])\n\n return (\n <ComponentsContext.Provider\n value={value}\n >\n {children}\n </ComponentsContext.Provider>\n )\n}\n","import { useContext } from 'react'\nimport { ComponentsContext } from '@/contexts/components/ComponentsContext'\n\nexport const useComponents = () => (\n useContext(ComponentsContext)\n)\n","import { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\nimport { AssistantAvatarContext } from '@/contexts/assistants/AssistantAvatarContext'\nimport { AssistantNameContext } from '@/contexts/assistants/AssistantNameContext'\nimport { useAssistant } from '@/hooks/assistants/useAssistant'\nimport { Avatar } from '@/components/avatars/Avatar'\n\ntype Args = {\n children: React.ReactNode\n}\n\nexport const AssistantProvider = ({\n children,\n}: Args) => {\n const superinterfaceContext = useSuperinterfaceContext()\n const { assistant } = useAssistant({\n assistantId: superinterfaceContext.variables.assistantId,\n })\n\n return (\n <AssistantNameContext.Provider value={assistant?.name ?? ''}>\n <AssistantAvatarContext.Provider\n value={<Avatar avatar={assistant?.avatar} />}\n >\n {children}\n </AssistantAvatarContext.Provider>\n </AssistantNameContext.Provider>\n )\n}\n"]}
|