@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
@@ -5,15 +5,6 @@
5
5
  * same wire protocol the playground and curl use. Renders streamed
6
6
  * assistant text live, tool calls inline, and a per-turn usage footer.
7
7
  */
8
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
9
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
10
- return new (P || (P = Promise))(function (resolve, reject) {
11
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
12
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
13
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
14
- step((generator = generator.apply(thisArg, _arguments || [])).next());
15
- });
16
- };
17
8
  import { createInterface } from "node:readline";
18
9
  import { mergeRequestHeaders } from "./request-headers.js";
19
10
  import { fetchSessionEvents, listSessions } from "./sessions-client.js";
@@ -42,198 +33,188 @@ function makePalette(enabled) {
42
33
  };
43
34
  }
44
35
  /** Run the terminal chat client. Resolves when the session/REPL ends. */
45
- export function runChat(options) {
46
- return __awaiter(this, void 0, void 0, function* () {
47
- var _a;
48
- const baseUrl = options.baseUrl.replace(/\/$/, "");
49
- const auth = {
50
- bearerToken: options.bearerToken,
51
- headers: options.headers,
52
- };
53
- const colorEnabled = !options.noColor && process.stdout.isTTY === true && !process.env.NO_COLOR;
54
- const c = makePalette(colorEnabled);
55
- const write = (s) => {
56
- process.stdout.write(s);
57
- };
58
- const health = yield getJson(baseUrl, "/v1/health", auth);
59
- const agentName = typeof (health === null || health === void 0 ? void 0 : health.name) === "string" ? health.name : "agent-serve";
60
- write(`${c.bold(agentName)} ${c.dim(`· ${baseUrl}`)}\n`);
61
- const info = yield getJson(baseUrl, "/v1/info", auth);
62
- if (info && typeof info === "object") {
63
- const model = info.model;
64
- const tools = (_a = info.tools) !== null && _a !== void 0 ? _a : [];
65
- const modelText = typeof model === "string" ? model : JSON.stringify(model !== null && model !== void 0 ? model : "");
66
- write(c.dim(`model ${modelText} · ${tools.length} tool${tools.length === 1 ? "" : "s"}\n`));
67
- }
68
- write("\n");
69
- let sessionId = options.sessionId;
70
- let continuationToken = options.continuationToken;
71
- // Highest event index rendered so far; a follow-up streams from here so it
72
- // shows only the new turn, not the replayed transcript.
73
- let nextEventIndex = 0;
74
- if (options.sessionId !== undefined) {
75
- const attached = yield attachSession({
76
- baseUrl,
77
- auth,
78
- sessionId: options.sessionId,
79
- continuationToken: options.continuationToken,
80
- agentName,
81
- palette: c,
82
- write,
83
- });
84
- sessionId = attached.sessionId;
85
- continuationToken = attached.continuationToken;
86
- nextEventIndex = attached.nextEventIndex;
36
+ export async function runChat(options) {
37
+ const baseUrl = options.baseUrl.replace(/\/$/, "");
38
+ const auth = {
39
+ bearerToken: options.bearerToken,
40
+ headers: options.headers,
41
+ };
42
+ const colorEnabled = !options.noColor && process.stdout.isTTY === true && !process.env.NO_COLOR;
43
+ const c = makePalette(colorEnabled);
44
+ const write = (s) => {
45
+ process.stdout.write(s);
46
+ };
47
+ const health = await getJson(baseUrl, "/v1/health", auth);
48
+ const agentName = typeof health?.name === "string" ? health.name : "agent-serve";
49
+ write(`${c.bold(agentName)} ${c.dim(`· ${baseUrl}`)}\n`);
50
+ const info = await getJson(baseUrl, "/v1/info", auth);
51
+ if (info && typeof info === "object") {
52
+ const model = info.model;
53
+ const tools = info.tools ?? [];
54
+ const modelText = typeof model === "string" ? model : JSON.stringify(model ?? "");
55
+ write(c.dim(`model ${modelText} · ${tools.length} tool${tools.length === 1 ? "" : "s"}\n`));
56
+ }
57
+ write("\n");
58
+ let sessionId = options.sessionId;
59
+ let continuationToken = options.continuationToken;
60
+ // Highest event index rendered so far; a follow-up streams from here so it
61
+ // shows only the new turn, not the replayed transcript.
62
+ let nextEventIndex = 0;
63
+ if (options.sessionId !== undefined) {
64
+ const attached = await attachSession({
65
+ baseUrl,
66
+ auth,
67
+ sessionId: options.sessionId,
68
+ continuationToken: options.continuationToken,
69
+ agentName,
70
+ palette: c,
71
+ write,
72
+ });
73
+ sessionId = attached.sessionId;
74
+ continuationToken = attached.continuationToken;
75
+ nextEventIndex = attached.nextEventIndex;
76
+ }
77
+ else if (options.continuationToken !== undefined) {
78
+ throw new Error("--continuation-token requires --session (session id to reattach to)");
79
+ }
80
+ const runTurn = async (message, opts = {}) => {
81
+ // REPL lines are already echoed by readline; only reprint for seeded
82
+ // `--message` / one-shot so the transcript still shows the user turn.
83
+ if (opts.echoUser !== false) {
84
+ write(`${c.cyan("› you")} ${message}\n`);
87
85
  }
88
- else if (options.continuationToken !== undefined) {
89
- throw new Error("--continuation-token requires --session (session id to reattach to)");
86
+ const startIndex = sessionId === undefined ? 0 : nextEventIndex;
87
+ if (sessionId === undefined) {
88
+ const created = await postJson(baseUrl, "/v1/session", { message }, auth);
89
+ sessionId = str(created?.sessionId);
90
+ continuationToken = str(created?.continuationToken);
90
91
  }
91
- const runTurn = (message_1, ...args_1) => __awaiter(this, [message_1, ...args_1], void 0, function* (message, opts = {}) {
92
- var _a;
93
- // REPL lines are already echoed by readline; only reprint for seeded
94
- // `--message` / one-shot so the transcript still shows the user turn.
95
- if (opts.echoUser !== false) {
96
- write(`${c.cyan("› you")} ${message}\n`);
97
- }
98
- const startIndex = sessionId === undefined ? 0 : nextEventIndex;
99
- if (sessionId === undefined) {
100
- const created = yield postJson(baseUrl, "/v1/session", { message }, auth);
101
- sessionId = str(created === null || created === void 0 ? void 0 : created.sessionId);
102
- continuationToken = str(created === null || created === void 0 ? void 0 : created.continuationToken);
103
- }
104
- else {
105
- const resp = yield postJson(baseUrl, `/v1/session/${sessionId}`, { message, continuationToken }, auth);
106
- if ((resp === null || resp === void 0 ? void 0 : resp.ok) === false) {
107
- write(`${c.red("error")} ${str(resp.error)}: ${str(resp.message)}\n\n`);
108
- return;
109
- }
110
- continuationToken = (_a = str(resp === null || resp === void 0 ? void 0 : resp.continuationToken)) !== null && _a !== void 0 ? _a : continuationToken;
111
- }
112
- if (sessionId === undefined) {
113
- write(`${c.red("error")} server did not return a session id\n\n`);
92
+ else {
93
+ const resp = await postJson(baseUrl, `/v1/session/${sessionId}`, { message, continuationToken }, auth);
94
+ if (resp?.ok === false) {
95
+ write(`${c.red("error")} ${str(resp.error)}: ${str(resp.message)}\n\n`);
114
96
  return;
115
97
  }
116
- nextEventIndex = yield streamTurn({
117
- baseUrl,
118
- sessionId,
119
- startIndex,
120
- auth,
121
- agentName,
122
- palette: c,
123
- write,
124
- });
125
- write("\n");
98
+ continuationToken = str(resp?.continuationToken) ?? continuationToken;
99
+ }
100
+ if (sessionId === undefined) {
101
+ write(`${c.red("error")} server did not return a session id\n\n`);
102
+ return;
103
+ }
104
+ nextEventIndex = await streamTurn({
105
+ baseUrl,
106
+ sessionId,
107
+ startIndex,
108
+ auth,
109
+ agentName,
110
+ palette: c,
111
+ write,
126
112
  });
127
- const oneShot = options.oneShot === true || process.stdin.isTTY !== true;
128
- if (options.message !== undefined) {
129
- yield runTurn(options.message);
130
- if (oneShot) {
113
+ write("\n");
114
+ };
115
+ const oneShot = options.oneShot === true || process.stdin.isTTY !== true;
116
+ if (options.message !== undefined) {
117
+ await runTurn(options.message);
118
+ if (oneShot) {
119
+ return;
120
+ }
121
+ }
122
+ write(c.dim("Type a message and press Enter. Ctrl-D or /quit to exit.\n\n"));
123
+ const rl = createInterface({ input: process.stdin, output: process.stdout });
124
+ await new Promise(resolve => {
125
+ const prompt = () => {
126
+ rl.setPrompt(c.cyan("› "));
127
+ rl.prompt();
128
+ };
129
+ prompt();
130
+ rl.on("line", line => {
131
+ const text = line.trim();
132
+ if (text === "") {
133
+ prompt();
131
134
  return;
132
135
  }
133
- }
134
- write(c.dim("Type a message and press Enter. Ctrl-D or /quit to exit.\n\n"));
135
- const rl = createInterface({ input: process.stdin, output: process.stdout });
136
- yield new Promise(resolve => {
137
- const prompt = () => {
138
- rl.setPrompt(c.cyan("› "));
139
- rl.prompt();
140
- };
141
- prompt();
142
- rl.on("line", line => {
143
- const text = line.trim();
144
- if (text === "") {
145
- prompt();
146
- return;
147
- }
148
- if (text === "/quit" || text === "/exit") {
149
- rl.close();
150
- return;
151
- }
152
- rl.pause();
153
- runTurn(text, { echoUser: false })
154
- .catch(err => {
155
- write(`${c.red("error")} ${describe(err)}\n\n`);
156
- })
157
- .finally(() => {
158
- rl.resume();
159
- prompt();
160
- });
161
- });
162
- rl.on("close", () => {
163
- write(c.dim("\nbye\n"));
164
- resolve();
136
+ if (text === "/quit" || text === "/exit") {
137
+ rl.close();
138
+ return;
139
+ }
140
+ rl.pause();
141
+ runTurn(text, { echoUser: false })
142
+ .catch(err => {
143
+ write(`${c.red("error")} ${describe(err)}\n\n`);
144
+ })
145
+ .finally(() => {
146
+ rl.resume();
147
+ prompt();
165
148
  });
166
149
  });
150
+ rl.on("close", () => {
151
+ write(c.dim("\nbye\n"));
152
+ resolve();
153
+ });
167
154
  });
168
155
  }
169
156
  /**
170
157
  * Resolve the current continuation token for a session via `GET /v1/sessions`.
171
158
  * Throws when the session is missing or not followable.
172
159
  */
173
- export function lookupSessionContinuation(args) {
174
- return __awaiter(this, void 0, void 0, function* () {
175
- const sessions = yield listSessions({
176
- baseUrl: args.baseUrl,
177
- auth: args.auth,
178
- });
179
- const match = sessions.find(s => s.sessionId === args.sessionId);
180
- if (match === undefined) {
181
- throw new Error(`Session ${args.sessionId} not found in /v1/sessions (wrong id, or not owned by this caller). ` +
182
- `Pass --continuation-token if you have it.`);
183
- }
184
- const token = str(match.continuationToken);
185
- if (token === undefined) {
186
- throw new Error(`Session ${args.sessionId} has no continuation token` +
187
- (match.mode === "task" ? " (task sessions are not followable)." : "."));
188
- }
189
- return token;
160
+ export async function lookupSessionContinuation(args) {
161
+ const sessions = await listSessions({
162
+ baseUrl: args.baseUrl,
163
+ auth: args.auth,
190
164
  });
165
+ const match = sessions.find(s => s.sessionId === args.sessionId);
166
+ if (match === undefined) {
167
+ throw new Error(`Session ${args.sessionId} not found in /v1/sessions (wrong id, or not owned by this caller). ` +
168
+ `Pass --continuation-token if you have it.`);
169
+ }
170
+ const token = str(match.continuationToken);
171
+ if (token === undefined) {
172
+ throw new Error(`Session ${args.sessionId} has no continuation token` +
173
+ (match.mode === "task" ? " (task sessions are not followable)." : "."));
174
+ }
175
+ return token;
191
176
  }
192
- function attachSession(args) {
193
- return __awaiter(this, void 0, void 0, function* () {
194
- const { palette: c, write } = args;
195
- let continuationToken = args.continuationToken;
196
- if (continuationToken === undefined || continuationToken === "") {
197
- continuationToken = yield lookupSessionContinuation({
198
- baseUrl: args.baseUrl,
199
- sessionId: args.sessionId,
200
- auth: args.auth,
201
- });
202
- }
203
- const events = yield fetchSessionEvents({
177
+ async function attachSession(args) {
178
+ const { palette: c, write } = args;
179
+ let continuationToken = args.continuationToken;
180
+ if (continuationToken === undefined || continuationToken === "") {
181
+ continuationToken = await lookupSessionContinuation({
204
182
  baseUrl: args.baseUrl,
205
183
  sessionId: args.sessionId,
206
184
  auth: args.auth,
207
185
  });
208
- if (events.length > 0) {
209
- write(c.dim(`reattached ${args.sessionId} · replaying ${events.length} events\n\n`));
210
- renderTranscript(events, args.agentName, c, write);
211
- write("\n");
212
- }
213
- else {
214
- write(c.dim(`reattached ${args.sessionId}\n\n`));
215
- }
216
- const lastIndex = events.length === 0
217
- ? -1
218
- : Math.max(...events.map(e => (typeof e.index === "number" ? e.index : -1)));
219
- return {
220
- sessionId: args.sessionId,
221
- continuationToken,
222
- nextEventIndex: lastIndex + 1,
223
- };
186
+ }
187
+ const events = await fetchSessionEvents({
188
+ baseUrl: args.baseUrl,
189
+ sessionId: args.sessionId,
190
+ auth: args.auth,
224
191
  });
192
+ if (events.length > 0) {
193
+ write(c.dim(`reattached ${args.sessionId} · replaying ${events.length} events\n\n`));
194
+ renderTranscript(events, args.agentName, c, write);
195
+ write("\n");
196
+ }
197
+ else {
198
+ write(c.dim(`reattached ${args.sessionId}\n\n`));
199
+ }
200
+ const lastIndex = events.length === 0
201
+ ? -1
202
+ : Math.max(...events.map(e => (typeof e.index === "number" ? e.index : -1)));
203
+ return {
204
+ sessionId: args.sessionId,
205
+ continuationToken,
206
+ nextEventIndex: lastIndex + 1,
207
+ };
225
208
  }
226
209
  /** Compact historical transcript for reattach (final messages + tool calls). */
227
210
  function renderTranscript(events, agentName, c, write) {
228
- var _a;
229
- var _b;
230
211
  for (const event of events) {
231
212
  if (event.type === "message.received") {
232
213
  write(`${c.cyan("› you")} ${event.data.text}\n`);
233
214
  continue;
234
215
  }
235
216
  if (event.type === "message.completed") {
236
- const text = (_b = (_a = event.data.text) === null || _a === void 0 ? void 0 : _a.trim()) !== null && _b !== void 0 ? _b : "";
217
+ const text = event.data.text?.trim() ?? "";
237
218
  if (text !== "" && event.data.finishReason !== "tool_call") {
238
219
  write(`${c.green(`‹ ${agentName}`)} ${text}\n`);
239
220
  }
@@ -257,201 +238,199 @@ function renderTranscript(events, agentName, c, write) {
257
238
  }
258
239
  const TERMINAL_TYPES = new Set(["session.waiting", "session.completed", "session.failed"]);
259
240
  /** Streams a turn to the terminal; returns the next event index to resume at. */
260
- function streamTurn(args) {
261
- return __awaiter(this, void 0, void 0, function* () {
262
- var _a, _b;
263
- const { palette: c, write } = args;
264
- const url = `${args.baseUrl}/v1/session/${args.sessionId}/stream?startIndex=${args.startIndex}`;
265
- const resp = yield fetch(url, { headers: mergeRequestHeaders(args.auth) });
266
- if (!resp.ok || resp.body === null) {
267
- write(`${c.red("error")} stream failed (${resp.status})\n`);
268
- return args.startIndex;
241
+ async function streamTurn(args) {
242
+ const { palette: c, write } = args;
243
+ const url = `${args.baseUrl}/v1/session/${args.sessionId}/stream?startIndex=${args.startIndex}`;
244
+ const resp = await fetch(url, { headers: mergeRequestHeaders(args.auth) });
245
+ if (!resp.ok || resp.body === null) {
246
+ write(`${c.red("error")} stream failed (${resp.status})\n`);
247
+ return args.startIndex;
248
+ }
249
+ const reader = resp.body.getReader();
250
+ const decoder = new TextDecoder();
251
+ let buffer = "";
252
+ let assistantOpen = false;
253
+ let thinkingShown = false;
254
+ let lastIndex = args.startIndex - 1;
255
+ const closeAssistant = () => {
256
+ if (assistantOpen) {
257
+ write("\n");
258
+ assistantOpen = false;
259
+ }
260
+ };
261
+ for (;;) {
262
+ const chunk = await reader.read();
263
+ if (chunk.done) {
264
+ break;
269
265
  }
270
- const reader = resp.body.getReader();
271
- const decoder = new TextDecoder();
272
- let buffer = "";
273
- let assistantOpen = false;
274
- let thinkingShown = false;
275
- let lastIndex = args.startIndex - 1;
276
- const closeAssistant = () => {
277
- if (assistantOpen) {
278
- write("\n");
279
- assistantOpen = false;
266
+ buffer += decoder.decode(chunk.value, { stream: true });
267
+ const lines = buffer.split("\n");
268
+ buffer = lines.pop() ?? "";
269
+ let stop = false;
270
+ for (const line of lines) {
271
+ if (line.trim() === "") {
272
+ continue;
280
273
  }
281
- };
282
- for (;;) {
283
- const chunk = yield reader.read();
284
- if (chunk.done) {
285
- break;
274
+ let event;
275
+ try {
276
+ event = JSON.parse(line);
286
277
  }
287
- buffer += decoder.decode(chunk.value, { stream: true });
288
- const lines = buffer.split("\n");
289
- buffer = (_a = lines.pop()) !== null && _a !== void 0 ? _a : "";
290
- let stop = false;
291
- for (const line of lines) {
292
- if (line.trim() === "") {
293
- continue;
294
- }
295
- let event;
296
- try {
297
- event = JSON.parse(line);
298
- }
299
- catch (_c) {
300
- continue;
301
- }
302
- if (typeof event.index === "number") {
303
- lastIndex = event.index;
304
- }
305
- if (event.type === "agent.bound") {
306
- closeAssistant();
307
- const { sdkAgentId, url } = event.data;
308
- write(` ${c.cyan("agent")} ${c.bold(sdkAgentId)}\n`);
309
- if (url !== undefined) {
310
- write(` ${c.dim(url)}\n`);
311
- }
312
- continue;
313
- }
314
- if (event.type === "reasoning.appended" &&
315
- event.data.parentCallId === undefined &&
316
- !thinkingShown) {
317
- thinkingShown = true;
318
- write(c.dim(" · thinking…\n"));
319
- continue;
320
- }
321
- if (event.type === "message.appended") {
322
- if (event.data.parentCallId !== undefined) {
323
- continue;
324
- }
325
- if (!assistantOpen) {
326
- write(`${c.green(`‹ ${args.agentName}`)} `);
327
- assistantOpen = true;
328
- }
329
- write(event.data.delta);
330
- continue;
331
- }
332
- if (event.type === "message.completed") {
333
- if (event.data.parentCallId !== undefined) {
334
- continue;
335
- }
336
- closeAssistant();
337
- continue;
338
- }
339
- if (event.type === "actions.requested") {
340
- closeAssistant();
341
- for (const call of event.data.calls) {
342
- if (call.toolName === "task" && call.parentCallId === undefined) {
343
- continue;
344
- }
345
- const indent = call.parentCallId !== undefined || event.data.parentCallId !== undefined
346
- ? " "
347
- : " ";
348
- write(`${indent}${c.magenta("⚙")} ${c.bold(call.toolName)}${c.dim(formatArgs(call.args))}\n`);
349
- }
350
- continue;
351
- }
352
- if (event.type === "action.approval_requested") {
353
- closeAssistant();
354
- write(` ${c.yellow("⏸")} ${c.bold(event.data.toolName)} ${c.dim("awaiting human approval")}\n`);
355
- continue;
278
+ catch {
279
+ continue;
280
+ }
281
+ if (typeof event.index === "number") {
282
+ lastIndex = event.index;
283
+ }
284
+ if (event.type === "agent.bound") {
285
+ closeAssistant();
286
+ const { sdkAgentId, url } = event.data;
287
+ write(` ${c.cyan("agent")} ${c.bold(sdkAgentId)}\n`);
288
+ if (url !== undefined) {
289
+ write(` ${c.dim(url)}\n`);
356
290
  }
357
- if (event.type === "action.approval_resolved") {
358
- const mark = event.data.decision === "approve" ? c.green("✓") : c.red("✗");
359
- write(` ${mark} ${c.bold(event.data.toolName)} ${c.dim(event.data.decision === "approve" ? "approved" : "denied")}\n`);
291
+ continue;
292
+ }
293
+ if (event.type === "reasoning.appended" &&
294
+ event.data.parentCallId === undefined &&
295
+ !thinkingShown) {
296
+ thinkingShown = true;
297
+ write(c.dim(" · thinking…\n"));
298
+ continue;
299
+ }
300
+ if (event.type === "message.appended") {
301
+ if (event.data.parentCallId !== undefined) {
360
302
  continue;
361
303
  }
362
- if (event.type === "action.auth_requested") {
363
- closeAssistant();
364
- write(` ${c.yellow("⏸")} ${c.bold(event.data.connection)} ${c.dim("awaiting MCP authorization")}\n`);
365
- continue;
304
+ if (!assistantOpen) {
305
+ write(`${c.green(`‹ ${args.agentName}`)} `);
306
+ assistantOpen = true;
366
307
  }
367
- if (event.type === "action.auth_resolved") {
368
- const mark = event.data.decision === "approve" ? c.green("✓") : c.red("✗");
369
- write(` ${mark} ${c.bold(event.data.connection)} ${c.dim(event.data.decision === "approve" ? "connected" : "denied")}\n`);
308
+ write(event.data.delta);
309
+ continue;
310
+ }
311
+ if (event.type === "message.completed") {
312
+ if (event.data.parentCallId !== undefined) {
370
313
  continue;
371
314
  }
372
- if (event.type === "action.result") {
373
- if (event.data.toolName === "task" && event.data.parentCallId === undefined) {
315
+ closeAssistant();
316
+ continue;
317
+ }
318
+ if (event.type === "actions.requested") {
319
+ closeAssistant();
320
+ for (const call of event.data.calls) {
321
+ if (call.toolName === "task" && call.parentCallId === undefined) {
374
322
  continue;
375
323
  }
376
- const label = event.data.isError ? c.red("✗") : c.magenta("→");
377
- const indent = event.data.parentCallId !== undefined ? " " : " ";
378
- write(`${indent}${label} ${c.dim(truncate(stringify(event.data.output), 100))}\n`);
379
- continue;
380
- }
381
- if (event.type === "subagent.called") {
382
- closeAssistant();
383
- const detail = event.data.description ? ` — ${truncate(event.data.description, 60)}` : "";
384
- write(` ${c.magenta("task")} ${c.bold((_b = event.data.name) !== null && _b !== void 0 ? _b : "subagent")}${c.dim(detail)}\n`);
385
- continue;
324
+ const indent = call.parentCallId !== undefined || event.data.parentCallId !== undefined
325
+ ? " "
326
+ : " ";
327
+ write(`${indent}${c.magenta("⚙")} ${c.bold(call.toolName)}${c.dim(formatArgs(call.args))}\n`);
386
328
  }
387
- if (event.type === "turn.completed") {
388
- closeAssistant();
389
- const usage = event.data.usage;
390
- const tokens = usage ? ` · in ${usage.inputTokens} out ${usage.outputTokens} tok` : "";
391
- write(c.dim(` ─ turn done${tokens}\n`));
392
- continue;
393
- }
394
- if (event.type === "turn.failed") {
395
- closeAssistant();
396
- write(`${c.red(" ✗ turn failed")} ${event.data.message}\n`);
329
+ continue;
330
+ }
331
+ if (event.type === "action.approval_requested") {
332
+ closeAssistant();
333
+ write(` ${c.yellow("⏸")} ${c.bold(event.data.toolName)} ${c.dim("awaiting human approval")}\n`);
334
+ continue;
335
+ }
336
+ if (event.type === "action.approval_resolved") {
337
+ const mark = event.data.decision === "approve" ? c.green("✓") : c.red("✗");
338
+ write(` ${mark} ${c.bold(event.data.toolName)} ${c.dim(event.data.decision === "approve" ? "approved" : "denied")}\n`);
339
+ continue;
340
+ }
341
+ if (event.type === "action.auth_requested") {
342
+ closeAssistant();
343
+ write(` ${c.yellow("⏸")} ${c.bold(event.data.connection)} ${c.dim("awaiting MCP authorization")}\n`);
344
+ continue;
345
+ }
346
+ if (event.type === "action.auth_resolved") {
347
+ const mark = event.data.decision === "approve" ? c.green("✓") : c.red("✗");
348
+ write(` ${mark} ${c.bold(event.data.connection)} ${c.dim(event.data.decision === "approve" ? "connected" : "denied")}\n`);
349
+ continue;
350
+ }
351
+ if (event.type === "action.result") {
352
+ if (event.data.toolName === "task" && event.data.parentCallId === undefined) {
397
353
  continue;
398
354
  }
399
- if (TERMINAL_TYPES.has(event.type)) {
400
- closeAssistant();
401
- stop = true;
402
- break;
403
- }
355
+ const label = event.data.isError ? c.red("✗") : c.magenta("→");
356
+ const indent = event.data.parentCallId !== undefined ? " " : " ";
357
+ write(`${indent}${label} ${c.dim(truncate(stringify(event.data.output), 100))}\n`);
358
+ continue;
404
359
  }
405
- if (stop) {
360
+ if (event.type === "subagent.called") {
361
+ closeAssistant();
362
+ const detail = event.data.description ? ` — ${truncate(event.data.description, 60)}` : "";
363
+ write(` ${c.magenta("task")} ${c.bold(event.data.name ?? "subagent")}${c.dim(detail)}\n`);
364
+ continue;
365
+ }
366
+ if (event.type === "turn.completed") {
367
+ closeAssistant();
368
+ const usage = event.data.usage;
369
+ const tokens = usage ? ` · in ${usage.inputTokens} out ${usage.outputTokens} tok` : "";
370
+ write(c.dim(` ─ turn done${tokens}\n`));
371
+ continue;
372
+ }
373
+ if (event.type === "turn.failed") {
374
+ closeAssistant();
375
+ write(`${c.red(" ✗ turn failed")} ${event.data.message}\n`);
376
+ continue;
377
+ }
378
+ if (TERMINAL_TYPES.has(event.type)) {
379
+ closeAssistant();
380
+ stop = true;
406
381
  break;
407
382
  }
408
383
  }
409
- yield reader.cancel().catch(() => { });
410
- return lastIndex + 1;
411
- });
384
+ if (stop) {
385
+ break;
386
+ }
387
+ }
388
+ await reader.cancel().catch(() => { });
389
+ return lastIndex + 1;
412
390
  }
413
391
  // ---------------------------------------------------------------------------
414
392
  // HTTP helpers (built-in fetch; node 22+)
415
393
  // ---------------------------------------------------------------------------
416
- function getJson(baseUrl, path, auth) {
417
- return __awaiter(this, void 0, void 0, function* () {
418
- try {
419
- const resp = yield fetch(`${baseUrl}${path}`, {
420
- headers: mergeRequestHeaders(auth),
421
- });
422
- const text = yield resp.text();
423
- return text ? JSON.parse(text) : undefined;
424
- }
425
- catch (_a) {
426
- return undefined;
427
- }
428
- });
429
- }
430
- function postJson(baseUrl, path, body, auth) {
431
- return __awaiter(this, void 0, void 0, function* () {
432
- var _a, _b, _c;
433
- const resp = yield fetch(`${baseUrl}${path}`, {
434
- method: "POST",
435
- headers: Object.assign({ "content-type": "application/json" }, mergeRequestHeaders(auth)),
436
- body: JSON.stringify(body),
394
+ async function getJson(baseUrl, path, auth) {
395
+ try {
396
+ const resp = await fetch(`${baseUrl}${path}`, {
397
+ headers: mergeRequestHeaders(auth),
437
398
  });
438
- const text = yield resp.text();
439
- let parsed;
440
- if (text) {
441
- try {
442
- parsed = JSON.parse(text);
443
- }
444
- catch (_d) {
445
- parsed = { message: text };
446
- }
399
+ const text = await resp.text();
400
+ return text ? JSON.parse(text) : undefined;
401
+ }
402
+ catch {
403
+ return undefined;
404
+ }
405
+ }
406
+ async function postJson(baseUrl, path, body, auth) {
407
+ const resp = await fetch(`${baseUrl}${path}`, {
408
+ method: "POST",
409
+ headers: {
410
+ "content-type": "application/json",
411
+ ...mergeRequestHeaders(auth),
412
+ },
413
+ body: JSON.stringify(body),
414
+ });
415
+ const text = await resp.text();
416
+ let parsed;
417
+ if (text) {
418
+ try {
419
+ parsed = JSON.parse(text);
447
420
  }
448
- if (!resp.ok) {
449
- const anyrunReason = resp.headers.get("x-anyrun-failure-reason");
450
- const message = (_c = (_b = (_a = (typeof (parsed === null || parsed === void 0 ? void 0 : parsed.message) === "string" && parsed.message !== "" ? parsed.message : undefined)) !== null && _a !== void 0 ? _a : (typeof (parsed === null || parsed === void 0 ? void 0 : parsed.error) === "string" ? parsed.error : undefined)) !== null && _b !== void 0 ? _b : anyrunReason) !== null && _c !== void 0 ? _c : `HTTP ${resp.status}`;
451
- return { ok: false, error: "http_error", message, status: resp.status };
421
+ catch {
422
+ parsed = { message: text };
452
423
  }
453
- return parsed;
454
- });
424
+ }
425
+ if (!resp.ok) {
426
+ const anyrunReason = resp.headers.get("x-anyrun-failure-reason");
427
+ const message = (typeof parsed?.message === "string" && parsed.message !== "" ? parsed.message : undefined) ??
428
+ (typeof parsed?.error === "string" ? parsed.error : undefined) ??
429
+ anyrunReason ??
430
+ `HTTP ${resp.status}`;
431
+ return { ok: false, error: "http_error", message, status: resp.status };
432
+ }
433
+ return parsed;
455
434
  }
456
435
  function str(value) {
457
436
  return typeof value === "string" ? value : undefined;