diff --git a/src/cliproxy/antigravity-responsibility.ts b/src/cliproxy/antigravity-responsibility.ts
index 1f89b5a2..c16722cd 100644
--- a/src/cliproxy/antigravity-responsibility.ts
+++ b/src/cliproxy/antigravity-responsibility.ts
@@ -14,7 +14,8 @@ import { getCliproxySafetyConfig } from '../config/unified-config-loader';
export const ANTIGRAVITY_RISK_ISSUE_URL = 'https://github.com/kaitranntt/ccs/issues/509';
export const ANTIGRAVITY_ACK_VERSION = '2026-02-24-antigravity-oauth-v2';
-export const ANTIGRAVITY_ACK_PHRASE = 'I ACCEPT AGY RISK';
+export const RISK_ACK_PHRASE = 'I ACCEPT RISK';
+export const ANTIGRAVITY_ACK_PHRASE = RISK_ACK_PHRASE;
export const ANTIGRAVITY_ACCEPT_RISK_FLAGS = ['--accept-agr-risk', '--accept-antigravity-risk'];
type AgyRiskContext = 'oauth' | 'run';
diff --git a/tests/unit/cliproxy/antigravity-responsibility.test.ts b/tests/unit/cliproxy/antigravity-responsibility.test.ts
index 420c142a..0777a60d 100644
--- a/tests/unit/cliproxy/antigravity-responsibility.test.ts
+++ b/tests/unit/cliproxy/antigravity-responsibility.test.ts
@@ -57,7 +57,7 @@ describe('antigravity-responsibility', () => {
reviewedIssue509: true,
understandsBanRisk: true,
acceptsFullResponsibility: true,
- typedPhrase: ' i accept agy risk ',
+ typedPhrase: ' i accept risk ',
});
expect(result.valid).toBeTrue();
diff --git a/ui/src/components/account/account-safety-warning-card.tsx b/ui/src/components/account/account-safety-warning-card.tsx
index 8272caab..ad646ad1 100644
--- a/ui/src/components/account/account-safety-warning-card.tsx
+++ b/ui/src/components/account/account-safety-warning-card.tsx
@@ -1,14 +1,16 @@
import { AlertTriangle, ExternalLink, Settings2 } from 'lucide-react';
import { Badge } from '@/components/ui/badge';
-import { Checkbox } from '@/components/ui/checkbox';
+import { Input } from '@/components/ui/input';
import { Label } from '@/components/ui/label';
import { cn } from '@/lib/utils';
+import { RISK_ACK_PHRASE } from '@/components/account/antigravity-responsibility-constants';
interface AccountSafetyWarningCardProps {
className?: string;
showAcknowledgement?: boolean;
- acknowledged?: boolean;
- onAcknowledgedChange?: (value: boolean) => void;
+ acknowledgementPhrase?: string;
+ acknowledgementText?: string;
+ onAcknowledgementTextChange?: (value: string) => void;
disabled?: boolean;
showProxySettingsLink?: boolean;
}
@@ -16,8 +18,9 @@ interface AccountSafetyWarningCardProps {
export function AccountSafetyWarningCard({
className,
showAcknowledgement = false,
- acknowledged = false,
- onAcknowledgedChange,
+ acknowledgementPhrase = RISK_ACK_PHRASE,
+ acknowledgementText = '',
+ onAcknowledgementTextChange,
disabled = false,
showProxySettingsLink = false,
}: AccountSafetyWarningCardProps) {
@@ -99,20 +102,22 @@ export function AccountSafetyWarningCard({
- {showAcknowledgement && onAcknowledgedChange && (
+ {showAcknowledgement && onAcknowledgementTextChange && (
-
- onAcknowledgedChange(Boolean(checked))}
- disabled={disabled}
- />
-
-
+
+
onAcknowledgementTextChange(e.target.value)}
+ placeholder={acknowledgementPhrase}
+ disabled={disabled}
+ className="mt-2 font-mono text-xs"
+ />
)}
diff --git a/ui/src/components/account/add-account-dialog.tsx b/ui/src/components/account/add-account-dialog.tsx
index a387eb92..094ce6ff 100644
--- a/ui/src/components/account/add-account-dialog.tsx
+++ b/ui/src/components/account/add-account-dialog.tsx
@@ -34,6 +34,7 @@ import { AntigravityResponsibilityChecklist } from '@/components/account/antigra
import {
ANTIGRAVITY_ACK_VERSION,
DEFAULT_ANTIGRAVITY_RISK_CHECKLIST,
+ RISK_ACK_PHRASE,
isAntigravityRiskChecklistComplete,
} from '@/components/account/antigravity-responsibility-constants';
import {
@@ -55,6 +56,10 @@ interface AddAccountDialogProps {
isFirstAccount?: boolean;
}
+function normalizeRiskPhrase(value: string): string {
+ return value.trim().replace(/\s+/g, ' ').toUpperCase();
+}
+
export function AddAccountDialog({
open,
onClose,
@@ -66,7 +71,7 @@ export function AddAccountDialog({
const [callbackUrl, setCallbackUrl] = useState('');
const [copied, setCopied] = useState(false);
const [localError, setLocalError] = useState(null);
- const [acknowledgedRisk, setAcknowledgedRisk] = useState(false);
+ const [riskAcknowledgementText, setRiskAcknowledgementText] = useState('');
const [agyRiskChecklist, setAgyRiskChecklist] = useState(DEFAULT_ANTIGRAVITY_RISK_CHECKLIST);
const [agyAckBypassEnabled, setAgyAckBypassEnabled] = useState(false);
const [agyAckBypassLoading, setAgyAckBypassLoading] = useState(false);
@@ -80,6 +85,7 @@ export function AddAccountDialog({
const requiresAgyResponsibilityFlow = provider === 'agy' && !agyAckBypassEnabled;
const isAgyBypassStatePending = provider === 'agy' && agyAckBypassLoading;
const isAgyRiskChecklistComplete = isAntigravityRiskChecklistComplete(agyRiskChecklist);
+ const isGeminiRiskAcknowledged = normalizeRiskPhrase(riskAcknowledgementText) === RISK_ACK_PHRASE;
const defaultDeviceCode = isDeviceCodeProvider(provider);
const requiresNickname = isNicknameRequiredProvider(provider);
const kiroMethodOption = getKiroAuthMethodOption(kiroAuthMethod);
@@ -102,7 +108,7 @@ export function AddAccountDialog({
setCallbackUrl('');
setCopied(false);
setLocalError(null);
- setAcknowledgedRisk(false);
+ setRiskAcknowledgementText('');
setAgyRiskChecklist(DEFAULT_ANTIGRAVITY_RISK_CHECKLIST);
setAgyAckBypassEnabled(false);
setAgyAckBypassLoading(false);
@@ -113,7 +119,7 @@ export function AddAccountDialog({
useEffect(() => {
if (open) {
- setAcknowledgedRisk(false);
+ setRiskAcknowledgementText('');
setAgyRiskChecklist(DEFAULT_ANTIGRAVITY_RISK_CHECKLIST);
setLocalError(null);
}
@@ -252,9 +258,9 @@ export function AddAccountDialog({
);
return;
}
- if (requiresSafetyAcknowledgement && !acknowledgedRisk) {
+ if (requiresSafetyAcknowledgement && !isGeminiRiskAcknowledged) {
setLocalError(
- 'Please acknowledge the account safety warning before authenticating this provider.'
+ `Type "${RISK_ACK_PHRASE}" to acknowledge the account safety warning before authenticating this provider.`
);
return;
}
@@ -348,9 +354,10 @@ export function AddAccountDialog({
{requiresSafetyAcknowledgement && !showAuthUI && (
{
- setAcknowledgedRisk(value);
+ acknowledgementPhrase={RISK_ACK_PHRASE}
+ acknowledgementText={riskAcknowledgementText}
+ onAcknowledgementTextChange={(value) => {
+ setRiskAcknowledgementText(value);
setLocalError(null);
}}
disabled={isPending}
@@ -549,7 +556,7 @@ export function AddAccountDialog({
isAgyBypassStatePending ||
(requiresNickname && !nicknameTrimmed) ||
(requiresAgyResponsibilityFlow && !isAgyRiskChecklistComplete) ||
- (requiresSafetyAcknowledgement && !acknowledgedRisk)
+ (requiresSafetyAcknowledgement && !isGeminiRiskAcknowledged)
}
>
diff --git a/ui/src/components/account/antigravity-responsibility-constants.ts b/ui/src/components/account/antigravity-responsibility-constants.ts
index dad8544c..621d408d 100644
--- a/ui/src/components/account/antigravity-responsibility-constants.ts
+++ b/ui/src/components/account/antigravity-responsibility-constants.ts
@@ -1,5 +1,6 @@
export const ANTIGRAVITY_ACK_VERSION = '2026-02-24-antigravity-oauth-v2';
-export const ANTIGRAVITY_ACK_PHRASE = 'I ACCEPT AGY RISK';
+export const RISK_ACK_PHRASE = 'I ACCEPT RISK';
+export const ANTIGRAVITY_ACK_PHRASE = RISK_ACK_PHRASE;
export interface AntigravityRiskChecklistValue {
reviewedIssue509: boolean;