diff options
| author | Adam Malczewski <[email protected]> | 2026-06-27 01:08:32 +0900 |
|---|---|---|
| committer | Adam Malczewski <[email protected]> | 2026-06-27 01:08:32 +0900 |
| commit | 63c7e64532e85e0bbdd6d9ac6825d8f86be98e7a (patch) | |
| tree | c9896deb21cd5a76f196492a191d56f8656c8109 | |
| parent | e59dc11f63b1df51142259bb2c406af8c9c8c2bb (diff) | |
| download | dispatch-63c7e64532e85e0bbdd6d9ac6825d8f86be98e7a.tar.gz dispatch-63c7e64532e85e0bbdd6d9ac6825d8f86be98e7a.zip | |
chore: update path references for directory rename (dispatch-backend → backend, dispatch-web → frontend)
30 files changed, 53 insertions, 53 deletions
@@ -7,7 +7,7 @@ ## What this project is A **minimal kernel + extensions** agent runtime. The kernel runs ONE agent turn and hosts extensions. Every feature is an extension. Tiers: **kernel → core → -standard**. The web frontend is a SEPARATE repo (`../dispatch-web`), built to +standard**. The web frontend is a SEPARATE repo (`../frontend`), built to the same methodology and consuming the backend's typed contracts (see `notes/frontend-design.md`). @@ -13,11 +13,11 @@ cache warming, turn continuity (detached turns + multi-client), skills, message queue + steering, metrics (live + persisted), per-conversation model/cwd/reasoning persistence, and broken-chat self-repair are all DONE and live-verified. **`tsc -b` EXIT 0 · biome clean · 1468 vitest green.** The web frontend is a -separate repo (`../dispatch-web`); contract changes are couriered via the user. +separate repo (`../frontend`); contract changes are couriered via the user. ## How to boot & smoke-test ```bash -cd /home/tradam/projects/dispatch/dispatch-backend +cd /home/tradam/projects/dispat../backend # .env auto-loads DISPATCH_API_KEY + BACKEND_PORT (24203). # Dev stack (live-reload): bin/up (ports 24203/24205/24204) # Stable second stack: ../bin/up2 (ports 25203/25205/25204, isolated data) diff --git a/ORCHESTRATOR.md b/ORCHESTRATOR.md index a812294..96dd00f 100644 --- a/ORCHESTRATOR.md +++ b/ORCHESTRATOR.md @@ -93,9 +93,9 @@ per the §3 map; the `--file` ORDER is the assembly order: constitution → brie omit `--file .dispatch/extension-agent.md` for non-extension units): ```bash -cd /home/tradam/projects/dispatch/dispatch-backend +cd /home/tradam/projects/dispatch/backend dispatch umans/umans-glm-5.2 \ - --cwd /home/tradam/projects/dispatch/dispatch-backend \ + --cwd /home/tradam/projects/dispatch/backend \ --text "You are the single owner-agent for packages/<unit>/. The attached files are your constitution, brief, rules, and task — follow them exactly in the order given. Then IMPLEMENT the task now: edit ONLY files under packages/<unit>/, run tsc -b / vitest / biome for your package, and write your report to reports/<unit>.md. Reply with ONLY a one-line status + the path reports/<unit>.md — no diffs, no logs." \ --file AGENTS.md \ --file .dispatch/package-agent.md \ @@ -197,7 +197,7 @@ Keep it scoped (P6): state only the project-specific, non-inferable task — the in its OWN code — NO shared redaction helper (design rationale: `notes/observability-design.md` §9). Include this on EVERY extension summon (an extension that never logs is a coverage gap, not an exemption). -- **Frontend units** are summoned from the SEPARATE `../dispatch-web` repo using ITS +- **Frontend units** are summoned from the SEPARATE `../frontend` repo using ITS OWN harness (`package-agent.md` + `frontend-*.md` rules) + ITS OWN scoping map — NOT these backend rules. See that repo's `ORCHESTRATOR.md`. @@ -230,7 +230,7 @@ fix it. You diagnose from symptoms; the agent reads the code. After every agent, independently: ```bash -cd /home/tradam/projects/dispatch/dispatch-backend +cd /home/tradam/projects/dispatch/backend bun run typecheck # tsc -b --pretty — must be clean (EXIT 0) bun run test # vitest — note the pass count bun run check # biome — must be clean @@ -347,7 +347,7 @@ live runs (§8 bracket trick), since a leak silently poisons the next run's coun ## 7. Repo geography ``` -/home/tradam/projects/dispatch/dispatch-backend # THE worktree (branch dev) +/home/tradam/projects/dispatch/backend # THE worktree (branch dev) AGENTS.md the subagent constitution (the summon points each agent at it; you enforce it) ORCHESTRATOR.md the orchestrator's operating manual (this file) @@ -392,7 +392,7 @@ The genesis commit deleted all prior source; we rebuilt from scratch. The OLD project lives at `/home/tradam/projects/dispatch/dispatch-source` (reference only — do not edit). -The **web frontend is a SEPARATE repo** at `/home/tradam/projects/dispatch/dispatch-web` +The **web frontend is a SEPARATE repo** at `/home/tradam/projects/dispatch/frontend` (own git, own harness — its own `AGENTS.md`/`ORCHESTRATOR.md`/`GLOSSARY.md`/`.dispatch/`). It consumes `packages/ui-contract` + the wire types as a pinned `file:` dependency. `lsp references` does NOT span the two repos, so cross-repo contract changes are @@ -417,7 +417,7 @@ provider silently fails to register: "No providers registered"). `.env` also pin `BACKEND_PORT`, which beats `PORT` — so set `BACKEND_PORT` explicitly, and ISOLATE the data paths or you'll share SQLite files + spawn a duplicate collector against the dev stack: ```bash -cd /home/tradam/projects/dispatch/dispatch-backend +cd /home/tradam/projects/dispatch/backend BACKEND_PORT=4567 SURFACE_WS_PORT=4569 \ DISPATCH_DB=/tmp/opencode/probe/dispatch.db \ DISPATCH_TRACE_DB=/tmp/opencode/probe/traces.db \ @@ -204,9 +204,9 @@ bun run dispatch -- send <id> --text "follow up" --queue --open --- -## Web frontend (dispatch-web) +## Web frontend (frontend) -The web UI is a **separate repo** ([github.com/realtradam/dispatch-web](https://github.com/realtradam/dispatch-web), +The web UI is a **separate repo** ([github.com/realtrad../frontend](https://github.com/realtrad../frontend), Svelte 5 + Vite + DaisyUI), built to the same methodology and consuming the backend's typed contracts (`@dispatch/wire`, `@dispatch/transport-contract`, `@dispatch/ui-contract`). The browser chat MVP is in progress — it streams turns over the chat WebSocket, renders the surface system (loaded @@ -217,7 +217,7 @@ workspaces, LSP status, and per-conversation settings. ```sh git clone [email protected]:realtradam/dispatch.git -git clone [email protected]:realtradam/dispatch-web.git +git clone [email protected]:realtrad../frontend.git bin/up # backend (bun --watch :24203 + WS :24205) + frontend (vite HMR :24204) ``` @@ -225,7 +225,7 @@ bin/up # backend (bun --watch :24203 + WS :24205) + frontend (vite HMR :242 alongside `bin/up` without interference. Both Ctrl-C cleanly (including the collector child). Then open **http://localhost:24204** (or your Tailscale hostname). See the -[dispatch-web README](https://github.com/realtradam/dispatch-web#readme) for full setup. +[dispatch-web README](https://github.com/realtrad../frontend#readme) for full setup. --- @@ -320,7 +320,7 @@ Clone these repos as siblings: ``` dispatch/ workspace root (shared bin/ scripts) ├── dispatch/ this repo — backend (branch dev) -├── dispatch-web/ [github.com/realtradam/dispatch-web](https://github.com/realtradam/dispatch-web) — web frontend +├── frontend/ [github.com/realtrad../frontend](https://github.com/realtrad../frontend) — web frontend └── bin/ shared dev scripts (up, up2) ``` diff --git a/backend-to-fe-handoff-2.md b/backend-to-fe-handoff-2.md index 942381b..51a3e34 100644 --- a/backend-to-fe-handoff-2.md +++ b/backend-to-fe-handoff-2.md @@ -1,6 +1,6 @@ # Backend → FE handoff — context window + percentage-based compact -> Courier to `../dispatch-web`. Response to the context-window ask in +> Courier to `../frontend`. Response to the context-window ask in > `backend-handoff.md` §3 + compacting rework. ## What shipped diff --git a/backend-to-fe-handoff.md b/backend-to-fe-handoff.md index dcaaa51..a6e726b 100644 --- a/backend-to-fe-handoff.md +++ b/backend-to-fe-handoff.md @@ -1,6 +1,6 @@ # Backend → FE handoff — CR-6 resolved + full endpoint list -> Response to `backend-handoff.md` §2 CR-6. Courier back to `../dispatch-web`. +> Response to `backend-handoff.md` §2 CR-6. Courier back to `../frontend`. ## CR-6: Assign seq during generation — RESOLVED diff --git a/frontend-cache-rate-handoff.md b/frontend-cache-rate-handoff.md index 89ab8e4..b64a612 100644 --- a/frontend-cache-rate-handoff.md +++ b/frontend-cache-rate-handoff.md @@ -1,6 +1,6 @@ # FE handoff — cache hit/miss + percentage (calculation guide) -> **Courier doc** (backend → `../dispatch-web`, via the user). Per ORCHESTRATOR §7 +> **Courier doc** (backend → `../frontend`, via the user). Per ORCHESTRATOR §7 > the backend does not write the FE repo. This describes ONLY how to compute cache > hit/miss + percentages from data the backend ALREADY exposes — **no UI design here** > (the look is specified separately) and **no backend change is required**. diff --git a/frontend-cache-warming-handoff.md b/frontend-cache-warming-handoff.md index 67ff374..cf1f402 100644 --- a/frontend-cache-warming-handoff.md +++ b/frontend-cache-warming-handoff.md @@ -1,6 +1,6 @@ # FE handoff — cache warming: cache-rate fix + "expected cache" metric -> **Courier doc** (backend → `../dispatch-web`, via the user). Per ORCHESTRATOR §7 the backend does +> **Courier doc** (backend → `../frontend`, via the user). Per ORCHESTRATOR §7 the backend does > NOT write the FE repo. `lsp references` does not span the two repos. > Backend commits: `7ffb6b2` (arch-rewrite), `0e9d118` (`../claude/provider-anthropic`). diff --git a/frontend-cache-warming-lifecycle-handoff.md b/frontend-cache-warming-lifecycle-handoff.md index 0722e25..49bee0a 100644 --- a/frontend-cache-warming-lifecycle-handoff.md +++ b/frontend-cache-warming-lifecycle-handoff.md @@ -1,6 +1,6 @@ # FE handoff — CR-4 cache-warming lifecycle SHIPPED (+ CR-1 table, CR-2 scope) -> **Courier doc** (backend → `../dispatch-web`, via the user). Response to your +> **Courier doc** (backend → `../frontend`, via the user). Response to your > `backend-handoff-cache-warming.md` (CR-4) and the open asks CR-1 / CR-2 in > `backend-handoff.md`. Everything below is live on `bin/up` and verified with a > headless probe (same flow as your `scripts/probe-cache-warming.ts` — re-run it to diff --git a/frontend-compaction-handoff.md b/frontend-compaction-handoff.md index 572b25f..195bc1e 100644 --- a/frontend-compaction-handoff.md +++ b/frontend-compaction-handoff.md @@ -1,6 +1,6 @@ # FE handoff — conversation compacting -Courier this to `../dispatch-web`. All changes are ADDITIVE. +Courier this to `../frontend`. All changes are ADDITIVE. ## What shipped (backend) diff --git a/frontend-context-size-handoff.md b/frontend-context-size-handoff.md index ed4cacd..a774a0c 100644 --- a/frontend-context-size-handoff.md +++ b/frontend-context-size-handoff.md @@ -1,6 +1,6 @@ # FE handoff — context size (current context-window usage) -Courier this to `../dispatch-web` (cross-repo contract change; `lsp references` does not +Courier this to `../frontend` (cross-repo contract change; `lsp references` does not span repos — ORCHESTRATOR §7). Backend commit adds an optional `contextSize` field; no breaking change. diff --git a/frontend-conversation-lifecycle-handoff.md b/frontend-conversation-lifecycle-handoff.md index ec877e1..ca6de57 100644 --- a/frontend-conversation-lifecycle-handoff.md +++ b/frontend-conversation-lifecycle-handoff.md @@ -1,6 +1,6 @@ # FE handoff — conversation lifecycle (tab persistence across devices) -Courier this to `../dispatch-web`. All changes are ADDITIVE — nothing existing breaks. +Courier this to `../frontend`. All changes are ADDITIVE — nothing existing breaks. ## What shipped (backend) diff --git a/frontend-conversation-list-handoff.md b/frontend-conversation-list-handoff.md index 16e90cb..dd3fd63 100644 --- a/frontend-conversation-list-handoff.md +++ b/frontend-conversation-list-handoff.md @@ -1,6 +1,6 @@ # FE handoff — conversation list, title, and open tab -Courier this to `../dispatch-web`. All changes are ADDITIVE — nothing existing breaks. +Courier this to `../frontend`. All changes are ADDITIVE — nothing existing breaks. ## What shipped (backend) diff --git a/frontend-conversation-open-handoff.md b/frontend-conversation-open-handoff.md index ae900eb..c4064ea 100644 --- a/frontend-conversation-open-handoff.md +++ b/frontend-conversation-open-handoff.md @@ -1,6 +1,6 @@ # FE handoff — conversation.open (CLI --open flag) -Courier this to `../dispatch-web`. All changes are ADDITIVE. +Courier this to `../frontend`. All changes are ADDITIVE. ## What shipped (backend) diff --git a/frontend-cr3-user-message-handoff.md b/frontend-cr3-user-message-handoff.md index 0a7859a..0fb20e5 100644 --- a/frontend-cr3-user-message-handoff.md +++ b/frontend-cr3-user-message-handoff.md @@ -1,6 +1,6 @@ # FE handoff — CR-3 fixed: user prompt is now on the turn's event stream -Courier to `../dispatch-web`. This resolves CR-3 from `backend-handoff.md` ("a watcher can't see +Courier to `../frontend`. This resolves CR-3 from `backend-handoff.md` ("a watcher can't see the turn's USER prompt until seal"). **Option B implemented + live-verified.** Your staged-but-inert consumption can now be turned on. diff --git a/frontend-cwd-resolution-handoff.md b/frontend-cwd-resolution-handoff.md index 66c93b4..80d5105 100644 --- a/frontend-cwd-resolution-handoff.md +++ b/frontend-cwd-resolution-handoff.md @@ -1,6 +1,6 @@ # Backend handoff — cwd resolution fixes (backend → FE) — courier doc -> **From:** arch-rewrite orchestrator · **To:** dispatch-web orchestrator (b18a) · **Courier:** the user. +> **From:** arch-rewrite orchestrator · **To:** frontend orchestrator (b18a) · **Courier:** the user. > Response to the cwd bug report you sent to backend agent ab13. The fixes are DONE and > live-verified on the dev stack. diff --git a/frontend-history-windowing-handoff.md b/frontend-history-windowing-handoff.md index f9244b1..6792c38 100644 --- a/frontend-history-windowing-handoff.md +++ b/frontend-history-windowing-handoff.md @@ -1,6 +1,6 @@ # Backend → frontend handoff — CR-5: history windowing (`limit` / `beforeSeq`) -> **From:** arch-rewrite · **To:** dispatch-web · **Courier:** the user. +> **From:** arch-rewrite · **To:** frontend · **Courier:** the user. > Reply to `backend-handoff-chat-limit.md` (CR-5). 2026-06-12. SHIPPED. ## What shipped diff --git a/frontend-lsp-cwd-handoff.md b/frontend-lsp-cwd-handoff.md index f27b1e5..e7c8417 100644 --- a/frontend-lsp-cwd-handoff.md +++ b/frontend-lsp-cwd-handoff.md @@ -1,7 +1,7 @@ # Frontend handoff — LSP status + per-conversation CWD > Backend milestone complete (this repo). The web frontend is a SEPARATE repo -> (`../dispatch-web`); this document is couriered to it by the user (ORCHESTRATOR +> (`../frontend`); this document is couriered to it by the user (ORCHESTRATOR > §7 — `lsp references` does not span repos). All types below are exported from > `@dispatch/transport-contract` (bumped to **0.5.0**). diff --git a/frontend-lsp-cwd-workspace-handoff.md b/frontend-lsp-cwd-workspace-handoff.md index 7e34211..d17f0a5 100644 --- a/frontend-lsp-cwd-workspace-handoff.md +++ b/frontend-lsp-cwd-workspace-handoff.md @@ -1,6 +1,6 @@ # FE Courier Handoff: LSP cwd resolution fix + PUT cwd workspaceId -> Backend→FE courier. The user couriers this to `../dispatch-web` (FE agent `ffe3`). +> Backend→FE courier. The user couriers this to `../frontend` (FE agent `ffe3`). > No `@dispatch/wire` or `@dispatch/transport-contract` version bump is breaking — > the `SetCwdRequest.workspaceId` is additive (optional); the `LspStatusResponse.cwd` > semantics changed (was always non-null effective cwd; now null when no cwd set). diff --git a/frontend-message-queue-handoff.md b/frontend-message-queue-handoff.md index 2d55220..b9c2a6d 100644 --- a/frontend-message-queue-handoff.md +++ b/frontend-message-queue-handoff.md @@ -1,6 +1,6 @@ # FE handoff — message queue + steering injection -Courier this to `../dispatch-web` (cross-repo contract change; `lsp references` does +Courier this to `../frontend` (cross-repo contract change; `lsp references` does not span repos — ORCHESTRATOR §7). All changes are ADDITIVE — nothing existing breaks. ## What shipped (backend) diff --git a/frontend-metrics-handoff.md b/frontend-metrics-handoff.md index 8da45ad..be033d8 100644 --- a/frontend-metrics-handoff.md +++ b/frontend-metrics-handoff.md @@ -1,6 +1,6 @@ # Frontend handoff — live turn metrics (tokens + timing) -> From: arch-rewrite (backend) orchestrator · For: the dispatch-web FE team. +> From: arch-rewrite (backend) orchestrator · For: the frontend FE team. > Status: **LIVE on the stream now** (backend committed + live-verified). Consume via the pinned > contracts `@dispatch/[email protected]` + `@dispatch/[email protected]` (reference snapshots > regenerated in `dispatch-web/.dispatch/{wire,transport-contract}.reference.md`). @@ -109,7 +109,7 @@ latency removed). If you want end-to-end rate including the wait, use `ttftMs + - TPS is not sent pre-computed (derive it, §4). No per-token timing (metrics are per-step/per-turn). ## 7. Integration checklist -1. Refresh deps: `bun run typecheck` in dispatch-web (picks up `[email protected]` / `[email protected]`). +1. Refresh deps: `bun run typecheck` in frontend (picks up `[email protected]` / `[email protected]`). 2. Extend your `chat.delta` event handler: add a `case "step-complete"` and read the new optional fields on `usage`/`tool-result`/`done`. (No exhaustive-switch break — these are additive.) 3. Keep a per-turn (and per-step, keyed by `stepId`) telemetry accumulator alongside the transcript diff --git a/frontend-metrics-pass2-handoff.md b/frontend-metrics-pass2-handoff.md index 9019a85..adf0404 100644 --- a/frontend-metrics-pass2-handoff.md +++ b/frontend-metrics-pass2-handoff.md @@ -1,6 +1,6 @@ # FE handoff — persisted replay metrics (Pass 2) + metrics endpoint -> **Courier doc** (backend → `../dispatch-web`, via the user). Per ORCHESTRATOR §7 +> **Courier doc** (backend → `../frontend`, via the user). Per ORCHESTRATOR §7 > the backend does NOT write the FE repo; the FE orchestrator applies this delta > on its side (regenerate the in-repo `.dispatch/*.reference.md` snapshots + bump > the `file:` dep). `lsp references` does not span the two repos. Backend commit: diff --git a/frontend-reasoning-effort-handoff.md b/frontend-reasoning-effort-handoff.md index 8647f36..656dede 100644 --- a/frontend-reasoning-effort-handoff.md +++ b/frontend-reasoning-effort-handoff.md @@ -1,6 +1,6 @@ # FE handoff — reasoning effort (thinking-depth knob) -Courier this to `../dispatch-web` (cross-repo contract change; `lsp references` does not +Courier this to `../frontend` (cross-repo contract change; `lsp references` does not span repos — ORCHESTRATOR §7). All changes are ADDITIVE — nothing existing breaks. ## What shipped (backend) diff --git a/frontend-stop-generation-handoff.md b/frontend-stop-generation-handoff.md index 33559b0..117b65e 100644 --- a/frontend-stop-generation-handoff.md +++ b/frontend-stop-generation-handoff.md @@ -1,6 +1,6 @@ # FE handoff — stop generation mid-turn -Courier this to `../dispatch-web`. All changes are ADDITIVE. +Courier this to `../frontend`. All changes are ADDITIVE. ## What shipped (backend) diff --git a/frontend-todo-handoff.md b/frontend-todo-handoff.md index 0edfa60..4a81296 100644 --- a/frontend-todo-handoff.md +++ b/frontend-todo-handoff.md @@ -1,6 +1,6 @@ # FE handoff — todo task list surface -Courier this to `../dispatch-web` (cross-repo contract change; `lsp references` does +Courier this to `../frontend` (cross-repo contract change; `lsp references` does not span repos — ORCHESTRATOR §7). All changes are ADDITIVE — nothing existing breaks. ## What shipped (backend) diff --git a/frontend-turn-continuity-handoff.md b/frontend-turn-continuity-handoff.md index b8b664d..e0be4a3 100644 --- a/frontend-turn-continuity-handoff.md +++ b/frontend-turn-continuity-handoff.md @@ -1,6 +1,6 @@ # FE handoff — turn continuity + multi-client live view -Courier to `../dispatch-web` (cross-repo; `lsp references` does not span repos — +Courier to `../frontend` (cross-repo; `lsp references` does not span repos — ORCHESTRATOR §7). Backend is implemented + live-verified against flash. This unblocks the "turn keeps running when the browser is backgrounded/reloaded" + "watch the same chat from a second device" behavior. diff --git a/frontend-workspaces-handoff.md b/frontend-workspaces-handoff.md index 2ddfaf5..1fed1bf 100644 --- a/frontend-workspaces-handoff.md +++ b/frontend-workspaces-handoff.md @@ -1,6 +1,6 @@ # Backend handoff — Workspaces (backend → FE) — courier doc -> **From:** arch-rewrite orchestrator · **To:** dispatch-web orchestrator · **Courier:** the user. +> **From:** arch-rewrite orchestrator · **To:** frontend orchestrator · **Courier:** the user. > Response to `backend-handoff-workspaces.md`. This doc finalizes the contract shapes > the backend will implement. The FE should re-pin `@dispatch/wire` and > `@dispatch/transport-contract` `file:` deps and re-mirror any `.dispatch/*.reference.md`. diff --git a/notes/frontend-design.md b/notes/frontend-design.md index 16cb41f..e0687ed 100644 --- a/notes/frontend-design.md +++ b/notes/frontend-design.md @@ -86,7 +86,7 @@ chosen set. Skip the backend's 3-tier ceremony. ## 3. Repo structure (Vite + Svelte 5 SPA — SETTLED; not SvelteKit) ``` -dispatch-web/ (../dispatch-web — NEW repo, own git) +dispatch-web/ (../frontend — NEW repo, own git) AGENTS.md ORCHESTRATOR.md GLOSSARY.md .dispatch/{package-agent.md, rules/frontend-*.md} src/ @@ -416,7 +416,7 @@ slice); DaisyUI styling (F4 follow-up). The slice-1 input decisions were: Or pick a different first surface. 2. **WS-transport boundary:** a NEW `transport-ws` extension vs. augment the existing `transport-http`. (Boundary call.) -3. **Repo scaffold go-ahead:** create `../dispatch-web` (git init + Vite/Svelte/biome/vitest + +3. **Repo scaffold go-ahead:** create `../frontend` (git init + Vite/Svelte/biome/vitest + the §8 harness). Orchestrator can scaffold config + harness; feature code = summoned agents. ### Slice-1 findings + open items (for the next, clean-context agent) diff --git a/notes/turn-continuity-design.md b/notes/turn-continuity-design.md index 29ec10d..f33cec6 100644 --- a/notes/turn-continuity-design.md +++ b/notes/turn-continuity-design.md @@ -1,7 +1,7 @@ # Turn continuity — detached turns + multi-client live view > Status: DESIGN (locked) → backend implementation in progress. FE work couriered -> to `../dispatch-web`. See ORCHESTRATOR §7 (cross-repo). +> to `../frontend`. See ORCHESTRATOR §7 (cross-repo). ## Problem (confirmed by code trace) @@ -30,7 +30,7 @@ safety invariant — never duplicate partial output). Plan: - **Retry trigger:** emitted `error` with `retryable===true` → retry; `retryable` false/absent → give up; a THROWN error → retryable-by-default ONLY when pre-content. All gated on `!hadContent` (text/reasoning/tool-call/usage). -- **Frontend handoff (5d3f, separate repo `../dispatch-web`):** render +- **Frontend handoff (5d3f, separate repo `../frontend`):** render `provider-retry` as a yellow warning system-message bubble showing `message` (+`code`) with the `delayMs` countdown. @@ -402,7 +402,7 @@ extension through the host): provider capture (self-redacted); `trace-replay` record/replay lib + fixtures. - **CLI** — one-shot HTTP client (`bun packages/cli/src/main.ts`); `GET /models`, `--cwd`, `--conversation`. -- **web frontend** — SEPARATE repo `../dispatch-web`. Slice 1 (surface system) +- **web frontend** — SEPARATE repo `../frontend`. Slice 1 (surface system) shipped via `ui-contract` + `surface-registry` + `transport-ws` + `surface-loaded-extensions`. Slice 2 (browser chat) in progress there. @@ -459,7 +459,7 @@ Enabled by a new env knob **`SURFACE_WS_PORT`** → `surfaceWsPort` config per-step `stepId` + ttft/decode/genTotal + durationMs); journal turn/step spans carry dotted `usage.*` incl. `usage.cacheReadTokens` (the #2 fix). - [x] **FE courier handoff** written: `frontend-metrics-pass2-handoff.md` (in - this repo; user couriers to `../dispatch-web`; ORCHESTRATOR §7). + this repo; user couriers to `../frontend`; ORCHESTRATOR §7). ## dedup / storage growth (DONE) Design `notes/observability-design.md` §12. User-gated calls: extend existing @@ -572,7 +572,7 @@ arm-on-settle/cancel-on-start; `pct = round(clamp(cacheRead/input,0,1)*100)`). the `number` field kind + send/handle `conversationId` on the surface WS protocol. ## Cache warming — FE CR-3 (DONE) -FE asked (dispatch-web `backend-handoff-cache-warming-timer.md`): expose next/last-warm timestamps + +FE asked (frontend `backend-handoff-cache-warming-timer.md`): expose next/last-warm timestamps + make a manual warm reset the timer/refresh the surface. Done via an **inversion** (commit `bfbad3a`): session-orchestrator `warm()` (the single chokepoint for manual `/chat/warm` AND the auto timer) emits a `warmCompleted` bus event; cache-warming subscribes and does all post-warm handling — so manual @@ -637,7 +637,7 @@ persisted `TurnMetrics`. aggregate); turn 2 (same conversation) → 1286 (grew cumulatively), live == persisted. Both carriers agree; "current" = latest turn's value. - [x] **FE courier handoff:** `frontend-context-size-handoff.md` (user couriers to - `../dispatch-web`). + `../frontend`). ## Turn continuity — detached turns + multi-client live view (DONE) Design: `notes/turn-continuity-design.md`. FE courier: `frontend-turn-continuity-handoff.md`. @@ -687,7 +687,7 @@ outward stream/buffer. FE courier: `frontend-cr3-user-message-handoff.md`. orchestrator summons owner-agents and does not write feature code itself. ## Cache warming — FE CR-4 lifecycle + CR-1 extensions table + CR-2 catalog scope (DONE) -FE courier in: `../dispatch-web/backend-handoff-cache-warming.md` (+ CR-1/CR-2 from their living +FE courier in: `../frontend/backend-handoff-cache-warming.md` (+ CR-1/CR-2 from their living `backend-handoff.md`). Courier out: `frontend-cache-warming-lifecycle-handoff.md`. Full report: `reports/cr4-cache-warming-lifecycle.md`. - **CR-4a:** warming defaults OFF (opt-in per conversation) — `parseSettings` + `DEFAULT_STATE`; @@ -709,7 +709,7 @@ FE courier in: `../dispatch-web/backend-handoff-cache-warming.md` (+ CR-1/CR-2 f `done.reason:"aborted"` + warming disabled, catalog scopes + table field present, echo present. ## History windowing — FE CR-5 (DONE) -FE courier in: `../dispatch-web/backend-handoff-chat-limit.md` (+ living `backend-handoff.md` §2 +FE courier in: `../frontend/backend-handoff-chat-limit.md` (+ living `backend-handoff.md` §2 CR-5). Courier out: `frontend-history-windowing-handoff.md`. User-gated call: ask #3 shipped as the INVARIANT option (no new field) — seq is contractually **1-based, monotonic, gap-free**; FE derives `hasOlder` from `chunks[0].seq > 1`. @@ -763,7 +763,7 @@ budget_tokens; `../claude` orchestrated DIRECTLY (mode A); CLI `--effort` now. Commits: arch-rewrite `35197ed` (contracts) + `020e051` (impl); ../claude `c0835a4`. - [x] Live-verified vs claude (thinking deltas streamed at xhigh; persisted PUT honored next turn). - [x] FE courier handoff written: `frontend-reasoning-effort-handoff.md` (user couriers to - `../dispatch-web`): ChatRequest/chat.send field + GET/PUT endpoints + ladder + default-`high` + `../frontend`): ChatRequest/chat.send field + GET/PUT endpoints + ladder + default-`high` semantics + cache note. ## Message queue + steering injection (DONE) @@ -803,7 +803,7 @@ additive `steering` `AgentEvent`; queue state via the surface (NOT the chat stre all agents in-lane. **Boot smoke:** private instance boots clean with `message-queue` registered (no activation crash). - [x] FE courier handoff written: `frontend-message-queue-handoff.md` (user couriers to - `../dispatch-web`): surface (`rendererId:"message-queue"`), `chat.queue` WS op, `steering` + `../frontend`): surface (`rendererId:"message-queue"`), `chat.queue` WS op, `steering` event, HTTP `POST /queue`, auto-start-when-idle, carry semantics, version bumps. ## Umans AI Coding Plan provider (DONE) @@ -913,7 +913,7 @@ conversation tab. Short-ID prefix resolution (4+ chars → full ID via `GET /con - [x] Live-verified end-to-end (CLI → real conversation → FE tab open). ## Workspaces (DONE) -Cross-repo design ask from `../dispatch-web` (`backend-handoff-workspaces.md`). +Cross-repo design ask from `../frontend` (`backend-handoff-workspaces.md`). Outbound courier: `frontend-workspaces-handoff.md` (final shapes + Q1–Q8). - **Boundary decision:** workspaces live inside `conversation-store` (metadata + cwd persistence owner); no new extension. Single owner-agent for all workspace @@ -969,7 +969,7 @@ Outbound courier: `frontend-workspaces-handoff.md` (final shapes + Q1–Q8). pattern: separate key space per feature, append/write per conversation). ## Roadmap -1. **Web frontend** (in progress, SEPARATE repo `../dispatch-web`; Svelte + +1. **Web frontend** (in progress, SEPARATE repo `../frontend`; Svelte + DaisyUI, same methodology). Slice 2 = browser chat MVP consuming the wire/transport-contract + metrics. Cross-repo contract changes are couriered via the user (ORCHESTRATOR §7); `lsp references` does not span repos. |
