- {/* Both layouts stay mounted; visibility toggled via display to preserve Monaco + PTY state */}
-
-
diff --git a/packages/desktop/src/TitleBar.tsx b/packages/desktop/src/TitleBar.tsx
index ae686c7a..6867e1ae 100644
--- a/packages/desktop/src/TitleBar.tsx
+++ b/packages/desktop/src/TitleBar.tsx
@@ -1,12 +1,5 @@
-import { useUIStore } from './stores/ui.store';
-
-const isWindows = window.electronAPI?.platform === 'win32';
-
export default function TitleBar() {
- const mode = useUIStore((s) => s.mode);
- const setMode = useUIStore((s) => s.setMode);
-
- if (!isWindows) return null;
+ if (window.electronAPI?.platform !== 'win32') return null;
return (
Coding Code
-
-
-
-
);
}
diff --git a/packages/desktop/src/layouts/AgentLayout.tsx b/packages/desktop/src/layouts/AgentLayout.tsx
deleted file mode 100644
index 06d4910a..00000000
--- a/packages/desktop/src/layouts/AgentLayout.tsx
+++ /dev/null
@@ -1,33 +0,0 @@
-import { useAgentCore } from '../hooks/useAgent';
-import { useUIStore } from '../stores/ui.store';
-import ProjectStrip from '../agent/ProjectStrip';
-import AgentSidebar from '../agent/AgentSidebar';
-import AgentWorkspace from '../agent/AgentWorkspace';
-import { AutomationPanel } from '../agent/AutomationPanel';
-import GlobalSettingsPage from '../settings/GlobalSettingsPage';
-import ProjectSettingsPage from '../settings/ProjectSettingsPage';
-
-export default function AgentLayout() {
- const { sendMessage, abort } = useAgentCore();
- const view = useUIStore((s) => s.view);
-
- if (view === 'global-settings') {
- return
;
- }
-
- if (view === 'project-settings') {
- return
;
- }
-
- if (view === 'automation') {
- return
;
- }
-
- return (
-
- );
-}
diff --git a/packages/desktop/src/layouts/IDELayout.tsx b/packages/desktop/src/layouts/IDELayout.tsx
deleted file mode 100644
index 0c6d4f4d..00000000
--- a/packages/desktop/src/layouts/IDELayout.tsx
+++ /dev/null
@@ -1,18 +0,0 @@
-import { useUIStore } from '../stores/ui.store';
-
-export default function IDELayout() {
- const setMode = useUIStore((s) => s.setMode);
-
- return (
-
-
IDE 模式
-
Phase 3 中实现完整 IDE 布局
-
-
- );
-}
diff --git a/packages/desktop/src/stores/ui.store.ts b/packages/desktop/src/stores/ui.store.ts
index 4e4206c2..752da47c 100644
--- a/packages/desktop/src/stores/ui.store.ts
+++ b/packages/desktop/src/stores/ui.store.ts
@@ -4,43 +4,33 @@ import { immer } from 'zustand/middleware/immer';
import { createDebouncedStorage } from './storage';
interface UIState {
- mode: 'agent' | 'ide';
view: 'agent' | 'global-settings' | 'project-settings' | 'automation';
sidebarCollapsed: boolean;
sidebarWidth: number;
rightPanelWidth: number;
bottomPanelHeight: number;
- ideSidebarView: 'explorer' | 'search' | 'git' | 'extensions';
theme: 'dark' | 'light' | 'paper';
}
interface UIActions {
- setMode: (mode: 'agent' | 'ide') => void;
setView: (view: UIState['view']) => void;
toggleSidebar: () => void;
setSidebarWidth: (w: number) => void;
setRightPanelWidth: (w: number) => void;
setBottomPanelHeight: (h: number) => void;
- setIdeSidebarView: (view: UIState['ideSidebarView']) => void;
setTheme: (theme: UIState['theme']) => void;
}
export const useUIStore = create
()(
persist(
immer((set) => ({
- mode: 'agent',
view: 'agent',
sidebarCollapsed: false,
sidebarWidth: 220,
rightPanelWidth: 320,
bottomPanelHeight: 200,
- ideSidebarView: 'explorer',
theme: 'dark',
- setMode: (mode) =>
- set((s) => {
- s.mode = mode;
- }),
setView: (view) =>
set((s) => {
s.view = view;
@@ -61,10 +51,6 @@ export const useUIStore = create()(
set((s) => {
s.bottomPanelHeight = h;
}),
- setIdeSidebarView: (view) =>
- set((s) => {
- s.ideSidebarView = view;
- }),
setTheme: (theme) =>
set((s) => {
s.theme = theme;
diff --git a/packages/desktop/test/app-agent-layout-inline.test.ts b/packages/desktop/test/app-agent-layout-inline.test.ts
new file mode 100644
index 00000000..4101b70a
--- /dev/null
+++ b/packages/desktop/test/app-agent-layout-inline.test.ts
@@ -0,0 +1,17 @@
+import { describe, expect, it } from 'vitest';
+import { existsSync, readFileSync } from 'fs';
+import { resolve } from 'path';
+
+const srcRoot = resolve(__dirname, '..', 'src');
+const appSource = readFileSync(resolve(srcRoot, 'App.tsx'), 'utf8');
+
+describe('App agent layout', () => {
+ it('owns the agent view routing after removing AgentLayout', () => {
+ expect(existsSync(resolve(srcRoot, 'layouts', 'AgentLayout.tsx'))).toBe(false);
+ expect(appSource).not.toContain('AgentLayout');
+ expect(appSource).toContain('useAgentCore()');
+ expect(appSource).toContain('');
+ expect(appSource).toContain('');
+ expect(appSource).toContain('');
+ });
+});