@microsoft/agents-telemetry 1.7.1 → 1.8.0-beta.34.g5d543f96c0

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 (42) hide show
  1. package/README.md +25 -5
  2. package/dist/cjs/package.json +4 -3
  3. package/dist/cjs/src/index.cjs +3 -1
  4. package/dist/cjs/src/index.cjs.map +1 -1
  5. package/dist/cjs/src/index.d.cts +8 -1
  6. package/dist/cjs/src/observability/constants.d.ts +7 -0
  7. package/dist/cjs/src/observability/constants.js +9 -0
  8. package/dist/cjs/src/observability/constants.js.map +1 -1
  9. package/dist/cjs/src/observability/trace.js +37 -25
  10. package/dist/cjs/src/observability/trace.js.map +1 -1
  11. package/dist/cjs/src/types.d.ts +17 -1
  12. package/dist/cjs/src/utils/noop.js +1 -0
  13. package/dist/cjs/src/utils/noop.js.map +1 -1
  14. package/dist/cjs/src/utils/record.d.ts +20 -0
  15. package/dist/cjs/src/utils/record.js +61 -0
  16. package/dist/cjs/src/utils/record.js.map +1 -0
  17. package/dist/cjs/src/utils/redact.d.ts +15 -0
  18. package/dist/cjs/src/utils/redact.js +62 -0
  19. package/dist/cjs/src/utils/redact.js.map +1 -1
  20. package/dist/cjs/tsconfig.tsbuildinfo +1 -1
  21. package/dist/esm/src/index.cjs +3 -1
  22. package/dist/esm/src/index.cjs.map +1 -1
  23. package/dist/esm/src/index.d.cts +8 -1
  24. package/dist/esm/src/index.d.mts +8 -1
  25. package/dist/esm/src/index.mjs +1 -1
  26. package/dist/esm/src/index.mjs.map +1 -1
  27. package/dist/esm/src/observability/constants.d.ts +7 -0
  28. package/dist/esm/src/observability/constants.js +9 -0
  29. package/dist/esm/src/observability/constants.js.map +1 -1
  30. package/dist/esm/src/observability/trace.js +37 -25
  31. package/dist/esm/src/observability/trace.js.map +1 -1
  32. package/dist/esm/src/types.d.ts +17 -1
  33. package/dist/esm/src/utils/noop.js +1 -0
  34. package/dist/esm/src/utils/noop.js.map +1 -1
  35. package/dist/esm/src/utils/record.d.ts +20 -0
  36. package/dist/esm/src/utils/record.js +57 -0
  37. package/dist/esm/src/utils/record.js.map +1 -0
  38. package/dist/esm/src/utils/redact.d.ts +15 -0
  39. package/dist/esm/src/utils/redact.js +60 -0
  40. package/dist/esm/src/utils/redact.js.map +1 -1
  41. package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
  42. package/package.json +4 -3
package/README.md CHANGED
@@ -97,7 +97,7 @@ sdk.start()
97
97
 
98
98
  All built-in span categories are enabled by default. To disable one or more categories without changing code, set `AGENTS_TELEMETRY_DISABLED_SPAN_CATEGORIES` in your environment:
99
99
 
100
- ```env
100
+ ```
101
101
  AGENTS_TELEMETRY_DISABLED_SPAN_CATEGORIES=STORAGE,AUTHORIZATION
102
102
 
103
103
  # or
@@ -183,7 +183,7 @@ For long-lived operations where you need manual control over the span lifecycle:
183
183
  ```ts
184
184
  import { SpanNames, trace } from '@microsoft/agents-telemetry'
185
185
 
186
- const { record, actions, end, fail } = trace({
186
+ const { record, actions, child, end, fail } = trace({
187
187
  name: SpanNames.ADAPTER_PROCESS,
188
188
  record: { status: 'pending' },
189
189
  end: ({ span, record, duration }) => {
@@ -193,7 +193,20 @@ const { record, actions, end, fail } = trace({
193
193
 
194
194
  try {
195
195
  record({ status: 'processing' })
196
- await doWork()
196
+ const keys = ['conversation']
197
+ await child(
198
+ {
199
+ name: SpanNames.STORAGE_READ,
200
+ record: { keys: 0 },
201
+ end: ({ span, record }) => {
202
+ span.setAttribute('storage.keys', record.keys)
203
+ },
204
+ },
205
+ async ({ record }) => {
206
+ record({ keys: 5 })
207
+ await storage.read(keys)
208
+ }
209
+ )
197
210
  record({ status: 'done' })
198
211
  end()
199
212
  } catch (error) {
@@ -230,6 +243,8 @@ trace(storageReadTrace, ({ record }) => {
230
243
  - Non-Error thrown values are recorded with their type name and string representation.
231
244
  - Unrecognized span names throw immediately.
232
245
  - Disabled span categories run the callback with a noop context — no telemetry is emitted.
246
+ - Managed spans can start parented spans with `child(definition)` or `child(definition, callback)`.
247
+ - Record updates recursively merge plain objects; arrays are copied and replaced.
233
248
  - The `end` hook receives `{ span, record, duration, error? }`.
234
249
 
235
250
  ### Using debug
@@ -268,6 +283,7 @@ When `@opentelemetry/api` is not available, the instruments are safe noops.
268
283
  - **Error recording**: Exceptions are recorded on the span with `ERROR` status
269
284
  - **Span name validation**: Unknown span names are rejected early
270
285
  - **Record tracking**: Accumulate structured data during a trace and access it in the `end` hook
286
+ - **Managed child spans**: Start child spans from a managed trace context when a manual parent span stays open
271
287
  - **Custom actions**: Define span-scoped helper functions via the `actions` factory
272
288
  - **Category-based disabling**: Disable groups of spans via environment configuration
273
289
  - **Noop fallback**: All instrumentation calls are safe no-ops when OpenTelemetry APIs are not installed
@@ -278,13 +294,17 @@ When `@opentelemetry/api` is not available, the instruments are safe noops.
278
294
 
279
295
  ### `trace(definition)` — Managed mode
280
296
 
281
- Starts a span and returns a managed context with `record`, `actions`, `end`, and `fail` methods.
297
+ Starts a span and returns a managed context with `record`, `actions`, `child`, `end`, and `fail` methods.
282
298
 
283
299
  | Parameter | Type | Description |
284
300
  |-----------|------|-------------|
285
301
  | `definition` | `TraceDefinition` | Trace definition object (see below). |
286
302
 
287
- Returns: `{ record, actions, end, fail }`
303
+ Returns: `{ record, actions, child, end, fail }`
304
+
305
+ ### `managed.child(definition[, callback])`
306
+
307
+ Starts a span parented to an open managed span. Without a callback, it returns another managed context. With a callback, the child span follows callback-mode lifecycle behavior.
288
308
 
289
309
  ### `trace(definition, callback)` — Callback mode
290
310
 
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://json.schemastore.org/package.json",
3
3
  "name": "@microsoft/agents-telemetry",
4
- "version": "1.7.1",
4
+ "version": "1.8.0-beta.34.g5d543f96c0",
5
5
  "homepage": "https://github.com/microsoft/Agents-for-js",
6
6
  "repository": {
7
7
  "type": "git",
@@ -44,8 +44,9 @@
44
44
  "@opentelemetry/api-logs": "0.214.0"
45
45
  },
46
46
  "dependencies": {
47
- "@microsoft/agents-activity": "1.7.1",
48
- "debug": "^4.4.3"
47
+ "@microsoft/agents-activity": "1.8.0-beta.34.g5d543f96c0",
48
+ "@noble/hashes": "1.8.0",
49
+ "debug": "4.4.3"
49
50
  },
50
51
  "license": "MIT",
51
52
  "files": [
@@ -5,9 +5,11 @@
5
5
  */
6
6
  var _a;
7
7
  Object.defineProperty(exports, "__esModule", { value: true });
8
- exports.metric = exports.trace = exports.debug = exports.MetricNames = exports.SpanNames = exports.redactScopes = exports.redactUrl = exports.redactString = void 0;
8
+ exports.metric = exports.trace = exports.debug = exports.MetricNames = exports.SpanNames = exports.redactScopes = exports.redactUrl = exports.redactString = exports.redactDiagnosticObject = exports.pseudonymizeConversationId = void 0;
9
9
  const index_js_1 = require("./index.js");
10
10
  var redact_js_1 = require("./utils/redact.js");
11
+ Object.defineProperty(exports, "pseudonymizeConversationId", { enumerable: true, get: function () { return redact_js_1.pseudonymizeConversationId; } });
12
+ Object.defineProperty(exports, "redactDiagnosticObject", { enumerable: true, get: function () { return redact_js_1.redactDiagnosticObject; } });
11
13
  Object.defineProperty(exports, "redactString", { enumerable: true, get: function () { return redact_js_1.redactString; } });
12
14
  Object.defineProperty(exports, "redactUrl", { enumerable: true, get: function () { return redact_js_1.redactUrl; } });
13
15
  Object.defineProperty(exports, "redactScopes", { enumerable: true, get: function () { return redact_js_1.redactScopes; } });
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sourceRoot":"","sources":["../../../src/index.cts"],"names":[],"mappings":";AAAA;;;GAGG;;;;AASH,yCAAkC;AAGlC,+CAAyE;AAAhE,yGAAA,YAAY,OAAA;AAAE,sGAAA,SAAS,OAAA;AAAE,yGAAA,YAAY,OAAA;AAEjC,KAMT,IAAA,gBAAK,EAAC;IACR,IAAI,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,oBAAoB,CAAS;IACjD,IAAI,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,yBAAyB,CAAa;CAC3D,CAAC,EARA,iBAAS,iBACT,mBAAW,mBACX,aAAK,aACL,aAAK,aACL,cAAM,aAIN"}
1
+ {"version":3,"file":"index.cjs","sourceRoot":"","sources":["../../../src/index.cts"],"names":[],"mappings":";AAAA;;;GAGG;;;;AASH,yCAAkC;AAGlC,+CAA6H;AAApH,uHAAA,0BAA0B,OAAA;AAAE,mHAAA,sBAAsB,OAAA;AAAE,yGAAA,YAAY,OAAA;AAAE,sGAAA,SAAS,OAAA;AAAE,yGAAA,YAAY,OAAA;AAErF,KAMT,IAAA,gBAAK,EAAC;IACR,IAAI,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,oBAAoB,CAAS;IACjD,IAAI,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,yBAAyB,CAAa;CAC3D,CAAC,EARA,iBAAS,iBACT,mBAAW,mBACX,aAAK,aACL,aAAK,aACL,cAAM,aAIN"}
@@ -3,7 +3,7 @@
3
3
  * Licensed under the MIT License.
4
4
  */
5
5
  export type { TraceDefinition } from './types.js';
6
- export { redactString, redactUrl, redactScopes } from './utils/redact.js';
6
+ export { pseudonymizeConversationId, redactDiagnosticObject, redactString, redactUrl, redactScopes } from './utils/redact.js';
7
7
  export declare const SpanNames: {
8
8
  readonly ADAPTER_PROCESS: "agents.adapter.process";
9
9
  readonly ADAPTER_SEND_ACTIVITIES: "agents.adapter.send_activities";
@@ -65,11 +65,16 @@ export declare const SpanNames: {
65
65
  readonly COPILOT_SEND_ACTIVITY: "agents.copilot_client.send_activity";
66
66
  readonly COPILOT_POST_REQUEST: "agents.copilot_client.post_request";
67
67
  readonly COPILOT_CREATE_CONNECTION: "agents.copilot_client.webchat.create_connection";
68
+ readonly COPILOT_WEBCHAT_START_CONVERSATION: "agents.copilot_client.webchat.start_conversation";
69
+ readonly COPILOT_WEBCHAT_POST_ACTIVITY: "agents.copilot_client.webchat.post_activity";
70
+ readonly COPILOT_WEBCHAT_RECEIVE_ACTIVITY: "agents.copilot_client.webchat.receive_activity";
71
+ readonly COPILOT_WEBCHAT_END_CONNECTION: "agents.copilot_client.webchat.end_connection";
68
72
  readonly COPILOT_EXECUTE_STREAMING: "agents.copilot_client.execute_streaming";
69
73
  readonly COPILOT_SUBSCRIBE_ASYNC: "agents.copilot_client.subscribe_async";
70
74
  readonly NAMED_PIPE_CONNECT: "agents.named_pipe.connect";
71
75
  readonly NAMED_PIPE_DISPATCH: "agents.named_pipe.dispatch";
72
76
  readonly NAMED_PIPE_SEND: "agents.named_pipe.send";
77
+ readonly SLACK_API_CALL: "agents.slack.api.call";
73
78
  }, MetricNames: {
74
79
  readonly ADAPTER_PROCESS_DURATION: "agents.adapter.process.duration";
75
80
  readonly ACTIVITIES_RECEIVED: "agents.activities.received";
@@ -109,4 +114,6 @@ export declare const SpanNames: {
109
114
  readonly NAMED_PIPE_DISPATCH_ERRORS: "agents.named_pipe.dispatch.error.count";
110
115
  readonly NAMED_PIPE_SENDS: "agents.named_pipe.send.count";
111
116
  readonly NAMED_PIPE_SEND_DURATION: "agents.named_pipe.send.duration";
117
+ readonly SLACK_API_REQUESTS: "agents.slack.api.request.count";
118
+ readonly SLACK_API_REQUEST_DURATION: "agents.slack.api.request.duration";
112
119
  }, debug: (namespace: string) => import("./loggers/base.js").Logger, trace: import("./types.js").TraceFunction, metric: import("./types.js").Metric;
@@ -79,11 +79,16 @@ export declare const SpanNames: {
79
79
  readonly COPILOT_SEND_ACTIVITY: "agents.copilot_client.send_activity";
80
80
  readonly COPILOT_POST_REQUEST: "agents.copilot_client.post_request";
81
81
  readonly COPILOT_CREATE_CONNECTION: "agents.copilot_client.webchat.create_connection";
82
+ readonly COPILOT_WEBCHAT_START_CONVERSATION: "agents.copilot_client.webchat.start_conversation";
83
+ readonly COPILOT_WEBCHAT_POST_ACTIVITY: "agents.copilot_client.webchat.post_activity";
84
+ readonly COPILOT_WEBCHAT_RECEIVE_ACTIVITY: "agents.copilot_client.webchat.receive_activity";
85
+ readonly COPILOT_WEBCHAT_END_CONNECTION: "agents.copilot_client.webchat.end_connection";
82
86
  readonly COPILOT_EXECUTE_STREAMING: "agents.copilot_client.execute_streaming";
83
87
  readonly COPILOT_SUBSCRIBE_ASYNC: "agents.copilot_client.subscribe_async";
84
88
  readonly NAMED_PIPE_CONNECT: "agents.named_pipe.connect";
85
89
  readonly NAMED_PIPE_DISPATCH: "agents.named_pipe.dispatch";
86
90
  readonly NAMED_PIPE_SEND: "agents.named_pipe.send";
91
+ readonly SLACK_API_CALL: "agents.slack.api.call";
87
92
  };
88
93
  /**
89
94
  * Metric names used for telemetry in the Agents SDK.
@@ -127,4 +132,6 @@ export declare const MetricNames: {
127
132
  readonly NAMED_PIPE_DISPATCH_ERRORS: "agents.named_pipe.dispatch.error.count";
128
133
  readonly NAMED_PIPE_SENDS: "agents.named_pipe.send.count";
129
134
  readonly NAMED_PIPE_SEND_DURATION: "agents.named_pipe.send.duration";
135
+ readonly SLACK_API_REQUESTS: "agents.slack.api.request.count";
136
+ readonly SLACK_API_REQUEST_DURATION: "agents.slack.api.request.duration";
130
137
  };
@@ -94,12 +94,18 @@ exports.SpanNames = {
94
94
  COPILOT_SEND_ACTIVITY: 'agents.copilot_client.send_activity',
95
95
  COPILOT_POST_REQUEST: 'agents.copilot_client.post_request',
96
96
  COPILOT_CREATE_CONNECTION: 'agents.copilot_client.webchat.create_connection',
97
+ COPILOT_WEBCHAT_START_CONVERSATION: 'agents.copilot_client.webchat.start_conversation',
98
+ COPILOT_WEBCHAT_POST_ACTIVITY: 'agents.copilot_client.webchat.post_activity',
99
+ COPILOT_WEBCHAT_RECEIVE_ACTIVITY: 'agents.copilot_client.webchat.receive_activity',
100
+ COPILOT_WEBCHAT_END_CONNECTION: 'agents.copilot_client.webchat.end_connection',
97
101
  COPILOT_EXECUTE_STREAMING: 'agents.copilot_client.execute_streaming',
98
102
  COPILOT_SUBSCRIBE_ASYNC: 'agents.copilot_client.subscribe_async',
99
103
  // Named Pipe
100
104
  NAMED_PIPE_CONNECT: 'agents.named_pipe.connect',
101
105
  NAMED_PIPE_DISPATCH: 'agents.named_pipe.dispatch',
102
106
  NAMED_PIPE_SEND: 'agents.named_pipe.send',
107
+ // Slack
108
+ SLACK_API_CALL: 'agents.slack.api.call',
103
109
  };
104
110
  /**
105
111
  * Metric names used for telemetry in the Agents SDK.
@@ -155,5 +161,8 @@ exports.MetricNames = {
155
161
  NAMED_PIPE_DISPATCH_ERRORS: 'agents.named_pipe.dispatch.error.count',
156
162
  NAMED_PIPE_SENDS: 'agents.named_pipe.send.count',
157
163
  NAMED_PIPE_SEND_DURATION: 'agents.named_pipe.send.duration',
164
+ // Slack
165
+ SLACK_API_REQUESTS: 'agents.slack.api.request.count',
166
+ SLACK_API_REQUEST_DURATION: 'agents.slack.api.request.duration',
158
167
  };
159
168
  //# sourceMappingURL=constants.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../../src/observability/constants.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../../src/observability/constants.ts"],"names":[],"mappings":"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"}
@@ -10,6 +10,7 @@ const attempt_js_1 = require("../utils/attempt.js");
10
10
  const category_js_1 = require("./category.js");
11
11
  const constants_js_1 = require("./constants.js");
12
12
  const noop_js_1 = require("../utils/noop.js");
13
+ const record_js_1 = require("../utils/record.js");
13
14
  const errorHelper_js_1 = require("../errorHelper.js");
14
15
  /**
15
16
  * Creates the trace helper bound to the package tracer.
@@ -22,6 +23,9 @@ function traceFactory(otel) {
22
23
  const validSpanNames = new Set(Object.values(constants_js_1.SpanNames));
23
24
  const tracer = otel.trace.getTracer('@microsoft/agents-telemetry');
24
25
  const trace = function trace(target, callback) {
26
+ return runTrace(target, callback);
27
+ };
28
+ function runTrace(target, callback, parentSpan) {
25
29
  if (!target) {
26
30
  throw agents_activity_1.ExceptionHelper.generateException(Error, errorHelper_js_1.Errors.TraceDefinitionRequired);
27
31
  }
@@ -29,29 +33,37 @@ function traceFactory(otel) {
29
33
  throw agents_activity_1.ExceptionHelper.generateException(Error, errorHelper_js_1.Errors.UnrecognizedSpanName, undefined, { spanName: target.name });
30
34
  }
31
35
  if ((0, category_js_1.isSpanDisabled)(target.name)) {
32
- return (0, noop_js_1.noopContext)(callback);
33
- }
34
- const record = createRecord(target);
35
- if (!callback) {
36
- // TODO: if parent/child span connections are needed, we could expose a 'child' function that internally connects them.
37
- const span = tracer.startSpan(target.name);
38
- const flow = start(otel, target, span, record);
39
- return {
40
- record: flow.record,
41
- actions: flow.actions,
42
- fail: flow.fail,
43
- end: flow.end
44
- };
36
+ return callback ? (0, noop_js_1.noopContext)(callback) : (0, noop_js_1.noopContext)();
45
37
  }
46
- return tracer.startActiveSpan(target.name, span => {
47
- const flow = start(otel, target, span, record);
48
- return (0, attempt_js_1.attempt)({
49
- try: () => callback({ record: flow.record, actions: flow.actions }),
50
- catch: (error) => { throw flow.fail(error); },
51
- finally: flow.end
38
+ const execute = () => {
39
+ const record = createRecord(target);
40
+ if (!callback) {
41
+ const span = tracer.startSpan(target.name);
42
+ const flow = start(otel, target, span, record);
43
+ const child = ((definition, childCallback) => runTrace(definition, childCallback, span));
44
+ return {
45
+ record: flow.record,
46
+ actions: flow.actions,
47
+ child,
48
+ fail: flow.fail,
49
+ end: flow.end
50
+ };
51
+ }
52
+ return tracer.startActiveSpan(target.name, span => {
53
+ const flow = start(otel, target, span, record);
54
+ return (0, attempt_js_1.attempt)({
55
+ try: () => callback({ record: flow.record, actions: flow.actions }),
56
+ catch: (error) => { throw flow.fail(error); },
57
+ finally: flow.end
58
+ });
52
59
  });
53
- });
54
- };
60
+ };
61
+ if (!parentSpan) {
62
+ return execute();
63
+ }
64
+ const parentContext = otel.trace.setSpan(otel.context.active(), parentSpan);
65
+ return otel.context.with(parentContext, execute);
66
+ }
55
67
  trace.define = definition => definition;
56
68
  return trace;
57
69
  }
@@ -59,14 +71,14 @@ function traceFactory(otel) {
59
71
  * Creates the mutable record stored for a trace execution.
60
72
  *
61
73
  * @remarks
62
- * - Updates use `Object.assign`, so nested objects are replaced rather than deeply merged.
74
+ * - Plain objects are recursively merged.
75
+ * - Arrays are copied and replaced.
63
76
  */
64
77
  function createRecord(target) {
65
- const state = target.record ? { ...target.record } : {};
78
+ const state = target.record ? (0, record_js_1.cloneRecordValue)(target.record) : {};
66
79
  return {
67
80
  set(values) {
68
- // TODO: use deep-merge strategy for Object and Array
69
- Object.assign(state, values);
81
+ (0, record_js_1.mergeRecordValues)(state, values);
70
82
  },
71
83
  get() {
72
84
  return state;
@@ -1 +1 @@
1
- {"version":3,"file":"trace.js","sourceRoot":"","sources":["../../../../src/observability/trace.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"trace.js","sourceRoot":"","sources":["../../../../src/observability/trace.ts"],"names":[],"mappings":"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"}
@@ -32,7 +32,8 @@ export type SpanName = typeof SpanNames[keyof typeof SpanNames];
32
32
  * Mutable state container used while a trace is active.
33
33
  *
34
34
  * @remarks
35
- * - `set()` performs a shallow merge.
35
+ * - `set()` recursively merges plain objects.
36
+ * - Arrays are copied and replaced.
36
37
  * - `get()` returns the latest snapshot stored for the span.
37
38
  */
38
39
  export interface TraceRecord<TRecord extends object> {
@@ -43,6 +44,13 @@ export interface TraceRecord<TRecord extends object> {
43
44
  * Context passed to traced callbacks.
44
45
  */
45
46
  export interface TraceContext<TRecord extends object, TActions extends object> {
47
+ /**
48
+ * Updates the record values collected for the span.
49
+ *
50
+ * @remarks
51
+ * - Plain objects are recursively merged.
52
+ * - Arrays are copied and replaced.
53
+ */
46
54
  record(values: Partial<TRecord>): void;
47
55
  actions: TActions;
48
56
  }
@@ -65,10 +73,18 @@ export interface TraceEndContext<TRecord extends object> {
65
73
  duration: number;
66
74
  error?: unknown;
67
75
  }
76
+ /**
77
+ * Starts a child span parented to an active managed span.
78
+ */
79
+ export interface TraceChildFunction {
80
+ <TRecord extends object, TActions extends object>(definition: TraceDefinition<TRecord, TActions>): TraceManagedContext<TRecord, TActions>;
81
+ <TRecord extends object, TActions extends object, TReturn>(definition: TraceDefinition<TRecord, TActions>, callback: TraceCallback<TRecord, TActions, TReturn>): TReturn;
82
+ }
68
83
  /**
69
84
  * Handle returned when a trace is created without a callback.
70
85
  */
71
86
  export interface TraceManagedContext<TRecord extends object, TActions extends object> extends TraceContext<TRecord, TActions> {
87
+ child: TraceChildFunction;
72
88
  end(): void;
73
89
  fail<T extends unknown>(error: T): T;
74
90
  }
@@ -36,6 +36,7 @@ function noopContext(callback) {
36
36
  const managedContext = {
37
37
  record: context.record,
38
38
  actions: context.actions,
39
+ child: ((_definition, callback) => noopContext(callback)),
39
40
  end: noopFn,
40
41
  fail(error) {
41
42
  return error;
@@ -1 +1 @@
1
- {"version":3,"file":"noop.js","sourceRoot":"","sources":["../../../../src/utils/noop.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAkBH,gCAKC;AAOD,kCAqBC;AA/CD,MAAM,MAAM,GAAG,GAAG,EAAE,GAAE,CAAC,CAAA;AAEvB;;GAEG;AACU,QAAA,SAAS,GAAG,UAAU,MAAM,EAAE,QAAQ;IACjD,OAAO,WAAW,CAAC,QAAQ,CAAC,CAAA;AAC9B,CAAkB,CAAA;AAElB,iBAAS,CAAC,MAAM,GAAG,UAAU,CAAC,EAAE,CAAC,UAAU,CAAA;AAE3C;;GAEG;AACH,SAAgB,UAAU;IACxB,OAAO;QACL,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;QACrC,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC;KACjC,CAAA;AACH,CAAC;AAOD,SAAgB,WAAW,CAA4D,QAAoD;IACzI,MAAM,OAAO,GAAG,IAAI,KAAK,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,MAAM,EAAE,CAAa,CAAA;IAChE,MAAM,OAAO,GAAoC;QAC/C,MAAM,EAAE,MAAM;QACd,OAAO;KACR,CAAA;IAED,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,QAAQ,CAAC,OAAO,CAAC,CAAA;IAC1B,CAAC;IAED,MAAM,cAAc,GAA2C;QAC7D,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,GAAG,EAAE,MAAM;QACX,IAAI,CAAqB,KAAQ;YAC/B,OAAO,KAAK,CAAA;QACd,CAAC;KACF,CAAA;IAED,OAAO,cAAc,CAAA;AACvB,CAAC"}
1
+ {"version":3,"file":"noop.js","sourceRoot":"","sources":["../../../../src/utils/noop.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAkBH,gCAKC;AAOD,kCAsBC;AAhDD,MAAM,MAAM,GAAG,GAAG,EAAE,GAAE,CAAC,CAAA;AAEvB;;GAEG;AACU,QAAA,SAAS,GAAG,UAAU,MAAM,EAAE,QAAQ;IACjD,OAAO,WAAW,CAAC,QAAQ,CAAC,CAAA;AAC9B,CAAkB,CAAA;AAElB,iBAAS,CAAC,MAAM,GAAG,UAAU,CAAC,EAAE,CAAC,UAAU,CAAA;AAE3C;;GAEG;AACH,SAAgB,UAAU;IACxB,OAAO;QACL,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;QACrC,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC;KACjC,CAAA;AACH,CAAC;AAOD,SAAgB,WAAW,CAA4D,QAAoD;IACzI,MAAM,OAAO,GAAG,IAAI,KAAK,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,MAAM,EAAE,CAAa,CAAA;IAChE,MAAM,OAAO,GAAoC;QAC/C,MAAM,EAAE,MAAM;QACd,OAAO;KACR,CAAA;IAED,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,QAAQ,CAAC,OAAO,CAAC,CAAA;IAC1B,CAAC;IAED,MAAM,cAAc,GAA2C;QAC7D,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,KAAK,EAAE,CAAC,CAAC,WAAW,EAAE,QAAQ,EAAE,EAAE,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAuB;QAC/E,GAAG,EAAE,MAAM;QACX,IAAI,CAAqB,KAAQ;YAC/B,OAAO,KAAK,CAAA;QACd,CAAC;KACF,CAAA;IAED,OAAO,cAAc,CAAA;AACvB,CAAC"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Copyright (c) Microsoft Corporation. All rights reserved.
3
+ * Licensed under the MIT License.
4
+ */
5
+ /**
6
+ * Recursively merges record values into the target state.
7
+ *
8
+ * @remarks
9
+ * - Plain objects are recursively merged.
10
+ * - Arrays are copied and replaced.
11
+ */
12
+ export declare function mergeRecordValues(target: Record<string, unknown>, values: Record<string, unknown>): void;
13
+ /**
14
+ * Clones record values while preserving non-plain objects by reference.
15
+ *
16
+ * @remarks
17
+ * - Plain objects and arrays are cloned.
18
+ * - Non-plain objects are kept by reference.
19
+ */
20
+ export declare function cloneRecordValue<T>(value: T): T;
@@ -0,0 +1,61 @@
1
+ "use strict";
2
+ /**
3
+ * Copyright (c) Microsoft Corporation. All rights reserved.
4
+ * Licensed under the MIT License.
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.mergeRecordValues = mergeRecordValues;
8
+ exports.cloneRecordValue = cloneRecordValue;
9
+ /**
10
+ * Recursively merges record values into the target state.
11
+ *
12
+ * @remarks
13
+ * - Plain objects are recursively merged.
14
+ * - Arrays are copied and replaced.
15
+ */
16
+ function mergeRecordValues(target, values) {
17
+ Object.entries(values).forEach(([key, value]) => {
18
+ const current = target[key];
19
+ if (isPlainObject(current) && isPlainObject(value)) {
20
+ const merged = { ...current };
21
+ mergeRecordValues(merged, value);
22
+ target[key] = merged;
23
+ return;
24
+ }
25
+ target[key] = cloneRecordValue(value);
26
+ });
27
+ }
28
+ /**
29
+ * Clones record values while preserving non-plain objects by reference.
30
+ *
31
+ * @remarks
32
+ * - Plain objects and arrays are cloned.
33
+ * - Non-plain objects are kept by reference.
34
+ */
35
+ function cloneRecordValue(value) {
36
+ if (Array.isArray(value)) {
37
+ return value.map(item => cloneRecordValue(item));
38
+ }
39
+ if (isPlainObject(value)) {
40
+ const result = {};
41
+ Object.entries(value).forEach(([key, child]) => {
42
+ result[key] = cloneRecordValue(child);
43
+ });
44
+ return result;
45
+ }
46
+ return value;
47
+ }
48
+ /**
49
+ * Checks whether a value is a plain object that can be recursively merged.
50
+ *
51
+ * @remarks
52
+ * Arrays and class instances are not considered plain objects.
53
+ */
54
+ function isPlainObject(value) {
55
+ if (Object.prototype.toString.call(value) !== '[object Object]') {
56
+ return false;
57
+ }
58
+ const prototype = Object.getPrototypeOf(value);
59
+ return prototype === Object.prototype || prototype === null;
60
+ }
61
+ //# sourceMappingURL=record.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"record.js","sourceRoot":"","sources":["../../../../src/utils/record.ts"],"names":[],"mappings":";AAAA;;;GAGG;;AASH,8CAaC;AASD,4CAcC;AA3CD;;;;;;GAMG;AACH,SAAgB,iBAAiB,CAAE,MAA+B,EAAE,MAA+B;IACjG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;QAC9C,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,CAAA;QAE3B,IAAI,aAAa,CAAC,OAAO,CAAC,IAAI,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC;YACnD,MAAM,MAAM,GAAG,EAAE,GAAG,OAAO,EAAE,CAAA;YAC7B,iBAAiB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;YAChC,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAA;YACpB,OAAM;QACR,CAAC;QAED,MAAM,CAAC,GAAG,CAAC,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAA;IACvC,CAAC,CAAC,CAAA;AACJ,CAAC;AAED;;;;;;GAMG;AACH,SAAgB,gBAAgB,CAAK,KAAQ;IAC3C,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAM,CAAA;IACvD,CAAC;IAED,IAAI,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,MAAM,GAA4B,EAAE,CAAA;QAC1C,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;YAC7C,MAAM,CAAC,GAAG,CAAC,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAA;QACvC,CAAC,CAAC,CAAA;QACF,OAAO,MAAW,CAAA;IACpB,CAAC;IAED,OAAO,KAAK,CAAA;AACd,CAAC;AAED;;;;;GAKG;AACH,SAAS,aAAa,CAAE,KAAc;IACpC,IAAI,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,iBAAiB,EAAE,CAAC;QAChE,OAAO,KAAK,CAAA;IACd,CAAC;IAED,MAAM,SAAS,GAAG,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,CAAA;IAC9C,OAAO,SAAS,KAAK,MAAM,CAAC,SAAS,IAAI,SAAS,KAAK,IAAI,CAAA;AAC7D,CAAC"}
@@ -21,3 +21,18 @@ export declare function redactUrl(value: string | undefined): string | undefined
21
21
  * @returns The redacted scopes string, which includes an indication of how many scopes were redacted. If the input value is undefined, it will be returned as undefined.
22
22
  */
23
23
  export declare function redactScopes(scopes: string[] | undefined): string | undefined;
24
+ /**
25
+ * Returns a stable, non-reversible identifier for diagnostic correlation.
26
+ * @param conversationId The conversation ID to pseudonymize.
27
+ * @param key Optional secret used to keep pseudonyms stable across restarts.
28
+ * @returns A pseudonymized conversation ID, or undefined when no ID is supplied.
29
+ */
30
+ export declare function pseudonymizeConversationId(conversationId: string | undefined, key?: string): string | undefined;
31
+ /**
32
+ * Creates a redacted copy of an object for diagnostic logging.
33
+ * Conversation IDs, activity text, and URL-valued properties are redacted while all other values are preserved.
34
+ * @param value The value to sanitize for diagnostics.
35
+ * @param diagnosticsPseudonymKey Optional secret used to keep conversation pseudonyms stable across restarts.
36
+ * @returns A non-mutating, redacted copy of the value.
37
+ */
38
+ export declare function redactDiagnosticObject(value: unknown, diagnosticsPseudonymKey?: string): unknown;
@@ -7,8 +7,14 @@ Object.defineProperty(exports, "__esModule", { value: true });
7
7
  exports.redactString = redactString;
8
8
  exports.redactUrl = redactUrl;
9
9
  exports.redactScopes = redactScopes;
10
+ exports.pseudonymizeConversationId = pseudonymizeConversationId;
11
+ exports.redactDiagnosticObject = redactDiagnosticObject;
12
+ const hmac_1 = require("@noble/hashes/hmac");
13
+ const sha2_1 = require("@noble/hashes/sha2");
14
+ const utils_1 = require("@noble/hashes/utils");
10
15
  const REDACTED_VALUE = '<redacted>';
11
16
  const REDACTION_PEEK_LENGTH = 2;
17
+ let processLocalKey;
12
18
  /**
13
19
  * Redacts a string value, optionally allowing a peek at the beginning of the string for context.
14
20
  * @param value The string value to redact.
@@ -56,4 +62,60 @@ function redactScopes(scopes) {
56
62
  const count = scopes.length;
57
63
  return `${REDACTED_VALUE} (${count} ${count === 1 ? 'scope' : 'scopes'})`;
58
64
  }
65
+ /**
66
+ * Returns a stable, non-reversible identifier for diagnostic correlation.
67
+ * @param conversationId The conversation ID to pseudonymize.
68
+ * @param key Optional secret used to keep pseudonyms stable across restarts.
69
+ * @returns A pseudonymized conversation ID, or undefined when no ID is supplied.
70
+ */
71
+ function pseudonymizeConversationId(conversationId, key) {
72
+ if (!(conversationId === null || conversationId === void 0 ? void 0 : conversationId.trim())) {
73
+ return undefined;
74
+ }
75
+ const trimmedKey = key === null || key === void 0 ? void 0 : key.trim();
76
+ const hmacKey = trimmedKey
77
+ ? (0, utils_1.utf8ToBytes)(trimmedKey)
78
+ : (processLocalKey !== null && processLocalKey !== void 0 ? processLocalKey : (processLocalKey = createProcessLocalKey()));
79
+ const digest = (0, hmac_1.hmac)(sha2_1.sha256, hmacKey, (0, utils_1.utf8ToBytes)(conversationId));
80
+ return `cid_${(0, utils_1.bytesToHex)(digest).slice(0, 32)}`;
81
+ }
82
+ function createProcessLocalKey() {
83
+ const key = new Uint8Array(32);
84
+ globalThis.crypto.getRandomValues(key);
85
+ return key;
86
+ }
87
+ /**
88
+ * Creates a redacted copy of an object for diagnostic logging.
89
+ * Conversation IDs, activity text, and URL-valued properties are redacted while all other values are preserved.
90
+ * @param value The value to sanitize for diagnostics.
91
+ * @param diagnosticsPseudonymKey Optional secret used to keep conversation pseudonyms stable across restarts.
92
+ * @returns A non-mutating, redacted copy of the value.
93
+ */
94
+ function redactDiagnosticObject(value, diagnosticsPseudonymKey) {
95
+ return redactValue(value, [], diagnosticsPseudonymKey);
96
+ }
97
+ function redactValue(value, path, diagnosticsPseudonymKey) {
98
+ var _a, _b;
99
+ if (typeof value === 'string') {
100
+ const propertyName = (_a = path.at(-1)) === null || _a === void 0 ? void 0 : _a.toLowerCase();
101
+ const parentPropertyName = (_b = path.at(-2)) === null || _b === void 0 ? void 0 : _b.toLowerCase();
102
+ if (propertyName === 'conversationid' || (propertyName === 'id' && parentPropertyName === 'conversation')) {
103
+ return pseudonymizeConversationId(value, diagnosticsPseudonymKey);
104
+ }
105
+ if (propertyName === 'text' || propertyName === 'activitytext') {
106
+ return redactString(value, true);
107
+ }
108
+ if ((propertyName === null || propertyName === void 0 ? void 0 : propertyName.includes('url')) || propertyName === 'uri' || propertyName === 'href') {
109
+ return redactUrl(value);
110
+ }
111
+ return value;
112
+ }
113
+ if (Array.isArray(value)) {
114
+ return value.map(item => redactValue(item, path, diagnosticsPseudonymKey));
115
+ }
116
+ if (value && typeof value === 'object') {
117
+ return Object.fromEntries(Object.entries(value).map(([key, item]) => [key, redactValue(item, [...path, key], diagnosticsPseudonymKey)]));
118
+ }
119
+ return value;
120
+ }
59
121
  //# sourceMappingURL=redact.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"redact.js","sourceRoot":"","sources":["../../../../src/utils/redact.ts"],"names":[],"mappings":";AAAA;;;GAGG;;AAWH,oCAQC;AAOD,8BAiBC;AAOD,oCAOC;AAvDD,MAAM,cAAc,GAAG,YAAY,CAAA;AACnC,MAAM,qBAAqB,GAAG,CAAC,CAAA;AAE/B;;;;;GAKG;AACH,SAAgB,YAAY,CAAE,KAAyB,EAAE,OAAgB,KAAK;IAC5E,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,OAAO,SAAS,CAAA;IAClB,CAAC;IAED,OAAO,IAAI,IAAI,KAAK,CAAC,MAAM,GAAG,qBAAqB,GAAG,CAAC;QACrD,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,qBAAqB,CAAC,GAAG,cAAc,EAAE;QAC7D,CAAC,CAAC,cAAc,CAAA;AACpB,CAAC;AAED;;;;GAIG;AACH,SAAgB,SAAS,CAAE,KAAyB;IAClD,IAAI,CAAC,CAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,IAAI,EAAE,CAAA,EAAE,CAAC;QACnB,OAAO,SAAS,CAAA;IAClB,CAAC;IAED,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAA;QAC1B,MAAM,YAAY,GAAG,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;QAE5D,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC9B,OAAO,GAAG,CAAC,MAAM,CAAA;QACnB,CAAC;QAED,OAAO,GAAG,GAAG,CAAC,MAAM,IAAI,cAAc,KAAK,YAAY,CAAC,MAAM,YAAY,CAAA;IAC5E,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,cAAc,CAAA;IACvB,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,SAAgB,YAAY,CAAE,MAA4B;IACxD,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,OAAO,SAAS,CAAA;IAClB,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAA;IAC3B,OAAO,GAAG,cAAc,KAAK,KAAK,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAA;AAC3E,CAAC"}
1
+ {"version":3,"file":"redact.js","sourceRoot":"","sources":["../../../../src/utils/redact.ts"],"names":[],"mappings":"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"}