Skip to content

Wave 1 — the multi-agent console (#909) - #1008

Merged
hachej merged 100 commits into
mainfrom
integration/wave-1-final
Jul 31, 2026
Merged

Wave 1 — the multi-agent console (#909)#1008
hachej merged 100 commits into
mainfrom
integration/wave-1-final

Conversation

@hachej

@hachej hachej commented Jul 31, 2026

Copy link
Copy Markdown
Owner

Wave 1 — the multi-agent console

Delivers Wave 1 of docs/DIRECTION.md: multiple agents coexisting in one
workspace, each with the same capabilities a single agent has today. 17 PRs already reviewed and
merged onto the integration branch; this is the whole wave landing on main as one unit.

103 files changed, +10511 / -1493 vs main.

What changes for a user

  • The left pane is Workspace / Agents / Pinned / Chats — collapsible sections, one unified
    session list filtered by agent, not a session tree nested under each agent.
  • Each agent row is a label plus its own + ⧉ ⚡ actions. The row itself is not clickable; only
    the icons are.
  • The active agent's name appears in the top bar, before the session name.
  • Pinned chats are shared across agents and pin-first ordering is restored.
  • Two agents can hold open chats side by side; gateway errors surface their real message instead
    of a bare status code, and sessions orphaned by a restart go read-only rather than vanishing.

What changes underneath

The browser is addressed per agent (/api/v1/agents/{agentTypeId}/sessions/...) rather than going
through the legacy single-agent wire. Native session adoption and rename are re-landed on that
addressed wire, after the earlier attempt (#811) was reverted for three regressions.

Verification

Gate Result
Agent suite, serial (--no-file-parallelism) 201 files / 1871 tests passed, 0 failed
typecheck / lint / lint:invariants green
full-app storage-scope P0 triple, real auth 200 / 200 / 421 AGENT_HOST_SCOPE_VIOLATION
full-app GET /api/v1/agents, real auth both agents returned
Playground on the merged branch sections render, 4 launchers, 0 comboboxes, 0 page errors
Both agents accept prompts 202, PARITY_OK in session state
full-app e2e (new CI job) 8/8

The P0 triple is the bug that made the full-app UI unusable: case 1 is what the browser actually
sends, case 3 proves a genuinely foreign scope is rejected with the right status rather than the
500 that a missing statusCode alias used to produce.

An earlier agent-suite run showed 6 timeout failures under load average 74. Re-run serially at
load 1.9 on the same code: fully green. No non-timeout failure ever appeared.

Reviewer notes — two things NOT proven

  1. Per-agent model binding rests on inference, not observation. The merge has an empty diff
    across the entire model-policy path (buildAgentComposition.ts, createHarness.ts, models/,
    realAgentFleet.ts) across all 9 merge commits, so it cannot have changed. That is sound
    reasoning about the merge — it is not the same as watching two agents answer on two different
    models.
  2. No whole-diff review yet. The wave was reviewed as 17 separate PRs. Cross-PR interaction is
    exactly what per-PR review is blind to, and this wave rewired the left pane, the session wire,
    and the agent host in different PRs. A review of the combined diff is the remaining gap.

Found along the way (filed, not fixed here)

  • pnpm --filter full-app migrate does not load apps/full-app/.env — fails claiming auth.secret
    and encryption.workspaceSettingsKey are empty when both are present and correct. Blames your
    config; the fault is the loader.
  • /dev-login 404s.

Both are onboarding defects, tracked on the .32 bead alongside the email_verified requirement.

Constituent PRs

Refs #909

🤖 Generated with Claude Code

https://claude.ai/code/session_01C3rgJRALeGp4uwRwsnnmoW

hachej and others added 30 commits July 27, 2026 13:50
One direction across multi-agent console, streaming, F-graph/Environments,
BYOK, MCP, sandbox, v2 remote. Waves with explicit triggers; decision log;
plan folders demoted to subordinate detail. Grilled decision-by-decision
with the owner before authoring.

Co-Authored-By: Claude Opus 5 (1M context) <[email protected]>
Claude-Session: https://claude.ai/code/session_01NxQWirpWsYV5Y6Tz8Txy5i
docs: DIRECTION.md — the one sequencing spine (owner-ratified waves)
#909 fix(agent): make CSS builds CWD-independent
#909 feat(front): address the browser wire per agent
#909 feat(console): multi-agent switcher, grouping, presence
#909 re-land native session adoption and rename menu
#909 fix(workspace): show multi-agent chats side by side
… actions

UI Review's mobile hard gate flagged the new per-agent New chat row
(20px tall) and its split-pane icon affordance (14x24px) as below the
minimum tappable size. Bump the row and icon buttons to 44px (h-11 /
size-11) on mobile/touch and keep the existing compact desktop sizing
(sm:h-8 / sm:size-6, hover-reveal) so the split/quick-chat affordance is
always reachable on touch instead of only on :hover.
Primary per-agent creation replaced the active pane whenever the selected agent was non-empty. Creating Beta while Alpha streamed therefore unmounted Alpha and dropped its transcript and live connection.\n\nResolve the active pane from retained pane ids and insert the new session when its owner differs, while preserving same-owner replacement semantics.
@hachej

hachej commented Jul 31, 2026

Copy link
Copy Markdown
Owner Author

Ownership update — whole-diff review loop

I reconciled the final branch with missing constituent PR #1007 and pushed review fixes at 1bfb83888.

Whole-diff findings fixed

  • Native-first draft deletion now tombstones/deletes the adopted durable session, suppresses refresh resurrection, and remains retryable after network/HTTP failure.
  • Pinned local chat keys migrate to the native (agentTypeId, sessionId) key on adoption.
  • Both addressed and primary session snapshots publish updatedAt/ephemeral changes.
  • Pin/split/menu actions remain hover/focus-hidden on hover-capable desktop but are reachable on touch/no-hover.

Proof

  • Agent focused: 2 files / 17 tests passed; Agent typecheck passed.
  • Workspace full affected front suite: 2 files / 89 tests passed.
  • Workspace session-row suites: 2 files / 21 tests passed; Workspace typecheck passed.
  • Independent final re-review: CLEAN.
  • Server/auth/frozen-contract whole-diff review: CLEAN; packages/agent/src/shared/** remains unchanged.

Remaining merge blocker

Equivalent rebuilds can still change the persisted runtime identity because v1 conflates semantic compatibility with package/deployment bytes. The isolated stacked fix is implemented at bb0dcf954 and is in standards/spec/thermonuclear review. No live authorization for the historical 332936… pin is included: it remains fail-closed until that exact old hash is reproduced and audited.

I will not request #1008 merge until that blocker and the Wave 1 exit-bar PRs complete their review/proof loops.

@hachej hachej added release-candidate Run the release-candidate built-dist gate and full CI ready-for-human Boring v2: human judgment, access, approval, review, or merge needed and removed ready-for-human Boring v2: human judgment, access, approval, review, or merge needed labels Jul 31, 2026
@hachej
hachej merged commit 44d5f49 into main Jul 31, 2026
73 of 91 checks passed
hachej added a commit that referenced this pull request Jul 31, 2026
Revert "Merge pull request #1008 from hachej/integration/wave-1-final"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

release-candidate Run the release-candidate built-dist gate and full CI

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant