Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,9 @@
SUPPORTED_CATALOG_IDS_KEY = "supportedCatalogIds"
INLINE_CATALOGS_KEY = "inlineCatalogs"

STANDARD_CATALOG_ID = "https://github.com/google/A2UI/blob/main/specification/v0_8/json/standard_catalog_definition.json"
STANDARD_CATALOG_ID = (
"https://a2ui.org/specification/v0_8/standard_catalog_definition.json"
)


def create_a2ui_part(a2ui_data: dict[str, Any]) -> Part:
Expand Down
2 changes: 1 addition & 1 deletion docs/reference/components.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Component Gallery

This page showcases all standard A2UI components with examples and usage patterns. For the complete technical specification, see the [Standard Catalog Definition](https://github.com/google/A2UI/blob/main/specification/v0_8/json/standard_catalog_definition.json).
This page showcases all standard A2UI components with examples and usage patterns. For the complete technical specification, see the [Standard Catalog Definition](https://a2ui.org/specification/v0_8/standard_catalog_definition.json).

## Layout Components

Expand Down
4 changes: 2 additions & 2 deletions docs/reference/messages.md
Original file line number Diff line number Diff line change
Expand Up @@ -386,8 +386,8 @@ Remove a surface and all its components and data.

All messages should be validated against:

- **[server_to_client.json](https://github.com/google/A2UI/blob/main/specification/v0_8/json/server_to_client.json)**: Message envelope schema
- **[standard_catalog_definition.json](https://github.com/google/A2UI/blob/main/specification/v0_8/json/standard_catalog_definition.json)**: Component schemas
- **[server_to_client.json](https://a2ui.org/specification/v0_8/server_to_client.json)**: Message envelope schema
- **[standard_catalog_definition.json](https://a2ui.org/specification/v0_8/standard_catalog_definition.json)**: Component schemas

## Further Reading

Expand Down
17 changes: 14 additions & 3 deletions mkdocs.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -183,6 +183,17 @@ plugins:
# sections:
# "Specification":
# - a2ui_protocol.md
# - redirects:
# redirect_maps:
# "index.md": "a2ui_protocol.md"
- redirects:
Copy link
Collaborator

Choose a reason for hiding this comment

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

Oh very neat!!

redirect_maps:
"specification/v0_9/server_to_client.json": "specification/v0_9/json/server_to_client.json"
"specification/v0_9/client_to_server.json": "specification/v0_9/json/client_to_server.json"
"specification/v0_9/common_types.json": "specification/v0_9/json/common_types.json"
"specification/v0_9/standard_catalog.json": "specification/v0_9/json/standard_catalog.json"
"specification/v0_9/a2ui_client_capabilities.json": "specification/v0_9/json/a2ui_client_capabilities.json"
"specification/v0_9/a2ui_client_data_model.json": "specification/v0_9/json/a2ui_client_data_model.json"
"specification/v0_8/a2ui_client_capabilities_schema.json": "specification/v0_8/json/a2ui_client_capabilities_schema.json"
"specification/v0_8/catalog_description_schema.json": "specification/v0_8/json/catalog_description_schema.json"
"specification/v0_8/client_to_server.json": "specification/v0_8/json/client_to_server.json"
"specification/v0_8/server_to_client.json": "specification/v0_8/json/server_to_client.json"
"specification/v0_8/server_to_client_with_standard_catalog.json": "specification/v0_8/json/server_to_client_with_standard_catalog.json"
"specification/v0_8/standard_catalog_definition.json": "specification/v0_8/json/standard_catalog_definition.json"
2 changes: 1 addition & 1 deletion samples/client/angular/projects/orchestrator/src/server.ts
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ app.post('/a2a', (req, res) => {
metadata: {
a2uiClientCapabilities: {
supportedCatalogIds: [
'https://github.com/google/A2UI/blob/main/specification/v0_8/json/standard_catalog_definition.json',
'https://a2ui.org/specification/v0_8/standard_catalog_definition.json',
],
},
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,15 @@ import { FormsModule } from '@angular/forms';

@Component({
selector: 'app-toolbar',
imports: [MatButtonModule, MatIconModule, MatToolbarModule, MatSelectModule, MatFormFieldModule, MatInputModule, FormsModule],
imports: [
MatButtonModule,
MatIconModule,
MatToolbarModule,
MatSelectModule,
MatFormFieldModule,
MatInputModule,
FormsModule,
],
templateUrl: './toolbar.html',
styleUrl: './toolbar.scss',
})
Expand All @@ -37,22 +45,22 @@ export class Toolbar {

catalogs = [
{
value: 'https://github.com/google/A2UI/blob/main/specification/v0_8/json/standard_catalog_definition.json',
viewValue: 'Standard'
value: 'https://a2ui.org/specification/v0_8/standard_catalog_definition.json',
viewValue: 'Standard',
},
{
value: 'https://github.com/google/A2UI/blob/main/samples/agent/adk/rizzcharts/rizzcharts_catalog_definition.json',
viewValue: 'Rizzcharts Custom'
value:
'https://github.com/google/A2UI/blob/main/samples/agent/adk/rizzcharts/rizzcharts_catalog_definition.json',
viewValue: 'Rizzcharts Custom',
},
];

ngOnInit() {
this.selectedCatalogs = this.catalogs.map(c => c.value);
this.selectedCatalogs = this.catalogs.map((c) => c.value);
this.updateCatalogService();
}

updateCatalogService() {
this.catalogService.catalogUris = this.selectedCatalogs;
}

}
2 changes: 1 addition & 1 deletion specification/v0_8/docs/a2ui_extension_specification.md
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ Example AgentExtension block:
"required": false,
"params": {
"supportedCatalogIds": [
"https://github.com/google/A2UI/blob/main/specification/v0_8/json/standard_catalog_definition.json",
"https://a2ui.org/specification/v0_8/standard_catalog_definition.json",
"https://my-company.com/a2ui/v0.8/my_custom_catalog.json"
],
"acceptsInlineCatalogs": true
Expand Down
10 changes: 5 additions & 5 deletions specification/v0_8/docs/a2ui_protocol.md
Original file line number Diff line number Diff line change
Expand Up @@ -167,7 +167,7 @@ A2UI's component model is designed for flexibility, separating the protocol from

A **Catalog** defines the contract between the server and the client for the UI that can be rendered. It contains a list of supported component types (e.g., `Row`, `Text`), their properties, and available styles. A catalog is defined by a **Catalog Definition Document**.

There is a **Standard Catalog** associated with each version of the A2UI protocol. For v0.8, its identifier is `https://github.com/google/A2UI/blob/main/specification/v0_8/json/standard_catalog_definition.json`.
There is a **Standard Catalog** associated with each version of the A2UI protocol. For v0.8, its identifier is `https://a2ui.org/specification/v0_8/standard_catalog_definition.json`.

Catalog IDs are simple string identifiers. While they can be anything, it is conventional to use a URI within a domain that you own, to simplify debugging, avoid confusion, and avoid name collisions. Furthermore, if any changes are made to a catalog that could break compatibility between an agent and renderer, a new `catalogId` **must** be assigned. This ensures clear versioning and prevents unexpected behavior if an agent has changes but the client does not, or vice versa.

Expand All @@ -192,7 +192,7 @@ The server (agent) advertises its capabilities in its Agent Card as part of the
"uri": "https://a2ui.org/a2a-extension/a2ui/v0.8",
"params": {
"supportedCatalogIds": [
"https://github.com/google/A2UI/blob/main/specification/v0_8/json/standard_catalog_definition.json",
"https://a2ui.org/specification/v0_8/standard_catalog_definition.json",
"https://my-company.com/a2ui/v0.8/my_custom_catalog.json"
],
"acceptsInlineCatalogs": true
Expand All @@ -218,7 +218,7 @@ In **every** message sent to the server, the client includes an `a2uiClientCapab
"metadata": {
"a2uiClientCapabilities": {
"supportedCatalogIds": [
"https://github.com/google/A2UI/blob/main/specification/v0_8/json/standard_catalog_definition.json",
"https://a2ui.org/specification/v0_8/standard_catalog_definition.json",
"https://my-company.com/a2ui_catalogs/custom-reporting-catalog-1.2"
],
"inlineCatalogs": [
Expand Down Expand Up @@ -249,7 +249,7 @@ The server receives the client's capabilities and chooses a catalog to use for a

- `catalogId` (string, optional): The identifier of the chosen catalog. This ID must be one of the `supportedCatalogIds` or the `catalogId` from one of the `inlineCatalogs` provided by the client.

If the `catalogId` is omitted, the client **MUST** default to the standard catalog for the protocol version (`https://github.com/google/A2UI/blob/main/specification/v0_8/json/standard_catalog_definition.json`).
If the `catalogId` is omitted, the client **MUST** default to the standard catalog for the protocol version (`https://a2ui.org/specification/v0_8/standard_catalog_definition.json`).

**Example `beginRendering` Message:**
```json
Expand Down Expand Up @@ -279,7 +279,7 @@ resolved_schema["properties"]["surfaceUpdate"]["properties"]["components"]["item
resolved_schema["properties"]["beginRendering"]["properties"]["styles"]["properties"] = style_properties
```

See `server_to_client_with_standard_catalog.json` for an example of a resolved
See `server_to_client_with_standard_catalog.json` for an example of a resolved
schema which has the components substituted in.

### 2.2. The `surfaceUpdate` Message
Expand Down
20 changes: 10 additions & 10 deletions specification/v0_8/docs/custom_catalog_changes.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,19 +7,19 @@ The previous mechanism, which involved a single, one-time `clientUiCapabilities`
## Key changes to the protocol

1. **Agent capability advertisement (`supportedCatalogIds`, `acceptsInlineCatalogs`)**: The agent's role in negotiation has been expanded. It now can declare a list of supported catalog IDs, in addition to whether it is capable of processing catalogs defined "inline" by the client.
* **Relevant Doc**: [`a2ui_extension_specification.md`](./a2ui_extension_specification.md)
- **Relevant Doc**: [`a2ui_extension_specification.md`](./a2ui_extension_specification.md)

2. **Client capabilities via A2A metadata**: The client now sends its capabilities in an `a2uiClientCapabilities` object. Crucially, this is no longer a standalone message but is included in the `metadata` field of **every** A2A message sent to the agent.
* This object contains `supportedCatalogIds` (an array of known catalog IDs) and an optional `inlineCatalogs` (an array of full catalog definitions).
* **Relevant doc**: The new process is explained in the [`a2ui_protocol.md`](./a2ui_protocol.md#catalog-negotiation) section on Catalog Negotiation.
* **Relevant schema**: [`a2ui_client_capabilities_schema.json`](../json/a2ui_client_capabilities_schema.json)
- This object contains `supportedCatalogIds` (an array of known catalog IDs) and an optional `inlineCatalogs` (an array of full catalog definitions).
- **Relevant doc**: The new process is explained in the [`a2ui_protocol.md`](./a2ui_protocol.md#catalog-negotiation) section on Catalog Negotiation.
- **Relevant schema**: [`a2ui_client_capabilities_schema.json`](../json/a2ui_client_capabilities_schema.json)

3. **Per-Surface catalog selection (`beginRendering`)**: The agent is now responsible for selecting which catalog to use for each UI surface. It signals its choice using the new optional `catalogId` field in the `beginRendering` message. If this field is omitted, the client must default to the Standard Catalog.
* **Relevant doc**: [`a2ui_protocol.md`](./a2ui_protocol.md#catalog-negotiation)
* **Relevant schema**: The change is reflected in [`server_to_client.json`](../json/server_to_client.json).
- **Relevant doc**: [`a2ui_protocol.md`](./a2ui_protocol.md#catalog-negotiation)
- **Relevant schema**: The change is reflected in [`server_to_client.json`](../json/server_to_client.json).

4. **Catalog definition ID (`catalogId`)**: To facilitate identification, the catalog definition schema itself now has a required `catalogId` field.
* **Relevant schema**: [`catalog_description_schema.json`](../json/catalog_description_schema.json)
- **Relevant schema**: [`catalog_description_schema.json`](../json/catalog_description_schema.json)

---

Expand All @@ -45,14 +45,14 @@ Your responsibilities are to accurately declare your capabilities and render sur

1. **Declare capabilities on every request**: For every A2A message your application sends, your library must inject the `a2uiClientCapabilities` object into the top-level `metadata` field.

2. **Populate `supportedCatalogIds`**: In the capabilities object, populate this array with the string identifiers of all pre-compiled catalogs your renderer supports. If your renderer supports the standard catalog for v0.8, you **should** include its ID: `https://github.com/google/A2UI/blob/main/specification/v0_8/json/standard_catalog_definition.json`.
2. **Populate `supportedCatalogIds`**: In the capabilities object, populate this array with the string identifiers of all pre-compiled catalogs your renderer supports. If your renderer supports the standard catalog for v0.8, you **should** include its ID: `https://a2ui.org/specification/v0_8/standard_catalog_definition.json`.

3. **Provide `inlineCatalogs` (optional)**: If your renderer supports dynamically generating or defining catalogs at runtime, include their full, valid Catalog Definition Documents in the `inlineCatalogs` array.

4. **Process `beginRendering`**: When your renderer receives a `beginRendering` message, it must inspect the new `catalogId` field.

5. **Select Catalog for surface**:
* If `catalogId` is present, use the corresponding catalog to render that surface. Your renderer must be able to look up the catalog from its pre-compiled list or from the inline definitions it just sent.
* If `catalogId` is **absent**, you **must** default to using the Standard Catalog for v0.8 for that surface.
- If `catalogId` is present, use the corresponding catalog to render that surface. Your renderer must be able to look up the catalog from its pre-compiled list or from the inline definitions it just sent.
- If `catalogId` is **absent**, you **must** default to using the Standard Catalog for v0.8 for that surface.

6. **Manage multiple Catalogs**: Your renderer must be architected to handle multiple surfaces being rendered with different catalogs simultaneously. A dictionary mapping `surfaceId` to the chosen `catalog` is a common approach.
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
"properties": {
"supportedCatalogIds": {
"type": "array",
"description": "The URI of each of the catalogs that is supported by the client. The standard catalog for v0.8 is 'https://github.com/google/A2UI/blob/main/specification/v0_8/json/standard_catalog_definition.json'.",
"description": "The URI of each of the catalogs that is supported by the client. The standard catalog for v0.8 is 'https://a2ui.org/specification/v0_8/standard_catalog_definition.json'.",
"items": {
"type": "string"
}
Expand Down
6 changes: 3 additions & 3 deletions specification/v0_8/json/server_to_client.json
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
},
"catalogId": {
"type": "string",
"description": "The identifier of the component catalog to use for this surface. If omitted, the client MUST default to the standard catalog for this A2UI version (https://github.com/google/A2UI/blob/main/specification/v0_8/json/standard_catalog_definition.json)."
"description": "The identifier of the component catalog to use for this surface. If omitted, the client MUST default to the standard catalog for this A2UI version (https://a2ui.org/specification/v0_8/standard_catalog_definition.json)."
},
"root": {
"type": "string",
Expand All @@ -24,7 +24,7 @@
"styles": {
"type": "object",
"description": "Styling information for the UI.",
"additionalProperties": true
"additionalProperties": true
}
},
"required": ["root", "surfaceId"]
Expand Down Expand Up @@ -145,4 +145,4 @@
"required": ["surfaceId"]
}
}
}
}
4 changes: 2 additions & 2 deletions specification/v0_9/docs/a2ui_extension_specification.md
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ Example AgentExtension block:
"required": false,
"params": {
"supportedCatalogIds": [
"https://a2ui.dev/specification/v0_9/standard_catalog.json",
"https://a2ui.org/specification/v0_9/standard_catalog.json",
"https://my-company.com/a2ui/v0.9/my_custom_catalog.json"
],
"acceptsInlineCatalogs": true
Expand Down Expand Up @@ -88,7 +88,7 @@ Example `createSurface` DataPart:
"data": {
"createSurface": {
"surfaceId": "user_profile_surface",
"catalogId": "https://a2ui.dev/specification/v0_9/standard_catalog.json"
"catalogId": "https://a2ui.org/specification/v0_9/standard_catalog.json"
}
},
"kind": "data",
Expand Down
Loading
Loading