#!/usr/bin/env python3 """ScriptTap canonical authoring preflight and deterministic reference generator. Python 3.9+, standard library only. No network, app/device access, or package writes. The generated public copy embeds the exact canonical data used by the Bridge. """ import argparse import copy import decimal import datetime import hashlib import json import math import pathlib import re import sys # Replaced mechanically in the downloadable, self-contained distribution. EMBEDDED_BUNDLE = json.loads('{"commandContract":{"schemaVersion":"1.0.0","title":"ScriptTap public command and Desktop Bridge contract","authoring":{"currentCommandTypes":["click","delay","delay_until","retap","multi_click","swipe","gestures","img_find","smart_tap","label","goto","loop","end_loop","break_loop","call","break_call","stop_call","pause_concurrent","unpause_concurrent","break_exclusive","set_variable","mod_variable","text_type","get_pixel_color","pixel_sample_batch","pixel_find","visual_trigger","divider","else","or","end_or","xor","end_xor","and","end_and","rgb_confidence","screenshot","prompt_me","color_classify","array_get","array_set","for_each_index","end_for_each_index","array_segment_scan","append_points","device_settings","pinch","ui_find","http","clipboard","file","text_transform","ocr","reader","json","translate","display","touch_down","touch_move","end_touch","set_coordinates","state_get","use_action"],"legacyCompatibilityCommandTypes":["device_open_app","device_intent_action","device_system_nav","alert","device_brightness","device_volume","device_do_not_disturb","device_rotation"],"internalGeneratedCommandTypes":["pixel_color_result"]},"transportBoundaries":{"archiveOnlyCommandFields":["targetScope","targetClientId","targetClientIds","coordinateFrame"],"internalCommandFields":["estimatedWorkPerSecond","workEstimateVersion"]},"schemas":{"string":{"type":"string"},"colorClassifyOutputType":{"type":"string","enum":["integer","decimal","string"]},"arraySegmentOutputType":{"type":"string","enum":["integer","decimal"]},"nonEmptyString":{"type":"string","minLength":1},"exactTrimmedString":{"type":"string"},"exactTrimmedNonEmptyString":{"type":"string","minLength":1},"positiveInt32String":{"type":"string","pattern":"^(?:[1-9][0-9]{0,8}|1[0-9]{9}|20[0-9]{8}|21[0-3][0-9]{7}|214[0-6][0-9]{6}|2147[0-3][0-9]{5}|21474[0-7][0-9]{4}|214748[0-2][0-9]{3}|2147483[0-5][0-9]{2}|21474836[0-3][0-9]|214748364[0-7])$"},"positiveInt32OrIntegerVariableToken":{"oneOf":[{"$ref":"positiveInt32String"},{"type":"string","pattern":"^[A-Za-z](?:0{0,3}(?:[1-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]))?$"}]},"nonNegativeInt32OrIntegerVariableToken":{"oneOf":[{"type":"string","pattern":"^(?:0|[1-9][0-9]{0,8}|1[0-9]{9}|20[0-9]{8}|21[0-3][0-9]{7}|214[0-6][0-9]{6}|2147[0-3][0-9]{5}|21474[0-7][0-9]{4}|214748[0-2][0-9]{3}|2147483[0-5][0-9]{2}|21474836[0-3][0-9]|214748364[0-7])$"},{"type":"string","pattern":"^[A-Za-z](?:0{0,3}(?:[1-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]))?$"}]},"incompletePositiveInt32OrIntegerVariableToken":{"oneOf":[{"type":"string","maxLength":0},{"$ref":"positiveInt32OrIntegerVariableToken"}]},"incompleteNonNegativeInt32OrIntegerVariableToken":{"oneOf":[{"type":"string","maxLength":0},{"$ref":"nonNegativeInt32OrIntegerVariableToken"}]},"displayPositiveMillisValue":{"type":"string","pattern":"^(?:|[1-9][0-9]{0,18})$"},"displayIntervalMillisValue":{"type":"string","pattern":"^(?:|[1-9][0-9]{2,18})$"},"executionOrientation":{"oneOf":[{"type":"string","maxLength":0},{"type":"string","enum":["portrait","landscape"]}]},"executionSurface":{"type":"string","enum":["default","desktop"]},"desktopCoordinateFrame":{"type":"object","properties":{"effectiveLogicalWidth":{"$ref":"int32"},"effectiveLogicalHeight":{"$ref":"int32"},"usableLeft":{"$ref":"int32"},"usableTop":{"$ref":"int32"},"usableRight":{"$ref":"int32"},"usableBottom":{"$ref":"int32"},"insetLeft":{"$ref":"int32"},"insetTop":{"$ref":"int32"},"insetRight":{"$ref":"int32"},"insetBottom":{"$ref":"int32"},"density":{"type":"number","minimum":5e-324},"rotation":{"type":"integer","minimum":0,"maximum":3}},"required":["effectiveLogicalWidth","effectiveLogicalHeight","usableLeft","usableTop","usableRight","usableBottom","insetLeft","insetTop","insetRight","insetBottom","density","rotation"],"additionalProperties":false},"boolean":{"type":"boolean"},"int32":{"type":"integer","minimum":-2147483648,"maximum":2147483647},"int64":{"type":"integer"},"nonNegativeInteger":{"type":"integer","minimum":0},"uint32":{"type":"integer","minimum":0,"maximum":2147483647},"percent":{"type":"integer","minimum":0,"maximum":100},"smartTapGlobalConfidenceRaw":{"type":"string","pattern":"^(?:|0*(?:[1-9]|[1-9][0-9]|100))$"},"smartTapRowConfidenceRaw":{"type":"string","pattern":"^0*(?:[0-9]|[1-9][0-9]|100)$"},"rawDevicePercent":{"type":"string","pattern":"^(?:|0*(?:[0-9]|[1-9][0-9]|100))$"},"imgFindMaxResultsValue":{"oneOf":[{"type":"string","pattern":"^(?:[1-9]|[1-9][0-9]{1,2}|[1-3][0-9]{3}|40(?:[0-8][0-9]|9[0-6]))$"},{"type":"string","pattern":"^[A-Za-z](?:0{0,3}(?:[1-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]))?$"}]},"pixelFindMaxResultsValue":{"oneOf":[{"type":"string","pattern":"^\\\\+?0*(?:[1-9]|[1-9][0-9]{1,2}|[1-3][0-9]{3}|40(?:[0-8][0-9]|9[0-6]))$"},{"type":"string","pattern":"^[A-Za-z](?:0*(?:[1-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]))?$"}]},"pixelFindColorToken":{"type":"string","pattern":"^(?:[0-9A-Fa-f]{6}|[A-Za-z](?:0*(?:[1-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]))?)$"},"pixelFindColors":{"type":"array","maxItems":20,"items":{"$ref":"pixelFindColorToken"}},"pixelFindIgnoreRadius":{"oneOf":[{"type":"string","pattern":"^\\\\+?0*(?:0|[1-9][0-9]{0,8}|1[0-9]{9}|20[0-9]{8}|21[0-3][0-9]{7}|214[0-6][0-9]{6}|2147[0-3][0-9]{5}|21474[0-7][0-9]{4}|214748[0-2][0-9]{3}|2147483[0-5][0-9]{2}|21474836[0-3][0-9]|214748364[0-7])$"},{"type":"string","pattern":"^[A-Za-z](?:0*(?:[1-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]))?$"}]},"positivePercent":{"type":"integer","minimum":1,"maximum":100},"stringArray":{"type":"array","items":{"$ref":"string"}},"scriptMutationFault":{"type":"object","properties":{"code":{"$ref":"string"},"location":{"$ref":"string"},"detail":{"$ref":"string"}},"required":["code","location","detail"],"additionalProperties":false},"scriptCreateSuccess":{"type":"object","properties":{"ok":{"$ref":"boolean"},"apiVersion":{"$ref":"int32"},"kind":{"type":"string","enum":["script_transaction"]},"status":{"type":"string","enum":["adopted"]},"generation":{"$ref":"int64"},"faults":{"type":"array","items":{"$ref":"scriptMutationFault"},"maxItems":0},"accepted":{"$ref":"boolean"},"message":{"type":"string","enum":["import success"]}},"required":["ok","apiVersion","kind","status","generation","faults","accepted","message"],"additionalProperties":false},"scriptReplaceSuccess":{"type":"object","properties":{"ok":{"$ref":"boolean"},"apiVersion":{"$ref":"int32"},"kind":{"type":"string","enum":["script_transaction"]},"status":{"type":"string","enum":["adopted","no_change"]},"generation":{"$ref":"int64"},"faults":{"type":"array","items":{"$ref":"scriptMutationFault"},"maxItems":0},"accepted":{"$ref":"boolean"},"message":{"type":"string","enum":["import success"]}},"required":["ok","apiVersion","kind","status","generation","faults","accepted","message"],"additionalProperties":false},"scriptImportFailure":{"type":"object","properties":{"ok":{"$ref":"boolean"},"apiVersion":{"$ref":"int32"},"kind":{"type":"string","enum":["script_transaction"]},"status":{"type":"string","enum":["conflict","rejected"]},"faults":{"type":"array","items":{"$ref":"scriptMutationFault"},"minItems":1}},"required":["ok","apiVersion","kind","status","faults"],"additionalProperties":false},"scriptTransactionSuccess":{"type":"object","properties":{"ok":{"$ref":"boolean"},"apiVersion":{"$ref":"int32"},"kind":{"type":"string","enum":["script_transaction"]},"status":{"type":"string","enum":["adopted","no_change"]},"generation":{"$ref":"int64"},"faults":{"type":"array","items":{"$ref":"scriptMutationFault"},"maxItems":0},"accepted":{"$ref":"boolean"},"message":{"type":"string","enum":["import success"]},"scriptIdMap":{"type":"object","properties":{},"required":[],"additionalProperties":{"$ref":"string"}}},"required":["ok","apiVersion","kind","status","generation","faults","accepted","message","scriptIdMap"],"additionalProperties":false},"scriptTransactionFailure":{"type":"object","properties":{"ok":{"$ref":"boolean"},"apiVersion":{"$ref":"int32"},"kind":{"type":"string","enum":["script_transaction"]},"status":{"type":"string","enum":["conflict","rejected"]},"faults":{"type":"array","items":{"$ref":"scriptMutationFault"},"minItems":1},"scriptIdMap":{"type":"object","properties":{},"required":[],"additionalProperties":{"$ref":"string"}}},"required":["ok","apiVersion","kind","status","faults","scriptIdMap"],"additionalProperties":false},"conditionRow":{"type":"object","properties":{"variableName":{"$ref":"string"},"variableComparator":{"type":"string","enum":[">",">=","=","<","<=","<>","between","contains"]},"variableValue":{"$ref":"string"},"variableValue2":{"$ref":"string"}},"required":["variableName","variableComparator","variableValue"],"additionalProperties":false},"promptButtonRow":{"type":"object","properties":{"variableName":{"$ref":"string"},"caption":{"type":"string","maxLength":8}},"required":["variableName","caption"],"additionalProperties":false},"promptToggleRow":{"type":"object","properties":{"variableName":{"$ref":"string"},"caption":{"type":"string","maxLength":6}},"required":["variableName","caption"],"additionalProperties":false},"promptMiniButtonRow":{"type":"object","properties":{"caption":{"type":"string","maxLength":8}},"required":["caption"],"additionalProperties":false},"promptMiniToggleRow":{"type":"object","properties":{"caption":{"type":"string","maxLength":6},"variableName":{"$ref":"string"}},"required":["caption","variableName"],"additionalProperties":false},"colorTargetRow":{"type":"object","properties":{"label":{"$ref":"string"},"targetColor":{"$ref":"string"},"resultValue":{"$ref":"string"}},"additionalProperties":false},"bulkEntryRow":{"type":"object","properties":{"enabled":{"$ref":"boolean"},"indexValue":{"$ref":"string"},"valueSourceMode":{"type":"string","enum":["literal","variable"]},"literalValue":{"$ref":"string"},"sourceVariableName":{"$ref":"string"}},"required":["enabled","indexValue","valueSourceMode","literalValue","sourceVariableName"],"additionalProperties":false},"columnCenterRow":{"type":"object","properties":{"column":{"$ref":"string"},"x":{"$ref":"string"},"y":{"$ref":"string"}},"required":["column","x","y"],"additionalProperties":false},"pointRow":{"type":"object","properties":{"x":{"$ref":"string"},"y":{"$ref":"string"},"enabled":{"$ref":"boolean"}},"required":["x","y","enabled"],"additionalProperties":false},"multiClickRow":{"type":"object","properties":{"x":{"oneOf":[{"$ref":"string"},{"$ref":"nonNegativeInteger"}]},"y":{"oneOf":[{"$ref":"string"},{"$ref":"nonNegativeInteger"}]}},"required":["x","y"],"additionalProperties":false},"gesturePoint":{"type":"object","properties":{"x":{"$ref":"number"},"y":{"$ref":"number"},"t":{"$ref":"nonNegativeInteger"}},"required":["x","y","t"],"additionalProperties":false},"gestureStroke":{"type":"object","properties":{"start":{"$ref":"nonNegativeInteger"},"duration":{"$ref":"nonNegativeInteger"},"points":{"type":"array","items":{"$ref":"gesturePoint"},"minItems":2}},"required":["start","duration","points"],"additionalProperties":false},"gestureLaneInt32Draft":{"type":"string","integerTextMinimum":-2147483648,"integerTextMaximum":2147483647},"gestureLaneNonNegativeDraft":{"type":"string","integerTextMinimum":0,"integerTextMaximum":2147483647},"gestureLanePositiveDraft":{"type":"string","integerTextMinimum":1,"integerTextMaximum":2147483647},"gestureLaneTapDuration":{"oneOf":[{"type":"string","maxLength":0},{"$ref":"gestureLanePositiveDraft"}]},"gestureLanePoint":{"type":"object","properties":{"x":{"$ref":"gestureLaneInt32Draft"},"y":{"$ref":"gestureLaneInt32Draft"},"t":{"$ref":"gestureLaneNonNegativeDraft"}},"required":["x","y","t"],"additionalProperties":false},"gestureLaneTap":{"type":"object","properties":{"type":{"type":"string","enum":["tap"]},"x":{"$ref":"gestureLaneInt32Draft"},"y":{"$ref":"gestureLaneInt32Draft"},"duration":{"$ref":"gestureLaneTapDuration"}},"required":["type","x","y","duration"],"additionalProperties":false},"gestureLaneWait":{"type":"object","properties":{"type":{"type":"string","enum":["wait"]},"duration":{"$ref":"gestureLaneNonNegativeDraft"}},"required":["type","duration"],"additionalProperties":false},"gestureLaneSwipe":{"type":"object","properties":{"type":{"type":"string","enum":["swipe"]},"duration":{"$ref":"gestureLanePositiveDraft"},"points":{"type":"array","items":{"$ref":"gestureLanePoint"},"minItems":2,"maxItems":4096}},"required":["type","duration","points"],"additionalProperties":false,"strictIntegerTimeline":{"array":"points","property":"t","maximumProperty":"duration","first":0,"lastEquals":true}},"gestureLaneRow":{"oneOf":[{"$ref":"gestureLaneTap"},{"$ref":"gestureLaneSwipe"},{"$ref":"gestureLaneWait"}]},"gestureLane":{"type":"object","properties":{"lane":{"type":"integer","minimum":1,"maximum":20},"enabled":{"$ref":"boolean"},"rows":{"type":"array","items":{"$ref":"gestureLaneRow"}}},"required":["lane","enabled","rows"],"additionalProperties":false},"smartTapAssetRow":{"type":"object","properties":{"assetName":{"$ref":"string"},"label":{"$ref":"string"},"enabled":{"$ref":"boolean"},"confidencePercent":{"$ref":"smartTapRowConfidenceRaw"}},"required":["assetName","label","enabled"],"additionalProperties":false},"httpHeaderRow":{"type":"object","properties":{"name":{"$ref":"string"},"valueSourceMode":{"type":"string","enum":["literal","variable"]},"value":{"$ref":"string"},"variableName":{"$ref":"string"}},"required":["name","valueSourceMode","value","variableName"],"additionalProperties":false},"volumePercents":{"type":"object","properties":{"call":{"$ref":"percent"},"media":{"$ref":"percent"},"system":{"$ref":"percent"},"alert":{"$ref":"percent"},"message":{"$ref":"percent"}},"required":[],"additionalProperties":false},"allVolumePercents":{"type":"object","properties":{"call":{"$ref":"percent"},"media":{"$ref":"percent"},"system":{"$ref":"percent"},"alert":{"$ref":"percent"},"message":{"$ref":"percent"}},"required":["call","media","system","alert","message"],"additionalProperties":false},"volumeApplyStreams":{"type":"object","properties":{"call":{"$ref":"boolean"},"media":{"$ref":"boolean"},"system":{"$ref":"boolean"},"alert":{"$ref":"boolean"},"message":{"$ref":"boolean"}},"required":["call","media","system","alert","message"],"additionalProperties":false},"visualTriggerSlot":{"type":"object","properties":{"enabled":{"$ref":"boolean"},"visualSlotMode":{"type":"string","enum":["pixel_line","asset"]},"visualLineStartXValue":{"$ref":"string"},"visualLineStartYValue":{"$ref":"string"},"visualLineEndXValue":{"$ref":"string"},"visualLineEndYValue":{"$ref":"string"},"visualLineSampleCount":{"type":"integer","minimum":0,"maximum":4096},"visualLineHitRadiusPx":{"type":"integer","minimum":0,"maximum":4096},"visualLineColorMode":{"type":"string","enum":["each_frame","once_on_start"]},"visualTargetColorHex":{"$ref":"string"},"visualTargetColorConfidence":{"$ref":"positivePercent"},"visualPointerAssetName":{"$ref":"string"},"visualPointerConfidence":{"$ref":"positivePercent"},"visualPointerTipOffsetX":{"$ref":"int32"},"visualPointerTipOffsetY":{"$ref":"int32"},"visualPointerRoiLeftValue":{"$ref":"string"},"visualPointerRoiTopValue":{"$ref":"string"},"visualPointerRoiRightValue":{"$ref":"string"},"visualPointerRoiBottomValue":{"$ref":"string"}},"required":["enabled","visualSlotMode","visualLineStartXValue","visualLineStartYValue","visualLineEndXValue","visualLineEndYValue","visualLineSampleCount","visualLineHitRadiusPx","visualLineColorMode","visualTargetColorHex","visualTargetColorConfidence","visualPointerAssetName","visualPointerConfidence","visualPointerTipOffsetX","visualPointerTipOffsetY","visualPointerRoiLeftValue","visualPointerRoiTopValue","visualPointerRoiRightValue","visualPointerRoiBottomValue"],"additionalProperties":false},"deviceSettingsFrame":{"type":"object","properties":{"key":{"type":"string","enum":["brightness","volume","do_not_disturb","rotation","screen_timeout","ringer_mode","clock_format","flashlight","flashlight_strength","open_settings_page"]},"enabled":{"$ref":"boolean"}},"required":["key","enabled"],"additionalProperties":false},"deviceSettingsFact":{"oneOf":[{"type":"object","properties":{"frame":{"type":"string","enum":["brightness"]},"key":{"type":"string","enum":["mode"]},"value":{"type":"string","enum":["manual","adaptive"]}},"required":["frame","key","value"],"additionalProperties":false},{"type":"object","properties":{"frame":{"type":"string","enum":["brightness"]},"key":{"type":"string","enum":["percent"]},"value":{"type":"string","enum":["0","1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24","25","26","27","28","29","30","31","32","33","34","35","36","37","38","39","40","41","42","43","44","45","46","47","48","49","50","51","52","53","54","55","56","57","58","59","60","61","62","63","64","65","66","67","68","69","70","71","72","73","74","75","76","77","78","79","80","81","82","83","84","85","86","87","88","89","90","91","92","93","94","95","96","97","98","99","100"]}},"required":["frame","key","value"],"additionalProperties":false},{"type":"object","properties":{"frame":{"type":"string","enum":["volume"]},"key":{"type":"string","enum":["call","media","system","alert","message"]},"value":{"type":"string"},"enabled":{"type":"boolean"}},"required":["frame","key","value","enabled"],"additionalProperties":false},{"type":"object","properties":{"frame":{"type":"string","enum":["volume"]},"key":{"type":"string","enum":["call","media","system","alert","message"]},"value":{"type":"string","enum":["off","0","1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24","25","26","27","28","29","30","31","32","33","34","35","36","37","38","39","40","41","42","43","44","45","46","47","48","49","50","51","52","53","54","55","56","57","58","59","60","61","62","63","64","65","66","67","68","69","70","71","72","73","74","75","76","77","78","79","80","81","82","83","84","85","86","87","88","89","90","91","92","93","94","95","96","97","98","99","100"]}},"required":["frame","key","value"],"additionalProperties":false},{"type":"object","properties":{"frame":{"type":"string","enum":["do_not_disturb"]},"key":{"type":"string","enum":["mode"]},"value":{"type":"string","enum":["off","priority_only","alarms_only","total_silence"]}},"required":["frame","key","value"],"additionalProperties":false},{"type":"object","properties":{"frame":{"type":"string","enum":["rotation"]},"key":{"type":"string","enum":["mode"]},"value":{"type":"string","enum":["auto_rotate","rotation_lock"]}},"required":["frame","key","value"],"additionalProperties":false},{"type":"object","properties":{"frame":{"type":"string","enum":["screen_timeout"]},"key":{"type":"string","enum":["milliseconds"]},"value":{"$ref":"positiveInt32String"}},"required":["frame","key","value"],"additionalProperties":false},{"type":"object","properties":{"frame":{"type":"string","enum":["ringer_mode"]},"key":{"type":"string","enum":["mode"]},"value":{"type":"string","enum":["normal","vibrate","silent"]}},"required":["frame","key","value"],"additionalProperties":false},{"type":"object","properties":{"frame":{"type":"string","enum":["clock_format"]},"key":{"type":"string","enum":["mode"]},"value":{"type":"string","enum":["device_default","12_hour","24_hour"]}},"required":["frame","key","value"],"additionalProperties":false},{"type":"object","properties":{"frame":{"type":"string","enum":["flashlight"]},"key":{"type":"string","enum":["state"]},"value":{"type":"string","enum":["off","on"]}},"required":["frame","key","value"],"additionalProperties":false},{"type":"object","properties":{"frame":{"type":"string","enum":["flashlight_strength"]},"key":{"type":"string","enum":["strength"]},"value":{"type":"string","enum":["0","1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24","25","26","27","28","29","30","31","32","33","34","35","36","37","38","39","40","41","42","43","44","45","46","47","48","49","50","51","52","53","54","55","56","57","58","59","60","61","62","63","64","65","66","67","68","69","70","71","72","73","74","75","76","77","78","79","80","81","82","83","84","85","86","87","88","89","90","91","92","93","94","95","96","97","98","99","100"]}},"required":["frame","key","value"],"additionalProperties":false},{"type":"object","properties":{"frame":{"type":"string","enum":["open_settings_page"]},"key":{"type":"string","enum":["page"]},"value":{"type":"string","enum":["main","display","sound","notifications","accessibility","applications","location","date_time","input_method","language","battery_saver","wifi","bluetooth"]}},"required":["frame","key","value"],"additionalProperties":false}]},"stateGetFrame":{"type":"object","properties":{"key":{"type":"string","enum":["battery","charge_time","power","advanced_power","thermal_status","thermal_headroom","display","display_settings","device_lock","audio","do_not_disturb","network","network_conditions","network_traffic","wifi","wifi_link_rates","cellular_signal","nfc","location_services","airplane_mode","memory","storage","uptime","cellular_network","call_state","bluetooth","flashlight"]},"enabled":{"$ref":"boolean"}},"required":["key","enabled"],"additionalProperties":false},"stateGetOutput":{"oneOf":[{"type":"object","properties":{"frame":{"type":"string","enum":["battery"]},"key":{"type":"string","enum":["level","charging","power_source","status","health","temperature_c","voltage_mv","current_ma","capacity_mah","energy_wh"]},"destination":{"$ref":"exactTrimmedNonEmptyString"}},"required":["frame","key","destination"],"additionalProperties":false},{"type":"object","properties":{"frame":{"type":"string","enum":["charge_time"]},"key":{"type":"string","enum":["remaining_seconds","is_charging"]},"destination":{"$ref":"exactTrimmedNonEmptyString"}},"required":["frame","key","destination"],"additionalProperties":false},{"type":"object","properties":{"frame":{"type":"string","enum":["power"]},"key":{"type":"string","enum":["power_saver","device_idle","screen_interactive"]},"destination":{"$ref":"exactTrimmedNonEmptyString"}},"required":["frame","key","destination"],"additionalProperties":false},{"type":"object","properties":{"frame":{"type":"string","enum":["advanced_power"]},"key":{"type":"string","enum":["light_idle","low_power_standby"]},"destination":{"$ref":"exactTrimmedNonEmptyString"}},"required":["frame","key","destination"],"additionalProperties":false},{"type":"object","properties":{"frame":{"type":"string","enum":["thermal_status"]},"key":{"type":"string","enum":["level"]},"destination":{"$ref":"exactTrimmedNonEmptyString"}},"required":["frame","key","destination"],"additionalProperties":false},{"type":"object","properties":{"frame":{"type":"string","enum":["thermal_headroom"]},"key":{"type":"string","enum":["headroom"]},"destination":{"$ref":"exactTrimmedNonEmptyString"}},"required":["frame","key","destination"],"additionalProperties":false},{"type":"object","properties":{"frame":{"type":"string","enum":["display"]},"key":{"type":"string","enum":["state","orientation","width","height","refresh_rate"]},"destination":{"$ref":"exactTrimmedNonEmptyString"}},"required":["frame","key","destination"],"additionalProperties":false},{"type":"object","properties":{"frame":{"type":"string","enum":["display_settings"]},"key":{"type":"string","enum":["brightness_percent","adaptive","rotation_lock","timeout_milliseconds","dark_mode","clock_format"]},"destination":{"$ref":"exactTrimmedNonEmptyString"}},"required":["frame","key","destination"],"additionalProperties":false},{"type":"object","properties":{"frame":{"type":"string","enum":["device_lock"]},"key":{"type":"string","enum":["locked","secure_lock_configured"]},"destination":{"$ref":"exactTrimmedNonEmptyString"}},"required":["frame","key","destination"],"additionalProperties":false},{"type":"object","properties":{"frame":{"type":"string","enum":["audio"]},"key":{"type":"string","enum":["music_active","microphone_muted","ringer_mode","output_route","call_volume_percent","media_volume_percent","system_volume_percent","alert_volume_percent","message_volume_percent"]},"destination":{"$ref":"exactTrimmedNonEmptyString"}},"required":["frame","key","destination"],"additionalProperties":false},{"type":"object","properties":{"frame":{"type":"string","enum":["do_not_disturb"]},"key":{"type":"string","enum":["current_mode"]},"destination":{"$ref":"exactTrimmedNonEmptyString"}},"required":["frame","key","destination"],"additionalProperties":false},{"type":"object","properties":{"frame":{"type":"string","enum":["network"]},"key":{"type":"string","enum":["connected","internet_validated","transport","metered","vpn_active","captive_portal","estimated_download_kbps","estimated_upload_kbps","data_saver"]},"destination":{"$ref":"exactTrimmedNonEmptyString"}},"required":["frame","key","destination"],"additionalProperties":false},{"type":"object","properties":{"frame":{"type":"string","enum":["network_conditions"]},"key":{"type":"string","enum":["roaming","congested","suspended"]},"destination":{"$ref":"exactTrimmedNonEmptyString"}},"required":["frame","key","destination"],"additionalProperties":false},{"type":"object","properties":{"frame":{"type":"string","enum":["network_traffic"]},"key":{"type":"string","enum":["rx_kbps","tx_kbps"]},"destination":{"$ref":"exactTrimmedNonEmptyString"}},"required":["frame","key","destination"],"additionalProperties":false},{"type":"object","properties":{"frame":{"type":"string","enum":["wifi"]},"key":{"type":"string","enum":["enabled","connected","signal_level","link_speed_mbps"]},"destination":{"$ref":"exactTrimmedNonEmptyString"}},"required":["frame","key","destination"],"additionalProperties":false},{"type":"object","properties":{"frame":{"type":"string","enum":["wifi_link_rates"]},"key":{"type":"string","enum":["rx_mbps","tx_mbps"]},"destination":{"$ref":"exactTrimmedNonEmptyString"}},"required":["frame","key","destination"],"additionalProperties":false},{"type":"object","properties":{"frame":{"type":"string","enum":["cellular_signal"]},"key":{"type":"string","enum":["level"]},"destination":{"$ref":"exactTrimmedNonEmptyString"}},"required":["frame","key","destination"],"additionalProperties":false},{"type":"object","properties":{"frame":{"type":"string","enum":["nfc"]},"key":{"type":"string","enum":["enabled"]},"destination":{"$ref":"exactTrimmedNonEmptyString"}},"required":["frame","key","destination"],"additionalProperties":false},{"type":"object","properties":{"frame":{"type":"string","enum":["location_services"]},"key":{"type":"string","enum":["enabled"]},"destination":{"$ref":"exactTrimmedNonEmptyString"}},"required":["frame","key","destination"],"additionalProperties":false},{"type":"object","properties":{"frame":{"type":"string","enum":["airplane_mode"]},"key":{"type":"string","enum":["enabled"]},"destination":{"$ref":"exactTrimmedNonEmptyString"}},"required":["frame","key","destination"],"additionalProperties":false},{"type":"object","properties":{"frame":{"type":"string","enum":["memory"]},"key":{"type":"string","enum":["available_mb","total_mb","low_memory"]},"destination":{"$ref":"exactTrimmedNonEmptyString"}},"required":["frame","key","destination"],"additionalProperties":false},{"type":"object","properties":{"frame":{"type":"string","enum":["storage"]},"key":{"type":"string","enum":["free_mb","total_mb"]},"destination":{"$ref":"exactTrimmedNonEmptyString"}},"required":["frame","key","destination"],"additionalProperties":false},{"type":"object","properties":{"frame":{"type":"string","enum":["uptime"]},"key":{"type":"string","enum":["seconds"]},"destination":{"$ref":"exactTrimmedNonEmptyString"}},"required":["frame","key","destination"],"additionalProperties":false},{"type":"object","properties":{"frame":{"type":"string","enum":["cellular_network"]},"key":{"type":"string","enum":["generation"]},"destination":{"$ref":"exactTrimmedNonEmptyString"}},"required":["frame","key","destination"],"additionalProperties":false},{"type":"object","properties":{"frame":{"type":"string","enum":["call_state"]},"key":{"type":"string","enum":["state"]},"destination":{"$ref":"exactTrimmedNonEmptyString"}},"required":["frame","key","destination"],"additionalProperties":false},{"type":"object","properties":{"frame":{"type":"string","enum":["bluetooth"]},"key":{"type":"string","enum":["enabled","audio_connected","headset_connected"]},"destination":{"$ref":"exactTrimmedNonEmptyString"}},"required":["frame","key","destination"],"additionalProperties":false},{"type":"object","properties":{"frame":{"type":"string","enum":["flashlight"]},"key":{"type":"string","enum":["enabled","strength"]},"destination":{"$ref":"exactTrimmedNonEmptyString"}},"required":["frame","key","destination"],"additionalProperties":false}]},"useActionFact":{"oneOf":[{"type":"object","properties":{"key":{"type":"string","enum":["action","mode","duration","pattern","strength","state","alertMode","alertSourceType","alertFileHasReadAccess","alertPlayMode","alertLoopTimeoutMsValue","alertSoundExecution","alertVolumeMode","alertVolumePercentValue","alertRestoreVolume","alertSaveSuccess","alertSuccessVariableName","alertSaveError","alertErrorVariableName"]},"value":{"type":"string","maxLength":0}},"required":["key","value"],"additionalProperties":false},{"type":"object","properties":{"key":{"type":"string","enum":["devicePackageName","deviceAppLabel","deviceIntentUri","deviceIntentEmailTo","deviceIntentSubject","deviceIntentBody","deviceIntentPhoneNumber","deviceIntentSmsBody","deviceIntentShareText","alertFileUri","alertFileDisplayName","alertFileMimeType","alertRingtoneUri","alertRingtoneLabel"]},"value":{"$ref":"string"}},"required":["key","value"],"additionalProperties":false},{"type":"object","properties":{"key":{"type":"string","enum":["alertMode"]},"value":{"type":"string","enum":["play","stop"]}},"required":["key","value"],"additionalProperties":false},{"type":"object","properties":{"key":{"type":"string","enum":["alertSourceType"]},"value":{"type":"string","enum":["file","ringtone"]}},"required":["key","value"],"additionalProperties":false},{"type":"object","properties":{"key":{"type":"string","enum":["alertPlayMode"]},"value":{"type":"string","enum":["once","loop"]}},"required":["key","value"],"additionalProperties":false},{"type":"object","properties":{"key":{"type":"string","enum":["alertSoundExecution"]},"value":{"type":"string","enum":["concurrent","wait"]}},"required":["key","value"],"additionalProperties":false},{"type":"object","properties":{"key":{"type":"string","enum":["alertVolumeMode"]},"value":{"type":"string","enum":["keep","set"]}},"required":["key","value"],"additionalProperties":false},{"type":"object","properties":{"key":{"type":"string","enum":["alertFileHasReadAccess","alertRestoreVolume","alertSaveSuccess","alertSaveError"]},"value":{"type":"string","enum":["true","false"]}},"required":["key","value"],"additionalProperties":false},{"type":"object","properties":{"key":{"type":"string","enum":["alertLoopTimeoutMsValue"]},"value":{"type":"string","pattern":"^(?:0|[1-9][0-9]{0,4}|1[0-7][0-9]{4}|180000|(?=.{1,5}$)[A-Za-z](?:0{0,3}(?:[1-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]))?)$"}},"required":["key","value"],"additionalProperties":false},{"type":"object","properties":{"key":{"type":"string","enum":["alertVolumePercentValue"]},"value":{"type":"string","pattern":"^(?:0|[1-9][0-9]?|100|(?=.{1,5}$)[A-Za-z](?:0{0,3}(?:[1-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]))?)$"}},"required":["key","value"],"additionalProperties":false},{"type":"object","properties":{"key":{"type":"string","enum":["alertSuccessVariableName","alertErrorVariableName"]},"value":{"type":"string","pattern":"^(?=.{1,5}$)[A-Za-z](?:0{0,3}(?:[1-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]))?$"}},"required":["key","value"],"additionalProperties":false},{"type":"object","properties":{"key":{"type":"string","enum":["action"]},"value":{"type":"string","enum":["back","home","recents","notifications","quick_settings","escape","scroll_top","scroll_bottom","lock_screen"]}},"required":["key","value"],"additionalProperties":false},{"type":"object","properties":{"key":{"type":"string","enum":["action"]},"value":{"type":"string","enum":["play","pause","play_pause","stop","next","previous"]}},"required":["key","value"],"additionalProperties":false},{"type":"object","properties":{"key":{"type":"string","enum":["mode"]},"value":{"type":"string","enum":["once","pattern"]}},"required":["key","value"],"additionalProperties":false},{"type":"object","properties":{"key":{"type":"string","enum":["duration"]},"value":{"type":"string","pattern":"^(?:[1-9][0-9]{0,3}|[1-5][0-9]{4}|60000)$"}},"required":["key","value"],"additionalProperties":false},{"type":"object","properties":{"key":{"type":"string","enum":["pattern"]},"value":{"type":"string","pattern":"^(?:(?:[1-9][0-9]{0,3}|[1-5][0-9]{4}|60000))(?:,(?:[1-9][0-9]{0,3}|[1-5][0-9]{4}|60000)){0,63}$"}},"required":["key","value"],"additionalProperties":false},{"type":"object","properties":{"key":{"type":"string","enum":["strength"]},"value":{"type":"string","enum":["0","1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24","25","26","27","28","29","30","31","32","33","34","35","36","37","38","39","40","41","42","43","44","45","46","47","48","49","50","51","52","53","54","55","56","57","58","59","60","61","62","63","64","65","66","67","68","69","70","71","72","73","74","75","76","77","78","79","80","81","82","83","84","85","86","87","88","89","90","91","92","93","94","95","96","97","98","99","100"]}},"required":["key","value"],"additionalProperties":false},{"type":"object","properties":{"key":{"type":"string","enum":["state"]},"value":{"type":"string","enum":["off","on"]}},"required":["key","value"],"additionalProperties":false}]},"number":{"type":"number"},"readerCanonicalVariableName":{"type":"string","pattern":"^[a-z](?:[1-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$"},"readerMaxCharactersToken":{"oneOf":[{"type":"string","pattern":"^(?:[1-9][0-9]{0,3}|10000)$"},{"type":"string","pattern":"^[A-Za-z](?:0{0,3}(?:[1-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]))?$"}]},"readerPercentToken":{"oneOf":[{"type":"string","pattern":"^(?:[5-9][0-9]|1[0-9]{2}|200)$"},{"type":"string","pattern":"^[A-Za-z](?:0{0,3}(?:[1-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]))?$"}]},"readerAlarmPercent":{"type":"string","pattern":"^(?:[1-9]|[1-9][0-9]|100)$"}},"fieldDefinitions":{"id":{"$ref":"nonEmptyString"},"type":{"$ref":"string"},"nickname":{"$ref":"string"},"disabled":{"$ref":"boolean"},"tapXValue":{"$ref":"string"},"tapYValue":{"$ref":"string"},"clickRepeatEnabled":{"$ref":"boolean"},"clickRepeatValue":{"$ref":"string"},"clickRepeatSequential":{"$ref":"boolean"},"clickTapDelayValue":{"$ref":"string"},"tapPressDurationValue":{"$ref":"string"},"useVariableArray":{"$ref":"boolean"},"inArea":{"$ref":"boolean"},"areaLeftValue":{"$ref":"string"},"areaTopValue":{"$ref":"string"},"areaRightValue":{"$ref":"string"},"areaBottomValue":{"$ref":"string"},"xVariableName":{"$ref":"string"},"yVariableName":{"$ref":"string"},"delayMs":{"oneOf":[{"$ref":"nonNegativeInteger"},{"type":"integer","minimum":-1,"maximum":-1}]},"delayVariableName":{"$ref":"string"},"delayUntilHourValue":{"$ref":"string"},"delayUntilMinuteValue":{"$ref":"string"},"delayUntilSecondValue":{"$ref":"string"},"delayUntilUseDate":{"$ref":"boolean"},"delayUntilMonthValue":{"$ref":"string"},"delayUntilDayValue":{"$ref":"string"},"delayUntilYearValue":{"$ref":"string"},"delayUntilMode":{"type":"string","enum":["time","image","ui_element","pixel","active_app","variable"]},"delayUntilLeftValue":{"$ref":"string"},"delayUntilTopValue":{"$ref":"string"},"delayUntilRightValue":{"$ref":"string"},"delayUntilBottomValue":{"$ref":"string"},"delayUntilCheckEveryValue":{"$ref":"string"},"assetNames":{"$ref":"stringArray"},"uiFindQuery":{"$ref":"string"},"uiFindTarget":{"type":"string","enum":["any","text","content_description","view_id","class_name"]},"uiFindMatchMode":{"type":"string","enum":["exact","contains","regex"]},"uiFindNthValue":{"$ref":"string"},"uiFindEnabledOnly":{"$ref":"boolean"},"uiFindClickableOnly":{"$ref":"boolean"},"uiFindVisibleOnly":{"$ref":"boolean"},"uiFindPackageFilter":{"$ref":"string"},"variableValue":{"$ref":"string"},"confidencePercentValue":{"$ref":"string"},"devicePackageName":{"$ref":"string"},"deviceAppLabel":{"$ref":"string"},"variableType":{"type":"string","enum":["integer","decimal","boolean","hex","string","time"]},"variableName":{"$ref":"string"},"variableComparator":{"type":"string","enum":[">",">=","=","<","<=","<>","between","contains"]},"retapUseTimeout":{"$ref":"boolean"},"retapMode":{"type":"string","enum":["repeat","set_coordinates"]},"retapCoordinateTimeoutValue":{"$ref":"string"},"retapRepeatsValue":{"$ref":"string"},"retapDelayMsValue":{"$ref":"string"},"retapTimeoutMsValue":{"$ref":"string"},"variableShared":{"$ref":"boolean"},"multiClicks":{"type":"array","items":{"$ref":"multiClickRow"},"maxItems":10},"swipeMode":{"type":"string","enum":["exact","quick"]},"gestureStrokes":{"type":"array","items":{"$ref":"gestureStroke"}},"gestureLanes":{"type":"array","items":{"$ref":"gestureLane"},"maxItems":20,"ascendingUniqueIntegerProperty":"lane","maximumNestedArrayItems":{"property":"rows","maximum":4096}},"gestureConcurrent":{"$ref":"boolean"},"swipeActionMode":{"type":"string","enum":["swipe","drag"]},"swipePressDurationValue":{"$ref":"string"},"touchXValue":{"$ref":"string"},"touchYValue":{"$ref":"string"},"touchMoveTimeMsValue":{"$ref":"string"},"assetName":{"$ref":"string"},"multiAsset":{"$ref":"boolean"},"useNegativeAssets":{"$ref":"boolean"},"negativeAssetNames":{"$ref":"stringArray"},"imgFindNegativeConfidencePercentValue":{"$ref":"string"},"imgFindOutputMode":{"type":"string","enum":["standard","classify","boolean_array"]},"imgFindClassifyOutputStateVariable":{"$ref":"string"},"imgFindClassifyOutputIndexVariable":{"$ref":"string"},"imgFindClassifyOutputFoundVariable":{"$ref":"string"},"imgFindClassifyOutputXVariable":{"$ref":"string"},"imgFindClassifyOutputYVariable":{"$ref":"string"},"imgFindClassifyOutputConfidenceVariable":{"$ref":"string"},"imgFindBooleanArrayName":{"$ref":"string"},"imgFindMaxResultsValue":{"$ref":"imgFindMaxResultsValue"},"leftValue":{"$ref":"string"},"topValue":{"$ref":"string"},"rightValue":{"$ref":"string"},"bottomValue":{"$ref":"string"},"findAll":{"$ref":"boolean"},"setVariables":{"$ref":"boolean"},"returnXY":{"$ref":"boolean"},"clickIfFound":{"$ref":"boolean"},"clickTargetCenter":{"$ref":"boolean"},"clickTargetXValue":{"$ref":"string"},"clickTargetYValue":{"$ref":"string"},"useCountOutput":{"$ref":"boolean"},"outputCountVariableName":{"$ref":"string"},"findFirstRightToLeft":{"$ref":"boolean"},"findFirstBottomToTop":{"$ref":"boolean"},"uiFindTapMode":{"type":"string","enum":["node_click","screen_tap"]},"uiFindSetMatchedText":{"$ref":"boolean"},"uiFindMatchedTextVariableName":{"$ref":"string"},"ocrMode":{"type":"string","enum":["find","read"]},"ocrLeftValue":{"$ref":"string"},"ocrTopValue":{"$ref":"string"},"ocrRightValue":{"$ref":"string"},"ocrBottomValue":{"$ref":"string"},"ocrQuerySourceMode":{"type":"string","enum":["literal","variable"]},"ocrQueryValue":{"$ref":"string"},"ocrQueryVariableName":{"$ref":"string"},"ocrMatchMode":{"type":"string","enum":["exact","contains","regex"]},"ocrCaseSensitive":{"$ref":"boolean"},"ocrTextUnit":{"type":"string","enum":["line","word"]},"ocrTextScript":{"type":"string","enum":["latin","chinese","devanagari","japanese","korean"]},"ocrMatchIndexValue":{"$ref":"string"},"ocrTapIfFound":{"$ref":"boolean"},"ocrSaveFound":{"$ref":"boolean"},"ocrFoundVariableName":{"$ref":"string"},"ocrSaveText":{"$ref":"boolean"},"ocrTextVariableName":{"$ref":"string"},"ocrSaveX":{"$ref":"boolean"},"ocrXVariableName":{"$ref":"string"},"ocrSaveY":{"$ref":"boolean"},"ocrYVariableName":{"$ref":"string"},"ocrSaveError":{"$ref":"boolean"},"ocrErrorVariableName":{"$ref":"string"},"ocrReadOutputVariableName":{"$ref":"string"},"ocrReadSaveSuccess":{"$ref":"boolean"},"ocrReadSuccessVariableName":{"$ref":"string"},"ocrReadSaveError":{"$ref":"boolean"},"ocrReadErrorVariableName":{"$ref":"string"},"smartTapAssets":{"type":"array","maxItems":10,"items":{"$ref":"smartTapAssetRow"}},"smartTapTriggerMode":{"type":"string","enum":["switch_only","first_seen","every_change","every_match"]},"smartTapTapMode":{"type":"string","enum":["matched_center","fixed"]},"smartTapTapX":{"$ref":"string"},"smartTapTapY":{"$ref":"string"},"smartTapUseNegativeAssets":{"$ref":"boolean"},"smartTapNegativeAssetNames":{"type":"array","maxItems":10,"items":{"$ref":"string"}},"smartTapOutputChangedVariable":{"$ref":"string"},"smartTapOutputXVariable":{"$ref":"string"},"smartTapOutputYVariable":{"$ref":"string"},"labelName":{"$ref":"string"},"loopInfinite":{"$ref":"boolean"},"loopConcurrent":{"$ref":"boolean"},"loopDelayMsValue":{"$ref":"string"},"loopTimesValue":{"$ref":"string"},"targetMacroId":{"$ref":"string"},"targetMacroIds":{"$ref":"stringArray"},"variableLetter":{"$ref":"string"},"variableArraySizeValue":{"$ref":"string"},"setVariableMode":{"type":"string","enum":["single","array"]},"setVariableTimeFormat":{"type":"string","enum":["am_pm","unix"]},"setVariableTimeSource":{"type":"string","enum":["manual","current"]},"setVariableFromClipboard":{"$ref":"boolean"},"setCoordinatesMode":{"type":"string","enum":["point","area"]},"setCoordinatesPointX":{"$ref":"string"},"setCoordinatesPointY":{"$ref":"string"},"setCoordinatesAreaLeft":{"$ref":"string"},"setCoordinatesAreaTop":{"$ref":"string"},"setCoordinatesAreaRight":{"$ref":"string"},"setCoordinatesAreaBottom":{"$ref":"string"},"setCoordinatesPointXVariableName":{"$ref":"string"},"setCoordinatesPointYVariableName":{"$ref":"string"},"setCoordinatesAreaLeftVariableName":{"$ref":"string"},"setCoordinatesAreaTopVariableName":{"$ref":"string"},"setCoordinatesAreaRightVariableName":{"$ref":"string"},"setCoordinatesAreaBottomVariableName":{"$ref":"string"},"modTargetVariableName":{"$ref":"string"},"modLeftValue":{"$ref":"string"},"modOperator":{"type":"string","enum":["+","-","*","/"]},"modRightValue":{"$ref":"string"},"modUseHex":{"$ref":"boolean"},"modResultType":{"type":"string","enum":["integer","decimal"]},"modMode":{"type":"string","enum":["basic","expression","array"]},"modExpression":{"$ref":"string"},"modArrayTargetLetter":{"$ref":"string"},"modArrayTargetStartIndexValue":{"$ref":"string"},"modArrayCountValue":{"$ref":"string"},"modArrayInputAArrayLetter":{"$ref":"string"},"modArrayInputAStartIndexValue":{"$ref":"string"},"modArrayInputBArrayLetter":{"$ref":"string"},"modArrayInputBStartIndexValue":{"$ref":"string"},"modArrayInputCArrayLetter":{"$ref":"string"},"modArrayInputCStartIndexValue":{"$ref":"string"},"promptHeader":{"type":"string","maxLength":8},"promptUseButtons":{"$ref":"boolean"},"promptButtons":{"type":"array","items":{"$ref":"promptButtonRow"},"maxItems":6},"promptUseTogglesText":{"$ref":"boolean"},"promptUseToggles":{"$ref":"boolean"},"promptToggles":{"type":"array","items":{"$ref":"promptToggleRow"},"maxItems":6},"promptUseText":{"$ref":"boolean"},"promptTextVariableName":{"$ref":"string"},"promptTextCaption":{"type":"string","maxLength":17},"promptTextType":{"type":"string","enum":["string","integer","decimal"]},"promptMode":{"type":"string","enum":["standard","mini"]},"promptMiniControlMode":{"type":"string","enum":["buttons","toggles"]},"promptMiniPersistent":{"$ref":"boolean"},"promptMiniHeaderEnabled":{"$ref":"boolean"},"promptMiniTitle":{"type":"string","maxLength":8},"promptMiniRedXStopsScript":{"$ref":"boolean"},"promptMiniSizeMode":{"type":"string","enum":["default","manual"]},"promptMiniConfiguredWidthDp":{"type":"integer","minimum":96,"maximum":420},"promptMiniConfiguredHeightDp":{"type":"integer","minimum":72,"maximum":420},"promptMiniButtonVariableName":{"$ref":"string"},"promptMiniButtons":{"type":"array","items":{"$ref":"promptMiniButtonRow"},"maxItems":6},"promptMiniToggles":{"type":"array","items":{"$ref":"promptMiniToggleRow"},"maxItems":6},"colorClassifyMode":{"type":"string","enum":["single","array"]},"sourceVariableName":{"$ref":"string"},"sourceArrayLetter":{"$ref":"string"},"sourceArrayStartIndexValue":{"$ref":"string"},"sourceArrayCountValue":{"$ref":"string"},"outputType":{"type":"string","enum":["integer","decimal","boolean","hex","string","time"]},"outputVariableName":{"$ref":"string"},"noMatchValue":{"$ref":"string"},"targets":{"type":"array","items":{"$ref":"colorTargetRow"},"maxItems":16},"targetSourceMode":{"type":"string","enum":["rows","hex_array"]},"targetArrayLetter":{"$ref":"string"},"targetArrayStartIndexValue":{"$ref":"string"},"targetArrayCountValue":{"$ref":"string"},"arrayLetter":{"$ref":"string"},"indexValue":{"$ref":"string"},"valueSourceMode":{"type":"string","enum":["literal","variable"]},"literalValue":{"$ref":"string"},"arraySetMode":{"type":"string","enum":["single","bulk","fill_range","sequence"]},"bulkEntries":{"type":"array","maxItems":255,"items":{"$ref":"bulkEntryRow"}},"startIndexValue":{"$ref":"string"},"lengthValue":{"$ref":"string"},"startValue":{"$ref":"string"},"stepValue":{"$ref":"string"},"indexVariableName":{"$ref":"string"},"endValue":{"$ref":"string"},"forEachUseStopVariable":{"$ref":"boolean"},"stopVariableName":{"$ref":"string"},"valueType":{"type":"string","enum":["integer","decimal","boolean","hex","string","time"]},"scanDirection":{"type":"string","enum":["forward","reverse"]},"scanMode":{"type":"string","enum":["first_non_empty","first_empty","first_equal","count_equal","count_non_empty","run_equal","run_boundary","aggregate"]},"emptyValue":{"$ref":"string"},"matchValueSourceMode":{"type":"string","enum":["none","literal","variable"]},"matchValue":{"$ref":"string"},"useFoundOutput":{"$ref":"boolean"},"outputFoundVariableName":{"$ref":"string"},"useIndexOutput":{"$ref":"boolean"},"outputIndexVariableName":{"$ref":"string"},"useValueOutput":{"$ref":"boolean"},"outputValueVariableName":{"$ref":"string"},"useAddedCountOutput":{"$ref":"boolean"},"outputAddedCountVariableName":{"$ref":"string"},"points":{"type":"array","items":{"$ref":"pointRow"}},"xArrayLetter":{"$ref":"string"},"yArrayLetter":{"$ref":"string"},"countVariableName":{"$ref":"string"},"maxCountValue":{"$ref":"string"},"useSuccessOutput":{"$ref":"boolean"},"outputSuccessVariableName":{"$ref":"string"},"appendPointsMode":{"type":"string","enum":["rows","grid"]},"appendPointsRowsValue":{"$ref":"string"},"appendPointsColumnsValue":{"$ref":"string"},"appendPointsLeftValue":{"$ref":"string"},"appendPointsTopValue":{"$ref":"string"},"appendPointsXPitchValue":{"$ref":"string"},"appendPointsYPitchValue":{"$ref":"string"},"appendPointsXOffsetValue":{"$ref":"string"},"appendPointsYOffsetValue":{"$ref":"string"},"appendPointsOrder":{"type":"string","enum":["row_major","column_major"]},"textValue":{"$ref":"string"},"textUseVariable":{"$ref":"boolean"},"pixelXValue":{"$ref":"string"},"pixelYValue":{"$ref":"string"},"pixelSampleSourceMode":{"type":"string","enum":["points","arrays"]},"pixelIgnoreRadius":{"$ref":"pixelFindIgnoreRadius"},"pixelFindMidpoints":{"$ref":"boolean"},"pixelFindUseConfidence":{"$ref":"boolean"},"pixelFindMaxResultsValue":{"$ref":"pixelFindMaxResultsValue"},"pixelColors":{"$ref":"pixelFindColors"},"visualStableFramesValue":{"$ref":"string"},"visualTimeoutMsValue":{"$ref":"string"},"visualCooldownMsValue":{"$ref":"string"},"visualActionMode":{"type":"string","enum":["tap_fixed","tap_trigger_slot_1"]},"visualTapX":{"$ref":"string"},"visualTapY":{"$ref":"string"},"visualTapDelayMsValue":{"$ref":"string"},"visualTriggerCombineMode":{"type":"string","enum":["any","all","exactly_one"]},"visualTriggerSlots":{"type":"array","items":{"$ref":"visualTriggerSlot"},"minItems":3,"maxItems":3},"screenshotUseArea":{"$ref":"boolean"},"deviceSettingsFrames":{"type":"array","maxItems":10,"items":{"$ref":"deviceSettingsFrame"}},"deviceSettingsFacts":{"type":"array","maxItems":15,"items":{"$ref":"deviceSettingsFact"}},"stateGetFrames":{"type":"array","items":{"$ref":"stateGetFrame"}},"stateGetOutputs":{"type":"array","items":{"$ref":"stateGetOutput"}},"stateGetSampleTimeMsValue":{"$ref":"exactTrimmedNonEmptyString"},"useActionMode":{"oneOf":[{"type":"string","maxLength":0},{"type":"string","enum":["open_app","view_uri","map_uri","app_details","email","sms","dial","share_text","navigation","alert","media_control","vibrate","keep_awake"]}]},"useActionFacts":{"type":"array","items":{"$ref":"useActionFact"},"maxItems":18},"deviceIntentMode":{"type":"string","enum":["view_uri","map_uri","settings","app_details","email","sms","dial","share_text"]},"deviceIntentUri":{"$ref":"string"},"deviceIntentSettingsAction":{"type":"string","enum":["main","display","sound","notifications","accessibility","applications","location","date_time","input_method","language","battery_saver"]},"deviceIntentEmailTo":{"$ref":"string"},"deviceIntentSubject":{"$ref":"string"},"deviceIntentBody":{"$ref":"string"},"deviceIntentPhoneNumber":{"$ref":"string"},"deviceIntentSmsBody":{"$ref":"string"},"deviceIntentShareText":{"$ref":"string"},"deviceSystemNavAction":{"type":"string","enum":["back","home","recents","notifications","quick_settings","escape","scroll_top","scroll_bottom"]},"httpMethod":{"type":"string","enum":["get","post","put","patch","delete"]},"httpUrlSourceMode":{"type":"string","enum":["literal","variable"]},"httpUrlValue":{"$ref":"string"},"httpUrlVariableName":{"$ref":"string"},"httpHeaders":{"type":"array","items":{"$ref":"httpHeaderRow"}},"httpBodySourceMode":{"type":"string","enum":["literal","variable"]},"httpBodyValue":{"$ref":"string"},"httpBodyVariableName":{"$ref":"string"},"httpTimeoutMsValue":{"type":"string","pattern":"^(?:[1-9][0-9]{3}|[1-5][0-9]{4}|60000)$"},"httpSaveSuccess":{"$ref":"boolean"},"httpSuccessVariableName":{"$ref":"string"},"httpSaveStatus":{"$ref":"boolean"},"httpStatusVariableName":{"$ref":"string"},"httpSaveBody":{"$ref":"boolean"},"httpBodyOutputVariableName":{"$ref":"string"},"httpSaveError":{"$ref":"boolean"},"httpErrorVariableName":{"$ref":"string"},"clipboardMode":{"type":"string","enum":["get","set"]},"clipboardOutputVariableName":{"$ref":"string"},"clipboardTextSourceMode":{"type":"string","enum":["literal","variable"]},"clipboardTextValue":{"$ref":"string"},"clipboardTextVariableName":{"$ref":"string"},"clipboardSaveSuccess":{"$ref":"boolean"},"clipboardSuccessVariableName":{"$ref":"string"},"clipboardSaveError":{"$ref":"boolean"},"clipboardErrorVariableName":{"$ref":"string"},"textTransformSpec":{"type":"object","properties":{"textTransformOperation":{"type":"string","enum":["contains","extract","replace","split","join","trim","case","parse_int","parse_decimal","find_all"]},"textInputSourceMode":{"type":"string","enum":["literal","variable"]},"textInputValue":{"$ref":"string"},"textInputVariableName":{"$ref":"string"},"textSaveSuccess":{"$ref":"boolean"},"textSuccessVariableName":{"$ref":"string"},"textSaveError":{"$ref":"boolean"},"textErrorVariableName":{"$ref":"string"},"textFindSourceMode":{"type":"string","enum":["literal","variable"]},"textFindValue":{"$ref":"string"},"textFindVariableName":{"$ref":"string"},"textCaseSensitive":{"$ref":"boolean"},"textContainsOutputVariableName":{"$ref":"string"},"textRegexPatternSourceMode":{"type":"string","enum":["literal","variable"]},"textRegexPatternValue":{"$ref":"string"},"textRegexPatternVariableName":{"$ref":"string"},"textRegexGroupValue":{"$ref":"string"},"textAllowNoMatch":{"$ref":"boolean"},"textExtractOutputVariableName":{"$ref":"string"},"textReplaceFindMode":{"type":"string","enum":["literal","exact","contains","regex"]},"textReplaceFindSourceMode":{"type":"string","enum":["literal","variable"]},"textReplaceFindValue":{"$ref":"string"},"textReplaceFindVariableName":{"$ref":"string"},"textReplaceValueSourceMode":{"type":"string","enum":["literal","variable"]},"textReplaceValue":{"$ref":"string"},"textReplaceVariableName":{"$ref":"string"},"textReplaceAll":{"$ref":"boolean"},"textReplaceOutputVariableName":{"$ref":"string"},"textSplitMode":{"type":"string","enum":["literal","regex"]},"textSplitDelimiterSourceMode":{"type":"string","enum":["literal","variable"]},"textSplitDelimiterValue":{"$ref":"string"},"textSplitDelimiterVariableName":{"$ref":"string"},"textSplitMaxPartsValue":{"$ref":"string"},"textSplitOutputArrayLetter":{"$ref":"string"},"textSplitOutputStartIndexValue":{"$ref":"string"},"textSplitSaveCount":{"$ref":"boolean"},"textSplitCountVariableName":{"$ref":"string"},"textJoinArrayLetter":{"$ref":"string"},"textJoinStartIndexValue":{"$ref":"string"},"textJoinCountValue":{"$ref":"string"},"textJoinDelimiterSourceMode":{"type":"string","enum":["literal","variable"]},"textJoinDelimiterValue":{"$ref":"string"},"textJoinDelimiterVariableName":{"$ref":"string"},"textJoinOutputVariableName":{"$ref":"string"},"textTrimMode":{"type":"string","enum":["both","left","right"]},"textTrimOutputVariableName":{"$ref":"string"},"textCaseMode":{"type":"string","enum":["lower","upper","whole_match","capture_group"]},"textCaseOutputVariableName":{"$ref":"string"},"textParseIntBaseValue":{"$ref":"string"},"textParseIntUseDefault":{"$ref":"boolean"},"textParseIntDefaultValue":{"$ref":"string"},"textParseIntOutputVariableName":{"$ref":"string"},"textParseDecimalOutputVariableName":{"$ref":"string"}},"required":["textTransformOperation","textInputSourceMode","textInputValue","textInputVariableName","textSaveSuccess","textSuccessVariableName","textSaveError","textErrorVariableName","textFindSourceMode","textFindValue","textFindVariableName","textCaseSensitive","textContainsOutputVariableName","textRegexPatternSourceMode","textRegexPatternValue","textRegexPatternVariableName","textRegexGroupValue","textAllowNoMatch","textExtractOutputVariableName","textReplaceFindMode","textReplaceFindSourceMode","textReplaceFindValue","textReplaceFindVariableName","textReplaceValueSourceMode","textReplaceValue","textReplaceVariableName","textReplaceAll","textReplaceOutputVariableName","textSplitMode","textSplitDelimiterSourceMode","textSplitDelimiterValue","textSplitDelimiterVariableName","textSplitMaxPartsValue","textSplitOutputArrayLetter","textSplitOutputStartIndexValue","textSplitSaveCount","textSplitCountVariableName","textJoinArrayLetter","textJoinStartIndexValue","textJoinCountValue","textJoinDelimiterSourceMode","textJoinDelimiterValue","textJoinDelimiterVariableName","textJoinOutputVariableName","textTrimMode","textTrimOutputVariableName","textCaseMode","textCaseOutputVariableName","textParseIntBaseValue","textParseIntUseDefault","textParseIntDefaultValue","textParseIntOutputVariableName","textParseDecimalOutputVariableName"],"conditionalRules":[{"when":{"textTransformOperation":"find_all"},"fields":{"textReplaceFindMode":{"schema":{"type":"string","enum":["exact","contains","regex"]}},"textCaseMode":{"schema":{"type":"string","enum":["whole_match","capture_group"]}},"textSplitOutputArrayLetter":{"tokenBounds":{"kind":"action_array","allowBlank":true}},"textSplitOutputStartIndexValue":{"tokenBounds":{"kind":"positive_integer_or_variable","minimum":1,"maximum":4096,"allowBlank":true}},"textSplitMaxPartsValue":{"tokenBounds":{"kind":"non_negative_integer_or_variable","minimum":0,"maximum":4096,"allowBlank":true}}}},{"when":{"textTransformOperation":"find_all","textReplaceFindMode":"exact"},"fields":{"textCaseMode":{"schema":{"type":"string","enum":["whole_match"]}}}},{"when":{"textTransformOperation":"find_all","textReplaceFindMode":"contains"},"fields":{"textCaseMode":{"schema":{"type":"string","enum":["whole_match"]}}}},{"when":{"textTransformOperation":"find_all","textReplaceFindMode":"regex","textCaseMode":"capture_group"},"fields":{"textRegexGroupValue":{"tokenBounds":{"kind":"positive_integer_or_variable","minimum":1,"maximum":2147483647,"allowBlank":true}}}},{"when":{"textTransformOperation":"find_all","textSplitSaveCount":"true"},"fields":{"textSplitCountVariableName":{"tokenBounds":{"kind":"variable_name","allowBlank":true}}}},{"when":{"textTransformOperation":"replace"},"fields":{"textReplaceFindMode":{"schema":{"type":"string","enum":["literal","regex"]}}}},{"when":{"textTransformOperation":"case"},"fields":{"textCaseMode":{"schema":{"type":"string","enum":["lower","upper"]}}}},{"when":{"textTransformOperation":"split"},"fields":{"textSplitMaxPartsValue":{"tokenBounds":{"kind":"positive_integer_or_variable","minimum":1,"maximum":4096,"allowBlank":false}},"textSplitOutputStartIndexValue":{"tokenBounds":{"kind":"positive_integer_or_variable","minimum":1,"maximum":4096,"allowBlank":false}}}},{"when":{"textTransformOperation":"join"},"fields":{"textJoinStartIndexValue":{"tokenBounds":{"kind":"positive_integer_or_variable","minimum":1,"maximum":4096,"allowBlank":false}},"textJoinCountValue":{"tokenBounds":{"kind":"positive_integer_or_variable","minimum":1,"maximum":4096,"allowBlank":false}}}},{"when":{"textTransformOperation":"parse_int"},"fields":{"textParseIntBaseValue":{"tokenBounds":{"kind":"positive_integer_or_variable","minimum":2,"maximum":36,"allowBlank":false}}}}],"additionalProperties":false},"jsonSpec":{"type":"object","properties":{"jsonMode":{"type":"string","enum":["extract","exists","length","stringify"]},"jsonInputVariableName":{"$ref":"string"},"jsonPathSourceMode":{"type":"string","enum":["literal","variable"]},"jsonPathValue":{"$ref":"string"},"jsonPathVariableName":{"$ref":"string"},"jsonSaveSuccess":{"$ref":"boolean"},"jsonSuccessVariableName":{"$ref":"string"},"jsonSaveError":{"$ref":"boolean"},"jsonErrorVariableName":{"$ref":"string"},"jsonExtractOutputType":{"type":"string","enum":["string","integer","decimal","boolean","string_array","json_text"]},"jsonExtractStringVariableName":{"$ref":"string"},"jsonExtractIntegerVariableName":{"$ref":"string"},"jsonExtractDecimalVariableName":{"$ref":"string"},"jsonExtractBooleanVariableName":{"$ref":"string"},"jsonExtractArrayLetter":{"$ref":"string"},"jsonExtractArrayStartIndexValue":{"$ref":"string"},"jsonExtractSaveCount":{"$ref":"boolean"},"jsonExtractCountVariableName":{"$ref":"string"},"jsonExtractJsonTextVariableName":{"$ref":"string"},"jsonExistsOutputVariableName":{"$ref":"string"},"jsonLengthOutputVariableName":{"$ref":"string"},"jsonStringifyFormat":{"type":"string","enum":["compact","pretty"]},"jsonStringifyOutputVariableName":{"$ref":"string"}},"required":["jsonMode","jsonInputVariableName","jsonPathSourceMode","jsonPathValue","jsonPathVariableName","jsonSaveSuccess","jsonSuccessVariableName","jsonSaveError","jsonErrorVariableName","jsonExtractOutputType","jsonExtractStringVariableName","jsonExtractIntegerVariableName","jsonExtractDecimalVariableName","jsonExtractBooleanVariableName","jsonExtractArrayLetter","jsonExtractArrayStartIndexValue","jsonExtractSaveCount","jsonExtractCountVariableName","jsonExtractJsonTextVariableName","jsonExistsOutputVariableName","jsonLengthOutputVariableName","jsonStringifyFormat","jsonStringifyOutputVariableName"],"additionalProperties":false},"translateSourceVariableName":{"$ref":"string"},"translateTargetVariableName":{"$ref":"string"},"translateSourceLanguageTag":{"$ref":"string"},"translateTargetLanguageTag":{"$ref":"string"},"fileMode":{"type":"string","enum":["read","create","append"]},"fileFormat":{"type":"string","enum":["text","csv","json"]},"fileUri":{"$ref":"string"},"fileDisplayName":{"$ref":"string"},"fileMimeType":{"$ref":"string"},"fileHasReadAccess":{"$ref":"boolean"},"fileHasWriteAccess":{"$ref":"boolean"},"fileSaveSuccess":{"$ref":"boolean"},"fileSuccessVariableName":{"$ref":"string"},"fileSaveError":{"$ref":"boolean"},"fileErrorVariableName":{"$ref":"string"},"fileReadTextOutputVariableName":{"$ref":"string"},"fileCsvReadMode":{"type":"string","enum":["cell","row","column"]},"fileCsvRowValue":{"$ref":"positiveInt32OrIntegerVariableToken"},"fileCsvColumnSourceMode":{"type":"string","enum":["number","header"]},"fileCsvColumnValue":{"$ref":"positiveInt32OrIntegerVariableToken"},"fileCsvColumnHeaderName":{"$ref":"string"},"fileCsvArrayValueCount":{"$ref":"positiveInt32OrIntegerVariableToken"},"fileCsvOutputStartIndexValue":{"$ref":"positiveInt32OrIntegerVariableToken"},"fileCsvCellOutputVariableName":{"$ref":"string"},"fileCsvArrayOutputLetter":{"$ref":"string"},"fileAppendTextSourceMode":{"type":"string","enum":["literal","variable"]},"fileAppendTextValue":{"$ref":"string"},"fileAppendTextVariableName":{"$ref":"string"},"fileAppendNewline":{"$ref":"boolean"},"fileAppendCsvSourceMode":{"type":"string","enum":["literal","variable"]},"fileAppendCsvRowValue":{"$ref":"string"},"fileAppendCsvRowVariableName":{"$ref":"string"},"fileAppendCsvEnsureNewRow":{"$ref":"boolean"},"fileCreateNameSourceMode":{"type":"string","enum":["literal","variable"]},"fileCreateNameValue":{"$ref":"string"},"fileCreateNameVariableName":{"$ref":"string"},"fileCreateTextSourceMode":{"type":"string","enum":["literal","variable"]},"fileCreateTextValue":{"$ref":"string"},"fileCreateTextVariableName":{"$ref":"string"},"fileCreateCsvSourceMode":{"type":"string","enum":["csv_text","array_row"]},"fileCreateCsvTextValue":{"$ref":"string"},"fileCreateCsvArrayLetter":{"$ref":"string"},"fileCreateCsvArrayStartIndexValue":{"$ref":"positiveInt32OrIntegerVariableToken"},"fileCreateCsvArrayValueCount":{"$ref":"positiveInt32OrIntegerVariableToken"},"fileCreateJsonSourceMode":{"type":"string","enum":["literal","variable"]},"fileCreateJsonValue":{"$ref":"string"},"fileCreateJsonVariableName":{"$ref":"string"},"fileCreateIfExistsMode":{"type":"string","enum":["overwrite","new_name"]},"fileCreateNewNameMode":{"type":"string","enum":["timestamp","number"]},"fileSaveFinalName":{"$ref":"boolean"},"fileFinalNameVariableName":{"$ref":"string"},"fileSaveFinalUri":{"$ref":"boolean"},"fileFinalUriVariableName":{"$ref":"string"},"alertMode":{"oneOf":[{"type":"string","maxLength":0},{"type":"string","enum":["play","stop"]}]},"alertSourceType":{"oneOf":[{"type":"string","maxLength":0},{"type":"string","enum":["file","ringtone"]}]},"alertFileUri":{"$ref":"string"},"alertFileDisplayName":{"$ref":"string"},"alertFileMimeType":{"$ref":"string"},"alertFileHasReadAccess":{"$ref":"boolean"},"alertRingtoneUri":{"$ref":"string"},"alertRingtoneLabel":{"$ref":"string"},"alertPlayMode":{"oneOf":[{"type":"string","maxLength":0},{"type":"string","enum":["once","loop"]}]},"alertLoopTimeoutMsValue":{"type":"string","pattern":"^(?:|0|[1-9][0-9]{0,4}|1[0-7][0-9]{4}|180000|(?=.{1,5}$)[A-Za-z](?:0{0,3}(?:[1-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]))?)$"},"alertSoundExecution":{"oneOf":[{"type":"string","maxLength":0},{"type":"string","enum":["concurrent","wait"]}]},"alertVolumeMode":{"oneOf":[{"type":"string","maxLength":0},{"type":"string","enum":["keep","set"]}]},"alertVolumePercentValue":{"type":"string","pattern":"^(?:|0|[1-9][0-9]?|100|(?=.{1,5}$)[A-Za-z](?:0{0,3}(?:[1-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]))?)$"},"alertRestoreVolume":{"$ref":"boolean"},"alertSaveSuccess":{"$ref":"boolean"},"alertSuccessVariableName":{"$ref":"string"},"alertSaveError":{"$ref":"boolean"},"alertErrorVariableName":{"$ref":"string"},"readerSpec":{"type":"object","properties":{"readerMode":{"type":"string","enum":["speakText","readUI","readOCR","stop"]},"readerTextSourceMode":{"type":"string","enum":["literal","variable"]},"readerTextValue":{"$ref":"string"},"readerTextVariableName":{"$ref":"string"},"readerUseArea":{"$ref":"boolean"},"readerLeftValue":{"$ref":"incompleteNonNegativeInt32OrIntegerVariableToken"},"readerTopValue":{"$ref":"incompleteNonNegativeInt32OrIntegerVariableToken"},"readerRightValue":{"$ref":"incompleteNonNegativeInt32OrIntegerVariableToken"},"readerBottomValue":{"$ref":"incompleteNonNegativeInt32OrIntegerVariableToken"},"readerUiReadMode":{"type":"string","enum":["text","content_description","both"]},"readerMaxCharactersValue":{"$ref":"readerMaxCharactersToken"},"readerStopIfAppChanges":{"$ref":"boolean"},"readerSpeechExecution":{"type":"string","enum":["concurrent","wait"]},"readerVoiceMode":{"type":"string","enum":["default","select"]},"readerTtsEngine":{"$ref":"string"},"readerTtsVoice":{"$ref":"string"},"readerTtsLanguage":{"$ref":"string"},"readerSpeechRatePercentValue":{"$ref":"readerPercentToken"},"readerPitchPercentValue":{"$ref":"readerPercentToken"},"readerExclusiveListeningEnabled":{"$ref":"boolean"},"readerExclusiveListeningAlarmVolumePercentValue":{"$ref":"readerAlarmPercent"},"readerSaveText":{"$ref":"boolean"},"readerTextOutputVariableName":{"$ref":"string"},"readerSaveSuccess":{"$ref":"boolean"},"readerSuccessVariableName":{"$ref":"string"},"readerSaveError":{"$ref":"boolean"},"readerErrorVariableName":{"$ref":"string"}},"required":["readerMode","readerTextSourceMode","readerTextValue","readerTextVariableName","readerUseArea","readerLeftValue","readerTopValue","readerRightValue","readerBottomValue","readerUiReadMode","readerMaxCharactersValue","readerStopIfAppChanges","readerSpeechExecution","readerVoiceMode","readerTtsEngine","readerTtsVoice","readerTtsLanguage","readerSpeechRatePercentValue","readerPitchPercentValue","readerExclusiveListeningEnabled","readerExclusiveListeningAlarmVolumePercentValue","readerSaveText","readerTextOutputVariableName","readerSaveSuccess","readerSuccessVariableName","readerSaveError","readerErrorVariableName"],"conditionalRules":[{"when":{"readerMode":"speakText","readerTextSourceMode":"variable"},"fields":{"readerTextVariableName":{"schema":{"$ref":"readerCanonicalVariableName"}}}},{"when":{"readerSaveText":"true"},"fields":{"readerTextOutputVariableName":{"schema":{"$ref":"readerCanonicalVariableName"}}}},{"when":{"readerSaveSuccess":"true"},"fields":{"readerSuccessVariableName":{"schema":{"$ref":"readerCanonicalVariableName"}}}},{"when":{"readerSaveError":"true"},"fields":{"readerErrorVariableName":{"schema":{"$ref":"readerCanonicalVariableName"}}}}],"additionalProperties":false},"displaySpec":{"type":"object","properties":{"displayMode":{"type":"string","enum":["once_text","concurrent_text"]},"displaySourceMode":{"type":"string","enum":["literal","variable"]},"displayTextValue":{"$ref":"string"},"displayVariableName":{"$ref":"string"},"displayLeftValue":{"$ref":"nonNegativeInt32OrIntegerVariableToken"},"displayTopValue":{"$ref":"nonNegativeInt32OrIntegerVariableToken"},"displayRightValue":{"$ref":"nonNegativeInt32OrIntegerVariableToken"},"displayBottomValue":{"$ref":"nonNegativeInt32OrIntegerVariableToken"},"displayLifespanMsValue":{"$ref":"displayPositiveMillisValue"},"displayRefreshRateMsValue":{"$ref":"displayIntervalMillisValue"},"displayRollingUpdatesEnabled":{"$ref":"boolean"},"displayRollingScrollMsValue":{"$ref":"displayIntervalMillisValue"},"displayUseStopBoolean":{"$ref":"boolean"},"displayStopBooleanVariableName":{"$ref":"string"},"displayCustomFont":{"$ref":"boolean"},"displayFontFamily":{"type":"string","enum":["system","sans_serif","serif","monospace","sans_medium","readable_wide"]},"displayFontStyle":{"type":"string","enum":["regular","bold","italic","bold_italic"]},"displayFontSize":{"type":"string","enum":["xsmall","small","medium","large","xlarge"]},"displayCustomBoxStyle":{"$ref":"boolean"},"displayTextColor":{"type":"string","enum":["soft_white","white","yellow","black","cyan","green"]},"displayBackgroundColor":{"type":"string","enum":["black","white","navy","gray"]},"displayBackgroundOpacity":{"type":"string","enum":["100","85","70","50"]},"displayBorder":{"$ref":"boolean"},"displayCustomAlignment":{"$ref":"boolean"},"displayHorizontalAlignment":{"type":"string","enum":["left","center","right"]},"displayVerticalAlignment":{"type":"string","enum":["top","center","bottom"]}},"required":["displayMode","displaySourceMode","displayTextValue","displayVariableName","displayLeftValue","displayTopValue","displayRightValue","displayBottomValue","displayLifespanMsValue","displayRefreshRateMsValue","displayRollingUpdatesEnabled","displayRollingScrollMsValue","displayUseStopBoolean","displayStopBooleanVariableName","displayCustomFont","displayFontFamily","displayFontStyle","displayFontSize","displayCustomBoxStyle","displayTextColor","displayBackgroundColor","displayBackgroundOpacity","displayBorder","displayCustomAlignment","displayHorizontalAlignment","displayVerticalAlignment"],"conditionalRules":[{"when":{"displayMode":"once_text"},"fields":{"displayLifespanMsValue":{"schema":{"type":"string","pattern":"^[1-9][0-9]{0,18}$"}},"displayRollingScrollMsValue":{"schema":{"type":"string","maxLength":0}}}},{"when":{"displayMode":"concurrent_text"},"fields":{"displayRefreshRateMsValue":{"schema":{"type":"string","pattern":"^[1-9][0-9]{2,18}$"}}}},{"when":{"displaySourceMode":"variable"},"fields":{"displayVariableName":{"tokenBounds":{"kind":"variable_name","allowBlank":false}}}}],"additionalProperties":false},"deviceBrightnessPercentValue":{"$ref":"rawDevicePercent"},"deviceBrightnessAdaptive":{"$ref":"boolean"},"deviceVolumeRows":{"type":"array","maxItems":5,"items":{"type":"object","properties":{"stream":{"type":"string","enum":["call","media","system","alert","message"]},"enabled":{"$ref":"boolean"},"percent":{"$ref":"rawDevicePercent"}},"required":["stream","enabled","percent"],"additionalProperties":false}},"deviceToggleState":{"type":"string","enum":["on","off"]},"babyIfAttached":{"$ref":"boolean"},"babyIfParentId":{"$ref":"string"},"babyIfSource":{"$ref":"string"},"conditions":{"type":"array","maxItems":5,"items":{"$ref":"conditionRow"}}},"commands":[{"position":1,"type":"click","fields":[{"name":"id","required":true},{"name":"type","required":true},{"name":"nickname","required":true},{"name":"disabled","required":true},{"name":"tapXValue","required":false,"schema":{"$ref":"incompleteNonNegativeInt32OrIntegerVariableToken"}},{"name":"tapYValue","required":false,"schema":{"$ref":"incompleteNonNegativeInt32OrIntegerVariableToken"}},{"name":"clickRepeatEnabled","required":false},{"name":"clickRepeatValue","required":false},{"name":"clickRepeatSequential","required":false},{"name":"clickTapDelayValue","required":false},{"name":"tapPressDurationValue","required":false},{"name":"useVariableArray","required":false},{"name":"inArea","required":false},{"name":"areaLeftValue","required":false,"schema":{"$ref":"incompleteNonNegativeInt32OrIntegerVariableToken"}},{"name":"areaTopValue","required":false,"schema":{"$ref":"incompleteNonNegativeInt32OrIntegerVariableToken"}},{"name":"areaRightValue","required":false,"schema":{"$ref":"incompleteNonNegativeInt32OrIntegerVariableToken"}},{"name":"areaBottomValue","required":false,"schema":{"$ref":"incompleteNonNegativeInt32OrIntegerVariableToken"}},{"name":"xVariableName","required":false},{"name":"yVariableName","required":false}]},{"position":2,"type":"delay","forbiddenFieldValueCombinations":[{"delayMs":{"$ref":"uint32"},"delayVariableName":{"type":"string","minLength":1}}],"fields":[{"name":"id","required":true},{"name":"type","required":true},{"name":"nickname","required":true},{"name":"disabled","required":true},{"name":"delayMs","required":false,"schema":{"oneOf":[{"$ref":"uint32"},{"type":"integer","minimum":-1,"maximum":-1}]}},{"name":"delayVariableName","required":false,"schema":{"oneOf":[{"type":"string","maxLength":0},{"type":"string","maxLength":5,"pattern":"^[A-Za-z](?:0*(?:[1-9]|[1-9][0-9]|[1-9][0-9]{2}|[1-3][0-9]{3}|40[0-8][0-9]|409[0-6]))?$"}]}}]},{"position":3,"type":"delay_until","fields":[{"name":"id","required":true},{"name":"type","required":true},{"name":"nickname","required":true},{"name":"disabled","required":true},{"name":"delayUntilHourValue","required":false},{"name":"delayUntilMinuteValue","required":false},{"name":"delayUntilSecondValue","required":false},{"name":"delayUntilUseDate","required":false},{"name":"delayUntilMonthValue","required":false},{"name":"delayUntilDayValue","required":false},{"name":"delayUntilYearValue","required":false},{"name":"delayUntilMode","required":true},{"name":"delayUntilLeftValue","required":false},{"name":"delayUntilTopValue","required":false},{"name":"delayUntilRightValue","required":false},{"name":"delayUntilBottomValue","required":false},{"name":"delayUntilCheckEveryValue","required":false},{"name":"assetNames","required":false},{"name":"uiFindQuery","required":false},{"name":"uiFindTarget","required":false},{"name":"uiFindMatchMode","required":false},{"name":"uiFindNthValue","required":false},{"name":"uiFindEnabledOnly","required":false},{"name":"uiFindClickableOnly","required":false},{"name":"uiFindVisibleOnly","required":false},{"name":"uiFindPackageFilter","required":false},{"name":"pixelXValue","required":false},{"name":"pixelYValue","required":false},{"name":"confidencePercentValue","required":false},{"name":"devicePackageName","required":false},{"name":"deviceAppLabel","required":false},{"name":"variableName","required":false},{"name":"variableType","required":false,"schema":{"type":"string","enum":["boolean","integer","decimal","string","hex","time"]}},{"name":"variableValue","required":false},{"name":"variableComparator","required":false,"schema":{"type":"string","enum":[">",">=","=","<","<=","<>"]}}],"variants":[{"when":{"delayUntilMode":"time","delayUntilUseDate":"false"},"fields":{"delayUntilHourValue":{"required":true,"tokenBounds":{"kind":"integer_literal","minimum":0,"maximum":23,"allowBlank":true}},"delayUntilMinuteValue":{"required":true,"tokenBounds":{"kind":"integer_literal","minimum":0,"maximum":59,"allowBlank":true}},"delayUntilSecondValue":{"required":true,"tokenBounds":{"kind":"integer_literal","minimum":0,"maximum":59,"allowBlank":true}},"delayUntilMonthValue":{"required":true,"schema":{"$ref":"string"}},"delayUntilDayValue":{"required":true,"schema":{"$ref":"string"}},"delayUntilYearValue":{"required":true,"schema":{"$ref":"string"}}}},{"when":{"delayUntilMode":"time","delayUntilUseDate":"true"},"fields":{"delayUntilHourValue":{"required":true,"tokenBounds":{"kind":"integer_literal","minimum":0,"maximum":23,"allowBlank":true}},"delayUntilMinuteValue":{"required":true,"tokenBounds":{"kind":"integer_literal","minimum":0,"maximum":59,"allowBlank":true}},"delayUntilSecondValue":{"required":true,"tokenBounds":{"kind":"integer_literal","minimum":0,"maximum":59,"allowBlank":true}},"delayUntilMonthValue":{"required":true,"tokenBounds":{"kind":"integer_literal","minimum":1,"maximum":12,"allowBlank":true}},"delayUntilDayValue":{"required":true,"tokenBounds":{"kind":"integer_literal","minimum":1,"maximum":31,"allowBlank":true}},"delayUntilYearValue":{"required":true,"tokenBounds":{"kind":"integer_literal","minimum":1970,"maximum":9999,"allowBlank":true}}}},{"when":{"delayUntilMode":"image"},"fields":{"assetNames":{"required":true},"delayUntilLeftValue":{"required":true,"tokenBounds":{"kind":"signed_integer_or_variable","minimum":-2147483648,"maximum":2147483647,"allowBlank":true}},"delayUntilTopValue":{"required":true,"tokenBounds":{"kind":"signed_integer_or_variable","minimum":-2147483648,"maximum":2147483647,"allowBlank":true}},"delayUntilRightValue":{"required":true,"tokenBounds":{"kind":"signed_integer_or_variable","minimum":-2147483648,"maximum":2147483647,"allowBlank":true}},"delayUntilBottomValue":{"required":true,"tokenBounds":{"kind":"signed_integer_or_variable","minimum":-2147483648,"maximum":2147483647,"allowBlank":true}},"confidencePercentValue":{"required":true,"tokenBounds":{"kind":"integer_literal_or_variable","minimum":0,"maximum":100,"allowBlank":true}},"delayUntilCheckEveryValue":{"required":true,"tokenBounds":{"kind":"integer_literal","minimum":0,"maximum":60000,"allowBlank":true}}}},{"when":{"delayUntilMode":"ui_element"},"fields":{"uiFindQuery":{"required":true},"uiFindTarget":{"required":true},"uiFindMatchMode":{"required":true},"uiFindNthValue":{"required":true,"tokenBounds":{"kind":"integer_literal_or_variable","minimum":1,"maximum":2147483647,"allowBlank":true}},"uiFindEnabledOnly":{"required":true},"uiFindClickableOnly":{"required":true},"uiFindVisibleOnly":{"required":true},"uiFindPackageFilter":{"required":true},"delayUntilCheckEveryValue":{"required":true,"tokenBounds":{"kind":"integer_literal","minimum":0,"maximum":60000,"allowBlank":true}}}},{"when":{"delayUntilMode":"pixel"},"fields":{"pixelXValue":{"required":true,"tokenBounds":{"kind":"integer_literal_or_variable","minimum":0,"maximum":2147483647,"allowBlank":true}},"pixelYValue":{"required":true,"tokenBounds":{"kind":"integer_literal_or_variable","minimum":0,"maximum":2147483647,"allowBlank":true}},"variableValue":{"required":true,"tokenBounds":{"kind":"hex_literal_or_variable","allowBlank":true}},"confidencePercentValue":{"required":true,"tokenBounds":{"kind":"integer_literal_or_variable","minimum":0,"maximum":100,"allowBlank":true}},"delayUntilCheckEveryValue":{"required":true,"tokenBounds":{"kind":"integer_literal","minimum":0,"maximum":60000,"allowBlank":true}}}},{"when":{"delayUntilMode":"active_app"},"fields":{"devicePackageName":{"required":true},"deviceAppLabel":{"required":true},"delayUntilCheckEveryValue":{"required":true,"tokenBounds":{"kind":"integer_literal","minimum":0,"maximum":60000,"allowBlank":true}}}},{"when":{"delayUntilMode":"variable","variableType":"boolean"},"fields":{"variableName":{"required":true,"tokenBounds":{"kind":"variable_name","allowBlank":true}},"variableComparator":{"required":true,"schema":{"type":"string","enum":["="]}},"variableValue":{"required":true,"tokenBounds":{"kind":"boolean_literal","allowBlank":true}},"delayUntilCheckEveryValue":{"required":true,"tokenBounds":{"kind":"integer_literal","minimum":0,"maximum":60000,"allowBlank":true}}}},{"when":{"delayUntilMode":"variable","variableType":"integer"},"fields":{"variableName":{"required":true,"tokenBounds":{"kind":"variable_name","allowBlank":true}},"variableComparator":{"required":true,"schema":{"type":"string","enum":["=","<>",">",">=","<","<="]}},"variableValue":{"required":true,"tokenBounds":{"kind":"signed_integer_or_variable","minimum":-2147483648,"maximum":2147483647,"allowBlank":true}},"delayUntilCheckEveryValue":{"required":true,"tokenBounds":{"kind":"integer_literal","minimum":0,"maximum":60000,"allowBlank":true}}}},{"when":{"delayUntilMode":"variable","variableType":"decimal"},"fields":{"variableName":{"required":true,"tokenBounds":{"kind":"variable_name","allowBlank":true}},"variableComparator":{"required":true,"schema":{"type":"string","enum":["=","<>",">",">=","<","<="]}},"variableValue":{"required":true,"tokenBounds":{"kind":"decimal_literal_or_variable","allowBlank":true}},"delayUntilCheckEveryValue":{"required":true,"tokenBounds":{"kind":"integer_literal","minimum":0,"maximum":60000,"allowBlank":true}}}},{"when":{"delayUntilMode":"variable","variableType":"string"},"fields":{"variableName":{"required":true,"tokenBounds":{"kind":"variable_name","allowBlank":true}},"variableComparator":{"required":true,"schema":{"type":"string","enum":["="]}},"uiFindMatchMode":{"required":true,"schema":{"type":"string","enum":["exact","contains","regex"]}},"variableValue":{"required":true,"tokenBounds":{"kind":"string_literal_or_variable","allowBlank":true}},"delayUntilCheckEveryValue":{"required":true,"tokenBounds":{"kind":"integer_literal","minimum":0,"maximum":60000,"allowBlank":true}}}},{"when":{"delayUntilMode":"variable","variableType":"hex"},"fields":{"variableName":{"required":true,"tokenBounds":{"kind":"variable_name","allowBlank":true}},"variableComparator":{"required":true,"schema":{"type":"string","enum":["="]}},"variableValue":{"required":true,"tokenBounds":{"kind":"hex_literal_or_variable","allowBlank":true}},"delayUntilCheckEveryValue":{"required":true,"tokenBounds":{"kind":"integer_literal","minimum":0,"maximum":60000,"allowBlank":true}}}},{"when":{"delayUntilMode":"variable","variableType":"time"},"fields":{"variableName":{"required":true,"tokenBounds":{"kind":"variable_name","allowBlank":true}},"variableComparator":{"required":true,"schema":{"type":"string","enum":["=","<>",">",">=","<","<="]}},"variableValue":{"required":true,"tokenBounds":{"kind":"time_literal_or_variable","allowBlank":true}},"delayUntilCheckEveryValue":{"required":true,"tokenBounds":{"kind":"integer_literal","minimum":0,"maximum":60000,"allowBlank":true}}}}]},{"position":4,"type":"retap","fields":[{"name":"id","required":true},{"name":"type","required":true},{"name":"nickname","required":true},{"name":"disabled","required":true},{"name":"retapUseTimeout","required":false},{"name":"retapMode","required":false},{"name":"retapCoordinateTimeoutValue","required":false},{"name":"xVariableName","required":false},{"name":"yVariableName","required":false},{"name":"retapRepeatsValue","required":false},{"name":"retapDelayMsValue","required":false},{"name":"retapTimeoutMsValue","required":false},{"name":"variableShared","required":false}],"variants":[{"when":{"type":"retap"},"fields":{"retapRepeatsValue":{"tokenBounds":{"kind":"integer_literal_or_variable","minimum":0,"maximum":2147483647,"allowBlank":true}},"retapDelayMsValue":{"tokenBounds":{"kind":"integer_literal_or_variable","minimum":0,"maximum":2147483647,"allowBlank":true}},"retapTimeoutMsValue":{"tokenBounds":{"kind":"integer_literal_or_variable","minimum":0,"maximum":2147483647,"allowBlank":true}},"retapCoordinateTimeoutValue":{"tokenBounds":{"kind":"integer_literal_or_variable","minimum":0,"maximum":2147483647,"allowBlank":true}},"retapMode":{"required":false},"retapUseTimeout":{"required":false},"xVariableName":{"required":false},"yVariableName":{"required":false},"variableShared":{"required":false}}}]},{"position":5,"type":"multi_click","fields":[{"name":"id","required":true},{"name":"type","required":true},{"name":"nickname","required":true},{"name":"disabled","required":true},{"name":"multiClicks","required":false},{"name":"useVariableArray","required":false},{"name":"xVariableName","required":false},{"name":"yVariableName","required":false},{"name":"inArea","required":false},{"name":"areaLeftValue","required":false,"schema":{"$ref":"incompleteNonNegativeInt32OrIntegerVariableToken"}},{"name":"areaTopValue","required":false,"schema":{"$ref":"incompleteNonNegativeInt32OrIntegerVariableToken"}},{"name":"areaRightValue","required":false,"schema":{"$ref":"incompleteNonNegativeInt32OrIntegerVariableToken"}},{"name":"areaBottomValue","required":false,"schema":{"$ref":"incompleteNonNegativeInt32OrIntegerVariableToken"}},{"name":"delayMs","required":false}]},{"position":6,"type":"swipe","fields":[{"name":"id","required":true},{"name":"type","required":true},{"name":"nickname","required":true},{"name":"disabled","required":true},{"name":"swipeMode","required":false},{"name":"gestureStrokes","required":false},{"name":"gestureConcurrent","required":false},{"name":"swipeActionMode","required":false},{"name":"swipePressDurationValue","required":false}],"variants":[{"when":{"type":"swipe","swipeMode":"exact","swipeActionMode":"swipe"},"absent":["swipePressDurationValue"],"fields":{"swipeMode":{"required":true},"swipeActionMode":{"required":true},"gestureStrokes":{"required":false},"gestureConcurrent":{"required":false}}},{"when":{"type":"swipe","swipeMode":"quick","swipeActionMode":"swipe"},"absent":["swipePressDurationValue"],"fields":{"swipeMode":{"required":true},"swipeActionMode":{"required":true},"gestureStrokes":{"required":false},"gestureConcurrent":{"required":false}}},{"when":{"type":"swipe","swipeMode":"exact","swipeActionMode":"drag"},"fields":{"swipeMode":{"required":true},"swipeActionMode":{"required":true},"gestureStrokes":{"required":false},"gestureConcurrent":{"required":false},"swipePressDurationValue":{"required":false,"tokenBounds":{"kind":"c12d_integer_literal_or_variable","minimum":0,"maximum":2147483647,"allowBlank":true}}}},{"when":{"type":"swipe","swipeMode":"quick","swipeActionMode":"drag"},"fields":{"swipeMode":{"required":true},"swipeActionMode":{"required":true},"gestureStrokes":{"required":false},"gestureConcurrent":{"required":false},"swipePressDurationValue":{"required":false,"tokenBounds":{"kind":"c12d_integer_literal_or_variable","minimum":0,"maximum":2147483647,"allowBlank":true}}}}]},{"position":7,"type":"img_find","fields":[{"name":"id","required":true},{"name":"type","required":true},{"name":"nickname","required":true},{"name":"disabled","required":true},{"name":"assetName","required":false},{"name":"multiAsset","required":false},{"name":"assetNames","required":false},{"name":"useNegativeAssets","required":false},{"name":"negativeAssetNames","required":false},{"name":"confidencePercentValue","required":false,"schema":{"type":"string"}},{"name":"imgFindNegativeConfidencePercentValue","required":false,"schema":{"type":"string"}},{"name":"imgFindOutputMode","required":false},{"name":"imgFindClassifyOutputStateVariable","required":false},{"name":"imgFindClassifyOutputIndexVariable","required":false},{"name":"imgFindClassifyOutputFoundVariable","required":false},{"name":"imgFindClassifyOutputXVariable","required":false},{"name":"imgFindClassifyOutputYVariable","required":false},{"name":"imgFindClassifyOutputConfidenceVariable","required":false},{"name":"imgFindBooleanArrayName","required":false},{"name":"imgFindMaxResultsValue","required":false},{"name":"leftValue","required":false,"schema":{"$ref":"nonNegativeInt32OrIntegerVariableToken"}},{"name":"topValue","required":false,"schema":{"$ref":"nonNegativeInt32OrIntegerVariableToken"}},{"name":"rightValue","required":false,"schema":{"$ref":"nonNegativeInt32OrIntegerVariableToken"}},{"name":"bottomValue","required":false,"schema":{"$ref":"nonNegativeInt32OrIntegerVariableToken"}},{"name":"findAll","required":false},{"name":"setVariables","required":false},{"name":"clickIfFound","required":false},{"name":"clickTargetCenter","required":false},{"name":"clickTargetXValue","required":false},{"name":"clickTargetYValue","required":false},{"name":"variableName","required":false},{"name":"xVariableName","required":false},{"name":"yVariableName","required":false},{"name":"useCountOutput","required":false},{"name":"outputCountVariableName","required":false},{"name":"findFirstRightToLeft","required":false},{"name":"findFirstBottomToTop","required":false},{"name":"variableShared","required":false}],"variants":[{"when":{"type":"img_find"},"fields":{"assetName":{"required":false},"multiAsset":{"required":false},"assetNames":{"required":false},"useNegativeAssets":{"required":false},"negativeAssetNames":{"required":false},"confidencePercentValue":{"required":false,"tokenBounds":{"kind":"unsigned_integer_literal","minimum":0,"maximum":100,"allowBlank":true}},"imgFindNegativeConfidencePercentValue":{"required":false,"tokenBounds":{"kind":"unsigned_integer_literal","minimum":0,"maximum":100,"allowBlank":true}},"imgFindOutputMode":{"required":false},"imgFindClassifyOutputStateVariable":{"required":false},"imgFindClassifyOutputIndexVariable":{"required":false},"imgFindClassifyOutputFoundVariable":{"required":false},"imgFindClassifyOutputXVariable":{"required":false},"imgFindClassifyOutputYVariable":{"required":false},"imgFindClassifyOutputConfidenceVariable":{"required":false},"imgFindBooleanArrayName":{"required":false},"imgFindMaxResultsValue":{"required":false},"leftValue":{"required":false},"topValue":{"required":false},"rightValue":{"required":false},"bottomValue":{"required":false},"findAll":{"required":false},"setVariables":{"required":false},"clickIfFound":{"required":false},"clickTargetCenter":{"required":false},"clickTargetXValue":{"required":false},"clickTargetYValue":{"required":false},"variableName":{"required":false},"xVariableName":{"required":false},"yVariableName":{"required":false},"useCountOutput":{"required":false},"outputCountVariableName":{"required":false},"findFirstRightToLeft":{"required":false},"findFirstBottomToTop":{"required":false},"variableShared":{"required":false}}}]},{"position":8,"type":"smart_tap","fields":[{"name":"id","required":true},{"name":"type","required":true},{"name":"nickname","required":true},{"name":"disabled","required":true},{"name":"smartTapAssets","required":false},{"name":"smartTapTriggerMode","required":false},{"name":"smartTapTapMode","required":false},{"name":"smartTapTapX","required":false},{"name":"smartTapTapY","required":false},{"name":"smartTapUseNegativeAssets","required":false},{"name":"smartTapNegativeAssetNames","required":false},{"name":"setVariables","required":false},{"name":"smartTapOutputChangedVariable","required":false},{"name":"smartTapOutputXVariable","required":false},{"name":"smartTapOutputYVariable","required":false},{"name":"leftValue","required":false},{"name":"topValue","required":false},{"name":"rightValue","required":false},{"name":"bottomValue","required":false},{"name":"confidencePercentValue","required":false,"schema":{"$ref":"smartTapGlobalConfidenceRaw"}},{"name":"variableShared","required":false}]},{"position":9,"type":"label","fields":[{"name":"id","required":true},{"name":"type","required":true},{"name":"nickname","required":true},{"name":"disabled","required":true},{"name":"labelName","required":false}]},{"position":10,"type":"goto","fields":[{"name":"id","required":true},{"name":"type","required":true},{"name":"nickname","required":true},{"name":"disabled","required":true},{"name":"labelName","required":false}]},{"position":11,"type":"loop","fields":[{"name":"id","required":true},{"name":"type","required":true},{"name":"nickname","required":true},{"name":"disabled","required":true},{"name":"loopInfinite","required":false},{"name":"loopConcurrent","required":false},{"name":"loopDelayMsValue","required":false},{"name":"loopTimesValue","required":false}],"variants":[{"when":{"type":"loop","loopInfinite":"true"},"absent":["loopTimesValue"],"fields":{"loopInfinite":{"required":true},"loopConcurrent":{"required":false},"loopDelayMsValue":{"required":false,"tokenBounds":{"kind":"c12d_integer_literal_or_variable","minimum":0,"maximum":2147483647,"allowBlank":true}}}},{"when":{"type":"loop","loopInfinite":"false"},"fields":{"loopInfinite":{"required":true},"loopConcurrent":{"required":false},"loopDelayMsValue":{"required":false,"tokenBounds":{"kind":"c12d_integer_literal_or_variable","minimum":0,"maximum":2147483647,"allowBlank":true}},"loopTimesValue":{"required":false}}}]},{"position":12,"type":"end_loop","fields":[{"name":"id","required":true},{"name":"type","required":true},{"name":"nickname","required":true},{"name":"disabled","required":true}]},{"position":13,"type":"break_loop","fields":[{"name":"id","required":true},{"name":"type","required":true},{"name":"nickname","required":true},{"name":"disabled","required":true}]},{"position":14,"type":"call","fields":[{"name":"id","required":true},{"name":"type","required":true},{"name":"nickname","required":true},{"name":"disabled","required":true},{"name":"targetMacroId","required":false}]},{"position":15,"type":"break_call","fields":[{"name":"id","required":true},{"name":"type","required":true},{"name":"nickname","required":true},{"name":"disabled","required":true}]},{"position":16,"type":"stop_call","fields":[{"name":"id","required":true},{"name":"type","required":true},{"name":"nickname","required":true},{"name":"disabled","required":true},{"name":"targetMacroIds","required":false}]},{"position":17,"type":"pause_concurrent","fields":[{"name":"id","required":true},{"name":"type","required":true},{"name":"nickname","required":true},{"name":"disabled","required":true}]},{"position":18,"type":"unpause_concurrent","fields":[{"name":"id","required":true},{"name":"type","required":true},{"name":"nickname","required":true},{"name":"disabled","required":true}]},{"position":19,"type":"break_exclusive","fields":[{"name":"id","required":true},{"name":"type","required":true},{"name":"nickname","required":true},{"name":"disabled","required":true}]},{"position":20,"type":"set_variable","fields":[{"name":"id","required":true},{"name":"type","required":true},{"name":"nickname","required":true},{"name":"disabled","required":true},{"name":"variableName","required":false},{"name":"variableLetter","required":false},{"name":"variableArraySizeValue","required":false},{"name":"setVariableMode","required":false},{"name":"setVariableTimeFormat","required":false},{"name":"setVariableTimeSource","required":false},{"name":"variableType","required":false},{"name":"variableValue","required":false},{"name":"variableShared","required":false},{"name":"setVariableFromClipboard","required":false}],"variants":[{"when":{"setVariableMode":"single","variableType":"integer"},"absent":["setVariableTimeFormat","setVariableTimeSource"],"fields":{"variableName":{"required":true,"tokenBounds":{"kind":"variable_name","allowBlank":true}},"variableValue":{"required":true,"tokenBounds":{"kind":"integer_literal_or_variable","allowBlank":true}},"variableShared":{"required":true}}},{"when":{"setVariableMode":"single","variableType":"decimal"},"absent":["setVariableTimeFormat","setVariableTimeSource"],"fields":{"variableName":{"required":true,"tokenBounds":{"kind":"variable_name","allowBlank":true}},"variableValue":{"required":true,"tokenBounds":{"kind":"decimal_literal_or_variable","allowBlank":true}},"variableShared":{"required":true}}},{"when":{"setVariableMode":"single","variableType":"boolean"},"absent":["setVariableTimeFormat","setVariableTimeSource"],"fields":{"variableName":{"required":true,"tokenBounds":{"kind":"variable_name","allowBlank":true}},"variableValue":{"required":true,"tokenBounds":{"kind":"boolean_literal_or_variable","allowBlank":true}},"variableShared":{"required":true}}},{"when":{"setVariableMode":"single","variableType":"hex"},"absent":["setVariableTimeFormat","setVariableTimeSource"],"fields":{"variableName":{"required":true,"tokenBounds":{"kind":"variable_name","allowBlank":true}},"variableValue":{"required":true,"tokenBounds":{"kind":"hex_literal_or_variable","allowBlank":true}},"variableShared":{"required":true}}},{"when":{"setVariableMode":"single","variableType":"string","setVariableFromClipboard":"false"},"absent":["setVariableTimeFormat","setVariableTimeSource"],"fields":{"variableName":{"required":true,"tokenBounds":{"kind":"variable_name","allowBlank":true}},"variableValue":{"required":true,"tokenBounds":{"kind":"string_literal_or_variable","allowBlank":true}},"variableShared":{"required":true}}},{"when":{"setVariableMode":"single","variableType":"time"},"absent":["setVariableTimeFormat","setVariableTimeSource"],"fields":{"variableName":{"required":true,"tokenBounds":{"kind":"variable_name","allowBlank":true}},"variableValue":{"required":true,"tokenBounds":{"kind":"time_literal_or_variable","allowBlank":true}},"variableShared":{"required":true}}},{"when":{"setVariableMode":"single","variableType":"string","setVariableFromClipboard":"true"},"absent":["setVariableTimeFormat","setVariableTimeSource"],"fields":{"variableName":{"required":true,"tokenBounds":{"kind":"variable_name","allowBlank":true}},"variableShared":{"required":true}}},{"when":{"setVariableMode":"array","variableType":"integer"},"absent":["setVariableTimeFormat","setVariableTimeSource"],"fields":{"variableLetter":{"required":true,"tokenBounds":{"kind":"action_array","allowBlank":true}},"variableArraySizeValue":{"required":true,"tokenBounds":{"kind":"integer_literal_or_variable","minimum":1,"maximum":4096,"allowBlank":true}},"variableShared":{"required":true}}},{"when":{"setVariableMode":"array","variableType":"decimal"},"absent":["setVariableTimeFormat","setVariableTimeSource"],"fields":{"variableLetter":{"required":true,"tokenBounds":{"kind":"action_array","allowBlank":true}},"variableArraySizeValue":{"required":true,"tokenBounds":{"kind":"integer_literal_or_variable","minimum":1,"maximum":4096,"allowBlank":true}},"variableShared":{"required":true}}},{"when":{"setVariableMode":"array","variableType":"boolean"},"absent":["setVariableTimeFormat","setVariableTimeSource"],"fields":{"variableLetter":{"required":true,"tokenBounds":{"kind":"action_array","allowBlank":true}},"variableArraySizeValue":{"required":true,"tokenBounds":{"kind":"integer_literal_or_variable","minimum":1,"maximum":4096,"allowBlank":true}},"variableShared":{"required":true}}},{"when":{"setVariableMode":"array","variableType":"hex"},"absent":["setVariableTimeFormat","setVariableTimeSource"],"fields":{"variableLetter":{"required":true,"tokenBounds":{"kind":"action_array","allowBlank":true}},"variableArraySizeValue":{"required":true,"tokenBounds":{"kind":"integer_literal_or_variable","minimum":1,"maximum":4096,"allowBlank":true}},"variableShared":{"required":true}}},{"when":{"setVariableMode":"array","variableType":"string"},"absent":["setVariableTimeFormat","setVariableTimeSource"],"fields":{"variableLetter":{"required":true,"tokenBounds":{"kind":"action_array","allowBlank":true}},"variableArraySizeValue":{"required":true,"tokenBounds":{"kind":"integer_literal_or_variable","minimum":1,"maximum":4096,"allowBlank":true}},"variableShared":{"required":true}}},{"when":{"setVariableMode":"array","variableType":"time"},"absent":["setVariableTimeFormat","setVariableTimeSource"],"fields":{"variableLetter":{"required":true,"tokenBounds":{"kind":"action_array","allowBlank":true}},"variableArraySizeValue":{"required":true,"tokenBounds":{"kind":"integer_literal_or_variable","minimum":1,"maximum":4096,"allowBlank":true}},"variableShared":{"required":true}}},{"when":{"setVariableMode":"single","variableType":"time","setVariableTimeFormat":"am_pm","setVariableTimeSource":"manual"},"fields":{"variableName":{"required":true,"tokenBounds":{"kind":"variable_name","allowBlank":true}},"variableValue":{"required":true,"tokenBounds":{"kind":"manual_time_literal_or_variable","allowBlank":true}},"variableShared":{"required":true}}},{"when":{"setVariableMode":"single","variableType":"time","setVariableTimeFormat":"am_pm","setVariableTimeSource":"current"},"fields":{"variableName":{"required":true,"tokenBounds":{"kind":"variable_name","allowBlank":true}},"variableShared":{"required":true}}},{"when":{"setVariableMode":"single","variableType":"decimal","setVariableTimeFormat":"unix","setVariableTimeSource":"manual"},"fields":{"variableName":{"required":true,"tokenBounds":{"kind":"variable_name","allowBlank":true}},"variableValue":{"required":true,"tokenBounds":{"kind":"decimal_literal_or_variable","allowBlank":true}},"variableShared":{"required":true}}},{"when":{"setVariableMode":"single","variableType":"decimal","setVariableTimeFormat":"unix","setVariableTimeSource":"current"},"fields":{"variableName":{"required":true,"tokenBounds":{"kind":"variable_name","allowBlank":true}},"variableShared":{"required":true}}},{"when":{"setVariableMode":"array","variableType":"time","setVariableTimeFormat":"am_pm","setVariableTimeSource":"manual"},"fields":{"variableLetter":{"required":true,"tokenBounds":{"kind":"action_array","allowBlank":true}},"variableArraySizeValue":{"required":true,"tokenBounds":{"kind":"integer_literal_or_variable","minimum":1,"maximum":4096,"allowBlank":true}},"variableValue":{"required":true,"tokenBounds":{"kind":"manual_time_literal_or_variable","allowBlank":true}},"variableShared":{"required":true}}},{"when":{"setVariableMode":"array","variableType":"time","setVariableTimeFormat":"am_pm","setVariableTimeSource":"current"},"fields":{"variableLetter":{"required":true,"tokenBounds":{"kind":"action_array","allowBlank":true}},"variableArraySizeValue":{"required":true,"tokenBounds":{"kind":"integer_literal_or_variable","minimum":1,"maximum":4096,"allowBlank":true}},"variableShared":{"required":true}}},{"when":{"setVariableMode":"array","variableType":"decimal","setVariableTimeFormat":"unix","setVariableTimeSource":"manual"},"fields":{"variableLetter":{"required":true,"tokenBounds":{"kind":"action_array","allowBlank":true}},"variableArraySizeValue":{"required":true,"tokenBounds":{"kind":"integer_literal_or_variable","minimum":1,"maximum":4096,"allowBlank":true}},"variableValue":{"required":true,"tokenBounds":{"kind":"decimal_literal_or_variable","allowBlank":true}},"variableShared":{"required":true}}},{"when":{"setVariableMode":"array","variableType":"decimal","setVariableTimeFormat":"unix","setVariableTimeSource":"current"},"fields":{"variableLetter":{"required":true,"tokenBounds":{"kind":"action_array","allowBlank":true}},"variableArraySizeValue":{"required":true,"tokenBounds":{"kind":"integer_literal_or_variable","minimum":1,"maximum":4096,"allowBlank":true}},"variableShared":{"required":true}}}]},{"position":21,"type":"mod_variable","fields":[{"name":"id","required":true},{"name":"type","required":true},{"name":"nickname","required":true},{"name":"disabled","required":true},{"name":"modTargetVariableName","required":false},{"name":"modLeftValue","required":false},{"name":"modOperator","required":false},{"name":"modRightValue","required":false},{"name":"modUseHex","required":false},{"name":"modResultType","required":false},{"name":"modMode","required":false},{"name":"modExpression","required":false},{"name":"modArrayTargetLetter","required":false},{"name":"modArrayTargetStartIndexValue","required":false},{"name":"modArrayCountValue","required":false},{"name":"modArrayInputAArrayLetter","required":false},{"name":"modArrayInputAStartIndexValue","required":false},{"name":"modArrayInputBArrayLetter","required":false},{"name":"modArrayInputBStartIndexValue","required":false},{"name":"modArrayInputCArrayLetter","required":false},{"name":"modArrayInputCStartIndexValue","required":false},{"name":"variableShared","required":false}],"variants":[{"when":{"type":"mod_variable","modMode":"basic"},"absent":["modExpression","modArrayTargetLetter","modArrayTargetStartIndexValue","modArrayCountValue","modArrayInputAArrayLetter","modArrayInputAStartIndexValue","modArrayInputBArrayLetter","modArrayInputBStartIndexValue","modArrayInputCArrayLetter","modArrayInputCStartIndexValue"],"fields":{"modMode":{"required":true},"modTargetVariableName":{"required":false},"modLeftValue":{"required":false},"modOperator":{"required":false},"modRightValue":{"required":false},"modUseHex":{"required":false},"modResultType":{"required":false},"variableShared":{"required":false}}},{"when":{"type":"mod_variable","modMode":"expression"},"absent":["modLeftValue","modOperator","modRightValue","modUseHex","modArrayTargetLetter","modArrayTargetStartIndexValue","modArrayCountValue","modArrayInputAArrayLetter","modArrayInputAStartIndexValue","modArrayInputBArrayLetter","modArrayInputBStartIndexValue","modArrayInputCArrayLetter","modArrayInputCStartIndexValue"],"fields":{"modMode":{"required":true},"modTargetVariableName":{"required":false},"modResultType":{"required":false},"modExpression":{"required":false},"variableShared":{"required":false}}},{"when":{"type":"mod_variable","modMode":"array"},"absent":["modTargetVariableName","modLeftValue","modOperator","modRightValue","modUseHex"],"fields":{"modMode":{"required":true},"modExpression":{"required":false},"modResultType":{"required":false},"modArrayTargetLetter":{"required":false},"modArrayTargetStartIndexValue":{"required":false,"tokenBounds":{"kind":"c12d_integer_literal_or_variable","minimum":1,"maximum":4096,"allowBlank":true}},"modArrayCountValue":{"required":false,"tokenBounds":{"kind":"c12d_integer_literal_or_variable","minimum":0,"maximum":4096,"allowBlank":true}},"modArrayInputAArrayLetter":{"required":false},"modArrayInputAStartIndexValue":{"required":false,"tokenBounds":{"kind":"c12d_integer_literal_or_variable","minimum":1,"maximum":4096,"allowBlank":true}},"modArrayInputBArrayLetter":{"required":false},"modArrayInputBStartIndexValue":{"required":false,"tokenBounds":{"kind":"c12d_integer_literal_or_variable","minimum":1,"maximum":4096,"allowBlank":true}},"modArrayInputCArrayLetter":{"required":false},"modArrayInputCStartIndexValue":{"required":false,"tokenBounds":{"kind":"c12d_integer_literal_or_variable","minimum":1,"maximum":4096,"allowBlank":true}},"variableShared":{"required":false}}}]},{"position":22,"type":"text_type","fields":[{"name":"id","required":true},{"name":"type","required":true},{"name":"nickname","required":true},{"name":"disabled","required":true},{"name":"textValue","required":false},{"name":"textUseVariable","required":false}]},{"position":23,"type":"get_pixel_color","fields":[{"name":"id","required":true},{"name":"type","required":true},{"name":"nickname","required":true},{"name":"disabled","required":true},{"name":"variableName","required":false},{"name":"pixelXValue","required":false,"schema":{"$ref":"incompleteNonNegativeInt32OrIntegerVariableToken"}},{"name":"pixelYValue","required":false,"schema":{"$ref":"incompleteNonNegativeInt32OrIntegerVariableToken"}},{"name":"variableShared","required":false}]},{"position":24,"type":"pixel_sample_batch","fields":[{"name":"id","required":true},{"name":"type","required":true},{"name":"nickname","required":true},{"name":"disabled","required":true},{"name":"pixelSampleSourceMode","required":false},{"name":"points","required":false,"schema":{"type":"array","maxItems":2048,"items":{"$ref":"pointRow"}}},{"name":"xArrayLetter","required":false},{"name":"yArrayLetter","required":false},{"name":"startIndexValue","required":false},{"name":"lengthValue","required":false},{"name":"arrayLetter","required":false},{"name":"indexValue","required":false},{"name":"variableShared","required":false}],"variants":[{"when":{"type":"pixel_sample_batch","pixelSampleSourceMode":"points"},"absent":["xArrayLetter","yArrayLetter","startIndexValue","lengthValue"],"fields":{"pixelSampleSourceMode":{"required":true},"points":{"required":false},"arrayLetter":{"required":false},"indexValue":{"required":false,"tokenBounds":{"kind":"c12d_integer_literal_or_variable","minimum":1,"maximum":4096,"allowBlank":true}},"variableShared":{"required":false}}},{"when":{"type":"pixel_sample_batch","pixelSampleSourceMode":"arrays"},"absent":["points"],"fields":{"pixelSampleSourceMode":{"required":true},"xArrayLetter":{"required":false},"yArrayLetter":{"required":false},"startIndexValue":{"required":false,"tokenBounds":{"kind":"c12d_integer_literal_or_variable","minimum":1,"maximum":4096,"allowBlank":true}},"lengthValue":{"required":false,"tokenBounds":{"kind":"c12d_integer_literal_or_variable","minimum":1,"maximum":2048,"allowBlank":true}},"arrayLetter":{"required":false},"indexValue":{"required":false,"tokenBounds":{"kind":"c12d_integer_literal_or_variable","minimum":1,"maximum":4096,"allowBlank":true}},"variableShared":{"required":false}}}]},{"position":25,"type":"pixel_find","fields":[{"name":"id","required":true},{"name":"type","required":true},{"name":"nickname","required":true},{"name":"disabled","required":true},{"name":"variableName","required":false},{"name":"xVariableName","required":false},{"name":"yVariableName","required":false},{"name":"leftValue","required":false},{"name":"topValue","required":false},{"name":"rightValue","required":false},{"name":"bottomValue","required":false},{"name":"confidencePercentValue","required":false,"schema":{"$ref":"smartTapGlobalConfidenceRaw"}},{"name":"findAll","required":false},{"name":"setVariables","required":false},{"name":"clickIfFound","required":false},{"name":"pixelIgnoreRadius","required":false},{"name":"pixelFindMidpoints","required":false},{"name":"pixelFindUseConfidence","required":false},{"name":"pixelFindMaxResultsValue","required":false},{"name":"pixelColors","required":false},{"name":"imgFindOutputMode","required":false,"schema":{"type":"string","enum":["standard","classify"]}},{"name":"imgFindClassifyOutputIndexVariable","required":false},{"name":"findFirstRightToLeft","required":false},{"name":"findFirstBottomToTop","required":false},{"name":"clickTargetCenter","required":false},{"name":"clickTargetXValue","required":false},{"name":"clickTargetYValue","required":false},{"name":"variableShared","required":false}]},{"position":26,"type":"pixel_color_result","fields":[{"name":"id","required":true},{"name":"type","required":true},{"name":"nickname","required":true},{"name":"disabled","required":true},{"name":"variableName","required":false},{"name":"variableValue","required":false},{"name":"variableShared","required":false}]},{"position":27,"type":"visual_trigger","fields":[{"name":"id","required":true},{"name":"type","required":true},{"name":"nickname","required":true},{"name":"disabled","required":true},{"name":"visualStableFramesValue","required":false},{"name":"visualTimeoutMsValue","required":false},{"name":"visualCooldownMsValue","required":false},{"name":"visualActionMode","required":false},{"name":"visualTapX","required":false},{"name":"visualTapY","required":false},{"name":"visualTapDelayMsValue","required":false},{"name":"visualTriggerCombineMode","required":false},{"name":"visualTriggerSlots","required":false}],"variants":[{"when":{"type":"visual_trigger"},"fields":{"visualStableFramesValue":{"tokenBounds":{"kind":"integer_literal","minimum":1,"maximum":4096,"allowBlank":true}},"visualTimeoutMsValue":{"tokenBounds":{"kind":"integer_literal","minimum":0,"maximum":2147483647,"allowBlank":true}},"visualCooldownMsValue":{"tokenBounds":{"kind":"integer_literal","minimum":1,"maximum":2147483647,"allowBlank":true}},"visualTapDelayMsValue":{"tokenBounds":{"kind":"integer_literal","minimum":0,"maximum":2147483647,"allowBlank":true}},"visualActionMode":{"required":false},"visualTapX":{"required":false},"visualTapY":{"required":false},"visualTriggerCombineMode":{"required":false},"visualTriggerSlots":{"required":false}}}]},{"position":28,"type":"device_open_app","fields":[{"name":"id","required":true},{"name":"type","required":true},{"name":"nickname","required":true},{"name":"disabled","required":true},{"name":"devicePackageName","required":false},{"name":"deviceAppLabel","required":false}]},{"position":29,"type":"device_brightness","fields":[{"name":"id","required":true},{"name":"type","required":true},{"name":"nickname","required":true},{"name":"disabled","required":true},{"name":"deviceBrightnessPercentValue","required":false},{"name":"deviceBrightnessAdaptive","required":false}]},{"position":30,"type":"device_volume","fields":[{"name":"id","required":true},{"name":"type","required":true},{"name":"nickname","required":true},{"name":"disabled","required":true},{"name":"deviceVolumeRows","required":false}]},{"position":31,"type":"device_do_not_disturb","fields":[{"name":"id","required":true},{"name":"type","required":true},{"name":"nickname","required":true},{"name":"disabled","required":true},{"name":"deviceToggleState","required":false}]},{"position":32,"type":"device_rotation","fields":[{"name":"id","required":true},{"name":"type","required":true},{"name":"nickname","required":true},{"name":"disabled","required":true},{"name":"deviceToggleState","required":false}]},{"position":33,"type":"divider","fields":[{"name":"id","required":true},{"name":"type","required":true},{"name":"nickname","required":true},{"name":"disabled","required":true}]},{"position":34,"type":"else","fields":[{"name":"id","required":true},{"name":"type","required":true},{"name":"nickname","required":true},{"name":"disabled","required":true},{"name":"babyIfAttached","required":false},{"name":"babyIfParentId","required":false},{"name":"babyIfSource","required":false}]},{"position":35,"type":"or","fields":[{"name":"id","required":true},{"name":"type","required":true},{"name":"nickname","required":true},{"name":"disabled","required":true},{"name":"conditions","required":false},{"name":"babyIfAttached","required":false},{"name":"babyIfParentId","required":false},{"name":"babyIfSource","required":false}]},{"position":36,"type":"end_or","fields":[{"name":"id","required":true},{"name":"type","required":true},{"name":"nickname","required":true},{"name":"disabled","required":true},{"name":"babyIfAttached","required":false},{"name":"babyIfParentId","required":false},{"name":"babyIfSource","required":false}]},{"position":37,"type":"xor","fields":[{"name":"id","required":true},{"name":"type","required":true},{"name":"nickname","required":true},{"name":"disabled","required":true},{"name":"conditions","required":false},{"name":"babyIfAttached","required":false},{"name":"babyIfParentId","required":false},{"name":"babyIfSource","required":false}]},{"position":38,"type":"end_xor","fields":[{"name":"id","required":true},{"name":"type","required":true},{"name":"nickname","required":true},{"name":"disabled","required":true},{"name":"babyIfAttached","required":false},{"name":"babyIfParentId","required":false},{"name":"babyIfSource","required":false}]},{"position":39,"type":"and","fields":[{"name":"id","required":true},{"name":"type","required":true},{"name":"nickname","required":true},{"name":"disabled","required":true},{"name":"conditions","required":false},{"name":"babyIfAttached","required":false},{"name":"babyIfParentId","required":false},{"name":"babyIfSource","required":false}]},{"position":40,"type":"end_and","fields":[{"name":"id","required":true},{"name":"type","required":true},{"name":"nickname","required":true},{"name":"disabled","required":true},{"name":"babyIfAttached","required":false},{"name":"babyIfParentId","required":false},{"name":"babyIfSource","required":false}]},{"position":41,"type":"rgb_confidence","fields":[{"name":"id","required":true},{"name":"type","required":true},{"name":"nickname","required":true},{"name":"disabled","required":true},{"name":"variableName","required":false},{"name":"variableValue","required":false},{"name":"confidencePercentValue","required":false,"schema":{"type":"string"}},{"name":"babyIfAttached","required":false},{"name":"babyIfParentId","required":false},{"name":"babyIfSource","required":false}],"variants":[{"when":{"type":"rgb_confidence"},"fields":{"variableName":{"required":false},"variableValue":{"required":false},"confidencePercentValue":{"required":false,"tokenBounds":{"kind":"unsigned_integer_literal","minimum":1,"maximum":100,"allowBlank":true}},"babyIfAttached":{"required":false},"babyIfParentId":{"required":false},"babyIfSource":{"required":false}}}]},{"position":42,"type":"screenshot","fields":[{"name":"id","required":true},{"name":"type","required":true},{"name":"nickname","required":true},{"name":"disabled","required":true},{"name":"screenshotUseArea","required":false},{"name":"leftValue","required":false,"schema":{"$ref":"incompleteNonNegativeInt32OrIntegerVariableToken"}},{"name":"topValue","required":false,"schema":{"$ref":"incompleteNonNegativeInt32OrIntegerVariableToken"}},{"name":"rightValue","required":false,"schema":{"$ref":"incompleteNonNegativeInt32OrIntegerVariableToken"}},{"name":"bottomValue","required":false,"schema":{"$ref":"incompleteNonNegativeInt32OrIntegerVariableToken"}}]},{"position":43,"type":"prompt_me","fields":[{"name":"id","required":true},{"name":"type","required":true},{"name":"nickname","required":true},{"name":"disabled","required":true},{"name":"promptHeader","required":false},{"name":"promptUseButtons","required":false},{"name":"promptButtons","required":false},{"name":"promptUseTogglesText","required":false},{"name":"promptUseToggles","required":false},{"name":"promptToggles","required":false},{"name":"promptUseText","required":false},{"name":"promptTextVariableName","required":false},{"name":"promptTextCaption","required":false},{"name":"promptTextType","required":false},{"name":"promptMode","required":false},{"name":"promptMiniControlMode","required":false},{"name":"promptMiniPersistent","required":false},{"name":"promptMiniHeaderEnabled","required":false},{"name":"promptMiniTitle","required":false},{"name":"promptMiniRedXStopsScript","required":false},{"name":"promptMiniSizeMode","required":false},{"name":"promptMiniConfiguredWidthDp","required":false},{"name":"promptMiniConfiguredHeightDp","required":false},{"name":"promptMiniButtonVariableName","required":false},{"name":"promptMiniButtons","required":false},{"name":"promptMiniToggles","required":false},{"name":"variableShared","required":false}]},{"position":44,"type":"color_classify","fields":[{"name":"id","required":true},{"name":"type","required":true},{"name":"nickname","required":true},{"name":"disabled","required":true},{"name":"colorClassifyMode","required":false},{"name":"sourceVariableName","required":false},{"name":"sourceArrayLetter","required":false},{"name":"sourceArrayStartIndexValue","required":false},{"name":"sourceArrayCountValue","required":false},{"name":"confidencePercentValue","required":false,"schema":{"$ref":"smartTapGlobalConfidenceRaw"}},{"name":"outputType","required":false,"schema":{"$ref":"colorClassifyOutputType"}},{"name":"outputVariableName","required":false},{"name":"noMatchValue","required":false},{"name":"targets","required":false},{"name":"targetSourceMode","required":false},{"name":"targetArrayLetter","required":false},{"name":"targetArrayStartIndexValue","required":false},{"name":"targetArrayCountValue","required":false},{"name":"variableShared","required":false}],"variants":[{"when":{"type":"color_classify","colorClassifyMode":"single","targetSourceMode":"rows"},"absent":["sourceArrayLetter","sourceArrayStartIndexValue","sourceArrayCountValue","targetArrayLetter","targetArrayStartIndexValue","targetArrayCountValue"],"fields":{"colorClassifyMode":{"required":true},"targetSourceMode":{"required":true},"sourceVariableName":{"required":false},"confidencePercentValue":{"required":false},"outputType":{"required":false},"outputVariableName":{"required":false},"noMatchValue":{"required":false},"targets":{"required":false},"variableShared":{"required":false}}},{"when":{"type":"color_classify","colorClassifyMode":"single","targetSourceMode":"hex_array"},"absent":["sourceArrayLetter","sourceArrayStartIndexValue","sourceArrayCountValue","targets"],"fields":{"colorClassifyMode":{"required":true},"targetSourceMode":{"required":true},"sourceVariableName":{"required":false},"confidencePercentValue":{"required":false},"outputType":{"required":false},"outputVariableName":{"required":false},"noMatchValue":{"required":false},"targetArrayLetter":{"required":false},"targetArrayStartIndexValue":{"required":false,"tokenBounds":{"kind":"c12d_integer_literal_or_variable","minimum":1,"maximum":4096,"allowBlank":true}},"targetArrayCountValue":{"required":false,"tokenBounds":{"kind":"c12d_integer_literal_or_variable","minimum":0,"maximum":4096,"allowBlank":true}},"variableShared":{"required":false}}},{"when":{"type":"color_classify","colorClassifyMode":"array","targetSourceMode":"rows"},"absent":["sourceVariableName","targetArrayLetter","targetArrayStartIndexValue","targetArrayCountValue"],"fields":{"colorClassifyMode":{"required":true},"targetSourceMode":{"required":true},"sourceArrayLetter":{"required":false},"sourceArrayStartIndexValue":{"required":false,"tokenBounds":{"kind":"c12d_integer_literal_or_variable","minimum":1,"maximum":4096,"allowBlank":true}},"sourceArrayCountValue":{"required":false,"tokenBounds":{"kind":"c12d_integer_literal_or_variable","minimum":0,"maximum":4096,"allowBlank":true}},"confidencePercentValue":{"required":false},"outputType":{"required":false},"outputVariableName":{"required":false},"noMatchValue":{"required":false},"targets":{"required":false},"variableShared":{"required":false}}},{"when":{"type":"color_classify","colorClassifyMode":"array","targetSourceMode":"hex_array"},"absent":["sourceVariableName","targets"],"fields":{"colorClassifyMode":{"required":true},"targetSourceMode":{"required":true},"sourceArrayLetter":{"required":false},"sourceArrayStartIndexValue":{"required":false,"tokenBounds":{"kind":"c12d_integer_literal_or_variable","minimum":1,"maximum":4096,"allowBlank":true}},"sourceArrayCountValue":{"required":false,"tokenBounds":{"kind":"c12d_integer_literal_or_variable","minimum":0,"maximum":4096,"allowBlank":true}},"confidencePercentValue":{"required":false},"outputType":{"required":false},"outputVariableName":{"required":false},"noMatchValue":{"required":false},"targetArrayLetter":{"required":false},"targetArrayStartIndexValue":{"required":false,"tokenBounds":{"kind":"c12d_integer_literal_or_variable","minimum":1,"maximum":4096,"allowBlank":true}},"targetArrayCountValue":{"required":false,"tokenBounds":{"kind":"c12d_integer_literal_or_variable","minimum":0,"maximum":4096,"allowBlank":true}},"variableShared":{"required":false}}}]},{"position":45,"type":"array_get","fields":[{"name":"id","required":true},{"name":"type","required":true},{"name":"nickname","required":true},{"name":"disabled","required":true},{"name":"arrayLetter","required":false},{"name":"indexValue","required":false},{"name":"variableType","required":false},{"name":"variableShared","required":false},{"name":"outputVariableName","required":false}],"variants":[{"when":{"type":"array_get"},"fields":{"arrayLetter":{"required":false},"indexValue":{"required":true,"tokenBounds":{"kind":"c12d_integer_literal_or_variable","minimum":1,"maximum":4096,"allowBlank":false}},"variableType":{"required":false},"variableShared":{"required":false},"outputVariableName":{"required":false}}}]},{"position":46,"type":"array_set","fields":[{"name":"id","required":true},{"name":"type","required":true},{"name":"nickname","required":true},{"name":"disabled","required":true},{"name":"arrayLetter","required":false},{"name":"indexValue","required":false},{"name":"variableType","required":false},{"name":"variableShared","required":false},{"name":"valueSourceMode","required":false},{"name":"literalValue","required":false},{"name":"sourceVariableName","required":false},{"name":"arraySetMode","required":false},{"name":"bulkEntries","required":false},{"name":"startIndexValue","required":false},{"name":"lengthValue","required":false},{"name":"startValue","required":false},{"name":"stepValue","required":false}],"variants":[{"when":{"type":"array_set","arraySetMode":"single"},"absent":["bulkEntries","startIndexValue","lengthValue","startValue","stepValue"],"fields":{"arrayLetter":{"required":false},"indexValue":{"required":true,"tokenBounds":{"kind":"c12d_integer_literal_or_variable","minimum":1,"maximum":4096,"allowBlank":false}},"variableType":{"required":false},"variableShared":{"required":false},"valueSourceMode":{"required":false},"literalValue":{"required":false},"sourceVariableName":{"required":false},"arraySetMode":{"required":true}}},{"when":{"type":"array_set","arraySetMode":"bulk"},"absent":["indexValue","startIndexValue","lengthValue","startValue","stepValue"],"fields":{"arrayLetter":{"required":false},"variableType":{"required":false},"variableShared":{"required":false},"valueSourceMode":{"required":false},"literalValue":{"required":false},"sourceVariableName":{"required":false},"arraySetMode":{"required":true},"bulkEntries":{"required":true}}},{"when":{"type":"array_set","arraySetMode":"fill_range"},"absent":["indexValue","bulkEntries","startValue","stepValue"],"fields":{"arrayLetter":{"required":false},"variableType":{"required":false},"variableShared":{"required":false},"valueSourceMode":{"required":false},"literalValue":{"required":false},"sourceVariableName":{"required":false},"arraySetMode":{"required":true},"startIndexValue":{"required":true,"tokenBounds":{"kind":"c12d_integer_literal_or_variable","minimum":1,"maximum":4096,"allowBlank":false}},"lengthValue":{"required":true,"tokenBounds":{"kind":"c12d_integer_literal_or_variable","minimum":0,"maximum":4096,"allowBlank":false}}}},{"when":{"type":"array_set","arraySetMode":"sequence"},"absent":["indexValue","bulkEntries"],"fields":{"arrayLetter":{"required":false},"variableType":{"required":false},"variableShared":{"required":false},"valueSourceMode":{"required":false},"literalValue":{"required":false},"sourceVariableName":{"required":false},"arraySetMode":{"required":true},"startIndexValue":{"required":true,"tokenBounds":{"kind":"c12d_integer_literal_or_variable","minimum":1,"maximum":4096,"allowBlank":false}},"lengthValue":{"required":true,"tokenBounds":{"kind":"c12d_integer_literal_or_variable","minimum":0,"maximum":4096,"allowBlank":false}},"startValue":{"required":false},"stepValue":{"required":false}}}]},{"position":47,"type":"for_each_index","fields":[{"name":"id","required":true},{"name":"type","required":true},{"name":"nickname","required":true},{"name":"disabled","required":true},{"name":"indexVariableName","required":false},{"name":"startValue","required":false},{"name":"endValue","required":false},{"name":"stepValue","required":false},{"name":"forEachUseStopVariable","required":false},{"name":"stopVariableName","required":false},{"name":"loopDelayMsValue","required":false},{"name":"variableShared","required":false}]},{"position":48,"type":"end_for_each_index","fields":[{"name":"id","required":true},{"name":"type","required":true},{"name":"nickname","required":true},{"name":"disabled","required":true}]},{"position":49,"type":"array_segment_scan","fields":[{"name":"id","required":true},{"name":"type","required":true},{"name":"nickname","required":true},{"name":"disabled","required":true},{"name":"arrayLetter","required":false},{"name":"valueType","required":false},{"name":"startIndexValue","required":false},{"name":"lengthValue","required":false},{"name":"scanDirection","required":false},{"name":"scanMode","required":false},{"name":"emptyValue","required":false},{"name":"matchValueSourceMode","required":false},{"name":"matchValue","required":false},{"name":"sourceVariableName","required":false},{"name":"useFoundOutput","required":false},{"name":"outputFoundVariableName","required":false},{"name":"useIndexOutput","required":false},{"name":"outputIndexVariableName","required":false},{"name":"useValueOutput","required":false},{"name":"outputValueVariableName","required":false},{"name":"useCountOutput","required":false},{"name":"outputCountVariableName","required":false},{"name":"useAddedCountOutput","required":false},{"name":"outputAddedCountVariableName","required":false},{"name":"valueSourceMode","required":false},{"name":"xArrayLetter","required":false},{"name":"yArrayLetter","required":false},{"name":"countVariableName","required":false},{"name":"maxCountValue","required":false},{"name":"outputType","required":false,"schema":{"$ref":"arraySegmentOutputType"}},{"name":"variableShared","required":false}]},{"position":50,"type":"append_points","fields":[{"name":"id","required":true},{"name":"type","required":true},{"name":"nickname","required":true},{"name":"disabled","required":true},{"name":"points","required":false,"schema":{"type":"array","items":{"$ref":"pointRow"},"maxItems":4096}},{"name":"xArrayLetter","required":false},{"name":"yArrayLetter","required":false},{"name":"countVariableName","required":false},{"name":"maxCountValue","required":false},{"name":"useAddedCountOutput","required":false},{"name":"outputAddedCountVariableName","required":false},{"name":"useSuccessOutput","required":false},{"name":"outputSuccessVariableName","required":false},{"name":"appendPointsMode","required":false},{"name":"appendPointsRowsValue","required":false},{"name":"appendPointsColumnsValue","required":false},{"name":"appendPointsLeftValue","required":false},{"name":"appendPointsTopValue","required":false},{"name":"appendPointsXPitchValue","required":false},{"name":"appendPointsYPitchValue","required":false},{"name":"appendPointsXOffsetValue","required":false},{"name":"appendPointsYOffsetValue","required":false},{"name":"appendPointsOrder","required":false},{"name":"variableShared","required":false}],"variants":[{"when":{"type":"append_points","appendPointsMode":"rows"},"absent":["appendPointsRowsValue","appendPointsColumnsValue","appendPointsLeftValue","appendPointsTopValue","appendPointsXPitchValue","appendPointsYPitchValue","appendPointsXOffsetValue","appendPointsYOffsetValue","appendPointsOrder"],"fields":{"appendPointsMode":{"required":true},"points":{"required":false},"xArrayLetter":{"required":false},"yArrayLetter":{"required":false},"countVariableName":{"required":false},"maxCountValue":{"required":false,"tokenBounds":{"kind":"c12d_integer_literal_or_variable","minimum":0,"maximum":4096,"allowBlank":true}},"useAddedCountOutput":{"required":false},"outputAddedCountVariableName":{"required":false},"useSuccessOutput":{"required":false},"outputSuccessVariableName":{"required":false},"variableShared":{"required":false}}},{"when":{"type":"append_points","appendPointsMode":"grid"},"absent":["points"],"fields":{"appendPointsMode":{"required":true},"xArrayLetter":{"required":false},"yArrayLetter":{"required":false},"countVariableName":{"required":false},"maxCountValue":{"required":false,"tokenBounds":{"kind":"c12d_integer_literal_or_variable","minimum":0,"maximum":4096,"allowBlank":true}},"useAddedCountOutput":{"required":false},"outputAddedCountVariableName":{"required":false},"useSuccessOutput":{"required":false},"outputSuccessVariableName":{"required":false},"appendPointsRowsValue":{"required":false,"tokenBounds":{"kind":"c12d_integer_literal_or_variable","minimum":1,"maximum":4096,"allowBlank":true}},"appendPointsColumnsValue":{"required":false,"tokenBounds":{"kind":"c12d_integer_literal_or_variable","minimum":1,"maximum":4096,"allowBlank":true}},"appendPointsLeftValue":{"required":false,"tokenBounds":{"kind":"c12d_integer_literal_or_variable","minimum":-2147483648,"maximum":2147483647,"allowBlank":true}},"appendPointsTopValue":{"required":false,"tokenBounds":{"kind":"c12d_integer_literal_or_variable","minimum":-2147483648,"maximum":2147483647,"allowBlank":true}},"appendPointsXPitchValue":{"required":false,"tokenBounds":{"kind":"c12d_integer_literal_or_variable","minimum":-2147483648,"maximum":2147483647,"allowBlank":true}},"appendPointsYPitchValue":{"required":false,"tokenBounds":{"kind":"c12d_integer_literal_or_variable","minimum":-2147483648,"maximum":2147483647,"allowBlank":true}},"appendPointsXOffsetValue":{"required":false,"tokenBounds":{"kind":"c12d_integer_literal_or_variable","minimum":-2147483648,"maximum":2147483647,"allowBlank":true}},"appendPointsYOffsetValue":{"required":false,"tokenBounds":{"kind":"c12d_integer_literal_or_variable","minimum":-2147483648,"maximum":2147483647,"allowBlank":true}},"appendPointsOrder":{"required":false},"variableShared":{"required":false}}}]},{"position":51,"type":"device_settings","fields":[{"name":"id","required":true},{"name":"type","required":true},{"name":"nickname","required":true},{"name":"disabled","required":true},{"name":"deviceSettingsFrames","required":false},{"name":"deviceSettingsFacts","required":false}],"mutationRequiredFields":["deviceSettingsFrames","deviceSettingsFacts"]},{"position":52,"type":"pinch","fields":[{"name":"id","required":true},{"name":"type","required":true},{"name":"nickname","required":true},{"name":"disabled","required":true},{"name":"gestureStrokes","required":false},{"name":"gestureConcurrent","required":false}]},{"position":53,"type":"ui_find","fields":[{"name":"id","required":true},{"name":"type","required":true},{"name":"nickname","required":true},{"name":"disabled","required":true},{"name":"uiFindQuery","required":false},{"name":"uiFindTarget","required":false},{"name":"uiFindMatchMode","required":false},{"name":"uiFindNthValue","required":false,"schema":{"$ref":"positiveInt32String"}},{"name":"uiFindEnabledOnly","required":false},{"name":"uiFindClickableOnly","required":false},{"name":"uiFindVisibleOnly","required":false},{"name":"uiFindPackageFilter","required":false},{"name":"uiFindTapMode","required":false},{"name":"uiFindSetMatchedText","required":false},{"name":"uiFindMatchedTextVariableName","required":false},{"name":"setVariables","required":false},{"name":"returnXY","required":false},{"name":"clickIfFound","required":false},{"name":"variableName","required":false},{"name":"xVariableName","required":false},{"name":"yVariableName","required":false},{"name":"variableShared","required":false}]},{"position":54,"type":"device_intent_action","fields":[{"name":"id","required":true},{"name":"type","required":true},{"name":"nickname","required":true},{"name":"disabled","required":true},{"name":"deviceIntentMode","required":false},{"name":"deviceIntentUri","required":false},{"name":"deviceIntentSettingsAction","required":false},{"name":"devicePackageName","required":false},{"name":"deviceAppLabel","required":false},{"name":"deviceIntentEmailTo","required":false},{"name":"deviceIntentSubject","required":false},{"name":"deviceIntentBody","required":false},{"name":"deviceIntentPhoneNumber","required":false},{"name":"deviceIntentSmsBody","required":false},{"name":"deviceIntentShareText","required":false}]},{"position":55,"type":"device_system_nav","fields":[{"name":"id","required":true},{"name":"type","required":true},{"name":"nickname","required":true},{"name":"disabled","required":true},{"name":"deviceSystemNavAction","required":false}]},{"position":56,"type":"http","fields":[{"name":"id","required":true},{"name":"type","required":true},{"name":"nickname","required":true},{"name":"disabled","required":true},{"name":"httpMethod","required":false},{"name":"httpUrlSourceMode","required":false},{"name":"httpUrlValue","required":false},{"name":"httpUrlVariableName","required":false},{"name":"httpHeaders","required":false},{"name":"httpBodySourceMode","required":false},{"name":"httpBodyValue","required":false},{"name":"httpBodyVariableName","required":false},{"name":"httpTimeoutMsValue","required":false},{"name":"httpSaveSuccess","required":false},{"name":"httpSuccessVariableName","required":false},{"name":"httpSaveStatus","required":false},{"name":"httpStatusVariableName","required":false},{"name":"httpSaveBody","required":false},{"name":"httpBodyOutputVariableName","required":false},{"name":"httpSaveError","required":false},{"name":"httpErrorVariableName","required":false},{"name":"variableShared","required":false}]},{"position":57,"type":"clipboard","fields":[{"name":"id","required":true},{"name":"type","required":true},{"name":"nickname","required":true},{"name":"disabled","required":true},{"name":"clipboardMode","required":false},{"name":"clipboardOutputVariableName","required":false},{"name":"clipboardTextSourceMode","required":false},{"name":"clipboardTextValue","required":false},{"name":"clipboardTextVariableName","required":false},{"name":"clipboardSaveSuccess","required":false},{"name":"clipboardSuccessVariableName","required":false},{"name":"clipboardSaveError","required":false},{"name":"clipboardErrorVariableName","required":false},{"name":"variableShared","required":false}]},{"position":58,"type":"file","forbiddenFieldValueCombinations":[{"fileMode":"append","fileFormat":"json"}],"fields":[{"name":"id","required":true},{"name":"type","required":true},{"name":"nickname","required":true},{"name":"disabled","required":true},{"name":"fileMode","required":false},{"name":"fileFormat","required":false},{"name":"fileUri","required":false},{"name":"fileDisplayName","required":false},{"name":"fileMimeType","required":false},{"name":"fileHasReadAccess","required":false},{"name":"fileHasWriteAccess","required":false},{"name":"fileSaveSuccess","required":false},{"name":"fileSuccessVariableName","required":false},{"name":"fileSaveError","required":false},{"name":"fileErrorVariableName","required":false},{"name":"fileReadTextOutputVariableName","required":false},{"name":"fileCsvReadMode","required":false},{"name":"fileCsvRowValue","required":false},{"name":"fileCsvColumnSourceMode","required":false},{"name":"fileCsvColumnValue","required":false},{"name":"fileCsvColumnHeaderName","required":false},{"name":"fileCsvArrayValueCount","required":false},{"name":"fileCsvOutputStartIndexValue","required":false},{"name":"fileCsvCellOutputVariableName","required":false},{"name":"fileCsvArrayOutputLetter","required":false},{"name":"fileAppendTextSourceMode","required":false},{"name":"fileAppendTextValue","required":false},{"name":"fileAppendTextVariableName","required":false},{"name":"fileAppendNewline","required":false},{"name":"fileAppendCsvSourceMode","required":false},{"name":"fileAppendCsvRowValue","required":false},{"name":"fileAppendCsvRowVariableName","required":false},{"name":"fileAppendCsvEnsureNewRow","required":false},{"name":"fileCreateNameSourceMode","required":false},{"name":"fileCreateNameValue","required":false},{"name":"fileCreateNameVariableName","required":false},{"name":"fileCreateTextSourceMode","required":false},{"name":"fileCreateTextValue","required":false},{"name":"fileCreateTextVariableName","required":false},{"name":"fileCreateCsvSourceMode","required":false},{"name":"fileCreateCsvTextValue","required":false},{"name":"fileCreateCsvArrayLetter","required":false},{"name":"fileCreateCsvArrayStartIndexValue","required":false},{"name":"fileCreateCsvArrayValueCount","required":false},{"name":"fileCreateJsonSourceMode","required":false},{"name":"fileCreateJsonValue","required":false},{"name":"fileCreateJsonVariableName","required":false},{"name":"fileCreateIfExistsMode","required":false},{"name":"fileCreateNewNameMode","required":false},{"name":"fileSaveFinalName","required":false},{"name":"fileFinalNameVariableName","required":false},{"name":"fileSaveFinalUri","required":false},{"name":"fileFinalUriVariableName","required":false},{"name":"variableShared","required":false}]},{"position":59,"type":"text_transform","fields":[{"name":"id","required":true},{"name":"type","required":true},{"name":"nickname","required":true},{"name":"disabled","required":true},{"name":"textTransformSpec","required":false},{"name":"variableShared","required":false}]},{"position":60,"type":"ocr","fields":[{"name":"id","required":true},{"name":"type","required":true},{"name":"nickname","required":true},{"name":"disabled","required":true},{"name":"ocrMode","required":false,"schema":{"type":"string","enum":["read","find"]}},{"name":"ocrLeftValue","required":false,"schema":{"$ref":"incompleteNonNegativeInt32OrIntegerVariableToken"}},{"name":"ocrTopValue","required":false,"schema":{"$ref":"incompleteNonNegativeInt32OrIntegerVariableToken"}},{"name":"ocrRightValue","required":false,"schema":{"$ref":"incompleteNonNegativeInt32OrIntegerVariableToken"}},{"name":"ocrBottomValue","required":false,"schema":{"$ref":"incompleteNonNegativeInt32OrIntegerVariableToken"}},{"name":"ocrQuerySourceMode","required":false},{"name":"ocrQueryValue","required":false},{"name":"ocrQueryVariableName","required":false},{"name":"ocrMatchMode","required":false},{"name":"ocrCaseSensitive","required":false},{"name":"ocrTextUnit","required":false},{"name":"ocrTextScript","required":false},{"name":"ocrMatchIndexValue","required":false,"schema":{"$ref":"incompletePositiveInt32OrIntegerVariableToken"}},{"name":"ocrTapIfFound","required":false},{"name":"findAll","required":false},{"name":"findFirstRightToLeft","required":false},{"name":"findFirstBottomToTop","required":false},{"name":"clickTargetCenter","required":false},{"name":"clickTargetXValue","required":false,"schema":{"$ref":"incompleteNonNegativeInt32OrIntegerVariableToken"}},{"name":"clickTargetYValue","required":false,"schema":{"$ref":"incompleteNonNegativeInt32OrIntegerVariableToken"}},{"name":"ocrSaveFound","required":false},{"name":"ocrFoundVariableName","required":false},{"name":"ocrSaveText","required":false},{"name":"ocrTextVariableName","required":false},{"name":"ocrSaveX","required":false},{"name":"ocrXVariableName","required":false},{"name":"ocrSaveY","required":false},{"name":"ocrYVariableName","required":false},{"name":"ocrSaveError","required":false},{"name":"ocrErrorVariableName","required":false},{"name":"ocrReadOutputVariableName","required":false},{"name":"ocrReadSaveSuccess","required":false},{"name":"ocrReadSuccessVariableName","required":false},{"name":"ocrReadSaveError","required":false},{"name":"ocrReadErrorVariableName","required":false},{"name":"variableShared","required":false}]},{"position":61,"type":"alert","fields":[{"name":"id","required":true},{"name":"type","required":true},{"name":"nickname","required":true},{"name":"disabled","required":true},{"name":"alertMode","required":false},{"name":"alertSourceType","required":false},{"name":"alertFileUri","required":false},{"name":"alertFileDisplayName","required":false},{"name":"alertFileMimeType","required":false},{"name":"alertFileHasReadAccess","required":false},{"name":"alertRingtoneUri","required":false},{"name":"alertRingtoneLabel","required":false},{"name":"alertPlayMode","required":false},{"name":"alertLoopTimeoutMsValue","required":false},{"name":"alertSoundExecution","required":false},{"name":"alertVolumeMode","required":false},{"name":"alertVolumePercentValue","required":false},{"name":"alertRestoreVolume","required":false},{"name":"alertSaveSuccess","required":false},{"name":"alertSuccessVariableName","required":false},{"name":"alertSaveError","required":false},{"name":"alertErrorVariableName","required":false},{"name":"variableShared","required":false}]},{"position":62,"type":"reader","fields":[{"name":"id","required":true},{"name":"type","required":true},{"name":"nickname","required":true},{"name":"disabled","required":true},{"name":"readerSpec","required":false},{"name":"variableShared","required":false}]},{"position":63,"type":"json","fields":[{"name":"id","required":true},{"name":"type","required":true},{"name":"nickname","required":true},{"name":"disabled","required":true},{"name":"jsonSpec","required":false},{"name":"variableShared","required":false}]},{"position":64,"type":"translate","fields":[{"name":"id","required":true},{"name":"type","required":true},{"name":"nickname","required":true},{"name":"disabled","required":true},{"name":"translateSourceVariableName","required":false},{"name":"translateTargetVariableName","required":false},{"name":"translateSourceLanguageTag","required":false},{"name":"translateTargetLanguageTag","required":false},{"name":"variableShared","required":false}]},{"position":65,"type":"display","fields":[{"name":"id","required":true},{"name":"type","required":true},{"name":"nickname","required":true},{"name":"disabled","required":true},{"name":"displaySpec","required":false}]},{"position":66,"type":"touch_down","fields":[{"name":"id","required":true},{"name":"type","required":true},{"name":"nickname","required":true},{"name":"disabled","required":true},{"name":"touchXValue","required":false,"schema":{"$ref":"incompleteNonNegativeInt32OrIntegerVariableToken"}},{"name":"touchYValue","required":false,"schema":{"$ref":"incompleteNonNegativeInt32OrIntegerVariableToken"}}]},{"position":67,"type":"touch_move","fields":[{"name":"id","required":true},{"name":"type","required":true},{"name":"nickname","required":true},{"name":"disabled","required":true},{"name":"touchXValue","required":false,"schema":{"$ref":"incompleteNonNegativeInt32OrIntegerVariableToken"}},{"name":"touchYValue","required":false,"schema":{"$ref":"incompleteNonNegativeInt32OrIntegerVariableToken"}},{"name":"touchMoveTimeMsValue","required":false}],"variants":[{"when":{"type":"touch_move"},"fields":{"touchMoveTimeMsValue":{"tokenBounds":{"kind":"integer_literal_or_variable","minimum":0,"maximum":2147483647,"allowBlank":true}},"touchXValue":{"required":false},"touchYValue":{"required":false}}}]},{"position":68,"type":"end_touch","fields":[{"name":"id","required":true},{"name":"type","required":true},{"name":"nickname","required":true},{"name":"disabled","required":true}]},{"position":69,"type":"set_coordinates","fields":[{"name":"id","required":true},{"name":"type","required":true},{"name":"nickname","required":true},{"name":"disabled","required":true},{"name":"setCoordinatesMode","required":false},{"name":"setCoordinatesPointX","required":false},{"name":"setCoordinatesPointY","required":false},{"name":"setCoordinatesAreaLeft","required":false},{"name":"setCoordinatesAreaTop","required":false},{"name":"setCoordinatesAreaRight","required":false},{"name":"setCoordinatesAreaBottom","required":false},{"name":"setCoordinatesPointXVariableName","required":false},{"name":"setCoordinatesPointYVariableName","required":false},{"name":"setCoordinatesAreaLeftVariableName","required":false},{"name":"setCoordinatesAreaTopVariableName","required":false},{"name":"setCoordinatesAreaRightVariableName","required":false},{"name":"setCoordinatesAreaBottomVariableName","required":false},{"name":"variableShared","required":false}]},{"position":70,"type":"state_get","fields":[{"name":"id","required":true},{"name":"type","required":true},{"name":"nickname","required":true},{"name":"disabled","required":true},{"name":"stateGetFrames","required":false},{"name":"stateGetOutputs","required":false},{"name":"stateGetSampleTimeMsValue","required":false}],"variants":[{"when":{"type":"state_get"},"contains":{"stateGetFrames":{"key":"network_traffic","enabled":true}},"fields":{"stateGetFrames":{"required":true},"stateGetOutputs":{"required":false},"stateGetSampleTimeMsValue":{"required":true,"tokenBounds":{"kind":"integer_literal","minimum":250,"maximum":60000,"allowBlank":false}}}},{"when":{"type":"state_get"},"notContains":{"stateGetFrames":{"key":"network_traffic","enabled":true}},"fields":{"stateGetFrames":{"required":true},"stateGetOutputs":{"required":false},"stateGetSampleTimeMsValue":{"required":false}}}],"mutationRequiredFields":["stateGetFrames","stateGetOutputs","stateGetSampleTimeMsValue"]},{"position":71,"type":"use_action","fields":[{"name":"id","required":true},{"name":"type","required":true},{"name":"nickname","required":true},{"name":"disabled","required":true},{"name":"useActionMode","required":false},{"name":"useActionFacts","required":false},{"name":"variableShared","required":false}],"mutationRequiredFields":["useActionMode","useActionFacts"]},{"position":72,"type":"gestures","fields":[{"name":"id","required":true},{"name":"type","required":true},{"name":"nickname","required":true},{"name":"disabled","required":true},{"name":"gestureLanes","required":false}],"mutationRequiredFields":["gestureLanes"]}]},"packageContract":{"format":"scripttap-ai-json-contract","version":1,"scriptPackage":{"requiredLiteralFields":{"format":"scripttap-json-script","version":2,"kind":"script_package"},"topLevelFields":["format","version","kind","packageId","createdAtMs","source","rootClientId","requirements","folders","scripts","assetRequirements","notes"],"allowedSourceValues":["user_export","ai_generated","script_builder"],"requirementsFields":["commandCatalogVersion","requiresUserCompletion","requiresAssets"],"folderFields":["id","name","parentId"],"scriptFields":["clientId","uploadMode","name","folderId","disabled","commands"],"assetRequirementFields":["scriptId","commandId","commandType","assetName","reason"],"allowedAssetRequirementReasons":["user_must_capture","user_must_attach_existing","source_export_requires_recapture","ai_cannot_provide"],"idPrefixes":{"packageId":"pkg_","scriptId":"script_","folderId":"folder_","commandId":"cmd_"},"idAllowedCharacters":"A-Z a-z 0-9 _ -","idSemantics":{"scriptPackageIdsArePackageLocal":true,"notLiveAppScriptIds":true,"importAssignsFreshRealAppIds":true,"inPackageScriptReferencesRemapThroughPackageIds":true},"importValidationSemantics":{"importedPackagesDoNotCarryTrustedValidationOutcomeFields":true,"importedScriptsStartDisabled":true,"readinessIsDerivedLocallyFromSavedCommandGraph":true,"manualImportFormsValidationImmediatelyAfterCanonicalAcceptance":true,"bridgeFullScriptMutationUsesOneTwentySecondValidationQuietDeadline":true,"syntaxAndCallTopologyCheckedBeforeCanonicalAcceptance":true,"dependencyCompletenessIsNotCheckedDuringImport":true,"validPackagesCommitAllOrNothing":true,"admissionIsNotValidationV2Completion":true,"admissionIsNotRunReadiness":true,"nonterminalStateRequiresMutationRetry":false,"onlyTerminalCompleteClearsValidationBlocking":true,"terminalIncompleteRequiresCorrection":true,"runtimePermissionsAndPreflightAreSeparate":true},"nameLimits":{"scriptNameMaxChars":28,"folderNameMaxChars":28,"nicknameMaxChars":20},"valueRules":{"integerLiteralRange":"-2147483648..2147483647","integerLiteralFormat":"signed whole decimal integer only; decimals, blanks, malformed numbers, and overflow values are invalid","variableToken":"Any one ASCII letter plus optional index 1..4096 is a valid variable token. Letters are case-insensitive and canonicalize to lowercase, so D1 and d1 are the same variable. i/d/b/h/s/t are type conventions, not enforced letter types.","booleanLiteralStorage":"Boolean SetVariable variableValue is a JSON String token, for example True or False inside quotes, or an admitted prior variable token. Native JSON Boolean values are not admitted for variableValue. Boolean control fields such as disabled remain native JSON Booleans.","selectedModeFields":"The base command field catalog is a union, not an all-mode allowlist. Select exactly one declared variant. Emit only required common fields, its when keys, and its fields. Omit every inactive field entirely, even if its value would be empty, false, zero, or null. Ordinary non-Time Array SetVariable omits variableValue; Single String Clipboard also omits variableValue.","incompleteDrafts":"Required fields remain present. A blank String is an incomplete draft only when its exact field rule admits blank. Missing, null, wrong-type or inactive fields are not a substitute. If a requested operation cannot be represented safely, return an admitted empty root package and explain the limitation in notes.","recommendationAuthority":"Best practices and example strategies are suggestions, not universally optimal instructions. Exact canonical schema is the final authority over every example, narrative, recommendation and outside source.","contractRevisionRule":"Bridge commandContractSha256 and website commandContractSourceSha256 must match before sources are combined. Equal revisions use identical canonical command data. Older installed builds can expose older revisions; target their actual schema when connected, otherwise declare the current published target in notes. Do not claim cross-version parity.","validatorIdentity":"Declaration order, one lowercase ASCII letter, exact type, and LOCAL/THREAD scope. Every suffix and array slot using that letter shares the family type in its visible scope; Integer d[] means D1/d1 cannot be Decimal there.","scopeWire":"variableShared false means LOCAL and true means THREAD; it is the sole scope wire encoding.","packageMetadataBoundary":"Packages contain no validation status, issue, revision, index, phase, owner state, or other validation outcome metadata."}},"flowPairingRules":["loop pairs with end_loop","for_each_index pairs with end_for_each_index","touch_down pairs with end_touch","pause_concurrent pairs with unpause_concurrent","or pairs with end_or","and pairs with end_and","xor pairs with end_xor","rgb_confidence uses an IF end row and remains inside the IF segment","else may appear only inside an IF segment and before that segment\'s end row"],"assetPolicy":{"jsonContainsAssetBytes":false,"assetReferencesAreNamesOnly":true,"missingAssetsRequireAssetRequirements":true,"assetBackedCommandsWithMissingAssetsMustBeIncomplete":true},"minimalPackage":{"format":"scripttap-json-script","version":2,"kind":"script_package","packageId":"pkg_example","createdAtMs":0,"source":"ai_generated","rootClientId":"script_root","requirements":{"commandCatalogVersion":1,"requiresUserCompletion":false,"requiresAssets":false},"folders":[],"scripts":[{"clientId":"script_root","uploadMode":"new","name":"New Script","folderId":"","disabled":true,"commands":[]}],"assetRequirements":[],"notes":""}},"commandContractSourceSha256":"F89C8BF0C842D03561C450ABD271E392E1FAB68CF4FD14B4F82D8C8A6B41168F","packageContractSourceSha256":"7882EA5C7606A428F77A77224474C4FF3D788CDD99DB7FD3964CD3880C3DB6C8"}') class Invalid(ValueError): def __init__(self, path, message, code="invalid_value"): super().__init__(message) self.path, self.message, self.code = path, message, code def reject(path, message, code="invalid_value"): raise Invalid(path, message, code) def unique_object(pairs): result = {} for key, value in pairs: if key in result: reject("$", "Duplicate JSON field: " + key, "duplicate_field") result[key] = value return result def decode(text): def constant(value): reject("$", "Non-finite JSON number: " + value, "invalid_json") return json.loads(text, object_pairs_hook=unique_object, parse_float=decimal.Decimal, parse_constant=constant) def load_bundle(): if EMBEDDED_BUNDLE is not None: return EMBEDDED_BUNDLE root = pathlib.Path(__file__).resolve().parent.parent raw = (root / "contracts/command_contract_v1.json").read_bytes() package_raw = (root / "contracts/ai_package_contract_v1.json").read_bytes() return {"commandContract": json.loads(raw.decode("utf-8")), "packageContract": json.loads(package_raw.decode("utf-8")), "commandContractSourceSha256": hashlib.sha256(raw).hexdigest().upper(), "packageContractSourceSha256": hashlib.sha256(package_raw).hexdigest().upper()} def java_string(value): if value is True: return "true" if value is False: return "false" return str(value) def text_length(value): return len(value.encode("utf-16-le", errors="surrogatepass")) // 2 def variable(value): if not 1 <= len(value) <= 5: return False match = re.fullmatch(r"[A-Za-z]([0-9]*)", value) return bool(match and (not match[1] or 1 <= int(match[1]) <= 4096)) def number(value): return isinstance(value, (int, decimal.Decimal, float)) and not isinstance(value, bool) def mode_matches(value, rule): if not all(key in value and java_string(value[key]) == expected for key, expected in rule.get("when", {}).items()): return False if any(key in value for key in rule.get("absent", [])): return False def contains(rows, matcher): return isinstance(rows, list) and any(isinstance(row, dict) and all( key in row and java_string(row[key]) == java_string(expected) for key, expected in matcher.items()) for row in rows) return (all(contains(value.get(key), matcher) for key, matcher in rule.get("contains", {}).items()) and all(not contains(value.get(key), matcher) for key, matcher in rule.get("notContains", {}).items())) class Contract: def __init__(self, bundle): self.bundle = bundle self.raw = bundle["commandContract"] self.schemas = self.raw["schemas"] self.fields = self.raw["fieldDefinitions"] self.commands = {row["type"]: row for row in self.raw["commands"]} self.current = self.raw["authoring"]["currentCommandTypes"] def resolve(self, rule): seen = set() while "$ref" in rule: key = rule["$ref"] if key not in self.schemas or key in seen: reject("$contract", "Unresolved or cyclic rule: " + key, "unsupported_contract") seen.add(key) rule = self.schemas[key] return rule def token(self, value, bounds, path): if not isinstance(value, str): reject(path, "Expected a JSON string token", "invalid_type") if value == "" and bounds.get("allowBlank", False): return kind = bounds["kind"] if kind != "string_literal_or_variable" and value != value.strip(): reject(path, "Whitespace is not accepted in this token") if kind == "action_array": if not re.fullmatch(r"[A-Za-z]", value): reject(path, "Expected one array letter") return if kind == "variable_name": if not variable(value): reject(path, "Expected a variable name with index 1..4096") return if kind == "boolean_literal": if value not in ("True", "False"): reject(path, "Expected the string True or False") return typed = {"decimal_literal_or_variable", "boolean_literal_or_variable", "hex_literal_or_variable", "string_literal_or_variable", "time_literal_or_variable", "manual_time_literal_or_variable"} if kind in typed: if value == value.strip() and variable(value): return if kind == "string_literal_or_variable": return if kind == "decimal_literal_or_variable": if not re.fullmatch(r"[+-]?(?:[0-9]+(?:\.[0-9]*)?|\.[0-9]+)(?:[eE][+-]?[0-9]+)?", value): reject(path, "Expected a Decimal literal or variable") elif kind == "boolean_literal_or_variable": if value.lower() not in ("true", "false"): reject(path, "Expected a Boolean string literal or variable") elif kind == "hex_literal_or_variable": cleaned = value[1:] if value.startswith("#") else value if cleaned.lower().startswith("0x"): cleaned = cleaned[2:] if not re.fullmatch(r"[0-9A-Fa-f]{6}", cleaned) and value != "0": reject(path, "Expected six Hex digits or a variable") else: if kind == "time_literal_or_variable" and value.lower() == "current time": return separator = value.find("T") if separator < 0: separator = value.find(" ") date_part, time_part = (value[:separator].strip(), value[separator + 1:].strip()) if separator > 0 else ("", value) try: if date_part: parts = date_part.split("-") if len(parts) != 3 or not all(re.fullmatch(r"[+]?[0-9]+", item) for item in parts): raise ValueError() year, month, day = map(int, parts) if not 1970 <= year <= 9999: raise ValueError() datetime.date(year, month, day) parts = time_part.split(":") if len(parts) not in (2, 3) or not all(re.fullmatch(r"[+-]?[0-9]+", item) for item in parts): raise ValueError() hours, minutes = int(parts[0]), int(parts[1]) seconds = int(parts[2]) if len(parts) == 3 else 0 if not (0 <= hours <= 23 and 0 <= minutes <= 59 and 0 <= seconds <= 59): raise ValueError() except ValueError: reject(path, "Expected a 24-hour HH:mm[:ss] Time token, optionally with YYYY-MM-DD, or an admitted Time variable") return known = {"integer_literal", "unsigned_integer_literal", "signed_integer_or_variable", "integer_literal_or_variable", "c12d_integer_literal_or_variable", "positive_integer_or_variable", "non_negative_integer_or_variable"} if kind not in known: reject(path, "Unsupported token rule: " + kind, "unsupported_contract") if kind not in ("integer_literal", "unsigned_integer_literal") and variable(value): return pattern = r"[0-9]+" if kind == "unsigned_integer_literal" else r"[+-]?[0-9]+" if kind == "c12d_integer_literal_or_variable": pattern = r"-?[0-9]+" if not re.fullmatch(pattern, value): reject(path, "Expected an Integer literal or admitted variable") parsed = int(value) low = bounds.get("minimum", -2147483648) high = bounds.get("maximum", 2147483647) if kind == "positive_integer_or_variable": low = max(1, low) if kind == "non_negative_integer_or_variable": low = max(0, low) if not low <= parsed <= high: reject(path, "Token is outside the allowed range") if kind == "c12d_integer_literal_or_variable" and low >= 0 and value.startswith("-"): reject(path, "A negative spelling is not accepted") def constraint(self, value, entry, path): if "schema" in entry: self.rule(value, entry["schema"], path) if "tokenBounds" in entry: self.token(value, entry["tokenBounds"], path) def rule(self, value, source, path): rule = self.resolve(source) supported = {"type", "oneOf", "enum", "minLength", "maxLength", "pattern", "integerTextMinimum", "integerTextMaximum", "minimum", "maximum", "properties", "required", "additionalProperties", "conditionalRules", "items", "minItems", "maxItems", "ascendingUniqueIntegerProperty", "maximumNestedArrayItems", "strictIntegerTimeline"} if set(rule) - supported: reject(path, "Unimplemented canonical schema keyword", "unsupported_contract") if "oneOf" in rule: # This is the app's custom contract union, not JSON Schema exclusive oneOf. for option in rule["oneOf"]: try: self.rule(value, option, path) return except Invalid as error: if error.code == "unsupported_contract": raise reject(path, "Value matches no admitted schema branch", "invalid_type") kind = rule["type"] ok = {"string": isinstance(value, str), "boolean": isinstance(value, bool), "integer": type(value) is int, "number": number(value), "object": isinstance(value, dict), "array": isinstance(value, list), "null": value is None} if kind not in ok or not ok[kind]: reject(path, "Expected JSON " + kind, "invalid_type") if kind == "string": if "enum" in rule and value not in rule["enum"]: reject(path, "String is not an admitted enum value") if not rule.get("minLength", 0) <= text_length(value) <= rule.get("maxLength", sys.maxsize): reject(path, "String length is outside the allowed range") if "pattern" in rule and re.fullmatch(rule["pattern"], value) is None: reject(path, "String does not match the canonical pattern") if "integerTextMinimum" in rule or "integerTextMaximum" in rule: if not re.fullmatch(r"-?(?:0|[1-9][0-9]*)", value): reject(path, "Expected bounded integer text") if not rule.get("integerTextMinimum", -sys.maxsize) <= int(value) <= rule.get("integerTextMaximum", sys.maxsize): reject(path, "Integer text is outside the allowed range") elif kind in ("integer", "number"): try: finite = math.isfinite(float(value)) except OverflowError: finite = False if not finite: reject(path, "Non-finite numeric field") if not rule.get("minimum", -decimal.Decimal("Infinity")) <= value <= rule.get("maximum", decimal.Decimal("Infinity")): reject(path, "Number is outside the allowed range") elif kind == "object": properties = rule.get("properties", {}) for key in value: if key not in properties: reject(path + "." + key, "Unknown nested field", "unsupported_field") for key in rule.get("required", []): if key not in value: reject(path + "." + key, "Missing required field", "missing_field") for key, item in value.items(): self.rule(item, properties[key], path + "." + key) for conditional in rule.get("conditionalRules", []): if mode_matches(value, conditional): for key, entry in conditional["fields"].items(): if key not in value: reject(path + "." + key, "Missing selected-mode nested field", "missing_field") self.constraint(value[key], entry, path + "." + key) timeline = rule.get("strictIntegerTimeline") if timeline: maximum = int(value[timeline["maximumProperty"]]) last = None for index, row in enumerate(value[timeline["array"]]): raw = row[timeline["property"]] if not isinstance(raw, str) or not re.fullmatch(r"-?(?:0|[1-9][0-9]*)", raw): reject(path, "Timeline values must be canonical integer strings") current = int(raw) if (index == 0 and current != timeline["first"]) or (last is not None and current <= last) or current > maximum: reject(path, "Invalid strict integer timeline") last = current if timeline["lastEquals"] and last != maximum: reject(path, "Timeline must finish at its declared maximum") elif kind == "array": if not rule.get("minItems", 0) <= len(value) <= rule.get("maxItems", sys.maxsize): reject(path, "Array length is outside the allowed range") for index, item in enumerate(value): if item is None: reject(path + "[" + str(index) + "]", "Null array item is not accepted", "invalid_type") self.rule(item, rule["items"], path + "[" + str(index) + "]") key = rule.get("ascendingUniqueIntegerProperty") if key and any(not number(row.get(key)) for row in value): reject(path, "Expected integer ordering keys") if key and any(a[key] >= b[key] for a, b in zip(value, value[1:])): reject(path, "Ordering keys must be strictly ascending and unique") aggregate = rule.get("maximumNestedArrayItems") if aggregate and sum(len(row[aggregate["property"]]) for row in value) > aggregate["maximum"]: reject(path, "Nested row count exceeds the canonical maximum") def command(self, command, path="$.command", transport="package"): if not isinstance(command, dict) or command.get("type") not in self.current: reject(path, "Expected a current authoring command type", "unsupported_command") value = copy.deepcopy(command) kind = value["type"] if transport == "package" and kind in ("call", "stop_call"): if value.get("targetScope") != "package" or "targetMacroId" in value or "targetMacroIds" in value: reject(path, "Manual packages require package-local Call identity") field = "targetClientId" if kind == "call" else "targetClientIds" target = value.pop(field, None) if target is None: reject(path + "." + field, "Missing package target", "missing_field") value.pop("targetScope") value["targetMacroId" if kind == "call" else "targetMacroIds"] = target spec = self.commands[kind] fields = {field["name"]: field for field in spec["fields"]} for key in value: if key not in fields: reject(path + "." + key, "Unknown command field", "unsupported_field") selected = None if "variants" in spec: matching = [variant for variant in spec["variants"] if mode_matches(value, variant)] if len(matching) != 1: reject(path, "Command must match exactly one declared mode", "invalid_mode") selected = matching[0] allowed = {key for key, field in fields.items() if field["required"]} | set(selected["when"]) | set(selected["fields"]) for key in value: if key not in allowed: reject(path + "." + key, "Inactive mode field; omit it entirely", "inactive_field") for key, entry in selected["fields"].items(): if key not in value and entry.get("required", False): reject(path + "." + key, "Missing selected-mode field", "missing_field") if key in value: self.constraint(value[key], entry, path + "." + key) for key, field in fields.items(): if key not in value: if field["required"] or key in spec.get("mutationRequiredFields", []): reject(path + "." + key, "Missing required command field", "missing_field") else: if value[key] is None: reject(path + "." + key, "Null command field is not accepted", "invalid_type") self.rule(value[key], field.get("schema", self.fields.get(key)), path + "." + key) for combination in spec.get("forbiddenFieldValueCombinations", []): matched = True for key, matcher in combination.items(): if key not in value: matched = False break if isinstance(matcher, str): matched = matched and value[key] == matcher else: try: self.rule(value[key], matcher, path + "." + key) except Invalid: matched = False if matched: reject(path, "Forbidden field/value combination") def package(self, value): metadata = self.bundle["packageContract"]["scriptPackage"] def exact(obj, names, path): if not isinstance(obj, dict): reject(path, "Expected an object", "invalid_type") for key in obj: if key not in names: reject(path + "." + key, "Unknown package field", "unsupported_field") for key in names: if key not in obj: reject(path + "." + key, "Missing required package field", "missing_field") def pid(raw, prefix, path): if not isinstance(raw, str) or not raw.startswith(prefix) or not len(prefix) < len(raw) <= 64 or not re.fullmatch(r"[A-Za-z0-9_-]+", raw): reject(path, "Invalid package-local identity") exact(value, metadata["topLevelFields"], "$") for key, literal in metadata["requiredLiteralFields"].items(): if type(value[key]) is not type(literal) or value[key] != literal: reject("$." + key, "Incorrect package format/version/kind") pid(value["packageId"], "pkg_", "$.packageId") pid(value["rootClientId"], "script_", "$.rootClientId") if not number(value["createdAtMs"]): reject("$.createdAtMs", "Expected a JSON number", "invalid_type") if value["source"] not in metadata["allowedSourceValues"]: reject("$.source", "Unknown package source") if not isinstance(value["notes"], str): reject("$.notes", "Expected a string", "invalid_type") req = value["requirements"] exact(req, metadata["requirementsFields"], "$.requirements") if type(req["commandCatalogVersion"]) is not int or req["commandCatalogVersion"] != 1: reject("$.requirements.commandCatalogVersion", "Unsupported command catalog") for key in ("requiresAssets", "requiresUserCompletion"): if not isinstance(req[key], bool): reject("$.requirements." + key, "Expected Boolean", "invalid_type") for key in ("folders", "scripts", "assetRequirements"): if not isinstance(value[key], list): reject("$." + key, "Expected an array", "invalid_type") folders = {} for index, row in enumerate(value["folders"]): path = "$.folders[" + str(index) + "]" exact(row, metadata["folderFields"], path) if not all(isinstance(row[key], str) for key in metadata["folderFields"]): reject(path, "Folder fields must be strings", "invalid_type") pid(row["id"], "folder_", path + ".id") if row["id"] in folders: reject(path, "Duplicate folder identity") folders[row["id"]] = row for row in folders.values(): seen, parent = {row["id"]}, row["parentId"] while parent: if parent not in folders or parent in seen: reject("$.folders", "Unknown or cyclic folder parent") seen.add(parent) parent = folders[parent]["parentId"] scripts, edges, stops = {}, {}, [] starts = {"loop": "end_loop", "or": "end_or", "and": "end_and", "xor": "end_xor", "rgb_confidence": "end_or", "for_each_index": "end_for_each_index", "pause_concurrent": "unpause_concurrent", "touch_down": "end_touch"} ends = set(starts.values()) for index, row in enumerate(value["scripts"]): path = "$.scripts[" + str(index) + "]" exact(row, metadata["scriptFields"], path) for key in ("clientId", "name", "folderId", "uploadMode"): if not isinstance(row[key], str): reject(path + "." + key, "Expected a string", "invalid_type") pid(row["clientId"], "script_", path + ".clientId") if row["clientId"] in scripts: reject(path, "Duplicate script identity") if row["uploadMode"] != "new" or not isinstance(row["disabled"], bool): reject(path, "Expected uploadMode new and a Boolean disabled field") if row["folderId"] and row["folderId"] not in folders: reject(path + ".folderId", "Unknown folder") if not isinstance(row["commands"], list): reject(path + ".commands", "Expected command array", "invalid_type") ids, stack, children = set(), [], [] for ordinal, command in enumerate(row["commands"]): cp = path + ".commands[" + str(ordinal) + "]" self.command(command, cp) pid(command["id"], "cmd_", cp + ".id") if command["id"] in ids: reject(cp + ".id", "Duplicate command identity") ids.add(command["id"]) kind = command["type"] if kind in starts: stack.append([starts[kind], False]) elif kind in ends: if not stack or stack[-1][0] != kind: reject(cp, "Unmatched or crossed block end") stack.pop() elif kind == "else": if not stack or stack[-1][0] not in ("end_or", "end_and", "end_xor") or stack[-1][1]: reject(cp, "ELSE is outside an IF or is duplicated") stack[-1][1] = True if kind == "call": target = command["targetClientId"] pid(target, "script_", cp + ".targetClientId") if target not in scripts: reject(cp, "Call target must occur earlier in scripts[]") children.append(target) elif kind == "stop_call": targets = command["targetClientIds"] if not isinstance(targets, list) or not targets: reject(cp, "Stop Call requires package targets") stops.append((row["clientId"], targets, cp)) if stack: reject(path + ".commands", "Unclosed command block") scripts[row["clientId"]] = row edges[row["clientId"]] = children if value["rootClientId"] not in scripts: reject("$.rootClientId", "Root script does not exist") parent = {} for source, children in edges.items(): for target in children: if target in parent and parent[target] != source: reject("$.scripts", "Call target has multiple parents") parent[target] = source for source, targets, path in stops: if any(target not in edges[source] for target in targets): reject(path, "Stop Call must address a directly called child") def visit(identity, ancestors): if identity in ancestors or len(ancestors) >= 5: reject("$.scripts", "Cyclic Call tree or more than five script layers") found = {identity} for target in set(edges[identity]): found |= visit(target, ancestors + [identity]) return found if visit(value["rootClientId"], []) != set(scripts): reject("$.scripts", "Package must contain one complete root Call tree") for index, row in enumerate(value["assetRequirements"]): path = "$.assetRequirements[" + str(index) + "]" exact(row, metadata["assetRequirementFields"], path) if not all(isinstance(item, str) for item in row.values()): reject(path, "Asset requirement fields must be strings") pid(row["scriptId"], "script_", path + ".scriptId") pid(row["commandId"], "cmd_", path + ".commandId") if row["commandType"] not in self.current or not row["assetName"].strip() or row["reason"] not in metadata["allowedAssetRequirementReasons"]: reject(path, "Invalid asset requirement") def result_for(contract, value, command_only=False): try: (contract.command if command_only else contract.package)(value) return {"schemaValid": True, "commandContractSourceSha256": contract.bundle["commandContractSourceSha256"], "checks": ["canonical command fields/types/nesting/modes/bounds"] + ([] if command_only else ["package shape/identity/folders/blocks/Call tree"]), "appImportExecuted": False, "runtimeReadinessChecked": False, "qualification": "Published canonical-contract preflight; not an Android import, storage, permission, asset-byte or executable-completeness check."} except Invalid as error: return {"schemaValid": False, "errors": [{"path": error.path, "code": error.code, "message": error.message}]} def main(): parser = argparse.ArgumentParser(description=__doc__) parser.add_argument("file", nargs="?", help="Finished .scripttap.json file; - reads stdin") parser.add_argument("--command", action="store_true", help="Check a command snippet, not a complete package") parser.add_argument("--resources", action="store_true", help=argparse.SUPPRESS) args = parser.parse_args() bundle = load_bundle() contract = Contract(bundle) if args.resources: resources = generate_resources(contract) print(json.dumps(resources, ensure_ascii=True, separators=(",", ":"))) return if not args.file: parser.error("provide a file, or - for stdin") try: raw = sys.stdin.buffer.read() if args.file == "-" else pathlib.Path(args.file).read_bytes() answer = result_for(contract, decode(raw.decode("utf-8-sig")), args.command) except (Invalid, UnicodeError, ValueError, OSError, RecursionError, OverflowError) as error: answer = {"schemaValid": False, "errors": [{"path": getattr(error, "path", "$"), "code": getattr(error, "code", "invalid_json"), "message": str(error)}]} print(json.dumps(answer, ensure_ascii=True, indent=2)) sys.exit(0 if answer["schemaValid"] else 1) # Resource generation helpers are below; the same engine checks every emitted example. def sample(contract, source, overrides=None, constraint=None): rule = contract.resolve(source) if "oneOf" in rule: for option in rule["oneOf"]: try: value = sample(contract, option, overrides, constraint) contract.rule(value, rule, "$example") return value except Invalid: pass reject("$example", "Could not derive a union example", "example_generation") kind = rule["type"] if kind == "object": value = {} for key in rule.get("required", []): value[key] = sample(contract, rule["properties"][key]) value.update(copy.deepcopy(overrides or {})) for _ in range(4): for conditional in rule.get("conditionalRules", []): if mode_matches(value, conditional): for key, entry in conditional["fields"].items(): if key not in value: value[key] = sample(contract, rule["properties"][key], constraint=entry) else: try: contract.constraint(value[key], entry, "$example." + key) except Invalid: value[key] = sample(contract, rule["properties"][key], constraint=entry) timeline = rule.get("strictIntegerTimeline") if timeline: maximum = max(1, int(value[timeline["maximumProperty"]])) value[timeline["maximumProperty"]] = str(maximum) rows = value[timeline["array"]] for index, row in enumerate(rows): row[timeline["property"]] = str(timeline["first"] if index == 0 else maximum) elif kind == "array": value = [sample(contract, rule["items"]) for _ in range(rule.get("minItems", 0))] ordering = rule.get("ascendingUniqueIntegerProperty") if ordering: for index, row in enumerate(value): row[ordering] = index + 1 elif kind == "string": candidates = list(rule.get("enum", [])) if constraint and "tokenBounds" in constraint: bound = constraint["tokenBounds"] token_kind = bound["kind"] if bound.get("allowBlank"): candidates.insert(0, "") candidates += [str(bound.get("minimum", 1)), "a", "a1", "True", "000000", "12:00:00"] if token_kind == "string_literal_or_variable": candidates.append("Example") candidates += [str(rule.get("integerTextMinimum", 1)), "", "0", "1", "100", "1000", "10000", "a", "a1", "s1", "i1", "b1", "True", "False", "000000", "Example", "12:00:00"] for candidate in candidates: try: contract.rule(candidate, rule, "$example") if constraint: contract.constraint(candidate, constraint, "$example") return candidate except Invalid: pass reject("$example", "Could not derive string example for " + json.dumps(rule), "example_generation") elif kind in ("integer", "number"): value = rule.get("minimum", 0) elif kind == "boolean": value = False else: value = None contract.rule(value, rule, "$example") if constraint: contract.constraint(value, constraint, "$example") return value def nested_cases(contract, source, label="field", depth=0): if depth > 12: reject("$example", "Recursive example schema", "example_generation") rule = contract.resolve(source) values = [(label + ":base", sample(contract, rule))] if "oneOf" in rule: values = [] for index, option in enumerate(rule["oneOf"]): values += nested_cases(contract, option, label + ":union" + str(index + 1), depth + 1) elif rule["type"] == "object": for index, conditional in enumerate(rule.get("conditionalRules", [])): overrides = {} for key, raw in conditional["when"].items(): resolved = contract.resolve(rule["properties"][key]) overrides[key] = raw == "true" if resolved.get("type") == "boolean" else raw values.append((label + ":condition" + str(index + 1), sample(contract, rule, overrides))) for key, child in rule.get("properties", {}).items(): resolved = contract.resolve(child) if any(name in resolved for name in ("oneOf", "conditionalRules", "properties", "items")): for child_label, item in nested_cases(contract, child, label + "." + key, depth + 1): values.append((child_label, sample(contract, rule, {key: item}))) elif rule["type"] == "array" and rule.get("maxItems", 1) > 0: for child_label, item in nested_cases(contract, rule["items"], label + "[]", depth + 1): rows = copy.deepcopy(values[0][1]) or [item] rows[0] = item key = rule.get("ascendingUniqueIntegerProperty") if key: for index, row in enumerate(rows): row[key] = index + 1 try: contract.rule(rows, rule, "$example") values.append((child_label, rows)) except Invalid: # A branch may conflict with its enclosing array's admitted shape. continue unique = {} for name, value in values: unique.setdefault(json.dumps(value, sort_keys=True), (name, value)) return list(unique.values()) def command_example(contract, spec, variant=None): fields = {field["name"]: field for field in spec["fields"]} required = {key for key, field in fields.items() if field["required"]} | set(spec.get("mutationRequiredFields", [])) if variant: required |= set(variant["when"]) | {key for key, rule in variant["fields"].items() if rule.get("required")} value = {key: sample(contract, fields[key].get("schema", contract.fields.get(key)), constraint=variant.get("fields", {}).get(key) if variant else None) for key in sorted(required)} value.update({"id": "cmd_example", "type": spec["type"], "nickname": ("ai!" + spec["type"])[:20], "disabled": True}) if variant: for key, raw in variant["when"].items(): rule = contract.resolve(fields[key].get("schema", contract.fields.get(key))) value[key] = raw == "true" if rule.get("type") == "boolean" else raw for key, matcher in variant.get("contains", {}).items(): items_rule = contract.resolve(fields[key].get("schema", contract.fields.get(key)))["items"] row = sample(contract, items_rule, matcher) value[key] = [row] if spec["type"] in ("call", "stop_call"): field = "targetMacroId" if spec["type"] == "call" else "targetMacroIds" value.pop(field, None) value["targetClientId" if spec["type"] == "call" else "targetClientIds"] = "script_child" if spec["type"] == "call" else ["script_child"] value["targetScope"] = "package" contract.command(value) return value def generate_resources(contract): bundle = contract.bundle resources, entries, example_count = {}, {}, 0 semantics = { "authority": "For the SAME contract revision, canonical command rules are identical to Bridge /health.commandContract and website commandContract. Compare Bridge commandContractSha256 with website commandContractSourceSha256; never mix older app revisions with current website rules. Package-only Call identity is an explicit transport mapping, not a different command rule.", "customContractNotStandardJsonSchema": True, "baseOptionalDoesNotMeanAllowedInEveryMode": True, "variantSelection": "Exactly one matching when/absent/contains/notContains variant. Allowed = required common fields + selected when keys + selected fields. All other fields are forbidden, even blank, false or null.", "selectorTypes": "Canonical when values are matcher text, not payload JSON types. Use payloadDiscriminators and the exact field schema: a Boolean matcher written as the text true/false requires native JSON true/false in a Boolean payload field, not a quoted string. Nested condition matchers follow the same rule.", "nestedConditions": "Every matching nested conditional requires and constrains all fields it names. Ordinary toggle retention is not a true-mode switch.", "unionSemantics": "Custom oneOf accepts any matching branch, as the app does; it is not exclusive JSON Schema oneOf.", "drafts": "Required fields remain present. Empty strings are drafts only where explicitly admitted. Examples are schema-valid snippets, not complete packages, granted capabilities or runnable scripts. Rename example IDs uniquely when composing a script/package.", "bestPractices": "Suggestions only, not necessarily suitable for every request. Exact schema always wins.", "callPackageMapping": {"call": {"targetScope": "package", "targetClientId": "maps to canonical targetMacroId"}, "stop_call": {"targetScope": "package", "targetClientIds": "maps to canonical targetMacroIds"}} } token_semantics = { "combination": "Base field schema AND every matching selected-mode/nested constraint apply together. allowBlank admits exactly an empty String before token checking. A token is not proof that a variable has been declared with the needed type/scope. Respect each field's source mode; never convert a literal to a variable by guessing.", "action_array": "One ASCII letter; case-insensitive family identity.", "variable_name": "One ASCII letter with optional decimal index 1..4096, at most five characters; exact type/scope/declaration completeness is separate.", "integer_literal": "Signed 32-bit whole decimal String, optional + or -; obey attached minimum/maximum.", "unsigned_integer_literal": "Digits-only Integer String, no sign; obey attached minimum/maximum.", "signed_integer_or_variable": "Signed 32-bit Integer String or admitted Integer-variable token; attached bounds still apply.", "integer_literal_or_variable": "Signed 32-bit Integer String or admitted Integer-variable token; attached bounds still apply.", "c12d_integer_literal_or_variable": "Integer String spelling -?[0-9]+ or Integer-variable token. No leading +. A negative spelling is forbidden when minimum is nonnegative, even -0. Attached bounds apply.", "positive_integer_or_variable": "Integer String strictly greater than zero or admitted Integer-variable token; attached bounds apply.", "non_negative_integer_or_variable": "Integer String at least zero or admitted Integer-variable token; attached bounds apply.", "decimal_literal_or_variable": "Decimal String with period radix and optional sign/exponent, or admitted Decimal variable. NaN and Infinity are not literal spellings. Canonicalization/runtime behavior is documented separately.", "boolean_literal": "Exact JSON String True or False (quoted), not native JSON Boolean.", "boolean_literal_or_variable": "Case-insensitive true/false String or admitted Boolean-variable token; not native JSON Boolean.", "hex_literal_or_variable": "Six Hex digits, optionally # and/or 0x prefixed, zero literal 0, or admitted Hex variable. An attached field pattern can be narrower and must also pass.", "string_literal_or_variable": "Exact String, including whitespace; the owning source mode determines interpretation. Do not trim literal text.", "time_literal_or_variable": "24-hour HH:mm or HH:mm:ss, optionally prefixed by YYYY-MM-DD and space/T, or Current Time, or admitted Time variable. No AM/PM suffix in the wire token; editor clock widgets are separate.", "manual_time_literal_or_variable": "Same 24-hour/date Time grammar or prior Time variable, but Current Time is forbidden. Do not append AM/PM to the wire token." } for kind in contract.current: spec = contract.commands[kind] fields = {field["name"]: field for field in spec["fields"]} schemas = {key: field.get("schema", contract.fields.get(key)) for key, field in fields.items()} refs = {} def collect(item): if isinstance(item, dict): if "$ref" in item and item["$ref"] not in refs: refs[item["$ref"]] = contract.schemas[item["$ref"]] collect(refs[item["$ref"]]) for child in item.values(): collect(child) elif isinstance(item, list): for child in item: collect(child) collect(schemas) collect(spec) profiles, examples, seen = [], [], set() variants = spec.get("variants", [None]) for index, variant in enumerate(variants): allowed = set(fields) if variant is None else ({key for key, field in fields.items() if field["required"]} | set(variant["when"]) | set(variant["fields"])) required = {key for key, field in fields.items() if field["required"]} | set(spec.get("mutationRequiredFields", [])) if variant: required |= set(variant["when"]) | {key for key, entry in variant["fields"].items() if entry.get("required")} example = command_example(contract, spec, variant) profile = {"mode": index + 1, "selector": variant or {"when": {"type": kind}}, "bridgeAllowedFields": sorted(allowed), "bridgeRequiredFields": sorted(required), "bridgeForbiddenFields": sorted(set(fields) - allowed), "packageExample": example} profile["payloadDiscriminators"] = {key: example[key] for key in (variant["when"] if variant else ["type"])} package_allowed, package_required = set(allowed), set(required) package_schemas = copy.deepcopy(schemas) if kind in ("call", "stop_call"): before = "targetMacroId" if kind == "call" else "targetMacroIds" after = "targetClientId" if kind == "call" else "targetClientIds" package_allowed.discard(before) package_required.discard(before) package_allowed |= {"targetScope", after} package_required |= {"targetScope", after} package_schemas[after] = package_schemas.pop(before) package_schemas["targetScope"] = {"type": "string", "enum": ["package"]} profile["packageAllowedFields"] = sorted(package_allowed) profile["packageRequiredFields"] = sorted(package_required) profile["packageForbiddenFields"] = sorted((set(fields) | {"targetScope", "targetClientId", "targetClientIds"}) - package_allowed) profiles.append(profile) candidates = [("mode" + str(index + 1), example)] for key in sorted(allowed - {"id", "type", "nickname", "disabled"}): if key not in schemas or kind in ("call", "stop_call"): continue rule = contract.resolve(schemas[key]) if not any(name in rule for name in ("oneOf", "conditionalRules", "properties", "items")): continue for name, item in nested_cases(contract, rule, key): modified = copy.deepcopy(example) modified[key] = item try: contract.command(modified) candidates.append(("mode" + str(index + 1) + ":" + name, modified)) except Invalid: continue for name, candidate in candidates: identity = json.dumps(candidate, sort_keys=True) if identity not in seen: seen.add(identity) examples.append({"case": name, "kind": "command-snippet-draft", "standalonePackage": False, "runtimeReady": False, "command": candidate}) resource = {"format": "scripttap-command-authoring-v1", "type": kind, "commandContractSourceSha256": bundle["commandContractSourceSha256"], "semantics": semantics, "tokenRuleSemantics": token_semantics, "canonicalBridgeCommand": spec, "fieldSchemas": schemas, "packageFieldSchemas": package_schemas, "namedSchemas": refs, "modeProfiles": profiles, "examples": examples} resources["ai/commands/" + kind + ".json"] = json.dumps(resource, ensure_ascii=True, indent=2) + "\n" entries[kind] = "/ai/commands/" + kind + ".json" example_count += len(examples) index = {"format": "scripttap-import-authoring-index-v1", "commandContractSourceSha256": bundle["commandContractSourceSha256"], "packageContractSourceSha256": bundle["packageContractSourceSha256"], "canonicalContract": "/ai_json_contract_v1.json", "schemaVersion": contract.raw["schemaVersion"], "semantics": semantics, "tokenRuleSemantics": token_semantics, "validator": "/ai_validator_v1.py.txt", "validatorUsage": "Download as a file without pasting the validator source into the prompt. Save as scripttap_validate.py; run python3 scripttap_validate.py your-file.scripttap.json. Exit 0 means the listed canonical-contract checks passed, not Android import or runtime readiness.", "package": bundle["packageContract"], "commandCount": len(entries), "exampleCount": example_count, "commands": entries} resources["ai_commands_v1.json"] = json.dumps(index, ensure_ascii=True, indent=2) + "\n" embedded = copy.deepcopy(bundle) embedded["commandContract"].pop("routes", None) source = pathlib.Path(__file__).read_text(encoding="utf-8") source = source.replace("EMBEDDED_BUNDLE = None", "EMBEDDED_BUNDLE = json.loads(" + repr(json.dumps(embedded, ensure_ascii=True, separators=(",", ":"))) + ")", 1) resources["ai_validator_v1.py.txt"] = source return resources if __name__ == "__main__": main()