Cosmosh Project Map
1. Monorepo Layout
flowchart TB ROOT[Cosmosh Root] ROOT --> MAIN[packages/main] ROOT --> RENDERER[packages/renderer] ROOT --> BACKEND[packages/backend] ROOT --> API[packages/api-contract] ROOT --> I18N[packages/i18n] ROOT --> DOCS[docs] ROOT --> SCRIPTS[scripts]
2. Directory Responsibilities
packages/main
- Role: Electron host process.
- Key files:
src/index.ts: app bootstrap, BrowserWindow config, IPC handlers, backend subprocess management.src/preload.ts: secure renderer bridge.src/security/database-encryption.ts: DB path/key handling helpers.
packages/renderer
- Role: React UI layer.
- Key folders:
src/pages: feature pages (Home,SSH,SSHEditor, etc.).src/components/ui: Radix-based primitive wrappers and styling contracts.src/lib: backend transport, i18n, settings bootstrap (app-settings.ts), utility abstractions.theme: token source used to generate CSS variable system.
packages/backend
- Role: Internal API + session orchestration runtime.
- Key folders:
src/http/routes: REST endpoints for settings, SSH entities, and local terminal actions.src/ssh: SSH auth/session logic (ssh2, known-host trust, telemetry).src/settings: settings payload defaults and validation parsers.src/local-terminal: local PTY session logic (node-pty).src/db: Prisma initialization and DB lifecycle.
packages/api-contract
Shared protocol constants, request/response types, OpenAPI source, generated contracts.
packages/i18n
Locale JSON source files and i18n runtime package for main/backend/renderer scopes.
3. Feature Placement Rules
flowchart TD
A[New Feature Request] --> B{UI only?}
B -- Yes --> C[packages/renderer/src/pages + components]
B -- No --> D{Needs privileged access?}
D -- Yes --> E[Add preload bridge API + main IPC]
E --> F[Main proxies to backend or executes OS action]
D -- No --> G[Add backend route/service]
G --> H[Expose through transport in renderer]
F --> I[Update docs + ipc-protocol]
H --> I
4. Naming & Structure Guidelines
- Keep cross-process contracts in
api-contractfirst, then consume in backend/main/renderer. - Keep renderer side effects in
src/lib(transport/services), not directly in presentational components. - Add new IPC channels only via preload and mirror declaration in
renderer/src/vite-env.d.ts. - For backend features:
- route in
http/routes/* - business/session logic in dedicated service module
- input validation in
ssh/validation.ts-style parser modules.
- route in
5. Not Implemented Yet (Planned)
- Full SFTP feature module (backend service, WebSocket/file transfer protocol, renderer explorer page).
- Dedicated shared
commonpackage is not present yet; current sharing is done throughapi-contract+i18n.
6. Common Change Scenarios
Add New IPC Action
- Define or reuse contract types in
packages/api-contractwhen needed. - Expose the bridge API in
packages/main/src/preload.ts. - Add
ipcMainhandler and backend proxy inpackages/main/src/index.ts. - Wire renderer transport wrapper in
packages/renderer/src/lib. - Update
docs/developer/core/ipc-protocol.mdin the same change set.
Add New Backend Capability
- Add route under
packages/backend/src/http/routes. - Add service logic in domain module (
ssh,local-terminal, or new module). - Add validation/parser layer for input boundaries.
- Expose consumption path to renderer via main bridge.
- Sync architecture/runtime docs.