lib/pi/session/event.ex
defmodule Pi.Session.Event do
@moduledoc "Structured event emitted by a server-owned Pi session process."
@enforce_keys [:type, :at]
defstruct [:type, :at, :data]
@type type ::
:started
| :llm
| :message
| :done
| :failed
| :cancelled
| :agent_job_started
| :agent_job_finished
@type t :: %__MODULE__{type: type(), at: DateTime.t(), data: term()}
def new(type, data \\ nil) when is_atom(type) do
%__MODULE__{type: type, at: DateTime.utc_now(), data: data}
end
end