@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,57 @@
1
+ /**
2
+ * Mirror a persistent slot's `/state/logs` directory onto the framework store.
3
+ *
4
+ * One loop for every file in the folder. A file whose size and mtime match
5
+ * the last upload is left alone, including the read. Anything else is read
6
+ * from its tail, masked, and written over the same key. Store keys whose
7
+ * files are gone are deleted. The timer lives on the serve process, because
8
+ * a persistent VM stays up between turns. Freeze pods do not enter this path.
9
+ */
10
+ import type { FileSink } from "../files.js";
11
+ import type { AgentProject } from "../types.js";
12
+ /** How often the resident process snapshots the directory. */
13
+ export declare const PERSISTENT_STAGE_LOG_SYNC_INTERVAL_MS = 30000;
14
+ /**
15
+ * Basenames written by the persistent stage logger: timestamp, optional generation, stage.
16
+ * Rejects paths, so a listing cannot escape the directory.
17
+ */
18
+ export declare const PERSISTENT_STAGE_LOG_FILE_NAME: RegExp;
19
+ export interface PersistentStageLogMirror {
20
+ logsDir: string;
21
+ sink: FileSink;
22
+ agentName: string;
23
+ logger: (line: string) => void;
24
+ }
25
+ export declare function selectPersistentStageLogMirror(input: {
26
+ project: AgentProject;
27
+ logsDir: string;
28
+ logger?: (line: string) => void;
29
+ env?: Record<string, string | undefined>;
30
+ }): PersistentStageLogMirror | undefined;
31
+ /**
32
+ * Start the directory sync and return a stop that flushes once more. The
33
+ * interval does not keep the process alive on its own. A tick that lands
34
+ * while a sync is running is dropped; stop still runs one more after it.
35
+ */
36
+ export declare function startPersistentStageLogMirror(mirror: PersistentStageLogMirror, options?: {
37
+ intervalMs?: number;
38
+ }): {
39
+ stop: () => Promise<void>;
40
+ };
41
+ /**
42
+ * Upload changed files under `persistent-stage-logs/`, then drop keys for files that are
43
+ * no longer in the directory. A missing directory is a no-op, so a tick before
44
+ * the first stage command does not sweep a previous snapshot.
45
+ */
46
+ export declare function syncPersistentStageLogDirectory(args: {
47
+ dir: string;
48
+ sink: FileSink;
49
+ agentName: string;
50
+ uploaded: Map<string, {
51
+ size: number;
52
+ mtimeMs: number;
53
+ }>;
54
+ maxBytes?: number;
55
+ logger?: (line: string) => void;
56
+ }): Promise<void>;
57
+ //# sourceMappingURL=persistent-stage-log-mirror.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"persistent-stage-log-mirror.d.ts","sourceRoot":"","sources":["../../src/internal/persistent-stage-log-mirror.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAG5C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAMhD,8DAA8D;AAC9D,eAAO,MAAM,qCAAqC,QAAS,CAAC;AAE5D;;;GAGG;AACH,eAAO,MAAM,8BAA8B,EAAE,MAAkD,CAAC;AAEhG,MAAM,WAAW,wBAAwB;IACvC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,QAAQ,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAChC;AAED,wBAAgB,8BAA8B,CAAC,KAAK,EAAE;IACpD,OAAO,EAAE,YAAY,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;CAC1C,GAAG,wBAAwB,GAAG,SAAS,CAiBvC;AAED;;;;GAIG;AACH,wBAAgB,6BAA6B,CAC3C,MAAM,EAAE,wBAAwB,EAChC,OAAO,CAAC,EAAE;IAAE,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,GAChC;IAAE,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CAAE,CAgD/B;AAED;;;;GAIG;AACH,wBAAsB,+BAA+B,CAAC,IAAI,EAAE;IAC1D,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,QAAQ,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACzD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACjC,GAAG,OAAO,CAAC,IAAI,CAAC,CAuFhB"}
@@ -0,0 +1,231 @@
1
+ /**
2
+ * Mirror a persistent slot's `/state/logs` directory onto the framework store.
3
+ *
4
+ * One loop for every file in the folder. A file whose size and mtime match
5
+ * the last upload is left alone, including the read. Anything else is read
6
+ * from its tail, masked, and written over the same key. Store keys whose
7
+ * files are gone are deleted. The timer lives on the serve process, because
8
+ * a persistent VM stays up between turns. Freeze pods do not enter this path.
9
+ */
10
+ import { open, readdir, stat } from "node:fs/promises";
11
+ import { join } from "node:path";
12
+ import { cursorHostedFiles } from "../files-backends/cursor-hosted.js";
13
+ import { agentSdkStorageKeys } from "../storage-protocol.js";
14
+ import { resolveApiKeySync } from "./cursor/credentials.js";
15
+ import { describeError } from "./describe-error.js";
16
+ import { maskStartLogTokens, START_LOG_STORE_MAX_BYTES } from "./start-log-store.js";
17
+ import { resolveAgentV2Hosting } from "./v2-hosting.js";
18
+ /** How often the resident process snapshots the directory. */
19
+ export const PERSISTENT_STAGE_LOG_SYNC_INTERVAL_MS = 30_000;
20
+ /**
21
+ * Basenames written by the persistent stage logger: timestamp, optional generation, stage.
22
+ * Rejects paths, so a listing cannot escape the directory.
23
+ */
24
+ export const PERSISTENT_STAGE_LOG_FILE_NAME = /^[A-Za-z0-9][A-Za-z0-9._-]{0,180}\.log$/;
25
+ export function selectPersistentStageLogMirror(input) {
26
+ const hosting = resolveAgentV2Hosting({
27
+ architecture: input.project.agent.architecture,
28
+ env: input.env,
29
+ });
30
+ if (hosting.kind !== "cursor-managed-persistent") {
31
+ return undefined;
32
+ }
33
+ return {
34
+ logsDir: input.logsDir,
35
+ sink: cursorHostedFiles({
36
+ resolveStoreSourceId: () => hosting.resolveStoreIds().frameworkStoreSourceId,
37
+ resolveApiKey: () => resolveApiKeySync()?.apiKey,
38
+ }),
39
+ agentName: input.project.name,
40
+ logger: input.logger ?? (() => { }),
41
+ };
42
+ }
43
+ /**
44
+ * Start the directory sync and return a stop that flushes once more. The
45
+ * interval does not keep the process alive on its own. A tick that lands
46
+ * while a sync is running is dropped; stop still runs one more after it.
47
+ */
48
+ export function startPersistentStageLogMirror(mirror, options) {
49
+ const uploaded = new Map();
50
+ let stopped = false;
51
+ let syncing = false;
52
+ let chain = Promise.resolve();
53
+ const syncOnce = () => {
54
+ chain = chain
55
+ .then(() => syncPersistentStageLogDirectory({
56
+ dir: mirror.logsDir,
57
+ sink: mirror.sink,
58
+ agentName: mirror.agentName,
59
+ uploaded,
60
+ logger: mirror.logger,
61
+ }))
62
+ .catch((error) => {
63
+ mirror.logger(`[bdk] persistent-stage-logs: sync failed (${describeError(error)})`);
64
+ });
65
+ return chain;
66
+ };
67
+ const timer = setInterval(() => {
68
+ if (stopped || syncing) {
69
+ return;
70
+ }
71
+ syncing = true;
72
+ void syncOnce().finally(() => {
73
+ syncing = false;
74
+ });
75
+ }, options?.intervalMs ?? PERSISTENT_STAGE_LOG_SYNC_INTERVAL_MS);
76
+ timer.unref();
77
+ syncing = true;
78
+ void syncOnce().finally(() => {
79
+ syncing = false;
80
+ });
81
+ return {
82
+ stop: () => {
83
+ if (stopped) {
84
+ return chain;
85
+ }
86
+ stopped = true;
87
+ clearInterval(timer);
88
+ return syncOnce();
89
+ },
90
+ };
91
+ }
92
+ /**
93
+ * Upload changed files under `persistent-stage-logs/`, then drop keys for files that are
94
+ * no longer in the directory. A missing directory is a no-op, so a tick before
95
+ * the first stage command does not sweep a previous snapshot.
96
+ */
97
+ export async function syncPersistentStageLogDirectory(args) {
98
+ const logger = args.logger ?? (() => { });
99
+ const maxBytes = args.maxBytes ?? START_LOG_STORE_MAX_BYTES;
100
+ let entries;
101
+ try {
102
+ entries = await readdir(args.dir, { withFileTypes: true });
103
+ }
104
+ catch (error) {
105
+ if (isEnoent(error)) {
106
+ return;
107
+ }
108
+ logger(`[bdk] persistent-stage-logs: read dir failed (${describeError(error)})`);
109
+ return;
110
+ }
111
+ const desired = new Set();
112
+ const names = entries
113
+ .filter((entry) => entry.isFile() && PERSISTENT_STAGE_LOG_FILE_NAME.test(entry.name))
114
+ .map((entry) => entry.name)
115
+ .sort();
116
+ for (const name of names) {
117
+ const path = join(args.dir, name);
118
+ let fileStat;
119
+ try {
120
+ fileStat = await stat(path);
121
+ }
122
+ catch (error) {
123
+ if (isEnoent(error)) {
124
+ continue;
125
+ }
126
+ // Keep the previous snapshot when this tick cannot see the file.
127
+ logger(`[bdk] persistent-stage-logs: read failed for ${name} (${describeError(error)})`);
128
+ desired.add(name);
129
+ continue;
130
+ }
131
+ if (fileStat.size === 0) {
132
+ continue;
133
+ }
134
+ const previous = args.uploaded.get(name);
135
+ if (previous?.size === fileStat.size && previous.mtimeMs === fileStat.mtimeMs) {
136
+ desired.add(name);
137
+ continue;
138
+ }
139
+ let raw;
140
+ try {
141
+ raw = await readLogTail(path, fileStat.size, maxBytes);
142
+ }
143
+ catch (error) {
144
+ if (isEnoent(error)) {
145
+ continue;
146
+ }
147
+ logger(`[bdk] persistent-stage-logs: read failed for ${name} (${describeError(error)})`);
148
+ desired.add(name);
149
+ continue;
150
+ }
151
+ if (raw.length === 0) {
152
+ desired.add(name);
153
+ continue;
154
+ }
155
+ const body = maskStartLogTokens(raw);
156
+ desired.add(name);
157
+ const key = agentSdkStorageKeys.persistentStageLog(args.agentName, name);
158
+ try {
159
+ await args.sink.put(key, new TextEncoder().encode(body));
160
+ args.uploaded.set(name, { size: fileStat.size, mtimeMs: fileStat.mtimeMs });
161
+ }
162
+ catch (error) {
163
+ logger(`[bdk] persistent-stage-logs: persist failed for ${name} (${describeError(error)})`);
164
+ }
165
+ }
166
+ const prefix = agentSdkStorageKeys.persistentStageLogsPrefix(args.agentName);
167
+ let listed;
168
+ try {
169
+ listed = await args.sink.list(prefix);
170
+ }
171
+ catch (error) {
172
+ logger(`[bdk] persistent-stage-logs: list failed (${describeError(error)})`);
173
+ return;
174
+ }
175
+ for (const item of listed) {
176
+ const name = fileNameFromPersistentStageLogKey(item.key, prefix);
177
+ if (name === undefined || desired.has(name)) {
178
+ continue;
179
+ }
180
+ try {
181
+ await args.sink.delete(item.key);
182
+ args.uploaded.delete(name);
183
+ }
184
+ catch (error) {
185
+ logger(`[bdk] persistent-stage-logs: delete failed for ${name} (${describeError(error)})`);
186
+ }
187
+ }
188
+ }
189
+ /** Read the last `maxBytes` of a file without loading the rest of it. */
190
+ async function readLogTail(path, size, maxBytes) {
191
+ const length = Math.min(size, maxBytes);
192
+ const position = size - length;
193
+ const handle = await open(path, "r");
194
+ try {
195
+ const buffer = Buffer.alloc(length);
196
+ let offset = 0;
197
+ while (offset < length) {
198
+ const { bytesRead } = await handle.read(buffer, offset, length - offset, position + offset);
199
+ if (bytesRead === 0) {
200
+ break;
201
+ }
202
+ offset += bytesRead;
203
+ }
204
+ return new TextDecoder().decode(buffer.subarray(0, offset));
205
+ }
206
+ finally {
207
+ await handle.close();
208
+ }
209
+ }
210
+ function fileNameFromPersistentStageLogKey(key, prefix) {
211
+ if (!key.startsWith(prefix)) {
212
+ return undefined;
213
+ }
214
+ const segment = key.slice(prefix.length);
215
+ if (segment.length === 0 || segment.includes("/")) {
216
+ return undefined;
217
+ }
218
+ try {
219
+ const name = decodeURIComponent(segment);
220
+ return PERSISTENT_STAGE_LOG_FILE_NAME.test(name) ? name : undefined;
221
+ }
222
+ catch {
223
+ return undefined;
224
+ }
225
+ }
226
+ function isEnoent(error) {
227
+ return (error !== null &&
228
+ typeof error === "object" &&
229
+ "code" in error &&
230
+ error.code === "ENOENT");
231
+ }
@@ -8,7 +8,7 @@ import { dirname } from "node:path";
8
8
  export const PLATFORM_SCHEDULE_CATALOG_FILENAME = "platform-schedule-names.json";
9
9
  export async function syncHostedPlatformSchedules(args) {
10
10
  const previous = await readScheduleCatalog(args.catalogPath);
11
- const currentNames = args.schedules.map(schedule => schedule.name);
11
+ const currentNames = args.schedules.map((schedule) => schedule.name);
12
12
  const currentSet = new Set(currentNames);
13
13
  const failedDeletes = [];
14
14
  for (const name of previous) {
@@ -110,7 +110,7 @@ const AGENTSDK_REMINDERS_PREFIX = "/internal/agentsdk";
110
110
  const APPLY_REMINDER_OUTCOME_MAX_ATTEMPTS = 3;
111
111
  const APPLY_REMINDER_OUTCOME_RETRY_DELAY_MS = 50;
112
112
  async function sleepMs(ms) {
113
- await new Promise(resolve => setTimeout(resolve, ms));
113
+ await new Promise((resolve) => setTimeout(resolve, ms));
114
114
  }
115
115
  async function withBoundedApplyRetries(run) {
116
116
  let lastError;
@@ -92,7 +92,7 @@ export function renderAgentsIndexHtml(agents, options = {}) {
92
92
  const docs = options.docs !== false;
93
93
  const multi = options.multi === true;
94
94
  const cards = agents
95
- .map(agent => {
95
+ .map((agent) => {
96
96
  const playground = agent.slug === "" ? "/playground" : `/${agent.slug}/playground`;
97
97
  const slugLabel = agent.slug === "" ? "/" : `/${agent.slug}`;
98
98
  const meta = `${agent.model || "—"} · ${agent.tools} tool${agent.tools === 1 ? "" : "s"} · ${agent.channels} channel${agent.channels === 1 ? "" : "s"}`;
@@ -104,7 +104,7 @@ export function renderAgentsIndexHtml(agents, options = {}) {
104
104
  })
105
105
  .join("\n");
106
106
  const routes = hostRouteRows(agents, docs, multi)
107
- .map(row => ` <tr><td><a href="${escapeHtml(row.href)}"><code>${escapeHtml(row.path)}</code></a></td><td>${escapeHtml(row.blurb)}</td></tr>`)
107
+ .map((row) => ` <tr><td><a href="${escapeHtml(row.href)}"><code>${escapeHtml(row.path)}</code></a></td><td>${escapeHtml(row.blurb)}</td></tr>`)
108
108
  .join("\n");
109
109
  return HOST_HOME_TEMPLATE.replace("<!--CARDS-->", cards || ' <div class="card-meta">No agents mounted.</div>')
110
110
  .replace("<!--COUNT-->", String(agents.length))
@@ -167,7 +167,7 @@ export function startPlaygroundDevServer(options) {
167
167
  }
168
168
  });
169
169
  let stopped = false;
170
- child.on("error", err => {
170
+ child.on("error", (err) => {
171
171
  if (stopped) {
172
172
  return;
173
173
  }
@@ -206,7 +206,7 @@ function spawnVite(toolchain, args, options) {
206
206
  stdio: "inherit",
207
207
  });
208
208
  child.on("error", reject);
209
- child.on("exit", code => {
209
+ child.on("exit", (code) => {
210
210
  resolve(code ?? 1);
211
211
  });
212
212
  });
@@ -134,7 +134,7 @@ export async function startPlaygroundProxy(args) {
134
134
  // Drop keep-alive / streamed playground connections so Ctrl-C
135
135
  // does not hang waiting for active sockets.
136
136
  server.closeAllConnections();
137
- server.close(error => {
137
+ server.close((error) => {
138
138
  if (error) {
139
139
  reject(error);
140
140
  return;
@@ -355,7 +355,7 @@ async function forwardOnce(args) {
355
355
  headers: outboundHeaders,
356
356
  };
357
357
  return await new Promise((resolve, reject) => {
358
- const upstreamReq = requestFn(options, upstreamRes => {
358
+ const upstreamReq = requestFn(options, (upstreamRes) => {
359
359
  const status = upstreamRes.statusCode ?? 502;
360
360
  if (status === 401 && args.deferWriteOnUnauthorized) {
361
361
  // Drain so the socket can be reused; caller will refresh + retry.
@@ -380,7 +380,7 @@ async function forwardOnce(args) {
380
380
  resolve(status);
381
381
  });
382
382
  });
383
- upstreamReq.on("error", error => {
383
+ upstreamReq.on("error", (error) => {
384
384
  reject(error);
385
385
  });
386
386
  res.on("close", () => {
@@ -115,7 +115,7 @@ export function buildDatadogGaugeSeries(args) {
115
115
  value: args.eventLog.residentSessions,
116
116
  },
117
117
  ];
118
- return points.map(point => ({
118
+ return points.map((point) => ({
119
119
  metric: point.name,
120
120
  type: "gauge",
121
121
  points: [[args.timestampSec, point.value]],
@@ -137,7 +137,7 @@ export declare class ReminderRunner {
137
137
  continuationToken?: string;
138
138
  }): Promise<ReminderInfo[]>;
139
139
  cancel(id: string, reason?: string): Promise<ReminderInfo | undefined>;
140
- /** Cancel all armed reminders matching a continuation token (e.g. PR closed). */
140
+ /** Cancel armed and firing reminders for one continuation. */
141
141
  cancelForContinuation(continuationToken: string, reason: string): Promise<number>;
142
142
  /**
143
143
  * Re-key armed reminders when a channel rotates a session's continuation
@@ -1 +1 @@
1
- {"version":3,"file":"reminder-runner.d.ts","sourceRoot":"","sources":["../../src/internal/reminder-runner.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"reminder-runner.d.ts","sourceRoot":"","sources":["../../src/internal/reminder-runner.ts"],"names":[],"mappings":"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"}
@@ -234,7 +234,7 @@ export class ReminderRunner {
234
234
  if (this.platformTimers !== undefined) {
235
235
  return;
236
236
  }
237
- const armed = [...this.records.values()].filter(r => r.status === "armed");
237
+ const armed = [...this.records.values()].filter((r) => r.status === "armed");
238
238
  let restored = 0;
239
239
  let disarmedOrphan = 0;
240
240
  for (const record of armed) {
@@ -476,7 +476,7 @@ export class ReminderRunner {
476
476
  async list(filter) {
477
477
  const all = await this.recordsForList(filter);
478
478
  return all
479
- .filter(r => {
479
+ .filter((r) => {
480
480
  if (filter?.status !== undefined) {
481
481
  const publicStatus = r.status === "firing" ? "armed" : r.status;
482
482
  if (publicStatus !== filter.status) {
@@ -492,7 +492,7 @@ export class ReminderRunner {
492
492
  }
493
493
  return true;
494
494
  })
495
- .map(r => {
495
+ .map((r) => {
496
496
  const live = this.handlers.get(r.id);
497
497
  const info = toInfo(r);
498
498
  if (live === undefined)
@@ -535,17 +535,15 @@ export class ReminderRunner {
535
535
  this.handlers.delete(id);
536
536
  return toInfo(updated);
537
537
  }
538
- /** Cancel all armed reminders matching a continuation token (e.g. PR closed). */
538
+ /** Cancel armed and firing reminders for one continuation. */
539
539
  async cancelForContinuation(continuationToken, reason) {
540
- const armed = (await this.allRecords()).filter(r => r.status === "armed");
541
- let n = 0;
542
- for (const record of armed) {
543
- if (record.continuationToken === continuationToken) {
544
- await this.cancel(record.id, reason);
545
- n += 1;
546
- }
547
- }
548
- return n;
540
+ const records = this.usesControlPlaneProtocol
541
+ ? await this.recordsForList({ continuationToken })
542
+ : await this.allRecords();
543
+ const live = records.filter((record) => (record.status === "armed" || record.status === "firing") &&
544
+ record.continuationToken === continuationToken);
545
+ await Promise.all(live.map((record) => this.cancel(record.id, reason)));
546
+ return live.length;
549
547
  }
550
548
  /**
551
549
  * Re-key armed reminders when a channel rotates a session's continuation
@@ -557,7 +555,7 @@ export class ReminderRunner {
557
555
  if (this.usesControlPlaneProtocol) {
558
556
  return this.controlPlane.rekeyReminders(channelId, oldToken, newToken);
559
557
  }
560
- const armed = (await this.allRecords()).filter(r => r.status === "armed" || r.status === "firing");
558
+ const armed = (await this.allRecords()).filter((r) => r.status === "armed" || r.status === "firing");
561
559
  let n = 0;
562
560
  for (const record of armed) {
563
561
  if (record.channelId !== channelId || record.continuationToken !== oldToken) {
@@ -577,7 +575,7 @@ export class ReminderRunner {
577
575
  async dispatch(reminderId, opts = {}) {
578
576
  const record = await this.getRecord(reminderId);
579
577
  if (record === undefined) {
580
- const ids = (await this.allRecords()).map(r => r.id);
578
+ const ids = (await this.allRecords()).map((r) => r.id);
581
579
  throw new UnknownReminderError(reminderId, ids);
582
580
  }
583
581
  if (opts.expectedFireCount !== undefined && record.fireCount !== opts.expectedFireCount) {
@@ -1026,7 +1024,7 @@ export class ReminderRunner {
1026
1024
  }
1027
1025
  const identity = channelId === HTTP_CHANNEL_ID
1028
1026
  ? httpContinuationIdentity(project.httpChannel)
1029
- : channelContinuationIdentity(project.channels.find(channel => channel.id === channelId)?.definition);
1027
+ : channelContinuationIdentity(project.channels.find((channel) => channel.id === channelId)?.definition);
1030
1028
  return continuationSource(identity) === "control-plane";
1031
1029
  }
1032
1030
  /**
@@ -61,7 +61,7 @@ export class ReminderStore {
61
61
  async listArmed() {
62
62
  const all = await this.list();
63
63
  // Treat in-flight claims as still armed for restart / listing purposes.
64
- return all.filter(r => r.status === "armed" || r.status === "firing");
64
+ return all.filter((r) => r.status === "armed" || r.status === "firing");
65
65
  }
66
66
  async get(id) {
67
67
  try {
@@ -20,13 +20,13 @@ export function validateMountConnectionsConfig(args) {
20
20
  return;
21
21
  }
22
22
  const label = args.slug === "" ? args.project.name : args.slug;
23
- const hostConnectionNames = new Set((args.project.agent.hostConnections ?? []).map(connection => connection.name));
24
- const filteredRefs = args.accountRefs.filter(ref => ref.servers !== undefined && !hostConnectionNames.has(ref.name));
23
+ const hostConnectionNames = new Set((args.project.agent.hostConnections ?? []).map((connection) => connection.name));
24
+ const filteredRefs = args.accountRefs.filter((ref) => ref.servers !== undefined && !hostConnectionNames.has(ref.name));
25
25
  if (filteredRefs.length === 0) {
26
26
  return;
27
27
  }
28
28
  throw new Error(`[bdk] agent "${label}" has Cursor account MCP connections with \`servers\` filters (${filteredRefs
29
- .map(ref => ref.name)
29
+ .map((ref) => ref.name)
30
30
  .join(", ")}) but no --public-url; cloud-runtime turns cannot honor those filters without a public bridge URL. Set --public-url or remove the \`servers\` filter.`);
31
31
  }
32
32
  /** Fail closed when a cloud turn cannot honor a `servers` filter. */
@@ -34,14 +34,14 @@ export function assertCloudCanHonorAccountServersFilters(args) {
34
34
  if (args.runtime !== "cloud") {
35
35
  return;
36
36
  }
37
- const blocked = args.resolvedConnections.filter(connection => connection.accountServersFilter !== undefined &&
37
+ const blocked = args.resolvedConnections.filter((connection) => connection.accountServersFilter !== undefined &&
38
38
  connection.cloudUrl === undefined &&
39
39
  args.bridgedNames?.has(connection.name) !== true);
40
40
  if (blocked.length === 0) {
41
41
  return;
42
42
  }
43
43
  throw new Error(`[bdk] cloud turn cannot honor Cursor account \`servers\` filters (${blocked
44
- .map(connection => connection.name)
44
+ .map((connection) => connection.name)
45
45
  .join(", ")}) without --public-url; set --public-url so cloud turns reach the filtered account bridge instead of falling back to native connectors.`);
46
46
  }
47
47
  /** Fail closed when anonymous HTTP admission would expose account connectors. */
@@ -61,8 +61,8 @@ export function resolveMountConnections(args) {
61
61
  const resolved = [];
62
62
  if (cloudCapable) {
63
63
  const hostOauthNames = agent.connections
64
- .filter(connection => isHostOauthConnectionTransport(connection.transport))
65
- .map(connection => connection.name);
64
+ .filter((connection) => isHostOauthConnectionTransport(connection.transport))
65
+ .map((connection) => connection.name);
66
66
  if (hostOauthNames.length > 0) {
67
67
  args.logger(args.cloudToolsBridge === true
68
68
  ? `[bdk] agent "${label}": host-OAuth MCP connections (${hostOauthNames.join(", ")}) reach cloud turns through the host connection bridge; their tokens stay on this serve host.`
@@ -79,7 +79,7 @@ export function resolveMountConnections(args) {
79
79
  resolved.push(...peers);
80
80
  if (cloudCapable && args.publicUrl === undefined) {
81
81
  args.logger(`[bdk] warning: agent "${label}" has peer MCP connections (${peers
82
- .map(peer => peer.name)
82
+ .map((peer) => peer.name)
83
83
  .join(", ")}) but no --public-url; cloud-runtime turns cannot reach this host's loopback address, so peers are omitted from cloud turns.`);
84
84
  }
85
85
  }
@@ -41,19 +41,19 @@ export class Router {
41
41
  }
42
42
  }
43
43
  function compilePattern(pattern) {
44
- const segments = splitPath(pattern).map(part => part.startsWith(":")
44
+ const segments = splitPath(pattern).map((part) => part.startsWith(":")
45
45
  ? { kind: "param", name: part.slice(1) }
46
46
  : part.startsWith("*")
47
47
  ? { kind: "rest", name: part.slice(1) }
48
48
  : { kind: "literal", value: part });
49
- const restIndex = segments.findIndex(segment => segment.kind === "rest");
49
+ const restIndex = segments.findIndex((segment) => segment.kind === "rest");
50
50
  if (restIndex !== -1 && restIndex !== segments.length - 1) {
51
51
  throw new Error(`Route pattern "${pattern}" may only use a catch-all (*name) as the last segment.`);
52
52
  }
53
53
  return segments;
54
54
  }
55
55
  function splitPath(path) {
56
- return path.split("/").filter(part => part !== "");
56
+ return path.split("/").filter((part) => part !== "");
57
57
  }
58
58
  function matchSegments(segments, pathSegments) {
59
59
  const last = segments[segments.length - 1];
@@ -86,7 +86,7 @@ function matchSegments(segments, pathSegments) {
86
86
  if (hasRest) {
87
87
  params[last.name] = pathSegments
88
88
  .slice(fixedCount)
89
- .map(value => decodeURIComponent(value))
89
+ .map((value) => decodeURIComponent(value))
90
90
  .join("/");
91
91
  }
92
92
  return params;
@@ -134,8 +134,8 @@ async function runOneTurn(args) {
134
134
  signal: args.signal,
135
135
  onEvent: args.onEvent,
136
136
  });
137
- const turnFailed = events.some(e => e.type === "turn.failed");
138
- const sessionFailed = events.some(e => e.type === "session.failed");
137
+ const turnFailed = events.some((e) => e.type === "turn.failed");
138
+ const sessionFailed = events.some((e) => e.type === "session.failed");
139
139
  return {
140
140
  sessionId,
141
141
  ...(continuationToken === undefined ? {} : { continuationToken }),
@@ -23,9 +23,20 @@ export declare class ScheduleRunner {
23
23
  stop(): void;
24
24
  private arm;
25
25
  private tick;
26
- /** Fire a schedule by name, exactly once. Returns the started sessions. */
27
- dispatch(scheduleId: string): Promise<{
26
+ /**
27
+ * Fire a schedule by name, exactly once. Returns the started sessions.
28
+ *
29
+ * `awaitCompletion` is the hosted v2 fire: the VM may be parked as soon as
30
+ * the delivery replies, so resolve only after every started turn finished
31
+ * and flushed to durable storage, and every `waitUntil` promise settled.
32
+ * Without it the dispatch returns at message accept and work continues in
33
+ * the background (the resident / local control plane path).
34
+ */
35
+ dispatch(scheduleId: string, options?: {
36
+ awaitCompletion?: boolean;
37
+ }): Promise<{
28
38
  sessionIds: string[];
29
39
  }>;
40
+ private settleSession;
30
41
  }
31
42
  //# sourceMappingURL=schedule-runner.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"schedule-runner.d.ts","sourceRoot":"","sources":["../../src/internal/schedule-runner.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAgC,MAAM,aAAa,CAAC;AAE3F,OAAO,EAA2B,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAElF,eAAO,MAAM,QAAQ,EAAE,WAItB,CAAC;AAEF,qBAAa,oBAAqB,SAAQ,KAAK;IAG3C,QAAQ,CAAC,oBAAoB,EAAE,MAAM,EAAE;IAFzC,YACE,UAAU,EAAE,MAAM,EACT,oBAAoB,EAAE,MAAM,EAAE,EAIxC;CACF;AAQD,qBAAa,cAAc;IAMvB,OAAO,CAAC,QAAQ,CAAC,MAAM;IAEvB,OAAO,CAAC,QAAQ,CAAC,MAAM;IAPzB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAqB;IAC/C,OAAO,CAAC,KAAK,CAA6B;IAC1C,OAAO,CAAC,eAAe,CAAM;IAE7B,YACmB,MAAM,EAAE,aAAa,EACtC,OAAO,EAAE,YAAY,EACJ,MAAM,GAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAe,EAO3D;IAED,IAAI,WAAW,IAAI,MAAM,EAAE,CAE1B;IAED,KAAK,IAAI,IAAI,CAKZ;IAED,IAAI,IAAI,IAAI,CAKX;IAED,OAAO,CAAC,GAAG;IAOX,OAAO,CAAC,IAAI;IAoBZ,2EAA2E;IACrE,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,UAAU,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAwDpE;CACF"}
1
+ {"version":3,"file":"schedule-runner.d.ts","sourceRoot":"","sources":["../../src/internal/schedule-runner.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAgC,MAAM,aAAa,CAAC;AAE3F,OAAO,EAA2B,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAElF,eAAO,MAAM,QAAQ,EAAE,WAItB,CAAC;AAEF,qBAAa,oBAAqB,SAAQ,KAAK;IAG3C,QAAQ,CAAC,oBAAoB,EAAE,MAAM,EAAE;IAFzC,YACE,UAAU,EAAE,MAAM,EACT,oBAAoB,EAAE,MAAM,EAAE,EAIxC;CACF;AAQD,qBAAa,cAAc;IAMvB,OAAO,CAAC,QAAQ,CAAC,MAAM;IAEvB,OAAO,CAAC,QAAQ,CAAC,MAAM;IAPzB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAqB;IAC/C,OAAO,CAAC,KAAK,CAA6B;IAC1C,OAAO,CAAC,eAAe,CAAM;IAE7B,YACmB,MAAM,EAAE,aAAa,EACtC,OAAO,EAAE,YAAY,EACJ,MAAM,GAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAe,EAO3D;IAED,IAAI,WAAW,IAAI,MAAM,EAAE,CAE1B;IAED,KAAK,IAAI,IAAI,CAKZ;IAED,IAAI,IAAI,IAAI,CAKX;IAED,OAAO,CAAC,GAAG;IAOX,OAAO,CAAC,IAAI;IAoBZ;;;;;;;;OAQG;IACG,QAAQ,CACZ,UAAU,EAAE,MAAM,EAClB,OAAO,GAAE;QAAE,eAAe,CAAC,EAAE,OAAO,CAAA;KAAO,GAC1C,OAAO,CAAC;QAAE,UAAU,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAkFnC;YAEa,aAAa;CAO5B"}