from typing import Optional from agent_build_sdk.model.werewolf_model import ( STATUS_DISCUSS, STATUS_SHERIFF, STATUS_SHERIFF_ELECTION, STATUS_SHERIFF_SPEECH, STATUS_SHERIFF_PK, STATUS_SHERIFF_SPEECH_ORDER, STATUS_SHERIFF_VOTE, STATUS_VOTE, STATUS_SKILL, STATUS_WOLF_SPEECH, ) from core import ruleset from core.actions import ( DiscussAction, SheriffRunAction, SheriffSpeechOrderAction, SheriffTransferAction, SheriffVoteAction, SkillAction, VoteAction, ) from core.output_guard import normalize_llm_text def parse_action(status: str, text: Optional[str]): s = normalize_llm_text(text) if status in {STATUS_DISCUSS, STATUS_WOLF_SPEECH, STATUS_SHERIFF_SPEECH, STATUS_SHERIFF_PK}: return DiscussAction(text=s) if status == STATUS_VOTE: return VoteAction(target=s) if status == STATUS_SKILL: if s == ruleset.NO_SHOOT or s == ruleset.WITCH_NO_USE: return SkillAction(target=None) return SkillAction(target=s) if status == STATUS_SHERIFF_VOTE: return SheriffVoteAction(target=s) if status == STATUS_SHERIFF: return SheriffTransferAction(target=s) if status == STATUS_SHERIFF_ELECTION: if s == ruleset.SHERIFF_RUN: return SheriffRunAction(join=True) if s == ruleset.SHERIFF_NOT_RUN: return SheriffRunAction(join=False) return None if status == STATUS_SHERIFF_SPEECH_ORDER: return SheriffSpeechOrderAction(order=s) return None