list_a2a_pack(subdir) / read_a2a_pack(path) let the builder browse the
installed SDK at runtime — the same package the scaffolded agents
import. Path-traversal guarded; reads capped at 64 KiB.
Why: the system prompt only carries an abridged example. When the LLM
needed to recall what RunContext exposes (ctx.workspace API, ctx.ask
vs ctx.collect, runtime.apt_packages…) it would guess. Now it can
read the actual source.
Prompt updated to point at the new tools.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
So generated agents that need ffmpeg / imagemagick / etc. declare them
in a2a.yaml instead of failing at runtime with a missing binary.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
ctx.workspace is a property that raises PermissionError when the runtime
didn't provision a workspace. The original `getattr(ctx.workspace, …)`
guard didn't catch that — the property call happens before getattr can
fall back. When the agent is invoked over the local MCP gateway
(a2amcp), which has no grant flow, this surfaced as a 500 instead of
the intended "run me through the orchestrator" message.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
cp_deploy_tarball now blocks after the from-tarball POST, polling the new
agent's /.well-known/agent-card until version matches the deployed version
(180s timeout, exponential backoff capped at 10s). On success it returns
live_skills with each skill's input_schema so the builder LLM can verify
the advertised shape matches the code it wrote — catches the schema/code
skew that caused downstream 400s on call_agent.
cp_refresh_agent(name) is a new tool that forces the CP to re-fetch the
live card via GET /v1/agents/{name}. Use when a pod was redeployed out
of band and the CP cache is stale; cp_deploy_tarball handles the in-band
case automatically.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>