summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichie Foreman <[email protected]>2025-08-07 18:50:48 -0400
committerGitHub <[email protected]>2025-08-07 22:50:48 +0000
commit9bc0a4aff3136ae9bb16a03e4d14ba46a137141a (patch)
tree997366a7c2cb5a46479381165289ed65ebd2e27d
parent0c32a4061dc008f6483918a9e53cba8914e88bef (diff)
chore(telemetry): Log `FIREBASE_STUDIO` when using Gemini CLI within Firebase Studio (#5790)
-rw-r--r--packages/core/src/telemetry/clearcut-logger/clearcut-logger.ts24
1 files changed, 20 insertions, 4 deletions
diff --git a/packages/core/src/telemetry/clearcut-logger/clearcut-logger.ts b/packages/core/src/telemetry/clearcut-logger/clearcut-logger.ts
index 649d82b6..45a657c7 100644
--- a/packages/core/src/telemetry/clearcut-logger/clearcut-logger.ts
+++ b/packages/core/src/telemetry/clearcut-logger/clearcut-logger.ts
@@ -51,6 +51,25 @@ export interface LogResponse {
nextRequestWaitMs?: number;
}
+/**
+ * Determine the surface that the user is currently using. Surface is effectively the
+ * distribution channel in which the user is using Gemini CLI. Gemini CLI comes bundled
+ * w/ Firebase Studio and Cloud Shell. Users that manually download themselves will
+ * likely be "SURFACE_NOT_SET".
+ *
+ * This is computed based upon a series of environment variables these distribution
+ * 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';
+ } else {
+ return process.env.SURFACE || 'SURFACE_NOT_SET';
+ }
+}
+
// Singleton class for batch posting log events to Clearcut. When a new event comes in, the elapsed time
// is checked and events are flushed to Clearcut if at least a minute has passed since the last flush.
export class ClearcutLogger {
@@ -237,10 +256,7 @@ export class ClearcutLogger {
}
logStartSessionEvent(event: StartSessionEvent): void {
- const surface =
- process.env.CLOUD_SHELL === 'true'
- ? 'CLOUD_SHELL'
- : process.env.SURFACE || 'SURFACE_NOT_SET';
+ const surface = determineSurface();
const data = [
{