Three new arms gated on Type == BattleType.Bot, placed before the existing PvP / Scripted arms: - InitBattle → ack to sender (no Matched push — client uses AIBattleStart HTTP data) - Loaded → silent (no BattleStart, no Deal — client short-circuits to GotoBattle) - TurnEnd / TurnEndFinal → Judge to sender only (not broadcast) Other URIs in Bot mode fall through existing arms: Swap is Type-agnostic (per-sender SwapResponse + Ready), Retire/Kill hits the existing Scripted no-contest BattleFinish(Win), gameplay forwarders are gated on Pvp so Bot's PlayActions/Echo/etc. fall through default (drop). 8 new dispatch tests cover the wire contract. Reference: docs/api-spec/in-battle/ai-passive.md. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
17 KiB
17 KiB