shield360 1.0.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 (520) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +310 -0
  3. package/dist/__tests__/manual-trace.test.d.ts +1 -0
  4. package/dist/__tests__/manual-trace.test.js +118 -0
  5. package/dist/__tests__/manual-trace.test.js.map +1 -0
  6. package/dist/__tests__/register.test.d.ts +0 -0
  7. package/dist/__tests__/register.test.js +90 -0
  8. package/dist/__tests__/register.test.js.map +1 -0
  9. package/dist/config.d.ts +28 -0
  10. package/dist/config.js +22 -0
  11. package/dist/config.js.map +1 -0
  12. package/dist/constant.d.ts +6 -0
  13. package/dist/constant.js +14 -0
  14. package/dist/constant.js.map +1 -0
  15. package/dist/evals/__tests__/offline.test.d.ts +1 -0
  16. package/dist/evals/__tests__/offline.test.js +427 -0
  17. package/dist/evals/__tests__/offline.test.js.map +1 -0
  18. package/dist/evals/index.d.ts +2 -0
  19. package/dist/evals/index.js +15 -0
  20. package/dist/evals/index.js.map +1 -0
  21. package/dist/evals/offline.d.ts +6 -0
  22. package/dist/evals/offline.js +350 -0
  23. package/dist/evals/offline.js.map +1 -0
  24. package/dist/evals/types.d.ts +74 -0
  25. package/dist/evals/types.js +23 -0
  26. package/dist/evals/types.js.map +1 -0
  27. package/dist/features/__tests__/rule-engine.test.d.ts +1 -0
  28. package/dist/features/__tests__/rule-engine.test.js +146 -0
  29. package/dist/features/__tests__/rule-engine.test.js.map +1 -0
  30. package/dist/features/base.d.ts +8 -0
  31. package/dist/features/base.js +15 -0
  32. package/dist/features/base.js.map +1 -0
  33. package/dist/features/prompt-hub.d.ts +4 -0
  34. package/dist/features/prompt-hub.js +66 -0
  35. package/dist/features/prompt-hub.js.map +1 -0
  36. package/dist/features/rule-engine.d.ts +6 -0
  37. package/dist/features/rule-engine.js +60 -0
  38. package/dist/features/rule-engine.js.map +1 -0
  39. package/dist/features/vault.d.ts +4 -0
  40. package/dist/features/vault.js +63 -0
  41. package/dist/features/vault.js.map +1 -0
  42. package/dist/guard/__tests__/findings.test.d.ts +1 -0
  43. package/dist/guard/__tests__/findings.test.js +79 -0
  44. package/dist/guard/__tests__/findings.test.js.map +1 -0
  45. package/dist/guard/__tests__/integration.test.d.ts +1 -0
  46. package/dist/guard/__tests__/integration.test.js +215 -0
  47. package/dist/guard/__tests__/integration.test.js.map +1 -0
  48. package/dist/guard/__tests__/pii.test.d.ts +1 -0
  49. package/dist/guard/__tests__/pii.test.js +131 -0
  50. package/dist/guard/__tests__/pii.test.js.map +1 -0
  51. package/dist/guard/__tests__/pipeline.test.d.ts +1 -0
  52. package/dist/guard/__tests__/pipeline.test.js +162 -0
  53. package/dist/guard/__tests__/pipeline.test.js.map +1 -0
  54. package/dist/guard/__tests__/prompt-injection.test.d.ts +1 -0
  55. package/dist/guard/__tests__/prompt-injection.test.js +92 -0
  56. package/dist/guard/__tests__/prompt-injection.test.js.map +1 -0
  57. package/dist/guard/__tests__/report.test.d.ts +1 -0
  58. package/dist/guard/__tests__/report.test.js +50 -0
  59. package/dist/guard/__tests__/report.test.js.map +1 -0
  60. package/dist/guard/base.d.ts +79 -0
  61. package/dist/guard/base.js +136 -0
  62. package/dist/guard/base.js.map +1 -0
  63. package/dist/guard/custom.d.ts +19 -0
  64. package/dist/guard/custom.js +46 -0
  65. package/dist/guard/custom.js.map +1 -0
  66. package/dist/guard/findings.d.ts +31 -0
  67. package/dist/guard/findings.js +156 -0
  68. package/dist/guard/findings.js.map +1 -0
  69. package/dist/guard/index.d.ts +24 -0
  70. package/dist/guard/index.js +42 -0
  71. package/dist/guard/index.js.map +1 -0
  72. package/dist/guard/integration.d.ts +44 -0
  73. package/dist/guard/integration.js +363 -0
  74. package/dist/guard/integration.js.map +1 -0
  75. package/dist/guard/moderation.d.ts +18 -0
  76. package/dist/guard/moderation.js +61 -0
  77. package/dist/guard/moderation.js.map +1 -0
  78. package/dist/guard/pii.d.ts +17 -0
  79. package/dist/guard/pii.js +114 -0
  80. package/dist/guard/pii.js.map +1 -0
  81. package/dist/guard/pipeline.d.ts +26 -0
  82. package/dist/guard/pipeline.js +139 -0
  83. package/dist/guard/pipeline.js.map +1 -0
  84. package/dist/guard/prompt-injection.d.ts +21 -0
  85. package/dist/guard/prompt-injection.js +70 -0
  86. package/dist/guard/prompt-injection.js.map +1 -0
  87. package/dist/guard/report.d.ts +34 -0
  88. package/dist/guard/report.js +182 -0
  89. package/dist/guard/report.js.map +1 -0
  90. package/dist/guard/schema.d.ts +20 -0
  91. package/dist/guard/schema.js +99 -0
  92. package/dist/guard/schema.js.map +1 -0
  93. package/dist/guard/sensitive-topic.d.ts +23 -0
  94. package/dist/guard/sensitive-topic.js +89 -0
  95. package/dist/guard/sensitive-topic.js.map +1 -0
  96. package/dist/guard/topic-restriction.d.ts +22 -0
  97. package/dist/guard/topic-restriction.js +54 -0
  98. package/dist/guard/topic-restriction.js.map +1 -0
  99. package/dist/helpers.d.ts +246 -0
  100. package/dist/helpers.js +903 -0
  101. package/dist/helpers.js.map +1 -0
  102. package/dist/index.d.ts +71 -0
  103. package/dist/index.js +234 -0
  104. package/dist/index.js.map +1 -0
  105. package/dist/instrumentation/__tests__/ai21-rag-trace-comparison.test.d.ts +13 -0
  106. package/dist/instrumentation/__tests__/ai21-rag-trace-comparison.test.js +176 -0
  107. package/dist/instrumentation/__tests__/ai21-rag-trace-comparison.test.js.map +1 -0
  108. package/dist/instrumentation/__tests__/ai21-trace-comparison.test.d.ts +10 -0
  109. package/dist/instrumentation/__tests__/ai21-trace-comparison.test.js +203 -0
  110. package/dist/instrumentation/__tests__/ai21-trace-comparison.test.js.map +1 -0
  111. package/dist/instrumentation/__tests__/anthropic-wrapper.test.d.ts +1 -0
  112. package/dist/instrumentation/__tests__/anthropic-wrapper.test.js +284 -0
  113. package/dist/instrumentation/__tests__/anthropic-wrapper.test.js.map +1 -0
  114. package/dist/instrumentation/__tests__/assemblyai-wrapper.test.d.ts +1 -0
  115. package/dist/instrumentation/__tests__/assemblyai-wrapper.test.js +284 -0
  116. package/dist/instrumentation/__tests__/assemblyai-wrapper.test.js.map +1 -0
  117. package/dist/instrumentation/__tests__/astra-trace-comparison.test.d.ts +7 -0
  118. package/dist/instrumentation/__tests__/astra-trace-comparison.test.js +160 -0
  119. package/dist/instrumentation/__tests__/astra-trace-comparison.test.js.map +1 -0
  120. package/dist/instrumentation/__tests__/base-wrapper.test.d.ts +1 -0
  121. package/dist/instrumentation/__tests__/base-wrapper.test.js +171 -0
  122. package/dist/instrumentation/__tests__/base-wrapper.test.js.map +1 -0
  123. package/dist/instrumentation/__tests__/bedrock-trace-comparison.test.d.ts +1 -0
  124. package/dist/instrumentation/__tests__/bedrock-trace-comparison.test.js +422 -0
  125. package/dist/instrumentation/__tests__/bedrock-trace-comparison.test.js.map +1 -0
  126. package/dist/instrumentation/__tests__/browser-use-wrapper.test.d.ts +1 -0
  127. package/dist/instrumentation/__tests__/browser-use-wrapper.test.js +284 -0
  128. package/dist/instrumentation/__tests__/browser-use-wrapper.test.js.map +1 -0
  129. package/dist/instrumentation/__tests__/cache-pricing.test.d.ts +15 -0
  130. package/dist/instrumentation/__tests__/cache-pricing.test.js +155 -0
  131. package/dist/instrumentation/__tests__/cache-pricing.test.js.map +1 -0
  132. package/dist/instrumentation/__tests__/chroma-trace-comparison.test.d.ts +18 -0
  133. package/dist/instrumentation/__tests__/chroma-trace-comparison.test.js +209 -0
  134. package/dist/instrumentation/__tests__/chroma-trace-comparison.test.js.map +1 -0
  135. package/dist/instrumentation/__tests__/cohere-wrapper.test.d.ts +1 -0
  136. package/dist/instrumentation/__tests__/cohere-wrapper.test.js +256 -0
  137. package/dist/instrumentation/__tests__/cohere-wrapper.test.js.map +1 -0
  138. package/dist/instrumentation/__tests__/elevenlabs-wrapper.test.d.ts +1 -0
  139. package/dist/instrumentation/__tests__/elevenlabs-wrapper.test.js +282 -0
  140. package/dist/instrumentation/__tests__/elevenlabs-wrapper.test.js.map +1 -0
  141. package/dist/instrumentation/__tests__/firecrawl-wrapper.test.d.ts +1 -0
  142. package/dist/instrumentation/__tests__/firecrawl-wrapper.test.js +238 -0
  143. package/dist/instrumentation/__tests__/firecrawl-wrapper.test.js.map +1 -0
  144. package/dist/instrumentation/__tests__/google-ai-trace-comparison.test.d.ts +4 -0
  145. package/dist/instrumentation/__tests__/google-ai-trace-comparison.test.js +229 -0
  146. package/dist/instrumentation/__tests__/google-ai-trace-comparison.test.js.map +1 -0
  147. package/dist/instrumentation/__tests__/gpu-collector.test.d.ts +1 -0
  148. package/dist/instrumentation/__tests__/gpu-collector.test.js +247 -0
  149. package/dist/instrumentation/__tests__/gpu-collector.test.js.map +1 -0
  150. package/dist/instrumentation/__tests__/gradient-trace-comparison.test.d.ts +11 -0
  151. package/dist/instrumentation/__tests__/gradient-trace-comparison.test.js +391 -0
  152. package/dist/instrumentation/__tests__/gradient-trace-comparison.test.js.map +1 -0
  153. package/dist/instrumentation/__tests__/groq-trace-comparison.test.d.ts +7 -0
  154. package/dist/instrumentation/__tests__/groq-trace-comparison.test.js +687 -0
  155. package/dist/instrumentation/__tests__/groq-trace-comparison.test.js.map +1 -0
  156. package/dist/instrumentation/__tests__/helpers-genai.test.d.ts +14 -0
  157. package/dist/instrumentation/__tests__/helpers-genai.test.js +347 -0
  158. package/dist/instrumentation/__tests__/helpers-genai.test.js.map +1 -0
  159. package/dist/instrumentation/__tests__/huggingface-trace-comparison.test.d.ts +7 -0
  160. package/dist/instrumentation/__tests__/huggingface-trace-comparison.test.js +529 -0
  161. package/dist/instrumentation/__tests__/huggingface-trace-comparison.test.js.map +1 -0
  162. package/dist/instrumentation/__tests__/langchain-role-map.test.d.ts +1 -0
  163. package/dist/instrumentation/__tests__/langchain-role-map.test.js +19 -0
  164. package/dist/instrumentation/__tests__/langchain-role-map.test.js.map +1 -0
  165. package/dist/instrumentation/__tests__/langchain-wrapper.test.d.ts +1 -0
  166. package/dist/instrumentation/__tests__/langchain-wrapper.test.js +282 -0
  167. package/dist/instrumentation/__tests__/langchain-wrapper.test.js.map +1 -0
  168. package/dist/instrumentation/__tests__/letta-wrapper.test.d.ts +1 -0
  169. package/dist/instrumentation/__tests__/letta-wrapper.test.js +285 -0
  170. package/dist/instrumentation/__tests__/letta-wrapper.test.js.map +1 -0
  171. package/dist/instrumentation/__tests__/mem0-trace-comparison.test.d.ts +13 -0
  172. package/dist/instrumentation/__tests__/mem0-trace-comparison.test.js +208 -0
  173. package/dist/instrumentation/__tests__/mem0-trace-comparison.test.js.map +1 -0
  174. package/dist/instrumentation/__tests__/milvus-trace-comparison.test.d.ts +17 -0
  175. package/dist/instrumentation/__tests__/milvus-trace-comparison.test.js +206 -0
  176. package/dist/instrumentation/__tests__/milvus-trace-comparison.test.js.map +1 -0
  177. package/dist/instrumentation/__tests__/mistral-trace-comparison.test.d.ts +1 -0
  178. package/dist/instrumentation/__tests__/mistral-trace-comparison.test.js +345 -0
  179. package/dist/instrumentation/__tests__/mistral-trace-comparison.test.js.map +1 -0
  180. package/dist/instrumentation/__tests__/openai-wrapper.test.d.ts +1 -0
  181. package/dist/instrumentation/__tests__/openai-wrapper.test.js +179 -0
  182. package/dist/instrumentation/__tests__/openai-wrapper.test.js.map +1 -0
  183. package/dist/instrumentation/__tests__/pg-trace-comparison.test.d.ts +21 -0
  184. package/dist/instrumentation/__tests__/pg-trace-comparison.test.js +455 -0
  185. package/dist/instrumentation/__tests__/pg-trace-comparison.test.js.map +1 -0
  186. package/dist/instrumentation/__tests__/qdrant-trace-comparison.test.d.ts +17 -0
  187. package/dist/instrumentation/__tests__/qdrant-trace-comparison.test.js +182 -0
  188. package/dist/instrumentation/__tests__/qdrant-trace-comparison.test.js.map +1 -0
  189. package/dist/instrumentation/__tests__/replicate-trace-comparison.test.d.ts +8 -0
  190. package/dist/instrumentation/__tests__/replicate-trace-comparison.test.js +346 -0
  191. package/dist/instrumentation/__tests__/replicate-trace-comparison.test.js.map +1 -0
  192. package/dist/instrumentation/__tests__/together-trace-comparison.test.d.ts +4 -0
  193. package/dist/instrumentation/__tests__/together-trace-comparison.test.js +289 -0
  194. package/dist/instrumentation/__tests__/together-trace-comparison.test.js.map +1 -0
  195. package/dist/instrumentation/__tests__/trace-comparison-utils.d.ts +67 -0
  196. package/dist/instrumentation/__tests__/trace-comparison-utils.js +255 -0
  197. package/dist/instrumentation/__tests__/trace-comparison-utils.js.map +1 -0
  198. package/dist/instrumentation/__tests__/transformers-trace-comparison.test.d.ts +11 -0
  199. package/dist/instrumentation/__tests__/transformers-trace-comparison.test.js +214 -0
  200. package/dist/instrumentation/__tests__/transformers-trace-comparison.test.js.map +1 -0
  201. package/dist/instrumentation/__tests__/vercel-ai-trace-comparison.test.d.ts +8 -0
  202. package/dist/instrumentation/__tests__/vercel-ai-trace-comparison.test.js +446 -0
  203. package/dist/instrumentation/__tests__/vercel-ai-trace-comparison.test.js.map +1 -0
  204. package/dist/instrumentation/__tests__/vertexai-trace-comparison.test.d.ts +6 -0
  205. package/dist/instrumentation/__tests__/vertexai-trace-comparison.test.js +409 -0
  206. package/dist/instrumentation/__tests__/vertexai-trace-comparison.test.js.map +1 -0
  207. package/dist/instrumentation/__tests__/vllm-trace-comparison.test.d.ts +1 -0
  208. package/dist/instrumentation/__tests__/vllm-trace-comparison.test.js +519 -0
  209. package/dist/instrumentation/__tests__/vllm-trace-comparison.test.js.map +1 -0
  210. package/dist/instrumentation/ai21/index.d.ts +11 -0
  211. package/dist/instrumentation/ai21/index.js +67 -0
  212. package/dist/instrumentation/ai21/index.js.map +1 -0
  213. package/dist/instrumentation/ai21/wrapper.d.ts +54 -0
  214. package/dist/instrumentation/ai21/wrapper.js +511 -0
  215. package/dist/instrumentation/ai21/wrapper.js.map +1 -0
  216. package/dist/instrumentation/anthropic/index.d.ts +11 -0
  217. package/dist/instrumentation/anthropic/index.js +45 -0
  218. package/dist/instrumentation/anthropic/index.js.map +1 -0
  219. package/dist/instrumentation/anthropic/wrapper.d.ts +34 -0
  220. package/dist/instrumentation/anthropic/wrapper.js +426 -0
  221. package/dist/instrumentation/anthropic/wrapper.js.map +1 -0
  222. package/dist/instrumentation/assemblyai/index.d.ts +12 -0
  223. package/dist/instrumentation/assemblyai/index.js +91 -0
  224. package/dist/instrumentation/assemblyai/index.js.map +1 -0
  225. package/dist/instrumentation/assemblyai/wrapper.d.ts +35 -0
  226. package/dist/instrumentation/assemblyai/wrapper.js +238 -0
  227. package/dist/instrumentation/assemblyai/wrapper.js.map +1 -0
  228. package/dist/instrumentation/astra/index.d.ts +11 -0
  229. package/dist/instrumentation/astra/index.js +87 -0
  230. package/dist/instrumentation/astra/index.js.map +1 -0
  231. package/dist/instrumentation/astra/wrapper.d.ts +39 -0
  232. package/dist/instrumentation/astra/wrapper.js +349 -0
  233. package/dist/instrumentation/astra/wrapper.js.map +1 -0
  234. package/dist/instrumentation/azure-ai-inference/index.d.ts +11 -0
  235. package/dist/instrumentation/azure-ai-inference/index.js +76 -0
  236. package/dist/instrumentation/azure-ai-inference/index.js.map +1 -0
  237. package/dist/instrumentation/azure-ai-inference/wrapper.d.ts +55 -0
  238. package/dist/instrumentation/azure-ai-inference/wrapper.js +580 -0
  239. package/dist/instrumentation/azure-ai-inference/wrapper.js.map +1 -0
  240. package/dist/instrumentation/base-wrapper.d.ts +16 -0
  241. package/dist/instrumentation/base-wrapper.js +139 -0
  242. package/dist/instrumentation/base-wrapper.js.map +1 -0
  243. package/dist/instrumentation/bedrock/index.d.ts +11 -0
  244. package/dist/instrumentation/bedrock/index.js +52 -0
  245. package/dist/instrumentation/bedrock/index.js.map +1 -0
  246. package/dist/instrumentation/bedrock/wrapper.d.ts +41 -0
  247. package/dist/instrumentation/bedrock/wrapper.js +494 -0
  248. package/dist/instrumentation/bedrock/wrapper.js.map +1 -0
  249. package/dist/instrumentation/browser-use/index.d.ts +11 -0
  250. package/dist/instrumentation/browser-use/index.js +98 -0
  251. package/dist/instrumentation/browser-use/index.js.map +1 -0
  252. package/dist/instrumentation/browser-use/wrapper.d.ts +12 -0
  253. package/dist/instrumentation/browser-use/wrapper.js +706 -0
  254. package/dist/instrumentation/browser-use/wrapper.js.map +1 -0
  255. package/dist/instrumentation/chroma/index.d.ts +11 -0
  256. package/dist/instrumentation/chroma/index.js +70 -0
  257. package/dist/instrumentation/chroma/index.js.map +1 -0
  258. package/dist/instrumentation/chroma/wrapper.d.ts +10 -0
  259. package/dist/instrumentation/chroma/wrapper.js +127 -0
  260. package/dist/instrumentation/chroma/wrapper.js.map +1 -0
  261. package/dist/instrumentation/claude-agent-sdk/index.d.ts +23 -0
  262. package/dist/instrumentation/claude-agent-sdk/index.js +83 -0
  263. package/dist/instrumentation/claude-agent-sdk/index.js.map +1 -0
  264. package/dist/instrumentation/claude-agent-sdk/wrapper.d.ts +13 -0
  265. package/dist/instrumentation/claude-agent-sdk/wrapper.js +1123 -0
  266. package/dist/instrumentation/claude-agent-sdk/wrapper.js.map +1 -0
  267. package/dist/instrumentation/cohere/index.d.ts +11 -0
  268. package/dist/instrumentation/cohere/index.js +53 -0
  269. package/dist/instrumentation/cohere/index.js.map +1 -0
  270. package/dist/instrumentation/cohere/wrapper.d.ts +50 -0
  271. package/dist/instrumentation/cohere/wrapper.js +452 -0
  272. package/dist/instrumentation/cohere/wrapper.js.map +1 -0
  273. package/dist/instrumentation/cursor-sdk/index.d.ts +21 -0
  274. package/dist/instrumentation/cursor-sdk/index.js +58 -0
  275. package/dist/instrumentation/cursor-sdk/index.js.map +1 -0
  276. package/dist/instrumentation/cursor-sdk/wrapper.d.ts +17 -0
  277. package/dist/instrumentation/cursor-sdk/wrapper.js +789 -0
  278. package/dist/instrumentation/cursor-sdk/wrapper.js.map +1 -0
  279. package/dist/instrumentation/elevenlabs/index.d.ts +12 -0
  280. package/dist/instrumentation/elevenlabs/index.js +92 -0
  281. package/dist/instrumentation/elevenlabs/index.js.map +1 -0
  282. package/dist/instrumentation/elevenlabs/wrapper.d.ts +34 -0
  283. package/dist/instrumentation/elevenlabs/wrapper.js +280 -0
  284. package/dist/instrumentation/elevenlabs/wrapper.js.map +1 -0
  285. package/dist/instrumentation/firecrawl/index.d.ts +13 -0
  286. package/dist/instrumentation/firecrawl/index.js +115 -0
  287. package/dist/instrumentation/firecrawl/index.js.map +1 -0
  288. package/dist/instrumentation/firecrawl/wrapper.d.ts +22 -0
  289. package/dist/instrumentation/firecrawl/wrapper.js +378 -0
  290. package/dist/instrumentation/firecrawl/wrapper.js.map +1 -0
  291. package/dist/instrumentation/google-adk/index.d.ts +57 -0
  292. package/dist/instrumentation/google-adk/index.js +371 -0
  293. package/dist/instrumentation/google-adk/index.js.map +1 -0
  294. package/dist/instrumentation/google-adk/utils.d.ts +45 -0
  295. package/dist/instrumentation/google-adk/utils.js +663 -0
  296. package/dist/instrumentation/google-adk/utils.js.map +1 -0
  297. package/dist/instrumentation/google-adk/wrapper.d.ts +11 -0
  298. package/dist/instrumentation/google-adk/wrapper.js +391 -0
  299. package/dist/instrumentation/google-adk/wrapper.js.map +1 -0
  300. package/dist/instrumentation/google-ai/index.d.ts +11 -0
  301. package/dist/instrumentation/google-ai/index.js +48 -0
  302. package/dist/instrumentation/google-ai/index.js.map +1 -0
  303. package/dist/instrumentation/google-ai/wrapper.d.ts +52 -0
  304. package/dist/instrumentation/google-ai/wrapper.js +466 -0
  305. package/dist/instrumentation/google-ai/wrapper.js.map +1 -0
  306. package/dist/instrumentation/gpu/index.d.ts +38 -0
  307. package/dist/instrumentation/gpu/index.js +233 -0
  308. package/dist/instrumentation/gpu/index.js.map +1 -0
  309. package/dist/instrumentation/gradient/index.d.ts +12 -0
  310. package/dist/instrumentation/gradient/index.js +74 -0
  311. package/dist/instrumentation/gradient/index.js.map +1 -0
  312. package/dist/instrumentation/gradient/utils.d.ts +14 -0
  313. package/dist/instrumentation/gradient/utils.js +119 -0
  314. package/dist/instrumentation/gradient/utils.js.map +1 -0
  315. package/dist/instrumentation/gradient/wrapper.d.ts +76 -0
  316. package/dist/instrumentation/gradient/wrapper.js +584 -0
  317. package/dist/instrumentation/gradient/wrapper.js.map +1 -0
  318. package/dist/instrumentation/groq/index.d.ts +11 -0
  319. package/dist/instrumentation/groq/index.js +43 -0
  320. package/dist/instrumentation/groq/index.js.map +1 -0
  321. package/dist/instrumentation/groq/wrapper.d.ts +35 -0
  322. package/dist/instrumentation/groq/wrapper.js +442 -0
  323. package/dist/instrumentation/groq/wrapper.js.map +1 -0
  324. package/dist/instrumentation/huggingface/index.d.ts +13 -0
  325. package/dist/instrumentation/huggingface/index.js +110 -0
  326. package/dist/instrumentation/huggingface/index.js.map +1 -0
  327. package/dist/instrumentation/huggingface/wrapper.d.ts +54 -0
  328. package/dist/instrumentation/huggingface/wrapper.js +514 -0
  329. package/dist/instrumentation/huggingface/wrapper.js.map +1 -0
  330. package/dist/instrumentation/index.d.ts +7 -0
  331. package/dist/instrumentation/index.js +176 -0
  332. package/dist/instrumentation/index.js.map +1 -0
  333. package/dist/instrumentation/langchain/index.d.ts +16 -0
  334. package/dist/instrumentation/langchain/index.js +91 -0
  335. package/dist/instrumentation/langchain/index.js.map +1 -0
  336. package/dist/instrumentation/langchain/wrapper.d.ts +41 -0
  337. package/dist/instrumentation/langchain/wrapper.js +1235 -0
  338. package/dist/instrumentation/langchain/wrapper.js.map +1 -0
  339. package/dist/instrumentation/langgraph/index.d.ts +12 -0
  340. package/dist/instrumentation/langgraph/index.js +99 -0
  341. package/dist/instrumentation/langgraph/index.js.map +1 -0
  342. package/dist/instrumentation/langgraph/wrapper.d.ts +20 -0
  343. package/dist/instrumentation/langgraph/wrapper.js +620 -0
  344. package/dist/instrumentation/langgraph/wrapper.js.map +1 -0
  345. package/dist/instrumentation/letta/index.d.ts +10 -0
  346. package/dist/instrumentation/letta/index.js +122 -0
  347. package/dist/instrumentation/letta/index.js.map +1 -0
  348. package/dist/instrumentation/letta/utils.d.ts +24 -0
  349. package/dist/instrumentation/letta/utils.js +343 -0
  350. package/dist/instrumentation/letta/utils.js.map +1 -0
  351. package/dist/instrumentation/letta/wrapper.d.ts +37 -0
  352. package/dist/instrumentation/letta/wrapper.js +180 -0
  353. package/dist/instrumentation/letta/wrapper.js.map +1 -0
  354. package/dist/instrumentation/llamaindex/index.d.ts +36 -0
  355. package/dist/instrumentation/llamaindex/index.js +221 -0
  356. package/dist/instrumentation/llamaindex/index.js.map +1 -0
  357. package/dist/instrumentation/llamaindex/wrapper.d.ts +36 -0
  358. package/dist/instrumentation/llamaindex/wrapper.js +811 -0
  359. package/dist/instrumentation/llamaindex/wrapper.js.map +1 -0
  360. package/dist/instrumentation/mcp/index.d.ts +20 -0
  361. package/dist/instrumentation/mcp/index.js +282 -0
  362. package/dist/instrumentation/mcp/index.js.map +1 -0
  363. package/dist/instrumentation/mcp/wrapper.d.ts +72 -0
  364. package/dist/instrumentation/mcp/wrapper.js +571 -0
  365. package/dist/instrumentation/mcp/wrapper.js.map +1 -0
  366. package/dist/instrumentation/mem0/index.d.ts +17 -0
  367. package/dist/instrumentation/mem0/index.js +113 -0
  368. package/dist/instrumentation/mem0/index.js.map +1 -0
  369. package/dist/instrumentation/mem0/wrapper.d.ts +37 -0
  370. package/dist/instrumentation/mem0/wrapper.js +298 -0
  371. package/dist/instrumentation/mem0/wrapper.js.map +1 -0
  372. package/dist/instrumentation/milvus/index.d.ts +11 -0
  373. package/dist/instrumentation/milvus/index.js +67 -0
  374. package/dist/instrumentation/milvus/index.js.map +1 -0
  375. package/dist/instrumentation/milvus/wrapper.d.ts +15 -0
  376. package/dist/instrumentation/milvus/wrapper.js +219 -0
  377. package/dist/instrumentation/milvus/wrapper.js.map +1 -0
  378. package/dist/instrumentation/mistral/index.d.ts +11 -0
  379. package/dist/instrumentation/mistral/index.js +66 -0
  380. package/dist/instrumentation/mistral/index.js.map +1 -0
  381. package/dist/instrumentation/mistral/wrapper.d.ts +49 -0
  382. package/dist/instrumentation/mistral/wrapper.js +482 -0
  383. package/dist/instrumentation/mistral/wrapper.js.map +1 -0
  384. package/dist/instrumentation/ollama/index.d.ts +11 -0
  385. package/dist/instrumentation/ollama/index.js +72 -0
  386. package/dist/instrumentation/ollama/index.js.map +1 -0
  387. package/dist/instrumentation/ollama/wrapper.d.ts +73 -0
  388. package/dist/instrumentation/ollama/wrapper.js +629 -0
  389. package/dist/instrumentation/ollama/wrapper.js.map +1 -0
  390. package/dist/instrumentation/openai/index.d.ts +11 -0
  391. package/dist/instrumentation/openai/index.js +79 -0
  392. package/dist/instrumentation/openai/index.js.map +1 -0
  393. package/dist/instrumentation/openai/wrapper.d.ts +80 -0
  394. package/dist/instrumentation/openai/wrapper.js +1121 -0
  395. package/dist/instrumentation/openai/wrapper.js.map +1 -0
  396. package/dist/instrumentation/openai-agents/index.d.ts +20 -0
  397. package/dist/instrumentation/openai-agents/index.js +174 -0
  398. package/dist/instrumentation/openai-agents/index.js.map +1 -0
  399. package/dist/instrumentation/openai-agents/processor.d.ts +35 -0
  400. package/dist/instrumentation/openai-agents/processor.js +249 -0
  401. package/dist/instrumentation/openai-agents/processor.js.map +1 -0
  402. package/dist/instrumentation/openai-agents/utils.d.ts +20 -0
  403. package/dist/instrumentation/openai-agents/utils.js +624 -0
  404. package/dist/instrumentation/openai-agents/utils.js.map +1 -0
  405. package/dist/instrumentation/pg/index.d.ts +20 -0
  406. package/dist/instrumentation/pg/index.js +74 -0
  407. package/dist/instrumentation/pg/index.js.map +1 -0
  408. package/dist/instrumentation/pg/wrapper.d.ts +66 -0
  409. package/dist/instrumentation/pg/wrapper.js +441 -0
  410. package/dist/instrumentation/pg/wrapper.js.map +1 -0
  411. package/dist/instrumentation/pinecone/index.d.ts +11 -0
  412. package/dist/instrumentation/pinecone/index.js +79 -0
  413. package/dist/instrumentation/pinecone/index.js.map +1 -0
  414. package/dist/instrumentation/pinecone/wrapper.d.ts +14 -0
  415. package/dist/instrumentation/pinecone/wrapper.js +198 -0
  416. package/dist/instrumentation/pinecone/wrapper.js.map +1 -0
  417. package/dist/instrumentation/qdrant/index.d.ts +11 -0
  418. package/dist/instrumentation/qdrant/index.js +67 -0
  419. package/dist/instrumentation/qdrant/index.js.map +1 -0
  420. package/dist/instrumentation/qdrant/wrapper.d.ts +14 -0
  421. package/dist/instrumentation/qdrant/wrapper.js +213 -0
  422. package/dist/instrumentation/qdrant/wrapper.js.map +1 -0
  423. package/dist/instrumentation/replicate/index.d.ts +11 -0
  424. package/dist/instrumentation/replicate/index.js +57 -0
  425. package/dist/instrumentation/replicate/index.js.map +1 -0
  426. package/dist/instrumentation/replicate/wrapper.d.ts +28 -0
  427. package/dist/instrumentation/replicate/wrapper.js +242 -0
  428. package/dist/instrumentation/replicate/wrapper.js.map +1 -0
  429. package/dist/instrumentation/strands/index.d.ts +21 -0
  430. package/dist/instrumentation/strands/index.js +83 -0
  431. package/dist/instrumentation/strands/index.js.map +1 -0
  432. package/dist/instrumentation/strands/processor.d.ts +51 -0
  433. package/dist/instrumentation/strands/processor.js +625 -0
  434. package/dist/instrumentation/strands/processor.js.map +1 -0
  435. package/dist/instrumentation/strands/utils.d.ts +24 -0
  436. package/dist/instrumentation/strands/utils.js +373 -0
  437. package/dist/instrumentation/strands/utils.js.map +1 -0
  438. package/dist/instrumentation/together/index.d.ts +11 -0
  439. package/dist/instrumentation/together/index.js +43 -0
  440. package/dist/instrumentation/together/index.js.map +1 -0
  441. package/dist/instrumentation/together/wrapper.d.ts +48 -0
  442. package/dist/instrumentation/together/wrapper.js +409 -0
  443. package/dist/instrumentation/together/wrapper.js.map +1 -0
  444. package/dist/instrumentation/transformers/index.d.ts +35 -0
  445. package/dist/instrumentation/transformers/index.js +119 -0
  446. package/dist/instrumentation/transformers/index.js.map +1 -0
  447. package/dist/instrumentation/transformers/wrapper.d.ts +49 -0
  448. package/dist/instrumentation/transformers/wrapper.js +472 -0
  449. package/dist/instrumentation/transformers/wrapper.js.map +1 -0
  450. package/dist/instrumentation/vercel-ai/index.d.ts +10 -0
  451. package/dist/instrumentation/vercel-ai/index.js +59 -0
  452. package/dist/instrumentation/vercel-ai/index.js.map +1 -0
  453. package/dist/instrumentation/vercel-ai/wrapper.d.ts +50 -0
  454. package/dist/instrumentation/vercel-ai/wrapper.js +539 -0
  455. package/dist/instrumentation/vercel-ai/wrapper.js.map +1 -0
  456. package/dist/instrumentation/vertexai/index.d.ts +11 -0
  457. package/dist/instrumentation/vertexai/index.js +70 -0
  458. package/dist/instrumentation/vertexai/index.js.map +1 -0
  459. package/dist/instrumentation/vertexai/wrapper.d.ts +67 -0
  460. package/dist/instrumentation/vertexai/wrapper.js +530 -0
  461. package/dist/instrumentation/vertexai/wrapper.js.map +1 -0
  462. package/dist/instrumentation/vllm/index.d.ts +13 -0
  463. package/dist/instrumentation/vllm/index.js +67 -0
  464. package/dist/instrumentation/vllm/index.js.map +1 -0
  465. package/dist/instrumentation/vllm/wrapper.d.ts +60 -0
  466. package/dist/instrumentation/vllm/wrapper.js +482 -0
  467. package/dist/instrumentation/vllm/wrapper.js.map +1 -0
  468. package/dist/llm/anthropic.d.ts +5 -0
  469. package/dist/llm/anthropic.js +39 -0
  470. package/dist/llm/anthropic.js.map +1 -0
  471. package/dist/llm/index.d.ts +10 -0
  472. package/dist/llm/index.js +93 -0
  473. package/dist/llm/index.js.map +1 -0
  474. package/dist/llm/openai.d.ts +6 -0
  475. package/dist/llm/openai.js +52 -0
  476. package/dist/llm/openai.js.map +1 -0
  477. package/dist/llm/providers.d.ts +7 -0
  478. package/dist/llm/providers.js +10 -0
  479. package/dist/llm/providers.js.map +1 -0
  480. package/dist/manual-trace.d.ts +40 -0
  481. package/dist/manual-trace.js +103 -0
  482. package/dist/manual-trace.js.map +1 -0
  483. package/dist/otel/__tests__/metrics.test.d.ts +1 -0
  484. package/dist/otel/__tests__/metrics.test.js +40 -0
  485. package/dist/otel/__tests__/metrics.test.js.map +1 -0
  486. package/dist/otel/events.d.ts +11 -0
  487. package/dist/otel/events.js +74 -0
  488. package/dist/otel/events.js.map +1 -0
  489. package/dist/otel/metrics.d.ts +35 -0
  490. package/dist/otel/metrics.js +219 -0
  491. package/dist/otel/metrics.js.map +1 -0
  492. package/dist/otel/tracing.d.ts +12 -0
  493. package/dist/otel/tracing.js +93 -0
  494. package/dist/otel/tracing.js.map +1 -0
  495. package/dist/otel/utils.d.ts +11 -0
  496. package/dist/otel/utils.js +34 -0
  497. package/dist/otel/utils.js.map +1 -0
  498. package/dist/pricing.json +951 -0
  499. package/dist/prompt-hub.d.ts +4 -0
  500. package/dist/prompt-hub.js +66 -0
  501. package/dist/prompt-hub.js.map +1 -0
  502. package/dist/register.d.ts +4 -0
  503. package/dist/register.js +52 -0
  504. package/dist/register.js.map +1 -0
  505. package/dist/score/__tests__/score.test.d.ts +1 -0
  506. package/dist/score/__tests__/score.test.js +143 -0
  507. package/dist/score/__tests__/score.test.js.map +1 -0
  508. package/dist/score/index.d.ts +2 -0
  509. package/dist/score/index.js +6 -0
  510. package/dist/score/index.js.map +1 -0
  511. package/dist/score/score.d.ts +15 -0
  512. package/dist/score/score.js +135 -0
  513. package/dist/score/score.js.map +1 -0
  514. package/dist/semantic-convention.d.ts +555 -0
  515. package/dist/semantic-convention.js +630 -0
  516. package/dist/semantic-convention.js.map +1 -0
  517. package/dist/types.d.ts +131 -0
  518. package/dist/types.js +3 -0
  519. package/dist/types.js.map +1 -0
  520. package/package.json +136 -0
@@ -0,0 +1,789 @@
1
+ "use strict";
2
+ /**
3
+ * Cursor SDK wrapper -- OTel GenAI semantic convention compliant.
4
+ *
5
+ * Wraps Agent.create(), Agent.resume(), and agent.send()
6
+ * to produce `create_agent`, `invoke_agent`, and `execute_tool` spans.
7
+ *
8
+ * Agent.prompt() is NOT wrapped separately -- it internally calls
9
+ * create() + send(), so the patched versions handle it automatically
10
+ * without producing duplicate spans.
11
+ *
12
+ * Token usage is captured via onDelta injection (TurnEndedUpdate).
13
+ * Tool call spans are created from SDKMessage stream events.
14
+ * The `system` stream event provides resolved model and tool definitions.
15
+ */
16
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
17
+ if (k2 === undefined) k2 = k;
18
+ var desc = Object.getOwnPropertyDescriptor(m, k);
19
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
20
+ desc = { enumerable: true, get: function() { return m[k]; } };
21
+ }
22
+ Object.defineProperty(o, k2, desc);
23
+ }) : (function(o, m, k, k2) {
24
+ if (k2 === undefined) k2 = k;
25
+ o[k2] = m[k];
26
+ }));
27
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
28
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
29
+ }) : function(o, v) {
30
+ o["default"] = v;
31
+ });
32
+ var __importStar = (this && this.__importStar) || (function () {
33
+ var ownKeys = function(o) {
34
+ ownKeys = Object.getOwnPropertyNames || function (o) {
35
+ var ar = [];
36
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
37
+ return ar;
38
+ };
39
+ return ownKeys(o);
40
+ };
41
+ return function (mod) {
42
+ if (mod && mod.__esModule) return mod;
43
+ var result = {};
44
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
45
+ __setModuleDefault(result, mod);
46
+ return result;
47
+ };
48
+ })();
49
+ var __importDefault = (this && this.__importDefault) || function (mod) {
50
+ return (mod && mod.__esModule) ? mod : { "default": mod };
51
+ };
52
+ Object.defineProperty(exports, "__esModule", { value: true });
53
+ exports.patchAgentCreate = patchAgentCreate;
54
+ exports.patchAgentResume = patchAgentResume;
55
+ const api_1 = require("@opentelemetry/api");
56
+ const semantic_conventions_1 = require("@opentelemetry/semantic-conventions");
57
+ const semantic_convention_1 = __importDefault(require("../../semantic-convention"));
58
+ const config_1 = __importDefault(require("../../config"));
59
+ const helpers_1 = __importStar(require("../../helpers"));
60
+ const constant_1 = require("../../constant");
61
+ const metrics_1 = __importDefault(require("../../otel/metrics"));
62
+ // ---------------------------------------------------------------------------
63
+ // Constants
64
+ // ---------------------------------------------------------------------------
65
+ const [SERVER_ADDRESS, SERVER_PORT] = (0, helpers_1.getServerAddressForProvider)('cursor');
66
+ const CURSOR_STATUS_TO_FINISH_REASON = {
67
+ finished: 'stop',
68
+ error: 'error',
69
+ cancelled: 'cancelled',
70
+ };
71
+ class AgentCreationRegistry {
72
+ constructor() {
73
+ this._entries = new WeakMap();
74
+ }
75
+ register(agent, spanContext, options) {
76
+ this._entries.set(agent, { spanContext, options });
77
+ }
78
+ get(agent) {
79
+ return this._entries.get(agent);
80
+ }
81
+ }
82
+ const agentRegistry = new AgentCreationRegistry();
83
+ // ---------------------------------------------------------------------------
84
+ // Helpers
85
+ // ---------------------------------------------------------------------------
86
+ function truncateContent(content) {
87
+ const maxLen = config_1.default.maxContentLength;
88
+ if (maxLen != null && maxLen > 0 && content.length > maxLen) {
89
+ return content.slice(0, maxLen);
90
+ }
91
+ return content;
92
+ }
93
+ function mapRunStatusToFinishReason(status) {
94
+ if (!status)
95
+ return 'stop';
96
+ return CURSOR_STATUS_TO_FINISH_REASON[status] || status;
97
+ }
98
+ function resolveAgentName(options) {
99
+ if (!options)
100
+ return null;
101
+ const name = options.name;
102
+ if (name && typeof name === 'string' && name.trim())
103
+ return name.trim();
104
+ return null;
105
+ }
106
+ function resolveModelId(options) {
107
+ if (!options?.model)
108
+ return null;
109
+ const model = options.model;
110
+ if (typeof model === 'string')
111
+ return model;
112
+ if (typeof model === 'object' && model.id)
113
+ return String(model.id);
114
+ return null;
115
+ }
116
+ /**
117
+ * Stamp `shield360.agent.version_hash` (auto) and `gen_ai.agent.version`
118
+ * (user override, if set) on the span and return the same attributes so
119
+ * the caller can merge them into the inference event extras.
120
+ */
121
+ function stampAgentVersion(span, args) {
122
+ const out = {};
123
+ try {
124
+ const versionHash = helpers_1.default.computeAgentVersionHash({
125
+ systemInstructions: args.systemInstructionsJson ?? null,
126
+ toolDefinitions: args.toolDefinitionsJson ?? null,
127
+ primaryModel: args.primaryModel ?? null,
128
+ runtimeConfig: {
129
+ temperature: args.temperature ?? null,
130
+ top_p: args.top_p ?? null,
131
+ max_tokens: args.max_tokens ?? null,
132
+ provider: semantic_convention_1.default.GEN_AI_SYSTEM_CURSOR,
133
+ },
134
+ providers: [semantic_convention_1.default.GEN_AI_SYSTEM_CURSOR],
135
+ });
136
+ if (versionHash) {
137
+ out[semantic_convention_1.default.SHIELD360_AGENT_VERSION_HASH] = versionHash;
138
+ span.setAttribute(semantic_convention_1.default.SHIELD360_AGENT_VERSION_HASH, versionHash);
139
+ }
140
+ }
141
+ catch {
142
+ // Hash computation must never fail the wrapped call.
143
+ }
144
+ const versionLabel = (0, helpers_1.getCurrentAgentVersion)();
145
+ if (versionLabel) {
146
+ out[semantic_convention_1.default.GEN_AI_AGENT_VERSION] = versionLabel;
147
+ span.setAttribute(semantic_convention_1.default.GEN_AI_AGENT_VERSION, versionLabel);
148
+ }
149
+ return out;
150
+ }
151
+ function setCommonSpanAttributes(span) {
152
+ span.setAttribute(semantic_conventions_1.ATTR_TELEMETRY_SDK_NAME, constant_1.SDK_NAME);
153
+ span.setAttribute(semantic_convention_1.default.ATTR_DEPLOYMENT_ENVIRONMENT, config_1.default.environment ?? 'default');
154
+ span.setAttribute(semantic_conventions_1.ATTR_SERVICE_NAME, config_1.default.applicationName ?? 'default');
155
+ span.setAttribute(semantic_convention_1.default.GEN_AI_SDK_VERSION, constant_1.SDK_VERSION);
156
+ span.setAttribute(semantic_convention_1.default.SERVER_ADDRESS, SERVER_ADDRESS);
157
+ span.setAttribute(semantic_convention_1.default.SERVER_PORT, SERVER_PORT);
158
+ }
159
+ // ---------------------------------------------------------------------------
160
+ // Tool span tracker -- manages in-flight execute_tool spans from stream
161
+ // ---------------------------------------------------------------------------
162
+ class ToolSpanTracker {
163
+ constructor(tracer, parentSpan, captureContent) {
164
+ this._inFlight = new Map();
165
+ this._tracer = tracer;
166
+ this._parentSpan = parentSpan;
167
+ this._captureContent = captureContent;
168
+ }
169
+ startTool(toolName, callId, args) {
170
+ const spanName = `${semantic_convention_1.default.GEN_AI_OPERATION_TYPE_TOOLS} ${toolName}`;
171
+ const parentCtx = api_1.trace.setSpan(api_1.context.active(), this._parentSpan);
172
+ const span = this._tracer.startSpan(spanName, {
173
+ kind: api_1.SpanKind.INTERNAL,
174
+ attributes: {
175
+ [semantic_convention_1.default.GEN_AI_OPERATION]: semantic_convention_1.default.GEN_AI_OPERATION_TYPE_TOOLS,
176
+ [semantic_convention_1.default.GEN_AI_PROVIDER_NAME_OTEL]: semantic_convention_1.default.GEN_AI_SYSTEM_CURSOR,
177
+ },
178
+ }, parentCtx);
179
+ span.setAttribute(semantic_convention_1.default.GEN_AI_TOOL_NAME, toolName);
180
+ span.setAttribute(semantic_convention_1.default.GEN_AI_TOOL_CALL_ID, callId);
181
+ span.setAttribute(semantic_convention_1.default.GEN_AI_TOOL_TYPE_OTEL, 'extension');
182
+ setCommonSpanAttributes(span);
183
+ if (this._captureContent && args != null) {
184
+ try {
185
+ const argsStr = typeof args === 'string' ? args : JSON.stringify(args);
186
+ span.setAttribute(semantic_convention_1.default.GEN_AI_TOOL_CALL_ARGUMENTS, truncateContent(argsStr));
187
+ }
188
+ catch { /* ignore */ }
189
+ }
190
+ (0, helpers_1.applyCustomSpanAttributes)(span);
191
+ this._inFlight.set(callId, span);
192
+ }
193
+ endTool(callId, result, isError = false) {
194
+ const span = this._inFlight.get(callId);
195
+ if (!span)
196
+ return;
197
+ this._inFlight.delete(callId);
198
+ if (isError) {
199
+ span.setAttribute(semantic_convention_1.default.ERROR_TYPE, 'ToolExecutionError');
200
+ span.setStatus({ code: api_1.SpanStatusCode.ERROR, message: 'tool execution failed' });
201
+ }
202
+ else {
203
+ if (this._captureContent && result != null) {
204
+ try {
205
+ const resultStr = typeof result === 'string' ? result : JSON.stringify(result);
206
+ span.setAttribute(semantic_convention_1.default.GEN_AI_TOOL_CALL_RESULT, truncateContent(resultStr));
207
+ }
208
+ catch { /* ignore */ }
209
+ }
210
+ span.setStatus({ code: api_1.SpanStatusCode.OK });
211
+ }
212
+ span.end();
213
+ }
214
+ endAll() {
215
+ for (const [, span] of this._inFlight) {
216
+ span.setStatus({ code: api_1.SpanStatusCode.OK });
217
+ span.end();
218
+ }
219
+ this._inFlight.clear();
220
+ }
221
+ }
222
+ function processStreamEvent(event, toolTracker, state) {
223
+ if (!event || !event.type)
224
+ return;
225
+ if (!state.runId && event.run_id) {
226
+ state.runId = event.run_id;
227
+ }
228
+ switch (event.type) {
229
+ case 'system': {
230
+ if (event.model) {
231
+ const modelId = typeof event.model === 'string' ? event.model : event.model?.id;
232
+ if (modelId)
233
+ state.resolvedModel = String(modelId);
234
+ }
235
+ if (Array.isArray(event.tools) && event.tools.length > 0) {
236
+ // Preserve full tool schemas (name/description/parameters) when the
237
+ // SDK provides them; fall back to name-only entries for older
238
+ // versions that emit strings.
239
+ state.toolDefinitions = event.tools.map((tool) => typeof tool === 'string' ? { name: tool } : tool);
240
+ }
241
+ if (typeof event.instructions === 'string' && event.instructions) {
242
+ state.systemInstructions = event.instructions;
243
+ }
244
+ else if (typeof event.systemPrompt === 'string' && event.systemPrompt) {
245
+ state.systemInstructions = event.systemPrompt;
246
+ }
247
+ break;
248
+ }
249
+ case 'tool_call': {
250
+ const callId = event.call_id;
251
+ const toolName = event.name || 'unknown';
252
+ const status = event.status;
253
+ if (status === 'running') {
254
+ toolTracker.startTool(toolName, callId, event.args);
255
+ state.toolCalls.push({ name: toolName, callId, args: event.args });
256
+ }
257
+ else if (status === 'completed') {
258
+ toolTracker.endTool(callId, event.result, false);
259
+ const tc = state.toolCalls.find(t => t.callId === callId);
260
+ if (tc)
261
+ tc.result = event.result;
262
+ }
263
+ else if (status === 'error') {
264
+ toolTracker.endTool(callId, event.result, true);
265
+ }
266
+ break;
267
+ }
268
+ case 'assistant': {
269
+ if (state.firstContentTimeMs === null) {
270
+ state.firstContentTimeMs = Date.now();
271
+ }
272
+ const content = event.message?.content;
273
+ if (Array.isArray(content)) {
274
+ for (const block of content) {
275
+ if (block.type === 'text' && block.text) {
276
+ state.assistantText += block.text;
277
+ }
278
+ }
279
+ }
280
+ break;
281
+ }
282
+ case 'thinking': {
283
+ if (state.firstContentTimeMs === null) {
284
+ state.firstContentTimeMs = Date.now();
285
+ }
286
+ if (event.text) {
287
+ state.thinkingText += event.text;
288
+ }
289
+ break;
290
+ }
291
+ }
292
+ }
293
+ // ---------------------------------------------------------------------------
294
+ // Build OTel input/output messages
295
+ // ---------------------------------------------------------------------------
296
+ function buildInputMessages(message) {
297
+ try {
298
+ if (typeof message === 'string') {
299
+ return JSON.stringify([{
300
+ role: 'user',
301
+ parts: [{ type: 'text', content: truncateContent(message) }],
302
+ }]);
303
+ }
304
+ const parts = [];
305
+ if (message?.text) {
306
+ parts.push({ type: 'text', content: truncateContent(message.text) });
307
+ }
308
+ if (Array.isArray(message?.images)) {
309
+ for (const img of message.images) {
310
+ parts.push({ type: 'image', mimeType: img.mimeType || 'image/png' });
311
+ }
312
+ }
313
+ if (parts.length === 0)
314
+ return null;
315
+ return JSON.stringify([{ role: 'user', parts }]);
316
+ }
317
+ catch {
318
+ return null;
319
+ }
320
+ }
321
+ function buildOutputMessages(state, finishReason) {
322
+ try {
323
+ const parts = [];
324
+ if (state.assistantText) {
325
+ parts.push({ type: 'text', content: truncateContent(state.assistantText) });
326
+ }
327
+ if (state.thinkingText) {
328
+ parts.push({ type: 'reasoning', content: truncateContent(state.thinkingText) });
329
+ }
330
+ for (const tc of state.toolCalls) {
331
+ const toolPart = {
332
+ type: 'tool_call',
333
+ id: tc.callId,
334
+ name: tc.name,
335
+ };
336
+ if (tc.args != null) {
337
+ toolPart.arguments = typeof tc.args === 'object' ? tc.args : {};
338
+ }
339
+ parts.push(toolPart);
340
+ }
341
+ if (parts.length === 0)
342
+ return null;
343
+ return JSON.stringify([{ role: 'assistant', parts, finish_reason: finishReason }]);
344
+ }
345
+ catch {
346
+ return null;
347
+ }
348
+ }
349
+ // ---------------------------------------------------------------------------
350
+ // Emit inference event for invoke_agent spans
351
+ // ---------------------------------------------------------------------------
352
+ function emitInvokeAgentEvent(span, agentId, model, responseModel, finishReason, inputTokens, outputTokens, inputMessagesJson, outputMessagesJson, systemInstructionsJson, toolDefinitionsJson, versionExtras) {
353
+ if (config_1.default.disableEvents)
354
+ return;
355
+ try {
356
+ const attributes = {
357
+ [semantic_convention_1.default.GEN_AI_OPERATION]: semantic_convention_1.default.GEN_AI_OPERATION_TYPE_AGENT,
358
+ [semantic_convention_1.default.GEN_AI_PROVIDER_NAME_OTEL]: semantic_convention_1.default.GEN_AI_SYSTEM_CURSOR,
359
+ [semantic_convention_1.default.SERVER_ADDRESS]: SERVER_ADDRESS,
360
+ [semantic_convention_1.default.SERVER_PORT]: SERVER_PORT,
361
+ };
362
+ if (model)
363
+ attributes[semantic_convention_1.default.GEN_AI_REQUEST_MODEL] = model;
364
+ if (responseModel)
365
+ attributes[semantic_convention_1.default.GEN_AI_RESPONSE_MODEL] = responseModel;
366
+ if (agentId)
367
+ attributes[semantic_convention_1.default.GEN_AI_CONVERSATION_ID] = agentId;
368
+ if (finishReason)
369
+ attributes[semantic_convention_1.default.GEN_AI_RESPONSE_FINISH_REASON] = [finishReason];
370
+ if (inputTokens)
371
+ attributes[semantic_convention_1.default.GEN_AI_USAGE_INPUT_TOKENS] = inputTokens;
372
+ if (outputTokens)
373
+ attributes[semantic_convention_1.default.GEN_AI_USAGE_OUTPUT_TOKENS] = outputTokens;
374
+ if (inputMessagesJson != null) {
375
+ attributes[semantic_convention_1.default.GEN_AI_INPUT_MESSAGES] = inputMessagesJson;
376
+ }
377
+ if (outputMessagesJson != null) {
378
+ attributes[semantic_convention_1.default.GEN_AI_OUTPUT_MESSAGES] = outputMessagesJson;
379
+ }
380
+ if (systemInstructionsJson != null) {
381
+ attributes[semantic_convention_1.default.GEN_AI_SYSTEM_INSTRUCTIONS] = systemInstructionsJson;
382
+ }
383
+ if (toolDefinitionsJson != null) {
384
+ attributes[semantic_convention_1.default.GEN_AI_TOOL_DEFINITIONS] = toolDefinitionsJson;
385
+ }
386
+ if (versionExtras) {
387
+ Object.assign(attributes, versionExtras);
388
+ }
389
+ helpers_1.default.emitInferenceEvent(span, attributes);
390
+ }
391
+ catch { /* swallow */ }
392
+ }
393
+ // ---------------------------------------------------------------------------
394
+ // Record metrics for invoke_agent spans
395
+ // ---------------------------------------------------------------------------
396
+ function recordInvokeAgentMetrics(model, inputTokens, outputTokens, cost, duration, errorType) {
397
+ if (config_1.default.disableMetrics)
398
+ return;
399
+ try {
400
+ const attributes = {
401
+ [semantic_conventions_1.ATTR_TELEMETRY_SDK_NAME]: constant_1.SDK_NAME,
402
+ [semantic_conventions_1.ATTR_SERVICE_NAME]: config_1.default.applicationName ?? 'default',
403
+ [semantic_convention_1.default.ATTR_DEPLOYMENT_ENVIRONMENT]: config_1.default.environment ?? 'default',
404
+ [semantic_convention_1.default.GEN_AI_PROVIDER_NAME_OTEL]: semantic_convention_1.default.GEN_AI_SYSTEM_CURSOR,
405
+ [semantic_convention_1.default.GEN_AI_OPERATION]: semantic_convention_1.default.GEN_AI_OPERATION_TYPE_AGENT,
406
+ [semantic_convention_1.default.SERVER_ADDRESS]: SERVER_ADDRESS,
407
+ [semantic_convention_1.default.SERVER_PORT]: SERVER_PORT,
408
+ };
409
+ if (model)
410
+ attributes[semantic_convention_1.default.GEN_AI_REQUEST_MODEL] = model;
411
+ if (errorType)
412
+ attributes[semantic_convention_1.default.ERROR_TYPE] = errorType;
413
+ if (metrics_1.default.genaiClientOperationDuration) {
414
+ metrics_1.default.genaiClientOperationDuration.record(duration, attributes);
415
+ }
416
+ if (inputTokens && metrics_1.default.genaiClientUsageTokens) {
417
+ metrics_1.default.genaiClientUsageTokens.record(inputTokens, {
418
+ ...attributes,
419
+ [semantic_convention_1.default.GEN_AI_TOKEN_TYPE]: semantic_convention_1.default.GEN_AI_TOKEN_TYPE_INPUT,
420
+ });
421
+ }
422
+ if (outputTokens && metrics_1.default.genaiClientUsageTokens) {
423
+ metrics_1.default.genaiClientUsageTokens.record(outputTokens, {
424
+ ...attributes,
425
+ [semantic_convention_1.default.GEN_AI_TOKEN_TYPE]: semantic_convention_1.default.GEN_AI_TOKEN_TYPE_OUTPUT,
426
+ });
427
+ }
428
+ if (cost && metrics_1.default.genaiCost) {
429
+ metrics_1.default.genaiCost.record(cost, attributes);
430
+ }
431
+ }
432
+ catch { /* swallow */ }
433
+ }
434
+ // ---------------------------------------------------------------------------
435
+ // wrapSend -- wraps agent.send() to produce invoke_agent spans
436
+ // ---------------------------------------------------------------------------
437
+ function wrapSend(tracer, originalSend, agentId, agentName, modelId) {
438
+ return function wrappedSend(message, options) {
439
+ const captureContent = config_1.default.captureMessageContent ?? true;
440
+ const displayName = agentName || agentId;
441
+ const spanName = `${semantic_convention_1.default.GEN_AI_OPERATION_TYPE_AGENT} ${displayName}`;
442
+ const requestModel = modelId || resolveModelId(options) || 'unknown';
443
+ const creationInfo = agentRegistry.get(this);
444
+ const creationSpanCtx = creationInfo?.spanContext;
445
+ const links = [];
446
+ if (creationSpanCtx) {
447
+ links.push({ context: creationSpanCtx });
448
+ }
449
+ // Start invoke_agent in the same trace as create_agent by using its
450
+ // span context as parent. This keeps both spans in one trace while
451
+ // the span link provides explicit correlation.
452
+ let parentCtx = api_1.context.active();
453
+ if (creationSpanCtx) {
454
+ const remoteSpan = api_1.trace.wrapSpanContext(creationSpanCtx);
455
+ parentCtx = api_1.trace.setSpan(parentCtx, remoteSpan);
456
+ }
457
+ const span = tracer.startSpan(spanName, {
458
+ kind: api_1.SpanKind.CLIENT,
459
+ attributes: {
460
+ [semantic_convention_1.default.GEN_AI_OPERATION]: semantic_convention_1.default.GEN_AI_OPERATION_TYPE_AGENT,
461
+ [semantic_convention_1.default.GEN_AI_PROVIDER_NAME_OTEL]: semantic_convention_1.default.GEN_AI_SYSTEM_CURSOR,
462
+ [semantic_convention_1.default.GEN_AI_REQUEST_MODEL]: requestModel,
463
+ [semantic_convention_1.default.SERVER_ADDRESS]: SERVER_ADDRESS,
464
+ [semantic_convention_1.default.SERVER_PORT]: SERVER_PORT,
465
+ },
466
+ links,
467
+ }, parentCtx);
468
+ setCommonSpanAttributes(span);
469
+ span.setAttribute(semantic_convention_1.default.GEN_AI_AGENT_ID, agentId);
470
+ span.setAttribute(semantic_convention_1.default.GEN_AI_CONVERSATION_ID, agentId);
471
+ if (agentName)
472
+ span.setAttribute(semantic_convention_1.default.GEN_AI_AGENT_NAME, agentName);
473
+ if (captureContent) {
474
+ const inputJson = buildInputMessages(message);
475
+ if (inputJson)
476
+ span.setAttribute(semantic_convention_1.default.GEN_AI_INPUT_MESSAGES, inputJson);
477
+ }
478
+ (0, helpers_1.applyCustomSpanAttributes)(span);
479
+ const startTime = Date.now() / 1000;
480
+ const startTimeMs = Date.now();
481
+ const usage = { inputTokens: 0, outputTokens: 0, cacheReadTokens: 0, cacheWriteTokens: 0 };
482
+ const toolTracker = new ToolSpanTracker(tracer, span, captureContent);
483
+ const streamState = {
484
+ assistantText: '',
485
+ thinkingText: '',
486
+ toolCalls: [],
487
+ resolvedModel: null,
488
+ toolDefinitions: null,
489
+ systemInstructions: null,
490
+ runId: null,
491
+ firstContentTimeMs: null,
492
+ };
493
+ // Seed system_instructions and tool_definitions from `Agent.create` options
494
+ // so they're available before the system stream event arrives.
495
+ const createOptions = creationInfo?.options;
496
+ if (createOptions) {
497
+ const seedInstructions = (typeof createOptions.instructions === 'string' && createOptions.instructions) ||
498
+ (typeof createOptions.systemPrompt === 'string' && createOptions.systemPrompt) ||
499
+ null;
500
+ if (seedInstructions)
501
+ streamState.systemInstructions = seedInstructions;
502
+ if (Array.isArray(createOptions.tools) && createOptions.tools.length > 0) {
503
+ streamState.toolDefinitions = createOptions.tools.slice();
504
+ }
505
+ }
506
+ const userOnDelta = options?.onDelta;
507
+ const mergedOptions = { ...options };
508
+ mergedOptions.onDelta = async (args) => {
509
+ try {
510
+ const update = args?.update;
511
+ if (update?.type === 'turn-ended' && update.usage) {
512
+ usage.inputTokens += update.usage.inputTokens || 0;
513
+ usage.outputTokens += update.usage.outputTokens || 0;
514
+ usage.cacheReadTokens += update.usage.cacheReadTokens || 0;
515
+ usage.cacheWriteTokens += update.usage.cacheWriteTokens || 0;
516
+ }
517
+ }
518
+ catch { /* swallow */ }
519
+ if (userOnDelta) {
520
+ return userOnDelta(args);
521
+ }
522
+ };
523
+ const spanContext = api_1.trace.setSpan(api_1.context.active(), span);
524
+ (0, helpers_1.setFrameworkLlmActive)();
525
+ let runPromise;
526
+ try {
527
+ runPromise = api_1.context.with(spanContext, () => {
528
+ return originalSend.call(this, message, mergedOptions);
529
+ });
530
+ }
531
+ catch (e) {
532
+ (0, helpers_1.resetFrameworkLlmActive)();
533
+ helpers_1.default.handleException(span, e);
534
+ span.end();
535
+ throw e;
536
+ }
537
+ return runPromise.then((run) => {
538
+ return createRunProxy(run, tracer, span, startTime, startTimeMs, usage, toolTracker, streamState, captureContent, agentId, agentName, requestModel, message);
539
+ }).catch((e) => {
540
+ (0, helpers_1.resetFrameworkLlmActive)();
541
+ helpers_1.default.handleException(span, e);
542
+ recordInvokeAgentMetrics(requestModel, 0, 0, 0, (Date.now() / 1000) - startTime, e?.constructor?.name || '_OTHER');
543
+ span.end();
544
+ throw e;
545
+ });
546
+ };
547
+ }
548
+ // ---------------------------------------------------------------------------
549
+ // createRunProxy -- proxies the Run to intercept stream() and wait()
550
+ // ---------------------------------------------------------------------------
551
+ function createRunProxy(run, tracer, span, startTime, startTimeMs, usage, toolTracker, streamState, captureContent, agentId, agentName, requestModel, message) {
552
+ let finalized = false;
553
+ let isStreamMode = false;
554
+ const finalizeSpan = (result, error) => {
555
+ if (finalized)
556
+ return;
557
+ finalized = true;
558
+ (0, helpers_1.resetFrameworkLlmActive)();
559
+ toolTracker.endAll();
560
+ const duration = (Date.now() / 1000) - startTime;
561
+ const status = result?.status || run.status || 'finished';
562
+ const finishReason = mapRunStatusToFinishReason(status);
563
+ const responseModel = streamState.resolvedModel || result?.model?.id || run.model?.id || null;
564
+ const durationMs = result?.durationMs || run.durationMs;
565
+ if (responseModel)
566
+ span.setAttribute(semantic_convention_1.default.GEN_AI_RESPONSE_MODEL, responseModel);
567
+ span.setAttribute(semantic_convention_1.default.GEN_AI_RESPONSE_FINISH_REASON, [finishReason]);
568
+ const runId = streamState.runId || run.id;
569
+ if (runId)
570
+ span.setAttribute(semantic_convention_1.default.GEN_AI_RESPONSE_ID, runId);
571
+ if (isStreamMode) {
572
+ span.setAttribute(semantic_convention_1.default.GEN_AI_REQUEST_STREAM, true);
573
+ }
574
+ if (usage.inputTokens)
575
+ span.setAttribute(semantic_convention_1.default.GEN_AI_USAGE_INPUT_TOKENS, usage.inputTokens);
576
+ if (usage.outputTokens)
577
+ span.setAttribute(semantic_convention_1.default.GEN_AI_USAGE_OUTPUT_TOKENS, usage.outputTokens);
578
+ if (usage.cacheReadTokens)
579
+ span.setAttribute(semantic_convention_1.default.GEN_AI_USAGE_CACHE_READ_INPUT_TOKENS, usage.cacheReadTokens);
580
+ if (usage.cacheWriteTokens)
581
+ span.setAttribute(semantic_convention_1.default.GEN_AI_USAGE_CACHE_CREATION_INPUT_TOKENS, usage.cacheWriteTokens);
582
+ const effectiveDuration = durationMs ? durationMs / 1000 : duration;
583
+ span.setAttribute(semantic_convention_1.default.GEN_AI_CLIENT_OPERATION_DURATION, effectiveDuration);
584
+ if (isStreamMode && streamState.firstContentTimeMs !== null) {
585
+ const ttft = (streamState.firstContentTimeMs - startTimeMs) / 1000;
586
+ span.setAttribute(semantic_convention_1.default.GEN_AI_RESPONSE_TIME_TO_FIRST_CHUNK, ttft);
587
+ }
588
+ const toolDefinitionsJson = streamState.toolDefinitions
589
+ ? helpers_1.default.buildToolDefinitions(streamState.toolDefinitions)
590
+ : undefined;
591
+ if (toolDefinitionsJson) {
592
+ span.setAttribute(semantic_convention_1.default.GEN_AI_TOOL_DEFINITIONS, toolDefinitionsJson);
593
+ }
594
+ // Compute system_instructions JSON regardless of captureContent so
595
+ // versions still group correctly when content capture is disabled.
596
+ const systemInstructionsJson = streamState.systemInstructions
597
+ ? JSON.stringify([{ type: 'text', content: streamState.systemInstructions }])
598
+ : undefined;
599
+ if (captureContent && systemInstructionsJson) {
600
+ span.setAttribute(semantic_convention_1.default.GEN_AI_SYSTEM_INSTRUCTIONS, systemInstructionsJson);
601
+ }
602
+ const versionExtras = stampAgentVersion(span, {
603
+ systemInstructionsJson,
604
+ toolDefinitionsJson,
605
+ primaryModel: responseModel || requestModel,
606
+ temperature: null,
607
+ top_p: null,
608
+ max_tokens: null,
609
+ });
610
+ const pricingInfo = config_1.default.pricingInfo || {};
611
+ const effectiveModel = responseModel || requestModel;
612
+ // Cursor reports cache write separately; treat it as cache-creation for pricing.
613
+ // Prefer inclusive accounting when input already covers the cache sum.
614
+ const cacheTotal = (usage.cacheReadTokens || 0) + (usage.cacheWriteTokens || 0);
615
+ const promptTokensIncludeCache = cacheTotal > 0 && usage.inputTokens >= cacheTotal;
616
+ const cost = effectiveModel
617
+ ? helpers_1.default.getChatModelCost(effectiveModel, pricingInfo, usage.inputTokens, usage.outputTokens, usage.cacheReadTokens, usage.cacheWriteTokens, promptTokensIncludeCache)
618
+ : 0;
619
+ if (cost)
620
+ span.setAttribute(semantic_convention_1.default.GEN_AI_USAGE_COST, cost);
621
+ let outputMessagesJson = null;
622
+ if (captureContent) {
623
+ const resultText = result?.result || run.result;
624
+ if (resultText && !streamState.assistantText) {
625
+ streamState.assistantText = resultText;
626
+ }
627
+ outputMessagesJson = buildOutputMessages(streamState, finishReason);
628
+ if (outputMessagesJson) {
629
+ span.setAttribute(semantic_convention_1.default.GEN_AI_OUTPUT_MESSAGES, outputMessagesJson);
630
+ }
631
+ }
632
+ if (error) {
633
+ helpers_1.default.handleException(span, error instanceof Error ? error : new Error(String(error)));
634
+ }
635
+ else if (status === 'error') {
636
+ span.setAttribute(semantic_convention_1.default.ERROR_TYPE, 'AgentError');
637
+ span.setStatus({ code: api_1.SpanStatusCode.ERROR, message: result?.result || 'agent error' });
638
+ }
639
+ else {
640
+ span.setStatus({ code: api_1.SpanStatusCode.OK });
641
+ }
642
+ const inputMessagesJson = captureContent ? buildInputMessages(message) : null;
643
+ emitInvokeAgentEvent(span, agentId, requestModel, responseModel, finishReason, usage.inputTokens, usage.outputTokens, inputMessagesJson, outputMessagesJson, systemInstructionsJson ?? null, toolDefinitionsJson ?? null, versionExtras);
644
+ recordInvokeAgentMetrics(requestModel, usage.inputTokens, usage.outputTokens, cost, duration, error ? (error.constructor?.name || '_OTHER') : (status === 'error' ? 'AgentError' : undefined));
645
+ span.end();
646
+ };
647
+ return new Proxy(run, {
648
+ get(target, prop, receiver) {
649
+ if (prop === 'stream') {
650
+ const originalStream = target.stream;
651
+ if (typeof originalStream !== 'function')
652
+ return originalStream;
653
+ return function (...streamArgs) {
654
+ isStreamMode = true;
655
+ const generator = originalStream.apply(target, streamArgs);
656
+ return wrapAsyncGenerator(generator, toolTracker, streamState, finalizeSpan);
657
+ };
658
+ }
659
+ if (prop === 'wait') {
660
+ const originalWait = target.wait;
661
+ if (typeof originalWait !== 'function')
662
+ return originalWait;
663
+ return function (...waitArgs) {
664
+ return originalWait.apply(target, waitArgs).then((result) => {
665
+ finalizeSpan(result);
666
+ return result;
667
+ }).catch((e) => {
668
+ finalizeSpan(undefined, e);
669
+ throw e;
670
+ });
671
+ };
672
+ }
673
+ if (prop === 'cancel') {
674
+ const originalCancel = target.cancel;
675
+ if (typeof originalCancel !== 'function')
676
+ return originalCancel;
677
+ return function (...cancelArgs) {
678
+ return originalCancel.apply(target, cancelArgs).then((result) => {
679
+ finalizeSpan({ status: 'cancelled' });
680
+ return result;
681
+ });
682
+ };
683
+ }
684
+ return Reflect.get(target, prop, receiver);
685
+ },
686
+ });
687
+ }
688
+ // ---------------------------------------------------------------------------
689
+ // wrapAsyncGenerator -- wraps run.stream() to intercept SDKMessage events
690
+ // ---------------------------------------------------------------------------
691
+ async function* wrapAsyncGenerator(generator, toolTracker, streamState, finalizeSpan) {
692
+ try {
693
+ for await (const event of generator) {
694
+ try {
695
+ processStreamEvent(event, toolTracker, streamState);
696
+ }
697
+ catch { /* swallow processing errors */ }
698
+ yield event;
699
+ }
700
+ finalizeSpan();
701
+ }
702
+ catch (e) {
703
+ finalizeSpan(undefined, e);
704
+ throw e;
705
+ }
706
+ }
707
+ // ---------------------------------------------------------------------------
708
+ // patchAgentCreate -- wraps Agent.create() for create_agent spans
709
+ // ---------------------------------------------------------------------------
710
+ function patchAgentCreate(tracer) {
711
+ return (originalCreate) => {
712
+ return async function wrappedCreate(options) {
713
+ const agentName = resolveAgentName(options);
714
+ const modelId = resolveModelId(options);
715
+ const displayName = agentName || 'cursor-agent';
716
+ const spanName = `${semantic_convention_1.default.GEN_AI_OPERATION_TYPE_CREATE_AGENT} ${displayName}`;
717
+ const span = tracer.startSpan(spanName, {
718
+ kind: api_1.SpanKind.CLIENT,
719
+ attributes: {
720
+ [semantic_convention_1.default.GEN_AI_OPERATION]: semantic_convention_1.default.GEN_AI_OPERATION_TYPE_CREATE_AGENT,
721
+ [semantic_convention_1.default.GEN_AI_PROVIDER_NAME_OTEL]: semantic_convention_1.default.GEN_AI_SYSTEM_CURSOR,
722
+ [semantic_convention_1.default.SERVER_ADDRESS]: SERVER_ADDRESS,
723
+ [semantic_convention_1.default.SERVER_PORT]: SERVER_PORT,
724
+ },
725
+ });
726
+ setCommonSpanAttributes(span);
727
+ if (agentName)
728
+ span.setAttribute(semantic_convention_1.default.GEN_AI_AGENT_NAME, agentName);
729
+ if (modelId)
730
+ span.setAttribute(semantic_convention_1.default.GEN_AI_REQUEST_MODEL, modelId);
731
+ const captureContent = config_1.default.captureMessageContent ?? true;
732
+ const instructionsText = (options && typeof options.instructions === 'string' && options.instructions) ||
733
+ (options && typeof options.systemPrompt === 'string' && options.systemPrompt) ||
734
+ null;
735
+ if (captureContent && instructionsText) {
736
+ span.setAttribute(semantic_convention_1.default.GEN_AI_SYSTEM_INSTRUCTIONS, JSON.stringify([{ type: 'text', content: instructionsText }]));
737
+ }
738
+ const optionTools = Array.isArray(options?.tools) ? options.tools : undefined;
739
+ const toolDefinitionsJson = helpers_1.default.buildToolDefinitions(optionTools);
740
+ if (toolDefinitionsJson) {
741
+ span.setAttribute(semantic_convention_1.default.GEN_AI_TOOL_DEFINITIONS, toolDefinitionsJson);
742
+ }
743
+ (0, helpers_1.applyCustomSpanAttributes)(span);
744
+ try {
745
+ const agent = await originalCreate.call(this, options);
746
+ const agentId = agent.agentId;
747
+ if (agentId) {
748
+ span.setAttribute(semantic_convention_1.default.GEN_AI_AGENT_ID, agentId);
749
+ }
750
+ agentRegistry.register(agent, span.spanContext(), options);
751
+ const resolvedModel = agent.model?.id || modelId;
752
+ if (resolvedModel)
753
+ span.setAttribute(semantic_convention_1.default.GEN_AI_RESPONSE_MODEL, resolvedModel);
754
+ span.setStatus({ code: api_1.SpanStatusCode.OK });
755
+ span.end();
756
+ if (typeof agent.send === 'function') {
757
+ const originalAgentSend = agent.send.bind(agent);
758
+ agent.send = wrapSend(tracer, originalAgentSend, agentId, agentName, resolvedModel);
759
+ }
760
+ return agent;
761
+ }
762
+ catch (e) {
763
+ helpers_1.default.handleException(span, e);
764
+ span.end();
765
+ throw e;
766
+ }
767
+ };
768
+ };
769
+ }
770
+ // ---------------------------------------------------------------------------
771
+ // patchAgentResume -- wraps Agent.resume() to patch send() on resumed agents
772
+ // ---------------------------------------------------------------------------
773
+ function patchAgentResume(tracer) {
774
+ return (originalResume) => {
775
+ return async function wrappedResume(agentId, options) {
776
+ const agentName = resolveAgentName(options);
777
+ const modelId = resolveModelId(options);
778
+ const agent = await originalResume.call(this, agentId, options);
779
+ const resolvedAgentId = agent.agentId || agentId;
780
+ const resolvedModel = agent.model?.id || modelId;
781
+ if (typeof agent.send === 'function') {
782
+ const originalAgentSend = agent.send.bind(agent);
783
+ agent.send = wrapSend(tracer, originalAgentSend, resolvedAgentId, agentName, resolvedModel);
784
+ }
785
+ return agent;
786
+ };
787
+ };
788
+ }
789
+ //# sourceMappingURL=wrapper.js.map