2026-01-10 01:02:00 +02:00
# OpenChamber - AI Agent Reference (verified)
## Core purpose
OpenChamber provides UI runtimes (web/desktop/VS Code) for interacting with an OpenCode server (local auto-start or remote URL). UI uses HTTP + SSE via `@opencode-ai/sdk` .
2026-02-05 01:59:49 +02:00
## Runtime architecture (IMPORTANT)
- `Desktop` is a thin Tauri shell that starts the web server sidecar and loads the web UI from `http://127.0.0.1:<port>` .
- All backend logic lives in `packages/web/server/*` (and `packages/vscode/*` for the VS Code runtime). Desktop Rust is not a feature backend.
- Tauri is used only for stable native integrations: menu, dialog (open folder), notifications, updater, deep-links.
2026-01-10 01:02:00 +02:00
## Tech stack (source of truth: `package.json`, resolved: `bun.lock`)
- Runtime/tooling: Bun (`package.json` `packageManager` ), Node >=20 (`package.json` `engines` )
- UI: React, TypeScript, Vite, Tailwind v4
- State: Zustand (`packages/ui/src/stores/` )
- UI primitives: Radix UI (`package.json` deps), HeroUI (`package.json` deps), Remixicon (`package.json` deps)
- Server: Express (`packages/web/server/index.js` )
- Desktop: Tauri v2 (`packages/desktop/src-tauri/` )
- VS Code: extension + webview (`packages/vscode/` )
## Monorepo layout
Workspaces are `packages/*` (see `package.json` ).
- Shared UI: `packages/ui`
- Web app + server + CLI: `packages/web`
- Desktop app (Tauri): `packages/desktop`
- VS Code extension: `packages/vscode`
2026-02-15 11:19:10 -03:00
## Documentation map
Before changing any mapped module, read its module documentation first.
### web
Web runtime and server implementation for OpenChamber.
#### lib
Server-side integration modules used by API routes and runtime services.
##### quota
Quota provider registry, dispatch, and provider integrations for usage endpoints.
- Module docs: `packages/web/server/lib/quota/DOCUMENTATION.md`
2026-01-10 01:02:00 +02:00
## Build / dev commands (verified)
All scripts are in `package.json` .
- Validate: `bun run type-check` , `bun run lint`
- Build all: `bun run build`
- Desktop build: `bun run desktop:build`
- VS Code build: `bun run vscode:build`
- Release smoke build: `bun run release:test` (shell script: `scripts/test-release-build.sh` )
## Runtime entry points
- Web bootstrap: `packages/web/src/main.tsx`
- Web server: `packages/web/server/index.js`
- Web CLI: `packages/web/bin/cli.js` (package bin: `packages/web/package.json` )
2026-02-05 01:59:49 +02:00
- Desktop: Tauri entry `packages/desktop/src-tauri/src/main.rs` (spawns web server sidecar + loads web UI)
2026-01-10 01:02:00 +02:00
- Tauri backend: `packages/desktop/src-tauri/src/main.rs`
- VS Code extension host: `packages/vscode/src/extension.ts`
- VS Code webview bootstrap: `packages/vscode/webview/main.tsx`
## OpenCode integration
- UI client wrapper: `packages/ui/src/lib/opencode/client.ts` (imports `@opencode-ai/sdk/v2` )
- SSE hookup: `packages/ui/src/hooks/useEventStream.ts`
- Web server embeds/starts OpenCode server: `packages/web/server/index.js` (`createOpencodeServer` )
- Web runtime filesystem endpoints: search `packages/web/server/index.js` for `/api/fs/`
2026-01-22 08:32:04 -08:00
- External server support: Set `OPENCODE_PORT` and `OPENCODE_SKIP_START=true` to connect to existing OpenCode instance
2026-01-10 01:02:00 +02:00
## Key UI patterns (reference files)
- Settings shell: `packages/ui/src/components/views/SettingsView.tsx`
- Settings shared primitives: `packages/ui/src/components/sections/shared/`
- Settings sections: `packages/ui/src/components/sections/` (incl `skills/` )
- Chat UI: `packages/ui/src/components/chat/` and `packages/ui/src/components/chat/message/`
- Theme + typography: `packages/ui/src/lib/theme/` , `packages/ui/src/lib/typography.ts`
- Terminal UI: `packages/ui/src/components/terminal/` (uses `ghostty-web` )
## External / system integrations (active)
- Git: `packages/ui/src/lib/gitApi.ts` , `packages/web/server/index.js` (`simple-git` )
- Terminal PTY: `packages/web/server/index.js` (`bun-pty` /`node-pty` )
- Skills catalog: `packages/web/server/lib/skills-catalog/` , UI: `packages/ui/src/components/sections/skills/`
## Agent constraints
- Do not modify `../opencode` (separate repo).
- Do not run git/GitHub commands unless explicitly asked.
- Keep baseline green (run `bun run type-check` , `bun run lint` , `bun run build` before finalizing changes).
## Development rules
- Keep diffs tight; avoid drive-by refactors.
- Backend changes: keep web/desktop/vscode runtimes consistent (if relevant).
- Follow local precedent; search nearby code first.
- TypeScript: avoid `any` /blind casts; keep ESLint/TS green.
- React: prefer function components + hooks; class only when needed (e.g. error boundaries).
- Control flow: avoid nested ternaries; prefer early returns + `if/else` /`switch` .
- Styling: Tailwind v4; typography via `packages/ui/src/lib/typography.ts` ; theme vars via `packages/ui/src/lib/theme/` .
2026-02-08 04:32:14 +02:00
- Toasts: use custom toast wrapper from `@/components/ui` (backed by `packages/ui/src/components/ui/toast.ts` ); do not import `sonner` directly in feature code.
2026-01-10 01:02:00 +02:00
- No new deps unless asked.
- Never add secrets (`.env` , keys) or log sensitive data.
2026-02-01 18:29:34 +02:00
## Theme System (MANDATORY for UI work)
When working on any UI components, styling, or visual changes, agents **MUST** study the theme system skill first.
**Before starting any UI work:**
```
skill({ name: "theme-system" })
```
This skill contains all color tokens, semantic logic, decision tree, and usage patterns. All UI colors must use theme tokens - never hardcoded values or Tailwind color classes.
2026-01-10 01:02:00 +02:00
## Recent changes
- Releases + high-level changes: `CHANGELOG.md`
- Recent commits: `git log --oneline` (latest tags: `v1.4.6` , `v1.4.5` )