diff --git a/src/renderer/src/routes/apps/$appId.tsx b/src/renderer/src/routes/apps/$appId.tsx
new file mode 100644
index 0000000000..6bb3922645
--- /dev/null
+++ b/src/renderer/src/routes/apps/$appId.tsx
@@ -0,0 +1,6 @@
+import MinAppPage from '@renderer/pages/minapps/MinAppPage'
+import { createFileRoute } from '@tanstack/react-router'
+
+export const Route = createFileRoute('/apps/$appId')({
+ component: MinAppPage
+})
diff --git a/src/renderer/src/routes/apps/index.tsx b/src/renderer/src/routes/apps/index.tsx
new file mode 100644
index 0000000000..0f9b26b7db
--- /dev/null
+++ b/src/renderer/src/routes/apps/index.tsx
@@ -0,0 +1,6 @@
+import MinAppsPage from '@renderer/pages/minapps/MinAppsPage'
+import { createFileRoute } from '@tanstack/react-router'
+
+export const Route = createFileRoute('/apps/')({
+ component: MinAppsPage
+})
diff --git a/src/renderer/src/routes/chat.tsx b/src/renderer/src/routes/chat.tsx
new file mode 100644
index 0000000000..575800f7a9
--- /dev/null
+++ b/src/renderer/src/routes/chat.tsx
@@ -0,0 +1,6 @@
+import HomePage from '@renderer/pages/home/HomePage'
+import { createFileRoute } from '@tanstack/react-router'
+
+export const Route = createFileRoute('/chat')({
+ component: HomePage
+})
diff --git a/src/renderer/src/routes/code.tsx b/src/renderer/src/routes/code.tsx
new file mode 100644
index 0000000000..adee178762
--- /dev/null
+++ b/src/renderer/src/routes/code.tsx
@@ -0,0 +1,6 @@
+import CodeToolsPage from '@renderer/pages/code/CodeToolsPage'
+import { createFileRoute } from '@tanstack/react-router'
+
+export const Route = createFileRoute('/code')({
+ component: CodeToolsPage
+})
diff --git a/src/renderer/src/routes/files.tsx b/src/renderer/src/routes/files.tsx
new file mode 100644
index 0000000000..164d9dae81
--- /dev/null
+++ b/src/renderer/src/routes/files.tsx
@@ -0,0 +1,6 @@
+import FilesPage from '@renderer/pages/files/FilesPage'
+import { createFileRoute } from '@tanstack/react-router'
+
+export const Route = createFileRoute('/files')({
+ component: FilesPage
+})
diff --git a/src/renderer/src/routes/index.tsx b/src/renderer/src/routes/index.tsx
index 4fc1c3e43b..693694c738 100644
--- a/src/renderer/src/routes/index.tsx
+++ b/src/renderer/src/routes/index.tsx
@@ -1,14 +1,6 @@
+import LaunchpadPage from '@renderer/pages/launchpad/LaunchpadPage'
import { createFileRoute } from '@tanstack/react-router'
export const Route = createFileRoute('/')({
- component: Index
+ component: LaunchpadPage
})
-
-function Index() {
- return (
-
-
Home
-
TODO: Migrate HomePage
-
- )
-}
diff --git a/src/renderer/src/routes/knowledge.tsx b/src/renderer/src/routes/knowledge.tsx
new file mode 100644
index 0000000000..3d923e94bc
--- /dev/null
+++ b/src/renderer/src/routes/knowledge.tsx
@@ -0,0 +1,6 @@
+import KnowledgePage from '@renderer/pages/knowledge/KnowledgePage'
+import { createFileRoute } from '@tanstack/react-router'
+
+export const Route = createFileRoute('/knowledge')({
+ component: KnowledgePage
+})
diff --git a/src/renderer/src/routes/notes.tsx b/src/renderer/src/routes/notes.tsx
new file mode 100644
index 0000000000..b3541b1d89
--- /dev/null
+++ b/src/renderer/src/routes/notes.tsx
@@ -0,0 +1,6 @@
+import NotesPage from '@renderer/pages/notes/NotesPage'
+import { createFileRoute } from '@tanstack/react-router'
+
+export const Route = createFileRoute('/notes')({
+ component: NotesPage
+})
diff --git a/src/renderer/src/routes/paintings/$.tsx b/src/renderer/src/routes/paintings/$.tsx
new file mode 100644
index 0000000000..b0e7718061
--- /dev/null
+++ b/src/renderer/src/routes/paintings/$.tsx
@@ -0,0 +1,7 @@
+import PaintingsRoutePage from '@renderer/pages/paintings/PaintingsRoutePage'
+import { createFileRoute } from '@tanstack/react-router'
+
+// 通配符路由:捕获 /paintings/* 所有子路径
+export const Route = createFileRoute('/paintings/$')({
+ component: PaintingsRoutePage
+})
diff --git a/src/renderer/src/routes/paintings/index.tsx b/src/renderer/src/routes/paintings/index.tsx
new file mode 100644
index 0000000000..14f62c1e8d
--- /dev/null
+++ b/src/renderer/src/routes/paintings/index.tsx
@@ -0,0 +1,6 @@
+import PaintingsRoutePage from '@renderer/pages/paintings/PaintingsRoutePage'
+import { createFileRoute } from '@tanstack/react-router'
+
+export const Route = createFileRoute('/paintings/')({
+ component: PaintingsRoutePage
+})
diff --git a/src/renderer/src/routes/settings.tsx b/src/renderer/src/routes/settings.tsx
index d94bea303d..15482a8a5d 100644
--- a/src/renderer/src/routes/settings.tsx
+++ b/src/renderer/src/routes/settings.tsx
@@ -1,16 +1,7 @@
+import SettingsPage from '@renderer/pages/settings/SettingsPage'
import { createFileRoute } from '@tanstack/react-router'
-import { Settings } from 'lucide-react'
+// 布局路由:SettingsPage 作为布局组件,使用 Outlet 渲染子路由
export const Route = createFileRoute('/settings')({
component: SettingsPage
})
-
-function SettingsPage() {
- return (
-
-
-
Settings
-
TODO: Migrate SettingsPage
-
- )
-}
diff --git a/src/renderer/src/routes/settings/about.tsx b/src/renderer/src/routes/settings/about.tsx
new file mode 100644
index 0000000000..6c26b0091b
--- /dev/null
+++ b/src/renderer/src/routes/settings/about.tsx
@@ -0,0 +1,6 @@
+import AboutSettings from '@renderer/pages/settings/AboutSettings'
+import { createFileRoute } from '@tanstack/react-router'
+
+export const Route = createFileRoute('/settings/about')({
+ component: AboutSettings
+})
diff --git a/src/renderer/src/routes/settings/api-server.tsx b/src/renderer/src/routes/settings/api-server.tsx
new file mode 100644
index 0000000000..3715efa898
--- /dev/null
+++ b/src/renderer/src/routes/settings/api-server.tsx
@@ -0,0 +1,6 @@
+import { ApiServerSettings } from '@renderer/pages/settings/ToolSettings/ApiServerSettings'
+import { createFileRoute } from '@tanstack/react-router'
+
+export const Route = createFileRoute('/settings/api-server')({
+ component: ApiServerSettings
+})
diff --git a/src/renderer/src/routes/settings/data.tsx b/src/renderer/src/routes/settings/data.tsx
new file mode 100644
index 0000000000..a4f7d20246
--- /dev/null
+++ b/src/renderer/src/routes/settings/data.tsx
@@ -0,0 +1,6 @@
+import DataSettings from '@renderer/pages/settings/DataSettings/DataSettings'
+import { createFileRoute } from '@tanstack/react-router'
+
+export const Route = createFileRoute('/settings/data')({
+ component: DataSettings
+})
diff --git a/src/renderer/src/routes/settings/display.tsx b/src/renderer/src/routes/settings/display.tsx
new file mode 100644
index 0000000000..ef53cb8fec
--- /dev/null
+++ b/src/renderer/src/routes/settings/display.tsx
@@ -0,0 +1,6 @@
+import DisplaySettings from '@renderer/pages/settings/DisplaySettings/DisplaySettings'
+import { createFileRoute } from '@tanstack/react-router'
+
+export const Route = createFileRoute('/settings/display')({
+ component: DisplaySettings
+})
diff --git a/src/renderer/src/routes/settings/docprocess.tsx b/src/renderer/src/routes/settings/docprocess.tsx
new file mode 100644
index 0000000000..9ff2cef785
--- /dev/null
+++ b/src/renderer/src/routes/settings/docprocess.tsx
@@ -0,0 +1,6 @@
+import DocProcessSettings from '@renderer/pages/settings/DocProcessSettings'
+import { createFileRoute } from '@tanstack/react-router'
+
+export const Route = createFileRoute('/settings/docprocess')({
+ component: DocProcessSettings
+})
diff --git a/src/renderer/src/routes/settings/general.tsx b/src/renderer/src/routes/settings/general.tsx
new file mode 100644
index 0000000000..788de1139f
--- /dev/null
+++ b/src/renderer/src/routes/settings/general.tsx
@@ -0,0 +1,6 @@
+import GeneralSettings from '@renderer/pages/settings/GeneralSettings'
+import { createFileRoute } from '@tanstack/react-router'
+
+export const Route = createFileRoute('/settings/general')({
+ component: GeneralSettings
+})
diff --git a/src/renderer/src/routes/settings/index.tsx b/src/renderer/src/routes/settings/index.tsx
new file mode 100644
index 0000000000..96a3545dc5
--- /dev/null
+++ b/src/renderer/src/routes/settings/index.tsx
@@ -0,0 +1,8 @@
+import { createFileRoute, redirect } from '@tanstack/react-router'
+
+// /settings/ 重定向到 /settings/provider
+export const Route = createFileRoute('/settings/')({
+ beforeLoad: () => {
+ throw redirect({ to: '/settings/provider' })
+ }
+})
diff --git a/src/renderer/src/routes/settings/mcp.tsx b/src/renderer/src/routes/settings/mcp.tsx
new file mode 100644
index 0000000000..3adb2c94d9
--- /dev/null
+++ b/src/renderer/src/routes/settings/mcp.tsx
@@ -0,0 +1,7 @@
+import MCPSettings from '@renderer/pages/settings/MCPSettings'
+import { createFileRoute } from '@tanstack/react-router'
+
+// MCP 布局路由:MCPSettings 作为布局组件,使用 Outlet 渲染子路由
+export const Route = createFileRoute('/settings/mcp')({
+ component: MCPSettings
+})
diff --git a/src/renderer/src/routes/settings/mcp/$.tsx b/src/renderer/src/routes/settings/mcp/$.tsx
new file mode 100644
index 0000000000..98d221899a
--- /dev/null
+++ b/src/renderer/src/routes/settings/mcp/$.tsx
@@ -0,0 +1,24 @@
+import { useMCPServers } from '@renderer/hooks/useMCPServers'
+import ProviderDetail from '@renderer/pages/settings/MCPSettings/McpProviderSettings'
+import { providers } from '@renderer/pages/settings/MCPSettings/providers/config'
+import { useParams } from '@tanstack/react-router'
+import { createFileRoute } from '@tanstack/react-router'
+
+// 通配符路由:捕获 provider 页面 /settings/mcp/:providerKey
+const ProviderPage = () => {
+ const params = useParams({ strict: false }) as { _splat?: string }
+ const providerKey = params._splat
+ const { mcpServers } = useMCPServers()
+
+ const provider = providers.find((p) => p.key === providerKey)
+
+ if (!provider) {
+ return Provider not found
+ }
+
+ return
+}
+
+export const Route = createFileRoute('/settings/mcp/$')({
+ component: ProviderPage
+})
diff --git a/src/renderer/src/routes/settings/mcp/builtin.tsx b/src/renderer/src/routes/settings/mcp/builtin.tsx
new file mode 100644
index 0000000000..aa1cbdf3ac
--- /dev/null
+++ b/src/renderer/src/routes/settings/mcp/builtin.tsx
@@ -0,0 +1,12 @@
+import BuiltinMCPServerList from '@renderer/pages/settings/MCPSettings/BuiltinMCPServerList'
+import { createFileRoute } from '@tanstack/react-router'
+
+const BuiltinWrapper = () => (
+
+
+
+)
+
+export const Route = createFileRoute('/settings/mcp/builtin')({
+ component: BuiltinWrapper
+})
diff --git a/src/renderer/src/routes/settings/mcp/index.tsx b/src/renderer/src/routes/settings/mcp/index.tsx
new file mode 100644
index 0000000000..6a297dd0b7
--- /dev/null
+++ b/src/renderer/src/routes/settings/mcp/index.tsx
@@ -0,0 +1,8 @@
+import { createFileRoute, redirect } from '@tanstack/react-router'
+
+// /settings/mcp/ 重定向到 /settings/mcp/servers
+export const Route = createFileRoute('/settings/mcp/')({
+ beforeLoad: () => {
+ throw redirect({ to: '/settings/mcp/servers' })
+ }
+})
diff --git a/src/renderer/src/routes/settings/mcp/marketplaces.tsx b/src/renderer/src/routes/settings/mcp/marketplaces.tsx
new file mode 100644
index 0000000000..2908f0b961
--- /dev/null
+++ b/src/renderer/src/routes/settings/mcp/marketplaces.tsx
@@ -0,0 +1,12 @@
+import McpMarketList from '@renderer/pages/settings/MCPSettings/McpMarketList'
+import { createFileRoute } from '@tanstack/react-router'
+
+const MarketplacesWrapper = () => (
+
+
+
+)
+
+export const Route = createFileRoute('/settings/mcp/marketplaces')({
+ component: MarketplacesWrapper
+})
diff --git a/src/renderer/src/routes/settings/mcp/mcp-install.tsx b/src/renderer/src/routes/settings/mcp/mcp-install.tsx
new file mode 100644
index 0000000000..d91dd5389a
--- /dev/null
+++ b/src/renderer/src/routes/settings/mcp/mcp-install.tsx
@@ -0,0 +1,13 @@
+import { SettingContainer } from '@renderer/pages/settings'
+import InstallNpxUv from '@renderer/pages/settings/MCPSettings/InstallNpxUv'
+import { createFileRoute } from '@tanstack/react-router'
+
+const McpInstallWrapper = () => (
+
+
+
+)
+
+export const Route = createFileRoute('/settings/mcp/mcp-install')({
+ component: McpInstallWrapper
+})
diff --git a/src/renderer/src/routes/settings/mcp/npx-search.tsx b/src/renderer/src/routes/settings/mcp/npx-search.tsx
new file mode 100644
index 0000000000..a6d3754042
--- /dev/null
+++ b/src/renderer/src/routes/settings/mcp/npx-search.tsx
@@ -0,0 +1,17 @@
+import { useTheme } from '@renderer/context/ThemeProvider'
+import { SettingContainer } from '@renderer/pages/settings'
+import NpxSearch from '@renderer/pages/settings/MCPSettings/NpxSearch'
+import { createFileRoute } from '@tanstack/react-router'
+
+const NpxSearchWrapper = () => {
+ const { theme } = useTheme()
+ return (
+
+
+
+ )
+}
+
+export const Route = createFileRoute('/settings/mcp/npx-search')({
+ component: NpxSearchWrapper
+})
diff --git a/src/renderer/src/routes/settings/mcp/servers.tsx b/src/renderer/src/routes/settings/mcp/servers.tsx
new file mode 100644
index 0000000000..73587cbba9
--- /dev/null
+++ b/src/renderer/src/routes/settings/mcp/servers.tsx
@@ -0,0 +1,6 @@
+import McpServersList from '@renderer/pages/settings/MCPSettings/McpServersList'
+import { createFileRoute } from '@tanstack/react-router'
+
+export const Route = createFileRoute('/settings/mcp/servers')({
+ component: McpServersList
+})
diff --git a/src/renderer/src/routes/settings/mcp/settings.$serverId.tsx b/src/renderer/src/routes/settings/mcp/settings.$serverId.tsx
new file mode 100644
index 0000000000..ad4e2b62e2
--- /dev/null
+++ b/src/renderer/src/routes/settings/mcp/settings.$serverId.tsx
@@ -0,0 +1,6 @@
+import McpSettings from '@renderer/pages/settings/MCPSettings/McpSettings'
+import { createFileRoute } from '@tanstack/react-router'
+
+export const Route = createFileRoute('/settings/mcp/settings/$serverId')({
+ component: McpSettings
+})
diff --git a/src/renderer/src/routes/settings/memory.tsx b/src/renderer/src/routes/settings/memory.tsx
new file mode 100644
index 0000000000..712f212aba
--- /dev/null
+++ b/src/renderer/src/routes/settings/memory.tsx
@@ -0,0 +1,6 @@
+import MemorySettings from '@renderer/pages/settings/MemorySettings'
+import { createFileRoute } from '@tanstack/react-router'
+
+export const Route = createFileRoute('/settings/memory')({
+ component: MemorySettings
+})
diff --git a/src/renderer/src/routes/settings/model.tsx b/src/renderer/src/routes/settings/model.tsx
new file mode 100644
index 0000000000..ca5f86873a
--- /dev/null
+++ b/src/renderer/src/routes/settings/model.tsx
@@ -0,0 +1,6 @@
+import ModelSettings from '@renderer/pages/settings/ModelSettings/ModelSettings'
+import { createFileRoute } from '@tanstack/react-router'
+
+export const Route = createFileRoute('/settings/model')({
+ component: ModelSettings
+})
diff --git a/src/renderer/src/routes/settings/notes.tsx b/src/renderer/src/routes/settings/notes.tsx
new file mode 100644
index 0000000000..7e8e012eef
--- /dev/null
+++ b/src/renderer/src/routes/settings/notes.tsx
@@ -0,0 +1,6 @@
+import NotesSettings from '@renderer/pages/settings/NotesSettings'
+import { createFileRoute } from '@tanstack/react-router'
+
+export const Route = createFileRoute('/settings/notes')({
+ component: NotesSettings
+})
diff --git a/src/renderer/src/routes/settings/provider.tsx b/src/renderer/src/routes/settings/provider.tsx
new file mode 100644
index 0000000000..f99495ea5d
--- /dev/null
+++ b/src/renderer/src/routes/settings/provider.tsx
@@ -0,0 +1,6 @@
+import { ProviderList } from '@renderer/pages/settings/ProviderSettings'
+import { createFileRoute } from '@tanstack/react-router'
+
+export const Route = createFileRoute('/settings/provider')({
+ component: ProviderList
+})
diff --git a/src/renderer/src/routes/settings/quickAssistant.tsx b/src/renderer/src/routes/settings/quickAssistant.tsx
new file mode 100644
index 0000000000..3f737c1469
--- /dev/null
+++ b/src/renderer/src/routes/settings/quickAssistant.tsx
@@ -0,0 +1,6 @@
+import QuickAssistantSettings from '@renderer/pages/settings/QuickAssistantSettings'
+import { createFileRoute } from '@tanstack/react-router'
+
+export const Route = createFileRoute('/settings/quickAssistant')({
+ component: QuickAssistantSettings
+})
diff --git a/src/renderer/src/routes/settings/quickphrase.tsx b/src/renderer/src/routes/settings/quickphrase.tsx
new file mode 100644
index 0000000000..3c2d2478dc
--- /dev/null
+++ b/src/renderer/src/routes/settings/quickphrase.tsx
@@ -0,0 +1,6 @@
+import QuickPhraseSettings from '@renderer/pages/settings/QuickPhraseSettings'
+import { createFileRoute } from '@tanstack/react-router'
+
+export const Route = createFileRoute('/settings/quickphrase')({
+ component: QuickPhraseSettings
+})
diff --git a/src/renderer/src/routes/settings/selectionAssistant.tsx b/src/renderer/src/routes/settings/selectionAssistant.tsx
new file mode 100644
index 0000000000..297a25118c
--- /dev/null
+++ b/src/renderer/src/routes/settings/selectionAssistant.tsx
@@ -0,0 +1,6 @@
+import SelectionAssistantSettings from '@renderer/pages/settings/SelectionAssistantSettings/SelectionAssistantSettings'
+import { createFileRoute } from '@tanstack/react-router'
+
+export const Route = createFileRoute('/settings/selectionAssistant')({
+ component: SelectionAssistantSettings
+})
diff --git a/src/renderer/src/routes/settings/shortcut.tsx b/src/renderer/src/routes/settings/shortcut.tsx
new file mode 100644
index 0000000000..462d3f7a70
--- /dev/null
+++ b/src/renderer/src/routes/settings/shortcut.tsx
@@ -0,0 +1,6 @@
+import ShortcutSettings from '@renderer/pages/settings/ShortcutSettings'
+import { createFileRoute } from '@tanstack/react-router'
+
+export const Route = createFileRoute('/settings/shortcut')({
+ component: ShortcutSettings
+})
diff --git a/src/renderer/src/routes/settings/websearch.tsx b/src/renderer/src/routes/settings/websearch.tsx
new file mode 100644
index 0000000000..3c9279bb9d
--- /dev/null
+++ b/src/renderer/src/routes/settings/websearch.tsx
@@ -0,0 +1,6 @@
+import WebSearchSettings from '@renderer/pages/settings/WebSearchSettings'
+import { createFileRoute } from '@tanstack/react-router'
+
+export const Route = createFileRoute('/settings/websearch')({
+ component: WebSearchSettings
+})
diff --git a/src/renderer/src/routes/store.tsx b/src/renderer/src/routes/store.tsx
new file mode 100644
index 0000000000..2b3ea3e85e
--- /dev/null
+++ b/src/renderer/src/routes/store.tsx
@@ -0,0 +1,6 @@
+import AssistantPresetsPage from '@renderer/pages/store/assistants/presets/AssistantPresetsPage'
+import { createFileRoute } from '@tanstack/react-router'
+
+export const Route = createFileRoute('/store')({
+ component: AssistantPresetsPage
+})
diff --git a/src/renderer/src/routes/translate.tsx b/src/renderer/src/routes/translate.tsx
new file mode 100644
index 0000000000..9c9bd265a3
--- /dev/null
+++ b/src/renderer/src/routes/translate.tsx
@@ -0,0 +1,6 @@
+import TranslatePage from '@renderer/pages/translate/TranslatePage'
+import { createFileRoute } from '@tanstack/react-router'
+
+export const Route = createFileRoute('/translate')({
+ component: TranslatePage
+})