Commit Graph

1 Commits

Author SHA1 Message Date
Brian b0b1796227
feat(party-mode): persistent per-party memory (#2484)
* feat(party-mode): add persistent per-party memory

Each party now keeps a succinct, append-only memlog (the memlog standard)
under {memory_dir}/<party>/, so a room remembers prior sessions and opens
in character carrying them forward.

- Memory accrues live: capture memorable beats as they land, with a floor
  so an abandoned session still leaves a trace; wrap-up is a top-up.
- Read distills via a reader subagent that returns only current standing
  state (latest dynamic per pair, open threads, recent callbacks) so the
  raw log never enters the party context.
- Writes are silent and fail safe: a missing or erroring memlog.py is
  skipped without breaking the fiction.
- New customize knobs: party_memory (on by default) and memory_dir.

Keyed per party (group id, or `installed` for the default room); ad-hoc
casts stay ephemeral. On-disk compaction is left to a future memlog.py pass.

* refactor(party-mode): standard structure, per-group memory, keep on-the-fly cast

- Restructure SKILL.md to the standard skill shape (intro -> Conventions ->
  On Activation -> content); consolidate all performance rules into one
  "Keep It Feeling Like a Party" section. SKILL.md ~500 tokens lighter.
- Per-group `memory` flag: global party_memory now governs only the default
  room; resolve_party.py resolves memory_enabled per active roster (default
  room -> party_memory, named group -> own flag), with tests.
- On-the-fly characters are captured as memlog entries during a session; at
  wrap-up the room offers to save them into the party via bmad-customize.
- Memory mechanics consolidated into references/party-memory.md; SKILL.md
  step 5 just routes to it.
- Docs updated.

* docs(party-mode): fix open-cast lock-down claim and python3->uv run in create-party
2026-06-20 17:44:21 -05:00