@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
@@ -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,7 +418,57 @@ 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
  };
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
+ });
379
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 => {
@@ -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
  });
@@ -6,8 +6,8 @@
6
6
  * backend stays authoritative — these exist so mistakes fail fast and
7
7
  * locally with the same grammar the server enforces.
8
8
  */
9
- /** `hosting.egressDomains` cap (backend caps the deploy body at 20). */
10
- export declare const MAX_EGRESS_DOMAINS = 20;
9
+ /** `hosting.egressDomains` cap (the manifest schema and deploy body agree). */
10
+ export declare const MAX_EGRESS_DOMAINS = 64;
11
11
  /** Max secrets per deployment. */
12
12
  export declare const MAX_SECRETS = 32;
13
13
  /** Max secret value size in bytes. */
@@ -1 +1 @@
1
- {"version":3,"file":"hosting.d.ts","sourceRoot":"","sources":["../../src/internal/hosting.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,wEAAwE;AACxE,eAAO,MAAM,kBAAkB,KAAK,CAAC;AACrC,kCAAkC;AAClC,eAAO,MAAM,WAAW,KAAK,CAAC;AAC9B,sCAAsC;AACtC,eAAO,MAAM,sBAAsB,OAAO,CAAC;AAC3C,8BAA8B;AAC9B,eAAO,MAAM,sBAAsB,KAAK,CAAC;AACzC,mEAAmE;AACnE,eAAO,MAAM,2BAA2B,YAAY,CAAC;AACrD,oEAAoE;AACpE,eAAO,MAAM,oBAAoB,MAAM,CAAC;AACxC,sDAAsD;AACtD,eAAO,MAAM,yBAAyB,EAAE,MAA+B,CAAC;AAIxE,gFAAgF;AAChF,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAK3E;AAED;;;;;GAKG;AACH,eAAO,MAAM,oCAAoC,YAAI,2BAA2B,CAAU,CAAC;AAQ3F,4EAA4E;AAC5E,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAKvE;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAQnE;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAQ1D;AAED;;;GAGG;AACH,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAS3E;AAID,sEAAsE;AACtE,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAE5D"}
1
+ {"version":3,"file":"hosting.d.ts","sourceRoot":"","sources":["../../src/internal/hosting.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,+EAA+E;AAC/E,eAAO,MAAM,kBAAkB,KAAK,CAAC;AACrC,kCAAkC;AAClC,eAAO,MAAM,WAAW,KAAK,CAAC;AAC9B,sCAAsC;AACtC,eAAO,MAAM,sBAAsB,OAAO,CAAC;AAC3C,8BAA8B;AAC9B,eAAO,MAAM,sBAAsB,KAAK,CAAC;AACzC,mEAAmE;AACnE,eAAO,MAAM,2BAA2B,YAAY,CAAC;AACrD,oEAAoE;AACpE,eAAO,MAAM,oBAAoB,MAAM,CAAC;AACxC,sDAAsD;AACtD,eAAO,MAAM,yBAAyB,EAAE,MAA+B,CAAC;AAIxE,gFAAgF;AAChF,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAK3E;AAED;;;;;GAKG;AACH,eAAO,MAAM,oCAAoC,YAAI,2BAA2B,CAAU,CAAC;AAW3F,4EAA4E;AAC5E,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CASvE;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAQnE;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAQ1D;AAED;;;GAGG;AACH,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAS3E;AAID,sEAAsE;AACtE,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAE5D"}
@@ -6,8 +6,8 @@
6
6
  * backend stays authoritative — these exist so mistakes fail fast and
7
7
  * locally with the same grammar the server enforces.
8
8
  */
9
- /** `hosting.egressDomains` cap (backend caps the deploy body at 20). */
10
- export const MAX_EGRESS_DOMAINS = 20;
9
+ /** `hosting.egressDomains` cap (the manifest schema and deploy body agree). */
10
+ export const MAX_EGRESS_DOMAINS = 64;
11
11
  /** Max secrets per deployment. */
12
12
  export const MAX_SECRETS = 32;
13
13
  /** Max secret value size in bytes. */
@@ -39,12 +39,18 @@ const SECRET_NAME_PATTERN = /^[A-Z][A-Z0-9_]*$/;
39
39
  // Lowercase hostname with >=2 labels, an alphabetic TLD, and at most one
40
40
  // leading `*.` wildcard. Labels: alphanumeric with interior hyphens.
41
41
  const EGRESS_DOMAIN_PATTERN = /^(\*\.)?([a-z0-9]([a-z0-9-]*[a-z0-9])?\.)+[a-z]+$/;
42
+ /** `host:port` asks for raw TCP egress; a wildcard host has no address to open. */
43
+ const EGRESS_TCP_PATTERN = /^([a-z0-9]([a-z0-9-]*[a-z0-9])?\.)+[a-z]+:([1-9]\d{0,4})$/;
42
44
  /** Returns a human error message, or undefined when the domain is valid. */
43
45
  export function validateEgressDomain(domain) {
44
46
  if (EGRESS_DOMAIN_PATTERN.test(domain)) {
45
47
  return undefined;
46
48
  }
47
- return `Invalid egress domain ${JSON.stringify(domain)}: use a lowercase hostname with at least two labels and an alphabetic TLD (e.g. "api.example.com"), optionally with a single leading "*." wildcard.`;
49
+ const tcp = EGRESS_TCP_PATTERN.exec(domain);
50
+ if (tcp !== null && Number(tcp[3]) <= 65535) {
51
+ return undefined;
52
+ }
53
+ return `Invalid egress domain ${JSON.stringify(domain)}: use a lowercase hostname with at least two labels and an alphabetic TLD (e.g. "api.example.com"), optionally with a single leading "*." wildcard or a trailing ":port" for raw TCP.`;
48
54
  }
49
55
  /**
50
56
  * Returns a human error message, or undefined when the name is a valid
@@ -1,8 +1,8 @@
1
1
  /**
2
2
  * Offer to install the package's coding-agent skills into the user's
3
- * personal Cursor skills dir under `~/.cursor/skills/agentsdk/<skill>/`.
3
+ * personal Cursor skills dir under `~/.cursor/skills/bdk/<skill>/`.
4
4
  *
5
- * Cursor walks `~/.cursor/skills` recursively, so the `agentsdk/` folder is
5
+ * Cursor walks `~/.cursor/skills` recursively, so the `bdk/` folder is
6
6
  * only organizational — identity comes from the leaf folder that holds
7
7
  * SKILL.md. Installed copies get `alwaysApply: true` so Cursor injects the
8
8
  * skill body as a global rule instead of leaving it as an on-demand catalog
@@ -14,9 +14,7 @@
14
14
  * install, so `pnpm install` in everysphere does not overwrite `~/.cursor`.
15
15
  */
16
16
  /** Category folder under ~/.cursor/skills (Cursor discovers nested skills). */
17
- export declare const CURSOR_SKILLS_NAMESPACE = "agentsdk";
18
- /** Pre-rename install folder. Install deletes this so `/agentkit-*` rows disappear. */
19
- export declare const LEGACY_CURSOR_SKILLS_NAMESPACE = "agentkit";
17
+ export declare const CURSOR_SKILLS_NAMESPACE = "bdk";
20
18
  /** How long the `init` offer waits for an answer before skipping the install. */
21
19
  export declare const SKILL_PROMPT_TIMEOUT_MS = 45000;
22
20
  /**
@@ -27,9 +25,9 @@ export declare const CURSOR_JULY_SKILLS_HOME_ENV = "CURSOR_JULY_SKILLS_HOME";
27
25
  /** Set to `1` to skip the postinstall skill copy. */
28
26
  export declare const CURSOR_JULY_SKIP_SKILL_INSTALL_ENV = "CURSOR_JULY_SKIP_SKILL_INSTALL";
29
27
  export interface PackageSkill {
30
- /** Frontmatter `name` (e.g. agentsdk-create-agent). */
28
+ /** Frontmatter `name` (e.g. bdk-create-agent). */
31
29
  name: string;
32
- /** Leaf install directory under agentsdk/ (e.g. create-agent). */
30
+ /** Leaf install directory under bdk/ (e.g. create-agent). */
33
31
  leafDir: string;
34
32
  /** Absolute path to the source skill directory in the package. */
35
33
  sourceDir: string;
@@ -42,19 +40,17 @@ export declare function cursorSkillsHome(home?: string): string;
42
40
  * (npm, pnpm, yarn, npx, global), not the everysphere source checkout.
43
41
  */
44
42
  export declare function isConsumerPackageInstall(packageRoot: string): boolean;
45
- /** `~/.cursor/skills/agentsdk` — where package skills are installed. */
46
- export declare function agentsdkCursorSkillsDir(skillsHome?: string): string;
47
- /** Pre-rename `~/.cursor/skills/agentkit`. */
48
- export declare function legacyAgentkitCursorSkillsDir(skillsHome?: string): string;
49
- /** Absolute install path for one skill: `…/agentsdk/<leafDir>`. */
43
+ /** `~/.cursor/skills/bdk` — where package skills are installed. */
44
+ export declare function bdkCursorSkillsDir(skillsHome?: string): string;
45
+ /** Absolute install path for one skill: `…/bdk/<leafDir>`. */
50
46
  export declare function skillInstallPath(skill: Pick<PackageSkill, "leafDir">, skillsHome?: string): string;
51
47
  /**
52
48
  * Skills shipped next to the running package. Uses the frontmatter `name`
53
- * when present, otherwise `agentsdk-<dir>`.
49
+ * when present, otherwise `bdk-<dir>`.
54
50
  */
55
51
  export declare function listShippedPackageSkills(packageRoot?: string): Promise<PackageSkill[]>;
56
52
  /**
57
- * Skills that do not yet have a SKILL.md under ~/.cursor/skills/agentsdk/.
53
+ * Skills that do not yet have a SKILL.md under ~/.cursor/skills/bdk/.
58
54
  * Install still overwrites every shipped skill when the user confirms — this
59
55
  * helper is for messaging (fresh install vs update).
60
56
  */
@@ -67,15 +63,15 @@ export interface SkillInstallResult {
67
63
  installed: string[];
68
64
  /** Leaf dirs deleted because the package no longer ships them. */
69
65
  removed: string[];
70
- /** True when leftover `~/.cursor/skills/agentkit` was deleted. */
71
- removedLegacyNamespace: boolean;
66
+ /** Leftover namespace dirs deleted (`…/agentsdk`, `…/agentkit`). */
67
+ removedLegacyDirs: string[];
72
68
  }
73
69
  /**
74
- * Copy each skill directory into `skillsHome/agentsdk/<leafDir>/`.
70
+ * Copy each skill directory into `skillsHome/bdk/<leafDir>/`.
75
71
  * Always overwrites so a package upgrade refreshes local Cursor skills.
76
72
  * Strips monorepo-only frontmatter, sets `alwaysApply: true` so Cursor
77
73
  * loads the body into context, and removes leaf dirs no longer shipped.
78
- * Also deletes leftover `skillsHome/agentkit/` from the previous namespace.
74
+ * Also deletes leftover `skillsHome/agentsdk/` and `skillsHome/agentkit/`.
79
75
  */
80
76
  export declare function installCursorSkills(skills: readonly PackageSkill[], skillsHome?: string): Promise<SkillInstallResult>;
81
77
  /**
@@ -88,7 +84,7 @@ export interface SkillInstallPlan {
88
84
  shipped: PackageSkill[];
89
85
  /** Resolved `~/.cursor/skills`, to install into. */
90
86
  skillsHome: string;
91
- /** Install target: `<skillsHome>/agentsdk`. */
87
+ /** Install target: `<skillsHome>/bdk`. */
92
88
  directory: string;
93
89
  /** Leaf dirs the package ships. */
94
90
  leaves: string[];
@@ -96,15 +92,15 @@ export interface SkillInstallPlan {
96
92
  firstInstall: boolean;
97
93
  /** Installed leaf dirs the package dropped; installing deletes them. */
98
94
  orphans: string[];
99
- /** True when leftover `skillsHome/agentkit` still exists. */
100
- hasLegacyNamespace: boolean;
95
+ /** Leftover namespace dirs that still exist. Installing deletes them. */
96
+ legacyDirs: string[];
101
97
  }
102
98
  /** What an install would do, for the offer and for `install-skills`. */
103
99
  export declare function planSkillInstall(options?: {
104
100
  packageRoot?: string;
105
101
  skillsHome?: string;
106
102
  }): Promise<SkillInstallPlan>;
107
- /** `Installed 9 Agent SDK skills`, what it dropped, and where it went. */
103
+ /** `Installed 9 BDK skills`, what it dropped, and where it went. */
108
104
  export declare function formatSkillInstall(plan: SkillInstallPlan, result: SkillInstallResult): string;
109
105
  export type PackageInstallSkillSyncResult = {
110
106
  status: "installed";
@@ -123,7 +119,7 @@ export interface SyncCursorSkillsOnPackageInstallOptions {
123
119
  out?: (text: string) => void;
124
120
  }
125
121
  /**
126
- * Copy shipped coding-agent skills into ~/.cursor/skills/agentsdk during a
122
+ * Copy shipped coding-agent skills into ~/.cursor/skills/bdk during a
127
123
  * consumer `npm install` / `npx`. Never throws: a failed copy must not fail
128
124
  * the package install. No-op in the monorepo source tree and when
129
125
  * `CURSOR_JULY_SKIP_SKILL_INSTALL=1`.
@@ -140,7 +136,7 @@ export interface OfferInstallCursorSkillsOptions {
140
136
  }
141
137
  /**
142
138
  * On a TTY, offer to install/update every shipped package skill into
143
- * ~/.cursor/skills/agentsdk (always overwriting). No-op when non-interactive
139
+ * ~/.cursor/skills/bdk (always overwriting). No-op when non-interactive
144
140
  * or the package ships no skills. An unanswered prompt skips the install
145
141
  * rather than blocking the caller — see `SKILL_PROMPT_TIMEOUT_MS`.
146
142
  */
@@ -1 +1 @@
1
- {"version":3,"file":"install-cursor-skills.d.ts","sourceRoot":"","sources":["../../src/internal/install-cursor-skills.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"install-cursor-skills.d.ts","sourceRoot":"","sources":["../../src/internal/install-cursor-skills.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AASH,+EAA+E;AAC/E,eAAO,MAAM,uBAAuB,QAAQ,CAAC;AAQ7C,iFAAiF;AACjF,eAAO,MAAM,uBAAuB,QAAS,CAAC;AAE9C;;;GAGG;AACH,eAAO,MAAM,2BAA2B,4BAA4B,CAAC;AAErE,qDAAqD;AACrD,eAAO,MAAM,kCAAkC,mCAAmC,CAAC;AAEnF,MAAM,WAAW,YAAY;IAC3B,kDAAkD;IAClD,IAAI,EAAE,MAAM,CAAC;IACb,6DAA6D;IAC7D,OAAO,EAAE,MAAM,CAAC;IAChB,kEAAkE;IAClE,SAAS,EAAE,MAAM,CAAC;IAClB,sDAAsD;IACtD,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,wBAAgB,gBAAgB,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAStD;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAIrE;AAED,mEAAmE;AACnE,wBAAgB,kBAAkB,CAAC,UAAU,GAAE,MAA2B,GAAG,MAAM,CAElF;AAMD,8DAA8D;AAC9D,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,IAAI,CAAC,YAAY,EAAE,SAAS,CAAC,EACpC,UAAU,GAAE,MAA2B,GACtC,MAAM,CAER;AAED;;;GAGG;AACH,wBAAsB,wBAAwB,CAC5C,WAAW,GAAE,MAAyB,GACrC,OAAO,CAAC,YAAY,EAAE,CAAC,CA4BzB;AAaD;;;;GAIG;AACH,wBAAsB,uBAAuB,CAAC,OAAO,CAAC,EAAE;IACtD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAY1B;AAED,MAAM,WAAW,kBAAkB;IACjC,yBAAyB;IACzB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,kEAAkE;IAClE,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,oEAAoE;IACpE,iBAAiB,EAAE,MAAM,EAAE,CAAC;CAC7B;AAED;;;;;;GAMG;AACH,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,SAAS,YAAY,EAAE,EAC/B,UAAU,GAAE,MAA2B,GACtC,OAAO,CAAC,kBAAkB,CAAC,CA4B7B;AA8DD;;;;GAIG;AACH,wBAAgB,oCAAoC,CAClD,OAAO,EAAE,MAAM,EACf,cAAc,CAAC,EAAE,MAAM,GACtB,MAAM,CAsBR;AAiCD,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,oDAAoD;IACpD,UAAU,EAAE,MAAM,CAAC;IACnB,0CAA0C;IAC1C,SAAS,EAAE,MAAM,CAAC;IAClB,mCAAmC;IACnC,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,+EAA+E;IAC/E,YAAY,EAAE,OAAO,CAAC;IACtB,wEAAwE;IACxE,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,yEAAyE;IACzE,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB;AAED,wEAAwE;AACxE,wBAAsB,gBAAgB,CAAC,OAAO,CAAC,EAAE;IAC/C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAuB5B;AAED,oEAAoE;AACpE,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,gBAAgB,EAAE,MAAM,EAAE,kBAAkB,GAAG,MAAM,CAY7F;AAED,MAAM,MAAM,6BAA6B,GACrC;IAAE,MAAM,EAAE,WAAW,CAAC;IAAC,SAAS,EAAE,MAAM,EAAE,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,GAC/D;IACE,MAAM,EAAE,SAAS,CAAC;IAClB,MAAM,EAAE,SAAS,GAAG,cAAc,GAAG,WAAW,GAAG,OAAO,CAAC;CAC5D,CAAC;AAEN,MAAM,WAAW,uCAAuC;IACtD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,gDAAgD;IAChD,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAC9B;AAED;;;;;GAKG;AACH,wBAAsB,gCAAgC,CACpD,OAAO,GAAE,uCAA4C,GACpD,OAAO,CAAC,6BAA6B,CAAC,CAgCxC;AAED,MAAM,WAAW,+BAA+B;IAC9C,4CAA4C;IAC5C,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,+EAA+E;IAC/E,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC,CAAC;IAC7D,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAC9B;AAED;;;;;GAKG;AACH,wBAAsB,wBAAwB,CAC5C,OAAO,GAAE,+BAAoC,GAC5C,OAAO,CAAC;IAAE,SAAS,EAAE,MAAM,EAAE,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC,CAqDpD;AAED,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,OAAO,CAAC;IACpB,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5B,+DAA+D;IAC/D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kDAAkD;IAClD,KAAK,CAAC,EAAE,MAAM,CAAC,cAAc,CAAC;CAC/B;AAED;;;GAGG;AACH,wBAAsB,WAAW,CAC/B,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC,CAsB9B"}