defmodule Pi.Protocol.Session.Snapshot do
@moduledoc "Renderer-neutral snapshot of a server-owned Pi session."
use JSONCodec, case: :camel, fast_path: :json
alias Pi.Protocol.Session.Event
defstruct [
:id,
:parent_id,
:name,
:status,
:result,
:error,
:started_at,
:updated_at,
:last_activity_at,
:completed_at,
:current_started_at,
:duration_ms,
:prompt,
:response,
:latest,
:current,
usage: nil,
run_count: 0,
turn_count: 0,
message_count: 0,
recent_output: [],
events: []
]
@type t :: %__MODULE__{
id: String.t(),
parent_id: String.t() | nil,
name: String.t() | nil,
status: String.t(),
result: term(),
error: String.t() | nil,
started_at: String.t() | nil,
updated_at: String.t() | nil,
last_activity_at: String.t() | nil,
completed_at: String.t() | nil,
current_started_at: String.t() | nil,
duration_ms: non_neg_integer() | nil,
prompt: String.t() | nil,
response: String.t() | nil,
latest: String.t() | nil,
current: String.t() | nil,
usage: map() | nil,
run_count: non_neg_integer(),
turn_count: non_neg_integer(),
message_count: non_neg_integer(),
recent_output: [String.t()],
events: [Event.t()]
}
end