Skip to content

Conversation

@gspencergoog
Copy link
Collaborator

@gspencergoog gspencergoog commented Jan 8, 2026

Summary

This PR formalizes the A2UI v0.9 specification as a first-class Agent-to-Agent (A2A) extension, similar to the 0.8 specification. It streamlines the protocol by unifying UI components and client-side functions into a single Catalog structure.

Additionally, this PR improves the schema testing infrastructure by transitioning to a Python-based test runner capable of validating complex scenarios, including the new unified catalogs and client-side logic.

Key Changes

1. A2A Extension Formalization

  • Extension Specification: Added a2ui_extension_specification.md defining the extension URI (https://a2ui.org/a2a-extension/a2ui/v0.9) and MIME type (application/json+a2ui) (mostly a copy of what is in 0.8)
  • Metadata-Driven Capabilities: Replaced the standalone capabilities message with an a2uiClientCapabilities object sent in the A2A metadata envelope. This ensures that the agent always has the latest client capabilities without an explicit handshake (same as 0.8).

2. Unified Catalog System

  • Consolidation: Merged standard_catalog_definition.json and standard_function_catalog.json into a single, unified standard_catalog.json.
  • Structural Alignment: Both UI components and logic functions are now defined within the same Catalog object, simplifying discovery and inline definitions.
  • Improved Property Validation: Refined schemas for ChoicePicker, Slider, and DateTimeInput to enforce stricter property requirements (e.g., min/max for Sliders).

3. Schema Architecture Refactoring

  • Simplified Logic Types: Consolidated FunctionCall and logic primitives from expression_types.json into common_types.json.
  • Removed Redundant Files: Deleted expression_types.json, standard_function_catalog.json, and validate_example.sh.

4. Testing Infrastructure

  • Python Test Runner: Moved example JSONL stream into test, and moved the validation logic into run_tests.py, replacing the previous bash script. The test runner now supports:
    • JSONL (JSON Lines) validation for streaming message sequences.
    • Deep validation of component property constraints.
    • Path-based resolution for schema references so it can be run from any working directory.
  • Expanded Test Suite:
    • Added comprehensive test cases for Button checks and ChoicePicker constraints.
    • Improved contact_form_example.jsonl to use the latest unified catalog syntax and added function calling.
    • move contact_form_example.jsonl into specification/0.9/test/cases.

Verification Results

  • All schema validation tests pass via python3 specification/0.9/test/run_tests.py.
  • Documentation links and examples have been updated to reflect the new structure.

@gspencergoog gspencergoog force-pushed the capabilities_in_metadata branch from 43926a3 to 118dd34 Compare January 8, 2026 19:10
@jacobsimionato
Copy link
Collaborator

jacobsimionato commented Jan 9, 2026

CC @nan-yu who could build on this new Python version of the eval framework

Edit: I misunderstood - just a sample validation framework, not evaluation

Copy link
Collaborator

@jacobsimionato jacobsimionato left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Awesome!

@gspencergoog
Copy link
Collaborator Author

CC @nan-yu who could build on this new Python version of the eval framework

Edit: I misunderstood - just a sample validation framework, not evaluation

Yeah, it's not an eval framework. The tests in this PR are just to validate that the JSON schemas in the spec are valid and syntactically correct. The eval framework is still in Typescript (and should be ported).

@gspencergoog gspencergoog merged commit 79df6e0 into google:main Jan 9, 2026
5 checks passed
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