Copilot. Session
(Copilot SDK v2.3.0)
Copy Markdown
Represents a single conversation session with the Copilot CLI.
A session maintains conversation state, handles events, and manages tool
execution. Sessions are created via Copilot.Client.create_session/2 or
resumed via Copilot.Client.resume_session/3.
Event subscriptions
Use on/2 (all events) or on/3 (typed events) to subscribe. The returned
reference can be passed to off/2 to unsubscribe.
Example
{:ok, session} = Copilot.Client.create_session(client)
ref = Copilot.Session.on(session, fn event -> IO.inspect(event) end)
{:ok, response} = Copilot.Session.send_and_wait(session, %MessageOptions{prompt: "Hi"})
Copilot.Session.off(session, ref)
Copilot.Session.destroy(session)
Summary
Functions
Abort the currently processing message.
Returns a specification to start this module under a supervisor.
Destroy this session and release all resources.
Get all session messages/events from history.
Get metadata for this session.
Unsubscribe an event handler by reference.
Subscribe to all session events.
Subscribe to a specific event type (e.g. "assistant.message").
Register a handler for exit plan mode requests.
Send a message to the session (fire-and-forget).
Send a message and wait for the session to become idle.
Get the session ID.
Get the workspace path (when infinite sessions are enabled).
Functions
@spec abort(GenServer.server()) :: :ok | {:error, any()}
Abort the currently processing message.
Returns a specification to start this module under a supervisor.
See Supervisor.
@spec destroy(GenServer.server()) :: :ok
Destroy this session and release all resources.
@spec get_messages(GenServer.server()) :: {:ok, [map()]} | {:error, any()}
Get all session messages/events from history.
@spec get_metadata(GenServer.server()) :: {:ok, map()} | {:error, any()}
Get metadata for this session.
@spec off(GenServer.server(), reference()) :: :ok
Unsubscribe an event handler by reference.
@spec on(GenServer.server(), (map() -> any())) :: reference()
Subscribe to all session events.
Returns a reference for unsubscribing with off/2.
@spec on(GenServer.server(), String.t(), (map() -> any())) :: reference()
Subscribe to a specific event type (e.g. "assistant.message").
Returns a reference for unsubscribing with off/2.
@spec register_exit_plan_mode_handler(GenServer.server(), (... -> any())) :: :ok
Register a handler for exit plan mode requests.
@spec send(GenServer.server(), Copilot.Types.MessageOptions.t()) :: {:ok, String.t()} | {:error, any()}
Send a message to the session (fire-and-forget).
Returns {:ok, message_id} on success.
@spec send_and_wait(GenServer.server(), Copilot.Types.MessageOptions.t(), timeout()) :: {:ok, map() | nil} | {:error, any()}
Send a message and wait for the session to become idle.
Returns {:ok, assistant_message_event | nil} when done,
or {:error, reason} on timeout/error.
@spec session_id(GenServer.server()) :: String.t()
Get the session ID.
@spec workspace_path(GenServer.server()) :: String.t() | nil
Get the workspace path (when infinite sessions are enabled).