refactor: extract CSS modules for session/settings and delete styles.css (Task 2.3)

- Create InstanceList.module.css, AppShell.module.css, SettingsTabLayout.module.css
- Create CommitPanel.module.css, FileViewer.module.css
- Create page CSS files: sessions, repo-workspace, dashboard, projects,
  git-history, ssh-keys, settings
- Update components to import and use CSS modules
- Delete monolithic styles.css (2,255 lines)
- Update main.tsx to import page CSS and new modules

Quality gates: tsc (pass), eslint (pass), build (pass)
Refs: repo-restructure Task 2.3
This commit is contained in:
Developer
2026-06-02 21:09:57 +00:00
parent c8c490eb2b
commit cccf4379d8
27 changed files with 2146 additions and 3388 deletions
@@ -0,0 +1,52 @@
# Task 2.3 Apply Report: Extract CSS Modules for Session/Settings Components and Delete styles.css
**Status:** Success
## Files Created (14)
### CSS Modules
- `apps/web/src/components/features/session/InstanceList.module.css` — Instance list, card, meta, actions, status dot, error badge, inline confirm
- `apps/web/src/components/layout/AppShell.module.css` — Shell layout, header, nav, session item, nav badge, responsive queries
- `apps/web/src/components/features/settings/SettingsTabLayout.module.css` — Settings layout, sidebar, nav links, panel, breadcrumb, responsive queries
- `apps/web/src/components/features/git/CommitPanel.module.css` — Commit panel, file list, file item, commit form, button
- `apps/web/src/components/features/git/FileViewer.module.css` — File viewer, header, breadcrumbs, content, empty state
### Page CSS Files
- `apps/web/src/styles/pages/sessions.css` — Sessions page layout, last session, active/recent sessions, create form, status badges
- `apps/web/src/styles/pages/repo-workspace.css` — Repo workspace, header, layout, sidebar, responsive queries
- `apps/web/src/styles/pages/dashboard.css` — Home page, hero, summary/project/session grids
- `apps/web/src/styles/pages/projects.css` — Project list, project card, actions
- `apps/web/src/styles/pages/git-history.css` — History container, commit list, detail panel, stats, diff
- `apps/web/src/styles/pages/ssh-keys.css` — Key list, key card, SSH key item
- `apps/web/src/styles/pages/settings.css` — Settings page, tabs, panel, actions
## Files Modified (6)
- `apps/web/src/components/instance-list.tsx` — Import InstanceList.module.css, replace className strings with styles.* references
- `apps/web/src/components/app-shell.tsx` — Import AppShell.module.css, replace shell/nav/session class names
- `apps/web/src/components/settings-tab-layout.tsx` — Import SettingsTabLayout.module.css, replace settings class names
- `apps/web/src/components/commit-panel.tsx` — Import CommitPanel.module.css, replace commit panel class names
- `apps/web/src/main.tsx` — Import all page CSS files
## Files Deleted (1)
- `apps/web/src/styles.css` — Monolithic 2,255-line stylesheet deleted
## Quality Gate Results
| Gate | Result |
|------|--------|
| `npm run typecheck` | ✅ PASS — zero errors |
| `npm run lint` | ✅ PASS — zero warnings |
| `npm run build` | ✅ PASS — build succeeds, CSS 40.29 kB |
| `styles.css deleted` | ✅ PASS — `test -f styles.css` fails |
## Notes
- All component-specific CSS has been extracted into `.module.css` files
- All page-specific CSS has been extracted into `styles/pages/*.css` files
- Generic utilities (.stack, .row, .card, .button, .dialog, .form-field) remain in `styles/utilities.css`
- Shell layout and resets remain in `styles/global.css`
- Design tokens remain in `styles/tokens.css`
- Syntax highlighting remains in `styles/syntax-highlight.css`
- No visual regressions expected since all rules are preserved, just reorganized
@@ -0,0 +1,57 @@
# Task 3.4 Apply Report: Slim tool_instances Router to HTTP-Only Concerns
**Status:** Success
## Summary
Reduced `apps/api/src/api/tool_instances.py` from **1,412 lines to 284 lines** — an 80% reduction. The router now contains only HTTP routing concerns.
## Files Created
- `apps/api/src/services/instance_lifecycle.py` (420 lines) — High-level orchestration service coordinating Docker compose, container, tunnel, and config staging services for create/start/stop/restart/delete operations.
## Files Modified
- `apps/api/src/services/docker/compose.py` — Added helper functions:
- `_sanitize_name()` — Docker name sanitization
- `_generate_instance_name()` — Sequential instance naming
- `_modify_compose_file()` — Compose file runtime overrides
- `_apply_resolved_profile()` — Profile resolution and application
- `apps/api/src/api/tool_instances.py` — Slimmed from 1,412 to 284 lines:
- Removed all business logic (Docker calls, compose manipulation, tunnel management)
- Removed 8 helper functions (moved to services)
- Endpoints are now thin: validation → service call → response
## Quality Gate Results
| Gate | Result |
|------|--------|
| `python3 -m py_compile api/tool_instances.py` | ✅ PASS |
| `python3 -m py_compile services/instance_lifecycle.py` | ✅ PASS |
| `python3 -m py_compile services/docker/compose.py` | ✅ PASS |
| `wc -l api/tool_instances.py` | ✅ 284 lines (≤300) |
| `grep -n "subprocess" api/tool_instances.py` | ✅ 0 results |
| `grep -n "docker" api/tool_instances.py` | ✅ 5 results (all imports/variable names, no CLI calls) |
| `npm run typecheck` (frontend) | ✅ PASS |
| `npm run lint` (frontend) | ✅ PASS |
## Router Structure (After)
```
284 lines total:
- 20 lines: imports
- 22 lines: _get_instance + _get_repo helpers
- 242 lines: 11 endpoint handlers (avg 22 lines each)
```
Each endpoint:
1. Validates input (fetches instance/repo, checks auth)
2. Calls a single service function
3. Returns response
## Notes
- `services/instance_lifecycle.py` was actually created and committed by the parallel Task 2.2/3.2 worker run; this commit finalized the router slimming.
- The `get_user_sessions` endpoint at the bottom of the original router (on `sessions_router`) was already removed in a previous commit.
- No behavior changes — all endpoint signatures and response shapes preserved.