Skip to content

Hermes Dashboard Plugin

Hermes dashboard plugin that shells out to the public uh CLI: FastAPI router backend (plugin_api.py), dashboard-SDK React UI bundle (mission wizard, run views, Delivery Observatory, workflow editor), esbuild config, manifests and local launcher.

Depends on: none

Used by: CLI Entry, Build and Project Tooling (1)

(Numbers are distinct file-to-file dependencies.)

File Summary Key symbols
apps/hermes-plugin/__init__.py Hermes registration seam for the dashboard-only Ultimate Harness plugin; its register hook intentionally adds no tools or hooks because the dashboard talks only to the public uh CLI. register
apps/hermes-plugin/dashboard/manifest.json Hermes dashboard plugin manifest registering the uh Ultimate Harness tab after Sessions, a sessions:bottom slot, the built dist/index.js and dist/style.css bundle, and the plugin_api.py backend.
apps/hermes-plugin/dashboard/plugin_api.py FastAPI router mounted at /api/plugins/uh that bridges the Hermes dashboard to the uh CLI and on-disk .harness/ artifacts: status, missions, runs, SSE event tails, run start/cancel, run comparison, workflows, verification, and mission creation, with safe-id validation, subprocess timeouts, retention pruning, and a uniform JSON error shape. _load_max_runs_per_mission, _UhCliRunner, set_runner, get_runner, _read_yaml, _read_text, _schedule_run_eviction, _locate_run_events, …
apps/hermes-plugin/dashboard/requirements-dev.txt Pinned test-only Python dependencies (fastapi, PyYAML, httpx, pytest, pytest-asyncio) for the isolated dashboard plugin backend test suite; runtime deps are supplied by the Hermes host.
apps/hermes-plugin/dashboard/src/adapterHealth.ts Pure helper mapping an adapter’s check result to a three-state health badge (OK, fail, unknown) so unverified adapters are no longer shown as healthy. adapterHealthBadge
apps/hermes-plugin/dashboard/src/App.tsx Root React component of the uh Hermes dashboard plugin that reads the hash route and dispatches to the Delivery Observatory, mission drilldown, wizard, and workflow viewer/editor views. App
apps/hermes-plugin/dashboard/src/cost-gauge.ts Pure per-run token and cost gauge that aggregates runtime.usage events and prices them using the cost_classes rate table from the adapter capabilities endpoint. aggregateUsage, costClassForRuntime, estimateCostUsd, formatUsd, computeGauge
apps/hermes-plugin/dashboard/src/DeliveryObservatory.tsx Delivery Observatory view rendering the safe-metadata observatory snapshot as filterable work items across Operate, Review, Observe, and Meeting perspectives, with fact-state stamps and source strips. FilterRail, SourceStrip, WorkList, SelectedWork, OperateView, ReviewView, ObserveView, MeetingView, …
apps/hermes-plugin/dashboard/src/errorPayload.ts Extracts the structured JSON error envelope from the SDK’s stringified error message by trying JSON.parse from each opening brace, supporting nested field maps. extractTrailingJsonPayload
apps/hermes-plugin/dashboard/src/index.tsx Bundle entry point that registers the plugin’s App component and the SessionsLink sessions:bottom slot with the Hermes plugin registry.
apps/hermes-plugin/dashboard/src/live-events-hooks.ts React hooks providing live SSE event tails: a run-scoped tail for RunModal and a mission-scoped tail for LiveEventsPane, both capping buffered events. useEventTail, useMissionEventTail
apps/hermes-plugin/dashboard/src/live-events-utils.ts JSX-free helpers for live run event tails: parsing event lines, labeling and classifying severity, detecting usage events, capped appending, and auto-scroll decisions. runEventsStreamPath, parseEventData, eventLabel, classifyEventSeverity, isUsageEvent, appendLiveEvent, severityRowClass, shouldAutoScrollTop, …
apps/hermes-plugin/dashboard/src/LiveEventsPane.tsx Live SSE event tail for an in-flight mission run with severity-styled rows, auto-scroll locking, a token/cost gauge built from adapter capabilities, and a confirm-guarded Stop button that cancels the run. LiveEventsPane
apps/hermes-plugin/dashboard/src/mission-compare-helpers.ts JSX-free helpers backing the compare view and replay UI: top-level runtime-result diff, LCS line diff, and run modal title and replay banner text. deepEqual, runtimeResultDiff, lineDiff, runModalTitle, replayBannerText
apps/hermes-plugin/dashboard/src/MissionCompare.tsx Side-by-side comparison view for two runs of the same mission, showing a runtime-result field diff, an LCS line diff of prompts, and aligned event streams from the /compare endpoint. RuntimeResultDiffPane, PromptDiffPane, EventsColumn, MissionCompare
apps/hermes-plugin/dashboard/src/MissionDrilldown.tsx Mission drilldown view with tabs for mission metadata, prompt, final message, diff, result, events, and verification; handles pinned or archived runs, live event tails, recent runs, and replaying a run with prior overrides. ArtifactPane, resolveEventsTarget, EventsPane, MissionMeta, MissionDrilldown
apps/hermes-plugin/dashboard/src/MissionWizard.tsx New-mission wizard form with a live YAML preview that POSTs to /missions and renders server-side per-field validation errors inline. toMissionDoc, MissionWizard
apps/hermes-plugin/dashboard/src/observatory-store.ts React hook store that fetches the observatory snapshot and holds view and filter state, deriving the filtered work-item list for the Delivery Observatory. useObservatoryStore
apps/hermes-plugin/dashboard/src/observatory-types.ts Type definitions for the Delivery Observatory snapshot contract: fact states, sources, work items, agents, decisions, evidence, events, and metrics.
apps/hermes-plugin/dashboard/src/OverviewTab.tsx Overview tab with Adapters, Missions, Recent runs, and Running panels that polls the backend every 30 seconds and pauses polling while the document is hidden. useVisibilityPolling, statusBadge, AdaptersPanel, MissionsPanel, RecentRunsPanel, RunningPanel, OverviewTab
apps/hermes-plugin/dashboard/src/recent-runs-utils.ts JSX-free helpers for the Recent runs pane: relative time and duration formatting, status and prefix filtering, multi-key sorting, and per-run artifact URLs, plus the MissionRunSummary type. formatRelative, formatDuration, filterRuns, durationMs, sortRuns, runArtifactUrl
apps/hermes-plugin/dashboard/src/RecentRunsPane.tsx Recent runs table for a mission with status-chip filtering, run_id prefix search, and sortable columns; re-exports the pure helpers from recent-runs-utils. RecentRunsPane
apps/hermes-plugin/dashboard/src/router-pure.ts Pure hash-route parsing and building helpers, safe for Node tests, that map #/missions, #/workflows, and compare routes to a ParsedRoute and fall back to overview on malformed encoding. parseQuery, parseRoute, buildHash
apps/hermes-plugin/dashboard/src/router.ts Hash-based router for the plugin shell that re-exports the pure route helpers and adds the React useHashRoute hook, avoiding react-router in the bundle. useHashRoute
apps/hermes-plugin/dashboard/src/RunModal.tsx Modal that triggers a mission run with optional runtime_config_overrides JSON, then switches to a live SSE event tail of the run with a Stop button and replay banner. RunModal
apps/hermes-plugin/dashboard/src/sdk.ts Typed accessor for the Hermes plugin SDK globals and the UH backend: exposes SDK, UI, and fmt, and provides pluginFetch with a typed PluginFetchError, EventSource helpers, and shared response types. PluginFetchError, pluginFetch, pluginEventSource, subscribeToRunEvents
apps/hermes-plugin/dashboard/src/SessionsLink.tsx Component for the Hermes sessions:bottom slot that lists recent sessions bound to UH missions via metadata.mission_id and links them to the mission drilldown. SessionsLink
apps/hermes-plugin/dashboard/src/styles.css Theme-aware stylesheet for the Hermes dashboard plugin using uh--prefixed classes over Hermes design-system CSS variables, covering layout helpers, tabs, event log, modals, runs table with status badges, mission compare/diff views, and the Delivery Observatory (uh-do-*).
apps/hermes-plugin/dashboard/src/types.d.ts Ambient type shims for the Hermes dashboard plugin SDK globals (React, UI kit, fetchJSON, plugin registry) so plugins get IntelliSense without bundling @types/react.
apps/hermes-plugin/dashboard/src/VerificationViewer.tsx Verification report viewer showing status, per-acceptance-criterion results, and the recorded runtime_config snapshot, with an empty state when the mission is not yet verified. VerificationViewer
apps/hermes-plugin/dashboard/src/WorkflowEditor.tsx Workflow editor that loads a workflow’s raw YAML into a textarea and PUTs edits back, rendering server errors inline. WorkflowEditor
apps/hermes-plugin/dashboard/src/WorkflowViewer.tsx Workflow profile viewer rendering workflow phases as a vertical timeline with role and outputs, plus a link to the editor. WorkflowViewer
apps/hermes-plugin/dashboard/src/yaml-pretty.ts Hand-rolled YAML pretty-printer for already-parsed JSON values that keeps the plugin bundle under its 50 KB budget. yamlStringify
apps/hermes-plugin/dashboard/tsconfig.json Type-check-only (noEmit) TypeScript configuration for the dashboard plugin sources: ES2020 target, Bundler module resolution, strict mode with implicit any allowed, and DOM libs.
apps/hermes-plugin/esbuild.config.mjs esbuild script that bundles the dashboard plugin into a minified IIFE and CSS under dashboard/dist, injecting React from the host SDK global and supporting watch mode.
apps/hermes-plugin/hermes-local.sh Reversible local lifecycle helper that symlinks the plugin package and theme into ~/.hermes, enables or disables the uh plugin without tool-override authority, starts the Hermes dashboard for an explicit UH_PROJECT_ROOT, reports status, and rolls back only package-owned links. install_link, start_dashboard, usage
apps/hermes-plugin/plugin.yaml Hermes plugin package identity declaring the uh plugin, version 0.11.0 and its description as the UH dashboard and Delivery Observatory.
apps/hermes-plugin/README.md Guide to the Hermes Agent dashboard plugin for UH covering its features, install-from-source flow via hermes-local.sh, Hermes 0.20.5 packaging compatibility, the build/test development loop, package layout, environment variables and the manifest config block.