From 866b91c8f5dc98dfc18e5c658beaa11afea5032e Mon Sep 17 00:00:00 2001 From: qer Date: Tue, 23 Jun 2026 20:34:46 +0800 Subject: [PATCH] refactor(web): group components into area subdirectories (#1036) Move the 40 feature-specific components out of the flat components/ into chat/, settings/, dialogs/, and mobile/ subdirectories, leaving 9 shared layout components at the top level. Recompute every relative import (no path alias in the web app), refresh the line-1 path comments, and update the layout description in AGENTS.md. No behavior change; typecheck / test / build / lint all pass. --- .changeset/web-components-subdirs.md | 5 +++ apps/kimi-web/AGENTS.md | 2 +- apps/kimi-web/src/App.vue | 34 +++++++++---------- apps/kimi-web/src/components/FilePreview.vue | 2 +- .../components/{ => chat}/ActivityNotice.vue | 2 +- .../src/components/{ => chat}/AgentCard.vue | 2 +- .../{ => chat}/AgentDetailPanel.vue | 4 +-- .../src/components/{ => chat}/AgentGroup.vue | 2 +- .../components/{ => chat}/ApprovalCard.vue | 6 ++-- .../src/components/{ => chat}/ChatDock.vue | 4 +-- .../src/components/{ => chat}/ChatHeader.vue | 2 +- .../src/components/{ => chat}/ChatPane.vue | 10 +++--- .../src/components/{ => chat}/Composer.vue | 20 +++++------ .../{ => chat}/ConversationPane.vue | 12 +++---- .../components/{ => chat}/ConversationToc.vue | 4 +-- .../src/components/{ => chat}/DiffView.vue | 4 +-- .../src/components/{ => chat}/GoalStrip.vue | 2 +- .../src/components/{ => chat}/Markdown.vue | 10 +++--- .../src/components/{ => chat}/MentionMenu.vue | 4 +-- .../src/components/{ => chat}/OpenInMenu.vue | 4 +-- .../components/{ => chat}/QuestionCard.vue | 6 ++-- .../src/components/{ => chat}/QueuePane.vue | 4 +-- .../components/{ => chat}/SideChatPanel.vue | 6 ++-- .../src/components/{ => chat}/SlashMenu.vue | 4 +-- .../src/components/{ => chat}/StatusPanel.vue | 6 ++-- .../src/components/{ => chat}/SwarmCard.vue | 4 +-- .../src/components/{ => chat}/TasksPane.vue | 4 +-- .../components/{ => chat}/ThinkingBlock.vue | 2 +- .../components/{ => chat}/ThinkingPanel.vue | 2 +- .../src/components/{ => chat}/TodoCard.vue | 4 +-- .../src/components/{ => chat}/ToolCall.vue | 6 ++-- .../{ => dialogs}/AddWorkspaceDialog.vue | 4 +-- .../components/{ => dialogs}/BottomSheet.vue | 2 +- .../components/{ => dialogs}/LoginDialog.vue | 4 +-- .../{ => dialogs}/NewSessionDialog.vue | 2 +- .../{ => dialogs}/SessionsDialog.vue | 4 +-- .../{ => mobile}/MobileSettingsSheet.vue | 12 +++---- .../{ => mobile}/MobileSwitcherSheet.vue | 6 ++-- .../components/{ => mobile}/MobileTopBar.vue | 4 +-- .../{ => settings}/LanguageSwitcher.vue | 4 +-- .../components/{ => settings}/ModelPicker.vue | 6 ++-- .../components/{ => settings}/Onboarding.vue | 6 ++-- .../{ => settings}/ProviderManager.vue | 6 ++-- .../{ => settings}/SettingsDialog.vue | 12 +++---- 44 files changed, 130 insertions(+), 125 deletions(-) create mode 100644 .changeset/web-components-subdirs.md rename apps/kimi-web/src/components/{ => chat}/ActivityNotice.vue (96%) rename apps/kimi-web/src/components/{ => chat}/AgentCard.vue (98%) rename apps/kimi-web/src/components/{ => chat}/AgentDetailPanel.vue (98%) rename apps/kimi-web/src/components/{ => chat}/AgentGroup.vue (98%) rename apps/kimi-web/src/components/{ => chat}/ApprovalCard.vue (98%) rename apps/kimi-web/src/components/{ => chat}/ChatDock.vue (99%) rename apps/kimi-web/src/components/{ => chat}/ChatHeader.vue (99%) rename apps/kimi-web/src/components/{ => chat}/ChatPane.vue (99%) rename apps/kimi-web/src/components/{ => chat}/Composer.vue (98%) rename apps/kimi-web/src/components/{ => chat}/ConversationPane.vue (99%) rename apps/kimi-web/src/components/{ => chat}/ConversationToc.vue (98%) rename apps/kimi-web/src/components/{ => chat}/DiffView.vue (99%) rename apps/kimi-web/src/components/{ => chat}/GoalStrip.vue (99%) rename apps/kimi-web/src/components/{ => chat}/Markdown.vue (98%) rename apps/kimi-web/src/components/{ => chat}/MentionMenu.vue (98%) rename apps/kimi-web/src/components/{ => chat}/OpenInMenu.vue (98%) rename apps/kimi-web/src/components/{ => chat}/QuestionCard.vue (98%) rename apps/kimi-web/src/components/{ => chat}/QueuePane.vue (97%) rename apps/kimi-web/src/components/{ => chat}/SideChatPanel.vue (97%) rename apps/kimi-web/src/components/{ => chat}/SlashMenu.vue (94%) rename apps/kimi-web/src/components/{ => chat}/StatusPanel.vue (97%) rename apps/kimi-web/src/components/{ => chat}/SwarmCard.vue (96%) rename apps/kimi-web/src/components/{ => chat}/TasksPane.vue (98%) rename apps/kimi-web/src/components/{ => chat}/ThinkingBlock.vue (98%) rename apps/kimi-web/src/components/{ => chat}/ThinkingPanel.vue (98%) rename apps/kimi-web/src/components/{ => chat}/TodoCard.vue (98%) rename apps/kimi-web/src/components/{ => chat}/ToolCall.vue (98%) rename apps/kimi-web/src/components/{ => dialogs}/AddWorkspaceDialog.vue (99%) rename apps/kimi-web/src/components/{ => dialogs}/BottomSheet.vue (98%) rename apps/kimi-web/src/components/{ => dialogs}/LoginDialog.vue (99%) rename apps/kimi-web/src/components/{ => dialogs}/NewSessionDialog.vue (99%) rename apps/kimi-web/src/components/{ => dialogs}/SessionsDialog.vue (98%) rename apps/kimi-web/src/components/{ => mobile}/MobileSettingsSheet.vue (97%) rename apps/kimi-web/src/components/{ => mobile}/MobileSwitcherSheet.vue (99%) rename apps/kimi-web/src/components/{ => mobile}/MobileTopBar.vue (97%) rename apps/kimi-web/src/components/{ => settings}/LanguageSwitcher.vue (93%) rename apps/kimi-web/src/components/{ => settings}/ModelPicker.vue (98%) rename apps/kimi-web/src/components/{ => settings}/Onboarding.vue (98%) rename apps/kimi-web/src/components/{ => settings}/ProviderManager.vue (98%) rename apps/kimi-web/src/components/{ => settings}/SettingsDialog.vue (98%) diff --git a/.changeset/web-components-subdirs.md b/.changeset/web-components-subdirs.md new file mode 100644 index 000000000..208897e1d --- /dev/null +++ b/.changeset/web-components-subdirs.md @@ -0,0 +1,5 @@ +--- +"@moonshot-ai/kimi-code": patch +--- + +Reorganize the web app's components into area subdirectories (chat/settings/dialogs/mobile) and refresh the component path comments. diff --git a/apps/kimi-web/AGENTS.md b/apps/kimi-web/AGENTS.md index 8a6411ec4..bd7940fef 100644 --- a/apps/kimi-web/AGENTS.md +++ b/apps/kimi-web/AGENTS.md @@ -10,7 +10,7 @@ The browser web UI for Kimi Code — a peer to the TUI in `apps/kimi-code`. It t - `main.ts` — bootstrap (creates the app, installs i18n, mounts `#app`). `App.vue` — root component, holds most app state. - `api/` — server client. `index.ts` exposes the `getKimiWebApi()` singleton; `config.ts` builds REST/WS URLs; `daemon/` holds the wire client (`http.ts`, `ws.ts`, `wire.ts`, `mappers.ts`, `agentEventProjector.ts`, `eventReducer.ts`). -- `components/` — ~50 flat SFCs, no subdirectories. +- `components/` — SFCs grouped by area: `chat/` (conversation/chat UI), `settings/` (settings & configuration), `dialogs/` (modal dialogs & sheets), `mobile/` (mobile-specific shell), plus shared layout components at the top level. - `composables/` — reusable state logic, `useX` naming (`useKimiWebClient`, `useIsDark`, `usePaneLayout`, …). - `lib/` — pure helpers (`parseDiff`, `slashCommands`, `sessionRoute`, `toolMeta`, …). - `i18n/` — vue-i18n setup plus locale namespaces. diff --git a/apps/kimi-web/src/App.vue b/apps/kimi-web/src/App.vue index 64474fc7d..0fa5d7b0c 100644 --- a/apps/kimi-web/src/App.vue +++ b/apps/kimi-web/src/App.vue @@ -4,25 +4,25 @@ import { computed, nextTick, onMounted, onUnmounted, provide, ref } from 'vue'; import { useI18n } from 'vue-i18n'; import Sidebar from './components/Sidebar.vue'; import ResizeHandle from './components/ResizeHandle.vue'; -import ConversationPane from './components/ConversationPane.vue'; +import ConversationPane from './components/chat/ConversationPane.vue'; import FilePreview from './components/FilePreview.vue'; -import ThinkingPanel from './components/ThinkingPanel.vue'; -import AgentDetailPanel from './components/AgentDetailPanel.vue'; -import SideChatPanel from './components/SideChatPanel.vue'; -import DiffView from './components/DiffView.vue'; -import ModelPicker from './components/ModelPicker.vue'; -import ProviderManager from './components/ProviderManager.vue'; -import LoginDialog from './components/LoginDialog.vue'; -import NewSessionDialog from './components/NewSessionDialog.vue'; -import SettingsDialog from './components/SettingsDialog.vue'; -import SessionsDialog from './components/SessionsDialog.vue'; -import AddWorkspaceDialog from './components/AddWorkspaceDialog.vue'; -import StatusPanel from './components/StatusPanel.vue'; +import ThinkingPanel from './components/chat/ThinkingPanel.vue'; +import AgentDetailPanel from './components/chat/AgentDetailPanel.vue'; +import SideChatPanel from './components/chat/SideChatPanel.vue'; +import DiffView from './components/chat/DiffView.vue'; +import ModelPicker from './components/settings/ModelPicker.vue'; +import ProviderManager from './components/settings/ProviderManager.vue'; +import LoginDialog from './components/dialogs/LoginDialog.vue'; +import NewSessionDialog from './components/dialogs/NewSessionDialog.vue'; +import SettingsDialog from './components/settings/SettingsDialog.vue'; +import SessionsDialog from './components/dialogs/SessionsDialog.vue'; +import AddWorkspaceDialog from './components/dialogs/AddWorkspaceDialog.vue'; +import StatusPanel from './components/chat/StatusPanel.vue'; import WarningToasts from './components/WarningToasts.vue'; -import MobileTopBar from './components/MobileTopBar.vue'; -import MobileSwitcherSheet from './components/MobileSwitcherSheet.vue'; -import MobileSettingsSheet from './components/MobileSettingsSheet.vue'; -import Onboarding from './components/Onboarding.vue'; +import MobileTopBar from './components/mobile/MobileTopBar.vue'; +import MobileSwitcherSheet from './components/mobile/MobileSwitcherSheet.vue'; +import MobileSettingsSheet from './components/mobile/MobileSettingsSheet.vue'; +import Onboarding from './components/settings/Onboarding.vue'; import GlobalLoading from './components/GlobalLoading.vue'; import DebugPanel from './debug/DebugPanel.vue'; import { isTraceEnabled } from './debug/trace'; diff --git a/apps/kimi-web/src/components/FilePreview.vue b/apps/kimi-web/src/components/FilePreview.vue index 6474dd9b5..948e50216 100644 --- a/apps/kimi-web/src/components/FilePreview.vue +++ b/apps/kimi-web/src/components/FilePreview.vue @@ -3,7 +3,7 @@