// Package sessionread implements the design/22 §8-3「主动读取其他会话上下文」tool: the // running role may pull another session's recent messages as *external, read-only // material*, rendered with a fixed attribution header so she can never mistake // someone else's words for her own memory or her own voice (design/22 §8.1). // // Read-only by construction, not by discipline: the package depends on narrow // interfaces that declare read calls only (HistoryReader, PersonaNamer) and never // touches internal/persona/registry directly, so no write — memory write, message // append, read-cursor advance, broadcast — is reachable from inside. It also never // logs message bodies; only attribution metadata (design/22 §8.1 约束 4). // // Access is fail-closed (design/22 §8.1 约束 3): the calling conversation must be // the owner's, and only the Web main session ("web") and Web sub sessions // ("web:") may be read. Every other session id — the IM group and stranger // sessions in particular — is rejected, and an absent session is a hard error // rather than empty material, so "read nothing" can never pass for "they said // nothing". // // The tool is registered by cmd/cyrene (wireSessionReadTool) and reaches the model // through the internal/runtime/tool dispatcher like any other tool. package sessionread