Source code for fermilink.cli.commands.agent
from __future__ import annotations
import argparse
def _cli():
from fermilink import cli
return cli
[docs]
def cmd_agent(args: argparse.Namespace) -> int:
"""
Execute the `agent` CLI subcommand.
Parameters
----------
args : argparse.Namespace
Parsed CLI arguments namespace for the subcommand.
Returns
-------
int
Process exit code (`0` on success, non-zero on failure).
"""
cli = _cli()
desired_provider = args.provider
desired_sandbox_policy: str | None = None
model_unset = object()
desired_model: str | None | object = model_unset
reasoning_effort_unset = object()
desired_reasoning_effort: str | None | object = reasoning_effort_unset
if args.sandbox and args.bypass_sandbox:
raise cli.PackageError("Choose only one of --sandbox or --bypass-sandbox.")
if args.sandbox:
desired_sandbox_policy = "enforce"
elif args.bypass_sandbox:
desired_sandbox_policy = "bypass"
if getattr(args, "clear_model", False):
desired_model = None
elif isinstance(getattr(args, "model", None), str):
model_text = str(args.model).strip()
if not model_text:
raise cli.PackageError("--model cannot be empty.")
desired_model = model_text
if getattr(args, "clear_reasoning_effort", False):
desired_reasoning_effort = None
elif isinstance(getattr(args, "reasoning_effort", None), str):
effort_text = str(args.reasoning_effort).strip().lower()
if not effort_text:
raise cli.PackageError("--reasoning-effort cannot be empty.")
desired_reasoning_effort = effort_text
if (
desired_provider is None
and desired_sandbox_policy is None
and desired_model is model_unset
and desired_reasoning_effort is reasoning_effort_unset
):
policy = cli.load_agent_runtime_policy()
payload = policy.as_dict()
lines = [
f"Provider: {policy.provider}.",
(
f"Sandbox: enabled ({policy.sandbox_mode})."
if policy.sandbox_policy == "enforce"
else "Sandbox: bypassed."
),
(
f"Model override: {policy.model}."
if isinstance(policy.model, str) and policy.model
else "Model override: provider default."
),
(
f"Reasoning effort override: {policy.reasoning_effort}."
if (
isinstance(policy.reasoning_effort, str) and policy.reasoning_effort
)
else "Reasoning effort override: provider default."
),
]
cli._emit_output(args, payload, lines)
return 0
save_kwargs: dict[str, object] = {
"provider": desired_provider,
"sandbox_policy": desired_sandbox_policy,
}
if desired_model is not model_unset:
save_kwargs["model"] = desired_model
if desired_reasoning_effort is not reasoning_effort_unset:
save_kwargs["reasoning_effort"] = desired_reasoning_effort
updated = cli.save_agent_runtime_policy(**save_kwargs)
payload = updated.as_dict()
lines = [
f"Provider set to {updated.provider}.",
(
f"Sandbox enforced with mode {updated.sandbox_mode}."
if updated.sandbox_policy == "enforce"
else (
"Sandbox bypass enabled (Codex internal sandbox only; "
"external host restrictions may still apply)."
)
),
(
f"Model override set to {updated.model}."
if isinstance(updated.model, str) and updated.model
else "Model override cleared (provider default model selection)."
),
(
f"Reasoning effort override set to {updated.reasoning_effort}."
if (isinstance(updated.reasoning_effort, str) and updated.reasoning_effort)
else (
"Reasoning effort override cleared "
"(provider default reasoning effort)."
)
),
]
cli._emit_output(args, payload, lines)
return 0