@cursor/bdk 0.2.25 → 0.2.26

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 (433) hide show
  1. package/AGENTS.md +3 -18
  2. package/CHANGELOG.md +3 -0
  3. package/dist/artifacts.d.ts +1 -1
  4. package/dist/artifacts.js +1 -1
  5. package/dist/bin/agent-serve.js +25 -21
  6. package/dist/channels/bitbucket/api.d.ts +2 -2
  7. package/dist/channels/bitbucket/api.d.ts.map +1 -1
  8. package/dist/channels/bitbucket/bitbucket-channel.js +1 -1
  9. package/dist/channels/bitbucket/bitbucket-webhook.d.ts +2 -2
  10. package/dist/channels/bitbucket/bitbucket-webhook.d.ts.map +1 -1
  11. package/dist/channels/change-monitors/change-monitors-channel.js +1 -1
  12. package/dist/channels/deployments/deployments-channel.js +1 -1
  13. package/dist/channels/github/cursor-account.d.ts +7 -0
  14. package/dist/channels/github/cursor-account.d.ts.map +1 -1
  15. package/dist/channels/github/cursor-account.js +22 -5
  16. package/dist/channels/github/github-channel.js +1 -1
  17. package/dist/channels/github/replay.d.ts +1 -1
  18. package/dist/channels/github/replay.d.ts.map +1 -1
  19. package/dist/channels/gitlab/api.d.ts +2 -2
  20. package/dist/channels/gitlab/api.d.ts.map +1 -1
  21. package/dist/channels/gitlab/gitlab-channel.js +1 -1
  22. package/dist/channels/issues/issues-channel.js +1 -1
  23. package/dist/channels/origin/api.d.ts +4 -4
  24. package/dist/channels/origin/api.d.ts.map +1 -1
  25. package/dist/channels/origin/origin-channel.js +1 -1
  26. package/dist/channels/origin/origin-webhook.d.ts +3 -3
  27. package/dist/channels/origin/origin-webhook.d.ts.map +1 -1
  28. package/dist/channels/pagerduty/pagerduty-webhook.d.ts +2 -2
  29. package/dist/channels/pagerduty/pagerduty-webhook.d.ts.map +1 -1
  30. package/dist/channels/runs/runs-channel.js +1 -1
  31. package/dist/channels/slack/agentic-delivery.d.ts +2 -1
  32. package/dist/channels/slack/agentic-delivery.d.ts.map +1 -1
  33. package/dist/channels/slack/agentic-delivery.js +6 -10
  34. package/dist/channels/slack/agentic-signals.d.ts +2 -7
  35. package/dist/channels/slack/agentic-signals.d.ts.map +1 -1
  36. package/dist/channels/slack/agentic-signals.js +4 -3
  37. package/dist/channels/slack/api.d.ts +1 -0
  38. package/dist/channels/slack/api.d.ts.map +1 -1
  39. package/dist/channels/slack/api.js +3 -0
  40. package/dist/channels/slack/constants.d.ts +2 -0
  41. package/dist/channels/slack/constants.d.ts.map +1 -1
  42. package/dist/channels/slack/constants.js +2 -0
  43. package/dist/channels/slack/defaults.d.ts.map +1 -1
  44. package/dist/channels/slack/defaults.js +3 -2
  45. package/dist/channels/slack/dispatch.d.ts +9 -0
  46. package/dist/channels/slack/dispatch.d.ts.map +1 -1
  47. package/dist/channels/slack/dispatch.js +3 -0
  48. package/dist/channels/slack/inbound.d.ts.map +1 -1
  49. package/dist/channels/slack/inbound.js +24 -20
  50. package/dist/channels/slack/interactive.d.ts +2 -0
  51. package/dist/channels/slack/interactive.d.ts.map +1 -1
  52. package/dist/channels/slack/interactive.js +1 -0
  53. package/dist/channels/slack/live-delivery.d.ts +3 -0
  54. package/dist/channels/slack/live-delivery.d.ts.map +1 -1
  55. package/dist/channels/slack/live-delivery.js +5 -0
  56. package/dist/channels/slack/reply-options.d.ts +9 -0
  57. package/dist/channels/slack/reply-options.d.ts.map +1 -1
  58. package/dist/channels/slack/reply-options.js +31 -1
  59. package/dist/channels/slack/slack-channel.d.ts.map +1 -1
  60. package/dist/channels/slack/slack-channel.js +7 -0
  61. package/dist/channels/slack/stream.d.ts +5 -1
  62. package/dist/channels/slack/stream.d.ts.map +1 -1
  63. package/dist/channels/slack/types.d.ts +29 -0
  64. package/dist/channels/slack/types.d.ts.map +1 -1
  65. package/dist/channels.d.ts +1 -1
  66. package/dist/channels.js +1 -1
  67. package/dist/docs/404.html +3 -3
  68. package/dist/docs/assets/{app.BjS1QEI4.js → app.BITbgXMP.js} +4 -4
  69. package/dist/docs/assets/changelog.md.sdD6ctqK.js +1 -0
  70. package/dist/docs/assets/changelog.md.sdD6ctqK.lean.js +1 -0
  71. package/dist/docs/assets/chunks/@localSearchIndexroot.B45uCZp9.js +1 -0
  72. package/dist/docs/assets/chunks/{VPLocalSearchBox.BOuvjb5Y.js → VPLocalSearchBox.3qo4-bX9.js} +2 -2
  73. package/dist/docs/assets/chunks/{arc.3WR6Jf-y.js → arc.CTrZocKU.js} +1 -1
  74. package/dist/docs/assets/chunks/{architectureDiagram-Q4EWVU46.Dtb6Dqh6.js → architectureDiagram-Q4EWVU46.BkgIqxrv.js} +1 -1
  75. package/dist/docs/assets/chunks/{baseUniq.BUyrgrZE.js → baseUniq.5w0JfVgo.js} +1 -1
  76. package/dist/docs/assets/chunks/{blockDiagram-DXYQGD6D.BVLV_voZ.js → blockDiagram-DXYQGD6D.BVLtPjQc.js} +1 -1
  77. package/dist/docs/assets/chunks/{c4Diagram-AHTNJAMY.jXJ1q70M.js → c4Diagram-AHTNJAMY.CQ7neZTW.js} +1 -1
  78. package/dist/docs/assets/chunks/channel.Cv2w64wj.js +1 -0
  79. package/dist/docs/assets/chunks/{chunk-4BX2VUAB.zz1SMBvK.js → chunk-4BX2VUAB.D-hJ7uKM.js} +1 -1
  80. package/dist/docs/assets/chunks/{chunk-4TB4RGXK.CzYKuv3I.js → chunk-4TB4RGXK.RBYX5ywX.js} +1 -1
  81. package/dist/docs/assets/chunks/{chunk-55IACEB6.C7_tcJZD.js → chunk-55IACEB6.Br05HoEb.js} +1 -1
  82. package/dist/docs/assets/chunks/{chunk-EDXVE4YY.DeTwQPVO.js → chunk-EDXVE4YY.BD_7QS60.js} +1 -1
  83. package/dist/docs/assets/chunks/{chunk-FMBD7UC4.DhMTl7ut.js → chunk-FMBD7UC4.BOPnMabX.js} +1 -1
  84. package/dist/docs/assets/chunks/{chunk-OYMX7WX6.Me7f5hEp.js → chunk-OYMX7WX6.DmGIdP8i.js} +1 -1
  85. package/dist/docs/assets/chunks/{chunk-QZHKN3VN.D0E0Bb6g.js → chunk-QZHKN3VN.CGHmolCB.js} +1 -1
  86. package/dist/docs/assets/chunks/{chunk-YZCP3GAM.CdOOBFYL.js → chunk-YZCP3GAM.C_Uhs25v.js} +1 -1
  87. package/dist/docs/assets/chunks/classDiagram-6PBFFD2Q.CtO2atCr.js +1 -0
  88. package/dist/docs/assets/chunks/classDiagram-v2-HSJHXN6E.CtO2atCr.js +1 -0
  89. package/dist/docs/assets/chunks/clone.hfsCtgP4.js +1 -0
  90. package/dist/docs/assets/chunks/{cose-bilkent-S5V4N54A.BNbGESzN.js → cose-bilkent-S5V4N54A.DsU6xpcZ.js} +1 -1
  91. package/dist/docs/assets/chunks/{dagre-KV5264BT.zU7Lu_xJ.js → dagre-KV5264BT.BqQLDcoU.js} +1 -1
  92. package/dist/docs/assets/chunks/{diagram-5BDNPKRD.B9qOdE5h.js → diagram-5BDNPKRD.Cgv8uUNF.js} +1 -1
  93. package/dist/docs/assets/chunks/{diagram-G4DWMVQ6.D8X-sf77.js → diagram-G4DWMVQ6.BXHPSXh_.js} +1 -1
  94. package/dist/docs/assets/chunks/{diagram-MMDJMWI5.CW7MvMlE.js → diagram-MMDJMWI5.CgJzo8f_.js} +1 -1
  95. package/dist/docs/assets/chunks/{diagram-TYMM5635.J489G0Nd.js → diagram-TYMM5635.CfiN6lgT.js} +1 -1
  96. package/dist/docs/assets/chunks/{erDiagram-SMLLAGMA.BkW7tGfs.js → erDiagram-SMLLAGMA.8n_hHzAd.js} +1 -1
  97. package/dist/docs/assets/chunks/{flowDiagram-DWJPFMVM.jc9iWORD.js → flowDiagram-DWJPFMVM.B2pb1Dv_.js} +1 -1
  98. package/dist/docs/assets/chunks/{ganttDiagram-T4ZO3ILL.B-UQfd9E.js → ganttDiagram-T4ZO3ILL.BFih4ucI.js} +1 -1
  99. package/dist/docs/assets/chunks/{gitGraphDiagram-UUTBAWPF.DFzrTSlJ.js → gitGraphDiagram-UUTBAWPF.CqZ8PTl8.js} +1 -1
  100. package/dist/docs/assets/chunks/{graph.C5IB6_e_.js → graph.0ufsI9gu.js} +1 -1
  101. package/dist/docs/assets/chunks/{infoDiagram-42DDH7IO.DwF0-c8L.js → infoDiagram-42DDH7IO.BkPRFww4.js} +1 -1
  102. package/dist/docs/assets/chunks/{ishikawaDiagram-UXIWVN3A.fBaTqzE7.js → ishikawaDiagram-UXIWVN3A.DCRK-cVX.js} +1 -1
  103. package/dist/docs/assets/chunks/{journeyDiagram-VCZTEJTY.CM8gDVJy.js → journeyDiagram-VCZTEJTY.BFyAJo33.js} +1 -1
  104. package/dist/docs/assets/chunks/{kanban-definition-6JOO6SKY.YiD1p0LB.js → kanban-definition-6JOO6SKY.CmA2SoGc.js} +1 -1
  105. package/dist/docs/assets/chunks/{layout.6Um-DVJT.js → layout.CYY-CbMr.js} +1 -1
  106. package/dist/docs/assets/chunks/{linear.DcTeg4Hn.js → linear.DeeDV4Oq.js} +1 -1
  107. package/dist/docs/assets/chunks/{min.CIxkY8Fe.js → min.BL3XTBN2.js} +1 -1
  108. package/dist/docs/assets/chunks/{mindmap-definition-QFDTVHPH.D4QM_voR.js → mindmap-definition-QFDTVHPH.BcbY-G6H.js} +1 -1
  109. package/dist/docs/assets/chunks/{pieDiagram-DEJITSTG.nmB309G1.js → pieDiagram-DEJITSTG.dzDcQnPE.js} +1 -1
  110. package/dist/docs/assets/chunks/{quadrantDiagram-34T5L4WZ.D1HtZR3C.js → quadrantDiagram-34T5L4WZ.RxR0m5iK.js} +1 -1
  111. package/dist/docs/assets/chunks/{requirementDiagram-MS252O5E.CZgQWob-.js → requirementDiagram-MS252O5E.DflaXb6Q.js} +1 -1
  112. package/dist/docs/assets/chunks/{sankeyDiagram-XADWPNL6.DtiBfU-P.js → sankeyDiagram-XADWPNL6.BteLKQAe.js} +1 -1
  113. package/dist/docs/assets/chunks/{sequenceDiagram-FGHM5R23.Cld4gDSt.js → sequenceDiagram-FGHM5R23.BD8jM8oz.js} +1 -1
  114. package/dist/docs/assets/chunks/{stateDiagram-FHFEXIEX.DatP823_.js → stateDiagram-FHFEXIEX.C8SBkbPH.js} +1 -1
  115. package/dist/docs/assets/chunks/stateDiagram-v2-QKLJ7IA2.BLz7Qyo3.js +1 -0
  116. package/dist/docs/assets/chunks/{theme.D5jbBys7.js → theme.DiViIOLe.js} +2 -2
  117. package/dist/docs/assets/chunks/{timeline-definition-GMOUNBTQ.DwQLI2be.js → timeline-definition-GMOUNBTQ.D64XF5dV.js} +1 -1
  118. package/dist/docs/assets/chunks/{vennDiagram-DHZGUBPP.a5yMfnsa.js → vennDiagram-DHZGUBPP.CwmeYan-.js} +1 -1
  119. package/dist/docs/assets/chunks/{wardley-RL74JXVD.B-FXivgT.js → wardley-RL74JXVD.DmAlXlpu.js} +1 -1
  120. package/dist/docs/assets/chunks/{wardleyDiagram-NUSXRM2D.Dz--Opy3.js → wardleyDiagram-NUSXRM2D.5VJ2-5K0.js} +1 -1
  121. package/dist/docs/assets/chunks/{xychartDiagram-5P7HB3ND.Dl8w8TeT.js → xychartDiagram-5P7HB3ND.Cl6_fZVC.js} +1 -1
  122. package/dist/docs/assets/{guides_hooks.md.Bfj0pK91.js → guides_hooks.md.B2XfGX50.js} +7 -3
  123. package/dist/docs/assets/{guides_mcp-oauth.md.BM_eFC0L.js → guides_mcp-oauth.md.Cxq2TxBB.js} +3 -3
  124. package/dist/docs/assets/{guides_mcp-oauth.md.BM_eFC0L.lean.js → guides_mcp-oauth.md.Cxq2TxBB.lean.js} +1 -1
  125. package/dist/docs/assets/guides_opentelemetry.md.D4wO7_8v.js +37 -0
  126. package/dist/docs/assets/guides_opentelemetry.md.D4wO7_8v.lean.js +1 -0
  127. package/dist/docs/assets/{guides_slack.md.Bn-WupSE.js → guides_slack.md.ClIyi7FI.js} +8 -3
  128. package/dist/docs/assets/{guides_slack.md.Bn-WupSE.lean.js → guides_slack.md.ClIyi7FI.lean.js} +1 -1
  129. package/dist/docs/assets/{reference_agent-config.md.IplwL25I.js → reference_agent-config.md.CGSx8COP.js} +6 -2
  130. package/dist/docs/assets/{reference_agent-config.md.IplwL25I.lean.js → reference_agent-config.md.CGSx8COP.lean.js} +1 -1
  131. package/dist/docs/assets/{reference_channels.md.Bxaa020x.js → reference_channels.md.CNNIS6K7.js} +1 -1
  132. package/dist/docs/assets/{reference_hooks.md.B1jq3oGl.js → reference_hooks.md.CROr0QgC.js} +13 -7
  133. package/dist/docs/assets/{reference_hooks.md.B1jq3oGl.lean.js → reference_hooks.md.CROr0QgC.lean.js} +1 -1
  134. package/dist/docs/assets/{reference_schedules.md.03Ryy9ca.js → reference_schedules.md.BqWnJES4.js} +3 -3
  135. package/dist/docs/assets/reference_sessions.md.Bi6lHttM.js +22 -0
  136. package/dist/docs/assets/reference_sessions.md.Bi6lHttM.lean.js +1 -0
  137. package/dist/docs/assets/{reference_skills.md.C2GWh7g8.js → reference_skills.md.Ckddg6KX.js} +3 -3
  138. package/dist/docs/assets/{reference_tools.md.-6pypsWt.js → reference_tools.md.Bo0UfT0a.js} +1 -1
  139. package/dist/docs/assets/{style.nMsabY-V.css → style.B9o0luvp.css} +1 -1
  140. package/dist/docs/building-with-agents.html +37 -37
  141. package/dist/docs/changelog.html +60 -0
  142. package/dist/docs/changelog.md +86 -0
  143. package/dist/docs/deployment.html +37 -37
  144. package/dist/docs/evals.html +37 -37
  145. package/dist/docs/guides/agent-to-agent.html +37 -37
  146. package/dist/docs/guides/bitbucket.html +37 -37
  147. package/dist/docs/guides/cloud-agents.html +37 -37
  148. package/dist/docs/guides/convert-automation.html +37 -37
  149. package/dist/docs/guides/export-grokbot.html +37 -37
  150. package/dist/docs/guides/github.html +37 -37
  151. package/dist/docs/guides/gitlab.html +37 -37
  152. package/dist/docs/guides/grokbot-agents.html +37 -37
  153. package/dist/docs/guides/hooks.html +45 -41
  154. package/dist/docs/guides/hooks.md +7 -3
  155. package/dist/docs/guides/improve.html +37 -37
  156. package/dist/docs/guides/jev.html +37 -37
  157. package/dist/docs/guides/mcp-oauth.html +39 -39
  158. package/dist/docs/guides/mcp-oauth.md +12 -0
  159. package/dist/docs/guides/migrate.html +37 -37
  160. package/dist/docs/guides/opentelemetry.html +62 -70
  161. package/dist/docs/guides/opentelemetry.md +149 -179
  162. package/dist/docs/guides/pagerduty.html +37 -37
  163. package/dist/docs/guides/slack.html +44 -39
  164. package/dist/docs/guides/slack.md +41 -0
  165. package/dist/docs/guides/webhooks.html +37 -37
  166. package/dist/docs/hashmap.json +1 -1
  167. package/dist/docs/hillclimbing.html +37 -37
  168. package/dist/docs/index.html +37 -37
  169. package/dist/docs/llms-full.txt +385 -193
  170. package/dist/docs/llms.txt +2 -1
  171. package/dist/docs/quickstart.html +37 -37
  172. package/dist/docs/reference/agent-config.html +42 -38
  173. package/dist/docs/reference/agent-config.md +21 -1
  174. package/dist/docs/reference/artifacts.html +37 -37
  175. package/dist/docs/reference/channels.html +38 -38
  176. package/dist/docs/reference/channels.md +5 -1
  177. package/dist/docs/reference/cli.html +37 -37
  178. package/dist/docs/reference/connections.html +37 -37
  179. package/dist/docs/reference/evals.html +37 -37
  180. package/dist/docs/reference/extensions.html +37 -37
  181. package/dist/docs/reference/hooks.html +49 -43
  182. package/dist/docs/reference/hooks.md +10 -5
  183. package/dist/docs/reference/http-api.html +37 -37
  184. package/dist/docs/reference/instructions.html +37 -37
  185. package/dist/docs/reference/memory.html +37 -37
  186. package/dist/docs/reference/playground.html +36 -36
  187. package/dist/docs/reference/project-layout.html +37 -37
  188. package/dist/docs/reference/prompt.html +37 -37
  189. package/dist/docs/reference/schedules.html +40 -40
  190. package/dist/docs/reference/sessions.html +58 -37
  191. package/dist/docs/reference/sessions.md +46 -1
  192. package/dist/docs/reference/skills.html +40 -40
  193. package/dist/docs/reference/subagents.html +37 -37
  194. package/dist/docs/reference/tools.html +39 -39
  195. package/dist/docs/reference/tools.md +3 -3
  196. package/dist/docs/templates/agentic-owners.html +37 -37
  197. package/dist/docs/templates/grokbot-agents.html +37 -37
  198. package/dist/docs/templates/security-reviewer.html +37 -37
  199. package/dist/docs/templates/thermo-quality-review.html +37 -37
  200. package/dist/docs/templates/thermo-review.html +37 -37
  201. package/dist/docs/templates/triage.html +37 -37
  202. package/dist/docs/troubleshooting.html +36 -36
  203. package/dist/extensions/cursor-cloud-agents/extension.d.ts.map +1 -1
  204. package/dist/extensions/cursor-cloud-agents/extension.js +15 -15
  205. package/dist/extensions/cursor-cloud-agents/lib/backend.js +1 -1
  206. package/dist/extensions/cursor-cloud-agents/lib/fleet.js +1 -1
  207. package/dist/extensions/cursor-cloud-agents/lib/inputs.d.ts +1 -1
  208. package/dist/extensions/cursor-cloud-agents/lib/inputs.d.ts.map +1 -1
  209. package/dist/extensions/cursor-cloud-agents/lib/inputs.js +1 -1
  210. package/dist/extensions/cursor-cloud-agents/reminders/cloud-agent-stop-watch.js +1 -1
  211. package/dist/extensions/cursor-cloud-agents/tools/launch.js +1 -1
  212. package/dist/extensions/cursor-cloud-agents/tools/list.js +1 -1
  213. package/dist/extensions/cursor-cloud-agents/tools/reply.js +1 -1
  214. package/dist/extensions/cursor-grokbot-agents/extension.d.ts.map +1 -1
  215. package/dist/extensions/cursor-grokbot-agents/extension.js +7 -3
  216. package/dist/extensions/cursor-grokbot-agents/lib/backend.js +1 -1
  217. package/dist/extensions/cursor-grokbot-agents/lib/contacts.js +1 -1
  218. package/dist/extensions/cursor-grokbot-agents/lib/inputs.d.ts +1 -1
  219. package/dist/extensions/cursor-grokbot-agents/lib/inputs.d.ts.map +1 -1
  220. package/dist/extensions/cursor-grokbot-agents/lib/inputs.js +1 -1
  221. package/dist/extensions/cursor-grokbot-agents/tools/ask.js +1 -1
  222. package/dist/extensions/cursor-grokbot-agents/tools/check.js +1 -1
  223. package/dist/extensions/cursor-grokbot-agents/tools/interrupt.js +1 -1
  224. package/dist/extensions/cursor-grokbot-agents/tools/list.js +1 -1
  225. package/dist/extensions/improve/extension.js +1 -1
  226. package/dist/extensions/jev/extension.js +2 -2
  227. package/dist/extensions/jev/tools/evaluate.js +3 -3
  228. package/dist/extensions/slack-communication/extension.js +1 -1
  229. package/dist/extensions/slack-communication/tools/delete-message.js +1 -1
  230. package/dist/extensions/slack-communication/tools/edit-message.d.ts.map +1 -1
  231. package/dist/extensions/slack-communication/tools/edit-message.js +3 -6
  232. package/dist/extensions/slack-communication/tools/post-card.js +1 -1
  233. package/dist/extensions/slack-communication/tools/post-file.js +1 -1
  234. package/dist/extensions/slack-communication/tools/post-update.d.ts.map +1 -1
  235. package/dist/extensions/slack-communication/tools/post-update.js +3 -6
  236. package/dist/extensions/slack-communication/tools/react.js +1 -1
  237. package/dist/extensions/slack-communication/tools/set-status.js +1 -1
  238. package/dist/extensions.d.ts +1 -1
  239. package/dist/extensions.js +1 -1
  240. package/dist/index.d.ts +14 -11
  241. package/dist/index.d.ts.map +1 -1
  242. package/dist/index.js +8 -4
  243. package/dist/internal/as-of.d.ts +2 -0
  244. package/dist/internal/as-of.d.ts.map +1 -1
  245. package/dist/internal/as-of.js +2 -0
  246. package/dist/internal/builtin-tools/reminders.js +1 -1
  247. package/dist/internal/cli-deploy.d.ts.map +1 -1
  248. package/dist/internal/cli-deploy.js +18 -10
  249. package/dist/internal/continuation.d.ts +3 -0
  250. package/dist/internal/continuation.d.ts.map +1 -0
  251. package/dist/internal/continuation.js +1 -0
  252. package/dist/internal/conversation-mirror.d.ts +5 -0
  253. package/dist/internal/conversation-mirror.d.ts.map +1 -1
  254. package/dist/internal/conversation-mirror.js +12 -1
  255. package/dist/internal/convert-automation/convert-workflow.js +1 -1
  256. package/dist/internal/convert-grokbot/answers.d.ts.map +1 -1
  257. package/dist/internal/convert-grokbot/answers.js +10 -8
  258. package/dist/internal/convert-grokbot/recipe.d.ts +1 -1
  259. package/dist/internal/convert-grokbot/recipe.d.ts.map +1 -1
  260. package/dist/internal/convert-grokbot/recipe.js +1 -1
  261. package/dist/internal/cursor/account-mcp.d.ts.map +1 -1
  262. package/dist/internal/cursor/account-mcp.js +2 -0
  263. package/dist/internal/cursor/backend-client.d.ts +8 -3
  264. package/dist/internal/cursor/backend-client.d.ts.map +1 -1
  265. package/dist/internal/cursor/backend-client.js +8 -3
  266. package/dist/internal/cursor/credentials.d.ts +2 -2
  267. package/dist/internal/cursor/credentials.d.ts.map +1 -1
  268. package/dist/internal/cursor/credentials.js +1 -1
  269. package/dist/internal/cursor-account-mcp-auth.d.ts +6 -2
  270. package/dist/internal/cursor-account-mcp-auth.d.ts.map +1 -1
  271. package/dist/internal/cursor-account-mcp-auth.js +15 -6
  272. package/dist/internal/deferred-channel-session.d.ts +5 -4
  273. package/dist/internal/deferred-channel-session.d.ts.map +1 -1
  274. package/dist/internal/deferred-channel-session.js +6 -4
  275. package/dist/internal/deploy-client.d.ts +5 -0
  276. package/dist/internal/deploy-client.d.ts.map +1 -1
  277. package/dist/internal/deploy-client.js +3 -3
  278. package/dist/internal/deploy-manifest.js +2 -2
  279. package/dist/internal/describe-error.d.ts +2 -0
  280. package/dist/internal/describe-error.d.ts.map +1 -1
  281. package/dist/internal/describe-error.js +2 -0
  282. package/dist/internal/discovery/context.d.ts.map +1 -1
  283. package/dist/internal/discovery/context.js +1 -2
  284. package/dist/internal/discovery/cursor-plugin.js +8 -8
  285. package/dist/internal/discovery/extensions.js +15 -8
  286. package/dist/internal/discovery/info.d.ts +2 -2
  287. package/dist/internal/discovery/info.d.ts.map +1 -1
  288. package/dist/internal/discovery/info.js +6 -9
  289. package/dist/internal/discovery/instrumentation.d.ts +10 -0
  290. package/dist/internal/discovery/instrumentation.d.ts.map +1 -0
  291. package/dist/internal/discovery/instrumentation.js +29 -0
  292. package/dist/internal/discovery/modules.d.ts.map +1 -1
  293. package/dist/internal/discovery/modules.js +4 -4
  294. package/dist/internal/discovery/project-public.d.ts +16 -0
  295. package/dist/internal/discovery/project-public.d.ts.map +1 -0
  296. package/dist/internal/discovery/project-public.js +54 -0
  297. package/dist/internal/discovery/project.d.ts.map +1 -1
  298. package/dist/internal/discovery/project.js +13 -3
  299. package/dist/internal/discovery/services.d.ts +5 -4
  300. package/dist/internal/discovery/services.d.ts.map +1 -1
  301. package/dist/internal/discovery/services.js +12 -6
  302. package/dist/internal/event-mapper.d.ts.map +1 -1
  303. package/dist/internal/event-mapper.js +1 -0
  304. package/dist/internal/factory-resource-channel.d.ts +1 -1
  305. package/dist/internal/factory-resource-channel.d.ts.map +1 -1
  306. package/dist/internal/filesystem/nearest.d.ts +1 -0
  307. package/dist/internal/filesystem/nearest.d.ts.map +1 -1
  308. package/dist/internal/filesystem/nearest.js +1 -0
  309. package/dist/internal/filesystem/tools.d.ts.map +1 -1
  310. package/dist/internal/filesystem/tools.js +1 -1
  311. package/dist/internal/handleAgentServeTrigger.d.ts +10 -0
  312. package/dist/internal/handleAgentServeTrigger.d.ts.map +1 -1
  313. package/dist/internal/handleAgentServeTrigger.js +3 -0
  314. package/dist/internal/hmac-secret-values.d.ts +1 -1
  315. package/dist/internal/hmac-secret-values.d.ts.map +1 -1
  316. package/dist/internal/host-otel.d.ts +1 -1
  317. package/dist/internal/host-otel.d.ts.map +1 -1
  318. package/dist/internal/host-otel.js +5 -0
  319. package/dist/internal/hosted-delivery.d.ts.map +1 -1
  320. package/dist/internal/hosted-delivery.js +6 -2
  321. package/dist/internal/http-channel.d.ts.map +1 -1
  322. package/dist/internal/http-channel.js +1 -0
  323. package/dist/internal/ids.d.ts +8 -0
  324. package/dist/internal/ids.d.ts.map +1 -1
  325. package/dist/internal/ids.js +20 -0
  326. package/dist/internal/init-scaffold.js +1 -1
  327. package/dist/internal/interview/agent-questions.d.ts +1 -1
  328. package/dist/internal/interview/agent-questions.d.ts.map +1 -1
  329. package/dist/internal/interview/agent-questions.js +1 -1
  330. package/dist/internal/interview/question.d.ts +2 -2
  331. package/dist/internal/interview/question.d.ts.map +1 -1
  332. package/dist/internal/interview/question.js +2 -2
  333. package/dist/internal/json-schema.d.ts.map +1 -1
  334. package/dist/internal/json-schema.js +3 -7
  335. package/dist/internal/mcp-endpoint.d.ts +16 -4
  336. package/dist/internal/mcp-endpoint.d.ts.map +1 -1
  337. package/dist/internal/mcp-endpoint.js +18 -6
  338. package/dist/internal/mcp-host.d.ts +9 -0
  339. package/dist/internal/mcp-host.d.ts.map +1 -1
  340. package/dist/internal/mcp-host.js +15 -0
  341. package/dist/internal/otel/collector.d.ts +5 -0
  342. package/dist/internal/otel/collector.d.ts.map +1 -1
  343. package/dist/internal/otel/collector.js +24 -5
  344. package/dist/internal/otel/config.d.ts +31 -21
  345. package/dist/internal/otel/config.d.ts.map +1 -1
  346. package/dist/internal/otel/config.js +121 -140
  347. package/dist/internal/otel/conversation-span-processor.d.ts +9 -0
  348. package/dist/internal/otel/conversation-span-processor.d.ts.map +1 -0
  349. package/dist/internal/otel/conversation-span-processor.js +34 -0
  350. package/dist/internal/otel/customer.d.ts +52 -0
  351. package/dist/internal/otel/customer.d.ts.map +1 -0
  352. package/dist/internal/otel/customer.js +727 -0
  353. package/dist/internal/otel/runtime.d.ts +12 -16
  354. package/dist/internal/otel/runtime.d.ts.map +1 -1
  355. package/dist/internal/otel/runtime.js +30 -234
  356. package/dist/internal/otel-env.d.ts +6 -0
  357. package/dist/internal/otel-env.d.ts.map +1 -0
  358. package/dist/internal/otel-env.js +5 -0
  359. package/dist/internal/reminder-runner.d.ts +9 -4
  360. package/dist/internal/reminder-runner.d.ts.map +1 -1
  361. package/dist/internal/reminder-runner.js +12 -10
  362. package/dist/internal/reminder-schedule.d.ts +1 -0
  363. package/dist/internal/reminder-schedule.d.ts.map +1 -1
  364. package/dist/internal/reminder-schedule.js +1 -0
  365. package/dist/internal/sdk-runner.d.ts +2 -0
  366. package/dist/internal/sdk-runner.d.ts.map +1 -1
  367. package/dist/internal/sdk-runner.js +149 -13
  368. package/dist/internal/server.d.ts +4 -1
  369. package/dist/internal/server.d.ts.map +1 -1
  370. package/dist/internal/server.js +25 -24
  371. package/dist/internal/session-engine.d.ts +27 -0
  372. package/dist/internal/session-engine.d.ts.map +1 -1
  373. package/dist/internal/session-engine.js +149 -21
  374. package/dist/internal/slack-provision-client.js +1 -1
  375. package/dist/internal/store-api-protocol.d.ts +1 -1
  376. package/dist/internal/store-api-protocol.d.ts.map +1 -1
  377. package/dist/internal/store-api-protocol.js +1 -1
  378. package/dist/internal/update-check.d.ts +2 -2
  379. package/dist/internal/update-check.d.ts.map +1 -1
  380. package/dist/internal/update-check.js +3 -3
  381. package/dist/internal/zod3-datetime.d.ts +12 -0
  382. package/dist/internal/zod3-datetime.d.ts.map +1 -0
  383. package/dist/internal/zod3-datetime.js +17 -0
  384. package/dist/otel-public.d.ts +2 -3
  385. package/dist/otel-public.d.ts.map +1 -1
  386. package/dist/otel-public.js +2 -2
  387. package/dist/otel.d.ts +3 -102
  388. package/dist/otel.d.ts.map +1 -1
  389. package/dist/otel.js +61 -97
  390. package/dist/playground/assets/index-CyPkf2y7.css +1 -0
  391. package/dist/playground/assets/{index-CHk6O92d.js → index-DpbzbqFY.js} +38 -38
  392. package/dist/playground/index.html +2 -2
  393. package/dist/public-deprecated.d.ts +36 -0
  394. package/dist/public-deprecated.d.ts.map +1 -0
  395. package/dist/public-deprecated.js +39 -0
  396. package/dist/tools.d.ts +3 -3
  397. package/dist/tools.d.ts.map +1 -1
  398. package/dist/tools.js +1 -1
  399. package/dist/types.d.ts +221 -90
  400. package/dist/types.d.ts.map +1 -1
  401. package/docs/changelog.md +91 -0
  402. package/docs/guides/hooks.md +7 -3
  403. package/docs/guides/mcp-oauth.md +12 -0
  404. package/docs/guides/opentelemetry.md +149 -184
  405. package/docs/guides/slack.md +41 -0
  406. package/docs/reference/agent-config.md +21 -1
  407. package/docs/reference/channels.md +5 -1
  408. package/docs/reference/hooks.md +10 -5
  409. package/docs/reference/sessions.md +46 -1
  410. package/docs/reference/tools.md +3 -3
  411. package/package.json +31 -7
  412. package/schemas/grokbot-answers.schema.json +11 -0
  413. package/skills/framework-map/SKILL.md +2 -1
  414. package/skills/otel/SKILL.md +28 -48
  415. package/templates/code-wiki/evals/wiki.eval.ts +2 -2
  416. package/dist/docs/assets/chunks/@localSearchIndexroot.oGqZumnJ.js +0 -1
  417. package/dist/docs/assets/chunks/channel.Dt4aweTm.js +0 -1
  418. package/dist/docs/assets/chunks/classDiagram-6PBFFD2Q.DGUHZs6j.js +0 -1
  419. package/dist/docs/assets/chunks/classDiagram-v2-HSJHXN6E.DGUHZs6j.js +0 -1
  420. package/dist/docs/assets/chunks/clone.DWf3k0Z0.js +0 -1
  421. package/dist/docs/assets/chunks/stateDiagram-v2-QKLJ7IA2.C0571l4D.js +0 -1
  422. package/dist/docs/assets/guides_opentelemetry.md.DBQtp7_V.js +0 -45
  423. package/dist/docs/assets/guides_opentelemetry.md.DBQtp7_V.lean.js +0 -1
  424. package/dist/docs/assets/reference_sessions.md.C8FXuGwk.js +0 -1
  425. package/dist/docs/assets/reference_sessions.md.C8FXuGwk.lean.js +0 -1
  426. package/dist/playground/assets/index-BdMwybMt.css +0 -1
  427. package/templates/grokbot-agents/.gitignore +0 -4
  428. package/templates/security-help/.gitignore +0 -4
  429. /package/dist/docs/assets/{guides_hooks.md.Bfj0pK91.lean.js → guides_hooks.md.B2XfGX50.lean.js} +0 -0
  430. /package/dist/docs/assets/{reference_channels.md.Bxaa020x.lean.js → reference_channels.md.CNNIS6K7.lean.js} +0 -0
  431. /package/dist/docs/assets/{reference_schedules.md.03Ryy9ca.lean.js → reference_schedules.md.BqWnJES4.lean.js} +0 -0
  432. /package/dist/docs/assets/{reference_skills.md.C2GWh7g8.lean.js → reference_skills.md.Ckddg6KX.lean.js} +0 -0
  433. /package/dist/docs/assets/{reference_tools.md.-6pypsWt.lean.js → reference_tools.md.Bo0UfT0a.lean.js} +0 -0
@@ -0,0 +1,727 @@
1
+ /**
2
+ * Bake-time OpenTelemetry providers. Discovery installs them before other
3
+ * agent modules load. Real OTLP exporters attach from `OTEL_*` variables
4
+ * at the first secret load.
5
+ */
6
+ import { context, metrics, propagation, trace } from "@opentelemetry/api";
7
+ import { logs } from "@opentelemetry/api-logs";
8
+ import { ExportResultCode } from "@opentelemetry/core";
9
+ import { OTLPLogExporter as OTLPLogExporterHttp } from "@opentelemetry/exporter-logs-otlp-http";
10
+ import { OTLPLogExporter as OTLPLogExporterProto } from "@opentelemetry/exporter-logs-otlp-proto";
11
+ import { DeltaTemporalitySelector, OTLPMetricExporter as OTLPMetricExporterHttp, } from "@opentelemetry/exporter-metrics-otlp-http";
12
+ import { OTLPMetricExporter as OTLPMetricExporterProto } from "@opentelemetry/exporter-metrics-otlp-proto";
13
+ import { OTLPTraceExporter as OTLPTraceExporterHttp } from "@opentelemetry/exporter-trace-otlp-http";
14
+ import { OTLPTraceExporter as OTLPTraceExporterProto } from "@opentelemetry/exporter-trace-otlp-proto";
15
+ import { resourceFromAttributes } from "@opentelemetry/resources";
16
+ import { BatchLogRecordProcessor, LoggerProvider, } from "@opentelemetry/sdk-logs";
17
+ import { MeterProvider, PeriodicExportingMetricReader, } from "@opentelemetry/sdk-metrics";
18
+ import { BatchSpanProcessor, } from "@opentelemetry/sdk-trace-base";
19
+ import { NodeTracerProvider } from "@opentelemetry/sdk-trace-node";
20
+ import { ATTR_DEPLOYMENT_ENVIRONMENT_NAME, ATTR_SERVICE_NAME, ATTR_SERVICE_NAMESPACE, ATTR_SERVICE_VERSION, } from "@opentelemetry/semantic-conventions";
21
+ import { UNKNOWN_SERVICE_NAME, exportersForSignal, parseOtelHeaders, resolveOtelConfig, } from "./config.js";
22
+ import { conversationIdSpanProcessor } from "./conversation-span-processor.js";
23
+ import { metricTemporalityPreference, metricTemporalitySelector, installOtelDiagLogger, raceOtelForceFlush, warnEgress, } from "./runtime.js";
24
+ import { installOutboundFetchInstrumentation } from "../../otel.js";
25
+ const METRIC_EXPORT_INTERVAL_MS = 10_000;
26
+ const FRAMEWORK_SCOPE = "agent_sdk";
27
+ /** Matches the batch processor's default `maxQueueSize`. */
28
+ const MAX_HELD_PER_SIGNAL = 2048;
29
+ let armed;
30
+ let secrets = deferred();
31
+ let loggedTemporality = false;
32
+ let loggedLateSampler = false;
33
+ let loggedLateInterval = false;
34
+ let samplerAtInstall;
35
+ let metricIntervalAtInstall = METRIC_EXPORT_INTERVAL_MS;
36
+ /**
37
+ * One list for every copy of this module. A hosted process loads `dist/`
38
+ * while an agent file can load `src/`. A per-module array would drop the mapper.
39
+ */
40
+ const OTEL_ENV_CONTRIBUTORS = Symbol.for("cursor.bdk.otelEnvContributors");
41
+ function otelEnvContributors() {
42
+ const slot = globalThis;
43
+ let list = slot[OTEL_ENV_CONTRIBUTORS];
44
+ if (list === undefined) {
45
+ list = [];
46
+ slot[OTEL_ENV_CONTRIBUTORS] = list;
47
+ }
48
+ return list;
49
+ }
50
+ /**
51
+ * Register a mapper that runs when secrets load, before exporters are built.
52
+ * Factory agents use this to copy their own secret names into `OTEL_*`.
53
+ * Not exported from `@cursor/bdk/otel`.
54
+ */
55
+ export function contributeOtelEnv(contribute) {
56
+ otelEnvContributors().push(contribute);
57
+ }
58
+ export function writeDatadogTraceEnv(env, input) {
59
+ if (foreignOtelHost(env, input.tracesUrl)) {
60
+ return;
61
+ }
62
+ if (!hasOtelEndpoint(env)) {
63
+ env.OTEL_EXPORTER_OTLP_TRACES_ENDPOINT = tracesSignalUrl(input.tracesUrl);
64
+ }
65
+ if (!nonEmpty(env.OTEL_SERVICE_NAME)) {
66
+ env.OTEL_SERVICE_NAME = input.serviceName;
67
+ }
68
+ env.OTEL_EXPORTER_OTLP_HEADERS = replaceHeader(env.OTEL_EXPORTER_OTLP_HEADERS, "dd-api-key", input.apiKey);
69
+ const attributes = parseResourceAttributes(env.OTEL_RESOURCE_ATTRIBUTES);
70
+ if (attributes[ATTR_DEPLOYMENT_ENVIRONMENT_NAME] === undefined &&
71
+ attributes["deployment.environment"] === undefined) {
72
+ const pair = `${ATTR_DEPLOYMENT_ENVIRONMENT_NAME}=${encodeURIComponent(input.environment)}`;
73
+ env.OTEL_RESOURCE_ATTRIBUTES =
74
+ env.OTEL_RESOURCE_ATTRIBUTES !== undefined && env.OTEL_RESOURCE_ATTRIBUTES.length > 0
75
+ ? `${env.OTEL_RESOURCE_ATTRIBUTES},${pair}`
76
+ : pair;
77
+ }
78
+ }
79
+ function tracesSignalUrl(url) {
80
+ const trimmed = url.replace(/\/$/, "");
81
+ if (/\/v1\/traces$/i.test(trimmed)) {
82
+ return trimmed;
83
+ }
84
+ return `${trimmed}/v1/traces`;
85
+ }
86
+ function foreignOtelHost(env, tracesUrl) {
87
+ const ours = hostnameOf(tracesUrl);
88
+ if (ours === undefined) {
89
+ return false;
90
+ }
91
+ for (const raw of [env.OTEL_EXPORTER_OTLP_ENDPOINT, env.OTEL_EXPORTER_OTLP_TRACES_ENDPOINT]) {
92
+ if (!nonEmpty(raw)) {
93
+ continue;
94
+ }
95
+ const host = hostnameOf(raw);
96
+ if (host !== undefined && host !== ours) {
97
+ return true;
98
+ }
99
+ }
100
+ return false;
101
+ }
102
+ function hostnameOf(raw) {
103
+ try {
104
+ return new URL(raw).hostname;
105
+ }
106
+ catch {
107
+ return undefined;
108
+ }
109
+ }
110
+ function replaceHeader(raw, name, value) {
111
+ const kept = (raw ?? "")
112
+ .split(",")
113
+ .map((part) => part.trim())
114
+ .filter((part) => {
115
+ if (part.length === 0) {
116
+ return false;
117
+ }
118
+ const idx = part.indexOf("=");
119
+ if (idx <= 0) {
120
+ return true;
121
+ }
122
+ return part.slice(0, idx).trim().toLowerCase() !== name.toLowerCase();
123
+ });
124
+ kept.push(`${name}=${encodeURIComponent(value)}`);
125
+ return kept.join(",");
126
+ }
127
+ function hasOtelEndpoint(env) {
128
+ return (nonEmpty(env.OTEL_EXPORTER_OTLP_ENDPOINT) || nonEmpty(env.OTEL_EXPORTER_OTLP_TRACES_ENDPOINT));
129
+ }
130
+ /** Resolves at the first secret load. Local serve resolves it at start. */
131
+ export function otelSecretsReady() {
132
+ return secrets.promise;
133
+ }
134
+ /**
135
+ * Install global trace, metric, and log providers before `agent.ts` loads.
136
+ * A second call does nothing. BDK shuts down a provider only when its
137
+ * registration installed that provider. If another SDK already owns a
138
+ * global, that provider stays and the new one is shut down.
139
+ */
140
+ export function installCustomerOtel() {
141
+ if (armed !== undefined) {
142
+ return;
143
+ }
144
+ const serviceName = deferred();
145
+ const serviceNamespace = deferred();
146
+ const serviceVersion = deferred();
147
+ const deploymentEnvironment = deferred();
148
+ const resource = resourceFromAttributes({
149
+ [ATTR_SERVICE_NAME]: serviceName.promise,
150
+ [ATTR_SERVICE_NAMESPACE]: serviceNamespace.promise,
151
+ [ATTR_SERVICE_VERSION]: serviceVersion.promise,
152
+ [ATTR_DEPLOYMENT_ENVIRONMENT_NAME]: deploymentEnvironment.promise,
153
+ });
154
+ const traces = new ForwardingSpanExporter();
155
+ const metricForwarder = new ForwardingMetricExporter();
156
+ const logForwarder = new ForwardingLogExporter();
157
+ const heldSpans = new ResourceGatedSpanProcessor(new BatchSpanProcessor(traces));
158
+ const heldLogs = new ResourceGatedLogProcessor(new BatchLogRecordProcessor(logForwarder));
159
+ const traceProvider = new NodeTracerProvider({
160
+ resource,
161
+ spanProcessors: [conversationIdSpanProcessor(), heldSpans],
162
+ });
163
+ metricIntervalAtInstall = metricIntervalFromEnv(process.env);
164
+ samplerAtInstall = process.env.OTEL_TRACES_SAMPLER;
165
+ const metricReader = new StartableMetricReader({
166
+ exporter: metricForwarder,
167
+ exportIntervalMillis: metricIntervalAtInstall,
168
+ });
169
+ metricForwarder.reader = metricReader;
170
+ const meterProvider = new MeterProvider({
171
+ resource,
172
+ readers: [metricReader],
173
+ });
174
+ const loggerProvider = new LoggerProvider({
175
+ resource,
176
+ processors: [heldLogs],
177
+ });
178
+ metricForwarder.temporality = metricTemporalitySelector("delta");
179
+ const owned = [];
180
+ const registered = {};
181
+ traceProvider.register();
182
+ if (tracerDelegate() === traceProvider) {
183
+ owned.push(traceProvider);
184
+ registered.tracer = traceProvider;
185
+ }
186
+ else {
187
+ void traceProvider.shutdown();
188
+ }
189
+ if (metrics.setGlobalMeterProvider(meterProvider)) {
190
+ owned.push(meterProvider);
191
+ registered.meter = meterProvider;
192
+ }
193
+ else {
194
+ void meterProvider.shutdown();
195
+ }
196
+ if (logs.setGlobalLoggerProvider(loggerProvider) === loggerProvider) {
197
+ owned.push(loggerProvider);
198
+ registered.logger = loggerProvider;
199
+ }
200
+ else {
201
+ void loggerProvider.shutdown();
202
+ }
203
+ armed = {
204
+ owned,
205
+ resource,
206
+ heldSpans,
207
+ heldLogs,
208
+ traces,
209
+ metrics: metricForwarder,
210
+ logs: logForwarder,
211
+ serviceName,
212
+ serviceNamespace,
213
+ serviceVersion,
214
+ deploymentEnvironment,
215
+ resourceSettled: false,
216
+ attached: false,
217
+ attachedKey: undefined,
218
+ registered,
219
+ };
220
+ }
221
+ /**
222
+ * Settle resource promises and attach OTLP exporters from the current env.
223
+ * Later calls keep the same URLs. Exporter headers are read on each export.
224
+ */
225
+ export function notifyOtelSecretsReady(input) {
226
+ const env = input.env ?? process.env;
227
+ for (const contribute of otelEnvContributors()) {
228
+ contribute(env);
229
+ }
230
+ try {
231
+ if (armed !== undefined) {
232
+ const resolved = resolveOtelConfig({
233
+ env,
234
+ defaultServiceName: input.defaultServiceName,
235
+ });
236
+ for (const warning of resolved.warnings) {
237
+ input.log(`[bdk:otel] warn: ${warning}`);
238
+ }
239
+ warnLateEnv(env, input.log);
240
+ const shouldExport = resolved.enabled && exportable(resolved);
241
+ if (!shouldExport) {
242
+ if (armed.attached) {
243
+ retireTargets(armed);
244
+ armed.attached = false;
245
+ armed.attachedKey = undefined;
246
+ }
247
+ }
248
+ else {
249
+ const key = exporterKey(resolved);
250
+ if (!armed.resourceSettled) {
251
+ settleResource(armed, env, input.defaultServiceName);
252
+ }
253
+ if (!armed.attached || armed.attachedKey !== key) {
254
+ retireTargets(armed);
255
+ attachExporters(armed, resolved, input.log);
256
+ warnEgress(resolved, input.egressDomains, input.log);
257
+ logTemporalityDefault(resolved, env, input.log);
258
+ armed.attached = true;
259
+ armed.attachedKey = key;
260
+ }
261
+ }
262
+ }
263
+ }
264
+ catch (error) {
265
+ input.log(`[bdk:otel] error: OTel config failed: ${error instanceof Error ? error.message : String(error)}`);
266
+ }
267
+ secrets.settle(undefined);
268
+ }
269
+ function exportable(resolved) {
270
+ return ((resolved.traces !== false && exportersForSignal(resolved.exporters, "traces").length > 0) ||
271
+ (resolved.metrics !== false && exportersForSignal(resolved.exporters, "metrics").length > 0) ||
272
+ (resolved.logs !== false && exportersForSignal(resolved.exporters, "logs").length > 0));
273
+ }
274
+ function exporterKey(resolved) {
275
+ // Unset and `otlp` share one exporter list. Record the logs choice so a later change reattaches.
276
+ const logs = resolved.logs === false ? "off" : "on";
277
+ return `${logs}|${resolved.exporters
278
+ .map((exporter) => `${exporter.url}|${exporter.protocol ?? ""}|${exporter.literalUrl === true ? "literal" : "base"}|${(exporter.signals ?? []).join("+")}`)
279
+ .join(",")}`;
280
+ }
281
+ function retireTargets(state) {
282
+ const targets = [...state.traces.targets, ...state.metrics.targets, ...state.logs.targets];
283
+ state.traces.targets = [];
284
+ state.metrics.targets = [];
285
+ state.logs.targets = [];
286
+ void Promise.allSettled(targets.map((target) => target.shutdown()));
287
+ }
288
+ function warnLateEnv(env, log) {
289
+ if (!loggedLateSampler && env.OTEL_TRACES_SAMPLER !== samplerAtInstall) {
290
+ loggedLateSampler = true;
291
+ log("[bdk:otel] warn: OTEL_TRACES_SAMPLER is read when the provider is built, before secrets load. Set it on the process, then restart.");
292
+ }
293
+ const interval = metricIntervalFromEnv(env);
294
+ if (!loggedLateInterval && interval !== metricIntervalAtInstall) {
295
+ loggedLateInterval = true;
296
+ log("[bdk:otel] warn: OTEL_METRIC_EXPORT_INTERVAL is read when the provider is built, before secrets load. Set it on the process, then restart.");
297
+ }
298
+ }
299
+ function logTemporalityDefault(resolved, env, log) {
300
+ if (loggedTemporality || resolved.metrics === false) {
301
+ return;
302
+ }
303
+ if (resolved.metrics.temporality === "delta" &&
304
+ !nonEmpty(env.OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE)) {
305
+ loggedTemporality = true;
306
+ log("[bdk:otel] metrics temporality is delta. Set OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE=cumulative for Prometheus or Grafana Cloud.");
307
+ }
308
+ }
309
+ function metricIntervalFromEnv(env) {
310
+ const raw = env.OTEL_METRIC_EXPORT_INTERVAL?.trim();
311
+ const value = raw === undefined ? Number.NaN : Number(raw);
312
+ if (!Number.isFinite(value) || value <= 0) {
313
+ return METRIC_EXPORT_INTERVAL_MS;
314
+ }
315
+ return value;
316
+ }
317
+ /**
318
+ * The runtime `serve` uses after discovery installs the providers.
319
+ * HTTP spans, the collector, and flush stay on one path.
320
+ */
321
+ export function createCustomerOtelRuntime(log, options = {}) {
322
+ installOtelDiagLogger(log);
323
+ const meter = metrics.getMeter(FRAMEWORK_SCOPE);
324
+ const runtime = {
325
+ config: resolveOtelConfig({ env: process.env, defaultServiceName: options.defaultServiceName }),
326
+ tracer: trace.getTracer(FRAMEWORK_SCOPE),
327
+ meter,
328
+ logger: logs.getLogger(FRAMEWORK_SCOPE),
329
+ httpDuration: meter.createHistogram("agent_sdk.http.duration", {
330
+ description: "HTTP request duration",
331
+ unit: "ms",
332
+ }),
333
+ forceFlush: () => raceOtelForceFlush(forceFlushGlobalOtel(), log),
334
+ shutdown: () => shutdownCustomerOtel(log),
335
+ };
336
+ return {
337
+ runtime,
338
+ reload() {
339
+ try {
340
+ // Mappers write OTEL_* during notify. The collector reads the config after that write.
341
+ notifyOtelSecretsReady({
342
+ log,
343
+ egressDomains: options.egressDomains,
344
+ defaultServiceName: options.defaultServiceName,
345
+ });
346
+ runtime.config = resolveOtelConfig({
347
+ env: process.env,
348
+ defaultServiceName: options.defaultServiceName,
349
+ });
350
+ if (runtime.config.enabled && runtime.config.traces !== false) {
351
+ installOutboundFetchInstrumentation();
352
+ }
353
+ }
354
+ catch (error) {
355
+ log(`[bdk:otel] error: OTel config failed: ${error instanceof Error ? error.message : String(error)}`);
356
+ }
357
+ },
358
+ };
359
+ }
360
+ export async function forceFlushGlobalOtel() {
361
+ await Promise.allSettled([tracerDelegate(), metrics.getMeterProvider(), loggerDelegate()].map((provider) => flushExporter(provider)));
362
+ }
363
+ async function shutdownCustomerOtel(log) {
364
+ const current = armed;
365
+ if (current === undefined) {
366
+ await raceOtelForceFlush(forceFlushGlobalOtel(), log);
367
+ return;
368
+ }
369
+ const mine = new Set(current.owned);
370
+ armed = undefined;
371
+ if (!current.resourceSettled) {
372
+ settleArmed(current, { serviceName: UNKNOWN_SERVICE_NAME });
373
+ }
374
+ const ownedTracer = mine.has(tracerDelegate());
375
+ const ownedMeter = mine.has(metrics.getMeterProvider());
376
+ const ownedLogger = mine.has(loggerDelegate());
377
+ await raceOtelForceFlush(Promise.all([
378
+ Promise.allSettled(current.owned.map((provider) => provider.shutdown())),
379
+ Promise.allSettled(globalProviders()
380
+ .filter((provider) => !mine.has(provider))
381
+ .map((provider) => flushExporter(provider))),
382
+ ]), log);
383
+ if (ownedTracer) {
384
+ trace.disable();
385
+ }
386
+ if (ownedMeter) {
387
+ metrics.disable();
388
+ }
389
+ if (ownedLogger) {
390
+ logs.disable();
391
+ }
392
+ secrets = deferred();
393
+ }
394
+ function globalProviders() {
395
+ return [tracerDelegate(), metrics.getMeterProvider(), loggerDelegate()];
396
+ }
397
+ /** True when agent code replaced a provider this process installed. */
398
+ export function otelProvidersReplaced() {
399
+ const registered = armed?.registered;
400
+ if (registered === undefined) {
401
+ return false;
402
+ }
403
+ return ((registered.tracer !== undefined && tracerDelegate() !== registered.tracer) ||
404
+ (registered.meter !== undefined && metrics.getMeterProvider() !== registered.meter) ||
405
+ (registered.logger !== undefined && loggerDelegate() !== registered.logger));
406
+ }
407
+ function tracerDelegate() {
408
+ const provider = trace.getTracerProvider();
409
+ return provider.getDelegate?.() ?? provider;
410
+ }
411
+ function loggerDelegate() {
412
+ return logs.getLoggerProvider();
413
+ }
414
+ /** Test isolation. Settles pending resource promises so a flush cannot wait forever. */
415
+ export async function resetCustomerOtelForTests() {
416
+ const current = armed;
417
+ armed = undefined;
418
+ if (current !== undefined) {
419
+ settleArmed(current);
420
+ await Promise.allSettled(current.owned.map((provider) => provider.shutdown()));
421
+ }
422
+ secrets.settle(undefined);
423
+ secrets = deferred();
424
+ otelEnvContributors().length = 0;
425
+ loggedTemporality = false;
426
+ loggedLateSampler = false;
427
+ loggedLateInterval = false;
428
+ trace.disable();
429
+ metrics.disable();
430
+ logs.disable();
431
+ context.disable();
432
+ propagation.disable();
433
+ }
434
+ function settleResource(state, env, defaultServiceName) {
435
+ if (state.resourceSettled) {
436
+ return;
437
+ }
438
+ const attributes = parseResourceAttributes(env.OTEL_RESOURCE_ATTRIBUTES);
439
+ const fromService = env.OTEL_SERVICE_NAME?.trim();
440
+ const attributeName = attributes[ATTR_SERVICE_NAME];
441
+ const serviceName = nonEmpty(fromService)
442
+ ? fromService
443
+ : nonEmpty(attributeName)
444
+ ? attributeName
445
+ : nonEmpty(defaultServiceName)
446
+ ? defaultServiceName
447
+ : UNKNOWN_SERVICE_NAME;
448
+ try {
449
+ const raw = state.resource.getRawAttributes();
450
+ const present = new Set(raw.map(([key]) => key));
451
+ for (const [key, value] of Object.entries(attributes)) {
452
+ if (present.has(key)) {
453
+ continue;
454
+ }
455
+ raw.push([key, value]);
456
+ }
457
+ }
458
+ finally {
459
+ settleArmed(state, {
460
+ serviceName,
461
+ serviceNamespace: attributes[ATTR_SERVICE_NAMESPACE],
462
+ serviceVersion: attributes[ATTR_SERVICE_VERSION],
463
+ deploymentEnvironment: attributes[ATTR_DEPLOYMENT_ENVIRONMENT_NAME],
464
+ });
465
+ }
466
+ }
467
+ function settleArmed(state, values = {}) {
468
+ if (state.resourceSettled) {
469
+ return;
470
+ }
471
+ state.serviceName.settle(values.serviceName);
472
+ state.serviceNamespace.settle(values.serviceNamespace);
473
+ state.serviceVersion.settle(values.serviceVersion);
474
+ state.deploymentEnvironment.settle(values.deploymentEnvironment);
475
+ state.resourceSettled = true;
476
+ state.heldSpans.release();
477
+ state.heldLogs.release();
478
+ }
479
+ function attachExporters(state, resolved, log) {
480
+ if (resolved.traces !== false) {
481
+ state.traces.targets = exportersForSignal(resolved.exporters, "traces").map((exporter) => isProtobuf(exporter.protocol)
482
+ ? new OTLPTraceExporterProto(otlpOptions(exporter.url, "traces", exporter.literalUrl === true))
483
+ : new OTLPTraceExporterHttp(otlpOptions(exporter.url, "traces", exporter.literalUrl === true)));
484
+ }
485
+ if (resolved.metrics !== false) {
486
+ const metricsConfig = resolved.metrics;
487
+ const metricExporters = exportersForSignal(resolved.exporters, "metrics");
488
+ state.metrics.temporality = metricTemporalitySelector(metricsConfig.temporality);
489
+ if (metricExporters.length > 0) {
490
+ state.metrics.start();
491
+ }
492
+ state.metrics.targets = metricExporters.map((exporter) => {
493
+ const options = {
494
+ ...otlpOptions(exporter.url, "metrics", exporter.literalUrl === true),
495
+ temporalityPreference: metricTemporalityPreference(metricsConfig, log),
496
+ };
497
+ return isProtobuf(exporter.protocol)
498
+ ? new OTLPMetricExporterProto(options)
499
+ : new OTLPMetricExporterHttp(options);
500
+ });
501
+ }
502
+ if (resolved.logs !== false) {
503
+ state.logs.targets = exportersForSignal(resolved.exporters, "logs").map((exporter) => isProtobuf(exporter.protocol)
504
+ ? new OTLPLogExporterProto(otlpOptions(exporter.url, "logs", exporter.literalUrl === true))
505
+ : new OTLPLogExporterHttp(otlpOptions(exporter.url, "logs", exporter.literalUrl === true)));
506
+ }
507
+ }
508
+ function otlpOptions(url, signal, literalUrl) {
509
+ const base = url.replace(/\/$/, "");
510
+ return {
511
+ url: literalUrl ? base : `${base}/v1/${signal}`,
512
+ headers: async () => parseOtelHeaders(process.env.OTEL_EXPORTER_OTLP_HEADERS),
513
+ };
514
+ }
515
+ function isProtobuf(protocol) {
516
+ return protocol !== "http/json";
517
+ }
518
+ function parseResourceAttributes(raw) {
519
+ const out = {};
520
+ if (raw === undefined || raw.trim().length === 0) {
521
+ return out;
522
+ }
523
+ for (const part of raw.split(",")) {
524
+ const idx = part.indexOf("=");
525
+ if (idx <= 0) {
526
+ continue;
527
+ }
528
+ const key = part.slice(0, idx).trim();
529
+ const value = decodeAttribute(part.slice(idx + 1).trim());
530
+ if (key.length > 0 && value.length > 0) {
531
+ out[key] = value;
532
+ }
533
+ }
534
+ return out;
535
+ }
536
+ function decodeAttribute(value) {
537
+ try {
538
+ return decodeURIComponent(value);
539
+ }
540
+ catch {
541
+ return value;
542
+ }
543
+ }
544
+ function nonEmpty(value) {
545
+ return value !== undefined && value.length > 0;
546
+ }
547
+ function deferred() {
548
+ let settle;
549
+ let settled = false;
550
+ const promise = new Promise((resolve) => {
551
+ settle = (value) => {
552
+ if (settled) {
553
+ return;
554
+ }
555
+ settled = true;
556
+ resolve(value);
557
+ };
558
+ });
559
+ return {
560
+ promise,
561
+ settle(value) {
562
+ settle?.(value);
563
+ },
564
+ };
565
+ }
566
+ async function flushExporter(target) {
567
+ if (!("forceFlush" in target) || typeof target.forceFlush !== "function") {
568
+ return;
569
+ }
570
+ await Promise.resolve(target.forceFlush.call(target));
571
+ }
572
+ /**
573
+ * Holds items until the resource settles. A batch processor waits on an
574
+ * unsettled resource with no limit, and each waiting batch stays in memory.
575
+ * With no endpoint the resource can stay unsettled for the process lifetime.
576
+ */
577
+ class HeldUntilSettled {
578
+ constructor(forward) {
579
+ this.forward = forward;
580
+ this.held = [];
581
+ }
582
+ push(item) {
583
+ if (this.held === undefined) {
584
+ this.forward(item);
585
+ return;
586
+ }
587
+ if (this.held.length < MAX_HELD_PER_SIGNAL) {
588
+ this.held.push(item);
589
+ }
590
+ }
591
+ release() {
592
+ const held = this.held;
593
+ if (held === undefined) {
594
+ return;
595
+ }
596
+ this.held = undefined;
597
+ for (const item of held) {
598
+ this.forward(item);
599
+ }
600
+ }
601
+ }
602
+ class ResourceGatedSpanProcessor {
603
+ constructor(inner) {
604
+ this.inner = inner;
605
+ this.ended = new HeldUntilSettled((span) => inner.onEnd(span));
606
+ }
607
+ onStart(span, parentContext) {
608
+ this.inner.onStart(span, parentContext);
609
+ }
610
+ onEnd(span) {
611
+ this.ended.push(span);
612
+ }
613
+ release() {
614
+ this.ended.release();
615
+ }
616
+ forceFlush() {
617
+ return this.inner.forceFlush();
618
+ }
619
+ shutdown() {
620
+ return this.inner.shutdown();
621
+ }
622
+ }
623
+ class ResourceGatedLogProcessor {
624
+ constructor(inner) {
625
+ this.inner = inner;
626
+ this.emitted = new HeldUntilSettled(([record, recordContext]) => inner.onEmit(record, recordContext));
627
+ }
628
+ onEmit(logRecord, recordContext) {
629
+ this.emitted.push([logRecord, recordContext]);
630
+ }
631
+ release() {
632
+ this.emitted.release();
633
+ }
634
+ forceFlush() {
635
+ return this.inner.forceFlush();
636
+ }
637
+ shutdown() {
638
+ return this.inner.shutdown();
639
+ }
640
+ }
641
+ class ForwardingSpanExporter {
642
+ constructor() {
643
+ this.targets = [];
644
+ }
645
+ export(spans, resultCallback) {
646
+ exportAll(this.targets, (target, done) => target.export(spans, done), resultCallback);
647
+ }
648
+ async forceFlush() {
649
+ await Promise.all(this.targets.map((target) => flushExporter(target)));
650
+ }
651
+ async shutdown() {
652
+ await Promise.all(this.targets.map((target) => target.shutdown()));
653
+ }
654
+ }
655
+ class ForwardingLogExporter {
656
+ constructor() {
657
+ this.targets = [];
658
+ }
659
+ export(records, resultCallback) {
660
+ exportAll(this.targets, (target, done) => target.export(records, done), resultCallback);
661
+ }
662
+ async forceFlush() {
663
+ await Promise.all(this.targets.map((target) => flushExporter(target)));
664
+ }
665
+ async shutdown() {
666
+ await Promise.all(this.targets.map((target) => target.shutdown()));
667
+ }
668
+ }
669
+ class StartableMetricReader extends PeriodicExportingMetricReader {
670
+ constructor() {
671
+ super(...arguments);
672
+ this.started = false;
673
+ }
674
+ onInitialized() { }
675
+ async onForceFlush() {
676
+ if (this.started) {
677
+ await super.onForceFlush();
678
+ }
679
+ }
680
+ start() {
681
+ if (this.started) {
682
+ return;
683
+ }
684
+ this.started = true;
685
+ super.onInitialized();
686
+ }
687
+ }
688
+ class ForwardingMetricExporter {
689
+ constructor() {
690
+ this.targets = [];
691
+ this.temporality = DeltaTemporalitySelector;
692
+ }
693
+ start() {
694
+ this.reader?.start();
695
+ }
696
+ export(metricsBatch, resultCallback) {
697
+ exportAll(this.targets, (target, done) => target.export(metricsBatch, done), resultCallback);
698
+ }
699
+ selectAggregationTemporality(instrumentType) {
700
+ return this.temporality(instrumentType);
701
+ }
702
+ async forceFlush() {
703
+ await Promise.all(this.targets.map((target) => target.forceFlush()));
704
+ }
705
+ async shutdown() {
706
+ await Promise.all(this.targets.map((target) => target.shutdown()));
707
+ }
708
+ }
709
+ function exportAll(targets, send, done) {
710
+ if (targets.length === 0) {
711
+ done({ code: ExportResultCode.SUCCESS });
712
+ return;
713
+ }
714
+ let pending = targets.length;
715
+ let failure;
716
+ for (const target of targets) {
717
+ send(target, (result) => {
718
+ if (result.code !== ExportResultCode.SUCCESS && failure === undefined) {
719
+ failure = result;
720
+ }
721
+ pending -= 1;
722
+ if (pending === 0) {
723
+ done(failure ?? { code: ExportResultCode.SUCCESS });
724
+ }
725
+ });
726
+ }
727
+ }