Add background advancement evaluator and DM notification channel
The DM has been great at storytelling but never considers leveling up the
player character — no mechanism was nudging it to think about progression.
This adds a background agent that periodically reads the campaign journal
and makes a vibes-based judgment (calibrated against the SRD XP tables)
about whether it's time to level up. When it decides yes, it sets a flag
on the character sheet and sends a notification the DM sees next turn.
From the player's perspective it's pure milestone advancement; under the
hood there's a principled evaluator keeping the pace right.
Also adds a general notification channel so background agents (planner,
ticker, advancement) can tell the foreground DM what they changed. Before
this, they'd silently modify world files and the DM had no idea.
Other changes:
- Split tools.py (1,200 lines) into a tools/ package grouped by domain
- Extracted advancement.py from planner.py
- Added log methods for scanning by tag (for finding last level-up)
- Removed `storied plan` and `storied tick` CLI commands since both now
run automatically during gameplay
- DM prompt now has instructions for handling level-ups narratively,
including the `level` tag in set_scene
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>