@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
@@ -20,15 +20,6 @@
20
20
  * `agent-serve` allowlist grants team-namespace read/write, so there is no
21
21
  * app-installation token exchange for managed deployments.
22
22
  */
23
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
24
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
25
- return new (P || (P = Promise))(function (resolve, reject) {
26
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
27
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
28
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
29
- step((generator = generator.apply(thisArg, _arguments || [])).next());
30
- });
31
- };
32
23
  import { Buffer } from "node:buffer";
33
24
  import { createPrivateKey, sign } from "node:crypto";
34
25
  import { cursorBackendUrl, resolveApiKeySync } from "../../internal/cursor/credentials.js";
@@ -52,7 +43,7 @@ const ORIGIN_APP_TOKEN_AUDIENCE = "origin-apps";
52
43
  const APP_JWT_TTL_SECONDS = 5 * 60;
53
44
  /** Re-mint the `oit_` token after this long; tokens outlive it comfortably. */
54
45
  const TOKEN_REUSE_MS = 4 * 60 * 1000;
55
- const TOKEN_EXCHANGE_TIMEOUT_MS = 30000;
46
+ const TOKEN_EXCHANGE_TIMEOUT_MS = 30_000;
56
47
  /** Normalized Origin REST failure — the `GitHubApiError` analogue. */
57
48
  export class OriginApiError extends Error {
58
49
  constructor(input) {
@@ -66,18 +57,17 @@ export class OriginApiError extends Error {
66
57
  }
67
58
  /** Vault/env round-trip: literal `\n` sequences appear in practice. */
68
59
  function normalizePrivateKeyPem(raw) {
69
- const pem = raw === null || raw === void 0 ? void 0 : raw.trim().replace(/\\n/g, "\n");
60
+ const pem = raw?.trim().replace(/\\n/g, "\n");
70
61
  return pem === undefined || pem === "" ? undefined : pem;
71
62
  }
72
63
  function envValue(value) {
73
- const trimmed = value === null || value === void 0 ? void 0 : value.trim();
64
+ const trimmed = value?.trim();
74
65
  return trimmed === undefined || trimmed === "" ? undefined : trimmed;
75
66
  }
76
67
  /** Each Origin app credential field found in the environment, when set. */
77
68
  export function resolveOriginAppCredentialParts(env = process.env) {
78
- var _a;
79
69
  return {
80
- appId: (_a = envValue(env.ORIGIN_APP_ID)) !== null && _a !== void 0 ? _a : envValue(env.AGENT_SERVE_ORIGIN_APP_ID),
70
+ appId: envValue(env.ORIGIN_APP_ID) ?? envValue(env.AGENT_SERVE_ORIGIN_APP_ID),
81
71
  installationId: envValue(env.ORIGIN_APP_INSTALLATION_ID),
82
72
  privateKey: normalizePrivateKeyPem(env.ORIGIN_APP_PRIVATE_KEY),
83
73
  };
@@ -96,15 +86,13 @@ export function resolveOriginAppCredentials(env = process.env) {
96
86
  }
97
87
  /** Public Origin REST base. Trailing slashes are stripped for path joins. */
98
88
  export function originPublicApiBaseUrl(env = process.env) {
99
- var _a;
100
- const fromEnv = (_a = envValue(env.ORIGIN_API_BASE_URL)) === null || _a === void 0 ? void 0 : _a.replace(/\/+$/, "");
101
- return fromEnv !== null && fromEnv !== void 0 ? fromEnv : DEFAULT_ORIGIN_PUBLIC_API_BASE_URL;
89
+ const fromEnv = envValue(env.ORIGIN_API_BASE_URL)?.replace(/\/+$/, "");
90
+ return fromEnv ?? DEFAULT_ORIGIN_PUBLIC_API_BASE_URL;
102
91
  }
103
92
  /** Origin ConnectRPC base. Trailing slashes are stripped for path joins. */
104
93
  export function originRpcBaseUrl(env = process.env) {
105
- var _a;
106
- const fromEnv = (_a = envValue(env.ORIGIN_RPC_BASE_URL)) === null || _a === void 0 ? void 0 : _a.replace(/\/+$/, "");
107
- return fromEnv !== null && fromEnv !== void 0 ? fromEnv : DEFAULT_ORIGIN_RPC_BASE_URL;
94
+ const fromEnv = envValue(env.ORIGIN_RPC_BASE_URL)?.replace(/\/+$/, "");
95
+ return fromEnv ?? DEFAULT_ORIGIN_RPC_BASE_URL;
108
96
  }
109
97
  function base64UrlJson(value) {
110
98
  return Buffer.from(JSON.stringify(value)).toString("base64url");
@@ -127,30 +115,28 @@ function mintOriginAppJwt(credentials, nowMs) {
127
115
  const signature = sign(null, Buffer.from(signingInput), key).toString("base64url");
128
116
  return `${signingInput}.${signature}`;
129
117
  }
130
- function mintOriginInstallationToken(input) {
131
- return __awaiter(this, void 0, void 0, function* () {
132
- const jwt = mintOriginAppJwt(input.credentials, input.nowMs);
133
- const path = `/v1/origin/app/installations/${encodeURIComponent(input.credentials.installationId)}/access_tokens`;
134
- const response = yield input.fetchImpl(`${input.apiBaseUrl}${path}`, {
118
+ async function mintOriginInstallationToken(input) {
119
+ const jwt = mintOriginAppJwt(input.credentials, input.nowMs);
120
+ const path = `/v1/origin/app/installations/${encodeURIComponent(input.credentials.installationId)}/access_tokens`;
121
+ const response = await input.fetchImpl(`${input.apiBaseUrl}${path}`, {
122
+ method: "POST",
123
+ headers: { authorization: `Bearer ${jwt}` },
124
+ signal: AbortSignal.timeout(TOKEN_EXCHANGE_TIMEOUT_MS),
125
+ });
126
+ const body = await response.json().catch(() => undefined);
127
+ const token = typeof body === "object" && body !== null && !Array.isArray(body)
128
+ ? body.token
129
+ : undefined;
130
+ if (!response.ok || typeof token !== "string" || token === "") {
131
+ // Never echo the body: on success it contains the installation token.
132
+ throw new OriginApiError({
133
+ body: undefined,
135
134
  method: "POST",
136
- headers: { authorization: `Bearer ${jwt}` },
137
- signal: AbortSignal.timeout(TOKEN_EXCHANGE_TIMEOUT_MS),
135
+ path,
136
+ status: response.status,
138
137
  });
139
- const body = yield response.json().catch(() => undefined);
140
- const token = typeof body === "object" && body !== null && !Array.isArray(body)
141
- ? body.token
142
- : undefined;
143
- if (!response.ok || typeof token !== "string" || token === "") {
144
- // Never echo the body: on success it contains the installation token.
145
- throw new OriginApiError({
146
- body: undefined,
147
- method: "POST",
148
- path,
149
- status: response.status,
150
- });
151
- }
152
- return token;
153
- });
138
+ }
139
+ return token;
154
140
  }
155
141
  /**
156
142
  * Exchange endpoint for Cursor-account session tokens. Override with
@@ -193,17 +179,16 @@ export function _clearCursorSessionTokenCacheForTesting() {
193
179
  cursorSessionTokenInFlight.clear();
194
180
  }
195
181
  export function cursorSessionTokenProvider(input) {
196
- var _a, _b, _c;
197
- const getApiKey = (_a = input === null || input === void 0 ? void 0 : input.getApiKey) !== null && _a !== void 0 ? _a : (() => { var _a; return (_a = resolveApiKeySync()) === null || _a === void 0 ? void 0 : _a.apiKey; });
198
- const fetchImpl = (_b = input === null || input === void 0 ? void 0 : input.fetch) !== null && _b !== void 0 ? _b : fetch;
199
- const now = (_c = input === null || input === void 0 ? void 0 : input.now) !== null && _c !== void 0 ? _c : Date.now;
182
+ const getApiKey = input?.getApiKey ?? (() => resolveApiKeySync()?.apiKey);
183
+ const fetchImpl = input?.fetch ?? fetch;
184
+ const now = input?.now ?? Date.now;
200
185
  const cacheKey = (url, apiKey) => `${url}\u0000${apiKey}`;
201
- const resolveUrl = () => { var _a; return (_a = input === null || input === void 0 ? void 0 : input.exchangeUrl) !== null && _a !== void 0 ? _a : resolveCursorSessionExchangeUrl(); };
202
- const mint = (url, apiKey) => __awaiter(this, void 0, void 0, function* () {
186
+ const resolveUrl = () => input?.exchangeUrl ?? resolveCursorSessionExchangeUrl();
187
+ const mint = async (url, apiKey) => {
203
188
  const nowMs = now();
204
189
  let session;
205
190
  try {
206
- session = yield exchangeCursorApiKeyForSession({
191
+ session = await exchangeCursorApiKeyForSession({
207
192
  exchangeUrl: url,
208
193
  apiKey,
209
194
  fetchImpl,
@@ -213,14 +198,14 @@ export function cursorSessionTokenProvider(input) {
213
198
  catch (error) {
214
199
  throw new Error(`originClient: ${error instanceof Error ? error.message : String(error)} Check CURSOR_API_KEY / CURSOR_API_KEY_FILE, or pass an explicit token.`);
215
200
  }
216
- const renewAtMs = Math.max(nowMs + 1000, session.expiresAtMs - SESSION_TOKEN_EXPIRY_LEEWAY_MS);
201
+ const renewAtMs = Math.max(nowMs + 1_000, session.expiresAtMs - SESSION_TOKEN_EXPIRY_LEEWAY_MS);
217
202
  cursorSessionTokenCache.set(cacheKey(url, apiKey), {
218
203
  token: session.token,
219
204
  renewAtMs,
220
205
  });
221
206
  return session.token;
222
- });
223
- const provider = () => __awaiter(this, void 0, void 0, function* () {
207
+ };
208
+ const provider = async () => {
224
209
  const apiKey = getApiKey();
225
210
  if (apiKey === undefined || apiKey === "") {
226
211
  throw new Error("originClient: no Cursor credential available for the session exchange (set CURSOR_API_KEY or CURSOR_API_KEY_FILE).");
@@ -234,24 +219,23 @@ export function cursorSessionTokenProvider(input) {
234
219
  // Dedupe concurrent first calls: one exchange per (endpoint, key).
235
220
  const inFlight = cursorSessionTokenInFlight.get(key);
236
221
  if (inFlight !== undefined) {
237
- return yield inFlight;
222
+ return await inFlight;
238
223
  }
239
224
  const pending = mint(url, apiKey).finally(() => {
240
225
  cursorSessionTokenInFlight.delete(key);
241
226
  });
242
227
  cursorSessionTokenInFlight.set(key, pending);
243
- return yield pending;
244
- });
228
+ return await pending;
229
+ };
245
230
  // Origin answered 401 for this bearer: drop it (unless a newer session
246
231
  // already replaced it) so the next call re-exchanges immediately.
247
232
  const invalidate = (token) => {
248
- var _a;
249
233
  const apiKey = getApiKey();
250
234
  if (apiKey === undefined || apiKey === "") {
251
235
  return;
252
236
  }
253
237
  const key = cacheKey(resolveUrl(), apiKey);
254
- if (((_a = cursorSessionTokenCache.get(key)) === null || _a === void 0 ? void 0 : _a.token) === token) {
238
+ if (cursorSessionTokenCache.get(key)?.token === token) {
255
239
  cursorSessionTokenCache.delete(key);
256
240
  }
257
241
  };
@@ -263,17 +247,16 @@ export function cursorSessionTokenProvider(input) {
263
247
  * re-mints.
264
248
  */
265
249
  export function originAppTokenProvider(input) {
266
- var _a, _b, _c;
267
- const apiBaseUrl = (_a = input.apiBaseUrl) !== null && _a !== void 0 ? _a : originPublicApiBaseUrl();
268
- const fetchImpl = (_b = input.fetch) !== null && _b !== void 0 ? _b : fetch;
269
- const now = (_c = input.now) !== null && _c !== void 0 ? _c : Date.now;
250
+ const apiBaseUrl = input.apiBaseUrl ?? originPublicApiBaseUrl();
251
+ const fetchImpl = input.fetch ?? fetch;
252
+ const now = input.now ?? Date.now;
270
253
  let cached;
271
- return () => __awaiter(this, void 0, void 0, function* () {
254
+ return async () => {
272
255
  const nowMs = now();
273
256
  if (cached !== undefined && nowMs - cached.mintedAtMs < TOKEN_REUSE_MS) {
274
257
  return cached.token;
275
258
  }
276
- const token = yield mintOriginInstallationToken({
259
+ const token = await mintOriginInstallationToken({
277
260
  credentials: input.credentials,
278
261
  apiBaseUrl,
279
262
  fetchImpl,
@@ -281,7 +264,7 @@ export function originAppTokenProvider(input) {
281
264
  });
282
265
  cached = { token, mintedAtMs: nowMs };
283
266
  return token;
284
- });
267
+ };
285
268
  }
286
269
  /**
287
270
  * Build an authenticated Origin REST client. Auth resolution: explicit
@@ -292,29 +275,27 @@ export function originAppTokenProvider(input) {
292
275
  * request with a clear message.
293
276
  */
294
277
  export function createOriginClient(options = {}) {
295
- var _a, _b;
296
- const apiBaseUrl = ((_a = options.apiBaseUrl) !== null && _a !== void 0 ? _a : originPublicApiBaseUrl()).replace(/\/+$/, "");
297
- const fetchImpl = (_b = options.fetch) !== null && _b !== void 0 ? _b : fetch;
278
+ const apiBaseUrl = (options.apiBaseUrl ?? originPublicApiBaseUrl()).replace(/\/+$/, "");
279
+ const fetchImpl = options.fetch ?? fetch;
298
280
  let tokenProvider;
299
281
  // Set when the session-exchange fallback is engaged: a 401 from Origin
300
282
  // invalidates the cached session and retries once with a fresh one, the
301
283
  // `CursorBackendClient` re-exchange behavior.
302
284
  let sessionProvider;
303
- const getToken = () => __awaiter(this, void 0, void 0, function* () {
304
- var _a, _b, _c, _d;
285
+ const getToken = async () => {
305
286
  if (typeof options.token === "string") {
306
287
  return options.token;
307
288
  }
308
289
  if (typeof options.token === "function") {
309
- return yield options.token();
290
+ return await options.token();
310
291
  }
311
292
  if (tokenProvider === undefined) {
312
293
  const credentials = options.credentials === false
313
294
  ? undefined
314
- : ((_a = options.credentials) !== null && _a !== void 0 ? _a : resolveOriginAppCredentials());
315
- const exchange = (_b = options.cursorAccountExchange) !== null && _b !== void 0 ? _b : true;
295
+ : (options.credentials ?? resolveOriginAppCredentials());
296
+ const exchange = options.cursorAccountExchange ?? true;
316
297
  const exchangeOptions = exchange === false ? undefined : exchange === true ? {} : exchange;
317
- const getExchangeApiKey = (_c = exchangeOptions === null || exchangeOptions === void 0 ? void 0 : exchangeOptions.getApiKey) !== null && _c !== void 0 ? _c : (() => { var _a; return (_a = resolveApiKeySync()) === null || _a === void 0 ? void 0 : _a.apiKey; });
298
+ const getExchangeApiKey = exchangeOptions?.getApiKey ?? (() => resolveApiKeySync()?.apiKey);
318
299
  if (credentials !== undefined) {
319
300
  tokenProvider = originAppTokenProvider({
320
301
  credentials,
@@ -322,58 +303,61 @@ export function createOriginClient(options = {}) {
322
303
  fetch: fetchImpl,
323
304
  });
324
305
  }
325
- else if (exchangeOptions !== undefined && ((_d = getExchangeApiKey()) !== null && _d !== void 0 ? _d : "") !== "") {
326
- sessionProvider = cursorSessionTokenProvider(Object.assign({ fetch: fetchImpl, getApiKey: getExchangeApiKey }, (exchangeOptions.exchangeUrl === undefined
327
- ? {}
328
- : { exchangeUrl: exchangeOptions.exchangeUrl })));
306
+ else if (exchangeOptions !== undefined && (getExchangeApiKey() ?? "") !== "") {
307
+ sessionProvider = cursorSessionTokenProvider({
308
+ fetch: fetchImpl,
309
+ getApiKey: getExchangeApiKey,
310
+ ...(exchangeOptions.exchangeUrl === undefined
311
+ ? {}
312
+ : { exchangeUrl: exchangeOptions.exchangeUrl }),
313
+ });
329
314
  tokenProvider = sessionProvider;
330
315
  }
331
316
  else {
332
317
  throw new Error("originClient: no Origin credential available (pass token / credentials, set ORIGIN_APP_ID + ORIGIN_APP_INSTALLATION_ID + ORIGIN_APP_PRIVATE_KEY, or sign in with a Cursor credential for the session exchange).");
333
318
  }
334
319
  }
335
- return yield tokenProvider();
336
- });
337
- const send = (input, path, token) => __awaiter(this, void 0, void 0, function* () {
338
- return yield fetchImpl(`${apiBaseUrl}${path}`, {
339
- method: input.method,
340
- headers: Object.assign({ authorization: `Bearer ${token}` }, (input.body === undefined ? {} : { "content-type": "application/json" })),
341
- body: input.body === undefined ? undefined : JSON.stringify(input.body),
342
- });
320
+ return await tokenProvider();
321
+ };
322
+ const send = async (input, path, token) => await fetchImpl(`${apiBaseUrl}${path}`, {
323
+ method: input.method,
324
+ headers: {
325
+ authorization: `Bearer ${token}`,
326
+ ...(input.body === undefined ? {} : { "content-type": "application/json" }),
327
+ },
328
+ body: input.body === undefined ? undefined : JSON.stringify(input.body),
343
329
  });
344
330
  return {
345
331
  apiBaseUrl,
346
- request(input) {
347
- return __awaiter(this, void 0, void 0, function* () {
348
- const path = input.path.startsWith("/") ? input.path : `/${input.path}`;
349
- const token = yield getToken();
350
- let response = yield send(input, path, token);
351
- if (response.status === 401 && sessionProvider !== undefined) {
352
- // The session aged out server-side. Drop it — unless a concurrent
353
- // retry already minted a newer one — and retry once.
354
- yield response.text().catch(() => undefined);
355
- sessionProvider.invalidate(token);
356
- const retryToken = yield getToken();
357
- response = yield send(input, path, retryToken);
358
- }
359
- const text = yield response.text();
360
- let parsed;
361
- try {
362
- parsed = text === "" ? undefined : JSON.parse(text);
363
- }
364
- catch (_a) {
365
- parsed = text;
366
- }
367
- if (!response.ok) {
368
- throw new OriginApiError({
369
- body: parsed,
370
- method: input.method,
371
- path,
372
- status: response.status,
373
- });
374
- }
375
- return parsed;
376
- });
332
+ async request(input) {
333
+ const path = input.path.startsWith("/") ? input.path : `/${input.path}`;
334
+ const token = await getToken();
335
+ let response = await send(input, path, token);
336
+ if (response.status === 401 && sessionProvider !== undefined) {
337
+ // The session aged out server-side. Drop it — unless a concurrent
338
+ // retry already minted a newer one — and retry once.
339
+ await response.text().catch(() => undefined);
340
+ sessionProvider.invalidate(token);
341
+ const retryToken = await getToken();
342
+ response = await send(input, path, retryToken);
343
+ }
344
+ const text = await response.text();
345
+ let parsed;
346
+ try {
347
+ parsed = text === "" ? undefined : JSON.parse(text);
348
+ }
349
+ catch {
350
+ parsed = text;
351
+ }
352
+ if (!response.ok) {
353
+ throw new OriginApiError({
354
+ body: parsed,
355
+ method: input.method,
356
+ path,
357
+ status: response.status,
358
+ });
359
+ }
360
+ return parsed;
377
361
  },
378
362
  };
379
363
  }
@@ -12,20 +12,16 @@ import { createOriginClient, originRpcBaseUrl, resolveOriginAppCredentialParts,
12
12
  import { createOriginCheck } from "./checks.js";
13
13
  import { setOriginCommentReaction } from "./reactions.js";
14
14
  export function buildOriginBinding(input) {
15
- var _a;
16
- var _b;
17
15
  const buildClient = (apiBaseUrl) => {
18
- var _a, _b, _c, _d;
19
- var _e, _f, _g, _h;
20
16
  const fromEnv = input.cursorAccount ? {} : resolveOriginAppCredentialParts();
21
- const appId = (_e = (_a = input.app) === null || _a === void 0 ? void 0 : _a.appId) !== null && _e !== void 0 ? _e : fromEnv.appId;
22
- const installationId = (_g = (_f = (_b = input.app) === null || _b === void 0 ? void 0 : _b.installationId) !== null && _f !== void 0 ? _f : input.installationId) !== null && _g !== void 0 ? _g : fromEnv.installationId;
23
- const privateKey = (_h = (_c = input.app) === null || _c === void 0 ? void 0 : _c.privateKey) !== null && _h !== void 0 ? _h : fromEnv.privateKey;
17
+ const appId = input.app?.appId ?? fromEnv.appId;
18
+ const installationId = input.app?.installationId ?? input.installationId ?? fromEnv.installationId;
19
+ const privateKey = input.app?.privateKey ?? fromEnv.privateKey;
24
20
  const credentials = appId !== undefined && installationId !== undefined && privateKey !== undefined
25
21
  ? { appId, installationId, privateKey }
26
22
  : undefined;
27
23
  return createOriginClient({
28
- token: input.cursorAccount ? undefined : (_d = input.app) === null || _d === void 0 ? void 0 : _d.token,
24
+ token: input.cursorAccount ? undefined : input.app?.token,
29
25
  credentials: input.cursorAccount ? false : credentials,
30
26
  apiBaseUrl,
31
27
  fetch: input.fetch,
@@ -36,22 +32,25 @@ export function buildOriginBinding(input) {
36
32
  // neither needs no credential.
37
33
  let restClient;
38
34
  const getRestClient = () => {
39
- var _a;
40
- restClient !== null && restClient !== void 0 ? restClient : (restClient = buildClient((_a = input.app) === null || _a === void 0 ? void 0 : _a.apiBaseUrl));
35
+ restClient ??= buildClient(input.app?.apiBaseUrl);
41
36
  return restClient;
42
37
  };
43
38
  let rpcClient;
44
39
  const getRpcClient = () => {
45
- var _a;
46
- var _b;
47
- rpcClient !== null && rpcClient !== void 0 ? rpcClient : (rpcClient = buildClient((_b = (_a = input.app) === null || _a === void 0 ? void 0 : _a.rpcBaseUrl) !== null && _b !== void 0 ? _b : originRpcBaseUrl()));
40
+ rpcClient ??= buildClient(input.app?.rpcBaseUrl ?? originRpcBaseUrl());
48
41
  return rpcClient;
49
42
  };
50
43
  return {
51
- installationId: (_b = (_a = input.app) === null || _a === void 0 ? void 0 : _a.installationId) !== null && _b !== void 0 ? _b : input.installationId,
44
+ installationId: input.app?.installationId ?? input.installationId,
52
45
  repository: input.repository,
53
46
  request: request => getRestClient().request(request),
54
- createCheck: check => { var _a; return createOriginCheck(Object.assign(Object.assign({}, check), { executionId: (_a = check.executionId) !== null && _a !== void 0 ? _a : input.executionId, origin: getRestClient(), owner: input.repository.owner, repo: input.repository.name })); },
55
- reactToComment: reaction => setOriginCommentReaction(Object.assign(Object.assign({}, reaction), { origin: getRpcClient() })),
47
+ createCheck: check => createOriginCheck({
48
+ ...check,
49
+ executionId: check.executionId ?? input.executionId,
50
+ origin: getRestClient(),
51
+ owner: input.repository.owner,
52
+ repo: input.repository.name,
53
+ }),
54
+ reactToComment: reaction => setOriginCommentReaction({ ...reaction, origin: getRpcClient() }),
56
55
  };
57
56
  }
@@ -16,15 +16,6 @@
16
16
  * `request()` (`ctx.origin`, `createOriginClient()`), and is also reachable
17
17
  * as `ctx.origin.createCheck(...)`. API failures throw `OriginApiError`.
18
18
  */
19
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
20
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
21
- return new (P || (P = Promise))(function (resolve, reject) {
22
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
23
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
24
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
25
- step((generator = generator.apply(thisArg, _arguments || [])).next());
26
- });
27
- };
28
19
  import { randomUUID } from "node:crypto";
29
20
  import { openCiCheck, resumeCiCheck, } from "../checks.js";
30
21
  /**
@@ -33,7 +24,7 @@ import { openCiCheck, resumeCiCheck, } from "../checks.js";
33
24
  * risking a lost check write.
34
25
  */
35
26
  const OUTPUT_TITLE_MAX_CHARS = 255;
36
- const OUTPUT_BODY_MAX_BYTES = 65000;
27
+ const OUTPUT_BODY_MAX_BYTES = 65_000;
37
28
  /** Truncate to at most `maxBytes` UTF-8 bytes without severing a character. */
38
29
  function capUtf8Bytes(text, maxBytes) {
39
30
  const encoded = new TextEncoder().encode(text);
@@ -48,9 +39,13 @@ function cappedOutput(output) {
48
39
  if (output === undefined) {
49
40
  return undefined;
50
41
  }
51
- return Object.assign({ title: output.title.slice(0, OUTPUT_TITLE_MAX_CHARS), summary: capUtf8Bytes(output.summary, OUTPUT_BODY_MAX_BYTES) }, (output.text === undefined
52
- ? {}
53
- : { text: capUtf8Bytes(output.text, OUTPUT_BODY_MAX_BYTES) }));
42
+ return {
43
+ title: output.title.slice(0, OUTPUT_TITLE_MAX_CHARS),
44
+ summary: capUtf8Bytes(output.summary, OUTPUT_BODY_MAX_BYTES),
45
+ ...(output.text === undefined
46
+ ? {}
47
+ : { text: capUtf8Bytes(output.text, OUTPUT_BODY_MAX_BYTES) }),
48
+ };
54
49
  }
55
50
  /** Derive a stable check key from a display name, e.g. `cursor-security-review`. */
56
51
  export function originCheckKeyFromName(name) {
@@ -66,24 +61,26 @@ export function originCheckKeyFromName(name) {
66
61
  * status so an output-only update cannot regress a running check to queued.
67
62
  */
68
63
  function originCheckWriter(input) {
69
- var _a;
70
- var _b, _c, _d, _e, _f;
71
- const key = (_b = input.key) !== null && _b !== void 0 ? _b : originCheckKeyFromName(input.name);
72
- const suiteKey = (_c = (_a = input.suite) === null || _a === void 0 ? void 0 : _a.key) !== null && _c !== void 0 ? _c : key;
73
- const externalId = (_d = input.externalId) !== null && _d !== void 0 ? _d : `agent-serve:${suiteKey}:${key}:${input.sha}:${(_e = input.executionId) !== null && _e !== void 0 ? _e : randomUUID()}`;
64
+ const key = input.key ?? originCheckKeyFromName(input.name);
65
+ const suiteKey = input.suite?.key ?? key;
66
+ const externalId = input.externalId ??
67
+ `agent-serve:${suiteKey}:${key}:${input.sha}:${input.executionId ?? randomUUID()}`;
74
68
  const path = `/v1/origin/repos/${encodeURIComponent(input.owner)}/${encodeURIComponent(input.repo)}/check-runs`;
75
- let lastStatus = (_f = input.status) !== null && _f !== void 0 ? _f : "in_progress";
76
- return (write) => __awaiter(this, void 0, void 0, function* () {
77
- var _a, _b, _c;
78
- var _d, _e;
79
- const status = (_d = write.status) !== null && _d !== void 0 ? _d : (write.conclusion === undefined ? lastStatus : "completed");
69
+ let lastStatus = input.status ?? "in_progress";
70
+ return async (write) => {
71
+ const status = write.status ?? (write.conclusion === undefined ? lastStatus : "completed");
80
72
  lastStatus = status;
81
- const response = yield input.origin.request({
73
+ const response = await input.origin.request({
82
74
  method: "POST",
83
75
  path,
84
76
  body: {
85
77
  headSha: input.sha,
86
- checkSuite: Object.assign({ key: suiteKey, name: (_e = (_a = input.suite) === null || _a === void 0 ? void 0 : _a.name) !== null && _e !== void 0 ? _e : input.name, externalId: `agent-serve:${suiteKey}` }, (((_b = input.suite) === null || _b === void 0 ? void 0 : _b.detailsUrl) === undefined ? {} : { detailsUrl: input.suite.detailsUrl })),
78
+ checkSuite: {
79
+ key: suiteKey,
80
+ name: input.suite?.name ?? input.name,
81
+ externalId: `agent-serve:${suiteKey}`,
82
+ ...(input.suite?.detailsUrl === undefined ? {} : { detailsUrl: input.suite.detailsUrl }),
83
+ },
87
84
  checkRun: {
88
85
  key,
89
86
  name: input.name,
@@ -100,9 +97,9 @@ function originCheckWriter(input) {
100
97
  },
101
98
  },
102
99
  });
103
- const id = (_c = response === null || response === void 0 ? void 0 : response.checkRun) === null || _c === void 0 ? void 0 : _c.id;
100
+ const id = response?.checkRun?.id;
104
101
  return typeof id === "string" ? { id } : undefined;
105
- });
102
+ };
106
103
  }
107
104
  /**
108
105
  * Create a CI check run on a commit and return a handle for later updates.
@@ -140,6 +137,11 @@ export function resumeOriginCheck(input) {
140
137
  */
141
138
  export function bindOriginChecks(input) {
142
139
  return {
143
- createCheck: check => createOriginCheck(Object.assign(Object.assign({}, check), { origin: input.origin, owner: input.owner, repo: input.repo })),
140
+ createCheck: check => createOriginCheck({
141
+ ...check,
142
+ origin: input.origin,
143
+ owner: input.owner,
144
+ repo: input.repo,
145
+ }),
144
146
  };
145
147
  }