@cursor/bdk 0.2.23 → 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 (421) hide show
  1. package/AGENTS.md +1 -0
  2. package/dist/artifacts.d.ts +1 -1
  3. package/dist/artifacts.js +1 -1
  4. package/dist/bin/agent-serve.d.ts +1 -1
  5. package/dist/bin/agent-serve.js +48 -12
  6. package/dist/channels/bitbucket/bitbucket-channel.js +1 -1
  7. package/dist/channels/bitbucket/bitbucket-webhook.d.ts +3 -2
  8. package/dist/channels/bitbucket/bitbucket-webhook.d.ts.map +1 -1
  9. package/dist/channels/bitbucket/bitbucket-webhook.js +14 -9
  10. package/dist/channels/change-monitors/change-monitors-channel.js +1 -1
  11. package/dist/channels/deployments/deployments-channel.js +1 -1
  12. package/dist/channels/github/github-channel.d.ts.map +1 -1
  13. package/dist/channels/github/github-channel.js +10 -19
  14. package/dist/channels/gitlab/gitlab-channel.js +1 -1
  15. package/dist/channels/issues/issues-channel.js +1 -1
  16. package/dist/channels/origin/origin-channel.js +1 -1
  17. package/dist/channels/pagerduty/api.d.ts +74 -0
  18. package/dist/channels/pagerduty/api.d.ts.map +1 -0
  19. package/dist/channels/pagerduty/api.js +101 -0
  20. package/dist/channels/pagerduty/defaults.d.ts +42 -0
  21. package/dist/channels/pagerduty/defaults.d.ts.map +1 -0
  22. package/dist/channels/pagerduty/defaults.js +132 -0
  23. package/dist/channels/pagerduty/events.d.ts +24 -0
  24. package/dist/channels/pagerduty/events.d.ts.map +1 -0
  25. package/dist/channels/pagerduty/events.js +38 -0
  26. package/dist/channels/pagerduty/index.d.ts +31 -0
  27. package/dist/channels/pagerduty/index.d.ts.map +1 -0
  28. package/dist/channels/pagerduty/index.js +30 -0
  29. package/dist/channels/pagerduty/pagerduty-channel.d.ts +64 -0
  30. package/dist/channels/pagerduty/pagerduty-channel.d.ts.map +1 -0
  31. package/dist/channels/pagerduty/pagerduty-channel.js +195 -0
  32. package/dist/channels/pagerduty/pagerduty-webhook.d.ts +70 -0
  33. package/dist/channels/pagerduty/pagerduty-webhook.d.ts.map +1 -0
  34. package/dist/channels/pagerduty/pagerduty-webhook.js +280 -0
  35. package/dist/channels/pagerduty/payload.d.ts +33 -0
  36. package/dist/channels/pagerduty/payload.d.ts.map +1 -0
  37. package/dist/channels/pagerduty/payload.js +150 -0
  38. package/dist/channels/pagerduty/replay.d.ts +35 -0
  39. package/dist/channels/pagerduty/replay.d.ts.map +1 -0
  40. package/dist/channels/pagerduty/replay.js +115 -0
  41. package/dist/channels/pagerduty/secrets.d.ts +16 -0
  42. package/dist/channels/pagerduty/secrets.d.ts.map +1 -0
  43. package/dist/channels/pagerduty/secrets.js +23 -0
  44. package/dist/channels/pagerduty/self-user.d.ts +51 -0
  45. package/dist/channels/pagerduty/self-user.d.ts.map +1 -0
  46. package/dist/channels/pagerduty/self-user.js +157 -0
  47. package/dist/channels/pagerduty/state.d.ts +31 -0
  48. package/dist/channels/pagerduty/state.d.ts.map +1 -0
  49. package/dist/channels/pagerduty/state.js +30 -0
  50. package/dist/channels/pagerduty/types.d.ts +217 -0
  51. package/dist/channels/pagerduty/types.d.ts.map +1 -0
  52. package/dist/channels/pagerduty/types.js +1 -0
  53. package/dist/channels/runs/runs-channel.js +1 -1
  54. package/dist/channels/slack/tool-approval-events.js +5 -5
  55. package/dist/channels.d.ts +14 -1
  56. package/dist/channels.d.ts.map +1 -1
  57. package/dist/channels.js +24 -9
  58. package/dist/docs/404.html +3 -3
  59. package/dist/docs/assets/{app.AXQcJZaf.js → app.BjS1QEI4.js} +4 -4
  60. package/dist/docs/assets/chunks/@localSearchIndexroot.oGqZumnJ.js +1 -0
  61. package/dist/docs/assets/chunks/{VPLocalSearchBox.hlZ2vmun.js → VPLocalSearchBox.BOuvjb5Y.js} +2 -2
  62. package/dist/docs/assets/chunks/{arc.9KNWdH-l.js → arc.3WR6Jf-y.js} +1 -1
  63. package/dist/docs/assets/chunks/{architectureDiagram-Q4EWVU46.BfGzkBHI.js → architectureDiagram-Q4EWVU46.Dtb6Dqh6.js} +1 -1
  64. package/dist/docs/assets/chunks/{baseUniq.Btk8-2Rs.js → baseUniq.BUyrgrZE.js} +1 -1
  65. package/dist/docs/assets/chunks/{blockDiagram-DXYQGD6D.BmHm9OH5.js → blockDiagram-DXYQGD6D.BVLV_voZ.js} +1 -1
  66. package/dist/docs/assets/chunks/{c4Diagram-AHTNJAMY.9POrbDHJ.js → c4Diagram-AHTNJAMY.jXJ1q70M.js} +1 -1
  67. package/dist/docs/assets/chunks/channel.Dt4aweTm.js +1 -0
  68. package/dist/docs/assets/chunks/{chunk-4BX2VUAB.YWZVSM6S.js → chunk-4BX2VUAB.zz1SMBvK.js} +1 -1
  69. package/dist/docs/assets/chunks/{chunk-4TB4RGXK.Cxr_SFgw.js → chunk-4TB4RGXK.CzYKuv3I.js} +1 -1
  70. package/dist/docs/assets/chunks/{chunk-55IACEB6.DtiJyPlD.js → chunk-55IACEB6.C7_tcJZD.js} +1 -1
  71. package/dist/docs/assets/chunks/{chunk-EDXVE4YY.b5gNHJPH.js → chunk-EDXVE4YY.DeTwQPVO.js} +1 -1
  72. package/dist/docs/assets/chunks/{chunk-FMBD7UC4.DmN9yA_M.js → chunk-FMBD7UC4.DhMTl7ut.js} +1 -1
  73. package/dist/docs/assets/chunks/{chunk-OYMX7WX6.Dfm3xgV5.js → chunk-OYMX7WX6.Me7f5hEp.js} +1 -1
  74. package/dist/docs/assets/chunks/{chunk-QZHKN3VN.sXNxDcJA.js → chunk-QZHKN3VN.D0E0Bb6g.js} +1 -1
  75. package/dist/docs/assets/chunks/{chunk-YZCP3GAM.DgBnDUV7.js → chunk-YZCP3GAM.CdOOBFYL.js} +1 -1
  76. package/dist/docs/assets/chunks/classDiagram-6PBFFD2Q.DGUHZs6j.js +1 -0
  77. package/dist/docs/assets/chunks/classDiagram-v2-HSJHXN6E.DGUHZs6j.js +1 -0
  78. package/dist/docs/assets/chunks/clone.DWf3k0Z0.js +1 -0
  79. package/dist/docs/assets/chunks/{cose-bilkent-S5V4N54A.D18MEcoN.js → cose-bilkent-S5V4N54A.BNbGESzN.js} +1 -1
  80. package/dist/docs/assets/chunks/{dagre-KV5264BT.CSf3tihh.js → dagre-KV5264BT.zU7Lu_xJ.js} +1 -1
  81. package/dist/docs/assets/chunks/{diagram-5BDNPKRD.cbfzAfoC.js → diagram-5BDNPKRD.B9qOdE5h.js} +1 -1
  82. package/dist/docs/assets/chunks/{diagram-G4DWMVQ6.6i6P3uu9.js → diagram-G4DWMVQ6.D8X-sf77.js} +1 -1
  83. package/dist/docs/assets/chunks/{diagram-MMDJMWI5.B9HAIfN6.js → diagram-MMDJMWI5.CW7MvMlE.js} +1 -1
  84. package/dist/docs/assets/chunks/{diagram-TYMM5635.B9baAjUv.js → diagram-TYMM5635.J489G0Nd.js} +1 -1
  85. package/dist/docs/assets/chunks/{erDiagram-SMLLAGMA.DaBmX_GN.js → erDiagram-SMLLAGMA.BkW7tGfs.js} +1 -1
  86. package/dist/docs/assets/chunks/{flowDiagram-DWJPFMVM.CJqQJjkb.js → flowDiagram-DWJPFMVM.jc9iWORD.js} +1 -1
  87. package/dist/docs/assets/chunks/{ganttDiagram-T4ZO3ILL.CIXBLQhC.js → ganttDiagram-T4ZO3ILL.B-UQfd9E.js} +1 -1
  88. package/dist/docs/assets/chunks/{gitGraphDiagram-UUTBAWPF.CDgentto.js → gitGraphDiagram-UUTBAWPF.DFzrTSlJ.js} +1 -1
  89. package/dist/docs/assets/chunks/{graph.BWHn6JBQ.js → graph.C5IB6_e_.js} +1 -1
  90. package/dist/docs/assets/chunks/{infoDiagram-42DDH7IO.d9VU_ts_.js → infoDiagram-42DDH7IO.DwF0-c8L.js} +1 -1
  91. package/dist/docs/assets/chunks/{ishikawaDiagram-UXIWVN3A.BNO79Prj.js → ishikawaDiagram-UXIWVN3A.fBaTqzE7.js} +1 -1
  92. package/dist/docs/assets/chunks/{journeyDiagram-VCZTEJTY.CPgUTM1R.js → journeyDiagram-VCZTEJTY.CM8gDVJy.js} +1 -1
  93. package/dist/docs/assets/chunks/{kanban-definition-6JOO6SKY.idl0Eoe1.js → kanban-definition-6JOO6SKY.YiD1p0LB.js} +1 -1
  94. package/dist/docs/assets/chunks/{layout.BY7DIMr6.js → layout.6Um-DVJT.js} +1 -1
  95. package/dist/docs/assets/chunks/{linear.DYaUDrHd.js → linear.DcTeg4Hn.js} +1 -1
  96. package/dist/docs/assets/chunks/{min.V6MWb1UC.js → min.CIxkY8Fe.js} +1 -1
  97. package/dist/docs/assets/chunks/{mindmap-definition-QFDTVHPH.BRlJXuFS.js → mindmap-definition-QFDTVHPH.D4QM_voR.js} +1 -1
  98. package/dist/docs/assets/chunks/{pieDiagram-DEJITSTG.BIhkDLcB.js → pieDiagram-DEJITSTG.nmB309G1.js} +1 -1
  99. package/dist/docs/assets/chunks/{quadrantDiagram-34T5L4WZ.Bw-_VEL3.js → quadrantDiagram-34T5L4WZ.D1HtZR3C.js} +1 -1
  100. package/dist/docs/assets/chunks/{requirementDiagram-MS252O5E.DolEGwxw.js → requirementDiagram-MS252O5E.CZgQWob-.js} +1 -1
  101. package/dist/docs/assets/chunks/{sankeyDiagram-XADWPNL6.hMM-8BhN.js → sankeyDiagram-XADWPNL6.DtiBfU-P.js} +1 -1
  102. package/dist/docs/assets/chunks/{sequenceDiagram-FGHM5R23.Bg_CRVDy.js → sequenceDiagram-FGHM5R23.Cld4gDSt.js} +1 -1
  103. package/dist/docs/assets/chunks/{stateDiagram-FHFEXIEX.DNWdl34_.js → stateDiagram-FHFEXIEX.DatP823_.js} +1 -1
  104. package/dist/docs/assets/chunks/stateDiagram-v2-QKLJ7IA2.C0571l4D.js +1 -0
  105. package/dist/docs/assets/chunks/{theme.CBW1oolh.js → theme.D5jbBys7.js} +2 -2
  106. package/dist/docs/assets/chunks/{timeline-definition-GMOUNBTQ.Cr1wJ1mB.js → timeline-definition-GMOUNBTQ.DwQLI2be.js} +1 -1
  107. package/dist/docs/assets/chunks/{vennDiagram-DHZGUBPP.BltDV9j7.js → vennDiagram-DHZGUBPP.a5yMfnsa.js} +1 -1
  108. package/dist/docs/assets/chunks/{wardley-RL74JXVD.BWPaUhOs.js → wardley-RL74JXVD.B-FXivgT.js} +1 -1
  109. package/dist/docs/assets/chunks/{wardleyDiagram-NUSXRM2D.nsADqCCo.js → wardleyDiagram-NUSXRM2D.Dz--Opy3.js} +1 -1
  110. package/dist/docs/assets/chunks/{xychartDiagram-5P7HB3ND.CCwbO3dK.js → xychartDiagram-5P7HB3ND.Dl8w8TeT.js} +1 -1
  111. package/dist/docs/assets/{deployment.md.CtSJ6sF9.js → deployment.md.3MMWuPeV.js} +5 -5
  112. package/dist/docs/assets/{deployment.md.CtSJ6sF9.lean.js → deployment.md.3MMWuPeV.lean.js} +1 -1
  113. package/dist/docs/assets/{guides_cloud-agents.md.CBK7W0-O.js → guides_cloud-agents.md.BzbzcOyj.js} +2 -2
  114. package/dist/docs/assets/{guides_cloud-agents.md.CBK7W0-O.lean.js → guides_cloud-agents.md.BzbzcOyj.lean.js} +1 -1
  115. package/dist/docs/assets/{guides_opentelemetry.md.ByW1Fs7b.js → guides_opentelemetry.md.DBQtp7_V.js} +13 -5
  116. package/dist/docs/assets/{guides_opentelemetry.md.ByW1Fs7b.lean.js → guides_opentelemetry.md.DBQtp7_V.lean.js} +1 -1
  117. package/dist/docs/assets/guides_pagerduty.md.BHXMcMtx.js +60 -0
  118. package/dist/docs/assets/guides_pagerduty.md.BHXMcMtx.lean.js +1 -0
  119. package/dist/docs/assets/{reference_agent-config.md.DYA6ge6t.js → reference_agent-config.md.IplwL25I.js} +1 -2
  120. package/dist/docs/assets/{reference_agent-config.md.DYA6ge6t.lean.js → reference_agent-config.md.IplwL25I.lean.js} +1 -1
  121. package/dist/docs/assets/{reference_channels.md.DYg0CLud.js → reference_channels.md.Bxaa020x.js} +1 -1
  122. package/dist/docs/assets/{reference_cli.md.DB7Llw3T.js → reference_cli.md.1o_TqKdt.js} +7 -2
  123. package/dist/docs/assets/{reference_cli.md.DB7Llw3T.lean.js → reference_cli.md.1o_TqKdt.lean.js} +1 -1
  124. package/dist/docs/assets/{reference_extensions.md.OUacPetl.js → reference_extensions.md.DKxTuCIw.js} +11 -8
  125. package/dist/docs/assets/{reference_extensions.md.OUacPetl.lean.js → reference_extensions.md.DKxTuCIw.lean.js} +1 -1
  126. package/dist/docs/assets/{reference_instructions.md.DrcHZXig.js → reference_instructions.md.BYMVxAkw.js} +4 -4
  127. package/dist/docs/assets/{reference_instructions.md.DrcHZXig.lean.js → reference_instructions.md.BYMVxAkw.lean.js} +1 -1
  128. package/dist/docs/assets/{reference_schedules.md.BqWnJES4.js → reference_schedules.md.03Ryy9ca.js} +3 -3
  129. package/dist/docs/assets/{reference_tools.md.08XR7lIl.js → reference_tools.md.-6pypsWt.js} +1 -1
  130. package/dist/docs/assets/{style.Dwls12uf.css → style.nMsabY-V.css} +1 -1
  131. package/dist/docs/assets/templates_agentic-owners.md.CTEnR0jp.js +13 -0
  132. package/dist/docs/assets/{templates_agentic-owners.md.CvmABtia.lean.js → templates_agentic-owners.md.CTEnR0jp.lean.js} +1 -1
  133. package/dist/docs/building-with-agents.html +37 -37
  134. package/dist/docs/deployment.html +42 -42
  135. package/dist/docs/deployment.md +9 -4
  136. package/dist/docs/evals.html +37 -37
  137. package/dist/docs/guides/agent-to-agent.html +37 -37
  138. package/dist/docs/guides/bitbucket.html +37 -37
  139. package/dist/docs/guides/cloud-agents.html +38 -38
  140. package/dist/docs/guides/cloud-agents.md +1 -0
  141. package/dist/docs/guides/convert-automation.html +37 -37
  142. package/dist/docs/guides/export-grokbot.html +37 -37
  143. package/dist/docs/guides/github.html +37 -37
  144. package/dist/docs/guides/gitlab.html +37 -37
  145. package/dist/docs/guides/grokbot-agents.html +37 -37
  146. package/dist/docs/guides/hooks.html +37 -37
  147. package/dist/docs/guides/improve.html +37 -37
  148. package/dist/docs/guides/jev.html +37 -37
  149. package/dist/docs/guides/mcp-oauth.html +37 -37
  150. package/dist/docs/guides/migrate.html +37 -37
  151. package/dist/docs/guides/opentelemetry.html +49 -41
  152. package/dist/docs/guides/opentelemetry.md +54 -3
  153. package/dist/docs/guides/pagerduty.html +119 -0
  154. package/dist/docs/guides/pagerduty.md +336 -0
  155. package/dist/docs/guides/slack.html +37 -37
  156. package/dist/docs/guides/webhooks.html +37 -37
  157. package/dist/docs/hashmap.json +1 -1
  158. package/dist/docs/hillclimbing.html +37 -37
  159. package/dist/docs/index.html +37 -37
  160. package/dist/docs/llms-full.txt +510 -42
  161. package/dist/docs/llms.txt +1 -0
  162. package/dist/docs/quickstart.html +37 -37
  163. package/dist/docs/reference/agent-config.html +38 -39
  164. package/dist/docs/reference/agent-config.md +0 -1
  165. package/dist/docs/reference/artifacts.html +37 -37
  166. package/dist/docs/reference/channels.html +38 -38
  167. package/dist/docs/reference/channels.md +2 -1
  168. package/dist/docs/reference/cli.html +43 -38
  169. package/dist/docs/reference/cli.md +27 -0
  170. package/dist/docs/reference/connections.html +37 -37
  171. package/dist/docs/reference/evals.html +37 -37
  172. package/dist/docs/reference/extensions.html +47 -44
  173. package/dist/docs/reference/extensions.md +15 -9
  174. package/dist/docs/reference/hooks.html +37 -37
  175. package/dist/docs/reference/http-api.html +37 -37
  176. package/dist/docs/reference/instructions.html +40 -40
  177. package/dist/docs/reference/instructions.md +5 -1
  178. package/dist/docs/reference/memory.html +37 -37
  179. package/dist/docs/reference/playground.html +36 -36
  180. package/dist/docs/reference/project-layout.html +37 -37
  181. package/dist/docs/reference/prompt.html +37 -37
  182. package/dist/docs/reference/schedules.html +40 -40
  183. package/dist/docs/reference/sessions.html +36 -36
  184. package/dist/docs/reference/skills.html +37 -37
  185. package/dist/docs/reference/subagents.html +37 -37
  186. package/dist/docs/reference/tools.html +39 -39
  187. package/dist/docs/reference/tools.md +1 -0
  188. package/dist/docs/templates/agentic-owners.html +42 -43
  189. package/dist/docs/templates/agentic-owners.md +55 -23
  190. package/dist/docs/templates/grokbot-agents.html +37 -37
  191. package/dist/docs/templates/security-reviewer.html +37 -37
  192. package/dist/docs/templates/thermo-quality-review.html +37 -37
  193. package/dist/docs/templates/thermo-review.html +37 -37
  194. package/dist/docs/templates/triage.html +37 -37
  195. package/dist/docs/troubleshooting.html +36 -36
  196. package/dist/extensions/cursor-cloud-agents/extension.d.ts +2 -0
  197. package/dist/extensions/cursor-cloud-agents/extension.d.ts.map +1 -1
  198. package/dist/extensions/cursor-cloud-agents/extension.js +2 -1
  199. package/dist/extensions/cursor-cloud-agents/lib/backend.d.ts +1 -0
  200. package/dist/extensions/cursor-cloud-agents/lib/backend.d.ts.map +1 -1
  201. package/dist/extensions/cursor-cloud-agents/lib/backend.js +2 -1
  202. package/dist/extensions/cursor-cloud-agents/lib/fleet.js +1 -1
  203. package/dist/extensions/cursor-cloud-agents/lib/inputs.d.ts +1 -1
  204. package/dist/extensions/cursor-cloud-agents/lib/inputs.d.ts.map +1 -1
  205. package/dist/extensions/cursor-cloud-agents/lib/inputs.js +1 -1
  206. package/dist/extensions/cursor-cloud-agents/reminders/cloud-agent-stop-watch.js +1 -1
  207. package/dist/extensions/cursor-cloud-agents/tools/launch.js +1 -1
  208. package/dist/extensions/cursor-cloud-agents/tools/list.js +1 -1
  209. package/dist/extensions/cursor-cloud-agents/tools/reply.js +1 -1
  210. package/dist/extensions/cursor-grokbot-agents/extension.js +1 -1
  211. package/dist/extensions/cursor-grokbot-agents/lib/backend.js +1 -1
  212. package/dist/extensions/cursor-grokbot-agents/lib/contacts.js +1 -1
  213. package/dist/extensions/cursor-grokbot-agents/lib/inputs.d.ts +1 -1
  214. package/dist/extensions/cursor-grokbot-agents/lib/inputs.d.ts.map +1 -1
  215. package/dist/extensions/cursor-grokbot-agents/lib/inputs.js +1 -1
  216. package/dist/extensions/cursor-grokbot-agents/tools/ask.js +1 -1
  217. package/dist/extensions/cursor-grokbot-agents/tools/check.js +1 -1
  218. package/dist/extensions/cursor-grokbot-agents/tools/interrupt.js +1 -1
  219. package/dist/extensions/cursor-grokbot-agents/tools/list.js +1 -1
  220. package/dist/extensions/improve/extension.js +1 -1
  221. package/dist/extensions/jev/extension.js +1 -1
  222. package/dist/extensions/jev/tools/evaluate.js +1 -1
  223. package/dist/extensions/slack-communication/extension.js +1 -1
  224. package/dist/extensions/slack-communication/tools/delete-message.js +1 -1
  225. package/dist/extensions/slack-communication/tools/edit-message.js +1 -1
  226. package/dist/extensions/slack-communication/tools/post-card.js +1 -1
  227. package/dist/extensions/slack-communication/tools/post-file.js +1 -1
  228. package/dist/extensions/slack-communication/tools/post-update.js +1 -1
  229. package/dist/extensions/slack-communication/tools/react.js +1 -1
  230. package/dist/extensions/slack-communication/tools/set-status.js +1 -1
  231. package/dist/extensions.d.ts +1 -1
  232. package/dist/extensions.js +1 -1
  233. package/dist/internal/approval-gate.d.ts +4 -2
  234. package/dist/internal/approval-gate.d.ts.map +1 -1
  235. package/dist/internal/approval-gate.js +2 -1
  236. package/dist/internal/builtin-tools/artifacts.d.ts.map +1 -1
  237. package/dist/internal/builtin-tools/artifacts.js +46 -13
  238. package/dist/internal/builtin-tools/reminders.js +1 -1
  239. package/dist/internal/channel-architecture.d.ts +1 -1
  240. package/dist/internal/channel-architecture.d.ts.map +1 -1
  241. package/dist/internal/channel-architecture.js +4 -2
  242. package/dist/internal/cli-deploy.d.ts.map +1 -1
  243. package/dist/internal/cli-deploy.js +21 -12
  244. package/dist/internal/cli-pagerduty.d.ts +32 -0
  245. package/dist/internal/cli-pagerduty.d.ts.map +1 -0
  246. package/dist/internal/cli-pagerduty.js +242 -0
  247. package/dist/internal/continuation-channel.d.ts.map +1 -1
  248. package/dist/internal/continuation-channel.js +7 -0
  249. package/dist/internal/continuation-identity.d.ts +11 -3
  250. package/dist/internal/continuation-identity.d.ts.map +1 -1
  251. package/dist/internal/continuation-identity.js +83 -0
  252. package/dist/internal/convert-automation/convert-workflow.js +1 -1
  253. package/dist/internal/convert-grokbot/answers.js +1 -1
  254. package/dist/internal/convert-grokbot/recipe.d.ts +1 -1
  255. package/dist/internal/convert-grokbot/recipe.d.ts.map +1 -1
  256. package/dist/internal/convert-grokbot/recipe.js +1 -1
  257. package/dist/internal/cursor/backend-client.d.ts +1 -1
  258. package/dist/internal/cursor/backend-client.d.ts.map +1 -1
  259. package/dist/internal/cursor/backend-client.js +1 -1
  260. package/dist/internal/cursor/credentials.d.ts +1 -1
  261. package/dist/internal/cursor/credentials.d.ts.map +1 -1
  262. package/dist/internal/cursor/credentials.js +1 -1
  263. package/dist/internal/deploy-client.js +1 -1
  264. package/dist/internal/deploy-manifest.d.ts +11 -4
  265. package/dist/internal/deploy-manifest.d.ts.map +1 -1
  266. package/dist/internal/deploy-manifest.js +19 -6
  267. package/dist/internal/discovery/agent-config.d.ts.map +1 -1
  268. package/dist/internal/discovery/agent-config.js +10 -10
  269. package/dist/internal/discovery/agent.d.ts.map +1 -1
  270. package/dist/internal/discovery/agent.js +10 -10
  271. package/dist/internal/discovery/channels.d.ts.map +1 -1
  272. package/dist/internal/discovery/channels.js +20 -16
  273. package/dist/internal/discovery/context.d.ts +16 -0
  274. package/dist/internal/discovery/context.d.ts.map +1 -1
  275. package/dist/internal/discovery/context.js +66 -0
  276. package/dist/internal/discovery/cursor-plugin.js +1 -1
  277. package/dist/internal/discovery/extension-overlay.d.ts.map +1 -1
  278. package/dist/internal/discovery/extension-overlay.js +2 -6
  279. package/dist/internal/discovery/info.d.ts.map +1 -1
  280. package/dist/internal/discovery/info.js +3 -0
  281. package/dist/internal/discovery/instructions.d.ts.map +1 -1
  282. package/dist/internal/discovery/instructions.js +3 -6
  283. package/dist/internal/discovery/modules.d.ts.map +1 -1
  284. package/dist/internal/discovery/modules.js +3 -6
  285. package/dist/internal/discovery/project.d.ts +6 -0
  286. package/dist/internal/discovery/project.d.ts.map +1 -1
  287. package/dist/internal/discovery/project.js +27 -5
  288. package/dist/internal/discovery/runtime.d.ts.map +1 -1
  289. package/dist/internal/discovery/runtime.js +8 -8
  290. package/dist/internal/discovery.d.ts +1 -1
  291. package/dist/internal/discovery.d.ts.map +1 -1
  292. package/dist/internal/discovery.js +1 -1
  293. package/dist/internal/expected-delivery-failure.d.ts.map +1 -1
  294. package/dist/internal/expected-delivery-failure.js +6 -0
  295. package/dist/internal/factory-resource-channel.d.ts +1 -1
  296. package/dist/internal/factory-resource-channel.d.ts.map +1 -1
  297. package/dist/internal/filesystem/sdk-schemas.d.ts +1 -1
  298. package/dist/internal/filesystem/sdk-schemas.d.ts.map +1 -1
  299. package/dist/internal/filesystem/sdk-schemas.js +5 -4
  300. package/dist/internal/filesystem/tools.js +1 -1
  301. package/dist/internal/hmac-secret-values.d.ts +48 -0
  302. package/dist/internal/hmac-secret-values.d.ts.map +1 -0
  303. package/dist/internal/hmac-secret-values.js +68 -0
  304. package/dist/internal/host-otel.d.ts +2 -1
  305. package/dist/internal/host-otel.d.ts.map +1 -1
  306. package/dist/internal/host-otel.js +20 -6
  307. package/dist/internal/host-platforms.d.ts.map +1 -1
  308. package/dist/internal/host-platforms.js +8 -2
  309. package/dist/internal/hosted-delivery-protocol.d.ts +4 -0
  310. package/dist/internal/hosted-delivery-protocol.d.ts.map +1 -1
  311. package/dist/internal/hosted-delivery.d.ts +7 -0
  312. package/dist/internal/hosted-delivery.d.ts.map +1 -1
  313. package/dist/internal/hosted-delivery.js +19 -17
  314. package/dist/internal/hosting.d.ts +6 -0
  315. package/dist/internal/hosting.d.ts.map +1 -1
  316. package/dist/internal/hosting.js +9 -0
  317. package/dist/internal/init-scaffold.js +1 -1
  318. package/dist/internal/interview/agent-questions.d.ts +1 -1
  319. package/dist/internal/interview/agent-questions.d.ts.map +1 -1
  320. package/dist/internal/interview/agent-questions.js +1 -1
  321. package/dist/internal/interview/question.d.ts +1 -1
  322. package/dist/internal/interview/question.d.ts.map +1 -1
  323. package/dist/internal/interview/question.js +1 -1
  324. package/dist/internal/json-schema.d.ts +7 -7
  325. package/dist/internal/json-schema.d.ts.map +1 -1
  326. package/dist/internal/json-schema.js +14 -17
  327. package/dist/internal/mcp-endpoint.js +1 -1
  328. package/dist/internal/otel/collector.d.ts.map +1 -1
  329. package/dist/internal/otel/collector.js +50 -19
  330. package/dist/internal/otel/config.d.ts +10 -1
  331. package/dist/internal/otel/config.d.ts.map +1 -1
  332. package/dist/internal/otel/config.js +47 -10
  333. package/dist/internal/otel/http.d.ts +1 -1
  334. package/dist/internal/otel/http.d.ts.map +1 -1
  335. package/dist/internal/otel/http.js +1 -1
  336. package/dist/internal/otel/runtime.d.ts +17 -14
  337. package/dist/internal/otel/runtime.d.ts.map +1 -1
  338. package/dist/internal/otel/runtime.js +203 -237
  339. package/dist/internal/package-inline-stdio.d.ts.map +1 -1
  340. package/dist/internal/package-inline-stdio.js +21 -5
  341. package/dist/internal/process-memory-telemetry.d.ts +1 -1
  342. package/dist/internal/process-memory-telemetry.d.ts.map +1 -1
  343. package/dist/internal/process-memory-telemetry.js +1 -1
  344. package/dist/internal/sdk-runner.d.ts +2 -3
  345. package/dist/internal/sdk-runner.d.ts.map +1 -1
  346. package/dist/internal/sdk-runner.js +30 -6
  347. package/dist/internal/secret-alternatives.d.ts +11 -0
  348. package/dist/internal/secret-alternatives.d.ts.map +1 -0
  349. package/dist/internal/secret-alternatives.js +13 -0
  350. package/dist/internal/server.d.ts.map +1 -1
  351. package/dist/internal/server.js +27 -15
  352. package/dist/internal/session-engine.d.ts +9 -1
  353. package/dist/internal/session-engine.d.ts.map +1 -1
  354. package/dist/internal/session-engine.js +30 -4
  355. package/dist/internal/slack-provision-client.js +1 -1
  356. package/dist/internal/sqlite-experimental-warning.d.ts +2 -0
  357. package/dist/internal/sqlite-experimental-warning.d.ts.map +1 -0
  358. package/dist/internal/sqlite-experimental-warning.js +22 -0
  359. package/dist/internal/store-api-protocol.d.ts +1 -1
  360. package/dist/internal/store-api-protocol.d.ts.map +1 -1
  361. package/dist/internal/store-api-protocol.js +1 -1
  362. package/dist/internal/testing/conversation-identity-vectors.d.ts +6 -1
  363. package/dist/internal/testing/conversation-identity-vectors.d.ts.map +1 -1
  364. package/dist/internal/testing/conversation-identity-vectors.js +34 -0
  365. package/dist/internal/testing/hmac-secret-vectors.d.ts +38 -0
  366. package/dist/internal/testing/hmac-secret-vectors.d.ts.map +1 -0
  367. package/dist/internal/testing/hmac-secret-vectors.js +89 -0
  368. package/dist/internal/testing/pagerduty-continuation-fixtures.d.ts +42 -0
  369. package/dist/internal/testing/pagerduty-continuation-fixtures.d.ts.map +1 -0
  370. package/dist/internal/testing/pagerduty-continuation-fixtures.js +175 -0
  371. package/dist/internal/update-check.d.ts +1 -1
  372. package/dist/internal/update-check.d.ts.map +1 -1
  373. package/dist/internal/update-check.js +1 -1
  374. package/dist/internal/zod-schema.d.ts +14 -0
  375. package/dist/internal/zod-schema.d.ts.map +1 -0
  376. package/dist/internal/zod-schema.js +22 -0
  377. package/dist/otel.d.ts +1 -2
  378. package/dist/otel.d.ts.map +1 -1
  379. package/dist/otel.js +0 -1
  380. package/dist/playground/assets/cursor-icons-16-DmHBTm1-.woff2 +0 -0
  381. package/dist/playground/assets/index-BdMwybMt.css +1 -0
  382. package/dist/playground/assets/index-CHk6O92d.js +62 -0
  383. package/dist/playground/index.html +2 -2
  384. package/dist/tools.d.ts +14 -11
  385. package/dist/tools.d.ts.map +1 -1
  386. package/dist/tools.js +4 -3
  387. package/dist/types.d.ts +67 -16
  388. package/dist/types.d.ts.map +1 -1
  389. package/docs/deployment.md +9 -4
  390. package/docs/guides/cloud-agents.md +1 -0
  391. package/docs/guides/opentelemetry.md +54 -3
  392. package/docs/guides/pagerduty.md +341 -0
  393. package/docs/reference/agent-config.md +0 -1
  394. package/docs/reference/channels.md +2 -1
  395. package/docs/reference/cli.md +27 -0
  396. package/docs/reference/extensions.md +15 -9
  397. package/docs/reference/instructions.md +5 -1
  398. package/docs/reference/tools.md +1 -0
  399. package/docs/templates/agentic-owners.md +55 -23
  400. package/package.json +24 -19
  401. package/skills/migrate-v2/SKILL.md +1 -1
  402. package/skills/otel/SKILL.md +24 -7
  403. package/templates/agentic-owners/README.md +6 -1
  404. package/templates/agentic-owners/bot/lib/owners/decision.ts +31 -5
  405. package/templates/agentic-owners/bot/lib/owners/globalOverride.ts +60 -0
  406. package/templates/agentic-owners/bot/lib/owners/match.ts +85 -19
  407. package/templates/agentic-owners/bot/lib/owners/parse.ts +133 -2
  408. package/templates/agentic-owners/bot/lib/owners/types.ts +23 -0
  409. package/dist/docs/assets/chunks/@localSearchIndexroot.B3j7LFef.js +0 -1
  410. package/dist/docs/assets/chunks/channel.RoCpi7X1.js +0 -1
  411. package/dist/docs/assets/chunks/classDiagram-6PBFFD2Q.oxdmwwqk.js +0 -1
  412. package/dist/docs/assets/chunks/classDiagram-v2-HSJHXN6E.oxdmwwqk.js +0 -1
  413. package/dist/docs/assets/chunks/clone.BkguoIMm.js +0 -1
  414. package/dist/docs/assets/chunks/stateDiagram-v2-QKLJ7IA2.7W-btjJ2.js +0 -1
  415. package/dist/docs/assets/templates_agentic-owners.md.CvmABtia.js +0 -14
  416. package/dist/playground/assets/cursor-icons-16-gwXtdAvu.woff2 +0 -0
  417. package/dist/playground/assets/index-BtsbIqV9.css +0 -1
  418. package/dist/playground/assets/index-CD8VRa25.js +0 -71
  419. /package/dist/docs/assets/{reference_channels.md.DYg0CLud.lean.js → reference_channels.md.Bxaa020x.lean.js} +0 -0
  420. /package/dist/docs/assets/{reference_schedules.md.BqWnJES4.lean.js → reference_schedules.md.03Ryy9ca.lean.js} +0 -0
  421. /package/dist/docs/assets/{reference_tools.md.08XR7lIl.lean.js → reference_tools.md.-6pypsWt.lean.js} +0 -0
@@ -166,19 +166,22 @@ export async function dispatchHostedAdmission(input) {
166
166
  * prompt-form fires still follow up inside the runner.
167
167
  */
168
168
  async function dispatchHostedReminderAdmission(input, delivery) {
169
+ const fired = (result) => Response.json({
170
+ ok: true,
171
+ v: HOSTED_DELIVERY_PROTOCOL_VERSION,
172
+ outcome: result.outcome === "noop" ? "skip" : "task",
173
+ continuationReleased: result.outcome === "fired" &&
174
+ input.takeContinuationRelease?.(delivery.mailboxContinuationKey) === true
175
+ ? true
176
+ : undefined,
177
+ });
169
178
  const descriptor = parseHostedReminderFireDescriptorPayload(delivery.payload);
170
179
  if (descriptor !== undefined) {
171
180
  if (input.executeReminderDescriptor === undefined) {
172
181
  return transientHostedError(503, "reminder_dispatch_unavailable", "This guest has no reminder CP executor wired for hosted admission.");
173
182
  }
174
183
  try {
175
- const result = await input.executeReminderDescriptor(descriptor);
176
- const outcome = result.outcome === "noop" ? "skip" : "task";
177
- return Response.json({
178
- ok: true,
179
- v: HOSTED_DELIVERY_PROTOCOL_VERSION,
180
- outcome,
181
- });
184
+ return fired(await input.executeReminderDescriptor(descriptor));
182
185
  }
183
186
  catch (error) {
184
187
  if (error instanceof UnknownReminderError) {
@@ -199,13 +202,7 @@ async function dispatchHostedReminderAdmission(input, delivery) {
199
202
  return terminalHostedError(400, "invalid_reminder_payload", "Expected reminder descriptor or legacy payload { reminderId, fireCount }.");
200
203
  }
201
204
  try {
202
- const result = await input.fireReminder(payload.reminderId, payload.fireCount);
203
- const outcome = result.outcome === "noop" ? "skip" : "task";
204
- return Response.json({
205
- ok: true,
206
- v: HOSTED_DELIVERY_PROTOCOL_VERSION,
207
- outcome,
208
- });
205
+ return fired(await input.fireReminder(payload.reminderId, payload.fireCount));
209
206
  }
210
207
  catch (error) {
211
208
  if (error instanceof UnknownReminderError) {
@@ -426,9 +423,11 @@ export function registerHostedDeliveryRoute(input) {
426
423
  */
427
424
  const finishBoundSecrets = () => {
428
425
  const consumed = consumeBoundSecrets();
429
- return consumed.ok
430
- ? undefined
431
- : transientHostedError(503, consumed.code, boundedMessage(consumed.message));
426
+ if (!consumed.ok) {
427
+ return transientHostedError(503, consumed.code, boundedMessage(consumed.message));
428
+ }
429
+ input.onSecretsReady?.();
430
+ return undefined;
432
431
  };
433
432
  const finishNetworkWait = async (phase) => {
434
433
  try {
@@ -852,6 +851,9 @@ export function registerHostedDeliveryRoute(input) {
852
851
  v: HOSTED_DELIVERY_PROTOCOL_VERSION,
853
852
  outcome: "send",
854
853
  consumedDeliveryIds,
854
+ continuationReleased: input.takeContinuationRelease?.(admitted.send.mailboxContinuationKey) === true
855
+ ? true
856
+ : undefined,
855
857
  },
856
858
  };
857
859
  // Finalize as late as possible so `post_drain` and `total`
@@ -26,6 +26,12 @@ export declare function validateContainerImageName(name: string): string | undef
26
26
  export declare const PLATFORM_HOSTED_STORAGE_SECRET_NAMES: readonly ["AGENT_SERVE_DEPLOYMENT_ID"];
27
27
  /** Returns a human error message, or undefined when the domain is valid. */
28
28
  export declare function validateEgressDomain(domain: string): string | undefined;
29
+ /**
30
+ * True when an `egressDomains` entry allows HTTPS to `hostname`: an exact
31
+ * match, or a `*.` wildcard that matches a subdomain. A `host:port` entry
32
+ * opens raw TCP and does not count.
33
+ */
34
+ export declare function egressAllowsHost(domains: readonly string[], hostname: string): boolean;
29
35
  /**
30
36
  * Returns a human error message, or undefined when the name is a valid
31
37
  * secret name. Grammar only — reserved names are checked separately so the
@@ -1 +1 @@
1
- {"version":3,"file":"hosting.d.ts","sourceRoot":"","sources":["../../src/internal/hosting.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,+EAA+E;AAC/E,eAAO,MAAM,kBAAkB,KAAK,CAAC;AACrC,kCAAkC;AAClC,eAAO,MAAM,WAAW,KAAK,CAAC;AAC9B,sCAAsC;AACtC,eAAO,MAAM,sBAAsB,OAAO,CAAC;AAC3C,8BAA8B;AAC9B,eAAO,MAAM,sBAAsB,KAAK,CAAC;AACzC,mEAAmE;AACnE,eAAO,MAAM,2BAA2B,YAAY,CAAC;AACrD,oEAAoE;AACpE,eAAO,MAAM,oBAAoB,MAAM,CAAC;AACxC,sDAAsD;AACtD,eAAO,MAAM,yBAAyB,EAAE,MAA+B,CAAC;AAIxE,gFAAgF;AAChF,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAK3E;AAED;;;GAGG;AACH,eAAO,MAAM,oCAAoC,YAAI,2BAA2B,CAAU,CAAC;AAW3F,4EAA4E;AAC5E,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CASvE;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAQnE;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAQ1D;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE;IAC3C,aAAa,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,WAAW,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACjC,GAAG,MAAM,EAAE,CAmBX;AAED;;;GAGG;AACH,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAS3E;AAQD,8IAA8I;AAC9I,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAE5D"}
1
+ {"version":3,"file":"hosting.d.ts","sourceRoot":"","sources":["../../src/internal/hosting.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,+EAA+E;AAC/E,eAAO,MAAM,kBAAkB,KAAK,CAAC;AACrC,kCAAkC;AAClC,eAAO,MAAM,WAAW,KAAK,CAAC;AAC9B,sCAAsC;AACtC,eAAO,MAAM,sBAAsB,OAAO,CAAC;AAC3C,8BAA8B;AAC9B,eAAO,MAAM,sBAAsB,KAAK,CAAC;AACzC,mEAAmE;AACnE,eAAO,MAAM,2BAA2B,YAAY,CAAC;AACrD,oEAAoE;AACpE,eAAO,MAAM,oBAAoB,MAAM,CAAC;AACxC,sDAAsD;AACtD,eAAO,MAAM,yBAAyB,EAAE,MAA+B,CAAC;AAIxE,gFAAgF;AAChF,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAK3E;AAED;;;GAGG;AACH,eAAO,MAAM,oCAAoC,YAAI,2BAA2B,CAAU,CAAC;AAW3F,4EAA4E;AAC5E,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CASvE;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAKtF;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAQnE;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAQ1D;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE;IAC3C,aAAa,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,WAAW,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACjC,GAAG,MAAM,EAAE,CAmBX;AAED;;;GAGG;AACH,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAS3E;AAQD,8IAA8I;AAC9I,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAE5D"}
@@ -47,6 +47,15 @@ export function validateEgressDomain(domain) {
47
47
  }
48
48
  return `Invalid egress domain ${JSON.stringify(domain)}: use a lowercase hostname with at least two labels and an alphabetic TLD (e.g. "api.example.com"), optionally with a single leading "*." wildcard or a trailing ":port" for raw TCP.`;
49
49
  }
50
+ /**
51
+ * True when an `egressDomains` entry allows HTTPS to `hostname`: an exact
52
+ * match, or a `*.` wildcard that matches a subdomain. A `host:port` entry
53
+ * opens raw TCP and does not count.
54
+ */
55
+ export function egressAllowsHost(domains, hostname) {
56
+ const host = hostname.toLowerCase();
57
+ return domains.some((domain) => domain.startsWith("*.") ? host.endsWith(domain.slice(1)) : domain === host);
58
+ }
50
59
  /**
51
60
  * Returns a human error message, or undefined when the name is a valid
52
61
  * secret name. Grammar only — reserved names are checked separately so the
@@ -57,7 +57,7 @@ export function tsconfig(projectRoot) {
57
57
  `;
58
58
  }
59
59
  const ECHO_TS = `import { defineTool } from "${PACKAGE_NAME}/tools";
60
- import { z } from "zod";
60
+ import { z } from "zod/v3";
61
61
 
62
62
  export default defineTool({
63
63
  description: "Echo a short message back (demo tool).",
@@ -3,7 +3,7 @@
3
3
  * validate against schemas built from it, and the create-agent skill's round
4
4
  * tables are rendered from it.
5
5
  */
6
- import { z } from "zod";
6
+ import { z } from "zod/v3";
7
7
  import { type InterviewField } from "./question.js";
8
8
  export declare const PURPOSES: readonly ["chat", "repo-automation", "domain-assistant", "scheduled-reporter", "other"];
9
9
  export declare const CHANNELS: readonly ["slack", "github", "webhook", "schedule"];
@@ -1 +1 @@
1
- {"version":3,"file":"agent-questions.d.ts","sourceRoot":"","sources":["../../../src/internal/interview/agent-questions.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EAAS,KAAK,cAAc,EAAE,MAAM,eAAe,CAAC;AAE3D,eAAO,MAAM,QAAQ,YACnB,MAAM,EACN,iBAAiB,EACjB,kBAAkB,EAClB,oBAAoB,EACpB,OAAO,CACC,CAAC;AACX,eAAO,MAAM,QAAQ,YAAI,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,CAAU,CAAC;AAC5E,eAAO,MAAM,SAAS,YAAI,gBAAgB,EAAE,QAAQ,EAAE,OAAO,CAAU,CAAC;AACxE,eAAO,MAAM,YAAY,YACvB,cAAc,EACd,aAAa,EACb,QAAQ,EACR,WAAW,EACX,OAAO,EACP,eAAe,EACf,OAAO,CACC,CAAC;AAEX,MAAM,MAAM,OAAO,GAAG,CAAC,OAAO,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC;AAChD,MAAM,MAAM,OAAO,GAAG,CAAC,OAAO,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC;AAehD,eAAO,MAAM,gBAAgB,EAAE,MAAiB,CAAC;AAEjD,eAAO,MAAM,SAAS,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,CAKpC,CAAC;AAEL,eAAO,MAAM,YAAY,EAAE,SAAS,cAAc,EA0FjD,CAAC;AAOF,iDAAiD;AACjD,wBAAgB,qBAAqB,IAAI,MAAM,CAY9C"}
1
+ {"version":3,"file":"agent-questions.d.ts","sourceRoot":"","sources":["../../../src/internal/interview/agent-questions.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAG3B,OAAO,EAAS,KAAK,cAAc,EAAE,MAAM,eAAe,CAAC;AAE3D,eAAO,MAAM,QAAQ,YACnB,MAAM,EACN,iBAAiB,EACjB,kBAAkB,EAClB,oBAAoB,EACpB,OAAO,CACC,CAAC;AACX,eAAO,MAAM,QAAQ,YAAI,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,CAAU,CAAC;AAC5E,eAAO,MAAM,SAAS,YAAI,gBAAgB,EAAE,QAAQ,EAAE,OAAO,CAAU,CAAC;AACxE,eAAO,MAAM,YAAY,YACvB,cAAc,EACd,aAAa,EACb,QAAQ,EACR,WAAW,EACX,OAAO,EACP,eAAe,EACf,OAAO,CACC,CAAC;AAEX,MAAM,MAAM,OAAO,GAAG,CAAC,OAAO,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC;AAChD,MAAM,MAAM,OAAO,GAAG,CAAC,OAAO,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC;AAehD,eAAO,MAAM,gBAAgB,EAAE,MAAiB,CAAC;AAEjD,eAAO,MAAM,SAAS,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,CAKpC,CAAC;AAEL,eAAO,MAAM,YAAY,EAAE,SAAS,cAAc,EA0FjD,CAAC;AAOF,iDAAiD;AACjD,wBAAgB,qBAAqB,IAAI,MAAM,CAY9C"}
@@ -3,7 +3,7 @@
3
3
  * validate against schemas built from it, and the create-agent skill's round
4
4
  * tables are rendered from it.
5
5
  */
6
- import { z } from "zod";
6
+ import { z } from "zod/v3";
7
7
  import { DEFAULT_MODEL } from "../../types.js";
8
8
  import { NAME_PATTERN, RESERVED_SLUGS } from "../discovery/names.js";
9
9
  import { field } from "./question.js";
@@ -4,7 +4,7 @@
4
4
  * Answers arrive from flags or an answers file, from a TTY prompt, or from
5
5
  * defaults, in that order. Nothing prompts without a TTY.
6
6
  */
7
- import { z } from "zod";
7
+ import { z } from "zod/v3";
8
8
  export type Choice = string | {
9
9
  value: string;
10
10
  label: string;
@@ -1 +1 @@
1
- {"version":3,"file":"question.d.ts","sourceRoot":"","sources":["../../../src/internal/interview/question.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,MAAM,MAAM,MAAM,GAAG,MAAM,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAE/D,oFAAoF;AACpF,MAAM,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAE7C,MAAM,WAAW,iBAAiB;IAChC,sEAAsE;IACtE,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,mDAAmD;IACnD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,yEAAyE;IACzE,OAAO,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,OAAO,EAAE,OAAO,KAAK,MAAM,GAAG,SAAS,CAAC,CAAC;IAC9D,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5B,yEAAyE;IACzE,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,wCAAwC;IACxC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,+DAA+D;IAC/D,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,uDAAuD;IACvD,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IAClC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC;IACrC,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,KAAK,MAAM,GAAG,SAAS,CAAC;CACjE;AAED,sDAAsD;AACtD,MAAM,WAAW,cAAc;IAC7B,+DAA+D;IAC/D,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,MAAM,EAAE,CAAC,CAAC,UAAU,CAAC;IACrB,yDAAyD;IACzD,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,iFAAiF;AACjF,wBAAgB,KAAK,CACnB,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,iBAAiB,EAC3B,MAAM,EAAE,CAAC,CAAC,UAAU,EACpB,OAAO,CAAC,EAAE,MAAM,GACf,cAAc,CAchB;AAED,wBAAgB,aAAa,CAC3B,KAAK,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,GAC3C,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAO3B;AAED,MAAM,MAAM,aAAa,GACrB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,OAAO,CAAC;IAAC,SAAS,EAAE,MAAM,EAAE,CAAA;CAAE,GACnD;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAEjC,uEAAuE;AACvE,MAAM,MAAM,GAAG,GAAG,CAAC,QAAQ,EAAE,iBAAiB,EAAE,QAAQ,EAAE,MAAM,GAAG,SAAS,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;AAEjG,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,SAAS,iBAAiB,EAAE,CAAC;IACxC,8DAA8D;IAC9D,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,WAAW,EAAE,OAAO,CAAC;IACrB,GAAG,CAAC,EAAE,GAAG,CAAC;IACV,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7B,gFAAgF;IAChF,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;IAChC,iDAAiD;IACjD,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,iBAAiB,KAAK,MAAM,CAAC;CACnD;AAED,wBAAsB,cAAc,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,aAAa,CAAC,CAUhF;AA+DD,8DAA8D;AAC9D,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,EAAE,CAQ5D;AAID;;;;GAIG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,MAAM,CAAC,cAAc,EAC5B,MAAM,EAAE,MAAM,CAAC,cAAc,EAC7B,IAAI,GAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAuB,GAC9C;IAAE,GAAG,EAAE,GAAG,CAAC;IAAC,KAAK,EAAE,MAAM,IAAI,CAAA;CAAE,CA8BjC"}
1
+ {"version":3,"file":"question.d.ts","sourceRoot":"","sources":["../../../src/internal/interview/question.ts"],"names":[],"mappings":"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"}
@@ -5,7 +5,7 @@
5
5
  * defaults, in that order. Nothing prompts without a TTY.
6
6
  */
7
7
  import { createInterface } from "node:readline";
8
- import { z } from "zod";
8
+ import { z } from "zod/v3";
9
9
  import { describeError } from "../describe-error.js";
10
10
  /** A field whose answers are checked against its schema before they are kept. */
11
11
  export function field(round, question, schema, options) {
@@ -1,15 +1,15 @@
1
- import { z } from "zod";
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,KAAK,CAAC;AAExB,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
- import { z } from "zod";
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("; ");
@@ -19,7 +19,7 @@ import { Server } from "@modelcontextprotocol/sdk/server/index.js";
19
19
  import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
20
20
  import { WebStandardStreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/webStandardStreamableHttp.js";
21
21
  import { CallToolRequestSchema, ListToolsRequestSchema, } from "@modelcontextprotocol/sdk/types.js";
22
- import { z } from "zod";
22
+ import { z } from "zod/v3";
23
23
  import { samePrincipal } from "./auth.js";
24
24
  import { describeError } from "./describe-error.js";
25
25
  import { SessionBusyError, ToolInputError, ToolNotDirectlyCallableError, UnknownSessionError, UnknownToolError, } from "./session-engine.js";
@@ -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,CAyzBf"}
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"}
@@ -18,10 +18,28 @@ const SPAN_STATUS_REASON_MAX = 160;
18
18
  export function createOtelCollector(runtime, agentName, log) {
19
19
  const sessions = new Map();
20
20
  const extraBySession = new Map();
21
- const metrics = runtime.meter ? buildMetrics(runtime.meter) : undefined;
22
- const logOpts = runtime.config.logs === false ? undefined : runtime.config.logs;
21
+ let metrics;
22
+ let metricsMeter;
23
+ function currentMetrics() {
24
+ const meter = runtime.meter;
25
+ if (meter === undefined) {
26
+ return undefined;
27
+ }
28
+ if (meter !== metricsMeter) {
29
+ metricsMeter = meter;
30
+ metrics = buildMetrics(meter);
31
+ }
32
+ return metrics;
33
+ }
34
+ function logOpts() {
35
+ const logsConfig = runtime.config.logs;
36
+ return logsConfig === false ? undefined : logsConfig;
37
+ }
23
38
  return {
24
39
  onEvent(event, session) {
40
+ if (!runtime.config.enabled) {
41
+ return;
42
+ }
25
43
  try {
26
44
  handle(event, session);
27
45
  }
@@ -51,14 +69,23 @@ export function createOtelCollector(runtime, agentName, log) {
51
69
  return bag === undefined ? undefined : { ...bag };
52
70
  },
53
71
  runInTurn(args, fn) {
72
+ if (!runtime.config.enabled) {
73
+ return Promise.resolve(fn());
74
+ }
54
75
  const span = ensureTurnSpan(args);
55
76
  return context.with(trace.setSpan(context.active(), span), () => Promise.resolve(fn()));
56
77
  },
57
78
  runInCall(args, fn) {
79
+ if (!runtime.config.enabled) {
80
+ return Promise.resolve(fn());
81
+ }
58
82
  const span = ensureCallSpan(args);
59
83
  return context.with(trace.setSpan(context.active(), span), () => Promise.resolve(fn()));
60
84
  },
61
85
  startPhase(args, phase) {
86
+ if (!runtime.config.enabled) {
87
+ return () => { };
88
+ }
62
89
  const span = runtime.tracer.startSpan(`agent_sdk.turn.${phase}`, { attributes: join(args.sessionId, { "agent_sdk.turn_id": args.turnId }) }, trace.setSpan(context.active(), ensureTurnSpan(args)));
63
90
  return () => span.end();
64
91
  },
@@ -72,7 +99,7 @@ export function createOtelCollector(runtime, agentName, log) {
72
99
  return;
73
100
  }
74
101
  sessionState(event.sessionId);
75
- metrics?.sessions.add(1, join(event.sessionId, {
102
+ currentMetrics()?.sessions.add(1, join(event.sessionId, {
76
103
  "agent_sdk.agent": agentName,
77
104
  "agent_sdk.channel": event.data.channelId,
78
105
  }));
@@ -81,7 +108,7 @@ export function createOtelCollector(runtime, agentName, log) {
81
108
  case "agent.bound": {
82
109
  const painted = attrs({
83
110
  "agent_sdk.sdk_agent_id": event.data.sdkAgentId,
84
- "agent_sdk.sdk_agent_url": logOpts?.toolContent === true ? event.data.url : undefined,
111
+ "agent_sdk.sdk_agent_url": logOpts()?.toolContent === true ? event.data.url : undefined,
85
112
  });
86
113
  if (Object.keys(painted).length === 0) {
87
114
  return;
@@ -95,7 +122,7 @@ export function createOtelCollector(runtime, agentName, log) {
95
122
  case "message.received": {
96
123
  emitLog("message.received", SeverityNumber.INFO, attrs({
97
124
  ...baseLog(event, session),
98
- "agent_sdk.user_prompt": logOpts?.userPrompts === true ? truncate(event.data.text) : undefined,
125
+ "agent_sdk.user_prompt": logOpts()?.userPrompts === true ? truncate(event.data.text) : undefined,
99
126
  }));
100
127
  return;
101
128
  }
@@ -220,10 +247,11 @@ export function createOtelCollector(runtime, agentName, log) {
220
247
  const turn = ensureTurn(event, session, startTime);
221
248
  const span = turn?.tools.get(event.data.callId);
222
249
  const status = event.data.isError ? "failure" : "success";
250
+ const failureReason = event.data.isError ? toolFailureReason(event.data.output) : undefined;
223
251
  if (span !== undefined) {
224
252
  span.setAttribute("cursor.tool.status", status);
225
253
  span.setAttributes(attrs(computerUseResultAttrs(event.data)));
226
- if (logOpts?.toolContent === true && event.data.output !== undefined) {
254
+ if (logOpts()?.toolContent === true && event.data.output !== undefined) {
227
255
  span.setAttribute("agent_sdk.tool_output", truncate(json(event.data.output)));
228
256
  }
229
257
  if (event.data.isError) {
@@ -232,14 +260,14 @@ export function createOtelCollector(runtime, agentName, log) {
232
260
  span.setAttribute("agent_sdk.tool_error_class", errorClass);
233
261
  span.setStatus({
234
262
  code: SpanStatusCode.ERROR,
235
- message: toolFailureReason(event.data.output) ?? "tool error",
263
+ message: failureReason ?? "tool error",
236
264
  });
237
265
  }
238
266
  span.end(startTime);
239
267
  turn?.tools.delete(event.data.callId);
240
268
  turn?.pendingToolErrors.delete(event.data.callId);
241
269
  }
242
- metrics?.toolCalls.add(1, join(event.sessionId, {
270
+ currentMetrics()?.toolCalls.add(1, join(event.sessionId, {
243
271
  "cursor.tool.name": event.data.toolName,
244
272
  "cursor.tool.kind": "builtin",
245
273
  "cursor.tool.status": status,
@@ -250,6 +278,7 @@ export function createOtelCollector(runtime, agentName, log) {
250
278
  "cursor.tool.name": event.data.toolName,
251
279
  "cursor.tool.status": status,
252
280
  "agent_sdk.call_id": event.data.callId,
281
+ "agent_sdk.error_message": failureReason,
253
282
  }));
254
283
  // Direct callTool never emits turn.completed — close when idle.
255
284
  if (turn !== undefined &&
@@ -277,13 +306,13 @@ export function createOtelCollector(runtime, agentName, log) {
277
306
  "agent_sdk.turn_id": event.turnId,
278
307
  "agent_sdk.call_id": event.data.callId,
279
308
  "agent_sdk.subagent_name": event.data.name,
280
- "agent_sdk.subagent_description": logOpts?.toolContent === true && event.data.description !== undefined
309
+ "agent_sdk.subagent_description": logOpts()?.toolContent === true && event.data.description !== undefined
281
310
  ? truncate(event.data.description)
282
311
  : undefined,
283
312
  }),
284
313
  }, trace.setSpan(context.active(), turn.span));
285
314
  turn.subagents.set(event.data.callId, span);
286
- metrics?.subagents.add(1, join(event.sessionId, {
315
+ currentMetrics()?.subagents.add(1, join(event.sessionId, {
287
316
  "agent_sdk.agent": agentName,
288
317
  "agent_sdk.subagent_name": event.data.name ?? "unknown",
289
318
  }));
@@ -337,7 +366,7 @@ export function createOtelCollector(runtime, agentName, log) {
337
366
  turn.span.setStatus({ code: SpanStatusCode.OK });
338
367
  turn.span.end(startTime);
339
368
  sessions.get(event.sessionId)?.turns.delete(event.turnId);
340
- metrics?.turns.add(1, join(event.sessionId, {
369
+ currentMetrics()?.turns.add(1, join(event.sessionId, {
341
370
  "agent_sdk.agent": agentName,
342
371
  "agent_sdk.turn_status": "completed",
343
372
  }));
@@ -376,7 +405,7 @@ export function createOtelCollector(runtime, agentName, log) {
376
405
  }
377
406
  turn.span.end(startTime);
378
407
  sessions.get(event.sessionId)?.turns.delete(event.turnId);
379
- metrics?.turns.add(1, join(event.sessionId, {
408
+ currentMetrics()?.turns.add(1, join(event.sessionId, {
380
409
  "agent_sdk.agent": agentName,
381
410
  "agent_sdk.turn_status": expected ?? "failed",
382
411
  }));
@@ -495,7 +524,7 @@ export function createOtelCollector(runtime, agentName, log) {
495
524
  existing.setAttributes(join(args.sessionId, {
496
525
  ...computerUseAttrs,
497
526
  "agent_sdk.parent_call_id": args.parentCallId ?? args.call.parentCallId,
498
- "agent_sdk.tool_args": logOpts?.toolContent === true && args.call.args !== undefined
527
+ "agent_sdk.tool_args": logOpts()?.toolContent === true && args.call.args !== undefined
499
528
  ? truncate(json(args.call.args))
500
529
  : undefined,
501
530
  }));
@@ -512,7 +541,7 @@ export function createOtelCollector(runtime, agentName, log) {
512
541
  "agent_sdk.turn_id": args.turnId,
513
542
  "agent_sdk.call_id": args.call.callId,
514
543
  "agent_sdk.parent_call_id": args.call.parentCallId,
515
- "agent_sdk.tool_args": logOpts?.toolContent === true && args.call.args !== undefined
544
+ "agent_sdk.tool_args": logOpts()?.toolContent === true && args.call.args !== undefined
516
545
  ? truncate(json(args.call.args))
517
546
  : undefined,
518
547
  ...computerUseAttrs,
@@ -617,7 +646,8 @@ export function createOtelCollector(runtime, agentName, log) {
617
646
  }
618
647
  }
619
648
  function recordTokens(sessionId, usage) {
620
- if (metrics === undefined) {
649
+ const active = currentMetrics();
650
+ if (active === undefined) {
621
651
  return;
622
652
  }
623
653
  const agent = agentName;
@@ -628,24 +658,25 @@ export function createOtelCollector(runtime, agentName, log) {
628
658
  addTokens(sessionId, usage.cacheWriteTokens, "cache_creation", agent);
629
659
  if (usage.reasoningTokens !== undefined) {
630
660
  // Reasoning is Agent-SDK-only; enterprise wire has no reasoning enum.
631
- metrics.tokens.add(usage.reasoningTokens, join(sessionId, {
661
+ active.tokens.add(usage.reasoningTokens, join(sessionId, {
632
662
  "cursor.token.type": "reasoning",
633
663
  "agent_sdk.agent": agent,
634
664
  }));
635
665
  }
636
666
  }
637
667
  function addTokens(sessionId, value, type, agent) {
638
- if (metrics === undefined || value === 0) {
668
+ const active = currentMetrics();
669
+ if (active === undefined || value === 0) {
639
670
  return;
640
671
  }
641
- metrics.tokens.add(value, join(sessionId, {
672
+ active.tokens.add(value, join(sessionId, {
642
673
  "cursor.token.type": type,
643
674
  "agent_sdk.agent": agent,
644
675
  }));
645
676
  }
646
677
  /** Content opt-in for failure text (same gate as tool payloads). */
647
678
  function gatedContent(value) {
648
- if (logOpts?.toolContent !== true) {
679
+ if (logOpts()?.toolContent !== true) {
649
680
  return undefined;
650
681
  }
651
682
  return truncate(value);
@@ -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
  /**
@@ -32,9 +37,13 @@ export declare function resolveOtelConfig(input: {
32
37
  serve?: OtelConfig | false;
33
38
  env?: NodeJS.ProcessEnv;
34
39
  }): ResolvedOtelConfig;
40
+ /** Values are URL-encoded per the OTel spec (`Authorization=Basic%20...`). */
35
41
  export declare function parseOtelHeaders(raw: string | undefined): Record<string, string>;
36
42
  /** Collapse `…/v1/{traces,metrics,logs}` to the collector base. */
37
43
  export declare function stripSignalPath(url: string): string;
38
44
  /** Exporters that apply to one signal (honors per-exporter `signals`). */
39
45
  export declare function exportersForSignal(exporters: readonly OtelExporterConfig[], signal: OtelSignal): OtelExporterConfig[];
46
+ export declare function disabledOtelConfig(): ResolvedOtelConfig;
47
+ /** Canonical JSON with sorted keys, so object key order does not change the result. */
48
+ export declare function stableJson(value: unknown): string;
40
49
  //# sourceMappingURL=config.d.ts.map
@@ -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,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAiBhF;AAED,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"}
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"}