summaryrefslogtreecommitdiff
path: root/packages/core/src
diff options
context:
space:
mode:
Diffstat (limited to 'packages/core/src')
-rw-r--r--packages/core/src/telemetry/clearcut-logger/clearcut-logger.ts20
-rw-r--r--packages/core/src/telemetry/clearcut-logger/event-metadata-key.ts10
-rw-r--r--packages/core/src/telemetry/index.ts2
-rw-r--r--packages/core/src/telemetry/loggers.ts19
-rw-r--r--packages/core/src/telemetry/types.ts16
5 files changed, 66 insertions, 1 deletions
diff --git a/packages/core/src/telemetry/clearcut-logger/clearcut-logger.ts b/packages/core/src/telemetry/clearcut-logger/clearcut-logger.ts
index 0c13e864..9450f06d 100644
--- a/packages/core/src/telemetry/clearcut-logger/clearcut-logger.ts
+++ b/packages/core/src/telemetry/clearcut-logger/clearcut-logger.ts
@@ -19,6 +19,7 @@ import {
SlashCommandEvent,
MalformedJsonResponseEvent,
IdeConnectionEvent,
+ KittySequenceOverflowEvent,
} from '../types.js';
import { EventMetadataKey } from './event-metadata-key.js';
import { Config } from '../../config/config.js';
@@ -43,6 +44,7 @@ const next_speaker_check_event_name = 'next_speaker_check';
const slash_command_event_name = 'slash_command';
const malformed_json_response_event_name = 'malformed_json_response';
const ide_connection_event_name = 'ide_connection';
+const kitty_sequence_overflow_event_name = 'kitty_sequence_overflow';
export interface LogResponse {
nextRequestWaitMs?: number;
@@ -675,6 +677,24 @@ export class ClearcutLogger {
this.flushIfNeeded();
}
+ logKittySequenceOverflowEvent(event: KittySequenceOverflowEvent): void {
+ const data: EventValue[] = [
+ {
+ gemini_cli_key: EventMetadataKey.GEMINI_CLI_KITTY_SEQUENCE_LENGTH,
+ value: event.sequence_length.toString(),
+ },
+ {
+ gemini_cli_key: EventMetadataKey.GEMINI_CLI_KITTY_TRUNCATED_SEQUENCE,
+ value: event.truncated_sequence,
+ },
+ ];
+
+ this.enqueueLogEvent(
+ this.createLogEvent(kitty_sequence_overflow_event_name, data),
+ );
+ this.flushIfNeeded();
+ }
+
logEndSessionEvent(event: EndSessionEvent): void {
const data: EventValue[] = [
{
diff --git a/packages/core/src/telemetry/clearcut-logger/event-metadata-key.ts b/packages/core/src/telemetry/clearcut-logger/event-metadata-key.ts
index 9dae3e0d..cb4172ed 100644
--- a/packages/core/src/telemetry/clearcut-logger/event-metadata-key.ts
+++ b/packages/core/src/telemetry/clearcut-logger/event-metadata-key.ts
@@ -212,6 +212,16 @@ export enum EventMetadataKey {
// Logs user removed lines in edit/write tool response.
GEMINI_CLI_USER_REMOVED_LINES = 50,
+
+ // ==========================================================================
+ // Kitty Sequence Overflow Event Keys
+ // ===========================================================================
+
+ // Logs the length of the kitty sequence that overflowed.
+ GEMINI_CLI_KITTY_SEQUENCE_LENGTH = 53,
+
+ // Logs the truncated kitty sequence.
+ GEMINI_CLI_KITTY_TRUNCATED_SEQUENCE = 52,
}
export function getEventMetadataKey(
diff --git a/packages/core/src/telemetry/index.ts b/packages/core/src/telemetry/index.ts
index 1663abdf..0f343ab3 100644
--- a/packages/core/src/telemetry/index.ts
+++ b/packages/core/src/telemetry/index.ts
@@ -27,6 +27,7 @@ export {
logApiResponse,
logFlashFallback,
logSlashCommand,
+ logKittySequenceOverflow,
} from './loggers.js';
export {
StartSessionEvent,
@@ -39,6 +40,7 @@ export {
TelemetryEvent,
FlashFallbackEvent,
SlashCommandEvent,
+ KittySequenceOverflowEvent,
makeSlashCommandEvent,
SlashCommandStatus,
} from './types.js';
diff --git a/packages/core/src/telemetry/loggers.ts b/packages/core/src/telemetry/loggers.ts
index e3726ccb..d7a81203 100644
--- a/packages/core/src/telemetry/loggers.ts
+++ b/packages/core/src/telemetry/loggers.ts
@@ -32,6 +32,7 @@ import {
NextSpeakerCheckEvent,
LoopDetectedEvent,
SlashCommandEvent,
+ KittySequenceOverflowEvent,
} from './types.js';
import {
recordApiErrorMetrics,
@@ -378,3 +379,21 @@ export function logIdeConnection(
};
logger.emit(logRecord);
}
+
+export function logKittySequenceOverflow(
+ config: Config,
+ event: KittySequenceOverflowEvent,
+): void {
+ ClearcutLogger.getInstance(config)?.logKittySequenceOverflowEvent(event);
+ if (!isTelemetrySdkInitialized()) return;
+ const attributes: LogAttributes = {
+ ...getCommonAttributes(config),
+ ...event,
+ };
+ const logger = logs.getLogger(SERVICE_NAME);
+ const logRecord: LogRecord = {
+ body: `Kitty sequence buffer overflow: ${event.sequence_length} bytes`,
+ attributes,
+ };
+ logger.emit(logRecord);
+}
diff --git a/packages/core/src/telemetry/types.ts b/packages/core/src/telemetry/types.ts
index d590699c..b07c4ca4 100644
--- a/packages/core/src/telemetry/types.ts
+++ b/packages/core/src/telemetry/types.ts
@@ -346,6 +346,20 @@ export class IdeConnectionEvent {
}
}
+export class KittySequenceOverflowEvent {
+ 'event.name': 'kitty_sequence_overflow';
+ 'event.timestamp': string; // ISO 8601
+ sequence_length: number;
+ truncated_sequence: string;
+ constructor(sequence_length: number, truncated_sequence: string) {
+ this['event.name'] = 'kitty_sequence_overflow';
+ this['event.timestamp'] = new Date().toISOString();
+ this.sequence_length = sequence_length;
+ // Truncate to first 20 chars for logging (avoid logging sensitive data)
+ this.truncated_sequence = truncated_sequence.substring(0, 20);
+ }
+}
+
export type TelemetryEvent =
| StartSessionEvent
| EndSessionEvent
@@ -360,4 +374,4 @@ export type TelemetryEvent =
| SlashCommandEvent
| MalformedJsonResponseEvent
| IdeConnectionEvent
- | SlashCommandEvent;
+ | KittySequenceOverflowEvent;