v3.3.1 Luxor
v3.3.1 Luxor
Released: 2026-08-18
Summary
v3.3.1 builds on v3.3.0 Luxor, promoted from its @next soak to
@latest alongside this release; everything below is new since the 3.3.0 cut. Approval
gates now relay through the builder's owning architect instead of executing silently in
the extension, Tower authenticates every request to its local API, spec/plan review gains
zoom, horizontal reading, and batched review comments on builder diffs, and the Stream
Deck becomes a two-page cockpit (builders board + architects board) with phase-aware
dials.
Headlines
- #1494 — Gate approvals relay through your architect: the VS Code Approve button
delivers your decision to the builder's owning architect under a[USER via VS Code]
header and the approval runs where project state lives, so agents see every decision
instead of discovering it later. Offline or unknown owner → explicit refusal, never a
silent reroute; held deliveries are reported as held, never as approved. - PR #1421 — Tower authenticates its local API: every non-public HTTP route and
WebSocket upgrade now requires the shared local key (~/.agent-farm/local-key), checked
at a single choke point, failing closed; CORS is pinned to a fixed allowlist and
enforcement is mandatory underBRIDGE_MODE. First-party clients send the key
automatically — nothing to configure. Key rotation is a tracked follow-up. - #1410 — Stream Deck+: a two-zone builder cockpit: top row is a live builder window
scrolled by the Select dial, bottom row a fixed action palette (approve gate, run dev,
send feedback, open terminal) always acting on the selected builder. Feedback follows the
workspace's delivery mode (send vs queue), touchstrips name the live mode, and selection
stays in step with VS Code in both directions. - #1037 — Review comments on builder diffs: compose comments in inline threads via
codelens or context menu, collect them in a per-builder queue that survives reloads, and
submit the batch as one composed review typed into the builder's prompt for a final
read-and-Enter. One-click PTY injection stays for quick reactions. - #1380 / #1070 — Horizontal reading and zoom for spec/plan review: the annotation
viewer lays long documents out in side-by-side columns (column-aware wheel and keyboard,
nothing splits mid-block), and title-bar zoom sizes the prose without rearranging the
IDE, persisted tocodev.markdownPreview.fontSize. Columns widen with the font so
zooming in keeps lines readable.
New Features
- #1401 — Canvas command channel: Tower routes navigation/comment commands to the exact
annotation-canvas view a reviewer has open (sendCanvasCommandon the sdk controller
subpath) — the groundwork the deck's review features build on. - #1420 / #1425 — Hands-free review comments: a
composer-open-or-submitcanvas command
resolved against composer state; on the deck, press Blocks to open or submit a dictated
draft, Headings to cancel — an empty draft is never submitted, a dictated one never lost. - #1400 — Review dials follow the builder's phase: Files/Changes become Headings/Blocks
on a spec or plan, with every press named on the touchstrip and failures spelled out. - #1404 — One smart key per builder: a live tile whose press opens the right artifact
for the phase (spec, plan, diff, terminal) and selects the builder for dials and actions. - #1495 / #1463 — The architects board: Architect Action keys (one tile per live
architect, press opens its terminal) on a second page via Switch Profile, plus an Open
Architect Terminal key that defaults to the selected builder's spawning architect; Open
Terminal is renamed Open Builder Terminal, placed keys relabel themselves. - #1501 — The Scroll dial scrolls a spec/plan under review: a raw viewport-pan canvas
command, engaged automatically in canvas mode; press stays builder-diff-only by design. - #1489 —
afx resetis nowafx refresh: same behaviour and safety gates; the old
name read as destructive.resetsurvives one release as a self-announcing alias. - #1381 — The bundled SD+ profile ships the finished two-page board: cockpit page plus
architects page, requiring only the Codev plugin (Elgato's dial/hotkey plugins no longer
needed). - #1073 — Keyboard forward:
Cmd/Ctrl+K Hsends the symbol or hunk under the cursor to
the builder's terminal; no selection, nothing auto-submitted. - #1412 — Clickable
#N/PR #Nin terminals: issue and PR references in any
terminal are Cmd/Ctrl+clickable;codev.terminalLinks.issueTargetpicks the target. - #1179 — Open issue or PR by number: direct
View Issue/PR #Nrows in backlog search
plusCodev: Open PR by ID(Cmd+K Shift+P), on any forge.
Improvements & Fixes
- Terminal reconnects replay a serialized screen snapshot: kilobytes instead of megabytes,
correct on arrival, no repaint dependence, works for already-running sessions (#1354). - sdk
/controlleris a true capability surface viacreateControllerClient(...)— five
controller capabilities, host/admin operations genuinely absent at runtime (#1411). - Open-architect refuses instead of substituting a different architect under the requested
name — the substitute also captured follow-up text aimed at the original (#1497). - Recently Closed sorts by recency instead of search-API relevance, on every forge (#1191).
- Annotation viewer: the add-comment "+" renders inside the hovered row itself (#1343).
- Builder row sizes itself to the selector keys you place; no hidden selected builder, no
manual slot numbers (#1465). - The Scroll dial's touchstrip names its live delivery mode and target builder, and drops
the mode qualifier when no builder is selected (#1498, #1505). - The workspace dial walks only active workspaces; selection snaps back when one
deactivates (#1403). - Builders blocked at verify-approval open the diff on press instead of a terminal, and
the review dials come alive at that gate (#1431). - Builder keys get composed, state-coded faces; presses are quiet (failures alert, success
is silent); Send Feedback, Open Terminal, and Codev Action get distinct icons; thepr
phase label renders "PR" (#1428, #1437, #1440, #1444, #1433). - The smart key's diff press lands in per-file diff mode with the dials seeded (#1414).
- The plugin declares SDK version 3 / Stream Deck 6.9 minimum, the Elgato Marketplace floor,
pinned by regression tests (#1394). - The Stream Deck plugin joins the monorepo as
apps/streamdeck, version-locked with every
release, built on@cluesmith/codev-sdk(#1347).
Breaking Changes
- Direct, unauthenticated calls to Tower's local API now fail with 401 (PR #1421).
First-party clients are unaffected; a hand-rolled script must read
~/.agent-farm/local-keyand send it in thecodev-tower-keyheader (WebSocket clients:
thecodev-key.<key>subprotocol, handled by the sdk). - sdk
./controllerno longer exportsTowerClient(#1411): controllers use
createControllerClient(...); hosts import the full client from
@cluesmith/codev-sdk/tower-client.
Migration Notes
npm install -g @cluesmith/codev@3.3.1, thenafx tower stop && afx tower start.- Custom Tower clients: add the key header (see Breaking Changes); everything else needs no
action. - The VS Code extension ships separately via the Marketplace (
Codevbycluesmith,
version 3.3.1).
Contributors
- Amr Elsayed (@amrmelsayed): the gate-approval relay (#1494), Tower local-API
authentication (PR #1421), the Stream Deck cockpit and architects board arc, and the
spec/plan review toolset. - Waleed Kadous (@waleedkadous): the
afx refreshrename (#1489), porch post-merge
completion records, and the v3.3.0 soak cut this release completes. - The architect seats and builders working under the SPIR, PIR, AIR, and BUGFIX protocols
across the PRs in this release.