# ===== EJClaw Environment Configuration =====
# Copy this file to .env and fill in the values.
# Single unified service manages all three Discord bots in one process.

# --- Discord bots (canonical role-fixed names) ---
DISCORD_OWNER_BOT_TOKEN=              # Owner bot
DISCORD_REVIEWER_BOT_TOKEN=           # Reviewer bot
DISCORD_ARBITER_BOT_TOKEN=            # Arbiter bot

# Old service-based token names are no longer accepted.
# Rename any existing values to the three canonical role-based keys above.

# --- Agent type configuration ---
OWNER_AGENT_TYPE=codex                # codex | claude-code
REVIEWER_AGENT_TYPE=claude-code       # claude-code | codex

# --- API keys ---
CLAUDE_CODE_OAUTH_TOKENS=             # Canonical comma-separated Claude Code OAuth tokens (use one value for single-account too)
CLAUDE_CODE_OAUTH_TOKEN=              # Legacy single-token fallback
GROQ_API_KEY=                         # Voice transcription (Groq Whisper, free: console.groq.com)

# --- Bot identity ---
ASSISTANT_NAME=claude                 # Trigger name (@claude)

# --- Claude model ---
CLAUDE_MODEL=claude-opus-4-6          # Claude model
CLAUDE_EFFORT=high                    # Claude effort level
CLAUDE_THINKING=adaptive              # Claude thinking mode

# --- Codex model ---
CODEX_MODEL=gpt-5.4                   # Codex model
CODEX_EFFORT=xhigh                    # Codex reasoning effort

# --- Usage dashboard ---
STATUS_CHANNEL_ID=                    # Discord channel ID for live status updates
# STATUS_SHOW_ROOMS=true              # Show room status in dashboard
# STATUS_SHOW_ROOM_DETAILS=false      # Show detailed room info

# --- Fallback provider (when Claude/Codex both unavailable) ---
# FALLBACK_ENABLED=true               # Enable fallback provider
# FALLBACK_PROVIDER_NAME=kimi         # Provider name for logging
# FALLBACK_BASE_URL=                  # OpenAI-compatible API base URL
# FALLBACK_AUTH_TOKEN=                # API token for fallback provider
# FALLBACK_MODEL=kimi-k2.5            # Fallback model
# FALLBACK_SMALL_MODEL=kimi-k2.5      # Fallback small model
# FALLBACK_COOLDOWN_MS=600000         # Cooldown between fallback attempts (10min)

# --- Per-role model overrides (paired rooms) ---
# Override global CLAUDE_MODEL/CODEX_MODEL per role.
# Model is injected based on each role's agent type (claude-code → CLAUDE_MODEL, codex → CODEX_MODEL).
# OWNER_MODEL=gpt-5.4                   # Owner model override
# OWNER_EFFORT=xhigh                    # Owner effort override
# OWNER_FALLBACK_ENABLED=true           # Fall back to codex on Claude failure (default: true)
#
# REVIEWER_MODEL=claude-opus-4-6        # Reviewer model override
# REVIEWER_EFFORT=high                  # Reviewer effort override
# REVIEWER_FALLBACK_ENABLED=true        # Fall back to codex on Claude failure (default: true)
#
# ARBITER_MODEL=claude-sonnet-4-6       # Arbiter model override
# ARBITER_EFFORT=high                   # Arbiter effort override
# ARBITER_FALLBACK_ENABLED=true         # Fall back to codex on Claude failure (default: true)

# --- Mixture of Agents (MoA) ---
# Queries external API models in parallel before arbiter runs.
# Their opinions are injected into the arbiter's prompt for better judgment.
# The SDK arbiter (subscription-based, no extra cost) aggregates all perspectives.
# MOA_ENABLED=true
# MOA_REF_MODELS=kimi,glm                         # Comma-separated reference model names
# MOA_KIMI_MODEL=kimi-k2.5                        # Kimi model
# MOA_KIMI_BASE_URL=https://api.kimi.com/coding   # Kimi API endpoint
# MOA_KIMI_API_KEY=sk-kimi-xxx                    # Kimi API key
# MOA_GLM_MODEL=glm-4-plus                        # GLM model
# MOA_GLM_BASE_URL=https://open.bigmodel.cn/api/paas/v4  # GLM API endpoint
# MOA_GLM_API_KEY=xxx                             # GLM API key

# --- Advanced ---
# MAX_CONCURRENT_AGENTS=5             # Max parallel agent processes
# SESSION_COMMAND_ALLOWED_SENDERS=    # Comma-separated Discord user IDs for session commands
