Part of #339
Replace all D3.js charts with hand-rolled SVG/CSS. Zero external dependencies.
js/charts.js with shared helpers:
- createSVG(), scaleLinear(), scaleBand(), monotoneCubicPath() (Fritsch-Carlson), renderXAxis(), renderYAxis()
8 chart replacements (~660 lines total):
- Timeline sparkline (30-day bars) — Low
- SDK cost chart (bars + axes) — Low-Medium
- LLM token chart (stacked bars) — Medium
- Tool calls chart (bars + errors) — Low
- Memory Lifecycle (stacked area + curves) — High (~150 lines)
- KPI sparklines (inline SVG) — Low-Medium
- Signal Quality (horizontal bars) — Low
- Recall Learning Curve (connected dots) — Low-Medium
The D3 CDN dependency is a bug that breaks air-gap. This fixes it permanently.
Part of #339
Replace all D3.js charts with hand-rolled SVG/CSS. Zero external dependencies.
js/charts.jswith shared helpers:8 chart replacements (~660 lines total):
The D3 CDN dependency is a bug that breaks air-gap. This fixes it permanently.