The game is now self-contained: run.sh starts the TUI, which calls the
LLM directly via engine.py. No external agent (OpenCode) needed.
- tools/engine.py: Game engine with prompt builder, litellm client,
response parser (JSON block extraction), and state persistence
- tools/run.py: Refactored TUI with PLAY/CHAR/LOG/BOOK tabs. PLAY tab
has streaming narrative pane, dynamic choice buttons, and text input.
Game loop: scene -> input -> resolve -> archive -> apply -> scene
- session/config.json: LLM provider configuration (model, api_key, etc.)
- AGENTS.md: Updated to document the new architecture
- tools/__init__.py: Package marker for clean imports
- session/turn_description.md, turn_reaction.md: Deprecated - no longer
needed now that the TUI drives the game loop internally
- AGENTS.md: formalized game loop (print turn → wait for reaction →
process → generate next turn), fixed project layout paths
- tools/store_turn.py: new script to append turn to book.md and clear
temp files
- tools/run.py: TUI redesign — TODO always on top, CHARACTER/LOG tabs,
TURN section with rendered markdown, input writes to turn_reaction.md,
scrolling via VerticalScroll, log auto-populates from previous day,
>>--- NOW ---> marker at log end with auto-scroll
- session/book.md: story book (append-only narrative)
- session/log/2026-06-25.md: today's log seeded from previous session