Repository navigation
feat(dashboard)!: agent-built dashboards, milestone 1 - #285
Merged
Merged
Conversation
The agent builds a professional dashboard from one sentence, checks every query against the engine, previews it on live data, saves it as a versioned spec, and edits it by conversation. The browser renders the same spec with time, comparison, variables, inspect, full-screen view and layout editing. - internal/panel: dashboard spec v1, validation, a filter guard that canonicalizes author text through DuckDB, SQL panels with bound parameters, structured query compiler, executor with columnar frames, totals, previous-period comparison, empty-panel diagnosis and bounded cost. - internal/dashboard and internal/db: dashboards stored as specs with version history, typed edit operations, first-fit layout. The Goose migration replaces the widget tables. - internal/api and internal/mcp: /api/panels/query, /api/variables/resolve, /api/telemetry/schema, the /api/dashboards routes with PATCH, versions and restore; MCP tools get_telemetry_schema, preview_panels and list/get/create/replace/edit_dashboard. - internal/agent: the prompt builds dashboards for dashboard-shaped questions; the OpenAI provider uses the Responses API; Anthropic requests use prompt caching; defaults are claude-sonnet-5-5 and gpt-6.1-sol. - ui/panels and ui/host/src/dashboards: shared compile layer, canvas charts, the dashboard page, grid, six visualizations, inspect and edit mode. The widget dashboard is removed. - docs: design spec, milestone 1 plan, and measured results on demo data (docs/benchmarks/2026-10-agent-dashboards-m1.md).
The container build compiled ui/host without ui/panels, which the new dashboard page imports.
5 tasks done
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.
What changed
From one sentence, Fanout's agent now builds a dashboard: it checks every query against the engine, previews the result on live data and saves a versioned spec. It edits that dashboard by conversation. The browser renders the same spec. Every panel type is driven by the agent, so nobody writes queries or picks chart settings by hand. This is milestone 1 of four in
docs/superpowers/specs/2026-10-04-agent-dashboards-design.md.internal/panel).internal/dashboard,internal/db).add_panel,update_panel,remove_panel,move_panel,set_variable,remove_variable,set_time,rename./api/panels/query,/api/variables/resolve,/api/telemetry/schema, and the/api/dashboardsroutes withPATCH,/versionsand/versions/{version}/restore.get_telemetry_schema,preview_panels,list_dashboards,get_dashboard,create_dashboard,replace_dashboard,edit_dashboard.internal/agent).claude-sonnet-5-5andgpt-6.1-sol.ui/panels,ui/host/src/dashboards).Breaking contracts
20261004000000_dashboard_specsdropsdashboardsanddashboard_widgetsand creates the spec and version tables. Saved widget dashboards are not carried over; the product is pre-release.{spec, base_version, message}and typed operations.DELETErequiresFanout-Confirm-Delete: <id>.edit_dashboardandpreview_panelsare new.FANOUT_AI_MODELkeep their configured model.Measured on 24 hours of fanout-demo telemetry
Full results are in
docs/benchmarks/2026-10-agent-dashboards-m1.md.claude-sonnet-5-5On 16 held-out prompts that were never used for tuning, Sonnet chose correctly between a dashboard and a short answer in 94–100% of cases across two runs. The OpenAI provider built dashboards live on
gpt-6.1-sol,gpt-6-astra,gpt-6-lunaandgpt-5.6-terra.Milestones 2–4 come next: analysis (drill-down, heatmaps, log patterns, deploy markers), authoring quality (the build receipt in chat, version history in the UI), and finish (performance in CI, a visual review, and parity with the capability preview).
Verification
just checkpasses: fmt, lint, release and wrapper tests, UI audit, UI asset freshness, notices,go test ./..., 237 UI tests, docs check and site build.just test-racepasses.gitleaksis clean, and the plan carries no host details.Before deploying
Production and the demo run 2026.9.8, with an Atlas control database and format-2 telemetry. Main already refuses both, since #270 and #272. Plan a data reset or conversion before the next deploy, and check
FANOUT_AI_MODELin each environment.