@@ -103,7 +103,6 @@ export interface LogResponse {
103103export interface LogEventEntry {
104104 event_time_ms : number ;
105105 source_extension_json : string ;
106- gws_experiment : number [ ] ;
107106}
108107
109108export interface EventValue {
@@ -233,28 +232,55 @@ export class ClearcutLogger {
233232 ClearcutLogger . instance = undefined ;
234233 }
235234
235+ enqueueHelper ( event : LogEvent ) : void {
236+ // Manually handle overflow for FixedDeque, which throws when full.
237+ const wasAtCapacity = this . events . size >= MAX_EVENTS ;
238+
239+ if ( wasAtCapacity ) {
240+ this . events . shift ( ) ; // Evict oldest element to make space.
241+ }
242+
243+ this . events . push ( [
244+ {
245+ event_time_ms : Date . now ( ) ,
246+ source_extension_json : safeJsonStringify ( event ) ,
247+ } ,
248+ ] ) ;
249+
250+ if ( wasAtCapacity && this . config ?. getDebugMode ( ) ) {
251+ debugLogger . debug (
252+ `ClearcutLogger: Dropped old event to prevent memory leak (queue size: ${ this . events . size } )` ,
253+ ) ;
254+ }
255+ }
256+
236257 enqueueLogEvent ( event : LogEvent ) : void {
237258 try {
238- // Manually handle overflow for FixedDeque, which throws when full.
239- const wasAtCapacity = this . events . size >= MAX_EVENTS ;
240-
241- if ( wasAtCapacity ) {
242- this . events . shift ( ) ; // Evict oldest element to make space.
259+ this . enqueueHelper ( event ) ;
260+ } catch ( error ) {
261+ if ( this . config ?. getDebugMode ( ) ) {
262+ console . error ( 'ClearcutLogger: Failed to enqueue log event.' , error ) ;
243263 }
264+ }
265+ }
244266
245- this . events . push ( [
246- {
247- event_time_ms : Date . now ( ) ,
248- source_extension_json : safeJsonStringify ( event ) ,
249- gws_experiment : this . config ?. getExperiments ( ) ?. experimentIds ?? [ ] ,
250- } ,
251- ] ) ;
267+ async enqueueLogEventAfterExperimentsLoadAsync (
268+ event : LogEvent ,
269+ ) : Promise < void > {
270+ try {
271+ this . config ?. getExperimentsAsync ( ) . then ( ( experiments ) => {
272+ if ( experiments ) {
273+ const exp_id_data : EventValue [ ] = [
274+ {
275+ gemini_cli_key : EventMetadataKey . GEMINI_CLI_EXPERIMENT_IDS ,
276+ value : experiments . experimentIds . toString ( ) ?? 'NA' ,
277+ } ,
278+ ] ;
279+ event . event_metadata = [ [ ...event . event_metadata [ 0 ] , ...exp_id_data ] ] ;
280+ }
252281
253- if ( wasAtCapacity && this . config ?. getDebugMode ( ) ) {
254- debugLogger . debug (
255- `ClearcutLogger: Dropped old event to prevent memory leak (queue size: ${ this . events . size } )` ,
256- ) ;
257- }
282+ this . enqueueHelper ( event ) ;
283+ } ) ;
258284 } catch ( error ) {
259285 if ( this . config ?. getDebugMode ( ) ) {
260286 console . error ( 'ClearcutLogger: Failed to enqueue log event.' , error ) ;
@@ -507,10 +533,13 @@ export class ClearcutLogger {
507533 ] ;
508534 this . sessionData = data ;
509535
510- // Flush start event immediately
511- this . enqueueLogEvent ( this . createLogEvent ( EventNames . START_SESSION , data ) ) ;
512- this . flushToClearcut ( ) . catch ( ( error ) => {
513- debugLogger . debug ( 'Error flushing to Clearcut:' , error ) ;
536+ // Flush after experiments finish loading from CCPA server
537+ this . enqueueLogEventAfterExperimentsLoadAsync (
538+ this . createLogEvent ( EventNames . START_SESSION , data ) ,
539+ ) . then ( ( ) => {
540+ this . flushToClearcut ( ) . catch ( ( error ) => {
541+ debugLogger . debug ( 'Error flushing to Clearcut:' , error ) ;
542+ } ) ;
514543 } ) ;
515544 }
516545
@@ -847,8 +876,14 @@ export class ClearcutLogger {
847876 } ,
848877 ] ;
849878
850- this . enqueueLogEvent ( this . createLogEvent ( EventNames . IDE_CONNECTION , data ) ) ;
851- this . flushIfNeeded ( ) ;
879+ // Flush after experiments finish loading from CCPA server
880+ this . enqueueLogEventAfterExperimentsLoadAsync (
881+ this . createLogEvent ( EventNames . START_SESSION , data ) ,
882+ ) . then ( ( ) => {
883+ this . flushToClearcut ( ) . catch ( ( error ) => {
884+ debugLogger . debug ( 'Error flushing to Clearcut:' , error ) ;
885+ } ) ;
886+ } ) ;
852887 }
853888
854889 logConversationFinishedEvent ( event : ConversationFinishedEvent ) : void {
@@ -1357,6 +1392,12 @@ export class ClearcutLogger {
13571392 value : this . config ?. isInteractive ( ) . toString ( ) ?? 'false' ,
13581393 } ,
13591394 ] ;
1395+ if ( this . config ?. getExperiments ( ) ) {
1396+ defaultLogMetadata . push ( {
1397+ gemini_cli_key : EventMetadataKey . GEMINI_CLI_EXPERIMENT_IDS ,
1398+ value : this . config ?. getExperiments ( ) ?. experimentIds . toString ( ) ?? 'NA' ,
1399+ } ) ;
1400+ }
13601401 return [ ...data , ...defaultLogMetadata ] ;
13611402 }
13621403
0 commit comments