feat: implement frontend TypeScript modules for logical view rendering
- Add types.ts: TypeScript interfaces matching graph JSON from backend
- GraphNode, GraphEdge, GraphRegion, GraphUpdate types
- SourceLoc, AddrInfo, GraphError interfaces
- Add style.ts: cytoscape stylesheet for logical view
- Node styling: circular ellipses with centered labels
- Category-based colors from backend (arithmetic, logic, comparison, etc.)
- Edge annotations: port labels at target, branch labels at source
- Function regions: dashed bounding boxes
- Error styling: red dashed borders
- Add layout.ts: dagre hierarchical layout configuration
- Top-to-bottom layout with configurable spacing
- Settings: rankDir=TB, nodeSep=60, rankSep=80, edgeSep=20
- Rewrite main.ts: WebSocket client and graph rendering
- Connect to ws://host/ws, receive graph_update JSON messages
- Convert JSON to cytoscape elements with proper labels and styling
- buildLabel: includes opcode + constant value when present
- buildElements: creates nodes, regions, and edges from update
- renderGraph: batch update with dagre layout and auto-fit
- Auto-reconnect on WebSocket close (2s timeout)
- Handle routing ops: source labels (T/F) from source_port
- Handle regions: compound parent nodes for functions
All modules verified to build with esbuild. Bundle size: 1.2MB.
Test suite: 608/608 tests passing.