Ship Paseo-equivalent provider snapshot, AgentComposerBar, ACP dispatch rewrite with streaming/persist, permission prompts, and agent commands. Follow-up: pane-scoped chat resolution, CoderMessageList tool timeline, WS user-delta replace, and inference orphan tool_call stripping. Archive openspec v2-2; update CHANGELOG and CURRENT. Co-authored-by: Cursor <cursoragent@cursor.com>
71 lines
2.7 KiB
Markdown
71 lines
2.7 KiB
Markdown
# boocode
|
|
|
|
Self-hosted single-user developer chat app. 3-app monorepo: BooChat (read-only chat), BooCoder (write tools + agent dispatch), BooTerm (PTY terminals).
|
|
|
|
**Agent navigation:** [`AGENTS.md`](AGENTS.md) · **Architecture:** [`docs/ARCHITECTURE.md`](docs/ARCHITECTURE.md) · **Engineering reference:** [`CLAUDE.md`](CLAUDE.md)
|
|
|
|
## Stack
|
|
|
|
- Node 20, Fastify, postgres (porsager/postgres), ws, zod
|
|
- React 18, Vite, TypeScript, Tailwind v4, shadcn/ui
|
|
- Postgres 16
|
|
- pnpm workspaces
|
|
|
|
## Layout
|
|
|
|
- `apps/server` — Fastify API + WebSocket + inference loop + file-read tools
|
|
- `apps/web` — React frontend; served by Fastify in production, Vite in dev
|
|
- `apps/booterm` — Fastify + node-pty + tmux for in-browser terminal panes
|
|
- `apps/coder` — Fastify write tools + ACP/PTY dispatcher + MCP server (BooCoder)
|
|
|
|
## Local dev
|
|
|
|
Requires Node 20, pnpm, Docker (for Postgres), and ripgrep.
|
|
|
|
```bash
|
|
# install
|
|
pnpm install
|
|
|
|
# bring up postgres only
|
|
cp .env.example .env
|
|
# edit POSTGRES_PASSWORD if you like; default DATABASE_URL points at the container
|
|
docker compose up -d boocode_db
|
|
|
|
# run server (port 3000) and web (port 5173) in two shells
|
|
DATABASE_URL=postgres://boocode:devpass@127.0.0.1:5500/boochat \
|
|
LLAMA_SWAP_URL=http://100.101.41.16:8401 \
|
|
pnpm dev:server
|
|
|
|
pnpm dev:web
|
|
```
|
|
|
|
The Vite dev server proxies `/api` and `/api/ws/*` to the Fastify backend with a
|
|
synthetic `Remote-User: sam` header so the Authelia auth layer can be skipped
|
|
during development.
|
|
|
|
## Production
|
|
|
|
```bash
|
|
cd /opt/boocode
|
|
docker compose up --build -d
|
|
```
|
|
|
|
Binds to `100.114.205.53:9500` (Tailscale). Authelia is expected to gate the
|
|
upstream and inject `Remote-User`. Postgres binds loopback only.
|
|
|
|
## Services
|
|
|
|
|Service|Port|Description|
|
|
|---|---|---|
|
|
|BooChat|`100.114.205.53:9500`|Read-only chat + SPA |
|
|
|BooTerm|`100.114.205.53:9501`|PTY/tmux terminal panes |
|
|
|BooCoder|host:9502|Write tools + agent dispatch + MCP server (systemd service, not Docker) |
|
|
|Postgres|`127.0.0.1:5500`|Shared database (`boochat`; Docker service `boocode_db`) |
|
|
|codecontext|internal `:8080`|Code graph sidecar (Docker network only) |
|
|
|
|
## What's shipped
|
|
|
|
- **BooChat**: streaming chat, file-read tools, compaction, reasoning support, HTML/Markdown artifact panes, cross-repo read grants, MCP client (Context7 + multi-server), tool-cost tracking, skills system, agent registry, provider picker with model discovery
|
|
- **BooTerm**: in-browser terminal panes via tmux + xterm.js, per-session tmux sessions, SSH-out support
|
|
- **BooCoder**: write tools (`edit_file`, `create_file`, `delete_file`, `apply_pending`, `rewind`), pending-changes queue with diff UI, ACP/PTY dual-path agent dispatch, MCP server (6 tools, stdio), CLI client, human inbox, Boomerang orchestration, path-guard fuzz suite
|