Commit Graph

68 Commits

Author SHA1 Message Date
William Valentin 27d40ce28f feat(hooks): add Hermes telemetry handler 2026-05-20 17:35:56 -07:00
William Valentin 78376bdd83 feat(query): include session totals and stable framework names 2026-05-20 17:35:56 -07:00
William Valentin db73eca6fd chore(infra): pin nats image digest 2026-05-20 17:35:56 -07:00
William Valentin f8bec2d6d5 fix: ignore non-persistent claude startups 2026-04-30 17:07:19 -07:00
William Valentin 476c0e347f fix: count only live dashboard sessions 2026-04-30 17:07:17 -07:00
William Valentin fd17628e94 fix: ignore invalid claude hook starts 2026-04-29 09:41:07 -07:00
William Valentin 6799cc3681 docs: add run detail improvements design
Covers three improvements to /runs/🆔 prompt/error header callouts,
client-side span filter/search, and an interactive waterfall with hover
tooltips and inline detail drawers.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-25 13:35:20 -07:00
William Valentin 184aa5e6cb fix(web-ui): security hardening, SPA nav, and modularization
Ship the in-progress ES-module refactor of the web-ui (new static/modules/
layout, Usage/Settings pages, uplot-based dashboard) alongside a round of
security and UX fixes:

- main.go: add CSP + X-Frame-Options: DENY + X-Content-Type-Options:
  nosniff + Referrer-Policy middleware on every response; WS CheckOrigin
  now requires Origin host to match Host (blocks cross-site WebSocket
  hijacking); upgrade client before dialing upstream so origin check
  runs first; fatal on unparseable AGENTMON_QUERY_BASE.
- app.js: delegated click handler intercepts same-origin <a> clicks for
  SPA navigation (prev. every nav link caused a full page reload,
  dropping WS + in-memory state); delegated .copy-btn[data-copy]
  handler replaces inline onclick=; removed window.navigate /
  window.copyToClipboard globals and the duplicated handleGlobalSearch.
- modules/nav-signal.js: per-route AbortController so in-flight fetches
  are cancelled when the user navigates away, preventing stale toasts
  and wasted renders.
- modules/api.js: honours the nav signal by default; AbortError is
  silent.
- modules/router.js: resets the nav controller on every route; dropped
  the fixed 80ms transition delay; breadcrumbs no longer emit inline
  onclick= (delegated handler picks them up).
- modules/utils.js: renderCopyButton emits data-copy=\"...\" instead of
  nesting a JS string inside an HTML attribute — fixes an XSS where
  values containing ' broke out via &#39; decoding.

Verified: go build clean; `node --check` clean on all modified modules;
manual curl probes confirm security headers present on every response
and WS upgrade returns 403 for cross-origin/missing Origin while 101
for same-origin.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-23 15:36:12 -07:00
William Valentin 41b7165800 fix(store): backfill spans in run detail 2026-04-21 13:07:09 -07:00
William Valentin 43113f6241 feat(web-ui): improve navigation and session UX 2026-04-21 13:07:05 -07:00
William Valentin 8f766b4019 chore(gitignore): ignore build directory 2026-04-21 13:07:01 -07:00
William Valentin d5154b8eec fix(codex): recover session lifecycle from hooks 2026-04-21 13:02:58 -07:00
William Valentin 8b6ce8e628 Add restart policy to docker-compose services 2026-03-27 20:47:24 -07:00
William Valentin c53283ac07 feat: improve web UI UX with global search, breadcrumbs, and better feedback 2026-03-26 14:24:52 -07:00
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