impact_analyzer_dashboard

Local, loopback-only web dashboard for Impact Analyzer reports: severity hero, impact graph, file tables and an AI plan lab.

Uses impact_analyzer as its engine, so the dashboard and the CLI can never disagree.

Usage

From this package:

dart run impact_analyzer_dashboard:impact_serve --path /path/to/repo --port 7788

Or through the CLI, which wraps this package:

dart pub global activate impact_analyzer_cli
impact serve --path . --port 7788

Then open 127.0.0.1:7788.

The server binds 127.0.0.1 only and makes no outbound calls. All browser libraries are vendored locally.

Five graph representations

An impact graph is a small, sparse directed acyclic graph over file dependencies. A force-directed layout renders that as an unreadable blob, so there are five views over the same payload:

View Engine Question it answers
Layered (default) Cytoscape breadthfirst What breaks, and in what order?
Sugiyama Eclipse ELK layered Same, with edge crossings minimised
Rings concentric placement How far does the blast radius reach?
Matrix files x files grid Which files reference which, at scale?
Tree directory outline What is in scope, by directory?

Switch in the panel head, or deep-link with #layered, #sugiyama, #rings, #matrix, #tree.

API

The dashboard is also the machine-readable surface for agents.

GET  /api/health
GET  /api/impact/working-tree
GET  /api/impact/range
POST /api/impact/plan
GET  /api/impact/summary
GET  /api/impact/graph
GET  /api/contract

/api/contract self-documents the whole surface — paths, query parameters, error codes and severity bands — so an agent can discover it without reading any source.

GET /api/impact/summary is the token-cheap projection: counts and severity without the file lists. GET /api/impact/graph returns { nodes, edges, truncated } and always reports truncation explicitly, so a capped graph is never mistaken for a complete one.

Programmatic use

import 'package:impact_analyzer_dashboard/impact_analyzer_dashboard.dart';

final server = DashboardServer(rootPath: '/path/to/repo', port: 7788);
await server.start();

Third-party assets

Vendored under web/vendor/ so the dashboard makes no outbound calls:

Asset License
cytoscape.min.js MIT
elk.bundled.js (Eclipse ELK) EPL-2.0 OR GPL-3.0-or-later

License

MIT — see LICENSE.