GeminiCliSdk.Runtime.CLI (gemini_cli_sdk v0.2.0)

Copy Markdown View Source

Session-oriented runtime kit for the shared Gemini CLI lane.

The tagged mailbox event atom is adapter detail. Higher-level callers should consume GeminiCliSdk.Stream or projected GeminiCliSdk.Types.* events instead of treating the underlying session tag as core identity.

Summary

Types

start_option()

@type start_option() ::
  {:prompt, String.t()}
  | {:options, GeminiCliSdk.Options.t()}
  | {:execution_surface,
     CliSubprocessCore.ExecutionSurface.t() | map() | keyword()}
  | {:subscriber, pid() | {pid(), reference() | :legacy}}
  | {:metadata, map()}
  | {:session_event_tag, atom()}

Functions

build_invocation(opts)

@spec build_invocation(keyword()) ::
  {:ok, CliSubprocessCore.Command.t()} | {:error, term()}

capabilities()

@spec capabilities() :: [atom()]

close(session)

@spec close(pid()) :: :ok

end_input(session)

@spec end_input(pid()) :: :ok | {:error, term()}

info(session)

@spec info(pid()) :: map()

interrupt(session)

@spec interrupt(pid()) :: :ok | {:error, term()}

list_provider_sessions(opts \\ [])

@spec list_provider_sessions(keyword()) :: {:ok, [map()]} | {:error, term()}

new_projection_state()

@spec new_projection_state() :: map()

project_event(event, state)

@spec project_event(CliSubprocessCore.Event.t(), map()) ::
  {[GeminiCliSdk.Types.stream_event()], map()}

send_input(session, input, opts \\ [])

@spec send_input(pid(), iodata(), keyword()) :: :ok | {:error, term()}

start_session(opts)

@spec start_session([start_option()]) ::
  {:ok, pid(),
   %{info: map(), projection_state: map(), temp_dir: String.t() | nil}}
  | {:error, term()}

stderr_chunk(event)

@spec stderr_chunk(CliSubprocessCore.Event.t()) :: String.t() | nil

subscribe(session, pid, ref)

@spec subscribe(pid(), pid(), reference()) :: :ok | {:error, term()}