Watch
0
0
Fork
You've already forked hyperhive
0

swarm-ui: open an agent's details in a dialog from its terminal tab

The terminal page gets an agent badge (icon and name) that opens the agent's detail panel in a dialog over the terminal, without the terminal preview. The panel body and the actions on an agent (declare a wanted state, link an account, with their confirm and form dialogs) move out of the agent roster page into AgentDetail and useAgentActions, so the roster and the dialog share them. AgentIcon moves to its own file for the same reason.
This commit is contained in:
iris 2026-10-11 23:55:15 +02:00
commit 103c842890
13 changed files with 639 additions and 464 deletions

View file

@ -37,6 +37,7 @@
// the other one is. Suppressed via `fullHeight` — the full-page mount
// already IS the destination, so it has nothing further to expand to.
import { useLayoutEffect, useRef, useState } from "preact/hooks";
import type { ComponentChildren } from "preact";
import { Badge, type BadgeTone } from "@hive/shared/badge.js";
import { ExpandIcon } from "@hive/shared/icons.js";
import { Row } from "@hive/shared/term-row.js";
@ -189,6 +190,7 @@ export function AgentTermPreview({
subagent,
showHeaderBadges = true,
fullHeight = false,
leading,
}: {
agentName: string;
// Set: this is one of `agentName`'s subagents, output only like the
@ -196,6 +198,9 @@ export function AgentTermPreview({
subagent?: string;
showHeaderBadges?: boolean;
fullHeight?: boolean;
// A badge ahead of the connection badge, for the full-tab mount's
// link back to the agent's details.
leading?: ComponentChildren;
}) {
const paths = termPaths(agentName, subagent);
const { rows, connection } = useSwarmTermStream(paths.stream);
@ -236,6 +241,7 @@ export function AgentTermPreview({
it has no expand trigger. */}
<div class="ui-agent-term-preview-controls">
<div class="ui-agent-term-preview-header-badges">
{leading}
<Badge
tone={CONNECTION_TONE[connection]}
value={CONNECTION_LABEL[connection]}