alias BeamWeaver.Agent.Protocol.ReqClient
alias BeamWeaver.Agent.Subagent.AsyncSpec
subagent =
AsyncSpec.new(
name: "remote-researcher",
description: "Long-running hosted researcher.",
graph_id: "researcher",
url: "https://agents.example.test",
headers: %{"authorization" => "Bearer demo-token"}
)
request_fun = fn opts ->
IO.inspect(
%{
method: opts[:method],
url: opts[:url],
json: opts[:json],
headers: Map.keys(opts[:headers])
},
label: "Agent Protocol request"
)
{:ok, %{status: 202, body: ~s({"id":"task-42","status":"running"})}}
end
{:ok, started} =
ReqClient.start_task(
subagent,
%{assistant_id: subagent.graph_id, input: %{messages: [%{role: "user", content: "Research OTP."}]}},
request_fun: request_fun
)
{:ok, checked} =
ReqClient.check_task(
subagent,
"thread/with spaces",
request_fun: request_fun
)
{:ok, updated} =
ReqClient.update_task(
subagent,
"thread/with spaces",
"Narrow the research to supervision trees.",
request_fun: request_fun
)
IO.inspect(started, label: "normalized start body")
IO.inspect(checked, label: "normalized check body")
IO.inspect(updated, label: "normalized update body")