@agentuity/telemetry 3.0.0-alpha.0

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 (87) hide show
  1. package/dist/console.d.ts +33 -0
  2. package/dist/console.d.ts.map +1 -0
  3. package/dist/console.js +86 -0
  4. package/dist/console.js.map +1 -0
  5. package/dist/exporters/index.d.ts +4 -0
  6. package/dist/exporters/index.d.ts.map +1 -0
  7. package/dist/exporters/index.js +4 -0
  8. package/dist/exporters/index.js.map +1 -0
  9. package/dist/exporters/jsonl-log-exporter.d.ts +36 -0
  10. package/dist/exporters/jsonl-log-exporter.d.ts.map +1 -0
  11. package/dist/exporters/jsonl-log-exporter.js +103 -0
  12. package/dist/exporters/jsonl-log-exporter.js.map +1 -0
  13. package/dist/exporters/jsonl-metric-exporter.d.ts +40 -0
  14. package/dist/exporters/jsonl-metric-exporter.d.ts.map +1 -0
  15. package/dist/exporters/jsonl-metric-exporter.js +104 -0
  16. package/dist/exporters/jsonl-metric-exporter.js.map +1 -0
  17. package/dist/exporters/jsonl-trace-exporter.d.ts +36 -0
  18. package/dist/exporters/jsonl-trace-exporter.d.ts.map +1 -0
  19. package/dist/exporters/jsonl-trace-exporter.js +111 -0
  20. package/dist/exporters/jsonl-trace-exporter.js.map +1 -0
  21. package/dist/fetch.d.ts +12 -0
  22. package/dist/fetch.d.ts.map +1 -0
  23. package/dist/fetch.js +82 -0
  24. package/dist/fetch.js.map +1 -0
  25. package/dist/globals.d.ts +9 -0
  26. package/dist/globals.d.ts.map +1 -0
  27. package/dist/globals.js +13 -0
  28. package/dist/globals.js.map +1 -0
  29. package/dist/http.d.ts +16 -0
  30. package/dist/http.d.ts.map +1 -0
  31. package/dist/http.js +44 -0
  32. package/dist/http.js.map +1 -0
  33. package/dist/index.d.ts +50 -0
  34. package/dist/index.d.ts.map +1 -0
  35. package/dist/index.js +62 -0
  36. package/dist/index.js.map +1 -0
  37. package/dist/logger/console.d.ts +69 -0
  38. package/dist/logger/console.d.ts.map +1 -0
  39. package/dist/logger/console.js +278 -0
  40. package/dist/logger/console.js.map +1 -0
  41. package/dist/logger/index.d.ts +4 -0
  42. package/dist/logger/index.d.ts.map +1 -0
  43. package/dist/logger/index.js +3 -0
  44. package/dist/logger/index.js.map +1 -0
  45. package/dist/logger/internal.d.ts +79 -0
  46. package/dist/logger/internal.d.ts.map +1 -0
  47. package/dist/logger/internal.js +133 -0
  48. package/dist/logger/internal.js.map +1 -0
  49. package/dist/logger/user.d.ts +8 -0
  50. package/dist/logger/user.d.ts.map +1 -0
  51. package/dist/logger/user.js +7 -0
  52. package/dist/logger/user.js.map +1 -0
  53. package/dist/logger/util.d.ts +11 -0
  54. package/dist/logger/util.d.ts.map +1 -0
  55. package/dist/logger/util.js +77 -0
  56. package/dist/logger/util.js.map +1 -0
  57. package/dist/logger.d.ts +40 -0
  58. package/dist/logger.d.ts.map +1 -0
  59. package/dist/logger.js +259 -0
  60. package/dist/logger.js.map +1 -0
  61. package/dist/telemetry.d.ts +71 -0
  62. package/dist/telemetry.d.ts.map +1 -0
  63. package/dist/telemetry.js +274 -0
  64. package/dist/telemetry.js.map +1 -0
  65. package/dist/tracestate.d.ts +44 -0
  66. package/dist/tracestate.d.ts.map +1 -0
  67. package/dist/tracestate.js +84 -0
  68. package/dist/tracestate.js.map +1 -0
  69. package/package.json +58 -0
  70. package/src/console.ts +91 -0
  71. package/src/exporters/README.md +217 -0
  72. package/src/exporters/index.ts +3 -0
  73. package/src/exporters/jsonl-log-exporter.ts +113 -0
  74. package/src/exporters/jsonl-metric-exporter.ts +120 -0
  75. package/src/exporters/jsonl-trace-exporter.ts +121 -0
  76. package/src/fetch.ts +105 -0
  77. package/src/globals.ts +18 -0
  78. package/src/http.ts +53 -0
  79. package/src/index.ts +82 -0
  80. package/src/logger/console.ts +322 -0
  81. package/src/logger/index.ts +3 -0
  82. package/src/logger/internal.ts +165 -0
  83. package/src/logger/user.ts +15 -0
  84. package/src/logger/util.ts +80 -0
  85. package/src/logger.ts +285 -0
  86. package/src/telemetry.ts +403 -0
  87. package/src/tracestate.ts +108 -0
package/dist/logger.js ADDED
@@ -0,0 +1,259 @@
1
+ import { format } from 'node:util';
2
+ import { safeStringify } from '@agentuity/core';
3
+ import * as LogsAPI from '@opentelemetry/api-logs';
4
+ import ConsoleLogger from './logger/console';
5
+ /**
6
+ * Reference to the original console object before patching.
7
+ */
8
+ export const __originalConsole = Object.create(console);
9
+ export class OtelLogger {
10
+ delegate;
11
+ context;
12
+ logger;
13
+ logLevel;
14
+ constructor(useConsole, delegate, context, logLevel) {
15
+ this.delegate = delegate;
16
+ this.context = context;
17
+ this.logLevel = logLevel ?? 'info';
18
+ this.logger = useConsole ? new ConsoleLogger(context, false, this.logLevel) : undefined;
19
+ }
20
+ formatMessage(message) {
21
+ if (typeof message === 'string') {
22
+ return message;
23
+ }
24
+ try {
25
+ return safeStringify(message);
26
+ }
27
+ catch {
28
+ // Handle circular references or other unknown stringification errors
29
+ return String(message);
30
+ }
31
+ }
32
+ getAttributes() {
33
+ return this.context;
34
+ }
35
+ emit(severityNumber, severityText, body) {
36
+ const attributes = this.getAttributes();
37
+ try {
38
+ this.delegate.emit({
39
+ severityNumber,
40
+ severityText,
41
+ body,
42
+ attributes: attributes,
43
+ });
44
+ }
45
+ catch (error) {
46
+ // Log error to console if available, but don't fail the entire operation
47
+ this.logger?.error('Failed to emit log to OTLP instance:', error);
48
+ }
49
+ }
50
+ shouldLog(level) {
51
+ switch (this.logLevel) {
52
+ case 'trace':
53
+ return true;
54
+ case 'debug':
55
+ return (level === LogsAPI.SeverityNumber.DEBUG ||
56
+ level === LogsAPI.SeverityNumber.INFO ||
57
+ level === LogsAPI.SeverityNumber.WARN ||
58
+ level === LogsAPI.SeverityNumber.ERROR);
59
+ case 'info':
60
+ return (level === LogsAPI.SeverityNumber.INFO ||
61
+ level === LogsAPI.SeverityNumber.WARN ||
62
+ level === LogsAPI.SeverityNumber.ERROR);
63
+ case 'warn':
64
+ return level === LogsAPI.SeverityNumber.WARN || level === LogsAPI.SeverityNumber.ERROR;
65
+ case 'error':
66
+ return level === LogsAPI.SeverityNumber.ERROR;
67
+ }
68
+ return false;
69
+ }
70
+ trace(message, ...args) {
71
+ if (!this.shouldLog(LogsAPI.SeverityNumber.TRACE)) {
72
+ return;
73
+ }
74
+ this.logger?.trace(message, ...args);
75
+ let body;
76
+ try {
77
+ body = format(this.formatMessage(message), ...args);
78
+ }
79
+ catch {
80
+ // Fallback if format causes recursion
81
+ body = `${this.formatMessage(message)} ${args.map((arg) => String(arg)).join(' ')}`;
82
+ }
83
+ this.emit(LogsAPI.SeverityNumber.TRACE, 'TRACE', body);
84
+ }
85
+ debug(message, ...args) {
86
+ if (!this.shouldLog(LogsAPI.SeverityNumber.DEBUG)) {
87
+ return;
88
+ }
89
+ this.logger?.debug(message, ...args);
90
+ let body;
91
+ try {
92
+ body = format(this.formatMessage(message), ...args);
93
+ }
94
+ catch {
95
+ // Fallback if format causes recursion
96
+ body = `${this.formatMessage(message)} ${args.map((arg) => String(arg)).join(' ')}`;
97
+ }
98
+ this.emit(LogsAPI.SeverityNumber.DEBUG, 'DEBUG', body);
99
+ }
100
+ info(message, ...args) {
101
+ if (!this.shouldLog(LogsAPI.SeverityNumber.INFO)) {
102
+ return;
103
+ }
104
+ this.logger?.info(message, ...args);
105
+ let body;
106
+ try {
107
+ body = format(this.formatMessage(message), ...args);
108
+ }
109
+ catch {
110
+ // Fallback if format causes recursion
111
+ body = `${this.formatMessage(message)} ${args.map((arg) => String(arg)).join(' ')}`;
112
+ }
113
+ this.emit(LogsAPI.SeverityNumber.INFO, 'INFO', body);
114
+ }
115
+ warn(message, ...args) {
116
+ if (!this.shouldLog(LogsAPI.SeverityNumber.WARN)) {
117
+ return;
118
+ }
119
+ this.logger?.warn(message, ...args);
120
+ let body;
121
+ try {
122
+ body = format(this.formatMessage(message), ...args);
123
+ }
124
+ catch {
125
+ // Fallback if format causes recursion
126
+ body = `${this.formatMessage(message)} ${args.map((arg) => String(arg)).join(' ')}`;
127
+ }
128
+ this.emit(LogsAPI.SeverityNumber.WARN, 'WARN', body);
129
+ }
130
+ error(message, ...args) {
131
+ if (!this.shouldLog(LogsAPI.SeverityNumber.ERROR)) {
132
+ return;
133
+ }
134
+ this.logger?.error(message, ...args);
135
+ let body;
136
+ try {
137
+ body = format(this.formatMessage(message), ...args);
138
+ }
139
+ catch {
140
+ // Fallback if format causes recursion
141
+ body = `${this.formatMessage(message)} ${args.map((arg) => String(arg)).join(' ')}`;
142
+ }
143
+ this.emit(LogsAPI.SeverityNumber.ERROR, 'ERROR', body);
144
+ }
145
+ fatal(message, ...args) {
146
+ this.error(message, ...args);
147
+ process.exit(1);
148
+ }
149
+ child(opts) {
150
+ return new OtelLogger(!!this.logger, this.delegate, {
151
+ ...(this.context ?? {}),
152
+ ...opts,
153
+ }, this.logLevel);
154
+ }
155
+ }
156
+ /**
157
+ * Creates a logger that integrates with OpenTelemetry
158
+ *
159
+ * @param useConsole - Whether to also log to the console
160
+ * @param context - Additional context to include with log records
161
+ * @returns A logger instance
162
+ */
163
+ export function createLogger(useConsole, context, logLevel) {
164
+ const delegate = LogsAPI.logs.getLogger('default', undefined, {
165
+ scopeAttributes: context,
166
+ });
167
+ return new OtelLogger(useConsole, delegate, context, logLevel);
168
+ }
169
+ /**
170
+ * Patches the global console object to integrate with OpenTelemetry logging
171
+ *
172
+ * @param attributes - Attributes to include with all console log records
173
+ */
174
+ export function patchConsole(enabled, attributes, logLevel) {
175
+ if (!enabled) {
176
+ return;
177
+ }
178
+ const _patch = { ...__originalConsole };
179
+ const delegate = createLogger(true, attributes, logLevel);
180
+ // Patch individual console methods instead of reassigning the whole object
181
+ _patch.log = (...args) => {
182
+ delegate.info(args[0], ...args.slice(1));
183
+ };
184
+ _patch.error = (...args) => {
185
+ delegate.error(args[0], ...args.slice(1));
186
+ };
187
+ _patch.warn = (...args) => {
188
+ delegate.warn(args[0], ...args.slice(1));
189
+ };
190
+ _patch.debug = (...args) => {
191
+ delegate.debug(args[0], ...args.slice(1));
192
+ };
193
+ _patch.info = (...args) => {
194
+ delegate.info(args[0], ...args.slice(1));
195
+ };
196
+ _patch.dir = (...args) => {
197
+ let msg = '';
198
+ if (args.length === 1) {
199
+ msg = format(args[0]);
200
+ }
201
+ else if (args.length >= 2) {
202
+ msg = format(args[0], args[1]);
203
+ }
204
+ else {
205
+ msg = safeStringify(args);
206
+ }
207
+ delegate.debug(msg);
208
+ };
209
+ _patch.dirxml = (...args) => {
210
+ delegate.debug('dirxml:', ...args);
211
+ };
212
+ _patch.table = (...args) => {
213
+ delegate.debug('table:', ...args);
214
+ };
215
+ _patch.trace = (...args) => {
216
+ delegate.debug(args[0], ...args.slice(1));
217
+ };
218
+ _patch.group = (...args) => {
219
+ delegate.debug('group:', ...args);
220
+ };
221
+ _patch.groupCollapsed = (...args) => {
222
+ delegate.debug('groupCollapsed:', ...args);
223
+ };
224
+ _patch.groupEnd = () => {
225
+ delegate.debug('groupEnd');
226
+ };
227
+ _patch.clear = () => {
228
+ /* no-op */
229
+ };
230
+ _patch.count = (...args) => {
231
+ delegate.debug('count:', ...args);
232
+ };
233
+ _patch.countReset = (...args) => {
234
+ delegate.debug('countReset:', ...args);
235
+ };
236
+ _patch.assert = (condition, ...args) => {
237
+ if (!condition) {
238
+ delegate.error('assertion failed:', ...args);
239
+ }
240
+ };
241
+ _patch.time = (...args) => {
242
+ delegate.debug('time:', ...args);
243
+ };
244
+ _patch.timeLog = (...args) => {
245
+ delegate.debug('timeLog:', ...args);
246
+ };
247
+ _patch.timeEnd = (...args) => {
248
+ delegate.debug('timeEnd:', ...args);
249
+ };
250
+ _patch.profile = (...args) => {
251
+ delegate.debug('profile:', ...args);
252
+ };
253
+ _patch.profileEnd = (...args) => {
254
+ delegate.debug('profileEnd:', ...args);
255
+ };
256
+ // biome-ignore lint/suspicious/noGlobalAssign: intentionally replacing console with instrumented version
257
+ console = globalThis.console = _patch;
258
+ }
259
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,71 @@
1
+ import type { SpanProcessor } from '@opentelemetry/sdk-trace-base';
2
+ import { type Meter, type Tracer } from '@opentelemetry/api';
3
+ import type { Resource } from '@opentelemetry/resources';
4
+ import type { Logger } from './logger';
5
+ import type { LogLevel } from '@agentuity/core';
6
+ /**
7
+ * Configuration for Telemetry/OTel initialization
8
+ */
9
+ export interface TelemetryConfig {
10
+ /** Service name (default: AGENTUITY_APP_NAME env) */
11
+ name?: string;
12
+ /** Service version (default: AGENTUITY_APP_VERSION env) */
13
+ version?: string;
14
+ /** OTel collector URL (default: derived from AGENTUITY_REGION) */
15
+ url?: string;
16
+ /** Bearer token for auth (default: AGENTUITY_SDK_KEY) */
17
+ bearerToken?: string;
18
+ /** Organization ID (default: AGENTUITY_CLOUD_ORG_ID) */
19
+ orgId?: string;
20
+ /** Project ID (default: AGENTUITY_CLOUD_PROJECT_ID) */
21
+ projectId?: string;
22
+ /** Deployment ID (default: AGENTUITY_CLOUD_DEPLOYMENT_ID) */
23
+ deploymentId?: string;
24
+ /** Environment (default: AGENTUITY_ENVIRONMENT or NODE_ENV) */
25
+ environment?: string;
26
+ /** CLI version (default: AGENTUITY_CLI_VERSION) */
27
+ cliVersion?: string;
28
+ /** SDK version */
29
+ sdkVersion?: string;
30
+ /** Development mode (default: AGENTUITY_SDK_DEV_MODE) */
31
+ devmode?: boolean;
32
+ /** Custom span processors */
33
+ spanProcessors?: Array<SpanProcessor>;
34
+ /** Log level (default: 'warn') */
35
+ logLevel?: LogLevel;
36
+ /** JSONL export base path (default: AGENTUITY_CLOUD_EXPORT_DIR) */
37
+ jsonlBasePath?: string;
38
+ }
39
+ /**
40
+ * Response from Telemetry initialization
41
+ */
42
+ export interface TelemetryResponse {
43
+ tracer: Tracer;
44
+ meter: Meter;
45
+ logger: Logger;
46
+ shutdown: () => Promise<void>;
47
+ }
48
+ export declare const createResource: (config: Required<TelemetryConfig>) => Resource;
49
+ /**
50
+ * Registers and initializes Telemetry with the specified configuration.
51
+ *
52
+ * Idempotent: if called again (e.g. during bun --hot reload), the previous
53
+ * instance is shut down before creating a new one.
54
+ *
55
+ * @param config - Optional configuration overrides (defaults from env vars)
56
+ * @returns An object containing the tracer, logger, and shutdown function
57
+ */
58
+ export declare function registerTelemetry(config?: TelemetryConfig): TelemetryResponse;
59
+ /**
60
+ * Alias for registerTelemetry (shorter name)
61
+ */
62
+ export declare const register: typeof registerTelemetry;
63
+ /**
64
+ * Get the current telemetry instance (or undefined if not initialized)
65
+ */
66
+ export declare function getTelemetry(): TelemetryResponse | undefined;
67
+ /**
68
+ * Ensure telemetry is initialized (auto-init from env vars if needed)
69
+ */
70
+ export declare function ensureInitialized(): TelemetryResponse;
71
+ //# sourceMappingURL=telemetry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"telemetry.d.ts","sourceRoot":"","sources":["../src/telemetry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAEnE,OAAsB,EAAE,KAAK,KAAK,EAAwB,KAAK,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAclG,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAUzD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAIvC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAKhD;;GAEG;AACH,MAAM,WAAW,eAAe;IAC/B,qDAAqD;IACrD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,2DAA2D;IAC3D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,kEAAkE;IAClE,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,yDAAyD;IACzD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,wDAAwD;IACxD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,uDAAuD;IACvD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,6DAA6D;IAC7D,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,+DAA+D;IAC/D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mDAAmD;IACnD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,kBAAkB;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,yDAAyD;IACzD,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,6BAA6B;IAC7B,cAAc,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC;IACtC,kCAAkC;IAClC,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,mEAAmE;IACnE,aAAa,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,KAAK,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9B;AAKD,eAAO,MAAM,cAAc,GAAI,QAAQ,QAAQ,CAAC,eAAe,CAAC,KAAG,QAwBlE,CAAC;AAuEF;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,CAAC,EAAE,eAAe,GAAG,iBAAiB,CAiM7E;AAED;;GAEG;AACH,eAAO,MAAM,QAAQ,0BAAoB,CAAC;AAE1C;;GAEG;AACH,wBAAgB,YAAY,IAAI,iBAAiB,GAAG,SAAS,CAE5D;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,iBAAiB,CAMrD"}
@@ -0,0 +1,274 @@
1
+ import { BatchSpanProcessor, SimpleSpanProcessor } from '@opentelemetry/sdk-trace-base';
2
+ import opentelemetry, { metrics, propagation } from '@opentelemetry/api';
3
+ import * as LogsAPI from '@opentelemetry/api-logs';
4
+ import { getNodeAutoInstrumentations } from '@opentelemetry/auto-instrumentations-node';
5
+ import { CompositePropagator, W3CBaggagePropagator, W3CTraceContextPropagator, } from '@opentelemetry/core';
6
+ import { OTLPLogExporter } from '@opentelemetry/exporter-logs-otlp-http';
7
+ import { OTLPMetricExporter } from '@opentelemetry/exporter-metrics-otlp-http';
8
+ import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-http';
9
+ import { HostMetrics } from '@opentelemetry/host-metrics';
10
+ import { CompressionAlgorithm } from '@opentelemetry/otlp-exporter-base';
11
+ import { resourceFromAttributes } from '@opentelemetry/resources';
12
+ import { BatchLogRecordProcessor, LoggerProvider, SimpleLogRecordProcessor, } from '@opentelemetry/sdk-logs';
13
+ import { MeterProvider, PeriodicExportingMetricReader } from '@opentelemetry/sdk-metrics';
14
+ import { NodeSDK } from '@opentelemetry/sdk-node';
15
+ import { ATTR_SERVICE_NAME, ATTR_SERVICE_VERSION } from '@opentelemetry/semantic-conventions';
16
+ import { ConsoleLogRecordExporter, DebugSpanExporter } from './console';
17
+ import { instrumentFetch } from './fetch';
18
+ import { createLogger, patchConsole } from './logger';
19
+ import { JSONLLogExporter, JSONLTraceExporter, JSONLMetricExporter } from './exporters';
20
+ import { telemetry as telemetryGlobal } from './globals';
21
+ import { getServiceUrls } from '@agentuity/server';
22
+ const devmodeExportInterval = 1_000; // 1 second
23
+ const productionExportInterval = 10_000; // 10 seconds
24
+ export const createResource = (config) => {
25
+ const { name, version, orgId, projectId, deploymentId, environment, devmode, cliVersion, sdkVersion, } = config;
26
+ return resourceFromAttributes({
27
+ [ATTR_SERVICE_NAME]: name,
28
+ [ATTR_SERVICE_VERSION]: version,
29
+ '@agentuity/orgId': orgId,
30
+ '@agentuity/projectId': projectId,
31
+ '@agentuity/deploymentId': deploymentId,
32
+ '@agentuity/env': environment,
33
+ '@agentuity/devmode': devmode,
34
+ '@agentuity/sdkVersion': sdkVersion,
35
+ '@agentuity/cliVersion': cliVersion,
36
+ });
37
+ };
38
+ const createLoggerProvider = ({ url, headers, resource, jsonlBasePath, useConsoleExporters, logLevel: _logLevel, }) => {
39
+ let processor;
40
+ let exporter;
41
+ if (useConsoleExporters) {
42
+ processor = new SimpleLogRecordProcessor(new ConsoleLogRecordExporter(true));
43
+ }
44
+ else if (jsonlBasePath) {
45
+ exporter = new JSONLLogExporter(jsonlBasePath);
46
+ processor = new BatchLogRecordProcessor(exporter);
47
+ }
48
+ else if (url) {
49
+ const otlpExporter = new OTLPLogExporter({
50
+ url: `${url}/v1/logs`,
51
+ headers,
52
+ compression: CompressionAlgorithm.GZIP,
53
+ timeoutMillis: 10_000,
54
+ });
55
+ exporter = otlpExporter;
56
+ processor = new BatchLogRecordProcessor(otlpExporter);
57
+ }
58
+ else {
59
+ processor = new SimpleLogRecordProcessor(new ConsoleLogRecordExporter(false));
60
+ }
61
+ const provider = new LoggerProvider({
62
+ resource,
63
+ processors: [processor],
64
+ });
65
+ LogsAPI.logs.setGlobalLoggerProvider(provider);
66
+ return { processor, provider, exporter };
67
+ };
68
+ /**
69
+ * Get configuration from environment variables
70
+ */
71
+ function getConfigFromEnv() {
72
+ const region = process.env.AGENTUITY_REGION ?? 'usc';
73
+ const serviceUrls = getServiceUrls(region);
74
+ return {
75
+ name: process.env.AGENTUITY_APP_NAME ?? 'agentuity-app',
76
+ version: process.env.AGENTUITY_APP_VERSION ?? '1.0.0',
77
+ url: serviceUrls.otel,
78
+ bearerToken: process.env.AGENTUITY_OTLP_BEARER_TOKEN ?? process.env.AGENTUITY_SDK_KEY ?? '',
79
+ orgId: process.env.AGENTUITY_CLOUD_ORG_ID ?? 'unknown',
80
+ projectId: process.env.AGENTUITY_CLOUD_PROJECT_ID ?? 'unknown',
81
+ deploymentId: process.env.AGENTUITY_CLOUD_DEPLOYMENT_ID ?? 'unknown',
82
+ environment: process.env.AGENTUITY_ENVIRONMENT ?? process.env.NODE_ENV ?? 'development',
83
+ cliVersion: process.env.AGENTUITY_CLI_VERSION ?? 'unknown',
84
+ sdkVersion: process.env.AGENTUITY_CLOUD_SDK_VERSION ?? 'unknown',
85
+ devmode: process.env.AGENTUITY_SDK_DEV_MODE === 'true',
86
+ logLevel: 'warn',
87
+ jsonlBasePath: process.env.AGENTUITY_CLOUD_EXPORT_DIR ?? '',
88
+ spanProcessors: [],
89
+ };
90
+ }
91
+ /**
92
+ * Registers and initializes Telemetry with the specified configuration.
93
+ *
94
+ * Idempotent: if called again (e.g. during bun --hot reload), the previous
95
+ * instance is shut down before creating a new one.
96
+ *
97
+ * @param config - Optional configuration overrides (defaults from env vars)
98
+ * @returns An object containing the tracer, logger, and shutdown function
99
+ */
100
+ export function registerTelemetry(config) {
101
+ // Shut down previous instance if this is a hot reload
102
+ const previous = telemetryGlobal.get();
103
+ if (previous) {
104
+ previous.shutdown().catch(() => { });
105
+ }
106
+ // Merge provided config with env defaults
107
+ const envConfig = getConfigFromEnv();
108
+ const mergedConfig = {
109
+ name: config?.name ?? envConfig.name,
110
+ version: config?.version ?? envConfig.version,
111
+ url: config?.url ?? envConfig.url,
112
+ bearerToken: config?.bearerToken ?? envConfig.bearerToken,
113
+ orgId: config?.orgId ?? envConfig.orgId,
114
+ projectId: config?.projectId ?? envConfig.projectId,
115
+ deploymentId: config?.deploymentId ?? envConfig.deploymentId,
116
+ environment: config?.environment ?? envConfig.environment,
117
+ cliVersion: config?.cliVersion ?? envConfig.cliVersion,
118
+ sdkVersion: config?.sdkVersion ?? envConfig.sdkVersion,
119
+ devmode: config?.devmode ?? envConfig.devmode,
120
+ logLevel: config?.logLevel ?? envConfig.logLevel,
121
+ jsonlBasePath: config?.jsonlBasePath ?? envConfig.jsonlBasePath,
122
+ spanProcessors: config?.spanProcessors ?? envConfig.spanProcessors,
123
+ };
124
+ const { url, name, version, bearerToken, environment, orgId, projectId, deploymentId, devmode, logLevel, jsonlBasePath, spanProcessors, } = mergedConfig;
125
+ let headers;
126
+ if (bearerToken) {
127
+ headers = { Authorization: `Bearer ${bearerToken}` };
128
+ }
129
+ // Use console debug exporters for local debugging
130
+ const useConsoleExporters = process.env.AGENTUITY_DEBUG_OTEL_CONSOLE === 'true';
131
+ const resource = createResource(mergedConfig);
132
+ const loggerProvider = createLoggerProvider({
133
+ url,
134
+ headers,
135
+ resource,
136
+ logLevel,
137
+ jsonlBasePath: jsonlBasePath || undefined,
138
+ useConsoleExporters,
139
+ });
140
+ const attrs = {
141
+ '@agentuity/orgId': orgId,
142
+ '@agentuity/projectId': projectId,
143
+ '@agentuity/deploymentId': deploymentId,
144
+ '@agentuity/env': environment,
145
+ '@agentuity/devmode': devmode,
146
+ '@agentuity/language': 'javascript',
147
+ };
148
+ const logger = createLogger(!!url, attrs, logLevel);
149
+ // Don't patch console if using console exporters (avoid double logging)
150
+ if (!useConsoleExporters) {
151
+ patchConsole(!!url, attrs, logLevel);
152
+ }
153
+ // Build trace exporter (OTLP or JSONL)
154
+ const traceExporter = jsonlBasePath
155
+ ? new JSONLTraceExporter(jsonlBasePath)
156
+ : url
157
+ ? new OTLPTraceExporter({
158
+ url: `${url}/v1/traces`,
159
+ headers,
160
+ keepAlive: true,
161
+ compression: CompressionAlgorithm.GZIP,
162
+ })
163
+ : undefined;
164
+ // Build metric exporter (OTLP or JSONL)
165
+ const metricExporter = jsonlBasePath
166
+ ? new JSONLMetricExporter(jsonlBasePath)
167
+ : url
168
+ ? new OTLPMetricExporter({
169
+ url: `${url}/v1/metrics`,
170
+ headers,
171
+ keepAlive: true,
172
+ compression: CompressionAlgorithm.GZIP,
173
+ })
174
+ : undefined;
175
+ // Create span processors
176
+ const allSpanProcessors = [];
177
+ if (traceExporter) {
178
+ allSpanProcessors.push(new BatchSpanProcessor(traceExporter));
179
+ }
180
+ if (useConsoleExporters) {
181
+ allSpanProcessors.push(new SimpleSpanProcessor(new DebugSpanExporter()));
182
+ }
183
+ // Add custom span processors
184
+ allSpanProcessors.push(...spanProcessors);
185
+ // Create metric readers
186
+ const sdkMetricReader = metricExporter
187
+ ? new PeriodicExportingMetricReader({
188
+ exporter: metricExporter,
189
+ exportTimeoutMillis: devmode ? devmodeExportInterval : productionExportInterval,
190
+ exportIntervalMillis: devmode ? devmodeExportInterval : productionExportInterval,
191
+ })
192
+ : undefined;
193
+ const hostMetricReader = metricExporter
194
+ ? new PeriodicExportingMetricReader({
195
+ exporter: metricExporter,
196
+ exportTimeoutMillis: devmode ? devmodeExportInterval : productionExportInterval,
197
+ exportIntervalMillis: devmode ? devmodeExportInterval : productionExportInterval,
198
+ })
199
+ : undefined;
200
+ const meterProvider = hostMetricReader
201
+ ? new MeterProvider({ resource, readers: [hostMetricReader] })
202
+ : undefined;
203
+ if (meterProvider) {
204
+ metrics.setGlobalMeterProvider(meterProvider);
205
+ }
206
+ const hostMetrics = meterProvider ? new HostMetrics({ meterProvider }) : undefined;
207
+ let running = false;
208
+ let instrumentationSDK;
209
+ if (url || useConsoleExporters) {
210
+ const propagator = new CompositePropagator({
211
+ propagators: [new W3CTraceContextPropagator(), new W3CBaggagePropagator()],
212
+ });
213
+ propagation.setGlobalPropagator(propagator);
214
+ instrumentFetch();
215
+ instrumentationSDK = new NodeSDK({
216
+ logRecordProcessor: loggerProvider.processor,
217
+ metricReader: sdkMetricReader,
218
+ instrumentations: [getNodeAutoInstrumentations()],
219
+ resource,
220
+ textMapPropagator: propagator,
221
+ spanProcessors: allSpanProcessors,
222
+ });
223
+ instrumentationSDK.start();
224
+ hostMetrics?.start();
225
+ logger.debug('Telemetry configured successfully');
226
+ logger.debug('Sending telemetry data to %s', url);
227
+ running = true;
228
+ }
229
+ const tracer = opentelemetry.trace.getTracer(name, version);
230
+ const meter = metrics.getMeter(name, version);
231
+ const shutdown = async () => {
232
+ if (running) {
233
+ running = false;
234
+ logger.debug('shutting down OpenTelemetry');
235
+ await loggerProvider.provider
236
+ .forceFlush()
237
+ .catch((e) => logger.warn('error in forceFlush. %s', e));
238
+ await loggerProvider.exporter
239
+ ?.shutdown()
240
+ .catch((e) => !devmode && logger.warn('error in shutdown of exporter. %s', e));
241
+ await instrumentationSDK
242
+ ?.shutdown()
243
+ .catch((e) => !devmode && logger.warn('error in shutdown of instrumentation. %s', e));
244
+ logger.debug('shut down OpenTelemetry');
245
+ }
246
+ };
247
+ if (url && bearerToken) {
248
+ logger.info('connected to Agentuity Agent Cloud');
249
+ }
250
+ const instance = { tracer, meter, logger, shutdown };
251
+ telemetryGlobal.set(instance);
252
+ return instance;
253
+ }
254
+ /**
255
+ * Alias for registerTelemetry (shorter name)
256
+ */
257
+ export const register = registerTelemetry;
258
+ /**
259
+ * Get the current telemetry instance (or undefined if not initialized)
260
+ */
261
+ export function getTelemetry() {
262
+ return telemetryGlobal.get();
263
+ }
264
+ /**
265
+ * Ensure telemetry is initialized (auto-init from env vars if needed)
266
+ */
267
+ export function ensureInitialized() {
268
+ let instance = telemetryGlobal.get();
269
+ if (!instance) {
270
+ instance = registerTelemetry();
271
+ }
272
+ return instance;
273
+ }
274
+ //# sourceMappingURL=telemetry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"telemetry.js","sourceRoot":"","sources":["../src/telemetry.ts"],"names":[],"mappings":"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"}