gitextract_rcugvcbq/ ├── .editorconfig ├── .eslintignore ├── .eslintrc ├── .github/ │ ├── CODEOWNERS │ ├── ISSUE_TEMPLATE/ │ │ ├── bug_report.md │ │ └── feature_request.md │ ├── actions/ │ │ ├── pnpm-node-install/ │ │ │ └── action.yaml │ │ └── uv-python-install/ │ │ └── action.yaml │ ├── copilot-instructions.md │ └── workflows/ │ ├── ci.yaml │ ├── close_stale.yml │ ├── copilot-setup-steps.yaml │ ├── e2e-tests.yaml │ ├── lint-backend.yaml │ ├── lint-ui.yaml │ ├── publish-libs.yaml │ ├── publish.yaml │ └── pytest.yaml ├── .gitignore ├── .husky/ │ └── pre-commit ├── .npmrc ├── .prettierrc ├── CHANGELOG.md ├── CONTRIBUTING.md ├── LICENSE ├── PRIVACY_POLICY.md ├── RELENG.md ├── backend/ │ ├── build.py │ ├── chainlit/ │ │ ├── __init__.py │ │ ├── __main__.py │ │ ├── _utils.py │ │ ├── action.py │ │ ├── auth/ │ │ │ ├── __init__.py │ │ │ ├── cookie.py │ │ │ └── jwt.py │ │ ├── cache.py │ │ ├── callbacks.py │ │ ├── chat_context.py │ │ ├── chat_settings.py │ │ ├── cli/ │ │ │ └── __init__.py │ │ ├── config.py │ │ ├── context.py │ │ ├── data/ │ │ │ ├── __init__.py │ │ │ ├── acl.py │ │ │ ├── base.py │ │ │ ├── chainlit_data_layer.py │ │ │ ├── dynamodb.py │ │ │ ├── literalai.py │ │ │ ├── sql_alchemy.py │ │ │ ├── storage_clients/ │ │ │ │ ├── __init__.py │ │ │ │ ├── azure.py │ │ │ │ ├── azure_blob.py │ │ │ │ ├── base.py │ │ │ │ ├── gcs.py │ │ │ │ └── s3.py │ │ │ └── utils.py │ │ ├── discord/ │ │ │ ├── __init__.py │ │ │ └── app.py │ │ ├── element.py │ │ ├── emitter.py │ │ ├── input_widget.py │ │ ├── langchain/ │ │ │ ├── __init__.py │ │ │ └── callbacks.py │ │ ├── langflow/ │ │ │ └── __init__.py │ │ ├── llama_index/ │ │ │ ├── __init__.py │ │ │ └── callbacks.py │ │ ├── logger.py │ │ ├── markdown.py │ │ ├── mcp.py │ │ ├── message.py │ │ ├── mistralai/ │ │ │ └── __init__.py │ │ ├── mode.py │ │ ├── oauth_providers.py │ │ ├── openai/ │ │ │ └── __init__.py │ │ ├── py.typed │ │ ├── sample/ │ │ │ ├── hello.py │ │ │ └── starters_demo.py │ │ ├── secret.py │ │ ├── semantic_kernel/ │ │ │ └── __init__.py │ │ ├── server.py │ │ ├── session.py │ │ ├── sidebar.py │ │ ├── slack/ │ │ │ ├── __init__.py │ │ │ └── app.py │ │ ├── socket.py │ │ ├── step.py │ │ ├── sync.py │ │ ├── teams/ │ │ │ ├── __init__.py │ │ │ └── app.py │ │ ├── translations/ │ │ │ ├── ar-SA.json │ │ │ ├── bn.json │ │ │ ├── da-DK.json │ │ │ ├── de-DE.json │ │ │ ├── el-GR.json │ │ │ ├── en-US.json │ │ │ ├── es.json │ │ │ ├── fr-FR.json │ │ │ ├── gu.json │ │ │ ├── he-IL.json │ │ │ ├── hi.json │ │ │ ├── it.json │ │ │ ├── ja.json │ │ │ ├── kn.json │ │ │ ├── ko.json │ │ │ ├── ml.json │ │ │ ├── mr.json │ │ │ ├── nl.json │ │ │ ├── ta.json │ │ │ ├── te.json │ │ │ ├── zh-CN.json │ │ │ └── zh-TW.json │ │ ├── translations.py │ │ ├── types.py │ │ ├── user.py │ │ ├── user_session.py │ │ ├── utils.py │ │ └── version.py │ ├── pyproject.toml │ └── tests/ │ ├── __init__.py │ ├── auth/ │ │ ├── __init__.py │ │ └── test_cookie.py │ ├── conftest.py │ ├── data/ │ │ ├── __init__.py │ │ ├── conftest.py │ │ ├── storage_clients/ │ │ │ ├── test_gcs.py │ │ │ └── test_s3.py │ │ ├── test_chainlit_data_layer.py │ │ ├── test_get_data_layer.py │ │ ├── test_literalai.py │ │ └── test_sql_alchemy.py │ ├── langchain/ │ │ ├── __init__.py │ │ ├── test_async_callback.py │ │ ├── test_chain_types.py │ │ └── test_sync_callback.py │ ├── llama_index/ │ │ └── test_callbacks.py │ ├── test_action.py │ ├── test_cache.py │ ├── test_callbacks.py │ ├── test_chat_context.py │ ├── test_chat_settings.py │ ├── test_context.py │ ├── test_element.py │ ├── test_emitter.py │ ├── test_input_widget.py │ ├── test_markdown.py │ ├── test_mcp.py │ ├── test_message.py │ ├── test_modes.py │ ├── test_oauth_providers.py │ ├── test_server.py │ ├── test_session.py │ ├── test_sidebar.py │ ├── test_slack_socket_mode.py │ ├── test_socket.py │ ├── test_step.py │ ├── test_translations.py │ ├── test_user_session.py │ └── test_utils.py ├── cypress/ │ ├── e2e/ │ │ ├── action/ │ │ │ ├── main.py │ │ │ └── spec.cy.ts │ │ ├── ask_custom_element/ │ │ │ ├── main.py │ │ │ ├── public/ │ │ │ │ └── elements/ │ │ │ │ └── JiraTicket.jsx │ │ │ └── spec.cy.ts │ │ ├── ask_file/ │ │ │ ├── main.py │ │ │ └── spec.cy.ts │ │ ├── ask_multiple_files/ │ │ │ ├── main.py │ │ │ └── spec.cy.ts │ │ ├── ask_user/ │ │ │ ├── main.py │ │ │ └── spec.cy.ts │ │ ├── audio_element/ │ │ │ ├── main.py │ │ │ └── spec.cy.ts │ │ ├── auth/ │ │ │ ├── main.py │ │ │ └── spec.cy.ts │ │ ├── blinking_cursor/ │ │ │ ├── main.py │ │ │ └── spec.cy.ts │ │ ├── chat_context/ │ │ │ ├── main.py │ │ │ └── spec.cy.ts │ │ ├── chat_prefill/ │ │ │ ├── main.py │ │ │ └── spec.cy.ts │ │ ├── chat_profiles/ │ │ │ ├── main.py │ │ │ └── spec.cy.ts │ │ ├── chat_settings/ │ │ │ ├── main.py │ │ │ └── spec.cy.ts │ │ ├── command/ │ │ │ ├── main.py │ │ │ └── spec.cy.ts │ │ ├── config_overrides/ │ │ │ ├── main.py │ │ │ └── spec.cy.ts │ │ ├── context/ │ │ │ ├── main.py │ │ │ └── spec.cy.ts │ │ ├── copilot/ │ │ │ ├── main.py │ │ │ └── spec.cy.ts │ │ ├── custom_build/ │ │ │ ├── .gitignore │ │ │ ├── main.py │ │ │ ├── public/ │ │ │ │ ├── .gitignore │ │ │ │ └── build/ │ │ │ │ ├── assets/ │ │ │ │ │ └── .PLACEHOLDER │ │ │ │ └── index.html │ │ │ └── spec.cy.ts │ │ ├── custom_data_layer/ │ │ │ └── sql_alchemy.py │ │ ├── custom_element/ │ │ │ ├── main.py │ │ │ ├── public/ │ │ │ │ └── elements/ │ │ │ │ └── Counter.jsx │ │ │ └── spec.cy.ts │ │ ├── custom_element_auth/ │ │ │ ├── main.py │ │ │ ├── spec.cy.ts │ │ │ └── test.txt │ │ ├── custom_element_command/ │ │ │ ├── main.py │ │ │ ├── public/ │ │ │ │ └── elements/ │ │ │ │ └── Commander.jsx │ │ │ └── spec.cy.ts │ │ ├── custom_theme/ │ │ │ ├── main.py │ │ │ ├── public/ │ │ │ │ └── theme.json │ │ │ └── spec.cy.ts │ │ ├── data_layer/ │ │ │ ├── .gitignore │ │ │ ├── main.py │ │ │ └── spec.cy.ts │ │ ├── dataframe/ │ │ │ ├── main.py │ │ │ └── spec.cy.ts │ │ ├── edit_message/ │ │ │ ├── main.py │ │ │ └── spec.cy.ts │ │ ├── elements/ │ │ │ ├── main.py │ │ │ └── spec.cy.ts │ │ ├── error_handling/ │ │ │ ├── main.py │ │ │ └── spec.cy.ts │ │ ├── file_element/ │ │ │ ├── main.py │ │ │ └── spec.cy.ts │ │ ├── header_auth/ │ │ │ ├── main.py │ │ │ └── spec.cy.ts │ │ ├── llama_index_cb/ │ │ │ ├── main.py │ │ │ └── spec.cy.ts │ │ ├── modes/ │ │ │ ├── main.py │ │ │ └── spec.cy.ts │ │ ├── on_chat_start/ │ │ │ ├── main.py │ │ │ └── spec.cy.ts │ │ ├── password_auth/ │ │ │ ├── main.py │ │ │ └── spec.cy.ts │ │ ├── plotly/ │ │ │ ├── main.py │ │ │ └── spec.cy.ts │ │ ├── pyplot/ │ │ │ ├── main.py │ │ │ └── spec.cy.ts │ │ ├── readme/ │ │ │ ├── chainlit_pt-BR.md │ │ │ ├── main.py │ │ │ └── spec.cy.ts │ │ ├── remove_elements/ │ │ │ ├── main.py │ │ │ └── spec.cy.ts │ │ ├── remove_step/ │ │ │ ├── main.py │ │ │ └── spec.cy.ts │ │ ├── sidebar/ │ │ │ ├── main.py │ │ │ └── spec.cy.ts │ │ ├── starters/ │ │ │ ├── main.py │ │ │ └── spec.cy.ts │ │ ├── starters_categories/ │ │ │ ├── main.py │ │ │ └── spec.cy.ts │ │ ├── step/ │ │ │ ├── async-spec.cy.ts │ │ │ ├── main_async.py │ │ │ ├── main_sync.py │ │ │ ├── sync-spec.cy.ts │ │ │ └── tests.ts │ │ ├── stop_task/ │ │ │ ├── async-spec.cy.ts │ │ │ ├── main_async.py │ │ │ ├── main_sync.py │ │ │ ├── sync-spec.cy.ts │ │ │ └── tests.ts │ │ ├── streaming/ │ │ │ ├── main.py │ │ │ └── spec.cy.ts │ │ ├── tasklist/ │ │ │ ├── main.py │ │ │ └── spec.cy.ts │ │ ├── thread_resume/ │ │ │ ├── main.py │ │ │ └── spec.cy.ts │ │ ├── update_step/ │ │ │ ├── main.py │ │ │ └── spec.cy.ts │ │ ├── upload_attachments/ │ │ │ ├── main.py │ │ │ └── spec.cy.ts │ │ ├── user_env/ │ │ │ ├── .gitignore │ │ │ ├── main.py │ │ │ └── spec.cy.ts │ │ ├── user_session/ │ │ │ ├── main.py │ │ │ └── spec.cy.ts │ │ └── window_message/ │ │ ├── main.py │ │ ├── public/ │ │ │ └── iframe.html │ │ └── spec.cy.ts │ ├── fixtures/ │ │ ├── hello.cpp │ │ ├── hello.py │ │ └── state_of_the_union.txt │ └── support/ │ ├── e2e.ts │ ├── run.ts │ └── testUtils.ts ├── cypress.config.ts ├── frontend/ │ ├── .eslintignore │ ├── .gitignore │ ├── components.json │ ├── index.html │ ├── package.json │ ├── postcss.config.js │ ├── src/ │ │ ├── App.tsx │ │ ├── AppWrapper.tsx │ │ ├── api/ │ │ │ └── index.ts │ │ ├── components/ │ │ │ ├── Alert.tsx │ │ │ ├── AudioPresence.tsx │ │ │ ├── AutoResizeTextarea.tsx │ │ │ ├── AutoResumeThread.tsx │ │ │ ├── BlinkingCursor.tsx │ │ │ ├── ButtonLink.tsx │ │ │ ├── ChatSettings/ │ │ │ │ ├── ChatSettingsSidebar.tsx │ │ │ │ ├── CheckboxInput.tsx │ │ │ │ ├── DatePickerInput.tsx │ │ │ │ ├── FormInput.tsx │ │ │ │ ├── InputLabel.tsx │ │ │ │ ├── InputStateHandler.tsx │ │ │ │ ├── MultiSelectInput.tsx │ │ │ │ ├── NotificationCount.tsx │ │ │ │ ├── RadioButtonGroup.tsx │ │ │ │ ├── SelectInput.tsx │ │ │ │ ├── SliderInput.tsx │ │ │ │ ├── SwitchInput.tsx │ │ │ │ ├── TagsInput.tsx │ │ │ │ ├── TextInput.tsx │ │ │ │ └── index.tsx │ │ │ ├── CodeSnippet.tsx │ │ │ ├── CopyButton.tsx │ │ │ ├── ElementSideView.tsx │ │ │ ├── ElementView.tsx │ │ │ ├── Elements/ │ │ │ │ ├── Audio.tsx │ │ │ │ ├── CustomElement/ │ │ │ │ │ ├── Imports.ts │ │ │ │ │ ├── Renderer.tsx │ │ │ │ │ └── index.tsx │ │ │ │ ├── Dataframe.tsx │ │ │ │ ├── ElementRef.tsx │ │ │ │ ├── File.tsx │ │ │ │ ├── Image.tsx │ │ │ │ ├── LazyDataframe.tsx │ │ │ │ ├── PDF.tsx │ │ │ │ ├── Plotly.tsx │ │ │ │ ├── Text.tsx │ │ │ │ ├── Video.tsx │ │ │ │ └── index.tsx │ │ │ ├── ErrorBoundary.tsx │ │ │ ├── Icon.tsx │ │ │ ├── Kbd.tsx │ │ │ ├── LeftSidebar/ │ │ │ │ ├── Search.tsx │ │ │ │ ├── ThreadHistory.tsx │ │ │ │ ├── ThreadList.tsx │ │ │ │ ├── ThreadOptions.tsx │ │ │ │ └── index.tsx │ │ │ ├── Loader.tsx │ │ │ ├── LoginForm.tsx │ │ │ ├── Logo.tsx │ │ │ ├── Markdown.tsx │ │ │ ├── MarkdownAlert.tsx │ │ │ ├── ProviderButton.tsx │ │ │ ├── QuiltedGrid.tsx │ │ │ ├── ReadOnlyThread.tsx │ │ │ ├── Tasklist/ │ │ │ │ ├── Task.tsx │ │ │ │ ├── TaskStatusIcon.tsx │ │ │ │ └── index.tsx │ │ │ ├── ThemeProvider.tsx │ │ │ ├── WaterMark.tsx │ │ │ ├── chat/ │ │ │ │ ├── Footer.tsx │ │ │ │ ├── MessageComposer/ │ │ │ │ │ ├── Attachment.tsx │ │ │ │ │ ├── Attachments.tsx │ │ │ │ │ ├── CommandButtons.tsx │ │ │ │ │ ├── CommandPopoverButton.tsx │ │ │ │ │ ├── FavoriteButton.tsx │ │ │ │ │ ├── Input.tsx │ │ │ │ │ ├── Mcp/ │ │ │ │ │ │ ├── AddForm.tsx │ │ │ │ │ │ ├── AnimatedPlugIcon.tsx │ │ │ │ │ │ ├── List.tsx │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── ModePicker.tsx │ │ │ │ │ ├── SubmitButton.tsx │ │ │ │ │ ├── UploadButton.tsx │ │ │ │ │ ├── VoiceButton.tsx │ │ │ │ │ └── index.tsx │ │ │ │ ├── Messages/ │ │ │ │ │ ├── Message/ │ │ │ │ │ │ ├── AskActionButtons.tsx │ │ │ │ │ │ ├── AskFileButton.tsx │ │ │ │ │ │ ├── Avatar.tsx │ │ │ │ │ │ ├── Buttons/ │ │ │ │ │ │ │ ├── Actions/ │ │ │ │ │ │ │ │ ├── ActionButton.tsx │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ ├── DebugButton.tsx │ │ │ │ │ │ │ ├── FeedbackButtons.tsx │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ ├── Content/ │ │ │ │ │ │ │ ├── InlinedElements/ │ │ │ │ │ │ │ │ ├── InlineCustomElementList.tsx │ │ │ │ │ │ │ │ ├── InlinedAudioList.tsx │ │ │ │ │ │ │ │ ├── InlinedDataframeList.tsx │ │ │ │ │ │ │ │ ├── InlinedFileList.tsx │ │ │ │ │ │ │ │ ├── InlinedImageList.tsx │ │ │ │ │ │ │ │ ├── InlinedPDFList.tsx │ │ │ │ │ │ │ │ ├── InlinedPlotlyList.tsx │ │ │ │ │ │ │ │ ├── InlinedTextList.tsx │ │ │ │ │ │ │ │ ├── InlinedVideoList.tsx │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ ├── Step.tsx │ │ │ │ │ │ ├── UserMessage.tsx │ │ │ │ │ │ └── index.tsx │ │ │ │ │ └── index.tsx │ │ │ │ ├── MessagesContainer/ │ │ │ │ │ └── index.tsx │ │ │ │ ├── ScrollContainer.tsx │ │ │ │ ├── ScrollDownButton.tsx │ │ │ │ ├── Starter.tsx │ │ │ │ ├── StarterCategory.tsx │ │ │ │ ├── Starters.tsx │ │ │ │ ├── WelcomeScreen.tsx │ │ │ │ └── index.tsx │ │ │ ├── header/ │ │ │ │ ├── ApiKeys.tsx │ │ │ │ ├── ChatProfiles.tsx │ │ │ │ ├── NewChat.tsx │ │ │ │ ├── Readme.tsx │ │ │ │ ├── Share.tsx │ │ │ │ ├── SidebarTrigger.tsx │ │ │ │ ├── ThemeToggle.tsx │ │ │ │ ├── UserNav.tsx │ │ │ │ └── index.tsx │ │ │ ├── i18n/ │ │ │ │ ├── Translator.tsx │ │ │ │ └── index.ts │ │ │ ├── icons/ │ │ │ │ ├── Auth0.tsx │ │ │ │ ├── Cognito.tsx │ │ │ │ ├── Descope.tsx │ │ │ │ ├── EditSquare.tsx │ │ │ │ ├── Github.tsx │ │ │ │ ├── Gitlab.tsx │ │ │ │ ├── Google.tsx │ │ │ │ ├── Microsoft.tsx │ │ │ │ ├── Okta.tsx │ │ │ │ ├── PaperClip.tsx │ │ │ │ ├── Pencil.tsx │ │ │ │ ├── Search.tsx │ │ │ │ ├── Send.tsx │ │ │ │ ├── Settings.tsx │ │ │ │ ├── Sidebar.tsx │ │ │ │ ├── Stop.tsx │ │ │ │ ├── ToolBox.tsx │ │ │ │ └── VoiceLines.tsx │ │ │ ├── share/ │ │ │ │ └── ShareDialog.tsx │ │ │ └── ui/ │ │ │ ├── accordion.tsx │ │ │ ├── alert-dialog.tsx │ │ │ ├── aspect-ratio.tsx │ │ │ ├── avatar.tsx │ │ │ ├── badge.tsx │ │ │ ├── button.tsx │ │ │ ├── calendar.tsx │ │ │ ├── card.tsx │ │ │ ├── carousel.tsx │ │ │ ├── checkbox.tsx │ │ │ ├── command.tsx │ │ │ ├── dialog.tsx │ │ │ ├── dropdown-menu.tsx │ │ │ ├── form.tsx │ │ │ ├── hover-card.tsx │ │ │ ├── input.tsx │ │ │ ├── label.tsx │ │ │ ├── pagination.tsx │ │ │ ├── popover.tsx │ │ │ ├── progress.tsx │ │ │ ├── radio-group.tsx │ │ │ ├── resizable.tsx │ │ │ ├── scroll-area.tsx │ │ │ ├── select.tsx │ │ │ ├── separator.tsx │ │ │ ├── sheet.tsx │ │ │ ├── sidebar.tsx │ │ │ ├── skeleton.tsx │ │ │ ├── slider.tsx │ │ │ ├── sonner.tsx │ │ │ ├── switch.tsx │ │ │ ├── table.tsx │ │ │ ├── tabs.tsx │ │ │ ├── textarea.tsx │ │ │ └── tooltip.tsx │ │ ├── contexts/ │ │ │ └── MessageContext.tsx │ │ ├── hooks/ │ │ │ ├── query.ts │ │ │ ├── use-mobile.tsx │ │ │ ├── useCommandNavigation.tsx │ │ │ ├── useFetch.tsx │ │ │ ├── useLayoutMaxWidth.tsx │ │ │ ├── usePlatform.ts │ │ │ └── useUpload.tsx │ │ ├── i18n/ │ │ │ ├── dateLocale.ts │ │ │ └── index.ts │ │ ├── index.css │ │ ├── index.d.ts │ │ ├── lib/ │ │ │ ├── message.ts │ │ │ ├── router.ts │ │ │ └── utils.ts │ │ ├── main.tsx │ │ ├── pages/ │ │ │ ├── AuthCallback.tsx │ │ │ ├── Element.tsx │ │ │ ├── Env.tsx │ │ │ ├── Home.tsx │ │ │ ├── Login.tsx │ │ │ ├── Page.tsx │ │ │ └── Thread.tsx │ │ ├── router.tsx │ │ ├── state/ │ │ │ ├── chat.ts │ │ │ ├── project.ts │ │ │ └── user.ts │ │ ├── types/ │ │ │ ├── Input.ts │ │ │ ├── NotificationCount.tsx │ │ │ ├── chat.ts │ │ │ ├── index.ts │ │ │ └── messageContext.ts │ │ └── vite-env.d.ts │ ├── tailwind.config.js │ ├── tests/ │ │ ├── FavoriteButton.spec.tsx │ │ ├── NewChat.spec.tsx │ │ ├── content.spec.tsx │ │ ├── icon.spec.tsx │ │ ├── setup-tests.ts │ │ └── tsconfig.json │ ├── tsconfig.json │ ├── tsconfig.node.json │ ├── vite.config.ts │ └── vitest.config.ts ├── libs/ │ ├── copilot/ │ │ ├── .storybook/ │ │ │ ├── main.ts │ │ │ └── preview.ts │ │ ├── components.json │ │ ├── index.tsx │ │ ├── package.json │ │ ├── postcss.config.js │ │ ├── sonner.css │ │ ├── src/ │ │ │ ├── ThemeProvider.tsx │ │ │ ├── api.ts │ │ │ ├── app.tsx │ │ │ ├── appWrapper.tsx │ │ │ ├── chat/ │ │ │ │ ├── body.tsx │ │ │ │ └── index.tsx │ │ │ ├── components/ │ │ │ │ ├── ElementSideView.tsx │ │ │ │ ├── Header.tsx │ │ │ │ └── WelcomeScreen.tsx │ │ │ ├── hooks/ │ │ │ │ ├── index.ts │ │ │ │ └── useCopilotInteract.ts │ │ │ ├── index.css │ │ │ ├── lib/ │ │ │ │ └── utils.ts │ │ │ ├── state.ts │ │ │ ├── types.ts │ │ │ └── widget.tsx │ │ ├── stories/ │ │ │ └── App.stories.ts │ │ ├── tailwind.config.js │ │ ├── tsconfig.json │ │ ├── tsconfig.node.json │ │ └── vite.config.ts │ └── react-client/ │ ├── README.md │ ├── package.json │ ├── src/ │ │ ├── api/ │ │ │ ├── hooks/ │ │ │ │ ├── api.ts │ │ │ │ └── auth/ │ │ │ │ ├── config.ts │ │ │ │ ├── index.ts │ │ │ │ ├── sessionManagement.ts │ │ │ │ ├── state.ts │ │ │ │ ├── types.ts │ │ │ │ └── userManagement.ts │ │ │ └── index.tsx │ │ ├── context.ts │ │ ├── index.ts │ │ ├── state.ts │ │ ├── types/ │ │ │ ├── action.ts │ │ │ ├── audio.ts │ │ │ ├── command.ts │ │ │ ├── config.ts │ │ │ ├── element.ts │ │ │ ├── feedback.ts │ │ │ ├── file.ts │ │ │ ├── history.ts │ │ │ ├── index.ts │ │ │ ├── mcp.ts │ │ │ ├── mode.ts │ │ │ ├── step.ts │ │ │ ├── thread.ts │ │ │ └── user.ts │ │ ├── useAudio.ts │ │ ├── useChatData.ts │ │ ├── useChatInteract.ts │ │ ├── useChatMessages.ts │ │ ├── useChatSession.ts │ │ ├── useConfig.ts │ │ ├── utils/ │ │ │ ├── group.ts │ │ │ └── message.ts │ │ └── wavtools/ │ │ ├── analysis/ │ │ │ ├── audio_analysis.js │ │ │ └── constants.js │ │ ├── index.ts │ │ ├── wav_packer.js │ │ ├── wav_recorder.js │ │ ├── wav_renderer.ts │ │ ├── wav_stream_player.js │ │ └── worklets/ │ │ ├── audio_processor.js │ │ └── stream_processor.js │ ├── tsconfig.build.json │ └── tsconfig.json ├── lint-staged.config.js ├── package.json ├── pnpm-workspace.yaml └── tsconfig.json