SIGN IN SIGN UP

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