@microsoft/opentelemetry 0.1.0-alpha.2 → 0.1.0-alpha.3

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 (260) hide show
  1. package/dist/commonjs/a365/configuration/A365Configuration.d.ts +42 -0
  2. package/dist/commonjs/a365/configuration/A365Configuration.d.ts.map +1 -0
  3. package/dist/commonjs/a365/configuration/A365Configuration.js +162 -0
  4. package/dist/commonjs/a365/configuration/A365Configuration.js.map +1 -0
  5. package/dist/commonjs/a365/configuration/A365ConfigurationOptions.d.ts +53 -0
  6. package/dist/commonjs/a365/configuration/A365ConfigurationOptions.d.ts.map +1 -0
  7. package/dist/commonjs/a365/configuration/A365ConfigurationOptions.js +5 -0
  8. package/dist/commonjs/a365/configuration/A365ConfigurationOptions.js.map +1 -0
  9. package/dist/commonjs/a365/configuration/index.d.ts +3 -0
  10. package/dist/commonjs/a365/configuration/index.d.ts.map +1 -0
  11. package/dist/commonjs/a365/configuration/index.js +9 -0
  12. package/dist/commonjs/a365/configuration/index.js.map +1 -0
  13. package/dist/commonjs/a365/constants.d.ts +76 -0
  14. package/dist/commonjs/a365/constants.d.ts.map +1 -0
  15. package/dist/commonjs/a365/constants.js +99 -0
  16. package/dist/commonjs/a365/constants.js.map +1 -0
  17. package/dist/commonjs/a365/context/tokenContext.d.ts +25 -0
  18. package/dist/commonjs/a365/context/tokenContext.d.ts.map +1 -0
  19. package/dist/commonjs/a365/context/tokenContext.js +67 -0
  20. package/dist/commonjs/a365/context/tokenContext.js.map +1 -0
  21. package/dist/commonjs/a365/context.d.ts +31 -0
  22. package/dist/commonjs/a365/context.d.ts.map +1 -0
  23. package/dist/commonjs/a365/context.js +109 -0
  24. package/dist/commonjs/a365/context.js.map +1 -0
  25. package/dist/commonjs/a365/contracts.d.ts +250 -0
  26. package/dist/commonjs/a365/contracts.d.ts.map +1 -0
  27. package/dist/commonjs/a365/contracts.js +52 -0
  28. package/dist/commonjs/a365/contracts.js.map +1 -0
  29. package/dist/commonjs/a365/exporter/Agent365Exporter.d.ts +25 -0
  30. package/dist/commonjs/a365/exporter/Agent365Exporter.d.ts.map +1 -0
  31. package/dist/commonjs/a365/exporter/Agent365Exporter.js +220 -0
  32. package/dist/commonjs/a365/exporter/Agent365Exporter.js.map +1 -0
  33. package/dist/commonjs/a365/exporter/Agent365ExporterOptions.d.ts +43 -0
  34. package/dist/commonjs/a365/exporter/Agent365ExporterOptions.d.ts.map +1 -0
  35. package/dist/commonjs/a365/exporter/Agent365ExporterOptions.js +30 -0
  36. package/dist/commonjs/a365/exporter/Agent365ExporterOptions.js.map +1 -0
  37. package/dist/commonjs/a365/exporter/ExporterEventNames.d.ts +9 -0
  38. package/dist/commonjs/a365/exporter/ExporterEventNames.d.ts.map +1 -0
  39. package/dist/commonjs/a365/exporter/ExporterEventNames.js +15 -0
  40. package/dist/commonjs/a365/exporter/ExporterEventNames.js.map +1 -0
  41. package/dist/commonjs/a365/exporter/index.d.ts +6 -0
  42. package/dist/commonjs/a365/exporter/index.d.ts.map +1 -0
  43. package/dist/commonjs/a365/exporter/index.js +15 -0
  44. package/dist/commonjs/a365/exporter/index.js.map +1 -0
  45. package/dist/commonjs/a365/exporter/utils.d.ts +41 -0
  46. package/dist/commonjs/a365/exporter/utils.d.ts.map +1 -0
  47. package/dist/commonjs/a365/exporter/utils.js +410 -0
  48. package/dist/commonjs/a365/exporter/utils.js.map +1 -0
  49. package/dist/commonjs/a365/index.d.ts +16 -0
  50. package/dist/commonjs/a365/index.d.ts.map +1 -0
  51. package/dist/commonjs/a365/index.js +54 -0
  52. package/dist/commonjs/a365/index.js.map +1 -0
  53. package/dist/commonjs/a365/message-utils.d.ts +42 -0
  54. package/dist/commonjs/a365/message-utils.d.ts.map +1 -0
  55. package/dist/commonjs/a365/message-utils.js +116 -0
  56. package/dist/commonjs/a365/message-utils.js.map +1 -0
  57. package/dist/commonjs/a365/middleware/BaggageBuilder.d.ts +112 -0
  58. package/dist/commonjs/a365/middleware/BaggageBuilder.d.ts.map +1 -0
  59. package/dist/commonjs/a365/middleware/BaggageBuilder.js +249 -0
  60. package/dist/commonjs/a365/middleware/BaggageBuilder.js.map +1 -0
  61. package/dist/commonjs/a365/middleware/index.d.ts +2 -0
  62. package/dist/commonjs/a365/middleware/index.d.ts.map +1 -0
  63. package/dist/commonjs/a365/middleware/index.js +9 -0
  64. package/dist/commonjs/a365/middleware/index.js.map +1 -0
  65. package/dist/commonjs/a365/processors/A365SpanProcessor.d.ts +32 -0
  66. package/dist/commonjs/a365/processors/A365SpanProcessor.d.ts.map +1 -0
  67. package/dist/commonjs/a365/processors/A365SpanProcessor.js +104 -0
  68. package/dist/commonjs/a365/processors/A365SpanProcessor.js.map +1 -0
  69. package/dist/commonjs/a365/processors/PerRequestSpanProcessor.d.ts +44 -0
  70. package/dist/commonjs/a365/processors/PerRequestSpanProcessor.d.ts.map +1 -0
  71. package/dist/commonjs/a365/processors/PerRequestSpanProcessor.js +260 -0
  72. package/dist/commonjs/a365/processors/PerRequestSpanProcessor.js.map +1 -0
  73. package/dist/commonjs/a365/processors/index.d.ts +5 -0
  74. package/dist/commonjs/a365/processors/index.d.ts.map +1 -0
  75. package/dist/commonjs/a365/processors/index.js +13 -0
  76. package/dist/commonjs/a365/processors/index.js.map +1 -0
  77. package/dist/commonjs/a365/processors/util.d.ts +10 -0
  78. package/dist/commonjs/a365/processors/util.d.ts.map +1 -0
  79. package/dist/commonjs/a365/processors/util.js +56 -0
  80. package/dist/commonjs/a365/processors/util.js.map +1 -0
  81. package/dist/commonjs/a365/scopes/ExecuteToolScope.d.ts +24 -0
  82. package/dist/commonjs/a365/scopes/ExecuteToolScope.d.ts.map +1 -0
  83. package/dist/commonjs/a365/scopes/ExecuteToolScope.js +60 -0
  84. package/dist/commonjs/a365/scopes/ExecuteToolScope.js.map +1 -0
  85. package/dist/commonjs/a365/scopes/InferenceScope.d.ts +29 -0
  86. package/dist/commonjs/a365/scopes/InferenceScope.d.ts.map +1 -0
  87. package/dist/commonjs/a365/scopes/InferenceScope.js +75 -0
  88. package/dist/commonjs/a365/scopes/InferenceScope.js.map +1 -0
  89. package/dist/commonjs/a365/scopes/InvokeAgentScope.d.ts +25 -0
  90. package/dist/commonjs/a365/scopes/InvokeAgentScope.d.ts.map +1 -0
  91. package/dist/commonjs/a365/scopes/InvokeAgentScope.js +84 -0
  92. package/dist/commonjs/a365/scopes/InvokeAgentScope.js.map +1 -0
  93. package/dist/commonjs/a365/scopes/OpenTelemetryScope.d.ts +59 -0
  94. package/dist/commonjs/a365/scopes/OpenTelemetryScope.d.ts.map +1 -0
  95. package/dist/commonjs/a365/scopes/OpenTelemetryScope.js +199 -0
  96. package/dist/commonjs/a365/scopes/OpenTelemetryScope.js.map +1 -0
  97. package/dist/commonjs/a365/scopes/OutputScope.d.ts +26 -0
  98. package/dist/commonjs/a365/scopes/OutputScope.d.ts.map +1 -0
  99. package/dist/commonjs/a365/scopes/OutputScope.js +73 -0
  100. package/dist/commonjs/a365/scopes/OutputScope.js.map +1 -0
  101. package/dist/commonjs/a365/scopes/index.d.ts +6 -0
  102. package/dist/commonjs/a365/scopes/index.d.ts.map +1 -0
  103. package/dist/commonjs/a365/scopes/index.js +16 -0
  104. package/dist/commonjs/a365/scopes/index.js.map +1 -0
  105. package/dist/commonjs/a365/utils/utils.d.ts +6 -0
  106. package/dist/commonjs/a365/utils/utils.d.ts.map +1 -0
  107. package/dist/commonjs/a365/utils/utils.js +14 -0
  108. package/dist/commonjs/a365/utils/utils.js.map +1 -0
  109. package/dist/commonjs/azureMonitor/metrics/quickpulse/types.d.ts +1 -1
  110. package/dist/commonjs/azureMonitor/traces/handler.d.ts.map +1 -1
  111. package/dist/commonjs/azureMonitor/traces/handler.js +8 -2
  112. package/dist/commonjs/azureMonitor/traces/handler.js.map +1 -1
  113. package/dist/commonjs/distro/distro.d.ts +1 -1
  114. package/dist/commonjs/distro/distro.d.ts.map +1 -1
  115. package/dist/commonjs/distro/distro.js +44 -92
  116. package/dist/commonjs/distro/distro.js.map +1 -1
  117. package/dist/commonjs/distro/types.d.ts +2 -1
  118. package/dist/commonjs/distro/types.d.ts.map +1 -1
  119. package/dist/commonjs/index.d.ts +5 -0
  120. package/dist/commonjs/index.d.ts.map +1 -1
  121. package/dist/commonjs/index.js +33 -1
  122. package/dist/commonjs/index.js.map +1 -1
  123. package/dist/commonjs/package.json +1 -0
  124. package/dist/commonjs/shared/jsonConfig.d.ts +2 -1
  125. package/dist/commonjs/shared/jsonConfig.d.ts.map +1 -1
  126. package/dist/commonjs/shared/module.js +15 -11
  127. package/dist/commonjs/shared/module.js.map +1 -1
  128. package/dist/commonjs/types.d.ts +4 -30
  129. package/dist/commonjs/types.d.ts.map +1 -1
  130. package/dist/commonjs/types.js +1 -1
  131. package/dist/commonjs/types.js.map +1 -1
  132. package/dist/esm/a365/configuration/A365Configuration.d.ts +42 -0
  133. package/dist/esm/a365/configuration/A365Configuration.d.ts.map +1 -0
  134. package/dist/esm/a365/configuration/A365Configuration.js +158 -0
  135. package/dist/esm/a365/configuration/A365Configuration.js.map +1 -0
  136. package/dist/esm/a365/configuration/A365ConfigurationOptions.d.ts +53 -0
  137. package/dist/esm/a365/configuration/A365ConfigurationOptions.d.ts.map +1 -0
  138. package/dist/esm/a365/configuration/A365ConfigurationOptions.js +4 -0
  139. package/dist/esm/a365/configuration/A365ConfigurationOptions.js.map +1 -0
  140. package/dist/esm/a365/configuration/index.d.ts +3 -0
  141. package/dist/esm/a365/configuration/index.d.ts.map +1 -0
  142. package/dist/esm/a365/configuration/index.js +4 -0
  143. package/dist/esm/a365/configuration/index.js.map +1 -0
  144. package/dist/esm/a365/constants.d.ts +76 -0
  145. package/dist/esm/a365/constants.d.ts.map +1 -0
  146. package/dist/esm/a365/constants.js +95 -0
  147. package/dist/esm/a365/constants.js.map +1 -0
  148. package/dist/esm/a365/context/tokenContext.d.ts +25 -0
  149. package/dist/esm/a365/context/tokenContext.d.ts.map +1 -0
  150. package/dist/esm/a365/context/tokenContext.js +62 -0
  151. package/dist/esm/a365/context/tokenContext.js.map +1 -0
  152. package/dist/esm/a365/context.d.ts +31 -0
  153. package/dist/esm/a365/context.d.ts.map +1 -0
  154. package/dist/esm/a365/context.js +101 -0
  155. package/dist/esm/a365/context.js.map +1 -0
  156. package/dist/esm/a365/contracts.d.ts +250 -0
  157. package/dist/esm/a365/contracts.d.ts.map +1 -0
  158. package/dist/esm/a365/contracts.js +49 -0
  159. package/dist/esm/a365/contracts.js.map +1 -0
  160. package/dist/esm/a365/exporter/Agent365Exporter.d.ts +25 -0
  161. package/dist/esm/a365/exporter/Agent365Exporter.d.ts.map +1 -0
  162. package/dist/esm/a365/exporter/Agent365Exporter.js +216 -0
  163. package/dist/esm/a365/exporter/Agent365Exporter.js.map +1 -0
  164. package/dist/esm/a365/exporter/Agent365ExporterOptions.d.ts +43 -0
  165. package/dist/esm/a365/exporter/Agent365ExporterOptions.d.ts.map +1 -0
  166. package/dist/esm/a365/exporter/Agent365ExporterOptions.js +26 -0
  167. package/dist/esm/a365/exporter/Agent365ExporterOptions.js.map +1 -0
  168. package/dist/esm/a365/exporter/ExporterEventNames.d.ts +9 -0
  169. package/dist/esm/a365/exporter/ExporterEventNames.d.ts.map +1 -0
  170. package/dist/esm/a365/exporter/ExporterEventNames.js +12 -0
  171. package/dist/esm/a365/exporter/ExporterEventNames.js.map +1 -0
  172. package/dist/esm/a365/exporter/index.d.ts +6 -0
  173. package/dist/esm/a365/exporter/index.d.ts.map +1 -0
  174. package/dist/esm/a365/exporter/index.js +7 -0
  175. package/dist/esm/a365/exporter/index.js.map +1 -0
  176. package/dist/esm/a365/exporter/utils.d.ts +41 -0
  177. package/dist/esm/a365/exporter/utils.d.ts.map +1 -0
  178. package/dist/esm/a365/exporter/utils.js +398 -0
  179. package/dist/esm/a365/exporter/utils.js.map +1 -0
  180. package/dist/esm/a365/index.d.ts +16 -0
  181. package/dist/esm/a365/index.d.ts.map +1 -0
  182. package/dist/esm/a365/index.js +20 -0
  183. package/dist/esm/a365/index.js.map +1 -0
  184. package/dist/esm/a365/message-utils.d.ts +42 -0
  185. package/dist/esm/a365/message-utils.d.ts.map +1 -0
  186. package/dist/esm/a365/message-utils.js +107 -0
  187. package/dist/esm/a365/message-utils.js.map +1 -0
  188. package/dist/esm/a365/middleware/BaggageBuilder.d.ts +112 -0
  189. package/dist/esm/a365/middleware/BaggageBuilder.d.ts.map +1 -0
  190. package/dist/esm/a365/middleware/BaggageBuilder.js +244 -0
  191. package/dist/esm/a365/middleware/BaggageBuilder.js.map +1 -0
  192. package/dist/esm/a365/middleware/index.d.ts +2 -0
  193. package/dist/esm/a365/middleware/index.d.ts.map +1 -0
  194. package/dist/esm/a365/middleware/index.js +4 -0
  195. package/dist/esm/a365/middleware/index.js.map +1 -0
  196. package/dist/esm/a365/processors/A365SpanProcessor.d.ts +32 -0
  197. package/dist/esm/a365/processors/A365SpanProcessor.d.ts.map +1 -0
  198. package/dist/esm/a365/processors/A365SpanProcessor.js +100 -0
  199. package/dist/esm/a365/processors/A365SpanProcessor.js.map +1 -0
  200. package/dist/esm/a365/processors/PerRequestSpanProcessor.d.ts +44 -0
  201. package/dist/esm/a365/processors/PerRequestSpanProcessor.d.ts.map +1 -0
  202. package/dist/esm/a365/processors/PerRequestSpanProcessor.js +256 -0
  203. package/dist/esm/a365/processors/PerRequestSpanProcessor.js.map +1 -0
  204. package/dist/esm/a365/processors/index.d.ts +5 -0
  205. package/dist/esm/a365/processors/index.d.ts.map +1 -0
  206. package/dist/esm/a365/processors/index.js +6 -0
  207. package/dist/esm/a365/processors/index.js.map +1 -0
  208. package/dist/esm/a365/processors/util.d.ts +10 -0
  209. package/dist/esm/a365/processors/util.d.ts.map +1 -0
  210. package/dist/esm/a365/processors/util.js +53 -0
  211. package/dist/esm/a365/processors/util.js.map +1 -0
  212. package/dist/esm/a365/scopes/ExecuteToolScope.d.ts +24 -0
  213. package/dist/esm/a365/scopes/ExecuteToolScope.d.ts.map +1 -0
  214. package/dist/esm/a365/scopes/ExecuteToolScope.js +56 -0
  215. package/dist/esm/a365/scopes/ExecuteToolScope.js.map +1 -0
  216. package/dist/esm/a365/scopes/InferenceScope.d.ts +29 -0
  217. package/dist/esm/a365/scopes/InferenceScope.d.ts.map +1 -0
  218. package/dist/esm/a365/scopes/InferenceScope.js +71 -0
  219. package/dist/esm/a365/scopes/InferenceScope.js.map +1 -0
  220. package/dist/esm/a365/scopes/InvokeAgentScope.d.ts +25 -0
  221. package/dist/esm/a365/scopes/InvokeAgentScope.d.ts.map +1 -0
  222. package/dist/esm/a365/scopes/InvokeAgentScope.js +80 -0
  223. package/dist/esm/a365/scopes/InvokeAgentScope.js.map +1 -0
  224. package/dist/esm/a365/scopes/OpenTelemetryScope.d.ts +59 -0
  225. package/dist/esm/a365/scopes/OpenTelemetryScope.d.ts.map +1 -0
  226. package/dist/esm/a365/scopes/OpenTelemetryScope.js +195 -0
  227. package/dist/esm/a365/scopes/OpenTelemetryScope.js.map +1 -0
  228. package/dist/esm/a365/scopes/OutputScope.d.ts +26 -0
  229. package/dist/esm/a365/scopes/OutputScope.d.ts.map +1 -0
  230. package/dist/esm/a365/scopes/OutputScope.js +69 -0
  231. package/dist/esm/a365/scopes/OutputScope.js.map +1 -0
  232. package/dist/esm/a365/scopes/index.d.ts +6 -0
  233. package/dist/esm/a365/scopes/index.d.ts.map +1 -0
  234. package/dist/esm/a365/scopes/index.js +8 -0
  235. package/dist/esm/a365/scopes/index.js.map +1 -0
  236. package/dist/esm/a365/utils/utils.d.ts +6 -0
  237. package/dist/esm/a365/utils/utils.d.ts.map +1 -0
  238. package/dist/esm/a365/utils/utils.js +11 -0
  239. package/dist/esm/a365/utils/utils.js.map +1 -0
  240. package/dist/esm/azureMonitor/metrics/quickpulse/types.d.ts +1 -1
  241. package/dist/esm/azureMonitor/traces/handler.d.ts.map +1 -1
  242. package/dist/esm/azureMonitor/traces/handler.js +5 -1
  243. package/dist/esm/azureMonitor/traces/handler.js.map +1 -1
  244. package/dist/esm/distro/distro.d.ts +1 -1
  245. package/dist/esm/distro/distro.d.ts.map +1 -1
  246. package/dist/esm/distro/distro.js +44 -92
  247. package/dist/esm/distro/distro.js.map +1 -1
  248. package/dist/esm/distro/types.d.ts +2 -1
  249. package/dist/esm/distro/types.d.ts.map +1 -1
  250. package/dist/esm/index.d.ts +5 -0
  251. package/dist/esm/index.d.ts.map +1 -1
  252. package/dist/esm/index.js +4 -0
  253. package/dist/esm/index.js.map +1 -1
  254. package/dist/esm/shared/jsonConfig.d.ts +2 -1
  255. package/dist/esm/shared/jsonConfig.d.ts.map +1 -1
  256. package/dist/esm/types.d.ts +4 -30
  257. package/dist/esm/types.d.ts.map +1 -1
  258. package/dist/esm/types.js +1 -1
  259. package/dist/esm/types.js.map +1 -1
  260. package/package.json +3 -4
@@ -0,0 +1,256 @@
1
+ // Copyright (c) Microsoft Corporation.
2
+ // Licensed under the MIT License.
3
+ /**
4
+ * Buffers spans per trace and exports once the request completes.
5
+ * Token is not stored; we export under the saved request Context so that
6
+ * getExportToken() can read the token from the active OpenTelemetry Context at export time.
7
+ *
8
+ * Adapted from microsoft/Agent365-nodejs agents-a365-observability/src/tracing/PerRequestSpanProcessor.ts
9
+ */
10
+ import { context, trace } from "@opentelemetry/api";
11
+ import { Logger } from "../../shared/logging/index.js";
12
+ const logger = Logger.getInstance();
13
+ function isRootSpan(span) {
14
+ return !span.parentSpanContext;
15
+ }
16
+ /**
17
+ * Check whether this span is a root span by examining the parent context.
18
+ * In onStart, the SDK passes a live Span (not ReadableSpan), so we check
19
+ * whether the parent context already contains a span.
20
+ */
21
+ function isRootSpanFromContext(ctx) {
22
+ const parentSpan = trace.getSpan(ctx);
23
+ return !parentSpan;
24
+ }
25
+ // Default values
26
+ const DEFAULT_MAX_BUFFERED_TRACES = 1000;
27
+ const DEFAULT_MAX_SPANS_PER_TRACE = 5000;
28
+ const DEFAULT_MAX_CONCURRENT_EXPORTS = 20;
29
+ const DEFAULT_FLUSH_GRACE_MS = 250;
30
+ const DEFAULT_MAX_TRACE_AGE_MS = 1800000; // 30 minutes
31
+ function parseEnvInt(envVar, defaultValue) {
32
+ if (envVar === undefined || envVar === "")
33
+ return defaultValue;
34
+ const parsed = parseInt(envVar, 10);
35
+ return Number.isNaN(parsed) ? defaultValue : parsed;
36
+ }
37
+ /**
38
+ * Buffers spans per trace and exports them together once the trace completes.
39
+ *
40
+ * This processor supports per-request token resolution by exporting under
41
+ * the original request Context so that getExportToken() can read the token
42
+ * from the active OpenTelemetry Context at export time.
43
+ */
44
+ export class PerRequestSpanProcessor {
45
+ exporter;
46
+ traces = new Map();
47
+ sweepTimer;
48
+ isSweeping = false;
49
+ maxBufferedTraces;
50
+ maxSpansPerTrace;
51
+ maxConcurrentExports;
52
+ flushGraceMs;
53
+ maxTraceAgeMs;
54
+ inFlightExports = 0;
55
+ exportWaiters = [];
56
+ constructor(exporter, options) {
57
+ this.exporter = exporter;
58
+ this.maxBufferedTraces = parseEnvInt(process.env.A365_PER_REQUEST_MAX_TRACES, options?.maxBufferedTraces ?? DEFAULT_MAX_BUFFERED_TRACES);
59
+ this.maxSpansPerTrace = parseEnvInt(process.env.A365_PER_REQUEST_MAX_SPANS_PER_TRACE, options?.maxSpansPerTrace ?? DEFAULT_MAX_SPANS_PER_TRACE);
60
+ this.maxConcurrentExports = parseEnvInt(process.env.A365_PER_REQUEST_MAX_CONCURRENT_EXPORTS, options?.maxConcurrentExports ?? DEFAULT_MAX_CONCURRENT_EXPORTS);
61
+ this.flushGraceMs = parseEnvInt(process.env.A365_PER_REQUEST_FLUSH_GRACE_MS, options?.flushGraceMs ?? DEFAULT_FLUSH_GRACE_MS);
62
+ this.maxTraceAgeMs = parseEnvInt(process.env.A365_PER_REQUEST_MAX_TRACE_AGE_MS, options?.maxTraceAgeMs ?? DEFAULT_MAX_TRACE_AGE_MS);
63
+ }
64
+ onStart(span, ctx) {
65
+ const traceId = span.spanContext().traceId;
66
+ let buf = this.traces.get(traceId);
67
+ if (!buf) {
68
+ if (this.traces.size >= this.maxBufferedTraces) {
69
+ logger.warn(`[PerRequestSpanProcessor] Dropping new trace due to maxBufferedTraces=${this.maxBufferedTraces} traceId=${traceId}`);
70
+ return;
71
+ }
72
+ buf = {
73
+ spans: [],
74
+ openCount: 0,
75
+ rootEnded: false,
76
+ rootCtx: undefined,
77
+ startedAtMs: Date.now(),
78
+ droppedSpans: 0,
79
+ };
80
+ this.traces.set(traceId, buf);
81
+ this.ensureSweepTimer();
82
+ logger.debug(`[PerRequestSpanProcessor] Trace started traceId=${traceId} maxTraceAgeMs=${this.maxTraceAgeMs}`);
83
+ }
84
+ buf.openCount += 1;
85
+ const root = isRootSpanFromContext(ctx);
86
+ logger.debug(`[PerRequestSpanProcessor] Span start traceId=${traceId} spanId=${span.spanContext().spanId}` +
87
+ ` root=${root} openCount=${buf.openCount}`);
88
+ // Capture a context to export under.
89
+ if (root) {
90
+ buf.rootCtx = ctx;
91
+ }
92
+ else {
93
+ buf.rootCtx ??= ctx;
94
+ }
95
+ }
96
+ onEnd(span) {
97
+ const traceId = span.spanContext().traceId;
98
+ const buf = this.traces.get(traceId);
99
+ if (!buf)
100
+ return;
101
+ if (buf.spans.length >= this.maxSpansPerTrace) {
102
+ buf.droppedSpans += 1;
103
+ if (buf.droppedSpans === 1 || buf.droppedSpans % 100 === 0) {
104
+ logger.warn(`[PerRequestSpanProcessor] Dropping ended span due to maxSpansPerTrace=${this.maxSpansPerTrace} ` +
105
+ `traceId=${traceId} droppedSpans=${buf.droppedSpans}`);
106
+ }
107
+ }
108
+ else {
109
+ buf.spans.push(span);
110
+ }
111
+ buf.openCount -= 1;
112
+ if (buf.openCount < 0) {
113
+ logger.warn(`[PerRequestSpanProcessor] openCount underflow traceId=${traceId} spanId=${span.spanContext().spanId} resettingToZero`);
114
+ buf.openCount = 0;
115
+ }
116
+ logger.debug(`[PerRequestSpanProcessor] Span end name=${span.name} traceId=${traceId} spanId=${span.spanContext().spanId}` +
117
+ ` root=${isRootSpan(span)} openCount=${buf.openCount} rootEnded=${buf.rootEnded}`);
118
+ if (isRootSpan(span)) {
119
+ buf.rootEnded = true;
120
+ buf.rootEndedAtMs = Date.now();
121
+ if (buf.openCount === 0) {
122
+ this.flushTrace(traceId, "trace_completed");
123
+ }
124
+ }
125
+ else if (buf.rootEnded && buf.openCount === 0) {
126
+ this.flushTrace(traceId, "trace_completed");
127
+ }
128
+ }
129
+ async forceFlush() {
130
+ await Promise.all([...this.traces.keys()].map((id) => this.flushTrace(id, "force_flush")));
131
+ }
132
+ async shutdown() {
133
+ await this.forceFlush();
134
+ this.stopSweepTimerIfIdle();
135
+ await this.exporter.shutdown?.();
136
+ }
137
+ ensureSweepTimer() {
138
+ if (this.sweepTimer)
139
+ return;
140
+ const intervalMs = Math.max(10, Math.min(this.flushGraceMs, 250));
141
+ this.sweepTimer = setInterval(() => {
142
+ void this.sweep();
143
+ }, intervalMs);
144
+ if (typeof this.sweepTimer === "object" && "unref" in this.sweepTimer) {
145
+ this.sweepTimer.unref();
146
+ }
147
+ }
148
+ stopSweepTimerIfIdle() {
149
+ if (this.traces.size !== 0)
150
+ return;
151
+ if (!this.sweepTimer)
152
+ return;
153
+ clearInterval(this.sweepTimer);
154
+ this.sweepTimer = undefined;
155
+ }
156
+ async sweep() {
157
+ if (this.isSweeping)
158
+ return;
159
+ this.isSweeping = true;
160
+ try {
161
+ if (this.traces.size === 0) {
162
+ this.stopSweepTimerIfIdle();
163
+ return;
164
+ }
165
+ const now = Date.now();
166
+ const toFlush = [];
167
+ for (const [traceId, trace] of this.traces.entries()) {
168
+ // 1) Max age safety flush
169
+ if (now - trace.startedAtMs >= this.maxTraceAgeMs) {
170
+ toFlush.push({ traceId, reason: "max_trace_age" });
171
+ continue;
172
+ }
173
+ // 2) Root ended grace window flush
174
+ if (trace.rootEnded && trace.openCount > 0 && trace.rootEndedAtMs) {
175
+ if (now - trace.rootEndedAtMs >= this.flushGraceMs) {
176
+ toFlush.push({ traceId, reason: "root_ended_grace" });
177
+ }
178
+ }
179
+ }
180
+ await Promise.all(toFlush.map((x) => this.flushTrace(x.traceId, x.reason)));
181
+ this.stopSweepTimerIfIdle();
182
+ }
183
+ finally {
184
+ this.isSweeping = false;
185
+ }
186
+ }
187
+ async flushTrace(traceId, reason) {
188
+ const trace = this.traces.get(traceId);
189
+ if (!trace)
190
+ return;
191
+ this.traces.delete(traceId);
192
+ this.stopSweepTimerIfIdle();
193
+ const spans = trace.spans;
194
+ if (spans.length === 0)
195
+ return;
196
+ logger.debug(`[PerRequestSpanProcessor] Flushing trace traceId=${traceId} reason=${reason} spans=${spans.length} rootEnded=${trace.rootEnded}`);
197
+ if (!trace.rootCtx) {
198
+ logger.error(`[PerRequestSpanProcessor] Missing rootCtx for trace ${traceId}, cannot export spans`);
199
+ return;
200
+ }
201
+ await this.acquireExportSlot();
202
+ try {
203
+ await new Promise((resolve) => {
204
+ try {
205
+ context.with(trace.rootCtx, () => {
206
+ try {
207
+ this.exporter.export(spans, (result) => {
208
+ if (result.code !== 0) {
209
+ logger.error(`[PerRequestSpanProcessor] Export failed traceId=${traceId} reason=${reason} code=${result.code}`, result.error);
210
+ }
211
+ else {
212
+ logger.debug(`[PerRequestSpanProcessor] Export succeeded traceId=${traceId} reason=${reason} spans=${spans.length}`);
213
+ }
214
+ resolve();
215
+ });
216
+ }
217
+ catch (err) {
218
+ logger.error(`[PerRequestSpanProcessor] Export threw traceId=${traceId} reason=${reason} spans=${spans.length}`, err);
219
+ resolve();
220
+ }
221
+ });
222
+ }
223
+ catch (err) {
224
+ logger.error(`[PerRequestSpanProcessor] context.with threw traceId=${traceId} reason=${reason}`, err);
225
+ resolve();
226
+ }
227
+ });
228
+ }
229
+ finally {
230
+ this.releaseExportSlot();
231
+ }
232
+ }
233
+ async acquireExportSlot() {
234
+ if (this.maxConcurrentExports <= 0)
235
+ return;
236
+ if (this.inFlightExports < this.maxConcurrentExports) {
237
+ this.inFlightExports += 1;
238
+ return;
239
+ }
240
+ await new Promise((resolve) => {
241
+ this.exportWaiters.push(() => {
242
+ this.inFlightExports += 1;
243
+ resolve();
244
+ });
245
+ });
246
+ }
247
+ releaseExportSlot() {
248
+ if (this.maxConcurrentExports <= 0)
249
+ return;
250
+ this.inFlightExports = Math.max(0, this.inFlightExports - 1);
251
+ const next = this.exportWaiters.shift();
252
+ if (next)
253
+ next();
254
+ }
255
+ }
256
+ //# sourceMappingURL=PerRequestSpanProcessor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PerRequestSpanProcessor.js","sourceRoot":"","sources":["../../../../src/a365/processors/PerRequestSpanProcessor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export { A365SpanProcessor } from "./A365SpanProcessor.js";
2
+ export { GENERIC_ATTRIBUTES, INVOKE_AGENT_ATTRIBUTES } from "./util.js";
3
+ export { PerRequestSpanProcessor } from "./PerRequestSpanProcessor.js";
4
+ export type { PerRequestSpanProcessorOptions } from "./PerRequestSpanProcessor.js";
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/a365/processors/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,MAAM,WAAW,CAAC;AACxE,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AACvE,YAAY,EAAE,8BAA8B,EAAE,MAAM,8BAA8B,CAAC"}
@@ -0,0 +1,6 @@
1
+ // Copyright (c) Microsoft Corporation.
2
+ // Licensed under the MIT License.
3
+ export { A365SpanProcessor } from "./A365SpanProcessor.js";
4
+ export { GENERIC_ATTRIBUTES, INVOKE_AGENT_ATTRIBUTES } from "./util.js";
5
+ export { PerRequestSpanProcessor } from "./PerRequestSpanProcessor.js";
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/a365/processors/index.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,MAAM,WAAW,CAAC;AACxE,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Generic / common tracing attributes applied to all spans.
3
+ */
4
+ export declare const GENERIC_ATTRIBUTES: readonly string[];
5
+ /**
6
+ * Invoke Agent-specific attributes.
7
+ * These are only applied to spans whose operation is `invoke_agent`.
8
+ */
9
+ export declare const INVOKE_AGENT_ATTRIBUTES: readonly string[];
10
+ //# sourceMappingURL=util.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../../../src/a365/processors/util.ts"],"names":[],"mappings":"AAWA;;GAEG;AACH,eAAO,MAAM,kBAAkB,EAAE,SAAS,MAAM,EA0B/C,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,uBAAuB,EAAE,SAAS,MAAM,EASpD,CAAC"}
@@ -0,0 +1,53 @@
1
+ // Copyright (c) Microsoft Corporation.
2
+ // Licensed under the MIT License.
3
+ /**
4
+ * Attribute key sets used by the SpanProcessor to copy baggage entries to span attributes.
5
+ *
6
+ * Adapted from microsoft/Agent365-nodejs agents-a365-observability/src/tracing/processors/util.ts
7
+ */
8
+ import { OpenTelemetryConstants as consts } from "../constants.js";
9
+ /**
10
+ * Generic / common tracing attributes applied to all spans.
11
+ */
12
+ export const GENERIC_ATTRIBUTES = [
13
+ consts.TENANT_ID_KEY,
14
+ consts.CUSTOM_PARENT_SPAN_ID_KEY,
15
+ consts.CUSTOM_SPAN_NAME_KEY,
16
+ consts.SESSION_ID_KEY,
17
+ consts.GEN_AI_CONVERSATION_ID_KEY,
18
+ consts.GEN_AI_CONVERSATION_ITEM_LINK_KEY,
19
+ consts.GEN_AI_OPERATION_NAME_KEY,
20
+ consts.GEN_AI_AGENT_ID_KEY,
21
+ consts.GEN_AI_AGENT_NAME_KEY,
22
+ consts.GEN_AI_AGENT_DESCRIPTION_KEY,
23
+ consts.SESSION_DESCRIPTION_KEY,
24
+ consts.GEN_AI_AGENT_EMAIL_KEY,
25
+ consts.GEN_AI_AGENT_AUID_KEY,
26
+ consts.GEN_AI_AGENT_PLATFORM_ID_KEY,
27
+ consts.GEN_AI_AGENT_BLUEPRINT_ID_KEY,
28
+ consts.GEN_AI_AGENT_VERSION_KEY,
29
+ consts.SERVICE_NAME_KEY,
30
+ // Caller / Invoker attributes
31
+ consts.USER_ID_KEY,
32
+ consts.USER_NAME_KEY,
33
+ consts.USER_EMAIL_KEY,
34
+ consts.GEN_AI_CALLER_CLIENT_IP_KEY,
35
+ // Channel attributes
36
+ consts.CHANNEL_NAME_KEY,
37
+ consts.CHANNEL_LINK_KEY,
38
+ ];
39
+ /**
40
+ * Invoke Agent-specific attributes.
41
+ * These are only applied to spans whose operation is `invoke_agent`.
42
+ */
43
+ export const INVOKE_AGENT_ATTRIBUTES = [
44
+ // Caller Agent (A2A) attributes
45
+ consts.GEN_AI_CALLER_AGENT_ID_KEY,
46
+ consts.GEN_AI_CALLER_AGENT_NAME_KEY,
47
+ consts.GEN_AI_CALLER_AGENT_USER_ID_KEY,
48
+ consts.GEN_AI_CALLER_AGENT_EMAIL_KEY,
49
+ consts.GEN_AI_CALLER_AGENT_APPLICATION_ID_KEY,
50
+ consts.GEN_AI_CALLER_AGENT_PLATFORM_ID_KEY,
51
+ consts.GEN_AI_CALLER_AGENT_VERSION_KEY,
52
+ ];
53
+ //# sourceMappingURL=util.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"util.js","sourceRoot":"","sources":["../../../../src/a365/processors/util.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC;;;;GAIG;AAEH,OAAO,EAAE,sBAAsB,IAAI,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAEnE;;GAEG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAsB;IACnD,MAAM,CAAC,aAAa;IACpB,MAAM,CAAC,yBAAyB;IAChC,MAAM,CAAC,oBAAoB;IAC3B,MAAM,CAAC,cAAc;IACrB,MAAM,CAAC,0BAA0B;IACjC,MAAM,CAAC,iCAAiC;IACxC,MAAM,CAAC,yBAAyB;IAChC,MAAM,CAAC,mBAAmB;IAC1B,MAAM,CAAC,qBAAqB;IAC5B,MAAM,CAAC,4BAA4B;IACnC,MAAM,CAAC,uBAAuB;IAC9B,MAAM,CAAC,sBAAsB;IAC7B,MAAM,CAAC,qBAAqB;IAC5B,MAAM,CAAC,4BAA4B;IACnC,MAAM,CAAC,6BAA6B;IACpC,MAAM,CAAC,wBAAwB;IAC/B,MAAM,CAAC,gBAAgB;IACvB,8BAA8B;IAC9B,MAAM,CAAC,WAAW;IAClB,MAAM,CAAC,aAAa;IACpB,MAAM,CAAC,cAAc;IACrB,MAAM,CAAC,2BAA2B;IAClC,qBAAqB;IACrB,MAAM,CAAC,gBAAgB;IACvB,MAAM,CAAC,gBAAgB;CACxB,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAsB;IACxD,gCAAgC;IAChC,MAAM,CAAC,0BAA0B;IACjC,MAAM,CAAC,4BAA4B;IACnC,MAAM,CAAC,+BAA+B;IACtC,MAAM,CAAC,6BAA6B;IACpC,MAAM,CAAC,sCAAsC;IAC7C,MAAM,CAAC,mCAAmC;IAC1C,MAAM,CAAC,+BAA+B;CACvC,CAAC"}
@@ -0,0 +1,24 @@
1
+ import { OpenTelemetryScope } from "./OpenTelemetryScope.js";
2
+ import type { ToolCallDetails, AgentDetails, UserDetails, Request, SpanDetails } from "../contracts.js";
3
+ /**
4
+ * Provides OpenTelemetry tracing scope for AI tool execution operations.
5
+ */
6
+ export declare class ExecuteToolScope extends OpenTelemetryScope {
7
+ /**
8
+ * Creates and starts a new scope for tool execution tracing.
9
+ *
10
+ * @param request Request payload (channel, conversationId, content, sessionId).
11
+ * @param details The tool call details (name, type, args, call id, etc.).
12
+ * @param agentDetails The agent executing the tool. `tenantId` is required.
13
+ * @param userDetails Optional human caller identity.
14
+ * @param spanDetails Optional span configuration. Defaults to SpanKind.INTERNAL.
15
+ */
16
+ static start(request: Request, details: ToolCallDetails, agentDetails: AgentDetails, userDetails?: UserDetails, spanDetails?: SpanDetails): ExecuteToolScope;
17
+ private constructor();
18
+ /**
19
+ * Records response information for telemetry tracking.
20
+ * Objects are serialized to JSON automatically.
21
+ */
22
+ recordResponse(response: Record<string, unknown> | string): void;
23
+ }
24
+ //# sourceMappingURL=ExecuteToolScope.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExecuteToolScope.d.ts","sourceRoot":"","sources":["../../../../src/a365/scopes/ExecuteToolScope.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAG7D,OAAO,KAAK,EACV,eAAe,EACf,YAAY,EACZ,WAAW,EACX,OAAO,EACP,WAAW,EACZ,MAAM,iBAAiB,CAAC;AAEzB;;GAEG;AACH,qBAAa,gBAAiB,SAAQ,kBAAkB;IACtD;;;;;;;;OAQG;WACW,KAAK,CACjB,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,eAAe,EACxB,YAAY,EAAE,YAAY,EAC1B,WAAW,CAAC,EAAE,WAAW,EACzB,WAAW,CAAC,EAAE,WAAW,GACxB,gBAAgB;IAInB,OAAO;IA+CP;;;OAGG;IACI,cAAc,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,GAAG,IAAI;CAMxE"}
@@ -0,0 +1,56 @@
1
+ // Copyright (c) Microsoft Corporation.
2
+ // Licensed under the MIT License.
3
+ import { SpanKind } from "@opentelemetry/api";
4
+ import { OpenTelemetryScope } from "./OpenTelemetryScope.js";
5
+ import { OpenTelemetryConstants } from "../constants.js";
6
+ import { safeSerializeToJson } from "../message-utils.js";
7
+ /**
8
+ * Provides OpenTelemetry tracing scope for AI tool execution operations.
9
+ */
10
+ export class ExecuteToolScope extends OpenTelemetryScope {
11
+ /**
12
+ * Creates and starts a new scope for tool execution tracing.
13
+ *
14
+ * @param request Request payload (channel, conversationId, content, sessionId).
15
+ * @param details The tool call details (name, type, args, call id, etc.).
16
+ * @param agentDetails The agent executing the tool. `tenantId` is required.
17
+ * @param userDetails Optional human caller identity.
18
+ * @param spanDetails Optional span configuration. Defaults to SpanKind.INTERNAL.
19
+ */
20
+ static start(request, details, agentDetails, userDetails, spanDetails) {
21
+ return new ExecuteToolScope(request, details, agentDetails, userDetails, spanDetails);
22
+ }
23
+ constructor(request, details, agentDetails, userDetails, spanDetails) {
24
+ if (!agentDetails.tenantId) {
25
+ throw new Error("ExecuteToolScope: tenantId is required on agentDetails");
26
+ }
27
+ const resolvedSpanDetails = {
28
+ spanKind: SpanKind.INTERNAL,
29
+ ...spanDetails,
30
+ };
31
+ super(OpenTelemetryConstants.EXECUTE_TOOL_OPERATION_NAME, `${OpenTelemetryConstants.EXECUTE_TOOL_OPERATION_NAME} ${details.toolName}`, agentDetails, resolvedSpanDetails, userDetails);
32
+ const { toolName, arguments: args, toolCallId, description, toolType, endpoint } = details;
33
+ this.setTagMaybe(OpenTelemetryConstants.GEN_AI_TOOL_NAME_KEY, toolName);
34
+ this.setTagMaybe(OpenTelemetryConstants.GEN_AI_TOOL_ARGS_KEY, args != null ? safeSerializeToJson(args, "arguments") : undefined);
35
+ this.setTagMaybe(OpenTelemetryConstants.GEN_AI_TOOL_TYPE_KEY, toolType);
36
+ this.setTagMaybe(OpenTelemetryConstants.GEN_AI_TOOL_CALL_ID_KEY, toolCallId);
37
+ this.setTagMaybe(OpenTelemetryConstants.GEN_AI_TOOL_DESCRIPTION_KEY, description);
38
+ this.setTagMaybe(OpenTelemetryConstants.GEN_AI_CONVERSATION_ID_KEY, request.conversationId);
39
+ this.setTagMaybe(OpenTelemetryConstants.CHANNEL_NAME_KEY, request.channel?.name);
40
+ this.setTagMaybe(OpenTelemetryConstants.CHANNEL_LINK_KEY, request.channel?.description);
41
+ if (endpoint) {
42
+ this.setTagMaybe(OpenTelemetryConstants.SERVER_ADDRESS_KEY, endpoint.host);
43
+ if (endpoint.port && endpoint.port !== 443) {
44
+ this.setTagMaybe(OpenTelemetryConstants.SERVER_PORT_KEY, endpoint.port);
45
+ }
46
+ }
47
+ }
48
+ /**
49
+ * Records response information for telemetry tracking.
50
+ * Objects are serialized to JSON automatically.
51
+ */
52
+ recordResponse(response) {
53
+ this.setTagMaybe(OpenTelemetryConstants.GEN_AI_TOOL_CALL_RESULT_KEY, safeSerializeToJson(response, "result"));
54
+ }
55
+ }
56
+ //# sourceMappingURL=ExecuteToolScope.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExecuteToolScope.js","sourceRoot":"","sources":["../../../../src/a365/scopes/ExecuteToolScope.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAS1D;;GAEG;AACH,MAAM,OAAO,gBAAiB,SAAQ,kBAAkB;IACtD;;;;;;;;OAQG;IACI,MAAM,CAAC,KAAK,CACjB,OAAgB,EAChB,OAAwB,EACxB,YAA0B,EAC1B,WAAyB,EACzB,WAAyB;QAEzB,OAAO,IAAI,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;IACxF,CAAC;IAED,YACE,OAAgB,EAChB,OAAwB,EACxB,YAA0B,EAC1B,WAAyB,EACzB,WAAyB;QAEzB,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;QAC5E,CAAC;QAED,MAAM,mBAAmB,GAAgB;YACvC,QAAQ,EAAE,QAAQ,CAAC,QAAQ;YAC3B,GAAG,WAAW;SACf,CAAC;QAEF,KAAK,CACH,sBAAsB,CAAC,2BAA2B,EAClD,GAAG,sBAAsB,CAAC,2BAA2B,IAAI,OAAO,CAAC,QAAQ,EAAE,EAC3E,YAAY,EACZ,mBAAmB,EACnB,WAAW,CACZ,CAAC;QAEF,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC;QAE3F,IAAI,CAAC,WAAW,CAAC,sBAAsB,CAAC,oBAAoB,EAAE,QAAQ,CAAC,CAAC;QACxE,IAAI,CAAC,WAAW,CACd,sBAAsB,CAAC,oBAAoB,EAC3C,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,mBAAmB,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,SAAS,CAClE,CAAC;QACF,IAAI,CAAC,WAAW,CAAC,sBAAsB,CAAC,oBAAoB,EAAE,QAAQ,CAAC,CAAC;QACxE,IAAI,CAAC,WAAW,CAAC,sBAAsB,CAAC,uBAAuB,EAAE,UAAU,CAAC,CAAC;QAC7E,IAAI,CAAC,WAAW,CAAC,sBAAsB,CAAC,2BAA2B,EAAE,WAAW,CAAC,CAAC;QAElF,IAAI,CAAC,WAAW,CAAC,sBAAsB,CAAC,0BAA0B,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC;QAC5F,IAAI,CAAC,WAAW,CAAC,sBAAsB,CAAC,gBAAgB,EAAE,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QACjF,IAAI,CAAC,WAAW,CAAC,sBAAsB,CAAC,gBAAgB,EAAE,OAAO,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;QAExF,IAAI,QAAQ,EAAE,CAAC;YACb,IAAI,CAAC,WAAW,CAAC,sBAAsB,CAAC,kBAAkB,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;YAC3E,IAAI,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC,IAAI,KAAK,GAAG,EAAE,CAAC;gBAC3C,IAAI,CAAC,WAAW,CAAC,sBAAsB,CAAC,eAAe,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;YAC1E,CAAC;QACH,CAAC;IACH,CAAC;IAED;;;OAGG;IACI,cAAc,CAAC,QAA0C;QAC9D,IAAI,CAAC,WAAW,CACd,sBAAsB,CAAC,2BAA2B,EAClD,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CACxC,CAAC;IACJ,CAAC;CACF"}
@@ -0,0 +1,29 @@
1
+ import { OpenTelemetryScope } from "./OpenTelemetryScope.js";
2
+ import type { InferenceDetails, AgentDetails, UserDetails, Request, SpanDetails, InputMessagesParam, OutputMessagesParam } from "../contracts.js";
3
+ /**
4
+ * Provides OpenTelemetry tracing scope for generative AI inference operations.
5
+ */
6
+ export declare class InferenceScope extends OpenTelemetryScope {
7
+ /**
8
+ * Creates and starts a new scope for inference tracing.
9
+ *
10
+ * @param request Request payload (channel, conversationId, content, sessionId).
11
+ * @param details The inference call details (model, provider, tokens, etc.).
12
+ * @param agentDetails The agent performing the inference. `tenantId` is required.
13
+ * @param userDetails Optional human caller identity.
14
+ * @param spanDetails Optional span configuration. `spanKind` is always CLIENT.
15
+ */
16
+ static start(request: Request, details: InferenceDetails, agentDetails: AgentDetails, userDetails?: UserDetails, spanDetails?: SpanDetails): InferenceScope;
17
+ private constructor();
18
+ /** Records the number of input tokens. */
19
+ recordInputTokens(inputTokens: number): void;
20
+ /** Records the number of output tokens. */
21
+ recordOutputTokens(outputTokens: number): void;
22
+ /** Records the finish reasons. */
23
+ recordFinishReasons(finishReasons: string[]): void;
24
+ /** Records the input messages for telemetry tracking. */
25
+ recordInputMessages(messages: InputMessagesParam): void;
26
+ /** Records the output messages for telemetry tracking. */
27
+ recordOutputMessages(messages: OutputMessagesParam): void;
28
+ }
29
+ //# sourceMappingURL=InferenceScope.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InferenceScope.d.ts","sourceRoot":"","sources":["../../../../src/a365/scopes/InferenceScope.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAE7D,OAAO,KAAK,EACV,gBAAgB,EAChB,YAAY,EACZ,WAAW,EACX,OAAO,EACP,WAAW,EACX,kBAAkB,EAClB,mBAAmB,EACpB,MAAM,iBAAiB,CAAC;AAEzB;;GAEG;AACH,qBAAa,cAAe,SAAQ,kBAAkB;IACpD;;;;;;;;OAQG;WACW,KAAK,CACjB,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,gBAAgB,EACzB,YAAY,EAAE,YAAY,EAC1B,WAAW,CAAC,EAAE,WAAW,EACzB,WAAW,CAAC,EAAE,WAAW,GACxB,cAAc;IAIjB,OAAO;IAkDP,0CAA0C;IACnC,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAInD,2CAA2C;IACpC,kBAAkB,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI;IAIrD,kCAAkC;IAC3B,mBAAmB,CAAC,aAAa,EAAE,MAAM,EAAE,GAAG,IAAI;IAMzD,yDAAyD;IACzC,mBAAmB,CAAC,QAAQ,EAAE,kBAAkB,GAAG,IAAI;IAIvE,0DAA0D;IAC1C,oBAAoB,CAAC,QAAQ,EAAE,mBAAmB,GAAG,IAAI;CAG1E"}
@@ -0,0 +1,71 @@
1
+ // Copyright (c) Microsoft Corporation.
2
+ // Licensed under the MIT License.
3
+ import { SpanKind } from "@opentelemetry/api";
4
+ import { OpenTelemetryScope } from "./OpenTelemetryScope.js";
5
+ import { OpenTelemetryConstants } from "../constants.js";
6
+ /**
7
+ * Provides OpenTelemetry tracing scope for generative AI inference operations.
8
+ */
9
+ export class InferenceScope extends OpenTelemetryScope {
10
+ /**
11
+ * Creates and starts a new scope for inference tracing.
12
+ *
13
+ * @param request Request payload (channel, conversationId, content, sessionId).
14
+ * @param details The inference call details (model, provider, tokens, etc.).
15
+ * @param agentDetails The agent performing the inference. `tenantId` is required.
16
+ * @param userDetails Optional human caller identity.
17
+ * @param spanDetails Optional span configuration. `spanKind` is always CLIENT.
18
+ */
19
+ static start(request, details, agentDetails, userDetails, spanDetails) {
20
+ return new InferenceScope(request, details, agentDetails, userDetails, spanDetails);
21
+ }
22
+ constructor(request, details, agentDetails, userDetails, spanDetails) {
23
+ if (!agentDetails.tenantId) {
24
+ throw new Error("InferenceScope: tenantId is required on agentDetails");
25
+ }
26
+ // spanKind for InferenceScope is always CLIENT
27
+ const resolvedSpanDetails = { ...spanDetails, spanKind: SpanKind.CLIENT };
28
+ super(details.operationName.toString(), `${details.operationName} ${details.model}`, agentDetails, resolvedSpanDetails, userDetails);
29
+ // Core inference information
30
+ this.setTagMaybe(OpenTelemetryConstants.GEN_AI_REQUEST_MODEL_KEY, details.model);
31
+ this.setTagMaybe(OpenTelemetryConstants.GEN_AI_PROVIDER_NAME_KEY, details.providerName);
32
+ this.setTagMaybe(OpenTelemetryConstants.GEN_AI_USAGE_INPUT_TOKENS_KEY, details.inputTokens);
33
+ this.setTagMaybe(OpenTelemetryConstants.GEN_AI_USAGE_OUTPUT_TOKENS_KEY, details.outputTokens);
34
+ this.setTagMaybe(OpenTelemetryConstants.GEN_AI_RESPONSE_FINISH_REASONS_KEY, details.finishReasons);
35
+ this.setTagMaybe(OpenTelemetryConstants.GEN_AI_AGENT_THOUGHT_PROCESS_KEY, details.thoughtProcess);
36
+ // Conversation and channel
37
+ this.setTagMaybe(OpenTelemetryConstants.GEN_AI_CONVERSATION_ID_KEY, request.conversationId);
38
+ this.setTagMaybe(OpenTelemetryConstants.CHANNEL_NAME_KEY, request.channel?.name);
39
+ this.setTagMaybe(OpenTelemetryConstants.CHANNEL_LINK_KEY, request.channel?.description);
40
+ // Endpoint
41
+ if (details.endpoint) {
42
+ this.setTagMaybe(OpenTelemetryConstants.SERVER_ADDRESS_KEY, details.endpoint.host);
43
+ if (details.endpoint.port && details.endpoint.port !== 443) {
44
+ this.setTagMaybe(OpenTelemetryConstants.SERVER_PORT_KEY, details.endpoint.port);
45
+ }
46
+ }
47
+ }
48
+ /** Records the number of input tokens. */
49
+ recordInputTokens(inputTokens) {
50
+ this.setTagMaybe(OpenTelemetryConstants.GEN_AI_USAGE_INPUT_TOKENS_KEY, inputTokens);
51
+ }
52
+ /** Records the number of output tokens. */
53
+ recordOutputTokens(outputTokens) {
54
+ this.setTagMaybe(OpenTelemetryConstants.GEN_AI_USAGE_OUTPUT_TOKENS_KEY, outputTokens);
55
+ }
56
+ /** Records the finish reasons. */
57
+ recordFinishReasons(finishReasons) {
58
+ if (finishReasons && finishReasons.length > 0) {
59
+ this.setTagMaybe(OpenTelemetryConstants.GEN_AI_RESPONSE_FINISH_REASONS_KEY, finishReasons);
60
+ }
61
+ }
62
+ /** Records the input messages for telemetry tracking. */
63
+ recordInputMessages(messages) {
64
+ super.recordInputMessages(messages);
65
+ }
66
+ /** Records the output messages for telemetry tracking. */
67
+ recordOutputMessages(messages) {
68
+ super.recordOutputMessages(messages);
69
+ }
70
+ }
71
+ //# sourceMappingURL=InferenceScope.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InferenceScope.js","sourceRoot":"","sources":["../../../../src/a365/scopes/InferenceScope.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ import { OpenTelemetryScope } from "./OpenTelemetryScope.js";
2
+ import type { InvokeAgentScopeDetails, CallerDetails, Request, SpanDetails, AgentDetails, InputMessagesParam, OutputMessagesParam } from "../contracts.js";
3
+ /**
4
+ * Provides OpenTelemetry tracing scope for AI agent invocation operations.
5
+ */
6
+ export declare class InvokeAgentScope extends OpenTelemetryScope {
7
+ /**
8
+ * Creates and starts a new scope for agent invocation tracing.
9
+ *
10
+ * @param request Request payload (channel, conversationId, content, sessionId).
11
+ * @param invokeScopeDetails Scope-level details (endpoint).
12
+ * @param agentDetails The agent identity. `tenantId` is required.
13
+ * @param callerDetails Optional caller information (human, agent, or both for A2A).
14
+ * @param spanDetails Optional span configuration.
15
+ */
16
+ static start(request: Request, invokeScopeDetails: InvokeAgentScopeDetails, agentDetails: AgentDetails, callerDetails?: CallerDetails, spanDetails?: SpanDetails): InvokeAgentScope;
17
+ private constructor();
18
+ /** Records response information for telemetry tracking. */
19
+ recordResponse(response: string): void;
20
+ /** Records the input messages for telemetry tracking. */
21
+ recordInputMessages(messages: InputMessagesParam): void;
22
+ /** Records the output messages for telemetry tracking. */
23
+ recordOutputMessages(messages: OutputMessagesParam): void;
24
+ }
25
+ //# sourceMappingURL=InvokeAgentScope.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InvokeAgentScope.d.ts","sourceRoot":"","sources":["../../../../src/a365/scopes/InvokeAgentScope.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAE7D,OAAO,KAAK,EACV,uBAAuB,EACvB,aAAa,EACb,OAAO,EACP,WAAW,EACX,YAAY,EACZ,kBAAkB,EAClB,mBAAmB,EACpB,MAAM,iBAAiB,CAAC;AAEzB;;GAEG;AACH,qBAAa,gBAAiB,SAAQ,kBAAkB;IACtD;;;;;;;;OAQG;WACW,KAAK,CACjB,OAAO,EAAE,OAAO,EAChB,kBAAkB,EAAE,uBAAuB,EAC3C,YAAY,EAAE,YAAY,EAC1B,aAAa,CAAC,EAAE,aAAa,EAC7B,WAAW,CAAC,EAAE,WAAW,GACxB,gBAAgB;IAUnB,OAAO;IAkFP,2DAA2D;IACpD,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAI7C,yDAAyD;IACzC,mBAAmB,CAAC,QAAQ,EAAE,kBAAkB,GAAG,IAAI;IAIvE,0DAA0D;IAC1C,oBAAoB,CAAC,QAAQ,EAAE,mBAAmB,GAAG,IAAI;CAG1E"}