dashboard: add Status column to devices table#474
Conversation
|
You need to do this to v1 dashboard! The devices table already exists in v1, you just have to add the new column. Rebase from main |
State A — at least one declared credential needs setup: red link
to Settings ("{N} credentials not connected. Click to configure").
State B — every credential connected: green dot + the device's
most recent action (method · endpoint/host · path · age), live
from the existing /api/events SSE feed.
Folds the existing per-row status dot's signal into the new
column so the row carries the same info in a single, actionable
place (cl-zf15).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
25596fb to
166538d
Compare
|
[bot-reply]
|
|
Start a local gateway, configure and seed it with realistic data, and take some screenshots. I want to see several devices in the devices table. I want to see some devices in state A, and some devices in state B (with the last action). You can fake all the data by writing directly to the sqlite |
|
[bot-reply] Devices table — Status columnThe table renders both states inline, in source order:
Full dashboard viewFor context, the full page with HITL pending + Live Requests panels below the table: Verified breakdown from
Screenshots are committed to the |
Update the screenshots after all these changes. Make sure in the screenshots there's at least one example of each action state. |
Addresses PR #474 review: - Latency text replaced with a state-of-action glyph: parsing (in-flight start), awaiting verdict (hitl_async_pending), request forwarded (terminal, no upstream status), response forwarded (terminal with status code), denied (rule/approver deny verdict). - Green dot replaced with the brand logo of the credential bound to the endpoint that processed the request (falls back to a neutral globe glyph for unbound endpoints). - Action body (endpoint/host + path) now truncates with an ellipsis inside a flex container so long URLs no longer push the row wide. - Status column pinned to 380px (table minWidth bumped to 940) and the "Click to configure" link marked whitespace-nowrap, so the call-to-action stays on one line at every breakpoint. State A "needs setup" path is unchanged. The SSE subscriber now also surfaces phase="start" events so the row can flip live from parsing to its terminal state without waiting on a phase="end" gap. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
[bot-reply]
Behind the scenes, Devices table — new Status columnShowcase rows pinned to each of the five action states (pinned via a dev-only seed override; reverted from the PR commit): Top of the table (sorted by IP) shows Full devices page |
|
- ParsingGlyph: code-bracket `</>` with a magnifier laid on top so the state reads as "request body being inspected" rather than a bare search icon. - IP column: 140 → 200 px (table minWidth 940 → 1000) so longer IPv6 external addresses stop ellipsis-clipping inside the cell.
|
[bot-reply]
Holding off on regenerating the screenshots in this round so the polecat finishes on the requested change — happy to refresh them in a follow-up if you'd like to see the new glyph + un-clipped IP column inline. |
|
Refresh the screenshots |
|
[bot-reply] Devices table — new parsing glyph + wider IP columnShowcase rows (pinned via a dev-only seed override, reverted from the PR commit) cover all five action states without overlap:
IP column now renders the full Full devices page |
|


Adds a per-row Status column to the existing v1 Devices table
(
dashboard/src/components/AgentsTable.tsx).Status column
renders
"{N} credentials not connected. Click to configure",linked to
#/settingsso the operator can connect in one click.device's most recent action (
method · endpoint/host · path · age).State B is live: subscribes to the existing
/api/eventsSSEstream (same feed
LiveRequestsuses), batches updates viarequestAnimationFrame, and keys the latest event peragent_ipso a row only updates when its own device produces a new action.
Notes
needsActionhelperjoining
Agent.integrationsagainstIntegration.connected—no new backend queries.
removed; the new Status column carries the same signal in a
more actionable form.
Test plan
Status column.
credential, confirm the Status cell renders the count + link
and clicking it lands on
#/settings.and the last-action text updates as the device makes new
requests.
cd dashboard && deno task format:check && deno task lint && deno task buildare clean.