diff options
| author | Richie Foreman <[email protected]> | 2025-08-13 17:45:53 -0400 |
|---|---|---|
| committer | GitHub <[email protected]> | 2025-08-13 21:45:53 +0000 |
| commit | d6f74ea2f0a422c86daea2a06284e497db082a16 (patch) | |
| tree | fab51ccf375da7c7f7de46e2456f16ebac8fbc4c /packages/core/src/telemetry | |
| parent | 501b78f3032d8e1d506b5e58d762a30a3593a500 (diff) | |
chore(telemetry): Add various surface detection to `determineSurface` for logging. (#6074)
Co-authored-by: christine betts <[email protected]>
Co-authored-by: Jacob Richman <[email protected]>
Co-authored-by: matt korwel <[email protected]>
Diffstat (limited to 'packages/core/src/telemetry')
| -rw-r--r-- | packages/core/src/telemetry/clearcut-logger/clearcut-logger.test.ts | 77 | ||||
| -rw-r--r-- | packages/core/src/telemetry/clearcut-logger/clearcut-logger.ts | 13 |
2 files changed, 82 insertions, 8 deletions
diff --git a/packages/core/src/telemetry/clearcut-logger/clearcut-logger.test.ts b/packages/core/src/telemetry/clearcut-logger/clearcut-logger.test.ts index 96129ad3..f2ce4d19 100644 --- a/packages/core/src/telemetry/clearcut-logger/clearcut-logger.test.ts +++ b/packages/core/src/telemetry/clearcut-logger/clearcut-logger.test.ts @@ -47,7 +47,6 @@ describe('ClearcutLogger', () => { const CLEARCUT_URL = 'https://play.googleapis.com/log'; const MOCK_DATE = new Date('2025-01-02T00:00:00.000Z'); const EXAMPLE_RESPONSE = `["${NEXT_WAIT_MS}",null,[[["ANDROID_BACKUP",0],["BATTERY_STATS",0],["SMART_SETUP",0],["TRON",0]],-3334737594024971225],[]]`; - // A helper to get the internal events array for testing const getEvents = (l: ClearcutLogger): LogEventEntry[][] => l['events'].toArray() as LogEventEntry[][]; @@ -57,6 +56,10 @@ describe('ClearcutLogger', () => { const requeueFailedEvents = (l: ClearcutLogger, events: LogEventEntry[][]) => l['requeueFailedEvents'](events); + afterEach(() => { + vi.unstubAllEnvs(); + }); + function setup({ config = {} as Partial<ConfigParameters>, lifetimeGoogleAccounts = 1, @@ -135,16 +138,84 @@ describe('ClearcutLogger', () => { }); }); - it('logs the current surface', () => { + it('logs the current surface from a github action', () => { + const { logger } = setup({}); + + vi.stubEnv('GITHUB_SHA', '8675309'); + + const event = logger?.createLogEvent('abc', []); + + expect(event?.event_metadata[0][1]).toEqual({ + gemini_cli_key: EventMetadataKey.GEMINI_CLI_SURFACE, + value: 'GitHub', + }); + }); + + it('honors the value from env.SURFACE over all others', () => { const { logger } = setup({}); + vi.stubEnv('TERM_PROGRAM', 'vscode'); + vi.stubEnv('SURFACE', 'ide-1234'); + const event = logger?.createLogEvent('abc', []); expect(event?.event_metadata[0][1]).toEqual({ gemini_cli_key: EventMetadataKey.GEMINI_CLI_SURFACE, - value: 'SURFACE_NOT_SET', + value: 'ide-1234', }); }); + + it.each([ + { + env: { + CURSOR_TRACE_ID: 'abc123', + GITHUB_SHA: undefined, + }, + expectedValue: 'cursor', + }, + { + env: { + TERM_PROGRAM: 'vscode', + GITHUB_SHA: undefined, + }, + expectedValue: 'vscode', + }, + { + env: { + MONOSPACE_ENV: 'true', + GITHUB_SHA: undefined, + }, + expectedValue: 'firebasestudio', + }, + { + env: { + __COG_BASHRC_SOURCED: 'true', + GITHUB_SHA: undefined, + }, + expectedValue: 'devin', + }, + { + env: { + CLOUD_SHELL: 'true', + GITHUB_SHA: undefined, + }, + expectedValue: 'cloudshell', + }, + ])( + 'logs the current surface for as $expectedValue, preempting vscode detection', + ({ env, expectedValue }) => { + const { logger } = setup({}); + for (const [key, value] of Object.entries(env)) { + vi.stubEnv(key, value); + } + vi.stubEnv('TERM_PROGRAM', 'vscode'); + const event = logger?.createLogEvent('abc', []); + expect(event?.event_metadata[0][1]).toEqual({ + gemini_cli_key: EventMetadataKey.GEMINI_CLI_SURFACE, + value: expectedValue, + }); + }, + ); }); describe('enqueueLogEvent', () => { diff --git a/packages/core/src/telemetry/clearcut-logger/clearcut-logger.ts b/packages/core/src/telemetry/clearcut-logger/clearcut-logger.ts index 9450f06d..7ccfd440 100644 --- a/packages/core/src/telemetry/clearcut-logger/clearcut-logger.ts +++ b/packages/core/src/telemetry/clearcut-logger/clearcut-logger.ts @@ -30,6 +30,7 @@ import { } from '../../utils/user_account.js'; import { getInstallationId } from '../../utils/user_id.js'; import { FixedDeque } from 'mnemonist'; +import { DetectedIde, detectIde } from '../../ide/detect-ide.js'; const start_session_event_name = 'start_session'; const new_prompt_event_name = 'new_prompt'; @@ -85,12 +86,14 @@ export interface LogRequest { * methods might have in their runtimes. */ function determineSurface(): string { - if (process.env.CLOUD_SHELL === 'true') { - return 'CLOUD_SHELL'; - } else if (process.env.MONOSPACE_ENV === 'true') { - return 'FIREBASE_STUDIO'; + if (process.env.SURFACE) { + return process.env.SURFACE; + } else if (process.env.GITHUB_SHA) { + return 'GitHub'; + } else if (process.env.TERM_PROGRAM === 'vscode') { + return detectIde() || DetectedIde.VSCode; } else { - return process.env.SURFACE || 'SURFACE_NOT_SET'; + return 'SURFACE_NOT_SET'; } } |
