Files
openworker/surfaces/gui
Devika Verma 17cd6b281f Mode picker: caution icon on Bypass approvals; note line machinery
- Icon.tsx: "warning" caution triangle (24px grid, 1.7 stroke, Lucide-style
  rounded triangle + exclamation) matching the existing icon set.
- Composer.tsx: ModeOption extends Dropdown's Option with `caution` (warning
  triangle before the label, themed via text-warnInk so it follows
  light/dark) and `note` (a second, dimmer italic line under the
  description). Bypass approvals carries the caution icon.

The Auto-Approve picker entry itself remains unshipped until the settings
pass gates it on the server-exposed auto_approve flag; its copy is decided
(owner, 2026-08-12): description "A reviewer clears routine actions;
doubtful ones still ask", note "Uses your session model for judgement - one
extra model call per check".

tsc clean; 111 GUI unit tests pass; rendered live and verified (note line
under Auto-Approve, warnInk triangle on Bypass).
2026-08-12 13:51:32 -07:00
..
2026-07-21 11:09:41 -07:00
2026-07-21 11:09:41 -07:00
2026-07-21 11:09:41 -07:00
2026-07-21 11:09:41 -07:00
2026-07-21 11:09:41 -07:00
2026-07-21 11:09:41 -07:00
2026-07-21 11:09:41 -07:00
2026-07-21 11:09:41 -07:00

coworker GUI (React + Tauri)

A thin client of the coworker server (OpenAI-compatible API + WS event/approval stream). Same codebase runs in a browser (dev) and as the OpenWorker desktop app.

First time: bootstrap the Python backend

A fresh checkout has no server to run — create the venv both flows below expect (from the repo root):

bash packaging/setup_dev_env.sh   # → .venv (server + aisuite)

Run it (browser, two terminals)

  1. Start the server (needs a model key, e.g. OPENAI_API_KEY, in the environment — or add one later in the app's Settings), from the repo root:
    ./.venv/bin/openworker-server --cwd /path/to/your/project --port 8765
    
  2. Start the UI:
    cd surfaces/gui
    npm install      # first time
    npm run dev      # → http://localhost:5173
    

Open http://localhost:5173. The UI talks to http://127.0.0.1:8765 (override with VITE_COWORKER_HTTP / VITE_COWORKER_WS). Start the server before Vite so the UI can read its per-launch token from <state-dir>/sidecar-8765.token; restart Vite if the server is restarted.

Run the desktop app from source

The Tauri shell wraps the same UI and supervises the Python server itself — no separate terminal. It needs the Rust toolchain (rustup) plus the venv from the bootstrap step; in dev it finds the server at .venv/bin/openworker-server automatically (a packaged sidecar binary is only produced by the release scripts in packaging/).

cd surfaces/gui
npm install        # first time
npm run tauri dev  # builds the shell, launches the window, starts the server

Tests

npx tsc --noEmit && npx vitest run   # typecheck + unit
npx playwright test                  # hermetic e2e (mocked /v1 + WS, no Python needed)