[0.23.0] - 2026-04-26
Added
- OpenCode passive reader populates the execution graph (#93).
parseOpencodeSession/parseOpencodeSessionIncrementalnow returnrelationships: SessionRelationshipRecord[]andtoolResultEvents: ToolResultEventRecord[]alongside the existingturns/content/userTurnsarrays. Onerootrow is emitted per session; asubagentrow is added when the session payload carriesparentID, withrelatedSessionIdpointing at the parent session. Each tool part with a resolvedstate.outputproduces a terminal-statusToolResultEventRecordwhosestatusfollows the same failure rules as the existingerroredCallIdsset (state.status === 'error'ormetadata.exit !== 0for bash-family tools), withcontentLength/contentHashcomputed from the stringified output (metadata only — no raw bytes stored). Per-toolUseIdcallIndexand per-pass monotoniceventIndexmirror the Claude convention.Subagent.isSidechaincontinues to populate fromparentIDunchanged. Resumed incremental passes don't re-emit events for already-seen assistant messages; relationship rows re-emit on every pass and the writer dedups them by hash.