# ============================================
# 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: "/tmp/claude-agents/assistant-bot"
      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

  threads:
    enabled: true                # responder en threads cuando el mensaje viene de un thread
    auto_thread: false           # true para crear thread automático por cada conversación nueva

# ============================================
# 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: ["*"]

  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
