108 lines
5.7 KiB
Plaintext
108 lines
5.7 KiB
Plaintext
DISCORD_TOKEN=your_discord_bot_token
|
||
DISCORD_CLIENT_ID=your_discord_application_id
|
||
# DISCORD_GUILD_ID=your_server_id # Set for instant command registration (vs 1hr global propagation)
|
||
|
||
# ── Redis ──────────────────────────────────────────────────────────────────────
|
||
# Shared with GraphMCP-Example stack via knowledge-graph-ai_internal network
|
||
REDIS_URL=redis://redis:6379
|
||
|
||
# How long a session stays alive in Redis without activity (hours)
|
||
# SESSION_TTL_HOURS=12
|
||
|
||
# ── Ollama / LLM ───────────────────────────────────────────────────────────────
|
||
OLLAMA_BASE_URL=http://192.168.1.x:11434
|
||
OLLAMA_MODEL=gemma4-it:e2b
|
||
|
||
# Sampling temperature — higher = more creative, lower = more consistent (0–2)
|
||
# OLLAMA_TEMPERATURE=0.75
|
||
|
||
# Context window in tokens — must match your model's actual max
|
||
# OLLAMA_NUM_CTX=131072
|
||
|
||
# LLM call timeout in milliseconds
|
||
# OLLAMA_TIMEOUT_MS=120000
|
||
|
||
# ── GraphMCP ───────────────────────────────────────────────────────────────────
|
||
GRAPHMCP_URL=http://mcp-server:9000
|
||
|
||
# Minimum semantic similarity score (0–1) to count a chunk as relevant context.
|
||
# Raise to be stricter (fewer but more accurate results).
|
||
# Lower to be more permissive (more context, more noise).
|
||
# GRAPHMCP_SCORE_THRESHOLD=0.68
|
||
|
||
# How many memory chunks to fetch per NPC at encounter start
|
||
# GRAPHMCP_NPC_MEMORY_LIMIT=5
|
||
|
||
# How many chunks to fetch when @Zalram is mentioned
|
||
# GRAPHMCP_MENTION_LIMIT=5
|
||
|
||
# ── Encounter behaviour ────────────────────────────────────────────────────────
|
||
SPECS_DIR=./specs
|
||
|
||
# Delay before archiving a resolved thread — gives players time to read the ending (ms)
|
||
# ENCOUNTER_ARCHIVE_DELAY_MS=5000
|
||
|
||
# How long the player-gate embed stays visible before auto-delete (ms)
|
||
# ENCOUNTER_GATE_TIMEOUT_MS=30000
|
||
|
||
# ── Persona ────────────────────────────────────────────────────────────────────
|
||
# Path to the YAML file defining the bot's @mention persona
|
||
# PERSONA_PATH=./persona.yaml
|
||
|
||
# ── Access control ─────────────────────────────────────────────────────────────
|
||
# Comma-separated channel IDs where encounters are allowed.
|
||
# The bot checks the parent channel of threads before responding.
|
||
# Leave empty and the bot responds nowhere (secure by default).
|
||
# DISCORD_ALLOWED_CHANNELS=123456789012345678,987654321098765432
|
||
DISCORD_ALLOWED_CHANNELS=
|
||
|
||
# Comma-separated user IDs who can use /encounter commands. Empty = everyone.
|
||
# DISCORD_ALLOWED_USERS=123456789012345678,987654321098765432
|
||
DISCORD_ALLOWED_USERS=
|
||
|
||
# ── Logging ────────────────────────────────────────────────────────────────────
|
||
LOG_LEVEL=debug
|
||
|
||
|
||
LITELLM_BASE_URL=
|
||
LITELLM_API_KEY=
|
||
LITELLM_MODEL=ollama-cloud
|
||
|
||
# ── Live integration tests (tests/integration/graphmcp/) ──────────────────────
|
||
# Opt-in gates for the live E2E suite. With neither set, `npm run test:int`
|
||
# skips all 16 graphmcp tests (and the 2 phase1 tests) and exits 0 — CI-safe.
|
||
#
|
||
# RUN_GRAPHMCP_LIVE=1 activates ONLY the AC1 contract suite, which needs a
|
||
# reachable GraphMCP and nothing else (no Discord/LLM/Redis).
|
||
# RUN_FULL_E2E=1 activates AC2–AC4 (and AC1). Needs the full live stack:
|
||
# real Discord gateway, real LLM, real Redis, real GraphMCP.
|
||
# RUN_GRAPHMCP_LIVE=1
|
||
# RUN_FULL_E2E=1
|
||
|
||
# ── Required for RUN_FULL_E2E=1 (AC2–AC4) ──────────────────────────────────────
|
||
# A dedicated Discord test guild + channel (NOT a production server).
|
||
# E2E_TEST_GUILD_ID=123456789012345678
|
||
# E2E_TEST_CHANNEL_ID=1517576125172289787
|
||
|
||
# Token for a SECOND bot that posts chat messages / @mentions into the thread
|
||
# (the bot under test cannot be driven by another bot's slash commands).
|
||
# E2E_DRIVER_TOKEN=your_second_bot_token
|
||
|
||
# Discord user ID of whoever the driver bot acts as. Used as interaction.user.id
|
||
# in the hybrid slash-command fakes. If DISCORD_ALLOWED_USERS (above) is non-empty,
|
||
# this ID MUST be listed there or /encounter start|end will be rejected.
|
||
# E2E_DRIVER_USER_ID=123456789012345678
|
||
|
||
# ── Optional test knobs ───────────────────────────────────────────────────────
|
||
# Real NPC name present in the graph — enables AC1 S1.1 (query_as_npc). When
|
||
# unset, S1.1 is skipped; the rest of AC1 still runs.
|
||
# E2E_TEST_NPC=miriam-merchant-mardonar
|
||
|
||
# Spec to start for AC2/AC3 encounters (defaults to market-thief).
|
||
# E2E_SPEC=market-thief
|
||
#
|
||
# NOTE: when RUN_FULL_E2E=1, the test bootstrap (tests/integration/graphmcp/support/env.ts)
|
||
# auto-seeds DISCORD_ALLOWED_CHANNELS from E2E_TEST_CHANNEL_ID if you haven't set
|
||
# it — so you don't have to edit DISCORD_ALLOWED_CHANNELS just to run the suite.
|
||
# It also injects harmless DISCORD_TOKEN/DISCORD_CLIENT_ID stubs when absent, so
|
||
# the AC1 contract suite can run without any Discord creds at all. |