Metric(extension) - Add logging for uninstalling extension (#8293)

Co-authored-by: Shi Shu <shii@google.com>
This commit is contained in:
shishu314
2025-09-12 13:38:54 -04:00
committed by GitHub
parent c99539b991
commit 8a5e692373
6 changed files with 78 additions and 9 deletions

View File

@@ -31,6 +31,7 @@ import {
type MCPServerConfig,
ClearcutLogger,
type Config,
ExtensionUninstallEvent,
} from '@google/gemini-cli-core';
import { execSync } from 'node:child_process';
import { SettingScope, loadSettings } from './settings.js';
@@ -76,15 +77,18 @@ vi.mock('@google/gemini-cli-core', async (importOriginal) => {
const actual =
await importOriginal<typeof import('@google/gemini-cli-core')>();
const mockLogExtensionInstallEvent = vi.fn();
const mockLogExtensionUninstallEvent = vi.fn();
return {
...actual,
ClearcutLogger: {
getInstance: vi.fn(() => ({
logExtensionInstallEvent: mockLogExtensionInstallEvent,
logExtensionUninstallEvent: mockLogExtensionUninstallEvent,
})),
},
Config: vi.fn(),
ExtensionInstallEvent: vi.fn(),
ExtensionUninstallEvent: vi.fn(),
};
});
@@ -689,6 +693,21 @@ describe('uninstallExtension', () => {
'Extension "nonexistent-extension" not found.',
);
});
it('should log uninstall event', async () => {
createExtension({
extensionsDir: userExtensionsDir,
name: 'my-local-extension',
version: '1.0.0',
});
await uninstallExtension('my-local-extension');
const logger = ClearcutLogger.getInstance({} as Config);
expect(logger?.logExtensionUninstallEvent).toHaveBeenCalledWith(
new ExtensionUninstallEvent('my-local-extension', 'success'),
);
});
});
describe('performWorkspaceExtensionMigration', () => {

View File

@@ -14,6 +14,7 @@ import {
ClearcutLogger,
Config,
ExtensionInstallEvent,
ExtensionUninstallEvent,
} from '@google/gemini-cli-core';
import * as fs from 'node:fs';
import * as path from 'node:path';
@@ -123,6 +124,18 @@ export async function performWorkspaceExtensionMigration(
return failedInstallNames;
}
function getClearcutLogger(cwd: string) {
const config = new Config({
sessionId: randomUUID(),
targetDir: cwd,
cwd,
model: '',
debugMode: false,
});
const logger = ClearcutLogger.getInstance(config);
return logger;
}
export function loadExtensions(
workspaceDir: string = process.cwd(),
): Extension[] {
@@ -403,14 +416,7 @@ export async function installExtension(
installMetadata: ExtensionInstallMetadata,
cwd: string = process.cwd(),
): Promise<string> {
const config = new Config({
sessionId: randomUUID(),
targetDir: process.cwd(),
cwd: process.cwd(),
model: '',
debugMode: false,
});
const logger = ClearcutLogger.getInstance(config);
const logger = getClearcutLogger(cwd);
let newExtensionConfig: ExtensionConfig | null = null;
let localSourcePath: string | undefined;
@@ -563,6 +569,7 @@ export async function uninstallExtension(
extensionName: string,
cwd: string = process.cwd(),
): Promise<void> {
const logger = getClearcutLogger(cwd);
const installedExtensions = loadUserExtensions();
if (
!installedExtensions.some(
@@ -577,10 +584,14 @@ export async function uninstallExtension(
cwd,
);
const storage = new ExtensionStorage(extensionName);
return await fs.promises.rm(storage.getExtensionDir(), {
await fs.promises.rm(storage.getExtensionDir(), {
recursive: true,
force: true,
});
logger?.logExtensionUninstallEvent(
new ExtensionUninstallEvent(extensionName, 'success'),
);
}
export function toOutputString(extension: Extension): string {