@cursor/bdk 0.2.9 → 0.2.11

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 (569) hide show
  1. package/dist/artifacts.js +3 -5
  2. package/dist/bin/agent-serve.js +803 -812
  3. package/dist/channels/bitbucket/api.js +305 -321
  4. package/dist/channels/bitbucket/binding.js +97 -61
  5. package/dist/channels/bitbucket/bitbucket-channel.d.ts +15 -1
  6. package/dist/channels/bitbucket/bitbucket-channel.d.ts.map +1 -1
  7. package/dist/channels/bitbucket/bitbucket-channel.js +95 -42
  8. package/dist/channels/bitbucket/bitbucket-webhook.d.ts +11 -0
  9. package/dist/channels/bitbucket/bitbucket-webhook.d.ts.map +1 -1
  10. package/dist/channels/bitbucket/bitbucket-webhook.js +214 -204
  11. package/dist/channels/bitbucket/checks.js +9 -21
  12. package/dist/channels/bitbucket/cursor-account.js +1 -1
  13. package/dist/channels/bitbucket/defaults.js +14 -4
  14. package/dist/channels/bitbucket/events.js +1 -2
  15. package/dist/channels/bitbucket/index.d.ts +6 -2
  16. package/dist/channels/bitbucket/index.d.ts.map +1 -1
  17. package/dist/channels/bitbucket/index.js +6 -2
  18. package/dist/channels/bitbucket/replay.js +80 -56
  19. package/dist/channels/bitbucket/state.js +16 -7
  20. package/dist/channels/bitbucket/types.d.ts +11 -2
  21. package/dist/channels/bitbucket/types.d.ts.map +1 -1
  22. package/dist/channels/checks.js +18 -28
  23. package/dist/channels/deployments/deployments-channel.js +26 -34
  24. package/dist/channels/github/api.js +216 -210
  25. package/dist/channels/github/auth.d.ts +5 -1
  26. package/dist/channels/github/auth.d.ts.map +1 -1
  27. package/dist/channels/github/auth.js +157 -174
  28. package/dist/channels/github/binding.js +48 -39
  29. package/dist/channels/github/checks.js +9 -14
  30. package/dist/channels/github/cursor-account.js +6 -11
  31. package/dist/channels/github/defaults.js +105 -130
  32. package/dist/channels/github/forward.js +13 -17
  33. package/dist/channels/github/github-channel.d.ts +43 -2
  34. package/dist/channels/github/github-channel.d.ts.map +1 -1
  35. package/dist/channels/github/github-channel.js +1228 -958
  36. package/dist/channels/github/progress.js +145 -146
  37. package/dist/channels/github/replay.js +30 -39
  38. package/dist/channels/github/state.js +40 -16
  39. package/dist/channels/github/types.d.ts +30 -6
  40. package/dist/channels/github/types.d.ts.map +1 -1
  41. package/dist/channels/gitlab/api.js +100 -114
  42. package/dist/channels/gitlab/binding.js +52 -33
  43. package/dist/channels/gitlab/checks.js +28 -29
  44. package/dist/channels/gitlab/cursor-account.js +1 -1
  45. package/dist/channels/gitlab/defaults.js +9 -3
  46. package/dist/channels/gitlab/gitlab-channel.d.ts +16 -1
  47. package/dist/channels/gitlab/gitlab-channel.d.ts.map +1 -1
  48. package/dist/channels/gitlab/gitlab-channel.js +95 -42
  49. package/dist/channels/gitlab/gitlab-webhook.d.ts +10 -1
  50. package/dist/channels/gitlab/gitlab-webhook.d.ts.map +1 -1
  51. package/dist/channels/gitlab/gitlab-webhook.js +282 -249
  52. package/dist/channels/gitlab/index.d.ts +6 -2
  53. package/dist/channels/gitlab/index.d.ts.map +1 -1
  54. package/dist/channels/gitlab/index.js +6 -2
  55. package/dist/channels/gitlab/replay.js +50 -27
  56. package/dist/channels/gitlab/state.js +14 -6
  57. package/dist/channels/gitlab/types.d.ts +13 -2
  58. package/dist/channels/gitlab/types.d.ts.map +1 -1
  59. package/dist/channels/origin/api.js +100 -116
  60. package/dist/channels/origin/binding.js +15 -16
  61. package/dist/channels/origin/checks.js +30 -28
  62. package/dist/channels/origin/defaults.js +50 -65
  63. package/dist/channels/origin/origin-channel.js +266 -272
  64. package/dist/channels/origin/origin-webhook.js +70 -88
  65. package/dist/channels/origin/reactions.js +9 -21
  66. package/dist/channels/origin/state.js +13 -5
  67. package/dist/channels/slack/agentic-delivery.js +426 -478
  68. package/dist/channels/slack/agentic-posted.js +9 -10
  69. package/dist/channels/slack/agentic-signals.js +2 -3
  70. package/dist/channels/slack/api.js +417 -427
  71. package/dist/channels/slack/approvals.js +1 -1
  72. package/dist/channels/slack/assistant.js +37 -47
  73. package/dist/channels/slack/attachments.js +188 -206
  74. package/dist/channels/slack/auth.js +8 -6
  75. package/dist/channels/slack/bot-mentions.js +31 -45
  76. package/dist/channels/slack/channel-watch.js +42 -48
  77. package/dist/channels/slack/cli-project.js +112 -137
  78. package/dist/channels/slack/code-fences.js +3 -5
  79. package/dist/channels/slack/constants.js +2 -2
  80. package/dist/channels/slack/credentials.js +23 -38
  81. package/dist/channels/slack/defaults.js +292 -331
  82. package/dist/channels/slack/dispatch.d.ts.map +1 -1
  83. package/dist/channels/slack/dispatch.js +533 -460
  84. package/dist/channels/slack/doctor.js +200 -214
  85. package/dist/channels/slack/eval-directive.js +79 -96
  86. package/dist/channels/slack/event-id-dedupe.js +1 -1
  87. package/dist/channels/slack/external-policy.js +26 -39
  88. package/dist/channels/slack/footer.js +28 -41
  89. package/dist/channels/slack/inbound.d.ts +1 -0
  90. package/dist/channels/slack/inbound.d.ts.map +1 -1
  91. package/dist/channels/slack/inbound.js +50 -31
  92. package/dist/channels/slack/init.d.ts +1 -5
  93. package/dist/channels/slack/init.d.ts.map +1 -1
  94. package/dist/channels/slack/init.js +42 -59
  95. package/dist/channels/slack/interactive.d.ts +9 -3
  96. package/dist/channels/slack/interactive.d.ts.map +1 -1
  97. package/dist/channels/slack/interactive.js +160 -162
  98. package/dist/channels/slack/links.js +1 -2
  99. package/dist/channels/slack/live-delivery.js +172 -190
  100. package/dist/channels/slack/manifest.d.ts.map +1 -1
  101. package/dist/channels/slack/manifest.js +44 -23
  102. package/dist/channels/slack/message-body.js +2 -2
  103. package/dist/channels/slack/nudge-carrier.js +30 -42
  104. package/dist/channels/slack/nudge-store.js +164 -191
  105. package/dist/channels/slack/paint-start.js +66 -81
  106. package/dist/channels/slack/placeholder.js +123 -152
  107. package/dist/channels/slack/pr-ref.js +1 -1
  108. package/dist/channels/slack/progress-delivery.js +65 -78
  109. package/dist/channels/slack/reasoning-card.js +36 -49
  110. package/dist/channels/slack/recording-sink.js +12 -24
  111. package/dist/channels/slack/reply-options.js +7 -12
  112. package/dist/channels/slack/self-identity.js +27 -35
  113. package/dist/channels/slack/sender-name.d.ts +12 -3
  114. package/dist/channels/slack/sender-name.d.ts.map +1 -1
  115. package/dist/channels/slack/sender-name.js +57 -61
  116. package/dist/channels/slack/setup.js +2 -4
  117. package/dist/channels/slack/slack-channel.d.ts +6 -4
  118. package/dist/channels/slack/slack-channel.d.ts.map +1 -1
  119. package/dist/channels/slack/slack-channel.js +441 -308
  120. package/dist/channels/slack/socket-mode.js +38 -52
  121. package/dist/channels/slack/thread-context.js +143 -160
  122. package/dist/channels/slack/tool-approval-events.js +149 -166
  123. package/dist/channels/slack/tool-cards.js +6 -11
  124. package/dist/channels/slack/tool-chip.js +1 -2
  125. package/dist/channels/slack/types.d.ts +15 -17
  126. package/dist/channels/slack/types.d.ts.map +1 -1
  127. package/dist/channels/slack/upload.js +84 -97
  128. package/dist/channels/slack/user-info.js +27 -41
  129. package/dist/channels.js +9 -20
  130. package/dist/dashboard-session-url.js +3 -4
  131. package/dist/docs/404.html +2 -2
  132. package/dist/docs/assets/{app.BNhEdGa8.js → app.DXI7bwox.js} +4 -4
  133. package/dist/docs/assets/{building-with-agents.md.BPjPFxFg.js → building-with-agents.md.Df87rAe1.js} +1 -1
  134. package/dist/docs/assets/chunks/@localSearchIndexroot.CtLtpWcx.js +1 -0
  135. package/dist/docs/assets/chunks/{VPLocalSearchBox.DIdUV1Ph.js → VPLocalSearchBox.BrbO5mEe.js} +1 -1
  136. package/dist/docs/assets/chunks/{arc.lELI4_SR.js → arc.BOG1yms8.js} +1 -1
  137. package/dist/docs/assets/chunks/{architectureDiagram-Q4EWVU46.iCMdvuoM.js → architectureDiagram-Q4EWVU46.C0hsMZnZ.js} +1 -1
  138. package/dist/docs/assets/chunks/{baseUniq.C1-nDJBf.js → baseUniq.H044KjKs.js} +1 -1
  139. package/dist/docs/assets/chunks/{blockDiagram-DXYQGD6D.ClemzBox.js → blockDiagram-DXYQGD6D.BsRW6GoB.js} +1 -1
  140. package/dist/docs/assets/chunks/{c4Diagram-AHTNJAMY.BqTak6cR.js → c4Diagram-AHTNJAMY.B9HV5PFR.js} +1 -1
  141. package/dist/docs/assets/chunks/channel.CBwrU9rP.js +1 -0
  142. package/dist/docs/assets/chunks/{chunk-4BX2VUAB.CUS3qs_R.js → chunk-4BX2VUAB.CPoT_ajl.js} +1 -1
  143. package/dist/docs/assets/chunks/{chunk-4TB4RGXK.dz5fdHcl.js → chunk-4TB4RGXK.DZBwWuCL.js} +1 -1
  144. package/dist/docs/assets/chunks/{chunk-55IACEB6.D6BEBmve.js → chunk-55IACEB6.CZ3yTiyq.js} +1 -1
  145. package/dist/docs/assets/chunks/{chunk-EDXVE4YY.B5uK4ID9.js → chunk-EDXVE4YY.6DfvHSd8.js} +1 -1
  146. package/dist/docs/assets/chunks/{chunk-FMBD7UC4.PgOJgNQs.js → chunk-FMBD7UC4.CpBj8HfK.js} +1 -1
  147. package/dist/docs/assets/chunks/{chunk-OYMX7WX6.CvkTrCii.js → chunk-OYMX7WX6.BdKo8YqS.js} +1 -1
  148. package/dist/docs/assets/chunks/{chunk-QZHKN3VN.BnSfKYsB.js → chunk-QZHKN3VN.BnXNyxJx.js} +1 -1
  149. package/dist/docs/assets/chunks/{chunk-YZCP3GAM.MZH6v5UC.js → chunk-YZCP3GAM.Cg1OcF8G.js} +1 -1
  150. package/dist/docs/assets/chunks/classDiagram-6PBFFD2Q.CbC_mrvB.js +1 -0
  151. package/dist/docs/assets/chunks/classDiagram-v2-HSJHXN6E.CbC_mrvB.js +1 -0
  152. package/dist/docs/assets/chunks/clone.BTvFyY1a.js +1 -0
  153. package/dist/docs/assets/chunks/{cose-bilkent-S5V4N54A.BBbw_YZi.js → cose-bilkent-S5V4N54A.1SP8al9c.js} +1 -1
  154. package/dist/docs/assets/chunks/{dagre-KV5264BT.CNJB2l7E.js → dagre-KV5264BT.DS1L6hJt.js} +1 -1
  155. package/dist/docs/assets/chunks/{diagram-5BDNPKRD.BQzlnFfq.js → diagram-5BDNPKRD.ChsausbG.js} +1 -1
  156. package/dist/docs/assets/chunks/{diagram-G4DWMVQ6.DkgqqZMz.js → diagram-G4DWMVQ6.3XsptNWj.js} +1 -1
  157. package/dist/docs/assets/chunks/{diagram-MMDJMWI5.DIT8L7H_.js → diagram-MMDJMWI5.DPA9Dk_P.js} +1 -1
  158. package/dist/docs/assets/chunks/{diagram-TYMM5635.3xLPZWGJ.js → diagram-TYMM5635.BVswXWrB.js} +1 -1
  159. package/dist/docs/assets/chunks/{erDiagram-SMLLAGMA.5_IHz8jF.js → erDiagram-SMLLAGMA.BSak5OSP.js} +1 -1
  160. package/dist/docs/assets/chunks/{flowDiagram-DWJPFMVM.BGUCXz8A.js → flowDiagram-DWJPFMVM.CQgN4TTz.js} +1 -1
  161. package/dist/docs/assets/chunks/{ganttDiagram-T4ZO3ILL.DbfFavS1.js → ganttDiagram-T4ZO3ILL.GrT0kA4a.js} +1 -1
  162. package/dist/docs/assets/chunks/{gitGraphDiagram-UUTBAWPF.D2yKdeNW.js → gitGraphDiagram-UUTBAWPF.CdS7Ucll.js} +1 -1
  163. package/dist/docs/assets/chunks/{graph.CSCxwHba.js → graph.BVqKRmRo.js} +1 -1
  164. package/dist/docs/assets/chunks/{infoDiagram-42DDH7IO.FDeb6xHY.js → infoDiagram-42DDH7IO.C3C9FRto.js} +1 -1
  165. package/dist/docs/assets/chunks/{ishikawaDiagram-UXIWVN3A.DbeYs9VL.js → ishikawaDiagram-UXIWVN3A.2FuAh_Zj.js} +1 -1
  166. package/dist/docs/assets/chunks/{journeyDiagram-VCZTEJTY.CWjKINpx.js → journeyDiagram-VCZTEJTY.CaHMfK4b.js} +1 -1
  167. package/dist/docs/assets/chunks/{kanban-definition-6JOO6SKY.B4FrAlwz.js → kanban-definition-6JOO6SKY.CjhIUwcA.js} +1 -1
  168. package/dist/docs/assets/chunks/{layout.DFGxQ9ab.js → layout.CGU3gfSf.js} +1 -1
  169. package/dist/docs/assets/chunks/{linear.BmjZ-G59.js → linear.DaihpW_n.js} +1 -1
  170. package/dist/docs/assets/chunks/{min.DZSxulMW.js → min.BS-j8kHQ.js} +1 -1
  171. package/dist/docs/assets/chunks/{mindmap-definition-QFDTVHPH.CHLi3-aN.js → mindmap-definition-QFDTVHPH.BVJ1Bbnk.js} +1 -1
  172. package/dist/docs/assets/chunks/{pieDiagram-DEJITSTG.DteG-CkU.js → pieDiagram-DEJITSTG.Cz1WIv9r.js} +1 -1
  173. package/dist/docs/assets/chunks/{quadrantDiagram-34T5L4WZ.D458ipN3.js → quadrantDiagram-34T5L4WZ.DKLFxcjy.js} +1 -1
  174. package/dist/docs/assets/chunks/{requirementDiagram-MS252O5E.DcFgUxst.js → requirementDiagram-MS252O5E.BHegiK7x.js} +1 -1
  175. package/dist/docs/assets/chunks/{sankeyDiagram-XADWPNL6.BwQAMmSA.js → sankeyDiagram-XADWPNL6.DYkY6yPc.js} +1 -1
  176. package/dist/docs/assets/chunks/{sequenceDiagram-FGHM5R23.B_Xdsrh9.js → sequenceDiagram-FGHM5R23.DYQ1QUrI.js} +1 -1
  177. package/dist/docs/assets/chunks/{stateDiagram-FHFEXIEX.CdfDW6-C.js → stateDiagram-FHFEXIEX.Iru8BsFo.js} +1 -1
  178. package/dist/docs/assets/chunks/stateDiagram-v2-QKLJ7IA2.BYXl4LW6.js +1 -0
  179. package/dist/docs/assets/chunks/{theme.sfdL3srp.js → theme.DaplWQhQ.js} +2 -2
  180. package/dist/docs/assets/chunks/{timeline-definition-GMOUNBTQ.56-4hXaC.js → timeline-definition-GMOUNBTQ.BwFA8hiX.js} +1 -1
  181. package/dist/docs/assets/chunks/{vennDiagram-DHZGUBPP.CvZSQBO7.js → vennDiagram-DHZGUBPP.CZ60W1C_.js} +1 -1
  182. package/dist/docs/assets/chunks/{wardley-RL74JXVD.C9qc8k39.js → wardley-RL74JXVD.iXazD3Z7.js} +1 -1
  183. package/dist/docs/assets/chunks/{wardleyDiagram-NUSXRM2D.D9s0nihi.js → wardleyDiagram-NUSXRM2D.B69D2r8-.js} +1 -1
  184. package/dist/docs/assets/chunks/{xychartDiagram-5P7HB3ND.BVJSpYrC.js → xychartDiagram-5P7HB3ND.CLPZEIU9.js} +1 -1
  185. package/dist/docs/assets/{deployment.md.BdqTiGdc.js → deployment.md.BYuEcDBv.js} +2 -2
  186. package/dist/docs/assets/{guides_bitbucket.md.BB6fqD-M.js → guides_bitbucket.md.CKUayYtD.js} +3 -3
  187. package/dist/docs/assets/{guides_bitbucket.md.BB6fqD-M.lean.js → guides_bitbucket.md.CKUayYtD.lean.js} +1 -1
  188. package/dist/docs/assets/{guides_github.md.Cr1Xlf-m.js → guides_github.md.TuNiZAOQ.js} +4 -4
  189. package/dist/docs/assets/{guides_github.md.Cr1Xlf-m.lean.js → guides_github.md.TuNiZAOQ.lean.js} +1 -1
  190. package/dist/docs/assets/{guides_gitlab.md.CMpmFi4M.js → guides_gitlab.md.CtNI4fSH.js} +4 -4
  191. package/dist/docs/assets/{guides_gitlab.md.CMpmFi4M.lean.js → guides_gitlab.md.CtNI4fSH.lean.js} +1 -1
  192. package/dist/docs/assets/guides_migrate.md.sCAvvlC6.js +7 -0
  193. package/dist/docs/assets/guides_migrate.md.sCAvvlC6.lean.js +1 -0
  194. package/dist/docs/assets/{reference_cli.md.GwugN3n-.js → reference_cli.md.dYCAL2lB.js} +4 -3
  195. package/dist/docs/assets/reference_cli.md.dYCAL2lB.lean.js +1 -0
  196. package/dist/docs/assets/troubleshooting.md.x-GBa7wN.js +1 -0
  197. package/dist/docs/assets/{troubleshooting.md.Bscj6ODe.lean.js → troubleshooting.md.x-GBa7wN.lean.js} +1 -1
  198. package/dist/docs/building-with-agents.html +37 -37
  199. package/dist/docs/building-with-agents.md +2 -0
  200. package/dist/docs/deployment.html +38 -38
  201. package/dist/docs/deployment.md +7 -0
  202. package/dist/docs/evals.html +36 -36
  203. package/dist/docs/guides/agent-to-agent.html +35 -35
  204. package/dist/docs/guides/bitbucket.html +38 -38
  205. package/dist/docs/guides/bitbucket.md +9 -1
  206. package/dist/docs/guides/cloud-agents.html +35 -35
  207. package/dist/docs/guides/convert-automation.html +35 -35
  208. package/dist/docs/guides/github.html +39 -39
  209. package/dist/docs/guides/github.md +20 -4
  210. package/dist/docs/guides/gitlab.html +38 -38
  211. package/dist/docs/guides/gitlab.md +9 -1
  212. package/dist/docs/guides/grokbot-agents.html +35 -35
  213. package/dist/docs/guides/hooks.html +35 -35
  214. package/dist/docs/guides/improve.html +35 -35
  215. package/dist/docs/guides/jev.html +35 -35
  216. package/dist/docs/guides/mcp-oauth.html +35 -35
  217. package/dist/docs/guides/migrate.html +66 -0
  218. package/dist/docs/guides/migrate.md +122 -0
  219. package/dist/docs/guides/opentelemetry.html +35 -35
  220. package/dist/docs/guides/slack.html +35 -35
  221. package/dist/docs/guides/webhooks.html +35 -35
  222. package/dist/docs/hashmap.json +1 -1
  223. package/dist/docs/hillclimbing.html +35 -35
  224. package/dist/docs/index.html +35 -35
  225. package/dist/docs/llms-full.txt +214 -6
  226. package/dist/docs/llms.txt +1 -0
  227. package/dist/docs/quickstart.html +35 -35
  228. package/dist/docs/reference/agent-config.html +35 -35
  229. package/dist/docs/reference/artifacts.html +35 -35
  230. package/dist/docs/reference/channels.html +35 -35
  231. package/dist/docs/reference/cli.html +39 -38
  232. package/dist/docs/reference/cli.md +39 -0
  233. package/dist/docs/reference/connections.html +35 -35
  234. package/dist/docs/reference/evals.html +35 -35
  235. package/dist/docs/reference/extensions.html +35 -35
  236. package/dist/docs/reference/hooks.html +35 -35
  237. package/dist/docs/reference/http-api.html +35 -35
  238. package/dist/docs/reference/instructions.html +35 -35
  239. package/dist/docs/reference/playground.html +35 -35
  240. package/dist/docs/reference/project-layout.html +35 -35
  241. package/dist/docs/reference/prompt.html +35 -35
  242. package/dist/docs/reference/schedules.html +35 -35
  243. package/dist/docs/reference/sessions.html +35 -35
  244. package/dist/docs/reference/skills.html +35 -35
  245. package/dist/docs/reference/subagents.html +35 -35
  246. package/dist/docs/reference/tools.html +35 -35
  247. package/dist/docs/templates/agentic-owners.html +35 -35
  248. package/dist/docs/templates/grokbot-agents.html +35 -35
  249. package/dist/docs/templates/security-reviewer.html +35 -35
  250. package/dist/docs/templates/thermo-quality-review.html +35 -35
  251. package/dist/docs/templates/thermo-review.html +35 -35
  252. package/dist/docs/templates/triage.html +35 -35
  253. package/dist/docs/troubleshooting.html +36 -36
  254. package/dist/docs/troubleshooting.md +1 -0
  255. package/dist/evals/assertions.js +20 -34
  256. package/dist/evals/expect.js +3 -6
  257. package/dist/evals/judge.js +5 -8
  258. package/dist/evals/loaders.js +45 -62
  259. package/dist/evals/matchers.js +2 -3
  260. package/dist/evals/reporters.js +43 -67
  261. package/dist/evals/results.js +1 -1
  262. package/dist/evals/run-facts.js +5 -6
  263. package/dist/evals.js +27 -15
  264. package/dist/extensions/cursor-cloud-agents/extension.js +4 -1
  265. package/dist/extensions/cursor-cloud-agents/lib/backend.js +100 -126
  266. package/dist/extensions/cursor-cloud-agents/lib/fleet.js +22 -38
  267. package/dist/extensions/cursor-cloud-agents/lib/repos.js +8 -10
  268. package/dist/extensions/cursor-cloud-agents/lib/transcript.js +2 -3
  269. package/dist/extensions/cursor-cloud-agents/lib/watch.js +52 -66
  270. package/dist/extensions/cursor-cloud-agents/reminders/cloud-agent-stop-watch.js +29 -40
  271. package/dist/extensions/cursor-cloud-agents/tools/cancel.js +6 -17
  272. package/dist/extensions/cursor-cloud-agents/tools/dump.js +25 -36
  273. package/dist/extensions/cursor-cloud-agents/tools/get.js +3 -14
  274. package/dist/extensions/cursor-cloud-agents/tools/launch.js +13 -21
  275. package/dist/extensions/cursor-cloud-agents/tools/list.js +8 -19
  276. package/dist/extensions/cursor-cloud-agents/tools/reply.js +5 -16
  277. package/dist/extensions/cursor-grokbot-agents/extension.js +4 -1
  278. package/dist/extensions/cursor-grokbot-agents/lib/agents.js +3 -3
  279. package/dist/extensions/cursor-grokbot-agents/lib/backend.js +53 -73
  280. package/dist/extensions/cursor-grokbot-agents/lib/contacts.js +10 -23
  281. package/dist/extensions/cursor-grokbot-agents/lib/conversation.js +112 -132
  282. package/dist/extensions/cursor-grokbot-agents/lib/lock.js +1 -2
  283. package/dist/extensions/cursor-grokbot-agents/tools/ask.js +5 -16
  284. package/dist/extensions/cursor-grokbot-agents/tools/check.js +4 -15
  285. package/dist/extensions/cursor-grokbot-agents/tools/interrupt.js +2 -13
  286. package/dist/extensions/cursor-grokbot-agents/tools/list.js +11 -23
  287. package/dist/extensions/jev/extension.js +3 -3
  288. package/dist/extensions/jev/lib/evaluate.js +43 -60
  289. package/dist/extensions/jev/tools/evaluate.js +6 -17
  290. package/dist/extensions/slack-communication/tools/post-file.js +1 -1
  291. package/dist/extensions.js +3 -5
  292. package/dist/files-backends/cursor-hosted.js +504 -523
  293. package/dist/files-backends/local-fs.js +72 -134
  294. package/dist/files.js +3 -3
  295. package/dist/filesystem.js +562 -861
  296. package/dist/index.js +16 -35
  297. package/dist/internal/advertise-tools.js +74 -86
  298. package/dist/internal/artifacts-store.js +298 -361
  299. package/dist/internal/as-of.js +2 -4
  300. package/dist/internal/authored-alias-hooks.js +6 -4
  301. package/dist/internal/authored-loaders.js +37 -52
  302. package/dist/internal/bounded-int.js +1 -2
  303. package/dist/internal/bounded.js +13 -24
  304. package/dist/internal/brand.js +1 -1
  305. package/dist/internal/browser-origin-guard.js +4 -4
  306. package/dist/internal/builtin-tools/artifacts.js +15 -27
  307. package/dist/internal/builtin-tools/index.js +2 -3
  308. package/dist/internal/builtin-tools/reminders.js +33 -52
  309. package/dist/internal/channel-architecture.d.ts +21 -0
  310. package/dist/internal/channel-architecture.d.ts.map +1 -0
  311. package/dist/internal/channel-architecture.js +41 -0
  312. package/dist/internal/channel-dispatch.js +3 -4
  313. package/dist/internal/channel-route-dispatch.js +40 -51
  314. package/dist/internal/channel-state.js +1 -1
  315. package/dist/internal/chat-client.js +319 -340
  316. package/dist/internal/cli-ax.js +1262 -1294
  317. package/dist/internal/cli-bitbucket.js +244 -272
  318. package/dist/internal/cli-convert-automation.js +137 -151
  319. package/dist/internal/cli-cursor.js +126 -147
  320. package/dist/internal/cli-deploy.d.ts.map +1 -1
  321. package/dist/internal/cli-deploy.js +1457 -1507
  322. package/dist/internal/cli-docs.js +130 -147
  323. package/dist/internal/cli-github.js +437 -476
  324. package/dist/internal/cli-gitlab.js +259 -288
  325. package/dist/internal/cli-images.js +266 -334
  326. package/dist/internal/cli-manifest.js +25 -37
  327. package/dist/internal/cli-mcp-oauth.js +228 -247
  328. package/dist/internal/cli-mcp.js +358 -383
  329. package/dist/internal/cli-migrate.js +73 -90
  330. package/dist/internal/cli-skills.js +35 -47
  331. package/dist/internal/cli-slack-manual.d.ts +0 -1
  332. package/dist/internal/cli-slack-manual.d.ts.map +1 -1
  333. package/dist/internal/cli-slack-manual.js +175 -204
  334. package/dist/internal/cli-slack.d.ts +1 -1
  335. package/dist/internal/cli-slack.d.ts.map +1 -1
  336. package/dist/internal/cli-slack.js +416 -456
  337. package/dist/internal/cloud-merge.js +7 -3
  338. package/dist/internal/cloud-turn-cost.js +8 -1
  339. package/dist/internal/connection-env.js +5 -6
  340. package/dist/internal/continuation-channel.js +10 -7
  341. package/dist/internal/continuation-identity.js +85 -67
  342. package/dist/internal/conversation-mirror.js +112 -131
  343. package/dist/internal/convert-automation/convert-workflow.js +21 -31
  344. package/dist/internal/cron.js +3 -3
  345. package/dist/internal/cursor/account-mcp.js +147 -146
  346. package/dist/internal/cursor/backend-client.js +290 -320
  347. package/dist/internal/cursor/bound-secret-file.js +3 -3
  348. package/dist/internal/cursor/credentials.js +127 -142
  349. package/dist/internal/cursor/cursor-api-transport.js +4 -8
  350. package/dist/internal/cursor/github-credentials.js +91 -108
  351. package/dist/internal/cursor/hosted-bound-secrets.js +3 -4
  352. package/dist/internal/cursor/hosted-deployment-secrets.js +1 -1
  353. package/dist/internal/cursor/hosted-store-secrets.js +5 -9
  354. package/dist/internal/cursor/session-token.js +36 -48
  355. package/dist/internal/cursor/store-api-client.js +77 -92
  356. package/dist/internal/cursor-account-mcp-auth.js +132 -149
  357. package/dist/internal/cursor-agent-template.js +1 -1
  358. package/dist/internal/cursor-deployment-relay.js +33 -54
  359. package/dist/internal/cursor-event-relay.js +65 -59
  360. package/dist/internal/cursor-relay-core.js +258 -286
  361. package/dist/internal/deferred-channel-session.js +3 -12
  362. package/dist/internal/deploy-client.d.ts.map +1 -1
  363. package/dist/internal/deploy-client.js +413 -475
  364. package/dist/internal/deploy-manifest.d.ts +17 -0
  365. package/dist/internal/deploy-manifest.d.ts.map +1 -1
  366. package/dist/internal/deploy-manifest.js +71 -21
  367. package/dist/internal/deploy-source.js +31 -43
  368. package/dist/internal/discovery/agent-config.js +45 -59
  369. package/dist/internal/discovery/agent.js +276 -280
  370. package/dist/internal/discovery/channels.js +67 -80
  371. package/dist/internal/discovery/connections.js +286 -296
  372. package/dist/internal/discovery/context.js +2 -13
  373. package/dist/internal/discovery/cursor-plugin.js +223 -259
  374. package/dist/internal/discovery/extension-overlay.js +104 -131
  375. package/dist/internal/discovery/extensions.js +276 -281
  376. package/dist/internal/discovery/fs.js +56 -79
  377. package/dist/internal/discovery/hooks.js +39 -50
  378. package/dist/internal/discovery/info.js +17 -19
  379. package/dist/internal/discovery/instructions.js +58 -71
  380. package/dist/internal/discovery/modules.js +45 -58
  381. package/dist/internal/discovery/project.d.ts.map +1 -1
  382. package/dist/internal/discovery/project.js +192 -215
  383. package/dist/internal/discovery/reminders.js +41 -52
  384. package/dist/internal/discovery/runtime.js +1 -1
  385. package/dist/internal/discovery/schedules.js +71 -82
  386. package/dist/internal/discovery/seed-files.js +21 -32
  387. package/dist/internal/discovery/services.js +74 -96
  388. package/dist/internal/discovery/skills.js +77 -94
  389. package/dist/internal/discovery/subagent.js +79 -95
  390. package/dist/internal/discovery/tools.js +12 -23
  391. package/dist/internal/distribution.js +2 -2
  392. package/dist/internal/docs-site.js +30 -45
  393. package/dist/internal/duration.js +1 -1
  394. package/dist/internal/env-file.js +48 -64
  395. package/dist/internal/eval-judge-model.js +17 -28
  396. package/dist/internal/eval-run-store.js +265 -254
  397. package/dist/internal/eval-runner.d.ts +8 -0
  398. package/dist/internal/eval-runner.d.ts.map +1 -1
  399. package/dist/internal/eval-runner.js +406 -408
  400. package/dist/internal/eval-transport.d.ts +24 -0
  401. package/dist/internal/eval-transport.d.ts.map +1 -0
  402. package/dist/internal/eval-transport.js +22 -0
  403. package/dist/internal/evals-client.js +242 -246
  404. package/dist/internal/event-log.js +72 -120
  405. package/dist/internal/event-mapper.js +30 -31
  406. package/dist/internal/factory-resource-channel.js +16 -30
  407. package/dist/internal/filesystem/errors.js +6 -6
  408. package/dist/internal/filesystem/format.js +10 -13
  409. package/dist/internal/filesystem/merge.js +52 -94
  410. package/dist/internal/filesystem/nearest.js +15 -27
  411. package/dist/internal/filesystem/scratch.js +65 -85
  412. package/dist/internal/filesystem/tools.js +221 -241
  413. package/dist/internal/filesystem/walk.js +76 -143
  414. package/dist/internal/framework-file-storage.js +118 -139
  415. package/dist/internal/framework-storage-selection.js +21 -13
  416. package/dist/internal/frontmatter.js +4 -6
  417. package/dist/internal/github-fanout.js +50 -64
  418. package/dist/internal/guest-network.js +96 -109
  419. package/dist/internal/handleAgentServeTrigger.js +121 -126
  420. package/dist/internal/host-files.js +73 -88
  421. package/dist/internal/host-kv.js +21 -36
  422. package/dist/internal/host-otel.js +22 -19
  423. package/dist/internal/host-platforms.js +49 -63
  424. package/dist/internal/hosted-catch-protocol.d.ts +1 -0
  425. package/dist/internal/hosted-catch-protocol.d.ts.map +1 -1
  426. package/dist/internal/hosted-catch-protocol.js +1 -0
  427. package/dist/internal/hosted-catch.d.ts +5 -3
  428. package/dist/internal/hosted-catch.d.ts.map +1 -1
  429. package/dist/internal/hosted-catch.js +84 -93
  430. package/dist/internal/hosted-delivery-protocol.js +32 -8
  431. package/dist/internal/hosted-delivery.d.ts +13 -1
  432. package/dist/internal/hosted-delivery.d.ts.map +1 -1
  433. package/dist/internal/hosted-delivery.js +614 -584
  434. package/dist/internal/hosted-eval-cases.d.ts +21 -0
  435. package/dist/internal/hosted-eval-cases.d.ts.map +1 -0
  436. package/dist/internal/hosted-eval-cases.js +162 -0
  437. package/dist/internal/hosted-execution-diag.js +38 -30
  438. package/dist/internal/hosted-execution-flush.js +75 -66
  439. package/dist/internal/hosted-execution-latency.js +16 -8
  440. package/dist/internal/hosted-managed-automation.js +2 -2
  441. package/dist/internal/hosting.js +2 -3
  442. package/dist/internal/http-channel-define.js +4 -1
  443. package/dist/internal/http-channel.js +101 -112
  444. package/dist/internal/http-control-plane-session.d.ts +18 -1
  445. package/dist/internal/http-control-plane-session.d.ts.map +1 -1
  446. package/dist/internal/http-control-plane-session.js +66 -32
  447. package/dist/internal/incoming-headers-to-fetch.js +1 -2
  448. package/dist/internal/init-interview.js +73 -93
  449. package/dist/internal/init-project.js +182 -214
  450. package/dist/internal/init-scaffold.js +10 -21
  451. package/dist/internal/inline-stdio-mcp.js +80 -86
  452. package/dist/internal/install-cursor-skills.js +231 -273
  453. package/dist/internal/legacy-command-guard.js +18 -31
  454. package/dist/internal/listen-port.js +34 -45
  455. package/dist/internal/local-control-plane.js +293 -307
  456. package/dist/internal/local-env.js +1 -1
  457. package/dist/internal/local-ingress.js +15 -9
  458. package/dist/internal/log-ring.js +1 -2
  459. package/dist/internal/logs-client.js +207 -227
  460. package/dist/internal/map-pool.js +24 -38
  461. package/dist/internal/mcp-endpoint.js +204 -180
  462. package/dist/internal/mcp-host.js +165 -168
  463. package/dist/internal/mcp-oauth-on-demand.js +170 -207
  464. package/dist/internal/mcp-oauth-persist.js +15 -29
  465. package/dist/internal/mcp-oauth.js +209 -266
  466. package/dist/internal/named-webhook-secret.d.ts +39 -0
  467. package/dist/internal/named-webhook-secret.d.ts.map +1 -0
  468. package/dist/internal/named-webhook-secret.js +47 -0
  469. package/dist/internal/open-browser.js +2 -3
  470. package/dist/internal/otel/collector.js +104 -68
  471. package/dist/internal/otel/config.js +24 -37
  472. package/dist/internal/otel/http.js +5 -7
  473. package/dist/internal/otel/mcp.js +3 -12
  474. package/dist/internal/otel/runtime.js +69 -83
  475. package/dist/internal/package-inline-stdio.js +57 -65
  476. package/dist/internal/peer-connections.js +9 -5
  477. package/dist/internal/platform-schedule-sync.js +39 -54
  478. package/dist/internal/platform-timers.js +176 -210
  479. package/dist/internal/playground/static.js +1 -2
  480. package/dist/internal/playground/toolchain.js +37 -53
  481. package/dist/internal/playground-proxy.js +230 -270
  482. package/dist/internal/process-memory-telemetry.js +33 -51
  483. package/dist/internal/prompt-context.js +3 -6
  484. package/dist/internal/reminder-control-plane-protocol.js +46 -13
  485. package/dist/internal/reminder-runner.js +770 -785
  486. package/dist/internal/reminder-schedule.js +1 -1
  487. package/dist/internal/reminder-store.js +57 -78
  488. package/dist/internal/request-error-status.js +1 -3
  489. package/dist/internal/request-headers.js +2 -2
  490. package/dist/internal/resolve-prod-target.js +119 -135
  491. package/dist/internal/resolved-connections.js +16 -6
  492. package/dist/internal/run-client.js +221 -229
  493. package/dist/internal/runtime-dispatch-runner.js +18 -43
  494. package/dist/internal/schedule-runner.js +49 -58
  495. package/dist/internal/scm/pr-url.js +7 -6
  496. package/dist/internal/sdk-runner.js +388 -363
  497. package/dist/internal/serve-restart.js +26 -39
  498. package/dist/internal/server.d.ts.map +1 -1
  499. package/dist/internal/server.js +1283 -1244
  500. package/dist/internal/session-cost.js +7 -9
  501. package/dist/internal/session-engine.d.ts +3 -1
  502. package/dist/internal/session-engine.d.ts.map +1 -1
  503. package/dist/internal/session-engine.js +2801 -2777
  504. package/dist/internal/session-links.js +12 -16
  505. package/dist/internal/session-run-log.js +134 -82
  506. package/dist/internal/session-store.js +133 -164
  507. package/dist/internal/sessions-client.js +97 -118
  508. package/dist/internal/skill-catalog.js +18 -23
  509. package/dist/internal/skills-sync.js +16 -30
  510. package/dist/internal/slack-provision-client.js +90 -116
  511. package/dist/internal/start-log-store.js +48 -67
  512. package/dist/internal/steering.js +1 -2
  513. package/dist/internal/storage-coordinator.js +160 -196
  514. package/dist/internal/store-mirror.js +16 -30
  515. package/dist/internal/stream-progress.js +6 -8
  516. package/dist/internal/terminal-style.js +3 -4
  517. package/dist/internal/testing/scm-continuation-fixtures.js +6 -2
  518. package/dist/internal/testing/slack-continuation-fixtures.d.ts +26 -0
  519. package/dist/internal/testing/slack-continuation-fixtures.d.ts.map +1 -0
  520. package/dist/internal/testing/slack-continuation-fixtures.js +136 -0
  521. package/dist/internal/tool-catalog.js +11 -5
  522. package/dist/internal/tool-result.js +1 -1
  523. package/dist/internal/trajectory.js +19 -22
  524. package/dist/internal/turn-cost.js +52 -62
  525. package/dist/internal/turn-governor.js +5 -8
  526. package/dist/internal/turn-lease-store.js +85 -105
  527. package/dist/internal/turn-outbox.js +28 -43
  528. package/dist/internal/update-check.js +231 -259
  529. package/dist/internal/v2-hosting.js +1 -2
  530. package/dist/internal/workspace-sync.js +25 -41
  531. package/dist/internal/workspace.js +111 -139
  532. package/dist/kv/memory-kv.js +27 -51
  533. package/dist/memory.js +106 -148
  534. package/dist/otel.js +5 -8
  535. package/dist/playground/assets/{index-Co4CUVTQ.js → index-Be0-1hw2.js} +45 -45
  536. package/dist/playground/assets/index-Clz6uHj9.css +1 -0
  537. package/dist/playground/index.html +2 -2
  538. package/dist/prompt.js +2 -4
  539. package/dist/storage-backends/cursor-hosted-v2.js +53 -83
  540. package/dist/storage-backends/cursor-hosted.js +105 -145
  541. package/dist/storage-backends/file-kv.js +100 -128
  542. package/dist/storage-protocol.js +3 -5
  543. package/dist/storage.js +17 -26
  544. package/dist/types.d.ts +68 -0
  545. package/dist/types.d.ts.map +1 -1
  546. package/dist/types.js +20 -18
  547. package/docs/building-with-agents.md +2 -0
  548. package/docs/deployment.md +7 -0
  549. package/docs/guides/bitbucket.md +9 -1
  550. package/docs/guides/github.md +20 -4
  551. package/docs/guides/gitlab.md +9 -1
  552. package/docs/guides/migrate.md +127 -0
  553. package/docs/reference/cli.md +39 -0
  554. package/docs/troubleshooting.md +1 -0
  555. package/package.json +1 -1
  556. package/skills/debug/SKILL.md +1 -0
  557. package/skills/github/SKILL.md +23 -0
  558. package/skills/migrate-v2/SKILL.md +51 -10
  559. package/dist/docs/assets/chunks/@localSearchIndexroot.BJ8UZggu.js +0 -1
  560. package/dist/docs/assets/chunks/channel.BTJ5J9FI.js +0 -1
  561. package/dist/docs/assets/chunks/classDiagram-6PBFFD2Q.D4BZ3cVV.js +0 -1
  562. package/dist/docs/assets/chunks/classDiagram-v2-HSJHXN6E.D4BZ3cVV.js +0 -1
  563. package/dist/docs/assets/chunks/clone.62tX-O-1.js +0 -1
  564. package/dist/docs/assets/chunks/stateDiagram-v2-QKLJ7IA2.DkTs1aEU.js +0 -1
  565. package/dist/docs/assets/reference_cli.md.GwugN3n-.lean.js +0 -1
  566. package/dist/docs/assets/troubleshooting.md.Bscj6ODe.js +0 -1
  567. package/dist/playground/assets/index-C1g_PTTZ.css +0 -1
  568. /package/dist/docs/assets/{building-with-agents.md.BPjPFxFg.lean.js → building-with-agents.md.Df87rAe1.lean.js} +0 -0
  569. /package/dist/docs/assets/{deployment.md.BdqTiGdc.lean.js → deployment.md.BYuEcDBv.lean.js} +0 -0
@@ -8,35 +8,6 @@
8
8
  * presigned URLs the backend handed back, and finalizes. Bytes never pass
9
9
  * through the Cursor backend.
10
10
  */
11
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
12
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
13
- return new (P || (P = Promise))(function (resolve, reject) {
14
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
15
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
16
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
17
- step((generator = generator.apply(thisArg, _arguments || [])).next());
18
- });
19
- };
20
- var __asyncValues = (this && this.__asyncValues) || function (o) {
21
- if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
22
- var m = o[Symbol.asyncIterator], i;
23
- return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i);
24
- function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }
25
- function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }
26
- };
27
- var __await = (this && this.__await) || function (v) { return this instanceof __await ? (this.v = v, this) : new __await(v); }
28
- var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _arguments, generator) {
29
- if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
30
- var g = generator.apply(thisArg, _arguments || []), i, q = [];
31
- return i = Object.create((typeof AsyncIterator === "function" ? AsyncIterator : Object).prototype), verb("next"), verb("throw"), verb("return", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;
32
- function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }
33
- function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }
34
- function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }
35
- function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }
36
- function fulfill(value) { resume("next", value); }
37
- function reject(value) { resume("throw", value); }
38
- function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }
39
- };
40
11
  import { spawn } from "node:child_process";
41
12
  import { createHash } from "node:crypto";
42
13
  import { createWriteStream } from "node:fs";
@@ -109,7 +80,6 @@ function nodeMeetsFloor(version) {
109
80
  * `probe`. Failures stop the push; warnings print and continue.
110
81
  */
111
82
  export function checkImage(inspected, probe) {
112
- var _a, _b, _c, _d, _e, _f;
113
83
  const checks = [];
114
84
  if (inspected.platform === REQUIRED_PLATFORM) {
115
85
  checks.push({ label: "platform", value: inspected.platform, status: "ok" });
@@ -132,7 +102,7 @@ export function checkImage(inspected, probe) {
132
102
  return checks;
133
103
  }
134
104
  for (const tool of ["bash", "git"]) {
135
- const path = (_a = probe[tool]) !== null && _a !== void 0 ? _a : "";
105
+ const path = probe[tool] ?? "";
136
106
  checks.push(path === ""
137
107
  ? {
138
108
  label: tool,
@@ -142,7 +112,7 @@ export function checkImage(inspected, probe) {
142
112
  }
143
113
  : { label: tool, value: path, status: "ok" });
144
114
  }
145
- const nodeRaw = (_b = probe.node) !== null && _b !== void 0 ? _b : "";
115
+ const nodeRaw = probe.node ?? "";
146
116
  const nodeVersion = parseNodeVersion(nodeRaw);
147
117
  const floor = `${MIN_NODE_VERSION[0]}.${MIN_NODE_VERSION[1]}`;
148
118
  if (nodeVersion === undefined) {
@@ -164,7 +134,7 @@ export function checkImage(inspected, probe) {
164
134
  else {
165
135
  checks.push({ label: "node", value: nodeRaw, status: "ok" });
166
136
  }
167
- const npm = (_c = probe.npm) !== null && _c !== void 0 ? _c : "";
137
+ const npm = probe.npm ?? "";
168
138
  checks.push(npm === ""
169
139
  ? {
170
140
  label: "npm",
@@ -173,7 +143,7 @@ export function checkImage(inspected, probe) {
173
143
  detail: "npm must be on PATH; the hosted install runs it.",
174
144
  }
175
145
  : { label: "npm", value: npm, status: "ok" });
176
- const user = (_d = probe.user) !== null && _d !== void 0 ? _d : "";
146
+ const user = probe.user ?? "";
177
147
  checks.push(user === "" || user === "root" || user === "0"
178
148
  ? { label: "user", value: user === "" ? "root" : user, status: "ok" }
179
149
  : {
@@ -182,7 +152,7 @@ export function checkImage(inspected, probe) {
182
152
  status: "warning",
183
153
  detail: "The image runs as a non-root user. The hosted state directory is mounted root-owned, so installs may fail to write it; prefer no USER instruction or USER root.",
184
154
  });
185
- const osIds = [(_e = probe.os) !== null && _e !== void 0 ? _e : "", ...((_f = probe.osLike) !== null && _f !== void 0 ? _f : "").split(/\s+/)]
155
+ const osIds = [probe.os ?? "", ...(probe.osLike ?? "").split(/\s+/)]
186
156
  .map(id => id.trim().toLowerCase())
187
157
  .filter(id => id !== "");
188
158
  const osValue = probe.os === undefined || probe.os === "" ? "unknown" : probe.os;
@@ -251,48 +221,44 @@ function shellDocker() {
251
221
  return { id, platform, sizeBytes: Number(size) };
252
222
  };
253
223
  return {
254
- inspect(image) {
255
- return __awaiter(this, void 0, void 0, function* () {
256
- const scoped = yield runDocker([
257
- "image",
258
- "inspect",
259
- "--platform",
260
- REQUIRED_PLATFORM,
261
- image,
262
- "--format",
263
- format,
264
- ]);
265
- const variant = scoped.code === 0 ? parse(scoped.stdout) : undefined;
266
- // An image with no linux/amd64 variant answers the scoped inspect
267
- // with the manifest list itself: no os/arch. Fall through so the
268
- // plain inspect names the platform it does have.
269
- if (variant !== undefined && variant.platform !== "/") {
270
- savePlatform = true;
271
- return variant;
272
- }
273
- // Older daemon, a missing image, or one with no linux/amd64 variant:
274
- // the plain inspect tells those apart (absent vs. the wrong platform).
275
- const plain = yield runDocker(["image", "inspect", image, "--format", format]);
276
- return plain.code === 0 ? parse(plain.stdout) : undefined;
277
- });
224
+ async inspect(image) {
225
+ const scoped = await runDocker([
226
+ "image",
227
+ "inspect",
228
+ "--platform",
229
+ REQUIRED_PLATFORM,
230
+ image,
231
+ "--format",
232
+ format,
233
+ ]);
234
+ const variant = scoped.code === 0 ? parse(scoped.stdout) : undefined;
235
+ // An image with no linux/amd64 variant answers the scoped inspect
236
+ // with the manifest list itself: no os/arch. Fall through so the
237
+ // plain inspect names the platform it does have.
238
+ if (variant !== undefined && variant.platform !== "/") {
239
+ savePlatform = true;
240
+ return variant;
241
+ }
242
+ // Older daemon, a missing image, or one with no linux/amd64 variant:
243
+ // the plain inspect tells those apart (absent vs. the wrong platform).
244
+ const plain = await runDocker(["image", "inspect", image, "--format", format]);
245
+ return plain.code === 0 ? parse(plain.stdout) : undefined;
278
246
  },
279
- probe(image) {
280
- return __awaiter(this, void 0, void 0, function* () {
281
- // Same platform selection as save: on an arm64 host Docker runs the
282
- // amd64 variant under emulation, which is enough for `command -v`.
283
- const run = yield runDocker([
284
- "run",
285
- "--rm",
286
- "--pull=never",
287
- ...(savePlatform ? ["--platform", REQUIRED_PLATFORM] : []),
288
- "--entrypoint",
289
- "sh",
290
- image,
291
- "-c",
292
- PROBE_SCRIPT,
293
- ]);
294
- return run.code === 0 ? parseProbe(run.stdout) : undefined;
295
- });
247
+ async probe(image) {
248
+ // Same platform selection as save: on an arm64 host Docker runs the
249
+ // amd64 variant under emulation, which is enough for `command -v`.
250
+ const run = await runDocker([
251
+ "run",
252
+ "--rm",
253
+ "--pull=never",
254
+ ...(savePlatform ? ["--platform", REQUIRED_PLATFORM] : []),
255
+ "--entrypoint",
256
+ "sh",
257
+ image,
258
+ "-c",
259
+ PROBE_SCRIPT,
260
+ ]);
261
+ return run.code === 0 ? parseProbe(run.stdout) : undefined;
296
262
  },
297
263
  save(image) {
298
264
  const child = spawn("docker", savePlatform ? ["save", "--platform", REQUIRED_PLATFORM, image] : ["save", image], { stdio: ["ignore", "pipe", "inherit"] });
@@ -307,294 +273,260 @@ function shellDocker() {
307
273
  };
308
274
  }
309
275
  function formatBytes(bytes) {
310
- if (bytes >= Math.pow(1024, 3)) {
311
- return `${(bytes / Math.pow(1024, 3)).toFixed(2)} GiB`;
276
+ if (bytes >= 1024 ** 3) {
277
+ return `${(bytes / 1024 ** 3).toFixed(2)} GiB`;
312
278
  }
313
- if (bytes >= Math.pow(1024, 2)) {
314
- return `${(bytes / Math.pow(1024, 2)).toFixed(1)} MiB`;
279
+ if (bytes >= 1024 ** 2) {
280
+ return `${(bytes / 1024 ** 2).toFixed(1)} MiB`;
315
281
  }
316
282
  return `${Math.ceil(bytes / 1024)} KiB`;
317
283
  }
318
- function saveCompressed(docker, image, path) {
319
- return __awaiter(this, void 0, void 0, function* () {
320
- const hash = createHash("sha256");
321
- yield pipeline(docker.save(image), createGzip(), function (source) {
322
- return __asyncGenerator(this, arguments, function* () {
323
- var _a, e_1, _b, _c;
324
- try {
325
- for (var _d = true, source_1 = __asyncValues(source), source_1_1; source_1_1 = yield __await(source_1.next()), _a = source_1_1.done, !_a; _d = true) {
326
- _c = source_1_1.value;
327
- _d = false;
328
- const chunk = _c;
329
- hash.update(chunk);
330
- yield yield __await(chunk);
331
- }
332
- }
333
- catch (e_1_1) { e_1 = { error: e_1_1 }; }
334
- finally {
335
- try {
336
- if (!_d && !_a && (_b = source_1.return)) yield __await(_b.call(source_1));
337
- }
338
- finally { if (e_1) throw e_1.error; }
339
- }
340
- });
341
- }, createWriteStream(path));
342
- return {
343
- sha256: hash.digest("hex"),
344
- sizeBytes: (yield stat(path)).size,
345
- };
346
- });
284
+ async function saveCompressed(docker, image, path) {
285
+ const hash = createHash("sha256");
286
+ await pipeline(docker.save(image), createGzip(), async function* (source) {
287
+ for await (const chunk of source) {
288
+ hash.update(chunk);
289
+ yield chunk;
290
+ }
291
+ }, createWriteStream(path));
292
+ return {
293
+ sha256: hash.digest("hex"),
294
+ sizeBytes: (await stat(path)).size,
295
+ };
347
296
  }
348
- function uploadPart(fetchImpl, path, part, range) {
349
- return __awaiter(this, void 0, void 0, function* () {
350
- const handle = yield open(path, "r");
351
- try {
352
- const length = range.end - range.start;
353
- const buffer = Buffer.alloc(length);
354
- yield handle.read(buffer, 0, length, range.start);
355
- let lastError;
356
- for (let attempt = 1; attempt <= UPLOAD_ATTEMPTS; attempt++) {
357
- try {
358
- const response = yield fetchImpl(part.url, {
359
- method: "PUT",
360
- body: buffer,
361
- headers: { "content-length": String(length) },
362
- });
363
- if (!response.ok) {
364
- throw new Error(`part ${part.partNumber}: HTTP ${response.status} ${yield response.text()}`);
365
- }
366
- const etag = response.headers.get("etag");
367
- if (etag === null || etag === "") {
368
- throw new Error(`part ${part.partNumber}: S3 returned no ETag`);
369
- }
370
- return etag;
297
+ async function uploadPart(fetchImpl, path, part, range) {
298
+ const handle = await open(path, "r");
299
+ try {
300
+ const length = range.end - range.start;
301
+ const buffer = Buffer.alloc(length);
302
+ await handle.read(buffer, 0, length, range.start);
303
+ let lastError;
304
+ for (let attempt = 1; attempt <= UPLOAD_ATTEMPTS; attempt++) {
305
+ try {
306
+ const response = await fetchImpl(part.url, {
307
+ method: "PUT",
308
+ body: buffer,
309
+ headers: { "content-length": String(length) },
310
+ });
311
+ if (!response.ok) {
312
+ throw new Error(`part ${part.partNumber}: HTTP ${response.status} ${await response.text()}`);
371
313
  }
372
- catch (error) {
373
- lastError = error;
314
+ const etag = response.headers.get("etag");
315
+ if (etag === null || etag === "") {
316
+ throw new Error(`part ${part.partNumber}: S3 returned no ETag`);
374
317
  }
318
+ return etag;
319
+ }
320
+ catch (error) {
321
+ lastError = error;
375
322
  }
376
- throw lastError;
377
- }
378
- finally {
379
- yield handle.close();
380
323
  }
381
- });
324
+ throw lastError;
325
+ }
326
+ finally {
327
+ await handle.close();
328
+ }
382
329
  }
383
- function uploadParts(fetchImpl, path, sizeBytes, upload, onPart) {
384
- return __awaiter(this, void 0, void 0, function* () {
385
- const queue = [...upload.parts];
386
- const results = [];
387
- let done = 0;
388
- const worker = () => __awaiter(this, void 0, void 0, function* () {
389
- for (;;) {
390
- const part = queue.shift();
391
- if (part === undefined) {
392
- return;
393
- }
394
- const start = (part.partNumber - 1) * upload.partSizeBytes;
395
- const end = Math.min(start + upload.partSizeBytes, sizeBytes);
396
- const etag = yield uploadPart(fetchImpl, path, part, { start, end });
397
- results.push({ partNumber: part.partNumber, etag });
398
- done++;
399
- onPart(done, upload.parts.length);
330
+ async function uploadParts(fetchImpl, path, sizeBytes, upload, onPart) {
331
+ const queue = [...upload.parts];
332
+ const results = [];
333
+ let done = 0;
334
+ const worker = async () => {
335
+ for (;;) {
336
+ const part = queue.shift();
337
+ if (part === undefined) {
338
+ return;
400
339
  }
401
- });
402
- yield Promise.all(Array.from({ length: Math.min(UPLOAD_CONCURRENCY, queue.length) }, worker));
403
- return results.sort((a, b) => a.partNumber - b.partNumber);
404
- });
405
- }
406
- export function cmdImagesPush(args, options) {
407
- return __awaiter(this, void 0, void 0, function* () {
408
- var _a, _b, _c, _d;
409
- const err = (_a = options.err) !== null && _a !== void 0 ? _a : ((text) => void process.stderr.write(text));
410
- if (args.image === undefined || args.image === "") {
411
- err(`Usage: ${CLI} images push <local-image> --name <name> [--team <id>]\n`);
412
- return 1;
413
- }
414
- if (args.name === undefined || args.name === "") {
415
- err(`--name is required: ${CLI} images push ${args.image} --name <name>\n`);
416
- return 1;
417
- }
418
- const nameError = validateContainerImageName(args.name);
419
- if (nameError !== undefined) {
420
- err(`${nameError}\n`);
421
- return 1;
340
+ const start = (part.partNumber - 1) * upload.partSizeBytes;
341
+ const end = Math.min(start + upload.partSizeBytes, sizeBytes);
342
+ const etag = await uploadPart(fetchImpl, path, part, { start, end });
343
+ results.push({ partNumber: part.partNumber, etag });
344
+ done++;
345
+ onPart(done, upload.parts.length);
422
346
  }
423
- const out = (_b = options.out) !== null && _b !== void 0 ? _b : ((text) => void process.stdout.write(text));
424
- const docker = (_c = options.docker) !== null && _c !== void 0 ? _c : shellDocker();
425
- const inspected = yield docker.inspect(args.image);
426
- if (inspected === undefined) {
427
- err(`No local image named ${args.image}. Build or pull it first (\`docker image ls\` shows what is available).\n`);
428
- return 1;
429
- }
430
- // Everything the hosted install needs is knowable locally; decide it
431
- // before signing in or moving any bytes. The platform check gates the
432
- // probe: a wrong-arch container cannot run here to be probed.
433
- const checks = checkImage(inspected, inspected.platform === REQUIRED_PLATFORM ? yield docker.probe(args.image) : undefined).filter(check => inspected.platform === REQUIRED_PLATFORM || check.label === "platform");
434
- if (options.json !== true) {
435
- out(renderChecks(args.image, checks));
436
- }
437
- const failed = checks.filter(check => check.status === "failed");
438
- if (failed.length > 0) {
439
- err(`${args.image} cannot run as a hosted agent image:\n${failed
440
- .map(check => { var _a; return ` ${check.label}: ${check.value}. ${(_a = check.detail) !== null && _a !== void 0 ? _a : ""}`; })
441
- .join("\n")}\n`);
442
- return 1;
443
- }
444
- const ctx = yield prepare(options);
445
- if (typeof ctx === "number") {
446
- return ctx;
447
- }
448
- const fetchImpl = (_d = options.fetchImpl) !== null && _d !== void 0 ? _d : fetch;
449
- // `docker save` of a real image takes minutes; learn about a full team
450
- // before paying for it. The backend re-checks at begin.
451
- let listed;
452
- try {
453
- listed = yield ctx.client.listContainerImages({ teamId: ctx.teamId });
454
- }
455
- catch (error) {
456
- return renderApiError(error, ctx.err);
347
+ };
348
+ await Promise.all(Array.from({ length: Math.min(UPLOAD_CONCURRENCY, queue.length) }, worker));
349
+ return results.sort((a, b) => a.partNumber - b.partNumber);
350
+ }
351
+ export async function cmdImagesPush(args, options) {
352
+ const err = options.err ?? ((text) => void process.stderr.write(text));
353
+ if (args.image === undefined || args.image === "") {
354
+ err(`Usage: ${CLI} images push <local-image> --name <name> [--team <id>]\n`);
355
+ return 1;
356
+ }
357
+ if (args.name === undefined || args.name === "") {
358
+ err(`--name is required: ${CLI} images push ${args.image} --name <name>\n`);
359
+ return 1;
360
+ }
361
+ const nameError = validateContainerImageName(args.name);
362
+ if (nameError !== undefined) {
363
+ err(`${nameError}\n`);
364
+ return 1;
365
+ }
366
+ const out = options.out ?? ((text) => void process.stdout.write(text));
367
+ const docker = options.docker ?? shellDocker();
368
+ const inspected = await docker.inspect(args.image);
369
+ if (inspected === undefined) {
370
+ err(`No local image named ${args.image}. Build or pull it first (\`docker image ls\` shows what is available).\n`);
371
+ return 1;
372
+ }
373
+ // Everything the hosted install needs is knowable locally; decide it
374
+ // before signing in or moving any bytes. The platform check gates the
375
+ // probe: a wrong-arch container cannot run here to be probed.
376
+ const checks = checkImage(inspected, inspected.platform === REQUIRED_PLATFORM ? await docker.probe(args.image) : undefined).filter(check => inspected.platform === REQUIRED_PLATFORM || check.label === "platform");
377
+ if (options.json !== true) {
378
+ out(renderChecks(args.image, checks));
379
+ }
380
+ const failed = checks.filter(check => check.status === "failed");
381
+ if (failed.length > 0) {
382
+ err(`${args.image} cannot run as a hosted agent image:\n${failed
383
+ .map(check => ` ${check.label}: ${check.value}. ${check.detail ?? ""}`)
384
+ .join("\n")}\n`);
385
+ return 1;
386
+ }
387
+ const ctx = await prepare(options);
388
+ if (typeof ctx === "number") {
389
+ return ctx;
390
+ }
391
+ const fetchImpl = options.fetchImpl ?? fetch;
392
+ // `docker save` of a real image takes minutes; learn about a full team
393
+ // before paying for it. The backend re-checks at begin.
394
+ let listed;
395
+ try {
396
+ listed = await ctx.client.listContainerImages({ teamId: ctx.teamId });
397
+ }
398
+ catch (error) {
399
+ return renderApiError(error, ctx.err);
400
+ }
401
+ if (listed.images.length >= listed.limit &&
402
+ !listed.images.some(image => image.name === args.name)) {
403
+ ctx.err(`${listed.images.length} of ${listed.limit} images used; delete some at ${IMAGES_DASHBOARD_URL} or with \`${CLI} images rm <name>\`.\n`);
404
+ return 1;
405
+ }
406
+ const dir = await mkdtemp(join(tmpdir(), "agent-sdk-image-"));
407
+ const tarball = join(dir, "image.tar.gz");
408
+ try {
409
+ if (!ctx.json) {
410
+ ctx.out(`Saving ${args.image} (${formatBytes(inspected.sizeBytes)} uncompressed)…\n`);
457
411
  }
458
- if (listed.images.length >= listed.limit &&
459
- !listed.images.some(image => image.name === args.name)) {
460
- ctx.err(`${listed.images.length} of ${listed.limit} images used; delete some at ${IMAGES_DASHBOARD_URL} or with \`${CLI} images rm <name>\`.\n`);
412
+ const saved = await saveCompressed(docker, args.image, tarball);
413
+ if (saved.sizeBytes > MAX_CONTAINER_IMAGE_BYTES) {
414
+ err(`Compressed image is ${formatBytes(saved.sizeBytes)}; the limit is ${formatBytes(MAX_CONTAINER_IMAGE_BYTES)}.\n`);
461
415
  return 1;
462
416
  }
463
- const dir = yield mkdtemp(join(tmpdir(), "agent-sdk-image-"));
464
- const tarball = join(dir, "image.tar.gz");
465
- try {
466
- if (!ctx.json) {
467
- ctx.out(`Saving ${args.image} (${formatBytes(inspected.sizeBytes)} uncompressed)…\n`);
468
- }
469
- const saved = yield saveCompressed(docker, args.image, tarball);
470
- if (saved.sizeBytes > MAX_CONTAINER_IMAGE_BYTES) {
471
- err(`Compressed image is ${formatBytes(saved.sizeBytes)}; the limit is ${formatBytes(MAX_CONTAINER_IMAGE_BYTES)}.\n`);
472
- return 1;
473
- }
474
- const upload = yield ctx.client.beginContainerImageUpload({
475
- teamId: ctx.teamId,
476
- name: args.name,
477
- sizeBytes: saved.sizeBytes,
478
- sha256: saved.sha256,
479
- dockerImageId: inspected.id,
480
- platform: inspected.platform,
481
- });
482
- if (!ctx.json) {
483
- ctx.out(`Uploading ${formatBytes(saved.sizeBytes)} in ${upload.parts.length} part${upload.parts.length === 1 ? "" : "s"}…\n`);
484
- }
485
- const parts = yield uploadParts(fetchImpl, tarball, saved.sizeBytes, upload, (done, total) => {
486
- if (!ctx.json && total > 1) {
487
- ctx.out(` ${done}/${total}\n`);
488
- }
489
- });
490
- const image = yield ctx.client.finalizeContainerImage({
491
- teamId: ctx.teamId,
492
- name: args.name,
493
- uploadId: upload.uploadId,
494
- parts,
495
- });
496
- if (ctx.json) {
497
- ctx.out(`${JSON.stringify({ image }, null, 2)}\n`);
498
- }
499
- else {
500
- ctx.out(`Pushed ${image.name} (${formatBytes(image.sizeBytes)}, sha256 ${saved.sha256.slice(0, 12)}).\n` +
501
- `Use it from a persistent agent: defineAgent({ persistent: true, hosting: { image: "${image.name}" } }).\n`);
502
- }
503
- return 0;
417
+ const upload = await ctx.client.beginContainerImageUpload({
418
+ teamId: ctx.teamId,
419
+ name: args.name,
420
+ sizeBytes: saved.sizeBytes,
421
+ sha256: saved.sha256,
422
+ dockerImageId: inspected.id,
423
+ platform: inspected.platform,
424
+ });
425
+ if (!ctx.json) {
426
+ ctx.out(`Uploading ${formatBytes(saved.sizeBytes)} in ${upload.parts.length} part${upload.parts.length === 1 ? "" : "s"}…\n`);
504
427
  }
505
- catch (error) {
506
- if (error instanceof DeployApiError) {
507
- return renderApiError(error, ctx.err);
428
+ const parts = await uploadParts(fetchImpl, tarball, saved.sizeBytes, upload, (done, total) => {
429
+ if (!ctx.json && total > 1) {
430
+ ctx.out(` ${done}/${total}\n`);
508
431
  }
509
- ctx.err(`Push failed: ${error instanceof Error ? error.message : String(error)}\nRun the same command again to retry.\n`);
510
- return 1;
511
- }
512
- finally {
513
- yield rm(dir, { recursive: true, force: true });
514
- }
515
- });
516
- }
517
- export function cmdImagesList(options) {
518
- return __awaiter(this, void 0, void 0, function* () {
519
- const ctx = yield prepare(options);
520
- if (typeof ctx === "number") {
521
- return ctx;
432
+ });
433
+ const image = await ctx.client.finalizeContainerImage({
434
+ teamId: ctx.teamId,
435
+ name: args.name,
436
+ uploadId: upload.uploadId,
437
+ parts,
438
+ });
439
+ if (ctx.json) {
440
+ ctx.out(`${JSON.stringify({ image }, null, 2)}\n`);
522
441
  }
523
- let listed;
524
- try {
525
- listed = yield ctx.client.listContainerImages({ teamId: ctx.teamId });
442
+ else {
443
+ ctx.out(`Pushed ${image.name} (${formatBytes(image.sizeBytes)}, sha256 ${saved.sha256.slice(0, 12)}).\n` +
444
+ `Use it from a persistent agent: defineAgent({ persistent: true, hosting: { image: "${image.name}" } }).\n`);
526
445
  }
527
- catch (error) {
446
+ return 0;
447
+ }
448
+ catch (error) {
449
+ if (error instanceof DeployApiError) {
528
450
  return renderApiError(error, ctx.err);
529
451
  }
530
- if (ctx.json) {
531
- ctx.out(`${JSON.stringify(listed, null, 2)}\n`);
532
- return 0;
533
- }
534
- if (listed.images.length === 0) {
535
- ctx.out(`No images pushed yet. Push one with \`${CLI} images push <local-image> --name <name>\`.\n`);
536
- return 0;
537
- }
538
- ctx.out(`${renderTable(["NAME", "SIZE", "PLATFORM", "SHA256", "PUSHED"], listed.images.map(image => { var _a; var _b, _c; return [
539
- image.name,
540
- formatBytes(image.sizeBytes),
541
- (_b = image.platform) !== null && _b !== void 0 ? _b : "",
542
- (_c = (_a = image.sha256) === null || _a === void 0 ? void 0 : _a.slice(0, 12)) !== null && _c !== void 0 ? _c : "",
543
- image.pushedAt,
544
- ]; }))}\n${listed.images.length} of ${listed.limit} images.\n`);
452
+ ctx.err(`Push failed: ${error instanceof Error ? error.message : String(error)}\nRun the same command again to retry.\n`);
453
+ return 1;
454
+ }
455
+ finally {
456
+ await rm(dir, { recursive: true, force: true });
457
+ }
458
+ }
459
+ export async function cmdImagesList(options) {
460
+ const ctx = await prepare(options);
461
+ if (typeof ctx === "number") {
462
+ return ctx;
463
+ }
464
+ let listed;
465
+ try {
466
+ listed = await ctx.client.listContainerImages({ teamId: ctx.teamId });
467
+ }
468
+ catch (error) {
469
+ return renderApiError(error, ctx.err);
470
+ }
471
+ if (ctx.json) {
472
+ ctx.out(`${JSON.stringify(listed, null, 2)}\n`);
545
473
  return 0;
546
- });
474
+ }
475
+ if (listed.images.length === 0) {
476
+ ctx.out(`No images pushed yet. Push one with \`${CLI} images push <local-image> --name <name>\`.\n`);
477
+ return 0;
478
+ }
479
+ ctx.out(`${renderTable(["NAME", "SIZE", "PLATFORM", "SHA256", "PUSHED"], listed.images.map(image => [
480
+ image.name,
481
+ formatBytes(image.sizeBytes),
482
+ image.platform ?? "",
483
+ image.sha256?.slice(0, 12) ?? "",
484
+ image.pushedAt,
485
+ ]))}\n${listed.images.length} of ${listed.limit} images.\n`);
486
+ return 0;
547
487
  }
548
- export function cmdImagesRm(name, options) {
549
- return __awaiter(this, void 0, void 0, function* () {
550
- var _a;
551
- if (name === undefined || name === "") {
552
- ((_a = options.err) !== null && _a !== void 0 ? _a : ((t) => void process.stderr.write(t)))(`Usage: ${CLI} images rm <name> [--team <id>]\n`);
488
+ export async function cmdImagesRm(name, options) {
489
+ if (name === undefined || name === "") {
490
+ (options.err ?? ((t) => void process.stderr.write(t)))(`Usage: ${CLI} images rm <name> [--team <id>]\n`);
491
+ return 1;
492
+ }
493
+ const ctx = await prepare(options);
494
+ if (typeof ctx === "number") {
495
+ return ctx;
496
+ }
497
+ try {
498
+ await ctx.client.deleteContainerImage({ teamId: ctx.teamId, name });
499
+ }
500
+ catch (error) {
501
+ if (error instanceof DeployApiError && error.status === 404) {
502
+ ctx.err(`No image named ${name} — check \`${CLI} images list\`.\n`);
553
503
  return 1;
554
504
  }
555
- const ctx = yield prepare(options);
556
- if (typeof ctx === "number") {
557
- return ctx;
558
- }
559
- try {
560
- yield ctx.client.deleteContainerImage({ teamId: ctx.teamId, name });
561
- }
562
- catch (error) {
563
- if (error instanceof DeployApiError && error.status === 404) {
564
- ctx.err(`No image named ${name} — check \`${CLI} images list\`.\n`);
565
- return 1;
566
- }
567
- return renderApiError(error, ctx.err);
568
- }
569
- if (ctx.json) {
570
- ctx.out(`${JSON.stringify({ removed: name }, null, 2)}\n`);
571
- }
572
- else {
573
- ctx.out(`Removed image ${name}.\n`);
574
- }
575
- return 0;
576
- });
505
+ return renderApiError(error, ctx.err);
506
+ }
507
+ if (ctx.json) {
508
+ ctx.out(`${JSON.stringify({ removed: name }, null, 2)}\n`);
509
+ }
510
+ else {
511
+ ctx.out(`Removed image ${name}.\n`);
512
+ }
513
+ return 0;
577
514
  }
578
515
  /** Test seam: a `DockerImageSource` over in-memory bytes. */
579
516
  export function memoryDockerImageSource(images) {
580
517
  return {
581
- inspect(image) {
582
- return __awaiter(this, void 0, void 0, function* () {
583
- const found = images[image];
584
- return found === undefined
585
- ? undefined
586
- : {
587
- id: found.id,
588
- platform: found.platform,
589
- sizeBytes: found.tar.length,
590
- };
591
- });
518
+ async inspect(image) {
519
+ const found = images[image];
520
+ return found === undefined
521
+ ? undefined
522
+ : {
523
+ id: found.id,
524
+ platform: found.platform,
525
+ sizeBytes: found.tar.length,
526
+ };
592
527
  },
593
- probe(image) {
594
- return __awaiter(this, void 0, void 0, function* () {
595
- var _a;
596
- return (_a = images[image]) === null || _a === void 0 ? void 0 : _a.probe;
597
- });
528
+ async probe(image) {
529
+ return images[image]?.probe;
598
530
  },
599
531
  save(image) {
600
532
  const found = images[image];