@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
@@ -7,15 +7,6 @@
7
7
  * Runs against the live mount's loopback URL so case sessions appear in
8
8
  * the playground session list.
9
9
  */
10
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
11
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
12
- return new (P || (P = Promise))(function (resolve, reject) {
13
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
14
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
15
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
16
- step((generator = generator.apply(thisArg, _arguments || [])).next());
17
- });
18
- };
19
10
  import { randomUUID } from "node:crypto";
20
11
  import { resolveEvalMaxPlaygroundRuns, } from "../evals.js";
21
12
  import { discoverEvals, filterDiscoveredEvals, runDiscoveredEvals, } from "./eval-runner.js";
@@ -34,122 +25,126 @@ export class EvalRunStore {
34
25
  this.abortByRunId = new Map();
35
26
  this.hydrated = false;
36
27
  }
37
- list() {
38
- return __awaiter(this, void 0, void 0, function* () {
39
- yield this.hydrate();
40
- const { evals, config } = yield discoverEvals(this.projectRoot);
41
- return {
42
- evals: evals.map(e => (Object.assign(Object.assign({ id: e.id, fileId: e.fileId }, (e.definition.description === undefined
28
+ async list() {
29
+ await this.hydrate();
30
+ const { evals, config } = await discoverEvals(this.projectRoot);
31
+ return {
32
+ evals: evals.map(e => ({
33
+ id: e.id,
34
+ fileId: e.fileId,
35
+ ...(e.definition.description === undefined
43
36
  ? {}
44
- : { description: e.definition.description })), (e.definition.tags === undefined ? {} : { tags: e.definition.tags })))),
45
- config: snapshotListConfig(config, this.storage !== undefined),
46
- };
47
- });
37
+ : { description: e.definition.description }),
38
+ ...(e.definition.tags === undefined ? {} : { tags: e.definition.tags }),
39
+ })),
40
+ config: snapshotListConfig(config, this.storage !== undefined),
41
+ };
48
42
  }
49
- get(runId) {
50
- return __awaiter(this, void 0, void 0, function* () {
51
- yield this.hydrate();
52
- return this.runs.get(runId);
53
- });
43
+ async get(runId) {
44
+ await this.hydrate();
45
+ return this.runs.get(runId);
54
46
  }
55
47
  /** Newest-first snapshots for playground rehydrate after navigation/reload. */
56
- listRuns() {
57
- return __awaiter(this, void 0, void 0, function* () {
58
- yield this.hydrate();
59
- return this.sortedRuns();
60
- });
48
+ async listRuns() {
49
+ await this.hydrate();
50
+ return this.sortedRuns();
61
51
  }
62
52
  /**
63
53
  * Atomic snapshot of newest-first runs + the in-flight batch id (if any).
64
54
  * Prefer this over pairing {@link listRuns} with {@link getActiveRunId}
65
55
  * across an await boundary.
66
56
  */
67
- listRunsWithActive() {
68
- return __awaiter(this, void 0, void 0, function* () {
69
- yield this.hydrate();
70
- const activeRunId = this.activeRunId;
71
- return Object.assign({ runs: this.sortedRuns() }, (activeRunId === undefined ? {} : { activeRunId }));
72
- });
57
+ async listRunsWithActive() {
58
+ await this.hydrate();
59
+ const activeRunId = this.activeRunId;
60
+ return {
61
+ runs: this.sortedRuns(),
62
+ ...(activeRunId === undefined ? {} : { activeRunId }),
63
+ };
73
64
  }
74
65
  getActiveRunId() {
75
66
  return this.activeRunId;
76
67
  }
77
- start() {
78
- return __awaiter(this, arguments, void 0, function* (input = {}) {
79
- yield this.hydrate();
80
- if (this.activeRunId !== undefined) {
81
- const active = this.runs.get(this.activeRunId);
82
- if (active !== undefined && active.status === "running") {
83
- throw new EvalRunConflictError(this.activeRunId);
84
- }
68
+ async start(input = {}) {
69
+ await this.hydrate();
70
+ if (this.activeRunId !== undefined) {
71
+ const active = this.runs.get(this.activeRunId);
72
+ if (active !== undefined && active.status === "running") {
73
+ throw new EvalRunConflictError(this.activeRunId);
85
74
  }
86
- const loopbackUrl = this.loopbackUrl;
87
- if (loopbackUrl === undefined) {
88
- throw new Error("Eval run store has no loopback URL yet (server not listening)");
89
- }
90
- const { evals, config } = yield discoverEvals(this.projectRoot);
91
- const selected = filterDiscoveredEvals(evals, {
92
- filterIds: input.filterIds,
93
- tags: input.tags,
94
- });
95
- if (selected.length === 0) {
96
- throw new EvalRunEmptyError();
97
- }
98
- const runId = `evalrun_${randomUUID().replace(/-/g, "").slice(0, 16)}`;
99
- const cases = selected.map(e => discoveredToPending(e));
100
- const snapshot = {
101
- runId,
102
- status: "running",
103
- startedAt: new Date().toISOString(),
104
- summary: {
105
- passed: 0,
106
- failed: 0,
107
- scored: 0,
108
- skipped: 0,
109
- total: cases.length,
110
- done: 0,
111
- },
112
- cases,
113
- config: snapshotRunConfig(config, this.storage !== undefined),
114
- };
115
- this.runs.set(runId, snapshot);
116
- this.activeRunId = runId;
117
- const abort = new AbortController();
118
- this.abortByRunId.set(runId, abort);
119
- this.pruneOldRuns(config);
120
- this.persist(snapshot);
121
- this.logger(`[bdk] eval run ${runId}: starting ${cases.length} case(s)`);
122
- void this.execute(runId, Object.assign(Object.assign(Object.assign({ baseUrl: loopbackUrl, evals: selected, config, signal: abort.signal }, (input.bearerToken === undefined ? {} : { bearerToken: input.bearerToken })), (input.verbose === undefined ? {} : { verbose: input.verbose })), (input.timeoutMs === undefined ? {} : { timeoutMs: input.timeoutMs })));
123
- return snapshot;
75
+ }
76
+ const loopbackUrl = this.loopbackUrl;
77
+ if (loopbackUrl === undefined) {
78
+ throw new Error("Eval run store has no loopback URL yet (server not listening)");
79
+ }
80
+ const { evals, config } = await discoverEvals(this.projectRoot);
81
+ const selected = filterDiscoveredEvals(evals, {
82
+ filterIds: input.filterIds,
83
+ tags: input.tags,
84
+ });
85
+ if (selected.length === 0) {
86
+ throw new EvalRunEmptyError();
87
+ }
88
+ const runId = `evalrun_${randomUUID().replace(/-/g, "").slice(0, 16)}`;
89
+ const cases = selected.map(e => discoveredToPending(e));
90
+ const snapshot = {
91
+ runId,
92
+ status: "running",
93
+ startedAt: new Date().toISOString(),
94
+ summary: {
95
+ passed: 0,
96
+ failed: 0,
97
+ scored: 0,
98
+ skipped: 0,
99
+ total: cases.length,
100
+ done: 0,
101
+ },
102
+ cases,
103
+ config: snapshotRunConfig(config, this.storage !== undefined),
104
+ };
105
+ this.runs.set(runId, snapshot);
106
+ this.activeRunId = runId;
107
+ const abort = new AbortController();
108
+ this.abortByRunId.set(runId, abort);
109
+ this.pruneOldRuns(config);
110
+ this.persist(snapshot);
111
+ this.logger(`[bdk] eval run ${runId}: starting ${cases.length} case(s)`);
112
+ void this.execute(runId, {
113
+ baseUrl: loopbackUrl,
114
+ evals: selected,
115
+ config,
116
+ signal: abort.signal,
117
+ ...(input.bearerToken === undefined ? {} : { bearerToken: input.bearerToken }),
118
+ ...(input.verbose === undefined ? {} : { verbose: input.verbose }),
119
+ ...(input.timeoutMs === undefined ? {} : { timeoutMs: input.timeoutMs }),
124
120
  });
121
+ return snapshot;
125
122
  }
126
123
  /**
127
124
  * Cancel a running batch by Eval ID (`runId`). Stops starting new cases and
128
125
  * aborts in-flight turns. Idempotent when already cancelled.
129
126
  */
130
- cancel(runId) {
131
- return __awaiter(this, void 0, void 0, function* () {
132
- yield this.hydrate();
133
- const run = this.runs.get(runId);
134
- if (run === undefined) {
135
- throw new EvalRunUnknownError(runId);
136
- }
137
- if (run.status === "cancelled") {
138
- return run;
139
- }
140
- if (run.status !== "running") {
141
- throw new EvalRunNotRunningError(runId, run.status);
142
- }
143
- const abort = this.abortByRunId.get(runId);
144
- abort === null || abort === void 0 ? void 0 : abort.abort();
145
- markCancelledRun(run);
146
- this.persist(run);
147
- if (this.activeRunId === runId) {
148
- this.activeRunId = undefined;
149
- }
150
- this.logger(`[bdk] eval run ${runId}: cancelled`);
127
+ async cancel(runId) {
128
+ await this.hydrate();
129
+ const run = this.runs.get(runId);
130
+ if (run === undefined) {
131
+ throw new EvalRunUnknownError(runId);
132
+ }
133
+ if (run.status === "cancelled") {
151
134
  return run;
152
- });
135
+ }
136
+ if (run.status !== "running") {
137
+ throw new EvalRunNotRunningError(runId, run.status);
138
+ }
139
+ const abort = this.abortByRunId.get(runId);
140
+ abort?.abort();
141
+ markCancelledRun(run);
142
+ this.persist(run);
143
+ if (this.activeRunId === runId) {
144
+ this.activeRunId = undefined;
145
+ }
146
+ this.logger(`[bdk] eval run ${runId}: cancelled`);
147
+ return run;
153
148
  }
154
149
  sortedRuns() {
155
150
  return [...this.runs.values()].sort((a, b) => b.startedAt.localeCompare(a.startedAt));
@@ -160,63 +155,58 @@ export class EvalRunStore {
160
155
  * restore — and lazily as a safety net by every read. Idempotent;
161
156
  * concurrent callers share one pass.
162
157
  */
163
- hydrate() {
164
- return __awaiter(this, void 0, void 0, function* () {
165
- if (this.hydrated) {
158
+ async hydrate() {
159
+ if (this.hydrated) {
160
+ return;
161
+ }
162
+ if (this.hydratePromise === undefined) {
163
+ this.hydratePromise = this.hydrateFromStorage();
164
+ }
165
+ await this.hydratePromise;
166
+ }
167
+ async hydrateFromStorage() {
168
+ try {
169
+ if (this.storage === undefined) {
170
+ this.hydrated = true;
166
171
  return;
167
172
  }
168
- if (this.hydratePromise === undefined) {
169
- this.hydratePromise = this.hydrateFromStorage();
170
- }
171
- yield this.hydratePromise;
172
- });
173
- }
174
- hydrateFromStorage() {
175
- return __awaiter(this, void 0, void 0, function* () {
176
- try {
177
- if (this.storage === undefined) {
178
- this.hydrated = true;
179
- return;
180
- }
181
- const loaded = yield this.storage.list();
182
- for (const run of loaded) {
183
- if (run === null ||
184
- typeof run !== "object" ||
185
- typeof run.runId !== "string" ||
186
- run.runId === "") {
187
- continue;
188
- }
189
- // Incomplete batches from a killed process should not block a new run.
190
- if (run.status === "running") {
191
- markInterruptedRun(run);
192
- this.persist(run);
193
- }
194
- this.runs.set(run.runId, run);
195
- }
196
- // Prune with the defaults even when eval discovery fails — loaded
197
- // history must not stay unpruned for the process lifetime just
198
- // because an eval file has a syntax error at boot.
199
- let config = {};
200
- try {
201
- config = (yield discoverEvals(this.projectRoot)).config;
173
+ const loaded = await this.storage.list();
174
+ for (const run of loaded) {
175
+ if (run === null ||
176
+ typeof run !== "object" ||
177
+ typeof run.runId !== "string" ||
178
+ run.runId === "") {
179
+ continue;
202
180
  }
203
- catch (error) {
204
- this.logger(`[bdk] eval discovery failed during hydrate (pruning with defaults): ${error instanceof Error ? error.message : String(error)}`);
181
+ // Incomplete batches from a killed process should not block a new run.
182
+ if (run.status === "running") {
183
+ markInterruptedRun(run);
184
+ this.persist(run);
205
185
  }
206
- this.pruneOldRuns(config);
207
- this.logger(`[bdk] hydrated ${this.runs.size} playground eval run(s) from storage`);
186
+ this.runs.set(run.runId, run);
208
187
  }
209
- catch (error) {
210
- const message = error instanceof Error ? error.message : String(error);
211
- this.logger(`[bdk] failed to hydrate playground eval runs: ${message}`);
188
+ // Prune with the defaults even when eval discovery fails — loaded
189
+ // history must not stay unpruned for the process lifetime just
190
+ // because an eval file has a syntax error at boot.
191
+ let config = {};
192
+ try {
193
+ config = (await discoverEvals(this.projectRoot)).config;
212
194
  }
213
- finally {
214
- this.hydrated = true;
195
+ catch (error) {
196
+ this.logger(`[bdk] eval discovery failed during hydrate (pruning with defaults): ${error instanceof Error ? error.message : String(error)}`);
215
197
  }
216
- });
198
+ this.pruneOldRuns(config);
199
+ this.logger(`[bdk] hydrated ${this.runs.size} playground eval run(s) from storage`);
200
+ }
201
+ catch (error) {
202
+ const message = error instanceof Error ? error.message : String(error);
203
+ this.logger(`[bdk] failed to hydrate playground eval runs: ${message}`);
204
+ }
205
+ finally {
206
+ this.hydrated = true;
207
+ }
217
208
  }
218
209
  pruneOldRuns(config) {
219
- var _a;
220
210
  const limit = resolveEvalMaxPlaygroundRuns(config.maxPlaygroundRuns);
221
211
  const ordered = this.sortedRuns();
222
212
  if (ordered.length <= limit) {
@@ -227,13 +217,12 @@ export class EvalRunStore {
227
217
  continue;
228
218
  }
229
219
  this.runs.delete(stale.runId);
230
- (_a = this.storage) === null || _a === void 0 ? void 0 : _a.delete(stale.runId);
220
+ this.storage?.delete(stale.runId);
231
221
  }
232
222
  }
233
223
  /** Mirror the run onto durable storage (coordinator clones + serializes). */
234
224
  persist(run) {
235
- var _a;
236
- (_a = this.storage) === null || _a === void 0 ? void 0 : _a.save(run);
225
+ this.storage?.save(run);
237
226
  }
238
227
  /**
239
228
  * Serve is draining: durably mark any in-flight batch as interrupted
@@ -243,7 +232,6 @@ export class EvalRunStore {
243
232
  * completion write) until the next hydrate repairs it.
244
233
  */
245
234
  close() {
246
- var _a;
247
235
  const activeRunId = this.activeRunId;
248
236
  if (activeRunId === undefined) {
249
237
  return;
@@ -252,103 +240,109 @@ export class EvalRunStore {
252
240
  if (run === undefined || run.status !== "running") {
253
241
  return;
254
242
  }
255
- (_a = this.abortByRunId.get(activeRunId)) === null || _a === void 0 ? void 0 : _a.abort();
243
+ this.abortByRunId.get(activeRunId)?.abort();
256
244
  markInterruptedRun(run);
257
245
  this.persist(run);
258
246
  this.activeRunId = undefined;
259
247
  this.abortByRunId.delete(activeRunId);
260
248
  }
261
- execute(runId, opts) {
262
- return __awaiter(this, void 0, void 0, function* () {
263
- if (this.runs.get(runId) === undefined) {
249
+ async execute(runId, opts) {
250
+ if (this.runs.get(runId) === undefined) {
251
+ return;
252
+ }
253
+ try {
254
+ await runDiscoveredEvals({
255
+ projectRoot: this.projectRoot,
256
+ baseUrl: opts.baseUrl,
257
+ discovered: { evals: opts.evals, config: opts.config },
258
+ signal: opts.signal,
259
+ ...(opts.bearerToken === undefined ? {} : { bearerToken: opts.bearerToken }),
260
+ ...(opts.verbose === undefined ? {} : { verbose: opts.verbose }),
261
+ ...(opts.timeoutMs === undefined ? {} : { timeoutMs: opts.timeoutMs }),
262
+ onCaseStart: id => {
263
+ const run = this.runs.get(runId);
264
+ if (run === undefined || run.status === "cancelled") {
265
+ return;
266
+ }
267
+ const c = run.cases.find(x => x.id === id);
268
+ if (c !== undefined) {
269
+ c.status = "running";
270
+ c.inputs = [];
271
+ c.toolCalls = [];
272
+ c.finalText = undefined;
273
+ c.metrics = undefined;
274
+ c.logs = undefined;
275
+ c.assertions = undefined;
276
+ c.error = undefined;
277
+ }
278
+ },
279
+ onCaseEvent: (id, event) => {
280
+ const run = this.runs.get(runId);
281
+ if (run === undefined) {
282
+ return;
283
+ }
284
+ const c = run.cases.find(x => x.id === id);
285
+ if (c === undefined) {
286
+ return;
287
+ }
288
+ const sid = typeof event.sessionId === "string" && event.sessionId !== ""
289
+ ? event.sessionId
290
+ : undefined;
291
+ if (sid !== undefined && c.sessionId === undefined) {
292
+ c.sessionId = sid;
293
+ }
294
+ if (event.type === "message.received" && typeof event.data?.text === "string") {
295
+ c.inputs = [...(c.inputs ?? []), event.data.text];
296
+ }
297
+ if (event.type === "message.completed" &&
298
+ typeof event.data?.text === "string" &&
299
+ event.data.parentCallId === undefined) {
300
+ c.finalText = event.data.text;
301
+ }
302
+ },
303
+ onCaseDone: result => {
304
+ this.applyCaseResult(runId, result);
305
+ const run = this.runs.get(runId);
306
+ if (run !== undefined) {
307
+ this.persist(run);
308
+ }
309
+ },
310
+ });
311
+ const run = this.runs.get(runId);
312
+ if (run === undefined || run.status === "cancelled") {
264
313
  return;
265
314
  }
266
- try {
267
- yield runDiscoveredEvals(Object.assign(Object.assign(Object.assign(Object.assign({ projectRoot: this.projectRoot, baseUrl: opts.baseUrl, discovered: { evals: opts.evals, config: opts.config }, signal: opts.signal }, (opts.bearerToken === undefined ? {} : { bearerToken: opts.bearerToken })), (opts.verbose === undefined ? {} : { verbose: opts.verbose })), (opts.timeoutMs === undefined ? {} : { timeoutMs: opts.timeoutMs })), { onCaseStart: id => {
268
- const run = this.runs.get(runId);
269
- if (run === undefined || run.status === "cancelled") {
270
- return;
271
- }
272
- const c = run.cases.find(x => x.id === id);
273
- if (c !== undefined) {
274
- c.status = "running";
275
- c.inputs = [];
276
- c.toolCalls = [];
277
- c.finalText = undefined;
278
- c.metrics = undefined;
279
- c.logs = undefined;
280
- c.assertions = undefined;
281
- c.error = undefined;
282
- }
283
- }, onCaseEvent: (id, event) => {
284
- var _a, _b;
285
- var _c;
286
- const run = this.runs.get(runId);
287
- if (run === undefined) {
288
- return;
289
- }
290
- const c = run.cases.find(x => x.id === id);
291
- if (c === undefined) {
292
- return;
293
- }
294
- const sid = typeof event.sessionId === "string" && event.sessionId !== ""
295
- ? event.sessionId
296
- : undefined;
297
- if (sid !== undefined && c.sessionId === undefined) {
298
- c.sessionId = sid;
299
- }
300
- if (event.type === "message.received" && typeof ((_a = event.data) === null || _a === void 0 ? void 0 : _a.text) === "string") {
301
- c.inputs = [...((_c = c.inputs) !== null && _c !== void 0 ? _c : []), event.data.text];
302
- }
303
- if (event.type === "message.completed" &&
304
- typeof ((_b = event.data) === null || _b === void 0 ? void 0 : _b.text) === "string" &&
305
- event.data.parentCallId === undefined) {
306
- c.finalText = event.data.text;
307
- }
308
- }, onCaseDone: result => {
309
- this.applyCaseResult(runId, result);
310
- const run = this.runs.get(runId);
311
- if (run !== undefined) {
312
- this.persist(run);
313
- }
314
- } }));
315
- const run = this.runs.get(runId);
316
- if (run === undefined || run.status === "cancelled") {
317
- return;
318
- }
319
- run.status = "completed";
320
- run.finishedAt = new Date().toISOString();
321
- this.persist(run);
322
- this.logger(`[bdk] eval run ${runId}: done — ${run.summary.passed} passed, ${run.summary.failed} failed`);
315
+ run.status = "completed";
316
+ run.finishedAt = new Date().toISOString();
317
+ this.persist(run);
318
+ this.logger(`[bdk] eval run ${runId}: done — ${run.summary.passed} passed, ${run.summary.failed} failed`);
319
+ }
320
+ catch (error) {
321
+ const run = this.runs.get(runId);
322
+ if (run === undefined || run.status === "cancelled") {
323
+ return;
323
324
  }
324
- catch (error) {
325
- const run = this.runs.get(runId);
326
- if (run === undefined || run.status === "cancelled") {
327
- return;
328
- }
329
- const message = error instanceof Error ? error.message : String(error);
330
- if (opts.signal.aborted || message === "cancelled") {
331
- markCancelledRun(run);
332
- this.persist(run);
333
- this.logger(`[bdk] eval run ${runId}: cancelled`);
334
- return;
335
- }
336
- run.status = "failed";
337
- run.finishedAt = new Date().toISOString();
338
- run.error = message;
325
+ const message = error instanceof Error ? error.message : String(error);
326
+ if (opts.signal.aborted || message === "cancelled") {
327
+ markCancelledRun(run);
339
328
  this.persist(run);
340
- this.logger(`[bdk] eval run ${runId}: failed — ${run.error}`);
329
+ this.logger(`[bdk] eval run ${runId}: cancelled`);
330
+ return;
341
331
  }
342
- finally {
343
- this.abortByRunId.delete(runId);
344
- if (this.activeRunId === runId) {
345
- this.activeRunId = undefined;
346
- }
332
+ run.status = "failed";
333
+ run.finishedAt = new Date().toISOString();
334
+ run.error = message;
335
+ this.persist(run);
336
+ this.logger(`[bdk] eval run ${runId}: failed — ${run.error}`);
337
+ }
338
+ finally {
339
+ this.abortByRunId.delete(runId);
340
+ if (this.activeRunId === runId) {
341
+ this.activeRunId = undefined;
347
342
  }
348
- });
343
+ }
349
344
  }
350
345
  applyCaseResult(runId, result) {
351
- var _a, _b;
352
346
  const run = this.runs.get(runId);
353
347
  if (run === undefined) {
354
348
  return;
@@ -366,7 +360,7 @@ export class EvalRunStore {
366
360
  c.assertions = result.assertions;
367
361
  c.durationMs = result.durationMs;
368
362
  c.logs = result.logs;
369
- c.metrics = Object.keys(result.metrics).length > 0 ? Object.assign({}, result.metrics) : undefined;
363
+ c.metrics = Object.keys(result.metrics).length > 0 ? { ...result.metrics } : undefined;
370
364
  c.inputs = result.inputs;
371
365
  if (result.toolCalls !== undefined) {
372
366
  c.toolCalls = result.toolCalls;
@@ -388,28 +382,26 @@ export class EvalRunStore {
388
382
  return;
389
383
  }
390
384
  run.summary.done += 1;
391
- const verdict = (_a = result.verdict) !== null && _a !== void 0 ? _a : (result.ok ? "passed" : "failed");
392
- run.summary[verdict] = ((_b = run.summary[verdict]) !== null && _b !== void 0 ? _b : 0) + 1;
385
+ const verdict = result.verdict ?? (result.ok ? "passed" : "failed");
386
+ run.summary[verdict] = (run.summary[verdict] ?? 0) + 1;
393
387
  }
394
388
  }
395
389
  function markInterruptedRun(run) {
396
- var _a, _b, _c;
397
390
  run.status = "failed";
398
- run.finishedAt = (_a = run.finishedAt) !== null && _a !== void 0 ? _a : new Date().toISOString();
399
- run.error = (_b = run.error) !== null && _b !== void 0 ? _b : INTERRUPTED_BATCH_ERROR;
391
+ run.finishedAt = run.finishedAt ?? new Date().toISOString();
392
+ run.error = run.error ?? INTERRUPTED_BATCH_ERROR;
400
393
  for (const c of run.cases) {
401
394
  if (c.status === "pending" || c.status === "running") {
402
395
  c.status = "done";
403
396
  c.ok = false;
404
- c.error = (_c = c.error) !== null && _c !== void 0 ? _c : INTERRUPTED_CASE_ERROR;
397
+ c.error = c.error ?? INTERRUPTED_CASE_ERROR;
405
398
  }
406
399
  }
407
400
  reconcileRunSummary(run);
408
401
  }
409
402
  function markCancelledRun(run) {
410
- var _a;
411
403
  run.status = "cancelled";
412
- run.finishedAt = (_a = run.finishedAt) !== null && _a !== void 0 ? _a : new Date().toISOString();
404
+ run.finishedAt = run.finishedAt ?? new Date().toISOString();
413
405
  run.error = CANCELLED_BATCH_ERROR;
414
406
  for (const c of run.cases) {
415
407
  if (c.status === "pending" || c.status === "running") {
@@ -421,22 +413,41 @@ function markCancelledRun(run) {
421
413
  reconcileRunSummary(run);
422
414
  }
423
415
  function reconcileRunSummary(run) {
424
- var _a;
425
416
  const counts = { passed: 0, failed: 0, scored: 0, skipped: 0 };
426
417
  for (const c of run.cases) {
427
- counts[(_a = c.verdict) !== null && _a !== void 0 ? _a : (c.ok === true ? "passed" : "failed")] += 1;
418
+ counts[c.verdict ?? (c.ok === true ? "passed" : "failed")] += 1;
428
419
  }
429
- run.summary = Object.assign(Object.assign({}, counts), { total: run.cases.length, done: run.cases.length });
420
+ run.summary = {
421
+ ...counts,
422
+ total: run.cases.length,
423
+ done: run.cases.length,
424
+ };
430
425
  }
431
426
  function snapshotListConfig(config, durableRuns) {
432
- return Object.assign(Object.assign(Object.assign({}, (config.maxConcurrency === undefined ? {} : { maxConcurrency: config.maxConcurrency })), (config.timeoutMs === undefined ? {} : { timeoutMs: config.timeoutMs })), { maxPlaygroundRuns: resolveEvalMaxPlaygroundRuns(config.maxPlaygroundRuns), durableRuns });
427
+ return {
428
+ ...(config.maxConcurrency === undefined ? {} : { maxConcurrency: config.maxConcurrency }),
429
+ ...(config.timeoutMs === undefined ? {} : { timeoutMs: config.timeoutMs }),
430
+ maxPlaygroundRuns: resolveEvalMaxPlaygroundRuns(config.maxPlaygroundRuns),
431
+ durableRuns,
432
+ };
433
433
  }
434
434
  function snapshotRunConfig(config, durableRuns) {
435
435
  const list = snapshotListConfig(config, durableRuns);
436
- return Object.assign(Object.assign(Object.assign({}, (list.maxConcurrency === undefined ? {} : { maxConcurrency: list.maxConcurrency })), (list.timeoutMs === undefined ? {} : { timeoutMs: list.timeoutMs })), { maxPlaygroundRuns: list.maxPlaygroundRuns, durableRuns: list.durableRuns });
436
+ return {
437
+ ...(list.maxConcurrency === undefined ? {} : { maxConcurrency: list.maxConcurrency }),
438
+ ...(list.timeoutMs === undefined ? {} : { timeoutMs: list.timeoutMs }),
439
+ maxPlaygroundRuns: list.maxPlaygroundRuns,
440
+ durableRuns: list.durableRuns,
441
+ };
437
442
  }
438
443
  function discoveredToPending(e) {
439
- return Object.assign(Object.assign({ id: e.id, fileId: e.fileId, status: "pending" }, (e.definition.description === undefined ? {} : { description: e.definition.description })), (e.definition.tags === undefined ? {} : { tags: e.definition.tags }));
444
+ return {
445
+ id: e.id,
446
+ fileId: e.fileId,
447
+ status: "pending",
448
+ ...(e.definition.description === undefined ? {} : { description: e.definition.description }),
449
+ ...(e.definition.tags === undefined ? {} : { tags: e.definition.tags }),
450
+ };
440
451
  }
441
452
  export class EvalRunConflictError extends Error {
442
453
  constructor(activeRunId) {