feat(acp): surface Claude API retry state in chat input

Enable raw Claude SDK forwarding for ACP sessions and emit only system/api_retry events to the frontend.

Show a localized single-line retry banner with loading under the conversation input, including error details and retry progress.
This commit is contained in:
xintaofei
2026-04-14 14:59:32 +08:00
parent 77e46d80f8
commit f9923df1fe
17 changed files with 492 additions and 17 deletions

View File

@@ -1449,7 +1449,17 @@
"toolFallbackTitle": "أداة",
"eventErrorTitle": "خطأ الوكيل",
"notificationTurnComplete": "{agent} أنهى الاستجابة",
"notificationError": "{agent} خطأ: {message}"
"notificationError": "{agent} خطأ: {message}",
"claudeApiRetry": {
"fallbackError": "authentication_failed",
"retryingWithMax": "إعادة المحاولة {attempt}/{max}",
"retryingAttempt": "إعادة المحاولة رقم {attempt}",
"retrying": "جاري إعادة المحاولة",
"nextRetryIn": "المحاولة التالية خلال {seconds}ث",
"line": "{error}{status} · {retry}",
"lineWithDelay": "{error}{status} · {retry}، {delay}",
"httpStatus": " (HTTP {status})"
}
},
"connectionLifecycle": {
"tasks": {

View File

@@ -1449,7 +1449,17 @@
"toolFallbackTitle": "Werkzeug",
"eventErrorTitle": "Agentenfehler",
"notificationTurnComplete": "{agent} hat die Antwort abgeschlossen",
"notificationError": "{agent} Fehler: {message}"
"notificationError": "{agent} Fehler: {message}",
"claudeApiRetry": {
"fallbackError": "authentication_failed",
"retryingWithMax": "erneuter Versuch {attempt}/{max}",
"retryingAttempt": "erneuter Versuch {attempt}",
"retrying": "erneuter Versuch",
"nextRetryIn": "nächster in {seconds}s",
"line": "{error}{status} · {retry}",
"lineWithDelay": "{error}{status} · {retry}, {delay}",
"httpStatus": " (HTTP {status})"
}
},
"connectionLifecycle": {
"tasks": {

View File

@@ -1449,7 +1449,17 @@
"toolFallbackTitle": "Tool",
"eventErrorTitle": "Agent Error",
"notificationTurnComplete": "{agent} has finished responding",
"notificationError": "{agent} error: {message}"
"notificationError": "{agent} error: {message}",
"claudeApiRetry": {
"fallbackError": "authentication_failed",
"retryingWithMax": "retrying {attempt}/{max}",
"retryingAttempt": "retrying attempt {attempt}",
"retrying": "retrying",
"nextRetryIn": "next in {seconds}s",
"line": "{error}{status} · {retry}",
"lineWithDelay": "{error}{status} · {retry}, {delay}",
"httpStatus": " (HTTP {status})"
}
},
"connectionLifecycle": {
"tasks": {

View File

@@ -1449,7 +1449,17 @@
"toolFallbackTitle": "Herramienta",
"eventErrorTitle": "Error del agente",
"notificationTurnComplete": "{agent} ha terminado de responder",
"notificationError": "{agent} error: {message}"
"notificationError": "{agent} error: {message}",
"claudeApiRetry": {
"fallbackError": "authentication_failed",
"retryingWithMax": "reintentando {attempt}/{max}",
"retryingAttempt": "reintentando intento {attempt}",
"retrying": "reintentando",
"nextRetryIn": "siguiente en {seconds}s",
"line": "{error}{status} · {retry}",
"lineWithDelay": "{error}{status} · {retry}, {delay}",
"httpStatus": " (HTTP {status})"
}
},
"connectionLifecycle": {
"tasks": {

View File

@@ -1449,7 +1449,17 @@
"toolFallbackTitle": "Outil",
"eventErrorTitle": "Erreur de l'agent",
"notificationTurnComplete": "{agent} a terminé de répondre",
"notificationError": "{agent} erreur : {message}"
"notificationError": "{agent} erreur : {message}",
"claudeApiRetry": {
"fallbackError": "authentication_failed",
"retryingWithMax": "nouvelle tentative {attempt}/{max}",
"retryingAttempt": "nouvelle tentative {attempt}",
"retrying": "nouvelle tentative",
"nextRetryIn": "prochaine dans {seconds}s",
"line": "{error}{status} · {retry}",
"lineWithDelay": "{error}{status} · {retry}, {delay}",
"httpStatus": " (HTTP {status})"
}
},
"connectionLifecycle": {
"tasks": {

View File

@@ -1449,7 +1449,17 @@
"toolFallbackTitle": "ツール",
"eventErrorTitle": "エージェントエラー",
"notificationTurnComplete": "{agent} の応答が完了しました",
"notificationError": "{agent} エラー:{message}"
"notificationError": "{agent} エラー:{message}",
"claudeApiRetry": {
"fallbackError": "authentication_failed",
"retryingWithMax": "再試行中 {attempt}/{max}",
"retryingAttempt": "再試行中({attempt} 回目)",
"retrying": "再試行中",
"nextRetryIn": "{seconds}秒後に再試行",
"line": "{error}{status} · {retry}",
"lineWithDelay": "{error}{status} · {retry}、{delay}",
"httpStatus": " (HTTP {status})"
}
},
"connectionLifecycle": {
"tasks": {

View File

@@ -1449,7 +1449,17 @@
"toolFallbackTitle": "도구",
"eventErrorTitle": "에이전트 오류",
"notificationTurnComplete": "{agent} 응답이 완료되었습니다",
"notificationError": "{agent} 오류: {message}"
"notificationError": "{agent} 오류: {message}",
"claudeApiRetry": {
"fallbackError": "authentication_failed",
"retryingWithMax": "재시도 중 {attempt}/{max}",
"retryingAttempt": "{attempt}번째 재시도 중",
"retrying": "재시도 중",
"nextRetryIn": "{seconds}초 후 재시도",
"line": "{error}{status} · {retry}",
"lineWithDelay": "{error}{status} · {retry}, {delay}",
"httpStatus": " (HTTP {status})"
}
},
"connectionLifecycle": {
"tasks": {

View File

@@ -1449,7 +1449,17 @@
"toolFallbackTitle": "Ferramenta",
"eventErrorTitle": "Erro do agente",
"notificationTurnComplete": "{agent} terminou de responder",
"notificationError": "{agent} erro: {message}"
"notificationError": "{agent} erro: {message}",
"claudeApiRetry": {
"fallbackError": "authentication_failed",
"retryingWithMax": "tentando novamente {attempt}/{max}",
"retryingAttempt": "tentando novamente tentativa {attempt}",
"retrying": "tentando novamente",
"nextRetryIn": "próxima em {seconds}s",
"line": "{error}{status} · {retry}",
"lineWithDelay": "{error}{status} · {retry}, {delay}",
"httpStatus": " (HTTP {status})"
}
},
"connectionLifecycle": {
"tasks": {

View File

@@ -1449,7 +1449,17 @@
"toolFallbackTitle": "工具",
"eventErrorTitle": "Agent 错误",
"notificationTurnComplete": "{agent} 已完成响应",
"notificationError": "{agent} 错误:{message}"
"notificationError": "{agent} 错误:{message}",
"claudeApiRetry": {
"fallbackError": "authentication_failed",
"retryingWithMax": "正在重试 {attempt}/{max}",
"retryingAttempt": "正在重试(第 {attempt} 次)",
"retrying": "正在重试",
"nextRetryIn": "{seconds} 秒后重试",
"line": "{error}{status} · {retry}",
"lineWithDelay": "{error}{status} · {retry}{delay}",
"httpStatus": "HTTP {status}"
}
},
"connectionLifecycle": {
"tasks": {

View File

@@ -1449,7 +1449,17 @@
"toolFallbackTitle": "工具",
"eventErrorTitle": "Agent 錯誤",
"notificationTurnComplete": "{agent} 已完成回應",
"notificationError": "{agent} 錯誤:{message}"
"notificationError": "{agent} 錯誤:{message}",
"claudeApiRetry": {
"fallbackError": "authentication_failed",
"retryingWithMax": "正在重試 {attempt}/{max}",
"retryingAttempt": "正在重試(第 {attempt} 次)",
"retrying": "正在重試",
"nextRetryIn": "{seconds} 秒後重試",
"line": "{error}{status} · {retry}",
"lineWithDelay": "{error}{status} · {retry}{delay}",
"httpStatus": "HTTP {status}"
}
},
"connectionLifecycle": {
"tasks": {