@cursor/bdk 0.2.24 → 0.2.25

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 (290) hide show
  1. package/AGENTS.md +1 -0
  2. package/dist/bin/agent-serve.d.ts +1 -1
  3. package/dist/bin/agent-serve.js +48 -12
  4. package/dist/channels/bitbucket/bitbucket-webhook.d.ts +3 -2
  5. package/dist/channels/bitbucket/bitbucket-webhook.d.ts.map +1 -1
  6. package/dist/channels/bitbucket/bitbucket-webhook.js +14 -9
  7. package/dist/channels/github/github-channel.d.ts.map +1 -1
  8. package/dist/channels/github/github-channel.js +9 -18
  9. package/dist/channels/pagerduty/api.d.ts +74 -0
  10. package/dist/channels/pagerduty/api.d.ts.map +1 -0
  11. package/dist/channels/pagerduty/api.js +101 -0
  12. package/dist/channels/pagerduty/defaults.d.ts +42 -0
  13. package/dist/channels/pagerduty/defaults.d.ts.map +1 -0
  14. package/dist/channels/pagerduty/defaults.js +132 -0
  15. package/dist/channels/pagerduty/events.d.ts +24 -0
  16. package/dist/channels/pagerduty/events.d.ts.map +1 -0
  17. package/dist/channels/pagerduty/events.js +38 -0
  18. package/dist/channels/pagerduty/index.d.ts +31 -0
  19. package/dist/channels/pagerduty/index.d.ts.map +1 -0
  20. package/dist/channels/pagerduty/index.js +30 -0
  21. package/dist/channels/pagerduty/pagerduty-channel.d.ts +64 -0
  22. package/dist/channels/pagerduty/pagerduty-channel.d.ts.map +1 -0
  23. package/dist/channels/pagerduty/pagerduty-channel.js +195 -0
  24. package/dist/channels/pagerduty/pagerduty-webhook.d.ts +70 -0
  25. package/dist/channels/pagerduty/pagerduty-webhook.d.ts.map +1 -0
  26. package/dist/channels/pagerduty/pagerduty-webhook.js +280 -0
  27. package/dist/channels/pagerduty/payload.d.ts +33 -0
  28. package/dist/channels/pagerduty/payload.d.ts.map +1 -0
  29. package/dist/channels/pagerduty/payload.js +150 -0
  30. package/dist/channels/pagerduty/replay.d.ts +35 -0
  31. package/dist/channels/pagerduty/replay.d.ts.map +1 -0
  32. package/dist/channels/pagerduty/replay.js +115 -0
  33. package/dist/channels/pagerduty/secrets.d.ts +16 -0
  34. package/dist/channels/pagerduty/secrets.d.ts.map +1 -0
  35. package/dist/channels/pagerduty/secrets.js +23 -0
  36. package/dist/channels/pagerduty/self-user.d.ts +51 -0
  37. package/dist/channels/pagerduty/self-user.d.ts.map +1 -0
  38. package/dist/channels/pagerduty/self-user.js +157 -0
  39. package/dist/channels/pagerduty/state.d.ts +31 -0
  40. package/dist/channels/pagerduty/state.d.ts.map +1 -0
  41. package/dist/channels/pagerduty/state.js +30 -0
  42. package/dist/channels/pagerduty/types.d.ts +217 -0
  43. package/dist/channels/pagerduty/types.d.ts.map +1 -0
  44. package/dist/channels/pagerduty/types.js +1 -0
  45. package/dist/channels.d.ts +6 -0
  46. package/dist/channels.d.ts.map +1 -1
  47. package/dist/channels.js +11 -23
  48. package/dist/docs/404.html +2 -2
  49. package/dist/docs/assets/{app.DTIg0uKK.js → app.BjS1QEI4.js} +4 -4
  50. package/dist/docs/assets/chunks/@localSearchIndexroot.oGqZumnJ.js +1 -0
  51. package/dist/docs/assets/chunks/{VPLocalSearchBox.BpJoSaxi.js → VPLocalSearchBox.BOuvjb5Y.js} +1 -1
  52. package/dist/docs/assets/chunks/{arc.ylgNvRNq.js → arc.3WR6Jf-y.js} +1 -1
  53. package/dist/docs/assets/chunks/{architectureDiagram-Q4EWVU46.BMrNJqYk.js → architectureDiagram-Q4EWVU46.Dtb6Dqh6.js} +1 -1
  54. package/dist/docs/assets/chunks/{baseUniq.BBWUEqf9.js → baseUniq.BUyrgrZE.js} +1 -1
  55. package/dist/docs/assets/chunks/{blockDiagram-DXYQGD6D.DFMu-Vza.js → blockDiagram-DXYQGD6D.BVLV_voZ.js} +1 -1
  56. package/dist/docs/assets/chunks/{c4Diagram-AHTNJAMY.8nkAAxWv.js → c4Diagram-AHTNJAMY.jXJ1q70M.js} +1 -1
  57. package/dist/docs/assets/chunks/channel.Dt4aweTm.js +1 -0
  58. package/dist/docs/assets/chunks/{chunk-4BX2VUAB.sO-z2Bag.js → chunk-4BX2VUAB.zz1SMBvK.js} +1 -1
  59. package/dist/docs/assets/chunks/{chunk-4TB4RGXK.BMROzTMq.js → chunk-4TB4RGXK.CzYKuv3I.js} +1 -1
  60. package/dist/docs/assets/chunks/{chunk-55IACEB6.X81urwg7.js → chunk-55IACEB6.C7_tcJZD.js} +1 -1
  61. package/dist/docs/assets/chunks/{chunk-EDXVE4YY.eaZVFLZM.js → chunk-EDXVE4YY.DeTwQPVO.js} +1 -1
  62. package/dist/docs/assets/chunks/{chunk-FMBD7UC4.CmZhzstR.js → chunk-FMBD7UC4.DhMTl7ut.js} +1 -1
  63. package/dist/docs/assets/chunks/{chunk-OYMX7WX6.CTezt9Lc.js → chunk-OYMX7WX6.Me7f5hEp.js} +1 -1
  64. package/dist/docs/assets/chunks/{chunk-QZHKN3VN.s-T8zukB.js → chunk-QZHKN3VN.D0E0Bb6g.js} +1 -1
  65. package/dist/docs/assets/chunks/{chunk-YZCP3GAM.DN4Nhy-D.js → chunk-YZCP3GAM.CdOOBFYL.js} +1 -1
  66. package/dist/docs/assets/chunks/classDiagram-6PBFFD2Q.DGUHZs6j.js +1 -0
  67. package/dist/docs/assets/chunks/classDiagram-v2-HSJHXN6E.DGUHZs6j.js +1 -0
  68. package/dist/docs/assets/chunks/clone.DWf3k0Z0.js +1 -0
  69. package/dist/docs/assets/chunks/{cose-bilkent-S5V4N54A.Cqyp4BUH.js → cose-bilkent-S5V4N54A.BNbGESzN.js} +1 -1
  70. package/dist/docs/assets/chunks/{dagre-KV5264BT.BIECOiqR.js → dagre-KV5264BT.zU7Lu_xJ.js} +1 -1
  71. package/dist/docs/assets/chunks/{diagram-5BDNPKRD.1tLyWoTg.js → diagram-5BDNPKRD.B9qOdE5h.js} +1 -1
  72. package/dist/docs/assets/chunks/{diagram-G4DWMVQ6.BVY_6VMO.js → diagram-G4DWMVQ6.D8X-sf77.js} +1 -1
  73. package/dist/docs/assets/chunks/{diagram-MMDJMWI5.BSZ7xiBB.js → diagram-MMDJMWI5.CW7MvMlE.js} +1 -1
  74. package/dist/docs/assets/chunks/{diagram-TYMM5635.Bho6GmLh.js → diagram-TYMM5635.J489G0Nd.js} +1 -1
  75. package/dist/docs/assets/chunks/{erDiagram-SMLLAGMA.A0yVIANn.js → erDiagram-SMLLAGMA.BkW7tGfs.js} +1 -1
  76. package/dist/docs/assets/chunks/{flowDiagram-DWJPFMVM.ZMgbllH6.js → flowDiagram-DWJPFMVM.jc9iWORD.js} +1 -1
  77. package/dist/docs/assets/chunks/{ganttDiagram-T4ZO3ILL.BCCPBhXo.js → ganttDiagram-T4ZO3ILL.B-UQfd9E.js} +1 -1
  78. package/dist/docs/assets/chunks/{gitGraphDiagram-UUTBAWPF.BOkL0BbA.js → gitGraphDiagram-UUTBAWPF.DFzrTSlJ.js} +1 -1
  79. package/dist/docs/assets/chunks/{graph.DMyZPu86.js → graph.C5IB6_e_.js} +1 -1
  80. package/dist/docs/assets/chunks/{infoDiagram-42DDH7IO.CjG1IiEw.js → infoDiagram-42DDH7IO.DwF0-c8L.js} +1 -1
  81. package/dist/docs/assets/chunks/{ishikawaDiagram-UXIWVN3A.UCe-kq9g.js → ishikawaDiagram-UXIWVN3A.fBaTqzE7.js} +1 -1
  82. package/dist/docs/assets/chunks/{journeyDiagram-VCZTEJTY.3WyOK_eY.js → journeyDiagram-VCZTEJTY.CM8gDVJy.js} +1 -1
  83. package/dist/docs/assets/chunks/{kanban-definition-6JOO6SKY.WoRG2qY1.js → kanban-definition-6JOO6SKY.YiD1p0LB.js} +1 -1
  84. package/dist/docs/assets/chunks/{layout.DV07xDd5.js → layout.6Um-DVJT.js} +1 -1
  85. package/dist/docs/assets/chunks/{linear.CTO8mN6o.js → linear.DcTeg4Hn.js} +1 -1
  86. package/dist/docs/assets/chunks/{min.SvTtcKuZ.js → min.CIxkY8Fe.js} +1 -1
  87. package/dist/docs/assets/chunks/{mindmap-definition-QFDTVHPH.DMGgQ-HB.js → mindmap-definition-QFDTVHPH.D4QM_voR.js} +1 -1
  88. package/dist/docs/assets/chunks/{pieDiagram-DEJITSTG.B7851apI.js → pieDiagram-DEJITSTG.nmB309G1.js} +1 -1
  89. package/dist/docs/assets/chunks/{quadrantDiagram-34T5L4WZ.CEqyypIX.js → quadrantDiagram-34T5L4WZ.D1HtZR3C.js} +1 -1
  90. package/dist/docs/assets/chunks/{requirementDiagram-MS252O5E.C3Mwsw-H.js → requirementDiagram-MS252O5E.CZgQWob-.js} +1 -1
  91. package/dist/docs/assets/chunks/{sankeyDiagram-XADWPNL6.DyYK0XxY.js → sankeyDiagram-XADWPNL6.DtiBfU-P.js} +1 -1
  92. package/dist/docs/assets/chunks/{sequenceDiagram-FGHM5R23.SiQPH-XM.js → sequenceDiagram-FGHM5R23.Cld4gDSt.js} +1 -1
  93. package/dist/docs/assets/chunks/{stateDiagram-FHFEXIEX.CTJMsP4p.js → stateDiagram-FHFEXIEX.DatP823_.js} +1 -1
  94. package/dist/docs/assets/chunks/stateDiagram-v2-QKLJ7IA2.C0571l4D.js +1 -0
  95. package/dist/docs/assets/chunks/{theme.DJo4my9R.js → theme.D5jbBys7.js} +2 -2
  96. package/dist/docs/assets/chunks/{timeline-definition-GMOUNBTQ.CxSNRlQ6.js → timeline-definition-GMOUNBTQ.DwQLI2be.js} +1 -1
  97. package/dist/docs/assets/chunks/{vennDiagram-DHZGUBPP.BdoJskyD.js → vennDiagram-DHZGUBPP.a5yMfnsa.js} +1 -1
  98. package/dist/docs/assets/chunks/wardley-RL74JXVD.B-FXivgT.js +162 -0
  99. package/dist/docs/assets/chunks/{wardleyDiagram-NUSXRM2D.IjIbFn_F.js → wardleyDiagram-NUSXRM2D.Dz--Opy3.js} +1 -1
  100. package/dist/docs/assets/chunks/{xychartDiagram-5P7HB3ND.CPUxDZLH.js → xychartDiagram-5P7HB3ND.Dl8w8TeT.js} +1 -1
  101. package/dist/docs/assets/{guides_opentelemetry.md.Ck1o2frw.js → guides_opentelemetry.md.DBQtp7_V.js} +4 -4
  102. package/dist/docs/assets/{guides_opentelemetry.md.Ck1o2frw.lean.js → guides_opentelemetry.md.DBQtp7_V.lean.js} +1 -1
  103. package/dist/docs/assets/guides_pagerduty.md.BHXMcMtx.js +60 -0
  104. package/dist/docs/assets/guides_pagerduty.md.BHXMcMtx.lean.js +1 -0
  105. package/dist/docs/assets/{reference_channels.md.DYg0CLud.js → reference_channels.md.Bxaa020x.js} +1 -1
  106. package/dist/docs/assets/{reference_cli.md.DB7Llw3T.js → reference_cli.md.1o_TqKdt.js} +7 -2
  107. package/dist/docs/assets/{reference_cli.md.DB7Llw3T.lean.js → reference_cli.md.1o_TqKdt.lean.js} +1 -1
  108. package/dist/docs/assets/{reference_tools.md.08XR7lIl.js → reference_tools.md.-6pypsWt.js} +1 -1
  109. package/dist/docs/building-with-agents.html +35 -35
  110. package/dist/docs/deployment.html +35 -35
  111. package/dist/docs/evals.html +35 -35
  112. package/dist/docs/guides/agent-to-agent.html +35 -35
  113. package/dist/docs/guides/bitbucket.html +36 -36
  114. package/dist/docs/guides/cloud-agents.html +35 -35
  115. package/dist/docs/guides/convert-automation.html +35 -35
  116. package/dist/docs/guides/export-grokbot.html +35 -35
  117. package/dist/docs/guides/github.html +35 -35
  118. package/dist/docs/guides/gitlab.html +35 -35
  119. package/dist/docs/guides/grokbot-agents.html +35 -35
  120. package/dist/docs/guides/hooks.html +35 -35
  121. package/dist/docs/guides/improve.html +35 -35
  122. package/dist/docs/guides/jev.html +35 -35
  123. package/dist/docs/guides/mcp-oauth.html +35 -35
  124. package/dist/docs/guides/migrate.html +35 -35
  125. package/dist/docs/guides/opentelemetry.html +39 -39
  126. package/dist/docs/guides/opentelemetry.md +10 -5
  127. package/dist/docs/guides/pagerduty.html +119 -0
  128. package/dist/docs/guides/pagerduty.md +336 -0
  129. package/dist/docs/guides/slack.html +35 -35
  130. package/dist/docs/guides/webhooks.html +35 -35
  131. package/dist/docs/hashmap.json +1 -1
  132. package/dist/docs/hillclimbing.html +35 -35
  133. package/dist/docs/index.html +35 -35
  134. package/dist/docs/llms-full.txt +381 -6
  135. package/dist/docs/llms.txt +1 -0
  136. package/dist/docs/quickstart.html +35 -35
  137. package/dist/docs/reference/agent-config.html +35 -35
  138. package/dist/docs/reference/artifacts.html +35 -35
  139. package/dist/docs/reference/channels.html +37 -37
  140. package/dist/docs/reference/channels.md +2 -1
  141. package/dist/docs/reference/cli.html +42 -37
  142. package/dist/docs/reference/cli.md +27 -0
  143. package/dist/docs/reference/connections.html +35 -35
  144. package/dist/docs/reference/evals.html +35 -35
  145. package/dist/docs/reference/extensions.html +36 -36
  146. package/dist/docs/reference/hooks.html +35 -35
  147. package/dist/docs/reference/http-api.html +35 -35
  148. package/dist/docs/reference/instructions.html +35 -35
  149. package/dist/docs/reference/memory.html +35 -35
  150. package/dist/docs/reference/playground.html +35 -35
  151. package/dist/docs/reference/project-layout.html +35 -35
  152. package/dist/docs/reference/prompt.html +35 -35
  153. package/dist/docs/reference/schedules.html +35 -35
  154. package/dist/docs/reference/sessions.html +35 -35
  155. package/dist/docs/reference/skills.html +35 -35
  156. package/dist/docs/reference/subagents.html +35 -35
  157. package/dist/docs/reference/tools.html +37 -37
  158. package/dist/docs/reference/tools.md +1 -0
  159. package/dist/docs/templates/agentic-owners.html +35 -35
  160. package/dist/docs/templates/grokbot-agents.html +35 -35
  161. package/dist/docs/templates/security-reviewer.html +35 -35
  162. package/dist/docs/templates/thermo-quality-review.html +35 -35
  163. package/dist/docs/templates/thermo-review.html +35 -35
  164. package/dist/docs/templates/triage.html +35 -35
  165. package/dist/docs/troubleshooting.html +35 -35
  166. package/dist/internal/approval-gate.d.ts +4 -2
  167. package/dist/internal/approval-gate.d.ts.map +1 -1
  168. package/dist/internal/approval-gate.js +2 -1
  169. package/dist/internal/builtin-tools/artifacts.d.ts.map +1 -1
  170. package/dist/internal/builtin-tools/artifacts.js +45 -12
  171. package/dist/internal/channel-architecture.d.ts +1 -1
  172. package/dist/internal/channel-architecture.d.ts.map +1 -1
  173. package/dist/internal/channel-architecture.js +4 -2
  174. package/dist/internal/cli-deploy.d.ts.map +1 -1
  175. package/dist/internal/cli-deploy.js +21 -12
  176. package/dist/internal/cli-pagerduty.d.ts +32 -0
  177. package/dist/internal/cli-pagerduty.d.ts.map +1 -0
  178. package/dist/internal/cli-pagerduty.js +242 -0
  179. package/dist/internal/continuation-channel.d.ts.map +1 -1
  180. package/dist/internal/continuation-channel.js +7 -0
  181. package/dist/internal/continuation-identity.d.ts +11 -3
  182. package/dist/internal/continuation-identity.d.ts.map +1 -1
  183. package/dist/internal/continuation-identity.js +83 -0
  184. package/dist/internal/deploy-manifest.d.ts +11 -4
  185. package/dist/internal/deploy-manifest.d.ts.map +1 -1
  186. package/dist/internal/deploy-manifest.js +17 -5
  187. package/dist/internal/discovery/agent-config.d.ts.map +1 -1
  188. package/dist/internal/discovery/agent-config.js +10 -10
  189. package/dist/internal/discovery/agent.d.ts.map +1 -1
  190. package/dist/internal/discovery/agent.js +10 -10
  191. package/dist/internal/discovery/channels.d.ts.map +1 -1
  192. package/dist/internal/discovery/channels.js +20 -16
  193. package/dist/internal/discovery/context.d.ts +16 -0
  194. package/dist/internal/discovery/context.d.ts.map +1 -1
  195. package/dist/internal/discovery/context.js +66 -0
  196. package/dist/internal/discovery/extension-overlay.d.ts.map +1 -1
  197. package/dist/internal/discovery/extension-overlay.js +2 -6
  198. package/dist/internal/discovery/info.d.ts.map +1 -1
  199. package/dist/internal/discovery/info.js +3 -0
  200. package/dist/internal/discovery/instructions.d.ts.map +1 -1
  201. package/dist/internal/discovery/instructions.js +3 -6
  202. package/dist/internal/discovery/modules.d.ts.map +1 -1
  203. package/dist/internal/discovery/modules.js +3 -6
  204. package/dist/internal/discovery/project.d.ts +6 -0
  205. package/dist/internal/discovery/project.d.ts.map +1 -1
  206. package/dist/internal/discovery/project.js +27 -5
  207. package/dist/internal/discovery/runtime.d.ts.map +1 -1
  208. package/dist/internal/discovery/runtime.js +8 -8
  209. package/dist/internal/discovery.d.ts +1 -1
  210. package/dist/internal/discovery.d.ts.map +1 -1
  211. package/dist/internal/discovery.js +1 -1
  212. package/dist/internal/expected-delivery-failure.d.ts.map +1 -1
  213. package/dist/internal/expected-delivery-failure.js +6 -0
  214. package/dist/internal/filesystem/sdk-schemas.d.ts.map +1 -1
  215. package/dist/internal/filesystem/sdk-schemas.js +4 -3
  216. package/dist/internal/hmac-secret-values.d.ts +48 -0
  217. package/dist/internal/hmac-secret-values.d.ts.map +1 -0
  218. package/dist/internal/hmac-secret-values.js +68 -0
  219. package/dist/internal/host-platforms.d.ts.map +1 -1
  220. package/dist/internal/host-platforms.js +8 -2
  221. package/dist/internal/json-schema.d.ts +7 -7
  222. package/dist/internal/json-schema.d.ts.map +1 -1
  223. package/dist/internal/json-schema.js +13 -16
  224. package/dist/internal/otel/collector.d.ts.map +1 -1
  225. package/dist/internal/otel/collector.js +3 -1
  226. package/dist/internal/otel/config.d.ts +6 -1
  227. package/dist/internal/otel/config.d.ts.map +1 -1
  228. package/dist/internal/otel/config.js +27 -1
  229. package/dist/internal/otel/runtime.d.ts.map +1 -1
  230. package/dist/internal/otel/runtime.js +26 -3
  231. package/dist/internal/package-inline-stdio.d.ts.map +1 -1
  232. package/dist/internal/package-inline-stdio.js +21 -6
  233. package/dist/internal/sdk-runner.d.ts +2 -3
  234. package/dist/internal/sdk-runner.d.ts.map +1 -1
  235. package/dist/internal/sdk-runner.js +8 -4
  236. package/dist/internal/secret-alternatives.d.ts +11 -0
  237. package/dist/internal/secret-alternatives.d.ts.map +1 -0
  238. package/dist/internal/secret-alternatives.js +13 -0
  239. package/dist/internal/server.js +2 -2
  240. package/dist/internal/session-engine.d.ts.map +1 -1
  241. package/dist/internal/session-engine.js +5 -4
  242. package/dist/internal/sqlite-experimental-warning.d.ts +2 -0
  243. package/dist/internal/sqlite-experimental-warning.d.ts.map +1 -0
  244. package/dist/internal/sqlite-experimental-warning.js +22 -0
  245. package/dist/internal/testing/conversation-identity-vectors.d.ts +6 -1
  246. package/dist/internal/testing/conversation-identity-vectors.d.ts.map +1 -1
  247. package/dist/internal/testing/conversation-identity-vectors.js +34 -0
  248. package/dist/internal/testing/hmac-secret-vectors.d.ts +38 -0
  249. package/dist/internal/testing/hmac-secret-vectors.d.ts.map +1 -0
  250. package/dist/internal/testing/hmac-secret-vectors.js +89 -0
  251. package/dist/internal/testing/pagerduty-continuation-fixtures.d.ts +42 -0
  252. package/dist/internal/testing/pagerduty-continuation-fixtures.d.ts.map +1 -0
  253. package/dist/internal/testing/pagerduty-continuation-fixtures.js +175 -0
  254. package/dist/internal/zod-schema.d.ts +14 -0
  255. package/dist/internal/zod-schema.d.ts.map +1 -0
  256. package/dist/internal/zod-schema.js +22 -0
  257. package/dist/playground/assets/cursor-icons-16-DmHBTm1-.woff2 +0 -0
  258. package/dist/playground/assets/index-BdMwybMt.css +1 -0
  259. package/dist/playground/assets/{index-DKKdkF29.js → index-CHk6O92d.js} +38 -38
  260. package/dist/playground/index.html +2 -2
  261. package/dist/tools.d.ts +13 -10
  262. package/dist/tools.d.ts.map +1 -1
  263. package/dist/tools.js +3 -2
  264. package/dist/types.d.ts +67 -16
  265. package/dist/types.d.ts.map +1 -1
  266. package/docs/guides/opentelemetry.md +10 -5
  267. package/docs/guides/pagerduty.md +341 -0
  268. package/docs/reference/channels.md +2 -1
  269. package/docs/reference/cli.md +27 -0
  270. package/docs/reference/tools.md +1 -0
  271. package/package.json +10 -3
  272. package/skills/migrate-v2/SKILL.md +1 -1
  273. package/skills/otel/SKILL.md +7 -3
  274. package/templates/agentic-owners/README.md +6 -1
  275. package/templates/agentic-owners/bot/lib/owners/decision.ts +31 -5
  276. package/templates/agentic-owners/bot/lib/owners/globalOverride.ts +60 -0
  277. package/templates/agentic-owners/bot/lib/owners/match.ts +85 -19
  278. package/templates/agentic-owners/bot/lib/owners/parse.ts +133 -2
  279. package/templates/agentic-owners/bot/lib/owners/types.ts +23 -0
  280. package/dist/docs/assets/chunks/@localSearchIndexroot.3ebvCWKy.js +0 -1
  281. package/dist/docs/assets/chunks/channel.BOebySCN.js +0 -1
  282. package/dist/docs/assets/chunks/classDiagram-6PBFFD2Q.C55IaN-T.js +0 -1
  283. package/dist/docs/assets/chunks/classDiagram-v2-HSJHXN6E.C55IaN-T.js +0 -1
  284. package/dist/docs/assets/chunks/clone.D06pA7ML.js +0 -1
  285. package/dist/docs/assets/chunks/stateDiagram-v2-QKLJ7IA2.DddRVjeq.js +0 -1
  286. package/dist/docs/assets/chunks/wardley-RL74JXVD.CVCRSuQK.js +0 -162
  287. package/dist/playground/assets/cursor-icons-16-gwXtdAvu.woff2 +0 -0
  288. package/dist/playground/assets/index-DpKinTMs.css +0 -1
  289. /package/dist/docs/assets/{reference_channels.md.DYg0CLud.lean.js → reference_channels.md.Bxaa020x.lean.js} +0 -0
  290. /package/dist/docs/assets/{reference_tools.md.08XR7lIl.lean.js → reference_tools.md.-6pypsWt.lean.js} +0 -0
@@ -8,7 +8,7 @@ import { applyAgentContinuationDefaults, warnOmittedContinuationDowngrades, } fr
8
8
  import { httpChannel } from "../http-channel-define.js";
9
9
  import { loadAgent, warnUnknownSlots } from "./agent.js";
10
10
  import { loadChannels } from "./channels.js";
11
- import { defaultImportModule, displayPath, } from "./context.js";
11
+ import { defaultImportModule, displayPath, pushConfigDiagnostic, } from "./context.js";
12
12
  import { hasFlatLayoutMarkers, isDirectory, readPackageName, sortedEntries } from "./fs.js";
13
13
  import { loadHooks } from "./hooks.js";
14
14
  import { NAME_PATTERN, RESERVED_SLUGS } from "./names.js";
@@ -166,7 +166,7 @@ export async function loadAgentProject(dir, options = {}) {
166
166
  const { channels, httpChannelDefinition } = await loadChannels(ctx, join(agentDir, "channels"));
167
167
  for (const channel of projectSlots.channels) {
168
168
  if (channel.id === "http" || channels.some((c) => c.id === channel.id)) {
169
- ctx.diagnostics.push({
169
+ pushConfigDiagnostic(ctx, {
170
170
  severity: "error",
171
171
  path: displayPath(ctx, join(agentDir, "extensions")),
172
172
  message: `Extension channel "${channel.id}" collides with an agent channel.`,
@@ -194,18 +194,26 @@ export async function loadAgentProject(dir, options = {}) {
194
194
  const channelPath = displayPath(ctx, join(agentDir, "channels", `${channel.id}.ts`));
195
195
  const architectureError = channelArchitectureError(agent.architecture, channel.definition);
196
196
  if (architectureError !== undefined) {
197
- ctx.diagnostics.push({ severity: "error", path: channelPath, message: architectureError });
197
+ pushConfigDiagnostic(ctx, {
198
+ severity: "error",
199
+ path: channelPath,
200
+ message: architectureError,
201
+ });
198
202
  }
199
203
  const migrationWarning = channelArchitectureMigrationWarning(agent.architecture, channel.definition);
200
204
  if (migrationWarning !== undefined) {
201
- ctx.diagnostics.push({ severity: "warning", path: channelPath, message: migrationWarning });
205
+ pushConfigDiagnostic(ctx, {
206
+ severity: "warning",
207
+ path: channelPath,
208
+ message: migrationWarning,
209
+ });
202
210
  }
203
211
  }
204
212
  warnOmittedContinuationDowngrades({
205
213
  architecture: agent.architecture,
206
214
  channels,
207
215
  warn: (id, message) => {
208
- ctx.diagnostics.push({
216
+ pushConfigDiagnostic(ctx, {
209
217
  severity: "warning",
210
218
  path: displayPath(ctx, join(agentDir, "channels", `${id}.ts`)),
211
219
  message,
@@ -264,3 +272,17 @@ export function formatDiagnostics(diagnostics) {
264
272
  })
265
273
  .join("\n");
266
274
  }
275
+ export function formatValidateJson(mounts) {
276
+ const agents = mounts.map(({ slug, project }) => ({
277
+ slug,
278
+ diagnostics: project.diagnostics.map((diagnostic) => ({
279
+ severity: diagnostic.severity,
280
+ code: diagnostic.code ?? "other",
281
+ path: diagnostic.path,
282
+ package: diagnostic.package,
283
+ message: diagnostic.message,
284
+ })),
285
+ }));
286
+ const ok = !agents.some((agent) => agent.diagnostics.some((diagnostic) => diagnostic.severity === "error"));
287
+ return `${JSON.stringify({ version: 1, ok, agents })}\n`;
288
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../../src/internal/discovery/runtime.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,KAAK,gBAAgB,EAAe,MAAM,cAAc,CAAC;AAElE;;;;GAIG;AACH,wBAAgB,cAAc,CAC5B,GAAG,EAAE,gBAAgB,EACrB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,YAAY,GAAG,SAAS,GAChC,YAAY,CAed;AAED;;;;;GAKG;AACH,wBAAgB,8BAA8B,CAC5C,GAAG,EAAE,gBAAgB,EACrB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE;IACN,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,OAAO,CAAC;IACzB,eAAe,EAAE,OAAO,CAAC;CAC1B,GACA,IAAI,CA2DN;AAED,wBAAgB,2BAA2B,CACzC,GAAG,EAAE,gBAAgB,EACrB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE;IACN,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,OAAO,CAAC;CAC1B,GACA,IAAI,CAkCN"}
1
+ {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../../src/internal/discovery/runtime.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,KAAK,gBAAgB,EAAqC,MAAM,cAAc,CAAC;AAExF;;;;GAIG;AACH,wBAAgB,cAAc,CAC5B,GAAG,EAAE,gBAAgB,EACrB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,YAAY,GAAG,SAAS,GAChC,YAAY,CAed;AAED;;;;;GAKG;AACH,wBAAgB,8BAA8B,CAC5C,GAAG,EAAE,gBAAgB,EACrB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE;IACN,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,OAAO,CAAC;IACzB,eAAe,EAAE,OAAO,CAAC;CAC1B,GACA,IAAI,CA2DN;AAED,wBAAgB,2BAA2B,CACzC,GAAG,EAAE,gBAAgB,EACrB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE;IACN,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,OAAO,CAAC;CAC1B,GACA,IAAI,CAkCN"}
@@ -2,7 +2,7 @@
2
2
  * Runtime resolution and the limitations each runtime imposes on the authored surface.
3
3
  */
4
4
  import { join } from "node:path";
5
- import { displayPath } from "./context.js";
5
+ import { displayPath, pushConfigDiagnostic } from "./context.js";
6
6
  /**
7
7
  * Validate the authored runtime. An unrecognized value is an error
8
8
  * diagnostic and falls back to local — a typo must not silently pick a
@@ -15,7 +15,7 @@ export function resolveRuntime(ctx, agentDir, runtime) {
15
15
  runtime === "grokbot") {
16
16
  return runtime ?? "local";
17
17
  }
18
- ctx.diagnostics.push({
18
+ pushConfigDiagnostic(ctx, {
19
19
  severity: "error",
20
20
  path: displayPath(ctx, join(agentDir, "agent.ts")),
21
21
  message: `runtime must be "local", "cloud", or "grokbot"; got ${JSON.stringify(runtime)}.`,
@@ -31,10 +31,10 @@ export function resolveRuntime(ctx, agentDir, runtime) {
31
31
  export function checkGrokBotRuntimeLimitations(ctx, agentDir, counts) {
32
32
  const agentPath = displayPath(ctx, join(agentDir, "agent.ts"));
33
33
  const error = (path, message) => {
34
- ctx.diagnostics.push({ severity: "error", path, message });
34
+ pushConfigDiagnostic(ctx, { severity: "error", path, message });
35
35
  };
36
36
  const warn = (path, message) => {
37
- ctx.diagnostics.push({ severity: "warning", path, message });
37
+ pushConfigDiagnostic(ctx, { severity: "warning", path, message });
38
38
  };
39
39
  if (counts.serverTools > 0) {
40
40
  error(displayPath(ctx, join(agentDir, "tools")), 'Server tools (execution: "server", including opted-in builtinTools) are not reachable from grokbot turns yet. Remove them or run the agent on the local runtime.');
@@ -67,28 +67,28 @@ export function checkGrokBotRuntimeLimitations(ctx, agentDir, counts) {
67
67
  export function warnCloudRuntimeLimitations(ctx, agentDir, counts) {
68
68
  const agentPath = displayPath(ctx, join(agentDir, "agent.ts"));
69
69
  if (!counts.hasCloudOptions) {
70
- ctx.diagnostics.push({
70
+ pushConfigDiagnostic(ctx, {
71
71
  severity: "warning",
72
72
  path: agentPath,
73
73
  message: 'runtime: "cloud" usually needs a `cloud` block (e.g. repos / env). Without it the Cursor cloud API may reject create.',
74
74
  });
75
75
  }
76
76
  if (counts.agentTools > 0) {
77
- ctx.diagnostics.push({
77
+ pushConfigDiagnostic(ctx, {
78
78
  severity: "warning",
79
79
  path: displayPath(ctx, join(agentDir, "tools")),
80
80
  message: 'Agent tools (execution: "agent") are described on the first cloud prompt (with script bodies); they are not written into the cloud VM filesystem automatically.',
81
81
  });
82
82
  }
83
83
  if (counts.skills > 0) {
84
- ctx.diagnostics.push({
84
+ pushConfigDiagnostic(ctx, {
85
85
  severity: "warning",
86
86
  path: displayPath(ctx, join(agentDir, "skills")),
87
87
  message: "Authored skills reach cloud agents through native store discovery: hosted deployments write the deployment store's skills/ directory; local serve/run with a personal API key writes agent-serve/<agent>/skills/ on the USER store. Without a reachable store, only skills already in the cloud repo are visible.",
88
88
  });
89
89
  }
90
90
  if (counts.seedFiles > 0) {
91
- ctx.diagnostics.push({
91
+ pushConfigDiagnostic(ctx, {
92
92
  severity: "warning",
93
93
  path: displayPath(ctx, join(agentDir, "sandbox")),
94
94
  message: "sandbox/workspace seed files reach cloud agents through the Agent Store, not the checkout: hosted deployments write the deployment store's workspace/ directory; local serve/run with a personal API key writes agent-serve/<agent>/workspace/ on the USER store. The first cloud prompt names the mounted directory. Without a reachable store, cloud turns do not see them.",
@@ -11,5 +11,5 @@
11
11
  export { DEFAULT_AGENT_ARCHITECTURE, runtimeArchitectureCompatibilityError, } from "./discovery/agent-config.js";
12
12
  export type { LoadAgentProjectOptions } from "./discovery/context.js";
13
13
  export { projectInfo } from "./discovery/info.js";
14
- export { type ChildAgentDir, formatDiagnostics, hasErrorDiagnostics, isAgentProjectDir, listChildAgentDirs, loadAgentProject, loadAgentProjects, resolveAgentMounts, } from "./discovery/project.js";
14
+ export { type ChildAgentDir, formatDiagnostics, formatValidateJson, hasErrorDiagnostics, isAgentProjectDir, listChildAgentDirs, loadAgentProject, loadAgentProjects, resolveAgentMounts, } from "./discovery/project.js";
15
15
  //# sourceMappingURL=discovery.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"discovery.d.ts","sourceRoot":"","sources":["../../src/internal/discovery.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EACL,0BAA0B,EAC1B,qCAAqC,GACtC,MAAM,6BAA6B,CAAC;AACrC,YAAY,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACtE,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EACL,KAAK,aAAa,EAClB,iBAAiB,EACjB,mBAAmB,EACnB,iBAAiB,EACjB,kBAAkB,EAClB,gBAAgB,EAChB,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,wBAAwB,CAAC"}
1
+ {"version":3,"file":"discovery.d.ts","sourceRoot":"","sources":["../../src/internal/discovery.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EACL,0BAA0B,EAC1B,qCAAqC,GACtC,MAAM,6BAA6B,CAAC;AACrC,YAAY,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACtE,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EACL,KAAK,aAAa,EAClB,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,EACnB,iBAAiB,EACjB,kBAAkB,EAClB,gBAAgB,EAChB,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,wBAAwB,CAAC"}
@@ -10,4 +10,4 @@
10
10
  */
11
11
  export { DEFAULT_AGENT_ARCHITECTURE, runtimeArchitectureCompatibilityError, } from "./discovery/agent-config.js";
12
12
  export { projectInfo } from "./discovery/info.js";
13
- export { formatDiagnostics, hasErrorDiagnostics, isAgentProjectDir, listChildAgentDirs, loadAgentProject, loadAgentProjects, resolveAgentMounts, } from "./discovery/project.js";
13
+ export { formatDiagnostics, formatValidateJson, hasErrorDiagnostics, isAgentProjectDir, listChildAgentDirs, loadAgentProject, loadAgentProjects, resolveAgentMounts, } from "./discovery/project.js";
@@ -1 +1 @@
1
- {"version":3,"file":"expected-delivery-failure.d.ts","sourceRoot":"","sources":["../../src/internal/expected-delivery-failure.ts"],"names":[],"mappings":"AAiBA,MAAM,MAAM,6BAA6B,GAAG,aAAa,GAAG,gBAAgB,CAAC;AAE7E,wBAAgB,+BAA+B,CAC7C,OAAO,EAAE,MAAM,GAAG,SAAS,GAC1B,6BAA6B,GAAG,SAAS,CAY3C"}
1
+ {"version":3,"file":"expected-delivery-failure.d.ts","sourceRoot":"","sources":["../../src/internal/expected-delivery-failure.ts"],"names":[],"mappings":"AAuBA,MAAM,MAAM,6BAA6B,GAAG,aAAa,GAAG,gBAAgB,CAAC;AAE7E,wBAAgB,+BAA+B,CAC7C,OAAO,EAAE,MAAM,GAAG,SAAS,GAC1B,6BAA6B,GAAG,SAAS,CAY3C"}
@@ -11,6 +11,12 @@ const USAGE_LIMIT_PHRASES = [
11
11
  // Billing titles insert "monthly", or say "hit" instead of "reached".
12
12
  "monthly usage limit",
13
13
  "hit your usage limit",
14
+ // Prepaid wallets: the additional-usage cap or an exhausted balance.
15
+ "monthly additional usage limit",
16
+ "additional usage is off",
17
+ "prepaid balance is used up",
18
+ // A team's spend reached the budget its organization set.
19
+ "team budget limit reached",
14
20
  ];
15
21
  const UNPAID_INVOICE_PHRASES = ["unpaid invoice"];
16
22
  export function classifyExpectedDeliveryFailure(message) {
@@ -1 +1 @@
1
- {"version":3,"file":"sdk-schemas.d.ts","sourceRoot":"","sources":["../../../src/internal/filesystem/sdk-schemas.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAmB3B,eAAO,MAAM,WAAW,EAAE,CAAC,CAAC,UAE1B,CAAC;AAEH,eAAO,MAAM,aAAa,EAAE,CAAC,CAAC,UAM7B,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,CAAC,CAAC,UAI3B,CAAC;AAEH,eAAO,MAAM,cAAc,EAAE,CAAC,CAAC,UAO9B,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,CAAC,CAAC,UAE5B,CAAC;AAEH,eAAO,MAAM,eAAe,EAAE,CAAC,CAAC,UAI/B,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,CAAC,CAAC,UAG1B,CAAC;AAEH,eAAO,MAAM,aAAa,EAAE,CAAC,CAAC,UAO7B,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,CAAC,CAAC,UAe1B,CAAC;AAuCH,eAAO,MAAM,aAAa,EAAE,CAAC,CAAC,UAK7B,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,CAAC,CAAC,UAGxB,CAAC;AA0BH,eAAO,MAAM,WAAW,EAAE,CAAC,CAAC,UAI3B,CAAC;AAEF,mFAAmF;AACnF,eAAO,MAAM,iBAAiB,EAAE,CAAC,CAAC,UAKhC,CAAC;AAEH,eAAO,MAAM,aAAa,EAAE,CAAC,CAAC,UAM7B,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,CAAC,CAAC,UAI/B,CAAC;AAEH,eAAO,MAAM,kBAAkB,EAAE,CAAC,CAAC,UAIlC,CAAC"}
1
+ {"version":3,"file":"sdk-schemas.d.ts","sourceRoot":"","sources":["../../../src/internal/filesystem/sdk-schemas.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAmB3B,eAAO,MAAM,WAAW,EAAE,CAAC,CAAC,UAE1B,CAAC;AAEH,eAAO,MAAM,aAAa,EAAE,CAAC,CAAC,UAM7B,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,CAAC,CAAC,UAI3B,CAAC;AAEH,eAAO,MAAM,cAAc,EAAE,CAAC,CAAC,UAO9B,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,CAAC,CAAC,UAE5B,CAAC;AAEH,eAAO,MAAM,eAAe,EAAE,CAAC,CAAC,UAI/B,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,CAAC,CAAC,UAG1B,CAAC;AAEH,eAAO,MAAM,aAAa,EAAE,CAAC,CAAC,UAO7B,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,CAAC,CAAC,UAe1B,CAAC;AAuCH,eAAO,MAAM,aAAa,EAAE,CAAC,CAAC,UAK7B,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,CAAC,CAAC,UAGxB,CAAC;AAgBH,eAAO,MAAM,WAAW,EAAE,CAAC,CAAC,UAI3B,CAAC;AAEF,mFAAmF;AACnF,eAAO,MAAM,iBAAiB,EAAE,CAAC,CAAC,UAKhC,CAAC;AAEH,eAAO,MAAM,aAAa,EAAE,CAAC,CAAC,UAM7B,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,CAAC,CAAC,UAI/B,CAAC;AAEH,eAAO,MAAM,kBAAkB,EAAE,CAAC,CAAC,UAIlC,CAAC"}
@@ -120,14 +120,15 @@ export const sdkLsArgs = z.object({
120
120
  const lsDirectoryTreeNodeFile = z.object({
121
121
  name: z.string(),
122
122
  });
123
- const lsDirectoryTreeNode = z.lazy(() => z.object({
123
+ // Not z.lazy: zod-to-json-schema warns on recursion with $refStrategy "none".
124
+ const lsDirectoryTreeNode = z.object({
124
125
  absPath: z.string(),
125
- childrenDirs: z.array(lsDirectoryTreeNode),
126
+ childrenDirs: z.array(z.unknown()),
126
127
  childrenFiles: z.array(lsDirectoryTreeNodeFile),
127
128
  childrenWereProcessed: z.boolean(),
128
129
  fullSubtreeExtensionCounts: z.record(z.number()),
129
130
  numFiles: z.number(),
130
- }));
131
+ });
131
132
  export const sdkLsResult = resultSchema(z.object({
132
133
  directoryTreeRoot: lsDirectoryTreeNode,
133
134
  }));
@@ -0,0 +1,48 @@
1
+ /**
2
+ * Multi-value HMAC secrets, July copy. The control plane keeps an
3
+ * equivalent parser and matcher in
4
+ * `backend/packages/server-shared/src/agentServe/agentSdkCatch.ts`; a
5
+ * backend drift test runs both over the shared vectors in
6
+ * `testing/hmac-secret-vectors.ts`.
7
+ *
8
+ * One named secret may hold several signing secrets, one per line, so a
9
+ * route that several provider subscriptions sign (each with its own
10
+ * secret), or one whose secret is mid-rotation, verifies under any of
11
+ * them. A value with no line break is one secret, used byte-for-byte.
12
+ */
13
+ /**
14
+ * Most signing secrets one named secret may hold. The control plane runs
15
+ * one HMAC per value over every unauthenticated request before any
16
+ * per-deployment limit applies, so the count is bounded rather than left to
17
+ * the secret's byte limit. A value over the cap verifies nothing.
18
+ */
19
+ export declare const MAX_HMAC_SECRET_VALUES = 32;
20
+ /** At least one signing secret. */
21
+ export type HmacSecrets = readonly [string, ...string[]];
22
+ export type ParsedHmacSecrets = {
23
+ ok: true;
24
+ secrets: HmacSecrets;
25
+ } | {
26
+ ok: false;
27
+ reason: "unset" | "too_many_values";
28
+ };
29
+ /**
30
+ * The signing secrets a named secret's value holds. Lines are trimmed and
31
+ * blank lines dropped; an unset or blank value is `unset`.
32
+ */
33
+ export declare function parseHmacSecrets(raw: string | undefined): ParsedHmacSecrets;
34
+ /**
35
+ * True when any signature in `presented` is `prefix` + the hex HMAC-SHA256
36
+ * of `body` under any of `secrets`. Without a `separator` the whole value is
37
+ * one signature. Every (secret, signature) pair is compared in constant
38
+ * time with no early exit, so timing does not reveal which matched; entries
39
+ * without the prefix never match.
40
+ */
41
+ export declare function hmacSignatureMatchesAny(args: {
42
+ body: string | Buffer;
43
+ presented: string;
44
+ secrets: HmacSecrets;
45
+ prefix: string;
46
+ separator: string | undefined;
47
+ }): boolean;
48
+ //# sourceMappingURL=hmac-secret-values.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hmac-secret-values.d.ts","sourceRoot":"","sources":["../../src/internal/hmac-secret-values.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB,KAAK,CAAC;AAEzC,mCAAmC;AACnC,MAAM,MAAM,WAAW,GAAG,SAAS,CAAC,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC;AAEzD,MAAM,MAAM,iBAAiB,GACzB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,WAAW,CAAA;CAAE,GAClC;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,OAAO,GAAG,iBAAiB,CAAA;CAAE,CAAC;AAIvD;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,iBAAiB,CAe3E;AAQD;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE;IAC5C,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,WAAW,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;CAC/B,GAAG,OAAO,CAmBV"}
@@ -0,0 +1,68 @@
1
+ /**
2
+ * Multi-value HMAC secrets, July copy. The control plane keeps an
3
+ * equivalent parser and matcher in
4
+ * `backend/packages/server-shared/src/agentServe/agentSdkCatch.ts`; a
5
+ * backend drift test runs both over the shared vectors in
6
+ * `testing/hmac-secret-vectors.ts`.
7
+ *
8
+ * One named secret may hold several signing secrets, one per line, so a
9
+ * route that several provider subscriptions sign (each with its own
10
+ * secret), or one whose secret is mid-rotation, verifies under any of
11
+ * them. A value with no line break is one secret, used byte-for-byte.
12
+ */
13
+ import { createHmac, timingSafeEqual } from "node:crypto";
14
+ /**
15
+ * Most signing secrets one named secret may hold. The control plane runs
16
+ * one HMAC per value over every unauthenticated request before any
17
+ * per-deployment limit applies, so the count is bounded rather than left to
18
+ * the secret's byte limit. A value over the cap verifies nothing.
19
+ */
20
+ export const MAX_HMAC_SECRET_VALUES = 32;
21
+ const LINE_BREAK = /\r\n|\n|\r/;
22
+ /**
23
+ * The signing secrets a named secret's value holds. Lines are trimmed and
24
+ * blank lines dropped; an unset or blank value is `unset`.
25
+ */
26
+ export function parseHmacSecrets(raw) {
27
+ const [first, ...rest] = raw === undefined || !LINE_BREAK.test(raw)
28
+ ? [raw ?? ""].filter((value) => value !== "")
29
+ : raw
30
+ .split(LINE_BREAK)
31
+ .map((line) => line.trim())
32
+ .filter((line) => line !== "");
33
+ if (first === undefined) {
34
+ return { ok: false, reason: "unset" };
35
+ }
36
+ if (rest.length + 1 > MAX_HMAC_SECRET_VALUES) {
37
+ return { ok: false, reason: "too_many_values" };
38
+ }
39
+ return { ok: true, secrets: [first, ...rest] };
40
+ }
41
+ function constantTimeStringEquals(a, b) {
42
+ const aBytes = Buffer.from(a, "utf8");
43
+ const bBytes = Buffer.from(b, "utf8");
44
+ return aBytes.length === bBytes.length && timingSafeEqual(aBytes, bBytes);
45
+ }
46
+ /**
47
+ * True when any signature in `presented` is `prefix` + the hex HMAC-SHA256
48
+ * of `body` under any of `secrets`. Without a `separator` the whole value is
49
+ * one signature. Every (secret, signature) pair is compared in constant
50
+ * time with no early exit, so timing does not reveal which matched; entries
51
+ * without the prefix never match.
52
+ */
53
+ export function hmacSignatureMatchesAny(args) {
54
+ const entries = (args.separator === undefined || args.separator.length === 0
55
+ ? [args.presented]
56
+ : args.presented.split(args.separator)).map((raw) => raw.trim());
57
+ let matched = false;
58
+ for (const secret of args.secrets) {
59
+ const expected = createHmac("sha256", secret).update(args.body).digest("hex");
60
+ for (const entry of entries) {
61
+ if (entry.startsWith(args.prefix) &&
62
+ constantTimeStringEquals(entry.slice(args.prefix.length).toLowerCase(), expected)) {
63
+ matched = true;
64
+ }
65
+ }
66
+ }
67
+ return matched;
68
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"host-platforms.d.ts","sourceRoot":"","sources":["../../src/internal/host-platforms.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAWH,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AAE5E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAErE,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,gBAAgB,CAAC;IACzB,KAAK,EAAE,eAAe,CAAC;CACxB;AAED;;;;GAIG;AACH,MAAM,MAAM,oBAAoB,GAAG,KAAK,GAAG,gBAAgB,GAAG,KAAK,GAAG,IAAI,GAAG,aAAa,CAAC;AAE3F,MAAM,WAAW,oBAAoB;IACnC,iBAAiB,CAAC,EAAE,wBAAwB,CAAC;IAC7C;;;OAGG;IACH,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,4DAA4D;IAC5D,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,kFAAkF;AAClF,wBAAgB,qBAAqB,CACnC,OAAO,GAAE;IAAE,WAAW,CAAC,EAAE,gBAAgB,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAO,GACnE,eAAe,CAmBjB;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,GAAE,oBAAyB,GAAG,aAAa,CAiBrF;AAED;;;;GAIG;AACH,wBAAsB,2BAA2B,IAAI,OAAO,CAAC,oBAAoB,CAAC,CAYjF;AAED;;;;;;;GAOG;AACH,wBAAsB,oBAAoB,CAAC,OAAO,EAAE;IAClD,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/B,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B,UAAU,CAAC,EAAE,oBAAoB,CAAC;CACnC,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAgDhC"}
1
+ {"version":3,"file":"host-platforms.d.ts","sourceRoot":"","sources":["../../src/internal/host-platforms.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAWH,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AAE5E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAErE,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,gBAAgB,CAAC;IACzB,KAAK,EAAE,eAAe,CAAC;CACxB;AAED;;;;GAIG;AACH,MAAM,MAAM,oBAAoB,GAAG,KAAK,GAAG,gBAAgB,GAAG,KAAK,GAAG,IAAI,GAAG,aAAa,CAAC;AAE3F,MAAM,WAAW,oBAAoB;IACnC,iBAAiB,CAAC,EAAE,wBAAwB,CAAC;IAC7C;;;OAGG;IACH,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,4DAA4D;IAC5D,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,kFAAkF;AAClF,wBAAgB,qBAAqB,CACnC,OAAO,GAAE;IAAE,WAAW,CAAC,EAAE,gBAAgB,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAO,GACnE,eAAe,CAsBjB;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,GAAE,oBAAyB,GAAG,aAAa,CAoBrF;AAED;;;;GAIG;AACH,wBAAsB,2BAA2B,IAAI,OAAO,CAAC,oBAAoB,CAAC,CAYjF;AAED;;;;;;;GAOG;AACH,wBAAsB,oBAAoB,CAAC,OAAO,EAAE;IAClD,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/B,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B,UAAU,CAAC,EAAE,oBAAoB,CAAC;CACnC,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAgDhC"}
@@ -21,7 +21,10 @@ export function createHostSlackClient(options = {}) {
21
21
  throw new Error(`No Slack bot token available (set ${hint}).`);
22
22
  }
23
23
  return new WebClient(token);
24
- })();
24
+ })().catch((error) => {
25
+ slackPromise = undefined;
26
+ throw error;
27
+ });
25
28
  return slackPromise;
26
29
  },
27
30
  };
@@ -38,6 +41,9 @@ export function createHostPlatforms(options = {}) {
38
41
  getOctokit: () => {
39
42
  octokitPromise ??= createGitHubOctokit({
40
43
  credentials: options.githubCredentials,
44
+ }).catch((error) => {
45
+ octokitPromise = undefined;
46
+ throw error;
41
47
  });
42
48
  return octokitPromise;
43
49
  },
@@ -89,7 +95,7 @@ export async function warmupHostGitHubAuth(options) {
89
95
  }
90
96
  }
91
97
  const label = source === "cursor-account"
92
- ? "Cursor account repo-scoped credential (also exported as GH_TOKEN for gh CLI)"
98
+ ? "Cursor account credential"
93
99
  : source === "app"
94
100
  ? exportedGhToken
95
101
  ? "GitHub App installation token (also exported as GH_TOKEN for gh CLI)"
@@ -1,15 +1,15 @@
1
- import { z } from "zod/v3";
2
- import type { JsonSchemaObject } from "../types.js";
3
- export declare function isZodSchema(value: unknown): value is z.ZodTypeAny;
1
+ import type { JsonSchemaObject, ZodSchema } from "../types.js";
2
+ export declare function isZodSchema(value: unknown): value is ZodSchema;
4
3
  /** Convert an authored input schema into the JSON Schema shown to the model. */
5
- export declare function toolInputJsonSchema(inputSchema: z.ZodTypeAny | JsonSchemaObject | undefined): JsonSchemaObject;
4
+ export declare function toolInputJsonSchema(inputSchema: ZodSchema | JsonSchemaObject | undefined): JsonSchemaObject;
6
5
  /**
7
6
  * Convert an authored output schema into the JSON Schema advertised on the
8
7
  * tool. Unlike {@link toolInputJsonSchema} there is no fallback: an
9
8
  * undeclared output schema stays undeclared (the MCP field is optional), and
10
- * outputs are never validated against it.
9
+ * outputs are never validated against it. Zod 4 schemas describe the
10
+ * `execute` result here, so fields with a default are required.
11
11
  */
12
- export declare function toolOutputJsonSchema(outputSchema: z.ZodTypeAny | JsonSchemaObject | undefined): JsonSchemaObject | undefined;
12
+ export declare function toolOutputJsonSchema(outputSchema: ZodSchema | JsonSchemaObject | undefined): JsonSchemaObject | undefined;
13
13
  export type ToolInputValidation = {
14
14
  ok: true;
15
15
  value: unknown;
@@ -21,5 +21,5 @@ export type ToolInputValidation = {
21
21
  * Validate tool-call args before `execute` runs. Zod schemas validate (and
22
22
  * transform); plain JSON schemas pass through unvalidated.
23
23
  */
24
- export declare function validateToolInput(inputSchema: z.ZodTypeAny | JsonSchemaObject | undefined, args: unknown): ToolInputValidation;
24
+ export declare function validateToolInput(inputSchema: ZodSchema | JsonSchemaObject | undefined, args: unknown): ToolInputValidation;
25
25
  //# sourceMappingURL=json-schema.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"json-schema.d.ts","sourceRoot":"","sources":["../../src/internal/json-schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAE3B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAQpD,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,CAAC,CAAC,UAAU,CAajE;AAED,gFAAgF;AAChF,wBAAgB,mBAAmB,CACjC,WAAW,EAAE,CAAC,CAAC,UAAU,GAAG,gBAAgB,GAAG,SAAS,GACvD,gBAAgB,CAKlB;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,YAAY,EAAE,CAAC,CAAC,UAAU,GAAG,gBAAgB,GAAG,SAAS,GACxD,gBAAgB,GAAG,SAAS,CAK9B;AAsBD,MAAM,MAAM,mBAAmB,GAAG;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAEhG;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,WAAW,EAAE,CAAC,CAAC,UAAU,GAAG,gBAAgB,GAAG,SAAS,EACxD,IAAI,EAAE,OAAO,GACZ,mBAAmB,CAerB"}
1
+ {"version":3,"file":"json-schema.d.ts","sourceRoot":"","sources":["../../src/internal/json-schema.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAS/D,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,SAAS,CAa9D;AAED,gFAAgF;AAChF,wBAAgB,mBAAmB,CACjC,WAAW,EAAE,SAAS,GAAG,gBAAgB,GAAG,SAAS,GACpD,gBAAgB,CAKlB;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAClC,YAAY,EAAE,SAAS,GAAG,gBAAgB,GAAG,SAAS,GACrD,gBAAgB,GAAG,SAAS,CAK9B;AAmBD,MAAM,MAAM,mBAAmB,GAAG;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAEhG;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,WAAW,EAAE,SAAS,GAAG,gBAAgB,GAAG,SAAS,EACrD,IAAI,EAAE,OAAO,GACZ,mBAAmB,CAerB"}
@@ -1,5 +1,6 @@
1
1
  import { z } from "zod/v3";
2
2
  import { zodToJsonSchema } from "zod-to-json-schema";
3
+ import { isZodV4Schema, zodV4ToJsonSchema } from "./zod-schema.js";
3
4
  const ANY_OBJECT_SCHEMA = {
4
5
  type: "object",
5
6
  properties: {},
@@ -22,38 +23,34 @@ export function toolInputJsonSchema(inputSchema) {
22
23
  if (inputSchema === undefined) {
23
24
  return ANY_OBJECT_SCHEMA;
24
25
  }
25
- return authoredSchemaToJsonSchema(inputSchema);
26
+ return authoredSchemaToJsonSchema(inputSchema, "input");
26
27
  }
27
28
  /**
28
29
  * Convert an authored output schema into the JSON Schema advertised on the
29
30
  * tool. Unlike {@link toolInputJsonSchema} there is no fallback: an
30
31
  * undeclared output schema stays undeclared (the MCP field is optional), and
31
- * outputs are never validated against it.
32
+ * outputs are never validated against it. Zod 4 schemas describe the
33
+ * `execute` result here, so fields with a default are required.
32
34
  */
33
35
  export function toolOutputJsonSchema(outputSchema) {
34
36
  if (outputSchema === undefined) {
35
37
  return undefined;
36
38
  }
37
- return authoredSchemaToJsonSchema(outputSchema);
39
+ return authoredSchemaToJsonSchema(outputSchema, "output");
38
40
  }
39
- function authoredSchemaToJsonSchema(schema) {
41
+ function authoredSchemaToJsonSchema(schema, io) {
40
42
  if (!isZodSchema(schema)) {
41
43
  return schema;
42
44
  }
43
- const converted = convertZodSchema(schema);
45
+ const converted = isZodV4Schema(schema)
46
+ ? zodV4ToJsonSchema(schema, io)
47
+ : zodToJsonSchema(schema, {
48
+ $refStrategy: "none",
49
+ target: "jsonSchema7",
50
+ });
44
51
  delete converted.$schema;
45
52
  return converted;
46
53
  }
47
- function convertZodSchema(schema) {
48
- const native = schema.toJSONSchema;
49
- if (typeof native === "function") {
50
- return native.call(schema);
51
- }
52
- return zodToJsonSchema(schema, {
53
- $refStrategy: "none",
54
- target: "jsonSchema7",
55
- });
56
- }
57
54
  /**
58
55
  * Validate tool-call args before `execute` runs. Zod schemas validate (and
59
56
  * transform); plain JSON schemas pass through unvalidated.
@@ -68,7 +65,7 @@ export function validateToolInput(inputSchema, args) {
68
65
  }
69
66
  const issues = parsed.error.issues
70
67
  .map((issue) => {
71
- const path = issue.path.join(".");
68
+ const path = issue.path.map(String).join(".");
72
69
  return path === "" ? issue.message : `${path}: ${issue.message}`;
73
70
  })
74
71
  .join("; ");
@@ -1 +1 @@
1
- {"version":3,"file":"collector.d.ts","sourceRoot":"","sources":["../../../src/internal/otel/collector.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAcH,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAGhE,OAAO,EAAE,KAAK,SAAS,EAAS,MAAM,YAAY,CAAC;AAEnD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAMhD,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,WAAW,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,eAAgB,SAAQ,eAAe;IACtD,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,CAAC,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,WAAW,GAAG,IAAI,CAAC;IACzD,KAAK,IAAI,IAAI,CAAC;IACd;;;;;OAKG;IACH,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAC1E;;;;OAIG;IACH,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAC1E,0FAA0F;IAC1F,UAAU,CAAC,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,IAAI,CAAC;IAC7D,yEAAyE;IACzE,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,IAAI,CAAC;IACrF,mEAAmE;IACnE,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,SAAS,CAAC;CAChF;AAkBD,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,WAAW,EACpB,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAC1B,aAAa,CAs1Bf"}
1
+ {"version":3,"file":"collector.d.ts","sourceRoot":"","sources":["../../../src/internal/otel/collector.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAcH,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAGhE,OAAO,EAAE,KAAK,SAAS,EAAS,MAAM,YAAY,CAAC;AAEnD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAMhD,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,WAAW,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,eAAgB,SAAQ,eAAe;IACtD,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,CAAC,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,WAAW,GAAG,IAAI,CAAC;IACzD,KAAK,IAAI,IAAI,CAAC;IACd;;;;;OAKG;IACH,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAC1E;;;;OAIG;IACH,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAC1E,0FAA0F;IAC1F,UAAU,CAAC,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,IAAI,CAAC;IAC7D,yEAAyE;IACzE,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,IAAI,CAAC;IACrF,mEAAmE;IACnE,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,SAAS,CAAC;CAChF;AAkBD,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,WAAW,EACpB,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAC1B,aAAa,CAw1Bf"}
@@ -247,6 +247,7 @@ export function createOtelCollector(runtime, agentName, log) {
247
247
  const turn = ensureTurn(event, session, startTime);
248
248
  const span = turn?.tools.get(event.data.callId);
249
249
  const status = event.data.isError ? "failure" : "success";
250
+ const failureReason = event.data.isError ? toolFailureReason(event.data.output) : undefined;
250
251
  if (span !== undefined) {
251
252
  span.setAttribute("cursor.tool.status", status);
252
253
  span.setAttributes(attrs(computerUseResultAttrs(event.data)));
@@ -259,7 +260,7 @@ export function createOtelCollector(runtime, agentName, log) {
259
260
  span.setAttribute("agent_sdk.tool_error_class", errorClass);
260
261
  span.setStatus({
261
262
  code: SpanStatusCode.ERROR,
262
- message: toolFailureReason(event.data.output) ?? "tool error",
263
+ message: failureReason ?? "tool error",
263
264
  });
264
265
  }
265
266
  span.end(startTime);
@@ -277,6 +278,7 @@ export function createOtelCollector(runtime, agentName, log) {
277
278
  "cursor.tool.name": event.data.toolName,
278
279
  "cursor.tool.status": status,
279
280
  "agent_sdk.call_id": event.data.callId,
281
+ "agent_sdk.error_message": failureReason,
280
282
  }));
281
283
  // Direct callTool never emits turn.completed — close when idle.
282
284
  if (turn !== undefined &&
@@ -2,6 +2,11 @@
2
2
  * Merge authored `defineOtel`, `serve({ otel })`, and standard OTel env.
3
3
  */
4
4
  import { type OtelConfig, type OtelDefinition, type OtelExporterConfig, type OtelLogOptions, type OtelMetricOptions, type OtelSignal, type OtelTraceOptions } from "../../otel.js";
5
+ export type MetricsTemporality = "cumulative" | "delta" | "lowmemory";
6
+ export interface ResolvedOtelMetrics extends OtelMetricOptions {
7
+ temporality: MetricsTemporality;
8
+ unrecognizedTemporality?: string;
9
+ }
5
10
  export interface ResolvedOtelConfig {
6
11
  enabled: boolean;
7
12
  serviceName: string;
@@ -9,7 +14,7 @@ export interface ResolvedOtelConfig {
9
14
  resourceAttributes: Record<string, string>;
10
15
  exporters: OtelExporterConfig[];
11
16
  traces: false | OtelTraceOptions;
12
- metrics: false | OtelMetricOptions;
17
+ metrics: false | ResolvedOtelMetrics;
13
18
  logs: false | OtelLogOptions;
14
19
  }
15
20
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/internal/otel/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,KAAK,UAAU,EACf,KAAK,cAAc,EACnB,KAAK,kBAAkB,EACvB,KAAK,cAAc,EACnB,KAAK,iBAAiB,EACtB,KAAK,UAAU,EACf,KAAK,gBAAgB,EAEtB,MAAM,eAAe,CAAC;AAEvB,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC3C,SAAS,EAAE,kBAAkB,EAAE,CAAC;IAChC,MAAM,EAAE,KAAK,GAAG,gBAAgB,CAAC;IACjC,OAAO,EAAE,KAAK,GAAG,iBAAiB,CAAC;IACnC,IAAI,EAAE,KAAK,GAAG,cAAc,CAAC;CAC9B;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,aAAa,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,cAAc,CAAA;CAAE,CAAC,GAC3E,cAAc,GAAG,SAAS,CAmB5B;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE;IACvC,QAAQ,CAAC,EAAE,UAAU,CAAC;IACtB,KAAK,CAAC,EAAE,UAAU,GAAG,KAAK,CAAC;IAC3B,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;CACzB,GAAG,kBAAkB,CAkDrB;AAED,8EAA8E;AAC9E,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAiBhF;AAWD,mEAAmE;AACnE,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED,0EAA0E;AAC1E,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,SAAS,kBAAkB,EAAE,EACxC,MAAM,EAAE,UAAU,GACjB,kBAAkB,EAAE,CAItB;AAED,wBAAgB,kBAAkB,IAAI,kBAAkB,CAWvD;AA8GD,uFAAuF;AACvF,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAYjD"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/internal/otel/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,KAAK,UAAU,EACf,KAAK,cAAc,EACnB,KAAK,kBAAkB,EACvB,KAAK,cAAc,EACnB,KAAK,iBAAiB,EACtB,KAAK,UAAU,EACf,KAAK,gBAAgB,EAEtB,MAAM,eAAe,CAAC;AAEvB,MAAM,MAAM,kBAAkB,GAAG,YAAY,GAAG,OAAO,GAAG,WAAW,CAAC;AAEtE,MAAM,WAAW,mBAAoB,SAAQ,iBAAiB;IAC5D,WAAW,EAAE,kBAAkB,CAAC;IAChC,uBAAuB,CAAC,EAAE,MAAM,CAAC;CAClC;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC3C,SAAS,EAAE,kBAAkB,EAAE,CAAC;IAChC,MAAM,EAAE,KAAK,GAAG,gBAAgB,CAAC;IACjC,OAAO,EAAE,KAAK,GAAG,mBAAmB,CAAC;IACrC,IAAI,EAAE,KAAK,GAAG,cAAc,CAAC;CAC9B;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,aAAa,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,cAAc,CAAA;CAAE,CAAC,GAC3E,cAAc,GAAG,SAAS,CAmB5B;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE;IACvC,QAAQ,CAAC,EAAE,UAAU,CAAC;IACtB,KAAK,CAAC,EAAE,UAAU,GAAG,KAAK,CAAC;IAC3B,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;CACzB,GAAG,kBAAkB,CAkDrB;AAED,8EAA8E;AAC9E,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAiBhF;AAWD,mEAAmE;AACnE,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED,0EAA0E;AAC1E,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,SAAS,kBAAkB,EAAE,EACxC,MAAM,EAAE,UAAU,GACjB,kBAAkB,EAAE,CAItB;AAED,wBAAgB,kBAAkB,IAAI,kBAAkB,CAWvD;AAgJD,uFAAuF;AACvF,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAYjD"}
@@ -56,7 +56,7 @@ export function resolveOtelConfig(input) {
56
56
  return disabledOtelConfig();
57
57
  }
58
58
  const traces = resolveSignal(merged.traces);
59
- const metrics = exporters.length === 0 ? false : resolveSignal(merged.metrics);
59
+ const metrics = exporters.length === 0 ? false : resolveMetrics(merged.metrics, env);
60
60
  const logs = exporters.length === 0 ? false : resolveLogs(merged.logs, env);
61
61
  if (exporters.length === 0 && traces === false) {
62
62
  return disabledOtelConfig();
@@ -170,6 +170,32 @@ function protocolFromEnv(raw) {
170
170
  // Default protobuf — matches Cursor enterprise OTLP/HTTP. grpc unsupported.
171
171
  return "http/protobuf";
172
172
  }
173
+ function metricsTemporalityFromEnv(raw) {
174
+ const value = raw?.trim().toLowerCase();
175
+ if (value === undefined || value.length === 0) {
176
+ return { temporality: "delta", unrecognized: undefined };
177
+ }
178
+ switch (value) {
179
+ case "cumulative":
180
+ case "delta":
181
+ case "lowmemory":
182
+ return { temporality: value, unrecognized: undefined };
183
+ default:
184
+ return { temporality: "delta", unrecognized: raw };
185
+ }
186
+ }
187
+ function resolveMetrics(value, env) {
188
+ const signal = resolveSignal(value);
189
+ if (signal === false) {
190
+ return false;
191
+ }
192
+ const parsed = metricsTemporalityFromEnv(env.OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE);
193
+ return {
194
+ ...signal,
195
+ temporality: parsed.temporality,
196
+ unrecognizedTemporality: parsed.unrecognized,
197
+ };
198
+ }
173
199
  function resolveSignal(value) {
174
200
  if (value === false) {
175
201
  return false;
@@ -1 +1 @@
1
- {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../../src/internal/otel/runtime.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,KAAK,SAAS,EACd,KAAK,KAAK,EACV,KAAK,MAAM,EAMZ,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,KAAK,MAAM,IAAI,UAAU,EAAQ,MAAM,yBAAyB,CAAC;AAiC1E,OAAO,EAGL,KAAK,kBAAkB,EAExB,MAAM,aAAa,CAAC;AAKrB;;;;GAIG;AACH,eAAO,MAAM,2BAA2B,OAAQ,CAAC;AAEjD,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,kBAAkB,CAAC;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,qEAAqE;IACrE,KAAK,EAAE,KAAK,GAAG,SAAS,CAAC;IACzB,MAAM,EAAE,UAAU,GAAG,SAAS,CAAC;IAC/B,YAAY,EAAE,SAAS,GAAG,SAAS,CAAC;IACpC,UAAU,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAChC,QAAQ,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/B;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,WAAW,CAAC;IACrB;;;;OAIG;IACH,MAAM,IAAI,IAAI,CAAC;CAChB;AAED,MAAM,WAAW,wBAAwB;IACvC,0EAA0E;IAC1E,aAAa,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACnC;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,MAAM,kBAAkB,EACjC,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,EAC3B,OAAO,GAAE,wBAA6B,GACrC,iBAAiB,CAsEnB;AAED,wBAAsB,qBAAqB,CAAC,OAAO,EAAE,WAAW,GAAG,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAE3F;AAED,wBAAsB,mBAAmB,CAAC,OAAO,EAAE,WAAW,GAAG,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAEzF;AAED,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,EACtB,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,EAC3B,SAAS,GAAE,MAAoC,GAC9C,OAAO,CAAC,IAAI,CAAC,CAef"}
1
+ {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../../src/internal/otel/runtime.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,KAAK,SAAS,EACd,KAAK,KAAK,EACV,KAAK,MAAM,EAMZ,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,KAAK,MAAM,IAAI,UAAU,EAAQ,MAAM,yBAAyB,CAAC;AAmC1E,OAAO,EAIL,KAAK,kBAAkB,EAGxB,MAAM,aAAa,CAAC;AAKrB;;;;GAIG;AACH,eAAO,MAAM,2BAA2B,OAAQ,CAAC;AAEjD,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,kBAAkB,CAAC;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,qEAAqE;IACrE,KAAK,EAAE,KAAK,GAAG,SAAS,CAAC;IACzB,MAAM,EAAE,UAAU,GAAG,SAAS,CAAC;IAC/B,YAAY,EAAE,SAAS,GAAG,SAAS,CAAC;IACpC,UAAU,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAChC,QAAQ,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/B;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,WAAW,CAAC;IACrB;;;;OAIG;IACH,MAAM,IAAI,IAAI,CAAC;CAChB;AAED,MAAM,WAAW,wBAAwB;IACvC,0EAA0E;IAC1E,aAAa,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACnC;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,MAAM,kBAAkB,EACjC,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,EAC3B,OAAO,GAAE,wBAA6B,GACrC,iBAAiB,CAsEnB;AAED,wBAAsB,qBAAqB,CAAC,OAAO,EAAE,WAAW,GAAG,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAE3F;AAED,wBAAsB,mBAAmB,CAAC,OAAO,EAAE,WAAW,GAAG,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAEzF;AAED,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,EACtB,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,EAC3B,SAAS,GAAE,MAAoC,GAC9C,OAAO,CAAC,IAAI,CAAC,CAef"}