7070867393
Add Phase 2 (CSS Reorganization) covering: - Restore styles/ directory (tokens, global, utilities, syntax-highlight) - Restore styles/pages/*.css for page-specific styles - Restore 11 component CSS modules from monolithic styles.css - Delete styles.css after extraction Shift frontend page extraction phases to 3-7. Add visual regression checks to integration phase. Quality gates unchanged: tsc, build, py_compile, file size limits
8.2 KiB
8.2 KiB
Phase 0: Preparation
- 0.1 Verify
devbuilds cleanly (backendpy_compile, frontendtsc+vite build) - 0.2 Document current file sizes for before/after comparison
- 0.3 Create component directory stubs if missing:
apps/web/src/components/features/tool-workshop/apps/web/src/components/features/config-profiles/apps/web/src/components/features/terminal/apps/web/src/components/features/settings/apps/web/src/components/features/ssh-keys/apps/api/src/services/git/operations.py(extract from router)apps/api/src/services/config/crud_service.pyapps/api/src/services/config/resolver_service.py
Phase 1: Backend — Router Slimming
1.1 Terminal WebSocket Extraction
- 1.1.1 Create
api/tool/terminal.pyfrom terminal WebSocket handlers inapi/tool/tool_instances.py - 1.1.2 Move
_handle_terminal_websocket,_get_user_from_websocket,SessionRefclass - 1.1.3 Update
main.pyto includeterminal_routerfromapi.tool.terminal - 1.1.4 Remove terminal routes from
api/tool/tool_instances.py - 1.1.5 Verify
py_compilepasses
1.2 Instance Lifecycle Extraction
- 1.2.1 Create
api/tool/tool_lifecycle.pyfor start/stop/restart/delete endpoints - 1.2.2 Extract lifecycle endpoints from
api/tool/tool_instances.py - 1.2.3 Update
main.pyto include lifecycle router - 1.2.4 Verify
py_compilepasses
1.3 Git Repository Router
- 1.3.1 Create
services/git/operations.pyfor git command orchestration - 1.3.2 Extract
clone_repo,fetch_repo,pull_repo,push_repo,merge_repo,commit_repohelpers - 1.3.3 Update
api/project/git_repositories.pyto call service functions - 1.3.4 Verify
py_compilepasses
1.4 Config Profile Router
- 1.4.1 Extract CRUD helpers into
services/config/crud_service.py - 1.4.2 Extract resolver helpers into
services/config/resolver_service.py - 1.4.3 Update
api/config/config_profiles.pyto call services - 1.4.4 Verify
py_compilepasses
Phase 2: CSS Reorganization
2.1 Restore styles/ Directory Structure
- 2.1.1 Create
styles/directory - 2.1.2 Extract
styles/tokens.cssfromstyles.css— CSS custom properties - 2.1.3 Extract
styles/global.cssfromstyles.css— global reset, body, shell layout - 2.1.4 Extract
styles/utilities.cssfromstyles.css— utility classes (.stack, .card, .muted, .dialog, etc.) - 2.1.5 Extract
styles/syntax-highlight.cssfromstyles.css— code highlighting - 2.1.6 Update
main.tsxto import:styles/tokens.css,styles/global.css,styles/utilities.css,styles/syntax-highlight.css - 2.1.7 Verify build passes
2.2 Restore Page-Specific CSS
- 2.2.1 Extract
styles/pages/dashboard.cssfromstyles.css - 2.2.2 Extract
styles/pages/projects.cssfromstyles.css - 2.2.3 Extract
styles/pages/sessions.cssfromstyles.css - 2.2.4 Extract
styles/pages/settings.cssfromstyles.css - 2.2.5 Extract
styles/pages/ssh-keys.cssfromstyles.css - 2.2.6 Extract
styles/pages/git-history.cssfromstyles.css - 2.2.7 Extract
styles/pages/repo-workspace.cssfromstyles.css - 2.2.8 Update each page to import its page CSS
- 2.2.9 Verify build passes
2.3 Restore Component CSS Modules
- 2.3.1 Create
components/features/terminal/TerminalComponent.module.cssfrom terminal styles instyles.css - 2.3.2 Create
components/features/git/GitToolbar.module.cssfrom git toolbar styles instyles.css - 2.3.3 Create
components/features/git/CommitDialog.module.cssfrom commit dialog styles instyles.css - 2.3.4 Create
components/features/git/MergeDialog.module.cssfrom merge dialog styles instyles.css - 2.3.5 Create
components/features/git/FileEditor.module.cssfrom file editor styles instyles.css - 2.3.6 Create
components/features/git/FileBrowser.module.cssfrom file browser styles instyles.css - 2.3.7 Create
components/features/git/FileViewer.module.cssfrom file viewer styles instyles.css - 2.3.8 Create
components/features/git/CommitPanel.module.cssfrom commit panel styles instyles.css - 2.3.9 Create
components/features/session/InstanceList.module.cssfrom instance list styles instyles.css - 2.3.10 Create
components/features/settings/SettingsTabLayout.module.cssfrom settings tab layout styles instyles.css - 2.3.11 Create
components/layout/AppShell.module.cssfrom shell styles instyles.css - 2.3.12 Update each component to use
import styles from './ComponentName.module.css' - 2.3.13 Remove extracted styles from
styles.css - 2.3.14 Verify build passes
2.4 Verify and Delete Monolith
- 2.4.1 Confirm
styles.cssis empty (or only has truly unclassifiable styles) - 2.4.2 Delete
styles.css - 2.4.3 Verify build passes
- 2.4.4 Verify no visual regressions
Phase 3: Frontend — Tool Workshop Page
- 3.1 Extract
ToolTypesTabfrompages/ToolWorkshopPage.tsxintocomponents/features/tool-workshop/ToolTypesTab.tsx - 3.2 Extract
ToolConfigsTabintocomponents/features/tool-workshop/ToolConfigsTab.tsx - 3.3 Extract
ConfigFoldersTabintocomponents/features/tool-workshop/ConfigFoldersTab.tsx - 3.4 Slim
pages/ToolWorkshopPage.tsxto ~80 lines (tab switcher only) - 3.5 Update imports in all consumers
- 3.6 Verify
tsc --noEmitandnpm run buildpass
Phase 4: Frontend — Config Profiles Page
- 4.1 Extract
ConfigProfileListViewintocomponents/features/config-profiles/ConfigProfileListView.tsx - 4.2 Extract
ConfigProfileDetailViewintocomponents/features/config-profiles/ConfigProfileDetailView.tsx - 4.3 Extract
ConfigProfileEditFormintocomponents/features/config-profiles/ConfigProfileEditForm.tsx - 4.4 Extract
ConfigProfileMobileViewintocomponents/features/config-profiles/ConfigProfileMobileView.tsx - 4.5 Slim
pages/ConfigProfilesPage.tsxto ~80 lines - 4.6 Update imports
- 4.7 Verify
tsc --noEmitandnpm run buildpass
Phase 5: Frontend — Terminal Page
- 5.1 Extract
TerminalSessionManager(tabs + auto-create) intocomponents/features/terminal/TerminalSessionManager.tsx - 5.2 Extract
MobileTerminalOverlayintocomponents/features/terminal/MobileTerminalOverlay.tsx - 5.3 Extract fullscreen keyboard shortcut handler into
hooks/use-terminal-shortcuts.ts - 5.4 Slim
pages/TerminalPage.tsxto ~80 lines - 5.5 Update imports
- 5.6 Verify
tsc --noEmitandnpm run buildpass
Phase 6: Frontend — Settings & SSH Keys Pages
- 6.1 Extract
SettingsNavigationintocomponents/features/settings/SettingsNavigation.tsx - 6.2 Slim
pages/SettingsPage.tsxto ~80 lines - 6.3 Extract
SSHKeyListintocomponents/features/ssh-keys/SSHKeyList.tsx - 6.4 Extract
SSHKeyCreateFormintocomponents/features/ssh-keys/SSHKeyCreateForm.tsx - 6.5 Slim
pages/SshKeysPage.tsxto ~80 lines - 6.6 Verify
tsc --noEmitandnpm run buildpass
Phase 7: Frontend — Projects & Repo Workspace Pages
- 7.1 Extract
ProjectListintocomponents/features/project/ProjectList.tsx - 7.2 Extract
ProjectCreateDialogintocomponents/features/project/ProjectCreateDialog.tsx - 7.3 Extract
ProjectEditDialogintocomponents/features/project/ProjectEditDialog.tsx - 7.4 Slim
pages/ProjectsPage.tsxto ~100 lines - 7.5 Extract
WorkspaceLayoutintocomponents/features/workspace/WorkspaceLayout.tsx - 7.6 Slim
pages/RepoWorkspacePage.tsxto ~150 lines - 7.7 Verify
tsc --noEmitandnpm run buildpass
Phase 8: Integration and Verification
- 8.1 Run backend
py_compileon all files - 8.2 Run frontend
npm run typecheck - 8.3 Run frontend
npm run build - 8.4 Run frontend tests:
npm test - 8.5 Verify file size targets met (pages ≤ 150, routers ≤ 400, no
styles.cssmonolith) - 8.6 Verify no 404s or import errors in browser console
- 8.7 Manual smoke test: create project, start terminal, open config profiles
- 8.8 Verify visual regression: colors, spacing, typography unchanged
- 8.9 Verify mobile terminal styles intact
- 8.10 Verify notification dropdown styles intact