Skip to main content

SessionSource

Enum SessionSource 

Source
pub enum SessionSource {
    ClaudeCode,
    Codex,
    OpenCode,
    Pi,
    Grok,
    Gemini,
    Goose,
    Native,
}
Expand description

Which tool produced a session log.

This is read-provenance: a fact recovered when a log is loaded (stored in SessionMeta::source, filled in by auto-detection in detect_source), describing which tool originally wrote the file on disk. It answers “where did this session come from?” — e.g. for inspect/convert display in the CLI.

It is deliberately distinct from SessionFormat, even though the two enums’ variant lists currently coincide: SessionFormat selects a serialization codec (what to parse/export as), while SessionSource records history (what wrote the file). The pair is intentionally kept separate rather than merged — a session loaded from one tool’s log can still be exported in the other tool’s format, and the two concepts could diverge further (e.g. a format that is readable but not attributable, or multiple versioned formats sharing one source).

Variants§

§

ClaudeCode

A ~/.claude/projects/.../<id>.jsonl transcript.

§

Codex

A ~/.codex/sessions/.../rollout-*.jsonl file.

§

OpenCode

An OpenCode session — multi-file JSON tree(s) or SQLite opencode*.db (docs/interop/opencode-pi-spec.md §1.2). Detection and loading are wave B; this variant exists now so SessionSource/SessionFormat stay 1:1 per the frozen interop spec (§0).

§

Pi

A ~/.pi/agent/sessions/--<enc-cwd>--/<iso>_<sessionId>.jsonl transcript (docs/interop/opencode-pi-spec.md §1.1) — line-oriented JSONL like Claude Code/Codex, so it shares their byte-lossless native round-trip property.

§

Grok

A Grok session transcript stored as ~/.grok/sessions/<percent-encoded-cwd>/<session-id>/chat_history.jsonl.

§

Gemini

A Gemini CLI transcript stored under ~/.gemini/tmp/<project>/chats/session-*.jsonl.

§

Goose

A Goose session exported through _goose/unstable/session/export, or reconstructed from Goose’s sessions/sessions.db native store.

§

Native

P5-3 safety-hardening fix (Fable-5 review, LOW “translation-fidelity cosmetic”): a session that was never imported from ANY foreign tool’s log at all — authored directly by supercode’s own agent loop, with no foreign-tool prefix (Session.raw starts empty). Currently only crate::agent::Agent’s persist_subagent_transcript (P5-3, natively-spawned spawn_subagent children) uses this — before this variant existed, that call site built its blank Session via Session::from_claude_code_str("") purely as an “empty parser to get a blank skeleton” trick, which left meta.source == SessionSource::ClaudeCode even though nothing Claude-Code-shaped was ever involved, mislabeling a native supercode spawn as an imported CC session on disk (and in any inspect/convert reading it back). Never produced by auto-detection (detect_source) or any from_<tool>_str loader — only by code that explicitly constructs a SessionMeta with this source, so no existing imported-session path can ever observe this variant appearing where it didn’t before.

Trait Implementations§

Source§

impl Clone for SessionSource

Source§

fn clone(&self) -> SessionSource

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Copy for SessionSource

Source§

impl Debug for SessionSource

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Eq for SessionSource

Source§

impl PartialEq for SessionSource

Source§

fn eq(&self, other: &SessionSource) -> bool

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Inequality operator !=. Read more
Source§

impl StructuralPartialEq for SessionSource

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more