Packages
claude_code
0.35.0
0.36.5
0.36.4
0.36.3
0.36.2
0.36.1
0.36.0
0.35.0
0.34.0
0.33.1
0.32.2
0.32.0
0.31.0
0.30.0
0.29.0
0.28.0
0.27.0
0.26.0
0.25.0
0.24.0
0.23.0
0.22.0
0.21.0
0.20.0
0.19.0
0.18.0
0.17.0
0.16.0
0.15.0
0.14.0
0.13.3
0.13.2
0.13.1
0.13.0
0.12.0
0.11.0
0.10.0
0.9.0
0.8.1
0.8.0
0.7.0
0.6.0
0.5.0
0.4.0
0.3.0
0.2.0
0.1.0
Claude Agent SDK for Elixir – Build AI agents with Claude Code
Current section
Files
Jump to
Current section
Files
lib/claude_code/adapter/node/callback_proxy.ex
defmodule ClaudeCode.Adapter.Node.CallbackProxy do
@moduledoc false
use GenServer
alias ClaudeCode.Adapter.ControlHandler
alias ClaudeCode.Adapter.Port, as: AdapterPort
alias ClaudeCode.Hook.Registry, as: HookRegistry
require Logger
defstruct [:sdk_mcp_servers, :hook_registry]
@doc false
def start_link(opts) do
GenServer.start_link(__MODULE__, opts)
end
@impl GenServer
def init(opts) do
state = %__MODULE__{
sdk_mcp_servers: AdapterPort.extract_sdk_mcp_servers(Keyword.take(opts, [:mcp_servers])),
hook_registry: Keyword.get(opts, :hook_registry, %HookRegistry{})
}
{:ok, state}
end
@impl GenServer
def handle_call({:control_request, msg}, _from, state) do
request = get_in(msg, ["request"])
subtype = get_in(request, ["subtype"])
response = dispatch(subtype, request, state)
{:reply, response, state}
end
defp dispatch("mcp_message", request, state) do
server_name = request["server_name"]
jsonrpc = request["message"]
{:ok, ControlHandler.handle_mcp_message(server_name, jsonrpc, state.sdk_mcp_servers)}
end
defp dispatch("hook_callback", request, state) do
ControlHandler.handle_hook_callback(request, state.hook_registry)
end
defp dispatch("can_use_tool", request, state) do
{:ok, ControlHandler.handle_can_use_tool(request, state.hook_registry, %{})}
end
defp dispatch(subtype, _request, _state) do
Logger.warning("CallbackProxy received unhandled control request: #{subtype}")
{:error, "Unhandled control request: #{subtype}"}
end
end