configuració decision-gate.toml
Visió general
decision-gate.toml configura el servidor MCP, les polítiques de confiança, els valors per defecte de divulgació d’evidències i el registre de proveïdors. Totes les entrades són validades i fallen tancades en cas d’errors.
Seccions de nivell superior
[server]
Configuració del transport del servidor, autenticació, límits i auditoria.
| Camp | Tipus | Per defecte | Notes |
|---|---|---|---|
transport | ”stdio” | “http” | “sse” | stdio | Protocol de transport per MCP. |
mode | ”strict” | “dev_permissive” | strict | Mode operatiu per MCP (dev_permissive és llegat). |
tls_termination | ”server” | “upstream” | server | On es finalitza TLS per al transport HTTP/SSE. |
bind | cadena | null | Adreça de vinculació per al transport HTTP/SSE. |
max_body_bytes | enter | 1048576 | Mida màxima de la sol·licitud JSON-RPC en bytes. |
limits | taula | { max_inflight = 256 } | Límits de sol·licitud per al servidor MCP. |
auth | taula | null | Configuració d’autenticació d’entrada per a les crides d’eines MCP. |
tls | taula | null | Configuració de TLS per als transports HTTP/SSE. |
audit | taula | { enabled = true } | Configuració de registre d’auditoria estructurada. |
feedback | taula | n/a | Configuració de divulgació de comentaris per a les respostes d’eines. |
tools | taula | { mode = “filter”, allowlist = [], denylist = [] } | Configuració de visibilitat d’eines per a les llistes d’eines MCP. |
HTTP/SSE requereix bind; no-loopback requereix una opció explícita de CLI més TLS o tls_termination = "upstream" + autenticació no local.
[server.auth]
Autenticació i autorització d’entrada per a les trucades d’eines MCP.
| Camp | Tipus | Per defecte | Notes |
|---|---|---|---|
mode | ”local_only” | “bearer_token” | “mtls” | local_only | Mode d’autenticació entrant per a les trucades d’eines MCP. |
bearer_tokens | array | [] | Tokens de portador permesos. |
mtls_subjects | array | [] | Subjectes mTLS permesos (a través de l’encapçalament de proxy de confiança). |
allowed_tools | array | [] | Llista d’eines opcional per a trucades entrants. |
principals | array | [] | Mapeigs opcionals de principals a rols. |
Exemple de token portador:
[server.auth]
mode = "bearer_token"
bearer_tokens = ["token-1", "token-2"]
allowed_tools = ["scenario_define", "scenario_start", "scenario_next"]
Exemple de subjecte mTLS (a través de l’encapçalament de proxy de confiança):
[server.auth]
mode = "mtls"
mtls_subjects = ["CN=decision-gate-client,O=Example Corp"]
Quan s’utilitza el mode mtls, el servidor espera l’encapçalament x-decision-gate-client-subject d’un proxy TLS de confiança.
Exemple de mapeig principal (ACL del registre):
[[server.auth.principals]]
subject = "loopback"
policy_class = "prod"
[[server.auth.principals.roles]]
name = "TenantAdmin"
tenant_id = 1
namespace_id = 1
El registre ACL integrat espera valors de policy_class com prod, project o scratch (sense distinció entre majúscules i minúscules). Els valors desconeguts es tracten com a prod.
[server.audit]
Configuració de registre d’auditoria estructurada.
| Camp | Tipus | Per defecte | Notes |
|---|---|---|---|
enabled | bool | true | Habilita el registre d’auditoria estructurat (linies JSON). |
path | string | null | Ruta del registre d’auditoria (linies JSON). |
log_precheck_payloads | bool | false | Registra les càrregues útils de precomprovació en brut (opció explícita). |
[server.feedback]
Controls de divulgació de comentaris per a les respostes de l’eina.
| Camp | Tipus | Per defecte | Notes |
|---|---|---|---|
scenario_next | taula | { default = “summary”, local_only_default = “trace”, max = “trace” } | Política de retroalimentació per a les respostes de scenario_next. |
Nivells de retroalimentació: summary (només portes no complertes), trace (estat de la porta + condició), evidence (inclou registres d’evidència, subjectes a la política de divulgació).
[server.feedback.scenario_next]
Política de feedback per a les respostes de scenario_next.
| Camp | Tipus | Per defecte | Notes |
|---|---|---|---|
default | ”summary” | “trace” | “evidence” | summary | Nivell de retroalimentació per defecte per a sol·licituds no locals. |
local_only_default | ”summary” | “trace” | “evidence” | trace | Nivell de retroalimentació per defecte per a sol·licituds només locals. |
max | ”summary” | “trace” | “evidence” | trace | Nivell màxim de retroalimentació permès. |
trace_subjects | array | [“loopback”, “stdio”] | Identificadors de subjectes permesos per sol·licitar retroalimentació de traç. |
trace_roles | array | [] | Noms de rols permesos per sol·licitar retroalimentació de traç. |
evidence_subjects | array | [] | Identificadors de subjectes permesos per sol·licitar retroalimentació d’evidència. |
evidence_roles | array | [] | Noms de rols permesos per sol·licitar retroalimentació d’evidència. |
Els valors per defecte només locals s’apliquen a loopback/stdio. Els subjectes i rols es resolen a partir de server.auth.principals.
[server.tools]
Configuració de visibilitat de les eines per a la sortida d’eines/llista.
| Camp | Tipus | Per defecte | Notes |
|---|---|---|---|
mode | ”filter” | “passthrough” | filter | Mode de visibilitat per a l’output d’eines/llista. |
allowlist | array | [] | |
denylist | array | [] |
La visibilitat és independent de l’autenticació: les eines ocultes s’ometen de tools/list i es tracten com a desconegudes quan s’invoquen.
[server.limits]
Sol·licituds de concurrència i límits de taxa.
| Camp | Tipus | Per defecte | Notes |
|---|---|---|---|
max_inflight | enter | 256 | Màxim de sol·licituds MCP concurrent. |
rate_limit | taula | null | Configuració opcional de límit de taxa. |
[server.limits.rate_limit]
Configuració opcional de límit de taxa al estil de bucket.
| Camp | Tipus | Per defecte | Notes |
|---|---|---|---|
max_requests | enter | 1000 | Màxim de sol·licituds per finestra de límit de taxa. |
window_ms | enter | 1000 | Finestra de límit de taxa en mil·lisegons. |
max_entries | enter | 4096 | Màxim d’entrades distintes del límit de taxa. |
[server.tls]
Configuració TLS per a transports HTTP/SSE.
| Camp | Tipus | Per defecte | Notes |
|---|---|---|---|
cert_path | cadena | n/a | Certificat TLS del servidor (PEM). |
key_path | cadena | n/a | Clau privada TLS del servidor (PEM). |
client_ca_path | cadena | null | Paquet CA del client opcional per mTLS. |
require_client_cert | bool | true | Requerir certificat del client per mTLS. |
[dev]
Overrides explícits de permís de desenvolupament (només opt-in).
| Camp | Tipus | Per defecte | Notes |
|---|---|---|---|
permissive | bool | false | Habilita el mode dev-permissive (opció explícita). |
permissive_scope | ”asserted_evidence_only” | asserted_evidence_only | Selecció de l’abast dev-permissive. |
permissive_ttl_days | integer | null | TTL opcional per a advertències dev-permissive (dies). |
permissive_warn | bool | true | Emetre advertències quan dev-permissive estigui habilitat/expirat. |
permissive_exempt_providers | array | [“assetcore_read”, “assetcore”] | Proveïdors exempts de relaxacions dev-permissive. |
Dev-permissive és rebutjat quan namespace.authority.mode = "assetcore_http".
[namespace]
Llista blanca de namespaces i selecció d’autoritat.
| Camp | Tipus | Per defecte | Notes |
|---|---|---|---|
allow_default | bool | false | Permetre l’ID de l’espai de noms per defecte (1). |
default_tenants | array | [] | Llista blanca de llogaters requerida quan allow_default és true. |
authority | table | { mode = “none” } | Selecció del backend d’autoritat de l’espai de noms. |
[namespace.authority]
Configuració del backend de l’autoritat del namespace.
| Camp | Tipus | Per defecte | Notes |
|---|---|---|---|
mode | ”none” | “assetcore_http” | none | Selecció del backend d’autoritat de namespace. |
assetcore | taula | null | Configuracions d’autoritat de namespace d’Asset Core. |
[namespace.authority.assetcore]
Configuració de l’autoritat del namespace d’Asset Core.
| Camp | Tipus | Per defecte | Notes |
|---|---|---|---|
base_url | cadena | n/a | URL base del daemon d’escriptura d’Asset Core. |
auth_token | cadena | null | Token d’autenticació opcional per a la cerca d’espai de noms. |
connect_timeout_ms | enter | 500 | Temps d’espera de connexió HTTP (ms). |
request_timeout_ms | enter | 2000 | Temps d’espera de sol·licitud HTTP (ms). |
Exemple d’autoritat d’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
[trust]
Confiança per defecte i aplicació de la signatura del proveïdor.
| Camp | Tipus | Per defecte | Notes |
|---|---|---|---|
default_policy | ”audit” | audit | Política de confiança per defecte per als proveïdors. |
min_lane | ”verified” | “asserted” | verified | Mínima evidència de confiança acceptada. |
require_signature formulari:
[trust]
default_policy = { require_signature = { keys = ["key1.pub"] } }
[evidència]
Política de divulgació d’evidències per defecte.
| Camp | Tipus | Per defecte | Notes |
|---|---|---|---|
allow_raw_values | bool | false | Permetre que es revelin valors d’evidència en brut. |
require_provider_opt_in | bool | true | Requerir que el proveïdor opti per la divulgació en brut. |
[provider_discovery]
Controls de divulgació del contracte/schema del proveïdor.
| Camp | Tipus | Per defecte | Notes |
|---|---|---|---|
allowlist | array | [] | Llista d’aprovació opcional per a la divulgació del proveïdor. |
denylist | array | [] | Identificadors del proveïdor denegats per a la divulgació. |
max_response_bytes | integer | 1048576 | Mida màxima de resposta per a les eines de descoberta del proveïdor. |
[ancoratges]
Configuració de la política d’ancoratge d’evidència.
| Camp | Tipus | Per defecte | Notes |
|---|---|---|---|
providers | array | [] | Requisits d’ancoratge específics del proveïdor. |
[[anchors.providers]]
Requisits d’ancoratge específics del proveïdor.
| Camp | Tipus | Requerit | Per defecte | Notes |
|---|---|---|---|---|
provider_id | cadena | sí | n/a | Identificador del proveïdor que requereix ancoratges. |
anchor_type | cadena | sí | n/a | Identificador del tipus d’ancoratge esperat en els resultats. |
required_fields | array | sí | n/a | Camps requerits en anchor_value. |
Exemple de política d’ancoratge (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ó del motor de política de dispatch.
| Camp | Tipus | Per defecte | Notes |
|---|---|---|---|
engine | ”permit_all” | “deny_all” | “static” | permit_all | Selecció del motor de política de dispatch. |
static | taula | null | Regles de política de dispatch estàtic. |
Exemple 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]
Regles de política de despach estàtic.
| Camp | Tipus | Per defecte | Notes |
|---|---|---|---|
default | ”permetre” | “denegar” | denegar | Decisió per defecte quan no coincideixen regles. |
rules | array | [] | Llista ordenada de regles de política estàtiques. |
[[policy.static.rules]]
Regles de política estàtica.
| Camp | Tipus | Per defecte | Notes |
|---|---|---|---|
effect | ”permetre” | “denegar” | “error” | n/a | Efecte de la regla. |
error_message | cadena | null | Missatge d’error quan l’efecte és ‘error’. |
target_kinds | array | [] | Tipus d’objectius que poden rebre el paquet. |
targets | array | [] | Seleccionadors d’objectius específics. |
require_labels | array | [] | Etiquetes de visibilitat requerides per coincidir. |
forbid_labels | array | [] | Etiquetes de visibilitat que bloquegen una coincidència. |
require_policy_tags | array | [] | Etiquetes de política requerides per coincidir. |
forbid_policy_tags | array | [] | Etiquetes de política que bloquegen una coincidència. |
content_types | array | [] | Tipus de contingut permesos. |
schema_ids | array | [] | Identificadors d’esquema permesos. |
packet_ids | array | [] | Identificadors de paquet permesos. |
stage_ids | array | [] | Identificadors d’etapa permesos. |
scenario_ids | array | [] | Identificadors d’escenari permesos. |
Camp de selectors de destinació (policy.static.rules.targets):
| Camp | Tipus | Notes |
|---|---|---|
target_kind | ”agent” | “sessió” | “extern” | “canal” | Tipus de destí. |
target_id | cadena | Identificador d’agent/sessió/canal. |
system | cadena | Nom del sistema extern (només extern). |
target | cadena | Identificador de destí extern (només extern). |
[validació]
Política de validació del comparador per a escenaris i precomprovacions.
| Camp | Tipus | Per defecte | Notes |
|---|---|---|---|
strict | bool | true | Aplicar la validació estricta del comparador. |
profile | ”strict_core_v1” | strict_core_v1 | Identificador del perfil del comparador estricte. |
allow_permissive | bool | false | Opt-in explícit per a la validació permissiva. |
enable_lexicographic | bool | false | Habilitar comparadors lexicogràfics (opt-in per esquema). |
enable_deep_equals | bool | false | Habilitar comparadors d’igualtat profunda (opt-in per esquema). |
Validació estricta (per defecte):
[validation]
strict = true
profile = "strict_core_v1"
Validació permissiva (opt-in explícit):
[validation]
strict = false
allow_permissive = true
Famílies de comparadors opcionals:
[validation]
enable_lexicographic = true
enable_deep_equals = true
[runpack_storage]
Configuració d’emmagatzematge de Runpack.
| Camp | Tipus | Requerit | Per defecte | Notes |
|---|---|---|---|---|
type | ”object_store” | sí | n/a | Selecció del backend d’emmagatzematge Runpack. |
provider | ”s3” | sí | n/a | Proveïdor d’emmagatzematge d’objectes. |
bucket | cadena | sí | n/a | Nom del bucket per a l’emmagatzematge Runpack. |
region | cadena | no | null | Override opcional de la regió S3. |
endpoint | cadena | no | null | Endpoint opcional compatible amb S3. |
prefix | cadena | no | null | Prefix de clau opcional dins del bucket. |
force_path_style | bool | no | false | Forçar l’adreçament en estil de ruta (compatible amb S3). |
allow_http | bool | no | false | Permetre endpoints no TLS (opció explícita). |
[runstatestore]
Configuració de persistència de l’estat d’execució.
| Camp | Tipus | Per defecte | Notes |
|---|---|---|---|
type | ”memory” | “sqlite” | memory | Selecció del backend de magatzem d’estat d’execució. |
path | cadena | null | Ruta de la base de dades SQLite. |
busy_timeout_ms | enter | 5000 | Temps d’espera ocupat de SQLite (ms). |
journal_mode | ”wal” | “delete” | wal | Mode de diari de SQLite. |
sync_mode | ”full” | “normal” | full | Mode de sincronització de SQLite. |
max_versions | enter | null | Versions màximes opcionals retingudes per execució. |
Exemple 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]
Persistència i límits del registre d’esquema.
| Camp | Tipus | Per defecte | Notes |
|---|---|---|---|
type | ”memory” | “sqlite” | memory | Selecció del backend del registre d’esquema. |
path | cadena | null | Ruta de la base de dades SQLite. |
busy_timeout_ms | enter | 5000 | Temps d’espera ocupat de SQLite (ms). |
journal_mode | ”wal” | “delete” | wal | Mode de diari de SQLite. |
sync_mode | ”full” | “normal” | full | Mode de sincronització de SQLite. |
max_schema_bytes | enter | 1048576 | Mida màxima de càrrega d’esquema en bytes. |
max_entries | enter | null | Màxim d’esquemes per inquilí + espai de noms (opcional). |
acl | taula | { mode = “builtin” } | Configuració de l’ACL del registre d’esquema. |
[schema_registry.acl]
Configuració d’ACL del registre d’esquemes.
| Camp | Tipus | Per defecte | Notes |
|---|---|---|---|
mode | ”builtin” | “custom” | builtin | Regles de rol integrades o regles ACL personalitzades. |
default | ”deny” | “allow” | deny | Decisió per defecte quan no coincideixen regles (només personalitzat). |
allow_local_only | bool | false | Permetre que els subjectes només locals accedeixin al registre quan s’utilitza l’ACL integrat. |
require_signing | bool | false | Requerir metadades de signatura de esquema en escriptures. |
rules | array | [] | Regles ACL personalitzades (mode = custom). |
L’ACL integrat es basa en server.auth.principals per a la resolució de rols i policy_class. Sense principals, l’accés al registre es nega per defecte, a menys que allow_local_only estigui habilitat (només loopback/stdio). Habilita allow_local_only per a conveniència només en desenvolupament; evita el mapeig de principals per a trucades només locals.
Exemple d’ACL personalitzat:
[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]]
Regles de camp ACL personalitzades.
| Camp | Tipus | Per defecte | Notes |
|---|---|---|---|
effect | ”allow” | “deny” | n/a | Efecte de la regla. |
actions | array | [] | Accions del registre cobertes per la regla. |
tenants | array | [] | Àmbit d’identificació del llogater. |
namespaces | array | [] | Àmbit d’identificació de l’espai de noms. |
subjects | array | [] | Subjectes principals en àmbit. |
roles | array | [] | Noms de rols en àmbit. |
policy_classes | array | [] | Etiquetes de classe de política en àmbit. |
[docs]
Cerca de documentació i configuració de recursos.
| Camp | Tipus | Per defecte | Notes |
|---|---|---|---|
enabled | bool | true | Habilitar superfícies de docs globalment. |
enable_search | bool | true | Habilitar eina de cerca de docs. |
enable_resources | bool | true | Habilitar llista/lectura de recursos MCP. |
include_default_docs | bool | true | Incloure el conjunt de docs per defecte integrat. |
extra_paths | array | [] | Camins de docs addicionals a ingerir (fitxers o directoris). |
max_doc_bytes | integer | 262144 | Mida màxima per a una sola entrada de doc en bytes. |
max_total_bytes | integer | 1048576 | Mida total màxima de bytes de docs per al catàleg. |
max_docs | integer | 32 | Nombre màxim de docs al catàleg. |
max_sections | integer | 10 | Seccions màximes retornades per la cerca de docs. |
La cerca de documents i els recursos són deterministes i només locals per defecte. Utilitzeu extra_paths per ingerir fitxers o directoris markdown locals.
[[providers]]
Les entrades del proveïdor registren proveïdors integrats o MCP.
| Camp | Tipus | Requerit | Per defecte | Notes |
|---|---|---|---|---|
name | cadena | sí | n/a | Identificador del proveïdor. |
type | ”integrat” | “mcp” | sí | n/a | Tipus de proveïdor. |
command | array | no | [] | |
url | cadena | no | null | URL HTTP del proveïdor. |
allow_insecure_http | bool | no | false | Permetre URLs http:// per a proveïdors MCP. |
capabilities_path | cadena | no | null | Ruta al contracte de capacitats del proveïdor en JSON. |
auth | taula | no | null | |
trust | desconegut | no | null | Política de confiança per defecte per als proveïdors. |
allow_raw | bool | no | false | Permetre la divulgació d’evidències en brut per a aquest proveïdor. |
timeouts | taula | no | { connect_timeout_ms = 2000, request_timeout_ms = 10000 } | Overrides de temps d’espera HTTP per a proveïdors MCP. |
config | json | no | null | Blob de configuració específic del proveïdor. |
auth form:
auth = { bearer_token = "token" }
trust formulari d’override:
trust = { require_signature = { keys = ["provider.pub"] } }
capabilities_path exemple per a proveïdors MCP:
[[providers]]
name = "mongo"
type = "mcp"
command = ["mongo-provider", "--stdio"]
capabilities_path = "contracts/mongo_provider.json"
timeouts form (proveïdors HTTP MCP):
timeouts = { connect_timeout_ms = 2000, request_timeout_ms = 10000 }
Exemple de proveïdor HTTP amb temps d’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 }
Restriccions de temps:
connect_timeout_msha de ser entre 100 i 10000.request_timeout_msha de ser entre 500 i 30000 i >=connect_timeout_ms.
[providers.timeouts]
Temps d’espera per als proveïdors MCP HTTP.
| Camp | Tipus | Per defecte | Notes |
|---|---|---|---|
connect_timeout_ms | enter | 2000 | Temps d’espera de connexió TCP/TLS (ms). |
request_timeout_ms | enter | 10000 | Temps d’espera total de la sol·licitud (ms). |
Configuració del Proveïdor Integrat
Els proveïdors integrats accepten blocs config opcionals:
time:- allow_logical (bool, per defecte true)
env:- llista permesa (array)
denylist(array)max_value_bytes(enter)max_key_bytes(enter)- substitucions (taula)
json:- root (cadena)
root_id(cadena)max_bytes(enter)- allow_yaml (bool)
http:- allow_http (bool)
timeout_ms(enter)max_response_bytes(enter)allowed_hosts(array)user_agent(cadena)- hash_algorithm (cadena)