Referencia de Configuración
Wippy se configura mediante archivos .wippy.yaml. Todas las opciones tienen valores por defecto razonables.
Cualquier valor a continuación puede sobrescribirse en el arranque con wippy run --set section.path=value (repetible, tiene prioridad sobre el archivo). Para sobrescribir entradas individuales del registro en lugar de estas secciones de configuración, usa la sección override: o -o — consulta Sobrescribir entradas.
Composición de Configuración {#config-composition}
--config es repetible; los archivos se componen de izquierda a derecha usando el mismo esquema:
wippy run --config .wippy.yaml --config .wippy.local.yaml
- Los archivos posteriores sobrescriben los valores coincidentes y conservan todo lo demás.
- Cada archivo nombrado explícitamente debe existir. Sin
--config, el.wippy.yamlpor defecto es opcional. - El primer archivo ancla el directorio usado para resolver rutas relativas.
- Los nombres de archivo no tienen significado reservado; nada aparte del archivo por defecto se descubre automáticamente.
La configuración se aplica en orden: composición de archivos, luego las selecciones de --profile, luego las sobrescrituras de --set. Para aplicaciones ejecutadas desde packs, los valores por defecto de runtime empaquetados se sitúan por debajo de todos estos (ver Publicar Valores por Defecto de Runtime).
Perfiles {#profiles}
Un archivo de configuración puede declarar overlays con nombre bajo profiles:. Cada cuerpo de perfil refleja las secciones normales de configuración; seleccionarlo con --profile <name> superpone esos valores sobre la configuración base fusionada:
version: "1.0"
vars:
port: 8085
override:
app:db:kind: db.sql.sqlite
disable:
namespaces: ["legacy.**"]
profiles:
pg:
vars:
port: 18085
override:
app:db:kind: db.sql.postgres
disable:
namespaces.add: ["experimental.**"]
wippy run --profile pg
--profilees repetible; los perfiles se componen de izquierda a derecha, después de la composición de archivos y antes de--set. Un nombre desconocido es un error.- Los valores se fusionan por hoja (el último en escribir gana). La propia sección
profiles:se elimina de la configuración resuelta. - La sección
disableadmite operaciones de lista dentro de perfiles —namespaces.add,namespaces.remove,entries.add,entries.remove— de modo que un perfil puede ajustar la lista base en lugar de reemplazarla. - Las referencias
${name}se interpolan desde la secciónvars:fusionada. Las referencias a variables de entorno del SO no están permitidas dentro de las vars de perfil; usa${env:NAME}en la configuración base, resuelta al cargar el archivo.
wippy run, test y pack aceptan --profile; install, update, lint y registry también lo aceptan para perfiles de workspace (junto con --set). Las aplicaciones pueden distribuir perfiles dentro de packs — ver Publicar Perfiles.
Logger
Controla el codificador del logger zap. Los flags de CLI (-v, -c, -s) sobrescriben el nivel/salida; la única opción controlada por yaml es la codificación.
| Campo | Tipo | Por defecto | Descripción |
|---|---|---|---|
encoding |
string | console | Codificador: console (humanizado) o json (estructurado) |
logger:
encoding: json
Gestor de Registros
Controla el enrutamiento de registros del runtime. La salida en consola se configura mediante flags de CLI (-v, -c, -s).
| Campo | Tipo | Por defecto | Descripción |
|---|---|---|---|
propagate_downstream |
bool | true | Enviar registros a la salida de consola/archivo |
stream_to_events |
bool | false | Publicar registros al bus de eventos para acceso programático |
min_level |
int | -1 | Nivel mínimo: -1=debug, 0=info, 1=warn, 2=error |
logmanager:
propagate_downstream: true
stream_to_events: false
min_level: 0
Ver: Módulo Logger
Profiler
Servidor HTTP de pprof de Go para perfilado de CPU/memoria. Habilitarlo con el flag -p o mediante configuración.
| Campo | Tipo | Por defecto | Descripción |
|---|---|---|---|
enabled |
bool | false | Iniciar servidor de perfilado |
address |
string | localhost:6060 | Dirección de escucha |
read_timeout |
duration | 15s | Tiempo de espera de lectura HTTP |
write_timeout |
duration | 15s | Tiempo de espera de escritura HTTP |
idle_timeout |
duration | 60s | Tiempo de espera de keep-alive |
profiler:
enabled: true
address: "localhost:6060"
Acceso en http://localhost:6060/debug/pprof/
Seguridad
Comportamiento de seguridad global. Las políticas individuales se definen como entradas security.policy.
| Campo | Tipo | Por defecto | Descripción |
|---|---|---|---|
strict_mode |
bool | false | Denegar acceso cuando el contexto de seguridad está incompleto |
security:
strict_mode: true
Ver: Sistema de Seguridad, Módulo de Seguridad
Registro
Almacenamiento de entradas e historial de versiones. El registro almacena todas las entradas de configuración.
| Campo | Tipo | Por defecto | Descripción |
|---|---|---|---|
enable_history |
bool | true | Rastrear versiones de entradas |
history_type |
string | memory | Almacenamiento: memory, sqlite, nil |
history_path |
string | .wippy/registry.db | Ruta del archivo SQLite |
registry:
history_type: sqlite
history_path: /var/lib/wippy/registry.db
Ver: Concepto de Registro, Módulo de Registro
Relay
Enrutamiento de mensajes entre procesos a través de nodos.
| Campo | Tipo | Por defecto | Descripción |
|---|---|---|---|
node_name |
string | local | Identificador de este nodo relay |
relay:
node_name: worker-1
Ver: Modelo de Procesos
Supervisor
Gestión del ciclo de vida de servicios. Controla el buzón de control interno del supervisor utilizado para despachar eventos de ciclo de vida.
| Campo | Tipo | Por defecto | Descripción |
|---|---|---|---|
host.buffer_size |
int | 1024 | Capacidad del buzón de control interno |
host.worker_count |
int | 16 | Workers del despachador concurrentes |
supervisor:
host:
buffer_size: 2048
worker_count: 32
Ver: Guía de Supervisión
Runtime de Lua
Caché de la VM de Lua y evaluación de expresiones.
| Campo | Tipo | Por defecto | Descripción |
|---|---|---|---|
proto_cache_size |
int | 60000 | Caché de prototipos compilados |
main_cache_size |
int | 10000 | Caché del chunk principal |
cache.enabled |
bool | false | Persistir caché de bytecode/verificación de tipos en disco |
cache.dir |
string | (directorio de caché del sistema) | Ruta del directorio de caché |
cache.mode |
string | read_write |
Modo de caché: read_write, read_only, write_only |
type_system.enabled |
bool | false | Habilitar verificación estática de tipos |
type_system.strict |
bool | false | Tratar advertencias de tipos como errores |
lua:
proto_cache_size: 60000
cache:
enabled: true
dir: .cache/lua
type_system:
enabled: true
Finder
Caché de búsqueda del registro. Usado internamente para búsquedas de entradas.
| Campo | Tipo | Por defecto | Descripción |
|---|---|---|---|
query_cache_size |
int | 1000 | Resultados de consulta en caché |
regex_cache_size |
int | 100 | Patrones de regex compilados |
finder:
query_cache_size: 2000
OpenTelemetry
Exportación de trazas distribuidas y métricas via OTLP.
| Campo | Tipo | Por defecto | Descripción |
|---|---|---|---|
enabled |
bool | false | Habilitar OTEL |
endpoint |
string | localhost:4318 | Endpoint OTLP |
protocol |
string | http/protobuf | Protocolo: grpc, http/protobuf |
service_name |
string | wippy-runtime | Identificador del servicio |
service_version |
string | Etiqueta de versión del servicio | |
insecure |
bool | true | Permitir conexión OTLP en texto plano |
sample_rate |
float | 1.0 | Muestreo de trazas (0.0-1.0) |
propagators |
string[] | [tracecontext, baggage] |
Propagadores de contexto |
traces_enabled |
bool | true | Exportar trazas |
metrics_enabled |
bool | false | Exportar métricas |
http.enabled |
bool | true | Trazar solicitudes HTTP |
http.extract_headers |
bool | true | Extraer contexto de traza de cabeceras entrantes |
http.inject_headers |
bool | true | Inyectar contexto de traza en cabeceras salientes |
process.enabled |
bool | true | Trazar ciclo de vida de procesos |
process.trace_lifecycle |
bool | true | Emitir spans para spawn/terminate |
interceptor.enabled |
bool | true | Trazar llamadas a funciones |
interceptor.order |
int | 100 | Prioridad del interceptor |
queue.enabled |
bool | true | Trazar publicación/consumo de colas |
temporal.enabled |
bool | false | Trazar workflows de Temporal |
otel:
enabled: true
endpoint: "http://jaeger:4318"
traces_enabled: true
process:
trace_lifecycle: true
Las variables de entorno estándar de OTEL (OTEL_EXPORTER_OTLP_ENDPOINT, OTEL_SERVICE_NAME, OTEL_TRACES_SAMPLER_ARG, OTEL_PROPAGATORS, OTEL_SDK_DISABLED) sobrescriben los campos correspondientes.
Apagado
Comportamiento de apagado controlado.
| Campo | Tipo | Por defecto | Descripción |
|---|---|---|---|
timeout |
duration | 30s | Tiempo máximo de espera para que los componentes se detengan |
shutdown:
timeout: 60s
Métricas
Buffer interno de recolección de métricas.
| Campo | Tipo | Por defecto | Descripción |
|---|---|---|---|
buffer.size |
int | 10000 | Capacidad del buffer de métricas |
interceptor.enabled |
bool | false | Rastrear automáticamente llamadas a funciones |
metrics:
buffer:
size: 20000
interceptor:
enabled: true
Ver: Módulo de Métricas, Guía de Observabilidad
Prometheus
Endpoint de métricas de Prometheus.
| Campo | Tipo | Por defecto | Descripción |
|---|---|---|---|
enabled |
bool | false | Iniciar servidor de métricas |
address |
string | localhost:9090 | Dirección de escucha |
prometheus:
enabled: true
address: "0.0.0.0:9090"
Expone el endpoint /metrics para el scraping de Prometheus.
Cluster
Clustering multi-nodo: membresía por gossip más un núcleo de consenso Raft acotado. Ver la Guía de Cluster para la arquitectura y el modelo operativo; esta sección es la referencia de claves de configuración.
Nivel superior
| Campo | Tipo | Por defecto | Descripción |
|---|---|---|---|
enabled |
bool | false | Habilitar clustering |
name |
string | hostname | Nombre del nodo; debe ser único en el cluster |
failure_domain |
string | Etiqueta de zona/rack; anunciada en gossip para que los votantes se distribuyan entre dominios |
Membresía (gossip)
Gossip SWIM via memberlist. Usado para descubrimiento de nodos, detección de fallos y diseminación de metadatos.
| Campo | Tipo | Por defecto | Descripción |
|---|---|---|---|
membership.bind_addr |
string | 0.0.0.0 | Dirección de enlace para gossip |
membership.bind_port |
int | 7946 | Puerto de enlace para gossip (TCP+UDP) |
membership.advertise_addr |
string | Dirección que los peers usan para llegar a este nodo (NAT/k8s) | |
membership.join_addrs |
string | Pares de semilla host:port separados por coma |
|
membership.secret_key |
string | Clave de cifrado para gossip codificada en Base64 (en línea) | |
membership.secret_file |
string | Ruta al archivo que contiene la clave de cifrado para gossip | |
membership.gossip_interval |
duration | 500ms | Periodo de diseminación de gossip |
membership.push_pull_interval |
duration | 5s | Periodo de sincronización de estado completo |
membership.dead_node_reclaim_time |
duration | 30s | Cuándo puede reclamarse el nombre/dirección de un nodo muerto |
membership.probe_interval |
duration | 1s | Ciclo de sondeo de detección de fallos |
membership.probe_timeout |
duration | 200ms | Espera de ack por sondeo |
membership.tcp_timeout |
duration | 1s | Timeout del sondeo TCP de respaldo |
membership.suspicion_mult |
int | 3 | Multiplicador del timeout de sospecha |
Las cuatro claves de sondeo heredan los valores por defecto de red local de memberlist cuando no están definidas; auméntalas para enlaces de alta latencia (ej. probe_interval: 2s, probe_timeout: 500ms, suspicion_mult: 5).
Internodo (transporte)
Malla TCP que transporta el tráfico de relay y Raft entre nodos. Raft viaja por esta malla mediante request/reply internodo; no hay un puerto Raft separado.
| Campo | Tipo | Por defecto | Descripción |
|---|---|---|---|
internode.bind_addr |
string | 0.0.0.0 | Dirección de enlace de la malla |
internode.bind_port |
int | 0 | Puerto de la malla (0 = automático: 7950-7959, luego efímero) |
internode.auto_port |
bool | true | Descubrir el puerto real en el arranque, fijarlo y anunciarlo en gossip |
internode.advertise_addr |
string | Endpoint de relay adicional (IP o nombre DNS) publicado para peers actualizados — para alcanzabilidad con NAT o balanceadores de carga | |
internode.advertise_port |
int | 0 | Puerto para advertise_addr (0 = puerto de enlace; requiere advertise_addr) |
advertise_addr/advertise_port publican un endpoint aditivo en los metadatos del nodo mientras el endpoint de enlace sigue anunciándose sin cambios, de modo que los clusters con versiones mixtas mantienen la conectividad durante una actualización progresiva.
Raft (consenso)
Raft acotado. El estado de Raft es durable en disco por defecto, almacenado bajo raft.data_dir (por defecto ~/.wippy/store); un nodo reiniciado aún se une al quórum desde sus peers. Las entradas store.kv.raft se replican a través de él. El bootstrap es dirigido por gossip (estilo Consul/Nomad bootstrap_expect).
| Campo | Tipo | Por defecto | Descripción |
|---|---|---|---|
raft.data_dir |
string | ~/.wippy/store |
Directorio para el estado de Raft durable en disco y los snapshots durables de CRDT (bajo <data_dir>/_sys/). Sin disco solo cuando no se resuelve ninguna ruta (sin directorio home y ninguna establecida) |
raft.enabled |
bool | true | Ejecutar un nodo Raft; false convierte este nodo en un cliente solo-gossip |
raft.role |
string | server | server ejecuta un nodo Raft; client es solo-gossip |
raft.eligible |
bool | true | Si este nodo puede ser seleccionado como votante |
raft.priority |
int | 100 | Prioridad de selección de votante (valor menor es preferido) |
raft.bootstrap_expect |
int | 1 | Tamaño inicial del quórum: 0=unirse a uno existente, 1=nodo único, N=esperar N peers elegibles para formar quórum |
raft.max_voters |
int | 5 | Límite de votantes (debe ser impar); los nodos elegibles adicionales se convierten en standbys |
raft.max_standbys |
int | 4 | Miembros no votantes mantenidos en espera para promoción; los nodos más allá de voters+standbys no son miembros Raft |
raft.reconcile_debounce |
duration | 2s | Ventana de consolidación tras un evento de gossip antes de que se ejecute el reconciliador de votantes |
raft.reconcile_timeout |
duration | 2s | Límite por pasada de reconciliación |
raft.heartbeat_timeout |
duration | 3s | Tiempo de espera inactivo del seguidor antes de iniciar una elección |
raft.election_timeout |
duration | 3s | Tiempo de espera de elección del candidato (limitado a >= heartbeat) |
raft.commit_timeout |
duration | 500ms | Cadencia de heartbeat del líder inactivo |
raft.snapshot_threshold |
uint64 | 8192 | Entradas de log desde el último snapshot antes de crear uno nuevo |
raft.snapshot_interval |
duration | 2m | Intervalo de verificación de snapshots |
raft.snapshot_retain |
int | 3 | Snapshots retenidos |
raft.trailing_logs |
uint64 | 10240 | Entradas de log retenidas tras un snapshot |
raft.max_append_entries |
int | 16 | Máximo de entradas por RPC AppendEntries |
raft.leader_probe_interval |
duration | 3s | Cadencia de sonda de alcanzabilidad del líder del registro global |
raft.leader_probe_grace |
int | 3 | Fallos consecutivos de sonda antes de declarar al líder inalcanzable |
Nodo único (desarrollo) — clustering activado, se bootstrapea inmediatamente:
cluster:
enabled: true
name: dev
raft:
bootstrap_expect: 1
Cluster de votación de tres nodos — cada nodo lista los otros como semillas y espera a los tres antes de formar quórum:
cluster:
enabled: true
name: node-1
failure_domain: us-east-1a
membership:
bind_port: 7946
join_addrs: "node-2:7946,node-3:7946"
secret_file: /etc/wippy/cluster.key
raft:
bootstrap_expect: 3
max_voters: 5
Cliente solo-gossip — se une al cluster para naming/mensajería pero nunca ejecuta Raft:
cluster:
enabled: true
name: edge-7
membership:
join_addrs: "node-1:7946,node-2:7946"
raft:
role: client
LSP
Servidor del Protocolo de Servidor de Lenguaje para integraciones con editores.
| Campo | Tipo | Por defecto | Descripción |
|---|---|---|---|
enabled |
bool | false | Habilitar el servidor TCP |
address |
string | :7777 | Dirección de escucha TCP |
http_enabled |
bool | false | Habilitar el transporte HTTP |
http_address |
string | :7778 | Dirección de escucha HTTP |
http_path |
string | /lsp | Ruta del endpoint HTTP |
http_allow_origin |
string | * | Origen permitido por CORS |
max_message_bytes |
int | 8388608 | Tamaño máximo de mensaje entrante |
lsp:
enabled: true
address: ":7777"
http_enabled: true
Ver: Guía de LSP
Servicio de Red
Gestor de red superpuesta (drivers SOCKS5, I2P, Tailscale).
| Campo | Tipo | Por defecto | Descripción |
|---|---|---|---|
state_dir |
string | .wippy/net | Directorio de almacenamiento del estado del driver |
default_network |
string | ID de red por defecto aplicado cuando las entradas omiten network |
network_service:
state_dir: /var/lib/wippy/net
default_network: app:tailscale
Ver: Redes Superpuestas
Despachador HTTP
Ajuste del pool de clientes HTTP compartido utilizado por funciones despachadas HTTP y solicitudes salientes.
| Campo | Tipo | Por defecto | Descripción |
|---|---|---|---|
dispatcher.http.timeout |
duration | 0 (ninguno) | Tiempo de espera por solicitud |
dispatcher.http.max_idle_conns |
int | 0 (stdlib) | Máximo de conexiones inactivas en todos los hosts |
dispatcher.http.max_idle_per_host |
int | 0 (stdlib) | Máximo de conexiones inactivas por host |
dispatcher.http.idle_conn_timeout |
duration | 0 (stdlib) | Tiempo de espera de conexión inactiva |
dispatcher.http.max_clients |
int | 0 (ilimitado) | Máximo de clientes distintos en el pool |
dispatcher:
http:
timeout: 30s
max_idle_per_host: 32
Módulos
Cliente del registro de módulos usado por wippy install/update.
| Campo | Tipo | Por defecto | Descripción |
|---|---|---|---|
registry_url |
string | https://hub.wippy.ai | Endpoint del registro |
modules:
registry_url: https://internal-registry.example.com
Extensiones
Extensiones de plugin nativo de Go cargadas al inicio (solo Unix).
| Campo | Tipo | Por defecto | Descripción |
|---|---|---|---|
enabled |
bool | true | Cargar extensiones |
paths |
string[] | Rutas de archivos de plugin (relativas al directorio de configuración) |
extensions:
enabled: true
paths:
- ./extensions/myplugin.so
Variables de Entorno
| Variable | Descripción |
|---|---|
GOMEMLIMIT |
Límite de memoria (sobrescribe el flag --memory-limit) |
Ver También
- Referencia de CLI - Opciones de línea de comandos
- Guía de Cluster - Arquitectura y operaciones de clustering
- Tipos de Entrada - Todos los tipos de entrada
- Guía de Observabilidad - Registro, métricas, trazas