@microsoft/agents-a365-observability 0.1.0-preview.30

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 (130) hide show
  1. package/README.md +33 -0
  2. package/dist/cjs/ObservabilityBuilder.d.ts +61 -0
  3. package/dist/cjs/ObservabilityBuilder.d.ts.map +1 -0
  4. package/dist/cjs/ObservabilityBuilder.js +141 -0
  5. package/dist/cjs/ObservabilityBuilder.js.map +1 -0
  6. package/dist/cjs/ObservabilityManager.d.ts +29 -0
  7. package/dist/cjs/ObservabilityManager.d.ts.map +1 -0
  8. package/dist/cjs/ObservabilityManager.js +61 -0
  9. package/dist/cjs/ObservabilityManager.js.map +1 -0
  10. package/dist/cjs/index.d.ts +10 -0
  11. package/dist/cjs/index.d.ts.map +1 -0
  12. package/dist/cjs/index.js +33 -0
  13. package/dist/cjs/index.js.map +1 -0
  14. package/dist/cjs/tracing/constants.d.ts +83 -0
  15. package/dist/cjs/tracing/constants.d.ts.map +1 -0
  16. package/dist/cjs/tracing/constants.js +101 -0
  17. package/dist/cjs/tracing/constants.js.map +1 -0
  18. package/dist/cjs/tracing/contracts.d.ts +186 -0
  19. package/dist/cjs/tracing/contracts.d.ts.map +1 -0
  20. package/dist/cjs/tracing/contracts.js +44 -0
  21. package/dist/cjs/tracing/contracts.js.map +1 -0
  22. package/dist/cjs/tracing/exporter/Agent365Exporter.d.ts +53 -0
  23. package/dist/cjs/tracing/exporter/Agent365Exporter.d.ts.map +1 -0
  24. package/dist/cjs/tracing/exporter/Agent365Exporter.js +318 -0
  25. package/dist/cjs/tracing/exporter/Agent365Exporter.js.map +1 -0
  26. package/dist/cjs/tracing/exporter/utils.d.ts +38 -0
  27. package/dist/cjs/tracing/exporter/utils.d.ts.map +1 -0
  28. package/dist/cjs/tracing/exporter/utils.js +126 -0
  29. package/dist/cjs/tracing/exporter/utils.js.map +1 -0
  30. package/dist/cjs/tracing/middleware/BaggageBuilder.d.ts +182 -0
  31. package/dist/cjs/tracing/middleware/BaggageBuilder.d.ts.map +1 -0
  32. package/dist/cjs/tracing/middleware/BaggageBuilder.js +297 -0
  33. package/dist/cjs/tracing/middleware/BaggageBuilder.js.map +1 -0
  34. package/dist/cjs/tracing/processors/SpanProcessor.d.ts +30 -0
  35. package/dist/cjs/tracing/processors/SpanProcessor.d.ts.map +1 -0
  36. package/dist/cjs/tracing/processors/SpanProcessor.js +98 -0
  37. package/dist/cjs/tracing/processors/SpanProcessor.js.map +1 -0
  38. package/dist/cjs/tracing/processors/util.d.ts +9 -0
  39. package/dist/cjs/tracing/processors/util.d.ts.map +1 -0
  40. package/dist/cjs/tracing/processors/util.js +50 -0
  41. package/dist/cjs/tracing/processors/util.js.map +1 -0
  42. package/dist/cjs/tracing/scopes/ExecuteToolScope.d.ts +22 -0
  43. package/dist/cjs/tracing/scopes/ExecuteToolScope.d.ts.map +1 -0
  44. package/dist/cjs/tracing/scopes/ExecuteToolScope.js +51 -0
  45. package/dist/cjs/tracing/scopes/ExecuteToolScope.js.map +1 -0
  46. package/dist/cjs/tracing/scopes/InferenceScope.d.ts +47 -0
  47. package/dist/cjs/tracing/scopes/InferenceScope.d.ts.map +1 -0
  48. package/dist/cjs/tracing/scopes/InferenceScope.js +83 -0
  49. package/dist/cjs/tracing/scopes/InferenceScope.js.map +1 -0
  50. package/dist/cjs/tracing/scopes/InvokeAgentScope.d.ts +33 -0
  51. package/dist/cjs/tracing/scopes/InvokeAgentScope.d.ts.map +1 -0
  52. package/dist/cjs/tracing/scopes/InvokeAgentScope.js +94 -0
  53. package/dist/cjs/tracing/scopes/InvokeAgentScope.js.map +1 -0
  54. package/dist/cjs/tracing/scopes/OpenTelemetryScope.d.ts +57 -0
  55. package/dist/cjs/tracing/scopes/OpenTelemetryScope.d.ts.map +1 -0
  56. package/dist/cjs/tracing/scopes/OpenTelemetryScope.js +146 -0
  57. package/dist/cjs/tracing/scopes/OpenTelemetryScope.js.map +1 -0
  58. package/dist/cjs/tracing/util.d.ts +9 -0
  59. package/dist/cjs/tracing/util.d.ts.map +1 -0
  60. package/dist/cjs/tracing/util.js +28 -0
  61. package/dist/cjs/tracing/util.js.map +1 -0
  62. package/dist/cjs/utils/logging.d.ts +11 -0
  63. package/dist/cjs/utils/logging.d.ts.map +1 -0
  64. package/dist/cjs/utils/logging.js +84 -0
  65. package/dist/cjs/utils/logging.js.map +1 -0
  66. package/dist/esm/ObservabilityBuilder.d.ts +61 -0
  67. package/dist/esm/ObservabilityBuilder.d.ts.map +1 -0
  68. package/dist/esm/ObservabilityBuilder.js +137 -0
  69. package/dist/esm/ObservabilityBuilder.js.map +1 -0
  70. package/dist/esm/ObservabilityManager.d.ts +29 -0
  71. package/dist/esm/ObservabilityManager.d.ts.map +1 -0
  72. package/dist/esm/ObservabilityManager.js +57 -0
  73. package/dist/esm/ObservabilityManager.js.map +1 -0
  74. package/dist/esm/index.d.ts +10 -0
  75. package/dist/esm/index.d.ts.map +1 -0
  76. package/dist/esm/index.js +18 -0
  77. package/dist/esm/index.js.map +1 -0
  78. package/dist/esm/tracing/constants.d.ts +83 -0
  79. package/dist/esm/tracing/constants.d.ts.map +1 -0
  80. package/dist/esm/tracing/constants.js +97 -0
  81. package/dist/esm/tracing/constants.js.map +1 -0
  82. package/dist/esm/tracing/contracts.d.ts +186 -0
  83. package/dist/esm/tracing/contracts.d.ts.map +1 -0
  84. package/dist/esm/tracing/contracts.js +41 -0
  85. package/dist/esm/tracing/contracts.js.map +1 -0
  86. package/dist/esm/tracing/exporter/Agent365Exporter.d.ts +53 -0
  87. package/dist/esm/tracing/exporter/Agent365Exporter.d.ts.map +1 -0
  88. package/dist/esm/tracing/exporter/Agent365Exporter.js +281 -0
  89. package/dist/esm/tracing/exporter/Agent365Exporter.js.map +1 -0
  90. package/dist/esm/tracing/exporter/utils.d.ts +38 -0
  91. package/dist/esm/tracing/exporter/utils.d.ts.map +1 -0
  92. package/dist/esm/tracing/exporter/utils.js +113 -0
  93. package/dist/esm/tracing/exporter/utils.js.map +1 -0
  94. package/dist/esm/tracing/middleware/BaggageBuilder.d.ts +182 -0
  95. package/dist/esm/tracing/middleware/BaggageBuilder.d.ts.map +1 -0
  96. package/dist/esm/tracing/middleware/BaggageBuilder.js +292 -0
  97. package/dist/esm/tracing/middleware/BaggageBuilder.js.map +1 -0
  98. package/dist/esm/tracing/processors/SpanProcessor.d.ts +30 -0
  99. package/dist/esm/tracing/processors/SpanProcessor.d.ts.map +1 -0
  100. package/dist/esm/tracing/processors/SpanProcessor.js +94 -0
  101. package/dist/esm/tracing/processors/SpanProcessor.js.map +1 -0
  102. package/dist/esm/tracing/processors/util.d.ts +9 -0
  103. package/dist/esm/tracing/processors/util.d.ts.map +1 -0
  104. package/dist/esm/tracing/processors/util.js +47 -0
  105. package/dist/esm/tracing/processors/util.js.map +1 -0
  106. package/dist/esm/tracing/scopes/ExecuteToolScope.d.ts +22 -0
  107. package/dist/esm/tracing/scopes/ExecuteToolScope.d.ts.map +1 -0
  108. package/dist/esm/tracing/scopes/ExecuteToolScope.js +47 -0
  109. package/dist/esm/tracing/scopes/ExecuteToolScope.js.map +1 -0
  110. package/dist/esm/tracing/scopes/InferenceScope.d.ts +47 -0
  111. package/dist/esm/tracing/scopes/InferenceScope.d.ts.map +1 -0
  112. package/dist/esm/tracing/scopes/InferenceScope.js +79 -0
  113. package/dist/esm/tracing/scopes/InferenceScope.js.map +1 -0
  114. package/dist/esm/tracing/scopes/InvokeAgentScope.d.ts +33 -0
  115. package/dist/esm/tracing/scopes/InvokeAgentScope.d.ts.map +1 -0
  116. package/dist/esm/tracing/scopes/InvokeAgentScope.js +90 -0
  117. package/dist/esm/tracing/scopes/InvokeAgentScope.js.map +1 -0
  118. package/dist/esm/tracing/scopes/OpenTelemetryScope.d.ts +57 -0
  119. package/dist/esm/tracing/scopes/OpenTelemetryScope.d.ts.map +1 -0
  120. package/dist/esm/tracing/scopes/OpenTelemetryScope.js +139 -0
  121. package/dist/esm/tracing/scopes/OpenTelemetryScope.js.map +1 -0
  122. package/dist/esm/tracing/util.d.ts +9 -0
  123. package/dist/esm/tracing/util.d.ts.map +1 -0
  124. package/dist/esm/tracing/util.js +23 -0
  125. package/dist/esm/tracing/util.js.map +1 -0
  126. package/dist/esm/utils/logging.d.ts +11 -0
  127. package/dist/esm/utils/logging.d.ts.map +1 -0
  128. package/dist/esm/utils/logging.js +81 -0
  129. package/dist/esm/utils/logging.js.map +1 -0
  130. package/package.json +69 -0
@@ -0,0 +1,146 @@
1
+ "use strict";
2
+ // ------------------------------------------------------------------------------
3
+ // Copyright (c) Microsoft Corporation. All rights reserved.
4
+ // ------------------------------------------------------------------------------
5
+ var __importDefault = (this && this.__importDefault) || function (mod) {
6
+ return (mod && mod.__esModule) ? mod : { "default": mod };
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.OpenTelemetryScope = void 0;
10
+ const api_1 = require("@opentelemetry/api");
11
+ const constants_1 = require("../constants");
12
+ const util_1 = require("../util");
13
+ const logging_1 = __importDefault(require("../../utils/logging"));
14
+ /**
15
+ * Base class for OpenTelemetry tracing scopes
16
+ */
17
+ class OpenTelemetryScope {
18
+ /**
19
+ * Initializes a new instance of the OpenTelemetryScope class
20
+ * @param kind The kind of span (CLIENT, SERVER, INTERNAL, etc.)
21
+ * @param operationName The name of the operation being traced
22
+ * @param spanName The name of the span for display purposes
23
+ * @param agentDetails Optional agent details
24
+ * @param tenantDetails Optional tenant details
25
+ */
26
+ constructor(kind, operationName, spanName, agentDetails, tenantDetails) {
27
+ this.hasEnded = false;
28
+ const currentContext = api_1.context.active();
29
+ logging_1.default.info(`[A365Observability] Starting span: ${spanName}, operation: ${operationName} for tenantId: ${tenantDetails?.tenantId || 'unknown'}, agentId: ${agentDetails?.agentId || 'unknown'}`);
30
+ // Start span with current context to establish parent-child relationship
31
+ this.span = OpenTelemetryScope.tracer.startSpan(spanName, {
32
+ kind,
33
+ attributes: {
34
+ [constants_1.OpenTelemetryConstants.GEN_AI_SYSTEM_KEY]: constants_1.OpenTelemetryConstants.GEN_AI_SYSTEM_VALUE,
35
+ [constants_1.OpenTelemetryConstants.GEN_AI_OPERATION_NAME_KEY]: operationName,
36
+ },
37
+ }, currentContext);
38
+ logging_1.default.info(`[A365Observability] Span[${this.span.spanContext().spanId}] ${spanName}, operation: ${operationName} started successfully`);
39
+ this.startTime = Date.now();
40
+ // Set agent details if provided
41
+ if (agentDetails) {
42
+ this.setTagMaybe(constants_1.OpenTelemetryConstants.GEN_AI_AGENT_ID_KEY, agentDetails.agentId);
43
+ this.setTagMaybe(constants_1.OpenTelemetryConstants.GEN_AI_AGENT_NAME_KEY, agentDetails.agentName);
44
+ this.setTagMaybe(constants_1.OpenTelemetryConstants.GEN_AI_AGENT_DESCRIPTION_KEY, agentDetails.agentDescription);
45
+ this.setTagMaybe(constants_1.OpenTelemetryConstants.GEN_AI_CONVERSATION_ID_KEY, agentDetails.conversationId);
46
+ this.setTagMaybe(constants_1.OpenTelemetryConstants.GEN_AI_ICON_URI_KEY, agentDetails.iconUri);
47
+ this.setTagMaybe(constants_1.OpenTelemetryConstants.GEN_AI_AGENT_AUID_KEY, agentDetails.agentAUID);
48
+ this.setTagMaybe(constants_1.OpenTelemetryConstants.GEN_AI_AGENT_UPN_KEY, agentDetails.agentUPN);
49
+ this.setTagMaybe(constants_1.OpenTelemetryConstants.GEN_AI_AGENT_BLUEPRINT_ID_KEY, agentDetails.agentBlueprintId);
50
+ }
51
+ // Set tenant details if provided
52
+ if (tenantDetails) {
53
+ this.setTagMaybe(constants_1.OpenTelemetryConstants.TENANT_ID_KEY, tenantDetails.tenantId);
54
+ }
55
+ }
56
+ /**
57
+ * Makes this span active for the duration of the async callback execution
58
+ */
59
+ withActiveSpanAsync(callback) {
60
+ const newContext = api_1.trace.setSpan(api_1.context.active(), this.span);
61
+ return api_1.context.with(newContext, callback);
62
+ }
63
+ /**
64
+ * Records an error that occurred during the operation
65
+ * @param error The error that occurred
66
+ */
67
+ recordError(error) {
68
+ if (OpenTelemetryScope.enableTelemetry) {
69
+ logging_1.default.error(`[A365Observability] Records an error that occurred during the operation span[${this.span.spanContext().spanId}]: ${error.message}`);
70
+ // Check if it's an HTTP error with status code
71
+ if ('status' in error && typeof error.status === 'number') {
72
+ this.errorType = error.status.toString();
73
+ }
74
+ else {
75
+ this.errorType = error.constructor.name;
76
+ }
77
+ this.exception = error;
78
+ this.span.setStatus({
79
+ code: api_1.SpanStatusCode.ERROR,
80
+ message: error.message
81
+ });
82
+ this.span.recordException(error);
83
+ }
84
+ }
85
+ /**
86
+ * Sets a tag on the span if telemetry is enabled
87
+ * @param name The tag name
88
+ * @param value The tag value
89
+ */
90
+ setTagMaybe(name, value) {
91
+ if (OpenTelemetryScope.enableTelemetry && value != null) {
92
+ this.span.setAttributes({ [name]: value });
93
+ }
94
+ }
95
+ /**
96
+ * Add baggage to the current context
97
+ * @param key The baggage key
98
+ * @param value The baggage value
99
+ */
100
+ addBaggage(key, value) {
101
+ if (OpenTelemetryScope.enableTelemetry) {
102
+ // Note: OpenTelemetry JS doesn't have direct baggage API in span
103
+ // This would typically be handled through the baggage API
104
+ this.span.setAttributes({ [`baggage.${key}`]: value });
105
+ }
106
+ }
107
+ /**
108
+ * Finalizes the scope and records metrics
109
+ */
110
+ end() {
111
+ if (this.hasEnded) {
112
+ logging_1.default.info(`[A365Observability] Span already ended for span[${this.span.spanContext().spanId}]`);
113
+ return;
114
+ }
115
+ const duration = (Date.now() - this.startTime) / 1000; // Convert to seconds
116
+ const finalTags = {};
117
+ if (this.errorType) {
118
+ finalTags[constants_1.OpenTelemetryConstants.ERROR_TYPE_KEY] = this.errorType;
119
+ this.span.setAttributes({ [constants_1.OpenTelemetryConstants.ERROR_TYPE_KEY]: this.errorType });
120
+ }
121
+ // Record duration metric (would typically use a meter here)
122
+ // For now, we'll add it as a span attribute
123
+ this.span.setAttributes({ 'operation.duration': duration });
124
+ this.hasEnded = true;
125
+ logging_1.default.info(`[A365Observability] Ending span[${this.span.spanContext().spanId}], duration: ${duration}s`);
126
+ }
127
+ /**
128
+ * Disposes the scope and finalizes telemetry data collection
129
+ */
130
+ [Symbol.dispose]() {
131
+ if (!this.hasEnded) {
132
+ this.end();
133
+ this.span.end();
134
+ }
135
+ }
136
+ /**
137
+ * Legacy dispose method for compatibility
138
+ */
139
+ dispose() {
140
+ this[Symbol.dispose]();
141
+ }
142
+ }
143
+ exports.OpenTelemetryScope = OpenTelemetryScope;
144
+ OpenTelemetryScope.tracer = api_1.trace.getTracer(constants_1.OpenTelemetryConstants.SOURCE_NAME);
145
+ OpenTelemetryScope.enableTelemetry = (0, util_1.isAgent365TelemetryEnabled)();
146
+ //# sourceMappingURL=OpenTelemetryScope.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OpenTelemetryScope.js","sourceRoot":"","sources":["../../../../src/tracing/scopes/OpenTelemetryScope.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Check if exporter is enabled via environment variables
3
+ */
4
+ export declare const isAgent365ExporterEnabled: () => boolean;
5
+ /**
6
+ * Gets the enable telemetry configuration value
7
+ */
8
+ export declare const isAgent365TelemetryEnabled: () => boolean;
9
+ //# sourceMappingURL=util.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../../src/tracing/util.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,eAAO,MAAM,yBAAyB,EAAE,MAAM,OAS7C,CAAC;AAEF;;KAEK;AACL,eAAO,MAAM,0BAA0B,EAAE,MAAM,OAU9C,CAAC"}
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isAgent365TelemetryEnabled = exports.isAgent365ExporterEnabled = void 0;
4
+ const constants_1 = require("./constants");
5
+ /**
6
+ * Check if exporter is enabled via environment variables
7
+ */
8
+ const isAgent365ExporterEnabled = () => {
9
+ const enableA365Exporter = process.env[constants_1.OpenTelemetryConstants.ENABLE_A365_OBSERVABILITY_EXPORTER]?.toLowerCase();
10
+ return (enableA365Exporter === 'true' ||
11
+ enableA365Exporter === '1' ||
12
+ enableA365Exporter === 'yes' ||
13
+ enableA365Exporter === 'on');
14
+ };
15
+ exports.isAgent365ExporterEnabled = isAgent365ExporterEnabled;
16
+ /**
17
+ * Gets the enable telemetry configuration value
18
+ */
19
+ const isAgent365TelemetryEnabled = () => {
20
+ const enableObservability = process.env[constants_1.OpenTelemetryConstants.ENABLE_OBSERVABILITY]?.toLowerCase();
21
+ const enableA365 = process.env[constants_1.OpenTelemetryConstants.ENABLE_A365_OBSERVABILITY]?.toLowerCase();
22
+ return (enableObservability === 'true' ||
23
+ enableObservability === '1' ||
24
+ enableA365 === 'true' ||
25
+ enableA365 === '1');
26
+ };
27
+ exports.isAgent365TelemetryEnabled = isAgent365TelemetryEnabled;
28
+ //# sourceMappingURL=util.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"util.js","sourceRoot":"","sources":["../../../src/tracing/util.ts"],"names":[],"mappings":";;;AAAA,2CAAqD;AAGrD;;GAEG;AACI,MAAM,yBAAyB,GAAkB,GAAY,EAAE;IACpE,MAAM,kBAAkB,GAAG,OAAO,CAAC,GAAG,CAAC,kCAAsB,CAAC,kCAAkC,CAAC,EAAE,WAAW,EAAE,CAAC;IAEjH,OAAO,CACL,kBAAkB,KAAK,MAAM;QAC7B,kBAAkB,KAAK,GAAG;QAC1B,kBAAkB,KAAK,KAAK;QAC5B,kBAAkB,KAAK,IAAI,CAC5B,CAAC;AACJ,CAAC,CAAC;AATW,QAAA,yBAAyB,6BASpC;AAEF;;KAEK;AACE,MAAM,0BAA0B,GAAkB,GAAY,EAAE;IACrE,MAAM,mBAAmB,GAAG,OAAO,CAAC,GAAG,CAAC,kCAAsB,CAAC,oBAAoB,CAAC,EAAE,WAAW,EAAE,CAAC;IACpG,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,kCAAsB,CAAC,yBAAyB,CAAC,EAAE,WAAW,EAAE,CAAC;IAEhG,OAAO,CACL,mBAAmB,KAAK,MAAM;QAC9B,mBAAmB,KAAK,GAAG;QAC3B,UAAU,KAAK,MAAM;QACrB,UAAU,KAAK,GAAG,CACnB,CAAC;AACJ,CAAC,CAAC;AAVW,QAAA,0BAA0B,8BAUrC"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Format error object for logging with message and stack trace
3
+ */
4
+ export declare function formatError(error: unknown): string;
5
+ declare const logger: {
6
+ info: (message: string, ...args: unknown[]) => void;
7
+ warn: (message: string, ...args: unknown[]) => void;
8
+ error: (message: string, ...args: unknown[]) => void;
9
+ };
10
+ export default logger;
11
+ //# sourceMappingURL=logging.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logging.d.ts","sourceRoot":"","sources":["../../../src/utils/logging.ts"],"names":[],"mappings":"AAIA;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAKlD;AA2DD,QAAA,MAAM,MAAM;oBACM,MAAM,WAAW,OAAO,EAAE;oBAO1B,MAAM,WAAW,OAAO,EAAE;qBAOzB,MAAM,WAAW,OAAO,EAAE;CAM5C,CAAC;AAEF,eAAe,MAAM,CAAC"}
@@ -0,0 +1,84 @@
1
+ "use strict";
2
+ // ------------------------------------------------------------------------------
3
+ // Copyright (c) Microsoft Corporation. All rights reserved.
4
+ // ------------------------------------------------------------------------------
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.formatError = formatError;
7
+ /**
8
+ * Format error object for logging with message and stack trace
9
+ */
10
+ function formatError(error) {
11
+ if (error instanceof Error) {
12
+ return `${error.message}\nStack: ${error.stack || 'No stack trace'}`;
13
+ }
14
+ return String(error);
15
+ }
16
+ /**
17
+ * Simple logger for Agent 365 observability
18
+ *
19
+ * Usage:
20
+ * import logger from './logging';
21
+ * logger.info('Info message'); // Shows when A365ObservabilityLogLevel includes 'info'
22
+ * logger.warn('Warning'); // Shows when A365ObservabilityLogLevel includes 'warn'
23
+ * logger.error('Error'); // Shows when A365ObservabilityLogLevel includes 'error'
24
+ *
25
+ * Environment Variable:
26
+ * A365ObservabilityLogLevel=none|info|warn|error|info|warn|info|error (default: none)
27
+ *
28
+ * Single values:
29
+ * none = no logging (default)
30
+ * info = info messages only
31
+ * warn = warn messages only
32
+ * error = error messages only
33
+ *
34
+ * Multiple values (pipe-separated):
35
+ * info|warn = info and warn messages
36
+ * warn|error = warn and error messages
37
+ * info|warn|error = all message types
38
+ */
39
+ const LOG_LEVELS = {
40
+ none: 0,
41
+ info: 1,
42
+ warn: 2,
43
+ error: 3
44
+ };
45
+ function parseLogLevel(level) {
46
+ const levels = new Set();
47
+ // Split by | to support multiple levels like "info|warn|error"
48
+ const levelStrings = level.toLowerCase().trim().split('|');
49
+ for (const levelString of levelStrings) {
50
+ const normalizedLevel = levelString.trim();
51
+ const levelValue = LOG_LEVELS[normalizedLevel];
52
+ if (levelValue !== undefined) {
53
+ levels.add(levelValue);
54
+ }
55
+ }
56
+ // If no valid levels found, default to none
57
+ if (levels.size === 0) {
58
+ levels.add(LOG_LEVELS.none);
59
+ }
60
+ return levels;
61
+ }
62
+ const enabledLogLevels = parseLogLevel(process.env.A365_OBSERVABILITY_LOG_LEVEL || 'none');
63
+ const logger = {
64
+ info: (message, ...args) => {
65
+ if (enabledLogLevels.has(LOG_LEVELS.info)) {
66
+ // eslint-disable-next-line no-console
67
+ console.log('[INFO]', message, ...args);
68
+ }
69
+ },
70
+ warn: (message, ...args) => {
71
+ if (enabledLogLevels.has(LOG_LEVELS.warn)) {
72
+ // eslint-disable-next-line no-console
73
+ console.warn('[WARN]', message, ...args);
74
+ }
75
+ },
76
+ error: (message, ...args) => {
77
+ if (enabledLogLevels.has(LOG_LEVELS.error)) {
78
+ // eslint-disable-next-line no-console
79
+ console.error('[ERROR]', message, ...args);
80
+ }
81
+ }
82
+ };
83
+ exports.default = logger;
84
+ //# sourceMappingURL=logging.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logging.js","sourceRoot":"","sources":["../../../src/utils/logging.ts"],"names":[],"mappings":";AAAA,iFAAiF;AACjF,4DAA4D;AAC5D,iFAAiF;;AAKjF,kCAKC;AARD;;GAEG;AACH,SAAgB,WAAW,CAAC,KAAc;IACxC,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;QAC3B,OAAO,GAAG,KAAK,CAAC,OAAO,YAAY,KAAK,CAAC,KAAK,IAAI,gBAAgB,EAAE,CAAC;IACvE,CAAC;IACD,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;AACvB,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,MAAM,UAAU,GAAG;IACjB,IAAI,EAAE,CAAC;IACP,IAAI,EAAE,CAAC;IACP,IAAI,EAAE,CAAC;IACP,KAAK,EAAE,CAAC;CACA,CAAC;AAIX,SAAS,aAAa,CAAC,KAAa;IAClC,MAAM,MAAM,GAAG,IAAI,GAAG,EAAU,CAAC;IAEjC,+DAA+D;IAC/D,MAAM,YAAY,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAE3D,KAAK,MAAM,WAAW,IAAI,YAAY,EAAE,CAAC;QACvC,MAAM,eAAe,GAAG,WAAW,CAAC,IAAI,EAAc,CAAC;QACvD,MAAM,UAAU,GAAG,UAAU,CAAC,eAAe,CAAC,CAAC;QAC/C,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;YAC7B,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACzB,CAAC;IACH,CAAC;IAED,4CAA4C;IAC5C,IAAI,MAAM,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QACtB,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,gBAAgB,GAAG,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,4BAA4B,IAAI,MAAM,CAAC,CAAC;AAE3F,MAAM,MAAM,GAAG;IACb,IAAI,EAAE,CAAC,OAAe,EAAE,GAAG,IAAe,EAAE,EAAE;QAC5C,IAAI,gBAAgB,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1C,sCAAsC;YACtC,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;QAC1C,CAAC;IACH,CAAC;IAED,IAAI,EAAE,CAAC,OAAe,EAAE,GAAG,IAAe,EAAE,EAAE;QAC5C,IAAI,gBAAgB,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1C,sCAAsC;YACtC,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC;IAED,KAAK,EAAE,CAAC,OAAe,EAAE,GAAG,IAAe,EAAE,EAAE;QAC7C,IAAI,gBAAgB,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;YAC3C,sCAAsC;YACtC,OAAO,CAAC,KAAK,CAAC,SAAS,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC;CACF,CAAC;AAEF,kBAAe,MAAM,CAAC"}
@@ -0,0 +1,61 @@
1
+ import { TokenResolver } from './tracing/exporter/Agent365Exporter';
2
+ import { ClusterCategory } from '@microsoft/agents-a365-runtime';
3
+ /**
4
+ * Configuration options for Agent 365 Observability Builder
5
+ */
6
+ export interface BuilderOptions {
7
+ /** Custom service name for telemetry */
8
+ serviceName?: string;
9
+ /** Custom service version for telemetry */
10
+ serviceVersion?: string;
11
+ tokenResolver?: TokenResolver;
12
+ /** Environment / cluster category (e.g., "preprod", "prod"). */
13
+ clusterCategory?: ClusterCategory;
14
+ }
15
+ /**
16
+ * Builder for configuring Agent 365 with OpenTelemetry tracing
17
+ */
18
+ export declare class ObservabilityBuilder {
19
+ private options;
20
+ private isBuilt;
21
+ private sdk?;
22
+ /**
23
+ * Configures the service name and version for telemetry
24
+ * @param serviceName The service name
25
+ * @param serviceVersion The service version
26
+ * @returns The builder instance for method chaining
27
+ */
28
+ withService(serviceName: string, serviceVersion?: string): ObservabilityBuilder;
29
+ /**
30
+ * Configures the token resolver for Agent 365 exporter
31
+ * @param tokenResolver Function to resolve authentication tokens
32
+ * @returns The builder instance for method chaining
33
+ */
34
+ withTokenResolver(tokenResolver: TokenResolver): ObservabilityBuilder;
35
+ /**
36
+ * Configures the cluster category for Agent 365 exporter
37
+ * @param clusterCategory The cluster category (e.g., "preprod", "prod")
38
+ * @returns The builder instance for method chaining
39
+ */
40
+ withClusterCategory(clusterCategory: ClusterCategory): ObservabilityBuilder;
41
+ private getTraceExporter;
42
+ private createResource;
43
+ /**
44
+ * Builds and initializes the Agent 365 configuration
45
+ * @returns The configured NodeSDK instance
46
+ */
47
+ build(): boolean;
48
+ /**
49
+ * Starts the OpenTelemetry SDK
50
+ */
51
+ start(): void;
52
+ /**
53
+ * Shuts down the OpenTelemetry SDK
54
+ */
55
+ shutdown(): Promise<void>;
56
+ /**
57
+ * Helper to avoid double-registering same processor type.
58
+ */
59
+ private attachProcessorIfMissing;
60
+ }
61
+ //# sourceMappingURL=ObservabilityBuilder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ObservabilityBuilder.d.ts","sourceRoot":"","sources":["../../src/ObservabilityBuilder.ts"],"names":[],"mappings":"AAQA,OAAO,EAAoB,aAAa,EAAE,MAAM,qCAAqC,CAAC;AAItF,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,wCAAwC;IACxC,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,2CAA2C;IAC3C,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,gEAAgE;IAChE,eAAe,CAAC,EAAE,eAAe,CAAC;CAEnC;AAED;;GAEG;AACH,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,OAAO,CAAsB;IACrC,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,GAAG,CAAC,CAAU;IAEtB;;;;;OAKG;IACI,WAAW,CAAC,WAAW,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,oBAAoB;IAMtF;;;;OAIG;IACI,iBAAiB,CAAC,aAAa,EAAE,aAAa,GAAG,oBAAoB;IAK5E;;;;OAIG;IACI,mBAAmB,CAAC,eAAe,EAAE,eAAe,GAAG,oBAAoB;IAKlF,OAAO,CAAC,gBAAgB;IAcxB,OAAO,CAAC,cAAc;IAUtB;;;OAGG;IACI,KAAK,IAAI,OAAO;IA6CvB;;OAEG;IACI,KAAK,IAAI,IAAI;IASpB;;OAEG;IACU,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAMtC;;OAEG;IACH,OAAO,CAAC,wBAAwB;CASjC"}
@@ -0,0 +1,137 @@
1
+ // ------------------------------------------------------------------------------
2
+ // Copyright (c) Microsoft Corporation. All rights reserved.
3
+ // ------------------------------------------------------------------------------
4
+ import { NodeSDK } from '@opentelemetry/sdk-node';
5
+ import { ConsoleSpanExporter, BatchSpanProcessor } from '@opentelemetry/sdk-trace-base';
6
+ import { SpanProcessor } from './tracing/processors/SpanProcessor';
7
+ import { isAgent365ExporterEnabled } from './tracing/util';
8
+ import { Agent365Exporter } from './tracing/exporter/Agent365Exporter';
9
+ import { resourceFromAttributes } from '@opentelemetry/resources';
10
+ import { ATTR_SERVICE_NAME } from '@opentelemetry/semantic-conventions';
11
+ import { trace } from '@opentelemetry/api';
12
+ /**
13
+ * Builder for configuring Agent 365 with OpenTelemetry tracing
14
+ */
15
+ export class ObservabilityBuilder {
16
+ constructor() {
17
+ this.options = {};
18
+ this.isBuilt = false;
19
+ }
20
+ /**
21
+ * Configures the service name and version for telemetry
22
+ * @param serviceName The service name
23
+ * @param serviceVersion The service version
24
+ * @returns The builder instance for method chaining
25
+ */
26
+ withService(serviceName, serviceVersion) {
27
+ this.options.serviceName = serviceName;
28
+ this.options.serviceVersion = serviceVersion;
29
+ return this;
30
+ }
31
+ /**
32
+ * Configures the token resolver for Agent 365 exporter
33
+ * @param tokenResolver Function to resolve authentication tokens
34
+ * @returns The builder instance for method chaining
35
+ */
36
+ withTokenResolver(tokenResolver) {
37
+ this.options.tokenResolver = tokenResolver;
38
+ return this;
39
+ }
40
+ /**
41
+ * Configures the cluster category for Agent 365 exporter
42
+ * @param clusterCategory The cluster category (e.g., "preprod", "prod")
43
+ * @returns The builder instance for method chaining
44
+ */
45
+ withClusterCategory(clusterCategory) {
46
+ this.options.clusterCategory = clusterCategory;
47
+ return this;
48
+ }
49
+ getTraceExporter() {
50
+ if (isAgent365ExporterEnabled()) {
51
+ if (!this.options.tokenResolver) {
52
+ throw new Error('tokenResolver must be provided when Agent 365 exporter is enabled');
53
+ }
54
+ return new Agent365Exporter(this.options.tokenResolver, this.options.clusterCategory || 'prod');
55
+ }
56
+ else {
57
+ return new ConsoleSpanExporter();
58
+ }
59
+ }
60
+ createResource() {
61
+ const serviceName = this.options.serviceVersion
62
+ ? `${this.options.serviceName}-${this.options.serviceVersion}`
63
+ : this.options.serviceName ?? 'Agent365-TypeScript';
64
+ return resourceFromAttributes({
65
+ [ATTR_SERVICE_NAME]: serviceName,
66
+ });
67
+ }
68
+ /**
69
+ * Builds and initializes the Agent 365 configuration
70
+ * @returns The configured NodeSDK instance
71
+ */
72
+ build() {
73
+ if (this.isBuilt) {
74
+ return this.isBuilt;
75
+ }
76
+ // Create processors in the desired order:
77
+ // 1. baggage enricher (copies baggage -> span attributes)
78
+ const spanProcessor = new SpanProcessor();
79
+ // 2. batch processor that actually ships spans out
80
+ const batchProcessor = new BatchSpanProcessor(this.getTraceExporter());
81
+ const globalProvider = trace.getTracerProvider();
82
+ const canAddProcessors = typeof globalProvider?.addSpanProcessor === 'function' &&
83
+ typeof globalProvider?.resource !== 'undefined';
84
+ if (canAddProcessors) {
85
+ // Someone else already created a provider (maybe their own NodeSDK).
86
+ // We DO NOT create a new NodeSDK.
87
+ // We just add our baggage enricher + batch exporter to their provider,
88
+ // but only if they aren't already there.
89
+ this.attachProcessorIfMissing(globalProvider, spanProcessor);
90
+ this.attachProcessorIfMissing(globalProvider, batchProcessor);
91
+ this.isBuilt = true;
92
+ this.sdk = undefined; // we didn't create/own one
93
+ return this.isBuilt;
94
+ }
95
+ // Create & configure the NodeSDK manually so we can inject processors + resource.
96
+ this.sdk = new NodeSDK({
97
+ resource: this.createResource(),
98
+ spanProcessors: [
99
+ spanProcessor,
100
+ batchProcessor,
101
+ ],
102
+ });
103
+ this.isBuilt = true;
104
+ return this.isBuilt;
105
+ }
106
+ /**
107
+ * Starts the OpenTelemetry SDK
108
+ */
109
+ start() {
110
+ if (!this.isBuilt) {
111
+ this.build();
112
+ }
113
+ if (this.sdk) {
114
+ this.sdk.start();
115
+ }
116
+ }
117
+ /**
118
+ * Shuts down the OpenTelemetry SDK
119
+ */
120
+ async shutdown() {
121
+ if (this.sdk) {
122
+ await this.sdk.shutdown();
123
+ }
124
+ }
125
+ /**
126
+ * Helper to avoid double-registering same processor type.
127
+ */
128
+ attachProcessorIfMissing(provider, processor) {
129
+ const active = provider._activeSpanProcessor?._spanProcessors;
130
+ const alreadyAdded = Array.isArray(active) &&
131
+ active.some((p) => p?.constructor?.name === processor.constructor.name);
132
+ if (!alreadyAdded) {
133
+ provider.addSpanProcessor(processor);
134
+ }
135
+ }
136
+ }
137
+ //# sourceMappingURL=ObservabilityBuilder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ObservabilityBuilder.js","sourceRoot":"","sources":["../../src/ObservabilityBuilder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ import { ObservabilityBuilder, BuilderOptions } from './ObservabilityBuilder';
2
+ /**
3
+ * Main entry point for Agent 365 providing OpenTelemetry tracing for AI agents and tools
4
+ */
5
+ export declare class ObservabilityManager {
6
+ private static instance?;
7
+ /**
8
+ * Configures Agent 365 with OpenTelemetry tracing for AI agents and tools
9
+ * @param configure Optional configuration callback for the Builder
10
+ * @returns The configured Builder instance
11
+ */
12
+ static configure(configure?: (builder: ObservabilityBuilder) => void): ObservabilityBuilder;
13
+ /**
14
+ * Configures and starts Agent 365 with simplified options
15
+ * @param options Configuration options
16
+ * @returns The configured and started Builder instance
17
+ */
18
+ static start(options?: BuilderOptions): ObservabilityBuilder;
19
+ /**
20
+ * Gets the current Agent 365 instance
21
+ * @returns The current instance or null if not configured
22
+ */
23
+ static getInstance(): ObservabilityBuilder | null;
24
+ /**
25
+ * Shuts down Agent 365
26
+ */
27
+ static shutdown(): Promise<void>;
28
+ }
29
+ //# sourceMappingURL=ObservabilityManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ObservabilityManager.d.ts","sourceRoot":"","sources":["../../src/ObservabilityManager.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAE9E;;GAEG;AACH,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAuB;IAG/C;;;;OAIG;WACW,SAAS,CACrB,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,oBAAoB,KAAK,IAAI,GAClD,oBAAoB;IASvB;;;;OAIG;WACW,KAAK,CAAC,OAAO,CAAC,EAAE,cAAc,GAAG,oBAAoB;IAqBnE;;;OAGG;WACW,WAAW,IAAI,oBAAoB,GAAG,IAAI;IAIxD;;OAEG;WACiB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;CAM9C"}
@@ -0,0 +1,57 @@
1
+ // ------------------------------------------------------------------------------
2
+ // Copyright (c) Microsoft Corporation. All rights reserved.
3
+ // ------------------------------------------------------------------------------
4
+ import { ObservabilityBuilder } from './ObservabilityBuilder';
5
+ /**
6
+ * Main entry point for Agent 365 providing OpenTelemetry tracing for AI agents and tools
7
+ */
8
+ export class ObservabilityManager {
9
+ /**
10
+ * Configures Agent 365 with OpenTelemetry tracing for AI agents and tools
11
+ * @param configure Optional configuration callback for the Builder
12
+ * @returns The configured Builder instance
13
+ */
14
+ static configure(configure) {
15
+ const builder = new ObservabilityBuilder();
16
+ configure?.(builder);
17
+ ObservabilityManager.instance = builder;
18
+ return builder;
19
+ }
20
+ /**
21
+ * Configures and starts Agent 365 with simplified options
22
+ * @param options Configuration options
23
+ * @returns The configured and started Builder instance
24
+ */
25
+ static start(options) {
26
+ const builder = new ObservabilityBuilder();
27
+ if (options?.serviceName) {
28
+ builder.withService(options.serviceName, options.serviceVersion);
29
+ }
30
+ if (options?.tokenResolver) {
31
+ builder.withTokenResolver(options.tokenResolver);
32
+ }
33
+ if (options?.clusterCategory) {
34
+ builder.withClusterCategory(options.clusterCategory);
35
+ }
36
+ builder.start();
37
+ ObservabilityManager.instance = builder;
38
+ return builder;
39
+ }
40
+ /**
41
+ * Gets the current Agent 365 instance
42
+ * @returns The current instance or null if not configured
43
+ */
44
+ static getInstance() {
45
+ return ObservabilityManager.instance || null;
46
+ }
47
+ /**
48
+ * Shuts down Agent 365
49
+ */
50
+ static async shutdown() {
51
+ if (ObservabilityManager.instance) {
52
+ await ObservabilityManager.instance.shutdown();
53
+ ObservabilityManager.instance = undefined;
54
+ }
55
+ }
56
+ }
57
+ //# sourceMappingURL=ObservabilityManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ObservabilityManager.js","sourceRoot":"","sources":["../../src/ObservabilityManager.ts"],"names":[],"mappings":"AAAA,iFAAiF;AACjF,4DAA4D;AAC5D,iFAAiF;AAEjF,OAAO,EAAE,oBAAoB,EAAkB,MAAM,wBAAwB,CAAC;AAE9E;;GAEG;AACH,MAAM,OAAO,oBAAoB;IAI/B;;;;OAIG;IACI,MAAM,CAAC,SAAS,CACrB,SAAmD;QAEnD,MAAM,OAAO,GAAG,IAAI,oBAAoB,EAAE,CAAC;QAE3C,SAAS,EAAE,CAAC,OAAO,CAAC,CAAC;QAErB,oBAAoB,CAAC,QAAQ,GAAG,OAAO,CAAC;QACxC,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;;;OAIG;IACI,MAAM,CAAC,KAAK,CAAC,OAAwB;QAC1C,MAAM,OAAO,GAAG,IAAI,oBAAoB,EAAE,CAAC;QAE3C,IAAI,OAAO,EAAE,WAAW,EAAE,CAAC;YACzB,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,WAAW,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC;QACnE,CAAC;QAED,IAAI,OAAO,EAAE,aAAa,EAAE,CAAC;YAC3B,OAAO,CAAC,iBAAiB,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;QACnD,CAAC;QAED,IAAI,OAAO,EAAE,eAAe,EAAE,CAAC;YAC7B,OAAO,CAAC,mBAAmB,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;QACvD,CAAC;QAED,OAAO,CAAC,KAAK,EAAE,CAAC;QAEhB,oBAAoB,CAAC,QAAQ,GAAG,OAAO,CAAC;QACxC,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;;OAGG;IACI,MAAM,CAAC,WAAW;QACvB,OAAO,oBAAoB,CAAC,QAAQ,IAAI,IAAI,CAAC;IAC/C,CAAC;IAED;;OAEG;IACI,MAAM,CAAC,KAAK,CAAC,QAAQ;QAC1B,IAAI,oBAAoB,CAAC,QAAQ,EAAE,CAAC;YAClC,MAAM,oBAAoB,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;YAC/C,oBAAoB,CAAC,QAAQ,GAAG,SAAS,CAAC;QAC5C,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,10 @@
1
+ export { ObservabilityManager } from './ObservabilityManager';
2
+ export { ObservabilityBuilder as Builder, BuilderOptions } from './ObservabilityBuilder';
3
+ export { OpenTelemetryConstants } from './tracing/constants';
4
+ export { BaggageBuilder, BaggageScope } from './tracing/middleware/BaggageBuilder';
5
+ export { ExecutionType, InvocationRole, SourceMetadata, AgentRequest, AgentDetails, TenantDetails, ToolCallDetails, InvokeAgentDetails, CallerDetails, EnhancedAgentDetails, ServiceEndpoint, InferenceDetails, InferenceOperationType, InferenceResponse } from './tracing/contracts';
6
+ export { OpenTelemetryScope } from './tracing/scopes/OpenTelemetryScope';
7
+ export { ExecuteToolScope } from './tracing/scopes/ExecuteToolScope';
8
+ export { InvokeAgentScope } from './tracing/scopes/InvokeAgentScope';
9
+ export { InferenceScope } from './tracing/scopes/InferenceScope';
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,oBAAoB,IAAI,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAGzF,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAG7D,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAC;AAGnF,OAAO,EACL,aAAa,EACb,cAAc,EACd,cAAc,EACd,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,eAAe,EACf,kBAAkB,EAClB,aAAa,EACb,oBAAoB,EACpB,eAAe,EACf,gBAAgB,EAChB,sBAAsB,EACtB,iBAAiB,EAClB,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AACzE,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AACrE,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AACrE,OAAO,EAAE,cAAc,EAAC,MAAM,iCAAiC,CAAC"}
@@ -0,0 +1,18 @@
1
+ // ------------------------------------------------------------------------------
2
+ // Copyright (c) Microsoft Corporation. All rights reserved.
3
+ // ------------------------------------------------------------------------------
4
+ // Main SDK classes
5
+ export { ObservabilityManager } from './ObservabilityManager';
6
+ export { ObservabilityBuilder as Builder } from './ObservabilityBuilder';
7
+ // Tracing constants
8
+ export { OpenTelemetryConstants } from './tracing/constants';
9
+ // Baggage builder
10
+ export { BaggageBuilder, BaggageScope } from './tracing/middleware/BaggageBuilder';
11
+ // Contracts and interfaces
12
+ export { ExecutionType, InvocationRole, InferenceOperationType } from './tracing/contracts';
13
+ // Scopes
14
+ export { OpenTelemetryScope } from './tracing/scopes/OpenTelemetryScope';
15
+ export { ExecuteToolScope } from './tracing/scopes/ExecuteToolScope';
16
+ export { InvokeAgentScope } from './tracing/scopes/InvokeAgentScope';
17
+ export { InferenceScope } from './tracing/scopes/InferenceScope';
18
+ //# sourceMappingURL=index.js.map