gitextract_zr639i5w/ ├── .github/ │ ├── ISSUE_TEMPLATE/ │ │ ├── bug_report.md │ │ └── feature_request.md │ └── workflows/ │ └── discord-release.yml ├── .gitignore ├── .gitmodules ├── .husky/ │ ├── commit-msg │ └── pre-commit ├── .npmignore ├── .nvmrc ├── .release-it.json ├── CHANGELOG.md ├── CONTRIBUTING.md ├── LICENSE ├── README.de.md ├── README.ja.md ├── README.ko.md ├── README.md ├── README.ru.md ├── README.zh-CN.md ├── commitlint.config.js ├── eslint.config.js ├── index.html ├── package.json ├── postcss.config.js ├── public/ │ ├── api-docs.html │ ├── clear-cache.html │ ├── convert-icons.md │ ├── generate-icons.js │ ├── manifest.json │ └── sw.js ├── release.sh ├── scripts/ │ └── fix-node-pty.js ├── server/ │ ├── claude-sdk.js │ ├── cli.js │ ├── constants/ │ │ └── config.js │ ├── cursor-cli.js │ ├── database/ │ │ ├── db.js │ │ └── init.sql │ ├── gemini-cli.js │ ├── gemini-response-handler.js │ ├── index.js │ ├── load-env.js │ ├── middleware/ │ │ └── auth.js │ ├── openai-codex.js │ ├── projects.js │ ├── providers/ │ │ ├── claude/ │ │ │ └── adapter.js │ │ ├── codex/ │ │ │ └── adapter.js │ │ ├── cursor/ │ │ │ └── adapter.js │ │ ├── gemini/ │ │ │ └── adapter.js │ │ ├── registry.js │ │ ├── types.js │ │ └── utils.js │ ├── routes/ │ │ ├── agent.js │ │ ├── auth.js │ │ ├── cli-auth.js │ │ ├── codex.js │ │ ├── commands.js │ │ ├── cursor.js │ │ ├── gemini.js │ │ ├── git.js │ │ ├── mcp-utils.js │ │ ├── mcp.js │ │ ├── messages.js │ │ ├── plugins.js │ │ ├── projects.js │ │ ├── settings.js │ │ ├── taskmaster.js │ │ └── user.js │ ├── services/ │ │ ├── notification-orchestrator.js │ │ └── vapid-keys.js │ ├── sessionManager.js │ └── utils/ │ ├── commandParser.js │ ├── frontmatter.js │ ├── gitConfig.js │ ├── mcp-detector.js │ ├── plugin-loader.js │ ├── plugin-process-manager.js │ └── taskmaster-websocket.js ├── shared/ │ ├── modelConstants.js │ └── networkHosts.js ├── src/ │ ├── App.tsx │ ├── components/ │ │ ├── app/ │ │ │ ├── AppContent.tsx │ │ │ └── MobileNav.tsx │ │ ├── auth/ │ │ │ ├── constants.ts │ │ │ ├── context/ │ │ │ │ └── AuthContext.tsx │ │ │ ├── index.ts │ │ │ ├── types.ts │ │ │ ├── utils.ts │ │ │ └── view/ │ │ │ ├── AuthErrorAlert.tsx │ │ │ ├── AuthInputField.tsx │ │ │ ├── AuthLoadingScreen.tsx │ │ │ ├── AuthScreenLayout.tsx │ │ │ ├── LoginForm.tsx │ │ │ ├── ProtectedRoute.tsx │ │ │ └── SetupForm.tsx │ │ ├── chat/ │ │ │ ├── constants/ │ │ │ │ └── thinkingModes.ts │ │ │ ├── hooks/ │ │ │ │ ├── useChatComposerState.ts │ │ │ │ ├── useChatMessages.ts │ │ │ │ ├── useChatProviderState.ts │ │ │ │ ├── useChatRealtimeHandlers.ts │ │ │ │ ├── useChatSessionState.ts │ │ │ │ ├── useFileMentions.tsx │ │ │ │ └── useSlashCommands.ts │ │ │ ├── tools/ │ │ │ │ ├── README.md │ │ │ │ ├── ToolRenderer.tsx │ │ │ │ ├── components/ │ │ │ │ │ ├── CollapsibleDisplay.tsx │ │ │ │ │ ├── CollapsibleSection.tsx │ │ │ │ │ ├── ContentRenderers/ │ │ │ │ │ │ ├── FileListContent.tsx │ │ │ │ │ │ ├── MarkdownContent.tsx │ │ │ │ │ │ ├── QuestionAnswerContent.tsx │ │ │ │ │ │ ├── TaskListContent.tsx │ │ │ │ │ │ ├── TextContent.tsx │ │ │ │ │ │ ├── TodoList.tsx │ │ │ │ │ │ ├── TodoListContent.tsx │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── InteractiveRenderers/ │ │ │ │ │ │ ├── AskUserQuestionPanel.tsx │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── OneLineDisplay.tsx │ │ │ │ │ ├── SubagentContainer.tsx │ │ │ │ │ ├── ToolDiffViewer.tsx │ │ │ │ │ └── index.ts │ │ │ │ ├── configs/ │ │ │ │ │ ├── permissionPanelRegistry.ts │ │ │ │ │ └── toolConfigs.ts │ │ │ │ └── index.ts │ │ │ ├── types/ │ │ │ │ └── types.ts │ │ │ ├── utils/ │ │ │ │ ├── chatFormatting.ts │ │ │ │ ├── chatPermissions.ts │ │ │ │ ├── chatStorage.ts │ │ │ │ ├── messageKeys.ts │ │ │ │ └── messageTransforms.ts │ │ │ └── view/ │ │ │ ├── ChatInterface.tsx │ │ │ └── subcomponents/ │ │ │ ├── AssistantThinkingIndicator.tsx │ │ │ ├── ChatComposer.tsx │ │ │ ├── ChatInputControls.tsx │ │ │ ├── ChatMessagesPane.tsx │ │ │ ├── ClaudeStatus.tsx │ │ │ ├── CommandMenu.tsx │ │ │ ├── ImageAttachment.tsx │ │ │ ├── Markdown.tsx │ │ │ ├── MessageComponent.tsx │ │ │ ├── MessageCopyControl.tsx │ │ │ ├── PermissionRequestsBanner.tsx │ │ │ ├── ProviderSelectionEmptyState.tsx │ │ │ ├── ThinkingModeSelector.tsx │ │ │ └── TokenUsagePie.tsx │ │ ├── code-editor/ │ │ │ ├── constants/ │ │ │ │ └── settings.ts │ │ │ ├── hooks/ │ │ │ │ ├── useCodeEditorDocument.ts │ │ │ │ ├── useCodeEditorSettings.ts │ │ │ │ ├── useEditorKeyboardShortcuts.ts │ │ │ │ └── useEditorSidebar.ts │ │ │ ├── types/ │ │ │ │ └── types.ts │ │ │ ├── utils/ │ │ │ │ ├── binaryFile.ts │ │ │ │ ├── editorExtensions.ts │ │ │ │ ├── editorStyles.ts │ │ │ │ └── editorToolbarPanel.ts │ │ │ └── view/ │ │ │ ├── CodeEditor.tsx │ │ │ ├── EditorSidebar.tsx │ │ │ └── subcomponents/ │ │ │ ├── CodeEditorBinaryFile.tsx │ │ │ ├── CodeEditorFooter.tsx │ │ │ ├── CodeEditorHeader.tsx │ │ │ ├── CodeEditorLoadingState.tsx │ │ │ ├── CodeEditorSurface.tsx │ │ │ └── markdown/ │ │ │ ├── MarkdownCodeBlock.tsx │ │ │ └── MarkdownPreview.tsx │ │ ├── file-tree/ │ │ │ ├── constants/ │ │ │ │ ├── constants.ts │ │ │ │ └── fileIcons.ts │ │ │ ├── hooks/ │ │ │ │ ├── useExpandedDirectories.ts │ │ │ │ ├── useFileTreeData.ts │ │ │ │ ├── useFileTreeOperations.ts │ │ │ │ ├── useFileTreeSearch.ts │ │ │ │ ├── useFileTreeUpload.ts │ │ │ │ └── useFileTreeViewMode.ts │ │ │ ├── types/ │ │ │ │ └── types.ts │ │ │ ├── utils/ │ │ │ │ └── fileTreeUtils.ts │ │ │ └── view/ │ │ │ ├── FileContextMenu.tsx │ │ │ ├── FileTree.tsx │ │ │ ├── FileTreeBody.tsx │ │ │ ├── FileTreeDetailedColumns.tsx │ │ │ ├── FileTreeEmptyState.tsx │ │ │ ├── FileTreeHeader.tsx │ │ │ ├── FileTreeList.tsx │ │ │ ├── FileTreeLoadingState.tsx │ │ │ ├── FileTreeNode.tsx │ │ │ └── ImageViewer.tsx │ │ ├── git-panel/ │ │ │ ├── constants/ │ │ │ │ └── constants.ts │ │ │ ├── hooks/ │ │ │ │ ├── useGitPanelController.ts │ │ │ │ ├── useRevertLocalCommit.ts │ │ │ │ └── useSelectedProvider.ts │ │ │ ├── types/ │ │ │ │ └── types.ts │ │ │ ├── utils/ │ │ │ │ └── gitPanelUtils.ts │ │ │ └── view/ │ │ │ ├── GitPanel.tsx │ │ │ ├── GitPanelHeader.tsx │ │ │ ├── GitRepositoryErrorState.tsx │ │ │ ├── GitViewTabs.tsx │ │ │ ├── branches/ │ │ │ │ └── BranchesView.tsx │ │ │ ├── changes/ │ │ │ │ ├── ChangesView.tsx │ │ │ │ ├── CommitComposer.tsx │ │ │ │ ├── FileChangeItem.tsx │ │ │ │ ├── FileChangeList.tsx │ │ │ │ ├── FileSelectionControls.tsx │ │ │ │ └── FileStatusLegend.tsx │ │ │ ├── history/ │ │ │ │ ├── CommitHistoryItem.tsx │ │ │ │ └── HistoryView.tsx │ │ │ ├── modals/ │ │ │ │ ├── ConfirmActionModal.tsx │ │ │ │ └── NewBranchModal.tsx │ │ │ └── shared/ │ │ │ └── GitDiffViewer.tsx │ │ ├── llm-logo-provider/ │ │ │ ├── ClaudeLogo.tsx │ │ │ ├── CodexLogo.tsx │ │ │ ├── CursorLogo.tsx │ │ │ ├── GeminiLogo.tsx │ │ │ └── SessionProviderLogo.tsx │ │ ├── main-content/ │ │ │ ├── hooks/ │ │ │ │ └── useMobileMenuHandlers.ts │ │ │ ├── types/ │ │ │ │ └── types.ts │ │ │ └── view/ │ │ │ ├── ErrorBoundary.tsx │ │ │ ├── MainContent.tsx │ │ │ └── subcomponents/ │ │ │ ├── MainContentHeader.tsx │ │ │ ├── MainContentStateView.tsx │ │ │ ├── MainContentTabSwitcher.tsx │ │ │ ├── MainContentTitle.tsx │ │ │ └── MobileMenuButton.tsx │ │ ├── mic-button/ │ │ │ ├── constants/ │ │ │ │ └── constants.ts │ │ │ ├── data/ │ │ │ │ └── whisper.ts │ │ │ ├── hooks/ │ │ │ │ └── useMicButtonController.ts │ │ │ ├── types/ │ │ │ │ └── types.ts │ │ │ └── view/ │ │ │ ├── MicButton.tsx │ │ │ └── MicButtonView.tsx │ │ ├── onboarding/ │ │ │ └── view/ │ │ │ ├── Onboarding.tsx │ │ │ ├── subcomponents/ │ │ │ │ ├── AgentConnectionCard.tsx │ │ │ │ ├── AgentConnectionsStep.tsx │ │ │ │ ├── GitConfigurationStep.tsx │ │ │ │ └── OnboardingStepProgress.tsx │ │ │ ├── types.ts │ │ │ └── utils.ts │ │ ├── plugins/ │ │ │ └── view/ │ │ │ ├── PluginIcon.tsx │ │ │ ├── PluginSettingsTab.tsx │ │ │ └── PluginTabContent.tsx │ │ ├── prd-editor/ │ │ │ ├── PRDEditor.tsx │ │ │ ├── constants.ts │ │ │ ├── hooks/ │ │ │ │ ├── usePrdDocument.ts │ │ │ │ ├── usePrdKeyboardShortcuts.ts │ │ │ │ ├── usePrdRegistry.ts │ │ │ │ └── usePrdSave.ts │ │ │ ├── index.ts │ │ │ ├── types.ts │ │ │ ├── utils/ │ │ │ │ └── fileName.ts │ │ │ └── view/ │ │ │ ├── GenerateTasksModal.tsx │ │ │ ├── OverwriteConfirmModal.tsx │ │ │ ├── PrdEditorBody.tsx │ │ │ ├── PrdEditorFooter.tsx │ │ │ ├── PrdEditorHeader.tsx │ │ │ ├── PrdEditorLoadingState.tsx │ │ │ └── PrdEditorWorkspace.tsx │ │ ├── project-creation-wizard/ │ │ │ ├── ProjectCreationWizard.tsx │ │ │ ├── components/ │ │ │ │ ├── ErrorBanner.tsx │ │ │ │ ├── FolderBrowserModal.tsx │ │ │ │ ├── GithubAuthenticationCard.tsx │ │ │ │ ├── StepConfiguration.tsx │ │ │ │ ├── StepReview.tsx │ │ │ │ ├── StepTypeSelection.tsx │ │ │ │ ├── WizardFooter.tsx │ │ │ │ ├── WizardProgress.tsx │ │ │ │ └── WorkspacePathField.tsx │ │ │ ├── data/ │ │ │ │ └── workspaceApi.ts │ │ │ ├── hooks/ │ │ │ │ └── useGithubTokens.ts │ │ │ ├── index.ts │ │ │ ├── types.ts │ │ │ └── utils/ │ │ │ └── pathUtils.ts │ │ ├── provider-auth/ │ │ │ ├── types.ts │ │ │ └── view/ │ │ │ └── ProviderLoginModal.tsx │ │ ├── quick-settings-panel/ │ │ │ ├── constants.ts │ │ │ ├── hooks/ │ │ │ │ ├── useQuickSettingsDrag.ts │ │ │ │ └── useWhisperMode.ts │ │ │ ├── index.ts │ │ │ ├── types.ts │ │ │ └── view/ │ │ │ ├── QuickSettingsContent.tsx │ │ │ ├── QuickSettingsHandle.tsx │ │ │ ├── QuickSettingsPanelHeader.tsx │ │ │ ├── QuickSettingsPanelView.tsx │ │ │ ├── QuickSettingsSection.tsx │ │ │ ├── QuickSettingsToggleRow.tsx │ │ │ └── QuickSettingsWhisperSection.tsx │ │ ├── settings/ │ │ │ ├── constants/ │ │ │ │ └── constants.ts │ │ │ ├── hooks/ │ │ │ │ ├── useCredentialsSettings.ts │ │ │ │ ├── useGitSettings.ts │ │ │ │ └── useSettingsController.ts │ │ │ ├── types/ │ │ │ │ └── types.ts │ │ │ └── view/ │ │ │ ├── Settings.tsx │ │ │ ├── SettingsCard.tsx │ │ │ ├── SettingsMainTabs.tsx │ │ │ ├── SettingsRow.tsx │ │ │ ├── SettingsSection.tsx │ │ │ ├── SettingsSidebar.tsx │ │ │ ├── SettingsToggle.tsx │ │ │ ├── modals/ │ │ │ │ ├── ClaudeMcpFormModal.tsx │ │ │ │ └── CodexMcpFormModal.tsx │ │ │ └── tabs/ │ │ │ ├── AppearanceSettingsTab.tsx │ │ │ ├── NotificationsSettingsTab.tsx │ │ │ ├── agents-settings/ │ │ │ │ ├── AgentListItem.tsx │ │ │ │ ├── AgentsSettingsTab.tsx │ │ │ │ ├── sections/ │ │ │ │ │ ├── AgentCategoryContentSection.tsx │ │ │ │ │ ├── AgentCategoryTabsSection.tsx │ │ │ │ │ ├── AgentSelectorSection.tsx │ │ │ │ │ └── content/ │ │ │ │ │ ├── AccountContent.tsx │ │ │ │ │ ├── McpServersContent.tsx │ │ │ │ │ └── PermissionsContent.tsx │ │ │ │ └── types.ts │ │ │ ├── api-settings/ │ │ │ │ ├── CredentialsSettingsTab.tsx │ │ │ │ ├── sections/ │ │ │ │ │ ├── ApiKeysSection.tsx │ │ │ │ │ ├── GithubCredentialsSection.tsx │ │ │ │ │ ├── NewApiKeyAlert.tsx │ │ │ │ │ └── VersionInfoSection.tsx │ │ │ │ └── types.ts │ │ │ ├── git-settings/ │ │ │ │ └── GitSettingsTab.tsx │ │ │ └── tasks-settings/ │ │ │ └── TasksSettingsTab.tsx │ │ ├── shell/ │ │ │ ├── constants/ │ │ │ │ └── constants.ts │ │ │ ├── hooks/ │ │ │ │ ├── useShellConnection.ts │ │ │ │ ├── useShellRuntime.ts │ │ │ │ └── useShellTerminal.ts │ │ │ ├── types/ │ │ │ │ └── types.ts │ │ │ ├── utils/ │ │ │ │ ├── auth.ts │ │ │ │ ├── socket.ts │ │ │ │ └── terminalStyles.ts │ │ │ └── view/ │ │ │ ├── Shell.tsx │ │ │ └── subcomponents/ │ │ │ ├── ShellConnectionOverlay.tsx │ │ │ ├── ShellEmptyState.tsx │ │ │ ├── ShellHeader.tsx │ │ │ ├── ShellMinimalView.tsx │ │ │ └── TerminalShortcutsPanel.tsx │ │ ├── sidebar/ │ │ │ ├── hooks/ │ │ │ │ └── useSidebarController.ts │ │ │ ├── types/ │ │ │ │ └── types.ts │ │ │ ├── utils/ │ │ │ │ └── utils.ts │ │ │ └── view/ │ │ │ ├── Sidebar.tsx │ │ │ └── subcomponents/ │ │ │ ├── SidebarCollapsed.tsx │ │ │ ├── SidebarContent.tsx │ │ │ ├── SidebarFooter.tsx │ │ │ ├── SidebarHeader.tsx │ │ │ ├── SidebarModals.tsx │ │ │ ├── SidebarProjectItem.tsx │ │ │ ├── SidebarProjectList.tsx │ │ │ ├── SidebarProjectSessions.tsx │ │ │ ├── SidebarProjectsState.tsx │ │ │ ├── SidebarSessionItem.tsx │ │ │ └── TaskIndicator.tsx │ │ ├── standalone-shell/ │ │ │ └── view/ │ │ │ ├── StandaloneShell.tsx │ │ │ └── subcomponents/ │ │ │ ├── StandaloneShellEmptyState.tsx │ │ │ └── StandaloneShellHeader.tsx │ │ ├── task-master/ │ │ │ ├── context/ │ │ │ │ └── TaskMasterContext.tsx │ │ │ ├── hooks/ │ │ │ │ ├── useProjectPrdFiles.ts │ │ │ │ └── useTaskBoardState.ts │ │ │ ├── index.ts │ │ │ ├── types.ts │ │ │ ├── utils/ │ │ │ │ ├── taskKanban.ts │ │ │ │ └── taskSorting.ts │ │ │ └── view/ │ │ │ ├── NextTaskBanner.tsx │ │ │ ├── TaskBoard.tsx │ │ │ ├── TaskBoardContent.tsx │ │ │ ├── TaskBoardToolbar.tsx │ │ │ ├── TaskCard.tsx │ │ │ ├── TaskDetailModal.tsx │ │ │ ├── TaskEmptyState.tsx │ │ │ ├── TaskMasterPanel.tsx │ │ │ ├── modals/ │ │ │ │ ├── CreateTaskModal.tsx │ │ │ │ ├── TaskHelpModal.tsx │ │ │ │ └── TaskMasterSetupModal.tsx │ │ │ └── shared/ │ │ │ ├── TaskFiltersPanel.tsx │ │ │ └── TaskQuickSortBar.tsx │ │ └── version-upgrade/ │ │ └── view/ │ │ ├── VersionUpgradeModal.tsx │ │ └── index.ts │ ├── constants/ │ │ └── config.ts │ ├── contexts/ │ │ ├── AuthContext.jsx │ │ ├── PluginsContext.tsx │ │ ├── TaskMasterContext.ts │ │ ├── TasksSettingsContext.jsx │ │ ├── ThemeContext.jsx │ │ └── WebSocketContext.tsx │ ├── hooks/ │ │ ├── useDeviceSettings.ts │ │ ├── useLocalStorage.jsx │ │ ├── useProjectsState.ts │ │ ├── useSessionProtection.ts │ │ ├── useUiPreferences.ts │ │ ├── useVersionCheck.ts │ │ └── useWebPush.ts │ ├── i18n/ │ │ ├── config.js │ │ ├── languages.js │ │ └── locales/ │ │ ├── de/ │ │ │ ├── auth.json │ │ │ ├── chat.json │ │ │ ├── codeEditor.json │ │ │ ├── common.json │ │ │ ├── settings.json │ │ │ ├── sidebar.json │ │ │ └── tasks.json │ │ ├── en/ │ │ │ ├── auth.json │ │ │ ├── chat.json │ │ │ ├── codeEditor.json │ │ │ ├── common.json │ │ │ ├── settings.json │ │ │ ├── sidebar.json │ │ │ └── tasks.json │ │ ├── ja/ │ │ │ ├── auth.json │ │ │ ├── chat.json │ │ │ ├── codeEditor.json │ │ │ ├── common.json │ │ │ ├── settings.json │ │ │ ├── sidebar.json │ │ │ └── tasks.json │ │ ├── ko/ │ │ │ ├── auth.json │ │ │ ├── chat.json │ │ │ ├── codeEditor.json │ │ │ ├── common.json │ │ │ ├── settings.json │ │ │ └── sidebar.json │ │ ├── ru/ │ │ │ ├── auth.json │ │ │ ├── chat.json │ │ │ ├── codeEditor.json │ │ │ ├── common.json │ │ │ ├── settings.json │ │ │ ├── sidebar.json │ │ │ └── tasks.json │ │ └── zh-CN/ │ │ ├── auth.json │ │ ├── chat.json │ │ ├── codeEditor.json │ │ ├── common.json │ │ ├── settings.json │ │ └── sidebar.json │ ├── index.css │ ├── lib/ │ │ └── utils.js │ ├── main.jsx │ ├── shared/ │ │ └── view/ │ │ └── ui/ │ │ ├── Badge.tsx │ │ ├── Button.tsx │ │ ├── DarkModeToggle.tsx │ │ ├── Input.tsx │ │ ├── LanguageSelector.tsx │ │ ├── PillBar.tsx │ │ ├── ScrollArea.tsx │ │ ├── Tooltip.tsx │ │ └── index.ts │ ├── stores/ │ │ └── useSessionStore.ts │ ├── types/ │ │ ├── app.ts │ │ ├── global.d.ts │ │ ├── react-syntax-highlighter.d.ts │ │ └── sharedTypes.ts │ ├── utils/ │ │ ├── api.js │ │ ├── clipboard.ts │ │ └── dateUtils.ts │ └── vite-env.d.ts ├── tailwind.config.js ├── tsconfig.json └── vite.config.js