fix(team): speed up provider runtime preflight

This commit is contained in:
infiniti 2026-05-27 23:54:10 +03:00 committed by GitHub
parent a76d0cb2ed
commit 0cbba46083
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 52 additions and 4 deletions

View file

@ -1392,6 +1392,8 @@ interface RuntimeStatusCommandResponse {
} }
interface AuthStatusCommandResponse { interface AuthStatusCommandResponse {
provider?: string;
status?: Partial<CliProviderStatus>;
loggedIn?: boolean; loggedIn?: boolean;
authMethod?: string | null; authMethod?: string | null;
providers?: Record<string, Partial<CliProviderStatus>>; providers?: Record<string, Partial<CliProviderStatus>>;
@ -4410,7 +4412,7 @@ export class TeamProvisioningService {
{ {
cwd: params.cwd, cwd: params.cwd,
env: params.env, env: params.env,
timeout: 8_000, timeout: PROVIDER_RUNTIME_STATUS_TIMEOUT_MS,
} }
) )
: null; : null;
@ -36614,7 +36616,10 @@ export class TeamProvisioningService {
authenticated: boolean | null; authenticated: boolean | null;
providerStatus: Partial<CliProviderStatus> | null; providerStatus: Partial<CliProviderStatus> | null;
} { } {
const providerStatus = parsed.providers?.[providerId] ?? null; const providerStatus =
parsed.providers?.[providerId] ??
(parsed.provider === providerId || !parsed.provider ? parsed.status : null) ??
null;
if (typeof providerStatus?.authenticated === 'boolean') { if (typeof providerStatus?.authenticated === 'boolean') {
return { return {
authenticated: providerStatus.authenticated, authenticated: providerStatus.authenticated,
@ -36656,13 +36661,14 @@ export class TeamProvisioningService {
'runtime', 'runtime',
'status', 'status',
'--json', '--json',
'--summary',
'--provider', '--provider',
providerId, providerId,
]), ]),
{ {
cwd, cwd,
env, env,
timeout: 8_000, timeout: PROVIDER_RUNTIME_STATUS_TIMEOUT_MS,
} }
); );
const parsed = extractJsonObjectFromCli<RuntimeStatusCommandResponse>(runtimeStatus.stdout); const parsed = extractJsonObjectFromCli<RuntimeStatusCommandResponse>(runtimeStatus.stdout);

View file

@ -2288,7 +2288,7 @@ describe('TeamProvisioningService prepare/auth behavior', () => {
expect(result.ready).toBe(true); expect(result.ready).toBe(true);
expect(execCliMock).toHaveBeenCalledWith( expect(execCliMock).toHaveBeenCalledWith(
'/fake/claude', '/fake/claude',
['runtime', 'status', '--json', '--provider', 'codex'], ['runtime', 'status', '--json', '--summary', '--provider', 'codex'],
expect.objectContaining({ cwd: tempRoot }) expect.objectContaining({ cwd: tempRoot })
); );
expect(spawnProbe).toHaveBeenCalledTimes(1); expect(spawnProbe).toHaveBeenCalledTimes(1);
@ -2332,6 +2332,7 @@ describe('TeamProvisioningService prepare/auth behavior', () => {
'runtime', 'runtime',
'status', 'status',
'--json', '--json',
'--summary',
'--provider', '--provider',
'codex', 'codex',
], ],
@ -2339,6 +2340,47 @@ describe('TeamProvisioningService prepare/auth behavior', () => {
); );
}); });
it('accepts provider-specific auth status fallback payloads', async () => {
execCliMock.mockImplementation(async (_binaryPath: string | null, args: string[]) => {
if (args.includes('runtime')) {
throw new Error(
'Timeout running: orchestrator-cli runtime status --json --summary --provider anthropic'
);
}
if (args.includes('auth')) {
return {
stdout: JSON.stringify({
schemaVersion: 1,
provider: 'anthropic',
status: {
supported: true,
authenticated: true,
capabilities: { teamLaunch: true, oneShot: true },
},
}),
stderr: '',
exitCode: 0,
};
}
return { stdout: '', stderr: '', exitCode: 0 };
});
const svc = new TeamProvisioningService();
const result = await (svc as any).probeProviderRuntimeControlPlane({
claudePath: '/fake/claude',
cwd: tempRoot,
env: {
PATH: '/usr/bin',
SHELL: '/bin/zsh',
},
providerId: 'anthropic',
providerArgs: [],
});
expect(result.warning).toContain('runtime status was unavailable, but auth status passed');
expect(result.warning).not.toContain('auth status did not report Anthropic authentication');
});
it('falls back from runtime status timeout to auth status and still checks selected models', async () => { it('falls back from runtime status timeout to auth status and still checks selected models', async () => {
execCliMock.mockImplementation(async (_binaryPath: string | null, args: string[]) => { execCliMock.mockImplementation(async (_binaryPath: string | null, args: string[]) => {
if (args[0] === 'runtime' && args[1] === 'status') { if (args[0] === 'runtime' && args[1] === 'status') {