{"repo": "angelberrios23/vibesync", "files": {".env.example": {"82c24dd97534977461692bb061fb2e0a4e66c1ed": {"t": 1785745172.085467, "n": 6545, "h": "64b48dea8aed8484", "c": "# ─── VibeSync · variables de entorno (prefijo VIBESYNC_) ───────────────────────\n# Copia este archivo a `.env` y rellena los valores. NUNCA subas `.env` a git.\n\n# App\nVIBESYNC_ENVIRONMENT=dev # dev | staging | prod\nVIBESYNC_HOST=0.0.0.0\nVIBESYNC_PORT=8000\nVIBESYNC_PUBLIC_URL=http://localhost:8000\n\n# ─── Seguridad / JWT (Zero-Trust) ──────────────────────────────────────────────\n# Genera con: python -c \"import secrets; print(secrets.token_urlsafe(48))\"\nVIBESYNC_JWT_SECRET=cambia-esto-en-produccion\nVIBESYNC_JWT_ALGORITHM=HS256\nVIBESYNC_HOST_TOKEN_TTL_SECONDS=3600 # tokens de Host (1 h)\nVIBESYNC_GUEST_TOKEN_TTL_SECONDS=900 # tokens efímeros de Guest (15 min)\n# Token bootstrap que autoriza a un Host a emitir invitados (rótalo).\nVIBESYNC_HOST_BOOTSTRAP_TOKEN=cambia-este-bootstrap\n\n# ─── Router dinámico de LLMs ───────────────────────────────────────────────────\n# Carril \"Claude\" — colisiones estructurales severas (SDK oficial anthropic).\nVIBESYNC_ANTHROPIC_API_KEY=\nVIBESYNC_ANTHROPIC_MODEL=claude-opus-4-8\n# Carriles económicos — validaciones rápidas / decisiones algorítmicas.\nVIBESYNC_DEEPSEEK_API_KEY=\nVIBESYNC_DEEPSEEK_MODEL=deepseek-chat\nVIBESYNC_MINIMAX_API_KEY=\nVIBESYNC_MINIMAX_MODEL=MiniMax-Text-01\n# Carril LOCAL sin API key (Ollama/LM Studio/LocalAI/OpenCode-local) — gratis.\n# Define la URL para usarlo (el router lo prefiere por costo 0). Sube el tier a 3\n# si tu modelo local es capaz y quieres que resuelva hasta colisiones severas.\nVIBESYNC_LOCAL_BASE_URL= # p.ej. http://localhost:11434/v1 (Ollama)\nVIBESYNC_LOCAL_MODEL=llama3.1\nVIBESYNC_LOCAL_API_KEY=\nVIBESYNC_LOCAL_TIER=2\n# Proveedores OpenAI-compatibles: BASTA con poner la API key para activarlos. El\n# modelo cae a un default razonable si lo dejas vacío (ver src/vibesync/routing/\n# presets.py). Un solo conector cubre a casi todos.\nVIBESYNC_KIMI_API_KEY= # Kimi / Moonshot (VIBESYNC_KIMI_MODEL)\nVIBESYNC_DEEPSEEK_API_KEY= # (ya arriba) DeepSeek\nVIBESYNC_GLM_API_KEY= # Zhipu GLM (VIBESYNC_GLM_MODEL)\nVIBESYNC_GEMINI_API_KEY= # Google Gemini (VIBESYNC_GEMINI_MODEL)\nVIBESYNC_OPENAI_API_KEY= # OpenAI (VIBESYNC_OPENAI_MODEL)\nVIBESYNC_OPENROUTER_API_KEY= # OpenRouter (agrega muchísimos modelos)\nVIBESYNC_NVIDIA_API_KEY= # NVIDIA NIM / Nemotron\nVIBESYNC_GROQ_API_KEY= # Groq (ultra rápido)\n# Slot 100% custom (Xiaomi MiMo, Trae, tu propio bridge OpenAI-compat, etc.).\n# Requiere reconocer el riesgo (ToS) con ALLOW_RISKY_AUTH=true. Ver docs/auth-and-models.md.\nVIBESYNC_CUSTOM_BASE_URL= # p.ej. http://localhost:9000/v1\nVIBESYNC_CUSTOM_MODEL=default\nVIBESYNC_CUSTOM_API_KEY=\nVIBESYNC_CUSTOM_NAME=custom\nVIBESYNC_CUSTOM_TIER=2\nVIBESYNC_ALLOW_RISKY_AUTH=false # \"on your own risk\": habilita el slot custom\n# Apaga la IA por completo (núcleo 100% determinista, fusión 3-way tipo git).\nVIBESYNC_AI_ENABLED=true\n# Políticas del router\nVIBESYNC_ROUTING_COST_CEILING_USD=0.05 # tope de costo estimado por decisión\nVIBESYNC_ROUTING_LATENCY_BUDGET_MS=4000 # SLA de latencia objetivo\n\n# ─── Webhooks / motor de eventos ───────────────────────────────────────────────\nVIBESYNC_WEBHOOK_SIGNING_SECRET=cambia-este-secret-de-webhook\nVIBESYNC_WEBHOOK_TIMEOUT_SECONDS=5\nVIBESYNC_WEBHOOK_MAX_RETRIES=3\n# URLs destino (separadas por coma) — p. ej. tu webhook de n8n.\nVIBESYNC_WEBHOOK_TARGETS=https://n8n.example.com/webhook/vibesync-collisions\n\n# ─── Mensajería / notificaciones (estilo openclaw) ────────────────────────────\n# El agente central avisa y, para los admins, recibe comandos. El Host registra\n# destinatarios (POST /integrations/recipients): rol \"admin\" recibe Y comanda;\n# rol \"watcher\" SOLO recibe. Umbral: none|trivial|simple|moderate|severe.\nVIBESYNC_NOTIFY_MIN_SEVERITY=moderate\n# Telegram (oficial). Crea el bot con @BotFather → token. El secret lo verificamos\n# en CADA webhook entrante (setWebhook ... secret_token=...). Mín. 16 chars en prod.\nVIBESYNC_TELEGRAM_BOT_TOKEN=\nVIBESYNC_TELEGRAM_WEBHOOK_SECRET=\n# WhatsApp Cloud API (oficial, Meta). Para WhatsApp NO oficial (openwa), corre tu\n# puente y regístralo como destinatario \"webhook\" (bajo tu propio riesgo).\nVIBESYNC_WHATSAPP_TOKEN=\nVIBESYNC_WHATSAPP_PHONE_ID=\nVIBESYNC_WHATSAPP_API_VERSION=v21.0\nVIBESYNC_WHATSAPP_VERIFY_TOKEN=\n\n# ─── Integración Git agnóstica (Trunk-Based) ──────────────────────────────────\nVIBESYNC_GIT_PROVIDER=github # github | gitlab | gitea\nVIBESYNC_GIT_TOKEN=\nVIBESYNC_GIT_REPO=angelberrios/vibesync # owner/repo\nVIBESYNC_GIT_TRUNK=main\nVIBESYNC_GITEA_BASE_URL= # solo si usas Gitea self-hosted\n\n# ─── Sandbox de AST ────────────────────────────────────────────────────────────\n# Dependencias de nivel superior permitidas para el código propuesto (coma).\nVIBESYNC_ALLOWED_DEPENDENCIES=fastapi,pydantic,httpx,anthropic,uvicorn\n\n# ─── Auditoría ───────────────────────────────────────────────────────────────\n# Ruta del JSONL de auditoría (en contenedor usa un volumen, p. ej. /app/audit).\nVIBESYNC_AUDIT_PATH=audit/vibesync-audit.jsonl\n\n# ─── Guardrails (Zero-Trust para agentes) ─────────────────────────────────────\n# Globs que exigen aprobación humana antes de consolidar (CSV).\nVIBESYNC_PROTECTED_PATHS=**/payments/**,**/secrets*,.env\n# Tope de gasto USD por proyecto (vacío = sin tope).\nVIBESYNC_PROJECT_BUDGET_USD=\n# Memoria de equipo (JSONL).\nVIBESYNC_MEMORY_PATH=data/team-memory.jsonl\n\n# ─── Persistencia del estado (sobrevive reinicios/redeploys) ───────────────────\n# Snapshots JSON de proyectos/invites/recipients/tareas/aprobaciones/reviews +\n# versión del árbol. Vacío = todo en memoria (efímero). En VPS, DÉJALO y monta\n# `data/` (este dir) en un volumen, o un redeploy borra todo ese estado.\nVIBESYNC_STATE_DIR=data/state\nVIBESYNC_PERSIST_INTERVAL_SECONDS=10\n\n# ─── Dashboard / clientes web ──────────────────────────────────────────────────\n# Orígenes CORS permitidos (CSV). En prod, restríngelo a tu dominio.\nVIBESYNC_CORS_ORIGINS=*\n\n# ─── Verificación (tests en el loop) ───────────────────────────────────────────\n# Comando que valida el resultado fusionado antes de consolidar. Vacío = py_compile\n# (solo parsea, seguro). Ej.: \"pytest -q\". OJO: una suite real EJECUTA código de\n# agentes → en producción corre esto en un sandbox AISLADO (contenedor), no en el host.\nVIBESYNC_VERIFY_COMMAND=\n\n# ─── Multi-réplica (CRDT) ──────────────────────────────────────────────────────\n# Identidad de esta réplica (desempate del CRDT). Vacío = se genera al arrancar.\nVIBESYNC_REPLICA_ID=\n"}, "355bd4680a6fbe47e28f78da95f0ca4e06cda6aa": {"t": 1785748383.5514603, "n": 6545, "h": "64b48dea8aed8484", "c": "# ─── VibeSync · variables de entorno (prefijo VIBESYNC_) ───────────────────────\n# Copia este archivo a `.env` y rellena los valores. NUNCA subas `.env` a git.\n\n# App\nVIBESYNC_ENVIRONMENT=dev # dev | staging | prod\nVIBESYNC_HOST=0.0.0.0\nVIBESYNC_PORT=8000\nVIBESYNC_PUBLIC_URL=http://localhost:8000\n\n# ─── Seguridad / JWT (Zero-Trust) ──────────────────────────────────────────────\n# Genera con: python -c \"import secrets; print(secrets.token_urlsafe(48))\"\nVIBESYNC_JWT_SECRET=cambia-esto-en-produccion\nVIBESYNC_JWT_ALGORITHM=HS256\nVIBESYNC_HOST_TOKEN_TTL_SECONDS=3600 # tokens de Host (1 h)\nVIBESYNC_GUEST_TOKEN_TTL_SECONDS=900 # tokens efímeros de Guest (15 min)\n# Token bootstrap que autoriza a un Host a emitir invitados (rótalo).\nVIBESYNC_HOST_BOOTSTRAP_TOKEN=cambia-este-bootstrap\n\n# ─── Router dinámico de LLMs ───────────────────────────────────────────────────\n# Carril \"Claude\" — colisiones estructurales severas (SDK oficial anthropic).\nVIBESYNC_ANTHROPIC_API_KEY=\nVIBESYNC_ANTHROPIC_MODEL=claude-opus-4-8\n# Carriles económicos — validaciones rápidas / decisiones algorítmicas.\nVIBESYNC_DEEPSEEK_API_KEY=\nVIBESYNC_DEEPSEEK_MODEL=deepseek-chat\nVIBESYNC_MINIMAX_API_KEY=\nVIBESYNC_MINIMAX_MODEL=MiniMax-Text-01\n# Carril LOCAL sin API key (Ollama/LM Studio/LocalAI/OpenCode-local) — gratis.\n# Define la URL para usarlo (el router lo prefiere por costo 0). Sube el tier a 3\n# si tu modelo local es capaz y quieres que resuelva hasta colisiones severas.\nVIBESYNC_LOCAL_BASE_URL= # p.ej. http://localhost:11434/v1 (Ollama)\nVIBESYNC_LOCAL_MODEL=llama3.1\nVIBESYNC_LOCAL_API_KEY=\nVIBESYNC_LOCAL_TIER=2\n# Proveedores OpenAI-compatibles: BASTA con poner la API key para activarlos. El\n# modelo cae a un default razonable si lo dejas vacío (ver src/vibesync/routing/\n# presets.py). Un solo conector cubre a casi todos.\nVIBESYNC_KIMI_API_KEY= # Kimi / Moonshot (VIBESYNC_KIMI_MODEL)\nVIBESYNC_DEEPSEEK_API_KEY= # (ya arriba) DeepSeek\nVIBESYNC_GLM_API_KEY= # Zhipu GLM (VIBESYNC_GLM_MODEL)\nVIBESYNC_GEMINI_API_KEY= # Google Gemini (VIBESYNC_GEMINI_MODEL)\nVIBESYNC_OPENAI_API_KEY= # OpenAI (VIBESYNC_OPENAI_MODEL)\nVIBESYNC_OPENROUTER_API_KEY= # OpenRouter (agrega muchísimos modelos)\nVIBESYNC_NVIDIA_API_KEY= # NVIDIA NIM / Nemotron\nVIBESYNC_GROQ_API_KEY= # Groq (ultra rápido)\n# Slot 100% custom (Xiaomi MiMo, Trae, tu propio bridge OpenAI-compat, etc.).\n# Requiere reconocer el riesgo (ToS) con ALLOW_RISKY_AUTH=true. Ver docs/auth-and-models.md.\nVIBESYNC_CUSTOM_BASE_URL= # p.ej. http://localhost:9000/v1\nVIBESYNC_CUSTOM_MODEL=default\nVIBESYNC_CUSTOM_API_KEY=\nVIBESYNC_CUSTOM_NAME=custom\nVIBESYNC_CUSTOM_TIER=2\nVIBESYNC_ALLOW_RISKY_AUTH=false # \"on your own risk\": habilita el slot custom\n# Apaga la IA por completo (núcleo 100% determinista, fusión 3-way tipo git).\nVIBESYNC_AI_ENABLED=true\n# Políticas del router\nVIBESYNC_ROUTING_COST_CEILING_USD=0.05 # tope de costo estimado por decisión\nVIBESYNC_ROUTING_LATENCY_BUDGET_MS=4000 # SLA de latencia objetivo\n\n# ─── Webhooks / motor de eventos ───────────────────────────────────────────────\nVIBESYNC_WEBHOOK_SIGNING_SECRET=cambia-este-secret-de-webhook\nVIBESYNC_WEBHOOK_TIMEOUT_SECONDS=5\nVIBESYNC_WEBHOOK_MAX_RETRIES=3\n# URLs destino (separadas por coma) — p. ej. tu webhook de n8n.\nVIBESYNC_WEBHOOK_TARGETS=https://n8n.example.com/webhook/vibesync-collisions\n\n# ─── Mensajería / notificaciones (estilo openclaw) ────────────────────────────\n# El agente central avisa y, para los admins, recibe comandos. El Host registra\n# destinatarios (POST /integrations/recipients): rol \"admin\" recibe Y comanda;\n# rol \"watcher\" SOLO recibe. Umbral: none|trivial|simple|moderate|severe.\nVIBESYNC_NOTIFY_MIN_SEVERITY=moderate\n# Telegram (oficial). Crea el bot con @BotFather → token. El secret lo verificamos\n# en CADA webhook entrante (setWebhook ... secret_token=...). Mín. 16 chars en prod.\nVIBESYNC_TELEGRAM_BOT_TOKEN=\nVIBESYNC_TELEGRAM_WEBHOOK_SECRET=\n# WhatsApp Cloud API (oficial, Meta). Para WhatsApp NO oficial (openwa), corre tu\n# puente y regístralo como destinatario \"webhook\" (bajo tu propio riesgo).\nVIBESYNC_WHATSAPP_TOKEN=\nVIBESYNC_WHATSAPP_PHONE_ID=\nVIBESYNC_WHATSAPP_API_VERSION=v21.0\nVIBESYNC_WHATSAPP_VERIFY_TOKEN=\n\n# ─── Integración Git agnóstica (Trunk-Based) ──────────────────────────────────\nVIBESYNC_GIT_PROVIDER=github # github | gitlab | gitea\nVIBESYNC_GIT_TOKEN=\nVIBESYNC_GIT_REPO=angelberrios/vibesync # owner/repo\nVIBESYNC_GIT_TRUNK=main\nVIBESYNC_GITEA_BASE_URL= # solo si usas Gitea self-hosted\n\n# ─── Sandbox de AST ────────────────────────────────────────────────────────────\n# Dependencias de nivel superior permitidas para el código propuesto (coma).\nVIBESYNC_ALLOWED_DEPENDENCIES=fastapi,pydantic,httpx,anthropic,uvicorn\n\n# ─── Auditoría ───────────────────────────────────────────────────────────────\n# Ruta del JSONL de auditoría (en contenedor usa un volumen, p. ej. /app/audit).\nVIBESYNC_AUDIT_PATH=audit/vibesync-audit.jsonl\n\n# ─── Guardrails (Zero-Trust para agentes) ─────────────────────────────────────\n# Globs que exigen aprobación humana antes de consolidar (CSV).\nVIBESYNC_PROTECTED_PATHS=**/payments/**,**/secrets*,.env\n# Tope de gasto USD por proyecto (vacío = sin tope).\nVIBESYNC_PROJECT_BUDGET_USD=\n# Memoria de equipo (JSONL).\nVIBESYNC_MEMORY_PATH=data/team-memory.jsonl\n\n# ─── Persistencia del estado (sobrevive reinicios/redeploys) ───────────────────\n# Snapshots JSON de proyectos/invites/recipients/tareas/aprobaciones/reviews +\n# versión del árbol. Vacío = todo en memoria (efímero). En VPS, DÉJALO y monta\n# `data/` (este dir) en un volumen, o un redeploy borra todo ese estado.\nVIBESYNC_STATE_DIR=data/state\nVIBESYNC_PERSIST_INTERVAL_SECONDS=10\n\n# ─── Dashboard / clientes web ──────────────────────────────────────────────────\n# Orígenes CORS permitidos (CSV). En prod, restríngelo a tu dominio.\nVIBESYNC_CORS_ORIGINS=*\n\n# ─── Verificación (tests en el loop) ───────────────────────────────────────────\n# Comando que valida el resultado fusionado antes de consolidar. Vacío = py_compile\n# (solo parsea, seguro). Ej.: \"pytest -q\". OJO: una suite real EJECUTA código de\n# agentes → en producción corre esto en un sandbox AISLADO (contenedor), no en el host.\nVIBESYNC_VERIFY_COMMAND=\n\n# ─── Multi-réplica (CRDT) ──────────────────────────────────────────────────────\n# Identidad de esta réplica (desempate del CRDT). Vacío = se genera al arrancar.\nVIBESYNC_REPLICA_ID=\n"}}}}