@vybestack/llxprt-code-telemetry 0.10.0-nightly.260613.1adad3b34

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (71) hide show
  1. package/dist/.last_build +0 -0
  2. package/dist/index.d.ts +11 -0
  3. package/dist/index.js +15 -0
  4. package/dist/index.js.map +1 -0
  5. package/dist/src/debug/ConfigurationManager.d.ts +33 -0
  6. package/dist/src/debug/ConfigurationManager.js +226 -0
  7. package/dist/src/debug/ConfigurationManager.js.map +1 -0
  8. package/dist/src/debug/DebugLogger.d.ts +46 -0
  9. package/dist/src/debug/DebugLogger.js +286 -0
  10. package/dist/src/debug/DebugLogger.js.map +1 -0
  11. package/dist/src/debug/FileOutput.d.ts +28 -0
  12. package/dist/src/debug/FileOutput.js +190 -0
  13. package/dist/src/debug/FileOutput.js.map +1 -0
  14. package/dist/src/debug/MockConfigurationManager.d.ts +28 -0
  15. package/dist/src/debug/MockConfigurationManager.js +45 -0
  16. package/dist/src/debug/MockConfigurationManager.js.map +1 -0
  17. package/dist/src/debug/MockFileOutput.d.ts +22 -0
  18. package/dist/src/debug/MockFileOutput.js +23 -0
  19. package/dist/src/debug/MockFileOutput.js.map +1 -0
  20. package/dist/src/debug/index.d.ts +10 -0
  21. package/dist/src/debug/index.js +11 -0
  22. package/dist/src/debug/index.js.map +1 -0
  23. package/dist/src/debug/types.d.ts +25 -0
  24. package/dist/src/debug/types.js +2 -0
  25. package/dist/src/debug/types.js.map +1 -0
  26. package/dist/src/internal/interfaces.d.ts +143 -0
  27. package/dist/src/internal/interfaces.js +37 -0
  28. package/dist/src/internal/interfaces.js.map +1 -0
  29. package/dist/src/telemetry/constants.d.ts +35 -0
  30. package/dist/src/telemetry/constants.js +36 -0
  31. package/dist/src/telemetry/constants.js.map +1 -0
  32. package/dist/src/telemetry/file-exporters.d.ts +28 -0
  33. package/dist/src/telemetry/file-exporters.js +89 -0
  34. package/dist/src/telemetry/file-exporters.js.map +1 -0
  35. package/dist/src/telemetry/index.d.ts +24 -0
  36. package/dist/src/telemetry/index.js +24 -0
  37. package/dist/src/telemetry/index.js.map +1 -0
  38. package/dist/src/telemetry/loggers.d.ts +46 -0
  39. package/dist/src/telemetry/loggers.js +543 -0
  40. package/dist/src/telemetry/loggers.js.map +1 -0
  41. package/dist/src/telemetry/metrics.d.ts +24 -0
  42. package/dist/src/telemetry/metrics.js +153 -0
  43. package/dist/src/telemetry/metrics.js.map +1 -0
  44. package/dist/src/telemetry/sdk.d.ts +10 -0
  45. package/dist/src/telemetry/sdk.js +138 -0
  46. package/dist/src/telemetry/sdk.js.map +1 -0
  47. package/dist/src/telemetry/tool-call-decision.d.ts +13 -0
  48. package/dist/src/telemetry/tool-call-decision.js +30 -0
  49. package/dist/src/telemetry/tool-call-decision.js.map +1 -0
  50. package/dist/src/telemetry/types.d.ts +380 -0
  51. package/dist/src/telemetry/types.js +620 -0
  52. package/dist/src/telemetry/types.js.map +1 -0
  53. package/dist/src/telemetry/uiTelemetry.d.ts +104 -0
  54. package/dist/src/telemetry/uiTelemetry.js +183 -0
  55. package/dist/src/telemetry/uiTelemetry.js.map +1 -0
  56. package/dist/src/utils/debugLogger.d.ts +10 -0
  57. package/dist/src/utils/debugLogger.js +11 -0
  58. package/dist/src/utils/debugLogger.js.map +1 -0
  59. package/dist/src/utils/index.d.ts +9 -0
  60. package/dist/src/utils/index.js +10 -0
  61. package/dist/src/utils/index.js.map +1 -0
  62. package/dist/src/utils/paths.d.ts +10 -0
  63. package/dist/src/utils/paths.js +11 -0
  64. package/dist/src/utils/paths.js.map +1 -0
  65. package/dist/src/utils/safeJsonStringify.d.ts +13 -0
  66. package/dist/src/utils/safeJsonStringify.js +25 -0
  67. package/dist/src/utils/safeJsonStringify.js.map +1 -0
  68. package/dist/src/utils/session.d.ts +6 -0
  69. package/dist/src/utils/session.js +8 -0
  70. package/dist/src/utils/session.js.map +1 -0
  71. package/package.json +80 -0
@@ -0,0 +1,104 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { EventEmitter } from 'events';
7
+ import { EVENT_API_ERROR, EVENT_API_RESPONSE, EVENT_TOOL_CALL } from './constants.js';
8
+ import { ToolCallDecision } from './tool-call-decision.js';
9
+ import type { ApiErrorEvent, ApiResponseEvent, ToolCallEvent } from './types.js';
10
+ export type UiEvent = (ApiResponseEvent & {
11
+ 'event.name': typeof EVENT_API_RESPONSE;
12
+ }) | (ApiErrorEvent & {
13
+ 'event.name': typeof EVENT_API_ERROR;
14
+ }) | (ToolCallEvent & {
15
+ 'event.name': typeof EVENT_TOOL_CALL;
16
+ });
17
+ export interface ToolCallStats {
18
+ count: number;
19
+ success: number;
20
+ fail: number;
21
+ durationMs: number;
22
+ decisions: {
23
+ [ToolCallDecision.ACCEPT]: number;
24
+ [ToolCallDecision.REJECT]: number;
25
+ [ToolCallDecision.MODIFY]: number;
26
+ [ToolCallDecision.AUTO_ACCEPT]: number;
27
+ };
28
+ }
29
+ export interface ModelMetrics {
30
+ api: {
31
+ totalRequests: number;
32
+ totalErrors: number;
33
+ totalLatencyMs: number;
34
+ };
35
+ tokens: {
36
+ input: number;
37
+ prompt: number;
38
+ candidates: number;
39
+ total: number;
40
+ cached: number;
41
+ thoughts: number;
42
+ tool: number;
43
+ };
44
+ }
45
+ export interface SessionMetrics {
46
+ models: Record<string, ModelMetrics>;
47
+ tools: {
48
+ totalCalls: number;
49
+ totalSuccess: number;
50
+ totalFail: number;
51
+ totalDurationMs: number;
52
+ totalDecisions: {
53
+ [ToolCallDecision.ACCEPT]: number;
54
+ [ToolCallDecision.REJECT]: number;
55
+ [ToolCallDecision.MODIFY]: number;
56
+ [ToolCallDecision.AUTO_ACCEPT]: number;
57
+ };
58
+ byName: Record<string, ToolCallStats>;
59
+ };
60
+ files: {
61
+ totalLinesAdded: number;
62
+ totalLinesRemoved: number;
63
+ };
64
+ tokenTracking: {
65
+ tokensPerMinute: number;
66
+ throttleWaitTimeMs: number;
67
+ timeToFirstToken: number | null;
68
+ tokensPerSecond: number;
69
+ sessionTokenUsage: {
70
+ input: number;
71
+ output: number;
72
+ cache: number;
73
+ tool: number;
74
+ thought: number;
75
+ total: number;
76
+ };
77
+ };
78
+ }
79
+ export declare class UiTelemetryService extends EventEmitter {
80
+ #private;
81
+ addEvent(event: UiEvent): void;
82
+ getMetrics(): SessionMetrics;
83
+ getLastPromptTokenCount(): number;
84
+ setLastPromptTokenCount(lastPromptTokenCount: number): void;
85
+ setTokenTrackingMetrics(metrics: {
86
+ tokensPerMinute: number;
87
+ throttleWaitTimeMs: number;
88
+ timeToFirstToken: number | null;
89
+ tokensPerSecond: number;
90
+ sessionTokenUsage: {
91
+ input: number;
92
+ output: number;
93
+ cache: number;
94
+ tool: number;
95
+ thought: number;
96
+ total: number;
97
+ };
98
+ }): void;
99
+ private getOrCreateModelMetrics;
100
+ private processApiResponse;
101
+ private processApiError;
102
+ private processToolCall;
103
+ }
104
+ export declare const uiTelemetryService: UiTelemetryService;
@@ -0,0 +1,183 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { EventEmitter } from 'events';
7
+ import { EVENT_API_ERROR, EVENT_API_RESPONSE, EVENT_TOOL_CALL, } from './constants.js';
8
+ import { ToolCallDecision } from './tool-call-decision.js';
9
+ const createInitialModelMetrics = () => ({
10
+ api: {
11
+ totalRequests: 0,
12
+ totalErrors: 0,
13
+ totalLatencyMs: 0,
14
+ },
15
+ tokens: {
16
+ input: 0,
17
+ prompt: 0,
18
+ candidates: 0,
19
+ total: 0,
20
+ cached: 0,
21
+ thoughts: 0,
22
+ tool: 0,
23
+ },
24
+ });
25
+ const createInitialMetrics = () => ({
26
+ models: {},
27
+ tools: {
28
+ totalCalls: 0,
29
+ totalSuccess: 0,
30
+ totalFail: 0,
31
+ totalDurationMs: 0,
32
+ totalDecisions: {
33
+ [ToolCallDecision.ACCEPT]: 0,
34
+ [ToolCallDecision.REJECT]: 0,
35
+ [ToolCallDecision.MODIFY]: 0,
36
+ [ToolCallDecision.AUTO_ACCEPT]: 0,
37
+ },
38
+ byName: {},
39
+ },
40
+ files: {
41
+ totalLinesAdded: 0,
42
+ totalLinesRemoved: 0,
43
+ },
44
+ // Initialize token tracking metrics
45
+ tokenTracking: {
46
+ tokensPerMinute: 0,
47
+ throttleWaitTimeMs: 0,
48
+ timeToFirstToken: null,
49
+ tokensPerSecond: 0,
50
+ sessionTokenUsage: {
51
+ input: 0,
52
+ output: 0,
53
+ cache: 0,
54
+ tool: 0,
55
+ thought: 0,
56
+ total: 0,
57
+ },
58
+ },
59
+ });
60
+ export class UiTelemetryService extends EventEmitter {
61
+ #metrics = createInitialMetrics();
62
+ #lastPromptTokenCount = 0;
63
+ addEvent(event) {
64
+ switch (event['event.name']) {
65
+ case EVENT_API_RESPONSE:
66
+ this.processApiResponse(event);
67
+ break;
68
+ case EVENT_API_ERROR:
69
+ this.processApiError(event);
70
+ break;
71
+ case EVENT_TOOL_CALL:
72
+ this.processToolCall(event);
73
+ break;
74
+ default:
75
+ // We should not emit update for any other event metric.
76
+ return;
77
+ }
78
+ this.emit('update', {
79
+ metrics: this.#metrics,
80
+ lastPromptTokenCount: this.#lastPromptTokenCount,
81
+ });
82
+ }
83
+ getMetrics() {
84
+ return this.#metrics;
85
+ }
86
+ getLastPromptTokenCount() {
87
+ return this.#lastPromptTokenCount;
88
+ }
89
+ setLastPromptTokenCount(lastPromptTokenCount) {
90
+ this.#lastPromptTokenCount = lastPromptTokenCount;
91
+ this.emit('update', {
92
+ metrics: this.#metrics,
93
+ lastPromptTokenCount: this.#lastPromptTokenCount,
94
+ });
95
+ }
96
+ // Set token tracking metrics
97
+ setTokenTrackingMetrics(metrics) {
98
+ this.#metrics.tokenTracking = { ...metrics };
99
+ this.emit('update', {
100
+ metrics: this.#metrics,
101
+ lastPromptTokenCount: this.#lastPromptTokenCount,
102
+ });
103
+ }
104
+ getOrCreateModelMetrics(modelName) {
105
+ if (!(modelName in this.#metrics.models)) {
106
+ this.#metrics.models[modelName] = createInitialModelMetrics();
107
+ }
108
+ return this.#metrics.models[modelName];
109
+ }
110
+ processApiResponse(event) {
111
+ const modelMetrics = this.getOrCreateModelMetrics(event.model);
112
+ modelMetrics.api.totalRequests++;
113
+ modelMetrics.api.totalLatencyMs += event.duration_ms;
114
+ modelMetrics.tokens.prompt += event.input_token_count;
115
+ modelMetrics.tokens.candidates += event.output_token_count;
116
+ modelMetrics.tokens.total += event.total_token_count;
117
+ modelMetrics.tokens.cached += event.cached_content_token_count;
118
+ modelMetrics.tokens.thoughts += event.thoughts_token_count;
119
+ modelMetrics.tokens.tool += event.tool_token_count;
120
+ modelMetrics.tokens.input = Math.max(0, modelMetrics.tokens.prompt - modelMetrics.tokens.cached);
121
+ }
122
+ processApiError(event) {
123
+ const modelMetrics = this.getOrCreateModelMetrics(event.model);
124
+ modelMetrics.api.totalRequests++;
125
+ modelMetrics.api.totalErrors++;
126
+ modelMetrics.api.totalLatencyMs += event.duration_ms;
127
+ }
128
+ processToolCall(event) {
129
+ const { tools, files } = this.#metrics;
130
+ tools.totalCalls++;
131
+ tools.totalDurationMs += event.duration_ms;
132
+ if (event.success) {
133
+ tools.totalSuccess++;
134
+ }
135
+ else {
136
+ tools.totalFail++;
137
+ }
138
+ if (!(event.function_name in tools.byName)) {
139
+ tools.byName[event.function_name] = {
140
+ count: 0,
141
+ success: 0,
142
+ fail: 0,
143
+ durationMs: 0,
144
+ decisions: {
145
+ [ToolCallDecision.ACCEPT]: 0,
146
+ [ToolCallDecision.REJECT]: 0,
147
+ [ToolCallDecision.MODIFY]: 0,
148
+ [ToolCallDecision.AUTO_ACCEPT]: 0,
149
+ },
150
+ };
151
+ }
152
+ const toolStats = tools.byName[event.function_name];
153
+ toolStats.count++;
154
+ toolStats.durationMs += event.duration_ms;
155
+ if (event.success) {
156
+ toolStats.success++;
157
+ }
158
+ else {
159
+ toolStats.fail++;
160
+ }
161
+ const decision = event.decision;
162
+ if (decision !== undefined && decision !== '') {
163
+ const toolDecision = event.decision;
164
+ if (toolDecision !== undefined) {
165
+ tools.totalDecisions[toolDecision]++;
166
+ toolStats.decisions[toolDecision]++;
167
+ }
168
+ }
169
+ // Aggregate line count data from metadata
170
+ if (event.metadata) {
171
+ if (event.metadata['ai_added_lines'] !== undefined &&
172
+ typeof event.metadata['ai_added_lines'] === 'number') {
173
+ files.totalLinesAdded += event.metadata['ai_added_lines'];
174
+ }
175
+ if (event.metadata['ai_removed_lines'] !== undefined &&
176
+ typeof event.metadata['ai_removed_lines'] === 'number') {
177
+ files.totalLinesRemoved += event.metadata['ai_removed_lines'];
178
+ }
179
+ }
180
+ }
181
+ }
182
+ export const uiTelemetryService = new UiTelemetryService();
183
+ //# sourceMappingURL=uiTelemetry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uiTelemetry.js","sourceRoot":"","sources":["../../../src/telemetry/uiTelemetry.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EACL,eAAe,EACf,kBAAkB,EAClB,eAAe,GAChB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AA8E3D,MAAM,yBAAyB,GAAG,GAAiB,EAAE,CAAC,CAAC;IACrD,GAAG,EAAE;QACH,aAAa,EAAE,CAAC;QAChB,WAAW,EAAE,CAAC;QACd,cAAc,EAAE,CAAC;KAClB;IACD,MAAM,EAAE;QACN,KAAK,EAAE,CAAC;QACR,MAAM,EAAE,CAAC;QACT,UAAU,EAAE,CAAC;QACb,KAAK,EAAE,CAAC;QACR,MAAM,EAAE,CAAC;QACT,QAAQ,EAAE,CAAC;QACX,IAAI,EAAE,CAAC;KACR;CACF,CAAC,CAAC;AAEH,MAAM,oBAAoB,GAAG,GAAmB,EAAE,CAAC,CAAC;IAClD,MAAM,EAAE,EAAE;IACV,KAAK,EAAE;QACL,UAAU,EAAE,CAAC;QACb,YAAY,EAAE,CAAC;QACf,SAAS,EAAE,CAAC;QACZ,eAAe,EAAE,CAAC;QAClB,cAAc,EAAE;YACd,CAAC,gBAAgB,CAAC,MAAM,CAAC,EAAE,CAAC;YAC5B,CAAC,gBAAgB,CAAC,MAAM,CAAC,EAAE,CAAC;YAC5B,CAAC,gBAAgB,CAAC,MAAM,CAAC,EAAE,CAAC;YAC5B,CAAC,gBAAgB,CAAC,WAAW,CAAC,EAAE,CAAC;SAClC;QACD,MAAM,EAAE,EAAE;KACX;IACD,KAAK,EAAE;QACL,eAAe,EAAE,CAAC;QAClB,iBAAiB,EAAE,CAAC;KACrB;IACD,oCAAoC;IACpC,aAAa,EAAE;QACb,eAAe,EAAE,CAAC;QAClB,kBAAkB,EAAE,CAAC;QACrB,gBAAgB,EAAE,IAAI;QACtB,eAAe,EAAE,CAAC;QAClB,iBAAiB,EAAE;YACjB,KAAK,EAAE,CAAC;YACR,MAAM,EAAE,CAAC;YACT,KAAK,EAAE,CAAC;YACR,IAAI,EAAE,CAAC;YACP,OAAO,EAAE,CAAC;YACV,KAAK,EAAE,CAAC;SACT;KACF;CACF,CAAC,CAAC;AAEH,MAAM,OAAO,kBAAmB,SAAQ,YAAY;IAClD,QAAQ,GAAmB,oBAAoB,EAAE,CAAC;IAClD,qBAAqB,GAAG,CAAC,CAAC;IAE1B,QAAQ,CAAC,KAAc;QACrB,QAAQ,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC;YAC5B,KAAK,kBAAkB;gBACrB,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;gBAC/B,MAAM;YACR,KAAK,eAAe;gBAClB,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;gBAC5B,MAAM;YACR,KAAK,eAAe;gBAClB,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;gBAC5B,MAAM;YACR;gBACE,wDAAwD;gBACxD,OAAO;QACX,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YAClB,OAAO,EAAE,IAAI,CAAC,QAAQ;YACtB,oBAAoB,EAAE,IAAI,CAAC,qBAAqB;SACjD,CAAC,CAAC;IACL,CAAC;IAED,UAAU;QACR,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAED,uBAAuB;QACrB,OAAO,IAAI,CAAC,qBAAqB,CAAC;IACpC,CAAC;IAED,uBAAuB,CAAC,oBAA4B;QAClD,IAAI,CAAC,qBAAqB,GAAG,oBAAoB,CAAC;QAClD,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YAClB,OAAO,EAAE,IAAI,CAAC,QAAQ;YACtB,oBAAoB,EAAE,IAAI,CAAC,qBAAqB;SACjD,CAAC,CAAC;IACL,CAAC;IAED,6BAA6B;IAC7B,uBAAuB,CAAC,OAavB;QACC,IAAI,CAAC,QAAQ,CAAC,aAAa,GAAG,EAAE,GAAG,OAAO,EAAE,CAAC;QAC7C,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YAClB,OAAO,EAAE,IAAI,CAAC,QAAQ;YACtB,oBAAoB,EAAE,IAAI,CAAC,qBAAqB;SACjD,CAAC,CAAC;IACL,CAAC;IAEO,uBAAuB,CAAC,SAAiB;QAC/C,IAAI,CAAC,CAAC,SAAS,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YACzC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,yBAAyB,EAAE,CAAC;QAChE,CAAC;QACD,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACzC,CAAC;IAEO,kBAAkB,CAAC,KAAuB;QAChD,MAAM,YAAY,GAAG,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAE/D,YAAY,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QACjC,YAAY,CAAC,GAAG,CAAC,cAAc,IAAI,KAAK,CAAC,WAAW,CAAC;QAErD,YAAY,CAAC,MAAM,CAAC,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC;QACtD,YAAY,CAAC,MAAM,CAAC,UAAU,IAAI,KAAK,CAAC,kBAAkB,CAAC;QAC3D,YAAY,CAAC,MAAM,CAAC,KAAK,IAAI,KAAK,CAAC,iBAAiB,CAAC;QACrD,YAAY,CAAC,MAAM,CAAC,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC;QAC/D,YAAY,CAAC,MAAM,CAAC,QAAQ,IAAI,KAAK,CAAC,oBAAoB,CAAC;QAC3D,YAAY,CAAC,MAAM,CAAC,IAAI,IAAI,KAAK,CAAC,gBAAgB,CAAC;QACnD,YAAY,CAAC,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAClC,CAAC,EACD,YAAY,CAAC,MAAM,CAAC,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC,MAAM,CACxD,CAAC;IACJ,CAAC;IAEO,eAAe,CAAC,KAAoB;QAC1C,MAAM,YAAY,GAAG,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC/D,YAAY,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QACjC,YAAY,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;QAC/B,YAAY,CAAC,GAAG,CAAC,cAAc,IAAI,KAAK,CAAC,WAAW,CAAC;IACvD,CAAC;IAEO,eAAe,CAAC,KAAoB;QAC1C,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC;QACvC,KAAK,CAAC,UAAU,EAAE,CAAC;QACnB,KAAK,CAAC,eAAe,IAAI,KAAK,CAAC,WAAW,CAAC;QAE3C,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;YAClB,KAAK,CAAC,YAAY,EAAE,CAAC;QACvB,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,SAAS,EAAE,CAAC;QACpB,CAAC;QAED,IAAI,CAAC,CAAC,KAAK,CAAC,aAAa,IAAI,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;YAC3C,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,GAAG;gBAClC,KAAK,EAAE,CAAC;gBACR,OAAO,EAAE,CAAC;gBACV,IAAI,EAAE,CAAC;gBACP,UAAU,EAAE,CAAC;gBACb,SAAS,EAAE;oBACT,CAAC,gBAAgB,CAAC,MAAM,CAAC,EAAE,CAAC;oBAC5B,CAAC,gBAAgB,CAAC,MAAM,CAAC,EAAE,CAAC;oBAC5B,CAAC,gBAAgB,CAAC,MAAM,CAAC,EAAE,CAAC;oBAC5B,CAAC,gBAAgB,CAAC,WAAW,CAAC,EAAE,CAAC;iBAClC;aACF,CAAC;QACJ,CAAC;QAED,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QACpD,SAAS,CAAC,KAAK,EAAE,CAAC;QAClB,SAAS,CAAC,UAAU,IAAI,KAAK,CAAC,WAAW,CAAC;QAC1C,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;YAClB,SAAS,CAAC,OAAO,EAAE,CAAC;QACtB,CAAC;aAAM,CAAC;YACN,SAAS,CAAC,IAAI,EAAE,CAAC;QACnB,CAAC;QAED,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAmB,CAAC;QAC3C,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,EAAE,EAAE,CAAC;YAC9C,MAAM,YAAY,GAAG,KAAK,CAAC,QAAQ,CAAC;YACpC,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;gBAC/B,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC,EAAE,CAAC;gBACrC,SAAS,CAAC,SAAS,CAAC,YAAY,CAAC,EAAE,CAAC;YACtC,CAAC;QACH,CAAC;QAED,0CAA0C;QAC1C,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;YACnB,IACE,KAAK,CAAC,QAAQ,CAAC,gBAAgB,CAAC,KAAK,SAAS;gBAC9C,OAAO,KAAK,CAAC,QAAQ,CAAC,gBAAgB,CAAC,KAAK,QAAQ,EACpD,CAAC;gBACD,KAAK,CAAC,eAAe,IAAI,KAAK,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC;YAC5D,CAAC;YACD,IACE,KAAK,CAAC,QAAQ,CAAC,kBAAkB,CAAC,KAAK,SAAS;gBAChD,OAAO,KAAK,CAAC,QAAQ,CAAC,kBAAkB,CAAC,KAAK,QAAQ,EACtD,CAAC;gBACD,KAAK,CAAC,iBAAiB,IAAI,KAAK,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC;YAChE,CAAC;QACH,CAAC;IACH,CAAC;CACF;AAED,MAAM,CAAC,MAAM,kBAAkB,GAAG,IAAI,kBAAkB,EAAE,CAAC"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * @license
3
+ * SPDX-License-Identifier: Apache-2.0
4
+ *
5
+ * Convenience singleton: re-exports DebugLogger class and a pre-built
6
+ * default instance for quick access to debug logging.
7
+ */
8
+ import { DebugLogger } from '../debug/DebugLogger.js';
9
+ export { DebugLogger };
10
+ export declare const debugLogger: DebugLogger;
@@ -0,0 +1,11 @@
1
+ /**
2
+ * @license
3
+ * SPDX-License-Identifier: Apache-2.0
4
+ *
5
+ * Convenience singleton: re-exports DebugLogger class and a pre-built
6
+ * default instance for quick access to debug logging.
7
+ */
8
+ import { DebugLogger } from '../debug/DebugLogger.js';
9
+ export { DebugLogger };
10
+ export const debugLogger = new DebugLogger('llxprt:debug');
11
+ //# sourceMappingURL=debugLogger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"debugLogger.js","sourceRoot":"","sources":["../../../src/utils/debugLogger.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAEtD,OAAO,EAAE,WAAW,EAAE,CAAC;AACvB,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,WAAW,CAAC,cAAc,CAAC,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Vybestack LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ export { DebugLogger, debugLogger } from './debugLogger.js';
7
+ export { LLXPRT_DIR } from './paths.js';
8
+ export { safeJsonStringify } from './safeJsonStringify.js';
9
+ export { sessionId } from './session.js';
@@ -0,0 +1,10 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Vybestack LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ export { DebugLogger, debugLogger } from './debugLogger.js';
7
+ export { LLXPRT_DIR } from './paths.js';
8
+ export { safeJsonStringify } from './safeJsonStringify.js';
9
+ export { sessionId } from './session.js';
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ /**
7
+ * The directory name used for LLxprt configuration and data.
8
+ * Duplicated here to avoid importing from core.
9
+ */
10
+ export declare const LLXPRT_DIR = ".llxprt";
@@ -0,0 +1,11 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ /**
7
+ * The directory name used for LLxprt configuration and data.
8
+ * Duplicated here to avoid importing from core.
9
+ */
10
+ export const LLXPRT_DIR = '.llxprt';
11
+ //# sourceMappingURL=paths.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paths.js","sourceRoot":"","sources":["../../../src/utils/paths.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;GAGG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,SAAS,CAAC"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ /**
7
+ * Safely stringifies an object to JSON, handling circular references by replacing them with [Circular].
8
+ *
9
+ * @param obj - The object to stringify
10
+ * @param space - Optional space parameter for formatting (defaults to no formatting)
11
+ * @returns JSON string with circular references replaced by [Circular]
12
+ */
13
+ export declare function safeJsonStringify(obj: unknown, space?: string | number): string;
@@ -0,0 +1,25 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ /**
7
+ * Safely stringifies an object to JSON, handling circular references by replacing them with [Circular].
8
+ *
9
+ * @param obj - The object to stringify
10
+ * @param space - Optional space parameter for formatting (defaults to no formatting)
11
+ * @returns JSON string with circular references replaced by [Circular]
12
+ */
13
+ export function safeJsonStringify(obj, space) {
14
+ const seen = new WeakSet();
15
+ return JSON.stringify(obj, (key, value) => {
16
+ if (typeof value === 'object' && value !== null) {
17
+ if (seen.has(value)) {
18
+ return '[Circular]';
19
+ }
20
+ seen.add(value);
21
+ }
22
+ return value;
23
+ }, space);
24
+ }
25
+ //# sourceMappingURL=safeJsonStringify.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"safeJsonStringify.js","sourceRoot":"","sources":["../../../src/utils/safeJsonStringify.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;;;GAMG;AACH,MAAM,UAAU,iBAAiB,CAC/B,GAAY,EACZ,KAAuB;IAEvB,MAAM,IAAI,GAAG,IAAI,OAAO,EAAE,CAAC;IAC3B,OAAO,IAAI,CAAC,SAAS,CACnB,GAAG,EACH,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE;QACb,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YAChD,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;gBACpB,OAAO,YAAY,CAAC;YACtB,CAAC;YACD,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAClB,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC,EACD,KAAK,CACN,CAAC;AACJ,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ export declare const sessionId: `${string}-${string}-${string}-${string}-${string}`;
@@ -0,0 +1,8 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { randomUUID } from 'crypto';
7
+ export const sessionId = randomUUID();
8
+ //# sourceMappingURL=session.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.js","sourceRoot":"","sources":["../../../src/utils/session.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAEpC,MAAM,CAAC,MAAM,SAAS,GAAG,UAAU,EAAE,CAAC"}
package/package.json ADDED
@@ -0,0 +1,80 @@
1
+ {
2
+ "name": "@vybestack/llxprt-code-telemetry",
3
+ "version": "0.10.0-nightly.260613.1adad3b34",
4
+ "description": "LLxprt Code Telemetry — debug logging, OpenTelemetry instrumentation, and metrics",
5
+ "license": "Apache-2.0",
6
+ "repository": {
7
+ "type": "git",
8
+ "url": "git+https://github.com/vybestack/llxprt-code.git"
9
+ },
10
+ "type": "module",
11
+ "main": "dist/index.js",
12
+ "types": "dist/index.d.ts",
13
+ "exports": {
14
+ ".": {
15
+ "types": "./dist/index.d.ts",
16
+ "import": "./dist/index.js"
17
+ },
18
+ "./debug/index.js": "./dist/src/debug/index.js",
19
+ "./debug/DebugLogger.js": "./dist/src/debug/DebugLogger.js",
20
+ "./debug/ConfigurationManager.js": "./dist/src/debug/ConfigurationManager.js",
21
+ "./debug/FileOutput.js": "./dist/src/debug/FileOutput.js",
22
+ "./debug/MockConfigurationManager.js": "./dist/src/debug/MockConfigurationManager.js",
23
+ "./debug/MockFileOutput.js": "./dist/src/debug/MockFileOutput.js",
24
+ "./utils/index.js": "./dist/src/utils/index.js",
25
+ "./utils/debugLogger.js": "./dist/src/utils/debugLogger.js",
26
+ "./utils/safeJsonStringify.js": "./dist/src/utils/safeJsonStringify.js",
27
+ "./utils/session.js": "./dist/src/utils/session.js",
28
+ "./telemetry/loggers.js": "./dist/src/telemetry/loggers.js",
29
+ "./telemetry/types.js": "./dist/src/telemetry/types.js",
30
+ "./telemetry/index.js": "./dist/src/telemetry/index.js",
31
+ "./telemetry/sdk.js": "./dist/src/telemetry/sdk.js",
32
+ "./telemetry/constants.js": "./dist/src/telemetry/constants.js",
33
+ "./telemetry/metrics.js": "./dist/src/telemetry/metrics.js",
34
+ "./telemetry/uiTelemetry.js": "./dist/src/telemetry/uiTelemetry.js",
35
+ "./telemetry/tool-call-decision.js": "./dist/src/telemetry/tool-call-decision.js",
36
+ "./telemetry/file-exporters.js": "./dist/src/telemetry/file-exporters.js"
37
+ },
38
+ "scripts": {
39
+ "build": "node ../../scripts/build_package.js",
40
+ "lint": "eslint . --ext .ts,.tsx",
41
+ "format": "prettier --write .",
42
+ "test": "vitest run",
43
+ "test:ci": "vitest run",
44
+ "typecheck": "tsc --noEmit"
45
+ },
46
+ "files": [
47
+ "dist"
48
+ ],
49
+ "dependencies": {
50
+ "@google/genai": "1.30.0",
51
+ "@opentelemetry/api": "^1.9.0",
52
+ "@opentelemetry/api-logs": "^0.203.0",
53
+ "@opentelemetry/core": "^1.26.0",
54
+ "@opentelemetry/exporter-logs-otlp-grpc": "^0.203.0",
55
+ "@opentelemetry/exporter-logs-otlp-http": "^0.203.0",
56
+ "@opentelemetry/exporter-metrics-otlp-grpc": "^0.203.0",
57
+ "@opentelemetry/exporter-metrics-otlp-http": "^0.203.0",
58
+ "@opentelemetry/exporter-trace-otlp-grpc": "^0.203.0",
59
+ "@opentelemetry/exporter-trace-otlp-http": "^0.203.0",
60
+ "@opentelemetry/instrumentation-http": "^0.203.0",
61
+ "@opentelemetry/resources": "^2.0.0",
62
+ "@opentelemetry/sdk-logs": "^0.203.0",
63
+ "@opentelemetry/sdk-metrics": "^2.0.0",
64
+ "@opentelemetry/sdk-node": "^0.203.0",
65
+ "@opentelemetry/sdk-trace-base": "^2.0.0",
66
+ "@opentelemetry/sdk-trace-node": "^2.0.0",
67
+ "@opentelemetry/semantic-conventions": "^1.26.0",
68
+ "debug": "^4.3.4"
69
+ },
70
+ "devDependencies": {
71
+ "@types/debug": "^4.1.12",
72
+ "@types/node": "^24.2.1",
73
+ "fast-check": "^4.2.0",
74
+ "typescript": "^5.3.3",
75
+ "vitest": "^3.1.1"
76
+ },
77
+ "engines": {
78
+ "node": ">=20"
79
+ }
80
+ }