mirror of
https://github.com/tiennm99/ccs.git
synced 2026-07-16 20:17:45 +00:00
- change required acknowledgement phrase to "I ACCEPT RISK" - apply typed phrase requirement to Gemini and Antigravity add-account flows - keep CLI/server and UI phrase validation aligned - update antigravity responsibility unit test
131 lines
4.0 KiB
TypeScript
131 lines
4.0 KiB
TypeScript
import { afterEach, beforeEach, describe, expect, it } from 'bun:test';
|
|
import * as fs from 'fs';
|
|
import * as os from 'os';
|
|
import * as path from 'path';
|
|
import {
|
|
ANTIGRAVITY_ACK_PHRASE,
|
|
ANTIGRAVITY_ACK_VERSION,
|
|
hasAntigravityRiskAcceptanceFlag,
|
|
isAntigravityResponsibilityBypassEnabled,
|
|
validateAntigravityRiskAcknowledgement,
|
|
} from '../../../src/cliproxy/antigravity-responsibility';
|
|
|
|
describe('antigravity-responsibility', () => {
|
|
let tempHome = '';
|
|
let originalCcsHome: string | undefined;
|
|
let originalAgyRiskEnv: string | undefined;
|
|
|
|
beforeEach(() => {
|
|
tempHome = fs.mkdtempSync(path.join(os.tmpdir(), 'ccs-agy-risk-test-'));
|
|
originalCcsHome = process.env.CCS_HOME;
|
|
originalAgyRiskEnv = process.env.CCS_ACCEPT_AGY_RISK;
|
|
process.env.CCS_HOME = tempHome;
|
|
delete process.env.CCS_ACCEPT_AGY_RISK;
|
|
});
|
|
|
|
afterEach(() => {
|
|
if (originalCcsHome !== undefined) {
|
|
process.env.CCS_HOME = originalCcsHome;
|
|
} else {
|
|
delete process.env.CCS_HOME;
|
|
}
|
|
|
|
if (originalAgyRiskEnv !== undefined) {
|
|
process.env.CCS_ACCEPT_AGY_RISK = originalAgyRiskEnv;
|
|
} else {
|
|
delete process.env.CCS_ACCEPT_AGY_RISK;
|
|
}
|
|
|
|
fs.rmSync(tempHome, { recursive: true, force: true });
|
|
});
|
|
|
|
it('accepts a complete acknowledgement payload', () => {
|
|
const result = validateAntigravityRiskAcknowledgement({
|
|
version: ANTIGRAVITY_ACK_VERSION,
|
|
reviewedIssue509: true,
|
|
understandsBanRisk: true,
|
|
acceptsFullResponsibility: true,
|
|
typedPhrase: ANTIGRAVITY_ACK_PHRASE,
|
|
});
|
|
|
|
expect(result.valid).toBeTrue();
|
|
});
|
|
|
|
it('accepts phrase with extra spacing and lowercase', () => {
|
|
const result = validateAntigravityRiskAcknowledgement({
|
|
version: ANTIGRAVITY_ACK_VERSION,
|
|
reviewedIssue509: true,
|
|
understandsBanRisk: true,
|
|
acceptsFullResponsibility: true,
|
|
typedPhrase: ' i accept risk ',
|
|
});
|
|
|
|
expect(result.valid).toBeTrue();
|
|
});
|
|
|
|
it('rejects payload when checklist steps are not fully completed', () => {
|
|
const result = validateAntigravityRiskAcknowledgement({
|
|
version: ANTIGRAVITY_ACK_VERSION,
|
|
reviewedIssue509: true,
|
|
understandsBanRisk: false,
|
|
acceptsFullResponsibility: true,
|
|
typedPhrase: ANTIGRAVITY_ACK_PHRASE,
|
|
});
|
|
|
|
expect(result.valid).toBeFalse();
|
|
expect(result.error).toContain('checklist');
|
|
});
|
|
|
|
it('rejects payload when version is outdated', () => {
|
|
const result = validateAntigravityRiskAcknowledgement({
|
|
version: 'older-version',
|
|
reviewedIssue509: true,
|
|
understandsBanRisk: true,
|
|
acceptsFullResponsibility: true,
|
|
typedPhrase: ANTIGRAVITY_ACK_PHRASE,
|
|
});
|
|
|
|
expect(result.valid).toBeFalse();
|
|
expect(result.error).toContain('version');
|
|
});
|
|
|
|
it('rejects payload when phrase does not match', () => {
|
|
const result = validateAntigravityRiskAcknowledgement({
|
|
version: ANTIGRAVITY_ACK_VERSION,
|
|
reviewedIssue509: true,
|
|
understandsBanRisk: true,
|
|
acceptsFullResponsibility: true,
|
|
typedPhrase: 'I AGREE',
|
|
});
|
|
|
|
expect(result.valid).toBeFalse();
|
|
expect(result.error).toContain('phrase');
|
|
});
|
|
|
|
it('detects explicit antigravity acceptance flags', () => {
|
|
expect(hasAntigravityRiskAcceptanceFlag(['--accept-agr-risk'])).toBeTrue();
|
|
expect(hasAntigravityRiskAcceptanceFlag(['--accept-antigravity-risk'])).toBeTrue();
|
|
expect(hasAntigravityRiskAcceptanceFlag(['--auth'])).toBeFalse();
|
|
});
|
|
|
|
it('enables bypass when CCS_ACCEPT_AGY_RISK is set', () => {
|
|
process.env.CCS_ACCEPT_AGY_RISK = 'true';
|
|
expect(isAntigravityResponsibilityBypassEnabled()).toBeTrue();
|
|
});
|
|
|
|
it('enables bypass when cliproxy safety setting is enabled', () => {
|
|
const ccsDir = path.join(tempHome, '.ccs');
|
|
fs.mkdirSync(ccsDir, { recursive: true });
|
|
fs.writeFileSync(
|
|
path.join(ccsDir, 'config.yaml'),
|
|
`version: 8
|
|
cliproxy:
|
|
safety:
|
|
antigravity_ack_bypass: true
|
|
`
|
|
);
|
|
|
|
expect(isAntigravityResponsibilityBypassEnabled()).toBeTrue();
|
|
});
|
|
});
|