{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "title": "Dicto Server 2.0 configuration",
  "description": "YAML server configuration. Environment references are resolved after parsing; defaults are applied by the Dicto loader.",
  "type": "object",
  "additionalProperties": false,
  "required": [
    "config_version",
    "db",
    "auth",
    "storage"
  ],
  "properties": {
    "config_version": {
      "type": "integer",
      "const": 1
    },
    "info": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "server_name": {
          "type": "string",
          "minLength": 1,
          "pattern": "\\S",
          "default": "Dicto Server"
        },
        "server_shortname": {
          "type": "string",
          "minLength": 1,
          "pattern": "\\S",
          "default": "Server"
        },
        "license_system_enabled": {
          "type": "boolean",
          "default": false
        },
        "app_version": {
          "$ref": "#/$defs/text"
        }
      },
      "default": {}
    },
    "medical_knowledge": {
      "type": "object",
      "additionalProperties": false,
      "description": "Released medical-knowledge packs for agents, mini apps, and Scripto medical codes. Omit packs_directory to disable.",
      "properties": {
        "packs_directory": {
          "$ref": "#/$defs/text",
          "description": "One directory per released pack, each with its pack.json."
        },
        "cache_directory": {
          "$ref": "#/$defs/text",
          "description": "Writable cache for catalogs and semantic indexes derived from the packs. Defaults to the system temporary directory."
        }
      },
      "default": {}
    },
    "api": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "url": {
          "$ref": "#/$defs/http_url"
        },
        "host": {
          "type": "string",
          "minLength": 1,
          "pattern": "\\S",
          "default": "0.0.0.0"
        },
        "port": {
          "type": "integer",
          "minimum": 1,
          "default": 3000,
          "maximum": 65535
        },
        "max_request_body_bytes": {
          "type": "integer",
          "minimum": 1,
          "default": 268435456,
          "maximum": 1099511627776
        },
        "io_workers": {
          "type": "integer",
          "minimum": 1,
          "default": 4,
          "maximum": 128
        }
      },
      "default": {}
    },
    "db": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "connection_string": {
          "anyOf": [
            {
              "type": "string",
              "pattern": "^postgres(ql)?://\\S+$",
              "format": "uri"
            },
            {
              "$ref": "#/$defs/env_reference"
            }
          ]
        },
        "path": {
          "$ref": "#/$defs/text"
        },
        "in_memory": {
          "type": "boolean",
          "default": false
        },
        "run_migrations": {
          "type": "boolean",
          "default": false
        },
        "check_flyway_handoff": {
          "type": "boolean",
          "default": true
        }
      },
      "oneOf": [
        {
          "required": [
            "connection_string"
          ],
          "not": {
            "anyOf": [
              {
                "required": [
                  "path"
                ]
              },
              {
                "properties": {
                  "in_memory": {
                    "const": true
                  }
                },
                "required": [
                  "in_memory"
                ]
              }
            ]
          }
        },
        {
          "required": [
            "path"
          ],
          "not": {
            "anyOf": [
              {
                "required": [
                  "connection_string"
                ]
              },
              {
                "properties": {
                  "in_memory": {
                    "const": true
                  }
                },
                "required": [
                  "in_memory"
                ]
              }
            ]
          }
        },
        {
          "properties": {
            "in_memory": {
              "const": true
            }
          },
          "required": [
            "in_memory"
          ],
          "not": {
            "anyOf": [
              {
                "required": [
                  "connection_string"
                ]
              },
              {
                "required": [
                  "path"
                ]
              }
            ]
          }
        }
      ]
    },
    "auth": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "backend": {
          "type": "string",
          "enum": [
            "better_auth",
            "oidc",
            "keycloak"
          ],
          "default": "better_auth"
        },
        "secret": {
          "$ref": "#/$defs/secret"
        },
        "base_url": {
          "$ref": "#/$defs/http_url"
        },
        "app_name": {
          "type": "string",
          "minLength": 1,
          "pattern": "\\S",
          "default": "Dicto"
        },
        "email_signin_enabled": {
          "type": "boolean",
          "default": true
        },
        "email_signup_enabled": {
          "type": "boolean",
          "default": true
        },
        "password_management_enabled": {
          "type": "boolean",
          "default": true
        },
        "account_management_enabled": {
          "type": "boolean",
          "default": true
        },
        "v1_enabled": {
          "type": "boolean",
          "default": true
        },
        "email_verification_enabled": {
          "type": "boolean",
          "default": false
        },
        "allow_insecure_localhost": {
          "type": "boolean",
          "default": false
        },
        "rehash_legacy_passwords": {
          "type": "boolean",
          "default": false
        },
        "oauth_callback_version": {
          "type": "integer",
          "enum": [
            1,
            2
          ],
          "default": 1
        },
        "trusted_origins": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/http_url"
          },
          "default": []
        },
        "sso_providers": {
          "type": "array",
          "items": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
              "provider_id": {
                "$ref": "#/$defs/text"
              },
              "issuer": {
                "$ref": "#/$defs/http_url"
              },
              "client_id": {
                "$ref": "#/$defs/text"
              },
              "client_secret": {
                "$ref": "#/$defs/secret"
              },
              "label": {
                "type": "string",
                "minLength": 1,
                "pattern": "\\S",
                "default": "Single sign-on"
              }
            },
            "required": [
              "provider_id",
              "issuer",
              "client_id"
            ]
          },
          "default": []
        },
        "entra_federated": {
          "type": "object",
          "additionalProperties": false,
          "properties": {
            "provider_id": {
              "$ref": "#/$defs/text"
            },
            "authority": {
              "$ref": "#/$defs/http_url",
              "default": "https://login.microsoftonline.com/organizations/v2.0"
            },
            "api_audiences": {
              "type": "array",
              "items": {
                "$ref": "#/$defs/text"
              },
              "minItems": 1
            },
            "allowed_client_ids": {
              "type": "array",
              "items": {
                "$ref": "#/$defs/text"
              },
              "minItems": 1
            },
            "allowed_tenant_ids": {
              "type": "array",
              "items": {
                "$ref": "#/$defs/text"
              },
              "minItems": 1
            },
            "required_scopes": {
              "type": "array",
              "items": {
                "$ref": "#/$defs/text"
              },
              "default": [
                "access_as_user"
              ]
            }
          },
          "required": [
            "provider_id",
            "api_audiences",
            "allowed_client_ids",
            "allowed_tenant_ids"
          ]
        },
        "legacy_redirect_uris": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/text"
          },
          "default": []
        },
        "web_redirect_uris": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/http_url"
          },
          "default": []
        },
        "native_redirect_uris": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/text"
          },
          "default": [
            "dicto://auth/callback",
            "http://localhost:43821/auth/callback",
            "http://127.0.0.1/auth/callback"
          ]
        },
        "encryption_key": {
          "$ref": "#/$defs/secret"
        },
        "encryption_keys": {
          "type": "object",
          "additionalProperties": {
            "$ref": "#/$defs/secret"
          },
          "default": {}
        },
        "active_encryption_key": {
          "type": "string",
          "minLength": 1,
          "pattern": "\\S",
          "default": "v1"
        },
        "keycloak_admin_client_id": {
          "$ref": "#/$defs/text"
        },
        "keycloak_admin_client_secret": {
          "$ref": "#/$defs/secret"
        },
        "delivery_webhook_url": {
          "$ref": "#/$defs/http_url"
        },
        "delivery_webhook_token": {
          "$ref": "#/$defs/secret"
        },
        "client_ip_header": {
          "$ref": "#/$defs/text"
        },
        "passkeys": {
          "type": "object",
          "additionalProperties": false,
          "default": {},
          "properties": {
            "enabled": {
              "type": "boolean",
              "default": false
            },
            "enrollment_enabled": {
              "type": "boolean",
              "default": false,
              "description": "Server-side rollout flag. Turning this off preserves existing passkey sign-in."
            },
            "rp_id": {
              "type": "string",
              "pattern": "^(localhost|[a-z0-9](?:[a-z0-9.-]*[a-z0-9])?)$"
            },
            "origins": {
              "type": "array",
              "uniqueItems": true,
              "items": {
                "type": "string",
                "minLength": 1
              },
              "default": []
            },
            "required_login_methods": {
              "type": "array",
              "uniqueItems": true,
              "items": {
                "$ref": "#/$defs/text"
              },
              "default": []
            },
            "related_origins": {
              "type": "array",
              "uniqueItems": true,
              "items": {
                "type": "string",
                "minLength": 1
              },
              "default": [],
              "description": "Explicit HTTPS origins outside the RP domain. Publish these in the RP host well-known WebAuthn document; browsers must support Related Origin Requests."
            }
          },
          "allOf": [
            {
              "if": {
                "properties": {
                  "enabled": {
                    "const": true
                  }
                },
                "required": [
                  "enabled"
                ]
              },
              "then": {
                "required": [
                  "rp_id",
                  "origins"
                ],
                "properties": {
                  "origins": {
                    "minItems": 1
                  }
                }
              }
            },
            {
              "if": {
                "properties": {
                  "enrollment_enabled": {
                    "const": true
                  }
                },
                "required": [
                  "enrollment_enabled"
                ]
              },
              "then": {
                "properties": {
                  "enabled": {
                    "const": true
                  }
                },
                "required": [
                  "enabled"
                ]
              }
            }
          ]
        }
      },
      "required": [
        "secret"
      ],
      "allOf": [
        {
          "if": {
            "properties": {
              "backend": {
                "enum": [
                  "oidc",
                  "keycloak"
                ]
              }
            },
            "required": [
              "backend"
            ]
          },
          "then": {
            "required": [
              "sso_providers"
            ],
            "properties": {
              "sso_providers": {
                "minItems": 1
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "passkeys": {
                "properties": {
                  "enabled": {
                    "const": true
                  }
                },
                "required": [
                  "enabled"
                ]
              }
            },
            "required": [
              "passkeys"
            ]
          },
          "then": {
            "properties": {
              "backend": {
                "const": "better_auth"
              }
            }
          }
        }
      ]
    },
    "storage": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "s3",
            "filesystem"
          ]
        },
        "path": {
          "$ref": "#/$defs/text"
        },
        "endpoint": {
          "$ref": "#/$defs/http_url"
        },
        "region": {
          "$ref": "#/$defs/text"
        },
        "access_key_id": {
          "$ref": "#/$defs/secret"
        },
        "secret_access_key": {
          "$ref": "#/$defs/secret"
        },
        "bucket": {
          "type": "string",
          "minLength": 1,
          "pattern": "\\S",
          "default": "recordings"
        },
        "force_path_style": {
          "type": "boolean",
          "default": true
        },
        "allow_http": {
          "type": "boolean",
          "default": false
        }
      },
      "required": [
        "type"
      ],
      "allOf": [
        {
          "if": {
            "properties": {
              "type": {
                "const": "filesystem"
              }
            }
          },
          "then": {
            "required": [
              "path"
            ],
            "not": {
              "anyOf": [
                {
                  "required": [
                    "endpoint"
                  ]
                },
                {
                  "required": [
                    "region"
                  ]
                },
                {
                  "required": [
                    "access_key_id"
                  ]
                },
                {
                  "required": [
                    "secret_access_key"
                  ]
                }
              ]
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "s3"
              }
            }
          },
          "then": {
            "required": [
              "access_key_id",
              "secret_access_key"
            ],
            "not": {
              "required": [
                "path"
              ]
            }
          }
        },
        {
          "if": {
            "required": [
              "endpoint"
            ],
            "properties": {
              "endpoint": {
                "pattern": "^http://"
              }
            }
          },
          "then": {
            "required": [
              "allow_http"
            ],
            "properties": {
              "allow_http": {
                "const": true
              }
            }
          }
        }
      ]
    },
    "ai": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "chat": {
          "$ref": "#/$defs/inference"
        },
        "embeddings": {
          "$ref": "#/$defs/inference"
        },
        "reranking": {
          "$ref": "#/$defs/inference"
        },
        "realtime_speech": {
          "type": "object",
          "additionalProperties": false,
          "properties": {
            "api_key": {
              "$ref": "#/$defs/secret"
            },
            "base_url": {
              "$ref": "#/$defs/http_url"
            },
            "models": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": false,
                "properties": {
                  "id": {
                    "$ref": "#/$defs/text"
                  },
                  "name": {
                    "$ref": "#/$defs/text"
                  },
                  "provider_model": {
                    "$ref": "#/$defs/text"
                  },
                  "description": {
                    "$ref": "#/$defs/text"
                  },
                  "is_default": {
                    "type": "boolean",
                    "default": false
                  },
                  "api_key": {
                    "$ref": "#/$defs/secret"
                  },
                  "base_url": {
                    "$ref": "#/$defs/http_url"
                  },
                  "voice": {
                    "$ref": "#/$defs/text",
                    "description": "Deprecated single voice; prefer voices. Read as the only, default voice."
                  },
                  "voices": {
                    "type": "array",
                    "description": "Provider voices users may choose for this model. The default voice is used when none is requested.",
                    "items": {
                      "type": "object",
                      "additionalProperties": false,
                      "properties": {
                        "id": {
                          "$ref": "#/$defs/text",
                          "description": "Provider voice name sent to the realtime API."
                        },
                        "name": {
                          "$ref": "#/$defs/text"
                        },
                        "description": {
                          "$ref": "#/$defs/text"
                        },
                        "is_default": {
                          "type": "boolean",
                          "default": false
                        }
                      },
                      "required": [
                        "id",
                        "name"
                      ]
                    }
                  }
                },
                "required": [
                  "id",
                  "name",
                  "provider_model"
                ]
              },
              "default": []
            }
          },
          "default": {}
        },
        "transcription": {
          "type": "object",
          "additionalProperties": false,
          "properties": {
            "type": {
              "type": "string",
              "enum": [
                "vllm",
                "mock"
              ],
              "default": "vllm"
            },
            "api_key": {
              "$ref": "#/$defs/secret"
            },
            "base_url": {
              "$ref": "#/$defs/http_url"
            },
            "models": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": false,
                "properties": {
                  "id": {
                    "$ref": "#/$defs/text"
                  },
                  "name": {
                    "$ref": "#/$defs/text"
                  },
                  "provider_model": {
                    "type": "string"
                  },
                  "description": {
                    "$ref": "#/$defs/text"
                  },
                  "is_default": {
                    "type": "boolean",
                    "default": false
                  },
                  "api_key": {
                    "$ref": "#/$defs/secret"
                  },
                  "base_url": {
                    "$ref": "#/$defs/http_url"
                  },
                  "is_realtime_default": {
                    "type": "boolean",
                    "default": false
                  },
                  "is_diarization_default": {
                    "type": "boolean",
                    "default": false
                  },
                  "supports_realtime": {
                    "type": "boolean",
                    "default": false
                  },
                  "supports_diarization": {
                    "type": "boolean",
                    "default": false
                  },
                  "supports_token_logprobs": {
                    "type": "boolean",
                    "default": false
                  }
                },
                "required": [
                  "id",
                  "name"
                ]
              },
              "default": []
            },
            "mock_text": {
              "type": "string",
              "minLength": 1,
              "pattern": "\\S",
              "default": "This is a mock transcription."
            },
            "mock_delay_ms": {
              "type": "integer",
              "minimum": 0,
              "default": 0
            }
          },
          "default": {}
        }
      },
      "default": {}
    },
    "worker_pools": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "worker_pool_size": {
          "type": "integer",
          "minimum": 1,
          "default": 1
        },
        "auth_worker_pool_size": {
          "type": "integer",
          "minimum": 1
        },
        "audio_worker_pool_size": {
          "type": "integer",
          "minimum": 1,
          "default": 4
        },
        "persistence_audio_worker_pool_size": {
          "type": "integer",
          "minimum": 1
        },
        "vad_worker_pool_size": {
          "type": "integer",
          "minimum": 1
        },
        "audio_queue_capacity": {
          "type": "integer",
          "minimum": 1,
          "default": 64,
          "maximum": 65536
        },
        "persistence_audio_queue_capacity": {
          "type": "integer",
          "minimum": 1,
          "default": 64,
          "maximum": 65536
        },
        "audio_max_active_spool_bytes": {
          "type": "integer",
          "minimum": 1,
          "default": 536870912
        },
        "dictation_preferred_memory_spool_bytes": {
          "type": "integer",
          "minimum": 1,
          "default": 16777216
        },
        "dictation_max_segment_spool_bytes": {
          "type": "integer",
          "minimum": 1,
          "default": 500000000
        },
        "dictation_vad_trim_max_pending_bytes": {
          "type": "integer",
          "minimum": 1,
          "default": 262144
        },
        "max_concurrent_dictations_per_connection": {
          "type": "integer",
          "minimum": 1,
          "default": 4
        }
      },
      "default": {}
    },
    "rag": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "document_worker": {
          "type": "object",
          "additionalProperties": false,
          "properties": {
            "url": {
              "$ref": "#/$defs/http_url"
            },
            "max_document_bytes": {
              "type": "integer",
              "minimum": 1,
              "default": 52428800
            },
            "request_timeout_seconds": {
              "type": "integer",
              "minimum": 1,
              "default": 120
            },
            "job_timeout_seconds": {
              "type": "integer",
              "minimum": 1,
              "default": 1800
            },
            "poll_interval_ms": {
              "type": "integer",
              "minimum": 1,
              "default": 1000
            },
            "embedding_mode": {
              "type": "string",
              "enum": [
                "auto",
                "required",
                "disabled"
              ],
              "default": "auto"
            }
          },
          "default": {}
        },
        "dispatcher": {
          "type": "object",
          "additionalProperties": false,
          "properties": {
            "id": {
              "$ref": "#/$defs/text"
            },
            "concurrency": {
              "type": "integer",
              "minimum": 1,
              "default": 1
            },
            "poll_interval_ms": {
              "type": "integer",
              "minimum": 1,
              "default": 2000
            },
            "lease_seconds": {
              "type": "integer",
              "minimum": 1,
              "default": 600
            },
            "retry_delay_seconds": {
              "type": "integer",
              "minimum": 1,
              "default": 60
            }
          },
          "default": {}
        }
      },
      "default": {}
    },
    "monitoring": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "enabled": {
          "type": "boolean",
          "default": false
        },
        "service_name": {
          "type": "string",
          "minLength": 1,
          "pattern": "\\S",
          "default": "dicto-server"
        },
        "service_version": {
          "type": "string",
          "minLength": 1,
          "pattern": "\\S",
          "default": "2.0.0"
        },
        "environment": {
          "type": "string",
          "minLength": 1,
          "pattern": "\\S",
          "default": "development"
        },
        "log_level": {
          "type": "string",
          "enum": [
            "trace",
            "debug",
            "info",
            "warn",
            "warning",
            "error",
            "fatal",
            "off"
          ],
          "default": "info"
        },
        "loki_url": {
          "$ref": "#/$defs/http_url"
        },
        "otlp_traces_endpoint": {
          "$ref": "#/$defs/http_url"
        },
        "traces_sample_ratio": {
          "type": "number",
          "minimum": 0,
          "maximum": 1,
          "default": 1
        },
        "host": {
          "type": "string",
          "minLength": 1,
          "pattern": "\\S",
          "default": "0.0.0.0"
        },
        "port": {
          "type": "integer",
          "minimum": 1,
          "maximum": 65535
        },
        "request_logging_enabled": {
          "type": "boolean",
          "default": true
        }
      },
      "default": {}
    },
    "seed": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "admin": {
          "type": "object",
          "additionalProperties": false,
          "properties": {
            "enabled": {
              "type": "boolean",
              "default": false
            },
            "email": {
              "$ref": "#/$defs/text"
            },
            "password": {
              "$ref": "#/$defs/secret"
            },
            "name": {
              "type": "string",
              "minLength": 1,
              "pattern": "\\S",
              "default": "Admin"
            },
            "role": {
              "type": "string",
              "minLength": 1,
              "pattern": "\\S",
              "default": "admin"
            }
          },
          "default": {},
          "allOf": [
            {
              "if": {
                "properties": {
                  "enabled": {
                    "const": true
                  }
                },
                "required": [
                  "enabled"
                ]
              },
              "then": {
                "required": [
                  "email",
                  "password"
                ]
              }
            }
          ]
        }
      },
      "default": {}
    },
    "scripto_agent": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "server_url": {
          "$ref": "#/$defs/http_url"
        },
        "provider_host": {
          "type": "string",
          "minLength": 1,
          "pattern": "\\S",
          "default": "127.0.0.1"
        },
        "provider_port": {
          "type": "integer",
          "minimum": 1,
          "default": 8081,
          "maximum": 65535
        },
        "langfuse": {
          "type": "object",
          "additionalProperties": false,
          "description": "Optional Scripto run tracing and feedback export. Omit to disable.",
          "required": [
            "url",
            "public_key",
            "secret_key"
          ],
          "properties": {
            "url": {
              "$ref": "#/$defs/http_url"
            },
            "public_key": {
              "$ref": "#/$defs/secret"
            },
            "secret_key": {
              "$ref": "#/$defs/secret"
            },
            "environment": {
              "anyOf": [
                {
                  "type": "string",
                  "pattern": "^(?!langfuse)[a-z0-9_-]+$"
                },
                {
                  "$ref": "#/$defs/env_reference"
                }
              ]
            },
            "release": {
              "$ref": "#/$defs/text"
            }
          }
        }
      },
      "default": {}
    },
    "cliniva": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "https_proxy": {
          "$ref": "#/$defs/http_url"
        }
      },
      "default": {}
    },
    "management": {
      "type": "object",
      "properties": {
        "dashboard": {
          "$ref": "#/$defs/management_dashboard"
        },
        "dashboard_file": {
          "type": "string",
          "minLength": 1
        },
        "sources": {
          "type": "object",
          "propertyNames": {
            "type": "string",
            "pattern": "^[a-z][a-z0-9_-]{0,63}$"
          },
          "additionalProperties": {
            "type": "object",
            "properties": {
              "type": {
                "enum": [
                  "prometheus",
                  "loki"
                ]
              },
              "url": {
                "$ref": "#/$defs/http_url"
              },
              "bearer_token": {
                "$ref": "#/$defs/text"
              },
              "username": {
                "$ref": "#/$defs/text"
              },
              "password": {
                "$ref": "#/$defs/text"
              },
              "tenant_id": {
                "$ref": "#/$defs/text"
              },
              "timeout_seconds": {
                "type": "integer",
                "minimum": 1,
                "maximum": 30
              }
            },
            "required": [
              "type",
              "url"
            ],
            "additionalProperties": false,
            "allOf": [
              {
                "if": {
                  "required": [
                    "username"
                  ]
                },
                "then": {
                  "required": [
                    "password"
                  ]
                }
              },
              {
                "if": {
                  "required": [
                    "password"
                  ]
                },
                "then": {
                  "required": [
                    "username"
                  ]
                }
              },
              {
                "not": {
                  "required": [
                    "bearer_token",
                    "username"
                  ]
                }
              }
            ]
          },
          "maxProperties": 16
        },
        "dashboards": {
          "type": "array",
          "minItems": 1,
          "maxItems": 16,
          "items": {
            "oneOf": [
              {
                "$ref": "#/$defs/management_dashboard"
              },
              {
                "type": "object",
                "properties": {
                  "file": {
                    "type": "string",
                    "minLength": 1
                  }
                },
                "required": [
                  "file"
                ],
                "additionalProperties": false
              }
            ]
          }
        },
        "default_dashboard": {
          "type": "string",
          "pattern": "^[a-z][a-z0-9_-]{0,63}$"
        }
      },
      "required": [],
      "additionalProperties": false,
      "default": {},
      "allOf": [
        {
          "not": {
            "required": [
              "dashboard",
              "dashboard_file"
            ]
          }
        },
        {
          "not": {
            "required": [
              "dashboard",
              "dashboards"
            ]
          }
        },
        {
          "not": {
            "required": [
              "dashboard_file",
              "dashboards"
            ]
          }
        }
      ]
    }
  },
  "$defs": {
    "env_reference": {
      "type": "string",
      "pattern": "^\\$\\{[A-Za-z_][A-Za-z0-9_]*\\}$"
    },
    "text": {
      "type": "string",
      "minLength": 1,
      "pattern": "\\S"
    },
    "secret": {
      "type": "string",
      "minLength": 1,
      "pattern": "\\S",
      "writeOnly": true,
      "description": "Literal secret or a whole-value ${VARIABLE_NAME} reference."
    },
    "http_url": {
      "anyOf": [
        {
          "type": "string",
          "pattern": "^https?://[^\\s/?#]+(?:[^\\s]*)?$",
          "format": "uri"
        },
        {
          "$ref": "#/$defs/env_reference"
        }
      ]
    },
    "inference_model": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "id": {
          "$ref": "#/$defs/text"
        },
        "name": {
          "$ref": "#/$defs/text"
        },
        "provider_model": {
          "$ref": "#/$defs/text"
        },
        "description": {
          "$ref": "#/$defs/text"
        },
        "is_default": {
          "type": "boolean",
          "default": false
        },
        "api_key": {
          "$ref": "#/$defs/secret"
        },
        "base_url": {
          "$ref": "#/$defs/http_url"
        },
        "reasoning": {
          "$ref": "#/$defs/model_reasoning"
        }
      },
      "required": [
        "id",
        "name",
        "provider_model"
      ]
    },
    "inference": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "api_key": {
          "$ref": "#/$defs/secret"
        },
        "base_url": {
          "$ref": "#/$defs/http_url"
        },
        "models": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/inference_model"
          },
          "default": []
        },
        "thinking_budget": {
          "type": "integer",
          "minimum": 0
        },
        "dimensions": {
          "type": "integer",
          "minimum": 1
        }
      },
      "default": {}
    },
    "model_reasoning": {
      "type": "object",
      "additionalProperties": false,
      "description": "Explicit model capabilities; omission offers no reasoning controls. Auto uses the provider default.",
      "properties": {
        "efforts": {
          "type": "array",
          "uniqueItems": true,
          "items": {
            "enum": [
              "disabled",
              "minimal",
              "low",
              "medium",
              "high",
              "xhigh",
              "maximum"
            ]
          },
          "default": []
        },
        "summaries": {
          "type": "array",
          "uniqueItems": true,
          "items": {
            "enum": [
              "auto",
              "concise",
              "detailed"
            ]
          },
          "default": []
        },
        "default_effort": {
          "enum": [
            "disabled",
            "minimal",
            "low",
            "medium",
            "high",
            "xhigh",
            "maximum"
          ]
        }
      }
    },
    "management_dashboard": {
      "title": "Dicto management dashboard",
      "description": "Deployment-provisioned, server-executed admin dashboard. No credentials or executable UI code.",
      "type": "object",
      "properties": {
        "version": {
          "const": 1,
          "type": "integer"
        },
        "id": {
          "type": "string",
          "pattern": "^[a-z][a-z0-9_-]{0,63}$"
        },
        "title": {
          "type": "string",
          "minLength": 1,
          "maxLength": 256
        },
        "defaultView": {
          "type": "string",
          "pattern": "^[a-z][a-z0-9_-]{0,63}$"
        },
        "defaults": {
          "type": "object",
          "properties": {
            "timeRange": {
              "enum": [
                "1h",
                "6h",
                "24h",
                "7d",
                "30d"
              ]
            },
            "refresh": {
              "type": "integer",
              "minimum": 10,
              "maximum": 3600,
              "description": "Refresh interval in seconds."
            }
          },
          "required": [],
          "additionalProperties": false
        },
        "queries": {
          "type": "object",
          "propertyNames": {
            "type": "string",
            "pattern": "^[a-z][a-z0-9_-]{0,63}$"
          },
          "additionalProperties": {
            "type": "object",
            "properties": {
              "source": {
                "type": "string",
                "pattern": "^[a-z][a-z0-9_-]{0,63}$"
              },
              "metric": {
                "enum": [
                  "users.count",
                  "groups.count",
                  "workspaces.count",
                  "users.active",
                  "transcriptions.count",
                  "scripto.count",
                  "feedback.recent"
                ]
              },
              "mode": {
                "enum": [
                  "instant",
                  "range",
                  "logs"
                ]
              },
              "expression": {
                "type": "string",
                "minLength": 1,
                "maxLength": 4096
              },
              "limit": {
                "type": "integer",
                "minimum": 1,
                "maximum": 500
              }
            },
            "required": [
              "source"
            ],
            "additionalProperties": false,
            "oneOf": [
              {
                "required": [
                  "metric"
                ],
                "not": {
                  "anyOf": [
                    {
                      "required": [
                        "expression"
                      ]
                    },
                    {
                      "required": [
                        "mode"
                      ]
                    }
                  ]
                }
              },
              {
                "required": [
                  "expression",
                  "mode"
                ],
                "not": {
                  "required": [
                    "metric"
                  ]
                }
              }
            ]
          },
          "minProperties": 1,
          "maxProperties": 128
        },
        "views": {
          "type": "object",
          "propertyNames": {
            "type": "string",
            "pattern": "^[a-z][a-z0-9_-]{0,63}$"
          },
          "additionalProperties": {
            "type": "object",
            "properties": {
              "title": {
                "type": "string",
                "minLength": 1,
                "maxLength": 256
              },
              "panels": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string",
                      "pattern": "^[a-z][a-z0-9_-]{0,63}$"
                    },
                    "type": {
                      "enum": [
                        "stat",
                        "timeseries",
                        "logs",
                        "table"
                      ]
                    },
                    "title": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 256
                    },
                    "query": {
                      "type": "string",
                      "pattern": "^[a-z][a-z0-9_-]{0,63}$"
                    },
                    "unit": {
                      "type": "string",
                      "maxLength": 32
                    },
                    "span": {
                      "type": "integer",
                      "minimum": 1,
                      "maximum": 12
                    },
                    "link": {
                      "type": "object",
                      "properties": {
                        "view": {
                          "type": "string",
                          "pattern": "^[a-z][a-z0-9_-]{0,63}$"
                        },
                        "route": {
                          "enum": [
                            "users",
                            "groups",
                            "workspaces",
                            "feedback",
                            "settings",
                            "account"
                          ]
                        },
                        "dashboard": {
                          "type": "string",
                          "pattern": "^[a-z][a-z0-9_-]{0,63}$"
                        }
                      },
                      "required": [],
                      "additionalProperties": false,
                      "oneOf": [
                        {
                          "required": [
                            "route"
                          ],
                          "not": {
                            "anyOf": [
                              {
                                "required": [
                                  "view"
                                ]
                              },
                              {
                                "required": [
                                  "dashboard"
                                ]
                              }
                            ]
                          }
                        },
                        {
                          "required": [
                            "view"
                          ],
                          "not": {
                            "required": [
                              "route"
                            ]
                          }
                        },
                        {
                          "required": [
                            "dashboard"
                          ],
                          "not": {
                            "anyOf": [
                              {
                                "required": [
                                  "view"
                                ]
                              },
                              {
                                "required": [
                                  "route"
                                ]
                              }
                            ]
                          }
                        }
                      ]
                    }
                  },
                  "required": [
                    "id",
                    "type",
                    "title",
                    "query"
                  ],
                  "additionalProperties": false
                },
                "maxItems": 64,
                "minItems": 1
              }
            },
            "required": [
              "title",
              "panels"
            ],
            "additionalProperties": false
          },
          "minProperties": 1,
          "maxProperties": 16
        }
      },
      "required": [
        "version",
        "id",
        "title",
        "defaultView",
        "queries",
        "views"
      ],
      "additionalProperties": false
    }
  }
}
