Removed the fixed-value text detector. persona_reply no longer forces JSON meta; instead a
per-turn evaluate_turn() calls the judge LLM after every customer reply to read the persona's
current mood + whether it has decided (buy/walk/pending) + score_delta + reason. send_message
consumes that context-based decision to (a) end the chat as won/lost and (b) move the score.
This is what the user asked: the system evaluates EVERY turn and decides at the moment it's
truly committed — not keyword matching (so 'ซื้อไม่ไหว แต่ว่ามีผ่อนไหม?' stays pending).
Mock updated: judge returns buy on first send (keeps E2E deterministic). 11/11 suites pass.
- start_session now RESUMES an existing ACTIVE session for the persona instead of creating
a new one / forcing re-pick of the scenario (keep original scenario+messages).
- send_message falls back to a text-based decision detector (_detect_customer_decision)
because real LLMs rarely emit structured meta.decision — so a customer who says
'ซื้อไม่ไหว'/'no thanks' now actually ENDS the chat as lost (was stuck active forever).
Fragments handled in TH + EN; buy + walk.
All 11 backend suites pass. Rebuilt dist.