The `agents actor run` and `actor_run` Typer commands wrapped their main
try/except around `_resolve_config_files` with a bare `except
click.exceptions.Exit: raise` clause to let resolver-raised exits
propagate cleanly. Modern Typer re-exports `typer.Exit` from its vendored
click (`typer._click.exceptions.Exit`), which is NOT a subclass of
`click.exceptions.Exit`. So `_resolve_config_files`'s
`raise typer.Exit(code=2)` for unknown-actor / no-config-data / bad-blob
cases fell through to the generic `except Exception` clause, which
re-raised as `typer.Exit(code=3)` and replaced the targeted stderr
("not found in registry") with a generic "Unexpected error" message.
Behave scenarios at `actor_run_signature.feature:38` and `:56` and three
Robot integration scenarios verified the original exit-code/message
contract and failed. Catch `(typer.Exit, click.exceptions.Exit)` instead.
The five errored scenarios in `actor_run_signature_resolve_steps.py` and
`actor_run_signature_security_steps.py` had the same root cause from the
test side: `except (SystemExit, click.exceptions.Exit)` could not catch
the raised `typer.Exit`. Widen the tuple to include `typer.Exit`.
memory_service.py's `SQLChatMessageHistory(connection_string=...)` call
broke against langchain-community 0.4.2: the keyword was renamed
`connection` (which now accepts a URL string OR an Engine). Update the
call site and refresh the local `typings/langchain_community/...`
pyright stub to match the upstream signature so typecheck stays clean.
ISSUES CLOSED: #10921
- Remove misplaced pytest test files: tests/unit/a2a_test_http_transport.py,
tests/unit/__init__.py, and features/steps/test_a2a_http_transport_pytest.py.
Project layout uses Behave in features/ exclusively per CONTRIBUTING.md.
- Resolve AmbiguousStep crash in features/steps/a2a_facade_steps.py by
deduplicating step_transport_connect / step_transport_disconnect /
"the transport should not be connected" definitions left over from the
pre-implementation stub.
- Remove all `# type: ignore[arg-type]` comments (zero-tolerance policy).
- Fix ruff lint failures in src/cleveragents/a2a/transport.py: drop unused
imports (Any, map_domain_error, BaseHandler, OpenerDirector), wrap long
log lines (E501), and switch ssl.VerifyMode literal 0 to CERT_NONE for
pyright compliance.
- Update Robot helpers (robot/helper_a2a_facade.py,
robot/helper_m6_autonomy_acceptance.py) and the m6 / consolidated Behave
scenarios to verify the new server-mode lifecycle (connect succeeds with
valid URL, send-before-connect raises RuntimeError, invalid scheme raises
ValueError) instead of the obsolete "stub raises A2aNotAvailableError"
contract.
- Broaden the "I try to connect via the transport to ..." regex so the
invalid-URL scenario outline matches the empty-string / quoted / None
example cells; alias "I disconnect the transport" with @then so it is
reachable from `And` after a `Then` keyword.
Replace the A2aHttpTransport stub with a working HTTP(S) transport that:
- Connects to remote A2A servers via HTTPS (with configurable TLS verification)
- Sends JSON-RPC 2.0 requests over HTTP POST
- Parses JSON-RPC responses into A2aResponse objects
- Handles HTTP errors (4xx/5xx) with structured error mapping
- Supports JWT Bearer token authentication
- Validates connection state before send operations
Added comprehensive test coverage:
- Behave BDD scenarios for validation and lifecycle testing
- Pytest unit tests with mocked HTTP responses covering success,
errors, network failures, auth tokens, and roundtrip serialization