项目文件夹

文件
wehub-resource-sync 070959e133
landing-page-staging / Deploy landing page to staging (push) Has been skipped
landing-page-ci / Validate landing page (push) Failing after 4s
visual-baseline / Capture visual baselines (push) Has been cancelled
bake-plugin-previews / Bake plugin previews (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 12:00:47 +08:00

92 行
3.9 KiB
TypeScript

// @vitest-environment node
import { dirname, join } from 'node:path';
import { describe, expect, test } from 'vitest';
import { writeFakeAgyBin } from '@/antigravity';
import { createAntigravityProject, putAntigravityAppConfig } from '@/vitest/antigravity';
import { listMessages } from '@/vitest/messages';
import { readRunEvents, startRun, waitForRunTerminal } from '@/vitest/runs';
import { createSmokeSuite } from '@/vitest/suite';
describe('Antigravity error convergence', () => {
test('marks the run and assistant message as failed with AGENT_AUTH_REQUIRED when agy print mode hits OAuth auth flow', { timeout: 180_000 }, async () => {
const suite = await createSmokeSuite('antigravity-auth-error-convergence');
const fakeAgy = await writeFakeAgyBin(
join(suite.scratchDir, 'fake-antigravity-auth'),
{ mode: 'auth-required' },
);
await suite.with.pathEntry(dirname(fakeAgy), async () => {
await suite.with.toolsDev(async ({ webUrl }) => {
await putAntigravityAppConfig(webUrl);
const project = await createAntigravityProject(webUrl, 'Antigravity auth error convergence');
const assistantMessageId = `assistant-${Date.now()}`;
const run = await startRun(webUrl, {
agentId: 'antigravity',
assistantMessageId,
clientRequestId: `req-${Date.now()}`,
conversationId: project.conversationId,
designSystemId: null,
message: 'Trigger an Antigravity OAuth auth failure.',
model: 'default',
projectId: project.project.id,
reasoning: 'default',
skillId: null,
});
const terminal = await waitForRunTerminal(webUrl, run.runId, { timeoutMs: 20_000 });
expect(terminal.status).toBe('failed');
const events = await readRunEvents(webUrl, run.runId);
expect(events).toContain('AGENT_AUTH_REQUIRED');
expect(events).toContain('open a terminal and run `agy` once');
const messages = await listMessages(webUrl, project.project.id, project.conversationId);
const assistant = messages.find((message) => message.id === assistantMessageId);
expect(assistant?.runStatus).toBe('failed');
});
});
});
test('marks the run and assistant message as failed with RATE_LIMITED when agy log file records quota exhaustion', { timeout: 180_000 }, async () => {
const suite = await createSmokeSuite('antigravity-rate-limited-convergence');
const fakeAgy = await writeFakeAgyBin(
join(suite.scratchDir, 'fake-antigravity-rate-limited'),
{ mode: 'rate-limited' },
);
await suite.with.pathEntry(dirname(fakeAgy), async () => {
await suite.with.toolsDev(async ({ webUrl }) => {
await putAntigravityAppConfig(webUrl);
const project = await createAntigravityProject(webUrl, 'Antigravity rate-limited convergence');
const assistantMessageId = `assistant-${Date.now()}`;
const run = await startRun(webUrl, {
agentId: 'antigravity',
assistantMessageId,
clientRequestId: `req-${Date.now()}`,
conversationId: project.conversationId,
designSystemId: null,
message: 'Trigger an Antigravity quota exhaustion.',
model: 'default',
projectId: project.project.id,
reasoning: 'default',
skillId: null,
});
const terminal = await waitForRunTerminal(webUrl, run.runId, { timeoutMs: 20_000 });
expect(terminal.status).toBe('failed');
const events = await readRunEvents(webUrl, run.runId);
expect(events).toContain('RATE_LIMITED');
expect(events).toContain('Switch Model picker');
const messages = await listMessages(webUrl, project.project.id, project.conversationId);
const assistant = messages.find((message) => message.id === assistantMessageId);
expect(assistant?.runStatus).toBe('failed');
});
});
});
});