# v0.4.55 (2026-05-18)
## Features - Xiaomi MiMo Token Plan: region selector (Singapore / China / Europe) — keys are cluster-specific - Antigravity: risk confirmation dialog before first connection - Gemini CLI: surface upstream retry delay on 429 errors ## Fixes - MITM: cannot kill process on macOS under sudo (lsof not found in PATH) - Stream: false-positive stall timeout on Claude reasoning / Kiro responses - Tunnel: cannot re-enable after disable (stuck state) - Tunnel: cloudflared error messages now include log tail for easier debugging - Language switcher: applies selected locale immediately on close (#1234) - Antigravity OAuth: metadata now matches the official client ## Improvements - Gemini CLI: bump engine to 0.34.0 - Re-hide `qwen` (OAuth EOL) and `iflow` (not ready) providers
This commit is contained in:
1 parent
90a47c3f29
commit
613a0a819a
12 files changed
+125
-47
No files matched your search
@@ -49,8 +49,40 @@ export default function ProviderDetailPage() {
|
||||
const [kiloFreeModels, setKiloFreeModels] = useState([]);
|
||||
const [disabledModelIds, setDisabledModelIds] = useState([]);
|
||||
const [confirmState, setConfirmState] = useState(null);
|
||||
const [showAgRiskModal, setShowAgRiskModal] = useState(false);
|
||||
const { copied, copy } = useCopyToClipboard();
|
||||
|
||||
const AG_RISK_STORAGE_KEY = "ag_risk_confirmed";
|
||||
|
||||
const triggerAddConnection = () => {
|
||||
if (providerId === "antigravity" && typeof window !== "undefined") {
|
||||
const confirmed = window.localStorage.getItem(AG_RISK_STORAGE_KEY) === "true";
|
||||
if (!confirmed) {
|
||||
setShowAgRiskModal(true);
|
||||
return;
|
||||
}
|
||||
}
|
||||
if (isOAuth) {
|
||||
setShowOAuthModal(true);
|
||||
return;
|
||||
}
|
||||
setAddConnectionError("");
|
||||
setShowAddApiKeyModal(true);
|
||||
};
|
||||
|
||||
const handleAgRiskConfirm = () => {
|
||||
if (typeof window !== "undefined") {
|
||||
window.localStorage.setItem(AG_RISK_STORAGE_KEY, "true");
|
||||
}
|
||||
setShowAgRiskModal(false);
|
||||
if (isOAuth) {
|
||||
setShowOAuthModal(true);
|
||||
return;
|
||||
}
|
||||
setAddConnectionError("");
|
||||
setShowAddApiKeyModal(true);
|
||||
};
|
||||
|
||||
const providerInfo = providerNode
|
||||
? {
|
||||
id: providerNode.id,
|
||||
@@ -1066,14 +1098,7 @@ export default function ProviderDetailPage() {
|
||||
<Button
|
||||
size="sm"
|
||||
icon="add"
|
||||
onClick={() => {
|
||||
if (isOAuth) {
|
||||
setShowOAuthModal(true);
|
||||
return;
|
||||
}
|
||||
setAddConnectionError("");
|
||||
setShowAddApiKeyModal(true);
|
||||
}}
|
||||
onClick={triggerAddConnection}
|
||||
>
|
||||
{isCompatible ? "Add API Key" : (providerId === "iflow" ? "OAuth" : "Add Connection")}
|
||||
</Button>
|
||||
@@ -1099,14 +1124,7 @@ export default function ProviderDetailPage() {
|
||||
<Button
|
||||
size="sm"
|
||||
icon="add"
|
||||
onClick={() => {
|
||||
if (isOAuth) {
|
||||
setShowOAuthModal(true);
|
||||
return;
|
||||
}
|
||||
setAddConnectionError("");
|
||||
setShowAddApiKeyModal(true);
|
||||
}}
|
||||
onClick={triggerAddConnection}
|
||||
className="w-full sm:w-auto"
|
||||
>
|
||||
Add
|
||||
@@ -1242,6 +1260,18 @@ export default function ProviderDetailPage() {
|
||||
/>
|
||||
)}
|
||||
|
||||
{/* AG Risk Confirmation Modal */}
|
||||
<ConfirmModal
|
||||
isOpen={showAgRiskModal}
|
||||
onClose={() => setShowAgRiskModal(false)}
|
||||
onConfirm={handleAgRiskConfirm}
|
||||
title="Risk Notice"
|
||||
message={providerInfo?.deprecationNotice}
|
||||
confirmText="I Understand, Continue"
|
||||
cancelText="Cancel"
|
||||
variant="danger"
|
||||
/>
|
||||
|
||||
{/* Confirm Modal */}
|
||||
<ConfirmModal
|
||||
isOpen={!!confirmState}
|
||||
|
||||
Reference in new issue
Block a user