2.9 KiB
2.9 KiB
Repository Guidelines
Project Structure & Module Organization
cmd/supervisor/: Go entrypoint (main.go) for the single executable.internal/: backend application code.internal/httpserver/: HTTP routes, middleware, REST and WebSocket handlers.internal/session/: PTY process runtime, session lifecycle, buffering, and manager logic.internal/static/: embedded frontend assets (go:embedservesinternal/static/dist).web/: Vue 3 + TypeScript frontend (Vite, Pinia, Vue Router, xterm).scripts/: build helpers for frontend and full build pipeline.bin/: compiled artifacts (generated).
Build, Test, and Development Commands
make frontend-build: installs web dependencies, runs Vite production build, copiesweb/disttointernal/static/dist.make backend-build: builds Go binary atbin/supervisor.make build: full build (frontend + backend).make run: builds everything and starts the app.cd web && npm run dev: frontend dev server with proxy to backend (:8080).go test ./...: run backend unit tests (when tests are present).
Do not edit internal/static/dist by hand; it is generated from web/dist by make frontend-build.
Coding Style & Naming Conventions
- Go: format with
gofmt; package names lowercase; exported symbols inCamelCase; errors aserrwith wrapped context. - Vue/TS: components in
PascalCase.vue, stores and API modules incamelCase.ts. - Keep handlers thin: validation + transport only; put lifecycle/process logic in
internal/session. - Prefer explicit JSON DTOs over ad-hoc maps except small error responses.
- Keep session state rules centralized in
internal/session/manager.go(example: only non-running sessions can be deleted).
Testing Guidelines
- Backend tests use Go’s standard
testingpackage. - Place tests alongside code as
*_test.go(example:internal/session/manager_test.go). - Prioritize tests for session lifecycle (
create/start/input/resize/stop) and WebSocket message handling. - Frontend automated tests are not configured yet; if added, keep them under
web/src/**/__tests__.
Commit & Pull Request Guidelines
- Existing history uses short, direct commit messages (often imperative). Keep subject concise, one logical change per commit.
- Recommended pattern:
area: action(example:session: handle resize messages). - PRs should include a summary of behavior changes.
- List impacted paths and manual verification commands.
- Add screenshots/GIFs for UI changes.
- Link the related issue/task when available.
Security & Configuration Tips
- Default bind is
:8080; override withSUPERVISOR_ADDR. - Do not commit secrets or environment-specific credentials.
- PTY commands are user-supplied; keep future changes mindful of command execution risk.
- Session deletion endpoint is
DELETE /api/sessions/{id}; preserve current API semantics (409for running sessions,204on success).