@cursor/bdk 0.2.2 → 0.2.3

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 (284) hide show
  1. package/AGENTS.md +1 -1
  2. package/dist/bin/agent-serve.js +23 -7
  3. package/dist/channels/github/auth.d.ts.map +1 -1
  4. package/dist/channels/github/auth.js +36 -5
  5. package/dist/connections.d.ts +1 -1
  6. package/dist/connections.js +1 -1
  7. package/dist/docs/404.html +2 -2
  8. package/dist/docs/assets/{app.DtYVVVyK.js → app.BOIHhrKi.js} +4 -4
  9. package/dist/docs/assets/chunks/@localSearchIndexroot.D5L-b34G.js +1 -0
  10. package/dist/docs/assets/chunks/{VPLocalSearchBox.D47xT7J4.js → VPLocalSearchBox.D49zVZqM.js} +1 -1
  11. package/dist/docs/assets/chunks/{arc.CDJ6xzxR.js → arc.hmjb-sc4.js} +1 -1
  12. package/dist/docs/assets/chunks/{architectureDiagram-Q4EWVU46.l1Xnjd3N.js → architectureDiagram-Q4EWVU46.CxEI1KqM.js} +1 -1
  13. package/dist/docs/assets/chunks/{baseUniq.x-finShZ.js → baseUniq.DHHvBWoV.js} +1 -1
  14. package/dist/docs/assets/chunks/{blockDiagram-DXYQGD6D.COC3qynH.js → blockDiagram-DXYQGD6D.DnXW-3bu.js} +1 -1
  15. package/dist/docs/assets/chunks/{c4Diagram-AHTNJAMY.DdQO850E.js → c4Diagram-AHTNJAMY.e-47O2jM.js} +1 -1
  16. package/dist/docs/assets/chunks/channel.BbOGaJQP.js +1 -0
  17. package/dist/docs/assets/chunks/{chunk-4BX2VUAB.Dpn8omLk.js → chunk-4BX2VUAB.3ry4pYXB.js} +1 -1
  18. package/dist/docs/assets/chunks/{chunk-4TB4RGXK.C0XWStUN.js → chunk-4TB4RGXK.DGIZFRx6.js} +1 -1
  19. package/dist/docs/assets/chunks/{chunk-55IACEB6.DsKSZfIM.js → chunk-55IACEB6.DKBnqg9U.js} +1 -1
  20. package/dist/docs/assets/chunks/{chunk-EDXVE4YY.dNU6JDu6.js → chunk-EDXVE4YY.BIU8Ue5k.js} +1 -1
  21. package/dist/docs/assets/chunks/{chunk-FMBD7UC4.DN41fxKE.js → chunk-FMBD7UC4.DP-TFhjI.js} +1 -1
  22. package/dist/docs/assets/chunks/{chunk-OYMX7WX6.COpKCZus.js → chunk-OYMX7WX6.Ux0OYj5v.js} +1 -1
  23. package/dist/docs/assets/chunks/{chunk-QZHKN3VN.HDB-azx2.js → chunk-QZHKN3VN.BzHMwYox.js} +1 -1
  24. package/dist/docs/assets/chunks/{chunk-YZCP3GAM.DEeX_a2j.js → chunk-YZCP3GAM.D4OGAsSP.js} +1 -1
  25. package/dist/docs/assets/chunks/classDiagram-6PBFFD2Q.Db58HCb1.js +1 -0
  26. package/dist/docs/assets/chunks/classDiagram-v2-HSJHXN6E.Db58HCb1.js +1 -0
  27. package/dist/docs/assets/chunks/clone.Co4MBflG.js +1 -0
  28. package/dist/docs/assets/chunks/{cose-bilkent-S5V4N54A.C3yGL2A8.js → cose-bilkent-S5V4N54A.Jq_7BUNx.js} +1 -1
  29. package/dist/docs/assets/chunks/{dagre-KV5264BT.Bpl24en4.js → dagre-KV5264BT.Di-skR2x.js} +1 -1
  30. package/dist/docs/assets/chunks/{diagram-5BDNPKRD.nFco6seU.js → diagram-5BDNPKRD.DeREHIdH.js} +1 -1
  31. package/dist/docs/assets/chunks/{diagram-G4DWMVQ6.DXhA6DWR.js → diagram-G4DWMVQ6.C7Kcqxro.js} +1 -1
  32. package/dist/docs/assets/chunks/{diagram-MMDJMWI5.8GoOYcwk.js → diagram-MMDJMWI5.BK3eohyo.js} +1 -1
  33. package/dist/docs/assets/chunks/{diagram-TYMM5635.DDBlqvlJ.js → diagram-TYMM5635.C6TyymXT.js} +1 -1
  34. package/dist/docs/assets/chunks/{erDiagram-SMLLAGMA.vl_N81P4.js → erDiagram-SMLLAGMA.DYGG-gGx.js} +1 -1
  35. package/dist/docs/assets/chunks/{flowDiagram-DWJPFMVM.Cteg8g7I.js → flowDiagram-DWJPFMVM.C9nBcSV4.js} +1 -1
  36. package/dist/docs/assets/chunks/{ganttDiagram-T4ZO3ILL.D4aMhlMM.js → ganttDiagram-T4ZO3ILL.wAg_ymsp.js} +1 -1
  37. package/dist/docs/assets/chunks/{gitGraphDiagram-UUTBAWPF.DF_J0D4q.js → gitGraphDiagram-UUTBAWPF.B87j9Oeg.js} +1 -1
  38. package/dist/docs/assets/chunks/{graph.DJs0LDCf.js → graph.CuFMj31w.js} +1 -1
  39. package/dist/docs/assets/chunks/{infoDiagram-42DDH7IO.Bb-4RQwg.js → infoDiagram-42DDH7IO.P_mLGumP.js} +1 -1
  40. package/dist/docs/assets/chunks/{ishikawaDiagram-UXIWVN3A.DEtQRSbc.js → ishikawaDiagram-UXIWVN3A.DyuL_MsT.js} +1 -1
  41. package/dist/docs/assets/chunks/{journeyDiagram-VCZTEJTY.DhQQ75FA.js → journeyDiagram-VCZTEJTY.CtP09IoJ.js} +1 -1
  42. package/dist/docs/assets/chunks/{kanban-definition-6JOO6SKY.C4gEw3Rk.js → kanban-definition-6JOO6SKY.BoeSYPZo.js} +1 -1
  43. package/dist/docs/assets/chunks/{layout.DT-PGlXa.js → layout.B0lMMtNo.js} +1 -1
  44. package/dist/docs/assets/chunks/{linear.BMMe__JW.js → linear.HxRBiAFX.js} +1 -1
  45. package/dist/docs/assets/chunks/{min.XyaU9K9Q.js → min.BGlFFHwS.js} +1 -1
  46. package/dist/docs/assets/chunks/{mindmap-definition-QFDTVHPH.CbBM6xZ-.js → mindmap-definition-QFDTVHPH.JyLBD9M8.js} +1 -1
  47. package/dist/docs/assets/chunks/{pieDiagram-DEJITSTG.DFJoIVou.js → pieDiagram-DEJITSTG.DnSmNZF8.js} +1 -1
  48. package/dist/docs/assets/chunks/{quadrantDiagram-34T5L4WZ.CQjkDYqb.js → quadrantDiagram-34T5L4WZ.CUCnbfCa.js} +1 -1
  49. package/dist/docs/assets/chunks/{requirementDiagram-MS252O5E.D-mK-JQu.js → requirementDiagram-MS252O5E.py0IVUn5.js} +1 -1
  50. package/dist/docs/assets/chunks/{sankeyDiagram-XADWPNL6.BStQInpd.js → sankeyDiagram-XADWPNL6.Bkc-HWYp.js} +1 -1
  51. package/dist/docs/assets/chunks/{sequenceDiagram-FGHM5R23.CA_eooPJ.js → sequenceDiagram-FGHM5R23.Dqn8Mlv2.js} +1 -1
  52. package/dist/docs/assets/chunks/{stateDiagram-FHFEXIEX.BXl-b7ad.js → stateDiagram-FHFEXIEX.JikkoQUU.js} +1 -1
  53. package/dist/docs/assets/chunks/stateDiagram-v2-QKLJ7IA2.CMsKhrW0.js +1 -0
  54. package/dist/docs/assets/chunks/{theme.q37tOs4x.js → theme.b6HQ6zG_.js} +2 -2
  55. package/dist/docs/assets/chunks/{timeline-definition-GMOUNBTQ.vjuaGOSe.js → timeline-definition-GMOUNBTQ.BvpSXiBj.js} +1 -1
  56. package/dist/docs/assets/chunks/{vennDiagram-DHZGUBPP.BxduJl-F.js → vennDiagram-DHZGUBPP.CU7MVnZx.js} +1 -1
  57. package/dist/docs/assets/chunks/wardley-RL74JXVD.BKwC4ctG.js +162 -0
  58. package/dist/docs/assets/chunks/{wardleyDiagram-NUSXRM2D.D1z3ds0D.js → wardleyDiagram-NUSXRM2D.BfaF6Uhe.js} +1 -1
  59. package/dist/docs/assets/chunks/{xychartDiagram-5P7HB3ND.CRU5Ti9b.js → xychartDiagram-5P7HB3ND.Bg5dcpj4.js} +1 -1
  60. package/dist/docs/assets/{deployment.md.nGo1yIsa.js → deployment.md.BJ8i7Q6p.js} +5 -8
  61. package/dist/docs/assets/{deployment.md.nGo1yIsa.lean.js → deployment.md.BJ8i7Q6p.lean.js} +1 -1
  62. package/dist/docs/assets/{guides_github.md.C2_DSWlE.js → guides_github.md.Bq9kQU9B.js} +9 -3
  63. package/dist/docs/assets/{guides_github.md.C2_DSWlE.lean.js → guides_github.md.Bq9kQU9B.lean.js} +1 -1
  64. package/dist/docs/assets/{guides_slack.md.ZbHQETOT.js → guides_slack.md.diqqXTTm.js} +2 -2
  65. package/dist/docs/assets/{guides_slack.md.ZbHQETOT.lean.js → guides_slack.md.diqqXTTm.lean.js} +1 -1
  66. package/dist/docs/assets/{quickstart.md.wG4shE1f.js → quickstart.md.CHpHPBUN.js} +5 -3
  67. package/dist/docs/assets/{quickstart.md.wG4shE1f.lean.js → quickstart.md.CHpHPBUN.lean.js} +1 -1
  68. package/dist/docs/assets/{reference_artifacts.md.CFMNPreZ.js → reference_artifacts.md.CQfKq8F2.js} +1 -1
  69. package/dist/docs/assets/reference_cli.md.DgeLTO18.js +91 -0
  70. package/dist/docs/assets/reference_cli.md.DgeLTO18.lean.js +1 -0
  71. package/dist/docs/assets/{reference_connections.md._XpKiOaF.js → reference_connections.md.COq--gAm.js} +7 -3
  72. package/dist/docs/assets/{reference_connections.md._XpKiOaF.lean.js → reference_connections.md.COq--gAm.lean.js} +1 -1
  73. package/dist/docs/assets/{reference_evals.md.DqNyHMA6.js → reference_evals.md.CJm3uCUm.js} +4 -4
  74. package/dist/docs/assets/{reference_evals.md.DqNyHMA6.lean.js → reference_evals.md.CJm3uCUm.lean.js} +1 -1
  75. package/dist/docs/assets/{reference_skills.md.CRFTxt9M.js → reference_skills.md.Cy00QMKS.js} +3 -3
  76. package/dist/docs/assets/{reference_skills.md.CRFTxt9M.lean.js → reference_skills.md.Cy00QMKS.lean.js} +1 -1
  77. package/dist/docs/assets/troubleshooting.md.Cw5PKa3t.js +1 -0
  78. package/dist/docs/assets/{troubleshooting.md.BzZSu1Gz.lean.js → troubleshooting.md.Cw5PKa3t.lean.js} +1 -1
  79. package/dist/docs/building-with-agents.html +35 -35
  80. package/dist/docs/deployment.html +40 -43
  81. package/dist/docs/deployment.md +45 -15
  82. package/dist/docs/evals.html +35 -35
  83. package/dist/docs/guides/agent-to-agent.html +35 -35
  84. package/dist/docs/guides/bitbucket.html +35 -35
  85. package/dist/docs/guides/cloud-agents.html +35 -35
  86. package/dist/docs/guides/convert-automation.html +35 -35
  87. package/dist/docs/guides/github.html +43 -37
  88. package/dist/docs/guides/github.md +34 -0
  89. package/dist/docs/guides/gitlab.html +35 -35
  90. package/dist/docs/guides/grokbot-agents.html +35 -35
  91. package/dist/docs/guides/hooks.html +35 -35
  92. package/dist/docs/guides/improve.html +35 -35
  93. package/dist/docs/guides/jev.html +35 -35
  94. package/dist/docs/guides/mcp-oauth.html +35 -35
  95. package/dist/docs/guides/opentelemetry.html +35 -35
  96. package/dist/docs/guides/slack.html +37 -37
  97. package/dist/docs/guides/slack.md +5 -0
  98. package/dist/docs/guides/webhooks.html +35 -35
  99. package/dist/docs/hashmap.json +1 -1
  100. package/dist/docs/hillclimbing.html +35 -35
  101. package/dist/docs/index.html +35 -35
  102. package/dist/docs/llms-full.txt +198 -92
  103. package/dist/docs/quickstart.html +40 -38
  104. package/dist/docs/quickstart.md +7 -1
  105. package/dist/docs/reference/agent-config.html +35 -35
  106. package/dist/docs/reference/artifacts.html +37 -37
  107. package/dist/docs/reference/artifacts.md +1 -1
  108. package/dist/docs/reference/channels.html +35 -35
  109. package/dist/docs/reference/cli.html +55 -61
  110. package/dist/docs/reference/cli.md +65 -63
  111. package/dist/docs/reference/connections.html +42 -38
  112. package/dist/docs/reference/connections.md +28 -2
  113. package/dist/docs/reference/evals.html +39 -39
  114. package/dist/docs/reference/evals.md +6 -7
  115. package/dist/docs/reference/extensions.html +35 -35
  116. package/dist/docs/reference/hooks.html +35 -35
  117. package/dist/docs/reference/http-api.html +35 -35
  118. package/dist/docs/reference/instructions.html +35 -35
  119. package/dist/docs/reference/playground.html +35 -35
  120. package/dist/docs/reference/project-layout.html +35 -35
  121. package/dist/docs/reference/prompt.html +35 -35
  122. package/dist/docs/reference/schedules.html +35 -35
  123. package/dist/docs/reference/sessions.html +35 -35
  124. package/dist/docs/reference/skills.html +38 -38
  125. package/dist/docs/reference/subagents.html +35 -35
  126. package/dist/docs/reference/tools.html +35 -35
  127. package/dist/docs/templates/agentic-owners.html +35 -35
  128. package/dist/docs/templates/security-reviewer.html +35 -35
  129. package/dist/docs/templates/thermo-quality-review.html +35 -35
  130. package/dist/docs/templates/thermo-review.html +35 -35
  131. package/dist/docs/templates/triage.html +35 -35
  132. package/dist/docs/troubleshooting.html +36 -36
  133. package/dist/docs/troubleshooting.md +7 -3
  134. package/dist/extensions/cursor-grokbot-agents/extension.d.ts +77 -0
  135. package/dist/extensions/cursor-grokbot-agents/extension.d.ts.map +1 -0
  136. package/dist/extensions/cursor-grokbot-agents/extension.js +63 -0
  137. package/dist/extensions/cursor-grokbot-agents/lib/agents.d.ts +11 -0
  138. package/dist/extensions/cursor-grokbot-agents/lib/agents.d.ts.map +1 -0
  139. package/dist/extensions/cursor-grokbot-agents/lib/agents.js +31 -0
  140. package/dist/extensions/cursor-grokbot-agents/lib/backend.d.ts +56 -0
  141. package/dist/extensions/cursor-grokbot-agents/lib/backend.d.ts.map +1 -0
  142. package/dist/extensions/cursor-grokbot-agents/lib/backend.js +158 -0
  143. package/dist/extensions/cursor-grokbot-agents/lib/contacts.d.ts +28 -0
  144. package/dist/extensions/cursor-grokbot-agents/lib/contacts.d.ts.map +1 -0
  145. package/dist/extensions/cursor-grokbot-agents/lib/contacts.js +59 -0
  146. package/dist/extensions/cursor-grokbot-agents/lib/conversation.d.ts +53 -0
  147. package/dist/extensions/cursor-grokbot-agents/lib/conversation.d.ts.map +1 -0
  148. package/dist/extensions/cursor-grokbot-agents/lib/conversation.js +206 -0
  149. package/dist/extensions/cursor-grokbot-agents/lib/inputs.d.ts +4 -0
  150. package/dist/extensions/cursor-grokbot-agents/lib/inputs.d.ts.map +1 -0
  151. package/dist/extensions/cursor-grokbot-agents/lib/inputs.js +15 -0
  152. package/dist/extensions/cursor-grokbot-agents/lib/lock.d.ts +12 -0
  153. package/dist/extensions/cursor-grokbot-agents/lib/lock.d.ts.map +1 -0
  154. package/dist/extensions/cursor-grokbot-agents/lib/lock.js +25 -0
  155. package/dist/extensions/cursor-grokbot-agents/skills/consult.md +40 -0
  156. package/dist/extensions/cursor-grokbot-agents/tools/ask.d.ts +4 -0
  157. package/dist/extensions/cursor-grokbot-agents/tools/ask.d.ts.map +1 -0
  158. package/dist/extensions/cursor-grokbot-agents/tools/ask.js +37 -0
  159. package/dist/extensions/cursor-grokbot-agents/tools/check.d.ts +4 -0
  160. package/dist/extensions/cursor-grokbot-agents/tools/check.d.ts.map +1 -0
  161. package/dist/extensions/cursor-grokbot-agents/tools/check.js +32 -0
  162. package/dist/extensions/cursor-grokbot-agents/tools/interrupt.d.ts +4 -0
  163. package/dist/extensions/cursor-grokbot-agents/tools/interrupt.d.ts.map +1 -0
  164. package/dist/extensions/cursor-grokbot-agents/tools/interrupt.js +24 -0
  165. package/dist/extensions/cursor-grokbot-agents/tools/list.d.ts +4 -0
  166. package/dist/extensions/cursor-grokbot-agents/tools/list.d.ts.map +1 -0
  167. package/dist/extensions/cursor-grokbot-agents/tools/list.js +34 -0
  168. package/dist/internal/cli-ax.d.ts +1 -0
  169. package/dist/internal/cli-ax.d.ts.map +1 -1
  170. package/dist/internal/cli-ax.js +43 -10
  171. package/dist/internal/cli-deploy.d.ts +5 -1
  172. package/dist/internal/cli-deploy.d.ts.map +1 -1
  173. package/dist/internal/cli-deploy.js +22 -4
  174. package/dist/internal/cli-mcp-oauth.d.ts.map +1 -1
  175. package/dist/internal/cli-mcp-oauth.js +2 -1
  176. package/dist/internal/cli-skills.d.ts +1 -1
  177. package/dist/internal/cli-skills.d.ts.map +1 -1
  178. package/dist/internal/cli-skills.js +5 -5
  179. package/dist/internal/connection-env.d.ts +31 -0
  180. package/dist/internal/connection-env.d.ts.map +1 -0
  181. package/dist/internal/connection-env.js +84 -0
  182. package/dist/internal/cursor/backend-client.js +5 -0
  183. package/dist/internal/deploy-client.d.ts +30 -6
  184. package/dist/internal/deploy-client.d.ts.map +1 -1
  185. package/dist/internal/deploy-client.js +45 -9
  186. package/dist/internal/discovery/connections.d.ts.map +1 -1
  187. package/dist/internal/discovery/connections.js +11 -0
  188. package/dist/internal/hosted-delivery-protocol.d.ts +36 -11
  189. package/dist/internal/hosted-delivery-protocol.d.ts.map +1 -1
  190. package/dist/internal/hosted-delivery-protocol.js +31 -8
  191. package/dist/internal/hosted-delivery.d.ts +2 -2
  192. package/dist/internal/hosted-delivery.d.ts.map +1 -1
  193. package/dist/internal/hosted-delivery.js +228 -48
  194. package/dist/internal/hosting.d.ts +2 -2
  195. package/dist/internal/hosting.d.ts.map +1 -1
  196. package/dist/internal/hosting.js +9 -3
  197. package/dist/internal/install-cursor-skills.d.ts +20 -24
  198. package/dist/internal/install-cursor-skills.d.ts.map +1 -1
  199. package/dist/internal/install-cursor-skills.js +50 -48
  200. package/dist/internal/legacy-command-guard.d.ts +2 -0
  201. package/dist/internal/legacy-command-guard.d.ts.map +1 -1
  202. package/dist/internal/legacy-command-guard.js +10 -1
  203. package/dist/internal/mcp-host.d.ts +6 -0
  204. package/dist/internal/mcp-host.d.ts.map +1 -1
  205. package/dist/internal/mcp-host.js +35 -16
  206. package/dist/internal/sdk-runner.d.ts +2 -0
  207. package/dist/internal/sdk-runner.d.ts.map +1 -1
  208. package/dist/internal/sdk-runner.js +10 -0
  209. package/dist/internal/server.d.ts.map +1 -1
  210. package/dist/internal/server.js +11 -1
  211. package/dist/internal/session-engine.d.ts.map +1 -1
  212. package/dist/internal/session-engine.js +9 -5
  213. package/dist/types.d.ts +11 -1
  214. package/dist/types.d.ts.map +1 -1
  215. package/docs/deployment.md +45 -15
  216. package/docs/guides/github.md +34 -0
  217. package/docs/guides/slack.md +5 -0
  218. package/docs/quickstart.md +7 -1
  219. package/docs/reference/artifacts.md +1 -1
  220. package/docs/reference/cli.md +65 -63
  221. package/docs/reference/connections.md +28 -2
  222. package/docs/reference/evals.md +6 -7
  223. package/docs/troubleshooting.md +7 -3
  224. package/package.json +1 -3
  225. package/scripts/install-cursor-skills.mjs +1 -1
  226. package/skills/create-agent/SKILL.md +1 -1
  227. package/skills/debug/SKILL.md +1 -1
  228. package/skills/deploy/SKILL.md +1 -1
  229. package/skills/evals/SKILL.md +1 -1
  230. package/skills/framework-map/SKILL.md +1 -1
  231. package/skills/github/SKILL.md +1 -1
  232. package/skills/hillclimb/SKILL.md +1 -1
  233. package/skills/mcp-auth/SKILL.md +1 -1
  234. package/skills/otel/SKILL.md +1 -1
  235. package/skills/setup-slack/SKILL.md +1 -1
  236. package/src/bin/agent-serve.ts +27 -6
  237. package/src/channels/github/auth.ts +44 -5
  238. package/src/connections.ts +1 -1
  239. package/src/extensions/cursor-grokbot-agents/extension.ts +132 -0
  240. package/src/extensions/cursor-grokbot-agents/lib/agents.ts +42 -0
  241. package/src/extensions/cursor-grokbot-agents/lib/backend.ts +208 -0
  242. package/src/extensions/cursor-grokbot-agents/lib/contacts.ts +74 -0
  243. package/src/extensions/cursor-grokbot-agents/lib/conversation.ts +260 -0
  244. package/src/extensions/cursor-grokbot-agents/lib/inputs.ts +21 -0
  245. package/src/extensions/cursor-grokbot-agents/lib/lock.ts +26 -0
  246. package/src/extensions/cursor-grokbot-agents/skills/consult.md +40 -0
  247. package/src/extensions/cursor-grokbot-agents/tools/ask.ts +32 -0
  248. package/src/extensions/cursor-grokbot-agents/tools/check.ts +25 -0
  249. package/src/extensions/cursor-grokbot-agents/tools/interrupt.ts +17 -0
  250. package/src/extensions/cursor-grokbot-agents/tools/list.ts +26 -0
  251. package/src/internal/cli-ax.ts +52 -7
  252. package/src/internal/cli-deploy.ts +39 -6
  253. package/src/internal/cli-mcp-oauth.ts +2 -1
  254. package/src/internal/cli-skills.ts +4 -5
  255. package/src/internal/connection-env.ts +106 -0
  256. package/src/internal/cursor/backend-client.ts +6 -0
  257. package/src/internal/deploy-client.ts +79 -9
  258. package/src/internal/discovery/connections.ts +11 -0
  259. package/src/internal/hosted-delivery-protocol.ts +57 -20
  260. package/src/internal/hosted-delivery.ts +486 -228
  261. package/src/internal/hosting.ts +10 -3
  262. package/src/internal/install-cursor-skills.ts +56 -53
  263. package/src/internal/legacy-command-guard.ts +13 -1
  264. package/src/internal/mcp-host.ts +45 -17
  265. package/src/internal/sdk-runner.ts +11 -0
  266. package/src/internal/server.ts +13 -1
  267. package/src/internal/session-engine.ts +9 -5
  268. package/src/types.ts +11 -1
  269. package/templates/agents-md/bot/lib/collect.ts +1 -4
  270. package/templates/code-wiki/bot/channels/github.ts +2 -2
  271. package/templates/demo/bot/channels/github.ts +5 -1
  272. package/templates/pr-autofixer/bot/lib/start-drive.ts +4 -4
  273. package/templates/triage/bot/lib/types.ts +6 -6
  274. package/dist/docs/assets/chunks/@localSearchIndexroot.BgTA2tV1.js +0 -1
  275. package/dist/docs/assets/chunks/channel.B2nMEx82.js +0 -1
  276. package/dist/docs/assets/chunks/classDiagram-6PBFFD2Q.D8iCH2ve.js +0 -1
  277. package/dist/docs/assets/chunks/classDiagram-v2-HSJHXN6E.D8iCH2ve.js +0 -1
  278. package/dist/docs/assets/chunks/clone.5XNLjby0.js +0 -1
  279. package/dist/docs/assets/chunks/stateDiagram-v2-QKLJ7IA2.yGM2uLZQ.js +0 -1
  280. package/dist/docs/assets/chunks/wardley-RL74JXVD.DKfyIejL.js +0 -162
  281. package/dist/docs/assets/reference_cli.md.BK2QUH67.js +0 -97
  282. package/dist/docs/assets/reference_cli.md.BK2QUH67.lean.js +0 -1
  283. package/dist/docs/assets/troubleshooting.md.BzZSu1Gz.js +0 -1
  284. /package/dist/docs/assets/{reference_artifacts.md.CFMNPreZ.lean.js → reference_artifacts.md.CQfKq8F2.lean.js} +0 -0
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * `install-skills` — install the package's coding-agent skills into
3
- * `~/.cursor/skills/agentsdk/` without running `init`.
3
+ * `~/.cursor/skills/bdk/` without running `init`.
4
4
  *
5
5
  * Never prompts: running the command is the confirmation. The interactive
6
6
  * offer lives in `init`. Consumer `npm install` / `npx` copies the same
@@ -12,7 +12,6 @@ import { CLI_COMMAND_NAME } from "./distribution.js";
12
12
  import {
13
13
  formatSkillInstall,
14
14
  installCursorSkills,
15
- LEGACY_CURSOR_SKILLS_NAMESPACE,
16
15
  planSkillInstall,
17
16
  type SkillInstallPlan,
18
17
  } from "./install-cursor-skills.js";
@@ -61,7 +60,7 @@ export async function cmdInstallSkills(options: InstallSkillsCliOptions = {}): P
61
60
  return 0;
62
61
  }
63
62
  const action = plan.firstInstall ? "install" : "update";
64
- out(`Would ${action} ${plan.leaves.length} Agent SDK ${noun}\n`);
63
+ out(`Would ${action} ${plan.leaves.length} BDK ${noun}\n`);
65
64
  out(previewBlock(plan));
66
65
  return 0;
67
66
  }
@@ -91,8 +90,8 @@ function previewBlock(plan: SkillInstallPlan): string {
91
90
  if (plan.orphans.length > 0) {
92
91
  lines.push(` removes: ${plan.orphans.join(", ")}`);
93
92
  }
94
- if (plan.hasLegacyNamespace) {
95
- lines.push(` removes: ${LEGACY_CURSOR_SKILLS_NAMESPACE}/ (legacy namespace)`);
93
+ for (const dir of plan.legacyDirs) {
94
+ lines.push(` removes: ${dir}`);
96
95
  }
97
96
  lines.push(` location: ${plan.directory}`);
98
97
  return `${lines.join("\n")}\n`;
@@ -0,0 +1,106 @@
1
+ /**
2
+ * `${NAME}` expansion for MCP connection credentials, applied when a
3
+ * transport is built instead of when its module is imported.
4
+ *
5
+ * Discovery imports `mcp-connections/*.ts` once, at startup. A hosted
6
+ * deployment has none of its secrets in the environment at that point: the
7
+ * control plane binds them per request and `consumeHostedBoundSecrets` copies
8
+ * them into `process.env` at the top of the turn. A `process.env.TOKEN` read
9
+ * inside `defineConnection` therefore captures an empty value for the life of
10
+ * the process, while a `"Bearer ${TOKEN}"` template stays verbatim on the
11
+ * transport and resolves here, each time a client opens.
12
+ */
13
+
14
+ import { createHash } from "node:crypto";
15
+ import type { ConnectionTransport } from "../types.js";
16
+
17
+ /** `${NAME}`, plus the `mcp.json` spelling `${env:NAME}`. */
18
+ const ENV_TEMPLATE = /\$\{(?:env:)?([A-Za-z_][A-Za-z0-9_]*)\}/g;
19
+
20
+ type Env = Record<string, string | undefined>;
21
+
22
+ /** Credential-bearing values of a transport: HTTP headers or stdio env. */
23
+ function credentials(transport: ConnectionTransport): Record<string, string> | undefined {
24
+ if ("url" in transport) {
25
+ return transport.headers;
26
+ }
27
+ if ("command" in transport) {
28
+ return transport.env;
29
+ }
30
+ return undefined;
31
+ }
32
+
33
+ function expand(value: string, env: Env): string {
34
+ return value.replace(ENV_TEMPLATE, (_match, name: string) => env[name] ?? "");
35
+ }
36
+
37
+ /** The same object back when nothing templates, so callers can compare by identity. */
38
+ function expandRecord(
39
+ values: Record<string, string> | undefined,
40
+ env: Env,
41
+ ): Record<string, string> | undefined {
42
+ if (values === undefined) {
43
+ return undefined;
44
+ }
45
+ const expanded: Record<string, string> = {};
46
+ let changed = false;
47
+ for (const [key, value] of Object.entries(values)) {
48
+ expanded[key] = expand(value, env);
49
+ changed ||= expanded[key] !== value;
50
+ }
51
+ return changed ? expanded : values;
52
+ }
53
+
54
+ /**
55
+ * Substitute `${NAME}` in the transport's headers (http/sse) or env (stdio)
56
+ * from the environment as it stands now. An unset variable resolves to an
57
+ * empty string, as reading it in the module would have.
58
+ */
59
+ export function resolveConnectionEnvTemplates<T extends ConnectionTransport>(
60
+ transport: T,
61
+ env: Env = process.env,
62
+ ): T {
63
+ if ("url" in transport) {
64
+ const headers = expandRecord(transport.headers, env);
65
+ return headers === transport.headers ? transport : ({ ...transport, headers } as T);
66
+ }
67
+ if ("command" in transport) {
68
+ const spawnEnv = expandRecord(transport.env, env);
69
+ return spawnEnv === transport.env ? transport : ({ ...transport, env: spawnEnv } as T);
70
+ }
71
+ return transport;
72
+ }
73
+
74
+ /** Variables a transport templates that the environment does not define, in first-seen order. */
75
+ export function unresolvedConnectionEnvNames(
76
+ transport: ConnectionTransport,
77
+ env: Env = process.env,
78
+ ): string[] {
79
+ const missing = new Set<string>();
80
+ for (const value of Object.values(credentials(transport) ?? {})) {
81
+ for (const match of value.matchAll(ENV_TEMPLATE)) {
82
+ const name = match[1];
83
+ if (name !== undefined && env[name] === undefined) {
84
+ missing.add(name);
85
+ }
86
+ }
87
+ }
88
+ return [...missing];
89
+ }
90
+
91
+ /**
92
+ * Identifies the credentials a client would open with right now, so a cached
93
+ * client is recognizable as stale once the environment changes underneath it.
94
+ * Hashed rather than stored, so the cache key is not a second copy of the
95
+ * secret.
96
+ */
97
+ export function connectionCredentialsFingerprint(
98
+ transport: ConnectionTransport,
99
+ env: Env = process.env,
100
+ ): string {
101
+ const resolved = credentials(resolveConnectionEnvTemplates(transport, env));
102
+ if (resolved === undefined) {
103
+ return "";
104
+ }
105
+ return createHash("sha256").update(JSON.stringify(resolved)).digest("hex");
106
+ }
@@ -938,6 +938,12 @@ function describeGithubTokenHttpFailure(
938
938
  detail === undefined ? "" : `: ${detail}`
939
939
  }. Run \`${CLI} login\` again or update CURSOR_API_KEY.`;
940
940
  }
941
+ if (status === 429) {
942
+ const cleaned =
943
+ detail === undefined ? undefined : detail.replace(/\[?resource_exhausted\]?/gi, "").trim();
944
+ const suffix = cleaned === undefined || cleaned === "" ? "" : `: ${cleaned}`;
945
+ return `${label} API rate limit (429)${suffix}. Retry after the rate-limit window.`;
946
+ }
941
947
  if (detail !== undefined) {
942
948
  return detail;
943
949
  }
@@ -372,6 +372,21 @@ export interface AgentkitSessionRuns {
372
372
  startLog: string | null;
373
373
  }
374
374
 
375
+ /** One event from the hosted session event poll. */
376
+ export interface AgentkitSessionEvent {
377
+ index?: number;
378
+ type?: string;
379
+ }
380
+
381
+ /**
382
+ * `GET .../sessions/:sessionId/events?afterEventIndex=` body.
383
+ * Events land before the run log on a long turn.
384
+ */
385
+ export interface AgentkitSessionEventPoll {
386
+ events: AgentkitSessionEvent[];
387
+ execution: { executionId: string; turnStatus: string } | null;
388
+ }
389
+
375
390
  /** One secret's metadata from the list endpoint — names only, never values. */
376
391
  export interface SecretInfo {
377
392
  name: string;
@@ -556,6 +571,25 @@ const agentkitSessionRunsSchema = z
556
571
  })
557
572
  .passthrough();
558
573
 
574
+ const agentkitSessionEventPollSchema = z
575
+ .object({
576
+ events: z.array(
577
+ z
578
+ .object({
579
+ index: z.number().optional(),
580
+ type: z.string().optional(),
581
+ })
582
+ .passthrough(),
583
+ ),
584
+ execution: z
585
+ .object({
586
+ executionId: z.string(),
587
+ turnStatus: z.string(),
588
+ })
589
+ .nullable(),
590
+ })
591
+ .passthrough();
592
+
559
593
  const deploymentSchema = z.object({
560
594
  id: z.number(),
561
595
  slug: z.string(),
@@ -983,26 +1017,44 @@ export class AgentServeDeployClient {
983
1017
  return agentkitEventRepositoriesSchema.parse(raw).repositories;
984
1018
  }
985
1019
 
986
- /**
987
- * Pin a v2 install onto a release
988
- * (`PUT /internal/agentsdk/deployments/:slug/release`), newest ready one
989
- * when neither selector is given. A multi-tenant deploy leaves tenants
990
- * on the release they were installed on.
991
- */
992
1020
  async upgradeAgentkitInstall(args: {
993
1021
  teamId: number;
994
1022
  slug: string;
995
1023
  releaseId?: string;
996
1024
  version?: string;
997
1025
  }): Promise<string> {
1026
+ return this.pinAgentkitInstall("upgrade", args);
1027
+ }
1028
+
1029
+ async rollbackAgentkitInstall(args: {
1030
+ teamId: number;
1031
+ slug: string;
1032
+ releaseId?: string;
1033
+ version?: string;
1034
+ }): Promise<string> {
1035
+ return this.pinAgentkitInstall("rollback", args);
1036
+ }
1037
+
1038
+ private async pinAgentkitInstall(
1039
+ direction: "upgrade" | "rollback",
1040
+ args: {
1041
+ teamId: number;
1042
+ slug: string;
1043
+ releaseId?: string;
1044
+ version?: string;
1045
+ },
1046
+ ): Promise<string> {
998
1047
  const raw = await this.request({
999
- method: "PUT",
1000
- path: `/internal/agentsdk/deployments/${encodeURIComponent(args.slug)}/release?teamId=${args.teamId}`,
1048
+ method: direction === "upgrade" ? "PUT" : "POST",
1049
+ path: `/internal/agentsdk/deployments/${encodeURIComponent(args.slug)}/${direction === "upgrade" ? "release" : "rollback"}?teamId=${args.teamId}`,
1001
1050
  body: {
1002
1051
  ...(args.releaseId === undefined ? {} : { releaseId: args.releaseId }),
1003
1052
  ...(args.version === undefined ? {} : { version: args.version }),
1004
1053
  },
1005
- context: { verb: "upgrade", slug: args.slug },
1054
+ context: {
1055
+ verb: direction === "upgrade" ? "upgrade" : "roll back",
1056
+ slug: args.slug,
1057
+ },
1006
1058
  });
1007
1059
  return agentkitInstallReleaseSchema.parse(raw).releaseId;
1008
1060
  }
@@ -1064,6 +1116,24 @@ export class AgentServeDeployClient {
1064
1116
  return agentkitSessionRunsSchema.parse(raw);
1065
1117
  }
1066
1118
 
1119
+ /** Events written so far. Pass `afterEventIndex: -1` to read from the start. */
1120
+ async getAgentkitSessionEvents(args: {
1121
+ teamId: number;
1122
+ slug: string;
1123
+ sessionId: string;
1124
+ afterEventIndex: number;
1125
+ }): Promise<AgentkitSessionEventPoll> {
1126
+ const raw = await this.request({
1127
+ method: "GET",
1128
+ path:
1129
+ `/internal/agentsdk/deployments/${encodeURIComponent(args.slug)}` +
1130
+ `/sessions/${encodeURIComponent(args.sessionId)}/events` +
1131
+ `?teamId=${args.teamId}&afterEventIndex=${args.afterEventIndex}`,
1132
+ context: { verb: "get session events", slug: args.slug },
1133
+ });
1134
+ return agentkitSessionEventPollSchema.parse(raw);
1135
+ }
1136
+
1067
1137
  async listDeployments(args: { teamId: number }): Promise<Deployment[]> {
1068
1138
  const raw = await this.request({
1069
1139
  method: "GET",
@@ -16,6 +16,7 @@ import {
16
16
  normalizeCursorAccountServers,
17
17
  type ToolEffect,
18
18
  } from "../../types.js";
19
+ import { unresolvedConnectionEnvNames } from "../connection-env.js";
19
20
  import { packageInlineStdioConnection } from "../package-inline-stdio.js";
20
21
  import { type DiscoveryContext, displayPath, errorMessage, isBlank } from "./context.js";
21
22
  import { importDefault, moduleEntries } from "./modules.js";
@@ -424,6 +425,16 @@ export async function compileConnection(
424
425
  });
425
426
  return undefined;
426
427
  }
428
+ // A warning, never an error: templates resolve when the connection opens,
429
+ // and a hosted deployment binds its secrets after discovery has run.
430
+ const unresolved = unresolvedConnectionEnvNames(transport);
431
+ if (unresolved.length > 0) {
432
+ ctx.diagnostics.push({
433
+ severity: "warning",
434
+ path: displayPath(ctx, entryPath),
435
+ message: `MCP connection "${name}" templates ${unresolved.map(variable => `\${${variable}}`).join(", ")}, which the environment does not set. The value resolves when the connection opens, so hosted deployments are fine; locally, set it before the turn or the credential is empty.`,
436
+ });
437
+ }
427
438
  return {
428
439
  name,
429
440
  transport,
@@ -1,3 +1,9 @@
1
+ /**
2
+ * Private control-plane/engine wire contract. Version 2 is unreleased and
3
+ * intentionally strict: unknown fields and modes fail closed. After release,
4
+ * any shape or semantic change must use a new version and a rolling
5
+ * compatibility window. See `docs/agent-serve/hosted-delivery-protocol.md`.
6
+ */
1
7
  export const HOSTED_DELIVERY_PROTOCOL_VERSION = 2;
2
8
  export const HOSTED_DELIVERY_HEADER = "x-agent-sdk-hosted-delivery";
3
9
  export const HOSTED_ADMISSION_PATH = "/v1/internal/hosted-admission";
@@ -251,7 +257,7 @@ export type HostedAdmissionPlatformHandoff = {
251
257
  };
252
258
  };
253
259
 
254
- export type HostedAdmission = {
260
+ export type HostedAdmissionInput = {
255
261
  v: 2;
256
262
  channelId: string;
257
263
  /**
@@ -270,9 +276,20 @@ export type HostedAdmission = {
270
276
  platformHandoff?: HostedAdmissionPlatformHandoff;
271
277
  };
272
278
 
279
+ export type HostedAdmissionStart = HostedAdmissionInput & { mode: "start" };
280
+
281
+ export type HostedAdmissionStatus = {
282
+ v: 2;
283
+ mode: "status";
284
+ deliveryId: string;
285
+ };
286
+
287
+ export type HostedAdmission = HostedAdmissionStart | HostedAdmissionStatus;
288
+
273
289
  export type HostedAdmissionOutcome =
274
290
  | { ok: true; v: 2; outcome: "skip" | "task" }
275
- | { ok: true; v: 2; outcome: "send"; admissionToken: string };
291
+ | { ok: true; v: 2; outcome: "send"; admissionToken: string }
292
+ | { ok: true; v: 2; outcome: "started" | "running" };
276
293
 
277
294
  /**
278
295
  * Cap on delivery IDs an owner execute may report as consumed (primary +
@@ -281,19 +298,19 @@ export type HostedAdmissionOutcome =
281
298
  */
282
299
  export const HOSTED_MAX_CONSUMED_DELIVERY_IDS = 16;
283
300
 
284
- /** Hosted-execution run mode. Omitted/`execute` is the legacy wait path. */
285
- export type HostedExecutionMode = "execute" | "enqueue";
301
+ /** Hosted-execution is unary: start/status for owners, enqueue for guests. */
302
+ export type HostedExecutionMode = "enqueue" | "start" | "status";
286
303
 
287
304
  export type HostedExecution = {
288
305
  v: 2;
289
306
  admissionToken: string;
290
307
  sessionPublicId: string;
291
308
  /**
292
- * `execute` (default when omitted) runs the owner send and waits for the
293
- * coalesce chain. `enqueue` injects into an accepting owner or returns
294
- * `not_active`.
309
+ * `enqueue` injects into an accepting owner or returns `not_active`.
310
+ * `start` launches the owner turn and returns `started` immediately.
311
+ * `status` returns `running` or replays the terminal response.
295
312
  */
296
- mode?: HostedExecutionMode;
313
+ mode: HostedExecutionMode;
297
314
  };
298
315
 
299
316
  export type HostedExecutionOutcome =
@@ -303,16 +320,17 @@ export type HostedExecutionOutcome =
303
320
  outcome: "send";
304
321
  /**
305
322
  * Primary delivery id then accepted enqueue ids; length 1..16.
306
- * Optional for old-guest compatibility; callers must normalize absent
307
- * lists to `[primaryDeliveryId]`.
308
323
  */
309
- consumedDeliveryIds?: string[];
324
+ consumedDeliveryIds: string[];
310
325
  }
311
326
  | { ok: true; v: 2; outcome: "enqueued" }
312
- | { ok: true; v: 2; outcome: "not_active" };
327
+ | { ok: true; v: 2; outcome: "not_active" }
328
+ | { ok: true; v: 2; outcome: "started" }
329
+ | { ok: true; v: 2; outcome: "running" };
313
330
 
314
331
  const DELIVERY_KEYS = new Set([
315
332
  "v",
333
+ "mode",
316
334
  "channelId",
317
335
  "channelKind",
318
336
  "eventType",
@@ -435,10 +453,18 @@ export function parseHostedAdmission(value: unknown): HostedAdmission | undefine
435
453
  return undefined;
436
454
  }
437
455
  const body = value as Record<string, unknown>;
456
+ if (body.mode === "status") {
457
+ return Object.keys(body).every(key => key === "v" || key === "mode" || key === "deliveryId") &&
458
+ body.v === HOSTED_DELIVERY_PROTOCOL_VERSION &&
459
+ boundedString(body.deliveryId, 256)
460
+ ? (body as HostedAdmissionStatus)
461
+ : undefined;
462
+ }
438
463
  if (
439
464
  Object.keys(body).some(key => !DELIVERY_KEYS.has(key)) ||
440
465
  !Object.hasOwn(body, "payload") ||
441
466
  body.v !== HOSTED_DELIVERY_PROTOCOL_VERSION ||
467
+ body.mode !== "start" ||
442
468
  !boundedString(body.channelId, 128) ||
443
469
  !boundedString(body.channelKind, 128) ||
444
470
  !boundedString(body.eventType, 128) ||
@@ -468,7 +494,7 @@ export function parseHostedExecution(value: unknown): HostedExecution | undefine
468
494
  ) {
469
495
  return undefined;
470
496
  }
471
- if (body.mode !== undefined && body.mode !== "execute" && body.mode !== "enqueue") {
497
+ if (body.mode !== "enqueue" && body.mode !== "start" && body.mode !== "status") {
472
498
  return undefined;
473
499
  }
474
500
  return body as HostedExecution;
@@ -501,7 +527,12 @@ export function parseHostedExecutionOutcome(value: unknown): HostedExecutionOutc
501
527
  ) {
502
528
  return undefined;
503
529
  }
504
- if (body.outcome === "enqueued" || body.outcome === "not_active") {
530
+ if (
531
+ body.outcome === "enqueued" ||
532
+ body.outcome === "not_active" ||
533
+ body.outcome === "started" ||
534
+ body.outcome === "running"
535
+ ) {
505
536
  if (body.consumedDeliveryIds !== undefined) {
506
537
  return undefined;
507
538
  }
@@ -510,10 +541,6 @@ export function parseHostedExecutionOutcome(value: unknown): HostedExecutionOutc
510
541
  if (body.outcome !== "send") {
511
542
  return undefined;
512
543
  }
513
- // Old guests omit consumedDeliveryIds; accept and let callers normalize.
514
- if (body.consumedDeliveryIds === undefined) {
515
- return { ok: true, v: 2, outcome: "send" };
516
- }
517
544
  const consumedDeliveryIds = parseConsumedDeliveryIds(body.consumedDeliveryIds);
518
545
  if (consumedDeliveryIds === undefined) {
519
546
  return undefined;
@@ -530,7 +557,7 @@ export function parseHostedExecutionOutcome(value: unknown): HostedExecutionOutc
530
557
  * True when the admission envelope is the reserved internal reminder fire
531
558
  * path (not an authored channel event).
532
559
  */
533
- export function isHostedReminderAdmission(delivery: HostedAdmission): boolean {
560
+ export function isHostedReminderAdmission(delivery: HostedAdmissionInput): boolean {
534
561
  return (
535
562
  delivery.channelKind === HOSTED_REMINDER_CHANNEL_KIND &&
536
563
  delivery.eventType === HOSTED_REMINDER_EVENT_TYPE
@@ -768,20 +795,30 @@ export function parseHostedReminderFireDescriptorPayload(
768
795
  };
769
796
  }
770
797
 
798
+ const HOSTED_ADMISSION_OUTCOME_KEYS = new Set(["ok", "v", "outcome", "admissionToken"]);
799
+
771
800
  export function parseHostedAdmissionOutcome(value: unknown): HostedAdmissionOutcome | undefined {
772
801
  if (typeof value !== "object" || value === null || Array.isArray(value)) {
773
802
  return undefined;
774
803
  }
775
804
  const body = value as Record<string, unknown>;
776
805
  if (
806
+ Object.keys(body).some(key => !HOSTED_ADMISSION_OUTCOME_KEYS.has(key)) ||
777
807
  body.ok !== true ||
778
808
  body.v !== HOSTED_DELIVERY_PROTOCOL_VERSION ||
779
- (body.outcome !== "skip" && body.outcome !== "send" && body.outcome !== "task")
809
+ (body.outcome !== "skip" &&
810
+ body.outcome !== "send" &&
811
+ body.outcome !== "task" &&
812
+ body.outcome !== "started" &&
813
+ body.outcome !== "running")
780
814
  ) {
781
815
  return undefined;
782
816
  }
783
817
  if (body.outcome === "send" && !boundedString(body.admissionToken, 128)) {
784
818
  return undefined;
785
819
  }
820
+ if (body.outcome !== "send" && Object.hasOwn(body, "admissionToken")) {
821
+ return undefined;
822
+ }
786
823
  return body as HostedAdmissionOutcome;
787
824
  }