feat(console): combine Identity + Remote into one status box - #93
Merged
Conversation
Brett: clicking "prod/mira" in the roster "isn't working."
`openAgentForRow` (main.ts) already had two silent-failure paths — no
matching `agents.toml` entry, or a matching entry found `disabled` (no
url/token configured) — and both only reached `note()`, which writes to the
Activity tab of the (closed by default) Debug drawer. A click that can't
open anything looked identical to a dead button; nothing at the point of the
click told you why. This is almost certainly what's actually going on for
mira in Brett's real config (mira's ECS service is scaled to 0 today, so it
may not be a live/configured `agents.toml` entry) — but the silent failure
itself was worth fixing regardless of which of the two cases it is.
Now `openAgentForRow` takes the clicked roster button and, on either failure
path, flashes it — relabeled ("not configured" / "no console") and disabled
for ~1.8s — before restoring, so the click visibly does *something* right
where it happened. Also tightened the "not found" message: it used to always
say "no agent console registered," which was misleading for the management
agent's own roster row (it *is* registered — its console is just the
persistent one above, already open) — now notes that possibility too.
## Verification
- `tsc --noEmit` — clean
- `vitest run` — 103/103 passing (no behavior in tested pure modules changed)
- `vite build` — clean
- Playwright: confirmed an ordinary configured agent (mira) still opens
normally on click, and the management agent's roster row (which has no
`data-agent` selector to synthetic-click) now flashes "no console" for
~1.8s instead of silently doing nothing, then restores its label.
Still need Brett to confirm on his real config whether mira's `agents.toml`
entry exists/is configured — the flash + note will now say which case it is
next time he clicks it.
🤖 Generated by Orca ('ecs-claude').
Brett: "MANAGING oab" and "REMOTE" are similar, possible to combine?
They're two different failure modes (bad AWS credentials vs. no live ACP
connection) so kept as two independently-rendered/tested pure functions —
but both are supporting status for the same persistent Agent chat, so
visually they now read as one box instead of two floating ones.
## What
- `#remote` moves into the persistent side column, right after `#identity`,
wrapped in a new `.mgmt-combo` div — no changes to `identityHtml`/
`remoteHtml` or their tests, just where their mount points sit and how the
two boxes are bordered (`.identity` rounds only its top corners and drops
its bottom border; `.remote` rounds only its bottom corners — one seam,
not a double border).
- Remote used to hide during fleet/agent drill-down (a Fleets-screen-only
section, per an earlier request); now that it's part of the always-visible
side column, that no longer made sense — it stays visible at every depth,
same as Identity and Agent chat, since it's literally the connection
status backing that chat. `updateScreen()`'s `remoteEl.hidden` toggle
dropped; Compose still hides on drill-down (unchanged).
## Verification
- `tsc --noEmit` — clean
- `vitest run` — 103/103 passing (no render-function behavior changed)
- `vite build` — clean
- Playwright: confirmed zero gap between the two sections (one continuous
box), and that Remote now stays visible after drilling into a fleet while
Compose still hides.
🤖 Generated by Orca ('ecs-claude').
brettchien
added a commit
that referenced
this pull request
Aug 20, 2026
Brett: also remove MANAGING oab panel. ## What - Dropped `#identity` (index.html) and the now-single-child `.mgmt-combo` wrapper (PR #93) — `#remote` sits directly in the side column again, with its own full border-radius back (it was only split top/bottom to share a box with Identity). - Removed `identityHtml`/`renderIdentity`/`kindBadge`/`KIND_CLASS` (render.ts) and every `refreshIdentity()` call site (main.ts) + the function itself. Kept `field()` — it's shared with `agentConsoleHeaderHtml`'s `.ac-fields` — and `Source.runtimeContext()`/ `RuntimeContext`/`FIXTURE_RUNTIME_CONTEXT` (backend contract + its fixture, not UI surface — same call as leaving `Source.fsList` alone when the Files panel came out). - CSS: removed the identity-only rules (`.identity-wrap`, `.identity`, `.id-head`, `.id-cluster`, `.id-as`, `.kind*`, `.id-grid`, `.id-warn`, `.id-ok`); kept `.id-field`/`.id-field .k`/`.id-field code` (still rendered by the agent console header). - `render.test.ts`: dropped the `identityHtml` describe block + its `ctx()` fixture helper. ## Verification - `tsc --noEmit` — clean - `vitest run` — 97/97 passing (6 fewer: the removed identityHtml tests) - `vite build` — clean; `dist/index.html` down to 12.34kB - Playwright: confirmed `#identity` is gone from the DOM, `#remote` renders in its own full-radius box, and the agent console header (`.ac-fields .id-field`) still renders correctly — the shared `field()` helper wasn't touched. 🤖 Generated by Orca ('ecs-claude').
brettchien
added a commit
that referenced
this pull request
Aug 20, 2026
…y panel
Brett: hard to understand how to use the Compose panel, let's remove it
first — then also remove the MANAGING oab panel.
Compose: it was always a duplicate surface — the ADR itself flagged this at
slice 6 ("where template/overlay authoring moves to once this standing
section goes away isn't decided"). The `[+ New fleet]`/`[+ Add instance]`
deploy panel (`deploy.ts`) already reaches the identical compose→preview→
deploy engine as an action, with its own template/overlay pickers, preview,
and deploy-to-ECS step — removing the standalone one loses no capability,
just the redundant standing "Library" JSON-authoring surface.
Identity: `#identity`'s content (which AWS principal is managing this
cluster) is gone along with `.mgmt-combo` (the shared box PR #93 built for
it) — `#remote` is back to its own full-radius box, standalone.
## What
- Dropped `#compose-standalone` + its init (`initComposeTab`, `compose.ts`)
and the now-Fleets-screen-only `updateScreen()` toggle for it. Trimmed
`compose.ts` to the pure helpers `deploy.ts` still imports
(`renderPreviewHtml`, `libraryNames`, the `Library`/`BundlePreview` types);
`compose.test.ts` already only covered those, so no test changes there.
- Dropped `#identity`, `identityHtml`/`renderIdentity`/`kindBadge`
(render.ts), and every `refreshIdentity()` call site (main.ts). Kept
`field()` — shared with `agentConsoleHeaderHtml`'s `.ac-fields` — and
`Source.runtimeContext()`/`RuntimeContext`/its fixture (backend contract,
not UI surface — same call as leaving `Source.fsList` alone when the Files
panel came out).
- CSS: removed both panels' exclusive rules; kept everything still shared
with `deploy.ts`'s compose step or the agent console header.
## Verification
- `tsc --noEmit` — clean
- `vitest run` — 97/97 passing
- `vite build` — clean; `dist/index.html` 17.27kB → 12.34kB
- Playwright: confirmed both panels are gone from the DOM, `[+ New fleet]`
still reaches Compose normally, and the agent console header (which reuses
`field()`) still renders.
🤖 Generated by Orca ('ecs-claude').
brettchien
added a commit
that referenced
this pull request
Aug 20, 2026
…y panel (#94) Brett: hard to understand how to use the Compose panel, let's remove it first — then also remove the MANAGING oab panel. Compose: it was always a duplicate surface — the ADR itself flagged this at slice 6 ("where template/overlay authoring moves to once this standing section goes away isn't decided"). The `[+ New fleet]`/`[+ Add instance]` deploy panel (`deploy.ts`) already reaches the identical compose→preview→ deploy engine as an action, with its own template/overlay pickers, preview, and deploy-to-ECS step — removing the standalone one loses no capability, just the redundant standing "Library" JSON-authoring surface. Identity: `#identity`'s content (which AWS principal is managing this cluster) is gone along with `.mgmt-combo` (the shared box PR #93 built for it) — `#remote` is back to its own full-radius box, standalone. ## What - Dropped `#compose-standalone` + its init (`initComposeTab`, `compose.ts`) and the now-Fleets-screen-only `updateScreen()` toggle for it. Trimmed `compose.ts` to the pure helpers `deploy.ts` still imports (`renderPreviewHtml`, `libraryNames`, the `Library`/`BundlePreview` types); `compose.test.ts` already only covered those, so no test changes there. - Dropped `#identity`, `identityHtml`/`renderIdentity`/`kindBadge` (render.ts), and every `refreshIdentity()` call site (main.ts). Kept `field()` — shared with `agentConsoleHeaderHtml`'s `.ac-fields` — and `Source.runtimeContext()`/`RuntimeContext`/its fixture (backend contract, not UI surface — same call as leaving `Source.fsList` alone when the Files panel came out). - CSS: removed both panels' exclusive rules; kept everything still shared with `deploy.ts`'s compose step or the agent console header. ## Verification - `tsc --noEmit` — clean - `vitest run` — 97/97 passing - `vite build` — clean; `dist/index.html` 17.27kB → 12.34kB - Playwright: confirmed both panels are gone from the DOM, `[+ New fleet]` still reaches Compose normally, and the agent console header (which reuses `field()`) still renders. 🤖 Generated by Orca ('ecs-claude').
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Brett: "MANAGING oab" and "REMOTE" are similar, possible to combine?
They're two different failure modes (bad AWS credentials vs. no live ACP connection) so kept as two independently-rendered/tested pure functions — but both are supporting status for the same persistent Agent chat, so visually they now read as one box instead of two floating ones.
What
#remotemoves into the persistent side column, right after#identity, wrapped in a new.mgmt-combodiv — no changes toidentityHtml/remoteHtmlor their tests, just where their mount points sit and how the two boxes are bordered (.identityrounds only its top corners and drops its bottom border;.remoterounds only its bottom corners — one seam, not a double border).updateScreen()'sremoteEl.hiddentoggle dropped; Compose still hides on drill-down (unchanged).Verification
tsc --noEmit— cleanvitest run— 103/103 passing (no render-function behavior changed)vite build— clean🤖 Generated by Orca ('ecs-claude').