agentfootprint 2.8.1 → 2.8.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.
@@ -0,0 +1,198 @@
1
+ /**
2
+ * cloudwatchObservability — Generic AWS CloudWatch Logs adapter.
3
+ *
4
+ * Ships every `AgentfootprintEvent` to a CloudWatch Logs stream. Use
5
+ * when you want agent telemetry alongside the rest of your AWS
6
+ * observability stack — CloudWatch Insights queries, alarms,
7
+ * cross-service correlation. Same SDK as `agentcoreObservability`
8
+ * but **without** the AgentCore-specific defaults (log-stream
9
+ * convention, format opinions). Use this when:
10
+ *
11
+ * 1. You're shipping to CloudWatch but NOT running inside Bedrock
12
+ * AgentCore (most common case).
13
+ * 2. You want full control over log group / stream / format and
14
+ * don't need AgentCore's hosted-agent telemetry conventions.
15
+ *
16
+ * Subpath: `agentfootprint/observability-providers`
17
+ * Peer dep: `@aws-sdk/client-cloudwatch-logs` (OPTIONAL — installed
18
+ * only when this adapter is used; declared via
19
+ * `peerDependenciesMeta.{name}.optional = true`).
20
+ *
21
+ * This module also exports the underlying base function used by
22
+ * `agentcoreObservability` — keeps the per-event hot path in one
23
+ * place so improvements (batching, retry, backpressure) flow to
24
+ * every CloudWatch-shaped adapter automatically.
25
+ *
26
+ * @example
27
+ * ```ts
28
+ * import { cloudwatchObservability } from 'agentfootprint/observability-providers';
29
+ * import { microtaskBatchDriver } from 'footprintjs/detach';
30
+ *
31
+ * agent.enable.observability({
32
+ * strategy: cloudwatchObservability({
33
+ * region: 'us-east-1',
34
+ * logGroupName: '/myapp/agent-prod',
35
+ * logStreamName: `${process.env.HOSTNAME}/${Date.now()}`,
36
+ * }),
37
+ * detach: { driver: microtaskBatchDriver, mode: 'forget' },
38
+ * });
39
+ * ```
40
+ */
41
+ import { lazyRequire } from '../../lib/lazyRequire.js';
42
+ // ─── Generic base — also used by agentcoreObservability ──────────────
43
+ /**
44
+ * Internal: shared CloudWatch Logs base used by every adapter that
45
+ * ships to CWL. `cloudwatchObservability` is the public generic
46
+ * factory; `agentcoreObservability` calls this with AgentCore-flavored
47
+ * defaults.
48
+ *
49
+ * Exported for adapter authors only — consumers should call
50
+ * `cloudwatchObservability` or `agentcoreObservability` directly.
51
+ *
52
+ * @internal
53
+ */
54
+ export function _buildCloudWatchObservability(opts, strategyName) {
55
+ if (!opts.logGroupName) {
56
+ throw new TypeError(`[${strategyName}Observability] \`logGroupName\` is required. ` +
57
+ `Pass an existing CloudWatch log group, e.g. '/myapp/agent-prod'.`);
58
+ }
59
+ const logStreamName = opts.logStreamName ?? 'agentfootprint';
60
+ const maxBatchEvents = opts.maxBatchEvents ?? 100;
61
+ const maxBatchBytes = opts.maxBatchBytes ?? 10_240;
62
+ const flushIntervalMs = opts.flushIntervalMs ?? 1000;
63
+ // Buffered batch — drained by `flush()` / size-trigger / time-trigger.
64
+ const buffer = [];
65
+ let bufferBytes = 0;
66
+ let lastFlushPromise = Promise.resolve();
67
+ let timer;
68
+ let stopped = false;
69
+ let onErrorHook;
70
+ // Lazy-resolved on first flush so consumers who never trigger a
71
+ // flush (because nothing was emitted) don't even hit the SDK.
72
+ let client = opts._client;
73
+ function ensureClient() {
74
+ if (client)
75
+ return client;
76
+ client = createCloudWatchClient(opts.region, strategyName);
77
+ return client;
78
+ }
79
+ function scheduleTimedFlush() {
80
+ if (timer || flushIntervalMs <= 0 || stopped)
81
+ return;
82
+ timer = setTimeout(() => {
83
+ timer = undefined;
84
+ void doFlush();
85
+ }, flushIntervalMs);
86
+ }
87
+ async function doFlush() {
88
+ if (buffer.length === 0 || stopped)
89
+ return;
90
+ // Snapshot + clear so concurrent emits during the in-flight put
91
+ // accumulate into the next batch.
92
+ const batch = buffer.splice(0);
93
+ bufferBytes = 0;
94
+ try {
95
+ await ensureClient().putLogEvents({
96
+ logGroupName: opts.logGroupName,
97
+ logStreamName,
98
+ logEvents: batch,
99
+ });
100
+ }
101
+ catch (err) {
102
+ onErrorHook?.(err instanceof Error ? err : new Error(String(err)));
103
+ }
104
+ }
105
+ function enqueue(event) {
106
+ if (stopped)
107
+ return;
108
+ const message = JSON.stringify(event);
109
+ const bytes = Buffer.byteLength(message, 'utf8');
110
+ buffer.push({ timestamp: Date.now(), message });
111
+ bufferBytes += bytes;
112
+ if (buffer.length >= maxBatchEvents || bufferBytes >= maxBatchBytes) {
113
+ // Size trigger — flush immediately. Chain onto last to preserve
114
+ // CloudWatch's per-stream ordering requirement.
115
+ lastFlushPromise = lastFlushPromise.then(doFlush, doFlush);
116
+ }
117
+ else {
118
+ scheduleTimedFlush();
119
+ }
120
+ }
121
+ return {
122
+ name: strategyName,
123
+ capabilities: { events: true, logs: true },
124
+ exportEvent: enqueue,
125
+ async flush() {
126
+ // Drain anything pending. Awaits both an in-flight put AND any
127
+ // newly-buffered events that arrived during it.
128
+ while (buffer.length > 0 || lastFlushPromise !== Promise.resolve()) {
129
+ const before = lastFlushPromise;
130
+ await before;
131
+ if (buffer.length > 0) {
132
+ lastFlushPromise = doFlush();
133
+ }
134
+ // Loop one more pass if the chained doFlush() queued more
135
+ // work, then bail.
136
+ if (lastFlushPromise === before && buffer.length === 0)
137
+ break;
138
+ }
139
+ },
140
+ stop() {
141
+ stopped = true;
142
+ if (timer) {
143
+ clearTimeout(timer);
144
+ timer = undefined;
145
+ }
146
+ },
147
+ _onError(err, event) {
148
+ // Capture for use inside doFlush (the strategy doesn't know what
149
+ // the consumer's error sink is unless they wire `_onError` via
150
+ // the strategy options. We store it on this hook so put-failures
151
+ // route correctly).
152
+ onErrorHook =
153
+ onErrorHook ??
154
+ ((e) => {
155
+ // eslint-disable-next-line no-console
156
+ console.error(`[${strategyName}Observability] flush failed:`, e.message);
157
+ });
158
+ onErrorHook(err, event);
159
+ },
160
+ };
161
+ }
162
+ // ─── Public factory: cloudwatchObservability ─────────────────────────
163
+ /**
164
+ * Generic CloudWatch Logs observability adapter. See
165
+ * `CloudwatchObservabilityOptions` for the per-option contract.
166
+ *
167
+ * For AgentCore-specific conventions, use `agentcoreObservability`
168
+ * which thin-wraps this with AgentCore-flavored defaults.
169
+ */
170
+ export function cloudwatchObservability(opts) {
171
+ return _buildCloudWatchObservability(opts, 'cloudwatch');
172
+ }
173
+ // ─── SDK client construction (lazy) ──────────────────────────────────
174
+ function createCloudWatchClient(region, strategyName) {
175
+ let mod;
176
+ try {
177
+ mod = lazyRequire('@aws-sdk/client-cloudwatch-logs');
178
+ }
179
+ catch {
180
+ throw new Error(`[${strategyName}Observability] requires the \`@aws-sdk/client-cloudwatch-logs\` peer dependency.\n` +
181
+ ` Install: npm install @aws-sdk/client-cloudwatch-logs\n` +
182
+ ` Or pass \`_client\` for test injection.`);
183
+ }
184
+ if (!mod.CloudWatchLogsClient || !mod.PutLogEventsCommand) {
185
+ throw new Error(`[${strategyName}Observability]: \`@aws-sdk/client-cloudwatch-logs\` is installed but ` +
186
+ `\`CloudWatchLogsClient\` / \`PutLogEventsCommand\` was not found. Update the SDK.`);
187
+ }
188
+ const sdkClient = new mod.CloudWatchLogsClient({ ...(region && { region }) });
189
+ return {
190
+ async putLogEvents(input) {
191
+ // Cast the SDK constructor to the call shape — same trick as
192
+ // the memory adapter to stay forward-compat with SDK shape drift.
193
+ const cmd = new mod.PutLogEventsCommand(input);
194
+ await sdkClient.send(cmd);
195
+ },
196
+ };
197
+ }
198
+ //# sourceMappingURL=cloudwatch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cloudwatch.js","sourceRoot":"","sources":["../../../../src/adapters/observability/cloudwatch.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,366 @@
1
+ /**
2
+ * xrayObservability — AWS X-Ray distributed-tracing adapter.
3
+ *
4
+ * Maps agentfootprint's event taxonomy onto AWS X-Ray segment trees:
5
+ *
6
+ * agent.turn_start ↦ root segment (one trace per turn)
7
+ * agent.turn_end ↦ close root segment + flush
8
+ * agent.iteration_start ↦ push subsegment under root
9
+ * agent.iteration_end ↦ close iteration subsegment
10
+ * stream.llm_start ↦ push leaf subsegment (model call)
11
+ * stream.llm_end ↦ close llm subsegment
12
+ * stream.tool_start ↦ push leaf subsegment (tool call)
13
+ * stream.tool_end ↦ close tool subsegment
14
+ *
15
+ * The result in the X-Ray Trace Map: a hierarchical timeline of every
16
+ * agent run — turn → iteration → llm-call/tool-call — queryable in
17
+ * X-Ray Insights, joinable with the rest of your AWS distributed
18
+ * trace via `AWSTraceHeader` propagation (consumer's responsibility
19
+ * to wire upstream/downstream IDs).
20
+ *
21
+ * Subpath: `agentfootprint/observability-providers`
22
+ * Peer dep: `@aws-sdk/client-xray` (OPTIONAL — installed only when
23
+ * this adapter is used).
24
+ *
25
+ * Sampling:
26
+ * By default every turn produces one trace. Pass `sampleRate: 0.1`
27
+ * to sample 10% of turns — sampling decisions are made at
28
+ * `turn_start` and persist for the whole turn (so partial traces
29
+ * never reach X-Ray).
30
+ *
31
+ * @example
32
+ * ```ts
33
+ * import { xrayObservability } from 'agentfootprint/observability-providers';
34
+ * import { microtaskBatchDriver } from 'footprintjs/detach';
35
+ *
36
+ * agent.enable.observability({
37
+ * strategy: xrayObservability({
38
+ * region: 'us-east-1',
39
+ * serviceName: 'my-agent',
40
+ * sampleRate: 0.1, // 10% sampling
41
+ * }),
42
+ * detach: { driver: microtaskBatchDriver, mode: 'forget' },
43
+ * });
44
+ * ```
45
+ *
46
+ * @example Test injection
47
+ * ```ts
48
+ * xrayObservability({
49
+ * serviceName: 'test',
50
+ * _client: {
51
+ * putTraceSegments: async (input) => { capturedDocs.push(input); },
52
+ * },
53
+ * });
54
+ * ```
55
+ */
56
+ import { lazyRequire } from '../../lib/lazyRequire.js';
57
+ // ─── Strategy factory ────────────────────────────────────────────────
58
+ export function xrayObservability(opts) {
59
+ if (!opts.serviceName) {
60
+ throw new TypeError(`[xrayObservability] \`serviceName\` is required. ` +
61
+ `Pass an identifier visible in your X-Ray service map, e.g. 'my-agent-prod'.`);
62
+ }
63
+ const sampleRate = opts.sampleRate ?? 1;
64
+ const maxBatchSegments = opts.maxBatchSegments ?? 25;
65
+ const flushIntervalMs = opts.flushIntervalMs ?? 1000;
66
+ // Per-turn state. agentfootprint events arrive interleaved across
67
+ // multiple in-flight turns; we key the active stack by `runId`
68
+ // (every event payload carries it after enrichment).
69
+ const activeTurns = new Map();
70
+ // Outbound segment buffer (flat list of closed segments ready for
71
+ // PutTraceSegments). Drained by flush() / size-trigger / time-trigger.
72
+ const outbox = [];
73
+ let lastFlushPromise = Promise.resolve();
74
+ let timer;
75
+ let stopped = false;
76
+ let onErrorHook;
77
+ // Lazy SDK client.
78
+ let client = opts._client;
79
+ function ensureClient() {
80
+ if (client)
81
+ return client;
82
+ client = createXRayClient(opts.region);
83
+ return client;
84
+ }
85
+ function scheduleTimedFlush() {
86
+ if (timer || flushIntervalMs <= 0 || stopped)
87
+ return;
88
+ timer = setTimeout(() => {
89
+ timer = undefined;
90
+ void doFlush();
91
+ }, flushIntervalMs);
92
+ }
93
+ async function doFlush() {
94
+ if (outbox.length === 0 || stopped)
95
+ return;
96
+ const batch = outbox.splice(0, maxBatchSegments);
97
+ try {
98
+ await ensureClient().putTraceSegments({
99
+ TraceSegmentDocuments: batch.map((s) => JSON.stringify(s)),
100
+ });
101
+ }
102
+ catch (err) {
103
+ onErrorHook?.(err instanceof Error ? err : new Error(String(err)));
104
+ }
105
+ // If outbox grew during the put (size > maxBatchSegments emits
106
+ // arrived), chain another flush.
107
+ if (outbox.length > 0 && !stopped) {
108
+ lastFlushPromise = lastFlushPromise.then(doFlush, doFlush);
109
+ }
110
+ }
111
+ function pushSegment(turnState, name) {
112
+ const parent = turnState.stack[turnState.stack.length - 1];
113
+ const seg = {
114
+ name,
115
+ id: hexId(16),
116
+ trace_id: turnState.traceId,
117
+ ...(parent && { parent_id: parent.id }),
118
+ start_time: nowSeconds(),
119
+ in_progress: true,
120
+ };
121
+ turnState.stack.push(seg);
122
+ return seg;
123
+ }
124
+ function popSegment(turnState, expectedName) {
125
+ // Defensive: pop the topmost segment whose name matches (if
126
+ // provided). Out-of-order events would otherwise leave dangling
127
+ // segments. If no match, pop the topmost.
128
+ let idx = turnState.stack.length - 1;
129
+ if (expectedName) {
130
+ while (idx >= 0 && turnState.stack[idx].name !== expectedName)
131
+ idx--;
132
+ }
133
+ if (idx < 0)
134
+ return undefined;
135
+ const seg = turnState.stack.splice(idx, 1)[0];
136
+ seg.end_time = nowSeconds();
137
+ delete seg.in_progress;
138
+ return seg;
139
+ }
140
+ function closeSegment(turnState, expectedName, extra) {
141
+ const seg = popSegment(turnState, expectedName);
142
+ if (!seg)
143
+ return;
144
+ if (extra?.error)
145
+ seg.error = true;
146
+ if (extra?.annotations)
147
+ seg.annotations = { ...seg.annotations, ...extra.annotations };
148
+ if (extra?.metadata)
149
+ seg.metadata = { default: { ...(seg.metadata?.default ?? {}), ...extra.metadata } };
150
+ if (turnState.sampled) {
151
+ turnState.closed.push(seg);
152
+ // Once the root closes, the whole turn graduates to outbox.
153
+ if (turnState.stack.length === 0) {
154
+ outbox.push(...turnState.closed);
155
+ if (outbox.length >= maxBatchSegments) {
156
+ lastFlushPromise = lastFlushPromise.then(doFlush, doFlush);
157
+ }
158
+ else {
159
+ scheduleTimedFlush();
160
+ }
161
+ }
162
+ }
163
+ }
164
+ // ─── Event-to-segment dispatch ─────────────────────────────────────
165
+ function handleEvent(event) {
166
+ if (stopped)
167
+ return;
168
+ const runId = event.payload?.runId;
169
+ if (!runId)
170
+ return; // Events without a turn anchor — skip.
171
+ switch (event.type) {
172
+ case 'agentfootprint.agent.turn_start': {
173
+ const sampled = sampleRate >= 1 || Math.random() < sampleRate;
174
+ const turnState = {
175
+ traceId: makeTraceId(),
176
+ stack: [],
177
+ closed: [],
178
+ sampled,
179
+ };
180
+ activeTurns.set(runId, turnState);
181
+ if (sampled)
182
+ pushSegment(turnState, opts.serviceName);
183
+ break;
184
+ }
185
+ case 'agentfootprint.agent.turn_end': {
186
+ const t = activeTurns.get(runId);
187
+ if (!t)
188
+ break;
189
+ // Close everything still on the stack — defensive against
190
+ // missing `_end` events (e.g., pause/resume mid-turn).
191
+ while (t.stack.length > 0)
192
+ closeSegment(t, undefined);
193
+ activeTurns.delete(runId);
194
+ break;
195
+ }
196
+ case 'agentfootprint.agent.iteration_start': {
197
+ const t = activeTurns.get(runId);
198
+ if (t?.sampled)
199
+ pushSegment(t, `iteration:${event.payload.iteration ?? '?'}`);
200
+ break;
201
+ }
202
+ case 'agentfootprint.agent.iteration_end': {
203
+ const t = activeTurns.get(runId);
204
+ if (t?.sampled)
205
+ closeSegment(t, undefined);
206
+ break;
207
+ }
208
+ case 'agentfootprint.stream.llm_start': {
209
+ const t = activeTurns.get(runId);
210
+ if (!t?.sampled)
211
+ break;
212
+ const seg = pushSegment(t, 'llm');
213
+ const model = event.payload.model;
214
+ if (model)
215
+ seg.annotations = { model };
216
+ break;
217
+ }
218
+ case 'agentfootprint.stream.llm_end': {
219
+ const t = activeTurns.get(runId);
220
+ if (!t?.sampled)
221
+ break;
222
+ closeSegment(t, 'llm', {
223
+ metadata: { event: event.payload },
224
+ });
225
+ break;
226
+ }
227
+ case 'agentfootprint.stream.tool_start': {
228
+ const t = activeTurns.get(runId);
229
+ if (!t?.sampled)
230
+ break;
231
+ const toolName = event.payload.toolName ?? 'tool';
232
+ const seg = pushSegment(t, `tool:${toolName}`);
233
+ seg.annotations = { toolName };
234
+ break;
235
+ }
236
+ case 'agentfootprint.stream.tool_end': {
237
+ const t = activeTurns.get(runId);
238
+ if (!t?.sampled)
239
+ break;
240
+ const toolName = event.payload.toolName;
241
+ closeSegment(t, toolName ? `tool:${toolName}` : undefined, {
242
+ error: event.payload.error !== undefined,
243
+ });
244
+ break;
245
+ }
246
+ // Other events become annotations on the topmost active segment
247
+ // (cheaper than spawning a subsegment per event).
248
+ default: {
249
+ const t = activeTurns.get(runId);
250
+ const top = t?.stack[t.stack.length - 1];
251
+ if (!t?.sampled || !top)
252
+ break;
253
+ // Annotate cost ticks specially so they're queryable in
254
+ // X-Ray Insights.
255
+ if (event.type === 'agentfootprint.cost.tick') {
256
+ const p = event.payload;
257
+ if (typeof p.cumulativeCostUsd === 'number') {
258
+ top.annotations = { ...top.annotations, cumulativeCostUsd: p.cumulativeCostUsd };
259
+ }
260
+ }
261
+ break;
262
+ }
263
+ }
264
+ }
265
+ return {
266
+ name: 'xray',
267
+ capabilities: { events: true, traces: true },
268
+ exportEvent: handleEvent,
269
+ async flush() {
270
+ // Force-close any in-flight turn segments so partial traces
271
+ // make it into X-Ray on shutdown.
272
+ for (const [, t] of activeTurns) {
273
+ if (!t.sampled)
274
+ continue;
275
+ while (t.stack.length > 0)
276
+ closeSegment(t, undefined);
277
+ }
278
+ while (outbox.length > 0) {
279
+ const before = lastFlushPromise;
280
+ await before;
281
+ if (outbox.length > 0) {
282
+ lastFlushPromise = doFlush();
283
+ }
284
+ if (lastFlushPromise === before && outbox.length === 0)
285
+ break;
286
+ }
287
+ },
288
+ stop() {
289
+ stopped = true;
290
+ if (timer) {
291
+ clearTimeout(timer);
292
+ timer = undefined;
293
+ }
294
+ },
295
+ _onError(err, event) {
296
+ onErrorHook =
297
+ onErrorHook ??
298
+ ((e) => {
299
+ // eslint-disable-next-line no-console
300
+ console.error(`[xrayObservability] flush failed:`, e.message);
301
+ });
302
+ onErrorHook(err, event);
303
+ },
304
+ };
305
+ }
306
+ // ─── ID + time helpers ───────────────────────────────────────────────
307
+ /**
308
+ * Generate an X-Ray trace ID. Format:
309
+ * `1-{8-hex-of-unix-timestamp}-{24-hex-random}`
310
+ * (Note X-Ray's docs say "12 hex" for the random part; the actual
311
+ * spec is 24 hex / 96-bit. AWS examples use 24.)
312
+ */
313
+ function makeTraceId() {
314
+ const seconds = Math.floor(Date.now() / 1000);
315
+ return `1-${seconds.toString(16).padStart(8, '0')}-${hexId(24)}`;
316
+ }
317
+ /** Generate a hex string of `len` chars, cryptographically-strong
318
+ * where available, falling back to Math.random for environments
319
+ * without `crypto.getRandomValues` (older runtimes). */
320
+ function hexId(len) {
321
+ const bytes = Math.ceil(len / 2);
322
+ // Try the Web Crypto / Node Crypto API first.
323
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
324
+ const cryptoApi = globalThis.crypto;
325
+ if (cryptoApi?.getRandomValues) {
326
+ const buf = new Uint8Array(bytes);
327
+ cryptoApi.getRandomValues(buf);
328
+ return Array.from(buf, (b) => b.toString(16).padStart(2, '0'))
329
+ .join('')
330
+ .slice(0, len);
331
+ }
332
+ // Fallback (deterministic-quality, NOT for security-critical IDs —
333
+ // X-Ray IDs aren't security boundaries, just trace correlation).
334
+ let s = '';
335
+ while (s.length < len)
336
+ s += Math.random().toString(16).slice(2);
337
+ return s.slice(0, len);
338
+ }
339
+ /** X-Ray timestamps are unix seconds with fractional precision. */
340
+ function nowSeconds() {
341
+ return Date.now() / 1000;
342
+ }
343
+ // ─── SDK construction (lazy) ─────────────────────────────────────────
344
+ function createXRayClient(region) {
345
+ let mod;
346
+ try {
347
+ mod = lazyRequire('@aws-sdk/client-xray');
348
+ }
349
+ catch {
350
+ throw new Error('xrayObservability requires the `@aws-sdk/client-xray` peer dependency.\n' +
351
+ ' Install: npm install @aws-sdk/client-xray\n' +
352
+ ' Or pass `_client` for test injection.');
353
+ }
354
+ if (!mod.XRayClient || !mod.PutTraceSegmentsCommand) {
355
+ throw new Error('xrayObservability: `@aws-sdk/client-xray` is installed but `XRayClient` / ' +
356
+ '`PutTraceSegmentsCommand` was not found. Update the SDK.');
357
+ }
358
+ const sdkClient = new mod.XRayClient({ ...(region && { region }) });
359
+ return {
360
+ async putTraceSegments(input) {
361
+ const cmd = new mod.PutTraceSegmentsCommand(input);
362
+ await sdkClient.send(cmd);
363
+ },
364
+ };
365
+ }
366
+ //# sourceMappingURL=xray.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"xray.js","sourceRoot":"","sources":["../../../../src/adapters/observability/xray.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsDG;AAGH,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAyDvD,wEAAwE;AAExE,MAAM,UAAU,iBAAiB,CAAC,IAA8B;IAC9D,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QACtB,MAAM,IAAI,SAAS,CACjB,mDAAmD;YACjD,6EAA6E,CAChF,CAAC;IACJ,CAAC;IAED,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,CAAC,CAAC;IACxC,MAAM,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,IAAI,EAAE,CAAC;IACrD,MAAM,eAAe,GAAG,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC;IAErD,kEAAkE;IAClE,+DAA+D;IAC/D,qDAAqD;IACrD,MAAM,WAAW,GAAG,IAAI,GAAG,EAQxB,CAAC;IAEJ,kEAAkE;IAClE,uEAAuE;IACvE,MAAM,MAAM,GAAkB,EAAE,CAAC;IACjC,IAAI,gBAAgB,GAAkB,OAAO,CAAC,OAAO,EAAE,CAAC;IACxD,IAAI,KAAgD,CAAC;IACrD,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,IAAI,WAA4E,CAAC;IAEjF,mBAAmB;IACnB,IAAI,MAAM,GAA+B,IAAI,CAAC,OAAO,CAAC;IACtD,SAAS,YAAY;QACnB,IAAI,MAAM;YAAE,OAAO,MAAM,CAAC;QAC1B,MAAM,GAAG,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACvC,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,SAAS,kBAAkB;QACzB,IAAI,KAAK,IAAI,eAAe,IAAI,CAAC,IAAI,OAAO;YAAE,OAAO;QACrD,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;YACtB,KAAK,GAAG,SAAS,CAAC;YAClB,KAAK,OAAO,EAAE,CAAC;QACjB,CAAC,EAAE,eAAe,CAAC,CAAC;IACtB,CAAC;IAED,KAAK,UAAU,OAAO;QACpB,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO;YAAE,OAAO;QAC3C,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,gBAAgB,CAAC,CAAC;QACjD,IAAI,CAAC;YACH,MAAM,YAAY,EAAE,CAAC,gBAAgB,CAAC;gBACpC,qBAAqB,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;aAC3D,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,WAAW,EAAE,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACrE,CAAC;QACD,+DAA+D;QAC/D,iCAAiC;QACjC,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAClC,gBAAgB,GAAG,gBAAgB,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC7D,CAAC;IACH,CAAC;IAED,SAAS,WAAW,CAClB,SAA0D,EAC1D,IAAY;QAEZ,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC3D,MAAM,GAAG,GAAgB;YACvB,IAAI;YACJ,EAAE,EAAE,KAAK,CAAC,EAAE,CAAC;YACb,QAAQ,EAAE,SAAS,CAAC,OAAO;YAC3B,GAAG,CAAC,MAAM,IAAI,EAAE,SAAS,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC;YACvC,UAAU,EAAE,UAAU,EAAE;YACxB,WAAW,EAAE,IAAI;SAClB,CAAC;QACF,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC1B,OAAO,GAAG,CAAC;IACb,CAAC;IAED,SAAS,UAAU,CACjB,SAA0D,EAC1D,YAAqB;QAErB,4DAA4D;QAC5D,gEAAgE;QAChE,0CAA0C;QAC1C,IAAI,GAAG,GAAG,SAAS,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;QACrC,IAAI,YAAY,EAAE,CAAC;YACjB,OAAO,GAAG,IAAI,CAAC,IAAI,SAAS,CAAC,KAAK,CAAC,GAAG,CAAE,CAAC,IAAI,KAAK,YAAY;gBAAE,GAAG,EAAE,CAAC;QACxE,CAAC;QACD,IAAI,GAAG,GAAG,CAAC;YAAE,OAAO,SAAS,CAAC;QAC9B,MAAM,GAAG,GAAG,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAE,CAAC;QAC/C,GAAG,CAAC,QAAQ,GAAG,UAAU,EAAE,CAAC;QAC5B,OAAO,GAAG,CAAC,WAAW,CAAC;QACvB,OAAO,GAAG,CAAC;IACb,CAAC;IAED,SAAS,YAAY,CACnB,SAA0D,EAC1D,YAAgC,EAChC,KAA8F;QAE9F,MAAM,GAAG,GAAG,UAAU,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;QAChD,IAAI,CAAC,GAAG;YAAE,OAAO;QACjB,IAAI,KAAK,EAAE,KAAK;YAAE,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC;QACnC,IAAI,KAAK,EAAE,WAAW;YAAE,GAAG,CAAC,WAAW,GAAG,EAAE,GAAG,GAAG,CAAC,WAAW,EAAE,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;QACvF,IAAI,KAAK,EAAE,QAAQ;YACjB,GAAG,CAAC,QAAQ,GAAG,EAAE,OAAO,EAAE,EAAE,GAAG,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,IAAI,EAAE,CAAC,EAAE,GAAG,KAAK,CAAC,QAAQ,EAAE,EAAE,CAAC;QACtF,IAAI,SAAS,CAAC,OAAO,EAAE,CAAC;YACtB,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC3B,4DAA4D;YAC5D,IAAI,SAAS,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACjC,MAAM,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;gBACjC,IAAI,MAAM,CAAC,MAAM,IAAI,gBAAgB,EAAE,CAAC;oBACtC,gBAAgB,GAAG,gBAAgB,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;gBAC7D,CAAC;qBAAM,CAAC;oBACN,kBAAkB,EAAE,CAAC;gBACvB,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,sEAAsE;IAEtE,SAAS,WAAW,CAAC,KAA0B;QAC7C,IAAI,OAAO;YAAE,OAAO;QACpB,MAAM,KAAK,GAAI,KAAK,CAAC,OAA0C,EAAE,KAAK,CAAC;QACvE,IAAI,CAAC,KAAK;YAAE,OAAO,CAAC,uCAAuC;QAE3D,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;YACnB,KAAK,iCAAiC,CAAC,CAAC,CAAC;gBACvC,MAAM,OAAO,GAAG,UAAU,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,GAAG,UAAU,CAAC;gBAC9D,MAAM,SAAS,GAAG;oBAChB,OAAO,EAAE,WAAW,EAAE;oBACtB,KAAK,EAAE,EAAmB;oBAC1B,MAAM,EAAE,EAAmB;oBAC3B,OAAO;iBACR,CAAC;gBACF,WAAW,CAAC,GAAG,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;gBAClC,IAAI,OAAO;oBAAE,WAAW,CAAC,SAAS,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;gBACtD,MAAM;YACR,CAAC;YAED,KAAK,+BAA+B,CAAC,CAAC,CAAC;gBACrC,MAAM,CAAC,GAAG,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;gBACjC,IAAI,CAAC,CAAC;oBAAE,MAAM;gBACd,0DAA0D;gBAC1D,uDAAuD;gBACvD,OAAO,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;oBAAE,YAAY,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;gBACtD,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBAC1B,MAAM;YACR,CAAC;YAED,KAAK,sCAAsC,CAAC,CAAC,CAAC;gBAC5C,MAAM,CAAC,GAAG,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;gBACjC,IAAI,CAAC,EAAE,OAAO;oBACZ,WAAW,CAAC,CAAC,EAAE,aAAc,KAAK,CAAC,OAAkC,CAAC,SAAS,IAAI,GAAG,EAAE,CAAC,CAAC;gBAC5F,MAAM;YACR,CAAC;YAED,KAAK,oCAAoC,CAAC,CAAC,CAAC;gBAC1C,MAAM,CAAC,GAAG,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;gBACjC,IAAI,CAAC,EAAE,OAAO;oBAAE,YAAY,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;gBAC3C,MAAM;YACR,CAAC;YAED,KAAK,iCAAiC,CAAC,CAAC,CAAC;gBACvC,MAAM,CAAC,GAAG,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;gBACjC,IAAI,CAAC,CAAC,EAAE,OAAO;oBAAE,MAAM;gBACvB,MAAM,GAAG,GAAG,WAAW,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;gBAClC,MAAM,KAAK,GAAI,KAAK,CAAC,OAA8B,CAAC,KAAK,CAAC;gBAC1D,IAAI,KAAK;oBAAE,GAAG,CAAC,WAAW,GAAG,EAAE,KAAK,EAAE,CAAC;gBACvC,MAAM;YACR,CAAC;YAED,KAAK,+BAA+B,CAAC,CAAC,CAAC;gBACrC,MAAM,CAAC,GAAG,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;gBACjC,IAAI,CAAC,CAAC,EAAE,OAAO;oBAAE,MAAM;gBACvB,YAAY,CAAC,CAAC,EAAE,KAAK,EAAE;oBACrB,QAAQ,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,OAA6C,EAAE;iBACzE,CAAC,CAAC;gBACH,MAAM;YACR,CAAC;YAED,KAAK,kCAAkC,CAAC,CAAC,CAAC;gBACxC,MAAM,CAAC,GAAG,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;gBACjC,IAAI,CAAC,CAAC,EAAE,OAAO;oBAAE,MAAM;gBACvB,MAAM,QAAQ,GAAI,KAAK,CAAC,OAAiC,CAAC,QAAQ,IAAI,MAAM,CAAC;gBAC7E,MAAM,GAAG,GAAG,WAAW,CAAC,CAAC,EAAE,QAAQ,QAAQ,EAAE,CAAC,CAAC;gBAC/C,GAAG,CAAC,WAAW,GAAG,EAAE,QAAQ,EAAE,CAAC;gBAC/B,MAAM;YACR,CAAC;YAED,KAAK,gCAAgC,CAAC,CAAC,CAAC;gBACtC,MAAM,CAAC,GAAG,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;gBACjC,IAAI,CAAC,CAAC,EAAE,OAAO;oBAAE,MAAM;gBACvB,MAAM,QAAQ,GAAI,KAAK,CAAC,OAAiC,CAAC,QAAQ,CAAC;gBACnE,YAAY,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,QAAQ,QAAQ,EAAE,CAAC,CAAC,CAAC,SAAS,EAAE;oBACzD,KAAK,EAAG,KAAK,CAAC,OAA+B,CAAC,KAAK,KAAK,SAAS;iBAClE,CAAC,CAAC;gBACH,MAAM;YACR,CAAC;YAED,gEAAgE;YAChE,kDAAkD;YAClD,OAAO,CAAC,CAAC,CAAC;gBACR,MAAM,CAAC,GAAG,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;gBACjC,MAAM,GAAG,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;gBACzC,IAAI,CAAC,CAAC,EAAE,OAAO,IAAI,CAAC,GAAG;oBAAE,MAAM;gBAC/B,wDAAwD;gBACxD,kBAAkB;gBAClB,IAAI,KAAK,CAAC,IAAI,KAAK,0BAA0B,EAAE,CAAC;oBAC9C,MAAM,CAAC,GAAG,KAAK,CAAC,OAAyC,CAAC;oBAC1D,IAAI,OAAO,CAAC,CAAC,iBAAiB,KAAK,QAAQ,EAAE,CAAC;wBAC5C,GAAG,CAAC,WAAW,GAAG,EAAE,GAAG,GAAG,CAAC,WAAW,EAAE,iBAAiB,EAAE,CAAC,CAAC,iBAAiB,EAAE,CAAC;oBACnF,CAAC;gBACH,CAAC;gBACD,MAAM;YACR,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO;QACL,IAAI,EAAE,MAAM;QACZ,YAAY,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE;QAC5C,WAAW,EAAE,WAAW;QACxB,KAAK,CAAC,KAAK;YACT,4DAA4D;YAC5D,kCAAkC;YAClC,KAAK,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,WAAW,EAAE,CAAC;gBAChC,IAAI,CAAC,CAAC,CAAC,OAAO;oBAAE,SAAS;gBACzB,OAAO,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;oBAAE,YAAY,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;YACxD,CAAC;YACD,OAAO,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACzB,MAAM,MAAM,GAAG,gBAAgB,CAAC;gBAChC,MAAM,MAAM,CAAC;gBACb,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACtB,gBAAgB,GAAG,OAAO,EAAE,CAAC;gBAC/B,CAAC;gBACD,IAAI,gBAAgB,KAAK,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;oBAAE,MAAM;YAChE,CAAC;QACH,CAAC;QACD,IAAI;YACF,OAAO,GAAG,IAAI,CAAC;YACf,IAAI,KAAK,EAAE,CAAC;gBACV,YAAY,CAAC,KAAK,CAAC,CAAC;gBACpB,KAAK,GAAG,SAAS,CAAC;YACpB,CAAC;QACH,CAAC;QACD,QAAQ,CAAC,GAAU,EAAE,KAA2B;YAC9C,WAAW;gBACT,WAAW;oBACX,CAAC,CAAC,CAAC,EAAE,EAAE;wBACL,sCAAsC;wBACtC,OAAO,CAAC,KAAK,CAAC,mCAAmC,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;oBAChE,CAAC,CAAC,CAAC;YACL,WAAW,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAC1B,CAAC;KACF,CAAC;AACJ,CAAC;AAED,wEAAwE;AAExE;;;;;GAKG;AACH,SAAS,WAAW;IAClB,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;IAC9C,OAAO,KAAK,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC;AACnE,CAAC;AAED;;yDAEyD;AACzD,SAAS,KAAK,CAAC,GAAW;IACxB,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;IACjC,8CAA8C;IAC9C,8DAA8D;IAC9D,MAAM,SAAS,GAAI,UAAkB,CAAC,MAEzB,CAAC;IACd,IAAI,SAAS,EAAE,eAAe,EAAE,CAAC;QAC/B,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC;QAClC,SAAS,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;QAC/B,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;aAC3D,IAAI,CAAC,EAAE,CAAC;aACR,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACnB,CAAC;IACD,mEAAmE;IACnE,iEAAiE;IACjE,IAAI,CAAC,GAAG,EAAE,CAAC;IACX,OAAO,CAAC,CAAC,MAAM,GAAG,GAAG;QAAE,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAChE,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AACzB,CAAC;AAED,mEAAmE;AACnE,SAAS,UAAU;IACjB,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;AAC3B,CAAC;AAED,wEAAwE;AAExE,SAAS,gBAAgB,CAAC,MAA0B;IAClD,IAAI,GAAkB,CAAC;IACvB,IAAI,CAAC;QACH,GAAG,GAAG,WAAW,CAAgB,sBAAsB,CAAC,CAAC;IAC3D,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CACb,0EAA0E;YACxE,gDAAgD;YAChD,yCAAyC,CAC5C,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,GAAG,CAAC,UAAU,IAAI,CAAC,GAAG,CAAC,uBAAuB,EAAE,CAAC;QACpD,MAAM,IAAI,KAAK,CACb,4EAA4E;YAC1E,0DAA0D,CAC7D,CAAC;IACJ,CAAC;IACD,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,EAAE,GAAG,CAAC,MAAM,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,CAEjE,CAAC;IACF,OAAO;QACL,KAAK,CAAC,gBAAgB,CAAC,KAAK;YAC1B,MAAM,GAAG,GAAG,IAAK,GAAG,CAAC,uBAAuD,CAAC,KAAK,CAAC,CAAC;YACpF,MAAM,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC5B,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -27,11 +27,13 @@
27
27
  * ```
28
28
  *
29
29
  * Roadmap:
30
- * - agentcoreObservability ← v2.8.1 (this release)
30
+ * - agentcoreObservability ← v2.8.1
31
31
  * - cloudwatchObservability ← v2.8.2
32
- * - xrayObservability ← v2.8.3
32
+ * - xrayObservability ← v2.8.3 (this release)
33
33
  * - otelObservability ← v2.9.x
34
34
  * - datadogObservability ← v2.9.x
35
35
  */
36
36
  export { agentcoreObservability, } from './adapters/observability/agentcore.js';
37
+ export { cloudwatchObservability, } from './adapters/observability/cloudwatch.js';
38
+ export { xrayObservability, } from './adapters/observability/xray.js';
37
39
  //# sourceMappingURL=observability-providers.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"observability-providers.js","sourceRoot":"","sources":["../../src/observability-providers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAEH,OAAO,EACL,sBAAsB,GAEvB,MAAM,uCAAuC,CAAC"}
1
+ {"version":3,"file":"observability-providers.js","sourceRoot":"","sources":["../../src/observability-providers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAEH,OAAO,EACL,sBAAsB,GAEvB,MAAM,uCAAuC,CAAC;AAC/C,OAAO,EACL,uBAAuB,GAExB,MAAM,wCAAwC,CAAC;AAChD,OAAO,EACL,iBAAiB,GAGlB,MAAM,kCAAkC,CAAC"}
@@ -28,14 +28,18 @@
28
28
  * ```
29
29
  *
30
30
  * Roadmap:
31
- * - agentcoreObservability ← v2.8.1 (this release)
31
+ * - agentcoreObservability ← v2.8.1
32
32
  * - cloudwatchObservability ← v2.8.2
33
- * - xrayObservability ← v2.8.3
33
+ * - xrayObservability ← v2.8.3 (this release)
34
34
  * - otelObservability ← v2.9.x
35
35
  * - datadogObservability ← v2.9.x
36
36
  */
37
37
  Object.defineProperty(exports, "__esModule", { value: true });
38
- exports.agentcoreObservability = void 0;
38
+ exports.xrayObservability = exports.cloudwatchObservability = exports.agentcoreObservability = void 0;
39
39
  var agentcore_js_1 = require("./adapters/observability/agentcore.js");
40
40
  Object.defineProperty(exports, "agentcoreObservability", { enumerable: true, get: function () { return agentcore_js_1.agentcoreObservability; } });
41
+ var cloudwatch_js_1 = require("./adapters/observability/cloudwatch.js");
42
+ Object.defineProperty(exports, "cloudwatchObservability", { enumerable: true, get: function () { return cloudwatch_js_1.cloudwatchObservability; } });
43
+ var xray_js_1 = require("./adapters/observability/xray.js");
44
+ Object.defineProperty(exports, "xrayObservability", { enumerable: true, get: function () { return xray_js_1.xrayObservability; } });
41
45
  //# sourceMappingURL=observability-providers.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"observability-providers.js","sourceRoot":"","sources":["../src/observability-providers.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;;;AAEH,sEAG+C;AAF7C,sHAAA,sBAAsB,OAAA"}
1
+ {"version":3,"file":"observability-providers.js","sourceRoot":"","sources":["../src/observability-providers.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;;;AAEH,sEAG+C;AAF7C,sHAAA,sBAAsB,OAAA;AAGxB,wEAGgD;AAF9C,wHAAA,uBAAuB,OAAA;AAGzB,4DAI0C;AAHxC,4GAAA,iBAAiB,OAAA"}