From 9ad68bf8e9d6b497234734a05e241d408267a9cc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timoth=C3=A9e=20Lecomte?= Date: Tue, 19 May 2026 15:25:41 +0200 Subject: [PATCH 1/2] feat(catalogs): allow binding to openUrl url --- .../inline_catalog_0.9.json | 18 ++++++++++++++++-- specification/v0_10/json/basic_catalog.json | 17 ++++++++++++++--- specification/v0_10/test/testing_catalog.json | 17 ++++++++++++++--- specification/v0_9/json/basic_catalog.json | 17 ++++++++++++++--- 4 files changed, 58 insertions(+), 11 deletions(-) diff --git a/samples/agent/adk/custom-components-example/inline_catalog_0.9.json b/samples/agent/adk/custom-components-example/inline_catalog_0.9.json index 35d1e92cc..e5fae336e 100644 --- a/samples/agent/adk/custom-components-example/inline_catalog_0.9.json +++ b/samples/agent/adk/custom-components-example/inline_catalog_0.9.json @@ -1319,10 +1319,24 @@ "type": "object", "properties": { "url": { - "type": "string" + "allOf": [ + { + "$ref": "common_types.json#/$defs/DynamicString" + }, + { + "if": { + "type": "string" + }, + "then": { + "format": "uri" + } + } + ], + "description": "The URL to open." } }, - "required": ["url"] + "required": ["url"], + "unevaluatedProperties": false }, "returnType": { "const": "void" diff --git a/specification/v0_10/json/basic_catalog.json b/specification/v0_10/json/basic_catalog.json index 254bd91ee..55ced84d9 100644 --- a/specification/v0_10/json/basic_catalog.json +++ b/specification/v0_10/json/basic_catalog.json @@ -998,13 +998,24 @@ "type": "object", "properties": { "url": { - "type": "string", - "format": "uri", + "allOf": [ + { + "$ref": "common_types.json#/$defs/DynamicString" + }, + { + "if": { + "type": "string" + }, + "then": { + "format": "uri" + } + } + ], "description": "The URL to open." } }, "required": ["url"], - "additionalProperties": false + "unevaluatedProperties": false }, "returnType": { "const": "void" diff --git a/specification/v0_10/test/testing_catalog.json b/specification/v0_10/test/testing_catalog.json index f839f4601..84c1dac47 100644 --- a/specification/v0_10/test/testing_catalog.json +++ b/specification/v0_10/test/testing_catalog.json @@ -37,13 +37,24 @@ "type": "object", "properties": { "url": { - "type": "string", - "format": "uri", + "allOf": [ + { + "$ref": "common_types.json#/$defs/DynamicString" + }, + { + "if": { + "type": "string" + }, + "then": { + "format": "uri" + } + } + ], "description": "The URL to open." } }, "required": ["url"], - "additionalProperties": false + "unevaluatedProperties": false }, "returnType": { "const": "void" diff --git a/specification/v0_9/json/basic_catalog.json b/specification/v0_9/json/basic_catalog.json index bbb7d83a3..75b6177ef 100644 --- a/specification/v0_9/json/basic_catalog.json +++ b/specification/v0_9/json/basic_catalog.json @@ -1143,13 +1143,24 @@ "type": "object", "properties": { "url": { - "type": "string", - "format": "uri", + "allOf": [ + { + "$ref": "common_types.json#/$defs/DynamicString" + }, + { + "if": { + "type": "string" + }, + "then": { + "format": "uri" + } + } + ], "description": "The URL to open." } }, "required": ["url"], - "additionalProperties": false + "unevaluatedProperties": false }, "returnType": { "const": "void" From d7ca4dcddd20d966e00393f35366be585c20c81a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timoth=C3=A9e=20Lecomte?= Date: Tue, 19 May 2026 15:55:05 +0200 Subject: [PATCH 2/2] Add tests --- .../cases/function_catalog_validation.json | 25 +++++++++++++++++++ .../cases/function_catalog_validation.json | 25 +++++++++++++++++++ 2 files changed, 50 insertions(+) diff --git a/specification/v0_10/test/cases/function_catalog_validation.json b/specification/v0_10/test/cases/function_catalog_validation.json index 5e77d2169..ee2407724 100644 --- a/specification/v0_10/test/cases/function_catalog_validation.json +++ b/specification/v0_10/test/cases/function_catalog_validation.json @@ -470,6 +470,31 @@ } } }, + { + "description": "openUrl: Valid call with dynamic binding URL", + "valid": true, + "data": { + "version": "v0.10", + "updateComponents": { + "surfaceId": "test", + "components": [ + { + "id": "btn1", + "component": "Button", + "child": "txt1", + "action": { + "functionCall": { + "call": "openUrl", + "args": {"url": {"path": "/targetUrl"}}, + "returnType": "void" + } + } + }, + {"id": "txt1", "component": "Text", "text": "Go"} + ] + } + } + }, { "description": "openUrl: Invalid args (string instead of object)", "valid": false, diff --git a/specification/v0_9/test/cases/function_catalog_validation.json b/specification/v0_9/test/cases/function_catalog_validation.json index 7dad197c7..e3582f5a9 100644 --- a/specification/v0_9/test/cases/function_catalog_validation.json +++ b/specification/v0_9/test/cases/function_catalog_validation.json @@ -470,6 +470,31 @@ } } }, + { + "description": "openUrl: Valid call with dynamic binding URL", + "valid": true, + "data": { + "version": "v0.9", + "updateComponents": { + "surfaceId": "test", + "components": [ + { + "id": "btn1", + "component": "Button", + "child": "txt1", + "action": { + "functionCall": { + "call": "openUrl", + "args": {"url": {"path": "/targetUrl"}}, + "returnType": "void" + } + } + }, + {"id": "txt1", "component": "Text", "text": "Go"} + ] + } + } + }, { "description": "openUrl: Invalid args (string instead of object)", "valid": false,