Packages
claude_code
0.32.2
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/test.ex
defmodule ClaudeCode.Adapter.Test do
@moduledoc """
Test adapter that delivers mock messages synchronously.
This adapter retrieves messages from registered stubs in `ClaudeCode.Test`
and sends them to the Session. Used for testing applications built on ClaudeCode.
"""
@behaviour ClaudeCode.Adapter
use GenServer
alias ClaudeCode.Adapter
# ============================================================================
# Client API (Adapter Behaviour)
# ============================================================================
@impl ClaudeCode.Adapter
def start_link(session, opts) do
GenServer.start_link(__MODULE__, {session, opts})
end
@impl ClaudeCode.Adapter
def send_query(adapter, request_id, prompt, opts) do
GenServer.cast(adapter, {:query, request_id, prompt, opts})
:ok
end
@impl ClaudeCode.Adapter
def health(_adapter) do
:healthy
end
@impl ClaudeCode.Adapter
def stop(adapter) do
GenServer.stop(adapter, :normal)
end
# ============================================================================
# Server Callbacks
# ============================================================================
@impl GenServer
def init({session, opts}) do
stub_name = Keyword.fetch!(opts, :stub_name)
# Use callers passed from Session (captured when Session was started from test process)
callers = Keyword.get(opts, :callers, [])
state = %{
session: session,
stub_name: stub_name,
callers: callers
}
# Link to session for lifecycle management
Process.link(session)
Adapter.notify_status(session, :ready)
{:ok, state}
end
@impl GenServer
def handle_cast({:query, request_id, prompt, opts}, state) do
# Get messages from stub via ClaudeCode.Test, using captured callers
messages = ClaudeCode.Test.stream(state.stub_name, prompt, opts, state.callers)
Enum.each(messages, fn msg ->
Adapter.notify_message(state.session, request_id, msg)
end)
# No notify_done needed — Session auto-completes on ResultMessage detection.
{:noreply, state}
end
end