New workspace components:
- emit_card: structured detail card with title, subtitle, fields, actions
Fields can be clickable links (action property)
Used for: entity details (Kunde, Objekt, Auftrag)
- emit_list: vertical list of cards for multiple entities
Used for: search results, navigation lists
- "WHEN TO USE WHAT" guide in expert prompt
Frontend rendering:
- renderCard() with key-value fields, clickable links, action buttons
- List container with title + stacked cards
- Full CSS: dark theme cards, hover states, link styling
Pipeline:
- ExpertNode handles emit_card/emit_list in tool execution
- UINode passes card/list through as-is (not wrapped in display)
- Test runner: check_actions supports "has card", "has list", "has X or Y"
Workspace components test: 22/22
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Expert retry loop enhanced:
- On "Unknown column" error, auto-DESCRIBEs the failing table
- DESCRIBE result injected into re-plan context
- Unmapped tables handled via SELECT * LIMIT fallback
- Recovery test step 4: abrechnungsinformationen (unmapped) → success
Graph animation queue:
- Events queued and played sequentially with 200ms interval
- Prevents bulk HUD events from canceling each other's animations
- Node pulses and edge flashes play one by one
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Action routing:
- Button clicks now route through PA→Expert in v4 (was missing has_pa check)
- Previously crashed with KeyError on missing thinker node
WS error handling:
- Exceptions in WS handler caught and logged, not crash
- Frontend receives error HUD event instead of disconnect
- Prevents 1006 reconnect loops on action errors
Nodes panel:
- Fixed pipeline order (no re-sorting on events)
- Deduplicated node names (pa_v1→pa, expert_eras→eras)
- Normalized names in state tracker
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- /api/graph/active now includes node_details (model, max_tokens per node)
- graph.js calls initNodesFromGraph() after fetching active graph
- Nodes panel shows all nodes with models immediately on load (before first message)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Eras Expert domain context:
- Full Heizkostenabrechnung business model (Kunde>Objekte>Nutzeinheiten>Geraete)
- Known PK/FK mappings: kunden.Kundennummer, objekte.KundenID, etc.
- Correct JOIN example in SCHEMA prompt
- PA knows domain hierarchy for better job formulation
Iterative plan-execute in ExpertNode:
- DESCRIBE queries execute first, results injected into re-plan
- Re-plan uses actual column names from DESCRIBE
- Eliminates "Unknown column" errors on first query
Frontend:
- Node inspector: per-node cards with model, tokens, progress, last event
- Graph switcher buttons in top bar
- Clear button in top bar
- Nodes panel 300px wide
- WS reconnect on 1006 (deploy) without showing login
- Model info emitted on context HUD events
Domain context test: 21/21 (hierarchy, JOINs, FK, PA job quality)
Default graph: v4-eras
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>