"""Global context builder — state → the exact context object in SCHEMAS.md.""" from __future__ import annotations from .schemas import APPROVED_CLIENTS, NPC_IDS from .state import GameState def build_context(state: GameState) -> dict: return { "game_config": { "company": "Veloura Technologies", "player_title": "Head of Sales and Partnerships", "crisis_number": state.crisis_number, "total_crises": 15, "tone": "comedic corporate satire — The Office meets Silicon Valley", "approved_clients": APPROVED_CLIENTS, }, "financial_state": { "revenue": state.revenue, "target": state.target, "company_budget": state.company_budget, "bonuses_issued": state.bonuses_issued, "total_bonus_spend": state.total_bonus_spend, "pocket_money": state.pocket_money, "bribes_accepted": state.bribes_accepted, }, "team_state": { "morale": state.morale, "npcs": { n: { "relationship": s.relationship, "gifts_received": s.gifts_received, "mood": s.mood, "incident_count": s.incident_count, "personal_situation": s.personal_situation, "recent_events": s.recent_events[-3:], } for n, s in state.npcs.items() }, }, "constraint_state": { "budget_warning": state.company_budget < 5_000, "board_scrutiny": state.board_scrutiny, "consecutive_praise": {n: state.npc(n).consecutive_praise for n in NPC_IDS}, "consecutive_harsh": state.consecutive_harsh, "consecutive_fine_whatever": state.consecutive_fine_whatever, "hr_alert": state.hr_alert, "extended_presentation": bool( state.presentation and state.presentation.get("extended")), }, "event_log": list(state.event_log), }