#[non_exhaustive]pub struct SessionMeta {Show 19 fields
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 native_residue: Vec<Value>,
pub native_residue_source: Option<String>,
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>,
pub trigger: Option<Trigger>,
pub surface: Option<SurfaceKey>,
pub profile: Option<String>,
pub recurrence: Option<Recurrence>,
pub cross_surface: Option<CrossSurface>,
}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.
native_residue: Vec<Value>PARITY-23: generalized source-native residue records for NON-codex
sources — {record_index, kind, raw} entries captured at load time
(or restored from a portable v2 envelope) so cross-format hops can
return them exactly. Codex keeps its original dedicated store above.
native_residue_source: Option<String>The source format native_residue belongs to (e.g. claude_code).
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.
trigger: Option<Trigger>ORCH-3: why the session exists, when the source says.
surface: Option<SurfaceKey>ORCH-3: the conversation’s surface identity, when it has one.
profile: Option<String>ORCH-3: routed config home (Hermes profile / OpenClaw agent / Codex profile).
recurrence: Option<Recurrence>ORCH-3: the job a recurring session belongs to.
cross_surface: Option<CrossSurface>ORCH-3: moved-to-another-surface state.
Implementations§
Source§impl SessionMeta
impl SessionMeta
Sourcepub fn trigger_or_default(&self) -> Trigger
pub fn trigger_or_default(&self) -> Trigger
The trigger, defaulting from what the loaders already know: a spawned
child (agent_id / a delegate lineage) is Parent; otherwise Human.
Sourcepub fn workspace(&self) -> (WorkspaceKind, Option<String>)
pub fn workspace(&self) -> (WorkspaceKind, Option<String>)
UNI-9 workspace with the D2 precedence: repo when a cwd exists, else
channel when the surface is a channel, else none. Derived, never stored.
Sourcepub fn workspace_ref(&self) -> WorkspaceRef
pub fn workspace_ref(&self) -> WorkspaceRef
Self::workspace as the wire value. Naming only — the precedence
stays in workspace().
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