fix: persist builder deepagent files
All checks were successful
build / build (push) Successful in 31s

This commit is contained in:
robert
2026-05-17 18:57:29 -03:00
parent 34cbaa702d
commit de2887ff6f
6 changed files with 61 additions and 5 deletions

View File

@@ -16,6 +16,7 @@ class BuilderContext:
bucket: str
cp_jwt: str | None = None
settings: Settings | None = None
project_prefix: str | None = None
# Optional caller-provided LLM creds (when the outer platform Card
# declares llm_provisioning=caller_provided). Falls back to settings.
llm_base_url: str | None = None
@@ -128,6 +129,58 @@ def build_agent_builder(ctx: BuilderContext) -> Any:
api_key=ctx.llm_api_key or settings.litellm_key,
temperature=0.0,
)
return create_deep_agent(
model=model, tools=tools, system_prompt=SYSTEM_PROMPT,
kwargs: dict[str, Any] = {
"model": model,
"tools": tools,
"system_prompt": SYSTEM_PROMPT,
}
backend = _build_project_backend(ctx, settings=settings)
if backend is not None:
kwargs["backend"] = backend
return create_deep_agent(**kwargs)
def _build_project_backend(ctx: BuilderContext, *, settings: Settings) -> Any | None:
"""Persist DeepAgents built-in file tools into this project directory.
The explicit builder tools remain the preferred path, but this prevents
a model-selected DeepAgents ``write_file`` from disappearing into
LangGraph state. Scope it to the project prefix, not the whole bucket.
"""
if not ctx.project_prefix:
return None
prefix = ctx.project_prefix.strip("/")
if not prefix:
return None
try:
from a2a_pack import Grant, WorkspaceAccess, WorkspaceMode
from a2a_pack.deepagents import WorkspaceBackend
from a2a_pack.workspace import MinIOWorkspaceClient
except Exception: # noqa: BLE001
return None
workspace = MinIOWorkspaceClient(
bucket=ctx.bucket,
endpoint_url=settings.minio_endpoint,
access_key_id=settings.minio_access_key,
secret_access_key=settings.minio_secret_key,
access=WorkspaceAccess.dynamic(
max_files=2000,
allowed_modes=(WorkspaceMode.READ_ONLY, WorkspaceMode.READ_WRITE_OVERLAY),
require_reason=False,
),
issuer="agent-builder",
)
workspace.install_grant(
Grant(
grant_id=f"agent-builder-{prefix.replace('/', '-')}",
issuer="agent-builder",
audience="agent-builder",
bucket=ctx.bucket,
mode=WorkspaceMode.READ_WRITE_OVERLAY,
allow_patterns=(f"{prefix}/**", "outputs/**"),
deny_patterns=(),
outputs_prefix=None,
)
)
return WorkspaceBackend(workspace)