fix(acp): harden session-page connection and localize backend errors

- Session-page connect never triggers download/install; returns
  SdkNotInstalled immediately and prompts the user to install from
  Agent Settings instead
- Binary agents now accept any cached version via
  find_best_cached_binary_for_agent so stale caches still connect
- Bound Initialize handshake with a 60s timeout and convert it to
  AcpError::InitializeTimeout via a sentinel in run_connection
- Spawn background task owns ConnectionManager map insertion and
  removes the entry on exit through an RAII guard that survives
  panics, preventing leaked stale entries
- AcpError gains SdkNotInstalled and InitializeTimeout variants plus
  a stable code() identifier; AcpEvent::Error carries code so the
  frontend can render localized messages by key
- Frontend preflight now runs for all connect sources; error event
  handler switches on code to show translated text for
  initialize_timeout, sdk_not_installed, platform_not_supported,
  process_exited, spawn_failed and download_failed
- Remove ConnectionStatus::Downloading enum variant, all frontend
  branches, and i18n strings; drop obsolete autoLinkFailedTitle,
  autoLinkPreflightFailed, preflightCheckFailedDefault and
  preflightFailedTitle keys across 10 locales
- Add backendErrors.* translations in 10 languages
- Diagnostic logging: always log agent stderr plus binary
  path/size/args/env keys and Initialize timing; gate stdin/stdout
  JSON-RPC tracing behind CODEG_ACP_DEBUG to avoid persisting user
  content into OS log files

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
xintaofei
2026-04-12 03:36:08 +08:00
parent 5bda7d06e9
commit 1c1738298b
25 changed files with 595 additions and 255 deletions

View File

@@ -851,7 +851,6 @@
"connection": {
"connected": "متصل",
"connecting": "جارٍ الاتصال...",
"downloading": "جارٍ التنزيل...",
"prompting": "جارٍ الرد...",
"error": "خطأ في الاتصال",
"disconnected": "غير متصل",
@@ -1422,11 +1421,13 @@
"unavailable": "{agent} غير متاح على المنصة الحالية.",
"sdkMissing": "لم يتم تثبيت SDK الخاص بـ {agent}"
},
"backendErrors": {
"initializeTimeout": "انتهت مهلة مصافحة اتصال {agent} (لا استجابة بعد 60 ثانية). افتح الإعدادات للتحقق من إعدادات الوكيل والشبكة.",
"processExited": "انتهت عملية {agent} بشكل غير متوقع.",
"spawnFailed": "تعذر بدء تشغيل {agent}: {message}",
"downloadFailed": "فشل تنزيل {agent}: {message}"
},
"unableReadAgentConfig": "تعذر قراءة إعدادات الوكيل: {message}",
"autoLinkFailedTitle": "فشل الربط التلقائي لـ {agent}",
"preflightCheckFailedDefault": "فشلت فحوصات ما قبل التشغيل. تحقق من إعدادات الوكلاء.",
"preflightFailedTitle": "فشل فحص ما قبل التشغيل لـ {agent}",
"autoLinkPreflightFailed": "فشل فحص ما قبل التشغيل للربط التلقائي: {message}",
"connectFailedTitle": "فشل اتصال {agent}",
"toolFallbackTitle": "أداة",
"eventErrorTitle": "خطأ الوكيل",