@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
@@ -18,22 +18,6 @@
18
18
  * credentials are re-minted shortly before `expiresAt` and once on upstream
19
19
  * 401 so a long playground session does not require restarting the CLI.
20
20
  */
21
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
22
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
23
- return new (P || (P = Promise))(function (resolve, reject) {
24
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
25
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
26
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
27
- step((generator = generator.apply(thisArg, _arguments || [])).next());
28
- });
29
- };
30
- var __asyncValues = (this && this.__asyncValues) || function (o) {
31
- if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
32
- var m = o[Symbol.asyncIterator], i;
33
- 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);
34
- 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); }); }; }
35
- function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }
36
- };
37
21
  import { randomBytes } from "node:crypto";
38
22
  import { createServer, request as httpRequest, } from "node:http";
39
23
  import { request as httpsRequest } from "node:https";
@@ -68,101 +52,97 @@ const PROXY_TOKEN_QUERY = "proxyToken";
68
52
  /**
69
53
  * Start a loopback proxy. Resolves once listening.
70
54
  */
71
- export function startPlaygroundProxy(args) {
72
- return __awaiter(this, void 0, void 0, function* () {
73
- var _a, _b, _c;
74
- const upstream = parseUpstreamUrl(args.upstreamUrl);
75
- const state = {
76
- upstream,
77
- injectHeaders: buildInjectHeaders(args.headers, args.bearerToken),
78
- expiresAtMs: parseExpiresAtMs(args.expiresAt),
79
- };
80
- const accessToken = (_a = args.accessToken) !== null && _a !== void 0 ? _a : randomBytes(32).toString("base64url");
81
- const now = (_b = args.now) !== null && _b !== void 0 ? _b : Date.now;
82
- let refreshInFlight;
83
- /** Set after listen; used for Origin CSRF checks. */
84
- let proxyOrigin = "";
85
- const ensureFreshAccess = (force) => __awaiter(this, void 0, void 0, function* () {
86
- if (args.refreshUpstream === undefined) {
87
- return;
88
- }
89
- const expired = state.expiresAtMs !== undefined && now() >= state.expiresAtMs - ACCESS_EXPIRY_LEEWAY_MS;
90
- if (!force && !expired) {
91
- return;
92
- }
93
- if (refreshInFlight !== undefined) {
94
- yield refreshInFlight;
55
+ export async function startPlaygroundProxy(args) {
56
+ const upstream = parseUpstreamUrl(args.upstreamUrl);
57
+ const state = {
58
+ upstream,
59
+ injectHeaders: buildInjectHeaders(args.headers, args.bearerToken),
60
+ expiresAtMs: parseExpiresAtMs(args.expiresAt),
61
+ };
62
+ const accessToken = args.accessToken ?? randomBytes(32).toString("base64url");
63
+ const now = args.now ?? Date.now;
64
+ let refreshInFlight;
65
+ /** Set after listen; used for Origin CSRF checks. */
66
+ let proxyOrigin = "";
67
+ const ensureFreshAccess = async (force) => {
68
+ if (args.refreshUpstream === undefined) {
69
+ return;
70
+ }
71
+ const expired = state.expiresAtMs !== undefined && now() >= state.expiresAtMs - ACCESS_EXPIRY_LEEWAY_MS;
72
+ if (!force && !expired) {
73
+ return;
74
+ }
75
+ if (refreshInFlight !== undefined) {
76
+ await refreshInFlight;
77
+ return;
78
+ }
79
+ refreshInFlight = (async () => {
80
+ const next = await args.refreshUpstream();
81
+ state.upstream = parseUpstreamUrl(next.upstreamUrl);
82
+ state.injectHeaders = buildInjectHeaders(next.headers, args.bearerToken);
83
+ state.expiresAtMs = parseExpiresAtMs(next.expiresAt);
84
+ })().finally(() => {
85
+ refreshInFlight = undefined;
86
+ });
87
+ await refreshInFlight;
88
+ };
89
+ const create = args.createServerImpl ?? createServer;
90
+ const server = create((req, res) => {
91
+ void handleProxyRequest({
92
+ req,
93
+ res,
94
+ getState: () => state,
95
+ ensureFreshAccess,
96
+ canRefresh: args.refreshUpstream !== undefined,
97
+ accessToken,
98
+ proxyOrigin: () => proxyOrigin,
99
+ }).catch((error) => {
100
+ if (res.headersSent) {
101
+ if (!res.writableEnded) {
102
+ res.end();
103
+ }
95
104
  return;
96
105
  }
97
- refreshInFlight = (() => __awaiter(this, void 0, void 0, function* () {
98
- const next = yield args.refreshUpstream();
99
- state.upstream = parseUpstreamUrl(next.upstreamUrl);
100
- state.injectHeaders = buildInjectHeaders(next.headers, args.bearerToken);
101
- state.expiresAtMs = parseExpiresAtMs(next.expiresAt);
102
- }))().finally(() => {
103
- refreshInFlight = undefined;
104
- });
105
- yield refreshInFlight;
106
+ const message = error instanceof Error ? error.message : String(error);
107
+ res.writeHead(502, { "content-type": "text/plain; charset=utf-8" });
108
+ res.end(`Playground proxy error: ${message}`);
106
109
  });
107
- const create = (_c = args.createServerImpl) !== null && _c !== void 0 ? _c : createServer;
108
- const server = create((req, res) => {
109
- void handleProxyRequest({
110
- req,
111
- res,
112
- getState: () => state,
113
- ensureFreshAccess,
114
- canRefresh: args.refreshUpstream !== undefined,
115
- accessToken,
116
- proxyOrigin: () => proxyOrigin,
117
- }).catch((error) => {
118
- if (res.headersSent) {
119
- if (!res.writableEnded) {
120
- res.end();
121
- }
110
+ });
111
+ await new Promise((resolve, reject) => {
112
+ server.once("error", reject);
113
+ server.listen(args.port ?? 0, "127.0.0.1", () => {
114
+ server.off("error", reject);
115
+ resolve();
116
+ });
117
+ });
118
+ const address = server.address();
119
+ const localUrl = `http://127.0.0.1:${address.port}`;
120
+ proxyOrigin = localUrl;
121
+ return {
122
+ localUrl,
123
+ port: address.port,
124
+ accessToken,
125
+ playgroundUrl: (sessionId) => {
126
+ const url = new URL(`${localUrl}/playground`);
127
+ url.searchParams.set(PROXY_TOKEN_QUERY, accessToken);
128
+ if (sessionId !== undefined && sessionId.trim() !== "") {
129
+ url.searchParams.set("sessionId", sessionId.trim());
130
+ }
131
+ return url.toString();
132
+ },
133
+ close: () => new Promise((resolve, reject) => {
134
+ // Drop keep-alive / streamed playground connections so Ctrl-C
135
+ // does not hang waiting for active sockets.
136
+ server.closeAllConnections();
137
+ server.close(error => {
138
+ if (error) {
139
+ reject(error);
122
140
  return;
123
141
  }
124
- const message = error instanceof Error ? error.message : String(error);
125
- res.writeHead(502, { "content-type": "text/plain; charset=utf-8" });
126
- res.end(`Playground proxy error: ${message}`);
127
- });
128
- });
129
- yield new Promise((resolve, reject) => {
130
- var _a;
131
- server.once("error", reject);
132
- server.listen((_a = args.port) !== null && _a !== void 0 ? _a : 0, "127.0.0.1", () => {
133
- server.off("error", reject);
134
142
  resolve();
135
143
  });
136
- });
137
- const address = server.address();
138
- const localUrl = `http://127.0.0.1:${address.port}`;
139
- proxyOrigin = localUrl;
140
- return {
141
- localUrl,
142
- port: address.port,
143
- accessToken,
144
- playgroundUrl: (sessionId) => {
145
- const url = new URL(`${localUrl}/playground`);
146
- url.searchParams.set(PROXY_TOKEN_QUERY, accessToken);
147
- if (sessionId !== undefined && sessionId.trim() !== "") {
148
- url.searchParams.set("sessionId", sessionId.trim());
149
- }
150
- return url.toString();
151
- },
152
- close: () => new Promise((resolve, reject) => {
153
- // Drop keep-alive / streamed playground connections so Ctrl-C
154
- // does not hang waiting for active sockets.
155
- server.closeAllConnections();
156
- server.close(error => {
157
- if (error) {
158
- reject(error);
159
- return;
160
- }
161
- resolve();
162
- });
163
- }),
164
- };
165
- });
144
+ }),
145
+ };
166
146
  }
167
147
  function parseUpstreamUrl(raw) {
168
148
  const upstream = new URL(raw.replace(/\/$/, ""));
@@ -179,118 +159,99 @@ function parseExpiresAtMs(expiresAt) {
179
159
  return Number.isFinite(ms) ? ms : undefined;
180
160
  }
181
161
  function buildInjectHeaders(headers, bearerToken) {
182
- const out = Object.assign({}, (headers !== null && headers !== void 0 ? headers : {}));
162
+ const out = { ...(headers ?? {}) };
183
163
  if (bearerToken !== undefined && bearerToken.trim() !== "") {
184
164
  out.authorization = `Bearer ${bearerToken.trim()}`;
185
165
  }
186
166
  return out;
187
167
  }
188
- function readRequestBody(req) {
189
- return __awaiter(this, void 0, void 0, function* () {
190
- var _a, req_1, req_1_1;
191
- var _b, e_1, _c, _d;
192
- const chunks = [];
193
- try {
194
- for (_a = true, req_1 = __asyncValues(req); req_1_1 = yield req_1.next(), _b = req_1_1.done, !_b; _a = true) {
195
- _d = req_1_1.value;
196
- _a = false;
197
- const chunk = _d;
198
- chunks.push(typeof chunk === "string" ? Buffer.from(chunk) : chunk);
199
- }
200
- }
201
- catch (e_1_1) { e_1 = { error: e_1_1 }; }
202
- finally {
203
- try {
204
- if (!_a && !_b && (_c = req_1.return)) yield _c.call(req_1);
205
- }
206
- finally { if (e_1) throw e_1.error; }
207
- }
208
- return Buffer.concat(chunks);
209
- });
168
+ async function readRequestBody(req) {
169
+ const chunks = [];
170
+ for await (const chunk of req) {
171
+ chunks.push(typeof chunk === "string" ? Buffer.from(chunk) : chunk);
172
+ }
173
+ return Buffer.concat(chunks);
210
174
  }
211
- function handleProxyRequest(args) {
212
- return __awaiter(this, void 0, void 0, function* () {
213
- var _a, _b;
214
- const { req, res, getState, ensureFreshAccess, canRefresh, accessToken, proxyOrigin } = args;
215
- const pathWithQuery = (_a = req.url) !== null && _a !== void 0 ? _a : "/";
216
- const pathParse = parseProxyPath(pathWithQuery);
217
- if (!pathParse.ok) {
218
- res.writeHead(400, { "content-type": "text/plain; charset=utf-8" });
219
- res.end("Absolute-form request targets are not allowed");
220
- return;
221
- }
222
- const auth = authorizeLocalRequest({
223
- pathWithQuery: pathParse.path,
224
- cookieHeader: req.headers.cookie,
225
- accessToken,
175
+ async function handleProxyRequest(args) {
176
+ const { req, res, getState, ensureFreshAccess, canRefresh, accessToken, proxyOrigin } = args;
177
+ const pathWithQuery = req.url ?? "/";
178
+ const pathParse = parseProxyPath(pathWithQuery);
179
+ if (!pathParse.ok) {
180
+ res.writeHead(400, { "content-type": "text/plain; charset=utf-8" });
181
+ res.end("Absolute-form request targets are not allowed");
182
+ return;
183
+ }
184
+ const auth = authorizeLocalRequest({
185
+ pathWithQuery: pathParse.path,
186
+ cookieHeader: req.headers.cookie,
187
+ accessToken,
188
+ });
189
+ if (auth.kind === "deny") {
190
+ res.writeHead(401, { "content-type": "text/plain; charset=utf-8" });
191
+ res.end("Playground proxy requires the session access token");
192
+ return;
193
+ }
194
+ if (auth.kind === "bootstrap") {
195
+ res.writeHead(302, {
196
+ location: auth.redirectPath,
197
+ "set-cookie": auth.setCookie,
198
+ "cache-control": "no-store",
226
199
  });
227
- if (auth.kind === "deny") {
228
- res.writeHead(401, { "content-type": "text/plain; charset=utf-8" });
229
- res.end("Playground proxy requires the session access token");
230
- return;
231
- }
232
- if (auth.kind === "bootstrap") {
233
- res.writeHead(302, {
234
- location: auth.redirectPath,
235
- "set-cookie": auth.setCookie,
236
- "cache-control": "no-store",
237
- });
238
- res.end();
239
- return;
240
- }
241
- const method = (_b = req.method) !== null && _b !== void 0 ? _b : "GET";
242
- if (!isTrustedBrowserOrigin({
243
- method,
244
- origin: headerString(req.headers.origin),
245
- referer: headerString(req.headers.referer),
246
- secFetchSite: headerString(req.headers["sec-fetch-site"]),
247
- proxyOrigin: proxyOrigin(),
248
- })) {
249
- res.writeHead(403, { "content-type": "text/plain; charset=utf-8" });
250
- res.end("Playground proxy rejected cross-origin request");
251
- return;
252
- }
253
- let body;
254
- try {
255
- body = yield readRequestBody(req);
200
+ res.end();
201
+ return;
202
+ }
203
+ const method = req.method ?? "GET";
204
+ if (!isTrustedBrowserOrigin({
205
+ method,
206
+ origin: headerString(req.headers.origin),
207
+ referer: headerString(req.headers.referer),
208
+ secFetchSite: headerString(req.headers["sec-fetch-site"]),
209
+ proxyOrigin: proxyOrigin(),
210
+ })) {
211
+ res.writeHead(403, { "content-type": "text/plain; charset=utf-8" });
212
+ res.end("Playground proxy rejected cross-origin request");
213
+ return;
214
+ }
215
+ let body;
216
+ try {
217
+ body = await readRequestBody(req);
218
+ }
219
+ catch {
220
+ if (!res.headersSent) {
221
+ res.writeHead(400, { "content-type": "text/plain; charset=utf-8" });
222
+ res.end("Playground proxy failed to read request body");
256
223
  }
257
- catch (_c) {
258
- if (!res.headersSent) {
259
- res.writeHead(400, { "content-type": "text/plain; charset=utf-8" });
260
- res.end("Playground proxy failed to read request body");
261
- }
262
- return;
224
+ return;
225
+ }
226
+ const forward = (state, deferWriteOnUnauthorized) => forwardOnce({
227
+ method,
228
+ pathWithQuery: pathParse.path,
229
+ inboundHeaders: req.headers,
230
+ body,
231
+ state,
232
+ res,
233
+ deferWriteOnUnauthorized,
234
+ });
235
+ try {
236
+ await ensureFreshAccess(false);
237
+ let status = await forward(getState(), canRefresh);
238
+ if (status === 401 && canRefresh) {
239
+ await ensureFreshAccess(true);
240
+ // Retry once; always write this response (even if still 401).
241
+ status = await forward(getState(), false);
263
242
  }
264
- const forward = (state, deferWriteOnUnauthorized) => forwardOnce({
265
- method,
266
- pathWithQuery: pathParse.path,
267
- inboundHeaders: req.headers,
268
- body,
269
- state,
270
- res,
271
- deferWriteOnUnauthorized,
272
- });
273
- try {
274
- yield ensureFreshAccess(false);
275
- let status = yield forward(getState(), canRefresh);
276
- if (status === 401 && canRefresh) {
277
- yield ensureFreshAccess(true);
278
- // Retry once; always write this response (even if still 401).
279
- status = yield forward(getState(), false);
280
- }
281
- void status;
243
+ void status;
244
+ }
245
+ catch (error) {
246
+ if (!res.headersSent) {
247
+ const message = error instanceof Error ? error.message : String(error);
248
+ res.writeHead(502, { "content-type": "text/plain; charset=utf-8" });
249
+ res.end(`Playground proxy upstream error: ${message}`);
282
250
  }
283
- catch (error) {
284
- if (!res.headersSent) {
285
- const message = error instanceof Error ? error.message : String(error);
286
- res.writeHead(502, { "content-type": "text/plain; charset=utf-8" });
287
- res.end(`Playground proxy upstream error: ${message}`);
288
- }
289
- else if (!res.writableEnded) {
290
- res.end();
291
- }
251
+ else if (!res.writableEnded) {
252
+ res.end();
292
253
  }
293
- });
254
+ }
294
255
  }
295
256
  /**
296
257
  * Cookies are host-scoped across ports on 127.0.0.1, so SameSite=Strict alone
@@ -359,76 +320,75 @@ function readCookie(header, name) {
359
320
  }
360
321
  return undefined;
361
322
  }
362
- function forwardOnce(args) {
363
- return __awaiter(this, void 0, void 0, function* () {
364
- const { method, pathWithQuery, inboundHeaders, body, state, res } = args;
365
- const target = buildTargetUrl(pathWithQuery, state.upstream);
366
- const outboundHeaders = {};
367
- for (const [name, value] of Object.entries(inboundHeaders)) {
368
- if (value === undefined)
369
- continue;
370
- const lower = name.toLowerCase();
371
- if (HOP_BY_HOP.has(lower))
372
- continue;
373
- if (lower === "authorization")
374
- continue;
375
- // Do not forward the loopback session cookie upstream.
376
- if (lower === "cookie")
377
- continue;
378
- if (BROWSER_PROVENANCE.has(lower))
379
- continue;
380
- outboundHeaders[name] = value;
381
- }
382
- for (const [name, value] of Object.entries(state.injectHeaders)) {
383
- outboundHeaders[name] = value;
384
- }
385
- outboundHeaders.host = target.host;
386
- outboundHeaders["content-length"] = String(body.byteLength);
387
- const isHttps = target.protocol === "https:";
388
- const requestFn = isHttps ? httpsRequest : httpRequest;
389
- const options = {
390
- protocol: target.protocol,
391
- hostname: target.hostname,
392
- port: target.port === "" ? (isHttps ? 443 : 80) : Number(target.port),
393
- method,
394
- path: `${target.pathname}${target.search}`,
395
- headers: outboundHeaders,
396
- };
397
- return yield new Promise((resolve, reject) => {
398
- const upstreamReq = requestFn(options, upstreamRes => {
399
- var _a;
400
- const status = (_a = upstreamRes.statusCode) !== null && _a !== void 0 ? _a : 502;
401
- if (status === 401 && args.deferWriteOnUnauthorized) {
402
- // Drain so the socket can be reused; caller will refresh + retry.
403
- upstreamRes.resume();
404
- upstreamRes.on("end", () => resolve(status));
405
- upstreamRes.on("error", () => resolve(status));
406
- return;
407
- }
408
- const responseHeaders = Object.assign({}, upstreamRes.headers);
409
- for (const hop of HOP_BY_HOP) {
410
- delete responseHeaders[hop];
411
- }
412
- res.writeHead(status, responseHeaders);
413
- upstreamRes.pipe(res);
323
+ async function forwardOnce(args) {
324
+ const { method, pathWithQuery, inboundHeaders, body, state, res } = args;
325
+ const target = buildTargetUrl(pathWithQuery, state.upstream);
326
+ const outboundHeaders = {};
327
+ for (const [name, value] of Object.entries(inboundHeaders)) {
328
+ if (value === undefined)
329
+ continue;
330
+ const lower = name.toLowerCase();
331
+ if (HOP_BY_HOP.has(lower))
332
+ continue;
333
+ if (lower === "authorization")
334
+ continue;
335
+ // Do not forward the loopback session cookie upstream.
336
+ if (lower === "cookie")
337
+ continue;
338
+ if (BROWSER_PROVENANCE.has(lower))
339
+ continue;
340
+ outboundHeaders[name] = value;
341
+ }
342
+ for (const [name, value] of Object.entries(state.injectHeaders)) {
343
+ outboundHeaders[name] = value;
344
+ }
345
+ outboundHeaders.host = target.host;
346
+ outboundHeaders["content-length"] = String(body.byteLength);
347
+ const isHttps = target.protocol === "https:";
348
+ const requestFn = isHttps ? httpsRequest : httpRequest;
349
+ const options = {
350
+ protocol: target.protocol,
351
+ hostname: target.hostname,
352
+ port: target.port === "" ? (isHttps ? 443 : 80) : Number(target.port),
353
+ method,
354
+ path: `${target.pathname}${target.search}`,
355
+ headers: outboundHeaders,
356
+ };
357
+ return await new Promise((resolve, reject) => {
358
+ const upstreamReq = requestFn(options, upstreamRes => {
359
+ const status = upstreamRes.statusCode ?? 502;
360
+ if (status === 401 && args.deferWriteOnUnauthorized) {
361
+ // Drain so the socket can be reused; caller will refresh + retry.
362
+ upstreamRes.resume();
414
363
  upstreamRes.on("end", () => resolve(status));
415
- upstreamRes.on("error", () => {
416
- if (!res.writableEnded) {
417
- res.end();
418
- }
419
- resolve(status);
420
- });
421
- });
422
- upstreamReq.on("error", error => {
423
- reject(error);
424
- });
425
- res.on("close", () => {
364
+ upstreamRes.on("error", () => resolve(status));
365
+ return;
366
+ }
367
+ const responseHeaders = {
368
+ ...upstreamRes.headers,
369
+ };
370
+ for (const hop of HOP_BY_HOP) {
371
+ delete responseHeaders[hop];
372
+ }
373
+ res.writeHead(status, responseHeaders);
374
+ upstreamRes.pipe(res);
375
+ upstreamRes.on("end", () => resolve(status));
376
+ upstreamRes.on("error", () => {
426
377
  if (!res.writableEnded) {
427
- upstreamReq.destroy();
378
+ res.end();
428
379
  }
380
+ resolve(status);
429
381
  });
430
- upstreamReq.end(body);
431
382
  });
383
+ upstreamReq.on("error", error => {
384
+ reject(error);
385
+ });
386
+ res.on("close", () => {
387
+ if (!res.writableEnded) {
388
+ upstreamReq.destroy();
389
+ }
390
+ });
391
+ upstreamReq.end(body);
432
392
  });
433
393
  }
434
394
  /**