Files
wehub-resource-sync 4b6817381b
CI (OpenClaw E2E) / openclaw test (push) Has been cancelled
CI / coverage-report (push) Has been cancelled
CI / test-kubernetes (push) Has been cancelled
CI / should-run-thorough (push) Has been cancelled
CI / test-thorough (cloudwatch-demo) (push) Has been cancelled
CI / test-thorough (flink-ecs) (push) Has been cancelled
CI / test-thorough (upstream-lambda) (push) Has been cancelled
CI / test-thorough (prefect-ecs-fargate) (push) Has been cancelled
Release / build-binaries (zip, opensre.exe, onefile, windows-latest, windows-x64) (push) Has been cancelled
Benchmark image — build + push to ECR (any adapter) / build + push (push) Has been cancelled
CI / quality (ubuntu-latest) (push) Has been cancelled
CI / test (tools-runtime) (push) Has been cancelled
CI / test (e2e-general) (push) Has been cancelled
CI / test (cli-runtime) (push) Has been cancelled
CI / test (e2e-provider-and-openclaw) (push) Has been cancelled
CI / test (integrations-and-misc) (push) Has been cancelled
Release / verify (push) Has been cancelled
Release / build-python-dist (push) Has been cancelled
Release / build-binaries (tar.gz, opensre, onedir, macos-15-intel, darwin-x64) (push) Has been cancelled
Release / build-binaries (tar.gz, opensre, onedir, macos-latest, darwin-arm64) (push) Has been cancelled
Release / build-binaries (tar.gz, opensre, onedir, ubuntu-22.04, linux-x64) (push) Has been cancelled
Release / publish-release (push) Has been cancelled
Release / publish-main-release (push) Has been cancelled
Interactive Shell Live (PR + post-merge) / turn-checks (no-LLM) (push) Has been cancelled
CodeQL / Analyze (python) (push) Has been cancelled
Interactive Shell Live (PR + post-merge) / turn-live shard ${{ matrix.shard_index }} (push) Has been cancelled
Release / prepare (push) Has been cancelled
Release / build-binaries (tar.gz, opensre, onedir, ubuntu-22.04-arm, linux-arm64) (push) Has been cancelled
Synthetic Deterministic Tests / Synthetic offline (deterministic) (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 13:10:45 +08:00

60 lines
1.9 KiB
Python

"""Shared factory for building runtime :class:`~core.agent.Agent` instances.
Each agent harness surface (action, evidence, gateway) assembles its per-turn
configuration in a surface-specific factory and hands it to :func:`build_agent`,
the single construction site for :class:`~core.agent.Agent` across surfaces.
"""
from __future__ import annotations
from dataclasses import dataclass, field
from typing import Any, Generic, TypeVar
from core.agent import Agent
from core.events import RuntimeEventCallback
from core.execution import ToolExecutionHooks
from core.llm.types import AgentLLMClient, ResolvedIntegrations
from core.types import RuntimeTool
RuntimeToolT = TypeVar("RuntimeToolT", bound=RuntimeTool)
@dataclass(frozen=True)
class AgentConfig(Generic[RuntimeToolT]): # noqa: UP046
"""Immutable per-turn config the runtime :class:`Agent` needs to construct.
Surfaces assemble one of these and hand it to :func:`build_agent`.
"""
llm: AgentLLMClient
system: str
tools: tuple[RuntimeToolT, ...]
resolved_integrations: ResolvedIntegrations
max_iterations: int
tool_resources: dict[str, Any] = field(default_factory=dict)
tool_hooks: ToolExecutionHooks | None = None
on_runtime_event: RuntimeEventCallback | None = None
def build_agent( # noqa: UP047
config: AgentConfig[RuntimeToolT],
) -> Agent[RuntimeToolT]:
"""Construct a runtime :class:`Agent` from an :class:`AgentConfig`.
This is the single place :class:`Agent` is instantiated across the
harness — surfaces call it after building their config.
"""
return Agent[RuntimeToolT](
llm=config.llm,
system=config.system,
tools=config.tools,
resolved_integrations=config.resolved_integrations,
max_iterations=config.max_iterations,
tool_resources=config.tool_resources,
tool_hooks=config.tool_hooks,
on_runtime_event=config.on_runtime_event,
)
__all__ = ["AgentConfig", "build_agent"]