defmodule Pixir.Tools.CloseAgent do @moduledoc "Close or cancel a Subagent thread." use Pixir.Tool alias Pixir.{Subagents, Tool} @impl Pixir.Tool def __tool__ do %{ name: "close_agent", description: "Close a Subagent thread, interrupting it first if it is still running.", parameters: %{ "type" => "object", "properties" => %{"id" => %{"type" => "string", "description" => "Subagent id"}}, "required" => ["id"] } } end @impl Pixir.Tool def execute(%{"id" => id}, context) when is_binary(id) do with {:ok, agent} <- Subagents.close(context.session_id, id, workspace: context.workspace) do {:ok, %{"output" => "Closed #{id}.", "subagent" => agent}} end end def execute(_args, _context), do: {:error, Tool.error(:invalid_args, "id is required", %{})} @impl Pixir.Tool def dry_run(%{"id" => id}, _context) when is_binary(id) do {:ok, %{"dry_run" => true, "would" => "close_agent", "id" => id}} end def dry_run(_args, _context), do: {:error, Tool.error(:invalid_args, "id is required", %{})} end