{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "urn:literate-ai:schema:v1:worker-provisioning-contracts",
  "oneOf": [
    {
      "$ref": "urn:literate-ai:schema:v1:worker-provisioner"
    },
    {
      "$ref": "urn:literate-ai:schema:v1:worker-provision-request"
    },
    {
      "$ref": "urn:literate-ai:schema:v1:worker-provision-response"
    },
    {
      "$ref": "urn:literate-ai:schema:v1:retained-allocation-inspection-request"
    },
    {
      "$ref": "urn:literate-ai:schema:v1:retained-allocation-inspection-response"
    }
  ],
  "$defs": {
    "configuration": {
      "$id": "urn:literate-ai:schema:v1:worker-provisioner",
      "type": "object",
      "additionalProperties": false,
      "required": [
        "schema",
        "command",
        "enabled",
        "environment",
        "help_argument",
        "timeout_seconds"
      ],
      "properties": {
        "schema": {
          "const": "urn:literate-ai:schema:v1:worker-provisioner"
        },
        "command": {
          "type": "array",
          "minItems": 1,
          "maxItems": 64,
          "items": {
            "type": "string",
            "minLength": 1,
            "maxLength": 4096,
            "pattern": "^[^\\u0000]*$"
          }
        },
        "enabled": {
          "type": "boolean"
        },
        "inspection_command": {
          "description": "Optional separate read-only allocation inspector; never the allocation command.",
          "type": "array",
          "minItems": 1,
          "maxItems": 64,
          "items": {
            "type": "string",
            "minLength": 1,
            "maxLength": 4096,
            "pattern": "^[^\\u0000]*$"
          }
        },
        "environment": {
          "type": "array",
          "maxItems": 64,
          "items": {
            "$ref": "urn:literate-ai:schema:v1:execution-worker-environment"
          }
        },
        "help_argument": {
          "enum": [
            "--help",
            "help"
          ]
        },
        "timeout_seconds": {
          "type": "integer",
          "minimum": 1,
          "maximum": 3600
        }
      }
    },
    "request": {
      "$id": "urn:literate-ai:schema:v1:worker-provision-request",
      "type": "object",
      "additionalProperties": false,
      "required": [
        "schema",
        "request_id",
        "worker_id",
        "target_profile",
        "requirements",
        "parameters"
      ],
      "properties": {
        "schema": {
          "const": "urn:literate-ai:schema:v1:worker-provision-request"
        },
        "request_id": {
          "type": "string",
          "pattern": "^[a-z0-9](?:[a-z0-9._-]{0,62}[a-z0-9])?$"
        },
        "worker_id": {
          "type": "string",
          "pattern": "^[a-z0-9](?:[a-z0-9._-]{0,62}[a-z0-9])?$"
        },
        "target_profile": {
          "type": "string",
          "minLength": 1
        },
        "requirements": {
          "$ref": "urn:literate-ai:schema:v1:execution-requirements"
        },
        "parameters": {
          "type": "object",
          "additionalProperties": {
            "type": "string"
          }
        }
      }
    },
    "response": {
      "$id": "urn:literate-ai:schema:v1:worker-provision-response",
      "type": "object",
      "additionalProperties": false,
      "required": [
        "schema",
        "request_identity",
        "worker",
        "lease_id"
      ],
      "properties": {
        "schema": {
          "const": "urn:literate-ai:schema:v1:worker-provision-response"
        },
        "request_identity": {
          "type": "string",
          "pattern": "^sha256:[0-9a-f]{64}$"
        },
        "worker": {
          "allOf": [
            {
              "$ref": "urn:literate-ai:schema:v1:execution-worker"
            },
            {
              "properties": {
                "kind": {
                  "const": "ssh"
                }
              }
            }
          ]
        },
        "lease_id": {
          "type": "string",
          "minLength": 1,
          "maxLength": 1024
        }
      }
    },
    "inspection_request": {
      "$id": "urn:literate-ai:schema:v1:retained-allocation-inspection-request",
      "type": "object",
      "additionalProperties": false,
      "required": [
        "schema",
        "nonce",
        "worker_identity",
        "plan_identity",
        "policy_identity",
        "minimum_remaining_seconds"
      ],
      "properties": {
        "schema": {
          "const": "urn:literate-ai:schema:v1:retained-allocation-inspection-request"
        },
        "nonce": {
          "type": "string",
          "pattern": "^[0-9a-f]{64}$"
        },
        "worker_identity": {
          "type": "string",
          "pattern": "^sha256:[0-9a-f]{64}$"
        },
        "plan_identity": {
          "type": "string",
          "pattern": "^sha256:[0-9a-f]{64}$"
        },
        "policy_identity": {
          "type": "string",
          "pattern": "^sha256:[0-9a-f]{64}$"
        },
        "minimum_remaining_seconds": {
          "type": "integer",
          "minimum": 1,
          "maximum": 86400
        }
      }
    },
    "inspection_response": {
      "$id": "urn:literate-ai:schema:v1:retained-allocation-inspection-response",
      "type": "object",
      "additionalProperties": false,
      "required": [
        "schema",
        "request_identity",
        "allocation_identity",
        "workspace_prefix",
        "remaining_seconds",
        "disposable"
      ],
      "properties": {
        "schema": {
          "const": "urn:literate-ai:schema:v1:retained-allocation-inspection-response"
        },
        "request_identity": {
          "type": "string",
          "pattern": "^sha256:[0-9a-f]{64}$"
        },
        "allocation_identity": {
          "type": "string",
          "pattern": "^sha256:[0-9a-f]{64}$"
        },
        "workspace_prefix": {
          "type": "string",
          "minLength": 2,
          "maxLength": 4096
        },
        "remaining_seconds": {
          "type": "integer",
          "minimum": 1,
          "maximum": 86400
        },
        "disposable": {
          "const": true
        }
      }
    }
  }
}
