configuración de decision-gate.toml
Resumen
decision-gate.toml configura el servidor MCP, las políticas de confianza, los valores predeterminados de divulgación de evidencia y el registro de proveedores. Todas las entradas son validadas y fallan en cerrado ante errores.
Secciones de Nivel Superior
[server]
Configuración de transporte del servidor, autenticación, límites y auditoría.
| Campo | Tipo | Predeterminado | Notas |
|---|---|---|---|
transport | ”stdio” | “http” | “sse” | stdio | Protocolo de transporte para MCP. |
mode | ”strict” | “dev_permissive” | strict | Modo operativo para MCP (dev_permissive es legado). |
tls_termination | ”server” | “upstream” | server | Donde se termina TLS para el transporte HTTP/SSE. |
bind | cadena | null | Dirección de enlace para el transporte HTTP/SSE. |
max_body_bytes | entero | 1048576 | Tamaño máximo de la solicitud JSON-RPC en bytes. |
limits | tabla | { max_inflight = 256 } | Límites de solicitud para el servidor MCP. |
auth | tabla | null | Configuración de autenticación entrante para llamadas a herramientas MCP. |
tls | tabla | null | Configuración de TLS para transportes HTTP/SSE. |
audit | tabla | { enabled = true } | Configuración de registro de auditoría estructurada. |
feedback | tabla | n/a | Configuración de divulgación de comentarios para respuestas de herramientas. |
tools | tabla | { mode = “filter”, allowlist = [], denylist = [] } | Configuración de visibilidad de herramientas para listados de herramientas MCP. |
HTTP/SSE requieren bind; el no-loopback requiere una opción explícita de CLI más TLS o tls_termination = "upstream" + autenticación no local.
[server.auth]
Autenticación/autorización entrante para llamadas a herramientas MCP.
| Campo | Tipo | Predeterminado | Notas |
|---|---|---|---|
mode | ”local_only” | “bearer_token” | “mtls” | local_only | Modo de autenticación entrante para llamadas a herramientas MCP. |
bearer_tokens | array | [] | Tokens de portador permitidos. |
mtls_subjects | array | [] | Sujetos mTLS permitidos (a través del encabezado de proxy de confianza). |
allowed_tools | array | [] | Lista opcional de herramientas permitidas para llamadas entrantes. |
principals | array | [] | Mapeos opcionales de principal a rol. |
Ejemplo de token de portador:
[server.auth]
mode = "bearer_token"
bearer_tokens = ["token-1", "token-2"]
allowed_tools = ["scenario_define", "scenario_start", "scenario_next"]
ejemplo de sujeto mTLS (a través de encabezado de proxy de confianza):
[server.auth]
mode = "mtls"
mtls_subjects = ["CN=decision-gate-client,O=Example Corp"]
Cuando se utiliza el modo mtls, el servidor espera el encabezado x-decision-gate-client-subject de un proxy TLS de confianza.
Ejemplo de mapeo principal (ACL de registro):
[[server.auth.principals]]
subject = "loopback"
policy_class = "prod"
[[server.auth.principals.roles]]
name = "TenantAdmin"
tenant_id = 1
namespace_id = 1
El ACL del registro incorporado espera valores de policy_class como prod, project o scratch (sin distinción entre mayúsculas y minúsculas). Los valores desconocidos se tratan como prod.
[server.audit]
Configuración de registro de auditoría estructurada.
| Campo | Tipo | Predeterminado | Notas |
|---|---|---|---|
enabled | bool | true | Habilitar el registro de auditoría estructurado (líneas JSON). |
path | string | null | Ruta del registro de auditoría (líneas JSON). |
log_precheck_payloads | bool | false | Registrar cargas útiles de prechequeo en bruto (opción explícita). |
[server.feedback]
Controles de divulgación de comentarios para las respuestas de la herramienta.
| Campo | Tipo | Predeterminado | Notas |
|---|---|---|---|
scenario_next | tabla | { default = “summary”, local_only_default = “trace”, max = “trace” } | Política de retroalimentación para las respuestas de scenario_next. |
Niveles de retroalimentación: summary (solo puertas no cumplidas), trace (estado de puerta + condición), evidence (incluye registros de evidencia, sujeto a la política de divulgación).
[server.feedback.scenario_next]
Política de retroalimentación para respuestas de scenario_next.
| Campo | Tipo | Predeterminado | Notas |
|---|---|---|---|
default | ”summary” | “trace” | “evidence” | summary | Nivel de retroalimentación predeterminado para solicitudes no locales. |
local_only_default | ”summary” | “trace” | “evidence” | trace | Nivel de retroalimentación predeterminado para solicitudes solo locales. |
max | ”summary” | “trace” | “evidence” | trace | Nivel máximo de retroalimentación permitido. |
trace_subjects | array | [“loopback”, “stdio”] | Identificadores de sujeto permitidos para solicitar retroalimentación de trazas. |
trace_roles | array | [] | Nombres de roles permitidos para solicitar retroalimentación de trazas. |
evidence_subjects | array | [] | Identificadores de sujeto permitidos para solicitar retroalimentación de evidencia. |
evidence_roles | array | [] | Nombres de roles permitidos para solicitar retroalimentación de evidencia. |
Los valores predeterminados solo locales se aplican a loopback/stdio. Los sujetos y roles se resuelven a partir de server.auth.principals.
[server.tools]
Configuración de visibilidad de herramientas para la salida de herramientas/lista.
| Campo | Tipo | Predeterminado | Notas |
|---|---|---|---|
mode | ”filter” | “passthrough” | filter | Modo de visibilidad para la salida de herramientas/lista. |
allowlist | array | [] | |
denylist | array | [] |
La visibilidad es independiente de la autenticación: las herramientas ocultas se omiten de tools/list y se tratan como desconocidas cuando se llaman.
[server.limits]
Solicitar concurrencia y límites de tasa.
| Campo | Tipo | Predeterminado | Notas |
|---|---|---|---|
max_inflight | entero | 256 | Máximo de solicitudes MCP concurrentes. |
rate_limit | tabla | null | Configuración de límite de tasa opcional. |
[server.limits.rate_limit]
Configuración de límite de tasa opcional estilo token-bucket.
| Campo | Tipo | Predeterminado | Notas |
|---|---|---|---|
max_requests | entero | 1000 | Máximo de solicitudes por ventana de límite de tasa. |
window_ms | entero | 1000 | Ventana de límite de tasa en milisegundos. |
max_entries | entero | 4096 | Máximo de entradas de límite de tasa distintas. |
[server.tls]
Configuración de TLS para transportes HTTP/SSE.
| Campo | Tipo | Predeterminado | Notas |
|---|---|---|---|
cert_path | cadena | n/a | Certificado TLS del servidor (PEM). |
key_path | cadena | n/a | Clave privada TLS del servidor (PEM). |
client_ca_path | cadena | null | Paquete CA del cliente opcional para mTLS. |
require_client_cert | bool | true | Requiere certificado del cliente para mTLS. |
[dev]
Sobrescrituras explícitas de permisos de desarrollo (solo con opt-in).
| Campo | Tipo | Predeterminado | Notas |
|---|---|---|---|
permissive | bool | false | Habilitar modo dev-permissive (opción explícita). |
permissive_scope | ”asserted_evidence_only” | asserted_evidence_only | Selección de ámbito dev-permissive. |
permissive_ttl_days | integer | null | TTL opcional para advertencias dev-permissive (días). |
permissive_warn | bool | true | Emitir advertencias cuando dev-permissive esté habilitado/expirado. |
permissive_exempt_providers | array | [“assetcore_read”, “assetcore”] | Proveedores exentos de relajaciones dev-permissive. |
Dev-permissive es rechazado cuando namespace.authority.mode = "assetcore_http".
[namespace]
Lista blanca de espacios de nombres y selección de autoridad.
| Campo | Tipo | Predeterminado | Notas |
|---|---|---|---|
allow_default | bool | false | Permitir el ID del espacio de nombres predeterminado (1). |
default_tenants | array | [] | Lista de permitidos de inquilinos requerida cuando allow_default es verdadero. |
authority | table | { mode = “none” } | Selección del backend de autoridad del espacio de nombres. |
[namespace.authority]
Configuración del backend de autoridad de namespace.
| Campo | Tipo | Predeterminado | Notas |
|---|---|---|---|
mode | ”none” | “assetcore_http” | none | Selección del backend de autoridad de namespace. |
assetcore | tabla | null | Configuraciones de autoridad de namespace de Asset Core. |
[namespace.authority.assetcore]
Configuración de autoridad del espacio de nombres de Asset Core.
| Campo | Tipo | Predeterminado | Notas |
|---|---|---|---|
base_url | cadena | n/a | URL base del daemon de escritura de Asset Core. |
auth_token | cadena | null | Token de portador opcional para la búsqueda de espacio de nombres. |
connect_timeout_ms | entero | 500 | Tiempo de espera de conexión HTTP (ms). |
request_timeout_ms | entero | 2000 | Tiempo de espera de solicitud HTTP (ms). |
Ejemplo de autoridad de Asset Core:
[namespace.authority]
mode = "assetcore_http"
[namespace.authority.assetcore]
base_url = "http://127.0.0.1:9001"
auth_token = "token"
connect_timeout_ms = 500
request_timeout_ms = 2000
[confianza]
Configuraciones predeterminadas de la confianza y aplicación de la firma del proveedor.
| Campo | Tipo | Predeterminado | Notas |
|---|---|---|---|
default_policy | ”audit” | audit | Política de confianza predeterminada para proveedores. |
min_lane | ”verified” | “asserted” | verified | Mínima evidencia de confianza aceptada. |
require_signature formulario:
[trust]
default_policy = { require_signature = { keys = ["key1.pub"] } }
[evidencia]
Política de divulgación de evidencia por defecto.
| Campo | Tipo | Predeterminado | Notas |
|---|---|---|---|
allow_raw_values | bool | false | Permitir la divulgación de valores de evidencia en bruto. |
require_provider_opt_in | bool | true | Requerir la aceptación del proveedor para la divulgación en bruto. |
[descubrimientodelproveedor]
Controles de divulgación del contrato/esquema del proveedor.
| Campo | Tipo | Predeterminado | Notas |
|---|---|---|---|
allowlist | array | [] | Lista de permitidos opcional para la divulgación del proveedor. |
denylist | array | [] | Identificadores de proveedores denegados para la divulgación. |
max_response_bytes | integer | 1048576 | Tamaño máximo de respuesta para herramientas de descubrimiento de proveedores. |
[anclas]
Configuración de la política de anclaje de evidencia.
| Campo | Tipo | Predeterminado | Notas |
|---|---|---|---|
providers | array | [] | Requisitos de anclaje específicos del proveedor. |
[[anchors.providers]]
Requisitos de anclaje específicos del proveedor.
| Campo | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
provider_id | cadena | sí | n/a | Identificador del proveedor que requiere anclajes. |
anchor_type | cadena | sí | n/a | Identificador del tipo de anclaje esperado en los resultados. |
required_fields | array | sí | n/a | Campos requeridos en anchor_value. |
Ejemplo de política de anclaje (Asset Core):
[anchors]
[[anchors.providers]]
provider_id = "assetcore_read"
anchor_type = "assetcore.anchor_set"
required_fields = ["assetcore.namespace_id", "assetcore.commit_id", "assetcore.world_seq"]
[política]
Selección del motor de políticas de despacho.
| Campo | Tipo | Predeterminado | Notas |
|---|---|---|---|
engine | ”permit_all” | “deny_all” | “static” | permit_all | Selección del motor de política de despacho. |
static | tabla | null | Reglas de política de despacho estático. |
Ejemplo de política estática:
[policy]
engine = "static"
[policy.static]
default = "deny"
[[policy.static.rules]]
effect = "permit"
target_kinds = ["agent"]
require_labels = ["public"]
[policy.static]
Reglas de política de despacho estático.
| Campo | Tipo | Predeterminado | Notas |
|---|---|---|---|
default | ”permitir” | “denegar” | denegar | Decisión predeterminada cuando no coinciden las reglas. |
rules | array | [] | Lista ordenada de reglas de política estáticas. |
[[policy.static.rules]]
Campos de reglas de política estática.
| Campo | Tipo | Predeterminado | Notas |
|---|---|---|---|
effect | ”permitir” | “denegar” | “error” | n/a | Efecto de la regla. |
error_message | cadena | null | Mensaje de error cuando el efecto es ‘error’. |
target_kinds | array | [] | Tipos de destino que pueden recibir el paquete. |
targets | array | [] | Selectores de destino específicos. |
require_labels | array | [] | Etiquetas de visibilidad requeridas para coincidir. |
forbid_labels | array | [] | Etiquetas de visibilidad que bloquean una coincidencia. |
require_policy_tags | array | [] | Etiquetas de política requeridas para coincidir. |
forbid_policy_tags | array | [] | Etiquetas de política que bloquean una coincidencia. |
content_types | array | [] | Tipos de contenido permitidos. |
schema_ids | array | [] | Identificadores de esquema permitidos. |
packet_ids | array | [] | Identificadores de paquete permitidos. |
stage_ids | array | [] | Identificadores de etapa permitidos. |
scenario_ids | array | [] | Identificadores de escenario permitidos. |
Campos del selector de destino (policy.static.rules.targets):
| Campo | Tipo | Notas |
|---|---|---|
target_kind | ”agent” | “session” | “external” | “channel” | Tipo de objetivo. |
target_id | cadena | Identificador de agente/sesión/canal. |
system | cadena | Nombre del sistema externo (solo externo). |
target | cadena | Identificador del objetivo externo (solo externo). |
[validación]
Política de validación de comparadores para escenarios y prechecks.
| Campo | Tipo | Predeterminado | Notas |
|---|---|---|---|
strict | bool | true | Hacer cumplir la validación del comparador estricto. |
profile | ”strict_core_v1” | strict_core_v1 | Identificador del perfil de comparador estricto. |
allow_permissive | bool | false | Opción explícita para la validación permisiva. |
enable_lexicographic | bool | false | Habilitar comparadores lexicográficos (opción por esquema). |
enable_deep_equals | bool | false | Habilitar comparadores de igualdad profunda (opción por esquema). |
Validación estricta (por defecto):
[validation]
strict = true
profile = "strict_core_v1"
Validación permisiva (opt-in explícito):
[validation]
strict = false
allow_permissive = true
Familias de comparadores opcionales:
[validation]
enable_lexicographic = true
enable_deep_equals = true
[runpack_storage]
Configuración de almacenamiento de Runpack.
| Campo | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
type | ”object_store” | sí | n/a | Selección del backend de almacenamiento de runpack. |
provider | ”s3” | sí | n/a | Proveedor de almacenamiento de objetos. |
bucket | string | sí | n/a | Nombre del bucket para el almacenamiento de runpack. |
region | string | no | null | Anulación opcional de la región S3. |
endpoint | string | no | null | Endpoint opcional compatible con S3. |
prefix | string | no | null | Prefijo de clave opcional dentro del bucket. |
force_path_style | bool | no | false | Forzar la dirección de estilo de ruta (compatible con S3). |
allow_http | bool | no | false | Permitir endpoints no TLS (opción explícita). |
[runstatestore]
Ejecutar configuraciones de persistencia del estado de ejecución.
| Campo | Tipo | Predeterminado | Notas |
|---|---|---|---|
type | ”memory” | “sqlite” | memory | Selección del backend de almacenamiento del estado de ejecución. |
path | cadena | null | Ruta de la base de datos SQLite. |
busy_timeout_ms | entero | 5000 | Tiempo de espera ocupado de SQLite (ms). |
journal_mode | ”wal” | “delete” | wal | Modo de diario de SQLite. |
sync_mode | ”full” | “normal” | full | Modo de sincronización de SQLite. |
max_versions | entero | null | Máximas versiones opcionales retenidas por ejecución. |
Ejemplo de SQLite:
[run_state_store]
type = "sqlite"
path = "decision-gate.db"
journal_mode = "wal"
sync_mode = "full"
busy_timeout_ms = 5000
max_versions = 1000
[schema_registry]
Persistencia y límites del registro de esquemas.
| Campo | Tipo | Predeterminado | Notas |
|---|---|---|---|
type | ”memory” | “sqlite” | memory | Selección del backend del registro de esquemas. |
path | cadena | null | Ruta de la base de datos SQLite. |
busy_timeout_ms | entero | 5000 | Tiempo de espera ocupado de SQLite (ms). |
journal_mode | ”wal” | “delete” | wal | Modo de diario de SQLite. |
sync_mode | ”full” | “normal” | full | Modo de sincronización de SQLite. |
max_schema_bytes | entero | 1048576 | Tamaño máximo de carga útil del esquema en bytes. |
max_entries | entero | null | Máximo opcional de esquemas por inquilino + espacio de nombres. |
acl | tabla | { mode = “builtin” } | Configuración de ACL del registro de esquemas. |
[schema_registry.acl]
Configuración de ACL del registro de esquemas.
| Campo | Tipo | Predeterminado | Notas |
|---|---|---|---|
mode | ”builtin” | “custom” | builtin | Reglas de rol integradas o reglas de ACL personalizadas. |
default | ”deny” | “allow” | deny | Decisión predeterminada cuando no hay coincidencias de reglas (solo personalizado). |
allow_local_only | bool | false | Permitir que los sujetos solo locales accedan al registro al usar la ACL integrada. |
require_signing | bool | false | Requerir metadatos de firma de esquema en las escrituras. |
rules | array | [] | Reglas de ACL personalizadas (modo = custom). |
La ACL incorporada se basa en server.auth.principals para la resolución de roles y policy_class. Sin los principales, el acceso al registro se niega por defecto a menos que allow_local_only esté habilitado (solo loopback/stdio). Habilite allow_local_only por conveniencia en desarrollo; elude el mapeo de principales para llamadores solo locales.
Ejemplo de ACL personalizada:
[schema_registry.acl]
mode = "custom"
default = "deny"
[[schema_registry.acl.rules]]
effect = "allow"
actions = ["register", "list", "get"]
tenants = [1]
namespaces = [1]
roles = ["TenantAdmin", "NamespaceAdmin"]
[[schema_registry.acl.rules]]
Campos de regla ACL personalizados.
| Campo | Tipo | Predeterminado | Notas |
|---|---|---|---|
effect | ”allow” | “deny” | n/a | Efecto de la regla. |
actions | array | [] | Acciones del registro cubiertas por la regla. |
tenants | array | [] | Alcance del identificador del inquilino. |
namespaces | array | [] | Alcance del identificador del espacio de nombres. |
subjects | array | [] | Sujetos principales en alcance. |
roles | array | [] | Nombres de roles en alcance. |
policy_classes | array | [] | Etiquetas de clase de política en alcance. |
[docs]
Búsqueda de documentación y configuración de recursos.
| Campo | Tipo | Predeterminado | Notas |
|---|---|---|---|
enabled | bool | true | Habilitar superficies de documentos globalmente. |
enable_search | bool | true | Habilitar herramienta de búsqueda de documentos. |
enable_resources | bool | true | Habilitar lista/lectura de recursos MCP. |
include_default_docs | bool | true | Incluir el conjunto de documentos predeterminados incrustados. |
extra_paths | array | [] | Rutas de documentos adicionales para ingerir (archivos o directorios). |
max_doc_bytes | integer | 262144 | Tamaño máximo para una entrada de documento única en bytes. |
max_total_bytes | integer | 1048576 | Tamaño total máximo de documentos para el catálogo. |
max_docs | integer | 32 | Número máximo de documentos en el catálogo. |
max_sections | integer | 10 | Máximo de secciones devueltas por la búsqueda de documentos. |
La búsqueda de documentos y los recursos son deterministas y solo locales por defecto. Utilice extra_paths para ingerir archivos o directorios markdown locales.
[[providers]]
Las entradas de proveedor registran proveedores integrados o MCP.
| Campo | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
name | cadena | sí | n/a | Identificador del proveedor. |
type | ”builtin” | “mcp” | sí | n/a | Tipo de proveedor. |
command | array | no | [] | |
url | cadena | no | null | URL HTTP del proveedor. |
allow_insecure_http | bool | no | false | Permitir URLs http:// para proveedores MCP. |
capabilities_path | cadena | no | null | Ruta al contrato de capacidades del proveedor en formato JSON. |
auth | tabla | no | null | |
trust | desconocido | no | null | Política de confianza predeterminada para proveedores. |
allow_raw | bool | no | false | Permitir la divulgación de evidencia en bruto para este proveedor. |
timeouts | tabla | no | { connect_timeout_ms = 2000, request_timeout_ms = 10000 } | Anulaciones de tiempo de espera HTTP para proveedores MCP. |
config | json | no | null | Blob de configuración específico del proveedor. |
auth form:
auth = { bearer_token = "token" }
trust formulario de anulación:
trust = { require_signature = { keys = ["provider.pub"] } }
capabilities_path ejemplo para proveedores de MCP:
[[providers]]
name = "mongo"
type = "mcp"
command = ["mongo-provider", "--stdio"]
capabilities_path = "contracts/mongo_provider.json"
timeouts formulario (proveedores HTTP MCP):
timeouts = { connect_timeout_ms = 2000, request_timeout_ms = 10000 }
Ejemplo de proveedor HTTP con tiempos de espera:
[[providers]]
name = "ci"
type = "mcp"
url = "https://ci.example.com/rpc"
capabilities_path = "contracts/ci_provider.json"
timeouts = { connect_timeout_ms = 2000, request_timeout_ms = 10000 }
Restricciones de tiempo:
connect_timeout_msdebe estar entre 100 y 10000.request_timeout_msdebe estar entre 500 y 30000 y ser >=connect_timeout_ms.
[providers.timeouts]
Timeouts de anulación para proveedores HTTP MCP.
| Campo | Tipo | Predeterminado | Notas |
|---|---|---|---|
connect_timeout_ms | entero | 2000 | Tiempo de espera de conexión TCP/TLS (ms). |
request_timeout_ms | entero | 10000 | Tiempo de espera total de la solicitud (ms). |
Configuración del Proveedor Incorporado
Los proveedores integrados aceptan bloques config opcionales:
time:- allow_logical (bool, por defecto true)
env:- lista blanca (array)
lista_de_negación(array)max_value_bytes(entero)max_key_bytes(entero)- anulaciones (tabla)
json:- raíz (string)
root_id(cadena)max_bytes(entero)- allow_yaml (bool)
http:- allow_http (bool)
timeout_ms(entero)max_response_bytes(entero)allowed_hosts(array)user_agent(cadena)- hash_algorithm (cadena)