Basic code assist support (#910)

This commit is contained in:
Tommaso Sciortino
2025-06-10 16:00:13 -07:00
committed by GitHub
parent 4e84431df3
commit d79dafc577
15 changed files with 434 additions and 340 deletions

View File

@@ -4,52 +4,46 @@
* SPDX-License-Identifier: Apache-2.0
*/
import { ClientMetadata, OnboardUserRequest } from './types.js';
import { CcpaServer } from './ccpaServer.js';
import { OAuth2Client } from 'google-auth-library';
import { ClientMetadata } from './metadata.js';
import { doLoadCodeAssist, LoadCodeAssistResponse } from './load.js';
import { doGCALogin } from './login.js';
import {
doOnboardUser,
LongrunningOperationResponse,
OnboardUserRequest,
} from './onboard.js';
export async function doSetup(): Promise<string> {
const oauth2Client: OAuth2Client = await doGCALogin();
/**
*
* @param projectId the user's project id, if any
* @returns the user's actual project id
*/
export async function setupUser(
oAuth2Client: OAuth2Client,
projectId?: string,
): Promise<string> {
const ccpaServer: CcpaServer = new CcpaServer(oAuth2Client, projectId);
const clientMetadata: ClientMetadata = {
ideType: 'IDE_UNSPECIFIED',
ideVersion: null,
pluginVersion: null,
platform: 'PLATFORM_UNSPECIFIED',
updateChannel: null,
duetProject: 'aipp-internal-testing',
pluginType: 'GEMINI',
ideName: null,
};
if (process.env.GOOGLE_CLOUD_PROJECT) {
clientMetadata.duetProject = process.env.GOOGLE_CLOUD_PROJECT;
}
// Call LoadCodeAssist.
const loadCodeAssistRes: LoadCodeAssistResponse = await doLoadCodeAssist(
{
cloudaicompanionProject: 'aipp-internal-testing',
metadata: clientMetadata,
},
oauth2Client,
);
// TODO: Support Free Tier user without projectId.
const loadRes = await ccpaServer.loadCodeAssist({
cloudaicompanionProject: process.env.GOOGLE_CLOUD_PROJECT,
metadata: clientMetadata,
});
// Call OnboardUser until long running operation is complete.
const onboardUserReq: OnboardUserRequest = {
const onboardReq: OnboardUserRequest = {
tierId: 'legacy-tier',
cloudaicompanionProject: loadCodeAssistRes.cloudaicompanionProject || '',
cloudaicompanionProject: loadRes.cloudaicompanionProject || '',
metadata: clientMetadata,
};
let lroRes: LongrunningOperationResponse = await doOnboardUser(
onboardUserReq,
oauth2Client,
);
// Poll onboardUser until long running operation is complete.
let lroRes = await ccpaServer.onboardUser(onboardReq);
while (!lroRes.done) {
await new Promise((f) => setTimeout(f, 5000));
lroRes = await doOnboardUser(onboardUserReq, oauth2Client);
lroRes = await ccpaServer.onboardUser(onboardReq);
}
return lroRes.response?.cloudaicompanionProject?.id || '';