feat(relay): read pi conversation transcripts (kind 'path')
get_history covered only Claude Code's JSONL (kind 'id', globbed by uuid). pi hands over an absolute session path (kind 'path'), which the reader rejected as no-session — so history was empty for every pi pane. Adds parse_pi (text/thinking/toolCall/toolResult blocks, folds results onto their calls, dedupes replayed rows) and locate_pi (containment check against HERDR_PI_ROOTS, default ~/.pi/agent/sessions). history() now validates the ref shape per-harness: path-harnesses take a contained path, id-harnesses a uuid. Verified live: 177 turns from a real pi session through the relay WebSocket. 9 new tests in test_transcript.py (199 unit tests, 21/21 run.sh pass).
D
Daniel committed
946cf8418210a3d7bf83bba744a8ef27d9cbf090
Parent: 7016df9