@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
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Hosted eval cases. The control plane runs each `defineEval` case as its own
3
+ * architecture v2 session: admission reserves the session's send for the
4
+ * case, execution runs the case body there with every `t.send` a turn on
5
+ * that session, and the verdict lands on the session log as
6
+ * `eval.case.result`, which the control plane reads back.
7
+ */
8
+ import type { AgentProjectEvalsInfo } from "../types.js";
9
+ import type { HostedSendStart } from "./hosted-delivery.js";
10
+ import type { SessionEngine } from "./session-engine.js";
11
+ type CaseEngine = Pick<SessionEngine, "listEvents" | "interrupt" | "recordEvalCaseResult">;
12
+ export declare function hostedEvalCatalog(projectRoot: string): Promise<AgentProjectEvalsInfo>;
13
+ /** One turn per captured send, or the whole case for an eval-case send. */
14
+ export declare function hostedSendStart(deps: {
15
+ engine: CaseEngine;
16
+ projectRoot: string;
17
+ logger: (line: string) => void;
18
+ caseDeadlineMs?: number;
19
+ }): HostedSendStart;
20
+ export {};
21
+ //# sourceMappingURL=hosted-eval-cases.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hosted-eval-cases.d.ts","sourceRoot":"","sources":["../../src/internal/hosted-eval-cases.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,KAAK,EACV,qBAAqB,EAKtB,MAAM,aAAa,CAAC;AAIrB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAG5D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAGzD,KAAK,UAAU,GAAG,IAAI,CAAC,aAAa,EAAE,YAAY,GAAG,WAAW,GAAG,sBAAsB,CAAC,CAAC;AAO3F,wBAAsB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAY3F;AAED,2EAA2E;AAC3E,wBAAgB,eAAe,CAAC,IAAI,EAAE;IACpC,MAAM,EAAE,UAAU,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/B,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,GAAG,eAAe,CAelB"}
@@ -0,0 +1,162 @@
1
+ /**
2
+ * Hosted eval cases. The control plane runs each `defineEval` case as its own
3
+ * architecture v2 session: admission reserves the session's send for the
4
+ * case, execution runs the case body there with every `t.send` a turn on
5
+ * that session, and the verdict lands on the session log as
6
+ * `eval.case.result`, which the control plane reads back.
7
+ */
8
+ import { setTimeout as sleep } from "node:timers/promises";
9
+ import { describeError } from "./describe-error.js";
10
+ import { discoverEvals, runEvalCase } from "./eval-runner.js";
11
+ import { evalCaseOf } from "./http-control-plane-session.js";
12
+ import { RunSessionTimeoutError } from "./run-client.js";
13
+ import { buildTrajectory } from "./trajectory.js";
14
+ /** Under the 26-minute limit the host puts on one delivery. */
15
+ const CASE_DEADLINE_MS = 20 * 60_000;
16
+ /** Per tool-call input or output kept on the result; the session log keeps all of it. */
17
+ const MAX_TOOL_IO_CHARS = 8 * 1024;
18
+ export async function hostedEvalCatalog(projectRoot) {
19
+ const { evals, config } = await discoverEvals(projectRoot);
20
+ return {
21
+ protocol: 1,
22
+ cases: evals.map(e => ({
23
+ id: e.id,
24
+ fileId: e.fileId,
25
+ description: e.definition.description,
26
+ tags: e.definition.tags,
27
+ })),
28
+ config: { maxConcurrency: config.maxConcurrency, timeoutMs: config.timeoutMs },
29
+ };
30
+ }
31
+ /** One turn per captured send, or the whole case for an eval-case send. */
32
+ export function hostedSendStart(deps) {
33
+ return async ({ args, message, options, sessionPublicId }) => {
34
+ const evalCase = evalCaseOf(options);
35
+ if (evalCase === undefined) {
36
+ return args.send(message, options);
37
+ }
38
+ const done = runHostedEvalCase({
39
+ ...deps,
40
+ args,
41
+ options,
42
+ sessionId: sessionPublicId,
43
+ evalCase,
44
+ });
45
+ return { id: sessionPublicId, waitForCompletion: () => done };
46
+ };
47
+ }
48
+ /**
49
+ * The delivery finishes once the verdict is recorded, whatever the verdict:
50
+ * a failed case must not look like a failed delivery, which would retry it.
51
+ */
52
+ async function runHostedEvalCase(input) {
53
+ const startedAt = Date.now();
54
+ const deadlineMs = input.caseDeadlineMs ?? CASE_DEADLINE_MS;
55
+ const deadline = new AbortController();
56
+ const cancel = new AbortController();
57
+ const result = await Promise.race([
58
+ runCase({ ...input, signal: cancel.signal }).catch(error => failedResult(input.evalCase, describeError(error), startedAt)),
59
+ sleep(deadlineMs, undefined, { signal: deadline.signal }).then(async () => {
60
+ // The losing case body keeps running; it must not start turns after this verdict.
61
+ cancel.abort();
62
+ await input.engine.interrupt(input.sessionId);
63
+ return failedResult(input.evalCase, `eval case exceeded ${deadlineMs / 60_000} minutes`, startedAt);
64
+ }),
65
+ ]).finally(() => deadline.abort());
66
+ input.logger(`[bdk] eval case ${input.evalCase.caseId} (${input.evalCase.runId}): ${result.verdict ?? "failed"}`);
67
+ await input.engine.recordEvalCaseResult(input.sessionId, resultEventData(input.evalCase, result));
68
+ return { status: "finished" };
69
+ }
70
+ async function runCase(input) {
71
+ const startedAt = Date.now();
72
+ const { evals, config } = await discoverEvals(input.projectRoot);
73
+ const discovered = evals.find(e => e.id === input.evalCase.caseId);
74
+ if (discovered === undefined) {
75
+ return failedResult(input.evalCase, `No eval case ${JSON.stringify(input.evalCase.caseId)} in this release`, startedAt);
76
+ }
77
+ return runEvalCase(discovered, config, sessionTransport(input.engine, input.args, input.options), input.signal);
78
+ }
79
+ /** `t.send` as a turn on the admitted session, read back from its event log. */
80
+ function sessionTransport(engine, args, base) {
81
+ return {
82
+ async send(turn) {
83
+ turn.signal?.throwIfAborted();
84
+ const session = await args.send(turn.message, {
85
+ ...base,
86
+ workspaceDir: turn.options.workspaceDir,
87
+ workspaceFiles: turn.options.workspaceFiles,
88
+ cloud: turn.options.cloud,
89
+ });
90
+ if (turn.signal?.aborted) {
91
+ await engine.interrupt(session.id);
92
+ turn.signal.throwIfAborted();
93
+ }
94
+ const timer = new AbortController();
95
+ const settled = await Promise.race([
96
+ session.waitForCompletion().then(() => true),
97
+ sleep(Math.min(turn.timeoutMs, CASE_DEADLINE_MS), false, { signal: timer.signal }),
98
+ ]).finally(() => timer.abort());
99
+ if (!settled) {
100
+ await engine.interrupt(session.id);
101
+ throw new RunSessionTimeoutError(`eval turn timed out after ${turn.timeoutMs}ms`, session.id, await engine.listEvents(session.id, turn.startIndex));
102
+ }
103
+ const events = await engine.listEvents(session.id, turn.startIndex);
104
+ for (const event of events) {
105
+ turn.onEvent?.(event);
106
+ }
107
+ const trajectory = buildTrajectory(events);
108
+ return {
109
+ sessionId: session.id,
110
+ events,
111
+ trajectory,
112
+ ok: trajectory.ok,
113
+ nextEventIndex: events.length === 0 ? undefined : events[events.length - 1].index + 1,
114
+ };
115
+ },
116
+ };
117
+ }
118
+ function failedResult(ref, error, startedAt) {
119
+ return {
120
+ id: ref.caseId,
121
+ path: "",
122
+ ok: false,
123
+ verdict: "failed",
124
+ assertions: [],
125
+ inputs: [],
126
+ error,
127
+ logs: [],
128
+ metrics: {},
129
+ durationMs: Date.now() - startedAt,
130
+ };
131
+ }
132
+ function boundedIo(value) {
133
+ if (value === undefined) {
134
+ return undefined;
135
+ }
136
+ const json = JSON.stringify(value) ?? "";
137
+ return json.length <= MAX_TOOL_IO_CHARS ? value : `${json.slice(0, MAX_TOOL_IO_CHARS)}…`;
138
+ }
139
+ function resultEventData(ref, result) {
140
+ return {
141
+ runId: ref.runId,
142
+ caseId: ref.caseId,
143
+ ok: result.ok,
144
+ verdict: result.verdict ?? (result.ok ? "passed" : "failed"),
145
+ skipReason: result.skipReason,
146
+ assertions: result.assertions,
147
+ durationMs: result.durationMs,
148
+ error: result.error,
149
+ logs: result.logs,
150
+ metrics: result.metrics,
151
+ metadata: result.metadata,
152
+ inputs: result.inputs,
153
+ finalText: result.finalText,
154
+ tools: result.tools,
155
+ toolCalls: result.toolCalls?.map(call => ({
156
+ toolName: call.toolName,
157
+ args: boundedIo(call.args),
158
+ output: boundedIo(call.output),
159
+ isError: call.isError,
160
+ })),
161
+ };
162
+ }
@@ -2,15 +2,6 @@
2
2
  * Local diagnostic record for one hosted execution. Flushed with durable
3
3
  * execution history and process output.
4
4
  */
5
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
6
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
7
- return new (P || (P = Promise))(function (resolve, reject) {
8
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
9
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
10
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
11
- step((generator = generator.apply(thisArg, _arguments || [])).next());
12
- });
13
- };
14
5
  import { createHash, randomBytes } from "node:crypto";
15
6
  import { mkdir, rename, unlink, writeFile } from "node:fs/promises";
16
7
  import { join } from "node:path";
@@ -69,9 +60,8 @@ export const HOSTED_ERROR_SNIPPET_MAX_CHARS = 700;
69
60
  * `Error.stack` with its message and first frames.
70
61
  */
71
62
  export function hostedErrorStackSnippet(error) {
72
- var _a;
73
63
  if (error instanceof Error) {
74
- const stack = (_a = error.stack) === null || _a === void 0 ? void 0 : _a.trim();
64
+ const stack = error.stack?.trim();
75
65
  if (stack !== undefined && stack.length > 0) {
76
66
  const lines = stack
77
67
  .split("\n")
@@ -132,7 +122,7 @@ export function parseHostedExecutionDiag(raw) {
132
122
  try {
133
123
  parsed = JSON.parse(raw);
134
124
  }
135
- catch (_a) {
125
+ catch {
136
126
  return undefined;
137
127
  }
138
128
  if (typeof parsed !== "object" || parsed === null || Array.isArray(parsed)) {
@@ -185,27 +175,45 @@ export function parseHostedExecutionDiag(raw) {
185
175
  if (body.signalAborted !== undefined && typeof body.signalAborted !== "boolean") {
186
176
  return undefined;
187
177
  }
188
- return Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({ v: HOSTED_EXECUTION_DIAG_VERSION, executionId: body.executionId, writtenAt: body.writtenAt, sessionPublicId: body.sessionPublicId, sessionId: body.sessionId, turnStatus: body.turnStatus, durationMs: body.durationMs }, (message === undefined ? {} : { message })), (stack === undefined ? {} : { stack })), (body.signalAborted === true ? { signalAborted: true } : {})), (requestId === undefined ? {} : { requestId })), (abortReason === undefined ? {} : { abortReason })), (failureCode === undefined ? {} : { failureCode })), (errorCode === undefined ? {} : { errorCode })), (classification === undefined ? {} : { classification }));
178
+ return {
179
+ v: HOSTED_EXECUTION_DIAG_VERSION,
180
+ executionId: body.executionId,
181
+ writtenAt: body.writtenAt,
182
+ sessionPublicId: body.sessionPublicId,
183
+ sessionId: body.sessionId,
184
+ turnStatus: body.turnStatus,
185
+ durationMs: body.durationMs,
186
+ ...(message === undefined ? {} : { message }),
187
+ ...(stack === undefined ? {} : { stack }),
188
+ ...(body.signalAborted === true ? { signalAborted: true } : {}),
189
+ ...(requestId === undefined ? {} : { requestId }),
190
+ ...(abortReason === undefined ? {} : { abortReason }),
191
+ ...(failureCode === undefined ? {} : { failureCode }),
192
+ ...(errorCode === undefined ? {} : { errorCode }),
193
+ ...(classification === undefined ? {} : { classification }),
194
+ };
189
195
  }
190
196
  /**
191
197
  * Overwrite the per-execution diag file. Soft-fail: a write error must not
192
198
  * change the hosted-execution HTTP reply.
193
199
  */
194
- export function writeHostedExecutionDiag(stateRoot, diag) {
195
- return __awaiter(this, void 0, void 0, function* () {
196
- const path = hostedExecutionDiagPath(stateRoot);
197
- const tmp = `${path}.${randomBytes(8).toString("hex")}.tmp`;
198
- try {
199
- yield mkdir(stateRoot, { recursive: true });
200
- const serialized = JSON.stringify(diag);
201
- const body = serialized.length > HOSTED_EXECUTION_DIAG_MAX_BYTES
202
- ? JSON.stringify(Object.assign(Object.assign({}, diag), { stack: undefined, message: boundedOptionalString(diag.message, 256) }))
203
- : serialized;
204
- yield writeFile(tmp, body, "utf8");
205
- yield rename(tmp, path);
206
- }
207
- catch (_a) {
208
- yield unlink(tmp).catch(() => undefined);
209
- }
210
- });
200
+ export async function writeHostedExecutionDiag(stateRoot, diag) {
201
+ const path = hostedExecutionDiagPath(stateRoot);
202
+ const tmp = `${path}.${randomBytes(8).toString("hex")}.tmp`;
203
+ try {
204
+ await mkdir(stateRoot, { recursive: true });
205
+ const serialized = JSON.stringify(diag);
206
+ const body = serialized.length > HOSTED_EXECUTION_DIAG_MAX_BYTES
207
+ ? JSON.stringify({
208
+ ...diag,
209
+ stack: undefined,
210
+ message: boundedOptionalString(diag.message, 256),
211
+ })
212
+ : serialized;
213
+ await writeFile(tmp, body, "utf8");
214
+ await rename(tmp, path);
215
+ }
216
+ catch {
217
+ await unlink(tmp).catch(() => undefined);
218
+ }
211
219
  }
@@ -8,15 +8,6 @@
8
8
  * Between running and terminal, {@link refreshStartLogWhile} refreshes only
9
9
  * process output.
10
10
  */
11
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
12
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
13
- return new (P || (P = Promise))(function (resolve, reject) {
14
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
15
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
16
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
17
- step((generator = generator.apply(thisArg, _arguments || [])).next());
18
- });
19
- };
20
11
  import { hostedErrorStackSnippet, writeHostedExecutionDiag, } from "./hosted-execution-diag.js";
21
12
  import { serializeSessionRunError, snapshotSessionRunLogs, } from "./session-run-log.js";
22
13
  const MAX_ERROR_MESSAGE_LENGTH = 1024;
@@ -29,79 +20,97 @@ function boundedMessage(text) {
29
20
  * Write local diagnostics and durable output together. Soft-fail per sink so
30
21
  * a storage outage does not change the hosted response.
31
22
  */
32
- export function flushHostedExecutionRecord(sinks, fields) {
33
- return __awaiter(this, void 0, void 0, function* () {
34
- var _a;
35
- var _b;
36
- const writtenAt = new Date().toISOString();
37
- const message = fields.message === undefined ? undefined : boundedMessage(fields.message);
38
- const stack = fields.error === undefined ? undefined : hostedErrorStackSnippet(fields.error);
39
- if (sinks.stateRoot !== undefined) {
40
- yield writeHostedExecutionDiag(sinks.stateRoot, Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({ v: 1, executionId: fields.executionId, writtenAt, sessionPublicId: fields.sessionPublicId, sessionId: fields.sessionId, turnStatus: fields.turnStatus, durationMs: fields.durationMs }, (message === undefined ? {} : { message })), (stack === undefined || stack.length === 0 ? {} : { stack })), { signalAborted: fields.abortReason === "signal_abort" ? true : undefined }), (fields.abortReason === undefined ? {} : { abortReason: fields.abortReason })), { failureCode: fields.failureCode }), (fields.errorCode === undefined ? {} : { errorCode: fields.errorCode })), { classification: fields.classification }));
23
+ export async function flushHostedExecutionRecord(sinks, fields) {
24
+ const writtenAt = new Date().toISOString();
25
+ const message = fields.message === undefined ? undefined : boundedMessage(fields.message);
26
+ const stack = fields.error === undefined ? undefined : hostedErrorStackSnippet(fields.error);
27
+ if (sinks.stateRoot !== undefined) {
28
+ await writeHostedExecutionDiag(sinks.stateRoot, {
29
+ v: 1,
30
+ executionId: fields.executionId,
31
+ writtenAt,
32
+ sessionPublicId: fields.sessionPublicId,
33
+ sessionId: fields.sessionId,
34
+ turnStatus: fields.turnStatus,
35
+ durationMs: fields.durationMs,
36
+ ...(message === undefined ? {} : { message }),
37
+ ...(stack === undefined || stack.length === 0 ? {} : { stack }),
38
+ signalAborted: fields.abortReason === "signal_abort" ? true : undefined,
39
+ ...(fields.abortReason === undefined ? {} : { abortReason: fields.abortReason }),
40
+ failureCode: fields.failureCode,
41
+ ...(fields.errorCode === undefined ? {} : { errorCode: fields.errorCode }),
42
+ classification: fields.classification,
43
+ });
44
+ }
45
+ if (sinks.persistSessionRun !== undefined) {
46
+ const error = fields.error === undefined ? undefined : serializeSessionRunError(fields.error);
47
+ try {
48
+ await sinks.persistSessionRun({
49
+ executionId: fields.executionId,
50
+ writtenAt,
51
+ sessionPublicId: fields.sessionPublicId,
52
+ sessionId: fields.sessionId,
53
+ turnStatus: fields.turnStatus,
54
+ durationMs: fields.durationMs,
55
+ ...(fields.abortReason === undefined ? {} : { abortReason: fields.abortReason }),
56
+ ...(message === undefined ? {} : { message }),
57
+ ...(error === undefined ? {} : { error }),
58
+ logs: snapshotSessionRunLogs(sinks.snapshotLogs?.() ?? []),
59
+ });
60
+ }
61
+ catch {
62
+ // Soft-fail: a store outage must not change the HTTP reply.
41
63
  }
42
- if (sinks.persistSessionRun !== undefined) {
43
- const error = fields.error === undefined ? undefined : serializeSessionRunError(fields.error);
44
- try {
45
- yield sinks.persistSessionRun(Object.assign(Object.assign(Object.assign(Object.assign({ executionId: fields.executionId, writtenAt, sessionPublicId: fields.sessionPublicId, sessionId: fields.sessionId, turnStatus: fields.turnStatus, durationMs: fields.durationMs }, (fields.abortReason === undefined ? {} : { abortReason: fields.abortReason })), (message === undefined ? {} : { message })), (error === undefined ? {} : { error })), { logs: snapshotSessionRunLogs((_b = (_a = sinks.snapshotLogs) === null || _a === void 0 ? void 0 : _a.call(sinks)) !== null && _b !== void 0 ? _b : []) }));
46
- }
47
- catch (_c) {
48
- // Soft-fail: a store outage must not change the HTTP reply.
49
- }
64
+ }
65
+ if (sinks.flushStartLog !== undefined) {
66
+ try {
67
+ await sinks.flushStartLog(fields.sessionPublicId);
50
68
  }
51
- if (sinks.flushStartLog !== undefined) {
52
- try {
53
- yield sinks.flushStartLog(fields.sessionPublicId);
54
- }
55
- catch (_d) {
56
- // Soft-fail: same posture as the session-run persist.
57
- }
69
+ catch {
70
+ // Soft-fail: same posture as the session-run persist.
58
71
  }
59
- });
72
+ }
60
73
  }
61
74
  /**
62
75
  * Each refresh is a store write on the deployment's shared write budget, so
63
76
  * keep it coarse. An unchanged tee costs nothing (the store skips the put).
64
77
  */
65
- export const HOSTED_START_LOG_REFRESH_INTERVAL_MS = 30000;
78
+ export const HOSTED_START_LOG_REFRESH_INTERVAL_MS = 30_000;
66
79
  /**
67
80
  * Refresh the tee while `run` (the turn) settles: v2 has no engine to tail,
68
81
  * so this snapshot is the only view of a running turn. A tick is skipped
69
82
  * while a refresh is still in flight, and the last one settles before this
70
83
  * returns so it cannot land after the terminal flush.
71
84
  */
72
- export function refreshStartLogWhile(sinks, startLogId, run) {
73
- return __awaiter(this, void 0, void 0, function* () {
74
- const flush = sinks.flushStartLog;
75
- if (flush === undefined) {
76
- return yield run();
77
- }
78
- let refresh;
79
- const timer = setInterval(() => {
80
- // Soft-fail like the other flushes. A rejection left unhandled here would
81
- // trip the process-death flush.
82
- refresh !== null && refresh !== void 0 ? refresh : (refresh = flush(startLogId)
83
- .catch(() => undefined)
84
- .finally(() => {
85
- refresh = undefined;
86
- }));
87
- }, HOSTED_START_LOG_REFRESH_INTERVAL_MS);
88
- try {
89
- return yield run();
90
- }
91
- finally {
92
- clearInterval(timer);
93
- yield refresh;
94
- }
95
- });
85
+ export async function refreshStartLogWhile(sinks, startLogId, run) {
86
+ const flush = sinks.flushStartLog;
87
+ if (flush === undefined) {
88
+ return await run();
89
+ }
90
+ let refresh;
91
+ const timer = setInterval(() => {
92
+ // Soft-fail like the other flushes. A rejection left unhandled here would
93
+ // trip the process-death flush.
94
+ refresh ??= flush(startLogId)
95
+ .catch(() => undefined)
96
+ .finally(() => {
97
+ refresh = undefined;
98
+ });
99
+ }, HOSTED_START_LOG_REFRESH_INTERVAL_MS);
100
+ try {
101
+ return await run();
102
+ }
103
+ finally {
104
+ clearInterval(timer);
105
+ await refresh;
106
+ }
96
107
  }
97
108
  /**
98
109
  * Durable-only crash flush. Leaves `hosted-execution.json` at `running`.
99
110
  */
100
- export function flushHostedExecutionProcessDeath(args) {
101
- return __awaiter(this, void 0, void 0, function* () {
102
- yield args.flushProcessDeath(args.reason, args.error);
103
- if (args.startLogId !== undefined && args.flushStartLog !== undefined) {
104
- yield args.flushStartLog(args.startLogId);
105
- }
106
- });
111
+ export async function flushHostedExecutionProcessDeath(args) {
112
+ await args.flushProcessDeath(args.reason, args.error);
113
+ if (args.startLogId !== undefined && args.flushStartLog !== undefined) {
114
+ await args.flushStartLog(args.startLogId);
115
+ }
107
116
  }
@@ -51,7 +51,7 @@ export function resetHostedExecutionLatencyForTests() {
51
51
  nowOverride = undefined;
52
52
  }
53
53
  function resolveMeter() {
54
- return meterOverride !== null && meterOverride !== void 0 ? meterOverride : metrics.getMeter(INSTRUMENTATION);
54
+ return meterOverride ?? metrics.getMeter(INSTRUMENTATION);
55
55
  }
56
56
  function durationInstrument() {
57
57
  if (durationHistogram === undefined) {
@@ -110,17 +110,19 @@ export function isDuringHostedExecutionLatency() {
110
110
  * progress updates and final fallback posts are ignored.
111
111
  */
112
112
  export function markHostedFirstVisibleReply(args) {
113
- var _a;
114
113
  const store = latencyAls.getStore();
115
114
  if (store === undefined || store.firstVisibleAt !== undefined) {
116
115
  return false;
117
116
  }
118
117
  store.firstVisibleAt = hostedExecutionNow();
119
118
  store.firstVisibleOutcome = args.outcome;
120
- store.deliverySurface = (_a = args.deliverySurface) !== null && _a !== void 0 ? _a : "slack";
119
+ store.deliverySurface = args.deliverySurface ?? "slack";
121
120
  if (!store.visibleCounterEmitted) {
122
121
  store.visibleCounterEmitted = true;
123
- visibleInstrument().add(1, Object.assign(Object.assign({}, baseAttrs(store)), { outcome: args.outcome }));
122
+ visibleInstrument().add(1, {
123
+ ...baseAttrs(store),
124
+ outcome: args.outcome,
125
+ });
124
126
  }
125
127
  return true;
126
128
  }
@@ -134,7 +136,7 @@ export function noteHostedVisibleReplyError(args) {
134
136
  return;
135
137
  }
136
138
  store.errorEmitted = true;
137
- if ((args === null || args === void 0 ? void 0 : args.deliverySurface) !== undefined) {
139
+ if (args?.deliverySurface !== undefined) {
138
140
  store.deliverySurface = args.deliverySurface;
139
141
  }
140
142
  else if (store.deliverySurface === "none") {
@@ -142,7 +144,10 @@ export function noteHostedVisibleReplyError(args) {
142
144
  }
143
145
  if (!store.visibleCounterEmitted) {
144
146
  store.visibleCounterEmitted = true;
145
- visibleInstrument().add(1, Object.assign(Object.assign({}, baseAttrs(store)), { outcome: "error" }));
147
+ visibleInstrument().add(1, {
148
+ ...baseAttrs(store),
149
+ outcome: "error",
150
+ });
146
151
  }
147
152
  }
148
153
  function resolveOutcome(store) {
@@ -171,7 +176,10 @@ export function finalizeHostedExecutionLatency(marks) {
171
176
  const outcome = resolveOutcome(store);
172
177
  if (!store.visibleCounterEmitted) {
173
178
  store.visibleCounterEmitted = true;
174
- visibleInstrument().add(1, Object.assign(Object.assign({}, baseAttrs(store)), { outcome: "none" }));
179
+ visibleInstrument().add(1, {
180
+ ...baseAttrs(store),
181
+ outcome: "none",
182
+ });
175
183
  }
176
184
  const phases = {
177
185
  durability_drain: Math.max(0, marks.drainAt - marks.completionAt),
@@ -189,7 +197,7 @@ export function finalizeHostedExecutionLatency(marks) {
189
197
  };
190
198
  const histogram = durationInstrument();
191
199
  for (const [phase, value] of Object.entries(phases)) {
192
- histogram.record(value, Object.assign(Object.assign({}, attrs), { phase }));
200
+ histogram.record(value, { ...attrs, phase });
193
201
  }
194
202
  return {
195
203
  channelKind: store.channelKind,
@@ -33,8 +33,8 @@ function managedAutomationTable() {
33
33
  return table;
34
34
  }
35
35
  /** Long enough to outlive a slow review run kicked off by the delivery. */
36
- const MANAGED_AUTOMATION_TTL_MS = 60 * 60000;
37
- const MANAGED_AUTOMATION_MAX_ENTRIES = 10000;
36
+ const MANAGED_AUTOMATION_TTL_MS = 60 * 60_000;
37
+ const MANAGED_AUTOMATION_MAX_ENTRIES = 10_000;
38
38
  export function recordHostedManagedAutomation(delivery) {
39
39
  if (delivery.managedAutomation === undefined) {
40
40
  console.info(`[bdk] hosted managedAutomation not recorded deliveryId=${delivery.deliveryId}: admission envelope carried no managedAutomation slice (non-managed delivery, or the control plane resolved no MCP servers and no Slack channels)`);
@@ -78,15 +78,14 @@ export function isReservedSecretName(name) {
78
78
  * secret names, each prefixed with its field (`egressDomains: …`).
79
79
  */
80
80
  export function hostingEntryErrors(declared) {
81
- var _a, _b;
82
81
  const errors = [];
83
- for (const domain of (_a = declared.egressDomains) !== null && _a !== void 0 ? _a : []) {
82
+ for (const domain of declared.egressDomains ?? []) {
84
83
  const domainError = validateEgressDomain(domain);
85
84
  if (domainError !== undefined) {
86
85
  errors.push(`egressDomains: ${domainError}`);
87
86
  }
88
87
  }
89
- for (const name of (_b = declared.secretNames) !== null && _b !== void 0 ? _b : []) {
88
+ for (const name of declared.secretNames ?? []) {
90
89
  const nameError = validateSecretName(name);
91
90
  if (nameError !== undefined) {
92
91
  errors.push(`secretNames: ${nameError}`);
@@ -11,7 +11,10 @@ import { attachHttpControlPlaneAdmission } from "./http-control-plane-session.js
11
11
  */
12
12
  export function httpChannel(config = {}) {
13
13
  const definition = config.continuation !== undefined
14
- ? brandDefinition("http-channel", Object.assign(Object.assign({}, config), { continuation: normalizeIdentity(config.continuation, "http") }))
14
+ ? brandDefinition("http-channel", {
15
+ ...config,
16
+ continuation: normalizeIdentity(config.continuation, "http"),
17
+ })
15
18
  : brandDefinition("http-channel", config);
16
19
  attachHttpControlPlaneAdmission(definition);
17
20
  return definition;