@cursor/bdk 0.2.14 → 0.2.16

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 (392) hide show
  1. package/AGENTS.md +51 -52
  2. package/README.md +1 -1
  3. package/dist/bin/agent-sdk.js +0 -0
  4. package/dist/bin/agent-serve.js +41 -3
  5. package/dist/channels/github/index.d.ts +1 -1
  6. package/dist/channels/github/index.d.ts.map +1 -1
  7. package/dist/channels/github/index.js +1 -1
  8. package/dist/channels/slack/attachments.d.ts +2 -0
  9. package/dist/channels/slack/attachments.d.ts.map +1 -1
  10. package/dist/channels/slack/attachments.js +17 -5
  11. package/dist/channels/slack/channel-watch.d.ts +4 -2
  12. package/dist/channels/slack/channel-watch.d.ts.map +1 -1
  13. package/dist/channels/slack/channel-watch.js +4 -2
  14. package/dist/channels/slack/slack-channel.d.ts.map +1 -1
  15. package/dist/channels/slack/slack-channel.js +4 -2
  16. package/dist/channels/slack/types.d.ts +6 -4
  17. package/dist/channels/slack/types.d.ts.map +1 -1
  18. package/dist/connections.d.ts +29 -0
  19. package/dist/connections.d.ts.map +1 -1
  20. package/dist/connections.js +54 -0
  21. package/dist/docs/404.html +2 -2
  22. package/dist/docs/assets/{app.BN3sgOOo.js → app.BSrZkTHD.js} +4 -4
  23. package/dist/docs/assets/{building-with-agents.md.Df87rAe1.js → building-with-agents.md.Bi9CQ-bR.js} +3 -3
  24. package/dist/docs/assets/{building-with-agents.md.Df87rAe1.lean.js → building-with-agents.md.Bi9CQ-bR.lean.js} +1 -1
  25. package/dist/docs/assets/chunks/@localSearchIndexroot.JUnN1Be1.js +1 -0
  26. package/dist/docs/assets/chunks/{VPLocalSearchBox.CbA00dML.js → VPLocalSearchBox.BxmgcwIX.js} +1 -1
  27. package/dist/docs/assets/chunks/{arc.Byug8CZM.js → arc.CAid9y9R.js} +1 -1
  28. package/dist/docs/assets/chunks/{architectureDiagram-Q4EWVU46.D1_qmnQy.js → architectureDiagram-Q4EWVU46.kLxg-1A5.js} +1 -1
  29. package/dist/docs/assets/chunks/{baseUniq.Dj-Nurf-.js → baseUniq.BWvpjFlO.js} +1 -1
  30. package/dist/docs/assets/chunks/{blockDiagram-DXYQGD6D.BZwq3EIg.js → blockDiagram-DXYQGD6D.DyjX8R7M.js} +1 -1
  31. package/dist/docs/assets/chunks/{c4Diagram-AHTNJAMY.dx75urO7.js → c4Diagram-AHTNJAMY.DBdWlnqr.js} +1 -1
  32. package/dist/docs/assets/chunks/channel.CWc3NN9g.js +1 -0
  33. package/dist/docs/assets/chunks/{chunk-4BX2VUAB.CIoddsDQ.js → chunk-4BX2VUAB.T5enPS2D.js} +1 -1
  34. package/dist/docs/assets/chunks/{chunk-4TB4RGXK.O3VsVBES.js → chunk-4TB4RGXK.D6zswRAS.js} +1 -1
  35. package/dist/docs/assets/chunks/{chunk-55IACEB6.WNNWh0Pe.js → chunk-55IACEB6.Bh05N-a3.js} +1 -1
  36. package/dist/docs/assets/chunks/{chunk-EDXVE4YY.BKVQwEME.js → chunk-EDXVE4YY.DZv_O-d9.js} +1 -1
  37. package/dist/docs/assets/chunks/{chunk-FMBD7UC4.Cv5iBz7A.js → chunk-FMBD7UC4.BY53CZaL.js} +1 -1
  38. package/dist/docs/assets/chunks/{chunk-OYMX7WX6.wCDCToee.js → chunk-OYMX7WX6.CO5lI2PE.js} +1 -1
  39. package/dist/docs/assets/chunks/{chunk-QZHKN3VN.D3IGXhXA.js → chunk-QZHKN3VN.DMfpW0s4.js} +1 -1
  40. package/dist/docs/assets/chunks/{chunk-YZCP3GAM.CAPPh-E7.js → chunk-YZCP3GAM.COPT56Nr.js} +1 -1
  41. package/dist/docs/assets/chunks/classDiagram-6PBFFD2Q.D5a745iS.js +1 -0
  42. package/dist/docs/assets/chunks/classDiagram-v2-HSJHXN6E.D5a745iS.js +1 -0
  43. package/dist/docs/assets/chunks/clone.CCGVqN_B.js +1 -0
  44. package/dist/docs/assets/chunks/{cose-bilkent-S5V4N54A.BQCFH3M5.js → cose-bilkent-S5V4N54A.BJSj7zzd.js} +1 -1
  45. package/dist/docs/assets/chunks/{dagre-KV5264BT.lHmdrh7L.js → dagre-KV5264BT.DDv7IQZT.js} +1 -1
  46. package/dist/docs/assets/chunks/{diagram-5BDNPKRD.EtSPnHgD.js → diagram-5BDNPKRD.BUoE9HFH.js} +1 -1
  47. package/dist/docs/assets/chunks/{diagram-G4DWMVQ6.DCyUnQT8.js → diagram-G4DWMVQ6.BF3JtrnJ.js} +1 -1
  48. package/dist/docs/assets/chunks/{diagram-MMDJMWI5._E0Qqblb.js → diagram-MMDJMWI5.BvuCWc4e.js} +1 -1
  49. package/dist/docs/assets/chunks/{diagram-TYMM5635.BDj4oyy_.js → diagram-TYMM5635._EqUGqFN.js} +1 -1
  50. package/dist/docs/assets/chunks/{erDiagram-SMLLAGMA.CrvnO6a3.js → erDiagram-SMLLAGMA.DxNvSdzj.js} +1 -1
  51. package/dist/docs/assets/chunks/{flowDiagram-DWJPFMVM.DIhYc-2F.js → flowDiagram-DWJPFMVM.DVtRP546.js} +1 -1
  52. package/dist/docs/assets/chunks/{ganttDiagram-T4ZO3ILL.hFqm_vio.js → ganttDiagram-T4ZO3ILL.Bn9vb7xI.js} +1 -1
  53. package/dist/docs/assets/chunks/{gitGraphDiagram-UUTBAWPF.N3GDaVDD.js → gitGraphDiagram-UUTBAWPF.45r6n737.js} +1 -1
  54. package/dist/docs/assets/chunks/{graph.DK28rMBx.js → graph.BOkX3Ws_.js} +1 -1
  55. package/dist/docs/assets/chunks/{infoDiagram-42DDH7IO.DHmE6W9M.js → infoDiagram-42DDH7IO.DyBCcxOm.js} +1 -1
  56. package/dist/docs/assets/chunks/{ishikawaDiagram-UXIWVN3A.ByUJuOYm.js → ishikawaDiagram-UXIWVN3A.kg0ywDlx.js} +1 -1
  57. package/dist/docs/assets/chunks/{journeyDiagram-VCZTEJTY.BIUChFMh.js → journeyDiagram-VCZTEJTY.BUfrLnXA.js} +1 -1
  58. package/dist/docs/assets/chunks/{kanban-definition-6JOO6SKY.CNgFXwo-.js → kanban-definition-6JOO6SKY.Bn7X35b2.js} +1 -1
  59. package/dist/docs/assets/chunks/{layout.BDnwE4ET.js → layout.B0QW6d8M.js} +1 -1
  60. package/dist/docs/assets/chunks/{linear.DmrYLXFs.js → linear.C59eCF0D.js} +1 -1
  61. package/dist/docs/assets/chunks/{min.BbYcWakN.js → min.BnDl0p08.js} +1 -1
  62. package/dist/docs/assets/chunks/{mindmap-definition-QFDTVHPH.C9x-klkv.js → mindmap-definition-QFDTVHPH.u2HYLooo.js} +1 -1
  63. package/dist/docs/assets/chunks/{pieDiagram-DEJITSTG.iufpEbi0.js → pieDiagram-DEJITSTG.CbnIrr9l.js} +1 -1
  64. package/dist/docs/assets/chunks/{quadrantDiagram-34T5L4WZ.DdoXbWL9.js → quadrantDiagram-34T5L4WZ.D2zWIixq.js} +1 -1
  65. package/dist/docs/assets/chunks/{requirementDiagram-MS252O5E.XL1-_pNk.js → requirementDiagram-MS252O5E.DvOFa3oO.js} +1 -1
  66. package/dist/docs/assets/chunks/{sankeyDiagram-XADWPNL6.DySXofNs.js → sankeyDiagram-XADWPNL6.BfKCkH3x.js} +1 -1
  67. package/dist/docs/assets/chunks/{sequenceDiagram-FGHM5R23.Cp0GZoOU.js → sequenceDiagram-FGHM5R23.CUPKdYN0.js} +1 -1
  68. package/dist/docs/assets/chunks/{stateDiagram-FHFEXIEX.DvK-sXUX.js → stateDiagram-FHFEXIEX.CimDCRiK.js} +1 -1
  69. package/dist/docs/assets/chunks/stateDiagram-v2-QKLJ7IA2.ClNUVSTQ.js +1 -0
  70. package/dist/docs/assets/chunks/{theme.Clup4iIo.js → theme.CKht7z82.js} +2 -2
  71. package/dist/docs/assets/chunks/{timeline-definition-GMOUNBTQ.gHI9ZLm6.js → timeline-definition-GMOUNBTQ.BFTd5qKs.js} +1 -1
  72. package/dist/docs/assets/chunks/{vennDiagram-DHZGUBPP.G2N2zXYe.js → vennDiagram-DHZGUBPP.N6t5MmCb.js} +1 -1
  73. package/dist/docs/assets/chunks/wardley-RL74JXVD.D2G6Zyds.js +162 -0
  74. package/dist/docs/assets/chunks/{wardleyDiagram-NUSXRM2D.BgUKEagd.js → wardleyDiagram-NUSXRM2D.BqScALbL.js} +1 -1
  75. package/dist/docs/assets/chunks/{xychartDiagram-5P7HB3ND.CwH7oege.js → xychartDiagram-5P7HB3ND.Br0WiDkT.js} +1 -1
  76. package/dist/docs/assets/deployment.md.hKKN9I4c.js +31 -0
  77. package/dist/docs/assets/{deployment.md.BYuEcDBv.lean.js → deployment.md.hKKN9I4c.lean.js} +1 -1
  78. package/dist/docs/assets/{evals.md.C851kViu.js → evals.md.CHR34K1Y.js} +3 -7
  79. package/dist/docs/assets/{evals.md.C851kViu.lean.js → evals.md.CHR34K1Y.lean.js} +1 -1
  80. package/dist/docs/assets/guides_cloud-agents.md.CBK7W0-O.js +9 -0
  81. package/dist/docs/assets/guides_cloud-agents.md.CBK7W0-O.lean.js +1 -0
  82. package/dist/docs/assets/guides_grokbot-agents.md.BwAykJ7U.js +15 -0
  83. package/dist/docs/assets/{guides_grokbot-agents.md.tD1smFhU.lean.js → guides_grokbot-agents.md.BwAykJ7U.lean.js} +1 -1
  84. package/dist/docs/assets/{guides_hooks.md.5Ce3NXxZ.js → guides_hooks.md.B_bKG1oA.js} +1 -1
  85. package/dist/docs/assets/{guides_improve.md.CRrYq22s.js → guides_improve.md.CZKVt1cT.js} +2 -3
  86. package/dist/docs/assets/{guides_improve.md.CRrYq22s.lean.js → guides_improve.md.CZKVt1cT.lean.js} +1 -1
  87. package/dist/docs/assets/{guides_mcp-oauth.md.DR3zhC9r.js → guides_mcp-oauth.md.BM_eFC0L.js} +3 -15
  88. package/dist/docs/assets/guides_mcp-oauth.md.BM_eFC0L.lean.js +1 -0
  89. package/dist/docs/assets/{guides_webhooks.md.BBvAm_VF.js → guides_webhooks.md.Cpdc3BDX.js} +13 -12
  90. package/dist/docs/assets/{guides_webhooks.md.BBvAm_VF.lean.js → guides_webhooks.md.Cpdc3BDX.lean.js} +1 -1
  91. package/dist/docs/assets/{index.md.Dxxr7pFa.js → index.md.BIBHIQtU.js} +1 -1
  92. package/dist/docs/assets/{quickstart.md.BK5gjHM2.js → quickstart.md.CduLGBAB.js} +1 -1
  93. package/dist/docs/assets/{reference_agent-config.md.DrtLxWgR.js → reference_agent-config.md.DYA6ge6t.js} +7 -4
  94. package/dist/docs/assets/{reference_agent-config.md.DrtLxWgR.lean.js → reference_agent-config.md.DYA6ge6t.lean.js} +1 -1
  95. package/dist/docs/assets/reference_channels.md.DYg0CLud.js +22 -0
  96. package/dist/docs/assets/{reference_channels.md.LbNIJBwd.lean.js → reference_channels.md.DYg0CLud.lean.js} +1 -1
  97. package/dist/docs/assets/{reference_cli.md.dYCAL2lB.js → reference_cli.md.2d2Y0O-d.js} +16 -13
  98. package/dist/docs/assets/{reference_cli.md.dYCAL2lB.lean.js → reference_cli.md.2d2Y0O-d.lean.js} +1 -1
  99. package/dist/docs/assets/{reference_connections.md.DLrgAd5f.js → reference_connections.md.CxbLpaaP.js} +4 -5
  100. package/dist/docs/assets/{reference_connections.md.DLrgAd5f.lean.js → reference_connections.md.CxbLpaaP.lean.js} +1 -1
  101. package/dist/docs/assets/{reference_evals.md.D5i8PuXJ.js → reference_evals.md.Ccwp4x3o.js} +4 -4
  102. package/dist/docs/assets/{reference_evals.md.D5i8PuXJ.lean.js → reference_evals.md.Ccwp4x3o.lean.js} +1 -1
  103. package/dist/docs/assets/{reference_hooks.md.B-eGa2km.js → reference_hooks.md.DbJC8mcZ.js} +1 -1
  104. package/dist/docs/assets/reference_http-api.md.CrqhTv6S.js +11 -0
  105. package/dist/docs/assets/{reference_http-api.md.DbFNOubV.lean.js → reference_http-api.md.CrqhTv6S.lean.js} +1 -1
  106. package/dist/docs/assets/reference_playground.md.q4MI-0td.js +1 -0
  107. package/dist/docs/assets/reference_playground.md.q4MI-0td.lean.js +1 -0
  108. package/dist/docs/assets/{reference_schedules.md.BuJ8fgMa.js → reference_schedules.md.03Ryy9ca.js} +5 -5
  109. package/dist/docs/assets/{reference_schedules.md.BuJ8fgMa.lean.js → reference_schedules.md.03Ryy9ca.lean.js} +1 -1
  110. package/dist/docs/assets/reference_sessions.md.C_uzIWuy.js +1 -0
  111. package/dist/docs/assets/{reference_skills.md.ClkMoQsV.js → reference_skills.md.C2GWh7g8.js} +4 -4
  112. package/dist/docs/assets/{reference_tools.md.DzIY9JzY.js → reference_tools.md.08XR7lIl.js} +3 -14
  113. package/dist/docs/assets/reference_tools.md.08XR7lIl.lean.js +1 -0
  114. package/dist/docs/assets/{templates_grokbot-agents.md.2sydjFiO.js → templates_grokbot-agents.md.DgpPEs7B.js} +1 -1
  115. package/dist/docs/assets/troubleshooting.md.PCafNCb5.js +1 -0
  116. package/dist/docs/assets/{troubleshooting.md.x-GBa7wN.lean.js → troubleshooting.md.PCafNCb5.lean.js} +1 -1
  117. package/dist/docs/building-with-agents.html +37 -37
  118. package/dist/docs/building-with-agents.md +5 -5
  119. package/dist/docs/deployment.html +43 -41
  120. package/dist/docs/deployment.md +70 -33
  121. package/dist/docs/evals.html +38 -42
  122. package/dist/docs/evals.md +1 -16
  123. package/dist/docs/guides/agent-to-agent.html +35 -35
  124. package/dist/docs/guides/bitbucket.html +35 -35
  125. package/dist/docs/guides/cloud-agents.html +38 -39
  126. package/dist/docs/guides/cloud-agents.md +2 -8
  127. package/dist/docs/guides/convert-automation.html +35 -35
  128. package/dist/docs/guides/github.html +35 -35
  129. package/dist/docs/guides/gitlab.html +35 -35
  130. package/dist/docs/guides/grokbot-agents.html +37 -38
  131. package/dist/docs/guides/grokbot-agents.md +9 -13
  132. package/dist/docs/guides/hooks.html +37 -37
  133. package/dist/docs/guides/hooks.md +0 -1
  134. package/dist/docs/guides/improve.html +37 -38
  135. package/dist/docs/guides/improve.md +4 -6
  136. package/dist/docs/guides/jev.html +35 -35
  137. package/dist/docs/guides/mcp-oauth.html +39 -51
  138. package/dist/docs/guides/mcp-oauth.md +17 -40
  139. package/dist/docs/guides/migrate.html +35 -35
  140. package/dist/docs/guides/opentelemetry.html +35 -35
  141. package/dist/docs/guides/slack.html +35 -35
  142. package/dist/docs/guides/webhooks.html +47 -46
  143. package/dist/docs/guides/webhooks.md +35 -18
  144. package/dist/docs/hashmap.json +1 -1
  145. package/dist/docs/hillclimbing.html +35 -35
  146. package/dist/docs/index.html +36 -36
  147. package/dist/docs/index.md +1 -1
  148. package/dist/docs/llms-full.txt +388 -272
  149. package/dist/docs/llms.txt +4 -4
  150. package/dist/docs/quickstart.html +37 -37
  151. package/dist/docs/quickstart.md +2 -2
  152. package/dist/docs/reference/agent-config.html +41 -38
  153. package/dist/docs/reference/agent-config.md +26 -1
  154. package/dist/docs/reference/artifacts.html +35 -35
  155. package/dist/docs/reference/channels.html +42 -43
  156. package/dist/docs/reference/channels.md +29 -13
  157. package/dist/docs/reference/cli.html +50 -47
  158. package/dist/docs/reference/cli.md +115 -42
  159. package/dist/docs/reference/connections.html +39 -40
  160. package/dist/docs/reference/connections.md +6 -5
  161. package/dist/docs/reference/evals.html +38 -38
  162. package/dist/docs/reference/evals.md +15 -4
  163. package/dist/docs/reference/extensions.html +35 -35
  164. package/dist/docs/reference/hooks.html +37 -37
  165. package/dist/docs/reference/hooks.md +0 -1
  166. package/dist/docs/reference/http-api.html +38 -38
  167. package/dist/docs/reference/http-api.md +7 -17
  168. package/dist/docs/reference/instructions.html +35 -35
  169. package/dist/docs/reference/playground.html +37 -37
  170. package/dist/docs/reference/playground.md +1 -4
  171. package/dist/docs/reference/project-layout.html +35 -35
  172. package/dist/docs/reference/prompt.html +35 -35
  173. package/dist/docs/reference/schedules.html +39 -39
  174. package/dist/docs/reference/schedules.md +26 -3
  175. package/dist/docs/reference/sessions.html +36 -36
  176. package/dist/docs/reference/sessions.md +1 -2
  177. package/dist/docs/reference/skills.html +39 -39
  178. package/dist/docs/reference/skills.md +1 -1
  179. package/dist/docs/reference/subagents.html +35 -35
  180. package/dist/docs/reference/tools.html +39 -50
  181. package/dist/docs/reference/tools.md +2 -28
  182. package/dist/docs/templates/agentic-owners.html +35 -35
  183. package/dist/docs/templates/grokbot-agents.html +37 -37
  184. package/dist/docs/templates/grokbot-agents.md +1 -1
  185. package/dist/docs/templates/security-reviewer.html +35 -35
  186. package/dist/docs/templates/thermo-quality-review.html +35 -35
  187. package/dist/docs/templates/thermo-review.html +35 -35
  188. package/dist/docs/templates/triage.html +35 -35
  189. package/dist/docs/troubleshooting.html +36 -36
  190. package/dist/docs/troubleshooting.md +12 -7
  191. package/dist/extensions/cursor-cloud-agents/extension.d.ts +5 -1
  192. package/dist/extensions/cursor-cloud-agents/extension.d.ts.map +1 -1
  193. package/dist/extensions/cursor-cloud-agents/extension.js +4 -0
  194. package/dist/extensions/cursor-cloud-agents/lib/channels.d.ts.map +1 -1
  195. package/dist/extensions/cursor-cloud-agents/lib/channels.js +5 -1
  196. package/dist/filesystem.d.ts.map +1 -1
  197. package/dist/filesystem.js +4 -8
  198. package/dist/internal/cli-convert-automation.js +9 -19
  199. package/dist/internal/cli-deploy.d.ts +1 -1
  200. package/dist/internal/cli-deploy.d.ts.map +1 -1
  201. package/dist/internal/cli-deploy.js +18 -3
  202. package/dist/internal/cli-init-grokbot.d.ts +29 -0
  203. package/dist/internal/cli-init-grokbot.d.ts.map +1 -0
  204. package/dist/internal/cli-init-grokbot.js +181 -0
  205. package/dist/internal/cli-slack.js +1 -1
  206. package/dist/internal/comment-safe.d.ts +8 -0
  207. package/dist/internal/comment-safe.d.ts.map +1 -0
  208. package/dist/internal/comment-safe.js +12 -0
  209. package/dist/internal/continuation-identity.js +1 -1
  210. package/dist/internal/convert-automation/convert-workflow.d.ts.map +1 -1
  211. package/dist/internal/convert-automation/convert-workflow.js +2 -14
  212. package/dist/internal/convert-grokbot/answers.d.ts +127 -0
  213. package/dist/internal/convert-grokbot/answers.d.ts.map +1 -0
  214. package/dist/internal/convert-grokbot/answers.js +443 -0
  215. package/dist/internal/convert-grokbot/bot.d.ts +50 -0
  216. package/dist/internal/convert-grokbot/bot.d.ts.map +1 -0
  217. package/dist/internal/convert-grokbot/bot.js +72 -0
  218. package/dist/internal/convert-grokbot/checks.d.ts +26 -0
  219. package/dist/internal/convert-grokbot/checks.d.ts.map +1 -0
  220. package/dist/internal/convert-grokbot/checks.js +170 -0
  221. package/dist/internal/convert-grokbot/convert.d.ts +60 -0
  222. package/dist/internal/convert-grokbot/convert.d.ts.map +1 -0
  223. package/dist/internal/convert-grokbot/convert.js +470 -0
  224. package/dist/internal/convert-grokbot/handoff.d.ts +44 -0
  225. package/dist/internal/convert-grokbot/handoff.d.ts.map +1 -0
  226. package/dist/internal/convert-grokbot/handoff.js +160 -0
  227. package/dist/internal/convert-grokbot/recipe.d.ts +61 -0
  228. package/dist/internal/convert-grokbot/recipe.d.ts.map +1 -0
  229. package/dist/internal/convert-grokbot/recipe.js +94 -0
  230. package/dist/internal/convert-grokbot/routine.d.ts +51 -0
  231. package/dist/internal/convert-grokbot/routine.d.ts.map +1 -0
  232. package/dist/internal/convert-grokbot/routine.js +128 -0
  233. package/dist/internal/convert-grokbot/slack.d.ts +28 -0
  234. package/dist/internal/convert-grokbot/slack.d.ts.map +1 -0
  235. package/dist/internal/convert-grokbot/slack.js +50 -0
  236. package/dist/internal/deploy-client.d.ts +0 -2
  237. package/dist/internal/deploy-client.d.ts.map +1 -1
  238. package/dist/internal/deploy-client.js +2 -11
  239. package/dist/internal/discovery/agent-config.d.ts +6 -0
  240. package/dist/internal/discovery/agent-config.d.ts.map +1 -1
  241. package/dist/internal/discovery/agent-config.js +19 -0
  242. package/dist/internal/discovery/agent.d.ts.map +1 -1
  243. package/dist/internal/discovery/agent.js +2 -1
  244. package/dist/internal/discovery/names.d.ts +2 -0
  245. package/dist/internal/discovery/names.d.ts.map +1 -1
  246. package/dist/internal/discovery/names.js +2 -0
  247. package/dist/internal/discovery/project.d.ts.map +1 -1
  248. package/dist/internal/discovery/project.js +1 -3
  249. package/dist/internal/eval-judge-model.d.ts +10 -5
  250. package/dist/internal/eval-judge-model.d.ts.map +1 -1
  251. package/dist/internal/eval-judge-model.js +36 -25
  252. package/dist/internal/filesystem/subagent-inherit.d.ts +39 -0
  253. package/dist/internal/filesystem/subagent-inherit.d.ts.map +1 -0
  254. package/dist/internal/filesystem/subagent-inherit.js +96 -0
  255. package/dist/internal/filesystem/tools.d.ts +6 -0
  256. package/dist/internal/filesystem/tools.d.ts.map +1 -1
  257. package/dist/internal/filesystem/tools.js +38 -1
  258. package/dist/internal/hosted-catch-protocol.d.ts +2 -0
  259. package/dist/internal/hosted-catch-protocol.d.ts.map +1 -1
  260. package/dist/internal/hosted-catch-protocol.js +2 -0
  261. package/dist/internal/hosted-catch.d.ts +2 -3
  262. package/dist/internal/hosted-catch.d.ts.map +1 -1
  263. package/dist/internal/hosted-catch.js +2 -3
  264. package/dist/internal/hosted-delivery.d.ts.map +1 -1
  265. package/dist/internal/hosted-delivery.js +46 -13
  266. package/dist/internal/hosted-execution-flush.d.ts +6 -3
  267. package/dist/internal/hosted-execution-flush.d.ts.map +1 -1
  268. package/dist/internal/hosted-execution-flush.js +28 -31
  269. package/dist/internal/hosting.d.ts +1 -1
  270. package/dist/internal/hosting.d.ts.map +1 -1
  271. package/dist/internal/hosting.js +7 -3
  272. package/dist/internal/init-interview.d.ts +3 -5
  273. package/dist/internal/init-interview.d.ts.map +1 -1
  274. package/dist/internal/init-interview.js +15 -88
  275. package/dist/internal/init-project.d.ts +13 -0
  276. package/dist/internal/init-project.d.ts.map +1 -1
  277. package/dist/internal/init-project.js +30 -37
  278. package/dist/internal/init-scaffold.d.ts +11 -0
  279. package/dist/internal/init-scaffold.d.ts.map +1 -1
  280. package/dist/internal/init-scaffold.js +47 -13
  281. package/dist/internal/interview/agent-questions.d.ts +19 -0
  282. package/dist/internal/interview/agent-questions.d.ts.map +1 -0
  283. package/dist/internal/interview/agent-questions.js +120 -0
  284. package/dist/internal/interview/question.d.ts +82 -0
  285. package/dist/internal/interview/question.d.ts.map +1 -0
  286. package/dist/internal/interview/question.js +198 -0
  287. package/dist/internal/local-control-plane.d.ts.map +1 -1
  288. package/dist/internal/local-control-plane.js +5 -1
  289. package/dist/internal/otel/collector.d.ts +2 -0
  290. package/dist/internal/otel/collector.d.ts.map +1 -1
  291. package/dist/internal/otel/collector.js +4 -0
  292. package/dist/internal/peer-connections.d.ts +6 -2
  293. package/dist/internal/peer-connections.d.ts.map +1 -1
  294. package/dist/internal/peer-connections.js +23 -19
  295. package/dist/internal/resolve-prod-target.d.ts.map +1 -1
  296. package/dist/internal/resolve-prod-target.js +2 -1
  297. package/dist/internal/sdk-runner.d.ts.map +1 -1
  298. package/dist/internal/sdk-runner.js +43 -16
  299. package/dist/internal/sdk-subagent-inherit-support.d.ts +9 -0
  300. package/dist/internal/sdk-subagent-inherit-support.d.ts.map +1 -0
  301. package/dist/internal/sdk-subagent-inherit-support.js +89 -0
  302. package/dist/internal/server.d.ts.map +1 -1
  303. package/dist/internal/server.js +6 -5
  304. package/dist/internal/session-engine.d.ts +13 -0
  305. package/dist/internal/session-engine.d.ts.map +1 -1
  306. package/dist/internal/session-engine.js +62 -11
  307. package/dist/internal/session-run-log.d.ts.map +1 -1
  308. package/dist/internal/session-run-log.js +26 -11
  309. package/dist/internal/{convert-automation/slug.d.ts → slug.d.ts} +4 -1
  310. package/dist/internal/slug.d.ts.map +1 -0
  311. package/dist/internal/{convert-automation/slug.js → slug.js} +11 -1
  312. package/dist/playground/assets/index-7fVUOA5l.css +1 -0
  313. package/dist/playground/assets/{index-ClxRl2Cw.js → index-U3TRnwAP.js} +43 -43
  314. package/dist/playground/index.html +2 -2
  315. package/dist/types.d.ts +26 -1
  316. package/dist/types.d.ts.map +1 -1
  317. package/docs/README.md +1 -1
  318. package/docs/building-with-agents.md +5 -5
  319. package/docs/deployment.md +70 -33
  320. package/docs/evals.md +1 -16
  321. package/docs/guides/cloud-agents.md +3 -9
  322. package/docs/guides/grokbot-agents.md +10 -14
  323. package/docs/guides/hooks.md +0 -1
  324. package/docs/guides/improve.md +4 -6
  325. package/docs/guides/mcp-oauth.md +18 -41
  326. package/docs/guides/webhooks.md +35 -18
  327. package/docs/quickstart.md +2 -2
  328. package/docs/reference/agent-config.md +26 -1
  329. package/docs/reference/channels.md +29 -13
  330. package/docs/reference/cli.md +115 -42
  331. package/docs/reference/connections.md +6 -5
  332. package/docs/reference/evals.md +15 -4
  333. package/docs/reference/hooks.md +0 -1
  334. package/docs/reference/http-api.md +7 -17
  335. package/docs/reference/playground.md +2 -5
  336. package/docs/reference/schedules.md +26 -3
  337. package/docs/reference/sessions.md +1 -2
  338. package/docs/reference/skills.md +1 -1
  339. package/docs/reference/tools.md +3 -29
  340. package/docs/templates/grokbot-agents.md +1 -1
  341. package/docs/troubleshooting.md +12 -7
  342. package/package.json +36 -35
  343. package/schemas/grokbot-answers.schema.json +343 -0
  344. package/skills/create-agent/SKILL.md +16 -11
  345. package/skills/debug/SKILL.md +3 -4
  346. package/skills/evals/SKILL.md +2 -2
  347. package/skills/framework-map/SKILL.md +10 -10
  348. package/skills/mcp-auth/SKILL.md +10 -34
  349. package/skills/migrate-v2/SKILL.md +13 -9
  350. package/skills/setup-slack/SKILL.md +0 -13
  351. package/templates/agentic-owners/bot/lib/owners/handles.ts +1 -1
  352. package/templates/agentic-owners/bot/lib/owners/matching.ts +20 -9
  353. package/templates/agents-md/README.md +3 -3
  354. package/templates/agents-md/bot/channels/queue.ts +3 -8
  355. package/templates/agents-md/bot/instructions.md +1 -2
  356. package/templates/agents-md/bot/tools/apply_agents.ts +0 -1
  357. package/templates/agents-md/evals/agents.eval.ts +2 -2
  358. package/templates/demo/bot/channels/queue.ts +5 -15
  359. package/templates/grokbot-agents/.gitignore +4 -0
  360. package/templates/pr-autofixer/bot/channels/drive.ts +3 -16
  361. package/templates/security-help/.gitignore +4 -0
  362. package/templates/triage/bot/channels/queue.ts +11 -22
  363. package/templates/triage/bot/channels/webhook.ts +3 -6
  364. package/templates/triage/bot/lib/parse-queue-event.ts +0 -6
  365. package/dist/docs/assets/chunks/@localSearchIndexroot.CzrtdJ8s.js +0 -1
  366. package/dist/docs/assets/chunks/channel.6ebHhoF9.js +0 -1
  367. package/dist/docs/assets/chunks/classDiagram-6PBFFD2Q.BJ-CwKwu.js +0 -1
  368. package/dist/docs/assets/chunks/classDiagram-v2-HSJHXN6E.BJ-CwKwu.js +0 -1
  369. package/dist/docs/assets/chunks/clone.DfV2fkWH.js +0 -1
  370. package/dist/docs/assets/chunks/stateDiagram-v2-QKLJ7IA2.DNdUCJyd.js +0 -1
  371. package/dist/docs/assets/chunks/wardley-RL74JXVD.C46G0P5a.js +0 -162
  372. package/dist/docs/assets/deployment.md.BYuEcDBv.js +0 -29
  373. package/dist/docs/assets/guides_cloud-agents.md.CWJjS9No.js +0 -10
  374. package/dist/docs/assets/guides_cloud-agents.md.CWJjS9No.lean.js +0 -1
  375. package/dist/docs/assets/guides_grokbot-agents.md.tD1smFhU.js +0 -16
  376. package/dist/docs/assets/guides_mcp-oauth.md.DR3zhC9r.lean.js +0 -1
  377. package/dist/docs/assets/reference_channels.md.LbNIJBwd.js +0 -23
  378. package/dist/docs/assets/reference_http-api.md.DbFNOubV.js +0 -11
  379. package/dist/docs/assets/reference_playground.md.1hx0gcIu.js +0 -1
  380. package/dist/docs/assets/reference_playground.md.1hx0gcIu.lean.js +0 -1
  381. package/dist/docs/assets/reference_sessions.md.CyM7ARz1.js +0 -1
  382. package/dist/docs/assets/reference_tools.md.DzIY9JzY.lean.js +0 -1
  383. package/dist/docs/assets/troubleshooting.md.x-GBa7wN.js +0 -1
  384. package/dist/internal/convert-automation/slug.d.ts.map +0 -1
  385. package/dist/playground/assets/index-BKSsuEMw.css +0 -1
  386. /package/dist/docs/assets/{guides_hooks.md.5Ce3NXxZ.lean.js → guides_hooks.md.B_bKG1oA.lean.js} +0 -0
  387. /package/dist/docs/assets/{index.md.Dxxr7pFa.lean.js → index.md.BIBHIQtU.lean.js} +0 -0
  388. /package/dist/docs/assets/{quickstart.md.BK5gjHM2.lean.js → quickstart.md.CduLGBAB.lean.js} +0 -0
  389. /package/dist/docs/assets/{reference_hooks.md.B-eGa2km.lean.js → reference_hooks.md.DbJC8mcZ.lean.js} +0 -0
  390. /package/dist/docs/assets/{reference_sessions.md.CyM7ARz1.lean.js → reference_sessions.md.C_uzIWuy.lean.js} +0 -0
  391. /package/dist/docs/assets/{reference_skills.md.ClkMoQsV.lean.js → reference_skills.md.C2GWh7g8.lean.js} +0 -0
  392. /package/dist/docs/assets/{templates_grokbot-agents.md.2sydjFiO.lean.js → templates_grokbot-agents.md.DgpPEs7B.lean.js} +0 -0
@@ -33,9 +33,9 @@ Public docs: `node_modules/@cursor/bdk/dist/docs/llms.txt` or
33
33
  `CURSOR_API_KEY_FILE`, then `CURSOR_SERVICE_ACCOUNT_KEY`, then
34
34
  `bdk login`). `validate`,
35
35
  `info`, `call`, and `serve` bring-up do not.
36
- 7. **Memory is `ctx.host.kv`.** The process is not a persistent
37
- box. A later event can run on another replica. Module `Map`s,
38
- globals, and ad-hoc files do not survive that.
36
+ 7. **Memory is `ctx.host.kv`.** On Cursor hosting, a later event
37
+ can run in a new process. Module `Map`s, globals, and local files
38
+ do not carry over.
39
39
 
40
40
  ## Folder structure
41
41
 
@@ -63,8 +63,8 @@ Path is identity. Full list: README "Folder structure".
63
63
 
64
64
  ## Runtime
65
65
 
66
- Turns run on the serve host. Server tools, approvals, agent tools,
67
- skills, and sandbox seeds are available there.
66
+ Turns run on the serve host. Server tools, agent tools, skills, and
67
+ sandbox seeds are available there.
68
68
 
69
69
  ## Sessions
70
70
 
@@ -84,9 +84,9 @@ Anything you need to remember goes in `ctx.host.kv`: coalesce,
84
84
  dedupe, cursors, a decision a later turn must see. `get`, `put`,
85
85
  and `delete`. Values are JSON.
86
86
 
87
- Hosted BDK is multi-tenant. The serve process is replaced,
88
- and the next hook, tool call, channel event, or footer can land
89
- on a different process. Do not assume this box is still up.
87
+ On Cursor hosting, the platform can replace the serve process at
88
+ any time. The next hook, tool call, or channel event can run in a
89
+ new process, so do not assume this one is still up.
90
90
 
91
91
  - The store is shared by every session of the agent. Prefix keys
92
92
  with `ctx.session.id` for per-session memory.
@@ -107,14 +107,14 @@ before you return.
107
107
  Code: side-effect gates, write dedupe (the record lives in
108
108
  `ctx.host.kv`), auth, evidence seeding, hard API caps. Model:
109
109
  formatting, summarizing, classification, replies.
110
- Budget: `skills/create-bot/SKILL.md`.
110
+ Budget: `skills/create-agent/SKILL.md`.
111
111
 
112
112
  Loop: `validate` / `info` / `call` / `run` / `eval` / `serve`. Serve
113
113
  only this agent's directory.
114
114
 
115
115
  | Task | Skill |
116
116
  | --- | --- |
117
- | Scaffold | `skills/create-bot/SKILL.md` |
117
+ | Scaffold | `skills/create-agent/SKILL.md` |
118
118
  | Evals | `skills/evals/SKILL.md` |
119
119
  | OpenTelemetry | `skills/otel/SKILL.md` |
120
120
  | GitHub | `skills/github/SKILL.md` |
@@ -2,8 +2,8 @@
2
2
  name: bdk-mcp-auth
3
3
  description: >-
4
4
  Authorize host MCP OAuth for defineConnection({ url, oauth: true }):
5
- bdk mcp oauth, local tokens, --store, advertiseTools, egress.
6
- Use when wiring or debugging MCP auth.
5
+ bdk mcp oauth, local tokens, advertiseTools, egress, and the hosted
6
+ cursorAccount path. Use when wiring or debugging MCP auth.
7
7
  ---
8
8
 
9
9
  # Host MCP OAuth
@@ -24,17 +24,14 @@ can still call `ctx.host.mcp`.
24
24
  1. **Declare the connection.** `bot/mcp-connections/<name>.ts`
25
25
  with `url` + `oauth: true`. Use `bot/host-connections/` when
26
26
  the model must not see it.
27
- 2. **Name the secrets** if you will `--store`:
28
- `hosting.secretNames` lists
29
- `MCP_OAUTH_<NAME>_{ACCESS_TOKEN,REFRESH_TOKEN,CLIENT_ID}`.
30
- 3. **Allow egress** on hosted non-bootstrap hosts:
27
+ 2. **Allow egress** on hosted non-bootstrap hosts:
31
28
  `hosting.egressDomains`.
32
- 4. **Authorize.** Local: `bdk mcp oauth <name>`. Hosted:
33
- finish Connect so the current process can retry, then
34
- `bdk mcp oauth <name> --store` and `bdk deploy` so
35
- the next pod gets `MCP_OAUTH_*`. `secrets list` shows the names.
36
- Secrets are deployment-wide, not per caller. `cursorAccount: true`
37
- stays on the Cursor backend.
29
+ 3. **Authorize.** Local: `bdk mcp oauth <name>`, or finish
30
+ Connect in the playground so the current process can retry.
31
+ Tokens stay on this machine. Hosted: use a
32
+ `cursorAccount: true` connection and connect the server from
33
+ **Deployed Agents** in the dashboard; its tokens stay on the
34
+ Cursor backend.
38
35
 
39
36
  ```ts
40
37
  // bot/mcp-connections/inventory.ts
@@ -44,41 +41,20 @@ export default defineConnection({
44
41
  });
45
42
  ```
46
43
 
47
- ```ts
48
- // bot/agent.ts
49
- export default defineAgent({
50
- hosting: {
51
- secretNames: [
52
- "MCP_OAUTH_INVENTORY_ACCESS_TOKEN",
53
- "MCP_OAUTH_INVENTORY_REFRESH_TOKEN",
54
- "MCP_OAUTH_INVENTORY_CLIENT_ID",
55
- ],
56
- egressDomains: ["mcp.example.com"],
57
- },
58
- });
59
- ```
60
-
61
- File `inventory.ts` → prefix `MCP_OAUTH_INVENTORY`. Do not put
62
- `CURSOR_*` names in `secretNames`.
63
-
64
44
  ```bash
65
45
  bdk mcp oauth <connection>
66
- bdk mcp oauth <connection> --store [--slug <slug>]
67
- bdk secrets list <slug>
68
- bdk deploy
69
46
  ```
70
47
 
71
48
  Browser callback: `http://127.0.0.1:8787/callback`. Tokens live in
72
49
  the CLI config directory (`mcp-auth.json` or
73
50
  `$AGENT_SERVE_CONFIG_DIR`). URL change drops the old entry; re-run.
74
- `--store` does not restart a running engine.
75
51
 
76
52
  | Symptom | Fix |
77
53
  | --- | --- |
78
54
  | `must be defineConnection({ url, oauth: true })` | Wrong name or missing `oauth: true` |
79
55
  | `Unknown MCP connection` | Filename must match the CLI arg |
80
56
  | Callback hang | Free port 8787; finish the browser flow here |
81
- | Hosted 401 | `secrets list`; Connect or `--store`; redeploy |
57
+ | Hosted 401 | Local tokens don't reach the deployment. Switch to `cursorAccount: true`; connect from **Deployed Agents** |
82
58
  | Model invents `mcp_auth` / IDE MCP | `advertiseTools: true` on local turns |
83
59
 
84
60
  No raw tokens in git.
@@ -62,18 +62,18 @@ ends. That model changes code in three places:
62
62
  | Local `bdk dev`, `run`, `eval`, and the playground | Supported |
63
63
  | `defineStorage` in `agent/storage.ts` | Not supported. Delete the file. |
64
64
  | Reminders with inline `run` or a function `until` | Not supported. Use a named handler. |
65
- | Cron schedules in `agent/schedules/` on Cursor hosting | Not delivered yet. Self-hosted `bdk serve` still runs them. |
65
+ | Cron schedules in `agent/schedules/` on Cursor hosting | Supported with `@cursor/bdk` 0.2.14 or newer. Each fire runs in a new runtime and must finish in 26 minutes. |
66
66
  | Slack tool-approval buttons on Cursor hosting | Not supported yet |
67
67
  | `bdk mcp oauth --store` for host MCP OAuth | Not supported. Connect Cursor-account MCP servers from **Deployed Agents** in the dashboard. |
68
- | `/v1/health`, session, tool, and MCP APIs on the deployment URL | Not reachable |
69
- | `--prod` with `chat`, `resume`, `call`, `sessions`, `cost`, or `mcp` | Not supported. Use `run --prod`, `session --prod`, and `logs --prod`. |
68
+ | Session, tool, and MCP APIs on the deployment URL | Not reachable |
69
+ | `--prod` with `chat`, `resume`, `call`, `skill`, `sessions`, `cost`, or `mcp` | Not supported. Use `run --prod`, `logs --prod`, `session --prod`, and `playground --prod`. |
70
70
  | v1 sessions, KV, and files | Not carried over. v2 starts empty, and deleting v1 deletes them. |
71
71
 
72
72
  The steps below rewrite `defineStorage`, inline reminders, SCM channel
73
73
  credentials, and secret reads. Stop and ask before migrating an agent
74
- that depends on cron schedules, Slack tool-approval buttons,
75
- `mcp oauth --store`, or an HTTP route whose caller reads the response
76
- body. Name the row and the file that uses it.
74
+ that depends on Slack tool-approval buttons, `mcp oauth --store`, or an
75
+ HTTP route whose caller reads the response body. Name the row and the
76
+ file that uses it.
77
77
 
78
78
  ## Update the project
79
79
 
@@ -181,7 +181,8 @@ still loads.
181
181
 
182
182
  8. **Stop answering from HTTP routes.** A custom route that returned
183
183
  computed data must deliver it another way, such as a callback URL or a
184
- tool the turn calls.
184
+ tool the turn calls. Return `new Response(null, { status: 202 })` so
185
+ local runs match the hosted response.
185
186
 
186
187
  ## Verify locally
187
188
 
@@ -257,8 +258,11 @@ After the deploy is running:
257
258
  secrets go unused.
258
259
  - Reconnect Cursor-account MCP servers from **Deployed Agents** in the
259
260
  dashboard.
260
- - Start a turn with `bdk run --prod --slug <slug> --message "..."`, then
261
- read it with `bdk session <ses_...> --prod --slug <slug>`.
261
+ - Start a turn with `bdk run --prod --slug <slug> --message "..."`. It
262
+ prints a `deliveryId`, not a session. Find the `ses_...` header in
263
+ `bdk logs --prod --once --slug <slug>`, then read the turn with
264
+ `bdk session <ses_...> --prod --slug <slug>` until the latest run
265
+ finishes.
262
266
 
263
267
  The [deploy skill](../deploy/SKILL.md) covers deploys with an attached
264
268
  service account.
@@ -134,16 +134,3 @@ export default slackChannel({
134
134
  Pass `--channel-posts` on `create` / `init --manual`. Invite the
135
135
  bot to each watched channel. Mentions stay on `app_mention`; a
136
136
  later mention continues the watch thread.
137
-
138
- ## Approvals (opt-in)
139
-
140
- ```ts
141
- export default slackChannel({
142
- envPrefix: "JENNY",
143
- toolApprovals: true,
144
- });
145
- ```
146
-
147
- Wizard enables interactivity when this is set. Server tools on
148
- `local` only. Parked calls die on host restart. Cards truncate
149
- args; execution uses the full input.
@@ -50,5 +50,5 @@ export function sanitizeReviewerHandle(raw: string): string | undefined {
50
50
  return `${org}/${team}`;
51
51
  }
52
52
  const login = trimmed.replace(/^@/, "").toLowerCase();
53
- return /^[a-z0-9][a-z0-9-]*$/.test(login) ? `@${login}` : undefined;
53
+ return /^[a-z0-9][a-z0-9-]*(?:_[a-z0-9]+)?$/.test(login) ? `@${login}` : undefined;
54
54
  }
@@ -16,13 +16,20 @@ export function patternMatchesFile(pattern: string, filepath: string): boolean {
16
16
  return true;
17
17
  }
18
18
 
19
- // Keep the fast prefix path for literal `dir/**` rules. A wildcard before
20
- // the terminal `/**` (for example `**/agent-serve/**`) must fall through to
21
- // minimatch; treating its wildcard text as a literal prefix never matches.
22
- if (normalizedPattern.endsWith("**") && !hasComplexGlob(normalizedPattern.replace(/\*+$/, ""))) {
23
- const rawPrefix = normalizedPattern.replace(/\*+$/, "");
24
- const prefix = rawPrefix.replace(/\\(.)/g, "$1").replace(/\/+$/, "");
25
- return normalizedPath === prefix || (prefix !== "" && normalizedPath.startsWith(`${prefix}/`));
19
+ const literalPrefix = normalizedPattern.replace(/\*+$/, "");
20
+ if (normalizedPattern.endsWith("**") && !hasComplexGlob(literalPrefix)) {
21
+ const prefix = literalPrefix.replace(/\\(.)/g, "$1").replace(/\/+$/, "");
22
+ if (normalizedPath === prefix || (prefix !== "" && normalizedPath.startsWith(`${prefix}/`))) {
23
+ return true;
24
+ }
25
+ if (literalPrefix === "" || literalPrefix.endsWith("/")) {
26
+ return false;
27
+ }
28
+ if (patternIsRooted && !literalPrefix.includes("/") && normalizedPath.includes("/")) {
29
+ return false;
30
+ }
31
+ // gitignore reads `x**` as `x*`.
32
+ return globMatches(normalizedPath, `${literalPrefix}*`);
26
33
  }
27
34
 
28
35
  if (normalizedPattern.endsWith("/")) {
@@ -37,10 +44,14 @@ export function patternMatchesFile(pattern: string, filepath: string): boolean {
37
44
  return true;
38
45
  }
39
46
 
47
+ return globMatches(normalizedPath, normalizedPattern);
48
+ }
49
+
50
+ function globMatches(filepath: string, pattern: string): boolean {
40
51
  try {
41
- return minimatch(normalizedPath, normalizedPattern, {
52
+ return minimatch(filepath, pattern, {
42
53
  dot: true,
43
- matchBase: !normalizedPattern.includes("/"),
54
+ matchBase: !pattern.includes("/"),
44
55
  nocase: false,
45
56
  });
46
57
  } catch {
@@ -1,9 +1,9 @@
1
1
  # Living AGENTS.md
2
2
 
3
3
  Keeps `AGENTS.md` current from last week's merged pull requests and the
4
- listed Slack channels. Parks an update until a person approves it, then
5
- opens a draft follow-up PR. Chores stay quiet. Same-base updates stack
6
- on `agents-md/<base>`.
4
+ listed Slack channels. Opens each update as a draft follow-up PR for a
5
+ person to review. Chores stay quiet. Same-base updates stack on
6
+ `agents-md/<base>`.
7
7
 
8
8
  ```text
9
9
  npx @cursor/bdk init ./agents-md --template agents-md
@@ -7,14 +7,9 @@ export default defineChannel({
7
7
  POST("/run", {
8
8
  description: "Collect last week's PRs and Slack, then review AGENTS.md",
9
9
  bodySchema: z.object({}),
10
- handler: async (_req, { send, host, auth }) => {
11
- const week = await collectWeek(host);
12
- const session = await startWeek(send, week, auth);
13
- return Response.json({
14
- ok: true,
15
- sessionId: session.id,
16
- window: week.window,
17
- });
10
+ handler: async (_req, { send, waitUntil, host, auth }) => {
11
+ waitUntil(collectWeek(host).then((week) => startWeek(send, week, auth)));
12
+ return new Response(null, { status: 202 });
18
13
  },
19
14
  }),
20
15
  ],
@@ -33,7 +33,6 @@ Call `apply_agents` once.
33
33
  Paths must be `AGENTS.md` or `*/AGENTS.md`. Short declarative sentences.
34
34
  Edit only the stale or missing rules. Keep the existing voice.
35
35
 
36
- An update parks until a person approves the write. The follow-up PR
37
- opens as a draft.
36
+ The follow-up PR opens as a draft for a person to review.
38
37
 
39
38
  Reply with `skip` or `update` and the reason.
@@ -26,7 +26,6 @@ type Write = {
26
26
 
27
27
  export default defineTool({
28
28
  description: "Skip or open an AGENTS.md follow-up PR for this weekly review. Call once.",
29
- needsApproval: (input) => input.verdict === "update",
30
29
  effect: (input) => (input.verdict === "update" ? "write" : "read"),
31
30
  inputSchema: z.discriminatedUnion("verdict", [
32
31
  z.object({
@@ -78,7 +78,7 @@ export default defineEval({
78
78
  },
79
79
  {
80
80
  id: "update-rule",
81
- description: "A repeated billing rule parks the AGENTS.md write.",
81
+ description: "A repeated billing rule opens an AGENTS.md update.",
82
82
  async test(t) {
83
83
  await t.send(weekly(), {
84
84
  workspaceFiles: {
@@ -91,7 +91,7 @@ export default defineEval({
91
91
  "week/tree/AGENTS.md.txt": "# API\n\nKeep handlers thin.\n",
92
92
  },
93
93
  });
94
- t.parked();
94
+ t.succeeded();
95
95
  t.calledTool("apply_agents", { input: { verdict: "update" } });
96
96
  },
97
97
  },
@@ -2,7 +2,7 @@ import { defineChannel, POST } from "@cursor/bdk/channels";
2
2
  import { parseGitHubPrRef } from "@cursor/bdk/channels/github";
3
3
  import { z } from "zod";
4
4
  import { startDemo } from "../lib/collect.js";
5
- import { REPOS, watches } from "../lib/repos.js";
5
+ import { watches } from "../lib/repos.js";
6
6
 
7
7
  export default defineChannel({
8
8
  routes: [
@@ -11,23 +11,13 @@ export default defineChannel({
11
11
  bodySchema: z.object({
12
12
  pr: z.string().describe("GitHub PR URL or owner/repo#N"),
13
13
  }),
14
- handler: async (_req, { send, host, body }) => {
14
+ handler: async (_req, { send, waitUntil, host, body }) => {
15
15
  const ref = parseGitHubPrRef(body.pr);
16
16
  if (ref === undefined || !watches(`${ref.owner}/${ref.repo}`)) {
17
- return Response.json(
18
- {
19
- ok: false,
20
- error: `need a PR URL or owner/repo#N in ${REPOS.join(", ")}`,
21
- },
22
- { status: 400 },
23
- );
17
+ return new Response(null, { status: 400 });
24
18
  }
25
- const session = await startDemo(send, host.github, ref);
26
- return Response.json({
27
- ok: true,
28
- sessionId: session.id,
29
- pr: ref.label,
30
- });
19
+ waitUntil(startDemo(send, host.github, ref));
20
+ return new Response(null, { status: 202 });
31
21
  },
32
22
  }),
33
23
  ],
@@ -0,0 +1,4 @@
1
+ node_modules
2
+ .env
3
+ .env.local
4
+ memory
@@ -7,30 +7,17 @@ export default defineChannel({
7
7
  POST("/", {
8
8
  description: "Start PR autofixer on a GitHub PR (same path as the drive_pr tool).",
9
9
  bodySchema: driveStartBodySchema,
10
- handler: async (req, { send, sessionUrls, host, body }) => {
10
+ handler: async (_req, { send, host, body }) => {
11
11
  const result = await startDrive({
12
12
  pr: body.pr,
13
13
  hint: body.hint,
14
14
  send,
15
15
  host,
16
16
  });
17
-
18
17
  if (!result.ok) {
19
- return Response.json({ error: result.error }, { status: 400 });
18
+ return new Response(null, { status: 400 });
20
19
  }
21
-
22
- return Response.json({
23
- pr: result.pr,
24
- sessionId: result.sessionId,
25
- continuationToken: result.continuationToken,
26
- bcId: result.bcId,
27
- agentUrl: result.agentUrl,
28
- status: result.status,
29
- result: result.result,
30
- playgroundUrl:
31
- result.sessionId === null ? null : sessionUrls(req, result.sessionId).playgroundUrl,
32
- mergeConflictReminderId: result.mergeConflictReminderId,
33
- });
20
+ return new Response(null, { status: 202 });
34
21
  },
35
22
  }),
36
23
  ],
@@ -0,0 +1,4 @@
1
+ node_modules
2
+ .env
3
+ .env.local
4
+ memory
@@ -1,6 +1,6 @@
1
1
  import { defineChannel, POST } from "@cursor/bdk/channels";
2
2
  import { z } from "zod";
3
- import { formatQueuePrompt, isTrackerWebhook, parseQueueEvent } from "../lib/parse-queue-event.js";
3
+ import { formatQueuePrompt, parseQueueEvent } from "../lib/parse-queue-event.js";
4
4
 
5
5
  export default defineChannel({
6
6
  routes: [
@@ -11,29 +11,18 @@ export default defineChannel({
11
11
  const parsed = parseQueueEvent(body);
12
12
  if (!parsed.ok) {
13
13
  if ("ignored" in parsed) {
14
- return Response.json({ ok: true, ignored: true });
14
+ return new Response(null, { status: 202 });
15
15
  }
16
- return Response.json({ ok: false, error: parsed.error }, { status: 400 });
16
+ return new Response(null, { status: 400 });
17
17
  }
18
- const options = {
19
- continuationToken: parsed.issue.identifier,
20
- admission: "coalesce" as const,
21
- title: parsed.issue.title === "" ? undefined : parsed.issue.title,
22
- };
23
- const prompt = formatQueuePrompt(parsed.issue);
24
- if (isTrackerWebhook(body)) {
25
- waitUntil(send(prompt, options));
26
- return Response.json({
27
- ok: true,
28
- identifier: parsed.issue.identifier,
29
- });
30
- }
31
- const session = await send(prompt, options);
32
- return Response.json({
33
- ok: true,
34
- sessionId: session.id,
35
- identifier: parsed.issue.identifier,
36
- });
18
+ waitUntil(
19
+ send(formatQueuePrompt(parsed.issue), {
20
+ continuationToken: parsed.issue.identifier,
21
+ admission: "coalesce",
22
+ title: parsed.issue.title === "" ? undefined : parsed.issue.title,
23
+ }),
24
+ );
25
+ return new Response(null, { status: 202 });
37
26
  },
38
27
  }),
39
28
  ],
@@ -21,11 +21,11 @@ export default defineChannel({
21
21
  nowMs: Date.now(),
22
22
  });
23
23
  if (!verified.ok) {
24
- return Response.json({ ok: false }, { status: verified.status });
24
+ return new Response(null, { status: verified.status });
25
25
  }
26
26
  const parsed = parseQueueEvent(body);
27
27
  if (!parsed.ok) {
28
- return Response.json({ ok: true, ignored: true });
28
+ return new Response(null, { status: 202 });
29
29
  }
30
30
  waitUntil(
31
31
  send(formatQueuePrompt(parsed.issue), {
@@ -34,10 +34,7 @@ export default defineChannel({
34
34
  title: parsed.issue.title === "" ? undefined : parsed.issue.title,
35
35
  }),
36
36
  );
37
- return Response.json({
38
- ok: true,
39
- identifier: parsed.issue.identifier,
40
- });
37
+ return new Response(null, { status: 202 });
41
38
  },
42
39
  }),
43
40
  ],
@@ -26,12 +26,6 @@ export function pinIssueIdentifier(
26
26
  return fallback;
27
27
  }
28
28
 
29
- export function isTrackerWebhook(body: unknown): boolean {
30
- return (
31
- isRecord(body) && (typeof body["type"] === "string" || typeof body["webhookEvent"] === "string")
32
- );
33
- }
34
-
35
29
  export function parseQueueEvent(body: unknown): ParseResult {
36
30
  if (!isRecord(body)) {
37
31
  return { ok: false, error: "unsupported queue event" };