Add AGENTS.md, CLAUDE.md, and the agents-docs/ tree (workflow, lessons, engineering standards, context map, ADR seed, feature template) plus a domain-bearing CONTEXT.md for each of the six subdomains: toju-app, electron, server, e2e, website, docs-site. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
3.5 KiB
3.5 KiB
Context Map
Bounded contexts in this system. Before working in a subdomain, read its CONTEXT.md. See agents-docs/AGENTS_CONTEXT.md for the contract.
Contexts
| Context | Purpose | Public surface | CONTEXT.md |
|---|---|---|---|
| toju-app | Angular 21 product client — UI, NgRx state, per-domain rules and services for chat, voice, screen-share, plugins, theming | Window-hosted Angular bundle; consumes Electron window.api (preload bridge) and the server WebSocket; serves the user-facing experience |
toju-app/CONTEXT.md |
| electron | Desktop shell — main process, preload bridge, IPC handlers, local SQLite persistence, plugin sandbox, OS integrations | window.api.* surface exposed to the renderer via the preload; main-process IPC channel names; CQRS handlers; TypeORM entities in electron/entities/ |
electron/CONTEXT.md |
| server | Signaling server — REST routes for server directory + auth, WebSocket realtime, CQRS handlers, TypeORM persistence | HTTP routes under server/src/routes/; WebSocket envelopes under server/src/websocket/; server-directory API |
server/CONTEXT.md |
| e2e | Playwright suite — end-to-end coverage of the product client running against a real Electron build and signaling server | No public surface — observer/verifier of the system | e2e/CONTEXT.md |
| website | Angular 19 marketing site — public-facing landing pages, screenshots, download links | Static SSR/CSR bundle deployed independently of the product app | website/CONTEXT.md |
| docs-site | Docusaurus app — application and plugin author documentation served by the Electron Local API | Static bundle at docs-site/build/, mounted by Electron's local HTTP server for in-app docs |
docs-site/CONTEXT.md |
Relationships
- toju-app is downstream of electron via the
window.apipreload bridge. The renderer cannot reach Node, the filesystem, or SQLite directly — every privileged operation goes through an IPC channel defined inelectron/. - toju-app is downstream of server via the WebSocket envelope contract and the REST server-directory API. Envelope shape changes require coordinated edits to both sides.
- electron owns the local persistence layer (per-user TypeORM + sql.js database). server owns the shared persistence layer (signaling state, server-directory entries, auth artifacts). They do not share entities — the wire format is the contract.
- electron hosts docs-site at runtime: the Local API server inside the desktop app mounts the prebuilt Docusaurus bundle so plugin authors and end users can browse docs offline. Building docs-site is a prerequisite of
npm run build:all. - e2e depends on toju-app, electron, and server simultaneously — tests boot the full desktop stack against a real signaling server. Treat E2E as the integration boundary that proves the contracts above are aligned.
- website is independent of the runtime stack. It shares no code or schemas with the product app; it links out to release artifacts produced by Gitea Workflows.
- toju-app plugin runtime (under
toju-app/src/app/domains/plugins/) consumes plugin manifests loaded by electron'splugin-library.ts. The manifest schema is a third coupling axis between the two contexts.
Rules for agents
- Add a row when a new subdomain gains its own
CONTEXT.md. - Update the public surface or relationships when they change.
- Keep this file scannable — one row per context, terse purpose strings.