Dashboard

Package: dashd/. Standalone read-only HTMX operator portal.

Overview

dashd serves an operator-facing web portal on DASH_PORT (default 8090). It opens the SQLite database in read-only mode (?mode=ro) and never writes to it. All views auto-refresh via HTMX polling.

dashd registers itself as a channel with receive_only: true. The /status gateway command routes to it via the routes table; dashd replies using the notify/ library to fan out status messages to tier-0 JIDs.

Included in generated docker-compose.yml as arizuko_dashd_<flavor>.

Views

PathNameContent
/dash/ Portal Tile grid overview of all views; 30-second auto-refresh
/dash/status/ Status Registered channels, active groups, running containers, queue depth, recent errors
/dash/tasks/ Tasks Scheduled tasks list with status, next run time, and run history
/dash/activity/ Activity Recent message flow, routing table, dispatch log
/dash/groups/ Groups Group hierarchy tree with tier, parent, and container config
/dash/memory/ Memory Per-group knowledge browser: diary entries, episodes, facts files

URL conventions

/dash/                        portal tile grid
/dash/<name>/                 full page view
/dash/<name>/x/<fragment>    HTMX partial (returned on polling requests)
/dash/<name>/api/<path>      JSON API for the view

Auth

dashd uses JWT cookie auth via the auth library. Access requires a valid JWT with operator-level claims (groups: null). proxyd routes /dash/ to dashd after validating the JWT.

HTMX polling

Each view includes an HTMX polling interval. The partial endpoints (/x/<fragment>) return only the changed section of HTML. The portal tile grid refreshes every 30 seconds. Individual view polling intervals vary by data freshness requirements.

Read-only guarantee

dashd opens SQLite with ?mode=ro. It has no write paths, no form submissions, no mutation endpoints. All state changes go through the gateway or CLI.