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:
@@ -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": {
|
||||
|
||||
@@ -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": {
|
||||
|
||||
@@ -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": {
|
||||
|
||||
@@ -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": {
|
||||
|
||||
@@ -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": {
|
||||
|
||||
@@ -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": {
|
||||
|
||||
@@ -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": {
|
||||
|
||||
@@ -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": {
|
||||
|
||||
@@ -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": {
|
||||
|
||||
@@ -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": {
|
||||
|
||||
Reference in New Issue
Block a user