Skip to content

feat: AgentBeats A2A adapter, re-ported onto the compiled-Steps engine#661

Closed
xdotli wants to merge 6 commits into
v0.6-integrationfrom
feat/agentbeats-a2a-candidate
Closed

feat: AgentBeats A2A adapter, re-ported onto the compiled-Steps engine#661
xdotli wants to merge 6 commits into
v0.6-integrationfrom
feat/agentbeats-a2a-candidate

Conversation

@xdotli

@xdotli xdotli commented Jun 10, 2026

Copy link
Copy Markdown
Member

A clean-base port of the AgentBeats Agent-to-Agent adapter work from #345 by @Yiminnn — all original commits cherry-picked with authorship preserved (-x provenance trailers), re-ported from the retired _run_scene loop onto the current compiled-Steps engine and three-way Docker teardown.

On top of the port: workspace-containment regression tests (mutation-verified — traversal/absolute/shared-prefix paths all rejected), per-turn agent_execution timing accumulation matching ACP semantics, role-parse pins for the now-honored timeout_sec/idle_timeout_sec/skills_dir/capabilities keys, and honest docstrings for the non-interactive task-status mapping. Full suite green (2,829 passed).

This does NOT close #345 — it exists because #345 conflicts with the current base, and lands only with @Yiminnn's review/sign-off.

Yiminnn and others added 6 commits June 10, 2026 09:38
(cherry picked from commit 50df623)
(cherry picked from commit 0772e94)
…down

The cherry-picked A2A work was ported from the retired _run_scene loop to
the compiled-Steps engine, and the Docker stop() teardown gained a
three-way down-command selection during conflict resolution. Cover the
ported/changed code directly:

- ACP-to-A2A turn switch disconnects the live ACP session exactly once
  and routes the A2A turn through the participant adapter only
- self-built images are torn down with --rmi all when safe cleanup is off
… state mapping

Review hardening on the cherry-picked AgentBeats A2A participant work:

- Pin the workspace-containment boundary with a parametrized regression
  test: final_response files[].path comes from an external (untrusted)
  endpoint and _upload_a2a_file runs mkdir/upload/chown as root, so
  traversal, absolute, and shared-prefix escapes must raise before any
  sandbox command runs. Deleting the containment raise previously left
  the suite green (surviving mutant on a security boundary); the new
  test fails on that mutant.
- Accumulate _timing["agent_execution"] across A2A turns, matching the
  ACP execute() accumulation semantics. Previously only the first turn
  was recorded, under-counting multi-turn scenes.
- Pin YAML role parsing for transport/endpoint_url plus the role keys
  the loader previously ignored and now honors (timeout_sec,
  idle_timeout_sec, skills_dir, capabilities) — a behavior change for
  existing YAML files that already carried those keys.
- Replace the stale contract-only module docstring in agents/a2a.py,
  document why non-recoverable a2a task states (input-required,
  auth-required, rejected, unknown) map to failed in non-interactive
  benchmark turns, and document the path-string containment trust model
  for materialized files.
@xdotli

xdotli commented Jun 10, 2026

Copy link
Copy Markdown
Member Author

@Yiminnn requesting your review/sign-off — this is your #345 work cherry-picked with authorship preserved and re-ported onto the current compiled-Steps engine (details in the PR body). If the port looks faithful to your intent, approve and we'll land it on v0.6-integration; #345 stays yours to close or keep.

@xdotli xdotli requested a review from Yiminnn June 10, 2026 18:52
@xdotli xdotli mentioned this pull request Jun 10, 2026
6 tasks
@xdotli xdotli deleted the branch v0.6-integration June 12, 2026 03:38
@xdotli xdotli closed this Jun 12, 2026
@xdotli xdotli deleted the feat/agentbeats-a2a-candidate branch June 14, 2026 21:44
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants