This commit is contained in:
@@ -213,16 +213,6 @@ def build_tools(ctx: ToolContext) -> list[Any]:
|
||||
return json.dumps({
|
||||
"error": "no files in agents/" + name + "/ — write some first",
|
||||
})
|
||||
try:
|
||||
_assert_current_agent_project(bundle_bytes)
|
||||
except RuntimeError as exc:
|
||||
return json.dumps({
|
||||
"error": str(exc),
|
||||
"hint": (
|
||||
"Call init_agent_template first, then edit the generated "
|
||||
"DeepAgents files instead of replacing agent.py from memory."
|
||||
),
|
||||
})
|
||||
b64 = base64.b64encode(bundle_bytes).decode("ascii")
|
||||
script = (
|
||||
"set -e\n"
|
||||
@@ -289,17 +279,6 @@ def build_tools(ctx: ToolContext) -> list[Any]:
|
||||
bundle_bytes = _tarball_workspace_dir(s3, bucket, prefix)
|
||||
if not bundle_bytes:
|
||||
return json.dumps({"error": f"no files at agents/{name}/"})
|
||||
try:
|
||||
_assert_current_agent_project(bundle_bytes)
|
||||
except RuntimeError as exc:
|
||||
return json.dumps({
|
||||
"error": str(exc),
|
||||
"hint": (
|
||||
"Run init_agent_template again or restore the generated "
|
||||
"DeepAgents scaffold before deploying."
|
||||
),
|
||||
})
|
||||
|
||||
# Read the entrypoint from a2a.yaml so we can pass it verbatim.
|
||||
entrypoint = _read_entrypoint(bundle_bytes) or f"agent:{_class_name(name)}"
|
||||
|
||||
@@ -542,18 +521,6 @@ def _read_bundle_text(bundle: bytes, path: str) -> str | None:
|
||||
return None
|
||||
|
||||
|
||||
def _assert_current_agent_project(bundle: bytes) -> None:
|
||||
files = {
|
||||
path: text
|
||||
for path in ("agent.py", "requirements.txt")
|
||||
if (text := _read_bundle_text(bundle, path)) is not None
|
||||
}
|
||||
_assert_current_deepagents_scaffold(
|
||||
files,
|
||||
source="agent project",
|
||||
)
|
||||
|
||||
|
||||
def _class_name(slug: str) -> str:
|
||||
return "".join(p.capitalize() for p in re.split(r"[-_]+", slug) if p) or "MyAgent"
|
||||
|
||||
@@ -579,58 +546,9 @@ def _render_a2a_init_template(
|
||||
),
|
||||
"requirements.txt": _render_sdk_template("requirements.txt.tmpl"),
|
||||
}
|
||||
_assert_current_a2a_init_template(files)
|
||||
return files
|
||||
|
||||
|
||||
def _assert_current_a2a_init_template(files: dict[str, str]) -> None:
|
||||
_assert_current_deepagents_scaffold(
|
||||
files,
|
||||
source="installed a2a-pack init template",
|
||||
)
|
||||
|
||||
|
||||
def _assert_current_deepagents_scaffold(
|
||||
files: dict[str, str],
|
||||
*,
|
||||
source: str,
|
||||
) -> None:
|
||||
required_markers = {
|
||||
"agent.py": (
|
||||
"LLMProvisioning.CALLER_PROVIDED",
|
||||
"ctx.llm",
|
||||
"ctx.workspace_backend()",
|
||||
"create_deep_agent",
|
||||
"wrap_model_call",
|
||||
"ChatOpenAI",
|
||||
),
|
||||
"requirements.txt": (
|
||||
"deepagents>=0.5.0",
|
||||
"langchain-openai",
|
||||
),
|
||||
}
|
||||
missing: list[str] = []
|
||||
for path, markers in required_markers.items():
|
||||
content = files.get(path, "")
|
||||
for marker in markers:
|
||||
if marker not in content:
|
||||
missing.append(f"{path}:{marker}")
|
||||
if not missing:
|
||||
return
|
||||
|
||||
try:
|
||||
import a2a_pack
|
||||
|
||||
version = getattr(a2a_pack, "__version__", "unknown")
|
||||
except Exception: # noqa: BLE001
|
||||
version = "unknown"
|
||||
raise RuntimeError(
|
||||
f"{source} is stale; expected the 0.1.4+ "
|
||||
"DeepAgents caller-LLM scaffold. "
|
||||
f"a2a_pack={version}; missing markers: {', '.join(missing)}"
|
||||
)
|
||||
|
||||
|
||||
def _render_sdk_template(template: str, /, **vars: str) -> str:
|
||||
text = (
|
||||
resources.files("a2a_pack.cli.templates")
|
||||
|
||||
Reference in New Issue
Block a user