fix(ops): English replies from English prompts and ROLE_SYSTEM.en

Detect language from user message before UI hint, load ops ROLE_SYSTEM.en.md when en, and wire user_text through WS/HTTP/worker paths.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
oliver 2026-05-19 22:41:46 +08:00
parent f1626195f7
commit 0de5f7bc98
9 changed files with 151 additions and 19 deletions

View file

@ -1,10 +1,39 @@
from __future__ import annotations
import re
from typing import Any
_CJK_RE = re.compile(r"[\u4e00-\u9fff\u3400-\u4dbf\uf900-\ufaff]")
def resolve_runtime_lang(*, store: Any | None = None, hint: str | None = None) -> str:
"""Resolve zh/en for agent runtime (WS, worker, HTTP share this helper)."""
def detect_text_lang(text: str) -> str | None:
"""Heuristic zh/en from user message; None if ambiguous."""
t = str(text or "").strip()
if not t:
return None
cjk = len(_CJK_RE.findall(t))
latin = sum(1 for ch in t if ch.isascii() and ch.isalpha())
if cjk >= 2 and cjk >= latin:
return "zh"
if latin >= 6 and latin > cjk * 2:
return "en"
return None
def resolve_runtime_lang(
*,
store: Any | None = None,
hint: str | None = None,
user_text: str | None = None,
) -> str:
"""Resolve zh/en for agent runtime (WS, worker, HTTP share this helper).
User message language wins over UI hint so English prompts get English replies
even when the admin UI is still set to Chinese.
"""
detected = detect_text_lang(user_text or "")
if detected in ("zh", "en"):
return detected
raw = str(hint or "").strip().lower()
if raw in ("zh", "en"):
return raw
@ -18,4 +47,4 @@ def resolve_runtime_lang(*, store: Any | None = None, hint: str | None = None) -
return "zh"
__all__ = ["resolve_runtime_lang"]
__all__ = ["detect_text_lang", "resolve_runtime_lang"]