#[non_exhaustive]pub struct SessionMeta {
pub source: SessionSource,
pub session_id: Option<String>,
pub model: Option<String>,
pub cwd: Option<PathBuf>,
pub system_prompt: Option<String>,
pub codex_headers: Vec<Value>,
pub codex_provenance: Vec<Value>,
pub opencode_headers: Vec<Value>,
pub goose_header: Option<Value>,
pub agent_id: Option<String>,
pub parent_tool_use_id: Option<String>,
pub lineage: BTreeMap<String, String>,
}Expand description
Metadata recovered from a session log.
Fields (Non-exhaustive)§
This struct is marked as non-exhaustive
Struct { .. } syntax; cannot be matched against without a wildcard ..; and struct update syntax will not work.source: SessionSourceThe tool that wrote the log.
session_id: Option<String>The session/rollout id.
model: Option<String>The model the session was running.
cwd: Option<PathBuf>The working directory the session ran in.
system_prompt: Option<String>The system / base-instructions prompt, when the log records it.
codex_headers: Vec<Value>Verbatim source-format header records (the Codex session_meta /
turn_context lines), preserved so re-export can replay the exact header
the original tool expects rather than guessing its required fields.
codex_provenance: Vec<Value>Exact source lines for Codex execution/provenance records that affect continuation semantics but must not be replayed as active events after a foreign-format hop. Each entry records its original physical-line index, discriminant, and verbatim JSONL text. Foreign writers carry the list in a namespaced extension; a later Codex export restores headers from it while keeping compaction/rollback/review records non-operative, avoiding a second rollback or compaction of the already-normalized view.
opencode_headers: Vec<Value>The OpenCode analogue of Self::codex_headers
(docs/interop/opencode-pi-spec.md §1.2/§2.1): the verbatim
SessionInfo record (always element 0, or Value::Null if somehow
absent), plus any captured session_diff/todo side-records — each
wrapped as {"key": [...], "value": ...}, mirroring the envelope
shape raw uses, so a consumer can tell which storage key a header
record belongs to. These replay only via the direct-write fallback
(Session::to_opencode_direct_write); opencode import has no
ingestion path for session_diff/todo (S5).
goose_header: Option<Value>Goose’s native session-export object with conversation removed.
Goose stores sessions in SQLite but defines this JSON object as its
official import/export boundary. Keeping the shell lets an unchanged
direct round-trip remain byte exact while appended turns are spliced
into a stock-importable artifact without guessing native metadata.
agent_id: Option<String>For a Claude Code subagent session: its agentId (the agent-<id> file
stem). None for top-level sessions.
parent_tool_use_id: Option<String>For a subagent session: the tool_use_id of the parent Task call that
spawned it, recovered from the parent transcript’s tool result. Best
effort — None if the link could not be established.
lineage: BTreeMap<String, String>Cross-file lineage keys for multi-file/multi-agent sessions (Codex
parent_thread_id, forked_from_id, thread_source, and the
source.subagent.thread_spawn fields agent_role / agent_nickname /
depth). Empty for a plain top-level session. Used by
Session::reconstruct_tree to nest children under their parents.
Trait Implementations§
Source§impl Clone for SessionMeta
impl Clone for SessionMeta
Source§fn clone(&self) -> SessionMeta
fn clone(&self) -> SessionMeta
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more