82 lines
6.2 KiB
JSON
82 lines
6.2 KiB
JSON
{
|
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
"$id": "https://crank.local/schemas/operation-export-v2.schema.json",
|
|
"title": "Crank portable Operation export v2",
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": ["format_version", "kind", "operation"],
|
|
"properties": {
|
|
"format_version": { "const": "2" },
|
|
"kind": { "const": "operation" },
|
|
"operation": { "$ref": "#/$defs/portable_operation" }
|
|
},
|
|
"$defs": {
|
|
"portable_operation": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": ["name", "display_name", "category", "protocol", "security_level", "target", "input_schema", "output_schema", "input_mapping", "output_mapping", "execution_config", "tool_description"],
|
|
"properties": {
|
|
"name": { "type": "string", "minLength": 1, "maxLength": 64 },
|
|
"display_name": { "type": "string", "minLength": 1, "maxLength": 256 },
|
|
"category": { "type": "string", "minLength": 1, "maxLength": 128 },
|
|
"protocol": { "const": "rest" },
|
|
"security_level": { "enum": ["standard"] },
|
|
"target": { "$ref": "#/$defs/rest_target" },
|
|
"input_schema": { "$ref": "#/$defs/schema" },
|
|
"output_schema": { "$ref": "#/$defs/schema" },
|
|
"input_mapping": { "$ref": "#/$defs/mapping_set" },
|
|
"output_mapping": { "$ref": "#/$defs/mapping_set" },
|
|
"execution_config": { "$ref": "#/$defs/execution_config" },
|
|
"tool_description": { "$ref": "#/$defs/tool_description" }
|
|
}
|
|
},
|
|
"string_map": { "type": "object", "propertyNames": { "minLength": 1, "maxLength": 256 }, "additionalProperties": { "type": "string", "maxLength": 65536 } },
|
|
"rest_target": {
|
|
"type": "object", "additionalProperties": false,
|
|
"required": ["kind", "base_url", "method", "path_template"],
|
|
"properties": {
|
|
"kind": { "const": "rest" }, "base_url": { "type": "string", "minLength": 1, "maxLength": 4096 },
|
|
"method": { "enum": ["get", "post", "put", "patch", "delete"] },
|
|
"path_template": { "type": "string", "minLength": 1, "maxLength": 4096 },
|
|
"static_headers": { "$ref": "#/$defs/string_map" }
|
|
}
|
|
},
|
|
"schema": {
|
|
"type": "object", "additionalProperties": false, "required": ["type"],
|
|
"properties": {
|
|
"type": { "enum": ["object", "array", "string", "integer", "number", "boolean", "enum", "null", "oneof"] },
|
|
"description": { "type": "string", "maxLength": 65536 }, "required": { "type": "boolean" }, "nullable": { "type": "boolean" },
|
|
"default_value": {}, "fields": { "type": "object", "maxProperties": 4096, "additionalProperties": { "$ref": "#/$defs/schema" } },
|
|
"items": { "$ref": "#/$defs/schema" }, "enum_values": { "type": "array", "maxItems": 4096, "items": { "type": "string", "maxLength": 65536 } },
|
|
"variants": { "type": "array", "maxItems": 4096, "items": { "$ref": "#/$defs/schema" } }
|
|
}
|
|
},
|
|
"mapping_set": { "type": "object", "additionalProperties": false, "properties": { "rules": { "type": "array", "maxItems": 4096, "items": { "$ref": "#/$defs/mapping_rule" } } } },
|
|
"mapping_rule": {
|
|
"type": "object", "additionalProperties": false, "required": ["source", "target"],
|
|
"properties": {
|
|
"source": { "type": "string", "maxLength": 4096 }, "target": { "type": "string", "maxLength": 4096 }, "required": { "type": "boolean" }, "default_value": {},
|
|
"transform": { "type": "object", "additionalProperties": false, "required": ["kind"], "properties": { "kind": { "enum": ["identity", "to_string", "to_number", "to_boolean", "join", "split", "wrap_array", "unwrap_singleton"] } } },
|
|
"condition": { "type": "object", "additionalProperties": false, "required": ["source", "equals"], "properties": { "source": { "type": "string", "maxLength": 4096 }, "equals": {} } },
|
|
"notes": { "type": "string", "maxLength": 65536 }
|
|
}
|
|
},
|
|
"execution_config": {
|
|
"type": "object", "additionalProperties": false, "required": ["timeout_ms"],
|
|
"properties": {
|
|
"timeout_ms": { "type": "integer", "minimum": 1 },
|
|
"retry_policy": { "type": "object", "additionalProperties": false, "required": ["max_attempts"], "properties": { "max_attempts": { "type": "integer", "minimum": 0 } } },
|
|
"response_cache": { "type": "object", "additionalProperties": false, "required": ["ttl_ms"], "properties": { "ttl_ms": { "type": "integer", "minimum": 1 } } },
|
|
"idempotency": { "type": "object", "additionalProperties": false, "required": ["mode", "ttl_ms"], "properties": { "mode": { "enum": ["disabled", "optional", "required"] }, "ttl_ms": { "type": "integer", "minimum": 1 }, "input_field": { "type": "string" }, "header_name": { "type": "string" } } },
|
|
"safety": { "type": "object", "additionalProperties": false, "required": ["class"], "properties": { "class": { "enum": ["read", "write", "destructive", "external_message", "financial_or_irreversible"] }, "confirmation": { "type": "object", "additionalProperties": false, "required": ["ttl_ms"], "properties": { "ttl_ms": { "type": "integer", "minimum": 1 } } } } },
|
|
"approval_policy": { "type": "object", "additionalProperties": false, "required": ["required", "ttl_seconds", "show_payload_preview", "payload_preview_mode"], "properties": { "required": { "type": "boolean" }, "mode": { "enum": ["custom", "elicitation"] }, "risk_level": { "enum": ["normal", "dangerous", "financial", "irreversible"] }, "ttl_seconds": { "type": "integer", "minimum": 1 }, "show_payload_preview": { "type": "boolean" }, "payload_preview_mode": { "enum": ["summary", "masked_json"] }, "elicitation_message": { "type": "string" } } },
|
|
"auth_profile_ref": { "type": "string", "minLength": 1, "maxLength": 256 }, "headers": { "$ref": "#/$defs/string_map" }
|
|
}
|
|
},
|
|
"tool_description": {
|
|
"type": "object", "additionalProperties": false, "required": ["title", "description"],
|
|
"properties": { "title": { "type": "string", "maxLength": 256 }, "description": { "type": "string", "maxLength": 65536 }, "tags": { "type": "array", "maxItems": 4096, "items": { "type": "string", "maxLength": 256 } }, "examples": { "type": "array", "maxItems": 4096, "items": { "type": "object", "additionalProperties": false, "required": ["input"], "properties": { "input": {} } } } }
|
|
}
|
|
}
|
|
}
|