# OmniRoute environment contract # This file reflects actual runtime usage in the current codebase. # ═══════════════════════════════════════════════════ # REQUIRED SECRETS — Generate strong values! # ═══════════════════════════════════════════════════ # Generate with: openssl rand -base64 48 JWT_SECRET= # Generate with: openssl rand -hex 32 API_KEY_SECRET= # Initial admin password — CHANGE THIS before first use! INITIAL_PASSWORD=CHANGEME DATA_DIR=/var/lib/omniroute # Storage (SQLite) STORAGE_DRIVER=sqlite # Generate with: openssl rand -hex 32 STORAGE_ENCRYPTION_KEY= STORAGE_ENCRYPTION_KEY_VERSION=v1 LOG_RETENTION_DAYS=90 SQLITE_MAX_SIZE_MB=2048 SQLITE_CLEAN_LEGACY_FILES=true # Recommended runtime variables # Canonical/base port (keeps backward compatibility) PORT=20128 # Optional split ports: # API_PORT=20129 # API_HOST=0.0.0.0 # DASHBOARD_PORT=20128 # Optional Docker production host publish ports: # PROD_DASHBOARD_PORT=20130 # PROD_API_PORT=20131 NODE_ENV=production INSTANCE_NAME=omniroute # Recommended security and ops variables MACHINE_ID_SALT=endpoint-proxy-salt ENABLE_REQUEST_LOGS=false AUTH_COOKIE_SECURE=false REQUIRE_API_KEY=false # Input Sanitizer (FASE-01 — prompt injection & PII protection) # INPUT_SANITIZER_ENABLED=true # INPUT_SANITIZER_MODE=warn # warn | block | redact # PII_REDACTION_ENABLED=false # Cloud sync variables # Must point to this running instance so internal sync jobs can call /api/sync/cloud. # Server-side preferred variables: BASE_URL=http://localhost:20128 CLOUD_URL= # Backward-compatible/public variables: # NEXT_PUBLIC_BASE_URL is also used as the OAuth redirect_uri origin when running behind a # reverse proxy (e.g., nginx). Set this to your public-facing URL so OAuth callbacks work. # Example: NEXT_PUBLIC_BASE_URL=https://omniroute.example.com NEXT_PUBLIC_BASE_URL=http://localhost:20128 NEXT_PUBLIC_CLOUD_URL= # Optional outbound proxy variables for upstream provider calls # Lowercase variants are also supported: http_proxy, https_proxy, all_proxy, no_proxy # SOCKS5 proxy support ENABLE_SOCKS5_PROXY=true NEXT_PUBLIC_ENABLE_SOCKS5_PROXY=true # HTTP_PROXY=http://127.0.0.1:7890 # HTTPS_PROXY=http://127.0.0.1:7890 # ALL_PROXY=socks5://127.0.0.1:7890 # NO_PROXY=localhost,127.0.0.1 # TLS fingerprint spoofing (opt-in) — mimics Chrome 124 TLS handshake via wreq-js # Reduces risk of JA3/JA4 fingerprint-based blocking by providers (e.g., Google) # Requires wreq-js to be installed (included in dependencies) # ENABLE_TLS_FINGERPRINT=true # Optional CLI runtime overrides (Docker/host integration) # CLI_MODE=auto # CLI_EXTRA_PATHS=/host-cli/bin # CLI_CONFIG_HOME=/root # CLI_ALLOW_CONFIG_WRITES=true # CLI_CLAUDE_BIN=claude # CLI_CODEX_BIN=codex # CLI_DROID_BIN=droid # CLI_OPENCLAW_BIN=openclaw # CLI_CURSOR_BIN=agent # CLI_CLINE_BIN=cline # CLI_ROO_BIN=roo # CLI_CONTINUE_BIN=cn # Provider OAuth Credentials (optional — override hardcoded defaults) # These can also be set via data/provider-credentials.json # CLAUDE_OAUTH_CLIENT_ID= # ───────────────────────────────────────────────────────────────────────────── # ⚠️ GOOGLE OAUTH (Antigravity, Gemini CLI) — IMPORTANT FOR REMOTE SERVERS # ───────────────────────────────────────────────────────────────────────────── # The built-in Google OAuth credentials ONLY work when OmniRoute runs on # localhost (127.0.0.1 / local network). They are registered with # redirect_uri = http://localhost:PORT/callback and Google will reject any # other redirect URI with: redirect_uri_mismatch. # # If you are hosting OmniRoute on a remote server (VPS, Docker, cloud), you # MUST register your own Google Cloud OAuth 2.0 credentials: # # 1. Go to https://console.cloud.google.com/apis/credentials # 2. Create an OAuth 2.0 Client ID (type: "Web application") # 3. Add your server URL as Authorized redirect URI: # https://your-server.com/callback # 4. Copy the Client ID and Client Secret below. # # See the full tutorial in README.md → "OAuth em Servidor Remoto" section. # # Antigravity (Google Gemini Code Assist): # ANTIGRAVITY_OAUTH_CLIENT_ID=your-client-id.apps.googleusercontent.com # ANTIGRAVITY_OAUTH_CLIENT_SECRET=GOCSPX-your-secret ANTIGRAVITY_OAUTH_CLIENT_SECRET=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 # Gemini CLI (Google AI): # GEMINI_OAUTH_CLIENT_ID=your-client-id.apps.googleusercontent.com # GEMINI_OAUTH_CLIENT_SECRET=GOCSPX-your-secret # GEMINI_CLI_OAUTH_CLIENT_ID= GEMINI_OAUTH_CLIENT_SECRET=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 GEMINI_CLI_OAUTH_CLIENT_SECRET=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 # ───────────────────────────────────────────────────────────────────────────── # CLAUDE_OAUTH_CLIENT_ID= # CODEX_OAUTH_CLIENT_ID= # CODEX_OAUTH_CLIENT_SECRET= # QWEN_OAUTH_CLIENT_ID= # IFLOW_OAUTH_CLIENT_ID= IFLOW_OAUTH_CLIENT_SECRET=4Z3YjXycVsQvyGF1etiNlIBB4RsqSDtW # ───────────────────────────────────────────────────────────────────────────── # Provider User-Agent Overrides (optional — customize per-provider UA headers) # ───────────────────────────────────────────────────────────────────────────── # Format: {PROVIDER_ID}_USER_AGENT=custom-value # When set, overrides the default User-Agent header sent to that provider. # Useful when providers update versions or block old user-agents. CLAUDE_USER_AGENT=claude-cli/1.0.83 (external, cli) CODEX_USER_AGENT=codex-cli/0.92.0 (Windows 10.0.26100; x64) GITHUB_USER_AGENT=GitHubCopilotChat/0.26.7 ANTIGRAVITY_USER_AGENT=antigravity/1.104.0 darwin/arm64 KIRO_USER_AGENT=AWS-SDK-JS/3.0.0 kiro-ide/1.0.0 IFLOW_USER_AGENT=iFlow-Cli QWEN_USER_AGENT=google-api-nodejs-client/9.15.1 CURSOR_USER_AGENT=connect-es/1.6.1 GEMINI_CLI_USER_AGENT=google-api-nodejs-client/9.15.1 # API Key Providers (Phase 1 + Phase 4) # Add via Dashboard → Providers → Add API Key, or set here # DEEPSEEK_API_KEY= # GROQ_API_KEY= # XAI_API_KEY= # MISTRAL_API_KEY= # PERPLEXITY_API_KEY= # TOGETHER_API_KEY= # FIREWORKS_API_KEY= # CEREBRAS_API_KEY= # COHERE_API_KEY= # NVIDIA_API_KEY= # Embedding Providers (optional — used by /v1/embeddings) # NEBIUS_API_KEY= # Provider keys above (openai, mistral, together, fireworks, nvidia) also work for embeddings # Timeout settings # FETCH_TIMEOUT_MS=120000 # STREAM_IDLE_TIMEOUT_MS=60000 # CORS configuration (default: * allows all origins) # CORS_ORIGINS=* # Logging # LOG_LEVEL=info # LOG_FORMAT=text LOG_TO_FILE=true # LOG_FILE_PATH=logs/application/app.log # LOG_MAX_FILE_SIZE=50M # LOG_RETENTION_DAYS=7 # ───────────────────────────────────────────────────────────────────────────── # Memory Optimization (Low-RAM configurations) # ───────────────────────────────────────────────────────────────────────────── # Node.js heap limit in MB (default: 256 for Docker, system default for npm) # OMNIROUTE_MEMORY_MB=256 # Prompt cache settings # PROMPT_CACHE_MAX_SIZE=50 # PROMPT_CACHE_MAX_BYTES=2097152 # PROMPT_CACHE_TTL_MS=300000 # Semantic cache settings (temperature=0 responses) # SEMANTIC_CACHE_MAX_SIZE=100 # SEMANTIC_CACHE_MAX_BYTES=4194304 # SEMANTIC_CACHE_TTL_MS=1800000 # In-memory log buffers # PROXY_LOG_MAX_ENTRIES=200 # CALL_LOGS_MAX=200 # STREAM_HISTORY_MAX=50