-module(claude@agent@config). -compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]). -define(FILEPATH, "src/claude/agent/config.gleam"). -export([new/2, with_system/2, with_max_iterations/2, with_model/2, with_thinking/2, with_tool_timeout/2, with_max_tokens/2, with_tool_choice/2]). -export_type([agent_config/0]). -if(?OTP_RELEASE >= 27). -define(MODULEDOC(Str), -moduledoc(Str)). -define(DOC(Str), -doc(Str)). -else. -define(MODULEDOC(Str), -compile([])). -define(DOC(Str), -compile([])). -endif. -type agent_config() :: {agent_config, claude@client:config(), binary(), integer(), gleam@option:option(binary()), claude@types@tool:registry(), gleam@option:option(claude@types@tool:tool_choice()), gleam@option:option(integer()), integer(), integer()}. -file("src/claude/agent/config.gleam", 27). ?DOC( " Create a new AgentConfig with sensible defaults.\n" "\n" " Defaults:\n" " - model: config.default_model\n" " - max_tokens: config.default_max_tokens\n" " - max_iterations: 10\n" " - tool_timeout_ms: 30_000 (30 seconds)\n" ). -spec new(claude@client:config(), claude@types@tool:registry()) -> agent_config(). new(Client, Tools) -> {agent_config, Client, erlang:element(4, Client), erlang:element(5, Client), none, Tools, none, none, 10, 30000}. -file("src/claude/agent/config.gleam", 45). ?DOC(" Set the system prompt.\n"). -spec with_system(agent_config(), binary()) -> agent_config(). with_system(Config, System) -> {agent_config, erlang:element(2, Config), erlang:element(3, Config), erlang:element(4, Config), {some, System}, erlang:element(6, Config), erlang:element(7, Config), erlang:element(8, Config), erlang:element(9, Config), erlang:element(10, Config)}. -file("src/claude/agent/config.gleam", 50). ?DOC(" Set the maximum number of agent loop iterations.\n"). -spec with_max_iterations(agent_config(), integer()) -> agent_config(). with_max_iterations(Config, Max) -> {agent_config, erlang:element(2, Config), erlang:element(3, Config), erlang:element(4, Config), erlang:element(5, Config), erlang:element(6, Config), erlang:element(7, Config), erlang:element(8, Config), Max, erlang:element(10, Config)}. -file("src/claude/agent/config.gleam", 55). ?DOC(" Set the model to use.\n"). -spec with_model(agent_config(), binary()) -> agent_config(). with_model(Config, Model) -> {agent_config, erlang:element(2, Config), Model, erlang:element(4, Config), erlang:element(5, Config), erlang:element(6, Config), erlang:element(7, Config), erlang:element(8, Config), erlang:element(9, Config), erlang:element(10, Config)}. -file("src/claude/agent/config.gleam", 60). ?DOC(" Enable extended thinking with a budget (in tokens).\n"). -spec with_thinking(agent_config(), integer()) -> agent_config(). with_thinking(Config, Budget) -> {agent_config, erlang:element(2, Config), erlang:element(3, Config), erlang:element(4, Config), erlang:element(5, Config), erlang:element(6, Config), erlang:element(7, Config), {some, Budget}, erlang:element(9, Config), erlang:element(10, Config)}. -file("src/claude/agent/config.gleam", 65). ?DOC(" Set the per-tool execution timeout in milliseconds.\n"). -spec with_tool_timeout(agent_config(), integer()) -> agent_config(). with_tool_timeout(Config, Timeout_ms) -> {agent_config, erlang:element(2, Config), erlang:element(3, Config), erlang:element(4, Config), erlang:element(5, Config), erlang:element(6, Config), erlang:element(7, Config), erlang:element(8, Config), erlang:element(9, Config), Timeout_ms}. -file("src/claude/agent/config.gleam", 70). ?DOC(" Set the max tokens for API calls.\n"). -spec with_max_tokens(agent_config(), integer()) -> agent_config(). with_max_tokens(Config, Max_tokens) -> {agent_config, erlang:element(2, Config), erlang:element(3, Config), Max_tokens, erlang:element(5, Config), erlang:element(6, Config), erlang:element(7, Config), erlang:element(8, Config), erlang:element(9, Config), erlang:element(10, Config)}. -file("src/claude/agent/config.gleam", 75). ?DOC(" Set the tool choice strategy.\n"). -spec with_tool_choice(agent_config(), claude@types@tool:tool_choice()) -> agent_config(). with_tool_choice(Config, Choice) -> {agent_config, erlang:element(2, Config), erlang:element(3, Config), erlang:element(4, Config), erlang:element(5, Config), erlang:element(6, Config), {some, Choice}, erlang:element(8, Config), erlang:element(9, Config), erlang:element(10, Config)}.