gitextract_f36dbven/ ├── .erb/ │ ├── .vscode/ │ │ └── settings.json │ ├── configs/ │ │ ├── .eslintrc │ │ ├── webpack.config.base.ts │ │ ├── webpack.config.eslint.ts │ │ ├── webpack.config.main.prod.ts │ │ ├── webpack.config.preload.dev.ts │ │ ├── webpack.config.renderer.dev.dll.ts │ │ ├── webpack.config.renderer.dev.ts │ │ ├── webpack.config.renderer.prod.ts │ │ └── webpack.paths.ts │ ├── mocks/ │ │ └── fileMock.js │ └── scripts/ │ ├── .eslintrc │ ├── check-build-exists.ts │ ├── check-native-dep.cjs │ ├── check-native-dep.js │ ├── check-node-env.js │ ├── check-port-in-use.js │ ├── clean.js │ ├── delete-source-maps.js │ ├── electron-rebuild.cjs │ ├── electron-rebuild.js │ ├── link-modules.cjs │ ├── link-modules.ts │ ├── notarize.js │ ├── patch-libsql.cjs │ └── postinstall.cjs ├── .eslintignore ├── .eslintrc.js ├── .gitattributes ├── .github/ │ ├── FUNDING.yml │ ├── ISSUE_TEMPLATE/ │ │ ├── bug_report.md │ │ ├── custom.md │ │ └── feature_request.md │ ├── PULL_REQUEST_TEMPLATE.md │ ├── config.yml │ ├── dependabot.yml │ └── stale.yml ├── .gitignore ├── .node-version ├── .npmrc ├── .prettierrc ├── ERROR_HANDLING.md ├── LICENSE ├── README.md ├── assets/ │ ├── assets.d.ts │ ├── entitlements.mac.plist │ ├── icon.icns │ └── installer.nsh ├── biome.json ├── doc/ │ ├── FAQ-CN.md │ ├── FAQ.md │ └── README-CN.md ├── docs/ │ ├── adding-new-provider.md │ ├── adding-provider.md │ ├── dependency-reorg.md │ ├── new-session-mechanism.md │ ├── rag.md │ ├── session-module-split-plan.md │ ├── storage.md │ ├── testing.md │ └── token-estimation.md ├── electron-builder.yml ├── electron.vite.config.ts ├── i18next-parser.config.mjs ├── package.json ├── patches/ │ ├── libsql@0.5.22.patch │ └── mdast-util-gfm-autolink-literal@2.0.1.patch ├── pnpm-workspace.yaml ├── postcss.config.js ├── release/ │ └── app/ │ └── package.json ├── script/ │ └── translate.mjs ├── scripts/ │ └── ralph/ │ ├── prompt-opencode.md │ └── ralph.sh ├── src/ │ ├── __tests__/ │ │ └── App.test.tsx.bk │ ├── main/ │ │ ├── adapters/ │ │ │ ├── index.ts │ │ │ └── sentry.ts │ │ ├── analystic-node.ts │ │ ├── app-updater.ts │ │ ├── autoLauncher.ts │ │ ├── cache.ts │ │ ├── deeplinks.ts │ │ ├── file-parser.ts │ │ ├── knowledge-base/ │ │ │ ├── db.ts │ │ │ ├── file-loaders.ts │ │ │ ├── index.ts │ │ │ ├── ipc-handlers.ts │ │ │ ├── model-providers.ts │ │ │ ├── parsers/ │ │ │ │ ├── chatbox-parser.ts │ │ │ │ ├── index.ts │ │ │ │ ├── local-parser.ts │ │ │ │ ├── mineru-parser.ts │ │ │ │ └── types.ts │ │ │ └── remote-file-parser.ts │ │ ├── locales.ts │ │ ├── main.ts │ │ ├── mcp/ │ │ │ ├── ipc-stdio-transport.ts │ │ │ ├── shell-env.cjs │ │ │ └── shell-env.d.ts │ │ ├── menu.ts │ │ ├── proxy.ts │ │ ├── readability.ts │ │ ├── store-node.ts │ │ ├── util.ts │ │ └── window_state.ts │ ├── preload/ │ │ └── index.ts │ ├── renderer/ │ │ ├── Sidebar.tsx │ │ ├── adapters/ │ │ │ ├── index.ts │ │ │ └── sentry.ts │ │ ├── components/ │ │ │ ├── Accordion.tsx │ │ │ ├── ActionMenu.tsx │ │ │ ├── AdaptiveSelect.tsx │ │ │ ├── Artifact.tsx │ │ │ ├── CustomProviderIcon.tsx │ │ │ ├── EditableAvatar.tsx │ │ │ ├── ErrorTestPannel.tsx │ │ │ ├── FileIcon.tsx │ │ │ ├── Image.tsx │ │ │ ├── ImageCountSlider.tsx │ │ │ ├── ImageModelSelect.tsx │ │ │ ├── ImageStyleSelect.tsx │ │ │ ├── InputBox/ │ │ │ │ ├── Attachments.tsx │ │ │ │ ├── ImageUploadButton.tsx │ │ │ │ ├── ImageUploadInput.tsx │ │ │ │ ├── InputBox.tsx │ │ │ │ ├── SessionSettingsButton.tsx │ │ │ │ ├── TokenCountMenu.tsx │ │ │ │ ├── WebBrowsingButton.tsx │ │ │ │ ├── actionIconStyles.ts │ │ │ │ ├── index.ts │ │ │ │ └── preprocessState.ts │ │ │ ├── Markdown.tsx │ │ │ ├── Mermaid.tsx │ │ │ ├── ModelList.tsx │ │ │ ├── ModelSelector/ │ │ │ │ ├── DesktopModelSelector.tsx │ │ │ │ ├── MobileModelSelector.tsx │ │ │ │ ├── ProviderHeader.tsx │ │ │ │ ├── SimplePreview.tsx │ │ │ │ ├── index.tsx │ │ │ │ └── shared.tsx │ │ │ ├── Shortcut.tsx │ │ │ ├── SortableItem.tsx │ │ │ ├── SponsorChip.tsx │ │ │ ├── StyledMenu.tsx │ │ │ ├── UpdateAvailableButton.tsx │ │ │ ├── chat/ │ │ │ │ ├── CompactionStatus.tsx │ │ │ │ ├── Message.tsx │ │ │ │ ├── MessageAttachmentGrid.tsx │ │ │ │ ├── MessageErrTips.tsx │ │ │ │ ├── MessageList.tsx │ │ │ │ ├── MessageLoading.tsx │ │ │ │ ├── MessageNavigation.tsx │ │ │ │ └── SummaryMessage.tsx │ │ │ ├── common/ │ │ │ │ ├── AdaptiveModal.tsx │ │ │ │ ├── Avatar.tsx │ │ │ │ ├── CompressionModal.tsx │ │ │ │ ├── ConfirmDeleteButton.tsx │ │ │ │ ├── CreatableSelect.tsx │ │ │ │ ├── Divider.tsx │ │ │ │ ├── ErrorBoundary.tsx │ │ │ │ ├── LazyNumberInput.tsx │ │ │ │ ├── LazySlider.tsx │ │ │ │ ├── Link.tsx │ │ │ │ ├── Mark.tsx │ │ │ │ ├── MaxContextMessageCountSlider.tsx │ │ │ │ ├── MiniButton.tsx │ │ │ │ ├── PasswordTextField.tsx │ │ │ │ ├── PopoverConfirm.tsx │ │ │ │ ├── ScalableIcon.tsx │ │ │ │ ├── SegmentedControl.tsx │ │ │ │ ├── SliderWithInput.tsx │ │ │ │ ├── TemperatureSlider.tsx │ │ │ │ ├── TextFieldReset.tsx │ │ │ │ ├── Toasts.tsx │ │ │ │ └── TopPSlider.tsx │ │ │ ├── dev/ │ │ │ │ ├── DevHeader.tsx │ │ │ │ └── ThemeSwitchButton.tsx │ │ │ ├── icons/ │ │ │ │ ├── ArrowRightIcon.tsx │ │ │ │ ├── BrandGithub.tsx │ │ │ │ ├── BrandRedNote.tsx │ │ │ │ ├── BrandWechat.tsx │ │ │ │ ├── BrandX.tsx │ │ │ │ ├── Broom.tsx │ │ │ │ ├── Dart.tsx │ │ │ │ ├── FullscreenIcon.tsx │ │ │ │ ├── HomepageIcon.tsx │ │ │ │ ├── Java.tsx │ │ │ │ ├── LayoutExpand.tsx │ │ │ │ ├── LayoutShrink.tsx │ │ │ │ ├── Loading.tsx │ │ │ │ ├── ModelIcon.tsx │ │ │ │ ├── ProviderIcon.tsx │ │ │ │ ├── ProviderImageIcon.tsx │ │ │ │ └── Robot.tsx │ │ │ ├── knowledge-base/ │ │ │ │ ├── ChunksPreviewModal.tsx │ │ │ │ ├── KnowledgeBase.tsx │ │ │ │ ├── KnowledgeBaseDocuments.tsx │ │ │ │ ├── KnowledgeBaseForm.tsx │ │ │ │ ├── KnowledgeBaseMenu.tsx │ │ │ │ └── RemoteRetryModal.tsx │ │ │ ├── layout/ │ │ │ │ ├── ExitFullscreenButton.tsx │ │ │ │ ├── Header.tsx │ │ │ │ ├── Overlay.tsx │ │ │ │ ├── Page.tsx │ │ │ │ ├── Toolbar.tsx │ │ │ │ └── WindowControls.tsx │ │ │ ├── mcp/ │ │ │ │ ├── MCPMenu.tsx │ │ │ │ └── MCPStatus.tsx │ │ │ ├── message-parts/ │ │ │ │ └── ToolCallPartUI.tsx │ │ │ ├── session/ │ │ │ │ ├── SessionItem.tsx │ │ │ │ ├── SessionList.tsx │ │ │ │ └── ThreadHistoryDrawer.tsx │ │ │ ├── settings/ │ │ │ │ ├── DocumentParserSettings.tsx │ │ │ │ ├── mcp/ │ │ │ │ │ ├── BuiltinServersSection.tsx │ │ │ │ │ ├── ConfigModal.tsx │ │ │ │ │ ├── CustomServersSection.tsx │ │ │ │ │ ├── ServerRegistrySpotlight.tsx │ │ │ │ │ ├── registries.ts │ │ │ │ │ └── utils.ts │ │ │ │ └── provider/ │ │ │ │ ├── AddProviderModal.tsx │ │ │ │ ├── ImportProviderModal.tsx │ │ │ │ └── ProviderList.tsx │ │ │ └── ui/ │ │ │ ├── command.tsx │ │ │ └── dialog.tsx │ │ ├── dev/ │ │ │ └── devToolsConfig.ts │ │ ├── hooks/ │ │ │ ├── dom.ts │ │ │ ├── knowledge-base.ts │ │ │ ├── mcp.ts │ │ │ ├── useAppTheme.ts │ │ │ ├── useChatboxAIModels.ts │ │ │ ├── useChunksPreview.ts │ │ │ ├── useCopied.ts │ │ │ ├── useCopilots.ts │ │ │ ├── useDefaultSystemLanguage.ts │ │ │ ├── useI18nEffect.ts │ │ │ ├── useInputBoxHistory.ts │ │ │ ├── useKnowledgeBase.ts │ │ │ ├── useMessageInput.ts │ │ │ ├── useNeedRoomForWinControls.ts │ │ │ ├── useProviderImport.ts │ │ │ ├── useProviders.ts │ │ │ ├── useScreenChange.ts │ │ │ ├── useShortcut.tsx │ │ │ ├── useThinkingTimer.ts │ │ │ ├── useVersion.ts │ │ │ └── useWindowMaximized.ts │ │ ├── i18n/ │ │ │ ├── changelogs/ │ │ │ │ ├── changelog_en.ts │ │ │ │ ├── changelog_zh_Hans.ts │ │ │ │ └── changelog_zh_Hant.ts │ │ │ ├── for-key-scan.ts │ │ │ ├── index.ts │ │ │ ├── locales/ │ │ │ │ ├── ar/ │ │ │ │ │ └── translation.json │ │ │ │ ├── de/ │ │ │ │ │ └── translation.json │ │ │ │ ├── en/ │ │ │ │ │ └── translation.json │ │ │ │ ├── es/ │ │ │ │ │ └── translation.json │ │ │ │ ├── fr/ │ │ │ │ │ └── translation.json │ │ │ │ ├── it-IT/ │ │ │ │ │ └── translation.json │ │ │ │ ├── ja/ │ │ │ │ │ └── translation.json │ │ │ │ ├── ko/ │ │ │ │ │ └── translation.json │ │ │ │ ├── nb-NO/ │ │ │ │ │ └── translation.json │ │ │ │ ├── pt-PT/ │ │ │ │ │ └── translation.json │ │ │ │ ├── ru/ │ │ │ │ │ └── translation.json │ │ │ │ ├── sv/ │ │ │ │ │ └── translation.json │ │ │ │ ├── zh-Hans/ │ │ │ │ │ └── translation.json │ │ │ │ └── zh-Hant/ │ │ │ │ └── translation.json │ │ │ ├── locales.ts │ │ │ └── parser.ts │ │ ├── index.ejs │ │ ├── index.html │ │ ├── index.tsx │ │ ├── index.web.ejs │ │ ├── lib/ │ │ │ ├── format-chat.tsx │ │ │ └── utils.ts │ │ ├── modals/ │ │ │ ├── AppStoreRating.tsx │ │ │ ├── ArtifactPreview.tsx │ │ │ ├── AttachLink.tsx │ │ │ ├── ClearSessionList.tsx │ │ │ ├── ContentViewer.tsx │ │ │ ├── EdgeOneDeploySuccess.tsx │ │ │ ├── ExportChat.tsx │ │ │ ├── FileParseError.tsx │ │ │ ├── JsonViewer.tsx │ │ │ ├── MessageEdit.tsx │ │ │ ├── ModelEdit.tsx │ │ │ ├── ReportContent.tsx │ │ │ ├── SessionSettings.tsx │ │ │ ├── Settings.tsx │ │ │ ├── ThreadNameEdit.tsx │ │ │ ├── Welcome.tsx │ │ │ └── index.tsx │ │ ├── native/ │ │ │ └── stream-http.ts │ │ ├── packages/ │ │ │ ├── apple_app_store.ts │ │ │ ├── base64.test.ts │ │ │ ├── base64.ts │ │ │ ├── codeblock_state_recorder.ts │ │ │ ├── context-management/ │ │ │ │ ├── attachment-payload.test.ts │ │ │ │ ├── attachment-payload.ts │ │ │ │ ├── compaction-detector.test.ts │ │ │ │ ├── compaction-detector.ts │ │ │ │ ├── compaction.ts │ │ │ │ ├── context-builder.test.ts │ │ │ │ ├── context-builder.ts │ │ │ │ ├── context-tokens.hook.test.ts │ │ │ │ ├── context-tokens.integration.test.ts │ │ │ │ ├── context-tokens.ts │ │ │ │ ├── context-tokens.unit.test.ts │ │ │ │ ├── index.ts │ │ │ │ ├── summary-generator.ts │ │ │ │ ├── tool-cleanup.test.ts │ │ │ │ └── tool-cleanup.ts │ │ │ ├── edgeone.ts │ │ │ ├── event.ts │ │ │ ├── filetype.ts │ │ │ ├── initial_data.ts │ │ │ ├── keypairs.ts │ │ │ ├── latex.test.ts │ │ │ ├── latex.ts │ │ │ ├── lemonsqueezy.ts │ │ │ ├── local-parser.ts │ │ │ ├── mcp/ │ │ │ │ ├── builtin.ts │ │ │ │ ├── controller.ts │ │ │ │ ├── ipc-stdio-transport.ts │ │ │ │ └── types.ts │ │ │ ├── model-calls/ │ │ │ │ ├── generate-image.ts │ │ │ │ ├── index.ts │ │ │ │ ├── message-utils.ts │ │ │ │ ├── preprocess.ts │ │ │ │ ├── stream-text.ts │ │ │ │ ├── tools.ts │ │ │ │ └── toolsets/ │ │ │ │ ├── file.ts │ │ │ │ ├── knowledge-base.ts │ │ │ │ └── web-search.ts │ │ │ ├── model-context/ │ │ │ │ ├── builtin-data.ts │ │ │ │ └── index.ts │ │ │ ├── model-setting-utils/ │ │ │ │ ├── base-config.ts │ │ │ │ ├── custom-provider-setting-util.ts │ │ │ │ ├── index.ts │ │ │ │ ├── interface.ts │ │ │ │ ├── registry-setting-util.ts │ │ │ │ └── util.ts │ │ │ ├── navigator.ts │ │ │ ├── pic_utils.ts │ │ │ ├── prompts.ts │ │ │ ├── remote.ts │ │ │ ├── token-estimation/ │ │ │ │ ├── __tests__/ │ │ │ │ │ ├── analyzer.test.ts │ │ │ │ │ ├── cache-keys.test.ts │ │ │ │ │ ├── computation-queue.test.ts │ │ │ │ │ ├── result-persister.test.ts │ │ │ │ │ ├── task-executor.test.ts │ │ │ │ │ ├── tokenizer.test.ts │ │ │ │ │ └── useTokenEstimation.test.ts │ │ │ │ ├── analyzer.ts │ │ │ │ ├── cache-keys.ts │ │ │ │ ├── computation-queue.ts │ │ │ │ ├── hooks/ │ │ │ │ │ └── useTokenEstimation.ts │ │ │ │ ├── index.ts │ │ │ │ ├── result-persister.ts │ │ │ │ ├── task-executor.ts │ │ │ │ ├── tokenizer.ts │ │ │ │ └── types.ts │ │ │ ├── token.test.ts │ │ │ ├── token.tsx │ │ │ ├── token_config.ts │ │ │ ├── tools/ │ │ │ │ └── index.ts │ │ │ ├── web-search/ │ │ │ │ ├── base.ts │ │ │ │ ├── bing-news.ts │ │ │ │ ├── bing.ts │ │ │ │ ├── chatbox-search.ts │ │ │ │ ├── duckduckgo.ts │ │ │ │ ├── index.ts │ │ │ │ └── tavily.ts │ │ │ └── word-count.ts │ │ ├── pages/ │ │ │ ├── PictureDialog.tsx │ │ │ ├── RemoteDialogWindow.tsx │ │ │ ├── SearchDialog.tsx │ │ │ └── SettingDialog/ │ │ │ └── AdvancedSettingTab.tsx │ │ ├── platform/ │ │ │ ├── desktop_platform.ts │ │ │ ├── index.ts │ │ │ ├── interfaces.ts │ │ │ ├── knowledge-base/ │ │ │ │ ├── desktop-controller.ts │ │ │ │ └── interface.ts │ │ │ ├── storages.ts │ │ │ ├── test_platform.ts │ │ │ ├── web_exporter.ts │ │ │ ├── web_logger.ts │ │ │ ├── web_platform.ts │ │ │ └── web_platform_utils.ts │ │ ├── preload.d.ts │ │ ├── reportWebVitals.ts │ │ ├── router.tsx │ │ ├── routes/ │ │ │ ├── __root.tsx │ │ │ ├── about.tsx │ │ │ ├── copilots.tsx │ │ │ ├── dev/ │ │ │ │ ├── context-generator.tsx │ │ │ │ ├── css-var.tsx │ │ │ │ ├── index.tsx │ │ │ │ ├── model-selector.tsx │ │ │ │ ├── route.tsx │ │ │ │ └── storage.tsx │ │ │ ├── image-creator/ │ │ │ │ ├── -components/ │ │ │ │ │ ├── EmptyState.tsx │ │ │ │ │ ├── GeneratedImagesGallery.tsx │ │ │ │ │ ├── HistoryItem.tsx │ │ │ │ │ ├── HistoryPanel.tsx │ │ │ │ │ ├── ImageGenerationErrorTips.tsx │ │ │ │ │ ├── MobileDrawers.tsx │ │ │ │ │ ├── PromptDisplay.tsx │ │ │ │ │ ├── ReferenceImagesPreview.tsx │ │ │ │ │ ├── Shimmer.tsx │ │ │ │ │ └── constants.ts │ │ │ │ └── index.tsx │ │ │ ├── index.tsx │ │ │ ├── session/ │ │ │ │ └── $sessionId.tsx │ │ │ └── settings/ │ │ │ ├── chat.tsx │ │ │ ├── chatbox-ai.tsx │ │ │ ├── default-models.tsx │ │ │ ├── document-parser.tsx │ │ │ ├── general.tsx │ │ │ ├── hotkeys.tsx │ │ │ ├── index.tsx │ │ │ ├── knowledge-base.tsx │ │ │ ├── mcp.tsx │ │ │ ├── provider/ │ │ │ │ ├── $providerId.tsx │ │ │ │ ├── chatbox-ai/ │ │ │ │ │ ├── -components/ │ │ │ │ │ │ ├── LicenseDetailCard.tsx │ │ │ │ │ │ ├── LicenseKeyView.tsx │ │ │ │ │ │ ├── LicenseSelectionModal.tsx │ │ │ │ │ │ ├── LoggedInView.tsx │ │ │ │ │ │ ├── LoginView.tsx │ │ │ │ │ │ ├── ModelManagement.tsx │ │ │ │ │ │ ├── constants.ts │ │ │ │ │ │ ├── types.ts │ │ │ │ │ │ ├── useAuthTokens.ts │ │ │ │ │ │ ├── useLicenseActivation.ts │ │ │ │ │ │ ├── useLogin.ts │ │ │ │ │ │ └── useUserLicenses.ts │ │ │ │ │ └── index.tsx │ │ │ │ ├── index.tsx │ │ │ │ └── route.tsx │ │ │ ├── route.tsx │ │ │ └── web-search.tsx │ │ ├── setup/ │ │ │ ├── ga_init.ts │ │ │ ├── global_error_handler.ts │ │ │ ├── init_data.ts │ │ │ ├── load_polyfill.ts │ │ │ ├── mcp_bootstrap.ts │ │ │ ├── mobile_safe_area.ts │ │ │ ├── protect.ts │ │ │ ├── sentry_init.ts │ │ │ ├── storage_clear.ts │ │ │ └── token_estimation_init.ts │ │ ├── setupTests.ts │ │ ├── static/ │ │ │ ├── Block.css │ │ │ ├── _headers │ │ │ ├── globals.css │ │ │ └── index.css │ │ ├── storage/ │ │ │ ├── BaseStorage.ts │ │ │ ├── ImageGenerationStorage.ts │ │ │ ├── SQLiteImageGenerationStorage.ts │ │ │ ├── StoreStorage.ts │ │ │ └── index.ts │ │ ├── stores/ │ │ │ ├── atoms/ │ │ │ │ ├── compactionAtoms.ts │ │ │ │ ├── configAtoms.ts │ │ │ │ ├── index.ts │ │ │ │ ├── sessionAtoms.ts │ │ │ │ ├── settingsAtoms.ts │ │ │ │ ├── throttleWriteSessionAtom.ts │ │ │ │ ├── uiAtoms.ts │ │ │ │ └── utilAtoms.ts │ │ │ ├── authInfoStore.ts │ │ │ ├── chatStore.ts │ │ │ ├── imageGenerationActions.ts │ │ │ ├── imageGenerationStore.ts │ │ │ ├── lastUsedModelStore.ts │ │ │ ├── migration.test.ts │ │ │ ├── migration.ts │ │ │ ├── premiumActions.ts │ │ │ ├── queryClient.ts │ │ │ ├── safeStorage.ts │ │ │ ├── scrollActions.ts │ │ │ ├── session/ │ │ │ │ ├── crud.ts │ │ │ │ ├── export.ts │ │ │ │ ├── forks.ts │ │ │ │ ├── generation.ts │ │ │ │ ├── index.ts │ │ │ │ ├── messages.ts │ │ │ │ ├── naming.ts │ │ │ │ ├── state.ts │ │ │ │ ├── threads.ts │ │ │ │ └── types.ts │ │ │ ├── sessionActions.test.ts │ │ │ ├── sessionActions.ts │ │ │ ├── sessionHelpers.ts │ │ │ ├── settingActions.ts │ │ │ ├── settingsStore.ts │ │ │ ├── toastActions.ts │ │ │ ├── uiStore.ts │ │ │ ├── updateQueue.test.ts │ │ │ └── updateQueue.ts │ │ ├── test.tsx │ │ ├── utils/ │ │ │ ├── base64.ts │ │ │ ├── error-testing.ts │ │ │ ├── feature-flags.ts │ │ │ ├── format.ts │ │ │ ├── image.ts │ │ │ ├── index.ts │ │ │ ├── message.test.ts │ │ │ ├── message.ts │ │ │ ├── mobile-request.ts │ │ │ ├── model-tester.ts │ │ │ ├── modelLogo.tsx │ │ │ ├── provider-config.test.ts │ │ │ ├── provider-config.ts │ │ │ ├── request.ts │ │ │ ├── session-utils.ts │ │ │ └── track.ts │ │ └── variables.ts │ └── shared/ │ ├── constants.ts │ ├── defaults.ts │ ├── electron-types.ts │ ├── file-extensions.ts │ ├── models/ │ │ ├── abstract-ai-sdk.ts │ │ ├── errors.ts │ │ ├── index.test.ts │ │ ├── index.ts │ │ ├── openai-compatible.ts │ │ ├── rerank.ts │ │ ├── types.ts │ │ └── utils/ │ │ └── fetch-proxy.ts │ ├── providers/ │ │ ├── definitions/ │ │ │ ├── azure.ts │ │ │ ├── chatboxai.ts │ │ │ ├── chatglm.ts │ │ │ ├── claude.ts │ │ │ ├── deepseek.ts │ │ │ ├── gemini.ts │ │ │ ├── groq.ts │ │ │ ├── lmstudio.ts │ │ │ ├── mistral-ai.ts │ │ │ ├── models/ │ │ │ │ ├── azure.ts │ │ │ │ ├── chatboxai.ts │ │ │ │ ├── chatglm.ts │ │ │ │ ├── claude.ts │ │ │ │ ├── custom-claude.ts │ │ │ │ ├── custom-gemini.ts │ │ │ │ ├── custom-openai-responses.ts │ │ │ │ ├── custom-openai.ts │ │ │ │ ├── deepseek.ts │ │ │ │ ├── gemini.ts │ │ │ │ ├── groq.ts │ │ │ │ ├── lmstudio.ts │ │ │ │ ├── mistral-ai.ts │ │ │ │ ├── ollama.ts │ │ │ │ ├── openai-responses.ts │ │ │ │ ├── openai.test.ts │ │ │ │ ├── openai.ts │ │ │ │ ├── openrouter.ts │ │ │ │ ├── perplexity.ts │ │ │ │ ├── siliconflow.ts │ │ │ │ ├── volcengine.ts │ │ │ │ └── xai.ts │ │ │ ├── ollama.ts │ │ │ ├── openai-responses.ts │ │ │ ├── openai.ts │ │ │ ├── openrouter.ts │ │ │ ├── perplexity.ts │ │ │ ├── siliconflow.ts │ │ │ ├── volcengine.ts │ │ │ └── xai.ts │ │ ├── index.ts │ │ ├── registry.test.ts │ │ ├── registry.ts │ │ ├── types.ts │ │ └── utils.ts │ ├── request/ │ │ ├── chatboxai_pool.ts │ │ └── request.ts │ ├── types/ │ │ ├── adapters.ts │ │ ├── image-generation.ts │ │ ├── mcp.ts │ │ ├── provider.ts │ │ ├── session.ts │ │ └── settings.ts │ ├── types.test.ts │ ├── types.ts │ └── utils/ │ ├── cache.ts │ ├── index.ts │ ├── json_utils.ts │ ├── knowledge-base-model-parser.ts │ ├── llm_utils.test.ts │ ├── llm_utils.ts │ ├── message.ts │ ├── model_settings.ts │ ├── network_utils.ts │ ├── sentry_adapter.ts │ └── word_count.ts ├── tailwind.config.js ├── tasks/ │ ├── prd-code-organization-optimization.md │ ├── prd-compaction-ux-improvement.md │ ├── prd-context-management.md │ └── prd-provider-system-refactor.md ├── team-sharing/ │ ├── Caddyfile │ ├── Dockerfile │ ├── README-CN.md │ ├── README.md │ └── main.sh ├── test/ │ ├── cases/ │ │ ├── file-conversation/ │ │ │ ├── sample-large.txt │ │ │ ├── sample.json │ │ │ ├── sample.md │ │ │ ├── sample.ts │ │ │ └── sample.txt │ │ └── provider-config-import-manual-test.md │ └── integration/ │ ├── context-management/ │ │ ├── context-management.test.ts │ │ └── setup.ts │ ├── file-conversation/ │ │ ├── file-conversation.test.ts │ │ ├── setup.ts │ │ └── test-harness.ts │ ├── mocks/ │ │ ├── model-dependencies.ts │ │ └── sentry.ts │ └── model-provider/ │ └── model-provider.test.ts ├── tsconfig.json └── vitest.config.ts