Local dashboard for OTel data from VS Code GitHub Copilot Chat. It receives OTLP/HTTP on :4318, stores data in SQLite, and shows live and historical views (hour/day/month/year) in a React app.
- mise installed
- VS Code with GitHub Copilot Chat and
github.copilot.chat.otel.enabled: true
git clone https://github.com/Dre90/Copilot-Token-Dashboard.git
cd Copilot-Token-Dashboard
mise trust
mise install
mise run install
mise run hooks:install # recommended, one-timemise run dev # starts server (:4318 + :4319) and web (:5173) in parallelOpen http://localhost:5173.
To verify the backend is running, open http://localhost:4319/api/health.
In settings.json:
{
"github.copilot.chat.otel.enabled": true
}The default endpoint is http://localhost:4318, which targets this receiver directly. Restart the VS Code window after changing this setting.
mise.toml # Node version + tasks
server/ # Fastify OTLP receiver + REST + SSE -> SQLite
src/index.ts # bootstrap (two listeners: 4318 OTLP, 4319 API)
src/routes/ # API and OTLP routes
src/core/ # DB and SSE core
web/ # Vite + React 19 + TS + Tailwind v4
src/App.tsx
src/features/ # feature modules (copilot, telemetry)
src/shared/ # shared UI components
src/api/ # API clients
mise run dev:server— backend onlymise run dev:web— frontend onlymise run build— build bothmise run typecheck— typecheck bothmise run lint— lint bothmise run test— test bothmise run clean— remove SQLite file
Set up local hooks (one-time):
mise run hooks:installThis enables versioned hooks from .githooks/:
pre-commit: runsmise run format:checkandmise run lintpre-push: runsmise run typecheckandmise run test
- OTLP receiver:
POST http://localhost:4318/v1/{traces,metrics,logs} - API:
GET /api/healthGET /api/summary— last 5 minutesGET /api/metrics/listGET /api/metrics?name=<>&bucket=hour|day|month|year&from=&to=GET /api/traces?limit=&from=&to=GET /api/traces/:traceIdGET /api/events?limit=GET /api/stream(SSE:span/metric/event)