feat(dashboard): redesign harness UI as an agent run control center#331
Open
alexk-dev wants to merge 6 commits into
Open
feat(dashboard): redesign harness UI as an agent run control center#331alexk-dev wants to merge 6 commits into
alexk-dev wants to merge 6 commits into
Conversation
Replaces the legacy chat dashboard chrome with a clean, dark-first agent harness composed of an icon rail, secondary sidebar, top bar with status pills, main agent thread and a tabbed inspector panel. Adds the agent run primitives (TaskHeader, PlanBlock, ToolCallTimeline, IncidentCard, StatusPill) per the redesign spec, a Cmd/Ctrl+K command palette, session export and persisted layout preferences. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Wraps ChatPage in HarnessChatLayout so the redesigned TaskHeader appears above the active conversation, then collapses the legacy in-page duplicates of the harness chrome: - ContextPanel + ContextPanel offcanvas hidden — InspectorPanel covers the same telemetry/plan/tools/logs/memory surface. - ChatSessionTabs + ChatToolbar hidden in standalone mode — recent sessions live in the IconRail/SecondarySidebar and connection / tier / Plan ON state lives in HarnessTopBar. - chat-container, chat-window, message-bubble, chat-input-area, starter prompts and inline tool-call cards repainted with --hns-* tokens so the thread matches the dark agent-run aesthetic. useChatRunSummary derives an AgentRunStatus + duration counter from the runtime store and useRecentSessions title, so TaskHeader keeps a live "Started 10:31 AM · 12m 45s · N steps" subtitle without needing new backend fields. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Drops the separate IconRail in favour of a single sidebar that defaults
to 60px (icons only) and expands to 280px on hover or focus, painted in
the harness palette. Brand and version footer are folded into the
sidebar so the left chrome no longer feels like "old + new" stacked.
Inspector polish:
- Tools tab no longer shows a demo IncidentCard; only a §23 reference
timeline appears when there are no live tool calls.
- Plan tab swaps the demo PlanBlock for an explanatory placeholder when
Plan mode is OFF; the sample render only appears once Plan mode is
toggled on so users see the layout context only when relevant.
- Logs tab fetches the system feed but filters by the active
conversationKey + sessionRecordId substring by default; a toggle
expands the view back to runtime-wide logs when needed.
- Compact context action now calls /sessions/{id}/compact and surfaces
the result via toast; export session reuses the existing custom event
hook; debug bundle remains a placeholder until the runtime ships a
snapshot endpoint.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Adds /api/memory/relevant — a thin read-only endpoint that wraps MemoryComponent.queryItems, anchored on the active conversation key so the dashboard can surface knowledge artifacts (facts, preferences, constraints, decisions, failures, fixes, tasks, command results) related to the current chat instead of memory presets. The dashboard Inspector "Memory" tab is rebuilt around this endpoint: relevant memories with type badges (Fact / Preference / Constraint / Failure / Task / Decision / Fix / Command), markdown-friendly content preview, "Added X ago · In N sessions" footer, type filter, search field and an auto-refresh toggle. The "View all memories" link routes to /settings/memory for the full inventory. Backend: - RelevantMemoryResponse DTO in golemcore-bot-client - MemoryController in golemcore-bot-app with 3 unit tests covering scope chain construction, limit clamping and global fallback Frontend: - src/api/memory.ts + src/hooks/useRelevantMemories.ts - MemoryArtifactCard + memoryFormat helpers (with vitest coverage) - InspectorMemoryTab rewritten to consume the new feed and infer the query hint from the most recent user message Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
ArchUnit's MavenModuleDependencyArchitectureTest forbids Lombok's @requiredargsconstructor on production beans — controllers in this codebase use private final fields with an explicit constructor (cf. PlansController, SessionsController). Drop the Lombok annotation and write the constructor by hand. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
The button routed to /settings/memory which opens the memory preset editor, not a list of knowledge artifacts. Until a dedicated all-memories page exists, removing the link is clearer than misdirecting the user. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
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.



Summary
golemcore_harness_ui_redesign_spec.md: icon rail, secondary sidebar, top bar with status pills, tabbed inspector, and a slim command-palette layer.TaskHeader,PlanBlock,ToolCallTimeline,IncidentCard,ApprovalRequestCard,ArtifactCard,StatusPill) plus an event normalizer (normalizeRunEvents) so future plan/tool/incident streams have a stable view-model boundary./system/logsviewer with level + search filters, and memory presets.inspectorStore), and a one-shot session JSON export hook.Architecture
Key design decisions
--hns-*inharness.scssand switch viadata-harness="dark|light"on<html>, so the legacy--gc-*palette and existing pages keep working untouched.<aside class="harness-sidebar sidebar" aria-label="Primary navigation">withOpen / Close navigationcontrols and a.sidebar-overlay-equivalent backdrop, sodashboard-menu-smokeanddashboard-mobile-responsivePlaywright tests pass without test edits.normalizeRunEventsshields the new components from raw chat payloads — the inspector surfaces live tool calls today (parsed from[Tool: …][Result: …]markers) and falls back to the §23 sample once the runtime emits structured plan/tool events.Cmd/Ctrl+Klistener and a custom event (harness:export-session) to decouple commands from concrete handlers — easy to extend without touching the registry.any, no inline styles (progress fill uses a CSS custom property),useEffectblocks carry justifying comments, persisted state goes through Zustandpersistmiddleware.Files changed
components/layout/DashboardLayout.tsx,components/layout/harness/{HarnessShell,HarnessTopBar,IconRail,SecondarySidebar,SidebarChatSessionsList,sidebarNavGroups,topbarStatus,useRailVersionLabel}.tsx/tsSidebar.tsx/Topbar.tsxremoved.components/layout/harness/InspectorPanel.tsx,components/layout/harness/inspector/{InspectorSummaryTab,InspectorContextCard,InspectorActionsCard,InspectorPlanTab,InspectorToolsTab,InspectorLogsTab,InspectorMemoryTab,contextUsage}.tsx/tscomponents/agentRun/{types,agentRunFormat,normalizeRunEvents,sampleAgentRun,StatusPill,TaskHeader,PlanBlock,PlanStepRow,ToolCallTimeline,ToolCallRow,IncidentCard,ApprovalRequestCard,ArtifactCard}.tsx/ts(+ unit tests for each)components/commandPalette/{CommandPalette,commandRegistry,fuzzyMatch,useCommandPaletteShortcut,useSessionExport}.tsx/ts(+ test)hooks/useInspectorLogs.ts/system/logsused by the inspector.store/inspectorStore.ts,store/commandPaletteStore.tsstyles/harness.scss,styles/agentRun.scssmain.tsxCompatibility
/system/logs,/plans, memory presets) are reused as-is.ChatRuntimeController, all chat hooks/stores, and the routing surface are unchanged; legacy pages keep their layout because the new shell still appliesmin-width: 0; min-height: 0;flex constraints.mobile-open, hamburger togglesOpen/Close navigation, and the backdrop carries theClose navigation menulabel — overlap-checking Playwright tests pass.themeStorelight/dark toggle still works; the harness palette tracks it viadata-harness.Verification
npm run lint— 0 errors (4 pre-existing warnings, unrelated files).npx tsc --noEmit— clean.npm test— 125 files / 463 tests passing (added 25 new unit tests for the harness components, palette and adapter).npm run build— succeeds.npx playwright test(chrome) ondashboard-menu-smoke,dashboard-mobile-responsive,chat-multi-session,workspace-layout,mobile-audit— 12/12 passed.