From a47426ce821949f0f582309f71043df979794b4f Mon Sep 17 00:00:00 2001 From: Nan Yu Date: Wed, 4 Mar 2026 21:18:07 +0000 Subject: [PATCH] Delete the generated spec assets in the agent SDK https://github.com/google/A2UI/pull/760 accidentally checked in obsolete and generated assets. This commit removes them and also updates the git ignore file to ignore them when checking in code. --- .gitignore | 6 + .../src/a2ui/assets/0.8/server_to_client.json | 148 -- .../0.8/standard_catalog_definition.json | 772 --------- .../src/a2ui/assets/0.9/basic_catalog.json | 1382 ----------------- .../src/a2ui/assets/0.9/common_types.json | 315 ---- .../src/a2ui/assets/0.9/server_to_client.json | 132 -- agent_sdks/python/.gitignore | 1 - 7 files changed, 6 insertions(+), 2750 deletions(-) delete mode 100644 a2a_agents/python/a2ui_agent/src/a2ui/assets/0.8/server_to_client.json delete mode 100644 a2a_agents/python/a2ui_agent/src/a2ui/assets/0.8/standard_catalog_definition.json delete mode 100644 a2a_agents/python/a2ui_agent/src/a2ui/assets/0.9/basic_catalog.json delete mode 100644 a2a_agents/python/a2ui_agent/src/a2ui/assets/0.9/common_types.json delete mode 100644 a2a_agents/python/a2ui_agent/src/a2ui/assets/0.9/server_to_client.json delete mode 100644 agent_sdks/python/.gitignore diff --git a/.gitignore b/.gitignore index 9af10ea4c..14a290e7b 100644 --- a/.gitignore +++ b/.gitignore @@ -15,3 +15,9 @@ site/ # Python virtual environment .venv/ + +# Generated spec assets in the agent SDK +## old agent SDK path +a2a_agents/python/a2ui_agent/src/a2ui/assets/**/*.json +## new agent SDK path +agent_sdks/python/src/a2ui/assets/**/*.json diff --git a/a2a_agents/python/a2ui_agent/src/a2ui/assets/0.8/server_to_client.json b/a2a_agents/python/a2ui_agent/src/a2ui/assets/0.8/server_to_client.json deleted file mode 100644 index 3b73b754f..000000000 --- a/a2a_agents/python/a2ui_agent/src/a2ui/assets/0.8/server_to_client.json +++ /dev/null @@ -1,148 +0,0 @@ -{ - "title": "A2UI Message Schema", - "description": "Describes a JSON payload for an A2UI (Agent to UI) message, which is used to dynamically construct and update user interfaces. A message MUST contain exactly ONE of the action properties: 'beginRendering', 'surfaceUpdate', 'dataModelUpdate', or 'deleteSurface'.", - "type": "object", - "additionalProperties": false, - "properties": { - "beginRendering": { - "type": "object", - "description": "Signals the client to begin rendering a surface with a root component and specific styles.", - "additionalProperties": false, - "properties": { - "surfaceId": { - "type": "string", - "description": "The unique identifier for the UI surface to be rendered." - }, - "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://a2ui.org/specification/v0_8/standard_catalog_definition.json)." - }, - "root": { - "type": "string", - "description": "The ID of the root component to render." - }, - "styles": { - "type": "object", - "description": "Styling information for the UI.", - "additionalProperties": true - } - }, - "required": ["root", "surfaceId"] - }, - "surfaceUpdate": { - "type": "object", - "description": "Updates a surface with a new set of components.", - "additionalProperties": false, - "properties": { - "surfaceId": { - "type": "string", - "description": "The unique identifier for the UI surface to be updated. If you are adding a new surface this *must* be a new, unique identified that has never been used for any existing surfaces shown." - }, - "components": { - "type": "array", - "description": "A list containing all UI components for the surface.", - "minItems": 1, - "items": { - "type": "object", - "description": "Represents a *single* component in a UI widget tree. This component could be one of many supported types.", - "additionalProperties": false, - "properties": { - "id": { - "type": "string", - "description": "The unique identifier for this component." - }, - "weight": { - "type": "number", - "description": "The relative weight of this component within a Row or Column. This corresponds to the CSS 'flex-grow' property. Note: this may ONLY be set when the component is a direct descendant of a Row or Column." - }, - "component": { - "type": "object", - "description": "A wrapper object that MUST contain exactly one key, which is the name of the component type. The value is an object containing the properties for that specific component.", - "additionalProperties": true - } - }, - "required": ["id", "component"] - } - } - }, - "required": ["surfaceId", "components"] - }, - "dataModelUpdate": { - "type": "object", - "description": "Updates the data model for a surface.", - "additionalProperties": false, - "properties": { - "surfaceId": { - "type": "string", - "description": "The unique identifier for the UI surface this data model update applies to." - }, - "path": { - "type": "string", - "description": "An optional path to a location within the data model (e.g., '/user/name'). If omitted, or set to '/', the entire data model will be replaced." - }, - "contents": { - "type": "array", - "description": "An array of data entries. Each entry must contain a 'key' and exactly one corresponding typed 'value*' property.", - "items": { - "type": "object", - "description": "A single data entry. Exactly one 'value*' property should be provided alongside the key.", - "additionalProperties": false, - "properties": { - "key": { - "type": "string", - "description": "The key for this data entry." - }, - "valueString": { - "type": "string" - }, - "valueNumber": { - "type": "number" - }, - "valueBoolean": { - "type": "boolean" - }, - "valueMap": { - "description": "Represents a map as an adjacency list.", - "type": "array", - "items": { - "type": "object", - "description": "One entry in the map. Exactly one 'value*' property should be provided alongside the key.", - "additionalProperties": false, - "properties": { - "key": { - "type": "string" - }, - "valueString": { - "type": "string" - }, - "valueNumber": { - "type": "number" - }, - "valueBoolean": { - "type": "boolean" - } - }, - "required": ["key"] - } - } - }, - "required": ["key"] - } - } - }, - "required": ["contents", "surfaceId"] - }, - "deleteSurface": { - "type": "object", - "description": "Signals the client to delete the surface identified by 'surfaceId'.", - "additionalProperties": false, - "properties": { - "surfaceId": { - "type": "string", - "description": "The unique identifier for the UI surface to be deleted." - } - }, - "required": ["surfaceId"] - } - } -} diff --git a/a2a_agents/python/a2ui_agent/src/a2ui/assets/0.8/standard_catalog_definition.json b/a2a_agents/python/a2ui_agent/src/a2ui/assets/0.8/standard_catalog_definition.json deleted file mode 100644 index fa6fc228f..000000000 --- a/a2a_agents/python/a2ui_agent/src/a2ui/assets/0.8/standard_catalog_definition.json +++ /dev/null @@ -1,772 +0,0 @@ -{ - "components": { - "Text": { - "type": "object", - "additionalProperties": false, - "properties": { - "text": { - "type": "object", - "description": "The text content to display. This can be a literal string or a reference to a value in the data model ('path', e.g., '/doc/title'). While simple Markdown formatting is supported (i.e. without HTML, images, or links), utilizing dedicated UI components is generally preferred for a richer and more structured presentation.", - "additionalProperties": false, - "properties": { - "literalString": { - "type": "string" - }, - "path": { - "type": "string" - } - } - }, - "usageHint": { - "type": "string", - "description": "A hint for the base text style. One of:\n- `h1`: Largest heading.\n- `h2`: Second largest heading.\n- `h3`: Third largest heading.\n- `h4`: Fourth largest heading.\n- `h5`: Fifth largest heading.\n- `caption`: Small text for captions.\n- `body`: Standard body text.", - "enum": [ - "h1", - "h2", - "h3", - "h4", - "h5", - "caption", - "body" - ] - } - }, - "required": [ - "text" - ] - }, - "Image": { - "type": "object", - "additionalProperties": false, - "properties": { - "url": { - "type": "object", - "description": "The URL of the image to display. This can be a literal string ('literal') or a reference to a value in the data model ('path', e.g. '/thumbnail/url').", - "additionalProperties": false, - "properties": { - "literalString": { - "type": "string" - }, - "path": { - "type": "string" - } - } - }, - "fit": { - "type": "string", - "description": "Specifies how the image should be resized to fit its container. This corresponds to the CSS 'object-fit' property.", - "enum": [ - "contain", - "cover", - "fill", - "none", - "scale-down" - ] - }, - "usageHint": { - "type": "string", - "description": "A hint for the image size and style. One of:\n- `icon`: Small square icon.\n- `avatar`: Circular avatar image.\n- `smallFeature`: Small feature image.\n- `mediumFeature`: Medium feature image.\n- `largeFeature`: Large feature image.\n- `header`: Full-width, full bleed, header image.", - "enum": [ - "icon", - "avatar", - "smallFeature", - "mediumFeature", - "largeFeature", - "header" - ] - } - }, - "required": [ - "url" - ] - }, - "Icon": { - "type": "object", - "additionalProperties": false, - "properties": { - "name": { - "type": "object", - "description": "The name of the icon to display. This can be a literal string or a reference to a value in the data model ('path', e.g. '/form/submit').", - "additionalProperties": false, - "properties": { - "literalString": { - "type": "string", - "enum": [ - "accountCircle", - "add", - "arrowBack", - "arrowForward", - "attachFile", - "calendarToday", - "call", - "camera", - "check", - "close", - "delete", - "download", - "edit", - "event", - "error", - "favorite", - "favoriteOff", - "folder", - "help", - "home", - "info", - "locationOn", - "lock", - "lockOpen", - "mail", - "menu", - "moreVert", - "moreHoriz", - "notificationsOff", - "notifications", - "payment", - "person", - "phone", - "photo", - "print", - "refresh", - "search", - "send", - "settings", - "share", - "shoppingCart", - "star", - "starHalf", - "starOff", - "upload", - "visibility", - "visibilityOff", - "warning" - ] - }, - "path": { - "type": "string" - } - } - } - }, - "required": [ - "name" - ] - }, - "Video": { - "type": "object", - "additionalProperties": false, - "properties": { - "url": { - "type": "object", - "description": "The URL of the video to display. This can be a literal string or a reference to a value in the data model ('path', e.g. '/video/url').", - "additionalProperties": false, - "properties": { - "literalString": { - "type": "string" - }, - "path": { - "type": "string" - } - } - } - }, - "required": [ - "url" - ] - }, - "AudioPlayer": { - "type": "object", - "additionalProperties": false, - "properties": { - "url": { - "type": "object", - "description": "The URL of the audio to be played. This can be a literal string ('literal') or a reference to a value in the data model ('path', e.g. '/song/url').", - "additionalProperties": false, - "properties": { - "literalString": { - "type": "string" - }, - "path": { - "type": "string" - } - } - }, - "description": { - "type": "object", - "description": "A description of the audio, such as a title or summary. This can be a literal string or a reference to a value in the data model ('path', e.g. '/song/title').", - "additionalProperties": false, - "properties": { - "literalString": { - "type": "string" - }, - "path": { - "type": "string" - } - } - } - }, - "required": [ - "url" - ] - }, - "Row": { - "type": "object", - "additionalProperties": false, - "properties": { - "children": { - "type": "object", - "description": "Defines the children. Use 'explicitList' for a fixed set of children, or 'template' to generate children from a data list.", - "additionalProperties": false, - "properties": { - "explicitList": { - "type": "array", - "items": { - "type": "string" - } - }, - "template": { - "type": "object", - "description": "A template for generating a dynamic list of children from a data model list. `componentId` is the component to use as a template, and `dataBinding` is the path to the map of components in the data model. Values in the map will define the list of children.", - "additionalProperties": false, - "properties": { - "componentId": { - "type": "string" - }, - "dataBinding": { - "type": "string" - } - }, - "required": [ - "componentId", - "dataBinding" - ] - } - } - }, - "distribution": { - "type": "string", - "description": "Defines the arrangement of children along the main axis (horizontally). This corresponds to the CSS 'justify-content' property.", - "enum": [ - "center", - "end", - "spaceAround", - "spaceBetween", - "spaceEvenly", - "start" - ] - }, - "alignment": { - "type": "string", - "description": "Defines the alignment of children along the cross axis (vertically). This corresponds to the CSS 'align-items' property.", - "enum": [ - "start", - "center", - "end", - "stretch" - ] - } - }, - "required": [ - "children" - ] - }, - "Column": { - "type": "object", - "additionalProperties": false, - "properties": { - "children": { - "type": "object", - "description": "Defines the children. Use 'explicitList' for a fixed set of children, or 'template' to generate children from a data list.", - "additionalProperties": false, - "properties": { - "explicitList": { - "type": "array", - "items": { - "type": "string" - } - }, - "template": { - "type": "object", - "description": "A template for generating a dynamic list of children from a data model list. `componentId` is the component to use as a template, and `dataBinding` is the path to the map of components in the data model. Values in the map will define the list of children.", - "additionalProperties": false, - "properties": { - "componentId": { - "type": "string" - }, - "dataBinding": { - "type": "string" - } - }, - "required": [ - "componentId", - "dataBinding" - ] - } - } - }, - "distribution": { - "type": "string", - "description": "Defines the arrangement of children along the main axis (vertically). This corresponds to the CSS 'justify-content' property.", - "enum": [ - "start", - "center", - "end", - "spaceBetween", - "spaceAround", - "spaceEvenly" - ] - }, - "alignment": { - "type": "string", - "description": "Defines the alignment of children along the cross axis (horizontally). This corresponds to the CSS 'align-items' property.", - "enum": [ - "center", - "end", - "start", - "stretch" - ] - } - }, - "required": [ - "children" - ] - }, - "List": { - "type": "object", - "additionalProperties": false, - "properties": { - "children": { - "type": "object", - "description": "Defines the children. Use 'explicitList' for a fixed set of children, or 'template' to generate children from a data list.", - "additionalProperties": false, - "properties": { - "explicitList": { - "type": "array", - "items": { - "type": "string" - } - }, - "template": { - "type": "object", - "description": "A template for generating a dynamic list of children from a data model list. `componentId` is the component to use as a template, and `dataBinding` is the path to the map of components in the data model. Values in the map will define the list of children.", - "additionalProperties": false, - "properties": { - "componentId": { - "type": "string" - }, - "dataBinding": { - "type": "string" - } - }, - "required": [ - "componentId", - "dataBinding" - ] - } - } - }, - "direction": { - "type": "string", - "description": "The direction in which the list items are laid out.", - "enum": [ - "vertical", - "horizontal" - ] - }, - "alignment": { - "type": "string", - "description": "Defines the alignment of children along the cross axis.", - "enum": [ - "start", - "center", - "end", - "stretch" - ] - } - }, - "required": [ - "children" - ] - }, - "Card": { - "type": "object", - "additionalProperties": false, - "properties": { - "child": { - "type": "string", - "description": "The ID of the component to be rendered inside the card." - } - }, - "required": [ - "child" - ] - }, - "Tabs": { - "type": "object", - "additionalProperties": false, - "properties": { - "tabItems": { - "type": "array", - "description": "An array of objects, where each object defines a tab with a title and a child component.", - "items": { - "type": "object", - "additionalProperties": false, - "properties": { - "title": { - "type": "object", - "description": "The tab title. Defines the value as either a literal value or a path to data model value (e.g. '/options/title').", - "additionalProperties": false, - "properties": { - "literalString": { - "type": "string" - }, - "path": { - "type": "string" - } - } - }, - "child": { - "type": "string" - } - }, - "required": [ - "title", - "child" - ] - } - } - }, - "required": [ - "tabItems" - ] - }, - "Divider": { - "type": "object", - "additionalProperties": false, - "properties": { - "axis": { - "type": "string", - "description": "The orientation of the divider.", - "enum": [ - "horizontal", - "vertical" - ] - } - } - }, - "Modal": { - "type": "object", - "additionalProperties": false, - "properties": { - "entryPointChild": { - "type": "string", - "description": "The ID of the component that opens the modal when interacted with (e.g., a button)." - }, - "contentChild": { - "type": "string", - "description": "The ID of the component to be displayed inside the modal." - } - }, - "required": [ - "entryPointChild", - "contentChild" - ] - }, - "Button": { - "type": "object", - "additionalProperties": false, - "properties": { - "child": { - "type": "string", - "description": "The ID of the component to display in the button, typically a Text component." - }, - "primary": { - "type": "boolean", - "description": "Indicates if this button should be styled as the primary action." - }, - "action": { - "type": "object", - "description": "The client-side action to be dispatched when the button is clicked. It includes the action's name and an optional context payload.", - "additionalProperties": false, - "properties": { - "name": { - "type": "string" - }, - "context": { - "type": "array", - "items": { - "type": "object", - "additionalProperties": false, - "properties": { - "key": { - "type": "string" - }, - "value": { - "type": "object", - "description": "Defines the value to be included in the context as either a literal value or a path to a data model value (e.g. '/user/name').", - "additionalProperties": false, - "properties": { - "path": { - "type": "string" - }, - "literalString": { - "type": "string" - }, - "literalNumber": { - "type": "number" - }, - "literalBoolean": { - "type": "boolean" - } - } - } - }, - "required": [ - "key", - "value" - ] - } - } - }, - "required": [ - "name" - ] - } - }, - "required": [ - "child", - "action" - ] - }, - "CheckBox": { - "type": "object", - "additionalProperties": false, - "properties": { - "label": { - "type": "object", - "description": "The text to display next to the checkbox. Defines the value as either a literal value or a path to data model ('path', e.g. '/option/label').", - "additionalProperties": false, - "properties": { - "literalString": { - "type": "string" - }, - "path": { - "type": "string" - } - } - }, - "value": { - "type": "object", - "description": "The current state of the checkbox (true for checked, false for unchecked). This can be a literal boolean ('literalBoolean') or a reference to a value in the data model ('path', e.g. '/filter/open').", - "additionalProperties": false, - "properties": { - "literalBoolean": { - "type": "boolean" - }, - "path": { - "type": "string" - } - } - } - }, - "required": [ - "label", - "value" - ] - }, - "TextField": { - "type": "object", - "additionalProperties": false, - "properties": { - "label": { - "type": "object", - "description": "The text label for the input field. This can be a literal string or a reference to a value in the data model ('path, e.g. '/user/name').", - "additionalProperties": false, - "properties": { - "literalString": { - "type": "string" - }, - "path": { - "type": "string" - } - } - }, - "text": { - "type": "object", - "description": "The value of the text field. This can be a literal string or a reference to a value in the data model ('path', e.g. '/user/name').", - "additionalProperties": false, - "properties": { - "literalString": { - "type": "string" - }, - "path": { - "type": "string" - } - } - }, - "textFieldType": { - "type": "string", - "description": "The type of input field to display.", - "enum": [ - "date", - "longText", - "number", - "shortText", - "obscured" - ] - }, - "validationRegexp": { - "type": "string", - "description": "A regular expression used for client-side validation of the input." - } - }, - "required": [ - "label" - ] - }, - "DateTimeInput": { - "type": "object", - "additionalProperties": false, - "properties": { - "value": { - "type": "object", - "description": "The selected date and/or time value in ISO 8601 format. This can be a literal string ('literalString') or a reference to a value in the data model ('path', e.g. '/user/dob').", - "additionalProperties": false, - "properties": { - "literalString": { - "type": "string" - }, - "path": { - "type": "string" - } - } - }, - "enableDate": { - "type": "boolean", - "description": "If true, allows the user to select a date." - }, - "enableTime": { - "type": "boolean", - "description": "If true, allows the user to select a time." - } - }, - "required": [ - "value" - ] - }, - "MultipleChoice": { - "type": "object", - "additionalProperties": false, - "required": [ - "selections", - "options" - ], - "properties": { - "selections": { - "type": "object", - "description": "The currently selected values for the component. This can be a literal array of strings or a path to an array in the data model('path', e.g. '/hotel/options').", - "additionalProperties": false, - "properties": { - "literalArray": { - "type": "array", - "items": { - "type": "string" - } - }, - "path": { - "type": "string" - } - } - }, - "options": { - "type": "array", - "description": "An array of available options for the user to choose from.", - "items": { - "type": "object", - "additionalProperties": false, - "properties": { - "label": { - "type": "object", - "description": "The text to display for this option. This can be a literal string or a reference to a value in the data model (e.g. '/option/label').", - "additionalProperties": false, - "properties": { - "literalString": { - "type": "string" - }, - "path": { - "type": "string" - } - } - }, - "value": { - "type": "string", - "description": "The value to be associated with this option when selected." - } - }, - "required": [ - "label", - "value" - ] - } - }, - "maxAllowedSelections": { - "type": "integer", - "description": "The maximum number of options that the user is allowed to select." - }, - "variant": { - "type": "string", - "description": "The display style of the component.", - "enum": [ - "checkbox", - "chips" - ] - }, - "filterable": { - "type": "boolean", - "description": "If true, displays a search input to filter the options." - } - } - }, - "Slider": { - "type": "object", - "additionalProperties": false, - "properties": { - "value": { - "type": "object", - "description": "The current value of the slider. This can be a literal number ('literalNumber') or a reference to a value in the data model ('path', e.g. '/restaurant/cost').", - "additionalProperties": false, - "properties": { - "literalNumber": { - "type": "number" - }, - "path": { - "type": "string" - } - } - }, - "minValue": { - "type": "number", - "description": "The minimum value of the slider." - }, - "maxValue": { - "type": "number", - "description": "The maximum value of the slider." - } - }, - "required": [ - "value" - ] - } - }, - "styles": { - "font": { - "type": "string", - "description": "The primary font for the UI." - }, - "primaryColor": { - "type": "string", - "description": "The primary UI color as a hexadecimal code (e.g., '#00BFFF').", - "pattern": "^#[0-9a-fA-F]{6}$" - } - } -} \ No newline at end of file diff --git a/a2a_agents/python/a2ui_agent/src/a2ui/assets/0.9/basic_catalog.json b/a2a_agents/python/a2ui_agent/src/a2ui/assets/0.9/basic_catalog.json deleted file mode 100644 index 3535f4b5f..000000000 --- a/a2a_agents/python/a2ui_agent/src/a2ui/assets/0.9/basic_catalog.json +++ /dev/null @@ -1,1382 +0,0 @@ -{ - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "https://a2ui.org/specification/v0_9/basic_catalog.json", - "title": "A2UI Basic Catalog", - "description": "Unified catalog of basic A2UI components and functions.", - "catalogId": "https://a2ui.org/specification/v0_9/basic_catalog.json", - "components": { - "Text": { - "type": "object", - "allOf": [ - { - "$ref": "common_types.json#/$defs/ComponentCommon" - }, - { - "$ref": "#/$defs/CatalogComponentCommon" - }, - { - "type": "object", - "properties": { - "component": { - "const": "Text" - }, - "text": { - "$ref": "common_types.json#/$defs/DynamicString", - "description": "The text content to display. While simple Markdown formatting is supported (i.e. without HTML, images, or links), utilizing dedicated UI components is generally preferred for a richer and more structured presentation." - }, - "variant": { - "type": "string", - "description": "A hint for the base text style.", - "enum": ["h1", "h2", "h3", "h4", "h5", "caption", "body"], - "default": "body" - } - }, - "required": ["component", "text"] - } - ], - "unevaluatedProperties": false - }, - "Image": { - "type": "object", - "allOf": [ - { - "$ref": "common_types.json#/$defs/ComponentCommon" - }, - { - "$ref": "#/$defs/CatalogComponentCommon" - }, - { - "type": "object", - "properties": { - "component": { - "const": "Image" - }, - "url": { - "$ref": "common_types.json#/$defs/DynamicString", - "description": "The URL of the image to display." - }, - "fit": { - "type": "string", - "description": "Specifies how the image should be resized to fit its container. This corresponds to the CSS 'object-fit' property.", - "enum": ["contain", "cover", "fill", "none", "scaleDown"], - "default": "fill" - }, - "variant": { - "type": "string", - "description": "A hint for the image size and style.", - "enum": [ - "icon", - "avatar", - "smallFeature", - "mediumFeature", - "largeFeature", - "header" - ], - "default": "mediumFeature" - } - }, - "required": ["component", "url"] - } - ], - "unevaluatedProperties": false - }, - "Icon": { - "type": "object", - "allOf": [ - { - "$ref": "common_types.json#/$defs/ComponentCommon" - }, - { - "$ref": "#/$defs/CatalogComponentCommon" - }, - { - "type": "object", - "properties": { - "component": { - "const": "Icon" - }, - "name": { - "description": "The name of the icon to display.", - "oneOf": [ - { - "type": "string", - "enum": [ - "accountCircle", - "add", - "arrowBack", - "arrowForward", - "attachFile", - "calendarToday", - "call", - "camera", - "check", - "close", - "delete", - "download", - "edit", - "event", - "error", - "fastForward", - "favorite", - "favoriteOff", - "folder", - "help", - "home", - "info", - "locationOn", - "lock", - "lockOpen", - "mail", - "menu", - "moreVert", - "moreHoriz", - "notificationsOff", - "notifications", - "pause", - "payment", - "person", - "phone", - "photo", - "play", - "print", - "refresh", - "rewind", - "search", - "send", - "settings", - "share", - "shoppingCart", - "skipNext", - "skipPrevious", - "star", - "starHalf", - "starOff", - "stop", - "upload", - "visibility", - "visibilityOff", - "volumeDown", - "volumeMute", - "volumeOff", - "volumeUp", - "warning" - ] - }, - { - "type": "object", - "properties": { - "path": { - "type": "string" - } - }, - "required": ["path"], - "additionalProperties": false - } - ] - } - }, - "required": ["component", "name"] - } - ], - "unevaluatedProperties": false - }, - "Video": { - "type": "object", - "allOf": [ - { - "$ref": "common_types.json#/$defs/ComponentCommon" - }, - { - "$ref": "#/$defs/CatalogComponentCommon" - }, - { - "type": "object", - "properties": { - "component": { - "const": "Video" - }, - "url": { - "$ref": "common_types.json#/$defs/DynamicString", - "description": "The URL of the video to display." - } - }, - "required": ["component", "url"] - } - ], - "unevaluatedProperties": false - }, - "AudioPlayer": { - "type": "object", - "allOf": [ - { - "$ref": "common_types.json#/$defs/ComponentCommon" - }, - { - "$ref": "#/$defs/CatalogComponentCommon" - }, - { - "type": "object", - "properties": { - "component": { - "const": "AudioPlayer" - }, - "url": { - "$ref": "common_types.json#/$defs/DynamicString", - "description": "The URL of the audio to be played." - }, - "description": { - "description": "A description of the audio, such as a title or summary.", - "$ref": "common_types.json#/$defs/DynamicString" - } - }, - "required": ["component", "url"] - } - ], - "unevaluatedProperties": false - }, - "Row": { - "type": "object", - "allOf": [ - { - "$ref": "common_types.json#/$defs/ComponentCommon" - }, - { - "$ref": "#/$defs/CatalogComponentCommon" - }, - { - "type": "object", - "description": "A layout component that arranges its children horizontally. To create a grid layout, nest Columns within this Row.", - "properties": { - "component": { - "const": "Row" - }, - "children": { - "description": "Defines the children. Use an array of strings for a fixed set of children, or a template object to generate children from a data list. Children cannot be defined inline, they must be referred to by ID.", - "$ref": "common_types.json#/$defs/ChildList" - }, - "justify": { - "type": "string", - "description": "Defines the arrangement of children along the main axis (horizontally). Use 'spaceBetween' to push items to the edges, or 'start'/'end'/'center' to pack them together.", - "enum": [ - "center", - "end", - "spaceAround", - "spaceBetween", - "spaceEvenly", - "start", - "stretch" - ], - "default": "start" - }, - "align": { - "type": "string", - "description": "Defines the alignment of children along the cross axis (vertically). This is similar to the CSS 'align-items' property, but uses camelCase values (e.g., 'start').", - "enum": ["start", "center", "end", "stretch"], - "default": "stretch" - } - }, - "required": ["component", "children"] - } - ], - "unevaluatedProperties": false - }, - "Column": { - "type": "object", - "allOf": [ - { - "$ref": "common_types.json#/$defs/ComponentCommon" - }, - { - "$ref": "#/$defs/CatalogComponentCommon" - }, - { - "type": "object", - "description": "A layout component that arranges its children vertically. To create a grid layout, nest Rows within this Column.", - "properties": { - "component": { - "const": "Column" - }, - "children": { - "description": "Defines the children. Use an array of strings for a fixed set of children, or a template object to generate children from a data list. Children cannot be defined inline, they must be referred to by ID.", - "$ref": "common_types.json#/$defs/ChildList" - }, - "justify": { - "type": "string", - "description": "Defines the arrangement of children along the main axis (vertically). Use 'spaceBetween' to push items to the edges (e.g. header at top, footer at bottom), or 'start'/'end'/'center' to pack them together.", - "enum": [ - "start", - "center", - "end", - "spaceBetween", - "spaceAround", - "spaceEvenly", - "stretch" - ], - "default": "start" - }, - "align": { - "type": "string", - "description": "Defines the alignment of children along the cross axis (horizontally). This is similar to the CSS 'align-items' property.", - "enum": ["center", "end", "start", "stretch"], - "default": "stretch" - } - }, - "required": ["component", "children"] - } - ], - "unevaluatedProperties": false - }, - "List": { - "type": "object", - "allOf": [ - { - "$ref": "common_types.json#/$defs/ComponentCommon" - }, - { - "$ref": "#/$defs/CatalogComponentCommon" - }, - { - "type": "object", - "properties": { - "component": { - "const": "List" - }, - "children": { - "description": "Defines the children. Use an array of strings for a fixed set of children, or a template object to generate children from a data list.", - "$ref": "common_types.json#/$defs/ChildList" - }, - "direction": { - "type": "string", - "description": "The direction in which the list items are laid out.", - "enum": ["vertical", "horizontal"], - "default": "vertical" - }, - "align": { - "type": "string", - "description": "Defines the alignment of children along the cross axis.", - "enum": ["start", "center", "end", "stretch"], - "default": "stretch" - } - }, - "required": ["component", "children"] - } - ], - "unevaluatedProperties": false - }, - "Card": { - "type": "object", - "allOf": [ - { - "$ref": "common_types.json#/$defs/ComponentCommon" - }, - { - "$ref": "#/$defs/CatalogComponentCommon" - }, - { - "type": "object", - "properties": { - "component": { - "const": "Card" - }, - "child": { - "$ref": "common_types.json#/$defs/ComponentId", - "description": "The ID of the single child component to be rendered inside the card. To display multiple elements, you MUST wrap them in a layout component (like Column or Row) and pass that container's ID here. Do NOT pass multiple IDs or a non-existent ID. Do NOT define the child component inline." - } - }, - "required": ["component", "child"] - } - ], - "unevaluatedProperties": false - }, - "Tabs": { - "type": "object", - "allOf": [ - { - "$ref": "common_types.json#/$defs/ComponentCommon" - }, - { - "$ref": "#/$defs/CatalogComponentCommon" - }, - { - "type": "object", - "properties": { - "component": { - "const": "Tabs" - }, - "tabs": { - "type": "array", - "description": "An array of objects, where each object defines a tab with a title and a child component.", - "items": { - "type": "object", - "properties": { - "title": { - "description": "The tab title.", - "$ref": "common_types.json#/$defs/DynamicString" - }, - "child": { - "$ref": "common_types.json#/$defs/ComponentId", - "description": "The ID of the child component. Do NOT define the component inline." - } - }, - "required": ["title", "child"], - "additionalProperties": false - } - } - }, - "required": ["component", "tabs"] - } - ], - "unevaluatedProperties": false - }, - "Modal": { - "type": "object", - "allOf": [ - { - "$ref": "common_types.json#/$defs/ComponentCommon" - }, - { - "$ref": "#/$defs/CatalogComponentCommon" - }, - { - "type": "object", - "properties": { - "component": { - "const": "Modal" - }, - "trigger": { - "$ref": "common_types.json#/$defs/ComponentId", - "description": "The ID of the component that opens the modal when interacted with (e.g., a button). Do NOT define the component inline." - }, - "content": { - "$ref": "common_types.json#/$defs/ComponentId", - "description": "The ID of the component to be displayed inside the modal. Do NOT define the component inline." - } - }, - "required": ["component", "trigger", "content"] - } - ], - "unevaluatedProperties": false - }, - "Divider": { - "type": "object", - "allOf": [ - { - "$ref": "common_types.json#/$defs/ComponentCommon" - }, - { - "$ref": "#/$defs/CatalogComponentCommon" - }, - { - "type": "object", - "properties": { - "component": { - "const": "Divider" - }, - "axis": { - "type": "string", - "description": "The orientation of the divider.", - "enum": ["horizontal", "vertical"], - "default": "horizontal" - } - }, - "required": ["component"] - } - ], - "unevaluatedProperties": false - }, - "Button": { - "type": "object", - "allOf": [ - { - "$ref": "common_types.json#/$defs/ComponentCommon" - }, - { - "$ref": "#/$defs/CatalogComponentCommon" - }, - { - "$ref": "common_types.json#/$defs/Checkable" - }, - { - "type": "object", - "properties": { - "component": { - "const": "Button" - }, - "child": { - "$ref": "common_types.json#/$defs/ComponentId", - "description": "The ID of the child component. Use a 'Text' component for a labeled button. Only use an 'Icon' if the requirements explicitly ask for an icon-only button. Do NOT define the child component inline." - }, - "variant": { - "type": "string", - "description": "A hint for the button style. If omitted, a default button style is used. 'primary' indicates this is the main call-to-action button. 'borderless' means the button has no visual border or background, making its child content appear like a clickable link.", - "enum": ["default", "primary", "borderless"], - "default": "default" - }, - "action": { - "$ref": "common_types.json#/$defs/Action" - } - }, - "required": ["component", "child", "action"] - } - ], - "unevaluatedProperties": false - }, - "TextField": { - "type": "object", - "allOf": [ - { - "$ref": "common_types.json#/$defs/ComponentCommon" - }, - { - "$ref": "#/$defs/CatalogComponentCommon" - }, - { - "$ref": "common_types.json#/$defs/Checkable" - }, - { - "type": "object", - "properties": { - "component": { - "const": "TextField" - }, - "label": { - "$ref": "common_types.json#/$defs/DynamicString", - "description": "The text label for the input field." - }, - "value": { - "$ref": "common_types.json#/$defs/DynamicString", - "description": "The value of the text field." - }, - "variant": { - "type": "string", - "description": "The type of input field to display.", - "enum": ["longText", "number", "shortText", "obscured"], - "default": "shortText" - }, - "validationRegexp": { - "type": "string", - "description": "A regular expression used for client-side validation of the input." - } - }, - "required": ["component", "label"] - } - ], - "unevaluatedProperties": false - }, - "CheckBox": { - "type": "object", - "allOf": [ - { - "$ref": "common_types.json#/$defs/ComponentCommon" - }, - { - "$ref": "#/$defs/CatalogComponentCommon" - }, - { - "$ref": "common_types.json#/$defs/Checkable" - }, - { - "type": "object", - "properties": { - "component": { - "const": "CheckBox" - }, - "label": { - "$ref": "common_types.json#/$defs/DynamicString", - "description": "The text to display next to the checkbox." - }, - "value": { - "$ref": "common_types.json#/$defs/DynamicBoolean", - "description": "The current state of the checkbox (true for checked, false for unchecked)." - } - }, - "required": ["component", "label", "value"] - } - ], - "unevaluatedProperties": false - }, - "ChoicePicker": { - "type": "object", - "allOf": [ - { - "$ref": "common_types.json#/$defs/ComponentCommon" - }, - { - "$ref": "#/$defs/CatalogComponentCommon" - }, - { - "$ref": "common_types.json#/$defs/Checkable" - }, - { - "type": "object", - "description": "A component that allows selecting one or more options from a list.", - "properties": { - "component": { - "const": "ChoicePicker" - }, - "label": { - "$ref": "common_types.json#/$defs/DynamicString", - "description": "The label for the group of options." - }, - "variant": { - "type": "string", - "description": "A hint for how the choice picker should be displayed and behave.", - "enum": ["multipleSelection", "mutuallyExclusive"], - "default": "mutuallyExclusive" - }, - "options": { - "type": "array", - "description": "The list of available options to choose from.", - "items": { - "type": "object", - "properties": { - "label": { - "description": "The text to display for this option.", - "$ref": "common_types.json#/$defs/DynamicString" - }, - "value": { - "type": "string", - "description": "The stable value associated with this option." - } - }, - "required": ["label", "value"], - "additionalProperties": false - } - }, - "value": { - "$ref": "common_types.json#/$defs/DynamicStringList", - "description": "The list of currently selected values. This should be bound to a string array in the data model." - }, - "displayStyle": { - "type": "string", - "description": "The display style of the component.", - "enum": ["checkbox", "chips"], - "default": "checkbox" - }, - "filterable": { - "type": "boolean", - "description": "If true, displays a search input to filter the options.", - "default": false - } - }, - "required": ["component", "options", "value"] - } - ], - "unevaluatedProperties": false - }, - "Slider": { - "type": "object", - "allOf": [ - { - "$ref": "common_types.json#/$defs/ComponentCommon" - }, - { - "$ref": "#/$defs/CatalogComponentCommon" - }, - { - "$ref": "common_types.json#/$defs/Checkable" - }, - { - "type": "object", - "properties": { - "component": { - "const": "Slider" - }, - "label": { - "$ref": "common_types.json#/$defs/DynamicString", - "description": "The label for the slider." - }, - "min": { - "type": "number", - "description": "The minimum value of the slider.", - "default": 0 - }, - "max": { - "type": "number", - "description": "The maximum value of the slider." - }, - "value": { - "$ref": "common_types.json#/$defs/DynamicNumber", - "description": "The current value of the slider." - } - }, - "required": ["component", "value", "max"] - } - ], - "unevaluatedProperties": false - }, - "DateTimeInput": { - "type": "object", - "allOf": [ - { - "$ref": "common_types.json#/$defs/ComponentCommon" - }, - { - "$ref": "#/$defs/CatalogComponentCommon" - }, - { - "$ref": "common_types.json#/$defs/Checkable" - }, - { - "type": "object", - "properties": { - "component": { - "const": "DateTimeInput" - }, - "value": { - "$ref": "common_types.json#/$defs/DynamicString", - "description": "The selected date and/or time value in ISO 8601 format. If not yet set, initialize with an empty string." - }, - "enableDate": { - "type": "boolean", - "description": "If true, allows the user to select a date.", - "default": false - }, - "enableTime": { - "type": "boolean", - "description": "If true, allows the user to select a time.", - "default": false - }, - "min": { - "allOf": [ - { - "$ref": "common_types.json#/$defs/DynamicString" - }, - { - "if": { - "type": "string" - }, - "then": { - "oneOf": [ - { - "format": "date" - }, - { - "format": "time" - }, - { - "format": "date-time" - } - ] - } - } - ], - "description": "The minimum allowed date/time in ISO 8601 format." - }, - "max": { - "allOf": [ - { - "$ref": "common_types.json#/$defs/DynamicString" - }, - { - "if": { - "type": "string" - }, - "then": { - "oneOf": [ - { - "format": "date" - }, - { - "format": "time" - }, - { - "format": "date-time" - } - ] - } - } - ], - "description": "The maximum allowed date/time in ISO 8601 format." - }, - "label": { - "$ref": "common_types.json#/$defs/DynamicString", - "description": "The text label for the input field." - } - }, - "required": ["component", "value"] - } - ], - "unevaluatedProperties": false - } - }, - "functions": { - "required": { - "type": "object", - "description": "Checks that the value is not null, undefined, or empty.", - "properties": { - "call": { - "const": "required" - }, - "args": { - "type": "object", - "properties": { - "value": { - "description": "The value to check." - } - }, - "required": ["value"], - "additionalProperties": false - }, - "returnType": { - "const": "boolean" - } - }, - "required": ["call", "args"], - "unevaluatedProperties": false - }, - "regex": { - "type": "object", - "description": "Checks that the value matches a regular expression string.", - "properties": { - "call": { - "const": "regex" - }, - "args": { - "type": "object", - "properties": { - "value": { - "$ref": "common_types.json#/$defs/DynamicString" - }, - "pattern": { - "type": "string", - "description": "The regex pattern to match against." - } - }, - "required": ["value", "pattern"], - "unevaluatedProperties": false - }, - "returnType": { - "const": "boolean" - } - }, - "required": ["call", "args"], - "unevaluatedProperties": false - }, - "length": { - "type": "object", - "description": "Checks string length constraints.", - "properties": { - "call": { - "const": "length" - }, - "args": { - "type": "object", - "properties": { - "value": { - "$ref": "common_types.json#/$defs/DynamicString" - }, - "min": { - "type": "integer", - "minimum": 0, - "description": "The minimum allowed length." - }, - "max": { - "type": "integer", - "minimum": 0, - "description": "The maximum allowed length." - } - }, - "required": ["value"], - "anyOf": [ - { - "required": ["min"] - }, - { - "required": ["max"] - } - ], - "unevaluatedProperties": false - }, - "returnType": { - "const": "boolean" - } - }, - "required": ["call", "args"], - "unevaluatedProperties": false - }, - "numeric": { - "type": "object", - "description": "Checks numeric range constraints.", - "properties": { - "call": { - "const": "numeric" - }, - "args": { - "type": "object", - "properties": { - "value": { - "$ref": "common_types.json#/$defs/DynamicNumber" - }, - "min": { - "type": "number", - "description": "The minimum allowed value." - }, - "max": { - "type": "number", - "description": "The maximum allowed value." - } - }, - "required": ["value"], - "anyOf": [ - { - "required": ["min"] - }, - { - "required": ["max"] - } - ], - "unevaluatedProperties": false - }, - "returnType": { - "const": "boolean" - } - }, - "required": ["call", "args"], - "unevaluatedProperties": false - }, - "email": { - "type": "object", - "description": "Checks that the value is a valid email address.", - "properties": { - "call": { - "const": "email" - }, - "args": { - "type": "object", - "properties": { - "value": { - "$ref": "common_types.json#/$defs/DynamicString" - } - }, - "required": ["value"], - "unevaluatedProperties": false - }, - "returnType": { - "const": "boolean" - } - }, - "required": ["call", "args"], - "unevaluatedProperties": false - }, - "formatString": { - "type": "object", - "description": "Performs string interpolation of data model values and other functions in the catalog functions list and returns the resulting string. The value string can contain interpolated expressions in the `${expression}` format. Supported expression types include: JSON Pointer paths to the data model (e.g., `${/absolute/path}` or `${relative/path}`), and client-side function calls (e.g., `${now()}`). Function arguments must be named (e.g., `${formatDate(value:${/currentDate}, format:'MM-dd')}`). To include a literal `${` sequence, escape it as `\\${`.", - "properties": { - "call": { - "const": "formatString" - }, - "args": { - "type": "object", - "properties": { - "value": { - "$ref": "common_types.json#/$defs/DynamicString" - } - }, - "required": ["value"], - "unevaluatedProperties": false - }, - "returnType": { - "const": "string" - } - }, - "required": ["call", "args"], - "unevaluatedProperties": false - }, - "formatNumber": { - "type": "object", - "description": "Formats a number with the specified grouping and decimal precision.", - "properties": { - "call": { - "const": "formatNumber" - }, - "args": { - "type": "object", - "properties": { - "value": { - "$ref": "common_types.json#/$defs/DynamicNumber", - "description": "The number to format." - }, - "decimals": { - "$ref": "common_types.json#/$defs/DynamicNumber", - "description": "Optional. The number of decimal places to show. Defaults to 0 or 2 depending on locale." - }, - "grouping": { - "$ref": "common_types.json#/$defs/DynamicBoolean", - "description": "Optional. If true, uses locale-specific grouping separators (e.g. '1,000'). If false, returns raw digits (e.g. '1000'). Defaults to true." - } - }, - "required": ["value"], - "unevaluatedProperties": false - }, - "returnType": { - "const": "string" - } - }, - "required": ["call", "args"], - "unevaluatedProperties": false - }, - "formatCurrency": { - "type": "object", - "description": "Formats a number as a currency string.", - "properties": { - "call": { - "const": "formatCurrency" - }, - "args": { - "type": "object", - "properties": { - "value": { - "$ref": "common_types.json#/$defs/DynamicNumber", - "description": "The monetary amount." - }, - "currency": { - "$ref": "common_types.json#/$defs/DynamicString", - "description": "The ISO 4217 currency code (e.g., 'USD', 'EUR')." - }, - "decimals": { - "$ref": "common_types.json#/$defs/DynamicNumber", - "description": "Optional. The number of decimal places to show. Defaults to 0 or 2 depending on locale." - }, - "grouping": { - "$ref": "common_types.json#/$defs/DynamicBoolean", - "description": "Optional. If true, uses locale-specific grouping separators (e.g. '1,000'). If false, returns raw digits (e.g. '1000'). Defaults to true." - } - }, - "required": ["currency", "value"], - "unevaluatedProperties": false - }, - "returnType": { - "const": "string" - } - }, - "required": ["call", "args"], - "unevaluatedProperties": false - }, - "formatDate": { - "type": "object", - "description": "Formats a timestamp into a string using a pattern.", - "properties": { - "call": { - "const": "formatDate" - }, - "args": { - "type": "object", - "properties": { - "value": { - "$ref": "common_types.json#/$defs/DynamicValue", - "description": "The date to format." - }, - "format": { - "$ref": "common_types.json#/$defs/DynamicString", - "description": "A Unicode TR35 date pattern string.\n\nToken Reference:\n- Year: 'yy' (26), 'yyyy' (2026)\n- Month: 'M' (1), 'MM' (01), 'MMM' (Jan), 'MMMM' (January)\n- Day: 'd' (1), 'dd' (01), 'E' (Tue), 'EEEE' (Tuesday)\n- Hour (12h): 'h' (1-12), 'hh' (01-12) - requires 'a' for AM/PM\n- Hour (24h): 'H' (0-23), 'HH' (00-23) - Military Time\n- Minute: 'mm' (00-59)\n- Second: 'ss' (00-59)\n- Period: 'a' (AM/PM)\n\nExamples:\n- 'MMM dd, yyyy' -> 'Jan 16, 2026'\n- 'HH:mm' -> '14:30' (Military)\n- 'h:mm a' -> '2:30 PM'\n- 'EEEE, d MMMM' -> 'Friday, 16 January'" - } - }, - "required": ["format", "value"], - "unevaluatedProperties": false - }, - "returnType": { - "const": "string" - } - }, - "required": ["call", "args"], - "unevaluatedProperties": false - }, - "pluralize": { - "type": "object", - "description": "Returns a localized string based on the Common Locale Data Repository (CLDR) plural category of the count (zero, one, two, few, many, other). Requires an 'other' fallback. For English, just use 'one' and 'other'.", - "properties": { - "call": { - "const": "pluralize" - }, - "args": { - "type": "object", - "properties": { - "value": { - "$ref": "common_types.json#/$defs/DynamicNumber", - "description": "The numeric value used to determine the plural category." - }, - "zero": { - "$ref": "common_types.json#/$defs/DynamicString", - "description": "String for the 'zero' category (e.g., 0 items)." - }, - "one": { - "$ref": "common_types.json#/$defs/DynamicString", - "description": "String for the 'one' category (e.g., 1 item)." - }, - "two": { - "$ref": "common_types.json#/$defs/DynamicString", - "description": "String for the 'two' category (used in Arabic, Welsh, etc.)." - }, - "few": { - "$ref": "common_types.json#/$defs/DynamicString", - "description": "String for the 'few' category (e.g., small groups in Slavic languages)." - }, - "many": { - "$ref": "common_types.json#/$defs/DynamicString", - "description": "String for the 'many' category (e.g., large groups in various languages)." - }, - "other": { - "$ref": "common_types.json#/$defs/DynamicString", - "description": "The default/fallback string (used for general plural cases)." - } - }, - "required": ["value", "other"], - "unevaluatedProperties": false - }, - "returnType": { - "const": "string" - } - }, - "required": ["call", "args"], - "unevaluatedProperties": false - }, - "openUrl": { - "type": "object", - "description": "Opens the specified URL in a browser or handler. This function has no return value.", - "properties": { - "call": { - "const": "openUrl" - }, - "args": { - "type": "object", - "properties": { - "url": { - "type": "string", - "format": "uri", - "description": "The URL to open." - } - }, - "required": ["url"], - "additionalProperties": false - }, - "returnType": { - "const": "void" - } - }, - "required": ["call", "args"], - "unevaluatedProperties": false - }, - "and": { - "type": "object", - "description": "Performs a logical AND operation on a list of boolean values.", - "properties": { - "call": { - "const": "and" - }, - "args": { - "type": "object", - "properties": { - "values": { - "type": "array", - "description": "The list of boolean values to evaluate.", - "items": { - "$ref": "common_types.json#/$defs/DynamicBoolean" - }, - "minItems": 2 - } - }, - "required": ["values"], - "unevaluatedProperties": false - }, - "returnType": { - "const": "boolean" - } - }, - "required": ["call", "args"], - "unevaluatedProperties": false - }, - "or": { - "type": "object", - "description": "Performs a logical OR operation on a list of boolean values.", - "properties": { - "call": { - "const": "or" - }, - "args": { - "type": "object", - "properties": { - "values": { - "type": "array", - "description": "The list of boolean values to evaluate.", - "items": { - "$ref": "common_types.json#/$defs/DynamicBoolean" - }, - "minItems": 2 - } - }, - "required": ["values"], - "unevaluatedProperties": false - }, - "returnType": { - "const": "boolean" - } - }, - "required": ["call", "args"], - "unevaluatedProperties": false - }, - "not": { - "type": "object", - "description": "Performs a logical NOT operation on a boolean value.", - "properties": { - "call": { - "const": "not" - }, - "args": { - "type": "object", - "properties": { - "value": { - "$ref": "common_types.json#/$defs/DynamicBoolean", - "description": "The boolean value to negate." - } - }, - "required": ["value"], - "unevaluatedProperties": false - }, - "returnType": { - "const": "boolean" - } - }, - "required": ["call", "args"], - "unevaluatedProperties": false - } - }, - "$defs": { - "CatalogComponentCommon": { - "type": "object", - "properties": { - "weight": { - "type": "number", - "description": "The relative weight of this component within a Row or Column. This is similar to the CSS 'flex-grow' property. Note: this may ONLY be set when the component is a direct descendant of a Row or Column." - } - } - }, - "theme": { - "type": "object", - "properties": { - "primaryColor": { - "type": "string", - "description": "The primary brand color used for highlights (e.g., primary buttons, active borders). Renderers may generate variants of this color for different contexts. Format: Hexadecimal code (e.g., '#00BFFF').", - "pattern": "^#[0-9a-fA-F]{6}$" - }, - "iconUrl": { - "type": "string", - "format": "uri", - "description": "A URL for an image that identifies the agent or tool associated with the surface." - }, - "agentDisplayName": { - "type": "string", - "description": "Text to be displayed next to the surface to identify the agent or tool that created it." - } - }, - "additionalProperties": true - }, - "anyComponent": { - "oneOf": [ - { - "$ref": "#/components/Text" - }, - { - "$ref": "#/components/Image" - }, - { - "$ref": "#/components/Icon" - }, - { - "$ref": "#/components/Video" - }, - { - "$ref": "#/components/AudioPlayer" - }, - { - "$ref": "#/components/Row" - }, - { - "$ref": "#/components/Column" - }, - { - "$ref": "#/components/List" - }, - { - "$ref": "#/components/Card" - }, - { - "$ref": "#/components/Tabs" - }, - { - "$ref": "#/components/Modal" - }, - { - "$ref": "#/components/Divider" - }, - { - "$ref": "#/components/Button" - }, - { - "$ref": "#/components/TextField" - }, - { - "$ref": "#/components/CheckBox" - }, - { - "$ref": "#/components/ChoicePicker" - }, - { - "$ref": "#/components/Slider" - }, - { - "$ref": "#/components/DateTimeInput" - } - ], - "discriminator": { - "propertyName": "component" - } - }, - "anyFunction": { - "oneOf": [ - { - "$ref": "#/functions/required" - }, - { - "$ref": "#/functions/regex" - }, - { - "$ref": "#/functions/length" - }, - { - "$ref": "#/functions/numeric" - }, - { - "$ref": "#/functions/email" - }, - { - "$ref": "#/functions/formatString" - }, - { - "$ref": "#/functions/formatNumber" - }, - { - "$ref": "#/functions/formatCurrency" - }, - { - "$ref": "#/functions/formatDate" - }, - { - "$ref": "#/functions/pluralize" - }, - { - "$ref": "#/functions/openUrl" - }, - { - "$ref": "#/functions/and" - }, - { - "$ref": "#/functions/or" - }, - { - "$ref": "#/functions/not" - } - ] - } - } -} diff --git a/a2a_agents/python/a2ui_agent/src/a2ui/assets/0.9/common_types.json b/a2a_agents/python/a2ui_agent/src/a2ui/assets/0.9/common_types.json deleted file mode 100644 index 3ec6065a2..000000000 --- a/a2a_agents/python/a2ui_agent/src/a2ui/assets/0.9/common_types.json +++ /dev/null @@ -1,315 +0,0 @@ -{ - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "https://a2ui.org/specification/v0_9/common_types.json", - "title": "A2UI Common Types", - "description": "Common type definitions used across A2UI schemas.", - "$defs": { - "ComponentId": { - "type": "string", - "description": "The unique identifier for a component, used for both definitions and references within the same surface." - }, - "AccessibilityAttributes": { - "type": "object", - "description": "Attributes to enhance accessibility when using assistive technologies like screen readers.", - "properties": { - "label": { - "$ref": "#/$defs/DynamicString", - "description": "A short string, typically 1 to 3 words, used by assistive technologies to convey the purpose or intent of an element. For example, an input field might have an accessible label of 'User ID' or a button might be labeled 'Submit'." - }, - "description": { - "$ref": "#/$defs/DynamicString", - "description": "Additional information provided by assistive technologies about an element such as instructions, format requirements, or result of an action. For example, a mute button might have a label of 'Mute' and a description of 'Silences notifications about this conversation'." - } - } - }, - "ComponentCommon": { - "type": "object", - "properties": { - "id": { - "$ref": "#/$defs/ComponentId" - }, - "accessibility": { - "$ref": "#/$defs/AccessibilityAttributes" - } - }, - "required": ["id"] - }, - "ChildList": { - "oneOf": [ - { - "type": "array", - "items": { - "$ref": "#/$defs/ComponentId" - }, - "description": "A static list of child component IDs." - }, - { - "type": "object", - "description": "A template for generating a dynamic list of children from a data model list. The `componentId` is the component to use as a template.", - "properties": { - "componentId": { - "$ref": "#/$defs/ComponentId" - }, - "path": { - "type": "string", - "description": "The path to the list of component property objects in the data model." - } - }, - "required": ["componentId", "path"], - "additionalProperties": false - } - ] - }, - "DataBinding": { - "type": "object", - "properties": { - "path": { - "type": "string", - "description": "A JSON Pointer path to a value in the data model." - } - }, - "required": ["path"], - "additionalProperties": false - }, - "DynamicValue": { - "description": "A value that can be a literal, a path, or a function call returning any type.", - "oneOf": [ - { - "type": "string" - }, - { - "type": "number" - }, - { - "type": "boolean" - }, - { - "type": "array" - }, - { - "$ref": "#/$defs/DataBinding" - }, - { - "$ref": "#/$defs/FunctionCall" - } - ] - }, - "DynamicString": { - "description": "Represents a string", - "oneOf": [ - { - "type": "string" - }, - { - "$ref": "#/$defs/DataBinding" - }, - { - "allOf": [ - { - "$ref": "#/$defs/FunctionCall" - }, - { - "properties": { - "returnType": { - "const": "string" - } - } - } - ] - } - ] - }, - "DynamicNumber": { - "description": "Represents a value that can be either a literal number, a path to a number in the data model, or a function call returning a number.", - "oneOf": [ - { - "type": "number" - }, - { - "$ref": "#/$defs/DataBinding" - }, - { - "allOf": [ - { - "$ref": "#/$defs/FunctionCall" - }, - { - "properties": { - "returnType": { - "const": "number" - } - } - } - ] - } - ] - }, - "DynamicBoolean": { - "description": "A boolean value that can be a literal, a path, or a function call returning a boolean.", - "oneOf": [ - { - "type": "boolean" - }, - { - "$ref": "#/$defs/DataBinding" - }, - { - "allOf": [ - { - "$ref": "#/$defs/FunctionCall" - }, - { - "properties": { - "returnType": { - "const": "boolean" - } - } - } - ] - } - ] - }, - "DynamicStringList": { - "description": "Represents a value that can be either a literal array of strings, a path to a string array in the data model, or a function call returning a string array.", - "oneOf": [ - { - "type": "array", - "items": { - "type": "string" - } - }, - { - "$ref": "#/$defs/DataBinding" - }, - { - "allOf": [ - { - "$ref": "#/$defs/FunctionCall" - }, - { - "properties": { - "returnType": { - "const": "array" - } - } - } - ] - } - ] - }, - "FunctionCall": { - "type": "object", - "description": "Invokes a named function on the client.", - "properties": { - "call": { - "type": "string", - "description": "The name of the function to call." - }, - "args": { - "type": "object", - "description": "Arguments passed to the function.", - "additionalProperties": { - "anyOf": [ - { - "$ref": "#/$defs/DynamicValue" - }, - { - "type": "object", - "description": "A literal object argument (e.g. configuration)." - } - ] - } - }, - "returnType": { - "type": "string", - "description": "The expected return type of the function call.", - "enum": [ - "string", - "number", - "boolean", - "array", - "object", - "any", - "void" - ], - "default": "boolean" - } - }, - "required": ["call"], - "oneOf": [ - { "$ref": "catalog.json#/$defs/anyFunction" } - ] - }, - "CheckRule": { - "type": "object", - "description": "A single validation rule applied to an input component.", - "properties": { - "condition": { - "$ref": "#/$defs/DynamicBoolean" - }, - "message": { - "type": "string", - "description": "The error message to display if the check fails." - } - }, - "required": ["condition", "message"], - "additionalProperties": false - }, - "Checkable": { - "description": "Properties for components that support client-side checks.", - "type": "object", - "properties": { - "checks": { - "type": "array", - "description": "A list of checks to perform. These are function calls that must return a boolean indicating validity.", - "items": { - "$ref": "#/$defs/CheckRule" - } - } - } - }, - "Action": { - "description": "Defines an interaction handler that can either trigger a server-side event or execute a local client-side function.", - "oneOf": [ - { - "type": "object", - "description": "Triggers a server-side event.", - "properties": { - "event": { - "type": "object", - "description": "The event to dispatch to the server.", - "properties": { - "name": { - "type": "string", - "description": "The name of the action to be dispatched to the server." - }, - "context": { - "type": "object", - "description": "A JSON object containing the key-value pairs for the action context. Values can be literals or paths. Use literal values unless the value must be dynamically bound to the data model. Do NOT use paths for static IDs.", - "additionalProperties": { - "$ref": "#/$defs/DynamicValue" - } - } - }, - "required": ["name"], - "additionalProperties": false - } - }, - "required": ["event"], - "additionalProperties": false - }, - { - "type": "object", - "description": "Executes a local client-side function.", - "properties": { - "functionCall": { - "$ref": "#/$defs/FunctionCall" - } - }, - "required": ["functionCall"], - "additionalProperties": false - } - ] - } - } -} diff --git a/a2a_agents/python/a2ui_agent/src/a2ui/assets/0.9/server_to_client.json b/a2a_agents/python/a2ui_agent/src/a2ui/assets/0.9/server_to_client.json deleted file mode 100644 index 921e4168a..000000000 --- a/a2a_agents/python/a2ui_agent/src/a2ui/assets/0.9/server_to_client.json +++ /dev/null @@ -1,132 +0,0 @@ -{ - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "https://a2ui.org/specification/v0_9/server_to_client.json", - "title": "A2UI Message Schema", - "description": "Describes a JSON payload for an A2UI (Agent to UI) message, which is used to dynamically construct and update user interfaces.", - "type": "object", - "oneOf": [ - { "$ref": "#/$defs/CreateSurfaceMessage" }, - { "$ref": "#/$defs/UpdateComponentsMessage" }, - { "$ref": "#/$defs/UpdateDataModelMessage" }, - { "$ref": "#/$defs/DeleteSurfaceMessage" } - ], - "$defs": { - "CreateSurfaceMessage": { - "type": "object", - "properties": { - "version": { - "const": "v0.9" - }, - "createSurface": { - "type": "object", - "description": "Signals the client to create a new surface and begin rendering it. When this message is sent, the client will expect 'updateComponents' and/or 'updateDataModel' messages for the same surfaceId that define the component tree.", - "properties": { - "surfaceId": { - "type": "string", - "description": "The unique identifier for the UI surface to be rendered." - }, - "catalogId": { - "description": "A string that uniquely identifies this catalog. It is recommended to prefix this with an internet domain that you own, to avoid conflicts e.g. mycompany.com:somecatalog'.", - "type": "string" - }, - "theme": { - "$ref": "catalog.json#/$defs/theme", - "description": "Theme parameters for the surface (e.g., {'primaryColor': '#FF0000'}). These must validate against the 'theme' schema defined in the catalog." - }, - "sendDataModel": { - "type": "boolean", - "description": "If true, the client will send the full data model of this surface in the metadata of every A2A message sent to the server that created the surface. Defaults to false." - } - }, - "required": ["surfaceId", "catalogId"], - "additionalProperties": false - } - }, - "required": ["createSurface", "version"], - "additionalProperties": false - }, - "UpdateComponentsMessage": { - "type": "object", - "properties": { - "version": { - "const": "v0.9" - }, - "updateComponents": { - "type": "object", - "description": "Updates a surface with a new set of components. This message can be sent multiple times to update the component tree of an existing surface. One of the components in one of the components lists MUST have an 'id' of 'root' to serve as the root of the component tree. The createSurface message MUST have been previously sent with the 'catalogId' that is in this message.", - "properties": { - "surfaceId": { - "type": "string", - "description": "The unique identifier for the UI surface to be updated." - }, - - "components": { - "type": "array", - "description": "A list containing all UI components for the surface.", - "minItems": 1, - "items": { - "$ref": "catalog.json#/$defs/anyComponent" - } - } - }, - "required": ["surfaceId", "components"], - "additionalProperties": false - } - }, - "required": ["updateComponents", "version"], - "additionalProperties": false - }, - "UpdateDataModelMessage": { - "type": "object", - "properties": { - "version": { - "const": "v0.9" - }, - "updateDataModel": { - "type": "object", - "description": "Updates the data model for an existing surface. This message can be sent multiple times to update the data model. The createSurface message MUST have been previously sent with the 'catalogId' that is in this message.", - "properties": { - "surfaceId": { - "type": "string", - "description": "The unique identifier for the UI surface this data model update applies to." - }, - "path": { - "type": "string", - "description": "An optional path to a location within the data model (e.g., '/user/name'). If omitted, or set to '/', refers to the entire data model." - }, - "value": { - "description": "The data to be updated in the data model. If present, the value at 'path' is replaced (or created). If omitted, the key at 'path' is removed.", - "additionalProperties": true - } - }, - "required": ["surfaceId"], - "additionalProperties": false - } - }, - "required": ["updateDataModel", "version"], - "additionalProperties": false - }, - "DeleteSurfaceMessage": { - "type": "object", - "properties": { - "version": { - "const": "v0.9" - }, - "deleteSurface": { - "type": "object", - "description": "Signals the client to delete the surface identified by 'surfaceId'. The createSurface message MUST have been previously sent with the 'catalogId' that is in this message.", - "properties": { - "surfaceId": { - "type": "string", - "description": "The unique identifier for the UI surface to be deleted." - } - }, - "required": ["surfaceId"], - "additionalProperties": false - } - }, - "required": ["deleteSurface", "version"], - "additionalProperties": false - } - } -} diff --git a/agent_sdks/python/.gitignore b/agent_sdks/python/.gitignore deleted file mode 100644 index 22b91a08b..000000000 --- a/agent_sdks/python/.gitignore +++ /dev/null @@ -1 +0,0 @@ -src/a2ui/assets/**/*.json