Phase 1 of plans/autonomous-survival-bot-prd.md. The bot must always be able to answer "what am I doing and why am I not doing more?" without parsing the log stream. New modules: - runtime/state.js: pure FSM classifier emitting emergency / working / recovering / planning / social / idle from snapshot + reflex context. - runtime/no-progress.js: sliding-window detector that watches position and inventory; when both are unchanged for 60 s+, emits one stable reason code from REASONS (waiting_for_day, night_hostile_nearby, no_food_source, inventory_full, no_reachable_target, planner_empty, awaiting_action_cooldown). - runtime/viewer.js: optional prismarine-viewer launcher behind VIEWER_PORT. Lazy import so the dep is not required by default. Wiring: - runtime/bot.js: tick() now computes runtimeState + noProgressReason every tick and stamps them on the snapshot along with activeSkill, currentMilestone (read from plan.md, cached 30 s), lastResult, failuresByCode and lastEscalation. - runtime/bot.js: dispatchAction records lastResult and lastFailureAt for the recovering-state classifier. - runtime/planner.js: exports isPlannerBusy(), readNextMilestone() and planExists() so the runtime can show planning state + current milestone without spawning extra Pi calls. - runtime/config.js: adds VIEWER_PORT support. TUI: - tui/tui.tsx: StatusBar gains a state badge, current-skill row, milestone row, no-progress reason warning, last-result line with ok/fail color, failures-by-class summary and last-escalation age. Co-authored-by: Yuriy Mayatnikov <mayatnikov@me.com> Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
68 lines
3.0 KiB
Bash
68 lines
3.0 KiB
Bash
# --- Minecraft connection -----------------------------------------------------
|
|
# Any Minecraft Java server. The values below are an example — replace them.
|
|
MC_HOST=play.example.com
|
|
MC_PORT=25565
|
|
MC_USERNAME=pepa_pi_bot
|
|
MC_VERSION=auto # 'auto' = let mineflayer detect from server
|
|
|
|
# --- Minecraft auth -----------------------------------------------------------
|
|
# 'offline' — cracked servers (server runs with online-mode=false). Any nick works.
|
|
# 'microsoft' — premium / online-mode servers. Mineflayer runs a device-code flow
|
|
# on first connect and caches the token under ~/.minecraft-auth/.
|
|
MC_AUTH_MODE=offline
|
|
|
|
# --- Optional: in-game login plugin (AuthMe, nLogin, etc.) --------------------
|
|
# Many cracked servers gate gameplay behind an in-chat /register and /login flow.
|
|
# Leave blank if your target server doesn't use one.
|
|
# Min length is usually 8; use a long random value and never commit it.
|
|
MC_AUTHME_PASSWORD=
|
|
|
|
# --- LLM provider -------------------------------------------------------------
|
|
# Set ONE credential below, OR leave them all blank and run `pi /login` for OAuth
|
|
# (ChatGPT Pro, Claude Max, etc. — when the provider supports it).
|
|
OPENAI_API_KEY=
|
|
ANTHROPIC_API_KEY=
|
|
GOOGLE_API_KEY=
|
|
|
|
# Default model & provider for autonomous ticks.
|
|
# Cheap default; override per-session with `pi --model ...`.
|
|
PI_DEFAULT_PROVIDER=openai
|
|
PI_DEFAULT_MODEL=gpt-5-mini
|
|
|
|
# --- Bot behaviour ------------------------------------------------------------
|
|
# How often (seconds) the autonomous tick prompt fires. Set to 0 to disable.
|
|
TICK_INTERVAL_SECONDS=60
|
|
|
|
# Chat rate limit (messages per minute). Paper/Spigot spam kickers typically
|
|
# trigger around 20/min.
|
|
CHAT_RATE_LIMIT_PER_MIN=15
|
|
|
|
# Guarded travel refuses coordinate requests farther than this many blocks from
|
|
# the bot's current position.
|
|
MAX_TRAVEL_BLOCKS=500
|
|
|
|
# --- Trusted operators (optional) ---------------------------------------------
|
|
# Comma-separated MC nicknames whose chat messages the bot treats as trusted:
|
|
# scope checks are relaxed (the bot will *try* to do new things instead of
|
|
# escalating "out of scope"), and routine confirmations are skipped.
|
|
#
|
|
# SECURITY NOTE: this is only safe on servers where a nickname cannot be
|
|
# impersonated. That includes:
|
|
# - online-mode (premium / Mojang-auth) servers — UUID is verified
|
|
# - cracked servers with AuthMe (or similar) — the password gates the nick
|
|
# On a pure cracked server with NO login plugin, leave this empty.
|
|
#
|
|
# Even for trusted operators, "Hard safety rules" in AGENTS.md remain absolute
|
|
# (no OP, no breaking other players' builds, no .env leak, no chat spam).
|
|
OPERATOR_USERNAMES=
|
|
|
|
# --- Optional: Telegram bridge (future skill, not wired yet) ------------------
|
|
# TELEGRAM_BOT_TOKEN=
|
|
# TELEGRAM_OPERATOR_CHAT_ID=
|
|
|
|
# --- Optional: prismarine-viewer for local visual debugging -------------------
|
|
# Set to a port to launch the in-browser viewer alongside the bot
|
|
# (http://localhost:<port>). Requires `npm i prismarine-viewer` — kept out of
|
|
# the default deps to keep the runtime light. Set to 0 or leave empty to skip.
|
|
VIEWER_PORT=0
|