@strands-agents/sdk 0.3.0 → 0.5.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 (302) hide show
  1. package/README.md +43 -0
  2. package/dist/src/__fixtures__/agent-helpers.d.ts +10 -1
  3. package/dist/src/__fixtures__/agent-helpers.d.ts.map +1 -1
  4. package/dist/src/__fixtures__/agent-helpers.js +13 -2
  5. package/dist/src/__fixtures__/agent-helpers.js.map +1 -1
  6. package/dist/src/__fixtures__/mock-hook-provider.d.ts +3 -7
  7. package/dist/src/__fixtures__/mock-hook-provider.d.ts.map +1 -1
  8. package/dist/src/__fixtures__/mock-hook-provider.js +3 -9
  9. package/dist/src/__fixtures__/mock-hook-provider.js.map +1 -1
  10. package/dist/src/__fixtures__/mock-message-model.d.ts +8 -2
  11. package/dist/src/__fixtures__/mock-message-model.d.ts.map +1 -1
  12. package/dist/src/__fixtures__/mock-message-model.js +1 -0
  13. package/dist/src/__fixtures__/mock-message-model.js.map +1 -1
  14. package/dist/src/__fixtures__/mock-span.d.ts +78 -0
  15. package/dist/src/__fixtures__/mock-span.d.ts.map +1 -0
  16. package/dist/src/__fixtures__/mock-span.js +93 -0
  17. package/dist/src/__fixtures__/mock-span.js.map +1 -0
  18. package/dist/src/__fixtures__/mock-storage-provider.d.ts +37 -0
  19. package/dist/src/__fixtures__/mock-storage-provider.d.ts.map +1 -0
  20. package/dist/src/__fixtures__/mock-storage-provider.js +105 -0
  21. package/dist/src/__fixtures__/mock-storage-provider.js.map +1 -0
  22. package/dist/src/__fixtures__/slim-types.d.ts +50 -0
  23. package/dist/src/__fixtures__/slim-types.d.ts.map +1 -0
  24. package/dist/src/__fixtures__/slim-types.js +6 -0
  25. package/dist/src/__fixtures__/slim-types.js.map +1 -0
  26. package/dist/src/__fixtures__/tool-helpers.d.ts +10 -5
  27. package/dist/src/__fixtures__/tool-helpers.d.ts.map +1 -1
  28. package/dist/src/__fixtures__/tool-helpers.js +5 -5
  29. package/dist/src/__fixtures__/tool-helpers.js.map +1 -1
  30. package/dist/src/__tests__/app-state.test.d.ts +2 -0
  31. package/dist/src/__tests__/app-state.test.d.ts.map +1 -0
  32. package/dist/src/{agent/__tests__/state.test.js → __tests__/app-state.test.js} +62 -43
  33. package/dist/src/__tests__/app-state.test.js.map +1 -0
  34. package/dist/src/__tests__/mcp.test.js +96 -15
  35. package/dist/src/__tests__/mcp.test.js.map +1 -1
  36. package/dist/src/agent/__tests__/agent.hook.test.js +18 -18
  37. package/dist/src/agent/__tests__/agent.hook.test.js.map +1 -1
  38. package/dist/src/agent/__tests__/agent.test.js +234 -8
  39. package/dist/src/agent/__tests__/agent.test.js.map +1 -1
  40. package/dist/src/agent/__tests__/agent.tracer.test.d.ts +2 -0
  41. package/dist/src/agent/__tests__/agent.tracer.test.d.ts.map +1 -0
  42. package/dist/src/agent/__tests__/agent.tracer.test.js +470 -0
  43. package/dist/src/agent/__tests__/agent.tracer.test.js.map +1 -0
  44. package/dist/src/agent/__tests__/printer.test.js +5 -9
  45. package/dist/src/agent/__tests__/printer.test.js.map +1 -1
  46. package/dist/src/agent/__tests__/snapshot.test.d.ts +2 -0
  47. package/dist/src/agent/__tests__/snapshot.test.d.ts.map +1 -0
  48. package/dist/src/agent/__tests__/snapshot.test.js +249 -0
  49. package/dist/src/agent/__tests__/snapshot.test.js.map +1 -0
  50. package/dist/src/agent/agent.d.ts +78 -10
  51. package/dist/src/agent/agent.d.ts.map +1 -1
  52. package/dist/src/agent/agent.js +252 -55
  53. package/dist/src/agent/agent.js.map +1 -1
  54. package/dist/src/agent/printer.d.ts +4 -0
  55. package/dist/src/agent/printer.d.ts.map +1 -1
  56. package/dist/src/agent/printer.js +18 -6
  57. package/dist/src/agent/printer.js.map +1 -1
  58. package/dist/src/agent/snapshot.d.ts +132 -0
  59. package/dist/src/agent/snapshot.d.ts.map +1 -0
  60. package/dist/src/agent/snapshot.js +151 -0
  61. package/dist/src/agent/snapshot.js.map +1 -0
  62. package/dist/src/{agent/state.d.ts → app-state.d.ts} +19 -6
  63. package/dist/src/app-state.d.ts.map +1 -0
  64. package/dist/src/{agent/state.js → app-state.js} +27 -6
  65. package/dist/src/app-state.js.map +1 -0
  66. package/dist/src/conversation-manager/sliding-window-conversation-manager.d.ts +1 -1
  67. package/dist/src/conversation-manager/sliding-window-conversation-manager.js +1 -1
  68. package/dist/src/errors.d.ts +15 -0
  69. package/dist/src/errors.d.ts.map +1 -1
  70. package/dist/src/errors.js +18 -0
  71. package/dist/src/errors.js.map +1 -1
  72. package/dist/src/hooks/__tests__/events.test.js +102 -21
  73. package/dist/src/hooks/__tests__/events.test.js.map +1 -1
  74. package/dist/src/hooks/events.d.ts +156 -22
  75. package/dist/src/hooks/events.d.ts.map +1 -1
  76. package/dist/src/hooks/events.js +158 -18
  77. package/dist/src/hooks/events.js.map +1 -1
  78. package/dist/src/hooks/index.d.ts +12 -4
  79. package/dist/src/hooks/index.d.ts.map +1 -1
  80. package/dist/src/hooks/index.js +11 -3
  81. package/dist/src/hooks/index.js.map +1 -1
  82. package/dist/src/hooks/registry.d.ts +5 -5
  83. package/dist/src/hooks/registry.d.ts.map +1 -1
  84. package/dist/src/hooks/registry.js.map +1 -1
  85. package/dist/src/hooks/types.d.ts +5 -5
  86. package/dist/src/hooks/types.d.ts.map +1 -1
  87. package/dist/src/index.d.ts +6 -3
  88. package/dist/src/index.d.ts.map +1 -1
  89. package/dist/src/index.js +8 -3
  90. package/dist/src/index.js.map +1 -1
  91. package/dist/src/mcp.d.ts +3 -0
  92. package/dist/src/mcp.d.ts.map +1 -1
  93. package/dist/src/mcp.js +38 -1
  94. package/dist/src/mcp.js.map +1 -1
  95. package/dist/src/models/__tests__/anthropic.test.js +31 -42
  96. package/dist/src/models/__tests__/anthropic.test.js.map +1 -1
  97. package/dist/src/models/__tests__/bedrock.test.js +70 -107
  98. package/dist/src/models/__tests__/bedrock.test.js.map +1 -1
  99. package/dist/src/models/__tests__/gemini.test.js +18 -18
  100. package/dist/src/models/__tests__/gemini.test.js.map +1 -1
  101. package/dist/src/models/__tests__/model.test.js +21 -13
  102. package/dist/src/models/__tests__/model.test.js.map +1 -1
  103. package/dist/src/models/__tests__/openai.test.js +73 -83
  104. package/dist/src/models/__tests__/openai.test.js.map +1 -1
  105. package/dist/src/models/model.d.ts +4 -0
  106. package/dist/src/models/model.d.ts.map +1 -1
  107. package/dist/src/models/model.js +6 -0
  108. package/dist/src/models/model.js.map +1 -1
  109. package/dist/src/models/streaming.d.ts +9 -1
  110. package/dist/src/models/streaming.d.ts.map +1 -1
  111. package/dist/src/models/streaming.js +17 -0
  112. package/dist/src/models/streaming.js.map +1 -1
  113. package/dist/src/multiagent/__tests__/events.test.d.ts +2 -0
  114. package/dist/src/multiagent/__tests__/events.test.d.ts.map +1 -0
  115. package/dist/src/multiagent/__tests__/events.test.js +189 -0
  116. package/dist/src/multiagent/__tests__/events.test.js.map +1 -0
  117. package/dist/src/multiagent/__tests__/nodes.test.d.ts +2 -0
  118. package/dist/src/multiagent/__tests__/nodes.test.d.ts.map +1 -0
  119. package/dist/src/multiagent/__tests__/nodes.test.js +194 -0
  120. package/dist/src/multiagent/__tests__/nodes.test.js.map +1 -0
  121. package/dist/src/multiagent/__tests__/queue.test.d.ts +2 -0
  122. package/dist/src/multiagent/__tests__/queue.test.d.ts.map +1 -0
  123. package/dist/src/multiagent/__tests__/queue.test.js +96 -0
  124. package/dist/src/multiagent/__tests__/queue.test.js.map +1 -0
  125. package/dist/src/multiagent/base.d.ts +25 -0
  126. package/dist/src/multiagent/base.d.ts.map +1 -0
  127. package/dist/src/multiagent/base.js +2 -0
  128. package/dist/src/multiagent/base.js.map +1 -0
  129. package/dist/src/multiagent/edge.d.ts +29 -0
  130. package/dist/src/multiagent/edge.d.ts.map +1 -0
  131. package/dist/src/multiagent/edge.js +15 -0
  132. package/dist/src/multiagent/edge.js.map +1 -0
  133. package/dist/src/multiagent/events.d.ts +135 -0
  134. package/dist/src/multiagent/events.d.ts.map +1 -0
  135. package/dist/src/multiagent/events.js +140 -0
  136. package/dist/src/multiagent/events.js.map +1 -0
  137. package/dist/src/multiagent/index.d.ts +13 -0
  138. package/dist/src/multiagent/index.d.ts.map +1 -0
  139. package/dist/src/multiagent/index.js +8 -0
  140. package/dist/src/multiagent/index.js.map +1 -0
  141. package/dist/src/multiagent/nodes.d.ts +123 -0
  142. package/dist/src/multiagent/nodes.d.ts.map +1 -0
  143. package/dist/src/multiagent/nodes.js +148 -0
  144. package/dist/src/multiagent/nodes.js.map +1 -0
  145. package/dist/src/multiagent/queue.d.ts +67 -0
  146. package/dist/src/multiagent/queue.d.ts.map +1 -0
  147. package/dist/src/multiagent/queue.js +59 -0
  148. package/dist/src/multiagent/queue.js.map +1 -0
  149. package/dist/src/multiagent/state.d.ts +122 -0
  150. package/dist/src/multiagent/state.d.ts.map +1 -0
  151. package/dist/src/multiagent/state.js +132 -0
  152. package/dist/src/multiagent/state.js.map +1 -0
  153. package/dist/src/registry/tool-registry.d.ts +2 -1
  154. package/dist/src/registry/tool-registry.d.ts.map +1 -1
  155. package/dist/src/registry/tool-registry.js +4 -2
  156. package/dist/src/registry/tool-registry.js.map +1 -1
  157. package/dist/src/session/__tests__/file-storage.test.node.d.ts +2 -0
  158. package/dist/src/session/__tests__/file-storage.test.node.d.ts.map +1 -0
  159. package/dist/src/session/__tests__/file-storage.test.node.js +218 -0
  160. package/dist/src/session/__tests__/file-storage.test.node.js.map +1 -0
  161. package/dist/src/session/__tests__/s3-storage.test.node.d.ts +2 -0
  162. package/dist/src/session/__tests__/s3-storage.test.node.d.ts.map +1 -0
  163. package/dist/src/session/__tests__/s3-storage.test.node.js +375 -0
  164. package/dist/src/session/__tests__/s3-storage.test.node.js.map +1 -0
  165. package/dist/src/session/__tests__/validation.test.d.ts +2 -0
  166. package/dist/src/session/__tests__/validation.test.d.ts.map +1 -0
  167. package/dist/src/session/__tests__/validation.test.js +20 -0
  168. package/dist/src/session/__tests__/validation.test.js.map +1 -0
  169. package/dist/src/session/file-storage.d.ts +79 -0
  170. package/dist/src/session/file-storage.d.ts.map +1 -0
  171. package/dist/src/session/file-storage.js +144 -0
  172. package/dist/src/session/file-storage.js.map +1 -0
  173. package/dist/src/session/index.d.ts +19 -0
  174. package/dist/src/session/index.d.ts.map +1 -0
  175. package/dist/src/session/index.js +18 -0
  176. package/dist/src/session/index.js.map +1 -0
  177. package/dist/src/session/s3-storage.d.ts +93 -0
  178. package/dist/src/session/s3-storage.d.ts.map +1 -0
  179. package/dist/src/session/s3-storage.js +150 -0
  180. package/dist/src/session/s3-storage.js.map +1 -0
  181. package/dist/src/session/storage.d.ts +91 -0
  182. package/dist/src/session/storage.d.ts.map +1 -0
  183. package/dist/src/session/storage.js +2 -0
  184. package/dist/src/session/storage.js.map +1 -0
  185. package/dist/src/session/types.d.ts +49 -0
  186. package/dist/src/session/types.d.ts.map +1 -0
  187. package/dist/src/session/types.js +2 -0
  188. package/dist/src/session/types.js.map +1 -0
  189. package/dist/src/session/validation.d.ts +10 -0
  190. package/dist/src/session/validation.d.ts.map +1 -0
  191. package/dist/src/session/validation.js +16 -0
  192. package/dist/src/session/validation.js.map +1 -0
  193. package/dist/src/structured-output/__tests__/context.test.d.ts +2 -0
  194. package/dist/src/structured-output/__tests__/context.test.d.ts.map +1 -0
  195. package/dist/src/structured-output/__tests__/context.test.js +201 -0
  196. package/dist/src/structured-output/__tests__/context.test.js.map +1 -0
  197. package/dist/src/structured-output/__tests__/exceptions.test.d.ts +2 -0
  198. package/dist/src/structured-output/__tests__/exceptions.test.d.ts.map +1 -0
  199. package/dist/src/structured-output/__tests__/exceptions.test.js +103 -0
  200. package/dist/src/structured-output/__tests__/exceptions.test.js.map +1 -0
  201. package/dist/src/structured-output/__tests__/tool.test.d.ts +2 -0
  202. package/dist/src/structured-output/__tests__/tool.test.d.ts.map +1 -0
  203. package/dist/src/structured-output/__tests__/tool.test.js +256 -0
  204. package/dist/src/structured-output/__tests__/tool.test.js.map +1 -0
  205. package/dist/src/structured-output/__tests__/utils.test.d.ts +2 -0
  206. package/dist/src/structured-output/__tests__/utils.test.d.ts.map +1 -0
  207. package/dist/src/structured-output/__tests__/utils.test.js +183 -0
  208. package/dist/src/structured-output/__tests__/utils.test.js.map +1 -0
  209. package/dist/src/structured-output/context.d.ts +91 -0
  210. package/dist/src/structured-output/context.d.ts.map +1 -0
  211. package/dist/src/structured-output/context.js +112 -0
  212. package/dist/src/structured-output/context.js.map +1 -0
  213. package/dist/src/structured-output/exceptions.d.ts +18 -0
  214. package/dist/src/structured-output/exceptions.d.ts.map +1 -0
  215. package/dist/src/structured-output/exceptions.js +28 -0
  216. package/dist/src/structured-output/exceptions.js.map +1 -0
  217. package/dist/src/structured-output/tool.d.ts +33 -0
  218. package/dist/src/structured-output/tool.d.ts.map +1 -0
  219. package/dist/src/structured-output/tool.js +73 -0
  220. package/dist/src/structured-output/tool.js.map +1 -0
  221. package/dist/src/structured-output/utils.d.ts +23 -0
  222. package/dist/src/structured-output/utils.d.ts.map +1 -0
  223. package/dist/src/structured-output/utils.js +104 -0
  224. package/dist/src/structured-output/utils.js.map +1 -0
  225. package/dist/src/telemetry/__tests__/config.test.node.d.ts +2 -0
  226. package/dist/src/telemetry/__tests__/config.test.node.d.ts.map +1 -0
  227. package/dist/src/telemetry/__tests__/config.test.node.js +129 -0
  228. package/dist/src/telemetry/__tests__/config.test.node.js.map +1 -0
  229. package/dist/src/telemetry/__tests__/json.test.d.ts +2 -0
  230. package/dist/src/telemetry/__tests__/json.test.d.ts.map +1 -0
  231. package/dist/src/telemetry/__tests__/json.test.js +89 -0
  232. package/dist/src/telemetry/__tests__/json.test.js.map +1 -0
  233. package/dist/src/telemetry/__tests__/tracer.test.node.d.ts +2 -0
  234. package/dist/src/telemetry/__tests__/tracer.test.node.d.ts.map +1 -0
  235. package/dist/src/telemetry/__tests__/tracer.test.node.js +611 -0
  236. package/dist/src/telemetry/__tests__/tracer.test.node.js.map +1 -0
  237. package/dist/src/telemetry/config.d.ts +61 -0
  238. package/dist/src/telemetry/config.d.ts.map +1 -0
  239. package/dist/src/telemetry/config.js +101 -0
  240. package/dist/src/telemetry/config.js.map +1 -0
  241. package/dist/src/telemetry/index.d.ts +34 -0
  242. package/dist/src/telemetry/index.d.ts.map +1 -0
  243. package/dist/src/telemetry/index.js +33 -0
  244. package/dist/src/telemetry/index.js.map +1 -0
  245. package/dist/src/telemetry/json.d.ts +11 -0
  246. package/dist/src/telemetry/json.d.ts.map +1 -0
  247. package/dist/src/telemetry/json.js +25 -0
  248. package/dist/src/telemetry/json.js.map +1 -0
  249. package/dist/src/telemetry/tracer.d.ts +219 -0
  250. package/dist/src/telemetry/tracer.d.ts.map +1 -0
  251. package/dist/src/telemetry/tracer.js +610 -0
  252. package/dist/src/telemetry/tracer.js.map +1 -0
  253. package/dist/src/telemetry/types.d.ts +101 -0
  254. package/dist/src/telemetry/types.d.ts.map +1 -0
  255. package/dist/src/telemetry/types.js +5 -0
  256. package/dist/src/telemetry/types.js.map +1 -0
  257. package/dist/src/tools/tool.d.ts +1 -1
  258. package/dist/src/tools/tool.js +1 -1
  259. package/dist/src/tools/zod-tool.d.ts.map +1 -1
  260. package/dist/src/tools/zod-tool.js +2 -5
  261. package/dist/src/tools/zod-tool.js.map +1 -1
  262. package/dist/src/tsconfig.tsbuildinfo +1 -1
  263. package/dist/src/types/__tests__/media.test.js +216 -1
  264. package/dist/src/types/__tests__/media.test.js.map +1 -1
  265. package/dist/src/types/__tests__/messages.test.js +193 -4
  266. package/dist/src/types/__tests__/messages.test.js.map +1 -1
  267. package/dist/src/types/agent.d.ts +16 -10
  268. package/dist/src/types/agent.d.ts.map +1 -1
  269. package/dist/src/types/agent.js +8 -1
  270. package/dist/src/types/agent.js.map +1 -1
  271. package/dist/src/types/json.d.ts +61 -0
  272. package/dist/src/types/json.d.ts.map +1 -1
  273. package/dist/src/types/json.js +24 -0
  274. package/dist/src/types/json.js.map +1 -1
  275. package/dist/src/types/media.d.ts +84 -4
  276. package/dist/src/types/media.d.ts.map +1 -1
  277. package/dist/src/types/media.js +194 -0
  278. package/dist/src/types/media.js.map +1 -1
  279. package/dist/src/types/messages.d.ts +152 -13
  280. package/dist/src/types/messages.d.ts.map +1 -1
  281. package/dist/src/types/messages.js +235 -8
  282. package/dist/src/types/messages.js.map +1 -1
  283. package/dist/src/types/serializable.d.ts +31 -0
  284. package/dist/src/types/serializable.d.ts.map +1 -0
  285. package/dist/src/types/serializable.js +19 -0
  286. package/dist/src/types/serializable.js.map +1 -0
  287. package/dist/src/utils/zod.d.ts +11 -0
  288. package/dist/src/utils/zod.d.ts.map +1 -0
  289. package/dist/src/utils/zod.js +14 -0
  290. package/dist/src/utils/zod.js.map +1 -0
  291. package/dist/src/vended-tools/bash/__tests__/bash.test.node.js +2 -2
  292. package/dist/src/vended-tools/bash/__tests__/bash.test.node.js.map +1 -1
  293. package/dist/src/vended-tools/file_editor/__tests__/file-editor.test.node.js +4 -4
  294. package/dist/src/vended-tools/file_editor/__tests__/file-editor.test.node.js.map +1 -1
  295. package/dist/src/vended-tools/notebook/__tests__/notebook.test.js +2 -2
  296. package/dist/src/vended-tools/notebook/__tests__/notebook.test.js.map +1 -1
  297. package/package.json +17 -3
  298. package/dist/src/agent/__tests__/state.test.d.ts +0 -2
  299. package/dist/src/agent/__tests__/state.test.d.ts.map +0 -1
  300. package/dist/src/agent/__tests__/state.test.js.map +0 -1
  301. package/dist/src/agent/state.d.ts.map +0 -1
  302. package/dist/src/agent/state.js.map +0 -1
@@ -0,0 +1,610 @@
1
+ /**
2
+ * OpenTelemetry integration.
3
+ *
4
+ * This module provides tracing capabilities using OpenTelemetry,
5
+ * enabling trace data to be sent to OTLP endpoints.
6
+ *
7
+ * Uses a fully stateful approach via OpenTelemetry's context propagation.
8
+ * Parent-child relationships are established automatically through
9
+ * context.active(). Use context.with() to set a span as active before
10
+ * creating child spans.
11
+ *
12
+ * @example
13
+ * ```typescript
14
+ * const tracer = new Tracer()
15
+ * const parentSpan = tracer.startAgentSpan({ ... })
16
+ *
17
+ * // Run code with parentSpan as active context
18
+ * await context.with(trace.setSpan(context.active(), parentSpan), async () => {
19
+ * // Child spans automatically parent to parentSpan
20
+ * const childSpan = tracer.startModelInvokeSpan({ messages })
21
+ * // ...
22
+ * tracer.endModelInvokeSpan(childSpan)
23
+ * })
24
+ *
25
+ * tracer.endAgentSpan(parentSpan)
26
+ * ```
27
+ */
28
+ import { context, SpanStatusCode, SpanKind, trace } from '@opentelemetry/api';
29
+ import { logger } from '../logging/index.js';
30
+ import { jsonReplacer } from './json.js';
31
+ import { getServiceName } from './config.js';
32
+ /**
33
+ * Tracer manages OpenTelemetry spans for agent operations.
34
+ *
35
+ * Uses a fully stateful approach via OpenTelemetry's context propagation.
36
+ * Parent-child relationships are established automatically through context.active().
37
+ *
38
+ * To create nested spans, use context.with() to set the parent span as active:
39
+ * ```typescript
40
+ * const parent = tracer.startAgentSpan({ ... })
41
+ * context.with(trace.setSpan(context.active(), parent), () => {
42
+ * const child = tracer.startModelInvokeSpan({ messages }) // auto-parents to parent
43
+ * })
44
+ * ```
45
+ */
46
+ export class Tracer {
47
+ /**
48
+ * OpenTelemetry tracer instance obtained from the global API.
49
+ */
50
+ _tracer;
51
+ /**
52
+ * Whether to use latest experimental semantic conventions.
53
+ *
54
+ * Enabled via `OTEL_SEMCONV_STABILITY_OPT_IN=gen_ai_latest_experimental`.
55
+ * Changes attribute names (e.g., `gen_ai.system` → `gen_ai.provider.name`) and
56
+ * event formats (single `gen_ai.client.inference.operation.details` event vs
57
+ * separate per-message events). Enable when your observability backend supports
58
+ * newer GenAI conventions.
59
+ *
60
+ * @see https://opentelemetry.io/docs/specs/semconv/gen-ai/
61
+ */
62
+ _useLatestConventions;
63
+ /**
64
+ * Whether to include full tool JSON schemas in span attributes.
65
+ *
66
+ * Enabled via `OTEL_SEMCONV_STABILITY_OPT_IN=gen_ai_tool_definitions`.
67
+ * Useful for debugging tool configuration issues. Disabled by default to
68
+ * reduce span payload size and observability costs.
69
+ *
70
+ * Can be combined with other options:
71
+ * `OTEL_SEMCONV_STABILITY_OPT_IN=gen_ai_latest_experimental,gen_ai_tool_definitions`
72
+ */
73
+ _includeToolDefinitions;
74
+ /**
75
+ * Custom attributes to include on all spans created by this tracer.
76
+ */
77
+ _traceAttributes;
78
+ /** Root span for the current agent invocation. */
79
+ _agentSpan;
80
+ /** Span for the current agent loop cycle, used to parent model and tool spans. */
81
+ _loopSpan;
82
+ /**
83
+ * Initialize the tracer with OpenTelemetry configuration.
84
+ * Reads OTEL_SEMCONV_STABILITY_OPT_IN to determine convention version.
85
+ * Gets tracer from the global API to ensure ground truth - works correctly
86
+ * whether the user or Strands initialized the tracer provider.
87
+ *
88
+ * @param traceAttributes - Optional custom attributes to include on all spans
89
+ */
90
+ constructor(traceAttributes) {
91
+ this._traceAttributes = traceAttributes ?? {};
92
+ // Read semantic convention version from environment
93
+ const optInValues = Tracer._parseSemconvOptIn();
94
+ this._useLatestConventions = optInValues.has('gen_ai_latest_experimental');
95
+ this._includeToolDefinitions = optInValues.has('gen_ai_tool_definitions');
96
+ // Get tracer from global API to ensure ground truth
97
+ this._tracer = trace.getTracer(getServiceName());
98
+ }
99
+ /**
100
+ * Start an agent invocation span.
101
+ * Returns the span which should be ended with endAgentSpan.
102
+ * Parents to the current active span from context.active().
103
+ *
104
+ * @param options - Options for starting the agent span
105
+ */
106
+ startAgentSpan(options) {
107
+ const { messages, agentName, agentId, modelId, tools, traceAttributes, toolsConfig, systemPrompt } = options;
108
+ try {
109
+ const spanName = `invoke_agent ${agentName}`;
110
+ const attributes = this._getCommonAttributes('invoke_agent');
111
+ attributes['gen_ai.agent.name'] = agentName;
112
+ attributes['name'] = spanName;
113
+ if (agentId)
114
+ attributes['gen_ai.agent.id'] = agentId;
115
+ if (modelId)
116
+ attributes['gen_ai.request.model'] = modelId;
117
+ if (tools && tools.length > 0) {
118
+ const toolNames = tools.map((t) => t.name);
119
+ attributes['gen_ai.agent.tools'] = JSON.stringify(toolNames, jsonReplacer);
120
+ }
121
+ if (this._includeToolDefinitions && toolsConfig) {
122
+ attributes['gen_ai.tool.definitions'] = JSON.stringify(toolsConfig, jsonReplacer);
123
+ }
124
+ if (systemPrompt !== undefined) {
125
+ attributes['system_prompt'] = JSON.stringify(systemPrompt, jsonReplacer);
126
+ }
127
+ const mergedAttributes = { ...attributes, ...this._traceAttributes, ...traceAttributes };
128
+ const span = this._startSpan({ name: spanName, attributes: mergedAttributes, spanKind: SpanKind.INTERNAL });
129
+ this._addEventMessages(span, messages);
130
+ this._agentSpan = span;
131
+ return span;
132
+ }
133
+ catch (error) {
134
+ logger.warn(`error=<${error}> | failed to start agent span`);
135
+ return null;
136
+ }
137
+ }
138
+ /**
139
+ * End an agent invocation span.
140
+ *
141
+ * @param span - The span to end, or null if span creation failed
142
+ * @param options - Options for ending the span including response, error, and usage data
143
+ */
144
+ endAgentSpan(span, options = {}) {
145
+ // Clear stale state from any previous invocation
146
+ this._agentSpan = undefined;
147
+ this._loopSpan = undefined;
148
+ if (!span)
149
+ return;
150
+ const { response, error, accumulatedUsage, stopReason } = options;
151
+ try {
152
+ const attributes = {};
153
+ if (accumulatedUsage)
154
+ this._setUsageAttributes(attributes, accumulatedUsage);
155
+ if (response !== undefined)
156
+ this._addResponseEvent(span, response, stopReason);
157
+ this._endSpan(span, attributes, error);
158
+ }
159
+ catch (err) {
160
+ logger.warn(`error=<${err}> | failed to end agent span`);
161
+ }
162
+ }
163
+ /**
164
+ * Start a model invocation span.
165
+ * Parents to the current active span from context.active().
166
+ *
167
+ * @param options - Options for starting the model invocation span
168
+ */
169
+ startModelInvokeSpan(options) {
170
+ const { messages, modelId } = options;
171
+ try {
172
+ const attributes = this._getCommonAttributes('chat');
173
+ if (modelId)
174
+ attributes['gen_ai.request.model'] = modelId;
175
+ const span = this._startSpan({
176
+ name: 'chat',
177
+ attributes,
178
+ spanKind: SpanKind.INTERNAL,
179
+ ...(this._loopSpan && { parentSpan: this._loopSpan }),
180
+ });
181
+ this._addEventMessages(span, messages);
182
+ return span;
183
+ }
184
+ catch (error) {
185
+ logger.warn(`error=<${error}> | failed to start model invoke span`);
186
+ return null;
187
+ }
188
+ }
189
+ /**
190
+ * End a model invocation span.
191
+ *
192
+ * @param span - The span to end, or null if span creation failed
193
+ * @param options - Options for ending the span including usage, metrics, error, and output
194
+ */
195
+ endModelInvokeSpan(span, options = {}) {
196
+ if (!span)
197
+ return;
198
+ const { usage, metrics, error, output, stopReason } = options;
199
+ try {
200
+ if (output !== undefined)
201
+ this._addOutputEvent(span, output, stopReason);
202
+ const attributes = {};
203
+ if (usage) {
204
+ this._setUsageAttributes(attributes, usage);
205
+ if (metrics)
206
+ this._setMetricsAttributes(attributes, metrics);
207
+ }
208
+ this._endSpan(span, attributes, error);
209
+ }
210
+ catch (err) {
211
+ logger.warn(`error=<${err}> | failed to end model invoke span`);
212
+ }
213
+ }
214
+ /**
215
+ * Start a tool call span.
216
+ * Parents to the current active span from context.active().
217
+ *
218
+ * @param options - Options for starting the tool call span
219
+ */
220
+ startToolCallSpan(options) {
221
+ const { tool } = options;
222
+ try {
223
+ const attributes = this._getCommonAttributes('execute_tool');
224
+ attributes['gen_ai.tool.name'] = tool.name;
225
+ attributes['gen_ai.tool.call.id'] = tool.toolUseId;
226
+ const span = this._startSpan({
227
+ name: `execute_tool ${tool.name}`,
228
+ attributes,
229
+ spanKind: SpanKind.INTERNAL,
230
+ ...(this._loopSpan && { parentSpan: this._loopSpan }),
231
+ });
232
+ if (this._useLatestConventions) {
233
+ this._addEvent(span, 'gen_ai.client.inference.operation.details', {
234
+ 'gen_ai.input.messages': JSON.stringify([
235
+ {
236
+ role: 'tool',
237
+ parts: [{ type: 'tool_call', name: tool.name, id: tool.toolUseId, arguments: tool.input }],
238
+ },
239
+ ], jsonReplacer),
240
+ });
241
+ }
242
+ else {
243
+ this._addEvent(span, 'gen_ai.tool.message', {
244
+ role: 'tool',
245
+ content: JSON.stringify(tool.input, jsonReplacer),
246
+ id: tool.toolUseId,
247
+ });
248
+ }
249
+ return span;
250
+ }
251
+ catch (error) {
252
+ logger.warn(`error=<${error}> | failed to start tool call span`);
253
+ return null;
254
+ }
255
+ }
256
+ /**
257
+ * End a tool call span.
258
+ *
259
+ * @param span - The span to end, or null if span creation failed
260
+ * @param options - Options for ending the tool call span
261
+ */
262
+ endToolCallSpan(span, options = {}) {
263
+ if (!span)
264
+ return;
265
+ const { toolResult, error } = options;
266
+ try {
267
+ const attributes = {};
268
+ if (toolResult) {
269
+ const statusStr = typeof toolResult.status === 'string' ? toolResult.status : String(toolResult.status);
270
+ attributes['gen_ai.tool.status'] = statusStr;
271
+ if (this._useLatestConventions) {
272
+ this._addEvent(span, 'gen_ai.client.inference.operation.details', {
273
+ 'gen_ai.output.messages': JSON.stringify([
274
+ {
275
+ role: 'tool',
276
+ parts: [{ type: 'tool_call_response', id: toolResult.toolUseId, response: toolResult.content }],
277
+ },
278
+ ], jsonReplacer),
279
+ });
280
+ }
281
+ else {
282
+ this._addEvent(span, 'gen_ai.choice', {
283
+ message: JSON.stringify(toolResult.content, jsonReplacer),
284
+ id: toolResult.toolUseId,
285
+ });
286
+ }
287
+ }
288
+ this._endSpan(span, attributes, error);
289
+ }
290
+ catch (err) {
291
+ logger.warn(`error=<${err}> | failed to end tool call span`);
292
+ }
293
+ }
294
+ /**
295
+ * Runs a callback with the given span set as the active OpenTelemetry context.
296
+ * Downstream code (e.g., MCP clients) can read the span from context.active()
297
+ * for distributed trace propagation. No-ops if span is null.
298
+ *
299
+ * @param span - The span to set as active, or null if span creation failed
300
+ * @param fn - The callback to run within the span's context
301
+ * @returns The return value of the callback
302
+ */
303
+ withSpanContext(span, fn) {
304
+ if (!span)
305
+ return fn();
306
+ return context.with(trace.setSpan(context.active(), span), fn);
307
+ }
308
+ /**
309
+ * Start an agent loop cycle span.
310
+ * Parents to the current active span from context.active().
311
+ *
312
+ * @param options - Options for starting the agent loop span
313
+ */
314
+ startAgentLoopSpan(options) {
315
+ const { cycleId, messages } = options;
316
+ try {
317
+ const attributes = { 'agent_loop.cycle_id': cycleId };
318
+ const span = this._startSpan({
319
+ name: 'execute_agent_loop_cycle',
320
+ attributes,
321
+ ...(this._agentSpan && { parentSpan: this._agentSpan }),
322
+ });
323
+ this._addEventMessages(span, messages);
324
+ this._loopSpan = span;
325
+ return span;
326
+ }
327
+ catch (error) {
328
+ logger.warn(`error=<${error}> | failed to start agent loop cycle span`);
329
+ return null;
330
+ }
331
+ }
332
+ /**
333
+ * End an agent loop cycle span.
334
+ *
335
+ * @param span - The span to end, or null if span creation failed
336
+ * @param options - Options for ending the agent loop span
337
+ */
338
+ endAgentLoopSpan(span, options = {}) {
339
+ if (!span)
340
+ return;
341
+ try {
342
+ this._endSpan(span, {}, options.error);
343
+ this._loopSpan = undefined;
344
+ }
345
+ catch (err) {
346
+ logger.warn(`error=<${err}> | failed to end agent loop cycle span`);
347
+ }
348
+ }
349
+ /**
350
+ * Create a span parented to the current active context.
351
+ */
352
+ _startSpan(options) {
353
+ const spanOptions = {};
354
+ if (options.attributes) {
355
+ const otelAttributes = {};
356
+ for (const [key, value] of Object.entries(options.attributes)) {
357
+ if (value !== undefined && value !== null)
358
+ otelAttributes[key] = value;
359
+ }
360
+ spanOptions.attributes = otelAttributes;
361
+ }
362
+ if (options.spanKind !== undefined)
363
+ spanOptions.kind = options.spanKind;
364
+ const ctx = options.parentSpan ? trace.setSpan(context.active(), options.parentSpan) : context.active();
365
+ const span = this._tracer.startSpan(options.name, spanOptions, ctx);
366
+ try {
367
+ span.setAttribute('gen_ai.event.start_time', new Date().toISOString());
368
+ }
369
+ catch (err) {
370
+ logger.warn(`error=<${err}> | failed to set start time attribute`);
371
+ }
372
+ return span;
373
+ }
374
+ /**
375
+ * End a span with the given attributes and optional error.
376
+ */
377
+ _endSpan(span, attributes, error) {
378
+ try {
379
+ const endAttributes = { 'gen_ai.event.end_time': new Date().toISOString() };
380
+ if (attributes)
381
+ Object.assign(endAttributes, attributes);
382
+ span.setAttributes(endAttributes);
383
+ if (error) {
384
+ span.setStatus({ code: SpanStatusCode.ERROR, message: error.message });
385
+ span.recordException(error);
386
+ }
387
+ else {
388
+ span.setStatus({ code: SpanStatusCode.OK });
389
+ }
390
+ span.end();
391
+ }
392
+ catch (err) {
393
+ logger.warn(`error=<${err}> | failed to end span`);
394
+ }
395
+ }
396
+ /**
397
+ * Add an event to a span.
398
+ */
399
+ _addEvent(span, eventName, eventAttributes) {
400
+ try {
401
+ if (!eventAttributes) {
402
+ span.addEvent(eventName);
403
+ return;
404
+ }
405
+ const otelAttributes = {};
406
+ for (const [key, value] of Object.entries(eventAttributes)) {
407
+ if (value !== undefined && value !== null)
408
+ otelAttributes[key] = value;
409
+ }
410
+ span.addEvent(eventName, otelAttributes);
411
+ }
412
+ catch (err) {
413
+ logger.warn(`error=<${err}>, event=<${eventName}> | failed to add span event`);
414
+ }
415
+ }
416
+ /**
417
+ * Get common attributes based on semantic convention version.
418
+ * The attribute name changed between OTEL semconv versions:
419
+ * - Stable: 'gen_ai.system'
420
+ * - Latest experimental: 'gen_ai.provider.name'
421
+ */
422
+ _getCommonAttributes(operationName) {
423
+ const attributes = {
424
+ 'gen_ai.operation.name': operationName,
425
+ };
426
+ if (this._useLatestConventions) {
427
+ attributes['gen_ai.provider.name'] = getServiceName();
428
+ }
429
+ else {
430
+ attributes['gen_ai.system'] = getServiceName();
431
+ }
432
+ return attributes;
433
+ }
434
+ /**
435
+ * Add message events to a span.
436
+ * Uses different event formats based on semantic convention version:
437
+ * - Latest: Single 'gen_ai.client.inference.operation.details' event with all messages
438
+ * - Stable: Separate events per message (gen_ai.user.message, gen_ai.assistant.message, etc.)
439
+ */
440
+ _addEventMessages(span, messages) {
441
+ try {
442
+ if (!Array.isArray(messages))
443
+ return;
444
+ if (this._useLatestConventions) {
445
+ const inputMessages = messages.map((m) => ({
446
+ role: m.role,
447
+ parts: Tracer._mapContentBlocksToOtelParts(m.content),
448
+ }));
449
+ this._addEvent(span, 'gen_ai.client.inference.operation.details', {
450
+ 'gen_ai.input.messages': JSON.stringify(inputMessages, jsonReplacer),
451
+ });
452
+ }
453
+ else {
454
+ for (const message of messages) {
455
+ this._addEvent(span, this._getEventNameForMessage(message), {
456
+ content: JSON.stringify(message.content, jsonReplacer),
457
+ });
458
+ }
459
+ }
460
+ }
461
+ catch (err) {
462
+ logger.warn(`error=<${err}> | failed to add message events`);
463
+ }
464
+ }
465
+ /**
466
+ * Get the event name for a message based on its type.
467
+ */
468
+ _getEventNameForMessage(message) {
469
+ if (message.role === 'user' && Array.isArray(message.content)) {
470
+ for (const block of message.content) {
471
+ if (block && typeof block === 'object' && 'type' in block && block.type === 'toolResultBlock') {
472
+ return 'gen_ai.tool.message';
473
+ }
474
+ }
475
+ }
476
+ if (message.role === 'user')
477
+ return 'gen_ai.user.message';
478
+ if (message.role === 'assistant')
479
+ return 'gen_ai.assistant.message';
480
+ return 'gen_ai.message';
481
+ }
482
+ /**
483
+ * Set usage attributes on an attributes object.
484
+ * Sets both legacy (prompt_tokens/completion_tokens) and new (input_tokens/output_tokens)
485
+ * attribute names for compatibility with different OTEL backends.
486
+ */
487
+ _setUsageAttributes(attributes, usage) {
488
+ attributes['gen_ai.usage.prompt_tokens'] = usage.inputTokens;
489
+ attributes['gen_ai.usage.input_tokens'] = usage.inputTokens;
490
+ attributes['gen_ai.usage.completion_tokens'] = usage.outputTokens;
491
+ attributes['gen_ai.usage.output_tokens'] = usage.outputTokens;
492
+ attributes['gen_ai.usage.total_tokens'] = usage.totalTokens;
493
+ if ((usage.cacheReadInputTokens ?? 0) > 0) {
494
+ attributes['gen_ai.usage.cache_read_input_tokens'] = usage.cacheReadInputTokens;
495
+ }
496
+ if ((usage.cacheWriteInputTokens ?? 0) > 0) {
497
+ attributes['gen_ai.usage.cache_write_input_tokens'] = usage.cacheWriteInputTokens;
498
+ }
499
+ }
500
+ /**
501
+ * Set metrics attributes on an attributes object.
502
+ */
503
+ _setMetricsAttributes(attributes, metrics) {
504
+ if (metrics.latencyMs !== undefined && metrics.latencyMs > 0) {
505
+ attributes['gen_ai.server.request.duration'] = metrics.latencyMs;
506
+ }
507
+ }
508
+ /**
509
+ * Add response event to a span.
510
+ */
511
+ _addResponseEvent(span, response, stopReason) {
512
+ try {
513
+ const finishReason = stopReason || 'end_turn';
514
+ const textParts = [];
515
+ for (const block of response.content) {
516
+ if (block.type === 'textBlock') {
517
+ textParts.push(block.text);
518
+ }
519
+ }
520
+ const messageText = textParts.join('\n');
521
+ if (this._useLatestConventions) {
522
+ this._addEvent(span, 'gen_ai.client.inference.operation.details', {
523
+ 'gen_ai.output.messages': JSON.stringify([{ role: 'assistant', parts: [{ type: 'text', content: messageText }], finish_reason: finishReason }], jsonReplacer),
524
+ });
525
+ }
526
+ else {
527
+ this._addEvent(span, 'gen_ai.choice', { message: messageText, finish_reason: finishReason });
528
+ }
529
+ }
530
+ catch (err) {
531
+ logger.warn(`error=<${err}> | failed to add response event`);
532
+ }
533
+ }
534
+ /**
535
+ * Add output event to a span for model invocation.
536
+ */
537
+ _addOutputEvent(span, message, stopReason) {
538
+ const finishReason = stopReason || 'unknown';
539
+ if (this._useLatestConventions) {
540
+ this._addEvent(span, 'gen_ai.client.inference.operation.details', {
541
+ 'gen_ai.output.messages': JSON.stringify([
542
+ {
543
+ role: message.role,
544
+ parts: Tracer._mapContentBlocksToOtelParts(message.content),
545
+ finish_reason: finishReason,
546
+ },
547
+ ], jsonReplacer),
548
+ });
549
+ }
550
+ else {
551
+ this._addEvent(span, 'gen_ai.choice', {
552
+ finish_reason: finishReason,
553
+ message: JSON.stringify(Tracer._mapContentBlocksToStableFormat(message.content), jsonReplacer),
554
+ });
555
+ }
556
+ }
557
+ /**
558
+ * Parse the OTEL_SEMCONV_STABILITY_OPT_IN environment variable.
559
+ */
560
+ static _parseSemconvOptIn() {
561
+ const optInEnv = globalThis?.process?.env?.OTEL_SEMCONV_STABILITY_OPT_IN ?? '';
562
+ return new Set(optInEnv
563
+ .split(',')
564
+ .map((value) => value.trim())
565
+ .filter((value) => value.length > 0));
566
+ }
567
+ /**
568
+ * Map content blocks to OTEL parts format (latest conventions).
569
+ * Converts SDK content block types to OTEL semantic convention format.
570
+ */
571
+ static _mapContentBlocksToOtelParts(contentBlocks) {
572
+ if (!Array.isArray(contentBlocks))
573
+ return [];
574
+ return contentBlocks.map((block) => {
575
+ switch (block.type) {
576
+ case 'textBlock':
577
+ return { type: 'text', content: block.text };
578
+ case 'toolUseBlock':
579
+ return { type: 'tool_call', name: block.name, id: block.toolUseId, arguments: block.input };
580
+ case 'toolResultBlock':
581
+ return { type: 'tool_call_response', id: block.toolUseId, response: block.content };
582
+ default:
583
+ return block;
584
+ }
585
+ });
586
+ }
587
+ /**
588
+ * Map content blocks to stable format (older conventions).
589
+ * Simplifies content blocks to a minimal structure for legacy OTEL backends.
590
+ */
591
+ static _mapContentBlocksToStableFormat(contentBlocks) {
592
+ if (!Array.isArray(contentBlocks))
593
+ return [];
594
+ return contentBlocks
595
+ .map((block) => {
596
+ switch (block.type) {
597
+ case 'textBlock':
598
+ return { text: block.text };
599
+ case 'toolUseBlock':
600
+ return { type: 'toolUse', name: block.name, toolUseId: block.toolUseId, input: block.input };
601
+ case 'toolResultBlock':
602
+ return { type: 'toolResult', toolUseId: block.toolUseId, content: block.content };
603
+ default:
604
+ return null;
605
+ }
606
+ })
607
+ .filter(Boolean);
608
+ }
609
+ }
610
+ //# sourceMappingURL=tracer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tracer.js","sourceRoot":"","sources":["../../../src/telemetry/tracer.ts"],"names":[],"mappings":"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"}