Commit Graph

54 Commits

Author SHA1 Message Date
William Valentin 8bca99573b feat(web-ui): redesign dashboard and live sessions 2026-03-26 11:22:49 -07:00
William Valentin 5ff4794d98 feat(openclaw-monitor): add MinIO telemetry 2026-03-26 11:22:45 -07:00
William Valentin 6605780b58 feat(ingest): batch event writes and harden transport 2026-03-26 11:22:42 -07:00
William Valentin 43877a5448 feat(query-api): add richer stats and retention 2026-03-26 11:22:34 -07:00
William Valentin fdfcb50e80 feat(hooks): consolidate shared transport helpers 2026-03-26 11:22:27 -07:00
William Valentin d49785cb25 fix: filter dashboard activity feed events 2026-03-20 14:05:59 -07:00
William Valentin 687a7aa79d Add live agent views and improve Codex monitoring 2026-03-20 13:59:51 -07:00
William Valentin a87bbc6983 fix(claude-hook): derive span durations from start timestamps 2026-03-20 11:17:40 -07:00
William Valentin d235e3c873 feat(hooks): add telemetry handlers for codex/copilot/gemini 2026-03-20 11:17:26 -07:00
William Valentin c88746693a docs(plans): add dashboard and realtime agent plans 2026-03-20 11:17:17 -07:00
William Valentin 2e277fb138 fix: preserve session state across turns in claude-code hook handler
handleNotification("Done") was incorrectly emitting session.end and
calling clearState at the end of each Claude turn. Since "Done" means
a turn finished (not the session), clearing state caused subsequent
tool calls to find no runId, storing spans without run_id and making
them invisible in run-level queries.

- handleNotification: remove session.end emission and clearState call;
  only emit run.end for the completed turn
- handleSessionEnd: load state file to get runId (in-memory activeRuns
  is always empty in a subprocess)
- handlePromptSubmit: load state file to get runId for ending previous
  run before starting a new one

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-18 23:42:22 -07:00
William Valentin f8ddea3698 feat: add agentmon services section to infrastructure page
Label all agentmon docker-compose services with agentmon.monitor=true
and agentmon.group=agentmon so the swarm-monitor picks them up.
Adds Group field to ServiceSnapshot, probes /healthz for api/web roles,
and renders a separate "Agentmon" section below Swarm Services on the
Infrastructure page with new api and worker card renderers.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-18 13:41:26 -07:00
William Valentin d2d044a3d8 fix: use Docker socket HTTP API in swarm collector, no CLI dependency
Replace exec.CommandContext calls (docker ps, docker inspect, nc -z) with
direct HTTP calls over the Unix socket using Go's net/http + custom transport.
Also removes netcat-openbsd from Dockerfile since nc is no longer used.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-18 10:36:32 -07:00
William Valentin f48953781b fix: add swarm-monitor binary and netcat to Dockerfile 2026-03-18 10:31:28 -07:00
William Valentin edaa7bac45 feat: add swarm-monitor service to docker-compose 2026-03-18 10:29:40 -07:00
William Valentin 1b3c74b441 fix: add /infrastructure to SPA catch-all routes 2026-03-18 10:27:06 -07:00
William Valentin cd2f345454 feat: rename OpenClaw to Infrastructure page, add service cards
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-18 10:20:28 -07:00
William Valentin 93edd39a2b feat: add infrastructure page CSS 2026-03-18 10:16:50 -07:00
William Valentin 07c16653cd feat: add swarm strip to dashboard
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-18 10:14:48 -07:00
William Valentin 7c043b78a4 feat: add swarm-monitor binary 2026-03-18 10:12:18 -07:00
William Valentin 9c2f048b92 feat: add swarm collector with docker inspect + HTTP probes 2026-03-18 10:10:34 -07:00
William Valentin 083e522bb7 feat: add swarm monitor types 2026-03-18 10:08:54 -07:00
William Valentin 22bc16bf51 docs: swarm monitor implementation plan 2026-03-18 09:57:51 -07:00
William Valentin ecabc7fd19 docs: swarm monitor design — infra page, docker labels, role-driven cards 2026-03-18 09:53:39 -07:00
William Valentin e7be607db4 feat: extend agentmon hook with agent:bootstrap for embedded/cron runs
- Add agent:bootstrap handler to capture run.start events for cron and
  automation runs that bypass the message:received path
- Remove dead event subscriptions (tool_result_persist, session:compact:*)
  which are plugin hook events and never fire through triggerInternalHook
- Remove AGENTMON_INGEST_URL from requires.env since handler has a
  hardcoded fallback URL
- Drop activeCompactions map (no longer needed after removing compaction handlers)

Deployed to zap VM with hooks.internal.enabled=true in openclaw.json.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-15 17:32:32 -07:00
William Valentin 13356adfbd feat: openclaw card dividers, running pulse, issue label section
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-14 12:16:30 -07:00
William Valentin acd89e95a9 feat: stat card top accents, timeline time hierarchy 2026-03-14 12:14:15 -07:00
William Valentin 5dbfd68fb5 feat: meta tiles, back link button, css chevron, span-details bg fix
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-14 12:11:55 -07:00
William Valentin eb12319f19 feat: framework color dots in sessions table, filter toolbar panel
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-14 12:05:40 -07:00
William Valentin 1c6255d688 feat: chart legend, fw bar height, feed fade, top tools mini bars 2026-03-14 12:02:49 -07:00
William Valentin 2c4b212ae6 feat: semantic accent colors on summary cards, infrastructure label
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-14 11:59:38 -07:00
William Valentin a6902e8d6c feat: refine global tokens, nav active state, section title 2026-03-14 11:55:58 -07:00
William Valentin ab7a83c50d feat: stacked area chart, framework breakdown on active sessions, tool bar visualization 2026-03-14 11:34:15 -07:00
William Valentin af127a45f1 docs: update README with dashboard and stats endpoints 2026-03-14 11:30:39 -07:00
William Valentin 063e41616a fix: active sessions query, chart update performance
- Active sessions query now finds truly active sessions (started
  anytime, no session.end ever) instead of only today's sessions
- Use uPlot setData() for live WS updates instead of destroying
  and recreating the chart on every event
- Destroy chart only on window change so it recreates with new scale

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-14 11:25:06 -07:00
William Valentin e7dd954f6a fix: ResizeObserver leak, CSS class lowercase, active sessions live update 2026-03-14 11:11:42 -07:00
William Valentin eaf73e5ff5 feat: add real-time dashboard with charts, stats, and activity feed
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-14 11:05:07 -07:00
William Valentin cac3404aa4 feat: add dashboard CSS styles 2026-03-14 11:03:26 -07:00
William Valentin d593c745aa feat: add uPlot CDN and dashboard nav link 2026-03-14 11:02:23 -07:00
William Valentin 9b78d65b1d feat: add stats summary and timeseries API endpoints 2026-03-14 11:01:40 -07:00
William Valentin 37f9b34197 fix: use 'unknown' for null framework, run gofmt 2026-03-14 11:01:11 -07:00
William Valentin 24a7fc2782 feat: add summary and timeseries stats queries 2026-03-14 00:47:08 -07:00
William Valentin 78fed5a832 chore: remove completed agent monitoring plan 2026-03-14 00:31:25 -07:00
William Valentin 3434db3c59 feat: complete agent monitoring - hook, UI, and backend filter
- Add event_type and framework filters to events query endpoint
- Add /agents SPA route to web-ui server
- Add Agents nav link and route in frontend
- Add agents page CSS (timeline, VM pills, stats panel)
- Build VM status strip, activity timeline, and real-time stats
- Add agentmon hook for OpenClaw (HOOK.md + handler.ts)
- Add docker-compose, Dockerfile, and supporting infra files

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-14 00:26:42 -07:00
William Valentin 1927ec6622 feat: add static frontend with SPA routing
- Sessions list with filters (time, framework, host)
- Session detail with runs table
- Run detail with expandable spans
- Dark theme GitHub-style UI
- API proxy to query-api via /api

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-17 01:59:16 -08:00
William Valentin d71b6ae537 feat: add sessions and runs endpoints to query-api
GET /v1/sessions - list sessions with filters
GET /v1/sessions/:id - session detail with runs
GET /v1/runs/:id - run detail with spans

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-17 01:57:40 -08:00
William Valentin 9da01ef924 feat: add session and run detail queries
GetSessionWithRuns returns session metadata and all runs.
GetRunWithSpans returns run metadata and all spans with payload.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-17 01:57:09 -08:00
William Valentin 1fb9396877 feat: add sessions list query
Supports filtering by time range, framework, and host.
Returns paginated results with cursor-based pagination.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-17 01:56:34 -08:00
William Valentin 2fd4fe0ae0 feat: add validation to ingest gateway
HTTP and WebSocket handlers now validate events before publishing.
Returns detailed error info on validation failures.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-17 01:56:04 -08:00
William Valentin 0e2734be23 feat: add event validation
Validates required envelope fields: schema, event.id, event.type,
event.ts, and event.source (framework, client_id, host).

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-17 01:55:24 -08:00