@cursor/bdk 0.2.11 → 0.2.13

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 (457) hide show
  1. package/dist/bin/agent-serve.js +28 -26
  2. package/dist/channels/bitbucket/api.js +8 -8
  3. package/dist/channels/bitbucket/binding.js +4 -4
  4. package/dist/channels/bitbucket/bitbucket-channel.js +1 -1
  5. package/dist/channels/bitbucket/bitbucket-webhook.js +1 -1
  6. package/dist/channels/bitbucket/checks.js +1 -1
  7. package/dist/channels/bitbucket/cursor-account.js +1 -1
  8. package/dist/channels/bitbucket/events.js +1 -1
  9. package/dist/channels/change-monitors/change-monitors-channel.js +1 -1
  10. package/dist/channels/checks.js +2 -2
  11. package/dist/channels/deployments/deployments-channel.js +1 -1
  12. package/dist/channels/github/cursor-account.js +3 -3
  13. package/dist/channels/github/defaults.js +3 -3
  14. package/dist/channels/github/events.js +1 -1
  15. package/dist/channels/github/forward.js +8 -8
  16. package/dist/channels/github/github-channel.js +2 -2
  17. package/dist/channels/github/index.d.ts +22 -12
  18. package/dist/channels/github/index.d.ts.map +1 -1
  19. package/dist/channels/github/index.js +11 -12
  20. package/dist/channels/gitlab/binding.js +4 -4
  21. package/dist/channels/gitlab/checks.js +1 -1
  22. package/dist/channels/gitlab/cursor-account.js +1 -1
  23. package/dist/channels/gitlab/events.js +1 -1
  24. package/dist/channels/gitlab/gitlab-channel.js +1 -1
  25. package/dist/channels/gitlab/gitlab-webhook.js +1 -1
  26. package/dist/channels/gitlab/replay.js +2 -2
  27. package/dist/channels/origin/binding.js +3 -3
  28. package/dist/channels/origin/checks.js +1 -1
  29. package/dist/channels/origin/cursor-account.js +1 -1
  30. package/dist/channels/origin/events.js +1 -1
  31. package/dist/channels/origin/index.d.ts +21 -11
  32. package/dist/channels/origin/index.d.ts.map +1 -1
  33. package/dist/channels/origin/index.js +10 -11
  34. package/dist/channels/origin/origin-channel.js +1 -1
  35. package/dist/channels/origin/origin-webhook.js +2 -2
  36. package/dist/channels/slack/agentic-delivery.js +3 -3
  37. package/dist/channels/slack/agentic-signals.js +1 -1
  38. package/dist/channels/slack/api.js +5 -5
  39. package/dist/channels/slack/approvals.js +1 -1
  40. package/dist/channels/slack/attachments.js +3 -3
  41. package/dist/channels/slack/blocks.js +3 -3
  42. package/dist/channels/slack/bot-mentions.js +4 -4
  43. package/dist/channels/slack/channel-watch.js +4 -4
  44. package/dist/channels/slack/cli-project.js +3 -3
  45. package/dist/channels/slack/dispatch.js +1 -1
  46. package/dist/channels/slack/doctor.js +1 -1
  47. package/dist/channels/slack/eval-directive.js +1 -1
  48. package/dist/channels/slack/footer.js +1 -1
  49. package/dist/channels/slack/interactive.js +2 -2
  50. package/dist/channels/slack/log.d.ts.map +1 -1
  51. package/dist/channels/slack/log.js +1 -1
  52. package/dist/channels/slack/manifest.js +1 -1
  53. package/dist/channels/slack/nudge-carrier.js +1 -1
  54. package/dist/channels/slack/nudge-store.js +2 -2
  55. package/dist/channels/slack/recording-sink.js +6 -6
  56. package/dist/channels/slack/reply-options.js +6 -6
  57. package/dist/channels/slack/self-identity.d.ts +7 -4
  58. package/dist/channels/slack/self-identity.d.ts.map +1 -1
  59. package/dist/channels/slack/self-identity.js +17 -8
  60. package/dist/channels/slack/sender-name.d.ts.map +1 -1
  61. package/dist/channels/slack/sender-name.js +2 -6
  62. package/dist/channels/slack/setup.d.ts.map +1 -1
  63. package/dist/channels/slack/setup.js +1 -1
  64. package/dist/channels/slack/slack-channel.js +2 -2
  65. package/dist/channels/slack/socket-mode.js +2 -2
  66. package/dist/channels/slack/thread-context.js +8 -8
  67. package/dist/channels/slack/tool-cards.js +1 -1
  68. package/dist/channels/slack/user-info.d.ts +2 -1
  69. package/dist/channels/slack/user-info.d.ts.map +1 -1
  70. package/dist/channels/slack/user-info.js +16 -1
  71. package/dist/channels.js +1 -1
  72. package/dist/docs/404.html +3 -3
  73. package/dist/docs/assets/{app.DXI7bwox.js → app.CaLG1pPt.js} +4 -4
  74. package/dist/docs/assets/chunks/@localSearchIndexroot.DvlKuIO-.js +1 -0
  75. package/dist/docs/assets/chunks/{VPLocalSearchBox.BrbO5mEe.js → VPLocalSearchBox.YsP_2wqD.js} +2 -2
  76. package/dist/docs/assets/chunks/{arc.BOG1yms8.js → arc.C2j9hR7c.js} +1 -1
  77. package/dist/docs/assets/chunks/{architectureDiagram-Q4EWVU46.C0hsMZnZ.js → architectureDiagram-Q4EWVU46.C5qkGp7y.js} +1 -1
  78. package/dist/docs/assets/chunks/{baseUniq.H044KjKs.js → baseUniq.U6GgTHOD.js} +1 -1
  79. package/dist/docs/assets/chunks/{blockDiagram-DXYQGD6D.BsRW6GoB.js → blockDiagram-DXYQGD6D.D51mJop2.js} +1 -1
  80. package/dist/docs/assets/chunks/{c4Diagram-AHTNJAMY.B9HV5PFR.js → c4Diagram-AHTNJAMY.w1d6QxV7.js} +1 -1
  81. package/dist/docs/assets/chunks/channel.BRSFxCcD.js +1 -0
  82. package/dist/docs/assets/chunks/{chunk-4BX2VUAB.CPoT_ajl.js → chunk-4BX2VUAB.B_A815un.js} +1 -1
  83. package/dist/docs/assets/chunks/{chunk-4TB4RGXK.DZBwWuCL.js → chunk-4TB4RGXK.DMrm-ZCb.js} +1 -1
  84. package/dist/docs/assets/chunks/{chunk-55IACEB6.CZ3yTiyq.js → chunk-55IACEB6.8qw6Xdal.js} +1 -1
  85. package/dist/docs/assets/chunks/{chunk-EDXVE4YY.6DfvHSd8.js → chunk-EDXVE4YY.Cq_nHODn.js} +1 -1
  86. package/dist/docs/assets/chunks/{chunk-FMBD7UC4.CpBj8HfK.js → chunk-FMBD7UC4.B67ohCYn.js} +1 -1
  87. package/dist/docs/assets/chunks/{chunk-OYMX7WX6.BdKo8YqS.js → chunk-OYMX7WX6.Bo8rQI8F.js} +1 -1
  88. package/dist/docs/assets/chunks/{chunk-QZHKN3VN.BnXNyxJx.js → chunk-QZHKN3VN.BERUMfE9.js} +1 -1
  89. package/dist/docs/assets/chunks/{chunk-YZCP3GAM.Cg1OcF8G.js → chunk-YZCP3GAM.DWG2tXIX.js} +1 -1
  90. package/dist/docs/assets/chunks/classDiagram-6PBFFD2Q.Cmtm6WkN.js +1 -0
  91. package/dist/docs/assets/chunks/classDiagram-v2-HSJHXN6E.Cmtm6WkN.js +1 -0
  92. package/dist/docs/assets/chunks/clone.JMC96Eo6.js +1 -0
  93. package/dist/docs/assets/chunks/{cose-bilkent-S5V4N54A.1SP8al9c.js → cose-bilkent-S5V4N54A.tezXBs9b.js} +1 -1
  94. package/dist/docs/assets/chunks/{dagre-KV5264BT.DS1L6hJt.js → dagre-KV5264BT.aSbEUwT7.js} +1 -1
  95. package/dist/docs/assets/chunks/{diagram-5BDNPKRD.ChsausbG.js → diagram-5BDNPKRD.vnT6aJ57.js} +1 -1
  96. package/dist/docs/assets/chunks/{diagram-G4DWMVQ6.3XsptNWj.js → diagram-G4DWMVQ6.hGYdrDa2.js} +1 -1
  97. package/dist/docs/assets/chunks/{diagram-MMDJMWI5.DPA9Dk_P.js → diagram-MMDJMWI5.CmdSUP6L.js} +1 -1
  98. package/dist/docs/assets/chunks/{diagram-TYMM5635.BVswXWrB.js → diagram-TYMM5635.BbAnLEBB.js} +1 -1
  99. package/dist/docs/assets/chunks/{erDiagram-SMLLAGMA.BSak5OSP.js → erDiagram-SMLLAGMA.H40W4HWE.js} +1 -1
  100. package/dist/docs/assets/chunks/{flowDiagram-DWJPFMVM.CQgN4TTz.js → flowDiagram-DWJPFMVM.BFMtUSv-.js} +1 -1
  101. package/dist/docs/assets/chunks/{ganttDiagram-T4ZO3ILL.GrT0kA4a.js → ganttDiagram-T4ZO3ILL.CbYiu7Dt.js} +1 -1
  102. package/dist/docs/assets/chunks/{gitGraphDiagram-UUTBAWPF.CdS7Ucll.js → gitGraphDiagram-UUTBAWPF.Cyc5mzZD.js} +1 -1
  103. package/dist/docs/assets/chunks/{graph.BVqKRmRo.js → graph.BRptDG1H.js} +1 -1
  104. package/dist/docs/assets/chunks/{infoDiagram-42DDH7IO.C3C9FRto.js → infoDiagram-42DDH7IO.Bz6KCA3a.js} +1 -1
  105. package/dist/docs/assets/chunks/{ishikawaDiagram-UXIWVN3A.2FuAh_Zj.js → ishikawaDiagram-UXIWVN3A.DDJ_7_Fq.js} +1 -1
  106. package/dist/docs/assets/chunks/{journeyDiagram-VCZTEJTY.CaHMfK4b.js → journeyDiagram-VCZTEJTY.D0t_ltlb.js} +1 -1
  107. package/dist/docs/assets/chunks/{kanban-definition-6JOO6SKY.CjhIUwcA.js → kanban-definition-6JOO6SKY.DyyNsMfi.js} +1 -1
  108. package/dist/docs/assets/chunks/{layout.CGU3gfSf.js → layout.Cbxq-Rhp.js} +1 -1
  109. package/dist/docs/assets/chunks/{linear.DaihpW_n.js → linear.DxGYL0MP.js} +1 -1
  110. package/dist/docs/assets/chunks/{min.BS-j8kHQ.js → min.DA5KL8wu.js} +1 -1
  111. package/dist/docs/assets/chunks/{mindmap-definition-QFDTVHPH.BVJ1Bbnk.js → mindmap-definition-QFDTVHPH.Bc72Utls.js} +1 -1
  112. package/dist/docs/assets/chunks/{pieDiagram-DEJITSTG.Cz1WIv9r.js → pieDiagram-DEJITSTG.BtpHnIB_.js} +1 -1
  113. package/dist/docs/assets/chunks/{quadrantDiagram-34T5L4WZ.DKLFxcjy.js → quadrantDiagram-34T5L4WZ.Cx4oCSRR.js} +1 -1
  114. package/dist/docs/assets/chunks/{requirementDiagram-MS252O5E.BHegiK7x.js → requirementDiagram-MS252O5E.BC0hXWlW.js} +1 -1
  115. package/dist/docs/assets/chunks/{sankeyDiagram-XADWPNL6.DYkY6yPc.js → sankeyDiagram-XADWPNL6.Dg8T1SEp.js} +1 -1
  116. package/dist/docs/assets/chunks/{sequenceDiagram-FGHM5R23.DYQ1QUrI.js → sequenceDiagram-FGHM5R23.CWSdHYAF.js} +1 -1
  117. package/dist/docs/assets/chunks/{stateDiagram-FHFEXIEX.Iru8BsFo.js → stateDiagram-FHFEXIEX.0MVPRI28.js} +1 -1
  118. package/dist/docs/assets/chunks/stateDiagram-v2-QKLJ7IA2.N4Am6sXd.js +1 -0
  119. package/dist/docs/assets/chunks/{theme.DaplWQhQ.js → theme.DO1avLBn.js} +2 -2
  120. package/dist/docs/assets/chunks/{timeline-definition-GMOUNBTQ.BwFA8hiX.js → timeline-definition-GMOUNBTQ.BuRinAVi.js} +1 -1
  121. package/dist/docs/assets/chunks/{vennDiagram-DHZGUBPP.CZ60W1C_.js → vennDiagram-DHZGUBPP.DXf0PCoJ.js} +1 -1
  122. package/dist/docs/assets/chunks/wardley-RL74JXVD._eATmGtu.js +162 -0
  123. package/dist/docs/assets/chunks/{wardleyDiagram-NUSXRM2D.B69D2r8-.js → wardleyDiagram-NUSXRM2D.T4ThngYV.js} +1 -1
  124. package/dist/docs/assets/chunks/{xychartDiagram-5P7HB3ND.CLPZEIU9.js → xychartDiagram-5P7HB3ND.b4pZF3D5.js} +1 -1
  125. package/dist/docs/assets/{reference_connections.md.Bljpve-y.js → reference_connections.md.DLrgAd5f.js} +1 -1
  126. package/dist/docs/assets/{reference_hooks.md.C5LCJ1R3.js → reference_hooks.md.B-eGa2km.js} +3 -3
  127. package/dist/docs/assets/{reference_hooks.md.C5LCJ1R3.lean.js → reference_hooks.md.B-eGa2km.lean.js} +1 -1
  128. package/dist/docs/assets/{reference_sessions.md.CM5zo3w4.js → reference_sessions.md.CyM7ARz1.js} +1 -1
  129. package/dist/docs/assets/{reference_skills.md.ClkMoQsV.js → reference_skills.md.C0guGcH0.js} +3 -3
  130. package/dist/docs/assets/{reference_tools.md.v3SXVSs_.js → reference_tools.md.DzIY9JzY.js} +3 -3
  131. package/dist/docs/assets/{reference_tools.md.v3SXVSs_.lean.js → reference_tools.md.DzIY9JzY.lean.js} +1 -1
  132. package/dist/docs/assets/{style.C130MVnH.css → style.Dwls12uf.css} +1 -1
  133. package/dist/docs/building-with-agents.html +37 -37
  134. package/dist/docs/deployment.html +37 -37
  135. package/dist/docs/evals.html +37 -37
  136. package/dist/docs/guides/agent-to-agent.html +37 -37
  137. package/dist/docs/guides/bitbucket.html +37 -37
  138. package/dist/docs/guides/cloud-agents.html +37 -37
  139. package/dist/docs/guides/convert-automation.html +37 -37
  140. package/dist/docs/guides/github.html +37 -37
  141. package/dist/docs/guides/gitlab.html +37 -37
  142. package/dist/docs/guides/grokbot-agents.html +37 -37
  143. package/dist/docs/guides/hooks.html +37 -37
  144. package/dist/docs/guides/improve.html +37 -37
  145. package/dist/docs/guides/jev.html +37 -37
  146. package/dist/docs/guides/mcp-oauth.html +37 -37
  147. package/dist/docs/guides/migrate.html +37 -37
  148. package/dist/docs/guides/opentelemetry.html +37 -37
  149. package/dist/docs/guides/slack.html +37 -37
  150. package/dist/docs/guides/webhooks.html +37 -37
  151. package/dist/docs/hashmap.json +1 -1
  152. package/dist/docs/hillclimbing.html +37 -37
  153. package/dist/docs/index.html +37 -37
  154. package/dist/docs/llms-full.txt +15 -2
  155. package/dist/docs/quickstart.html +37 -37
  156. package/dist/docs/reference/agent-config.html +37 -37
  157. package/dist/docs/reference/artifacts.html +37 -37
  158. package/dist/docs/reference/channels.html +37 -37
  159. package/dist/docs/reference/cli.html +37 -37
  160. package/dist/docs/reference/connections.html +39 -39
  161. package/dist/docs/reference/connections.md +2 -1
  162. package/dist/docs/reference/evals.html +37 -37
  163. package/dist/docs/reference/extensions.html +37 -37
  164. package/dist/docs/reference/hooks.html +39 -39
  165. package/dist/docs/reference/hooks.md +1 -0
  166. package/dist/docs/reference/http-api.html +37 -37
  167. package/dist/docs/reference/instructions.html +37 -37
  168. package/dist/docs/reference/playground.html +36 -36
  169. package/dist/docs/reference/project-layout.html +37 -37
  170. package/dist/docs/reference/prompt.html +37 -37
  171. package/dist/docs/reference/schedules.html +37 -37
  172. package/dist/docs/reference/sessions.html +37 -37
  173. package/dist/docs/reference/sessions.md +1 -1
  174. package/dist/docs/reference/skills.html +40 -40
  175. package/dist/docs/reference/subagents.html +37 -37
  176. package/dist/docs/reference/tools.html +39 -39
  177. package/dist/docs/reference/tools.md +11 -0
  178. package/dist/docs/templates/agentic-owners.html +37 -37
  179. package/dist/docs/templates/grokbot-agents.html +37 -37
  180. package/dist/docs/templates/security-reviewer.html +37 -37
  181. package/dist/docs/templates/thermo-quality-review.html +37 -37
  182. package/dist/docs/templates/thermo-review.html +37 -37
  183. package/dist/docs/templates/triage.html +37 -37
  184. package/dist/docs/troubleshooting.html +36 -36
  185. package/dist/evals/assertions.d.ts.map +1 -1
  186. package/dist/evals/assertions.js +21 -19
  187. package/dist/evals/expect.js +1 -1
  188. package/dist/evals/judge.js +1 -1
  189. package/dist/evals/reporters.js +8 -8
  190. package/dist/evals/run-facts.js +2 -2
  191. package/dist/evals.js +6 -6
  192. package/dist/extensions/cursor-cloud-agents/extension.d.ts +2 -0
  193. package/dist/extensions/cursor-cloud-agents/extension.d.ts.map +1 -1
  194. package/dist/extensions/cursor-cloud-agents/extension.js +2 -1
  195. package/dist/extensions/cursor-cloud-agents/lib/backend.d.ts +16 -0
  196. package/dist/extensions/cursor-cloud-agents/lib/backend.d.ts.map +1 -1
  197. package/dist/extensions/cursor-cloud-agents/lib/backend.js +44 -3
  198. package/dist/extensions/cursor-cloud-agents/lib/fleet.js +1 -1
  199. package/dist/extensions/cursor-cloud-agents/lib/launch-agent.d.ts +23 -0
  200. package/dist/extensions/cursor-cloud-agents/lib/launch-agent.d.ts.map +1 -0
  201. package/dist/extensions/cursor-cloud-agents/lib/launch-agent.js +32 -0
  202. package/dist/extensions/cursor-cloud-agents/lib/repos.js +2 -2
  203. package/dist/extensions/cursor-cloud-agents/lib/transcript.js +2 -2
  204. package/dist/extensions/cursor-cloud-agents/lib/watch.d.ts.map +1 -1
  205. package/dist/extensions/cursor-cloud-agents/lib/watch.js +1 -1
  206. package/dist/extensions/cursor-cloud-agents/tools/launch.d.ts.map +1 -1
  207. package/dist/extensions/cursor-cloud-agents/tools/launch.js +3 -8
  208. package/dist/extensions/cursor-cloud-agents/tools/list.js +1 -1
  209. package/dist/extensions/cursor-grokbot-agents/extension.js +3 -3
  210. package/dist/extensions/cursor-grokbot-agents/lib/agents.js +3 -3
  211. package/dist/extensions/cursor-grokbot-agents/lib/contacts.js +3 -3
  212. package/dist/extensions/cursor-grokbot-agents/lib/conversation.js +4 -4
  213. package/dist/extensions/cursor-grokbot-agents/tools/list.js +1 -1
  214. package/dist/extensions/improve/skills/yourself.js +1 -1
  215. package/dist/extensions/jev/extension.js +2 -2
  216. package/dist/extensions/jev/tools/evaluate.js +1 -1
  217. package/dist/extensions/slack-communication/tools/react.js +1 -1
  218. package/dist/files-backends/cursor-hosted.js +8 -8
  219. package/dist/files-backends/local-fs.js +1 -1
  220. package/dist/filesystem.d.ts.map +1 -1
  221. package/dist/filesystem.js +15 -15
  222. package/dist/internal/advertise-tools.d.ts +3 -2
  223. package/dist/internal/advertise-tools.d.ts.map +1 -1
  224. package/dist/internal/advertise-tools.js +11 -9
  225. package/dist/internal/approval-gate.js +1 -1
  226. package/dist/internal/artifacts-store.js +13 -13
  227. package/dist/internal/as-of.js +2 -2
  228. package/dist/internal/authored-alias-hooks.d.ts +4 -3
  229. package/dist/internal/authored-alias-hooks.d.ts.map +1 -1
  230. package/dist/internal/authored-alias-hooks.js +16 -7
  231. package/dist/internal/authored-loaders.d.ts.map +1 -1
  232. package/dist/internal/authored-loaders.js +21 -5
  233. package/dist/internal/builtin-tools/reminders.js +2 -2
  234. package/dist/internal/chat-client.js +5 -5
  235. package/dist/internal/cli-ax.js +14 -14
  236. package/dist/internal/cli-bitbucket.js +10 -10
  237. package/dist/internal/cli-convert-automation.js +2 -2
  238. package/dist/internal/cli-cursor.js +2 -2
  239. package/dist/internal/cli-deploy.d.ts.map +1 -1
  240. package/dist/internal/cli-deploy.js +40 -40
  241. package/dist/internal/cli-docs.js +5 -5
  242. package/dist/internal/cli-github.js +15 -15
  243. package/dist/internal/cli-gitlab.js +10 -10
  244. package/dist/internal/cli-images.js +16 -16
  245. package/dist/internal/cli-manifest.js +1 -1
  246. package/dist/internal/cli-mcp-oauth.js +5 -5
  247. package/dist/internal/cli-mcp.js +3 -3
  248. package/dist/internal/cli-migrate.js +1 -1
  249. package/dist/internal/cli-skills.js +2 -2
  250. package/dist/internal/cli-slack.js +5 -5
  251. package/dist/internal/cloud-turn-cost.js +1 -1
  252. package/dist/internal/continuation-identity.js +6 -6
  253. package/dist/internal/conversation-mirror.js +5 -5
  254. package/dist/internal/convert-automation/convert-workflow.js +24 -24
  255. package/dist/internal/cursor/account-mcp.d.ts.map +1 -1
  256. package/dist/internal/cursor/account-mcp.js +20 -20
  257. package/dist/internal/cursor/backend-client.js +6 -6
  258. package/dist/internal/cursor/credentials.js +1 -1
  259. package/dist/internal/cursor/store-api-client.js +1 -1
  260. package/dist/internal/cursor-account-mcp-auth.js +9 -9
  261. package/dist/internal/cursor-deployment-relay.d.ts.map +1 -1
  262. package/dist/internal/cursor-deployment-relay.js +9 -9
  263. package/dist/internal/cursor-event-relay.js +10 -10
  264. package/dist/internal/cursor-relay-core.js +2 -2
  265. package/dist/internal/deploy-manifest.d.ts +14 -0
  266. package/dist/internal/deploy-manifest.d.ts.map +1 -1
  267. package/dist/internal/deploy-manifest.js +33 -10
  268. package/dist/internal/discovery/agent-config.js +2 -2
  269. package/dist/internal/discovery/agent.js +6 -6
  270. package/dist/internal/discovery/connections.js +5 -5
  271. package/dist/internal/discovery/cursor-plugin.js +12 -12
  272. package/dist/internal/discovery/extension-overlay.js +3 -3
  273. package/dist/internal/discovery/extensions.js +6 -6
  274. package/dist/internal/discovery/info.js +9 -9
  275. package/dist/internal/discovery/instructions.js +1 -1
  276. package/dist/internal/discovery/project.js +3 -3
  277. package/dist/internal/discovery/services.js +1 -1
  278. package/dist/internal/discovery/tools.js +1 -1
  279. package/dist/internal/docs-site.js +2 -2
  280. package/dist/internal/env-file.js +1 -1
  281. package/dist/internal/eval-run-store.js +7 -7
  282. package/dist/internal/eval-runner.d.ts.map +1 -1
  283. package/dist/internal/eval-runner.js +14 -14
  284. package/dist/internal/eval-transport.js +1 -1
  285. package/dist/internal/evals-client.d.ts.map +1 -1
  286. package/dist/internal/evals-client.js +4 -4
  287. package/dist/internal/event-log.js +8 -8
  288. package/dist/internal/event-mapper.js +13 -13
  289. package/dist/internal/expected-delivery-failure.js +2 -2
  290. package/dist/internal/filesystem/format.js +2 -2
  291. package/dist/internal/filesystem/nearest.js +3 -3
  292. package/dist/internal/filesystem/scratch.js +3 -3
  293. package/dist/internal/filesystem/tools.js +6 -6
  294. package/dist/internal/filesystem/walk.d.ts.map +1 -1
  295. package/dist/internal/filesystem/walk.js +2 -2
  296. package/dist/internal/framework-file-storage.d.ts.map +1 -1
  297. package/dist/internal/framework-file-storage.js +6 -5
  298. package/dist/internal/framework-storage-selection.d.ts.map +1 -1
  299. package/dist/internal/framework-storage-selection.js +4 -2
  300. package/dist/internal/github-fanout.d.ts.map +1 -1
  301. package/dist/internal/github-fanout.js +3 -3
  302. package/dist/internal/guest-network.js +4 -4
  303. package/dist/internal/host-files.js +1 -1
  304. package/dist/internal/host-kv.js +2 -2
  305. package/dist/internal/hosted-catch-protocol.js +1 -1
  306. package/dist/internal/hosted-catch.js +1 -1
  307. package/dist/internal/hosted-delivery-protocol.d.ts +24 -0
  308. package/dist/internal/hosted-delivery-protocol.d.ts.map +1 -1
  309. package/dist/internal/hosted-delivery-protocol.js +58 -14
  310. package/dist/internal/hosted-delivery.d.ts +6 -0
  311. package/dist/internal/hosted-delivery.d.ts.map +1 -1
  312. package/dist/internal/hosted-delivery.js +64 -13
  313. package/dist/internal/hosted-eval-cases.js +4 -4
  314. package/dist/internal/hosted-execution-diag.js +3 -3
  315. package/dist/internal/hosted-managed-automation.d.ts +3 -3
  316. package/dist/internal/hosted-managed-automation.js +3 -3
  317. package/dist/internal/hosting.js +1 -1
  318. package/dist/internal/http-channel.js +1 -1
  319. package/dist/internal/http-control-plane-session.js +2 -2
  320. package/dist/internal/init-interview.js +7 -7
  321. package/dist/internal/init-project.d.ts.map +1 -1
  322. package/dist/internal/init-project.js +12 -12
  323. package/dist/internal/inline-stdio-mcp.js +2 -2
  324. package/dist/internal/install-cursor-skills.js +11 -11
  325. package/dist/internal/json-schema.js +1 -1
  326. package/dist/internal/local-control-plane.js +3 -3
  327. package/dist/internal/local-env.js +3 -3
  328. package/dist/internal/log-ring.js +1 -1
  329. package/dist/internal/logs-client.js +1 -1
  330. package/dist/internal/mcp-endpoint.js +8 -8
  331. package/dist/internal/mcp-host.d.ts.map +1 -1
  332. package/dist/internal/mcp-host.js +5 -5
  333. package/dist/internal/mcp-oauth-on-demand.js +3 -3
  334. package/dist/internal/mcp-oauth.js +5 -5
  335. package/dist/internal/net.js +2 -2
  336. package/dist/internal/otel/config.js +3 -3
  337. package/dist/internal/otel/runtime.js +13 -13
  338. package/dist/internal/peer-connections.js +2 -2
  339. package/dist/internal/persistent-stage-log-mirror.d.ts +57 -0
  340. package/dist/internal/persistent-stage-log-mirror.d.ts.map +1 -0
  341. package/dist/internal/persistent-stage-log-mirror.js +231 -0
  342. package/dist/internal/platform-schedule-sync.js +1 -1
  343. package/dist/internal/platform-timers.js +1 -1
  344. package/dist/internal/playground/static.js +2 -2
  345. package/dist/internal/playground/toolchain.js +2 -2
  346. package/dist/internal/playground-proxy.js +3 -3
  347. package/dist/internal/process-memory-telemetry.js +1 -1
  348. package/dist/internal/reminder-runner.d.ts +1 -1
  349. package/dist/internal/reminder-runner.d.ts.map +1 -1
  350. package/dist/internal/reminder-runner.js +14 -16
  351. package/dist/internal/reminder-store.js +1 -1
  352. package/dist/internal/resolved-connections.js +8 -8
  353. package/dist/internal/router.js +4 -4
  354. package/dist/internal/run-client.js +2 -2
  355. package/dist/internal/schedule-runner.d.ts +13 -2
  356. package/dist/internal/schedule-runner.d.ts.map +1 -1
  357. package/dist/internal/schedule-runner.js +48 -9
  358. package/dist/internal/sdk-runner.d.ts +2 -1
  359. package/dist/internal/sdk-runner.d.ts.map +1 -1
  360. package/dist/internal/sdk-runner.js +13 -8
  361. package/dist/internal/serve-restart.js +1 -1
  362. package/dist/internal/server.d.ts.map +1 -1
  363. package/dist/internal/server.js +101 -76
  364. package/dist/internal/session-cost.js +3 -3
  365. package/dist/internal/session-engine.d.ts +8 -0
  366. package/dist/internal/session-engine.d.ts.map +1 -1
  367. package/dist/internal/session-engine.js +183 -118
  368. package/dist/internal/session-live-publisher.d.ts +48 -0
  369. package/dist/internal/session-live-publisher.d.ts.map +1 -0
  370. package/dist/internal/session-live-publisher.js +415 -0
  371. package/dist/internal/session-run-log.js +6 -6
  372. package/dist/internal/sessions-client.js +3 -3
  373. package/dist/internal/skill-catalog.js +2 -2
  374. package/dist/internal/sleep.js +1 -1
  375. package/dist/internal/start-log-store.d.ts +5 -1
  376. package/dist/internal/start-log-store.d.ts.map +1 -1
  377. package/dist/internal/start-log-store.js +5 -3
  378. package/dist/internal/storage-coordinator.js +12 -12
  379. package/dist/internal/store-api-protocol.d.ts +51 -0
  380. package/dist/internal/store-api-protocol.d.ts.map +1 -1
  381. package/dist/internal/store-api-protocol.js +39 -2
  382. package/dist/internal/store-mirror.js +4 -4
  383. package/dist/internal/stream-progress.d.ts.map +1 -1
  384. package/dist/internal/stream-progress.js +4 -0
  385. package/dist/internal/terminal-style.js +2 -2
  386. package/dist/internal/testing/conversation-identity-vectors.d.ts +48 -0
  387. package/dist/internal/testing/conversation-identity-vectors.d.ts.map +1 -0
  388. package/dist/internal/testing/conversation-identity-vectors.js +136 -0
  389. package/dist/internal/tool-call-retry.d.ts +87 -0
  390. package/dist/internal/tool-call-retry.d.ts.map +1 -0
  391. package/dist/internal/tool-call-retry.js +387 -0
  392. package/dist/internal/tool-result.js +3 -3
  393. package/dist/internal/trajectory.js +7 -7
  394. package/dist/internal/turn-governor.js +2 -2
  395. package/dist/internal/turn-outbox.js +1 -1
  396. package/dist/internal/update-check.d.ts.map +1 -1
  397. package/dist/internal/update-check.js +4 -2
  398. package/dist/internal/v2-hosting.d.ts +6 -0
  399. package/dist/internal/v2-hosting.d.ts.map +1 -1
  400. package/dist/internal/v2-hosting.js +7 -1
  401. package/dist/internal/workspace.js +4 -4
  402. package/dist/kv/memory-kv.js +3 -3
  403. package/dist/playground/assets/index-CzttDc-d.css +1 -0
  404. package/dist/playground/assets/{index-Be0-1hw2.js → index-DIiKbZ25.js} +42 -42
  405. package/dist/playground/index.html +2 -2
  406. package/dist/prompt.js +1 -1
  407. package/dist/storage-backends/cursor-hosted-v2.js +2 -2
  408. package/dist/storage-backends/file-kv.js +7 -7
  409. package/dist/storage-protocol.d.ts +7 -0
  410. package/dist/storage-protocol.d.ts.map +1 -1
  411. package/dist/storage-protocol.js +7 -0
  412. package/dist/storage.js +3 -3
  413. package/dist/types.d.ts +21 -4
  414. package/dist/types.d.ts.map +1 -1
  415. package/dist/types.js +4 -4
  416. package/docs/reference/connections.md +2 -1
  417. package/docs/reference/hooks.md +1 -0
  418. package/docs/reference/sessions.md +1 -1
  419. package/docs/reference/tools.md +11 -0
  420. package/package.json +6 -6
  421. package/templates/agentic-owners/bot/channels/github.ts +2 -2
  422. package/templates/agentic-owners/bot/lib/github.ts +7 -5
  423. package/templates/agentic-owners/bot/lib/owners/decision.ts +9 -9
  424. package/templates/agentic-owners/bot/lib/owners/handles.ts +2 -2
  425. package/templates/agentic-owners/bot/lib/owners/match.ts +5 -3
  426. package/templates/agentic-owners/bot/lib/owners/matching.ts +1 -1
  427. package/templates/agentic-owners/bot/lib/owners/parse.ts +4 -4
  428. package/templates/agentic-owners/bot/lib/owners/prompt.ts +1 -1
  429. package/templates/agentic-owners/bot/lib/review.ts +18 -17
  430. package/templates/agentic-owners/evals/owners.eval.ts +2 -2
  431. package/templates/agents-md/bot/lib/collect.ts +6 -6
  432. package/templates/agents-md/bot/lib/config.ts +1 -1
  433. package/templates/agents-md/bot/tools/apply_agents.ts +4 -4
  434. package/templates/code-wiki/bot/channels/github.ts +3 -3
  435. package/templates/code-wiki/bot/lib/repos.ts +1 -1
  436. package/templates/code-wiki/bot/tools/apply_wiki.ts +2 -2
  437. package/templates/demo/bot/lib/collect.ts +1 -1
  438. package/templates/demo/bot/lib/repos.ts +1 -1
  439. package/templates/demo/bot/tools/record_demo.ts +1 -1
  440. package/templates/pr-autofixer/bot/channels/github.ts +2 -2
  441. package/templates/pr-autofixer/bot/lib/merge-watch.ts +2 -2
  442. package/templates/pr-autofixer/bot/lib/repos.ts +2 -2
  443. package/templates/pr-autofixer/bot/lib/webhook-routing.ts +1 -1
  444. package/templates/security-help/bot/lib/repos.ts +1 -1
  445. package/templates/security-reviewer/bot/lib/repos.ts +1 -1
  446. package/templates/triage/bot/lib/actuate.ts +15 -15
  447. package/dist/docs/assets/chunks/@localSearchIndexroot.CtLtpWcx.js +0 -1
  448. package/dist/docs/assets/chunks/channel.CBwrU9rP.js +0 -1
  449. package/dist/docs/assets/chunks/classDiagram-6PBFFD2Q.CbC_mrvB.js +0 -1
  450. package/dist/docs/assets/chunks/classDiagram-v2-HSJHXN6E.CbC_mrvB.js +0 -1
  451. package/dist/docs/assets/chunks/clone.BTvFyY1a.js +0 -1
  452. package/dist/docs/assets/chunks/stateDiagram-v2-QKLJ7IA2.BYXl4LW6.js +0 -1
  453. package/dist/docs/assets/chunks/wardley-RL74JXVD.iXazD3Z7.js +0 -162
  454. package/dist/playground/assets/index-Clz6uHj9.css +0 -1
  455. /package/dist/docs/assets/{reference_connections.md.Bljpve-y.lean.js → reference_connections.md.DLrgAd5f.lean.js} +0 -0
  456. /package/dist/docs/assets/{reference_sessions.md.CM5zo3w4.lean.js → reference_sessions.md.CyM7ARz1.lean.js} +0 -0
  457. /package/dist/docs/assets/{reference_skills.md.ClkMoQsV.lean.js → reference_skills.md.C0guGcH0.lean.js} +0 -0
@@ -0,0 +1,387 @@
1
+ /**
2
+ * Transient retry for a read-effect tool call that already executed.
3
+ *
4
+ * Writes, unclassified tools, dry-run stubs, approval denials, and
5
+ * validation failures never reach this helper. Auth, elicitation, and a
6
+ * timeout that already ran long enough to repeat are not transient.
7
+ *
8
+ * Backoff is full jitter (base 500ms, cap 4s) and at most 10s asleep per
9
+ * call. An attempt that already ran longer than 15s is not retried, so
10
+ * one slow call plus the backoff budget stays under 30s. Sleep yields the
11
+ * event loop, so a timer can still fire during the wait.
12
+ */
13
+ import { metrics } from "@opentelemetry/api";
14
+ /** Total tries, including the first, for a read-effect call. */
15
+ export const TOOL_RETRY_DEFAULT_MAX_ATTEMPTS = 3;
16
+ export const TOOL_RETRY_BACKOFF_BASE_MS = 500;
17
+ export const TOOL_RETRY_BACKOFF_CAP_MS = 4_000;
18
+ /** Cumulative sleep per call. */
19
+ export const TOOL_RETRY_BACKOFF_BUDGET_MS = 10_000;
20
+ /**
21
+ * An attempt slower than this is not retried. Paired with the backoff
22
+ * budget, the extra wait stays under 30s.
23
+ */
24
+ export const TOOL_RETRY_MAX_ATTEMPT_MS = 15_000;
25
+ /** Quiet-stream limit the extra wait must stay under. */
26
+ export const TOOL_RETRY_STALL_FAIL_MS = 30_000;
27
+ const METRIC_NAME = "agent_sdk.tool.retry";
28
+ const TRANSIENT_CODES = new Set([
29
+ "ECONNRESET",
30
+ "ECONNREFUSED",
31
+ "EAI_AGAIN",
32
+ "EPIPE",
33
+ "ETIMEDOUT",
34
+ "UND_ERR_CONNECT_TIMEOUT",
35
+ "UND_ERR_SOCKET",
36
+ "UND_ERR_CLOSED",
37
+ ]);
38
+ const TRANSIENT_HTTP_STATUS = new Set([429, 502, 503, 504]);
39
+ const MAX_CAUSE_DEPTH = 8;
40
+ const ENDPOINT_DEADLINE = /tool call timed out after \d+\s*ms/i;
41
+ const TIMEOUT_WORD = /timed?\s*out|\btimeout\b/i;
42
+ const OVERSIZE = /too large|\boversize\b|payload exceeds|result exceeds/i;
43
+ const AUTH_TEXT = /needsauth|needs authorization|\belicitation\b|\bunauthorized\b/i;
44
+ const TRANSPORT_TEXT = /econnreset|econnrefused|socket hang up|fetch failed|eai_again|und_err_connect|und_err_socket|connection closed/i;
45
+ const HTTP_STATUS_TEXT = /\b(?:HTTP\s*)?(429|502|503|504)\b/i;
46
+ const MCP_TRANSIENT_TEXT = /rate limit|temporarily unavailable|(?<!do not )try again/i;
47
+ const RETRY_AFTER_TEXT = /retry-after[^\d]{0,16}(\d+(?:\.\d+)?)/i;
48
+ /**
49
+ * Vendor-reported MCP `isError` result. Distinct from a thrown transport
50
+ * failure so the classifier can require an explicit transient phrase.
51
+ */
52
+ export class McpToolError extends Error {
53
+ constructor(args) {
54
+ super(args.vendorMessage === ""
55
+ ? `${args.connection} tool ${args.toolName} failed`
56
+ : args.vendorMessage);
57
+ this.name = "McpToolError";
58
+ this.connection = args.connection;
59
+ this.toolName = args.toolName;
60
+ this.vendorMessage = args.vendorMessage;
61
+ }
62
+ }
63
+ let sleepImpl = defaultSleep;
64
+ let randomImpl = Math.random;
65
+ let meterOverride;
66
+ let counterCache;
67
+ /** @internal Test seam. `undefined` restores the real timer. */
68
+ export function setToolRetrySleepForTests(sleep) {
69
+ sleepImpl = sleep ?? defaultSleep;
70
+ }
71
+ /** @internal Test seam. `undefined` restores `Math.random`. */
72
+ export function setToolRetryRandomForTests(random) {
73
+ randomImpl = random ?? Math.random;
74
+ }
75
+ /** @internal Test seam. `undefined` restores the global meter. */
76
+ export function setToolRetryMeterForTests(meter) {
77
+ meterOverride = meter;
78
+ counterCache = undefined;
79
+ }
80
+ export function classifyToolFailure(error) {
81
+ return classifyAtDepth(error, 0);
82
+ }
83
+ /**
84
+ * Full-jitter delay for the backoff after `failedAttempt` (1 = first try
85
+ * failed). `Retry-After` replaces the jittered delay and is still capped.
86
+ * Returns `undefined` when the cumulative budget is already spent.
87
+ */
88
+ export function toolRetryBackoffMs(args) {
89
+ const remaining = TOOL_RETRY_BACKOFF_BUDGET_MS - args.spentMs;
90
+ if (remaining <= 0) {
91
+ return undefined;
92
+ }
93
+ const unit = Math.min(Math.max(args.random, 0), 1);
94
+ const exp = TOOL_RETRY_BACKOFF_BASE_MS * 2 ** Math.max(0, args.failedAttempt - 1);
95
+ const jittered = unit * Math.min(TOOL_RETRY_BACKOFF_CAP_MS, exp);
96
+ const chosen = args.retryAfterMs !== undefined && Number.isFinite(args.retryAfterMs) && args.retryAfterMs >= 0
97
+ ? args.retryAfterMs
98
+ : jittered;
99
+ return Math.min(chosen, TOOL_RETRY_BACKOFF_CAP_MS, remaining);
100
+ }
101
+ export async function retryReadOnlyToolCall(args) {
102
+ const maxAttempts = TOOL_RETRY_DEFAULT_MAX_ATTEMPTS;
103
+ const eligible = args.effect === "read";
104
+ if (!eligible) {
105
+ try {
106
+ return await args.execute();
107
+ }
108
+ catch (error) {
109
+ if (classifyToolFailure(error).transient) {
110
+ recordOutcome("not_eligible");
111
+ }
112
+ throw error;
113
+ }
114
+ }
115
+ const now = args.now ?? Date.now;
116
+ let spentMs = 0;
117
+ let lastError;
118
+ for (let attempt = 1; attempt <= maxAttempts; attempt++) {
119
+ throwIfAborted(args.signal);
120
+ const started = now();
121
+ try {
122
+ const result = await args.execute();
123
+ if (attempt > 1) {
124
+ recordOutcome("recovered");
125
+ }
126
+ return result;
127
+ }
128
+ catch (error) {
129
+ lastError = error;
130
+ if (args.signal?.aborted === true) {
131
+ throw abortError(args.signal);
132
+ }
133
+ const elapsed = now() - started;
134
+ const verdict = classifyToolFailure(error);
135
+ const slow = elapsed > TOOL_RETRY_MAX_ATTEMPT_MS;
136
+ const canRetry = verdict.transient && !slow && attempt < maxAttempts;
137
+ if (!canRetry) {
138
+ if (verdict.transient && (slow || attempt >= maxAttempts)) {
139
+ recordOutcome(attempt > 1 ? "exhausted" : "not_eligible");
140
+ }
141
+ else if (attempt > 1) {
142
+ recordOutcome("exhausted");
143
+ }
144
+ if (attempt > 1) {
145
+ throw exhaustedError(attempt, error);
146
+ }
147
+ throw error;
148
+ }
149
+ const delay = toolRetryBackoffMs({
150
+ failedAttempt: attempt,
151
+ random: randomImpl(),
152
+ retryAfterMs: verdict.retryAfterMs,
153
+ spentMs,
154
+ });
155
+ if (delay === undefined) {
156
+ recordOutcome("exhausted");
157
+ throw exhaustedError(attempt, error);
158
+ }
159
+ const notice = {
160
+ attempt: attempt + 1,
161
+ reason: verdict.reason,
162
+ backoffMs: delay,
163
+ ...(args.connection === undefined ? {} : { connection: args.connection }),
164
+ };
165
+ args.onRetry?.(notice);
166
+ await sleepImpl(delay, args.signal);
167
+ spentMs += delay;
168
+ throwIfAborted(args.signal);
169
+ }
170
+ }
171
+ recordOutcome("exhausted");
172
+ throw exhaustedError(maxAttempts, lastError);
173
+ }
174
+ function recordOutcome(outcome) {
175
+ const counter = retryCounter();
176
+ counter?.add(1, { outcome });
177
+ }
178
+ function retryCounter() {
179
+ if (counterCache !== undefined) {
180
+ return counterCache;
181
+ }
182
+ const meter = meterOverride ?? metrics.getMeter("@cursor/bdk");
183
+ counterCache = meter.createCounter(METRIC_NAME, {
184
+ description: "Read-only tool retries by outcome",
185
+ });
186
+ return counterCache;
187
+ }
188
+ function exhaustedError(attempts, error) {
189
+ const detail = error instanceof Error && error.message !== "" ? error.message : "unknown error";
190
+ const wrapped = new Error(`failed after ${attempts} attempts: ${detail}`);
191
+ wrapped.cause = error;
192
+ return wrapped;
193
+ }
194
+ function throwIfAborted(signal) {
195
+ if (signal?.aborted === true) {
196
+ throw abortError(signal);
197
+ }
198
+ }
199
+ function abortError(signal) {
200
+ const reason = signal?.reason;
201
+ if (reason instanceof Error) {
202
+ return reason;
203
+ }
204
+ const error = new Error("The turn was aborted.");
205
+ error.name = "AbortError";
206
+ return error;
207
+ }
208
+ function defaultSleep(ms, signal) {
209
+ if (ms <= 0) {
210
+ return Promise.resolve();
211
+ }
212
+ return new Promise((resolve, reject) => {
213
+ const timer = setTimeout(() => {
214
+ signal?.removeEventListener("abort", onAbort);
215
+ resolve();
216
+ }, ms);
217
+ const onAbort = () => {
218
+ clearTimeout(timer);
219
+ reject(abortError(signal));
220
+ };
221
+ if (signal?.aborted === true) {
222
+ clearTimeout(timer);
223
+ reject(abortError(signal));
224
+ return;
225
+ }
226
+ signal?.addEventListener("abort", onAbort, { once: true });
227
+ });
228
+ }
229
+ function classifyAtDepth(error, depth) {
230
+ if (depth >= MAX_CAUSE_DEPTH || !(error instanceof Error)) {
231
+ return { transient: false };
232
+ }
233
+ if (isVeto(error)) {
234
+ return { transient: false };
235
+ }
236
+ const status = httpStatus(error);
237
+ if (status !== undefined && status >= 400 && status <= 499 && status !== 429) {
238
+ return { transient: false };
239
+ }
240
+ const retryAfterMs = readRetryAfterMs(error);
241
+ if (status !== undefined && TRANSIENT_HTTP_STATUS.has(status)) {
242
+ return { transient: true, reason: httpReason(status), retryAfterMs };
243
+ }
244
+ const code = errorCode(error);
245
+ if (code !== undefined && TRANSIENT_CODES.has(code)) {
246
+ return { transient: true, reason: "transport", retryAfterMs };
247
+ }
248
+ if (code !== undefined && code.startsWith("UND_ERR_") && /CONNECT|SOCKET/.test(code)) {
249
+ return { transient: true, reason: "transport", retryAfterMs };
250
+ }
251
+ // A vendor isError string is not a transport failure. Only the MCP
252
+ // allowlist retries it.
253
+ if (error instanceof McpToolError) {
254
+ const vendor = classifyMcpVendorMessage(error.vendorMessage, retryAfterMs);
255
+ if (vendor !== undefined) {
256
+ return vendor;
257
+ }
258
+ return classifyAtDepth(error.cause, depth + 1);
259
+ }
260
+ if (TRANSPORT_TEXT.test(error.message)) {
261
+ return { transient: true, reason: "transport", retryAfterMs };
262
+ }
263
+ const fromText = error.message.match(HTTP_STATUS_TEXT);
264
+ if (fromText !== null) {
265
+ const parsed = Number(fromText[1]);
266
+ if (TRANSIENT_HTTP_STATUS.has(parsed)) {
267
+ return { transient: true, reason: httpReason(parsed), retryAfterMs };
268
+ }
269
+ }
270
+ if (error instanceof AggregateError) {
271
+ for (const inner of error.errors) {
272
+ const verdict = classifyAtDepth(inner, depth + 1);
273
+ if (verdict.transient) {
274
+ return verdict;
275
+ }
276
+ }
277
+ }
278
+ return classifyAtDepth(error.cause, depth + 1);
279
+ }
280
+ function classifyMcpVendorMessage(vendorMessage, retryAfterMs) {
281
+ if (MCP_TRANSIENT_TEXT.test(vendorMessage)) {
282
+ return { transient: true, reason: "mcp_transient", retryAfterMs };
283
+ }
284
+ const fromText = vendorMessage.match(HTTP_STATUS_TEXT);
285
+ if (fromText !== null) {
286
+ const parsed = Number(fromText[1]);
287
+ if (TRANSIENT_HTTP_STATUS.has(parsed)) {
288
+ return { transient: true, reason: httpReason(parsed), retryAfterMs };
289
+ }
290
+ }
291
+ return undefined;
292
+ }
293
+ function isVeto(error) {
294
+ if (error.name === "McpNeedsAuthError" || error.name === "UnauthorizedError") {
295
+ return true;
296
+ }
297
+ const text = `${error.name}\n${error.message}`;
298
+ if (AUTH_TEXT.test(text) || OVERSIZE.test(text) || ENDPOINT_DEADLINE.test(text)) {
299
+ return true;
300
+ }
301
+ const status = httpStatus(error);
302
+ if (status === 401 || status === 403 || status === 413) {
303
+ return true;
304
+ }
305
+ return timeoutLongerThanAttemptCap(text);
306
+ }
307
+ function timeoutLongerThanAttemptCap(text) {
308
+ if (!TIMEOUT_WORD.test(text)) {
309
+ return false;
310
+ }
311
+ for (const match of text.matchAll(/(\d+)\s*ms\b/gi)) {
312
+ if (Number(match[1]) > TOOL_RETRY_MAX_ATTEMPT_MS) {
313
+ return true;
314
+ }
315
+ }
316
+ for (const match of text.matchAll(/(\d+(?:\.\d+)?)\s*(?:seconds|\bsec\b|\bs\b)/gi)) {
317
+ if (Number(match[1]) * 1000 > TOOL_RETRY_MAX_ATTEMPT_MS) {
318
+ return true;
319
+ }
320
+ }
321
+ return false;
322
+ }
323
+ function httpReason(status) {
324
+ switch (status) {
325
+ case 429:
326
+ return "http_429";
327
+ case 502:
328
+ return "http_502";
329
+ case 504:
330
+ return "http_504";
331
+ default:
332
+ return "http_503";
333
+ }
334
+ }
335
+ function httpStatus(error) {
336
+ const record = error;
337
+ for (const value of [record.status, record.statusCode]) {
338
+ if (typeof value === "number" && Number.isInteger(value)) {
339
+ return value;
340
+ }
341
+ }
342
+ return undefined;
343
+ }
344
+ function errorCode(error) {
345
+ const code = error.code;
346
+ return typeof code === "string" && code.length > 0 ? code : undefined;
347
+ }
348
+ function readRetryAfterMs(error) {
349
+ const record = error;
350
+ const header = record.headers?.get?.("retry-after") ?? record.headers?.get?.("Retry-After");
351
+ const fromHeader = parseRetryAfter(header);
352
+ if (fromHeader !== undefined) {
353
+ return fromHeader;
354
+ }
355
+ if (typeof record.retryAfter === "number" && Number.isFinite(record.retryAfter)) {
356
+ return record.retryAfter * 1000;
357
+ }
358
+ if (typeof record.retryAfter === "string") {
359
+ const parsed = parseRetryAfter(record.retryAfter);
360
+ if (parsed !== undefined) {
361
+ return parsed;
362
+ }
363
+ }
364
+ const match = error.message.match(RETRY_AFTER_TEXT);
365
+ if (match !== null) {
366
+ return Number(match[1]) * 1000;
367
+ }
368
+ return undefined;
369
+ }
370
+ function parseRetryAfter(value) {
371
+ if (value === undefined || value === null) {
372
+ return undefined;
373
+ }
374
+ const trimmed = value.trim();
375
+ if (trimmed === "") {
376
+ return undefined;
377
+ }
378
+ const seconds = Number(trimmed);
379
+ if (Number.isFinite(seconds)) {
380
+ return Math.max(0, seconds * 1000);
381
+ }
382
+ const date = Date.parse(trimmed);
383
+ if (Number.isNaN(date)) {
384
+ return undefined;
385
+ }
386
+ return Math.max(0, date - Date.now());
387
+ }
@@ -38,8 +38,8 @@ export function toolCallErrorMessage(result) {
38
38
  return undefined;
39
39
  }
40
40
  const texts = result.content
41
- .filter(part => part.type === "text" && typeof part.text === "string")
42
- .map(part => part.text.trim())
43
- .filter(text => text !== "");
41
+ .filter((part) => part.type === "text" && typeof part.text === "string")
42
+ .map((part) => part.text.trim())
43
+ .filter((text) => text !== "");
44
44
  return texts.length === 0 ? undefined : texts.join("\n");
45
45
  }
@@ -93,7 +93,7 @@ export function buildTrajectory(events) {
93
93
  };
94
94
  pendingCalls.set(call.callId, entry);
95
95
  if (parentCallId !== undefined) {
96
- let sub = turn.subagents.find(s => s.callId === parentCallId);
96
+ let sub = turn.subagents.find((s) => s.callId === parentCallId);
97
97
  if (sub === undefined) {
98
98
  sub = { callId: parentCallId, toolCalls: [] };
99
99
  turn.subagents.push(sub);
@@ -144,7 +144,7 @@ export function buildTrajectory(events) {
144
144
  parentCallId: event.data.parentCallId,
145
145
  };
146
146
  if (event.data.parentCallId !== undefined) {
147
- let sub = turn.subagents.find(s => s.callId === event.data.parentCallId);
147
+ let sub = turn.subagents.find((s) => s.callId === event.data.parentCallId);
148
148
  if (sub === undefined) {
149
149
  sub = {
150
150
  callId: event.data.parentCallId,
@@ -163,7 +163,7 @@ export function buildTrajectory(events) {
163
163
  case "subagent.called": {
164
164
  if (event.turnId !== undefined) {
165
165
  const turn = ensureTurn(event.turnId);
166
- const existing = turn.subagents.find(s => s.callId === event.data.callId);
166
+ const existing = turn.subagents.find((s) => s.callId === event.data.callId);
167
167
  if (existing !== undefined) {
168
168
  existing.name = event.data.name;
169
169
  existing.description = event.data.description;
@@ -219,11 +219,11 @@ export function buildTrajectory(events) {
219
219
  break;
220
220
  }
221
221
  }
222
- const turns = turnOrder.map(id => turnsById.get(id));
223
- const turnsFailed = turns.filter(t => t.failed).length;
222
+ const turns = turnOrder.map((id) => turnsById.get(id));
223
+ const turnsFailed = turns.filter((t) => t.failed).length;
224
224
  const toolCallCount = turns.reduce((n, t) => n + t.toolCalls.length + t.subagents.reduce((m, s) => m + s.toolCalls.length, 0), 0);
225
- const lastGood = [...turns].reverse().find(t => t.assistantText !== "");
226
- const costedTurns = turns.filter(t => t.cost !== undefined);
225
+ const lastGood = [...turns].reverse().find((t) => t.assistantText !== "");
226
+ const costedTurns = turns.filter((t) => t.cost !== undefined);
227
227
  const totalCostUsd = costedTurns.length === 0
228
228
  ? undefined
229
229
  : roundCostUsd(costedTurns.reduce((sum, t) => sum + (t.cost?.totalUsd ?? 0), 0));
@@ -51,10 +51,10 @@ export class TurnGovernor {
51
51
  if (args.signal?.aborted === true) {
52
52
  return Promise.resolve(undefined);
53
53
  }
54
- return new Promise(resolve => {
54
+ return new Promise((resolve) => {
55
55
  const waiter = {
56
56
  sessionId: args.sessionId,
57
- grant: permit => resolve(permit),
57
+ grant: (permit) => resolve(permit),
58
58
  cancel: () => resolve(undefined),
59
59
  cleanup: () => {
60
60
  this.queuedSessions.delete(args.sessionId);
@@ -46,7 +46,7 @@ export class TurnOutbox {
46
46
  return [];
47
47
  }
48
48
  const items = [];
49
- for (const name of names.filter(n => n.endsWith(".json")).sort()) {
49
+ for (const name of names.filter((n) => n.endsWith(".json")).sort()) {
50
50
  const path = join(dir, name);
51
51
  try {
52
52
  const raw = await readFile(path, "utf8");
@@ -1 +1 @@
1
- {"version":3,"file":"update-check.d.ts","sourceRoot":"","sources":["../../src/internal/update-check.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"update-check.d.ts","sourceRoot":"","sources":["../../src/internal/update-check.ts"],"names":[],"mappings":"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"}
@@ -276,7 +276,9 @@ async function findDependingProjectDir(packageRoot, packageName) {
276
276
  if (parent === dir) {
277
277
  return undefined;
278
278
  }
279
- const inNodeModules = dir.split(sep).some(part => part === "node_modules" || part === ".pnpm");
279
+ const inNodeModules = dir
280
+ .split(sep)
281
+ .some((part) => part === "node_modules" || part === ".pnpm");
280
282
  if (!inNodeModules && (await declaresDependency(dir, packageName))) {
281
283
  return dir;
282
284
  }
@@ -392,7 +394,7 @@ function runUpdateCommand(command) {
392
394
  shell: process.platform === "win32",
393
395
  });
394
396
  child.on("error", reject);
395
- child.on("close", code => {
397
+ child.on("close", (code) => {
396
398
  resolve(code ?? 1);
397
399
  });
398
400
  });
@@ -14,7 +14,13 @@ export type AgentV2Hosting = {
14
14
  resolveStoreIds: () => CursorManagedV2StoreIds;
15
15
  } | {
16
16
  kind: "cursor-managed-persistent";
17
+ resolveStoreIds: () => CursorManagedV2StoreIds;
17
18
  };
19
+ /** Hosting whose framework session state is mirrored to the platform stores. */
20
+ export type CursorManagedV2Hosting = Extract<AgentV2Hosting, {
21
+ resolveStoreIds: () => CursorManagedV2StoreIds;
22
+ }>;
23
+ export declare function isCursorManagedV2Hosting(hosting: AgentV2Hosting): hosting is CursorManagedV2Hosting;
18
24
  /**
19
25
  * Close the architecture/hosting inputs into a compiler-owned union.
20
26
  *
@@ -1 +1 @@
1
- {"version":3,"file":"v2-hosting.d.ts","sourceRoot":"","sources":["../../src/internal/v2-hosting.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EACL,KAAK,uBAAuB,EAE7B,MAAM,kCAAkC,CAAC;AAG1C;;;GAGG;AACH,eAAO,MAAM,8BAA8B,2BAA2B,CAAC;AAEvE,MAAM,MAAM,cAAc,GACtB;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,GAClB;IAAE,IAAI,EAAE,aAAa,CAAA;CAAE,GACvB;IACE,IAAI,EAAE,gBAAgB,CAAC;IACvB,eAAe,EAAE,MAAM,uBAAuB,CAAC;CAChD,GACD;IACE,IAAI,EAAE,2BAA2B,CAAC;CACnC,CAAC;AAEN;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE;IAC3C,YAAY,EAAE,iBAAiB,GAAG,SAAS,CAAC;IAC5C,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;CACzB,GAAG,cAAc,CAejB"}
1
+ {"version":3,"file":"v2-hosting.d.ts","sourceRoot":"","sources":["../../src/internal/v2-hosting.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EACL,KAAK,uBAAuB,EAE7B,MAAM,kCAAkC,CAAC;AAG1C;;;GAGG;AACH,eAAO,MAAM,8BAA8B,2BAA2B,CAAC;AAEvE,MAAM,MAAM,cAAc,GACtB;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,GAClB;IAAE,IAAI,EAAE,aAAa,CAAA;CAAE,GACvB;IACE,IAAI,EAAE,gBAAgB,CAAC;IACvB,eAAe,EAAE,MAAM,uBAAuB,CAAC;CAChD,GACD;IACE,IAAI,EAAE,2BAA2B,CAAC;IAClC,eAAe,EAAE,MAAM,uBAAuB,CAAC;CAChD,CAAC;AAEN,gFAAgF;AAChF,MAAM,MAAM,sBAAsB,GAAG,OAAO,CAC1C,cAAc,EACd;IAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;CAAE,CACnD,CAAC;AAEF,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,cAAc,GACtB,OAAO,IAAI,sBAAsB,CAEnC;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE;IAC3C,YAAY,EAAE,iBAAiB,GAAG,SAAS,CAAC;IAC5C,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;CACzB,GAAG,cAAc,CAkBjB"}
@@ -5,6 +5,9 @@ import { AGENT_SERVE_GENERATION_ENV_VAR } from "./cursor-relay-core.js";
5
5
  * runtime the host provides a durable state directory.
6
6
  */
7
7
  export const AGENT_SERVE_PERSISTENT_ENV_VAR = "AGENT_SERVE_PERSISTENT";
8
+ export function isCursorManagedV2Hosting(hosting) {
9
+ return hosting.kind === "cursor-managed" || hosting.kind === "cursor-managed-persistent";
10
+ }
8
11
  /**
9
12
  * Close the architecture/hosting inputs into a compiler-owned union.
10
13
  *
@@ -20,7 +23,10 @@ export function resolveAgentV2Hosting(input) {
20
23
  return { kind: "self-hosted" };
21
24
  }
22
25
  if (env[AGENT_SERVE_PERSISTENT_ENV_VAR] === "1") {
23
- return { kind: "cursor-managed-persistent" };
26
+ return {
27
+ kind: "cursor-managed-persistent",
28
+ resolveStoreIds: () => requireCursorManagedV2StoreIdsSync(env),
29
+ };
24
30
  }
25
31
  return {
26
32
  kind: "cursor-managed",
@@ -47,7 +47,7 @@ export function buildCloudWorkspaceSection(dir) {
47
47
  * path is replaced on each send and removed when a task session ends.
48
48
  */
49
49
  export function buildCloudSessionWorkspaceSection(dir, relPaths) {
50
- const listed = relPaths.map(path => `\`${path}\``).join(", ");
50
+ const listed = relPaths.map((path) => `\`${path}\``).join(", ");
51
51
  return [
52
52
  "## Session workspace files",
53
53
  "",
@@ -102,7 +102,7 @@ export function withIdentityPreamble(name, instructions) {
102
102
  * Local workspaces omit bodies because the files already exist on disk.
103
103
  */
104
104
  export function buildAgentToolsCatalog(tools, options = { includeScripts: false }) {
105
- const agentTools = tools.filter(tool => tool.execution === "agent");
105
+ const agentTools = tools.filter((tool) => tool.execution === "agent");
106
106
  if (agentTools.length === 0) {
107
107
  return "";
108
108
  }
@@ -156,7 +156,7 @@ export function buildAgentToolsCatalog(tools, options = { includeScripts: false
156
156
  * a host tool and the host-side marker never appears.
157
157
  */
158
158
  export function buildServerToolsCatalog(tools, options) {
159
- const serverTools = tools.filter(tool => tool.execution === "server");
159
+ const serverTools = tools.filter((tool) => tool.execution === "server");
160
160
  if (serverTools.length === 0) {
161
161
  return "";
162
162
  }
@@ -210,7 +210,7 @@ export function buildAgentsMdContent(agent, options) {
210
210
  includeScripts: options.includeScripts,
211
211
  }),
212
212
  ]
213
- .filter(part => part !== "")
213
+ .filter((part) => part !== "")
214
214
  .join("\n\n");
215
215
  }
216
216
  /**
@@ -58,7 +58,7 @@ export function createMemoryKv() {
58
58
  return { ok: true, version };
59
59
  },
60
60
  async listKeys(prefix) {
61
- return [...entries.keys()].filter(key => key.startsWith(prefix)).sort();
61
+ return [...entries.keys()].filter((key) => key.startsWith(prefix)).sort();
62
62
  },
63
63
  };
64
64
  }
@@ -72,9 +72,9 @@ export function createMemoryKv() {
72
72
  export function memoryCasTable() {
73
73
  const kv = createMemoryKv();
74
74
  return {
75
- getWithVersion: key => kv.getWithVersion(key),
75
+ getWithVersion: (key) => kv.getWithVersion(key),
76
76
  putIfAbsent: (key, value) => kv.putIfAbsent(key, value),
77
77
  putIfVersion: (key, value, expectedVersion) => kv.putIfVersion(key, value, expectedVersion),
78
- listKeys: prefix => kv.listKeys(prefix),
78
+ listKeys: (prefix) => kv.listKeys(prefix),
79
79
  };
80
80
  }