Files
fusion/packages/dashboard/app/components/ActiveAgentsPanel.css
Fusion 48208db9b0 feat(FN-2926): merge fusion/fn-2926
- Chat grouped tool calls refactored out of `ChatToolCalls.tsx` into inline rendering in `ChatView.tsx`, with updated styling and new tests; summary/expand logic for grouped calls updated
- New `QuickChatFAB` component added with styles, replacing the old `ChatToolCalls` inline callout with a persistent quick-access button
- Settings modal enhanced with agent runtime routes (register/unregister, run management) and memory settings routes (export, update limits)
- Remote access provider adapters updated to support real QR codes and live Tailscale URL sharing in TUI dashboard
- TUI dashboard app/controller/state updated to surface remote node status and shortcut hints
- `AgentsView` component updated with new layout and styling, plus comprehensive tests
- Route registration and agent runs tests updated to match new runtime API shape
- `surface-hover` fallback assertion aligned across tests
- Bundled dependency updates in `pnpm-lock.yaml`

Commits merged:
- test(FN-2926): align surface-hover fallback assertion
- feat(FN-2926): complete Steps 2-4 — inline grouped tool-call rendering and tests
- feat(FN-2926): complete Step 3 — refine grouped tool-call styles
- feat(FN-2926): complete Step 1 — update grouped tool call summary logic
- feat(remote): real QR codes, live tailscale URL, TUI status & shortcut
- feat(FN-2931): merge fusion/fn-2931
- feat(FN-2925): merge fusion/fn-2925
- feat(FN-2903): merge fusion/fn-2903

Files changed:
.../commands/dashboard-tui/__tests__/app.test.tsx  |   9 +-
 packages/cli/src/commands/dashboard-tui/app.tsx    |  97 +++++++++++--
 .../cli/src/commands/dashboard-tui/controller.ts   |  31 ++++
 packages/cli/src/commands/dashboard-tui/state.ts   |   9 +-
 packages/cli/src/commands/dashboard.ts             |   3 +-
 .../app/__tests__/status-colors-theme.test.ts      |   4 +-
 packages/dashboard/app/components/AgentsView.css   |  20 ++-
 packages/dashboard/app/components/AgentsView.tsx   |  11 +-
 .../dashboard/app/components/ChatToolCalls.tsx     | 160 ---------------------
 packages/dashboard/app/components/ChatView.css     |  53 +++----
 packages/dashboard/app/components/ChatView.tsx     | 131 ++++++++++++++++-
 packages/dashboard/app/components/QuickChatFAB.css |  87 ++++++-----
 packages/dashboard/app/components/QuickChatFAB.tsx | 124 +++++++++++++++-
 .../dashboard/app/components/SettingsModal.css     |  21 +++
 .../dashboard/app/components/SettingsModal.tsx     |  72 +++++++++-
 .../app/components/__tests__/AgentsView.test.tsx   |  37 +++++
 .../app/components/__tests__/ChatView.test.tsx     |  83 +++++++++--
 .../app/components/__tests__/QuickChatFAB.test.tsx |  68 ++++++---
 .../components/__tests__/SettingsModal.test.tsx    |  12 +-
 packages/dashboard/package.json                    |   2 +
 .../src/__tests__/routes-agent-runs.test.ts        |  13 +-
 .../src/routes/register-agent-runtime-routes.ts    |  49 ++++---
 .../src/routes/register-settings-memory-routes.ts  |  36 ++++-
 packages/engine/src/project-engine.ts              |   4 +-
 .../engine/src/remote-access/provider-adapters.ts  |  14 +-
 pnpm-lock.yaml                                     | 113 +++++++++++++++
 26 files changed, 933 insertions(+), 330 deletions(-)

Fusion-Task-Id: FN-2926
2026-04-29 13:26:25 -07:00

150 lines
2.9 KiB
CSS

/* === Active Agents Panel === */
.active-agents-panel {
margin-bottom: var(--space-lg);
}
.active-agents-panel-header {
display: flex;
align-items: center;
gap: var(--space-sm);
font-size: 13px;
font-weight: 600;
color: var(--text-muted);
margin-bottom: var(--space-md);
}
.active-agents-grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
gap: var(--space-md);
}
.live-agent-card {
display: flex;
flex-direction: column;
gap: var(--space-sm);
padding: var(--space-md);
background: var(--card);
border: 1px solid var(--border);
border-radius: var(--radius-md);
}
.live-agent-card-header {
display: flex;
align-items: center;
justify-content: space-between;
gap: var(--space-sm);
}
.live-agent-card-name {
display: flex;
align-items: center;
gap: var(--space-sm);
font-weight: 600;
font-size: 13px;
}
.live-agent-pulse {
width: 8px;
height: 8px;
background: var(--color-success);
border-radius: 50%;
animation: pulse 1.5s infinite;
}
.live-agent-task {
font-family: var(--font-mono);
}
.live-agent-card-transcript {
font-family: var(--font-mono);
font-size: 11px;
line-height: 1.5;
color: var(--text-muted);
max-height: 120px;
overflow-y: auto;
}
.live-agent-card-empty {
display: flex;
flex-direction: column;
gap: var(--space-xs);
}
.live-agent-card-status {
font-style: normal;
font-weight: 500;
color: var(--text-primary);
opacity: 1;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.live-agent-card-status-sub {
font-style: italic;
opacity: 0.6;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.live-agent-card-line {
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.live-agent-card-footer {
display: flex;
align-items: center;
justify-content: space-between;
font-size: calc(var(--space-sm) + var(--space-xs) * 0.75);
color: var(--text-muted);
padding-top: var(--space-sm);
border-top: 1px solid var(--border);
}
.live-agent-streaming-dot {
color: var(--color-success);
animation: pulse 1.5s infinite;
}
.live-agent-card-footer-actions {
display: flex;
align-items: center;
gap: var(--space-sm);
}
.live-agent-card-logs-btn {
display: inline-flex;
align-items: center;
gap: var(--space-xs);
padding: var(--space-xs) var(--space-sm);
font-size: 11px;
color: var(--text-secondary);
background: transparent;
border: 1px solid var(--border);
border-radius: var(--radius-sm);
cursor: pointer;
transition: background 0.15s, color 0.15s, border-color 0.15s;
}
.live-agent-card-logs-btn:hover {
background: var(--bg-hover);
color: var(--text-primary);
border-color: var(--border-strong, var(--border));
}
@media (max-width: 768px) {
.active-agents-grid {
grid-template-columns: 1fr;
}
.live-agent-card {
min-width: 0;
overflow: hidden;
}
}