@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
@@ -9,15 +9,6 @@
9
9
  * id (including custom channels such as `drive`) when the token matches its
10
10
  * active HTTP follow-up key; task sessions stay fire-and-forget.
11
11
  */
12
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
13
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
14
- return new (P || (P = Promise))(function (resolve, reject) {
15
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
16
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
17
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
18
- step((generator = generator.apply(thisArg, _arguments || [])).next());
19
- });
20
- };
21
12
  import { samePrincipal } from "./auth.js";
22
13
  import { formatContinuationToken, parseContinuationToken } from "./ids.js";
23
14
  import { isRecord } from "./is-record.js";
@@ -26,54 +17,59 @@ import { ApprovalInterruptedError, ApprovalNotFoundError, AuthInterruptedError,
26
17
  import { eventsUrlForSession, playgroundUrlForSession } from "./session-urls.js";
27
18
  const SESSION_ID_HEADER = "x-agent-serve-session-id";
28
19
  export function buildHttpChannelRoutes(args) {
29
- var _a, _b, _c, _d;
30
20
  const { engine, config, auth } = args;
31
- const base = (_a = args.basePath) !== null && _a !== void 0 ? _a : "";
32
- const relaxSessionReadAuth = (_b = args.relaxSessionReadAuth) !== null && _b !== void 0 ? _b : false;
33
- const relaxSessionReadAuthBeyondLoopback = (_c = args.relaxSessionReadAuthBeyondLoopback) !== null && _c !== void 0 ? _c : false;
34
- const relaxSessionApprovalAuth = (_d = args.relaxSessionApprovalAuth) !== null && _d !== void 0 ? _d : false;
35
- const transformMessage = (message, authContext) => __awaiter(this, void 0, void 0, function* () {
21
+ const base = args.basePath ?? "";
22
+ const relaxSessionReadAuth = args.relaxSessionReadAuth ?? false;
23
+ const relaxSessionReadAuthBeyondLoopback = args.relaxSessionReadAuthBeyondLoopback ?? false;
24
+ const relaxSessionApprovalAuth = args.relaxSessionApprovalAuth ?? false;
25
+ const transformMessage = async (message, authContext) => {
36
26
  if (config.onMessage === undefined) {
37
27
  return message;
38
28
  }
39
29
  return config.onMessage(message, { auth: authContext });
40
- });
30
+ };
41
31
  const createSession = {
42
32
  method: "POST",
43
33
  pattern: `${base}/v1/session`,
44
34
  auth,
45
- handler: (request, ctx) => __awaiter(this, void 0, void 0, function* () {
46
- var _a;
47
- const body = yield readJsonObject(request);
35
+ handler: async (request, ctx) => {
36
+ const body = await readJsonObject(request);
48
37
  if (body === undefined || typeof body.message !== "string") {
49
38
  return errorResponse(400, "invalid_request", "Expected a JSON body with a string `message`.");
50
39
  }
51
40
  if (body.asOf !== undefined && typeof body.asOf !== "string") {
52
41
  return errorResponse(400, "invalid_request", "`asOf` must be an ISO-8601 instant with a timezone when provided.");
53
42
  }
54
- const message = yield transformMessage(body.message, ctx.auth);
43
+ const message = await transformMessage(body.message, ctx.auth);
55
44
  const workspaceFiles = readWorkspaceFiles(body.workspaceFiles);
56
45
  // Per-session cloud attach (create only). Eval harness uses this to pin
57
46
  // fixture repos without putting them on the agent's default cloud.repos.
58
47
  const cloud = readCloudOptions(body.cloud);
59
- const session = yield engine.send(HTTP_CHANNEL_ID, message, Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({ auth: ctx.auth }, (typeof body.title === "string" ? { title: body.title } : {})), (body.purpose === "eval" ? { purpose: "eval" } : {})), (body.dryRun === true ? { dryRun: true } : {})), { asOf: body.asOf }), (workspaceFiles === undefined ? {} : { workspaceFiles })), (cloud === undefined ? {} : { cloud })));
48
+ const session = await engine.send(HTTP_CHANNEL_ID, message, {
49
+ auth: ctx.auth,
50
+ ...(typeof body.title === "string" ? { title: body.title } : {}),
51
+ ...(body.purpose === "eval" ? { purpose: "eval" } : {}),
52
+ ...(body.dryRun === true ? { dryRun: true } : {}),
53
+ asOf: body.asOf,
54
+ ...(workspaceFiles === undefined ? {} : { workspaceFiles }),
55
+ ...(cloud === undefined ? {} : { cloud }),
56
+ });
60
57
  return jsonResponse({
61
58
  ok: true,
62
59
  sessionId: session.id,
63
- continuationToken: formatContinuationToken(HTTP_CHANNEL_ID, (_a = session.continuationToken) !== null && _a !== void 0 ? _a : ""),
60
+ continuationToken: formatContinuationToken(HTTP_CHANNEL_ID, session.continuationToken ?? ""),
64
61
  playgroundUrl: playgroundUrlForSession(request, base, session.id),
65
62
  traceUrl: eventsUrlForSession(request.url, base, session.id),
66
63
  }, { headers: { [SESSION_ID_HEADER]: session.id } });
67
- }),
64
+ },
68
65
  };
69
66
  const followUp = {
70
67
  method: "POST",
71
68
  pattern: `${base}/v1/session/:sessionId`,
72
69
  auth,
73
- handler: (request, ctx) => __awaiter(this, void 0, void 0, function* () {
74
- var _a;
75
- const sessionId = (_a = ctx.params.sessionId) !== null && _a !== void 0 ? _a : "";
76
- const record = yield engine.getOrRestoreSession(sessionId);
70
+ handler: async (request, ctx) => {
71
+ const sessionId = ctx.params.sessionId ?? "";
72
+ const record = await engine.getOrRestoreSession(sessionId);
77
73
  if (record === undefined) {
78
74
  return errorResponse(404, "session_not_found", `Unknown session ${sessionId}.`);
79
75
  }
@@ -90,7 +86,7 @@ export function buildHttpChannelRoutes(args) {
90
86
  if (ownership !== undefined) {
91
87
  return ownership;
92
88
  }
93
- const body = yield readJsonObject(request);
89
+ const body = await readJsonObject(request);
94
90
  if (body === undefined || typeof body.message !== "string") {
95
91
  return errorResponse(400, "invalid_request", "Expected a JSON body with a string `message`.");
96
92
  }
@@ -101,8 +97,8 @@ export function buildHttpChannelRoutes(args) {
101
97
  if (presented === null) {
102
98
  return errorResponse(409, "stale_continuation_token", "The continuation token does not address this session's active continuation.");
103
99
  }
104
- const message = yield transformMessage(body.message, ctx.auth);
105
- const rotated = yield engine.followUpHttp(sessionId, presented, message);
100
+ const message = await transformMessage(body.message, ctx.auth);
101
+ const rotated = await engine.followUpHttp(sessionId, presented, message);
106
102
  if (rotated === undefined) {
107
103
  return errorResponse(409, "stale_continuation_token", "The continuation token does not address this session's active continuation.");
108
104
  }
@@ -111,22 +107,21 @@ export function buildHttpChannelRoutes(args) {
111
107
  sessionId,
112
108
  continuationToken: formatContinuationToken(HTTP_CHANNEL_ID, rotated),
113
109
  }, { headers: { [SESSION_ID_HEADER]: sessionId } });
114
- }),
110
+ },
115
111
  };
116
112
  const stream = {
117
113
  method: "GET",
118
114
  pattern: `${base}/v1/session/:sessionId/stream`,
119
115
  auth,
120
- handler: (request, ctx) => __awaiter(this, void 0, void 0, function* () {
121
- var _a;
122
- const sessionId = (_a = ctx.params.sessionId) !== null && _a !== void 0 ? _a : "";
116
+ handler: async (request, ctx) => {
117
+ const sessionId = ctx.params.sessionId ?? "";
123
118
  // The stream-and-inspect handle is runtime-owned: sessions started by
124
119
  // custom channels or schedules are observable here too when the caller
125
120
  // matches the session's stored principal (or `--dev` relax). Follow-ups
126
121
  // use the same ownership gate plus the session's continuation token.
127
122
  // Lazy-restore by id so playground Open-trace works after redeploy
128
123
  // when the session is durable but not in the local state root yet.
129
- const record = yield engine.getOrRestoreSession(sessionId);
124
+ const record = await engine.getOrRestoreSession(sessionId);
130
125
  if (record === undefined) {
131
126
  return errorResponse(404, "session_not_found", `Unknown session ${sessionId}.`);
132
127
  }
@@ -144,7 +139,7 @@ export function buildHttpChannelRoutes(args) {
144
139
  if (Number.isNaN(startIndex) || startIndex < 0) {
145
140
  return errorResponse(400, "invalid_request", "startIndex must be a non-negative integer.");
146
141
  }
147
- const body = yield engine.eventStream(sessionId, startIndex);
142
+ const body = await engine.eventStream(sessionId, startIndex);
148
143
  return new Response(body, {
149
144
  status: 200,
150
145
  headers: {
@@ -153,17 +148,16 @@ export function buildHttpChannelRoutes(args) {
153
148
  [SESSION_ID_HEADER]: sessionId,
154
149
  },
155
150
  });
156
- }),
151
+ },
157
152
  };
158
153
  /** One-shot NDJSON (or JSON) dump of the session trace. */
159
154
  const events = {
160
155
  method: "GET",
161
156
  pattern: `${base}/v1/session/:sessionId/events`,
162
157
  auth,
163
- handler: (request, ctx) => __awaiter(this, void 0, void 0, function* () {
164
- var _a;
165
- const sessionId = (_a = ctx.params.sessionId) !== null && _a !== void 0 ? _a : "";
166
- const record = yield engine.getOrRestoreSession(sessionId);
158
+ handler: async (request, ctx) => {
159
+ const sessionId = ctx.params.sessionId ?? "";
160
+ const record = await engine.getOrRestoreSession(sessionId);
167
161
  if (record === undefined) {
168
162
  return errorResponse(404, "session_not_found", `Unknown session ${sessionId}.`);
169
163
  }
@@ -177,7 +171,7 @@ export function buildHttpChannelRoutes(args) {
177
171
  }
178
172
  const url = new URL(request.url);
179
173
  const asJson = url.searchParams.get("format") === "json";
180
- const snapshot = yield engine.listEvents(sessionId, 0, {
174
+ const snapshot = await engine.listEvents(sessionId, 0, {
181
175
  backfillCloudCost: true,
182
176
  });
183
177
  if (asJson) {
@@ -197,16 +191,15 @@ export function buildHttpChannelRoutes(args) {
197
191
  [SESSION_ID_HEADER]: sessionId,
198
192
  },
199
193
  });
200
- }),
194
+ },
201
195
  };
202
196
  const cost = {
203
197
  method: "GET",
204
198
  pattern: `${base}/v1/session/:sessionId/cost`,
205
199
  auth,
206
- handler: (_request, ctx) => __awaiter(this, void 0, void 0, function* () {
207
- var _a;
208
- const sessionId = (_a = ctx.params.sessionId) !== null && _a !== void 0 ? _a : "";
209
- const record = yield engine.getOrRestoreSession(sessionId);
200
+ handler: async (_request, ctx) => {
201
+ const sessionId = ctx.params.sessionId ?? "";
202
+ const record = await engine.getOrRestoreSession(sessionId);
210
203
  if (record === undefined) {
211
204
  return errorResponse(404, "session_not_found", `Unknown session ${sessionId}.`);
212
205
  }
@@ -218,20 +211,19 @@ export function buildHttpChannelRoutes(args) {
218
211
  if (ownership !== undefined) {
219
212
  return ownership;
220
213
  }
221
- const payload = yield engine.sessionCost(sessionId);
214
+ const payload = await engine.sessionCost(sessionId);
222
215
  return jsonResponse(payload, {
223
216
  headers: { [SESSION_ID_HEADER]: sessionId },
224
217
  });
225
- }),
218
+ },
226
219
  };
227
220
  const listApprovals = {
228
221
  method: "GET",
229
222
  pattern: `${base}/v1/session/:sessionId/approvals`,
230
223
  auth,
231
- handler: (_request, ctx) => __awaiter(this, void 0, void 0, function* () {
232
- var _a;
233
- const sessionId = (_a = ctx.params.sessionId) !== null && _a !== void 0 ? _a : "";
234
- const record = yield engine.getOrRestoreSession(sessionId);
224
+ handler: async (_request, ctx) => {
225
+ const sessionId = ctx.params.sessionId ?? "";
226
+ const record = await engine.getOrRestoreSession(sessionId);
235
227
  if (record === undefined) {
236
228
  return errorResponse(404, "session_not_found", `Unknown session ${sessionId}.`);
237
229
  }
@@ -243,25 +235,23 @@ export function buildHttpChannelRoutes(args) {
243
235
  if (ownership !== undefined) {
244
236
  return ownership;
245
237
  }
246
- const pending = yield engine.listPendingApprovals(sessionId);
238
+ const pending = await engine.listPendingApprovals(sessionId);
247
239
  return jsonResponse({ ok: true, sessionId, pending });
248
- }),
240
+ },
249
241
  };
250
242
  const resolveApproval = {
251
243
  method: "POST",
252
244
  pattern: `${base}/v1/session/:sessionId/approvals/:callId`,
253
245
  auth,
254
- handler: (request, ctx) => __awaiter(this, void 0, void 0, function* () {
255
- var _a;
256
- var _b, _c;
257
- const sessionId = (_b = ctx.params.sessionId) !== null && _b !== void 0 ? _b : "";
258
- const callId = (_c = ctx.params.callId) !== null && _c !== void 0 ? _c : "";
259
- const record = yield engine.getOrRestoreSession(sessionId);
246
+ handler: async (request, ctx) => {
247
+ const sessionId = ctx.params.sessionId ?? "";
248
+ const callId = ctx.params.callId ?? "";
249
+ const record = await engine.getOrRestoreSession(sessionId);
260
250
  if (record === undefined) {
261
251
  return errorResponse(404, "session_not_found", `Unknown session ${sessionId}.`);
262
252
  }
263
253
  const bridgeSlackApproval = relaxSessionApprovalAuth === true &&
264
- ((_a = record.auth) === null || _a === void 0 ? void 0 : _a.authenticator) === "slack" &&
254
+ record.auth?.authenticator === "slack" &&
265
255
  (relaxSessionReadAuthBeyondLoopback === true ||
266
256
  (typeof ctx.requestIp === "string" && isLoopbackAddress(ctx.requestIp)));
267
257
  const ownership = requireSessionOwner(record, ctx.auth, {
@@ -274,13 +264,13 @@ export function buildHttpChannelRoutes(args) {
274
264
  if (ownership !== undefined) {
275
265
  return ownership;
276
266
  }
277
- const body = yield readJsonObject(request);
278
- const decision = body === null || body === void 0 ? void 0 : body.decision;
267
+ const body = await readJsonObject(request);
268
+ const decision = body?.decision;
279
269
  if (decision !== "approve" && decision !== "deny") {
280
270
  return errorResponse(400, "invalid_request", 'Expected a JSON body with `decision`: "approve" | "deny".');
281
271
  }
282
272
  try {
283
- const pending = yield engine.resolveApproval(sessionId, callId, decision, ctx.auth, bridgeSlackApproval ? { asSessionOwner: true } : undefined);
273
+ const pending = await engine.resolveApproval(sessionId, callId, decision, ctx.auth, bridgeSlackApproval ? { asSessionOwner: true } : undefined);
284
274
  return jsonResponse({
285
275
  ok: true,
286
276
  sessionId,
@@ -301,16 +291,15 @@ export function buildHttpChannelRoutes(args) {
301
291
  }
302
292
  throw error;
303
293
  }
304
- }),
294
+ },
305
295
  };
306
296
  const stop = {
307
297
  method: "POST",
308
298
  pattern: `${base}/v1/session/:sessionId/stop`,
309
299
  auth,
310
- handler: (_request, ctx) => __awaiter(this, void 0, void 0, function* () {
311
- var _a;
312
- const sessionId = (_a = ctx.params.sessionId) !== null && _a !== void 0 ? _a : "";
313
- const record = yield engine.getOrRestoreSession(sessionId);
300
+ handler: async (_request, ctx) => {
301
+ const sessionId = ctx.params.sessionId ?? "";
302
+ const record = await engine.getOrRestoreSession(sessionId);
314
303
  if (record === undefined) {
315
304
  return errorResponse(404, "session_not_found", `Unknown session ${sessionId}.`);
316
305
  }
@@ -322,18 +311,17 @@ export function buildHttpChannelRoutes(args) {
322
311
  if (ownership !== undefined) {
323
312
  return ownership;
324
313
  }
325
- const interrupted = yield engine.interrupt(sessionId);
314
+ const interrupted = await engine.interrupt(sessionId);
326
315
  return jsonResponse({ ok: true, interrupted }, { headers: { [SESSION_ID_HEADER]: sessionId } });
327
- }),
316
+ },
328
317
  };
329
318
  const listAuths = {
330
319
  method: "GET",
331
320
  pattern: `${base}/v1/session/:sessionId/auths`,
332
321
  auth,
333
- handler: (_request, ctx) => __awaiter(this, void 0, void 0, function* () {
334
- var _a;
335
- const sessionId = (_a = ctx.params.sessionId) !== null && _a !== void 0 ? _a : "";
336
- const record = yield engine.getOrRestoreSession(sessionId);
322
+ handler: async (_request, ctx) => {
323
+ const sessionId = ctx.params.sessionId ?? "";
324
+ const record = await engine.getOrRestoreSession(sessionId);
337
325
  if (record === undefined) {
338
326
  return errorResponse(404, "session_not_found", `Unknown session ${sessionId}.`);
339
327
  }
@@ -345,25 +333,23 @@ export function buildHttpChannelRoutes(args) {
345
333
  if (ownership !== undefined) {
346
334
  return ownership;
347
335
  }
348
- const pending = yield engine.listPendingAuths(sessionId);
336
+ const pending = await engine.listPendingAuths(sessionId);
349
337
  return jsonResponse({ ok: true, sessionId, pending });
350
- }),
338
+ },
351
339
  };
352
340
  const resolveAuth = {
353
341
  method: "POST",
354
342
  pattern: `${base}/v1/session/:sessionId/auths/:callId`,
355
343
  auth,
356
- handler: (request, ctx) => __awaiter(this, void 0, void 0, function* () {
357
- var _a;
358
- var _b, _c;
359
- const sessionId = (_b = ctx.params.sessionId) !== null && _b !== void 0 ? _b : "";
360
- const callId = (_c = ctx.params.callId) !== null && _c !== void 0 ? _c : "";
361
- const record = yield engine.getOrRestoreSession(sessionId);
344
+ handler: async (request, ctx) => {
345
+ const sessionId = ctx.params.sessionId ?? "";
346
+ const callId = ctx.params.callId ?? "";
347
+ const record = await engine.getOrRestoreSession(sessionId);
362
348
  if (record === undefined) {
363
349
  return errorResponse(404, "session_not_found", `Unknown session ${sessionId}.`);
364
350
  }
365
351
  const bridgeSlackAuth = relaxSessionApprovalAuth === true &&
366
- ((_a = record.auth) === null || _a === void 0 ? void 0 : _a.authenticator) === "slack" &&
352
+ record.auth?.authenticator === "slack" &&
367
353
  (relaxSessionReadAuthBeyondLoopback === true ||
368
354
  (typeof ctx.requestIp === "string" && isLoopbackAddress(ctx.requestIp)));
369
355
  const ownership = requireSessionOwner(record, ctx.auth, {
@@ -374,13 +360,13 @@ export function buildHttpChannelRoutes(args) {
374
360
  if (ownership !== undefined) {
375
361
  return ownership;
376
362
  }
377
- const body = yield readJsonObject(request);
378
- const decision = body === null || body === void 0 ? void 0 : body.decision;
363
+ const body = await readJsonObject(request);
364
+ const decision = body?.decision;
379
365
  if (decision !== "approve" && decision !== "deny") {
380
366
  return errorResponse(400, "invalid_request", 'Expected a JSON body with `decision`: "approve" | "deny".');
381
367
  }
382
368
  try {
383
- const pending = yield engine.resolveAuth(sessionId, callId, decision, ctx.auth, bridgeSlackAuth ? { asSessionOwner: true } : undefined);
369
+ const pending = await engine.resolveAuth(sessionId, callId, decision, ctx.auth, bridgeSlackAuth ? { asSessionOwner: true } : undefined);
384
370
  return jsonResponse({
385
371
  ok: true,
386
372
  sessionId,
@@ -401,7 +387,7 @@ export function buildHttpChannelRoutes(args) {
401
387
  }
402
388
  throw error;
403
389
  }
404
- }),
390
+ },
405
391
  };
406
392
  return [
407
393
  createSession,
@@ -420,7 +406,7 @@ export function requireSessionOwner(record, caller, options) {
420
406
  // Dev playground lists every session (`includeAll`); match that by
421
407
  // allowing cross-principal read/follow-up. Loopback-only unless
422
408
  // `--allow-anonymous` also opted into beyondLoopback.
423
- const relaxOwnership = (options === null || options === void 0 ? void 0 : options.relax) === true &&
409
+ const relaxOwnership = options?.relax === true &&
424
410
  (options.beyondLoopback === true ||
425
411
  (typeof options.requestIp === "string" && isLoopbackAddress(options.requestIp)));
426
412
  if (relaxOwnership || samePrincipal(record.auth, caller)) {
@@ -429,10 +415,12 @@ export function requireSessionOwner(record, caller, options) {
429
415
  return errorResponse(403, "forbidden", "This session belongs to a different principal.");
430
416
  }
431
417
  export function jsonResponse(data, init = {}) {
432
- var _a;
433
418
  return new Response(JSON.stringify(data), {
434
- status: (_a = init.status) !== null && _a !== void 0 ? _a : 200,
435
- headers: Object.assign({ "content-type": "application/json; charset=utf-8" }, init.headers),
419
+ status: init.status ?? 200,
420
+ headers: {
421
+ "content-type": "application/json; charset=utf-8",
422
+ ...init.headers,
423
+ },
436
424
  });
437
425
  }
438
426
  export function errorResponse(status, code, message) {
@@ -481,7 +469,11 @@ function readCloudOptions(value) {
481
469
  if (!isRecord(entry) || typeof entry.url !== "string" || entry.url === "") {
482
470
  continue;
483
471
  }
484
- repos.push(Object.assign(Object.assign({ url: entry.url }, (typeof entry.startingRef === "string" ? { startingRef: entry.startingRef } : {})), (typeof entry.prUrl === "string" ? { prUrl: entry.prUrl } : {})));
472
+ repos.push({
473
+ url: entry.url,
474
+ ...(typeof entry.startingRef === "string" ? { startingRef: entry.startingRef } : {}),
475
+ ...(typeof entry.prUrl === "string" ? { prUrl: entry.prUrl } : {}),
476
+ });
485
477
  }
486
478
  if (repos.length > 0) {
487
479
  cloud.repos = repos;
@@ -510,25 +502,22 @@ function readCloudOptions(value) {
510
502
  return Object.keys(cloud).length === 0 ? undefined : cloud;
511
503
  }
512
504
  /** Parse a JSON object body. Requires `application/json` (CORS-simple types do not parse). */
513
- export function readJsonObject(request) {
514
- return __awaiter(this, void 0, void 0, function* () {
515
- const contentType = request.headers.get("content-type");
516
- if (contentType === null || !isApplicationJson(contentType)) {
517
- return undefined;
518
- }
519
- try {
520
- const parsed = yield request.json();
521
- if (typeof parsed === "object" && parsed !== null && !Array.isArray(parsed)) {
522
- return parsed;
523
- }
524
- return undefined;
525
- }
526
- catch (_a) {
527
- return undefined;
505
+ export async function readJsonObject(request) {
506
+ const contentType = request.headers.get("content-type");
507
+ if (contentType === null || !isApplicationJson(contentType)) {
508
+ return undefined;
509
+ }
510
+ try {
511
+ const parsed = await request.json();
512
+ if (typeof parsed === "object" && parsed !== null && !Array.isArray(parsed)) {
513
+ return parsed;
528
514
  }
529
- });
515
+ return undefined;
516
+ }
517
+ catch {
518
+ return undefined;
519
+ }
530
520
  }
531
521
  function isApplicationJson(contentType) {
532
- var _a;
533
- return ((_a = contentType.split(";", 1)[0]) === null || _a === void 0 ? void 0 : _a.trim().toLowerCase()) === "application/json";
522
+ return contentType.split(";", 1)[0]?.trim().toLowerCase() === "application/json";
534
523
  }
@@ -8,13 +8,23 @@
8
8
  * execution (never through this payload), so authored code cannot pick
9
9
  * one. {@link HttpChannelDefinition.onAdmit} runs against the mailbox
10
10
  * key and the original message before that send is captured.
11
+ *
12
+ * `agentsdk.eval-case` reserves the session's send for one eval case: the
13
+ * hosted execution runs the case body there instead of a single turn. The
14
+ * case body writes every message, so it skips `onAdmit` and `onMessage`.
11
15
  */
12
- import type { ChannelHandlerArgs, HttpChannelDefinition } from "../types.js";
16
+ import type { ChannelHandlerArgs, HttpChannelDefinition, SendMessageOptions } from "../types.js";
13
17
  export type ControlPlaneSessionPayload = {
14
18
  message: string;
15
19
  dryRun?: boolean | undefined;
16
20
  asOf?: string | undefined;
17
21
  };
22
+ export type EvalCaseRef = {
23
+ runId: string;
24
+ caseId: string;
25
+ };
26
+ /** The eval case an `agentsdk.eval-case` admission reserved this send for. */
27
+ export declare function evalCaseOf(options: SendMessageOptions): EvalCaseRef | undefined;
18
28
  export declare function parseControlPlaneSessionPayload(payload: unknown): {
19
29
  ok: true;
20
30
  data: ControlPlaneSessionPayload;
@@ -22,6 +32,13 @@ export declare function parseControlPlaneSessionPayload(payload: unknown): {
22
32
  ok: false;
23
33
  error: string;
24
34
  };
35
+ export declare function parseControlPlaneEvalCasePayload(payload: unknown): {
36
+ ok: true;
37
+ data: EvalCaseRef;
38
+ } | {
39
+ ok: false;
40
+ error: string;
41
+ };
25
42
  export declare function dispatchHttpControlPlaneSession(input: {
26
43
  eventType: string;
27
44
  payload: unknown;
@@ -1 +1 @@
1
- {"version":3,"file":"http-control-plane-session.d.ts","sourceRoot":"","sources":["../../src/internal/http-control-plane-session.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAS7E,MAAM,MAAM,0BAA0B,GAAG;IACvC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC7B,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC3B,CAAC;AAKF,wBAAgB,+BAA+B,CAC7C,OAAO,EAAE,OAAO,GACf;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,0BAA0B,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CA4B/E;AAED,wBAAsB,+BAA+B,CAAC,KAAK,EAAE;IAC3D,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,kBAAkB,CAAC;IACzB,sBAAsB,EAAE,MAAM,CAAC;IAC/B,SAAS,CAAC,EAAE,qBAAqB,CAAC,WAAW,CAAC,CAAC;IAC/C,OAAO,CAAC,EAAE,qBAAqB,CAAC,SAAS,CAAC,CAAC;CAC5C,GAAG,OAAO,CAAC,QAAQ,CAAC,CAyBpB;AAED,wBAAgB,+BAA+B,CAAC,UAAU,EAAE,qBAAqB,GAAG,IAAI,CAavF"}
1
+ {"version":3,"file":"http-control-plane-session.d.ts","sourceRoot":"","sources":["../../src/internal/http-control-plane-session.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAUjG,MAAM,MAAM,0BAA0B,GAAG;IACvC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC7B,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAY5D,8EAA8E;AAC9E,wBAAgB,UAAU,CAAC,OAAO,EAAE,kBAAkB,GAAG,WAAW,GAAG,SAAS,CAE/E;AAED,wBAAgB,+BAA+B,CAC7C,OAAO,EAAE,OAAO,GACf;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,0BAA0B,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CA4B/E;AAED,wBAAgB,gCAAgC,CAC9C,OAAO,EAAE,OAAO,GACf;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,WAAW,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAiBhE;AAeD,wBAAsB,+BAA+B,CAAC,KAAK,EAAE;IAC3D,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,kBAAkB,CAAC;IACzB,sBAAsB,EAAE,MAAM,CAAC;IAC/B,SAAS,CAAC,EAAE,qBAAqB,CAAC,WAAW,CAAC,CAAC;IAC/C,OAAO,CAAC,EAAE,qBAAqB,CAAC,SAAS,CAAC,CAAC;CAC5C,GAAG,OAAO,CAAC,QAAQ,CAAC,CA4BpB;AAED,wBAAgB,+BAA+B,CAAC,UAAU,EAAE,qBAAqB,GAAG,IAAI,CAavF"}
@@ -8,22 +8,25 @@
8
8
  * execution (never through this payload), so authored code cannot pick
9
9
  * one. {@link HttpChannelDefinition.onAdmit} runs against the mailbox
10
10
  * key and the original message before that send is captured.
11
+ *
12
+ * `agentsdk.eval-case` reserves the session's send for one eval case: the
13
+ * hosted execution runs the case body there instead of a single turn. The
14
+ * case body writes every message, so it skips `onAdmit` and `onMessage`.
11
15
  */
12
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
13
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
14
- return new (P || (P = Promise))(function (resolve, reject) {
15
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
16
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
17
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
18
- step((generator = generator.apply(thisArg, _arguments || [])).next());
19
- });
20
- };
21
16
  import { skipped, turnStarted } from "./channel-dispatch.js";
22
17
  import { attachHostedAdmissionAdapter } from "./hosted-admission-adapter.js";
23
- import { AGENT_SDK_HTTP_CHANNEL_KIND, AGENT_SDK_SESSION_EVENT_TYPE, } from "./hosted-catch-protocol.js";
18
+ import { AGENT_SDK_EVAL_CASE_EVENT_TYPE, AGENT_SDK_HTTP_CHANNEL_KIND, AGENT_SDK_SESSION_EVENT_TYPE, } from "./hosted-catch-protocol.js";
24
19
  import { isRecord } from "./is-record.js";
25
20
  const PAYLOAD_KEYS = new Set(["message", "dryRun", "asOf"]);
21
+ const EVAL_CASE_PAYLOAD_KEYS = new Set(["runId", "caseId"]);
26
22
  const MAX_MESSAGE_CHARS = 64 * 1024;
23
+ const MAX_EVAL_ID_CHARS = 512;
24
+ /** Symbol-keyed so authored channels cannot forge an eval-case send. */
25
+ const EVAL_CASE = Symbol("agentsdk.eval-case");
26
+ /** The eval case an `agentsdk.eval-case` admission reserved this send for. */
27
+ export function evalCaseOf(options) {
28
+ return options[EVAL_CASE];
29
+ }
27
30
  export function parseControlPlaneSessionPayload(payload) {
28
31
  if (!isRecord(payload)) {
29
32
  return { ok: false, error: "payload must be an object" };
@@ -51,32 +54,63 @@ export function parseControlPlaneSessionPayload(payload) {
51
54
  },
52
55
  };
53
56
  }
54
- export function dispatchHttpControlPlaneSession(input) {
55
- return __awaiter(this, void 0, void 0, function* () {
56
- if (input.eventType !== AGENT_SDK_SESSION_EVENT_TYPE) {
57
- return skipped("not a control-plane session");
58
- }
59
- const parsed = parseControlPlaneSessionPayload(input.payload);
60
- if (!parsed.ok) {
61
- return Response.json({ ok: false, error: parsed.error }, { status: 400 });
62
- }
63
- const original = parsed.data.message;
64
- if (input.onAdmit !== undefined) {
65
- yield input.onAdmit({
66
- message: original,
67
- sessionKey: input.mailboxContinuationKey,
68
- dryRun: parsed.data.dryRun,
69
- asOf: parsed.data.asOf,
70
- host: input.args.host,
71
- });
57
+ export function parseControlPlaneEvalCasePayload(payload) {
58
+ if (!isRecord(payload)) {
59
+ return { ok: false, error: "payload must be an object" };
60
+ }
61
+ if (Object.keys(payload).some(key => !EVAL_CASE_PAYLOAD_KEYS.has(key))) {
62
+ return { ok: false, error: "payload carries an unsupported field" };
63
+ }
64
+ for (const key of ["runId", "caseId"]) {
65
+ const value = payload[key];
66
+ if (typeof value !== "string" || value.length === 0 || value.length > MAX_EVAL_ID_CHARS) {
67
+ return { ok: false, error: `payload.${key} is required` };
72
68
  }
73
- const message = input.onMessage === undefined ? original : yield input.onMessage(original, { auth: null });
74
- const session = yield input.args.send(message, {
69
+ }
70
+ return {
71
+ ok: true,
72
+ data: { runId: payload.runId, caseId: payload.caseId },
73
+ };
74
+ }
75
+ async function dispatchEvalCase(payload, args) {
76
+ const parsed = parseControlPlaneEvalCasePayload(payload);
77
+ if (!parsed.ok) {
78
+ return Response.json({ ok: false, error: parsed.error }, { status: 400 });
79
+ }
80
+ const options = {
81
+ purpose: "eval",
82
+ title: `Eval ${parsed.data.caseId}`,
83
+ [EVAL_CASE]: parsed.data,
84
+ };
85
+ return turnStarted(await args.send(parsed.data.caseId, options));
86
+ }
87
+ export async function dispatchHttpControlPlaneSession(input) {
88
+ if (input.eventType === AGENT_SDK_EVAL_CASE_EVENT_TYPE) {
89
+ return dispatchEvalCase(input.payload, input.args);
90
+ }
91
+ if (input.eventType !== AGENT_SDK_SESSION_EVENT_TYPE) {
92
+ return skipped("not a control-plane session");
93
+ }
94
+ const parsed = parseControlPlaneSessionPayload(input.payload);
95
+ if (!parsed.ok) {
96
+ return Response.json({ ok: false, error: parsed.error }, { status: 400 });
97
+ }
98
+ const original = parsed.data.message;
99
+ if (input.onAdmit !== undefined) {
100
+ await input.onAdmit({
101
+ message: original,
102
+ sessionKey: input.mailboxContinuationKey,
75
103
  dryRun: parsed.data.dryRun,
76
104
  asOf: parsed.data.asOf,
105
+ host: input.args.host,
77
106
  });
78
- return turnStarted(session);
107
+ }
108
+ const message = input.onMessage === undefined ? original : await input.onMessage(original, { auth: null });
109
+ const session = await input.args.send(message, {
110
+ dryRun: parsed.data.dryRun,
111
+ asOf: parsed.data.asOf,
79
112
  });
113
+ return turnStarted(session);
80
114
  }
81
115
  export function attachHttpControlPlaneAdmission(definition) {
82
116
  attachHostedAdmissionAdapter(definition, {
@@ -85,7 +119,7 @@ export function attachHttpControlPlaneAdmission(definition) {
85
119
  eventType,
86
120
  payload,
87
121
  args,
88
- mailboxContinuationKey: mailboxContinuationKey !== null && mailboxContinuationKey !== void 0 ? mailboxContinuationKey : "",
122
+ mailboxContinuationKey: mailboxContinuationKey ?? "",
89
123
  onMessage: definition.onMessage,
90
124
  onAdmit: definition.onAdmit,
91
125
  }),
@@ -36,6 +36,5 @@ function firstHeaderValue(value) {
36
36
  }
37
37
  /** HTTP/1 `Host`, or HTTP/2 `:authority` when Host was not copied. */
38
38
  export function incomingRequestHost(headers, fallback = "127.0.0.1") {
39
- var _a, _b;
40
- return (_b = (_a = firstHeaderValue(headers.host)) !== null && _a !== void 0 ? _a : firstHeaderValue(headers[":authority"])) !== null && _b !== void 0 ? _b : fallback;
39
+ return firstHeaderValue(headers.host) ?? firstHeaderValue(headers[":authority"]) ?? fallback;
41
40
  }