@microsoft/agents-a365-observability 0.1.0-preview.95 → 0.2.0-preview.1

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 (243) hide show
  1. package/dist/cjs/ObservabilityBuilder.d.ts +24 -1
  2. package/dist/cjs/ObservabilityBuilder.d.ts.map +1 -1
  3. package/dist/cjs/ObservabilityBuilder.js +39 -12
  4. package/dist/cjs/ObservabilityBuilder.js.map +1 -1
  5. package/dist/cjs/ObservabilityManager.d.ts.map +1 -1
  6. package/dist/cjs/ObservabilityManager.js +3 -0
  7. package/dist/cjs/ObservabilityManager.js.map +1 -1
  8. package/dist/cjs/configuration/ObservabilityConfiguration.d.ts +19 -0
  9. package/dist/cjs/configuration/ObservabilityConfiguration.d.ts.map +1 -0
  10. package/dist/cjs/configuration/ObservabilityConfiguration.js +60 -0
  11. package/dist/cjs/configuration/ObservabilityConfiguration.js.map +1 -0
  12. package/dist/cjs/configuration/ObservabilityConfigurationOptions.d.ts +58 -0
  13. package/dist/cjs/configuration/ObservabilityConfigurationOptions.d.ts.map +1 -0
  14. package/dist/cjs/configuration/ObservabilityConfigurationOptions.js +5 -0
  15. package/dist/cjs/configuration/ObservabilityConfigurationOptions.js.map +1 -0
  16. package/dist/cjs/configuration/PerRequestSpanProcessorConfiguration.d.ts +22 -0
  17. package/dist/cjs/configuration/PerRequestSpanProcessorConfiguration.d.ts.map +1 -0
  18. package/dist/cjs/configuration/PerRequestSpanProcessorConfiguration.js +73 -0
  19. package/dist/cjs/configuration/PerRequestSpanProcessorConfiguration.js.map +1 -0
  20. package/dist/cjs/configuration/PerRequestSpanProcessorConfigurationOptions.d.ts +71 -0
  21. package/dist/cjs/configuration/PerRequestSpanProcessorConfigurationOptions.d.ts.map +1 -0
  22. package/dist/cjs/configuration/PerRequestSpanProcessorConfigurationOptions.js +5 -0
  23. package/dist/cjs/configuration/PerRequestSpanProcessorConfigurationOptions.js.map +1 -0
  24. package/dist/cjs/configuration/index.d.ts +16 -0
  25. package/dist/cjs/configuration/index.d.ts.map +1 -0
  26. package/dist/cjs/configuration/index.js +35 -0
  27. package/dist/cjs/configuration/index.js.map +1 -0
  28. package/dist/cjs/index.d.ts +11 -3
  29. package/dist/cjs/index.d.ts.map +1 -1
  30. package/dist/cjs/index.js +45 -5
  31. package/dist/cjs/index.js.map +1 -1
  32. package/dist/cjs/internal/PerRequestProcessorInternalOverrides.d.ts +4 -0
  33. package/dist/cjs/internal/PerRequestProcessorInternalOverrides.d.ts.map +1 -0
  34. package/dist/cjs/internal/PerRequestProcessorInternalOverrides.js +15 -0
  35. package/dist/cjs/internal/PerRequestProcessorInternalOverrides.js.map +1 -0
  36. package/dist/cjs/tracing/PerRequestSpanProcessor.d.ts +10 -3
  37. package/dist/cjs/tracing/PerRequestSpanProcessor.d.ts.map +1 -1
  38. package/dist/cjs/tracing/PerRequestSpanProcessor.js +14 -23
  39. package/dist/cjs/tracing/PerRequestSpanProcessor.js.map +1 -1
  40. package/dist/cjs/tracing/constants.d.ts +35 -35
  41. package/dist/cjs/tracing/constants.d.ts.map +1 -1
  42. package/dist/cjs/tracing/constants.js +42 -40
  43. package/dist/cjs/tracing/constants.js.map +1 -1
  44. package/dist/cjs/tracing/context/parent-span-context.d.ts +11 -2
  45. package/dist/cjs/tracing/context/parent-span-context.d.ts.map +1 -1
  46. package/dist/cjs/tracing/context/parent-span-context.js +10 -5
  47. package/dist/cjs/tracing/context/parent-span-context.js.map +1 -1
  48. package/dist/cjs/tracing/context/token-context.d.ts +14 -0
  49. package/dist/cjs/tracing/context/token-context.d.ts.map +1 -1
  50. package/dist/cjs/tracing/context/token-context.js +35 -2
  51. package/dist/cjs/tracing/context/token-context.js.map +1 -1
  52. package/dist/cjs/tracing/context/trace-context-propagation.d.ts +68 -0
  53. package/dist/cjs/tracing/context/trace-context-propagation.d.ts.map +1 -0
  54. package/dist/cjs/tracing/context/trace-context-propagation.js +85 -0
  55. package/dist/cjs/tracing/context/trace-context-propagation.js.map +1 -0
  56. package/dist/cjs/tracing/contracts.d.ts +229 -62
  57. package/dist/cjs/tracing/contracts.d.ts.map +1 -1
  58. package/dist/cjs/tracing/contracts.js +39 -18
  59. package/dist/cjs/tracing/contracts.js.map +1 -1
  60. package/dist/cjs/tracing/exporter/Agent365Exporter.d.ts +9 -4
  61. package/dist/cjs/tracing/exporter/Agent365Exporter.d.ts.map +1 -1
  62. package/dist/cjs/tracing/exporter/Agent365Exporter.js +53 -46
  63. package/dist/cjs/tracing/exporter/Agent365Exporter.js.map +1 -1
  64. package/dist/cjs/tracing/exporter/Agent365ExporterOptions.d.ts +8 -5
  65. package/dist/cjs/tracing/exporter/Agent365ExporterOptions.d.ts.map +1 -1
  66. package/dist/cjs/tracing/exporter/Agent365ExporterOptions.js +11 -7
  67. package/dist/cjs/tracing/exporter/Agent365ExporterOptions.js.map +1 -1
  68. package/dist/cjs/tracing/exporter/ExporterEventNames.d.ts +20 -0
  69. package/dist/cjs/tracing/exporter/ExporterEventNames.d.ts.map +1 -0
  70. package/dist/cjs/tracing/exporter/ExporterEventNames.js +26 -0
  71. package/dist/cjs/tracing/exporter/ExporterEventNames.js.map +1 -0
  72. package/dist/cjs/tracing/exporter/utils.d.ts +24 -11
  73. package/dist/cjs/tracing/exporter/utils.d.ts.map +1 -1
  74. package/dist/cjs/tracing/exporter/utils.js +354 -33
  75. package/dist/cjs/tracing/exporter/utils.js.map +1 -1
  76. package/dist/cjs/tracing/message-utils.d.ts +36 -0
  77. package/dist/cjs/tracing/message-utils.d.ts.map +1 -0
  78. package/dist/cjs/tracing/message-utils.js +90 -0
  79. package/dist/cjs/tracing/message-utils.js.map +1 -0
  80. package/dist/cjs/tracing/middleware/BaggageBuilder.d.ts +32 -44
  81. package/dist/cjs/tracing/middleware/BaggageBuilder.d.ts.map +1 -1
  82. package/dist/cjs/tracing/middleware/BaggageBuilder.js +49 -62
  83. package/dist/cjs/tracing/middleware/BaggageBuilder.js.map +1 -1
  84. package/dist/cjs/tracing/processors/SpanProcessor.d.ts.map +1 -1
  85. package/dist/cjs/tracing/processors/SpanProcessor.js +12 -3
  86. package/dist/cjs/tracing/processors/SpanProcessor.js.map +1 -1
  87. package/dist/cjs/tracing/processors/util.d.ts.map +1 -1
  88. package/dist/cjs/tracing/processors/util.js +16 -22
  89. package/dist/cjs/tracing/processors/util.js.map +1 -1
  90. package/dist/cjs/tracing/scopes/ExecuteToolScope.d.ts +10 -11
  91. package/dist/cjs/tracing/scopes/ExecuteToolScope.d.ts.map +1 -1
  92. package/dist/cjs/tracing/scopes/ExecuteToolScope.js +26 -20
  93. package/dist/cjs/tracing/scopes/ExecuteToolScope.js.map +1 -1
  94. package/dist/cjs/tracing/scopes/InferenceScope.d.ts +20 -24
  95. package/dist/cjs/tracing/scopes/InferenceScope.d.ts.map +1 -1
  96. package/dist/cjs/tracing/scopes/InferenceScope.js +53 -48
  97. package/dist/cjs/tracing/scopes/InferenceScope.js.map +1 -1
  98. package/dist/cjs/tracing/scopes/InvokeAgentScope.d.ts +17 -12
  99. package/dist/cjs/tracing/scopes/InvokeAgentScope.d.ts.map +1 -1
  100. package/dist/cjs/tracing/scopes/InvokeAgentScope.js +55 -54
  101. package/dist/cjs/tracing/scopes/InvokeAgentScope.js.map +1 -1
  102. package/dist/cjs/tracing/scopes/OpenTelemetryScope.d.ts +43 -12
  103. package/dist/cjs/tracing/scopes/OpenTelemetryScope.d.ts.map +1 -1
  104. package/dist/cjs/tracing/scopes/OpenTelemetryScope.js +114 -30
  105. package/dist/cjs/tracing/scopes/OpenTelemetryScope.js.map +1 -1
  106. package/dist/cjs/tracing/scopes/OutputScope.d.ts +33 -0
  107. package/dist/cjs/tracing/scopes/OutputScope.d.ts.map +1 -0
  108. package/dist/cjs/tracing/scopes/OutputScope.js +80 -0
  109. package/dist/cjs/tracing/scopes/OutputScope.js.map +1 -0
  110. package/dist/cjs/tracing/util.d.ts +14 -1
  111. package/dist/cjs/tracing/util.d.ts.map +1 -1
  112. package/dist/cjs/tracing/util.js +38 -7
  113. package/dist/cjs/tracing/util.js.map +1 -1
  114. package/dist/cjs/utils/logging.d.ts +45 -2
  115. package/dist/cjs/utils/logging.d.ts.map +1 -1
  116. package/dist/cjs/utils/logging.js +53 -79
  117. package/dist/cjs/utils/logging.js.map +1 -1
  118. package/dist/cjs/version.d.ts +2 -0
  119. package/dist/cjs/version.d.ts.map +1 -0
  120. package/dist/cjs/version.js +5 -0
  121. package/dist/cjs/version.js.map +1 -0
  122. package/dist/esm/ObservabilityBuilder.d.ts +24 -1
  123. package/dist/esm/ObservabilityBuilder.d.ts.map +1 -1
  124. package/dist/esm/ObservabilityBuilder.js +41 -14
  125. package/dist/esm/ObservabilityBuilder.js.map +1 -1
  126. package/dist/esm/ObservabilityManager.d.ts.map +1 -1
  127. package/dist/esm/ObservabilityManager.js +3 -0
  128. package/dist/esm/ObservabilityManager.js.map +1 -1
  129. package/dist/esm/configuration/ObservabilityConfiguration.d.ts +19 -0
  130. package/dist/esm/configuration/ObservabilityConfiguration.d.ts.map +1 -0
  131. package/dist/esm/configuration/ObservabilityConfiguration.js +56 -0
  132. package/dist/esm/configuration/ObservabilityConfiguration.js.map +1 -0
  133. package/dist/esm/configuration/ObservabilityConfigurationOptions.d.ts +58 -0
  134. package/dist/esm/configuration/ObservabilityConfigurationOptions.d.ts.map +1 -0
  135. package/dist/esm/configuration/ObservabilityConfigurationOptions.js +4 -0
  136. package/dist/esm/configuration/ObservabilityConfigurationOptions.js.map +1 -0
  137. package/dist/esm/configuration/PerRequestSpanProcessorConfiguration.d.ts +22 -0
  138. package/dist/esm/configuration/PerRequestSpanProcessorConfiguration.d.ts.map +1 -0
  139. package/dist/esm/configuration/PerRequestSpanProcessorConfiguration.js +69 -0
  140. package/dist/esm/configuration/PerRequestSpanProcessorConfiguration.js.map +1 -0
  141. package/dist/esm/configuration/PerRequestSpanProcessorConfigurationOptions.d.ts +71 -0
  142. package/dist/esm/configuration/PerRequestSpanProcessorConfigurationOptions.d.ts.map +1 -0
  143. package/dist/esm/configuration/PerRequestSpanProcessorConfigurationOptions.js +4 -0
  144. package/dist/esm/configuration/PerRequestSpanProcessorConfigurationOptions.js.map +1 -0
  145. package/dist/esm/configuration/index.d.ts +16 -0
  146. package/dist/esm/configuration/index.d.ts.map +1 -0
  147. package/dist/esm/configuration/index.js +18 -0
  148. package/dist/esm/configuration/index.js.map +1 -0
  149. package/dist/esm/index.d.ts +11 -3
  150. package/dist/esm/index.d.ts.map +1 -1
  151. package/dist/esm/index.js +17 -5
  152. package/dist/esm/index.js.map +1 -1
  153. package/dist/esm/internal/PerRequestProcessorInternalOverrides.d.ts +4 -0
  154. package/dist/esm/internal/PerRequestProcessorInternalOverrides.d.ts.map +1 -0
  155. package/dist/esm/internal/PerRequestProcessorInternalOverrides.js +11 -0
  156. package/dist/esm/internal/PerRequestProcessorInternalOverrides.js.map +1 -0
  157. package/dist/esm/tracing/PerRequestSpanProcessor.d.ts +10 -3
  158. package/dist/esm/tracing/PerRequestSpanProcessor.d.ts.map +1 -1
  159. package/dist/esm/tracing/PerRequestSpanProcessor.js +14 -23
  160. package/dist/esm/tracing/PerRequestSpanProcessor.js.map +1 -1
  161. package/dist/esm/tracing/constants.d.ts +35 -35
  162. package/dist/esm/tracing/constants.d.ts.map +1 -1
  163. package/dist/esm/tracing/constants.js +42 -40
  164. package/dist/esm/tracing/constants.js.map +1 -1
  165. package/dist/esm/tracing/context/parent-span-context.d.ts +11 -2
  166. package/dist/esm/tracing/context/parent-span-context.d.ts.map +1 -1
  167. package/dist/esm/tracing/context/parent-span-context.js +10 -5
  168. package/dist/esm/tracing/context/parent-span-context.js.map +1 -1
  169. package/dist/esm/tracing/context/token-context.d.ts +14 -0
  170. package/dist/esm/tracing/context/token-context.d.ts.map +1 -1
  171. package/dist/esm/tracing/context/token-context.js +34 -2
  172. package/dist/esm/tracing/context/token-context.js.map +1 -1
  173. package/dist/esm/tracing/context/trace-context-propagation.d.ts +68 -0
  174. package/dist/esm/tracing/context/trace-context-propagation.d.ts.map +1 -0
  175. package/dist/esm/tracing/context/trace-context-propagation.js +79 -0
  176. package/dist/esm/tracing/context/trace-context-propagation.js.map +1 -0
  177. package/dist/esm/tracing/contracts.d.ts +229 -62
  178. package/dist/esm/tracing/contracts.d.ts.map +1 -1
  179. package/dist/esm/tracing/contracts.js +38 -17
  180. package/dist/esm/tracing/contracts.js.map +1 -1
  181. package/dist/esm/tracing/exporter/Agent365Exporter.d.ts +9 -4
  182. package/dist/esm/tracing/exporter/Agent365Exporter.d.ts.map +1 -1
  183. package/dist/esm/tracing/exporter/Agent365Exporter.js +54 -47
  184. package/dist/esm/tracing/exporter/Agent365Exporter.js.map +1 -1
  185. package/dist/esm/tracing/exporter/Agent365ExporterOptions.d.ts +8 -5
  186. package/dist/esm/tracing/exporter/Agent365ExporterOptions.d.ts.map +1 -1
  187. package/dist/esm/tracing/exporter/Agent365ExporterOptions.js +11 -7
  188. package/dist/esm/tracing/exporter/Agent365ExporterOptions.js.map +1 -1
  189. package/dist/esm/tracing/exporter/ExporterEventNames.d.ts +20 -0
  190. package/dist/esm/tracing/exporter/ExporterEventNames.d.ts.map +1 -0
  191. package/dist/esm/tracing/exporter/ExporterEventNames.js +23 -0
  192. package/dist/esm/tracing/exporter/ExporterEventNames.js.map +1 -0
  193. package/dist/esm/tracing/exporter/utils.d.ts +24 -11
  194. package/dist/esm/tracing/exporter/utils.d.ts.map +1 -1
  195. package/dist/esm/tracing/exporter/utils.js +352 -32
  196. package/dist/esm/tracing/exporter/utils.js.map +1 -1
  197. package/dist/esm/tracing/message-utils.d.ts +36 -0
  198. package/dist/esm/tracing/message-utils.d.ts.map +1 -0
  199. package/dist/esm/tracing/message-utils.js +82 -0
  200. package/dist/esm/tracing/message-utils.js.map +1 -0
  201. package/dist/esm/tracing/middleware/BaggageBuilder.d.ts +32 -44
  202. package/dist/esm/tracing/middleware/BaggageBuilder.d.ts.map +1 -1
  203. package/dist/esm/tracing/middleware/BaggageBuilder.js +49 -62
  204. package/dist/esm/tracing/middleware/BaggageBuilder.js.map +1 -1
  205. package/dist/esm/tracing/processors/SpanProcessor.d.ts.map +1 -1
  206. package/dist/esm/tracing/processors/SpanProcessor.js +12 -3
  207. package/dist/esm/tracing/processors/SpanProcessor.js.map +1 -1
  208. package/dist/esm/tracing/processors/util.d.ts.map +1 -1
  209. package/dist/esm/tracing/processors/util.js +16 -22
  210. package/dist/esm/tracing/processors/util.js.map +1 -1
  211. package/dist/esm/tracing/scopes/ExecuteToolScope.d.ts +10 -11
  212. package/dist/esm/tracing/scopes/ExecuteToolScope.d.ts.map +1 -1
  213. package/dist/esm/tracing/scopes/ExecuteToolScope.js +26 -20
  214. package/dist/esm/tracing/scopes/ExecuteToolScope.js.map +1 -1
  215. package/dist/esm/tracing/scopes/InferenceScope.d.ts +20 -24
  216. package/dist/esm/tracing/scopes/InferenceScope.d.ts.map +1 -1
  217. package/dist/esm/tracing/scopes/InferenceScope.js +53 -48
  218. package/dist/esm/tracing/scopes/InferenceScope.js.map +1 -1
  219. package/dist/esm/tracing/scopes/InvokeAgentScope.d.ts +17 -12
  220. package/dist/esm/tracing/scopes/InvokeAgentScope.d.ts.map +1 -1
  221. package/dist/esm/tracing/scopes/InvokeAgentScope.js +55 -54
  222. package/dist/esm/tracing/scopes/InvokeAgentScope.js.map +1 -1
  223. package/dist/esm/tracing/scopes/OpenTelemetryScope.d.ts +43 -12
  224. package/dist/esm/tracing/scopes/OpenTelemetryScope.d.ts.map +1 -1
  225. package/dist/esm/tracing/scopes/OpenTelemetryScope.js +115 -31
  226. package/dist/esm/tracing/scopes/OpenTelemetryScope.js.map +1 -1
  227. package/dist/esm/tracing/scopes/OutputScope.d.ts +33 -0
  228. package/dist/esm/tracing/scopes/OutputScope.d.ts.map +1 -0
  229. package/dist/esm/tracing/scopes/OutputScope.js +76 -0
  230. package/dist/esm/tracing/scopes/OutputScope.js.map +1 -0
  231. package/dist/esm/tracing/util.d.ts +14 -1
  232. package/dist/esm/tracing/util.d.ts.map +1 -1
  233. package/dist/esm/tracing/util.js +37 -7
  234. package/dist/esm/tracing/util.js.map +1 -1
  235. package/dist/esm/utils/logging.d.ts +45 -2
  236. package/dist/esm/utils/logging.d.ts.map +1 -1
  237. package/dist/esm/utils/logging.js +52 -79
  238. package/dist/esm/utils/logging.js.map +1 -1
  239. package/dist/esm/version.d.ts +2 -0
  240. package/dist/esm/version.d.ts.map +1 -0
  241. package/dist/esm/version.js +2 -0
  242. package/dist/esm/version.js.map +1 -0
  243. package/package.json +9 -9
@@ -1,9 +1,12 @@
1
- // ------------------------------------------------------------------------------
2
- // Copyright (c) Microsoft Corporation. All rights reserved.
3
- // ------------------------------------------------------------------------------
1
+ // Copyright (c) Microsoft Corporation.
2
+ // Licensed under the MIT License.
4
3
  import { SpanKind, SpanStatusCode } from '@opentelemetry/api';
5
4
  import { OpenTelemetryConstants } from '../constants';
5
+ import { A365_MESSAGE_SCHEMA_VERSION, MessageRole } from '../contracts';
6
6
  import logger from '../../utils/logging';
7
+ import { ExporterEventNames } from './ExporterEventNames';
8
+ import { defaultObservabilityConfigurationProvider, defaultPerRequestSpanProcessorConfigurationProvider } from '../../configuration';
9
+ import { getPerRequestProcessorInternalOverrides } from '../../internal/PerRequestProcessorInternalOverrides';
7
10
  /**
8
11
  * Convert trace ID to hex string format
9
12
  */
@@ -82,7 +85,6 @@ export function partitionByIdentity(spans) {
82
85
  const agent = asStr(attrs[OpenTelemetryConstants.GEN_AI_AGENT_ID_KEY]);
83
86
  if (!tenant || !agent) {
84
87
  skippedCount++;
85
- logger.warn(`[Agent365Exporter] Skipping span without tenant or agent ID. Span name: ${span.name}`);
86
88
  continue;
87
89
  }
88
90
  const key = `${tenant}:${agent}`;
@@ -90,43 +92,41 @@ export function partitionByIdentity(spans) {
90
92
  existing.push(span);
91
93
  groups.set(key, existing);
92
94
  }
95
+ if (skippedCount > 0) {
96
+ logger.event(ExporterEventNames.EXPORT_PARTITION_SPAN_MISSING_IDENTITY, false, 0, `${skippedCount} spans are skipped due to missing tenant or agent ID`);
97
+ }
93
98
  logger.info(`[Agent365Exporter] Partitioned into ${groups.size} identity groups (${skippedCount} spans skipped)`);
94
99
  return groups;
95
100
  }
96
101
  /**
97
102
  * Check if Agent 365 exporter is enabled via environment variable
103
+ * @param configProvider Optional configuration provider. Defaults to defaultObservabilityConfigurationProvider if not specified.
98
104
  */
99
- export function isAgent365ExporterEnabled() {
100
- const a365Env = process.env[OpenTelemetryConstants.ENABLE_A365_OBSERVABILITY_EXPORTER]?.toLowerCase() || '';
101
- const validValues = ['true', '1', 'yes', 'on'];
102
- const enabled = validValues.includes(a365Env);
105
+ export function isAgent365ExporterEnabled(configProvider) {
106
+ const provider = configProvider ?? defaultObservabilityConfigurationProvider;
107
+ const enabled = provider.getConfiguration().isObservabilityExporterEnabled;
103
108
  logger.info(`[Agent365Exporter] Agent 365 exporter enabled: ${enabled}`);
104
109
  return enabled;
105
110
  }
106
111
  /**
107
- * Check if per-request export is enabled via environment variable.
112
+ * Check if per-request export is enabled.
113
+ * Precedence: internal overrides > configuration provider > environment variable.
108
114
  * When enabled, the PerRequestSpanProcessor is used instead of BatchSpanProcessor.
109
115
  * The token is passed via OTel Context (async local storage) at export time.
116
+ * @param configProvider Optional configuration provider. Defaults to defaultPerRequestSpanProcessorConfigurationProvider if not specified.
110
117
  */
111
- export function isPerRequestExportEnabled() {
112
- const value = process.env[OpenTelemetryConstants.ENABLE_A365_OBSERVABILITY_PER_REQUEST_EXPORT]?.toLowerCase() || '';
113
- const validValues = ['true', '1', 'yes', 'on'];
114
- const enabled = validValues.includes(value);
118
+ export function isPerRequestExportEnabled(configProvider) {
119
+ const overrides = getPerRequestProcessorInternalOverrides();
120
+ const overrideValue = overrides?.isPerRequestExportEnabled?.();
121
+ if (typeof overrideValue === 'boolean') {
122
+ logger.info(`[Agent365Exporter] Per-request export enabled (internal override): ${overrideValue}`);
123
+ return overrideValue;
124
+ }
125
+ const provider = configProvider ?? defaultPerRequestSpanProcessorConfigurationProvider;
126
+ const enabled = provider.getConfiguration().isPerRequestExportEnabled;
115
127
  logger.info(`[Agent365Exporter] Per-request export enabled: ${enabled}`);
116
128
  return enabled;
117
129
  }
118
- /**
119
- * Single toggle to use custom domain for observability export.
120
- * When true exporter will send traces to custom Agent365 service endpoint
121
- * and include x-ms-tenant-id in headers.
122
- */
123
- export function useCustomDomainForObservability() {
124
- const value = process.env.A365_OBSERVABILITY_USE_CUSTOM_DOMAIN?.toLowerCase() || '';
125
- const validValues = ['true', '1', 'yes', 'on'];
126
- const enabled = validValues.includes(value);
127
- logger.info(`[Agent365Exporter] Use custom domain for observability: ${enabled}`);
128
- return enabled;
129
- }
130
130
  /**
131
131
  * Resolve the Agent365 service endpoint base URI for a given cluster category.
132
132
  * When an explicit override is not configured, this determines the default base URI.
@@ -143,14 +143,11 @@ export function resolveAgent365Endpoint(clusterCategory) {
143
143
  * Internal development and test clusters can override this by setting the
144
144
  * `A365_OBSERVABILITY_DOMAIN_OVERRIDE` environment variable. When set to a
145
145
  * non-empty value, that value is used as the base URI regardless of cluster category. Otherwise, null is returned.
146
+ * @param configProvider Optional configuration provider. Defaults to defaultObservabilityConfigurationProvider if not specified.
146
147
  */
147
- export function getAgent365ObservabilityDomainOverride() {
148
- const override = process.env.A365_OBSERVABILITY_DOMAIN_OVERRIDE;
149
- if (override && override.trim().length > 0) {
150
- // Normalize to avoid double slashes when concatenating paths
151
- return override.trim().replace(/\/+$/, '');
152
- }
153
- return null;
148
+ export function getAgent365ObservabilityDomainOverride(configProvider) {
149
+ const provider = configProvider ?? defaultObservabilityConfigurationProvider;
150
+ return provider.getConfiguration().observabilityDomainOverride;
154
151
  }
155
152
  /**
156
153
  * Parse identity key back to tenant and agent IDs
@@ -159,4 +156,327 @@ export function parseIdentityKey(key) {
159
156
  const [tenantId, agentId] = key.split(':');
160
157
  return { tenantId, agentId };
161
158
  }
159
+ // ---------------------------------------------------------------------------
160
+ // Span truncation
161
+ // ---------------------------------------------------------------------------
162
+ /** Maximum allowed span size in bytes (250KB). @internal */
163
+ export const MAX_SPAN_SIZE_BYTES = 250 * 1024;
164
+ const BLOB_SENTINEL = '[blob truncated]';
165
+ const JSON_SENTINEL = '[truncated]';
166
+ const TRUNCATED_SUFFIX = '… [truncated]';
167
+ const TRUNCATED_SUFFIX_BYTES = Buffer.byteLength(TRUNCATED_SUFFIX, 'utf8');
168
+ const OVERLIMIT_SENTINEL = '[overlimit]';
169
+ /**
170
+ * Build a versioned message wrapper indicating the original messages were dropped
171
+ * because the span exceeded the size limit.
172
+ */
173
+ function serializeOverflowSentinel(totalMessages) {
174
+ return JSON.stringify({
175
+ version: A365_MESSAGE_SCHEMA_VERSION,
176
+ messages: [
177
+ {
178
+ role: MessageRole.SYSTEM,
179
+ parts: [
180
+ {
181
+ type: 'text',
182
+ content: `[truncated: ${totalMessages} ${totalMessages === 1 ? 'message' : 'messages'} exceeded limit]`
183
+ }
184
+ ]
185
+ }
186
+ ]
187
+ });
188
+ }
189
+ /** Strings shorter than this (in UTF-8 bytes) are not worth truncating. */
190
+ const MIN_SHRINKABLE_STRING_BYTES = 50;
191
+ const MESSAGE_ATTR_KEYS = new Set([
192
+ OpenTelemetryConstants.GEN_AI_INPUT_MESSAGES_KEY,
193
+ OpenTelemetryConstants.GEN_AI_OUTPUT_MESSAGES_KEY,
194
+ ]);
195
+ /**
196
+ * Trim a string by a target UTF-8 byte budget while preserving whole code points.
197
+ */
198
+ function trimString(value, bytesToShed) {
199
+ const currentBytes = Buffer.byteLength(value, 'utf8');
200
+ const targetTotalBytes = Math.max(TRUNCATED_SUFFIX_BYTES, currentBytes - Math.max(1, bytesToShed));
201
+ const targetContentBytes = targetTotalBytes - TRUNCATED_SUFFIX_BYTES;
202
+ if (targetContentBytes <= 0) {
203
+ return TRUNCATED_SUFFIX;
204
+ }
205
+ let consumedBytes = 0;
206
+ let endIndex = 0;
207
+ for (const codePoint of value) {
208
+ const codePointBytes = Buffer.byteLength(codePoint, 'utf8');
209
+ if (consumedBytes + codePointBytes > targetContentBytes) {
210
+ break;
211
+ }
212
+ consumedBytes += codePointBytes;
213
+ endIndex += codePoint.length; // length in UTF-16 code units (handles surrogates)
214
+ }
215
+ return value.slice(0, endIndex) + TRUNCATED_SUFFIX;
216
+ }
217
+ function getSerializedSize(value) {
218
+ return Buffer.byteLength(JSON.stringify(value), 'utf8');
219
+ }
220
+ function createBlobShrinkAction(part, sourceKey) {
221
+ const partType = part.type;
222
+ if (partType === 'blob' && typeof part.content === 'string') {
223
+ const contentSize = Buffer.byteLength(part.content, 'utf8');
224
+ if (contentSize <= 0 || part.content === BLOB_SENTINEL) {
225
+ return undefined;
226
+ }
227
+ const action = {
228
+ contentBytes: contentSize,
229
+ sourceKey,
230
+ apply() {
231
+ part.content = BLOB_SENTINEL;
232
+ action.contentBytes = 0;
233
+ }
234
+ };
235
+ return action;
236
+ }
237
+ return undefined;
238
+ }
239
+ /**
240
+ * Collect all shrink candidates from message parts and direct string attributes.
241
+ * Blobs, text, reasoning, json-field, and plain-string actions are all collected
242
+ * uniformly. When a message attribute contains non-JSON content it falls through
243
+ * to regular string trimming.
244
+ */
245
+ function collectShrinkActions(attributes, parsedMessages) {
246
+ const actions = [];
247
+ for (const key of Object.keys(attributes)) {
248
+ let handledAsMessage = false;
249
+ if (MESSAGE_ATTR_KEYS.has(key)) {
250
+ // Parse and cache the message wrapper if not already done
251
+ if (!parsedMessages.has(key) && typeof attributes[key] === 'string') {
252
+ try {
253
+ const parsed = JSON.parse(attributes[key]);
254
+ if (parsed && typeof parsed === 'object' && typeof parsed.version === 'string' && Array.isArray(parsed.messages)) {
255
+ parsedMessages.set(key, parsed);
256
+ }
257
+ }
258
+ catch {
259
+ // Not valid JSON — will fall through to string trim
260
+ }
261
+ }
262
+ if (parsedMessages.has(key)) {
263
+ handledAsMessage = true;
264
+ const wrapper = parsedMessages.get(key);
265
+ for (const message of wrapper.messages) {
266
+ if (!Array.isArray(message.parts))
267
+ continue;
268
+ for (const part of message.parts) {
269
+ const partType = part.type;
270
+ // Blob content → sentinel (one-shot)
271
+ const blobAction = createBlobShrinkAction(part, key);
272
+ if (blobAction) {
273
+ actions.push(blobAction);
274
+ continue;
275
+ }
276
+ // Tool/server JSON payload fields → sentinel (one-shot)
277
+ const jsonField = partType === 'tool_call' ? 'arguments'
278
+ : partType === 'tool_call_response' ? 'response'
279
+ : partType === 'server_tool_call' ? 'server_tool_call'
280
+ : partType === 'server_tool_call_response' ? 'server_tool_call_response'
281
+ : undefined;
282
+ if (jsonField && part[jsonField] !== undefined && part[jsonField] !== JSON_SENTINEL) {
283
+ let fieldSize;
284
+ try {
285
+ fieldSize = Buffer.byteLength(JSON.stringify(part[jsonField]), 'utf8');
286
+ }
287
+ catch {
288
+ fieldSize = 0;
289
+ }
290
+ if (fieldSize > 0) {
291
+ const action = {
292
+ contentBytes: fieldSize,
293
+ sourceKey: key,
294
+ apply() {
295
+ part[jsonField] = JSON_SENTINEL;
296
+ action.contentBytes = 0;
297
+ }
298
+ };
299
+ actions.push(action);
300
+ }
301
+ continue;
302
+ }
303
+ // Text/reasoning content → trim (re-shrinkable)
304
+ if ((partType === 'text' || partType === 'reasoning') && typeof part.content === 'string') {
305
+ const contentSize = Buffer.byteLength(part.content, 'utf8');
306
+ if (contentSize > MIN_SHRINKABLE_STRING_BYTES) {
307
+ const action = {
308
+ contentBytes: contentSize,
309
+ sourceKey: key,
310
+ apply(bytesToShed) {
311
+ const cur = Buffer.byteLength(part.content, 'utf8');
312
+ if (cur > TRUNCATED_SUFFIX_BYTES) {
313
+ part.content = trimString(part.content, bytesToShed);
314
+ action.contentBytes = Buffer.byteLength(part.content, 'utf8');
315
+ }
316
+ }
317
+ };
318
+ actions.push(action);
319
+ }
320
+ }
321
+ }
322
+ }
323
+ }
324
+ }
325
+ // Non-versioned string attribute → generate shrink action
326
+ if (!handledAsMessage && typeof attributes[key] === 'string') {
327
+ const valueSize = Buffer.byteLength(attributes[key], 'utf8');
328
+ if (valueSize > MIN_SHRINKABLE_STRING_BYTES) {
329
+ // Message key with raw dict JSON → one-shot sentinel replacement (preserves JSON integrity)
330
+ // Other strings → incremental trim
331
+ let isRawJson = false;
332
+ if (MESSAGE_ATTR_KEYS.has(key)) {
333
+ try {
334
+ const p = JSON.parse(attributes[key]);
335
+ isRawJson = p && typeof p === 'object';
336
+ }
337
+ catch { /* not JSON */ }
338
+ }
339
+ const action = isRawJson
340
+ ? {
341
+ contentBytes: valueSize,
342
+ apply() {
343
+ attributes[key] = OVERLIMIT_SENTINEL;
344
+ action.contentBytes = Buffer.byteLength(OVERLIMIT_SENTINEL, 'utf8');
345
+ }
346
+ }
347
+ : {
348
+ contentBytes: valueSize,
349
+ apply(bytesToShed) {
350
+ const cur = Buffer.byteLength(attributes[key], 'utf8');
351
+ if (cur > TRUNCATED_SUFFIX_BYTES) {
352
+ attributes[key] = trimString(attributes[key], bytesToShed);
353
+ action.contentBytes = Buffer.byteLength(attributes[key], 'utf8');
354
+ }
355
+ }
356
+ };
357
+ actions.push(action);
358
+ }
359
+ }
360
+ }
361
+ return actions;
362
+ }
363
+ function flushParsedMessages(attributes, parsedMessages) {
364
+ for (const [key, wrapper] of parsedMessages) {
365
+ try {
366
+ attributes[key] = JSON.stringify(wrapper);
367
+ }
368
+ catch {
369
+ // Leave the previous string value intact if serialization fails.
370
+ }
371
+ }
372
+ }
373
+ function flushParsedMessage(attributes, parsedMessages, key) {
374
+ const wrapper = parsedMessages.get(key);
375
+ if (wrapper) {
376
+ try {
377
+ attributes[key] = JSON.stringify(wrapper);
378
+ }
379
+ catch {
380
+ // Leave the previous string value intact if serialization fails.
381
+ }
382
+ }
383
+ }
384
+ function runShrinkPhase(span, attributes, parsedMessages, currentSize) {
385
+ let nextSize = currentSize;
386
+ const actions = collectShrinkActions(attributes, parsedMessages);
387
+ while (actions.length > 0 && nextSize > MAX_SPAN_SIZE_BYTES) {
388
+ // Pick the action with the largest contentBytes (accounts for updated sizes)
389
+ let maxIdx = 0;
390
+ for (let j = 1; j < actions.length; j++) {
391
+ if (actions[j].contentBytes > actions[maxIdx].contentBytes)
392
+ maxIdx = j;
393
+ }
394
+ const excess = nextSize - MAX_SPAN_SIZE_BYTES;
395
+ const previousSize = nextSize;
396
+ const action = actions[maxIdx];
397
+ action.apply(excess);
398
+ // Flush only the modified message attribute instead of all parsed messages
399
+ if (action.sourceKey) {
400
+ flushParsedMessage(attributes, parsedMessages, action.sourceKey);
401
+ }
402
+ nextSize = getSerializedSize(span);
403
+ if (nextSize >= previousSize) {
404
+ // Action had no effect — remove it
405
+ actions.splice(maxIdx, 1);
406
+ }
407
+ else if (action.contentBytes <= MIN_SHRINKABLE_STRING_BYTES) {
408
+ // Exhausted (one-shot or fully trimmed) — remove it
409
+ actions.splice(maxIdx, 1);
410
+ }
411
+ }
412
+ // Final flush to ensure all modified message attributes are written back
413
+ flushParsedMessages(attributes, parsedMessages);
414
+ return nextSize;
415
+ }
416
+ /**
417
+ * Truncate span attributes if the serialized span exceeds MAX_SPAN_SIZE_BYTES.
418
+ *
419
+ * Phase 1: iteratively shrink all fields (blobs, text, json, strings) by size
420
+ * priority, remeasuring after each step.
421
+ * Phase 2 (fallback): replace remaining string attributes with overlimit sentinel.
422
+ */
423
+ export function truncateSpan(spanDict) {
424
+ try {
425
+ let currentSize = getSerializedSize(spanDict);
426
+ if (currentSize <= MAX_SPAN_SIZE_BYTES)
427
+ return spanDict;
428
+ logger.warn(`[Agent365Exporter] Span size (${currentSize} bytes) exceeds limit (${MAX_SPAN_SIZE_BYTES} bytes). Shrinking attributes.`);
429
+ const truncated = { ...spanDict };
430
+ if (truncated.attributes)
431
+ truncated.attributes = { ...truncated.attributes };
432
+ const attributes = truncated.attributes;
433
+ if (!attributes)
434
+ return truncated;
435
+ const parsedMessages = new Map();
436
+ // Phase 1: iteratively shrink all fields by size priority
437
+ currentSize = runShrinkPhase(truncated, attributes, parsedMessages, currentSize);
438
+ if (currentSize > MAX_SPAN_SIZE_BYTES) {
439
+ // Phase 2 (fallback): replace all string attributes with overlimit sentinel, largest first.
440
+ // Message attributes get a structured sentinel preserving the original message count.
441
+ const stringKeys = Object.keys(attributes)
442
+ .filter(k => typeof attributes[k] === 'string' && attributes[k] !== OVERLIMIT_SENTINEL)
443
+ .sort((a, b) => Buffer.byteLength(attributes[b], 'utf8') - Buffer.byteLength(attributes[a], 'utf8'));
444
+ for (const key of stringKeys) {
445
+ if (currentSize <= MAX_SPAN_SIZE_BYTES)
446
+ break;
447
+ if (MESSAGE_ATTR_KEYS.has(key)) {
448
+ let messageCount = 0;
449
+ const cached = parsedMessages.get(key);
450
+ if (cached) {
451
+ messageCount = cached.messages.length;
452
+ }
453
+ else if (typeof attributes[key] === 'string') {
454
+ // Attempt to derive count from current attribute value
455
+ try {
456
+ const parsed = JSON.parse(attributes[key]);
457
+ if (parsed && typeof parsed === 'object' && typeof parsed.version === 'string' && Array.isArray(parsed.messages)) {
458
+ messageCount = parsed.messages.length;
459
+ }
460
+ }
461
+ catch { /* not valid JSON — count stays 0 */ }
462
+ }
463
+ attributes[key] = serializeOverflowSentinel(messageCount);
464
+ parsedMessages.delete(key);
465
+ }
466
+ else {
467
+ attributes[key] = OVERLIMIT_SENTINEL;
468
+ }
469
+ currentSize = getSerializedSize(truncated);
470
+ }
471
+ }
472
+ if (currentSize > MAX_SPAN_SIZE_BYTES) {
473
+ logger.warn(`[Agent365Exporter] Span still ${currentSize} bytes after exhausting all shrink actions (limit: ${MAX_SPAN_SIZE_BYTES}).`);
474
+ }
475
+ return truncated;
476
+ }
477
+ catch (e) {
478
+ logger.error(`[Agent365Exporter] Error during span truncation: ${e}`);
479
+ return spanDict;
480
+ }
481
+ }
162
482
  //# sourceMappingURL=utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../src/tracing/exporter/utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../src/tracing/exporter/utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ import { ChatMessage, OutputMessage, InputMessages, OutputMessages, InputMessagesParam, OutputMessagesParam } from './contracts';
2
+ /**
3
+ * Type guard that returns `true` when the input is a versioned wrapper
4
+ * object (`InputMessages` or `OutputMessages`).
5
+ */
6
+ export declare function isWrappedMessages(input: InputMessagesParam | OutputMessagesParam): input is InputMessages | OutputMessages;
7
+ /**
8
+ * Converts plain input strings into OTEL input messages.
9
+ */
10
+ export declare function toInputMessages(messages: string[]): ChatMessage[];
11
+ /**
12
+ * Converts plain output strings into OTEL output messages.
13
+ */
14
+ export declare function toOutputMessages(messages: string[]): OutputMessage[];
15
+ /**
16
+ * Normalizes an `InputMessagesParam` to a versioned `InputMessages` wrapper.
17
+ * - `string` / `string[]` → converted to `ChatMessage[]` and wrapped
18
+ * - `InputMessages` → returned as-is
19
+ */
20
+ export declare function normalizeInputMessages(param: InputMessagesParam): InputMessages;
21
+ /**
22
+ * Normalizes an `OutputMessagesParam` to a versioned `OutputMessages` wrapper.
23
+ * - `string` / `string[]` → converted to `OutputMessage[]` and wrapped
24
+ * - `OutputMessages` → returned as-is
25
+ */
26
+ export declare function normalizeOutputMessages(param: OutputMessagesParam): OutputMessages;
27
+ /**
28
+ * Serializes a versioned message wrapper to JSON.
29
+ *
30
+ * The output is the full wrapper object: `{"version":"0.1.0","messages":[...]}`.
31
+ *
32
+ * The try/catch ensures telemetry recording is non-throwing even when
33
+ * message parts contain non-JSON-serializable values (e.g. BigInt, circular refs).
34
+ */
35
+ export declare function serializeMessages(wrapper: InputMessages | OutputMessages): string;
36
+ //# sourceMappingURL=message-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"message-utils.d.ts","sourceRoot":"","sources":["../../../src/tracing/message-utils.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,WAAW,EACX,aAAa,EAEb,aAAa,EACb,cAAc,EACd,kBAAkB,EAClB,mBAAmB,EAEpB,MAAM,aAAa,CAAC;AAErB;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,kBAAkB,GAAG,mBAAmB,GAAG,KAAK,IAAI,aAAa,GAAG,cAAc,CAE1H;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,WAAW,EAAE,CAKjE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,aAAa,EAAE,CAKpE;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,kBAAkB,GAAG,aAAa,CAM/E;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,mBAAmB,GAAG,cAAc,CAMlF;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,aAAa,GAAG,cAAc,GAAG,MAAM,CAmBjF"}
@@ -0,0 +1,82 @@
1
+ // Copyright (c) Microsoft Corporation.
2
+ // Licensed under the MIT License.
3
+ import { MessageRole, A365_MESSAGE_SCHEMA_VERSION } from './contracts';
4
+ /**
5
+ * Type guard that returns `true` when the input is a versioned wrapper
6
+ * object (`InputMessages` or `OutputMessages`).
7
+ */
8
+ export function isWrappedMessages(input) {
9
+ return !Array.isArray(input) && typeof input === 'object' && input !== null && 'version' in input && 'messages' in input;
10
+ }
11
+ /**
12
+ * Converts plain input strings into OTEL input messages.
13
+ */
14
+ export function toInputMessages(messages) {
15
+ return messages.map((content) => ({
16
+ role: MessageRole.USER,
17
+ parts: [{ type: 'text', content }]
18
+ }));
19
+ }
20
+ /**
21
+ * Converts plain output strings into OTEL output messages.
22
+ */
23
+ export function toOutputMessages(messages) {
24
+ return messages.map((content) => ({
25
+ role: MessageRole.ASSISTANT,
26
+ parts: [{ type: 'text', content }]
27
+ }));
28
+ }
29
+ /**
30
+ * Normalizes an `InputMessagesParam` to a versioned `InputMessages` wrapper.
31
+ * - `string` / `string[]` → converted to `ChatMessage[]` and wrapped
32
+ * - `InputMessages` → returned as-is
33
+ */
34
+ export function normalizeInputMessages(param) {
35
+ if (typeof param === 'string' || Array.isArray(param)) {
36
+ const arr = typeof param === 'string' ? [param] : param;
37
+ return { version: A365_MESSAGE_SCHEMA_VERSION, messages: toInputMessages(arr) };
38
+ }
39
+ return param;
40
+ }
41
+ /**
42
+ * Normalizes an `OutputMessagesParam` to a versioned `OutputMessages` wrapper.
43
+ * - `string` / `string[]` → converted to `OutputMessage[]` and wrapped
44
+ * - `OutputMessages` → returned as-is
45
+ */
46
+ export function normalizeOutputMessages(param) {
47
+ if (typeof param === 'string' || Array.isArray(param)) {
48
+ const arr = typeof param === 'string' ? [param] : param;
49
+ return { version: A365_MESSAGE_SCHEMA_VERSION, messages: toOutputMessages(arr) };
50
+ }
51
+ return param;
52
+ }
53
+ /**
54
+ * Serializes a versioned message wrapper to JSON.
55
+ *
56
+ * The output is the full wrapper object: `{"version":"0.1.0","messages":[...]}`.
57
+ *
58
+ * The try/catch ensures telemetry recording is non-throwing even when
59
+ * message parts contain non-JSON-serializable values (e.g. BigInt, circular refs).
60
+ */
61
+ export function serializeMessages(wrapper) {
62
+ try {
63
+ return JSON.stringify(wrapper);
64
+ }
65
+ catch {
66
+ return JSON.stringify({
67
+ version: A365_MESSAGE_SCHEMA_VERSION,
68
+ messages: [
69
+ {
70
+ role: MessageRole.SYSTEM,
71
+ parts: [
72
+ {
73
+ type: 'text',
74
+ content: `[serialization failed: ${wrapper.messages.length} ${wrapper.messages.length === 1 ? 'message' : 'messages'}]`
75
+ }
76
+ ]
77
+ }
78
+ ]
79
+ });
80
+ }
81
+ }
82
+ //# sourceMappingURL=message-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"message-utils.js","sourceRoot":"","sources":["../../../src/tracing/message-utils.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC,OAAO,EAGL,WAAW,EAKX,2BAA2B,EAC5B,MAAM,aAAa,CAAC;AAErB;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,KAA+C;IAC/E,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,SAAS,IAAI,KAAK,IAAI,UAAU,IAAI,KAAK,CAAC;AAC3H,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,QAAkB;IAChD,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QAChC,IAAI,EAAE,WAAW,CAAC,IAAI;QACtB,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,OAAO,EAAE,CAAC;KAC5C,CAAC,CAAC,CAAC;AACN,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,QAAkB;IACjD,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QAChC,IAAI,EAAE,WAAW,CAAC,SAAS;QAC3B,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,OAAO,EAAE,CAAC;KAC5C,CAAC,CAAC,CAAC;AACN,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,sBAAsB,CAAC,KAAyB;IAC9D,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACtD,MAAM,GAAG,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QACxD,OAAO,EAAE,OAAO,EAAE,2BAA2B,EAAE,QAAQ,EAAE,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC;IAClF,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,uBAAuB,CAAC,KAA0B;IAChE,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACtD,MAAM,GAAG,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QACxD,OAAO,EAAE,OAAO,EAAE,2BAA2B,EAAE,QAAQ,EAAE,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC;IACnF,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,iBAAiB,CAAC,OAAuC;IACvE,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IACjC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC,SAAS,CAAC;YACpB,OAAO,EAAE,2BAA2B;YACpC,QAAQ,EAAE;gBACR;oBACE,IAAI,EAAE,WAAW,CAAC,MAAM;oBACxB,KAAK,EAAE;wBACL;4BACE,IAAI,EAAE,MAAM;4BACZ,OAAO,EAAE,0BAA0B,OAAO,CAAC,QAAQ,CAAC,MAAM,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,GAAG;yBACxH;qBACF;iBACF;aACF;SACF,CAAC,CAAC;IACL,CAAC;AACH,CAAC"}