Skip to content

v3.3.1 Luxor

Choose a tag to compare

@amrmelsayed amrmelsayed released this 18 Aug 12:30
· 998 commits to main since this release

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 under BRIDGE_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 to codev.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 (sendCanvasCommand on the sdk controller
    subpath) — the groundwork the deck's review features build on.
  • #1420 / #1425 — Hands-free review comments: a composer-open-or-submit canvas 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.
  • #1489afx reset is now afx refresh: same behaviour and safety gates; the old
    name read as destructive. reset survives 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 H sends the symbol or hunk under the cursor to
    the builder's terminal; no selection, nothing auto-submitted.
  • #1412 — Clickable #N / PR #N in terminals: issue and PR references in any
    terminal are Cmd/Ctrl+clickable; codev.terminalLinks.issueTarget picks the target.
  • #1179 — Open issue or PR by number: direct View Issue/PR #N rows in backlog search
    plus Codev: 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 /controller is a true capability surface via createControllerClient(...) — 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; the pr
    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-key and send it in the codev-tower-key header (WebSocket clients:
    the codev-key.<key> subprotocol, handled by the sdk).
  • sdk ./controller no longer exports TowerClient (#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, then afx 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 (Codev by cluesmith,
    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 refresh rename (#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.