@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.
- package/dist/.last_build +0 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.js +15 -0
- package/dist/index.js.map +1 -0
- package/dist/src/debug/ConfigurationManager.d.ts +33 -0
- package/dist/src/debug/ConfigurationManager.js +226 -0
- package/dist/src/debug/ConfigurationManager.js.map +1 -0
- package/dist/src/debug/DebugLogger.d.ts +46 -0
- package/dist/src/debug/DebugLogger.js +286 -0
- package/dist/src/debug/DebugLogger.js.map +1 -0
- package/dist/src/debug/FileOutput.d.ts +28 -0
- package/dist/src/debug/FileOutput.js +190 -0
- package/dist/src/debug/FileOutput.js.map +1 -0
- package/dist/src/debug/MockConfigurationManager.d.ts +28 -0
- package/dist/src/debug/MockConfigurationManager.js +45 -0
- package/dist/src/debug/MockConfigurationManager.js.map +1 -0
- package/dist/src/debug/MockFileOutput.d.ts +22 -0
- package/dist/src/debug/MockFileOutput.js +23 -0
- package/dist/src/debug/MockFileOutput.js.map +1 -0
- package/dist/src/debug/index.d.ts +10 -0
- package/dist/src/debug/index.js +11 -0
- package/dist/src/debug/index.js.map +1 -0
- package/dist/src/debug/types.d.ts +25 -0
- package/dist/src/debug/types.js +2 -0
- package/dist/src/debug/types.js.map +1 -0
- package/dist/src/internal/interfaces.d.ts +143 -0
- package/dist/src/internal/interfaces.js +37 -0
- package/dist/src/internal/interfaces.js.map +1 -0
- package/dist/src/telemetry/constants.d.ts +35 -0
- package/dist/src/telemetry/constants.js +36 -0
- package/dist/src/telemetry/constants.js.map +1 -0
- package/dist/src/telemetry/file-exporters.d.ts +28 -0
- package/dist/src/telemetry/file-exporters.js +89 -0
- package/dist/src/telemetry/file-exporters.js.map +1 -0
- package/dist/src/telemetry/index.d.ts +24 -0
- package/dist/src/telemetry/index.js +24 -0
- package/dist/src/telemetry/index.js.map +1 -0
- package/dist/src/telemetry/loggers.d.ts +46 -0
- package/dist/src/telemetry/loggers.js +543 -0
- package/dist/src/telemetry/loggers.js.map +1 -0
- package/dist/src/telemetry/metrics.d.ts +24 -0
- package/dist/src/telemetry/metrics.js +153 -0
- package/dist/src/telemetry/metrics.js.map +1 -0
- package/dist/src/telemetry/sdk.d.ts +10 -0
- package/dist/src/telemetry/sdk.js +138 -0
- package/dist/src/telemetry/sdk.js.map +1 -0
- package/dist/src/telemetry/tool-call-decision.d.ts +13 -0
- package/dist/src/telemetry/tool-call-decision.js +30 -0
- package/dist/src/telemetry/tool-call-decision.js.map +1 -0
- package/dist/src/telemetry/types.d.ts +380 -0
- package/dist/src/telemetry/types.js +620 -0
- package/dist/src/telemetry/types.js.map +1 -0
- package/dist/src/telemetry/uiTelemetry.d.ts +104 -0
- package/dist/src/telemetry/uiTelemetry.js +183 -0
- package/dist/src/telemetry/uiTelemetry.js.map +1 -0
- package/dist/src/utils/debugLogger.d.ts +10 -0
- package/dist/src/utils/debugLogger.js +11 -0
- package/dist/src/utils/debugLogger.js.map +1 -0
- package/dist/src/utils/index.d.ts +9 -0
- package/dist/src/utils/index.js +10 -0
- package/dist/src/utils/index.js.map +1 -0
- package/dist/src/utils/paths.d.ts +10 -0
- package/dist/src/utils/paths.js +11 -0
- package/dist/src/utils/paths.js.map +1 -0
- package/dist/src/utils/safeJsonStringify.d.ts +13 -0
- package/dist/src/utils/safeJsonStringify.js +25 -0
- package/dist/src/utils/safeJsonStringify.js.map +1 -0
- package/dist/src/utils/session.d.ts +6 -0
- package/dist/src/utils/session.js +8 -0
- package/dist/src/utils/session.js.map +1 -0
- 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":"AAAA;;;;GAIG;AAEH,OAAO,EACL,OAAO,EAEP,SAAS,GAIV,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,YAAY,EACZ,sBAAsB,EACtB,wBAAwB,EACxB,wBAAwB,EACxB,0BAA0B,EAC1B,kBAAkB,EAClB,oBAAoB,EACpB,2BAA2B,GAC5B,MAAM,gBAAgB,CAAC;AAOxB,MAAM,CAAN,IAAY,aAIX;AAJD,WAAY,aAAa;IACvB,kCAAiB,CAAA;IACjB,8BAAa,CAAA;IACb,kCAAiB,CAAA;AACnB,CAAC,EAJW,aAAa,KAAb,aAAa,QAIxB;AAED,IAAI,QAA2B,CAAC;AAChC,IAAI,eAAoC,CAAC;AACzC,IAAI,wBAA+C,CAAC;AACpD,IAAI,iBAAsC,CAAC;AAC3C,IAAI,0BAAiD,CAAC;AACtD,IAAI,iBAAsC,CAAC;AAC3C,IAAI,oBAAyC,CAAC;AAC9C,IAAI,oBAAoB,GAAG,KAAK,CAAC;AAEjC,SAAS,mBAAmB,CAAC,MAAsB;IACjD,OAAO;QACL,YAAY,EAAE,MAAM,CAAC,YAAY,EAAE;KACpC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,QAAQ;IACtB,QAAQ,KAAK,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;IAC5C,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,MAAuB;IACvD,IAAI,oBAAoB;QAAE,OAAO;IAEjC,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;IACzB,IAAI,CAAC,KAAK;QAAE,OAAO;IAEnB,eAAe,GAAG,KAAK,CAAC,aAAa,CAAC,sBAAsB,EAAE;QAC5D,WAAW,EAAE,yDAAyD;QACtE,SAAS,EAAE,SAAS,CAAC,GAAG;KACzB,CAAC,CAAC;IACH,wBAAwB,GAAG,KAAK,CAAC,eAAe,CAAC,wBAAwB,EAAE;QACzE,WAAW,EAAE,wCAAwC;QACrD,IAAI,EAAE,IAAI;QACV,SAAS,EAAE,SAAS,CAAC,GAAG;KACzB,CAAC,CAAC;IACH,iBAAiB,GAAG,KAAK,CAAC,aAAa,CAAC,wBAAwB,EAAE;QAChE,WAAW,EAAE,kDAAkD;QAC/D,SAAS,EAAE,SAAS,CAAC,GAAG;KACzB,CAAC,CAAC;IACH,0BAA0B,GAAG,KAAK,CAAC,eAAe,CAChD,0BAA0B,EAC1B;QACE,WAAW,EAAE,0CAA0C;QACvD,IAAI,EAAE,IAAI;QACV,SAAS,EAAE,SAAS,CAAC,GAAG;KACzB,CACF,CAAC;IACF,iBAAiB,GAAG,KAAK,CAAC,aAAa,CAAC,kBAAkB,EAAE;QAC1D,WAAW,EAAE,yCAAyC;QACtD,SAAS,EAAE,SAAS,CAAC,GAAG;KACzB,CAAC,CAAC;IACH,oBAAoB,GAAG,KAAK,CAAC,aAAa,CAAC,2BAA2B,EAAE;QACtE,WAAW,EAAE,gDAAgD;QAC7D,SAAS,EAAE,SAAS,CAAC,GAAG;KACzB,CAAC,CAAC;IACH,MAAM,cAAc,GAAG,KAAK,CAAC,aAAa,CAAC,oBAAoB,EAAE;QAC/D,WAAW,EAAE,gCAAgC;QAC7C,SAAS,EAAE,SAAS,CAAC,GAAG;KACzB,CAAC,CAAC;IACH,cAAc,CAAC,GAAG,CAAC,CAAC,EAAE,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAC;IACnD,oBAAoB,GAAG,IAAI,CAAC;AAC9B,CAAC;AAED,MAAM,UAAU,qBAAqB,CACnC,MAAsB,EACtB,YAAoB,EACpB,UAAkB,EAClB,OAAgB,EAChB,QAAyD,EACzD,SAA4B;IAE5B,IAAI,CAAC,eAAe,IAAI,CAAC,wBAAwB,IAAI,CAAC,oBAAoB;QACxE,OAAO;IAET,MAAM,gBAAgB,GAAe;QACnC,GAAG,mBAAmB,CAAC,MAAM,CAAC;QAC9B,aAAa,EAAE,YAAY;QAC3B,OAAO;QACP,QAAQ;QACR,SAAS;KACV,CAAC;IACF,eAAe,CAAC,GAAG,CAAC,CAAC,EAAE,gBAAgB,CAAC,CAAC;IACzC,wBAAwB,CAAC,MAAM,CAAC,UAAU,EAAE;QAC1C,GAAG,mBAAmB,CAAC,MAAM,CAAC;QAC9B,aAAa,EAAE,YAAY;KAC5B,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,uBAAuB,CACrC,MAAuB,EACvB,KAAa,EACb,UAAkB,EAClB,IAAuD;IAEvD,IAAI,CAAC,iBAAiB,IAAI,CAAC,oBAAoB;QAAE,OAAO;IACxD,iBAAiB,CAAC,GAAG,CAAC,UAAU,EAAE;QAChC,GAAG,mBAAmB,CAAC,MAAM,CAAC;QAC9B,KAAK;QACL,IAAI;KACL,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,wBAAwB,CACtC,MAAuB,EACvB,KAAa,EACb,UAAkB,EAClB,UAA4B,EAC5B,KAAc;IAEd,IACE,CAAC,iBAAiB;QAClB,CAAC,0BAA0B;QAC3B,CAAC,oBAAoB;QAErB,OAAO;IACT,MAAM,gBAAgB,GAAe;QACnC,GAAG,mBAAmB,CAAC,MAAM,CAAC;QAC9B,KAAK;QACL,WAAW,EAAE,UAAU,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;KACpD,CAAC;IACF,iBAAiB,CAAC,GAAG,CAAC,CAAC,EAAE,gBAAgB,CAAC,CAAC;IAC3C,0BAA0B,CAAC,MAAM,CAAC,UAAU,EAAE;QAC5C,GAAG,mBAAmB,CAAC,MAAM,CAAC;QAC9B,KAAK;KACN,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,qBAAqB,CACnC,MAAuB,EACvB,KAAa,EACb,UAAkB,EAClB,UAA4B,EAC5B,SAAkB;IAElB,IACE,CAAC,iBAAiB;QAClB,CAAC,0BAA0B;QAC3B,CAAC,oBAAoB;QAErB,OAAO;IACT,MAAM,gBAAgB,GAAe;QACnC,GAAG,mBAAmB,CAAC,MAAM,CAAC;QAC9B,KAAK;QACL,WAAW,EAAE,UAAU,IAAI,OAAO;QAClC,UAAU,EAAE,SAAS,IAAI,SAAS;KACnC,CAAC;IACF,iBAAiB,CAAC,GAAG,CAAC,CAAC,EAAE,gBAAgB,CAAC,CAAC;IAC3C,0BAA0B,CAAC,MAAM,CAAC,UAAU,EAAE;QAC5C,GAAG,mBAAmB,CAAC,MAAM,CAAC;QAC9B,KAAK;KACN,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,yBAAyB,CACvC,MAAuB,EACvB,SAAwB,EACxB,KAAc,EACd,QAAiB,EACjB,SAAkB,EAClB,QAAmB;IAEnB,IAAI,CAAC,oBAAoB,IAAI,CAAC,oBAAoB;QAAE,OAAO;IAC3D,MAAM,UAAU,GAAe;QAC7B,GAAG,mBAAmB,CAAC,MAAM,CAAC;QAC9B,SAAS;KACV,CAAC;IACF,IAAI,KAAK,KAAK,SAAS;QAAE,UAAU,CAAC,KAAK,GAAG,KAAK,CAAC;IAClD,IAAI,QAAQ,KAAK,SAAS;QAAE,UAAU,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3D,IAAI,SAAS,KAAK,SAAS;QAAE,UAAU,CAAC,SAAS,GAAG,SAAS,CAAC;IAC9D,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,UAAU,CAAC,cAAc,GAAG,QAAQ,CAAC,cAAc,CAAC;QACpD,UAAU,CAAC,gBAAgB,GAAG,QAAQ,CAAC,gBAAgB,CAAC;QACxD,UAAU,CAAC,gBAAgB,GAAG,QAAQ,CAAC,gBAAgB,CAAC;QACxD,UAAU,CAAC,kBAAkB,GAAG,QAAQ,CAAC,kBAAkB,CAAC;IAC9D,CAAC;IACD,oBAAoB,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;AAC1C,CAAC;AAED,MAAM,UAAU,yBAAyB,CACvC,OAAwB,EACxB,MAA6D;IAE7D,uDAAuD;IACvD,wEAAwE;AAC1E,CAAC"}
|
|
@@ -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"}
|