{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "slug": {
      "type": "string",
      "minLength": 1
    },
    "displayName": {
      "type": "string",
      "minLength": 1
    },
    "description": {
      "default": "",
      "type": "string"
    },
    "forecasterKind": {
      "anyOf": [{"type":"string","minLength":1},{"type":"null"}]
    },
    "queryDefinitionId": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    },
    "promptTemplate": {
      "type": "string",
      "minLength": 1
    },
    "inputSchema": {
      "type": "object",
      "propertyNames": {"type":"string"},
      "additionalProperties": {}
    },
    "outputSchema": {
      "type": "object",
      "propertyNames": {"type":"string"},
      "additionalProperties": {}
    },
    "executionConfig": {
      "default": {"mode":"single_call"},
      "oneOf": [{"type":"object","properties":{"mode":{"type":"string","const":"single_call"},"budget":{"type":"object","properties":{"maxDurationMs":{"default":60000,"type":"integer","minimum":1000,"maximum":300000},"maxTotalTokens":{"default":20000,"type":"integer","exclusiveMinimum":0,"maximum":200000},"maxExternalCalls":{"default":6,"type":"integer","minimum":0,"maximum":24},"maxEstimatedCostUsd":{"default":null,"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"estimatedUsdPerMillionTokens":{"default":null,"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"allowedHttpHosts":{"default":[],"type":"array","items":{"type":"string","minLength":1}},"allowedPluginTools":{"default":[],"type":"array","items":{"type":"string","minLength":1}}},"additionalProperties":false}},"required":["mode"],"additionalProperties":{}},{"type":"object","properties":{"mode":{"type":"string","const":"chain"},"steps":{"minItems":1,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1},"kind":{"type":"string","enum":["llm","aggregate","model","ontology_query","http_model","http","plugin_tool"]},"prompt":{"type":"string","minLength":1},"final":{"type":"boolean"},"tool":{"type":"string","minLength":1},"params":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["kind"],"additionalProperties":{}}},"budget":{"type":"object","properties":{"maxDurationMs":{"default":60000,"type":"integer","minimum":1000,"maximum":300000},"maxTotalTokens":{"default":20000,"type":"integer","exclusiveMinimum":0,"maximum":200000},"maxExternalCalls":{"default":6,"type":"integer","minimum":0,"maximum":24},"maxEstimatedCostUsd":{"default":null,"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"estimatedUsdPerMillionTokens":{"default":null,"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"allowedHttpHosts":{"default":[],"type":"array","items":{"type":"string","minLength":1}},"allowedPluginTools":{"default":[],"type":"array","items":{"type":"string","minLength":1}}},"additionalProperties":false}},"required":["mode","steps"],"additionalProperties":{}},{"type":"object","properties":{"mode":{"type":"string","const":"agentic"},"maxSteps":{"type":"integer","exclusiveMinimum":0,"maximum":12},"max_steps":{"type":"integer","exclusiveMinimum":0,"maximum":12},"httpModels":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1},"url":{"type":"string","format":"uri"},"method":{"type":"string","minLength":1},"headers":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"}},"headerEnv":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"}},"auth":{"type":"object","properties":{"type":{"type":"string","const":"bearer_env"},"env":{"type":"string","minLength":1}},"required":["type","env"]},"body":{}},"required":["url"],"additionalProperties":{}}},"pluginTools":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1},"tool":{"type":"string","minLength":1},"params":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["id","tool"],"additionalProperties":{}}},"budget":{"type":"object","properties":{"maxDurationMs":{"default":60000,"type":"integer","minimum":1000,"maximum":300000},"maxTotalTokens":{"default":20000,"type":"integer","exclusiveMinimum":0,"maximum":200000},"maxExternalCalls":{"default":6,"type":"integer","minimum":0,"maximum":24},"maxEstimatedCostUsd":{"default":null,"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"estimatedUsdPerMillionTokens":{"default":null,"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"allowedHttpHosts":{"default":[],"type":"array","items":{"type":"string","minLength":1}},"allowedPluginTools":{"default":[],"type":"array","items":{"type":"string","minLength":1}}},"additionalProperties":false}},"required":["mode"],"additionalProperties":{}}]
    },
    "defaultHorizon": {
      "anyOf": [{"type":"string","minLength":1},{"type":"null"}]
    },
    "modelLabel": {
      "type": "string",
      "pattern": "^[a-z0-9_-]+\\/[a-zA-Z0-9._:-]+$"
    },
    "defaultParams": {
      "default": {},
      "type": "object",
      "propertyNames": {"type":"string"},
      "additionalProperties": {}
    },
    "confidencePath": {
      "default": "$.confidence",
      "type": "string",
      "minLength": 1
    },
    "outcomeResolution": {
      "default": {"kind":"manual"},
      "type": "object",
      "propertyNames": {"type":"string"},
      "additionalProperties": {}
    },
    "tags": {
      "default": [],
      "type": "array",
      "items": {"type":"string"}
    },
    "status": {
      "default": "active",
      "type": "string",
      "enum": ["active","disabled","archived"]
    },
    "forecastKind": {
      "default": "scenario",
      "type": "string",
      "enum": ["probability","categorical","numeric","scenario"]
    },
    "probabilityPath": {
      "anyOf": [{"type":"string","minLength":1},{"type":"null"}]
    },
    "evaluationPolicy": {
      "default": {"kind":"manual"},
      "type": "object",
      "propertyNames": {"type":"string"},
      "additionalProperties": {}
    },
    "idempotencyKey": {
      "type": "string",
      "minLength": 8,
      "maxLength": 200
    },
    "projectId": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    }
  },
  "required": [
    "slug",
    "displayName",
    "queryDefinitionId",
    "promptTemplate",
    "inputSchema",
    "outputSchema",
    "idempotencyKey",
    "projectId"
  ],
  "additionalProperties": false
}
