@superdurable/dex-agents 0.1.0 → 0.3.0

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 (168) hide show
  1. package/README.md +1608 -64
  2. package/dist/src/agent-built-in-tools.d.ts +81 -0
  3. package/dist/src/agent-built-in-tools.js +246 -0
  4. package/dist/src/agent-built-in-tools.js.map +1 -0
  5. package/dist/src/agent-context-compaction.d.ts +254 -0
  6. package/dist/src/agent-context-compaction.js +287 -0
  7. package/dist/src/agent-context-compaction.js.map +1 -0
  8. package/dist/src/agent-framework-runner.d.ts +456 -16
  9. package/dist/src/agent-framework-runner.js +4 -3
  10. package/dist/src/agent-framework-runner.js.map +1 -1
  11. package/dist/src/agent-plans.d.ts +48 -0
  12. package/dist/src/agent-plans.js +86 -0
  13. package/dist/src/agent-plans.js.map +1 -0
  14. package/dist/src/agent-session-cancellation-steps.d.ts +28 -0
  15. package/dist/src/agent-session-cancellation-steps.js +154 -0
  16. package/dist/src/agent-session-cancellation-steps.js.map +1 -0
  17. package/dist/src/agent-session-codecs.d.ts +65 -4
  18. package/dist/src/agent-session-codecs.js +343 -8
  19. package/dist/src/agent-session-codecs.js.map +1 -1
  20. package/dist/src/agent-session-failure.d.ts +58 -0
  21. package/dist/src/agent-session-failure.js +126 -0
  22. package/dist/src/agent-session-failure.js.map +1 -0
  23. package/dist/src/agent-session-flow-graph-cli.d.ts +2 -0
  24. package/dist/src/agent-session-flow-graph-cli.js +47 -0
  25. package/dist/src/agent-session-flow-graph-cli.js.map +1 -0
  26. package/dist/src/agent-session-flow-graph.d.ts +38 -0
  27. package/dist/src/agent-session-flow-graph.js +54 -0
  28. package/dist/src/agent-session-flow-graph.js.map +1 -0
  29. package/dist/src/agent-session-flow-graph.json +2187 -0
  30. package/dist/src/agent-session-flow.d.ts +317 -28
  31. package/dist/src/agent-session-flow.js +373 -21
  32. package/dist/src/agent-session-flow.js.map +1 -1
  33. package/dist/src/agent-session-persistence.d.ts +81 -4
  34. package/dist/src/agent-session-persistence.js +33 -2
  35. package/dist/src/agent-session-persistence.js.map +1 -1
  36. package/dist/src/agent-session-settings.d.ts +58 -0
  37. package/dist/src/agent-session-settings.js +81 -0
  38. package/dist/src/agent-session-settings.js.map +1 -0
  39. package/dist/src/agent-session-spend-limit.d.ts +156 -0
  40. package/dist/src/agent-session-spend-limit.js +42 -0
  41. package/dist/src/agent-session-spend-limit.js.map +1 -0
  42. package/dist/src/agent-session-start.d.ts +49 -0
  43. package/dist/src/agent-session-start.js +67 -0
  44. package/dist/src/agent-session-start.js.map +1 -0
  45. package/dist/src/agent-session-step-options.d.ts +78 -0
  46. package/dist/src/agent-session-step-options.js +71 -0
  47. package/dist/src/agent-session-step-options.js.map +1 -0
  48. package/dist/src/agent-session-step-types.d.ts +20 -0
  49. package/dist/src/agent-session-step-types.js +28 -0
  50. package/dist/src/agent-session-step-types.js.map +1 -0
  51. package/dist/src/agent-session-steps.d.ts +103 -8
  52. package/dist/src/agent-session-steps.js +997 -197
  53. package/dist/src/agent-session-steps.js.map +1 -1
  54. package/dist/src/agent-session-tracer.d.ts +61 -0
  55. package/dist/src/agent-session-tracer.js +608 -0
  56. package/dist/src/agent-session-tracer.js.map +1 -0
  57. package/dist/src/agent-session-transitions.d.ts +200 -26
  58. package/dist/src/agent-session-transitions.js +732 -32
  59. package/dist/src/agent-session-transitions.js.map +1 -1
  60. package/dist/src/agent-session-values.d.ts +696 -30
  61. package/dist/src/agent-session-values.js +39 -4
  62. package/dist/src/agent-session-values.js.map +1 -1
  63. package/dist/src/agent-session-wait-steps.d.ts +53 -0
  64. package/dist/src/agent-session-wait-steps.js +389 -0
  65. package/dist/src/agent-session-wait-steps.js.map +1 -0
  66. package/dist/src/agent-tracing-options.d.ts +107 -0
  67. package/dist/src/agent-tracing-options.js +20 -0
  68. package/dist/src/agent-tracing-options.js.map +1 -0
  69. package/dist/src/ai-sdk/ai-sdk-model-client.d.ts +40 -0
  70. package/dist/src/ai-sdk/ai-sdk-model-client.js +235 -0
  71. package/dist/src/ai-sdk/ai-sdk-model-client.js.map +1 -0
  72. package/dist/src/ai-sdk/index.d.ts +1 -0
  73. package/dist/src/ai-sdk/index.js +9 -0
  74. package/dist/src/ai-sdk/index.js.map +1 -0
  75. package/dist/src/index.d.ts +14 -3
  76. package/dist/src/index.js +12 -2
  77. package/dist/src/index.js.map +1 -1
  78. package/dist/src/mcp/index.d.ts +3 -0
  79. package/dist/src/mcp/index.js +10 -0
  80. package/dist/src/mcp/index.js.map +1 -0
  81. package/dist/src/mcp/mcp-resource-and-prompt-tools.d.ts +29 -0
  82. package/dist/src/mcp/mcp-resource-and-prompt-tools.js +185 -0
  83. package/dist/src/mcp/mcp-resource-and-prompt-tools.js.map +1 -0
  84. package/dist/src/mcp/mcp-server-config.d.ts +86 -0
  85. package/dist/src/mcp/mcp-server-config.js +38 -0
  86. package/dist/src/mcp/mcp-server-config.js.map +1 -0
  87. package/dist/src/mcp/mcp-tool-source.d.ts +470 -0
  88. package/dist/src/mcp/mcp-tool-source.js +1204 -0
  89. package/dist/src/mcp/mcp-tool-source.js.map +1 -0
  90. package/dist/src/stepwise/agent-definition.d.ts +166 -0
  91. package/dist/src/stepwise/agent-definition.js +9 -0
  92. package/dist/src/stepwise/agent-definition.js.map +1 -0
  93. package/dist/src/stepwise/function-tool.d.ts +130 -0
  94. package/dist/src/stepwise/function-tool.js +75 -0
  95. package/dist/src/stepwise/function-tool.js.map +1 -0
  96. package/dist/src/stepwise/index.d.ts +8 -0
  97. package/dist/src/stepwise/index.js +13 -0
  98. package/dist/src/stepwise/index.js.map +1 -0
  99. package/dist/src/stepwise/json-schema-validation.d.ts +9 -0
  100. package/dist/src/stepwise/json-schema-validation.js +141 -0
  101. package/dist/src/stepwise/json-schema-validation.js.map +1 -0
  102. package/dist/src/stepwise/model-client.d.ts +194 -0
  103. package/dist/src/stepwise/model-client.js +9 -0
  104. package/dist/src/stepwise/model-client.js.map +1 -0
  105. package/dist/src/stepwise/scripted-model-client.d.ts +99 -0
  106. package/dist/src/stepwise/scripted-model-client.js +156 -0
  107. package/dist/src/stepwise/scripted-model-client.js.map +1 -0
  108. package/dist/src/stepwise/stepwise-agent-runner.d.ts +171 -0
  109. package/dist/src/stepwise/stepwise-agent-runner.js +777 -0
  110. package/dist/src/stepwise/stepwise-agent-runner.js.map +1 -0
  111. package/dist/src/stepwise/stepwise-agent-session-flow.d.ts +35 -0
  112. package/dist/src/stepwise/stepwise-agent-session-flow.js +57 -0
  113. package/dist/src/stepwise/stepwise-agent-session-flow.js.map +1 -0
  114. package/dist/src/stepwise/stepwise-input-items.d.ts +12 -0
  115. package/dist/src/stepwise/stepwise-input-items.js +172 -0
  116. package/dist/src/stepwise/stepwise-input-items.js.map +1 -0
  117. package/dist/src/stepwise/tool-source.d.ts +103 -0
  118. package/dist/src/stepwise/tool-source.js +9 -0
  119. package/dist/src/stepwise/tool-source.js.map +1 -0
  120. package/dist/src/testing/agent-session-test-client.d.ts +65 -8
  121. package/dist/src/testing/agent-session-test-client.js +92 -22
  122. package/dist/src/testing/agent-session-test-client.js.map +1 -1
  123. package/dist/src/testing/context-window.d.ts +194 -0
  124. package/dist/src/testing/context-window.js +360 -0
  125. package/dist/src/testing/context-window.js.map +1 -0
  126. package/dist/src/testing/index.d.ts +2 -0
  127. package/dist/src/testing/index.js +2 -0
  128. package/dist/src/testing/index.js.map +1 -1
  129. package/dist/src/testing/private-dex-engine.d.ts +9 -0
  130. package/dist/src/testing/private-dex-engine.js +9 -1
  131. package/dist/src/testing/private-dex-engine.js.map +1 -1
  132. package/dist/src/testing/scripted-model-client.d.ts +1 -0
  133. package/dist/src/testing/scripted-model-client.js +10 -0
  134. package/dist/src/testing/scripted-model-client.js.map +1 -0
  135. package/dist/src/ui-stream/agent-event-json.d.ts +30 -0
  136. package/dist/src/ui-stream/agent-event-json.js +64 -0
  137. package/dist/src/ui-stream/agent-event-json.js.map +1 -0
  138. package/dist/src/ui-stream/agent-event-sse.d.ts +155 -0
  139. package/dist/src/ui-stream/agent-event-sse.js +167 -0
  140. package/dist/src/ui-stream/agent-event-sse.js.map +1 -0
  141. package/dist/src/ui-stream/agent-event-stream-positions.d.ts +42 -0
  142. package/dist/src/ui-stream/agent-event-stream-positions.js +153 -0
  143. package/dist/src/ui-stream/agent-event-stream-positions.js.map +1 -0
  144. package/dist/src/ui-stream/agent-session-record-reader.d.ts +74 -0
  145. package/dist/src/ui-stream/agent-session-record-reader.js +246 -0
  146. package/dist/src/ui-stream/agent-session-record-reader.js.map +1 -0
  147. package/dist/src/ui-stream/agent-ui-message-stream-responses.d.ts +219 -0
  148. package/dist/src/ui-stream/agent-ui-message-stream-responses.js +441 -0
  149. package/dist/src/ui-stream/agent-ui-message-stream-responses.js.map +1 -0
  150. package/dist/src/ui-stream/agent-ui-message-stream.d.ts +138 -0
  151. package/dist/src/ui-stream/agent-ui-message-stream.js +695 -0
  152. package/dist/src/ui-stream/agent-ui-message-stream.js.map +1 -0
  153. package/dist/src/ui-stream/agent-ui-message-types.d.ts +238 -0
  154. package/dist/src/ui-stream/agent-ui-message-types.js +57 -0
  155. package/dist/src/ui-stream/agent-ui-message-types.js.map +1 -0
  156. package/dist/src/ui-stream/agent-ui-messages.d.ts +68 -0
  157. package/dist/src/ui-stream/agent-ui-messages.js +222 -0
  158. package/dist/src/ui-stream/agent-ui-messages.js.map +1 -0
  159. package/dist/src/ui-stream/agent-ui-stream-cursor.d.ts +64 -0
  160. package/dist/src/ui-stream/agent-ui-stream-cursor.js +186 -0
  161. package/dist/src/ui-stream/agent-ui-stream-cursor.js.map +1 -0
  162. package/dist/src/ui-stream/index.d.ts +14 -0
  163. package/dist/src/ui-stream/index.js +22 -0
  164. package/dist/src/ui-stream/index.js.map +1 -0
  165. package/dist/src/ui-stream/server-sent-event-responses.d.ts +6 -0
  166. package/dist/src/ui-stream/server-sent-event-responses.js +34 -0
  167. package/dist/src/ui-stream/server-sent-event-responses.js.map +1 -0
  168. package/package.json +44 -5
@@ -0,0 +1,608 @@
1
+ // Copyright (c) 2026 Super Durable, Inc.
2
+ //
3
+ // Licensed under the Sustainable Use License 1.0.
4
+ // You may not use this file except in compliance with the License.
5
+ // See the LICENSE file in the repository root.
6
+ //
7
+ // SPDX-License-Identifier: LicenseRef-Sustainable-Use-1.0
8
+ import { createRequire } from "node:module";
9
+ import { messageSequenceKey } from "./agent-session-persistence.js";
10
+ import { genAISemanticConventionsSchemaUrls, } from "./agent-tracing-options.js";
11
+ import { describeToolCallOutcome, } from "./agent-session-values.js";
12
+ const tracerName = "@superdurable/dex-agents";
13
+ const toolExecutionErrorType = "ToolExecutionError";
14
+ const traceparentPattern = /^00-([0-9a-f]{32})-([0-9a-f]{16})-([0-9a-f]{2})$/;
15
+ const requireFromCore = createRequire(import.meta.url);
16
+ let loadedOpenTelemetryApi;
17
+ let hasLoggedTracingFailure = false;
18
+ const unrecordedActivation = Object.freeze({ traceparent: null });
19
+ const disabledModelCallSpan = { recordOutcome: () => undefined };
20
+ const disabledToolCallSpan = { recordFinished: () => undefined };
21
+ const disabledContextSummarySpan = { recordResult: () => undefined };
22
+ /**
23
+ * Emits the spans of one agent session Flow type, or nothing when tracing is off.
24
+ *
25
+ * An activation's root `invoke_agent` span stores its `traceparent` in `AgentTraceContext`. `RunModel`
26
+ * reads it to parent its `chat` span and copies it onto the tool call records it creates; an approval
27
+ * replaces a record's copy with its own root. Tool Steps parent their spans from the record.
28
+ * `@opentelemetry/api` loads at the first Step that emits a span, never at import. Tracing never
29
+ * fails a Step: every OpenTelemetry call is guarded, logged, and skipped on error.
30
+ */
31
+ export class AgentSessionTracer {
32
+ options;
33
+ persistence;
34
+ tracer;
35
+ isLatestVersion;
36
+ shouldCaptureContent;
37
+ constructor(options, persistence) {
38
+ this.options = options;
39
+ this.persistence = persistence;
40
+ this.isLatestVersion = options.semanticConventionsVersion === "1.42.0-dev";
41
+ this.shouldCaptureContent = options.shouldCaptureMessageContent && this.isLatestVersion;
42
+ }
43
+ /** Runs a Step that starts a turn with a user message inside an activation root span. */
44
+ traceUserMessageActivation(context, stepType, turnId, userMessageKey, userMessageText, run) {
45
+ return this.traceActivation(context, stepType, turnId, { "dex.agent.activation.trigger": "user_message", "dex.agent.user_message.key": userMessageKey }, userMessageText, run);
46
+ }
47
+ /** Runs a Step that applies an interrupt answer or deadline inside an activation root span. */
48
+ traceInterruptActivation(context, stepType, turnId, interruptId, isApproved, isDeadlinePassed, run) {
49
+ return this.traceActivation(context, stepType, turnId, {
50
+ "dex.agent.activation.trigger": isDeadlinePassed ? "interrupt_deadline" : "interrupt_resolution",
51
+ "dex.agent.interrupt.id": interruptId,
52
+ "dex.agent.interrupt.approved": isApproved,
53
+ }, null, run);
54
+ }
55
+ /** Returns the stored root `traceparent` that new tool call records carry. */
56
+ readActivationTraceparent(context) {
57
+ return callSafely("read the activation trace context", () => this.readTraceparent(context)) ?? null;
58
+ }
59
+ /**
60
+ * Runs one `RunModel` attempt and emits its `chat` span when the attempt ends.
61
+ *
62
+ * The span starts after the runner returns, because its kind depends on the reported `modelCalls`.
63
+ * Meanwhile the activation root is the active span, so model client instrumentation nests under it.
64
+ */
65
+ async traceModelCall(context, stepType, turn, run) {
66
+ const tracing = this.resolveTracing();
67
+ if (tracing === null) {
68
+ return run(disabledModelCallSpan);
69
+ }
70
+ const startTime = performance.timeOrigin + performance.now();
71
+ const parent = callSafely("read the activation trace context", () => activationParentContext(tracing.api, this.readTraceparent(context)));
72
+ const modelCallSpan = new RecordingModelCallSpan(this.isLatestVersion, this.shouldCaptureContent);
73
+ let error;
74
+ let hasFailed = false;
75
+ try {
76
+ return await runInContext(tracing.api, parent, () => run(modelCallSpan));
77
+ }
78
+ catch (raised) {
79
+ hasFailed = true;
80
+ error = raised;
81
+ throw raised;
82
+ }
83
+ finally {
84
+ if (parent !== undefined) {
85
+ callSafely("emit the chat span", () => modelCallSpan.emit(tracing, parent, startTime, context, stepType, turn, hasFailed, error));
86
+ }
87
+ }
88
+ }
89
+ /** Runs one `CompactContext` attempt and emits its `chat` span when the attempt ends. */
90
+ async traceContextSummary(context, stepType, turnId, throughSequence, messages, run) {
91
+ const tracing = this.resolveTracing();
92
+ if (tracing === null) {
93
+ return run(disabledContextSummarySpan);
94
+ }
95
+ const startTime = performance.timeOrigin + performance.now();
96
+ const parent = callSafely("read the activation trace context", () => activationParentContext(tracing.api, this.readTraceparent(context)));
97
+ const summarySpan = new RecordingContextSummarySpan(this.isLatestVersion, this.shouldCaptureContent);
98
+ let error;
99
+ let hasFailed = false;
100
+ try {
101
+ return await runInContext(tracing.api, parent, () => run(summarySpan));
102
+ }
103
+ catch (raised) {
104
+ hasFailed = true;
105
+ error = raised;
106
+ throw raised;
107
+ }
108
+ finally {
109
+ if (parent !== undefined) {
110
+ callSafely("emit the summary chat span", () => summarySpan.emitSummary(tracing, parent, startTime, stepAttributes(context, stepType, turnId), throughSequence, messages, hasFailed, error));
111
+ }
112
+ }
113
+ }
114
+ /** Runs one tool Step attempt inside an `execute_tool` span of the record's activation. */
115
+ async traceToolCall(context, stepType, toolCall, run) {
116
+ const tracing = this.resolveTracing();
117
+ const span = tracing === null
118
+ ? undefined
119
+ : callSafely("start the execute_tool span", () => tracing.tracer.startSpan(`execute_tool ${toolCall.toolName}`, {
120
+ kind: tracing.api.SpanKind.INTERNAL,
121
+ attributes: {
122
+ "gen_ai.operation.name": "execute_tool",
123
+ "gen_ai.tool.name": toolCall.toolName,
124
+ "gen_ai.agent.name": this.options.agentName,
125
+ },
126
+ }, activationParentContext(tracing.api, toolCall.traceContext ?? null)));
127
+ if (tracing === null || span === undefined) {
128
+ return run(disabledToolCallSpan);
129
+ }
130
+ callSafely("set the execute_tool span attributes", () => {
131
+ if (!span.isRecording()) {
132
+ return;
133
+ }
134
+ span.setAttributes(stepAttributes(context, stepType, toolCall.turnId));
135
+ span.setAttribute("gen_ai.tool.call.id", toolCall.toolCallId);
136
+ span.setAttribute("dex.agent.tool.effect", toolCall.effect);
137
+ if (this.shouldCaptureContent) {
138
+ span.setAttribute("gen_ai.tool.call.arguments", toolCall.arguments);
139
+ }
140
+ });
141
+ const toolCallSpan = new RecordingToolCallSpan(tracing.api, span, this.shouldCaptureContent);
142
+ return runInSpanAsync(tracing.api, span, () => run(toolCallSpan));
143
+ }
144
+ traceActivation(context, stepType, turnId, activationAttributes, userMessageText, run) {
145
+ const storedTraceparent = callSafely("read the activation trace context", () => this.readTraceparent(context)) ?? null;
146
+ const tracing = this.resolveTracing();
147
+ const span = tracing === null
148
+ ? undefined
149
+ : callSafely("start the invoke_agent span", () => startActivationSpan(tracing, this.options.agentName, storedTraceparent));
150
+ let activation = unrecordedActivation;
151
+ let result;
152
+ if (tracing === null || span === undefined) {
153
+ result = run(activation);
154
+ }
155
+ else {
156
+ callSafely("set the invoke_agent span attributes", () => {
157
+ if (!span.isRecording()) {
158
+ return;
159
+ }
160
+ span.setAttributes(stepAttributes(context, stepType, turnId));
161
+ span.setAttributes(activationAttributes);
162
+ if (this.shouldCaptureContent && userMessageText !== null) {
163
+ span.setAttribute("gen_ai.input.messages", JSON.stringify([{ role: "user", parts: [textPart(userMessageText)] }]));
164
+ }
165
+ });
166
+ // An unsampled root stores its context too, so its children follow its sampling decision.
167
+ const traceparent = callSafely("read the invoke_agent span context", () => formatTraceparent(tracing.api, span.spanContext()));
168
+ activation = traceparent == null ? unrecordedActivation : { traceparent };
169
+ const recordedActivation = activation;
170
+ result = runInSpanSync(tracing.api, span, () => run(recordedActivation));
171
+ }
172
+ // A root without a valid context must not leave the previous activation's context behind.
173
+ const traceparent = activation.traceparent;
174
+ callSafely("store the activation trace context", () => {
175
+ if (traceparent !== null) {
176
+ if (traceparent !== storedTraceparent) {
177
+ this.persistence.agentTraceContext.set(context, traceparent);
178
+ }
179
+ }
180
+ else if (storedTraceparent !== null) {
181
+ this.persistence.agentTraceContext.delete(context);
182
+ }
183
+ });
184
+ return result;
185
+ }
186
+ readTraceparent(context) {
187
+ return this.persistence.agentTraceContext.get(context) ?? null;
188
+ }
189
+ resolveTracing() {
190
+ if (this.tracer === undefined) {
191
+ this.tracer = callSafely("create the tracer", () => this.createTracer()) ?? null;
192
+ }
193
+ if (this.tracer === null || loadedOpenTelemetryApi == null) {
194
+ return null;
195
+ }
196
+ return { api: loadedOpenTelemetryApi, tracer: this.tracer };
197
+ }
198
+ createTracer() {
199
+ if (!this.options.isEnabled) {
200
+ return null;
201
+ }
202
+ const api = loadOpenTelemetryApi();
203
+ if (api === null) {
204
+ return null;
205
+ }
206
+ const schemaUrl = genAISemanticConventionsSchemaUrls[this.options.semanticConventionsVersion];
207
+ const tracerProvider = this.options.tracerProvider ?? api.trace.getTracerProvider();
208
+ return tracerProvider.getTracer(tracerName, readPackageVersion(), { schemaUrl });
209
+ }
210
+ }
211
+ class RecordingModelCallSpan {
212
+ isLatestVersion;
213
+ shouldCaptureContent;
214
+ outcome;
215
+ appendedMessageKeys = [];
216
+ constructor(isLatestVersion, shouldCaptureContent) {
217
+ this.isLatestVersion = isLatestVersion;
218
+ this.shouldCaptureContent = shouldCaptureContent;
219
+ }
220
+ recordOutcome(outcome, appendedMessageKeys) {
221
+ this.outcome = outcome;
222
+ this.appendedMessageKeys = appendedMessageKeys;
223
+ }
224
+ emit(tracing, parent, startTime, context, stepType, turn, hasFailed, error) {
225
+ const { api, tracer } = tracing;
226
+ const outcome = this.outcome;
227
+ const requestModel = nonEmptyString(outcome?.modelCallMetadata?.requestModel);
228
+ // One span for several model calls must not double count usage that provider spans report.
229
+ const isSingleModelCall = outcome === undefined || outcome.usage?.modelCalls === 1;
230
+ const span = tracer.startSpan(requestModel === undefined ? "chat" : `chat ${requestModel}`, {
231
+ kind: isSingleModelCall ? api.SpanKind.CLIENT : api.SpanKind.INTERNAL,
232
+ attributes: {
233
+ "gen_ai.operation.name": "chat",
234
+ ...(requestModel === undefined ? {} : { "gen_ai.request.model": requestModel }),
235
+ },
236
+ startTime,
237
+ }, parent);
238
+ try {
239
+ if (!span.isRecording()) {
240
+ return;
241
+ }
242
+ span.setAttributes(stepAttributes(context, stepType, turn.turnId));
243
+ const lastMessage = turn.messages.at(-1);
244
+ if (lastMessage !== undefined) {
245
+ span.setAttribute("dex.agent.input_messages.last_key", messageSequenceKey(lastMessage.sequence));
246
+ }
247
+ if (this.shouldCaptureContent) {
248
+ span.setAttribute("gen_ai.input.messages", JSON.stringify(inputMessages(turn)));
249
+ }
250
+ if (outcome !== undefined) {
251
+ this.setOutcomeAttributes(span, outcome, isSingleModelCall);
252
+ }
253
+ if (hasFailed) {
254
+ recordSpanError(api, span, error);
255
+ }
256
+ }
257
+ finally {
258
+ span.end();
259
+ }
260
+ }
261
+ setOutcomeAttributes(span, outcome, isSingleModelCall) {
262
+ this.setMetadataAttributes(span, outcome.modelCallMetadata);
263
+ if (isSingleModelCall) {
264
+ this.setUsageAttributes(span, outcome.usage);
265
+ }
266
+ let outputMessages;
267
+ if (outcome.kind === "completed") {
268
+ const producedIndex = firstProducedMessageIndex(outcome.newMessages);
269
+ span.setAttribute("dex.agent.output_messages.keys", this.appendedMessageKeys.slice(producedIndex));
270
+ outputMessages = outcome.newMessages.slice(producedIndex).map(chatMessage);
271
+ }
272
+ else {
273
+ span.setAttribute("dex.agent.requested_tool_call.ids", outcome.toolCalls.map((toolCall) => toolCall.toolCallId));
274
+ outputMessages = [
275
+ {
276
+ role: "assistant",
277
+ parts: outcome.toolCalls.map((toolCall) => toolCallPart(toolCall.toolCallId, toolCall.toolName, toolCall.arguments)),
278
+ },
279
+ ];
280
+ }
281
+ if (this.shouldCaptureContent) {
282
+ span.setAttribute("gen_ai.output.messages", JSON.stringify(outputMessages.filter((message) => message.parts.length > 0)));
283
+ }
284
+ }
285
+ setMetadataAttributes(span, metadata) {
286
+ const responseModel = nonEmptyString(metadata?.responseModel);
287
+ if (responseModel !== undefined) {
288
+ span.setAttribute("gen_ai.response.model", responseModel);
289
+ }
290
+ const providerName = nonEmptyString(metadata?.providerName);
291
+ if (providerName !== undefined) {
292
+ span.setAttribute(this.isLatestVersion ? "gen_ai.provider.name" : "gen_ai.system", providerName);
293
+ }
294
+ const responseId = nonEmptyString(metadata?.responseId);
295
+ if (responseId !== undefined) {
296
+ span.setAttribute("gen_ai.response.id", responseId);
297
+ }
298
+ const finishReasons = Array.isArray(metadata?.finishReasons)
299
+ ? metadata.finishReasons.filter((reason) => nonEmptyString(reason) !== undefined)
300
+ : [];
301
+ if (finishReasons.length > 0) {
302
+ span.setAttribute("gen_ai.response.finish_reasons", finishReasons);
303
+ }
304
+ }
305
+ setUsageAttributes(span, usage) {
306
+ // Runners report zero for counts the framework does not expose.
307
+ if (usage === undefined || (usage.inputTokens === 0 && usage.outputTokens === 0)) {
308
+ return;
309
+ }
310
+ span.setAttribute("gen_ai.usage.input_tokens", usage.inputTokens);
311
+ span.setAttribute("gen_ai.usage.output_tokens", usage.outputTokens);
312
+ if (!this.isLatestVersion) {
313
+ return;
314
+ }
315
+ if (usage.cachedInputTokens > 0) {
316
+ span.setAttribute("gen_ai.usage.cache_read.input_tokens", usage.cachedInputTokens);
317
+ }
318
+ if (usage.reasoningTokens > 0) {
319
+ span.setAttribute("gen_ai.usage.reasoning.output_tokens", usage.reasoningTokens);
320
+ }
321
+ }
322
+ }
323
+ class RecordingContextSummarySpan extends RecordingModelCallSpan {
324
+ result;
325
+ recordResult(result) {
326
+ this.result = result;
327
+ }
328
+ emitSummary(tracing, parent, startTime, attributes, throughSequence, messages, hasFailed, error) {
329
+ const { api, tracer } = tracing;
330
+ const result = this.result;
331
+ const requestModel = nonEmptyString(result?.modelCallMetadata?.requestModel);
332
+ const isSingleModelCall = result === undefined || result.usage?.modelCalls === 1;
333
+ const span = tracer.startSpan(requestModel === undefined ? "chat" : `chat ${requestModel}`, {
334
+ kind: isSingleModelCall ? api.SpanKind.CLIENT : api.SpanKind.INTERNAL,
335
+ attributes: {
336
+ "gen_ai.operation.name": "chat",
337
+ ...(requestModel === undefined ? {} : { "gen_ai.request.model": requestModel }),
338
+ },
339
+ startTime,
340
+ }, parent);
341
+ try {
342
+ if (!span.isRecording()) {
343
+ return;
344
+ }
345
+ span.setAttributes(attributes);
346
+ span.setAttribute("dex.agent.input_messages.last_key", messageSequenceKey(throughSequence));
347
+ if (this.shouldCaptureContent) {
348
+ span.setAttribute("gen_ai.input.messages", JSON.stringify(messages.map(chatMessage)));
349
+ }
350
+ if (result !== undefined) {
351
+ this.setMetadataAttributes(span, result.modelCallMetadata);
352
+ if (isSingleModelCall) {
353
+ this.setUsageAttributes(span, result.usage);
354
+ }
355
+ if (this.shouldCaptureContent) {
356
+ span.setAttribute("gen_ai.output.messages", JSON.stringify([{ role: "assistant", parts: [textPart(result.text)] }]));
357
+ }
358
+ }
359
+ if (hasFailed) {
360
+ recordSpanError(api, span, error);
361
+ }
362
+ }
363
+ finally {
364
+ span.end();
365
+ }
366
+ }
367
+ }
368
+ class RecordingToolCallSpan {
369
+ api;
370
+ span;
371
+ shouldCaptureContent;
372
+ constructor(api, span, shouldCaptureContent) {
373
+ this.api = api;
374
+ this.span = span;
375
+ this.shouldCaptureContent = shouldCaptureContent;
376
+ }
377
+ recordFinished(finishedToolCall) {
378
+ callSafely("record the tool call outcome", () => {
379
+ const span = this.span;
380
+ if (!span.isRecording()) {
381
+ return;
382
+ }
383
+ span.setAttribute("dex.agent.tool_call.status", finishedToolCall.status);
384
+ if (finishedToolCall.status === "failed") {
385
+ span.setAttribute("error.type", toolExecutionErrorType);
386
+ span.setStatus({
387
+ code: this.api.SpanStatusCode.ERROR,
388
+ message: finishedToolCall.error ?? toolExecutionErrorType,
389
+ });
390
+ }
391
+ else if (this.shouldCaptureContent && finishedToolCall.output !== null) {
392
+ span.setAttribute("gen_ai.tool.call.result", finishedToolCall.output);
393
+ }
394
+ });
395
+ }
396
+ }
397
+ function callSafely(description, operation) {
398
+ try {
399
+ return operation();
400
+ }
401
+ catch (error) {
402
+ logTracingFailure(description, error);
403
+ return undefined;
404
+ }
405
+ }
406
+ function logTracingFailure(description, error) {
407
+ // The first failure logs a warning with its stack; later ones log at debug level.
408
+ if (hasLoggedTracingFailure) {
409
+ console.debug(`@superdurable/dex-agents tracing could not ${description}; the Step continues`, error);
410
+ return;
411
+ }
412
+ hasLoggedTracingFailure = true;
413
+ console.warn(`@superdurable/dex-agents tracing could not ${description}; the Step continues`, error);
414
+ }
415
+ function loadOpenTelemetryApi() {
416
+ if (loadedOpenTelemetryApi === undefined) {
417
+ try {
418
+ loadedOpenTelemetryApi = requireFromCore("@opentelemetry/api");
419
+ }
420
+ catch {
421
+ // The API is an optional peer dependency; without it the session emits nothing.
422
+ loadedOpenTelemetryApi = null;
423
+ }
424
+ }
425
+ return loadedOpenTelemetryApi;
426
+ }
427
+ function readPackageVersion() {
428
+ try {
429
+ return requireFromCore("../../package.json").version;
430
+ }
431
+ catch {
432
+ return undefined;
433
+ }
434
+ }
435
+ function startActivationSpan(tracing, agentName, previousRootTraceparent) {
436
+ const { api, tracer } = tracing;
437
+ const previousRoot = parseTraceparent(api, previousRootTraceparent);
438
+ // A root span keeps every activation a trace of its own.
439
+ return tracer.startSpan(`invoke_agent ${agentName}`, {
440
+ root: true,
441
+ kind: api.SpanKind.INTERNAL,
442
+ attributes: { "gen_ai.operation.name": "invoke_agent", "gen_ai.agent.name": agentName },
443
+ links: previousRoot === null ? [] : [{ context: previousRoot }],
444
+ }, api.ROOT_CONTEXT);
445
+ }
446
+ /** Runs `run` in `otelContext`; a context manager failure runs it without the context instead. */
447
+ function runInContext(api, otelContext, run) {
448
+ if (otelContext === undefined) {
449
+ return run();
450
+ }
451
+ let hasRun = false;
452
+ const runOnce = () => {
453
+ hasRun = true;
454
+ return run();
455
+ };
456
+ try {
457
+ return api.context.with(otelContext, runOnce);
458
+ }
459
+ catch (error) {
460
+ if (hasRun) {
461
+ throw error;
462
+ }
463
+ logTracingFailure("activate the trace context", error);
464
+ return run();
465
+ }
466
+ }
467
+ function runInSpanSync(api, span, run) {
468
+ const spanContext = callSafely("activate the span", () => api.trace.setSpan(api.context.active(), span));
469
+ try {
470
+ return runInContext(api, spanContext, run);
471
+ }
472
+ catch (error) {
473
+ callSafely("record the error on the span", () => recordSpanError(api, span, error));
474
+ throw error;
475
+ }
476
+ finally {
477
+ callSafely("end the span", () => span.end());
478
+ }
479
+ }
480
+ async function runInSpanAsync(api, span, run) {
481
+ const spanContext = callSafely("activate the span", () => api.trace.setSpan(api.context.active(), span));
482
+ try {
483
+ return await runInContext(api, spanContext, run);
484
+ }
485
+ catch (error) {
486
+ callSafely("record the error on the span", () => recordSpanError(api, span, error));
487
+ throw error;
488
+ }
489
+ finally {
490
+ callSafely("end the span", () => span.end());
491
+ }
492
+ }
493
+ function recordSpanError(api, span, error) {
494
+ if (!span.isRecording()) {
495
+ return;
496
+ }
497
+ const errorType = error instanceof Error && error.name !== "" ? error.name : "_OTHER";
498
+ span.setAttribute("error.type", errorType);
499
+ if (error instanceof Error) {
500
+ span.recordException(error);
501
+ }
502
+ const message = error instanceof Error ? error.message : String(error);
503
+ span.setStatus({ code: api.SpanStatusCode.ERROR, message: message === "" ? errorType : message });
504
+ }
505
+ function stepAttributes(context, stepType, turnId) {
506
+ return {
507
+ "gen_ai.conversation.id": context.flowId,
508
+ "session.id": context.flowId,
509
+ "dex.flow.id": context.flowId,
510
+ "dex.run.id": context.runId,
511
+ "dex.step.type": stepType,
512
+ "dex.step.execution_id": context.stepExecutionId,
513
+ "dex.step.attempt": context.attempt,
514
+ ...(turnId === null ? {} : { "dex.agent.turn.id": turnId }),
515
+ };
516
+ }
517
+ function activationParentContext(api, traceparent) {
518
+ const root = parseTraceparent(api, traceparent);
519
+ return root === null ? api.ROOT_CONTEXT : api.trace.setSpanContext(api.ROOT_CONTEXT, root);
520
+ }
521
+ function formatTraceparent(api, spanContext) {
522
+ if (!api.isSpanContextValid(spanContext)) {
523
+ return null;
524
+ }
525
+ const traceFlags = spanContext.traceFlags.toString(16).padStart(2, "0");
526
+ return `00-${spanContext.traceId}-${spanContext.spanId}-${traceFlags}`;
527
+ }
528
+ function parseTraceparent(api, traceparent) {
529
+ const match = traceparent === null ? null : traceparentPattern.exec(traceparent);
530
+ if (match === null) {
531
+ return null;
532
+ }
533
+ const [, traceId = "", spanId = "", traceFlags = "00"] = match;
534
+ const spanContext = {
535
+ traceId,
536
+ spanId,
537
+ traceFlags: Number.parseInt(traceFlags, 16),
538
+ isRemote: true,
539
+ };
540
+ return api.isSpanContextValid(spanContext) ? spanContext : null;
541
+ }
542
+ function nonEmptyString(value) {
543
+ return typeof value === "string" && value !== "" ? value : undefined;
544
+ }
545
+ function inputMessages(turn) {
546
+ const messages = turn.messages.map(chatMessage);
547
+ // A resumed call also received the turn's tool results, which are not messages yet.
548
+ for (const record of turn.toolCalls) {
549
+ messages.push({
550
+ role: "assistant",
551
+ parts: [toolCallPart(record.toolCallId, record.toolName, record.arguments)],
552
+ });
553
+ messages.push({
554
+ role: "tool",
555
+ parts: [{ type: "tool_call_response", id: record.toolCallId, response: describeToolCallOutcome(record) }],
556
+ });
557
+ }
558
+ return messages.filter((message) => message.parts.length > 0);
559
+ }
560
+ function firstProducedMessageIndex(newMessages) {
561
+ // newMessages spans the whole turn; this call produced only what follows the last tool result.
562
+ let lastToolResultIndex = -1;
563
+ newMessages.forEach((message, index) => {
564
+ if (message.role === "tool") {
565
+ lastToolResultIndex = index;
566
+ }
567
+ });
568
+ return lastToolResultIndex + 1;
569
+ }
570
+ function chatMessage(message) {
571
+ const parts = [];
572
+ if (message.text) {
573
+ parts.push(textPart(message.text));
574
+ }
575
+ if (message.role === "tool") {
576
+ if (message.toolOutput !== null) {
577
+ parts.push({
578
+ type: "tool_call_response",
579
+ ...(message.toolCallId === null ? {} : { id: message.toolCallId }),
580
+ response: message.toolOutput,
581
+ });
582
+ }
583
+ }
584
+ else if (message.toolName !== null) {
585
+ parts.push(toolCallPart(message.toolCallId, message.toolName, message.toolArguments));
586
+ }
587
+ return { role: message.role, parts };
588
+ }
589
+ function textPart(text) {
590
+ return { type: "text", content: text };
591
+ }
592
+ function toolCallPart(toolCallId, toolName, toolArguments) {
593
+ return {
594
+ type: "tool_call",
595
+ ...(toolCallId === null ? {} : { id: toolCallId }),
596
+ name: toolName,
597
+ ...(toolArguments === null ? {} : { arguments: parseJsonValue(toolArguments) }),
598
+ };
599
+ }
600
+ function parseJsonValue(text) {
601
+ try {
602
+ return JSON.parse(text);
603
+ }
604
+ catch {
605
+ return text;
606
+ }
607
+ }
608
+ //# sourceMappingURL=agent-session-tracer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-session-tracer.js","sourceRoot":"","sources":["../../src/agent-session-tracer.ts"],"names":[],"mappings":"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"}