From cd375e16535e38cf4ba94decc4760bb9684edaa6 Mon Sep 17 00:00:00 2001 From: Eduardo Borges Date: Mon, 23 Mar 2026 19:00:36 -0300 Subject: [PATCH 1/3] feat: add Maestro Flow JSON Schema (#5482) Add schema for Maestro UI test YAML flows (app config + command list). Includes positive tests for flow header and command sequence. Docs: https://docs.maestro.dev/ Made-with: Cursor --- src/api/json/catalog.json | 11 +++ src/schema-validation.jsonc | 1 + src/schemas/json/maestro-flow.json | 121 +++++++++++++++++++++++ src/test/maestro-flow/flow-commands.yaml | 18 ++++ src/test/maestro-flow/flow-header.yaml | 7 ++ 5 files changed, 158 insertions(+) create mode 100644 src/schemas/json/maestro-flow.json create mode 100644 src/test/maestro-flow/flow-commands.yaml create mode 100644 src/test/maestro-flow/flow-header.yaml diff --git a/src/api/json/catalog.json b/src/api/json/catalog.json index 4df41056e26..56365e63504 100644 --- a/src/api/json/catalog.json +++ b/src/api/json/catalog.json @@ -4083,6 +4083,17 @@ "fileMatch": [".mado.toml", "mado.toml"], "url": "https://raw.githubusercontent.com/akiomik/mado/refs/heads/main/pkg/json-schema/mado.json" }, + { + "name": "Maestro Flow", + "description": "Maestro mobile and web UI test flow (YAML)", + "fileMatch": [ + "**/.maestro/**/*.yaml", + "**/.maestro/**/*.yml", + "**/*.flow.yaml", + "**/*.flow.yml" + ], + "url": "https://www.schemastore.org/maestro-flow.json" + }, { "name": "MapEHR Mapping", "description": "Mapping for MapEHR.com", diff --git a/src/schema-validation.jsonc b/src/schema-validation.jsonc index 229dddf0810..f79f95d3d63 100644 --- a/src/schema-validation.jsonc +++ b/src/schema-validation.jsonc @@ -306,6 +306,7 @@ // JSON schema 2019-09 and 2020-12 are not well supported by many IDEs and should not be used "jsone.json", "license-report-config.json", + "maestro-flow.json", "openweather.current.json", "openweather.roadrisk.json", "openhab-5.1.json", diff --git a/src/schemas/json/maestro-flow.json b/src/schemas/json/maestro-flow.json new file mode 100644 index 00000000000..8277e87c008 --- /dev/null +++ b/src/schemas/json/maestro-flow.json @@ -0,0 +1,121 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "https://json.schemastore.org/maestro-flow.json", + "$defs": { + "flowConfiguration": { + "type": "object", + "additionalProperties": true, + "properties": { + "appId": { + "type": "string", + "title": "Application ID", + "description": "Android package name or iOS bundle ID under test. May use ${ENV_VAR} interpolation.", + "examples": ["com.example.app", "${APP_ID}"] + }, + "url": { + "type": "string", + "title": "Web URL under test", + "description": "For web flows, the starting URL (see Maestro web testing docs).", + "format": "uri" + }, + "name": { + "type": "string", + "description": "Human-readable flow name for reports." + }, + "tags": { + "type": "array", + "items": { "type": "string" }, + "description": "Tags for filtering and organization." + }, + "env": { + "type": "object", + "additionalProperties": { "type": "string" }, + "description": "Default environment variables for this flow (${VAR_NAME} in commands)." + }, + "onFlowStart": { + "$ref": "#/$defs/commandList", + "description": "Commands run before the main flow body; failure fails the flow." + }, + "onFlowComplete": { + "$ref": "#/$defs/commandList", + "description": "Commands run after the main flow (e.g. teardown)." + } + } + }, + "commandList": { + "type": "array", + "items": { "$ref": "#/$defs/commandStep" }, + "description": "Sequence of Maestro commands executed in order." + }, + "commandStep": { + "oneOf": [ + { + "$ref": "#/$defs/bareCommandName", + "description": "Shorthand step with no parameters (YAML scalar list item)." + }, + { + "$ref": "#/$defs/commandObject", + "description": "Single-key object: command name -> arguments map, string, or null." + } + ] + }, + "bareCommandName": { + "type": "string", + "title": "Bare command", + "description": "Commands that need no argument object. Maestro accepts many more; list is indicative.", + "examples": [ + "launchApp", + "hideKeyboard", + "back", + "stopApp", + "clearState", + "clearKeychain", + "waitForAnimationToEnd", + "takeScreenshot", + "startRecording", + "stopRecording" + ] + }, + "commandObject": { + "type": "object", + "minProperties": 1, + "maxProperties": 1, + "additionalProperties": { + "$ref": "#/$defs/commandValue" + }, + "propertyNames": { + "type": "string", + "description": "Maestro command name (typically camelCase, e.g. tapOn, runFlow)." + } + }, + "commandValue": { + "title": "Command arguments", + "description": "Depends on the command: omitted/null, boolean, string selector, number, array of nested steps, or parameter object.", + "oneOf": [ + { "type": "null" }, + { "type": "boolean" }, + { "type": "number" }, + { "type": "string" }, + { "type": "array", "items": { "$ref": "#/$defs/commandStep" } }, + { "$ref": "#/$defs/argumentMap" } + ] + }, + "argumentMap": { + "type": "object", + "additionalProperties": true, + "description": "Command-specific parameters. Commands: https://docs.maestro.dev/reference/commands-available/ — Selectors: https://docs.maestro.dev/reference/selectors — Conditions (when): https://docs.maestro.dev/maestro-flows/flow-control-and-logic/conditions — runFlow: https://docs.maestro.dev/reference/commands-available/runflow — launchApp: https://docs.maestro.dev/reference/commands-available/launchapp — extendedWaitUntil: https://docs.maestro.dev/reference/commands-available/extendedwaituntil" + } + }, + "title": "Maestro Flow", + "description": "YAML flow file for Maestro (mobile & web UI automation). A single file is usually two YAML documents separated by ---: (1) flow configuration, (2) command list. Assign this schema to *.flow.yaml or **/.maestro/**/*.yaml. Official docs: https://docs.maestro.dev/", + "oneOf": [ + { + "$ref": "#/$defs/flowConfiguration", + "description": "First document: app/url, env, tags, hooks." + }, + { + "$ref": "#/$defs/commandList", + "description": "Second document: ordered list of Maestro commands." + } + ] +} diff --git a/src/test/maestro-flow/flow-commands.yaml b/src/test/maestro-flow/flow-commands.yaml new file mode 100644 index 00000000000..75c389c396d --- /dev/null +++ b/src/test/maestro-flow/flow-commands.yaml @@ -0,0 +1,18 @@ +# yaml-language-server: $schema=../../schemas/json/maestro-flow.json +- launchApp: + clearState: true +- extendedWaitUntil: + visible: + id: sign_in + timeout: 30000 +- tapOn: + id: sign_in +- inputText: user@example.test +- hideKeyboard +- assertVisible: Home +- runFlow: + label: dismiss onboarding + when: + visible: Skip + commands: + - tapOn: Skip diff --git a/src/test/maestro-flow/flow-header.yaml b/src/test/maestro-flow/flow-header.yaml new file mode 100644 index 00000000000..6f42fced2f8 --- /dev/null +++ b/src/test/maestro-flow/flow-header.yaml @@ -0,0 +1,7 @@ +# yaml-language-server: $schema=../../schemas/json/maestro-flow.json +appId: com.example.maestro +name: sample flow +tags: + - e2e +env: + API_URL: https://api.example.test From 16dac6cb8949877c5b498efbf8f735ba3aff0f62 Mon Sep 17 00:00:00 2001 From: RFV-370 Date: Mon, 23 Mar 2026 23:01:09 +0100 Subject: [PATCH 2/3] Add Barba-CV JSON schema (external) (#5486) * Add Barba-CV JSON schema * fix: remove 'schema' word from catalog entry --- src/api/json/catalog.json | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/api/json/catalog.json b/src/api/json/catalog.json index 56365e63504..99c313cb1fc 100644 --- a/src/api/json/catalog.json +++ b/src/api/json/catalog.json @@ -649,6 +649,12 @@ ], "url": "https://raw.githubusercontent.com/Azure/Azure-Landing-Zones-Library/main/schemas/archetype_override.json" }, + { + "name": "Barba-CV", + "description": "Deterministic CV / resume data format", + "fileMatch": ["barba-cv.json"], + "url": "https://raw.githubusercontent.com/Eurobotics-Association/barba-cv/main/schema/barba-cv.schema.json" + }, { "name": "Biome Formatter Config", "description": "Configuration file for the Biome formatter", From f971f3f3238c7fa7ee1cd32b7638949d9ac20fd1 Mon Sep 17 00:00:00 2001 From: Hunter Tunnicliff Date: Mon, 23 Mar 2026 15:02:13 -0700 Subject: [PATCH 3/3] Add cursor agent environment config (#5488) --- src/api/json/catalog.json | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/api/json/catalog.json b/src/api/json/catalog.json index 99c313cb1fc..5d9d37c1e5f 100644 --- a/src/api/json/catalog.json +++ b/src/api/json/catalog.json @@ -9548,6 +9548,12 @@ "**/text2confl.yml" ], "url": "https://raw.githubusercontent.com/zeldigas/text2confl/refs/heads/master/docs/config.schema.json" + }, + { + "name": "Cursor Agent Environment", + "description": "Cursor cloud agent environment configuration", + "fileMatch": ["**/.cursor/environment.json"], + "url": "https://cursor.com/schemas/environment.schema.json" } ] }