@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,153 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { metrics, ValueType, } from '@opentelemetry/api';
7
+ import { SERVICE_NAME, METRIC_TOOL_CALL_COUNT, METRIC_TOOL_CALL_LATENCY, METRIC_API_REQUEST_COUNT, METRIC_API_REQUEST_LATENCY, METRIC_TOKEN_USAGE, METRIC_SESSION_COUNT, METRIC_FILE_OPERATION_COUNT, } from './constants.js';
8
+ export var FileOperation;
9
+ (function (FileOperation) {
10
+ FileOperation["CREATE"] = "create";
11
+ FileOperation["READ"] = "read";
12
+ FileOperation["UPDATE"] = "update";
13
+ })(FileOperation || (FileOperation = {}));
14
+ let cliMeter;
15
+ let toolCallCounter;
16
+ let toolCallLatencyHistogram;
17
+ let apiRequestCounter;
18
+ let apiRequestLatencyHistogram;
19
+ let tokenUsageCounter;
20
+ let fileOperationCounter;
21
+ let isMetricsInitialized = false;
22
+ function getCommonAttributes(config) {
23
+ return {
24
+ 'session.id': config.getSessionId(),
25
+ };
26
+ }
27
+ export function getMeter() {
28
+ cliMeter ??= metrics.getMeter(SERVICE_NAME);
29
+ return cliMeter;
30
+ }
31
+ export function initializeMetrics(config) {
32
+ if (isMetricsInitialized)
33
+ return;
34
+ const meter = getMeter();
35
+ if (!meter)
36
+ return;
37
+ toolCallCounter = meter.createCounter(METRIC_TOOL_CALL_COUNT, {
38
+ description: 'Counts tool calls, tagged by function name and success.',
39
+ valueType: ValueType.INT,
40
+ });
41
+ toolCallLatencyHistogram = meter.createHistogram(METRIC_TOOL_CALL_LATENCY, {
42
+ description: 'Latency of tool calls in milliseconds.',
43
+ unit: 'ms',
44
+ valueType: ValueType.INT,
45
+ });
46
+ apiRequestCounter = meter.createCounter(METRIC_API_REQUEST_COUNT, {
47
+ description: 'Counts API requests, tagged by model and status.',
48
+ valueType: ValueType.INT,
49
+ });
50
+ apiRequestLatencyHistogram = meter.createHistogram(METRIC_API_REQUEST_LATENCY, {
51
+ description: 'Latency of API requests in milliseconds.',
52
+ unit: 'ms',
53
+ valueType: ValueType.INT,
54
+ });
55
+ tokenUsageCounter = meter.createCounter(METRIC_TOKEN_USAGE, {
56
+ description: 'Counts the total number of tokens used.',
57
+ valueType: ValueType.INT,
58
+ });
59
+ fileOperationCounter = meter.createCounter(METRIC_FILE_OPERATION_COUNT, {
60
+ description: 'Counts file operations (create, read, update).',
61
+ valueType: ValueType.INT,
62
+ });
63
+ const sessionCounter = meter.createCounter(METRIC_SESSION_COUNT, {
64
+ description: 'Count of CLI sessions started.',
65
+ valueType: ValueType.INT,
66
+ });
67
+ sessionCounter.add(1, getCommonAttributes(config));
68
+ isMetricsInitialized = true;
69
+ }
70
+ export function recordToolCallMetrics(config, functionName, durationMs, success, decision, tool_type) {
71
+ if (!toolCallCounter || !toolCallLatencyHistogram || !isMetricsInitialized)
72
+ return;
73
+ const metricAttributes = {
74
+ ...getCommonAttributes(config),
75
+ function_name: functionName,
76
+ success,
77
+ decision,
78
+ tool_type,
79
+ };
80
+ toolCallCounter.add(1, metricAttributes);
81
+ toolCallLatencyHistogram.record(durationMs, {
82
+ ...getCommonAttributes(config),
83
+ function_name: functionName,
84
+ });
85
+ }
86
+ export function recordTokenUsageMetrics(config, model, tokenCount, type) {
87
+ if (!tokenUsageCounter || !isMetricsInitialized)
88
+ return;
89
+ tokenUsageCounter.add(tokenCount, {
90
+ ...getCommonAttributes(config),
91
+ model,
92
+ type,
93
+ });
94
+ }
95
+ export function recordApiResponseMetrics(config, model, durationMs, statusCode, error) {
96
+ if (!apiRequestCounter ||
97
+ !apiRequestLatencyHistogram ||
98
+ !isMetricsInitialized)
99
+ return;
100
+ const metricAttributes = {
101
+ ...getCommonAttributes(config),
102
+ model,
103
+ status_code: statusCode ?? (error ? 'error' : 'ok'),
104
+ };
105
+ apiRequestCounter.add(1, metricAttributes);
106
+ apiRequestLatencyHistogram.record(durationMs, {
107
+ ...getCommonAttributes(config),
108
+ model,
109
+ });
110
+ }
111
+ export function recordApiErrorMetrics(config, model, durationMs, statusCode, errorType) {
112
+ if (!apiRequestCounter ||
113
+ !apiRequestLatencyHistogram ||
114
+ !isMetricsInitialized)
115
+ return;
116
+ const metricAttributes = {
117
+ ...getCommonAttributes(config),
118
+ model,
119
+ status_code: statusCode ?? 'error',
120
+ error_type: errorType ?? 'unknown',
121
+ };
122
+ apiRequestCounter.add(1, metricAttributes);
123
+ apiRequestLatencyHistogram.record(durationMs, {
124
+ ...getCommonAttributes(config),
125
+ model,
126
+ });
127
+ }
128
+ export function recordFileOperationMetric(config, operation, lines, mimetype, extension, diffStat) {
129
+ if (!fileOperationCounter || !isMetricsInitialized)
130
+ return;
131
+ const attributes = {
132
+ ...getCommonAttributes(config),
133
+ operation,
134
+ };
135
+ if (lines !== undefined)
136
+ attributes.lines = lines;
137
+ if (mimetype !== undefined)
138
+ attributes.mimetype = mimetype;
139
+ if (extension !== undefined)
140
+ attributes.extension = extension;
141
+ if (diffStat !== undefined) {
142
+ attributes.ai_added_lines = diffStat.ai_added_lines;
143
+ attributes.ai_removed_lines = diffStat.ai_removed_lines;
144
+ attributes.user_added_lines = diffStat.user_added_lines;
145
+ attributes.user_removed_lines = diffStat.user_removed_lines;
146
+ }
147
+ fileOperationCounter.add(1, attributes);
148
+ }
149
+ export function recordModelRoutingMetrics(_config, _event) {
150
+ // Placeholder implementation for model routing metrics
151
+ // This would record metrics about model selection and routing decisions
152
+ }
153
+ //# sourceMappingURL=metrics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metrics.js","sourceRoot":"","sources":["../../../src/telemetry/metrics.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import type { TelemetryConfig } from '../internal/interfaces.js';
7
+ export declare function isTelemetrySdkInitialized(): boolean;
8
+ export declare function initializeTelemetry(config: TelemetryConfig): void;
9
+ export declare function flushTelemetry(): Promise<void>;
10
+ export declare function shutdownTelemetry(config: TelemetryConfig): Promise<void>;
@@ -0,0 +1,138 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ // TELEMETRY: Modified to support local file logging only - no data sent to Google
7
+ import { DiagConsoleLogger, DiagLogLevel, diag } from '@opentelemetry/api';
8
+ import { NodeSDK } from '@opentelemetry/sdk-node';
9
+ import { SemanticResourceAttributes } from '@opentelemetry/semantic-conventions';
10
+ import { resourceFromAttributes } from '@opentelemetry/resources';
11
+ import { BatchSpanProcessor, ConsoleSpanExporter, } from '@opentelemetry/sdk-trace-node';
12
+ import { BatchLogRecordProcessor, ConsoleLogRecordExporter, } from '@opentelemetry/sdk-logs';
13
+ import { ConsoleMetricExporter, PeriodicExportingMetricReader, } from '@opentelemetry/sdk-metrics';
14
+ import { HttpInstrumentation } from '@opentelemetry/instrumentation-http';
15
+ import { SERVICE_NAME } from './constants.js';
16
+ import { initializeMetrics } from './metrics.js';
17
+ import { FileLogExporter, FileMetricExporter, FileSpanExporter, } from './file-exporters.js';
18
+ import { debugLogger } from '../utils/debugLogger.js';
19
+ diag.setLogger(new DiagConsoleLogger(), DiagLogLevel.INFO);
20
+ let sdk;
21
+ let telemetryInitialized = false;
22
+ let flushInProgress = null;
23
+ export function isTelemetrySdkInitialized() {
24
+ return telemetryInitialized;
25
+ }
26
+ export function initializeTelemetry(config) {
27
+ // TELEMETRY: Modified to ONLY support local file logging - network exporters disabled
28
+ if (telemetryInitialized || !config.getTelemetryEnabled()) {
29
+ // Only output verbose logs when telemetry is enabled to avoid stdout spam
30
+ if (process.env.VERBOSE === 'true' && config.getTelemetryEnabled()) {
31
+ debugLogger.error(`[TELEMETRY] Skipping initialization: initialized=${telemetryInitialized}, enabled=${config.getTelemetryEnabled()}`);
32
+ }
33
+ return;
34
+ }
35
+ if (process.env.VERBOSE === 'true') {
36
+ debugLogger.error(`[TELEMETRY] Initializing with outfile: ${config.getTelemetryOutfile()}`);
37
+ }
38
+ const resource = resourceFromAttributes({
39
+ [SemanticResourceAttributes.SERVICE_NAME]: SERVICE_NAME,
40
+ [SemanticResourceAttributes.SERVICE_VERSION]: process.version,
41
+ 'session.id': config.getSessionId(),
42
+ });
43
+ // SECURITY: OTLP/network endpoints are completely disabled to prevent data leakage
44
+ // Only local file or console output is allowed
45
+ const telemetryOutfile = config.getTelemetryOutfile() ?? '';
46
+ const spanExporter = telemetryOutfile
47
+ ? new FileSpanExporter(telemetryOutfile)
48
+ : new ConsoleSpanExporter();
49
+ const logExporter = telemetryOutfile
50
+ ? new FileLogExporter(telemetryOutfile)
51
+ : new ConsoleLogRecordExporter();
52
+ const metricReader = telemetryOutfile
53
+ ? new PeriodicExportingMetricReader({
54
+ exporter: new FileMetricExporter(telemetryOutfile),
55
+ exportIntervalMillis: 10000,
56
+ })
57
+ : new PeriodicExportingMetricReader({
58
+ exporter: new ConsoleMetricExporter(),
59
+ exportIntervalMillis: 10000,
60
+ });
61
+ // Configure batch processors with shorter delays for faster writes
62
+ // This ensures telemetry is written promptly, especially important for tests
63
+ const spanProcessor = new BatchSpanProcessor(spanExporter, {
64
+ scheduledDelayMillis: 100, // Export every 100ms instead of default 5000ms
65
+ maxExportBatchSize: 10, // Export after 10 spans instead of default 512
66
+ exportTimeoutMillis: 5000, // Shorter timeout for faster failure detection
67
+ });
68
+ const logProcessor = new BatchLogRecordProcessor(logExporter, {
69
+ scheduledDelayMillis: 0, // Export immediately for tests - was 100ms
70
+ maxExportBatchSize: 1, // Export after every single log - was 10
71
+ exportTimeoutMillis: 5000,
72
+ });
73
+ sdk = new NodeSDK({
74
+ resource,
75
+ spanProcessors: [spanProcessor],
76
+ logRecordProcessors: [logProcessor],
77
+ metricReader,
78
+ instrumentations: [new HttpInstrumentation()],
79
+ });
80
+ try {
81
+ sdk.start();
82
+ if (config.getDebugMode()) {
83
+ debugLogger.log('OpenTelemetry SDK started successfully.');
84
+ }
85
+ telemetryInitialized = true;
86
+ initializeMetrics(config);
87
+ }
88
+ catch (error) {
89
+ debugLogger.error('Error starting OpenTelemetry SDK:', error);
90
+ }
91
+ process.on('SIGTERM', () => {
92
+ void shutdownTelemetry(config);
93
+ });
94
+ process.on('SIGINT', () => {
95
+ void shutdownTelemetry(config);
96
+ });
97
+ }
98
+ export async function flushTelemetry() {
99
+ if (!sdk)
100
+ return undefined;
101
+ if (flushInProgress)
102
+ return flushInProgress;
103
+ flushInProgress = (async () => {
104
+ try {
105
+ // Feature-detect forceFlush on the SDK instance
106
+ if (typeof sdk.forceFlush ===
107
+ 'function') {
108
+ await sdk.forceFlush();
109
+ }
110
+ }
111
+ catch {
112
+ // Telemetry flush failures are non-fatal
113
+ }
114
+ finally {
115
+ flushInProgress = null;
116
+ }
117
+ })();
118
+ return flushInProgress;
119
+ }
120
+ export async function shutdownTelemetry(config) {
121
+ // TELEMETRY: Shutdown only affects local file writing
122
+ if (!telemetryInitialized || !sdk) {
123
+ return;
124
+ }
125
+ try {
126
+ await sdk.shutdown();
127
+ if (config.getDebugMode()) {
128
+ debugLogger.log('OpenTelemetry SDK shut down successfully.');
129
+ }
130
+ }
131
+ catch (error) {
132
+ debugLogger.error('Error shutting down SDK:', error);
133
+ }
134
+ finally {
135
+ telemetryInitialized = false;
136
+ }
137
+ }
138
+ //# sourceMappingURL=sdk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sdk.js","sourceRoot":"","sources":["../../../src/telemetry/sdk.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { ToolConfirmationOutcome } from '../internal/interfaces.js';
7
+ export declare enum ToolCallDecision {
8
+ ACCEPT = "accept",
9
+ REJECT = "reject",
10
+ MODIFY = "modify",
11
+ AUTO_ACCEPT = "auto_accept"
12
+ }
13
+ export declare function getDecisionFromOutcome(outcome: ToolConfirmationOutcome): ToolCallDecision;
@@ -0,0 +1,30 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { ToolConfirmationOutcome } from '../internal/interfaces.js';
7
+ export var ToolCallDecision;
8
+ (function (ToolCallDecision) {
9
+ ToolCallDecision["ACCEPT"] = "accept";
10
+ ToolCallDecision["REJECT"] = "reject";
11
+ ToolCallDecision["MODIFY"] = "modify";
12
+ ToolCallDecision["AUTO_ACCEPT"] = "auto_accept";
13
+ })(ToolCallDecision || (ToolCallDecision = {}));
14
+ export function getDecisionFromOutcome(outcome) {
15
+ switch (outcome) {
16
+ case ToolConfirmationOutcome.ProceedOnce:
17
+ return ToolCallDecision.ACCEPT;
18
+ case ToolConfirmationOutcome.ProceedAlways:
19
+ case ToolConfirmationOutcome.ProceedAlwaysServer:
20
+ case ToolConfirmationOutcome.ProceedAlwaysTool:
21
+ return ToolCallDecision.AUTO_ACCEPT;
22
+ case ToolConfirmationOutcome.ModifyWithEditor:
23
+ case ToolConfirmationOutcome.SuggestEdit:
24
+ return ToolCallDecision.MODIFY;
25
+ case ToolConfirmationOutcome.Cancel:
26
+ default:
27
+ return ToolCallDecision.REJECT;
28
+ }
29
+ }
30
+ //# sourceMappingURL=tool-call-decision.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-call-decision.js","sourceRoot":"","sources":["../../../src/telemetry/tool-call-decision.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAEpE,MAAM,CAAN,IAAY,gBAKX;AALD,WAAY,gBAAgB;IAC1B,qCAAiB,CAAA;IACjB,qCAAiB,CAAA;IACjB,qCAAiB,CAAA;IACjB,+CAA2B,CAAA;AAC7B,CAAC,EALW,gBAAgB,KAAhB,gBAAgB,QAK3B;AAED,MAAM,UAAU,sBAAsB,CACpC,OAAgC;IAEhC,QAAQ,OAAO,EAAE,CAAC;QAChB,KAAK,uBAAuB,CAAC,WAAW;YACtC,OAAO,gBAAgB,CAAC,MAAM,CAAC;QACjC,KAAK,uBAAuB,CAAC,aAAa,CAAC;QAC3C,KAAK,uBAAuB,CAAC,mBAAmB,CAAC;QACjD,KAAK,uBAAuB,CAAC,iBAAiB;YAC5C,OAAO,gBAAgB,CAAC,WAAW,CAAC;QACtC,KAAK,uBAAuB,CAAC,gBAAgB,CAAC;QAC9C,KAAK,uBAAuB,CAAC,WAAW;YACtC,OAAO,gBAAgB,CAAC,MAAM,CAAC;QACjC,KAAK,uBAAuB,CAAC,MAAM,CAAC;QACpC;YACE,OAAO,gBAAgB,CAAC,MAAM,CAAC;IACnC,CAAC;AACH,CAAC"}