diff --git a/messages/de.json b/messages/de.json
index 02a90b3e5..71214dc44 100644
--- a/messages/de.json
+++ b/messages/de.json
@@ -1892,6 +1892,7 @@
"integrationPill": {
"connected": "Verbunden",
"errorReconnect": "Fehler — neu verbinden",
+ "warningServerError": "Verbunden, aber Serverfehler",
"notConnected": "Nicht verbunden",
"justNow": "gerade eben",
"minutesAgo": "vor {count} min",
diff --git a/messages/en.json b/messages/en.json
index 01f79cfaf..b07f3d193 100644
--- a/messages/en.json
+++ b/messages/en.json
@@ -1892,6 +1892,7 @@
"integrationPill": {
"connected": "Connected",
"errorReconnect": "Error — reconnect",
+ "warningServerError": "Connected, server error",
"notConnected": "Not connected",
"justNow": "just now",
"minutesAgo": "{count} min ago",
diff --git a/messages/es.json b/messages/es.json
index eb07d4fc2..a4b42fd9f 100644
--- a/messages/es.json
+++ b/messages/es.json
@@ -1890,9 +1890,10 @@
}
},
"integrationPill": {
- "connected": "Connected",
- "errorReconnect": "Error — reconnect",
- "notConnected": "Not connected",
+ "connected": "Conectado",
+ "errorReconnect": "Error — reconectar",
+ "warningServerError": "Conectado, error del servidor",
+ "notConnected": "No conectado",
"justNow": "just now",
"minutesAgo": "{count} min ago",
"hoursAgo": "{count} h ago",
diff --git a/messages/fr.json b/messages/fr.json
index b3eeca3d1..ea3dfcf96 100644
--- a/messages/fr.json
+++ b/messages/fr.json
@@ -1890,9 +1890,10 @@
}
},
"integrationPill": {
- "connected": "Connected",
- "errorReconnect": "Error — reconnect",
- "notConnected": "Not connected",
+ "connected": "Connecté",
+ "errorReconnect": "Erreur — reconnecter",
+ "warningServerError": "Connecté, erreur serveur",
+ "notConnected": "Non connecté",
"justNow": "just now",
"minutesAgo": "{count} min ago",
"hoursAgo": "{count} h ago",
diff --git a/messages/it.json b/messages/it.json
index ffd073b74..a026bb38c 100644
--- a/messages/it.json
+++ b/messages/it.json
@@ -1890,9 +1890,10 @@
}
},
"integrationPill": {
- "connected": "Connected",
- "errorReconnect": "Error — reconnect",
- "notConnected": "Not connected",
+ "connected": "Connesso",
+ "errorReconnect": "Errore — riconnetti",
+ "warningServerError": "Connesso, errore del server",
+ "notConnected": "Non connesso",
"justNow": "just now",
"minutesAgo": "{count} min ago",
"hoursAgo": "{count} h ago",
diff --git a/messages/pl.json b/messages/pl.json
index 231a03a2e..4d36e8d6e 100644
--- a/messages/pl.json
+++ b/messages/pl.json
@@ -1890,9 +1890,10 @@
}
},
"integrationPill": {
- "connected": "Connected",
- "errorReconnect": "Error — reconnect",
- "notConnected": "Not connected",
+ "connected": "Połączono",
+ "errorReconnect": "Błąd — połącz ponownie",
+ "warningServerError": "Połączono, błąd serwera",
+ "notConnected": "Nie połączono",
"justNow": "just now",
"minutesAgo": "{count} min ago",
"hoursAgo": "{count} h ago",
diff --git a/src/components/settings/integration-status-pill.tsx b/src/components/settings/integration-status-pill.tsx
index 2377e8190..0dbde5897 100644
--- a/src/components/settings/integration-status-pill.tsx
+++ b/src/components/settings/integration-status-pill.tsx
@@ -26,7 +26,11 @@ import { cn } from "@/lib/utils";
* abbreviated time form into a 12 char string at most.
*/
-export type IntegrationPillState = "connected" | "error" | "disconnected";
+export type IntegrationPillState =
+ | "connected"
+ | "warning"
+ | "error"
+ | "disconnected";
interface IntegrationStatusPillProps {
state: IntegrationPillState;
@@ -74,10 +78,15 @@ export function IntegrationStatusPill({
}: IntegrationStatusPillProps) {
const { t } = useTranslations();
- // chipClass only applies to the `connected` branch — `error` falls back
- // to `variant="destructive"` and `disconnected` to `variant="outline"`.
+ // chipClass only applies to the `connected` and `warning` branches —
+ // `error` falls back to `variant="destructive"` and `disconnected` to
+ // `variant="outline"`. The warning chip uses amber tokens to signal
+ // "connected, but the upstream just returned a contract-level error
+ // a reauth won't fix" — distinct from the red reconnect pill.
const connectedChipClass =
"border-dracula-green/30 bg-dracula-green/15 text-dracula-green";
+ const warningChipClass =
+ "border-dracula-yellow/30 bg-dracula-yellow/15 text-dracula-yellow";
let label: string;
let icon: React.ReactNode;
@@ -87,6 +96,10 @@ export function IntegrationStatusPill({
label = t("settings.integrationPill.connected");
icon = ;
break;
+ case "warning":
+ label = t("settings.integrationPill.warningServerError");
+ icon = ;
+ break;
case "error":
label = t("settings.integrationPill.errorReconnect");
icon = ;
@@ -111,7 +124,7 @@ export function IntegrationStatusPill({
data-testid="integration-status-pill"
data-state={state}
variant={
- state === "connected"
+ state === "connected" || state === "warning"
? undefined
: state === "error"
? "destructive"
@@ -121,6 +134,7 @@ export function IntegrationStatusPill({
className={cn(
"max-w-full whitespace-nowrap",
state === "connected" && connectedChipClass,
+ state === "warning" && warningChipClass,
className,
)}
>