@cursor/bdk 0.2.1 → 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 (336) hide show
  1. package/AGENTS.md +1 -1
  2. package/README.md +1 -6
  3. package/dist/artifacts.d.ts +5 -2
  4. package/dist/artifacts.d.ts.map +1 -1
  5. package/dist/artifacts.js +5 -2
  6. package/dist/bin/agent-serve.js +23 -7
  7. package/dist/channels/github/auth.d.ts.map +1 -1
  8. package/dist/channels/github/auth.js +36 -5
  9. package/dist/channels/slack/manifest.d.ts.map +1 -1
  10. package/dist/channels/slack/manifest.js +3 -2
  11. package/dist/channels/slack/types.d.ts +6 -1
  12. package/dist/channels/slack/types.d.ts.map +1 -1
  13. package/dist/connections.d.ts +1 -1
  14. package/dist/connections.js +1 -1
  15. package/dist/docs/404.html +2 -2
  16. package/dist/docs/assets/{app.JVQvbRO-.js → app.BOIHhrKi.js} +4 -4
  17. package/dist/docs/assets/chunks/@localSearchIndexroot.D5L-b34G.js +1 -0
  18. package/dist/docs/assets/chunks/{VPLocalSearchBox.BkhY63uW.js → VPLocalSearchBox.D49zVZqM.js} +1 -1
  19. package/dist/docs/assets/chunks/{arc.Cc1unYd3.js → arc.hmjb-sc4.js} +1 -1
  20. package/dist/docs/assets/chunks/{architectureDiagram-Q4EWVU46.CAY_TPVz.js → architectureDiagram-Q4EWVU46.CxEI1KqM.js} +1 -1
  21. package/dist/docs/assets/chunks/{baseUniq.my2VD3Xm.js → baseUniq.DHHvBWoV.js} +1 -1
  22. package/dist/docs/assets/chunks/{blockDiagram-DXYQGD6D.CQXAOmqd.js → blockDiagram-DXYQGD6D.DnXW-3bu.js} +1 -1
  23. package/dist/docs/assets/chunks/{c4Diagram-AHTNJAMY.D0AsQFSX.js → c4Diagram-AHTNJAMY.e-47O2jM.js} +1 -1
  24. package/dist/docs/assets/chunks/channel.BbOGaJQP.js +1 -0
  25. package/dist/docs/assets/chunks/{chunk-4BX2VUAB.DZjhgNls.js → chunk-4BX2VUAB.3ry4pYXB.js} +1 -1
  26. package/dist/docs/assets/chunks/{chunk-4TB4RGXK.qdcp_qbo.js → chunk-4TB4RGXK.DGIZFRx6.js} +1 -1
  27. package/dist/docs/assets/chunks/{chunk-55IACEB6.BHXoZhJ-.js → chunk-55IACEB6.DKBnqg9U.js} +1 -1
  28. package/dist/docs/assets/chunks/{chunk-EDXVE4YY.Cds_Vwj3.js → chunk-EDXVE4YY.BIU8Ue5k.js} +1 -1
  29. package/dist/docs/assets/chunks/{chunk-FMBD7UC4.CSl0HknT.js → chunk-FMBD7UC4.DP-TFhjI.js} +1 -1
  30. package/dist/docs/assets/chunks/{chunk-OYMX7WX6.DJMvAt5N.js → chunk-OYMX7WX6.Ux0OYj5v.js} +1 -1
  31. package/dist/docs/assets/chunks/{chunk-QZHKN3VN.BYQzBK9D.js → chunk-QZHKN3VN.BzHMwYox.js} +1 -1
  32. package/dist/docs/assets/chunks/{chunk-YZCP3GAM.BAvw7N4o.js → chunk-YZCP3GAM.D4OGAsSP.js} +1 -1
  33. package/dist/docs/assets/chunks/classDiagram-6PBFFD2Q.Db58HCb1.js +1 -0
  34. package/dist/docs/assets/chunks/classDiagram-v2-HSJHXN6E.Db58HCb1.js +1 -0
  35. package/dist/docs/assets/chunks/clone.Co4MBflG.js +1 -0
  36. package/dist/docs/assets/chunks/{cose-bilkent-S5V4N54A.Buf3seya.js → cose-bilkent-S5V4N54A.Jq_7BUNx.js} +1 -1
  37. package/dist/docs/assets/chunks/{dagre-KV5264BT.DMGGa3uA.js → dagre-KV5264BT.Di-skR2x.js} +1 -1
  38. package/dist/docs/assets/chunks/{diagram-5BDNPKRD.DDjnwRmY.js → diagram-5BDNPKRD.DeREHIdH.js} +1 -1
  39. package/dist/docs/assets/chunks/{diagram-G4DWMVQ6.RwyrIr8Q.js → diagram-G4DWMVQ6.C7Kcqxro.js} +1 -1
  40. package/dist/docs/assets/chunks/{diagram-MMDJMWI5.DRvQV16Z.js → diagram-MMDJMWI5.BK3eohyo.js} +1 -1
  41. package/dist/docs/assets/chunks/{diagram-TYMM5635.Dw8W9BTk.js → diagram-TYMM5635.C6TyymXT.js} +1 -1
  42. package/dist/docs/assets/chunks/{erDiagram-SMLLAGMA.DQT1Hnwf.js → erDiagram-SMLLAGMA.DYGG-gGx.js} +1 -1
  43. package/dist/docs/assets/chunks/{flowDiagram-DWJPFMVM.6_Aky-ut.js → flowDiagram-DWJPFMVM.C9nBcSV4.js} +1 -1
  44. package/dist/docs/assets/chunks/{ganttDiagram-T4ZO3ILL.DHIwqnqN.js → ganttDiagram-T4ZO3ILL.wAg_ymsp.js} +1 -1
  45. package/dist/docs/assets/chunks/{gitGraphDiagram-UUTBAWPF.CGd_eJbn.js → gitGraphDiagram-UUTBAWPF.B87j9Oeg.js} +1 -1
  46. package/dist/docs/assets/chunks/{graph.ChMEylkh.js → graph.CuFMj31w.js} +1 -1
  47. package/dist/docs/assets/chunks/{infoDiagram-42DDH7IO.Cd4gMyAz.js → infoDiagram-42DDH7IO.P_mLGumP.js} +1 -1
  48. package/dist/docs/assets/chunks/{ishikawaDiagram-UXIWVN3A.D1uw7MXq.js → ishikawaDiagram-UXIWVN3A.DyuL_MsT.js} +1 -1
  49. package/dist/docs/assets/chunks/{journeyDiagram-VCZTEJTY.AWLXtelc.js → journeyDiagram-VCZTEJTY.CtP09IoJ.js} +1 -1
  50. package/dist/docs/assets/chunks/{kanban-definition-6JOO6SKY.CagPhAn5.js → kanban-definition-6JOO6SKY.BoeSYPZo.js} +1 -1
  51. package/dist/docs/assets/chunks/{layout.ClTBBkE_.js → layout.B0lMMtNo.js} +1 -1
  52. package/dist/docs/assets/chunks/{linear.SwS2rOLA.js → linear.HxRBiAFX.js} +1 -1
  53. package/dist/docs/assets/chunks/{min.By_x-Btb.js → min.BGlFFHwS.js} +1 -1
  54. package/dist/docs/assets/chunks/{mindmap-definition-QFDTVHPH.By_RAMaP.js → mindmap-definition-QFDTVHPH.JyLBD9M8.js} +1 -1
  55. package/dist/docs/assets/chunks/{pieDiagram-DEJITSTG.DfAl9sy4.js → pieDiagram-DEJITSTG.DnSmNZF8.js} +1 -1
  56. package/dist/docs/assets/chunks/{quadrantDiagram-34T5L4WZ.CNuqFRBj.js → quadrantDiagram-34T5L4WZ.CUCnbfCa.js} +1 -1
  57. package/dist/docs/assets/chunks/{requirementDiagram-MS252O5E.DJ5CmTCl.js → requirementDiagram-MS252O5E.py0IVUn5.js} +1 -1
  58. package/dist/docs/assets/chunks/{sankeyDiagram-XADWPNL6.D-T_AKJj.js → sankeyDiagram-XADWPNL6.Bkc-HWYp.js} +1 -1
  59. package/dist/docs/assets/chunks/{sequenceDiagram-FGHM5R23.BRn9WcrR.js → sequenceDiagram-FGHM5R23.Dqn8Mlv2.js} +1 -1
  60. package/dist/docs/assets/chunks/{stateDiagram-FHFEXIEX.F12urmm7.js → stateDiagram-FHFEXIEX.JikkoQUU.js} +1 -1
  61. package/dist/docs/assets/chunks/stateDiagram-v2-QKLJ7IA2.CMsKhrW0.js +1 -0
  62. package/dist/docs/assets/chunks/{theme.zK3OJa_C.js → theme.b6HQ6zG_.js} +2 -2
  63. package/dist/docs/assets/chunks/{timeline-definition-GMOUNBTQ.B7GiQBeC.js → timeline-definition-GMOUNBTQ.BvpSXiBj.js} +1 -1
  64. package/dist/docs/assets/chunks/{vennDiagram-DHZGUBPP.D0niwuY_.js → vennDiagram-DHZGUBPP.CU7MVnZx.js} +1 -1
  65. package/dist/docs/assets/chunks/{wardley-RL74JXVD.1zhHNRsx.js → wardley-RL74JXVD.BKwC4ctG.js} +1 -1
  66. package/dist/docs/assets/chunks/{wardleyDiagram-NUSXRM2D.DKaqpT7K.js → wardleyDiagram-NUSXRM2D.BfaF6Uhe.js} +1 -1
  67. package/dist/docs/assets/chunks/{xychartDiagram-5P7HB3ND.e8BPicch.js → xychartDiagram-5P7HB3ND.Bg5dcpj4.js} +1 -1
  68. package/dist/docs/assets/{deployment.md.nGo1yIsa.js → deployment.md.BJ8i7Q6p.js} +5 -8
  69. package/dist/docs/assets/{deployment.md.nGo1yIsa.lean.js → deployment.md.BJ8i7Q6p.lean.js} +1 -1
  70. package/dist/docs/assets/{guides_github.md.C2_DSWlE.js → guides_github.md.Bq9kQU9B.js} +9 -3
  71. package/dist/docs/assets/{guides_github.md.C2_DSWlE.lean.js → guides_github.md.Bq9kQU9B.lean.js} +1 -1
  72. package/dist/docs/assets/{guides_slack.md.ZbHQETOT.js → guides_slack.md.diqqXTTm.js} +2 -2
  73. package/dist/docs/assets/{guides_slack.md.ZbHQETOT.lean.js → guides_slack.md.diqqXTTm.lean.js} +1 -1
  74. package/dist/docs/assets/{quickstart.md.wG4shE1f.js → quickstart.md.CHpHPBUN.js} +5 -3
  75. package/dist/docs/assets/{quickstart.md.wG4shE1f.lean.js → quickstart.md.CHpHPBUN.lean.js} +1 -1
  76. package/dist/docs/assets/{reference_artifacts.md.IFFC5Zln.js → reference_artifacts.md.CQfKq8F2.js} +1 -1
  77. package/dist/docs/assets/reference_cli.md.DgeLTO18.js +91 -0
  78. package/dist/docs/assets/reference_cli.md.DgeLTO18.lean.js +1 -0
  79. package/dist/docs/assets/{reference_connections.md._XpKiOaF.js → reference_connections.md.COq--gAm.js} +7 -3
  80. package/dist/docs/assets/{reference_connections.md._XpKiOaF.lean.js → reference_connections.md.COq--gAm.lean.js} +1 -1
  81. package/dist/docs/assets/{reference_evals.md.DqNyHMA6.js → reference_evals.md.CJm3uCUm.js} +4 -4
  82. package/dist/docs/assets/{reference_evals.md.DqNyHMA6.lean.js → reference_evals.md.CJm3uCUm.lean.js} +1 -1
  83. package/dist/docs/assets/{reference_hooks.md.Dg3dEugd.js → reference_hooks.md.DbthhtIR.js} +1 -1
  84. package/dist/docs/assets/{reference_sessions.md.BtpTjZmh.js → reference_sessions.md.DeRUItHD.js} +1 -1
  85. package/dist/docs/assets/troubleshooting.md.Cw5PKa3t.js +1 -0
  86. package/dist/docs/assets/{troubleshooting.md.BzZSu1Gz.lean.js → troubleshooting.md.Cw5PKa3t.lean.js} +1 -1
  87. package/dist/docs/building-with-agents.html +35 -35
  88. package/dist/docs/deployment.html +40 -43
  89. package/dist/docs/deployment.md +45 -15
  90. package/dist/docs/evals.html +35 -35
  91. package/dist/docs/guides/agent-to-agent.html +35 -35
  92. package/dist/docs/guides/bitbucket.html +35 -35
  93. package/dist/docs/guides/cloud-agents.html +35 -35
  94. package/dist/docs/guides/convert-automation.html +35 -35
  95. package/dist/docs/guides/github.html +43 -37
  96. package/dist/docs/guides/github.md +34 -0
  97. package/dist/docs/guides/gitlab.html +35 -35
  98. package/dist/docs/guides/grokbot-agents.html +35 -35
  99. package/dist/docs/guides/hooks.html +35 -35
  100. package/dist/docs/guides/improve.html +35 -35
  101. package/dist/docs/guides/jev.html +35 -35
  102. package/dist/docs/guides/mcp-oauth.html +35 -35
  103. package/dist/docs/guides/opentelemetry.html +35 -35
  104. package/dist/docs/guides/slack.html +37 -37
  105. package/dist/docs/guides/slack.md +5 -0
  106. package/dist/docs/guides/webhooks.html +35 -35
  107. package/dist/docs/hashmap.json +1 -1
  108. package/dist/docs/hillclimbing.html +35 -35
  109. package/dist/docs/index.html +35 -35
  110. package/dist/docs/llms-full.txt +205 -97
  111. package/dist/docs/quickstart.html +40 -38
  112. package/dist/docs/quickstart.md +7 -1
  113. package/dist/docs/reference/agent-config.html +35 -35
  114. package/dist/docs/reference/artifacts.html +37 -37
  115. package/dist/docs/reference/artifacts.md +1 -1
  116. package/dist/docs/reference/channels.html +35 -35
  117. package/dist/docs/reference/cli.html +55 -61
  118. package/dist/docs/reference/cli.md +65 -63
  119. package/dist/docs/reference/connections.html +42 -38
  120. package/dist/docs/reference/connections.md +28 -2
  121. package/dist/docs/reference/evals.html +39 -39
  122. package/dist/docs/reference/evals.md +6 -7
  123. package/dist/docs/reference/extensions.html +35 -35
  124. package/dist/docs/reference/hooks.html +37 -37
  125. package/dist/docs/reference/hooks.md +3 -2
  126. package/dist/docs/reference/http-api.html +35 -35
  127. package/dist/docs/reference/instructions.html +35 -35
  128. package/dist/docs/reference/playground.html +35 -35
  129. package/dist/docs/reference/project-layout.html +35 -35
  130. package/dist/docs/reference/prompt.html +35 -35
  131. package/dist/docs/reference/schedules.html +35 -35
  132. package/dist/docs/reference/sessions.html +36 -36
  133. package/dist/docs/reference/sessions.md +4 -3
  134. package/dist/docs/reference/skills.html +35 -35
  135. package/dist/docs/reference/subagents.html +35 -35
  136. package/dist/docs/reference/tools.html +35 -35
  137. package/dist/docs/templates/agentic-owners.html +35 -35
  138. package/dist/docs/templates/security-reviewer.html +35 -35
  139. package/dist/docs/templates/thermo-quality-review.html +35 -35
  140. package/dist/docs/templates/thermo-review.html +35 -35
  141. package/dist/docs/templates/triage.html +35 -35
  142. package/dist/docs/troubleshooting.html +36 -36
  143. package/dist/docs/troubleshooting.md +7 -3
  144. package/dist/extensions/cursor-cloud-agents/extension.d.ts +16 -4
  145. package/dist/extensions/cursor-cloud-agents/extension.d.ts.map +1 -1
  146. package/dist/extensions/cursor-cloud-agents/extension.js +7 -3
  147. package/dist/extensions/cursor-cloud-agents/lib/channels.d.ts +3 -0
  148. package/dist/extensions/cursor-cloud-agents/lib/channels.d.ts.map +1 -0
  149. package/dist/extensions/cursor-cloud-agents/lib/channels.js +7 -0
  150. package/dist/extensions/cursor-cloud-agents/lib/repos.d.ts +4 -2
  151. package/dist/extensions/cursor-cloud-agents/lib/repos.d.ts.map +1 -1
  152. package/dist/extensions/cursor-cloud-agents/lib/repos.js +21 -12
  153. package/dist/extensions/cursor-cloud-agents/tools/cancel.d.ts.map +1 -1
  154. package/dist/extensions/cursor-cloud-agents/tools/cancel.js +2 -0
  155. package/dist/extensions/cursor-cloud-agents/tools/launch.d.ts.map +1 -1
  156. package/dist/extensions/cursor-cloud-agents/tools/launch.js +3 -1
  157. package/dist/extensions/cursor-cloud-agents/tools/reply.d.ts.map +1 -1
  158. package/dist/extensions/cursor-cloud-agents/tools/reply.js +2 -0
  159. package/dist/extensions/cursor-grokbot-agents/extension.d.ts +77 -0
  160. package/dist/extensions/cursor-grokbot-agents/extension.d.ts.map +1 -0
  161. package/dist/extensions/cursor-grokbot-agents/extension.js +63 -0
  162. package/dist/extensions/cursor-grokbot-agents/lib/agents.d.ts +11 -0
  163. package/dist/extensions/cursor-grokbot-agents/lib/agents.d.ts.map +1 -0
  164. package/dist/extensions/cursor-grokbot-agents/lib/agents.js +31 -0
  165. package/dist/extensions/cursor-grokbot-agents/lib/backend.d.ts +56 -0
  166. package/dist/extensions/cursor-grokbot-agents/lib/backend.d.ts.map +1 -0
  167. package/dist/extensions/cursor-grokbot-agents/lib/backend.js +158 -0
  168. package/dist/extensions/cursor-grokbot-agents/lib/contacts.d.ts +28 -0
  169. package/dist/extensions/cursor-grokbot-agents/lib/contacts.d.ts.map +1 -0
  170. package/dist/extensions/cursor-grokbot-agents/lib/contacts.js +59 -0
  171. package/dist/extensions/cursor-grokbot-agents/lib/conversation.d.ts +53 -0
  172. package/dist/extensions/cursor-grokbot-agents/lib/conversation.d.ts.map +1 -0
  173. package/dist/extensions/cursor-grokbot-agents/lib/conversation.js +206 -0
  174. package/dist/extensions/cursor-grokbot-agents/lib/inputs.d.ts +4 -0
  175. package/dist/extensions/cursor-grokbot-agents/lib/inputs.d.ts.map +1 -0
  176. package/dist/extensions/cursor-grokbot-agents/lib/inputs.js +15 -0
  177. package/dist/extensions/cursor-grokbot-agents/lib/lock.d.ts +12 -0
  178. package/dist/extensions/cursor-grokbot-agents/lib/lock.d.ts.map +1 -0
  179. package/dist/extensions/cursor-grokbot-agents/lib/lock.js +25 -0
  180. package/dist/extensions/cursor-grokbot-agents/skills/consult.md +40 -0
  181. package/dist/extensions/cursor-grokbot-agents/tools/ask.d.ts +4 -0
  182. package/dist/extensions/cursor-grokbot-agents/tools/ask.d.ts.map +1 -0
  183. package/dist/extensions/cursor-grokbot-agents/tools/ask.js +37 -0
  184. package/dist/extensions/cursor-grokbot-agents/tools/check.d.ts +4 -0
  185. package/dist/extensions/cursor-grokbot-agents/tools/check.d.ts.map +1 -0
  186. package/dist/extensions/cursor-grokbot-agents/tools/check.js +32 -0
  187. package/dist/extensions/cursor-grokbot-agents/tools/interrupt.d.ts +4 -0
  188. package/dist/extensions/cursor-grokbot-agents/tools/interrupt.d.ts.map +1 -0
  189. package/dist/extensions/cursor-grokbot-agents/tools/interrupt.js +24 -0
  190. package/dist/extensions/cursor-grokbot-agents/tools/list.d.ts +4 -0
  191. package/dist/extensions/cursor-grokbot-agents/tools/list.d.ts.map +1 -0
  192. package/dist/extensions/cursor-grokbot-agents/tools/list.js +34 -0
  193. package/dist/files-backends/cursor-hosted.js +4 -4
  194. package/dist/internal/artifacts-store.d.ts +12 -2
  195. package/dist/internal/artifacts-store.d.ts.map +1 -1
  196. package/dist/internal/artifacts-store.js +8 -4
  197. package/dist/internal/cli-ax.d.ts +1 -0
  198. package/dist/internal/cli-ax.d.ts.map +1 -1
  199. package/dist/internal/cli-ax.js +43 -10
  200. package/dist/internal/cli-deploy.d.ts +5 -1
  201. package/dist/internal/cli-deploy.d.ts.map +1 -1
  202. package/dist/internal/cli-deploy.js +22 -4
  203. package/dist/internal/cli-mcp-oauth.d.ts.map +1 -1
  204. package/dist/internal/cli-mcp-oauth.js +2 -1
  205. package/dist/internal/cli-skills.d.ts +1 -1
  206. package/dist/internal/cli-skills.d.ts.map +1 -1
  207. package/dist/internal/cli-skills.js +5 -5
  208. package/dist/internal/connection-env.d.ts +31 -0
  209. package/dist/internal/connection-env.d.ts.map +1 -0
  210. package/dist/internal/connection-env.js +84 -0
  211. package/dist/internal/cursor/backend-client.js +5 -0
  212. package/dist/internal/deploy-client.d.ts +30 -6
  213. package/dist/internal/deploy-client.d.ts.map +1 -1
  214. package/dist/internal/deploy-client.js +45 -9
  215. package/dist/internal/discovery/connections.d.ts.map +1 -1
  216. package/dist/internal/discovery/connections.js +11 -0
  217. package/dist/internal/event-mapper.d.ts +46 -4
  218. package/dist/internal/event-mapper.d.ts.map +1 -1
  219. package/dist/internal/event-mapper.js +316 -25
  220. package/dist/internal/hosted-delivery-protocol.d.ts +36 -11
  221. package/dist/internal/hosted-delivery-protocol.d.ts.map +1 -1
  222. package/dist/internal/hosted-delivery-protocol.js +31 -8
  223. package/dist/internal/hosted-delivery.d.ts +2 -2
  224. package/dist/internal/hosted-delivery.d.ts.map +1 -1
  225. package/dist/internal/hosted-delivery.js +229 -49
  226. package/dist/internal/hosting.d.ts +2 -2
  227. package/dist/internal/hosting.d.ts.map +1 -1
  228. package/dist/internal/hosting.js +9 -3
  229. package/dist/internal/install-cursor-skills.d.ts +20 -24
  230. package/dist/internal/install-cursor-skills.d.ts.map +1 -1
  231. package/dist/internal/install-cursor-skills.js +50 -48
  232. package/dist/internal/legacy-command-guard.d.ts +2 -0
  233. package/dist/internal/legacy-command-guard.d.ts.map +1 -1
  234. package/dist/internal/legacy-command-guard.js +10 -1
  235. package/dist/internal/mcp-host.d.ts +6 -0
  236. package/dist/internal/mcp-host.d.ts.map +1 -1
  237. package/dist/internal/mcp-host.js +35 -16
  238. package/dist/internal/sdk-runner.d.ts +2 -0
  239. package/dist/internal/sdk-runner.d.ts.map +1 -1
  240. package/dist/internal/sdk-runner.js +10 -0
  241. package/dist/internal/server.d.ts.map +1 -1
  242. package/dist/internal/server.js +11 -1
  243. package/dist/internal/session-engine.d.ts +1 -1
  244. package/dist/internal/session-engine.d.ts.map +1 -1
  245. package/dist/internal/session-engine.js +33 -8
  246. package/dist/playground/assets/index-6BbTPnaT.css +1 -0
  247. package/dist/playground/assets/{index-FFdUqTt_.js → index-CI7FAmOP.js} +43 -43
  248. package/dist/playground/index.html +2 -2
  249. package/dist/types.d.ts +50 -4
  250. package/dist/types.d.ts.map +1 -1
  251. package/docs/deployment.md +45 -15
  252. package/docs/guides/github.md +34 -0
  253. package/docs/guides/slack.md +5 -0
  254. package/docs/quickstart.md +7 -1
  255. package/docs/reference/artifacts.md +1 -1
  256. package/docs/reference/cli.md +65 -63
  257. package/docs/reference/connections.md +28 -2
  258. package/docs/reference/evals.md +6 -7
  259. package/docs/reference/hooks.md +3 -2
  260. package/docs/reference/sessions.md +4 -3
  261. package/docs/troubleshooting.md +7 -3
  262. package/package.json +2 -4
  263. package/scripts/install-cursor-skills.mjs +1 -1
  264. package/skills/create-agent/SKILL.md +1 -1
  265. package/skills/debug/SKILL.md +1 -1
  266. package/skills/deploy/SKILL.md +1 -1
  267. package/skills/evals/SKILL.md +1 -1
  268. package/skills/framework-map/SKILL.md +1 -1
  269. package/skills/github/SKILL.md +1 -1
  270. package/skills/hillclimb/SKILL.md +1 -1
  271. package/skills/mcp-auth/SKILL.md +1 -1
  272. package/skills/otel/SKILL.md +1 -1
  273. package/skills/setup-slack/SKILL.md +1 -1
  274. package/src/artifacts.ts +5 -2
  275. package/src/bin/agent-serve.ts +27 -6
  276. package/src/channels/github/auth.ts +44 -5
  277. package/src/channels/slack/manifest.ts +2 -1
  278. package/src/channels/slack/types.ts +6 -1
  279. package/src/connections.ts +1 -1
  280. package/src/extensions/cursor-cloud-agents/extension.ts +23 -6
  281. package/src/extensions/cursor-cloud-agents/lib/channels.ts +11 -0
  282. package/src/extensions/cursor-cloud-agents/lib/repos.ts +19 -7
  283. package/src/extensions/cursor-cloud-agents/tools/cancel.ts +2 -0
  284. package/src/extensions/cursor-cloud-agents/tools/launch.ts +3 -1
  285. package/src/extensions/cursor-cloud-agents/tools/reply.ts +2 -0
  286. package/src/extensions/cursor-grokbot-agents/extension.ts +132 -0
  287. package/src/extensions/cursor-grokbot-agents/lib/agents.ts +42 -0
  288. package/src/extensions/cursor-grokbot-agents/lib/backend.ts +208 -0
  289. package/src/extensions/cursor-grokbot-agents/lib/contacts.ts +74 -0
  290. package/src/extensions/cursor-grokbot-agents/lib/conversation.ts +260 -0
  291. package/src/extensions/cursor-grokbot-agents/lib/inputs.ts +21 -0
  292. package/src/extensions/cursor-grokbot-agents/lib/lock.ts +26 -0
  293. package/src/extensions/cursor-grokbot-agents/skills/consult.md +40 -0
  294. package/src/extensions/cursor-grokbot-agents/tools/ask.ts +32 -0
  295. package/src/extensions/cursor-grokbot-agents/tools/check.ts +25 -0
  296. package/src/extensions/cursor-grokbot-agents/tools/interrupt.ts +17 -0
  297. package/src/extensions/cursor-grokbot-agents/tools/list.ts +26 -0
  298. package/src/files-backends/cursor-hosted.ts +4 -4
  299. package/src/internal/artifacts-store.ts +14 -3
  300. package/src/internal/cli-ax.ts +52 -7
  301. package/src/internal/cli-deploy.ts +39 -6
  302. package/src/internal/cli-mcp-oauth.ts +2 -1
  303. package/src/internal/cli-skills.ts +4 -5
  304. package/src/internal/connection-env.ts +106 -0
  305. package/src/internal/cursor/backend-client.ts +6 -0
  306. package/src/internal/deploy-client.ts +79 -9
  307. package/src/internal/discovery/connections.ts +11 -0
  308. package/src/internal/event-mapper.ts +367 -36
  309. package/src/internal/hosted-delivery-protocol.ts +57 -20
  310. package/src/internal/hosted-delivery.ts +487 -229
  311. package/src/internal/hosting.ts +10 -3
  312. package/src/internal/install-cursor-skills.ts +56 -53
  313. package/src/internal/legacy-command-guard.ts +13 -1
  314. package/src/internal/mcp-host.ts +45 -17
  315. package/src/internal/sdk-runner.ts +11 -0
  316. package/src/internal/server.ts +13 -1
  317. package/src/internal/session-engine.ts +33 -13
  318. package/src/types.ts +56 -5
  319. package/templates/agents-md/bot/lib/collect.ts +1 -4
  320. package/templates/code-wiki/bot/channels/github.ts +2 -2
  321. package/templates/demo/bot/channels/github.ts +5 -1
  322. package/templates/pr-autofixer/bot/lib/start-drive.ts +4 -4
  323. package/templates/triage/bot/lib/types.ts +6 -6
  324. package/dist/docs/assets/chunks/@localSearchIndexroot.Caw9W1pM.js +0 -1
  325. package/dist/docs/assets/chunks/channel.Sapo9HJZ.js +0 -1
  326. package/dist/docs/assets/chunks/classDiagram-6PBFFD2Q.NPiy3Hz7.js +0 -1
  327. package/dist/docs/assets/chunks/classDiagram-v2-HSJHXN6E.NPiy3Hz7.js +0 -1
  328. package/dist/docs/assets/chunks/clone.zl2qolPE.js +0 -1
  329. package/dist/docs/assets/chunks/stateDiagram-v2-QKLJ7IA2._auCa3fR.js +0 -1
  330. package/dist/docs/assets/reference_cli.md.BK2QUH67.js +0 -97
  331. package/dist/docs/assets/reference_cli.md.BK2QUH67.lean.js +0 -1
  332. package/dist/docs/assets/troubleshooting.md.BzZSu1Gz.js +0 -1
  333. package/dist/playground/assets/index-BMV_IcEE.css +0 -1
  334. /package/dist/docs/assets/{reference_artifacts.md.IFFC5Zln.lean.js → reference_artifacts.md.CQfKq8F2.lean.js} +0 -0
  335. /package/dist/docs/assets/{reference_hooks.md.Dg3dEugd.lean.js → reference_hooks.md.DbthhtIR.lean.js} +0 -0
  336. /package/dist/docs/assets/{reference_sessions.md.BtpTjZmh.lean.js → reference_sessions.md.DeRUItHD.lean.js} +0 -0
@@ -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 declare const HOSTED_DELIVERY_PROTOCOL_VERSION = 2;
2
8
  export declare const HOSTED_DELIVERY_HEADER = "x-agent-sdk-hosted-delivery";
3
9
  export declare const HOSTED_ADMISSION_PATH = "/v1/internal/hosted-admission";
@@ -109,7 +115,7 @@ export type HostedAdmissionPlatformHandoff = {
109
115
  streamed: false;
110
116
  };
111
117
  };
112
- export type HostedAdmission = {
118
+ export type HostedAdmissionInput = {
113
119
  v: 2;
114
120
  channelId: string;
115
121
  /**
@@ -127,6 +133,15 @@ export type HostedAdmission = {
127
133
  /** Present only when control-plane Slack fast-act posted a placeholder. */
128
134
  platformHandoff?: HostedAdmissionPlatformHandoff;
129
135
  };
136
+ export type HostedAdmissionStart = HostedAdmissionInput & {
137
+ mode: "start";
138
+ };
139
+ export type HostedAdmissionStatus = {
140
+ v: 2;
141
+ mode: "status";
142
+ deliveryId: string;
143
+ };
144
+ export type HostedAdmission = HostedAdmissionStart | HostedAdmissionStatus;
130
145
  export type HostedAdmissionOutcome = {
131
146
  ok: true;
132
147
  v: 2;
@@ -136,6 +151,10 @@ export type HostedAdmissionOutcome = {
136
151
  v: 2;
137
152
  outcome: "send";
138
153
  admissionToken: string;
154
+ } | {
155
+ ok: true;
156
+ v: 2;
157
+ outcome: "started" | "running";
139
158
  };
140
159
  /**
141
160
  * Cap on delivery IDs an owner execute may report as consumed (primary +
@@ -143,18 +162,18 @@ export type HostedAdmissionOutcome = {
143
162
  * `not_active`.
144
163
  */
145
164
  export declare const HOSTED_MAX_CONSUMED_DELIVERY_IDS = 16;
146
- /** Hosted-execution run mode. Omitted/`execute` is the legacy wait path. */
147
- export type HostedExecutionMode = "execute" | "enqueue";
165
+ /** Hosted-execution is unary: start/status for owners, enqueue for guests. */
166
+ export type HostedExecutionMode = "enqueue" | "start" | "status";
148
167
  export type HostedExecution = {
149
168
  v: 2;
150
169
  admissionToken: string;
151
170
  sessionPublicId: string;
152
171
  /**
153
- * `execute` (default when omitted) runs the owner send and waits for the
154
- * coalesce chain. `enqueue` injects into an accepting owner or returns
155
- * `not_active`.
172
+ * `enqueue` injects into an accepting owner or returns `not_active`.
173
+ * `start` launches the owner turn and returns `started` immediately.
174
+ * `status` returns `running` or replays the terminal response.
156
175
  */
157
- mode?: HostedExecutionMode;
176
+ mode: HostedExecutionMode;
158
177
  };
159
178
  export type HostedExecutionOutcome = {
160
179
  ok: true;
@@ -162,10 +181,8 @@ export type HostedExecutionOutcome = {
162
181
  outcome: "send";
163
182
  /**
164
183
  * Primary delivery id then accepted enqueue ids; length 1..16.
165
- * Optional for old-guest compatibility; callers must normalize absent
166
- * lists to `[primaryDeliveryId]`.
167
184
  */
168
- consumedDeliveryIds?: string[];
185
+ consumedDeliveryIds: string[];
169
186
  } | {
170
187
  ok: true;
171
188
  v: 2;
@@ -174,6 +191,14 @@ export type HostedExecutionOutcome = {
174
191
  ok: true;
175
192
  v: 2;
176
193
  outcome: "not_active";
194
+ } | {
195
+ ok: true;
196
+ v: 2;
197
+ outcome: "started";
198
+ } | {
199
+ ok: true;
200
+ v: 2;
201
+ outcome: "running";
177
202
  };
178
203
  export declare const HOSTED_PLATFORM_HANDOFF_KEYS: ReadonlySet<string>;
179
204
  export declare const HOSTED_SLACK_PLACEHOLDER_HANDOFF_KEYS: ReadonlySet<string>;
@@ -184,7 +209,7 @@ export declare function parseHostedExecutionOutcome(value: unknown): HostedExecu
184
209
  * True when the admission envelope is the reserved internal reminder fire
185
210
  * path (not an authored channel event).
186
211
  */
187
- export declare function isHostedReminderAdmission(delivery: HostedAdmission): boolean;
212
+ export declare function isHostedReminderAdmission(delivery: HostedAdmissionInput): boolean;
188
213
  /**
189
214
  * Parse `{ reminderId, fireCount }` from a reserved reminder admission
190
215
  * payload. Rejects unknown keys and non-integer fireCount.
@@ -1 +1 @@
1
- {"version":3,"file":"hosted-delivery-protocol.d.ts","sourceRoot":"","sources":["../../src/internal/hosted-delivery-protocol.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"hosted-delivery-protocol.d.ts","sourceRoot":"","sources":["../../src/internal/hosted-delivery-protocol.ts"],"names":[],"mappings":"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"}
@@ -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";
@@ -118,6 +124,7 @@ export const HOSTED_REMINDER_EVENT_TYPE = "agent-sdk.reminder/fire";
118
124
  export const HOSTED_MAX_CONSUMED_DELIVERY_IDS = 16;
119
125
  const DELIVERY_KEYS = new Set([
120
126
  "v",
127
+ "mode",
121
128
  "channelId",
122
129
  "channelKind",
123
130
  "eventType",
@@ -222,9 +229,17 @@ export function parseHostedAdmission(value) {
222
229
  return undefined;
223
230
  }
224
231
  const body = value;
232
+ if (body.mode === "status") {
233
+ return Object.keys(body).every(key => key === "v" || key === "mode" || key === "deliveryId") &&
234
+ body.v === HOSTED_DELIVERY_PROTOCOL_VERSION &&
235
+ boundedString(body.deliveryId, 256)
236
+ ? body
237
+ : undefined;
238
+ }
225
239
  if (Object.keys(body).some(key => !DELIVERY_KEYS.has(key)) ||
226
240
  !Object.hasOwn(body, "payload") ||
227
241
  body.v !== HOSTED_DELIVERY_PROTOCOL_VERSION ||
242
+ body.mode !== "start" ||
228
243
  !boundedString(body.channelId, 128) ||
229
244
  !boundedString(body.channelKind, 128) ||
230
245
  !boundedString(body.eventType, 128) ||
@@ -250,7 +265,7 @@ export function parseHostedExecution(value) {
250
265
  !/^ses_[a-f0-9]{24}$/.test(body.sessionPublicId)) {
251
266
  return undefined;
252
267
  }
253
- if (body.mode !== undefined && body.mode !== "execute" && body.mode !== "enqueue") {
268
+ if (body.mode !== "enqueue" && body.mode !== "start" && body.mode !== "status") {
254
269
  return undefined;
255
270
  }
256
271
  return body;
@@ -278,7 +293,10 @@ export function parseHostedExecutionOutcome(value) {
278
293
  body.v !== HOSTED_DELIVERY_PROTOCOL_VERSION) {
279
294
  return undefined;
280
295
  }
281
- if (body.outcome === "enqueued" || body.outcome === "not_active") {
296
+ if (body.outcome === "enqueued" ||
297
+ body.outcome === "not_active" ||
298
+ body.outcome === "started" ||
299
+ body.outcome === "running") {
282
300
  if (body.consumedDeliveryIds !== undefined) {
283
301
  return undefined;
284
302
  }
@@ -287,10 +305,6 @@ export function parseHostedExecutionOutcome(value) {
287
305
  if (body.outcome !== "send") {
288
306
  return undefined;
289
307
  }
290
- // Old guests omit consumedDeliveryIds; accept and let callers normalize.
291
- if (body.consumedDeliveryIds === undefined) {
292
- return { ok: true, v: 2, outcome: "send" };
293
- }
294
308
  const consumedDeliveryIds = parseConsumedDeliveryIds(body.consumedDeliveryIds);
295
309
  if (consumedDeliveryIds === undefined) {
296
310
  return undefined;
@@ -499,18 +513,27 @@ export function parseHostedReminderFireDescriptorPayload(value) {
499
513
  }
500
514
  return Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({ protocolVersion: 1, id: body.id, fireCount: body.fireCount, generation: body.generation, purpose: body.purpose, channelId: body.channelId, continuationToken: body.continuationToken }, (target === undefined ? {} : { target })), { scheduleKind: body.scheduleKind, scheduleValue: body.scheduleValue }), (body.intervalMs === undefined ? {} : { intervalMs: body.intervalMs })), (body.prompt === undefined ? {} : { prompt: body.prompt })), (body.handler === undefined ? {} : { handler: body.handler })), (args === undefined ? {} : { args })), { hasRunHandler: body.hasRunHandler, hasUntilFn: body.hasUntilFn }), (body.untilPrompt === undefined ? {} : { untilPrompt: body.untilPrompt })), { busyPolicy: body.busyPolicy, nextFireAtMs: body.nextFireAtMs, claimedAtMs: body.claimedAtMs });
501
515
  }
516
+ const HOSTED_ADMISSION_OUTCOME_KEYS = new Set(["ok", "v", "outcome", "admissionToken"]);
502
517
  export function parseHostedAdmissionOutcome(value) {
503
518
  if (typeof value !== "object" || value === null || Array.isArray(value)) {
504
519
  return undefined;
505
520
  }
506
521
  const body = value;
507
- if (body.ok !== true ||
522
+ if (Object.keys(body).some(key => !HOSTED_ADMISSION_OUTCOME_KEYS.has(key)) ||
523
+ body.ok !== true ||
508
524
  body.v !== HOSTED_DELIVERY_PROTOCOL_VERSION ||
509
- (body.outcome !== "skip" && body.outcome !== "send" && body.outcome !== "task")) {
525
+ (body.outcome !== "skip" &&
526
+ body.outcome !== "send" &&
527
+ body.outcome !== "task" &&
528
+ body.outcome !== "started" &&
529
+ body.outcome !== "running")) {
510
530
  return undefined;
511
531
  }
512
532
  if (body.outcome === "send" && !boundedString(body.admissionToken, 128)) {
513
533
  return undefined;
514
534
  }
535
+ if (body.outcome !== "send" && Object.hasOwn(body, "admissionToken")) {
536
+ return undefined;
537
+ }
515
538
  return body;
516
539
  }
@@ -1,12 +1,12 @@
1
1
  import type { ChannelHandlerArgs, SendMessageOptions } from "../types.js";
2
2
  import { type HostedBoundSecretsResult } from "./cursor/hosted-bound-secrets.js";
3
3
  import { type GuestNetworkWaitResult } from "./guest-network.js";
4
- import { type HostedAdmission, type HostedReminderFireDescriptorPayload } from "./hosted-delivery-protocol.js";
4
+ import { type HostedAdmissionInput, type HostedReminderFireDescriptorPayload } from "./hosted-delivery-protocol.js";
5
5
  import type { LogRingEntry } from "./log-ring.js";
6
6
  import type { Router } from "./router.js";
7
7
  import type { SessionRunExecutionWrite } from "./session-run-log.js";
8
8
  type DispatchInput = {
9
- delivery: HostedAdmission;
9
+ delivery: HostedAdmissionInput;
10
10
  definition: object;
11
11
  args: ChannelHandlerArgs;
12
12
  };
@@ -1 +1 @@
1
- {"version":3,"file":"hosted-delivery.d.ts","sourceRoot":"","sources":["../../src/internal/hosted-delivery.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"hosted-delivery.d.ts","sourceRoot":"","sources":["../../src/internal/hosted-delivery.ts"],"names":[],"mappings":"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"}
@@ -26,6 +26,29 @@ import { endActiveHttpSpan } from "./otel/http.js";
26
26
  import { ReminderValidationError, UnknownReminderError } from "./reminder-runner.js";
27
27
  import { mapThrownRequestError, statusForThrownRequestError } from "./request-error-status.js";
28
28
  import { HostedEnqueueNotActiveError } from "./session-engine.js";
29
+ function responseToReply(response) {
30
+ return __awaiter(this, void 0, void 0, function* () {
31
+ var _a;
32
+ const value = (yield response.json());
33
+ if (typeof value !== "object" || value === null || Array.isArray(value)) {
34
+ throw new Error("Hosted delivery produced a non-object JSON response.");
35
+ }
36
+ return {
37
+ status: response.status,
38
+ body: value,
39
+ serverTiming: (_a = response.headers.get("server-timing")) !== null && _a !== void 0 ? _a : undefined,
40
+ };
41
+ });
42
+ }
43
+ function responseFromReply(reply) {
44
+ return Response.json(reply.body, {
45
+ status: reply.status,
46
+ headers: reply.serverTiming === undefined ? undefined : { "server-timing": reply.serverTiming },
47
+ });
48
+ }
49
+ function isTransientRetryReply(reply) {
50
+ return reply.body.retry === HOSTED_GUEST_RETRY_TRANSIENT;
51
+ }
29
52
  /**
30
53
  * A second `send()` in one delivery is a deterministic authored bug — the
31
54
  * wire protocol carries exactly one pending send per delivery — so it must
@@ -49,6 +72,23 @@ function boundedMessage(text) {
49
72
  ? `${text.slice(0, MAX_ERROR_MESSAGE_LENGTH)}…`
50
73
  : text;
51
74
  }
75
+ /**
76
+ * A channel's non-OK dispatch response body is the only record of why the
77
+ * delivery was refused (e.g. an authored 400 with a validation message).
78
+ * Carry it, bounded, into the terminal channel_dispatch_failed so the
79
+ * control plane's failure log is diagnosable.
80
+ */
81
+ function channelDispatchDetail(response) {
82
+ return __awaiter(this, void 0, void 0, function* () {
83
+ try {
84
+ const text = (yield response.text()).trim();
85
+ return text === "" ? undefined : boundedMessage(text);
86
+ }
87
+ catch (_a) {
88
+ return undefined;
89
+ }
90
+ });
91
+ }
52
92
  function terminalHostedError(status, error, message) {
53
93
  return hostedGuestErrorResponse({
54
94
  status,
@@ -231,7 +271,7 @@ function runAdmission(input, adapter) {
231
271
  }
232
272
  if (!dispatched.ok) {
233
273
  return {
234
- response: terminalHostedError(dispatched.status >= 400 ? dispatched.status : 502, "channel_dispatch_failed"),
274
+ response: terminalHostedError(dispatched.status >= 400 ? dispatched.status : 502, "channel_dispatch_failed", yield channelDispatchDetail(dispatched)),
235
275
  };
236
276
  }
237
277
  try {
@@ -333,8 +373,11 @@ function logGuestNetworkWait(phase, stats) {
333
373
  export function registerHostedDeliveryRoute(input) {
334
374
  var _a, _b;
335
375
  const pending = new Map();
376
+ const admissions = new Map();
336
377
  const activeOwners = new Map();
337
378
  const pendingTtlMs = 10 * 60000;
379
+ /** Keep an in-flight owner turn addressable for status polls. */
380
+ const ownerTurnPendingTtlMs = 12 * 60 * 60000;
338
381
  const waitForNetwork = (_a = input.waitForGuestNetwork) !== null && _a !== void 0 ? _a : (() => waitForGuestNetworkReady());
339
382
  const consumeBoundSecrets = (_b = input.consumeBoundSecrets) !== null && _b !== void 0 ? _b : (() => consumeHostedBoundSecrets());
340
383
  /**
@@ -375,8 +418,58 @@ export function registerHostedDeliveryRoute(input) {
375
418
  pending.delete(token);
376
419
  }
377
420
  }
421
+ for (const [deliveryId, operation] of admissions) {
422
+ if (operation.expiresAt <= now) {
423
+ admissions.delete(deliveryId);
424
+ }
425
+ }
378
426
  };
379
- // Hosted callers reach this only through AnyRun's signed pod-port URL.
427
+ const runAdmissionOperation = (delivery, definition) => __awaiter(this, void 0, void 0, function* () {
428
+ return afterHostedWork(input.flushOtel, () => __awaiter(this, void 0, void 0, function* () {
429
+ const startedAt = performance.now();
430
+ let guestNetwork;
431
+ const finish = (response) => withServerTiming(response, performance.now() - startedAt, guestNetwork);
432
+ try {
433
+ const network = yield finishNetworkWait("admission");
434
+ guestNetwork = network.timing;
435
+ if (network.response !== undefined) {
436
+ return yield responseToReply(finish(network.response));
437
+ }
438
+ if (isHostedReminderAdmission(delivery)) {
439
+ return yield responseToReply(finish(yield dispatchHostedReminderAdmission(input, delivery)));
440
+ }
441
+ if (definition === undefined) {
442
+ return yield responseToReply(finish(terminalHostedError(404, "channel_not_found", `No channel named "${delivery.channelId}" is mounted.`)));
443
+ }
444
+ const admitted = yield dispatchHostedAdmission({
445
+ delivery,
446
+ definition,
447
+ args: input.buildHandlerArgs(delivery.channelId),
448
+ });
449
+ if (admitted.pendingSend === undefined) {
450
+ return yield responseToReply(finish(admitted.response));
451
+ }
452
+ pruneExpired();
453
+ const admissionToken = randomBytes(24).toString("hex");
454
+ pending.set(admissionToken, {
455
+ send: admitted.pendingSend,
456
+ channelKind: delivery.channelKind,
457
+ expiresAt: Date.now() + pendingTtlMs,
458
+ deliveryId: delivery.deliveryId,
459
+ });
460
+ return yield responseToReply(finish(Response.json({
461
+ ok: true,
462
+ v: HOSTED_DELIVERY_PROTOCOL_VERSION,
463
+ outcome: "send",
464
+ admissionToken,
465
+ })));
466
+ }
467
+ catch (error) {
468
+ return yield responseToReply(finish(terminalHostedError(503, "internal_error", boundedMessage(error instanceof Error ? error.message : String(error)))));
469
+ }
470
+ }));
471
+ });
472
+ // Hosted callers reach this only through Anyrun's signed pod-port URL.
380
473
  // The marker is a second, route-specific fence distinct from channel auth.
381
474
  const auth = request => {
382
475
  if (request.headers.get(HOSTED_DELIVERY_HEADER) !== "1") {
@@ -394,9 +487,9 @@ export function registerHostedDeliveryRoute(input) {
394
487
  auth: [auth],
395
488
  handler: (request) => __awaiter(this, void 0, void 0, function* () {
396
489
  return afterHostedWork(input.flushOtel, () => __awaiter(this, void 0, void 0, function* () {
490
+ var _a;
397
491
  const startedAt = performance.now();
398
- let guestNetwork;
399
- const finish = (response) => withServerTiming(response, performance.now() - startedAt, guestNetwork);
492
+ const finish = (response) => withServerTiming(response, performance.now() - startedAt);
400
493
  const unconsumed = finishBoundSecrets();
401
494
  if (unconsumed !== undefined) {
402
495
  return finish(unconsumed);
@@ -412,46 +505,65 @@ export function registerHostedDeliveryRoute(input) {
412
505
  console.info(`[agent-sdk] hosted admission rejected: envelope failed to parse keys=${JSON.stringify(rawKeys)} hasManagedAutomation=${String(rawKeys.includes("managedAutomation"))}`);
413
506
  return finish(terminalHostedError(400, "invalid_hosted_admission", "Expected a supported Agent SDK hosted-admission envelope."));
414
507
  }
415
- console.info(`[agent-sdk] hosted admission received deliveryId=${delivery.deliveryId} channelId=${delivery.channelId} channelKind=${delivery.channelKind} eventType=${delivery.eventType} sessionMode=${delivery.sessionMode} managedAutomation=${delivery.managedAutomation === undefined ? "<absent>" : `automationUuid=${delivery.managedAutomation.automationUuid} mcpServerNames=${String(delivery.managedAutomation.mcpServerNames.length)} slackChannels=${delivery.managedAutomation.slackChannels === undefined ? "<absent>" : JSON.stringify(delivery.managedAutomation.slackChannels)}`}`);
416
- recordHostedManagedAutomation(delivery);
417
- if (isHostedReminderAdmission(delivery)) {
418
- const network = yield finishNetworkWait("admission");
419
- guestNetwork = network.timing;
420
- if (network.response !== undefined) {
421
- return finish(network.response);
508
+ pruneExpired();
509
+ const existing = admissions.get(delivery.deliveryId);
510
+ if (delivery.mode === "status") {
511
+ if (existing === undefined) {
512
+ return finish(transientHostedError(409, "hosted_admission_unavailable", "No hosted admission is in flight for this delivery."));
422
513
  }
423
- return finish(yield dispatchHostedReminderAdmission(input, delivery));
514
+ return existing.settledReply === undefined
515
+ ? finish(Response.json({
516
+ ok: true,
517
+ v: HOSTED_DELIVERY_PROTOCOL_VERSION,
518
+ outcome: "running",
519
+ }))
520
+ : responseFromReply(existing.settledReply);
424
521
  }
425
- const channel = input.channels.find(candidate => candidate.id === delivery.channelId);
426
- if (channel === undefined) {
427
- return finish(terminalHostedError(404, "channel_not_found", `No channel named "${delivery.channelId}" is mounted.`));
522
+ if (existing !== undefined) {
523
+ if (existing.settledReply !== undefined && isTransientRetryReply(existing.settledReply)) {
524
+ admissions.delete(delivery.deliveryId);
525
+ }
526
+ else {
527
+ return existing.settledReply === undefined
528
+ ? finish(Response.json({
529
+ ok: true,
530
+ v: HOSTED_DELIVERY_PROTOCOL_VERSION,
531
+ outcome: "started",
532
+ }))
533
+ : responseFromReply(existing.settledReply);
534
+ }
428
535
  }
429
- const network = yield finishNetworkWait("admission");
430
- guestNetwork = network.timing;
431
- if (network.response !== undefined) {
432
- return finish(network.response);
536
+ console.info(`[agent-sdk] hosted admission received deliveryId=${delivery.deliveryId} channelId=${delivery.channelId} channelKind=${delivery.channelKind} eventType=${delivery.eventType} sessionMode=${delivery.sessionMode} managedAutomation=${delivery.managedAutomation === undefined ? "<absent>" : `automationUuid=${delivery.managedAutomation.automationUuid} mcpServerNames=${String(delivery.managedAutomation.mcpServerNames.length)} slackChannels=${delivery.managedAutomation.slackChannels === undefined ? "<absent>" : JSON.stringify(delivery.managedAutomation.slackChannels)}`}`);
537
+ recordHostedManagedAutomation(delivery);
538
+ const reminder = isHostedReminderAdmission(delivery);
539
+ const definition = reminder
540
+ ? undefined
541
+ : (_a = input.channels.find(candidate => candidate.id === delivery.channelId)) === null || _a === void 0 ? void 0 : _a.definition;
542
+ if (!reminder && definition === undefined) {
543
+ return finish(terminalHostedError(404, "channel_not_found", `No channel named "${delivery.channelId}" is mounted.`));
433
544
  }
434
- const admitted = yield dispatchHostedAdmission({
435
- delivery,
436
- definition: channel.definition,
437
- args: input.buildHandlerArgs(delivery.channelId),
545
+ let operation;
546
+ const execution = runAdmissionOperation(delivery, definition).then(reply => {
547
+ operation.settledReply = reply;
548
+ operation.expiresAt = Date.now() + pendingTtlMs;
549
+ return reply;
438
550
  });
439
- if (admitted.pendingSend === undefined) {
440
- return finish(admitted.response);
551
+ operation = {
552
+ execution,
553
+ expiresAt: Date.now() + ownerTurnPendingTtlMs,
554
+ };
555
+ admissions.set(delivery.deliveryId, operation);
556
+ const quickReply = yield Promise.race([
557
+ execution,
558
+ new Promise(resolve => setImmediate(() => resolve(undefined))),
559
+ ]);
560
+ if (quickReply !== undefined) {
561
+ return responseFromReply(quickReply);
441
562
  }
442
- pruneExpired();
443
- const admissionToken = randomBytes(24).toString("hex");
444
- pending.set(admissionToken, {
445
- send: admitted.pendingSend,
446
- channelKind: delivery.channelKind,
447
- expiresAt: Date.now() + pendingTtlMs,
448
- deliveryId: delivery.deliveryId,
449
- });
450
563
  return finish(Response.json({
451
564
  ok: true,
452
565
  v: HOSTED_DELIVERY_PROTOCOL_VERSION,
453
- outcome: "send",
454
- admissionToken,
566
+ outcome: "started",
455
567
  }));
456
568
  }));
457
569
  }),
@@ -484,13 +596,40 @@ export function registerHostedDeliveryRoute(input) {
484
596
  admitted.sessionPublicId !== execution.sessionPublicId) {
485
597
  return finish(transientHostedError(409, "hosted_admission_session_mismatch", "The hosted admission token is already bound to another session."));
486
598
  }
487
- const network = yield finishNetworkWait("execution");
488
- guestNetwork = network.timing;
489
- if (network.response !== undefined) {
490
- return finish(network.response);
599
+ if (execution.mode === "start" &&
600
+ admitted.settledReply !== undefined &&
601
+ isTransientRetryReply(admitted.settledReply)) {
602
+ delete admitted.settledReply;
603
+ delete admitted.execution;
604
+ }
605
+ if (execution.mode === "status" ||
606
+ (execution.mode === "start" && admitted.execution !== undefined)) {
607
+ if (admitted.settledReply !== undefined) {
608
+ return responseFromReply(admitted.settledReply);
609
+ }
610
+ if (admitted.execution === undefined) {
611
+ return finish(transientHostedError(409, "hosted_admission_unavailable", "The hosted admission token has no owner turn in flight."));
612
+ }
613
+ if (execution.mode === "start") {
614
+ return finish(Response.json({
615
+ ok: true,
616
+ v: HOSTED_DELIVERY_PROTOCOL_VERSION,
617
+ outcome: "started",
618
+ }));
619
+ }
620
+ return finish(Response.json({
621
+ ok: true,
622
+ v: HOSTED_DELIVERY_PROTOCOL_VERSION,
623
+ outcome: "running",
624
+ }));
491
625
  }
492
626
  admitted.sessionPublicId = execution.sessionPublicId;
493
627
  if (execution.mode === "enqueue") {
628
+ const network = yield finishNetworkWait("execution");
629
+ guestNetwork = network.timing;
630
+ if (network.response !== undefined) {
631
+ return finish(network.response);
632
+ }
494
633
  const enqueueOutcome = yield enqueueIntoActiveOwner({
495
634
  activeOwners,
496
635
  sessionPublicId: execution.sessionPublicId,
@@ -500,7 +639,15 @@ export function registerHostedDeliveryRoute(input) {
500
639
  });
501
640
  return finish(Response.json(Object.assign({ ok: true, v: HOSTED_DELIVERY_PROTOCOL_VERSION }, enqueueOutcome)));
502
641
  }
503
- (_a = admitted.execution) !== null && _a !== void 0 ? _a : (admitted.execution = (() => __awaiter(this, void 0, void 0, function* () {
642
+ if (admitted.execution === undefined) {
643
+ admitted.expiresAt = Date.now() + ownerTurnPendingTtlMs;
644
+ }
645
+ (_a = admitted.execution) !== null && _a !== void 0 ? _a : (admitted.execution = afterHostedWork(input.flushOtel, () => __awaiter(this, void 0, void 0, function* () {
646
+ const network = yield finishNetworkWait("execution");
647
+ guestNetwork = network.timing;
648
+ if (network.response !== undefined) {
649
+ return yield responseToReply(finish(network.response));
650
+ }
504
651
  const startedAt = performance.now();
505
652
  const executionId = hostedExecutionDiagId(execution.admissionToken);
506
653
  const sinks = Object.assign(Object.assign(Object.assign(Object.assign({}, (input.stateRoot === undefined ? {} : { stateRoot: input.stateRoot })), (input.persistSessionRun === undefined
@@ -512,10 +659,10 @@ export function registerHostedDeliveryRoute(input) {
512
659
  : hostedFailureClassification(fields.failureCode);
513
660
  yield flushHostedExecutionRecord(sinks, Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({ executionId, sessionPublicId: execution.sessionPublicId, sessionId: fields.sessionId, turnStatus: fields.turnStatus, durationMs: Math.max(0, Math.round(performance.now() - startedAt)) }, (fields.message === undefined ? {} : { message: fields.message })), (fields.abortReason === undefined ? {} : { abortReason: fields.abortReason })), { failureCode: fields.failureCode }), (fields.errorCode === undefined ? {} : { errorCode: fields.errorCode })), { classification }), (fields.error === undefined ? {} : { error: fields.error })));
514
661
  });
515
- // Claim the file before the turn runs. The host reads it after its
516
- // own POST returns, which for a 9-minute timeout is while this turn
517
- // is still going; without this marker that read would surface the
518
- // PREVIOUS delivery's terminal record as if it were this one's.
662
+ // Claim the file before the turn runs. If a later status request
663
+ // fails, the host reads this record while the turn may still be
664
+ // running; the marker prevents it from surfacing the previous
665
+ // delivery's terminal record.
519
666
  yield writeDiag({
520
667
  sessionId: "",
521
668
  turnStatus: HOSTED_EXECUTION_DIAG_RUNNING_STATUS,
@@ -562,7 +709,10 @@ export function registerHostedDeliveryRoute(input) {
562
709
  // survive the park just like a finished turn's.
563
710
  yield (_a = input.drainSessionDurability) === null || _a === void 0 ? void 0 : _a.call(input, session.id);
564
711
  drainAt = hostedExecutionNow();
565
- const consumedDeliveryIds = [owner.primaryDeliveryId, ...owner.acceptedDeliveryIds];
712
+ const consumedDeliveryIds = [
713
+ owner.primaryDeliveryId,
714
+ ...owner.acceptedDeliveryIds,
715
+ ];
566
716
  if (consumedDeliveryIds.length > HOSTED_MAX_CONSUMED_DELIVERY_IDS) {
567
717
  throw new Error(`hosted execute consumedDeliveryIds length ${String(consumedDeliveryIds.length)} exceeds cap ${String(HOSTED_MAX_CONSUMED_DELIVERY_IDS)}`);
568
718
  }
@@ -597,7 +747,7 @@ export function registerHostedDeliveryRoute(input) {
597
747
  drainAt,
598
748
  endedAt: hostedExecutionNow(),
599
749
  });
600
- return reply;
750
+ return yield responseToReply(finish(Response.json(reply.body, { status: reply.status })));
601
751
  }
602
752
  catch (error) {
603
753
  owner.accepting = false;
@@ -623,9 +773,39 @@ export function registerHostedDeliveryRoute(input) {
623
773
  }
624
774
  }
625
775
  }));
626
- }))());
627
- const reply = yield admitted.execution;
628
- return finish(Response.json(reply.body, { status: reply.status }));
776
+ })).then(reply => {
777
+ admitted.settledReply = reply;
778
+ admitted.expiresAt = Date.now() + pendingTtlMs;
779
+ return reply;
780
+ }, error => {
781
+ admitted.settledReply = {
782
+ status: 503,
783
+ body: {
784
+ ok: false,
785
+ error: "internal_error",
786
+ retry: HOSTED_GUEST_RETRY_TERMINAL,
787
+ classification: hostedFailureClassification("internal_error"),
788
+ message: error instanceof Error ? error.message : String(error),
789
+ },
790
+ };
791
+ admitted.expiresAt = Date.now() + pendingTtlMs;
792
+ return admitted.settledReply;
793
+ }));
794
+ if (execution.mode === "start") {
795
+ const quickReply = yield Promise.race([
796
+ admitted.execution,
797
+ new Promise(resolve => setImmediate(() => resolve(undefined))),
798
+ ]);
799
+ if (quickReply !== undefined) {
800
+ return responseFromReply(quickReply);
801
+ }
802
+ return finish(Response.json({
803
+ ok: true,
804
+ v: HOSTED_DELIVERY_PROTOCOL_VERSION,
805
+ outcome: "started",
806
+ }));
807
+ }
808
+ return finish(terminalHostedError(400, "invalid_hosted_execution", "Owner execution requires start or status mode."));
629
809
  }));
630
810
  }),
631
811
  });