7d4fa78569
Conectar el campo unauthorized_response de FiltersCfg al shouldHandle() del listener. Cuando está configurado como "explicit", el bot responde con un mensaje de permisos denegados en lugar de ignorar silenciosamente. También se añaden los campos allowed_users y unauthorized_response (comentados como ejemplo) a los configs de assistant-bot y asistente-2. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
299 lines
7.0 KiB
YAML
299 lines
7.0 KiB
YAML
# ============================================
|
|
# IDENTIDAD
|
|
# ============================================
|
|
agent:
|
|
id: assistant-bot
|
|
name: "Assistant"
|
|
version: "1.0.0"
|
|
enabled: true
|
|
description: "Asistente general con acceso a LLM. Responde preguntas, resume, redacta y ayuda con tareas cotidianas."
|
|
tags: [assistant, llm, general]
|
|
|
|
# ============================================
|
|
# PERSONALIDAD Y COMPORTAMIENTO
|
|
# ============================================
|
|
personality:
|
|
tone: friendly
|
|
verbosity: concise
|
|
language: es
|
|
languages_supported: [es, en]
|
|
emoji_style: minimal
|
|
prefix: "🤖"
|
|
error_style: helpful
|
|
|
|
templates:
|
|
greeting: "Hola, soy tu asistente. ¿En qué puedo ayudarte?"
|
|
unknown_command: "No entiendo ese comando. Escríbeme directamente lo que necesitas."
|
|
permission_denied: "No tengo permiso para hacer eso."
|
|
error: "Algo salió mal: {{.Error}}"
|
|
success: "{{.Summary}}"
|
|
busy: "Procesando tu solicitud anterior, dame un momento..."
|
|
|
|
behavior:
|
|
proactive: false
|
|
ask_confirmation: false
|
|
show_reasoning: false
|
|
thread_replies: true
|
|
typing_indicator: true
|
|
acknowledge_receipt: false # responde directo, sin "recibido"
|
|
|
|
# ============================================
|
|
# LLM — CONEXIÓN Y RAZONAMIENTO
|
|
# ============================================
|
|
llm:
|
|
primary:
|
|
provider: claude-code
|
|
model: ""
|
|
api_key_env: ""
|
|
base_url: ""
|
|
max_tokens: 4096
|
|
temperature: 0.7
|
|
claude_code:
|
|
binary: "claude"
|
|
timeout: 3m
|
|
disable_tools: true # no ejecuta herramientas internas de claude
|
|
allowed_tools: []
|
|
disallowed_tools: []
|
|
working_dir: ""
|
|
permission_mode: "bypassPermissions"
|
|
model: "sonnet" # modelo interno de claude -p
|
|
fallback_model: ""
|
|
session_id: ""
|
|
add_dirs: []
|
|
|
|
# Fallback desactivado — solo claude-code
|
|
fallback:
|
|
provider: ""
|
|
model: ""
|
|
api_key_env: ""
|
|
base_url: ""
|
|
max_tokens: 0
|
|
temperature: 0
|
|
|
|
reasoning:
|
|
system_prompt_file: "prompts/assistant-system.md"
|
|
context_window: 16384
|
|
memory_messages: 30 # mantiene 30 mensajes de historia por room/DM
|
|
|
|
tool_use:
|
|
enabled: true
|
|
max_iterations: 5
|
|
parallel_calls: false
|
|
|
|
rate_limit:
|
|
requests_per_minute: 60
|
|
tokens_per_minute: 200000
|
|
concurrent_requests: 5
|
|
|
|
# ============================================
|
|
# TOOLS — deshabilitadas para este bot
|
|
# ============================================
|
|
tools:
|
|
ssh:
|
|
enabled: false
|
|
allowed_targets: []
|
|
forbidden_commands: []
|
|
timeout: 0s
|
|
max_concurrent: 0
|
|
require_confirmation: []
|
|
|
|
http:
|
|
enabled: false
|
|
allowed_domains: []
|
|
timeout: 0s
|
|
max_retries: 0
|
|
|
|
scripts:
|
|
enabled: false
|
|
scripts_dir: ""
|
|
allowed: []
|
|
timeout: 0s
|
|
sandbox: false
|
|
|
|
file_ops:
|
|
enabled: false
|
|
allowed_paths: []
|
|
read_only: true
|
|
|
|
mcp:
|
|
enabled: false
|
|
servers: []
|
|
expose:
|
|
port: 0
|
|
tools: []
|
|
|
|
memory:
|
|
enabled: false
|
|
|
|
knowledge:
|
|
enabled: true
|
|
|
|
# ============================================
|
|
# MEMORIA — ventana de conversación + hechos
|
|
# ============================================
|
|
memory:
|
|
enabled: false
|
|
window_size: 30
|
|
|
|
# ============================================
|
|
# MATRIX — CONEXIÓN Y ROOMS
|
|
# ============================================
|
|
matrix:
|
|
homeserver: "https://matrix-af2f3d.organic-machine.com"
|
|
user_id: "@assistant-bot:matrix-af2f3d.organic-machine.com"
|
|
access_token_env: MATRIX_TOKEN_ASSISTANT_BOT
|
|
device_id: "WXAKFKILMR"
|
|
|
|
encryption:
|
|
enabled: true
|
|
store_path: "./agents/assistant-bot/data/crypto/"
|
|
pickle_key_env: PICKLE_KEY_ASSISTANT_BOT
|
|
trust_mode: tofu
|
|
recovery_key_env: SSSS_RECOVERY_KEY_ASSISTANT_BOT
|
|
|
|
rooms:
|
|
listen: [] # vacío = escucha en todos los rooms donde está invitado
|
|
respond: [] # vacío = responde en todos
|
|
admin: []
|
|
|
|
filters:
|
|
command_prefix: "!"
|
|
mention_respond: true # responde cuando lo mencionan en un room
|
|
dm_respond: true # responde en DMs (modo principal por ahora)
|
|
ignore_bots: true
|
|
ignore_users: []
|
|
allowed_users: [] # vacío = sin restricción (todos pueden hablar)
|
|
# allowed_users: # ejemplo con restricción:
|
|
# - "@admin:matrix-af2f3d.organic-machine.com"
|
|
# - "@enmanuel:matrix-af2f3d.organic-machine.com"
|
|
unauthorized_response: silent # silent | explicit
|
|
min_power_level: 0 # cualquiera puede hablar con el assistant
|
|
|
|
# ============================================
|
|
# COMUNICACIÓN INTER-AGENTES
|
|
# ============================================
|
|
agents:
|
|
peers: []
|
|
|
|
delegation:
|
|
enabled: false
|
|
can_delegate_to: []
|
|
can_receive_from: []
|
|
max_delegation_depth: 1
|
|
timeout: 30s
|
|
|
|
protocol:
|
|
format: json
|
|
channel: matrix
|
|
heartbeat_interval: 60s
|
|
|
|
# ============================================
|
|
# SSH — no aplica para este bot
|
|
# ============================================
|
|
ssh:
|
|
defaults:
|
|
user: ""
|
|
port: 22
|
|
key_file_env: ""
|
|
known_hosts: ""
|
|
keepalive_interval: 0s
|
|
timeout: 0s
|
|
targets: {}
|
|
|
|
# ============================================
|
|
# PERMISOS Y SEGURIDAD
|
|
# ============================================
|
|
security:
|
|
roles:
|
|
admin:
|
|
users: ["@admin:matrix-af2f3d.organic-machine.com"]
|
|
actions: ["*"]
|
|
user:
|
|
users: ["*"]
|
|
actions: ["ask", "help", "summarize"]
|
|
|
|
audit:
|
|
enabled: false
|
|
log_file: "./agents/assistant-bot/data/audit.log"
|
|
log_to_room: ""
|
|
include: []
|
|
|
|
secrets:
|
|
provider: env
|
|
|
|
# ============================================
|
|
# SCHEDULING — sin tareas automáticas
|
|
# ============================================
|
|
schedules: []
|
|
|
|
# ============================================
|
|
# OBSERVABILIDAD
|
|
# ============================================
|
|
observability:
|
|
logging:
|
|
level: info
|
|
format: json
|
|
output: stdout
|
|
file: "./agents/assistant-bot/data/assistant.log"
|
|
|
|
metrics:
|
|
enabled: false
|
|
port: 9091
|
|
path: /metrics
|
|
export: prometheus
|
|
|
|
health:
|
|
enabled: true
|
|
port: 8081
|
|
path: /healthz
|
|
|
|
tracing:
|
|
enabled: false
|
|
provider: ""
|
|
endpoint: ""
|
|
|
|
# ============================================
|
|
# RESILIENCIA
|
|
# ============================================
|
|
resilience:
|
|
circuit_breaker:
|
|
failure_threshold: 5
|
|
timeout: 30s
|
|
half_open_max: 2
|
|
|
|
retry:
|
|
max_attempts: 2
|
|
backoff: exponential
|
|
initial_delay: 1s
|
|
max_delay: 10s
|
|
|
|
shutdown:
|
|
timeout: 10s
|
|
drain_messages: true
|
|
save_state: false
|
|
state_file: ""
|
|
|
|
queue:
|
|
enabled: true
|
|
max_size: 100
|
|
priority_users: ["@admin:matrix-af2f3d.organic-machine.com"]
|
|
|
|
# ============================================
|
|
# ALMACENAMIENTO Y ESTADO
|
|
# ============================================
|
|
storage:
|
|
state:
|
|
backend: sqlite
|
|
path: "./agents/assistant-bot/data/assistant.db"
|
|
|
|
cache:
|
|
enabled: true
|
|
backend: memory
|
|
ttl: 5m
|
|
max_entries: 200
|
|
|
|
history:
|
|
backend: sqlite
|
|
path: "./agents/assistant-bot/data/history.db"
|
|
retention: 168h # 7 días
|