feat: live mental-game rituals in Cash mode
Brian's own rituals (mined from his logs) become first-class, live tools instead of post-hoc recap sections: - Scar Note — instructive mistakes with the punt/cooler/standard distinction. - Confidence Bank — good process, banked regardless of result. - Alligator Blood — invokable adversity state; she suggests it when he's card-dead/short/stuck, and her coaching register shifts while it's on (live state injected into context per-turn via chat._mode_state_note). - Reset — tilt circuit-breaker; mental marker only, stats stay continuous. poker_rituals table + log_ritual/list_rituals/set_alligator/alligator_active; 4 tools added to the Cash toolset and taught in the mode card; HUD gains a 🐊 banner + Confidence Bank + Scar Notes panels; recap grounded via _rituals_block. tests/test_modes.py +5 ritual tests; 41 green. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -24,6 +24,21 @@ MAX_TOOL_ROUNDS = 5 # cap tool-call iterations per turn
|
||||
TOOL_BACKENDS = {"cloud"}
|
||||
|
||||
|
||||
def _mode_state_note(mode: modes.Mode | None) -> str | None:
|
||||
"""Dynamic, per-turn state for the active mode. Currently: surface Alligator
|
||||
Blood while it's engaged on the live session, so she stays in that register."""
|
||||
if not mode or mode.key != modes.CASH.key:
|
||||
return None
|
||||
from lyra import poker # local import: keep the core/domain coupling at call time
|
||||
if poker.alligator_active():
|
||||
return (
|
||||
"🐊 ALLIGATOR BLOOD is ON for this session. Coach Brian in that register: "
|
||||
"hang around, refuse to die, don't force miracles, make opponents beat him "
|
||||
"correctly. Tough, patient, steady — no heroics, no spew, no quitting."
|
||||
)
|
||||
return None
|
||||
|
||||
|
||||
def _maybe_switch_mode(session_id: str, tool_name: str) -> None:
|
||||
"""Keep the chat framing aligned with the live data: opening a poker session
|
||||
auto-flips this chat into Cash mode (so the next turn gets the cash card + the
|
||||
@@ -80,6 +95,13 @@ def build_messages(session_id: str, user_msg: str,
|
||||
if mode and mode.card:
|
||||
messages.append({"role": "system", "content": mode.card})
|
||||
|
||||
# Live ritual state (e.g. Alligator Blood ON) — dynamic, so it rides alongside
|
||||
# the static card and keeps her in-register for the whole stretch, not just the
|
||||
# turn she flipped it.
|
||||
state_note = _mode_state_note(mode)
|
||||
if state_note:
|
||||
messages.append({"role": "system", "content": state_note})
|
||||
|
||||
# When she is: current time + the gap since Brian last spoke (she has no clock).
|
||||
messages.append(_now_note())
|
||||
|
||||
|
||||
Reference in New Issue
Block a user