GitHub
ESC

Client

Overview

ACP::Client is the core class that manages the ACP protocol lifecycle. It handles request correlation, dispatches incoming messages via a background fiber, and provides methods for all ACP protocol operations.

Constructor

.new

ACP::Client.new(
  transport : ACP::Transport,
  client_name : String = "acp-crystal",
  client_version : String = ACP::VERSION,
  client_capabilities : ACP::Protocol::ClientCapabilities = ACP::Protocol::ClientCapabilities.new
)
Parameter Type Default Description
transport Transport -- The transport layer to use
client_name String "acp-crystal" Client application name
client_version String ACP::VERSION Client version string
client_capabilities ClientCapabilities ClientCapabilities.new Advertised client capabilities

Lifecycle Methods

#initialize_connection

client.initialize_connection : ACP::Protocol::InitializeResult

Performs the ACP handshake with the agent. Transitions state from Created to Initialized. Returns agent info and capabilities.

#authenticate

client.authenticate(method_id : String) : Nil

Authenticates with the agent using the specified method. Call after initialize_connection if authentication is required.

#close

client.close : Nil

Closes the connection, stops the dispatcher fiber, and cleans up resources. Transitions state to Closed.

Session Methods

#session_new

client.session_new(
  cwd : String,
  mcp_servers : Array(ACP::Protocol::McpServerConfig)? = nil
) : ACP::Protocol::SessionNewResult

Creates a new session. Transitions state to SessionActive.

#session_load

client.session_load(
  session_id : String,
  cwd : String,
  mcp_servers : Array(ACP::Protocol::McpServerConfig)? = nil
) : ACP::Protocol::SessionLoadResult

Resumes a previous session by ID.

#session_prompt

client.session_prompt(
  blocks : Array(ACP::Protocol::ContentBlock),
  session_id : String? = nil
) : ACP::Protocol::SessionPromptResult

Sends content blocks as a prompt to the active session.

#session_prompt_text

client.session_prompt_text(
  text : String,
  session_id : String? = nil
) : ACP::Protocol::SessionPromptResult

Convenience method to send a single text prompt.

#session_cancel

client.session_cancel(session_id : String? = nil) : Nil

Cancels an in-progress generation.

#session_set_mode

client.session_set_mode(
  mode_id : String,
  session_id : String? = nil
) : Nil

Switches the session to a different mode.

#session_set_config_option

client.session_set_config_option(
  config_id : String,
  value : JSON::Any::Type,
  session_id : String? = nil
) : ACP::Protocol::SessionSetConfigOptionResult

Changes a configuration option in the active session.

Extension Methods

#ext_method

client.ext_method(
  method : String,
  params : Hash(String, JSON::Any::Type)? = nil,
  timeout : Float64? = nil
) : JSON::Any

Sends a custom extension request to the agent.

#ext_notification

client.ext_notification(
  method : String,
  params : Hash(String, JSON::Any::Type)? = nil
) : Nil

Sends a custom extension notification (no response expected).

State & Inspection

Property Type Description
state ClientState Current state (Created, Initialized, SessionActive, Closed)
closed? Bool Whether the client is closed
session_active? Bool Whether a session is active
session_id String? Current session ID
agent_capabilities AgentCapabilities? Negotiated agent capabilities
agent_info AgentInfo? Agent metadata
auth_methods Array(JSON::Any)? Available authentication methods
negotiated_protocol_version UInt16? Negotiated protocol version

Configuration

Property Type Default Description
request_timeout Float64? 30.0 Default request timeout in seconds
prompt_timeout Float64? 300.0 Prompt-specific timeout (5 minutes)

Callbacks

Callback Type Description
on_update UpdateHandler? Handle streaming session updates
on_agent_request AgentRequestHandler? Handle agent-initiated requests
on_notification NotificationHandler? Handle non-update notifications
on_disconnect (-> Nil)? Called on connection loss

Typed Client Method Handlers

Handler Params Type Result Type Description
on_read_text_file ReadTextFileParams ReadTextFileResult Handle fs/read_text_file
on_write_text_file WriteTextFileParams WriteTextFileResult Handle fs/write_text_file
on_create_terminal CreateTerminalParams CreateTerminalResult Handle terminal/create
on_terminal_output TerminalOutputParams TerminalOutputResult Handle terminal/output
on_release_terminal ReleaseTerminalParams ReleaseTerminalResult Handle terminal/release
on_wait_for_terminal_exit WaitForTerminalExitParams WaitForTerminalExitResult Handle terminal/wait_for_exit
on_kill_terminal KillTerminalParams KillTerminalResult Handle terminal/kill