@cursor/bdk 0.2.5 → 0.2.7

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 (376) hide show
  1. package/dist/bin/agent-serve.js +55 -54
  2. package/dist/channels/github/github-channel.d.ts +4 -4
  3. package/dist/channels/github/github-channel.d.ts.map +1 -1
  4. package/dist/channels/github/github-channel.js +39 -13
  5. package/dist/channels/github/types.d.ts +6 -0
  6. package/dist/channels/github/types.d.ts.map +1 -1
  7. package/dist/channels/slack/dispatch.d.ts.map +1 -1
  8. package/dist/channels/slack/dispatch.js +37 -29
  9. package/dist/channels/slack/eval-directive.js +1 -1
  10. package/dist/channels/slack/external-policy.d.ts.map +1 -1
  11. package/dist/channels/slack/external-policy.js +6 -6
  12. package/dist/channels/slack/inbound.d.ts +5 -0
  13. package/dist/channels/slack/inbound.d.ts.map +1 -1
  14. package/dist/channels/slack/inbound.js +13 -0
  15. package/dist/channels/slack/index.d.ts +3 -0
  16. package/dist/channels/slack/index.d.ts.map +1 -1
  17. package/dist/channels/slack/index.js +3 -0
  18. package/dist/channels/slack/log.d.ts +1 -1
  19. package/dist/channels/slack/log.js +1 -1
  20. package/dist/channels/slack/self-identity.d.ts +15 -0
  21. package/dist/channels/slack/self-identity.d.ts.map +1 -0
  22. package/dist/channels/slack/self-identity.js +48 -0
  23. package/dist/channels/slack/sender-name.d.ts +17 -0
  24. package/dist/channels/slack/sender-name.d.ts.map +1 -0
  25. package/dist/channels/slack/sender-name.js +87 -0
  26. package/dist/channels/slack/setup.js +1 -1
  27. package/dist/channels/slack/user-info.d.ts +15 -0
  28. package/dist/channels/slack/user-info.d.ts.map +1 -0
  29. package/dist/channels/slack/user-info.js +57 -0
  30. package/dist/docs/404.html +2 -2
  31. package/dist/docs/assets/{app.94Iu5dyD.js → app.oyjtOr3W.js} +4 -4
  32. package/dist/docs/assets/chunks/@localSearchIndexroot.C25zYVuc.js +1 -0
  33. package/dist/docs/assets/chunks/{VPLocalSearchBox.DTKFDlBr.js → VPLocalSearchBox.D0P6J_UJ.js} +1 -1
  34. package/dist/docs/assets/chunks/{arc.DuzwHEeg.js → arc.B0LY1J1h.js} +1 -1
  35. package/dist/docs/assets/chunks/{architectureDiagram-Q4EWVU46.C6lyhLs0.js → architectureDiagram-Q4EWVU46.dPduLUxY.js} +1 -1
  36. package/dist/docs/assets/chunks/{baseUniq.DUNEWlY8.js → baseUniq.B_Ohm21h.js} +1 -1
  37. package/dist/docs/assets/chunks/{blockDiagram-DXYQGD6D.CXOQGI0O.js → blockDiagram-DXYQGD6D.B4zcanaJ.js} +1 -1
  38. package/dist/docs/assets/chunks/{c4Diagram-AHTNJAMY.BYdPE-Oe.js → c4Diagram-AHTNJAMY.D9Iw21nx.js} +1 -1
  39. package/dist/docs/assets/chunks/channel.CRUyWDV-.js +1 -0
  40. package/dist/docs/assets/chunks/{chunk-4BX2VUAB.YIV9HeX0.js → chunk-4BX2VUAB.DDVwRShI.js} +1 -1
  41. package/dist/docs/assets/chunks/{chunk-4TB4RGXK.BG80DEOc.js → chunk-4TB4RGXK.DsYcdn1i.js} +1 -1
  42. package/dist/docs/assets/chunks/{chunk-55IACEB6.BDKJSZQc.js → chunk-55IACEB6.BzzQvcYp.js} +1 -1
  43. package/dist/docs/assets/chunks/{chunk-EDXVE4YY.CtYnQqts.js → chunk-EDXVE4YY.BMiXZ7FX.js} +1 -1
  44. package/dist/docs/assets/chunks/{chunk-FMBD7UC4.CityOth-.js → chunk-FMBD7UC4.D_mBcLoc.js} +1 -1
  45. package/dist/docs/assets/chunks/{chunk-OYMX7WX6.CMD22CQX.js → chunk-OYMX7WX6.CMVjWVMx.js} +1 -1
  46. package/dist/docs/assets/chunks/{chunk-QZHKN3VN.WWpc3ND0.js → chunk-QZHKN3VN.BG-FrPv9.js} +1 -1
  47. package/dist/docs/assets/chunks/{chunk-YZCP3GAM.BMg-yhj3.js → chunk-YZCP3GAM.CkFE1ap3.js} +1 -1
  48. package/dist/docs/assets/chunks/classDiagram-6PBFFD2Q.CG_UObcQ.js +1 -0
  49. package/dist/docs/assets/chunks/classDiagram-v2-HSJHXN6E.CG_UObcQ.js +1 -0
  50. package/dist/docs/assets/chunks/clone.NYSZ9qZN.js +1 -0
  51. package/dist/docs/assets/chunks/{cose-bilkent-S5V4N54A.Buu_LC5q.js → cose-bilkent-S5V4N54A.BVNnCTvY.js} +1 -1
  52. package/dist/docs/assets/chunks/{dagre-KV5264BT.DW7onj6E.js → dagre-KV5264BT.CDN5PR9l.js} +1 -1
  53. package/dist/docs/assets/chunks/{diagram-5BDNPKRD.B3NxIbEV.js → diagram-5BDNPKRD.DQRUlT-i.js} +1 -1
  54. package/dist/docs/assets/chunks/{diagram-G4DWMVQ6.BJvN6Vkv.js → diagram-G4DWMVQ6.CoeblYQT.js} +1 -1
  55. package/dist/docs/assets/chunks/{diagram-MMDJMWI5.wfRWrexs.js → diagram-MMDJMWI5.DW3ymjl0.js} +1 -1
  56. package/dist/docs/assets/chunks/{diagram-TYMM5635.7QtjSYio.js → diagram-TYMM5635.BP0uN4Jw.js} +1 -1
  57. package/dist/docs/assets/chunks/{erDiagram-SMLLAGMA.jxPgDH1t.js → erDiagram-SMLLAGMA.DVFUWEn4.js} +1 -1
  58. package/dist/docs/assets/chunks/{flowDiagram-DWJPFMVM.BhDWA-TO.js → flowDiagram-DWJPFMVM.HU-eHspv.js} +1 -1
  59. package/dist/docs/assets/chunks/{ganttDiagram-T4ZO3ILL.Ijq8iYKv.js → ganttDiagram-T4ZO3ILL.DHNhXijY.js} +1 -1
  60. package/dist/docs/assets/chunks/{gitGraphDiagram-UUTBAWPF.DXpfW4YG.js → gitGraphDiagram-UUTBAWPF.DkISXcO3.js} +1 -1
  61. package/dist/docs/assets/chunks/{graph.CoPlssRl.js → graph.CCV0fuRR.js} +1 -1
  62. package/dist/docs/assets/chunks/{infoDiagram-42DDH7IO.eJuv_EOz.js → infoDiagram-42DDH7IO.bgILzOoc.js} +1 -1
  63. package/dist/docs/assets/chunks/{ishikawaDiagram-UXIWVN3A._OEzenCR.js → ishikawaDiagram-UXIWVN3A.CuryXC0F.js} +1 -1
  64. package/dist/docs/assets/chunks/{journeyDiagram-VCZTEJTY.CwlTjirB.js → journeyDiagram-VCZTEJTY.BL1Pr-wu.js} +1 -1
  65. package/dist/docs/assets/chunks/{kanban-definition-6JOO6SKY.DSp_C8cZ.js → kanban-definition-6JOO6SKY.BbGjvk4l.js} +1 -1
  66. package/dist/docs/assets/chunks/{layout.Bms9s7uB.js → layout.C4PfdldS.js} +1 -1
  67. package/dist/docs/assets/chunks/{linear.BjnmB4je.js → linear.C3xD1T6X.js} +1 -1
  68. package/dist/docs/assets/chunks/{min.CKkYlMsn.js → min.CzgRAQ9c.js} +1 -1
  69. package/dist/docs/assets/chunks/{mindmap-definition-QFDTVHPH.T2d0vJ7X.js → mindmap-definition-QFDTVHPH.CA9rSWum.js} +1 -1
  70. package/dist/docs/assets/chunks/{pieDiagram-DEJITSTG.DU0RoCvx.js → pieDiagram-DEJITSTG.B8MprgJu.js} +1 -1
  71. package/dist/docs/assets/chunks/{quadrantDiagram-34T5L4WZ.9QZjM-x0.js → quadrantDiagram-34T5L4WZ.DndDwbKT.js} +1 -1
  72. package/dist/docs/assets/chunks/{requirementDiagram-MS252O5E.CZpylJMd.js → requirementDiagram-MS252O5E.Zhfgwlnn.js} +1 -1
  73. package/dist/docs/assets/chunks/{sankeyDiagram-XADWPNL6.CnFdfW95.js → sankeyDiagram-XADWPNL6.B6RRm6N5.js} +1 -1
  74. package/dist/docs/assets/chunks/{sequenceDiagram-FGHM5R23.-jC0PP1t.js → sequenceDiagram-FGHM5R23.Bfmz-1PN.js} +1 -1
  75. package/dist/docs/assets/chunks/{stateDiagram-FHFEXIEX.DG7yBRUU.js → stateDiagram-FHFEXIEX.gbrdNqgj.js} +1 -1
  76. package/dist/docs/assets/chunks/stateDiagram-v2-QKLJ7IA2.DOOmulfQ.js +1 -0
  77. package/dist/docs/assets/chunks/{theme.B3O9koXV.js → theme.gpWjytMh.js} +2 -2
  78. package/dist/docs/assets/chunks/{timeline-definition-GMOUNBTQ.Bf9u4Ebb.js → timeline-definition-GMOUNBTQ.Bl1l7M1f.js} +1 -1
  79. package/dist/docs/assets/chunks/{vennDiagram-DHZGUBPP.BjhbbYE6.js → vennDiagram-DHZGUBPP.Dfle4U0d.js} +1 -1
  80. package/dist/docs/assets/chunks/wardley-RL74JXVD.BJrCW6xc.js +162 -0
  81. package/dist/docs/assets/chunks/{wardleyDiagram-NUSXRM2D.8fRb4Nb5.js → wardleyDiagram-NUSXRM2D.CM_4lmvZ.js} +1 -1
  82. package/dist/docs/assets/chunks/{xychartDiagram-5P7HB3ND.DoOP3zZM.js → xychartDiagram-5P7HB3ND.CHT5X28R.js} +1 -1
  83. package/dist/docs/assets/{evals.md.LRCSn6Ik.js → evals.md.C851kViu.js} +1 -1
  84. package/dist/docs/assets/{reference_cli.md.BsgDqYPh.js → reference_cli.md.GwugN3n-.js} +5 -5
  85. package/dist/docs/assets/reference_cli.md.GwugN3n-.lean.js +1 -0
  86. package/dist/docs/assets/{templates_agentic-owners.md.vtjfwxbf.js → templates_agentic-owners.md.CvmABtia.js} +1 -1
  87. package/dist/docs/assets/{templates_agentic-owners.md.vtjfwxbf.lean.js → templates_agentic-owners.md.CvmABtia.lean.js} +1 -1
  88. package/dist/docs/assets/{templates_security-reviewer.md.CX9l9bcg.js → templates_security-reviewer.md.Gh6EF9Us.js} +3 -2
  89. package/dist/docs/assets/{templates_security-reviewer.md.CX9l9bcg.lean.js → templates_security-reviewer.md.Gh6EF9Us.lean.js} +1 -1
  90. package/dist/docs/assets/{templates_thermo-quality-review.md.95qmTmr1.js → templates_thermo-quality-review.md.B77UyTrX.js} +1 -1
  91. package/dist/docs/assets/{templates_thermo-review.md.DQh6Q0C-.js → templates_thermo-review.md.DRJ7mC5U.js} +1 -1
  92. package/dist/docs/assets/{templates_triage.md.BFlQhWXf.js → templates_triage.md.CNN6b0JZ.js} +3 -3
  93. package/dist/docs/assets/{templates_triage.md.BFlQhWXf.lean.js → templates_triage.md.CNN6b0JZ.lean.js} +1 -1
  94. package/dist/docs/building-with-agents.html +35 -35
  95. package/dist/docs/deployment.html +35 -35
  96. package/dist/docs/evals.html +37 -37
  97. package/dist/docs/evals.md +2 -2
  98. package/dist/docs/guides/agent-to-agent.html +35 -35
  99. package/dist/docs/guides/bitbucket.html +35 -35
  100. package/dist/docs/guides/cloud-agents.html +35 -35
  101. package/dist/docs/guides/convert-automation.html +35 -35
  102. package/dist/docs/guides/github.html +35 -35
  103. package/dist/docs/guides/gitlab.html +35 -35
  104. package/dist/docs/guides/grokbot-agents.html +35 -35
  105. package/dist/docs/guides/hooks.html +35 -35
  106. package/dist/docs/guides/improve.html +35 -35
  107. package/dist/docs/guides/jev.html +35 -35
  108. package/dist/docs/guides/mcp-oauth.html +35 -35
  109. package/dist/docs/guides/opentelemetry.html +35 -35
  110. package/dist/docs/guides/slack.html +35 -35
  111. package/dist/docs/guides/webhooks.html +35 -35
  112. package/dist/docs/hashmap.json +1 -1
  113. package/dist/docs/hillclimbing.html +35 -35
  114. package/dist/docs/index.html +35 -35
  115. package/dist/docs/llms-full.txt +41 -24
  116. package/dist/docs/quickstart.html +35 -35
  117. package/dist/docs/reference/agent-config.html +35 -35
  118. package/dist/docs/reference/artifacts.html +35 -35
  119. package/dist/docs/reference/channels.html +35 -35
  120. package/dist/docs/reference/cli.html +39 -39
  121. package/dist/docs/reference/cli.md +20 -9
  122. package/dist/docs/reference/connections.html +35 -35
  123. package/dist/docs/reference/evals.html +35 -35
  124. package/dist/docs/reference/extensions.html +35 -35
  125. package/dist/docs/reference/hooks.html +35 -35
  126. package/dist/docs/reference/http-api.html +35 -35
  127. package/dist/docs/reference/instructions.html +35 -35
  128. package/dist/docs/reference/playground.html +35 -35
  129. package/dist/docs/reference/project-layout.html +35 -35
  130. package/dist/docs/reference/prompt.html +35 -35
  131. package/dist/docs/reference/schedules.html +35 -35
  132. package/dist/docs/reference/sessions.html +35 -35
  133. package/dist/docs/reference/skills.html +35 -35
  134. package/dist/docs/reference/subagents.html +35 -35
  135. package/dist/docs/reference/tools.html +35 -35
  136. package/dist/docs/templates/agentic-owners.html +37 -37
  137. package/dist/docs/templates/agentic-owners.md +2 -0
  138. package/dist/docs/templates/grokbot-agents.html +35 -35
  139. package/dist/docs/templates/security-reviewer.html +38 -37
  140. package/dist/docs/templates/security-reviewer.md +7 -8
  141. package/dist/docs/templates/thermo-quality-review.html +37 -37
  142. package/dist/docs/templates/thermo-quality-review.md +2 -2
  143. package/dist/docs/templates/thermo-review.html +37 -37
  144. package/dist/docs/templates/thermo-review.md +2 -2
  145. package/dist/docs/templates/triage.html +38 -38
  146. package/dist/docs/templates/triage.md +6 -1
  147. package/dist/docs/troubleshooting.html +35 -35
  148. package/dist/evals.d.ts +2 -2
  149. package/dist/extensions/cursor-cloud-agents/extension.d.ts +14 -0
  150. package/dist/extensions/cursor-cloud-agents/extension.d.ts.map +1 -1
  151. package/dist/extensions/cursor-cloud-agents/extension.js +5 -0
  152. package/dist/extensions/cursor-cloud-agents/lib/watch.d.ts +17 -0
  153. package/dist/extensions/cursor-cloud-agents/lib/watch.d.ts.map +1 -0
  154. package/dist/extensions/cursor-cloud-agents/lib/watch.js +99 -0
  155. package/dist/extensions/cursor-cloud-agents/reminders/cloud-agent-stop-watch.d.ts +19 -0
  156. package/dist/extensions/cursor-cloud-agents/reminders/cloud-agent-stop-watch.d.ts.map +1 -0
  157. package/dist/extensions/cursor-cloud-agents/reminders/cloud-agent-stop-watch.js +71 -0
  158. package/dist/extensions/cursor-cloud-agents/skills/handoff.md +9 -5
  159. package/dist/extensions/cursor-cloud-agents/tools/cancel.d.ts.map +1 -1
  160. package/dist/extensions/cursor-cloud-agents/tools/cancel.js +3 -1
  161. package/dist/extensions/cursor-cloud-agents/tools/launch.d.ts.map +1 -1
  162. package/dist/extensions/cursor-cloud-agents/tools/launch.js +3 -2
  163. package/dist/extensions.d.ts +1 -1
  164. package/dist/extensions.js +1 -1
  165. package/dist/files-backends/cursor-hosted.d.ts +22 -83
  166. package/dist/files-backends/cursor-hosted.d.ts.map +1 -1
  167. package/dist/files-backends/cursor-hosted.js +46 -160
  168. package/dist/files.d.ts +9 -32
  169. package/dist/files.d.ts.map +1 -1
  170. package/dist/files.js +7 -32
  171. package/dist/internal/artifacts-store.d.ts +13 -25
  172. package/dist/internal/artifacts-store.d.ts.map +1 -1
  173. package/dist/internal/artifacts-store.js +25 -46
  174. package/dist/internal/cli-ax.d.ts +10 -17
  175. package/dist/internal/cli-ax.d.ts.map +1 -1
  176. package/dist/internal/cli-ax.js +92 -153
  177. package/dist/internal/cli-bitbucket.js +5 -5
  178. package/dist/internal/cli-deploy.d.ts +4 -1
  179. package/dist/internal/cli-deploy.d.ts.map +1 -1
  180. package/dist/internal/cli-deploy.js +117 -20
  181. package/dist/internal/cli-github.js +13 -13
  182. package/dist/internal/cli-gitlab.js +5 -5
  183. package/dist/internal/continuation-identity.d.ts +2 -0
  184. package/dist/internal/continuation-identity.d.ts.map +1 -1
  185. package/dist/internal/continuation-identity.js +4 -0
  186. package/dist/internal/conversation-mirror.d.ts +9 -38
  187. package/dist/internal/conversation-mirror.d.ts.map +1 -1
  188. package/dist/internal/conversation-mirror.js +62 -68
  189. package/dist/internal/cursor/account-mcp.d.ts +1 -1
  190. package/dist/internal/cursor/account-mcp.js +1 -1
  191. package/dist/internal/cursor/backend-client.js +1 -1
  192. package/dist/internal/cursor/github-credentials.js +3 -3
  193. package/dist/internal/cursor/hosted-bound-secrets.d.ts +6 -2
  194. package/dist/internal/cursor/hosted-bound-secrets.d.ts.map +1 -1
  195. package/dist/internal/cursor/hosted-bound-secrets.js +13 -2
  196. package/dist/internal/cursor/hosted-store-secrets.d.ts +13 -37
  197. package/dist/internal/cursor/hosted-store-secrets.d.ts.map +1 -1
  198. package/dist/internal/cursor/hosted-store-secrets.js +13 -37
  199. package/dist/internal/cursor/store-api-client.d.ts +17 -39
  200. package/dist/internal/cursor/store-api-client.d.ts.map +1 -1
  201. package/dist/internal/cursor/store-api-client.js +15 -37
  202. package/dist/internal/cursor-deployment-relay.js +3 -3
  203. package/dist/internal/cursor-event-relay.js +1 -1
  204. package/dist/internal/cursor-relay-core.d.ts +1 -1
  205. package/dist/internal/cursor-relay-core.d.ts.map +1 -1
  206. package/dist/internal/deploy-client.d.ts +55 -63
  207. package/dist/internal/deploy-client.d.ts.map +1 -1
  208. package/dist/internal/deploy-client.js +48 -28
  209. package/dist/internal/discovery/agent.d.ts +1 -1
  210. package/dist/internal/discovery/agent.d.ts.map +1 -1
  211. package/dist/internal/discovery/agent.js +4 -0
  212. package/dist/internal/discovery/extensions.d.ts +2 -1
  213. package/dist/internal/discovery/extensions.d.ts.map +1 -1
  214. package/dist/internal/discovery/extensions.js +11 -1
  215. package/dist/internal/discovery/project.d.ts.map +1 -1
  216. package/dist/internal/discovery/project.js +1 -0
  217. package/dist/internal/distribution.d.ts +2 -2
  218. package/dist/internal/distribution.d.ts.map +1 -1
  219. package/dist/internal/distribution.js +2 -2
  220. package/dist/internal/docs-site.js +3 -3
  221. package/dist/internal/eval-run-store.js +8 -8
  222. package/dist/internal/eval-runner.js +7 -4
  223. package/dist/internal/framework-file-storage.d.ts +10 -34
  224. package/dist/internal/framework-file-storage.d.ts.map +1 -1
  225. package/dist/internal/framework-file-storage.js +12 -39
  226. package/dist/internal/framework-storage-selection.d.ts +10 -46
  227. package/dist/internal/framework-storage-selection.d.ts.map +1 -1
  228. package/dist/internal/framework-storage-selection.js +15 -64
  229. package/dist/internal/github-fanout.js +2 -2
  230. package/dist/internal/handleAgentServeTrigger.d.ts +5 -8
  231. package/dist/internal/handleAgentServeTrigger.d.ts.map +1 -1
  232. package/dist/internal/handleAgentServeTrigger.js +5 -8
  233. package/dist/internal/host-files.js +6 -9
  234. package/dist/internal/host-platforms.js +5 -5
  235. package/dist/internal/hosted-catch.d.ts +3 -2
  236. package/dist/internal/hosted-catch.d.ts.map +1 -1
  237. package/dist/internal/hosted-catch.js +27 -9
  238. package/dist/internal/hosted-delivery-protocol.d.ts +31 -8
  239. package/dist/internal/hosted-delivery-protocol.d.ts.map +1 -1
  240. package/dist/internal/hosted-delivery-protocol.js +102 -1
  241. package/dist/internal/hosted-delivery.d.ts.map +1 -1
  242. package/dist/internal/hosted-delivery.js +32 -12
  243. package/dist/internal/hosted-execution-diag.d.ts +13 -24
  244. package/dist/internal/hosted-execution-diag.d.ts.map +1 -1
  245. package/dist/internal/hosted-execution-diag.js +11 -20
  246. package/dist/internal/hosted-execution-flush.d.ts +22 -10
  247. package/dist/internal/hosted-execution-flush.d.ts.map +1 -1
  248. package/dist/internal/hosted-execution-flush.js +45 -9
  249. package/dist/internal/hosted-managed-automation.js +5 -5
  250. package/dist/internal/hosting.d.ts +5 -10
  251. package/dist/internal/hosting.d.ts.map +1 -1
  252. package/dist/internal/hosting.js +5 -10
  253. package/dist/internal/init-interview.d.ts +0 -1
  254. package/dist/internal/init-interview.d.ts.map +1 -1
  255. package/dist/internal/init-interview.js +15 -24
  256. package/dist/internal/listen-port.js +1 -1
  257. package/dist/internal/local-control-plane.js +6 -6
  258. package/dist/internal/logs-client.d.ts +20 -1
  259. package/dist/internal/logs-client.d.ts.map +1 -1
  260. package/dist/internal/logs-client.js +89 -1
  261. package/dist/internal/mcp-endpoint.js +1 -1
  262. package/dist/internal/otel/collector.js +1 -1
  263. package/dist/internal/otel/runtime.js +13 -13
  264. package/dist/internal/platform-schedule-sync.js +2 -2
  265. package/dist/internal/platform-timers.d.ts +8 -1
  266. package/dist/internal/platform-timers.d.ts.map +1 -1
  267. package/dist/internal/platform-timers.js +10 -2
  268. package/dist/internal/playground/toolchain.js +6 -6
  269. package/dist/internal/process-memory-telemetry.js +2 -2
  270. package/dist/internal/reminder-control-plane-protocol.d.ts +8 -1
  271. package/dist/internal/reminder-control-plane-protocol.d.ts.map +1 -1
  272. package/dist/internal/reminder-runner.d.ts +13 -3
  273. package/dist/internal/reminder-runner.d.ts.map +1 -1
  274. package/dist/internal/reminder-runner.js +78 -53
  275. package/dist/internal/resolve-prod-target.d.ts +1 -9
  276. package/dist/internal/resolve-prod-target.d.ts.map +1 -1
  277. package/dist/internal/resolve-prod-target.js +1 -30
  278. package/dist/internal/resolved-connections.js +8 -8
  279. package/dist/internal/run-client.d.ts +11 -1
  280. package/dist/internal/run-client.d.ts.map +1 -1
  281. package/dist/internal/run-client.js +197 -59
  282. package/dist/internal/runtime-dispatch-runner.d.ts +1 -0
  283. package/dist/internal/runtime-dispatch-runner.d.ts.map +1 -1
  284. package/dist/internal/runtime-dispatch-runner.js +7 -1
  285. package/dist/internal/schedule-runner.js +1 -1
  286. package/dist/internal/sdk-runner.d.ts +4 -0
  287. package/dist/internal/sdk-runner.d.ts.map +1 -1
  288. package/dist/internal/sdk-runner.js +37 -22
  289. package/dist/internal/server.d.ts +8 -0
  290. package/dist/internal/server.d.ts.map +1 -1
  291. package/dist/internal/server.js +58 -45
  292. package/dist/internal/session-engine.d.ts +31 -44
  293. package/dist/internal/session-engine.d.ts.map +1 -1
  294. package/dist/internal/session-engine.js +67 -83
  295. package/dist/internal/session-links.d.ts.map +1 -1
  296. package/dist/internal/session-links.js +8 -7
  297. package/dist/internal/session-run-log.d.ts +10 -24
  298. package/dist/internal/session-run-log.d.ts.map +1 -1
  299. package/dist/internal/session-run-log.js +13 -27
  300. package/dist/internal/sessions-client.d.ts +1 -0
  301. package/dist/internal/sessions-client.d.ts.map +1 -1
  302. package/dist/internal/sessions-client.js +8 -3
  303. package/dist/internal/skills-sync.d.ts +3 -5
  304. package/dist/internal/skills-sync.d.ts.map +1 -1
  305. package/dist/internal/skills-sync.js +3 -5
  306. package/dist/internal/start-log-store.d.ts +7 -18
  307. package/dist/internal/start-log-store.d.ts.map +1 -1
  308. package/dist/internal/start-log-store.js +47 -24
  309. package/dist/internal/storage-coordinator.d.ts +7 -10
  310. package/dist/internal/storage-coordinator.d.ts.map +1 -1
  311. package/dist/internal/storage-coordinator.js +18 -20
  312. package/dist/internal/storage-roles.d.ts +5 -0
  313. package/dist/internal/storage-roles.d.ts.map +1 -1
  314. package/dist/internal/store-api-protocol.d.ts +12 -33
  315. package/dist/internal/store-api-protocol.d.ts.map +1 -1
  316. package/dist/internal/store-api-protocol.js +6 -22
  317. package/dist/internal/store-mirror.d.ts +4 -5
  318. package/dist/internal/store-mirror.d.ts.map +1 -1
  319. package/dist/internal/store-mirror.js +6 -8
  320. package/dist/internal/turn-lease-store.d.ts +12 -5
  321. package/dist/internal/turn-lease-store.d.ts.map +1 -1
  322. package/dist/internal/turn-lease-store.js +61 -8
  323. package/dist/internal/v2-hosting.d.ts +4 -7
  324. package/dist/internal/v2-hosting.d.ts.map +1 -1
  325. package/dist/internal/v2-hosting.js +4 -7
  326. package/dist/internal/workspace-sync.d.ts +3 -6
  327. package/dist/internal/workspace-sync.d.ts.map +1 -1
  328. package/dist/internal/workspace-sync.js +3 -6
  329. package/dist/internal/workspace.d.ts +10 -16
  330. package/dist/internal/workspace.d.ts.map +1 -1
  331. package/dist/internal/workspace.js +9 -14
  332. package/dist/memory.d.ts +17 -43
  333. package/dist/memory.d.ts.map +1 -1
  334. package/dist/memory.js +34 -80
  335. package/dist/playground/assets/index-DPKLl4C_.css +1 -0
  336. package/dist/playground/assets/index-MijLHTbB.js +71 -0
  337. package/dist/playground/index.html +2 -2
  338. package/dist/storage-backends/cursor-hosted-v2.d.ts +8 -36
  339. package/dist/storage-backends/cursor-hosted-v2.d.ts.map +1 -1
  340. package/dist/storage-backends/cursor-hosted-v2.js +9 -37
  341. package/dist/storage-backends/cursor-hosted.d.ts +17 -30
  342. package/dist/storage-backends/cursor-hosted.d.ts.map +1 -1
  343. package/dist/storage-backends/cursor-hosted.js +14 -27
  344. package/dist/storage-protocol.d.ts +13 -38
  345. package/dist/storage-protocol.d.ts.map +1 -1
  346. package/dist/storage-protocol.js +14 -39
  347. package/dist/types.d.ts +29 -30
  348. package/dist/types.d.ts.map +1 -1
  349. package/docs/evals.md +2 -2
  350. package/docs/reference/cli.md +20 -9
  351. package/docs/templates/agentic-owners.md +2 -0
  352. package/docs/templates/security-reviewer.md +7 -8
  353. package/docs/templates/thermo-quality-review.md +2 -2
  354. package/docs/templates/thermo-review.md +2 -2
  355. package/docs/templates/triage.md +6 -1
  356. package/package.json +1 -1
  357. package/templates/agents-md/evals/agents.eval.ts +1 -0
  358. package/templates/code-wiki/bot/instructions.md +4 -4
  359. package/templates/pr-autofixer/bot/instructions.md +3 -3
  360. package/templates/security-reviewer/README.md +5 -3
  361. package/templates/security-reviewer/bot/tools/post_findings.ts +8 -8
  362. package/templates/thermo-quality-review/bot/tools/post_findings.ts +8 -8
  363. package/templates/thermo-review/bot/tools/post_findings.ts +8 -8
  364. package/dist/docs/assets/chunks/@localSearchIndexroot.BITLoOQa.js +0 -1
  365. package/dist/docs/assets/chunks/channel.B46uXH41.js +0 -1
  366. package/dist/docs/assets/chunks/classDiagram-6PBFFD2Q.0cmCFsSf.js +0 -1
  367. package/dist/docs/assets/chunks/classDiagram-v2-HSJHXN6E.0cmCFsSf.js +0 -1
  368. package/dist/docs/assets/chunks/clone.1vTOFZT1.js +0 -1
  369. package/dist/docs/assets/chunks/stateDiagram-v2-QKLJ7IA2.CbsZcOOu.js +0 -1
  370. package/dist/docs/assets/chunks/wardley-RL74JXVD.DEA21akR.js +0 -162
  371. package/dist/docs/assets/reference_cli.md.BsgDqYPh.lean.js +0 -1
  372. package/dist/playground/assets/index-6BbTPnaT.css +0 -1
  373. package/dist/playground/assets/index-CI7FAmOP.js +0 -71
  374. /package/dist/docs/assets/{evals.md.LRCSn6Ik.lean.js → evals.md.C851kViu.lean.js} +0 -0
  375. /package/dist/docs/assets/{templates_thermo-quality-review.md.95qmTmr1.lean.js → templates_thermo-quality-review.md.B77UyTrX.lean.js} +0 -0
  376. /package/dist/docs/assets/{templates_thermo-review.md.DQh6Q0C-.lean.js → templates_thermo-review.md.DRJ7mC5U.lean.js} +0 -0
@@ -14,17 +14,32 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
14
14
  step((generator = generator.apply(thisArg, _arguments || [])).next());
15
15
  });
16
16
  };
17
+ import { setTimeout as sleep } from "node:timers/promises";
17
18
  import { mergeRequestHeaders } from "./request-headers.js";
18
- import { buildTrajectory } from "./trajectory.js";
19
+ import { fetchSessionEvents } from "./sessions-client.js";
20
+ import { buildTrajectory, parseEventsNdjson } from "./trajectory.js";
19
21
  /** Thrown when a turn stream exceeds `timeoutMs`; carries the session id. */
20
22
  export class RunSessionTimeoutError extends Error {
21
- constructor(message, sessionId) {
23
+ constructor(message, sessionId,
24
+ /** Events the turn recorded before the deadline. */
25
+ events) {
22
26
  super(message);
23
27
  this.sessionId = sessionId;
28
+ this.events = events;
24
29
  this.name = "RunSessionTimeoutError";
25
30
  }
26
31
  }
27
32
  const TERMINAL_TYPES = new Set(["session.waiting", "session.completed", "session.failed"]);
33
+ const STALL_MS = 5000;
34
+ /** Pause before reopening a stream the server closed; doubles while closes bring nothing. */
35
+ const REOPEN_DELAY_MS = 500;
36
+ const MAX_REOPEN_DELAY_MS = 8000;
37
+ /** Refused reopens in a row, with no progress, before the turn fails. */
38
+ const MAX_REFUSALS = 5;
39
+ /** Reopen statuses worth retrying; any other failed open fails the turn. */
40
+ const TRANSIENT_STATUSES = new Set([429, 502, 503, 504]);
41
+ /** A log read's budget grows to at most this many `stallMs`; the deadline's last read gets all of it. */
42
+ const MAX_READ_STALLS = 4;
28
43
  /**
29
44
  * Run one or more messages against a live agent-serve base URL
30
45
  * (e.g. `http://127.0.0.1:3000/weather-agent`).
@@ -53,6 +68,7 @@ export function runSession(options) {
53
68
  startIndex: sessionId === undefined ? 0 : nextEventIndex,
54
69
  auth,
55
70
  timeoutMs: options.timeoutMs,
71
+ stallMs: options.stallMs,
56
72
  signal: options.signal,
57
73
  onEvent: options.onEvent,
58
74
  purpose: sessionId === undefined ? options.purpose : undefined,
@@ -80,7 +96,7 @@ export function runSession(options) {
80
96
  }
81
97
  function runOneTurn(args) {
82
98
  return __awaiter(this, void 0, void 0, function* () {
83
- var _a, _b, _c, _d, _e;
99
+ var _a, _b, _c, _d, _e, _f;
84
100
  let sessionId = args.sessionId;
85
101
  let continuationToken = args.continuationToken;
86
102
  if (sessionId === undefined) {
@@ -120,6 +136,7 @@ function runOneTurn(args) {
120
136
  startIndex: args.startIndex,
121
137
  auth: args.auth,
122
138
  timeoutMs: args.timeoutMs,
139
+ stallMs: (_f = args.stallMs) !== null && _f !== void 0 ? _f : STALL_MS,
123
140
  signal: args.signal,
124
141
  onEvent: args.onEvent,
125
142
  });
@@ -128,84 +145,205 @@ function runOneTurn(args) {
128
145
  return Object.assign(Object.assign({ sessionId }, (continuationToken === undefined ? {} : { continuationToken })), { events, ok: !turnFailed && !sessionFailed });
129
146
  });
130
147
  }
148
+ /** One turn's events in log order. Replays of events already seen are dropped. */
149
+ class TurnEvents {
150
+ constructor(start, onEvent) {
151
+ this.start = start;
152
+ this.onEvent = onEvent;
153
+ this.events = [];
154
+ this.asks = new Set();
155
+ }
156
+ /** First event index this turn has not recorded. */
157
+ get next() {
158
+ const last = this.events.at(-1);
159
+ return last === undefined ? this.start : last.index + 1;
160
+ }
161
+ /** The turn's terminal event is recorded. */
162
+ get done() {
163
+ const last = this.events.at(-1);
164
+ return last !== undefined && TERMINAL_TYPES.has(last.type);
165
+ }
166
+ /**
167
+ * Waiting on an unanswered approval or auth request. The engine holds the
168
+ * turn open without a terminal event until someone answers.
169
+ */
170
+ get parked() {
171
+ return this.asks.size > 0;
172
+ }
173
+ add(event) {
174
+ var _a;
175
+ if (this.done || event.index < this.next) {
176
+ return;
177
+ }
178
+ this.events.push(event);
179
+ if (event.type === "action.approval_requested" || event.type === "action.auth_requested") {
180
+ this.asks.add(event.data.callId);
181
+ }
182
+ else if (event.type === "action.approval_resolved" || event.type === "action.auth_resolved") {
183
+ this.asks.delete(event.data.callId);
184
+ }
185
+ (_a = this.onEvent) === null || _a === void 0 ? void 0 : _a.call(this, event);
186
+ }
187
+ }
188
+ /**
189
+ * Collect one turn's events from `startIndex` through its terminal event.
190
+ *
191
+ * The live stream is the fast path, not the source of truth. Whenever a
192
+ * connection ends without the terminal event (the server closes it, it breaks
193
+ * mid-body, goes quiet, or a reopen is refused), the session's durable log
194
+ * decides. A finished turn returns, as does a parked one once its stream has
195
+ * gone quiet; anything else reopens the stream after the last event recorded.
196
+ * At the deadline the log is read once more with the full read budget, and a
197
+ * finished or parked turn returns instead of timing out.
198
+ */
131
199
  function collectStream(args) {
132
200
  return __awaiter(this, void 0, void 0, function* () {
133
- var _a, _b, _c;
134
- var _d, _e;
135
- const controller = new AbortController();
136
- const onExternalAbort = () => {
137
- controller.abort();
138
- };
139
- if (args.signal !== undefined) {
140
- if (args.signal.aborted) {
141
- controller.abort();
201
+ var _a, _b;
202
+ var _c;
203
+ const turn = new TurnEvents(args.startIndex, args.onEvent);
204
+ const readLog = logReader(args, turn);
205
+ const deadline = new AbortController();
206
+ const timer = args.timeoutMs === undefined ? undefined : setTimeout(() => deadline.abort(), args.timeoutMs);
207
+ const signal = args.signal === undefined ? deadline.signal : AbortSignal.any([args.signal, deadline.signal]);
208
+ try {
209
+ let retry = false;
210
+ let closes = 0;
211
+ let refusals = 0;
212
+ for (;;) {
213
+ const seen = turn.next;
214
+ const end = yield followStream(args, turn, signal, retry);
215
+ retry = true;
216
+ if (end === "done" || (yield readLog(signal)) || (end === "quiet" && turn.parked)) {
217
+ return turn.events;
218
+ }
219
+ const refused = typeof end === "object" ? end.refused : undefined;
220
+ refusals = refused !== undefined && turn.next === seen ? refusals + 1 : 0;
221
+ if (refusals === MAX_REFUSALS) {
222
+ throw new Error(`stream refused ${MAX_REFUSALS} reopens in a row, last: ${refused} (session ${args.sessionId})`);
223
+ }
224
+ if (end !== "quiet") {
225
+ closes = turn.next > seen ? 0 : closes + 1;
226
+ yield sleep(Math.min(REOPEN_DELAY_MS * Math.pow(2, closes), MAX_REOPEN_DELAY_MS), undefined, {
227
+ signal,
228
+ });
229
+ }
230
+ }
231
+ }
232
+ catch (error) {
233
+ if (!signal.aborted) {
234
+ throw error;
142
235
  }
143
- else {
144
- args.signal.addEventListener("abort", onExternalAbort, { once: true });
236
+ if (!((_a = args.signal) === null || _a === void 0 ? void 0 : _a.aborted) &&
237
+ ((yield readLog(args.signal, MAX_READ_STALLS * args.stallMs)) || turn.parked)) {
238
+ return turn.events;
145
239
  }
240
+ if ((_b = args.signal) === null || _b === void 0 ? void 0 : _b.aborted) {
241
+ throw new Error("cancelled");
242
+ }
243
+ throw new RunSessionTimeoutError(`turn timed out after ${(_c = args.timeoutMs) !== null && _c !== void 0 ? _c : "?"}ms (session ${args.sessionId})`, args.sessionId, turn.events);
244
+ }
245
+ finally {
246
+ clearTimeout(timer);
146
247
  }
147
- const timer = args.timeoutMs === undefined ? undefined : setTimeout(() => controller.abort(), args.timeoutMs);
248
+ });
249
+ }
250
+ /**
251
+ * Follow one stream connection until the turn's terminal event (`done`), the
252
+ * connection closes or breaks mid-body (`closed`), or it stays silent for
253
+ * `stallMs` (`quiet`). A stream that cannot be opened throws, except that a
254
+ * `retry` is `refused` on a network error, 429, 502, 503 or 504. Anything
255
+ * that goes wrong recording events throws.
256
+ */
257
+ function followStream(args, turn, signal, retry) {
258
+ return __awaiter(this, void 0, void 0, function* () {
259
+ const quiet = new AbortController();
260
+ const idle = setTimeout(() => quiet.abort(), args.stallMs);
148
261
  try {
149
- const resp = yield fetch(`${args.baseUrl}/v1/session/${args.sessionId}/stream?startIndex=${args.startIndex}`, {
150
- headers: mergeRequestHeaders(args.auth),
151
- signal: controller.signal,
152
- });
262
+ let resp;
263
+ try {
264
+ resp = yield fetch(`${args.baseUrl}/v1/session/${args.sessionId}/stream?startIndex=${turn.next}`, {
265
+ headers: mergeRequestHeaders(args.auth),
266
+ signal: AbortSignal.any([signal, quiet.signal]),
267
+ });
268
+ }
269
+ catch (error) {
270
+ if (signal.aborted) {
271
+ throw error;
272
+ }
273
+ if (quiet.signal.aborted) {
274
+ return "quiet";
275
+ }
276
+ if (retry) {
277
+ return { refused: error instanceof Error ? error.message : String(error) };
278
+ }
279
+ throw error;
280
+ }
281
+ if (retry && TRANSIENT_STATUSES.has(resp.status)) {
282
+ return { refused: String(resp.status) };
283
+ }
153
284
  if (!resp.ok || resp.body === null) {
154
285
  throw new Error(`stream failed (${resp.status})`);
155
286
  }
156
287
  const reader = resp.body.getReader();
157
288
  const decoder = new TextDecoder();
158
289
  let buffer = "";
159
- const events = [];
160
290
  for (;;) {
161
- const chunk = yield reader.read();
162
- if (chunk.done) {
163
- break;
291
+ let chunk;
292
+ try {
293
+ chunk = yield reader.read();
164
294
  }
165
- buffer += decoder.decode(chunk.value, { stream: true });
166
- const lines = buffer.split("\n");
167
- buffer = (_d = lines.pop()) !== null && _d !== void 0 ? _d : "";
168
- let stop = false;
169
- for (const line of lines) {
170
- if (line.trim() === "") {
171
- continue;
172
- }
173
- let event;
174
- try {
175
- event = JSON.parse(line);
176
- }
177
- catch (_f) {
178
- continue;
179
- }
180
- events.push(event);
181
- (_a = args.onEvent) === null || _a === void 0 ? void 0 : _a.call(args, event);
182
- if (TERMINAL_TYPES.has(event.type)) {
183
- stop = true;
184
- break;
295
+ catch (error) {
296
+ if (signal.aborted) {
297
+ throw error;
185
298
  }
299
+ return quiet.signal.aborted ? "quiet" : "closed";
186
300
  }
187
- if (stop) {
188
- break;
301
+ if (chunk.done) {
302
+ return "closed";
189
303
  }
190
- }
191
- yield reader.cancel().catch(() => { });
192
- return events;
193
- }
194
- catch (error) {
195
- if (error instanceof Error && error.name === "AbortError") {
196
- if ((_b = args.signal) === null || _b === void 0 ? void 0 : _b.aborted) {
197
- throw new Error("cancelled");
304
+ idle.refresh();
305
+ buffer += decoder.decode(chunk.value, { stream: true });
306
+ const cut = buffer.lastIndexOf("\n") + 1;
307
+ for (const event of parseEventsNdjson(buffer.slice(0, cut))) {
308
+ turn.add(event);
309
+ }
310
+ buffer = buffer.slice(cut);
311
+ if (turn.done) {
312
+ return "done";
198
313
  }
199
- throw new RunSessionTimeoutError(`turn timed out after ${(_e = args.timeoutMs) !== null && _e !== void 0 ? _e : "?"}ms (session ${args.sessionId})`, args.sessionId);
200
314
  }
201
- throw error;
202
315
  }
203
316
  finally {
204
- (_c = args.signal) === null || _c === void 0 ? void 0 : _c.removeEventListener("abort", onExternalAbort);
205
- if (timer !== undefined) {
206
- clearTimeout(timer);
207
- }
317
+ clearTimeout(idle);
318
+ quiet.abort();
319
+ }
320
+ });
321
+ }
322
+ /**
323
+ * Reads the turn's events from the session's durable log; each read resolves
324
+ * true once the log holds the terminal event. A read gets `ms`, by default a
325
+ * budget that starts at `stallMs` and doubles each time a read times out, up
326
+ * to MAX_READ_STALLS. It never shrinks within the turn, so a slow log answers
327
+ * every read once the budget has grown, and a hung one holds each quiet cycle
328
+ * for at most MAX_READ_STALLS x `stallMs`.
329
+ */
330
+ function logReader(args, turn) {
331
+ let budgetMs = args.stallMs;
332
+ return (signal_1, ...args_1) => __awaiter(this, [signal_1, ...args_1], void 0, function* (signal, ms = budgetMs) {
333
+ const budget = AbortSignal.timeout(ms);
334
+ const events = yield fetchSessionEvents({
335
+ baseUrl: args.baseUrl,
336
+ sessionId: args.sessionId,
337
+ auth: args.auth,
338
+ signal: signal === undefined ? budget : AbortSignal.any([signal, budget]),
339
+ }).catch(() => []);
340
+ if (budget.aborted) {
341
+ budgetMs = Math.min(budgetMs * 2, MAX_READ_STALLS * args.stallMs);
342
+ }
343
+ for (const event of events) {
344
+ turn.add(event);
208
345
  }
346
+ return turn.done;
209
347
  });
210
348
  }
211
349
  function postJson(baseUrl, path, body, auth) {
@@ -19,6 +19,7 @@ export declare class RuntimeDispatchingRunner implements AgentRunner {
19
19
  text: string;
20
20
  }): Promise<SteerAckOutcome>;
21
21
  prewarm(request: RunnerPrewarmRequest): Promise<PrewarmOutcome>;
22
+ drainConversation(sessionId: string): Promise<void>;
22
23
  dispose(): Promise<void>;
23
24
  }
24
25
  //# sourceMappingURL=runtime-dispatch-runner.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"runtime-dispatch-runner.d.ts","sourceRoot":"","sources":["../../src/internal/runtime-dispatch-runner.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAClE,OAAO,KAAK,EACV,WAAW,EACX,cAAc,EACd,oBAAoB,EACpB,eAAe,EAChB,MAAM,iBAAiB,CAAC;AAEzB,MAAM,WAAW,+BAA+B;IAC9C,SAAS,EAAE,WAAW,CAAC;IACvB,OAAO,EAAE,WAAW,CAAC;CACtB;AAED,qBAAa,wBAAyB,YAAW,WAAW;IAC9C,OAAO,CAAC,QAAQ,CAAC,OAAO;IAApC,YAA6B,OAAO,EAAE,+BAA+B,EAAI;IAEnE,OAAO,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,WAAW,CAAC,CAK9D;IAEK,KAAK,CAAC,OAAO,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,eAAe,CAAC,CAElF;IAEK,OAAO,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,cAAc,CAAC,CASpE;IAEK,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAG7B;CACF"}
1
+ {"version":3,"file":"runtime-dispatch-runner.d.ts","sourceRoot":"","sources":["../../src/internal/runtime-dispatch-runner.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAClE,OAAO,KAAK,EACV,WAAW,EACX,cAAc,EACd,oBAAoB,EACpB,eAAe,EAChB,MAAM,iBAAiB,CAAC;AAEzB,MAAM,WAAW,+BAA+B;IAC9C,SAAS,EAAE,WAAW,CAAC;IACvB,OAAO,EAAE,WAAW,CAAC;CACtB;AAED,qBAAa,wBAAyB,YAAW,WAAW;IAC9C,OAAO,CAAC,QAAQ,CAAC,OAAO;IAApC,YAA6B,OAAO,EAAE,+BAA+B,EAAI;IAEnE,OAAO,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,WAAW,CAAC,CAK9D;IAEK,KAAK,CAAC,OAAO,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,eAAe,CAAC,CAElF;IAEK,OAAO,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,cAAc,CAAC,CASpE;IAEK,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAExD;IAEK,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAG7B;CACF"}
@@ -40,10 +40,16 @@ export class RuntimeDispatchingRunner {
40
40
  // local-runtime agents.
41
41
  return ((_c = (_b = (_a = this.options.sdkRunner).prewarm) === null || _b === void 0 ? void 0 : _b.call(_a, request)) !== null && _c !== void 0 ? _c : {
42
42
  warmed: false,
43
- reason: "the Cursor SDK runner does not support prewarming",
43
+ reason: "the local and cloud turn runner does not support prewarming",
44
44
  });
45
45
  });
46
46
  }
47
+ drainConversation(sessionId) {
48
+ return __awaiter(this, void 0, void 0, function* () {
49
+ var _a, _b;
50
+ yield (_b = (_a = this.options.sdkRunner).drainConversation) === null || _b === void 0 ? void 0 : _b.call(_a, sessionId);
51
+ });
52
+ }
47
53
  dispose() {
48
54
  return __awaiter(this, void 0, void 0, function* () {
49
55
  var _a, _b, _c, _d;
@@ -68,7 +68,7 @@ export class ScheduleRunner {
68
68
  for (const schedule of this.schedules) {
69
69
  if (schedule.cron.matches(now)) {
70
70
  void this.dispatch(schedule.name).catch(error => {
71
- this.logger(`[agent-sdk] schedule "${schedule.name}" dispatch failed: ${error instanceof Error ? error.message : String(error)}`);
71
+ this.logger(`[bdk] schedule "${schedule.name}" dispatch failed: ${error instanceof Error ? error.message : String(error)}`);
72
72
  });
73
73
  }
74
74
  }
@@ -24,6 +24,7 @@ export interface AgentRunner {
24
24
  * success over a workspace that was never touched.
25
25
  */
26
26
  prewarm?(request: RunnerPrewarmRequest): Promise<PrewarmOutcome>;
27
+ drainConversation?(sessionId: string): Promise<void>;
27
28
  dispose?(): Promise<void>;
28
29
  }
29
30
  /**
@@ -113,6 +114,7 @@ export declare class CursorSdkRunner implements AgentRunner {
113
114
  private readonly activeRuns;
114
115
  private readonly stores;
115
116
  private readonly prewarmReleases;
117
+ private readonly pendingPersists;
116
118
  constructor(options?: CursorSdkRunnerOptions);
117
119
  runTurn(request: RunnerTurnRequest): Promise<TurnOutcome>;
118
120
  /**
@@ -146,6 +148,8 @@ export declare class CursorSdkRunner implements AgentRunner {
146
148
  * delivery.
147
149
  */
148
150
  evictSession(sessionId: string): void;
151
+ drainConversation(sessionId: string): Promise<void>;
152
+ private trackPersist;
149
153
  dispose(): Promise<void>;
150
154
  private getAgent;
151
155
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"sdk-runner.d.ts","sourceRoot":"","sources":["../../src/internal/sdk-runner.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAOL,KAAK,eAAe,EACpB,KAAK,cAAc,EAEnB,KAAK,SAAS,EAEf,MAAM,aAAa,CAAC;AAErB,OAAO,EAEL,KAAK,YAAY,EAEjB,KAAK,iBAAiB,EACtB,KAAK,WAAW,EAEjB,MAAM,aAAa,CAAC;AAErB,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAMnE,gFAAgF;AAChF,MAAM,MAAM,eAAe,GAAG,oBAAoB,GAAG,oBAAoB,CAAC;AAE1E,2EAA2E;AAC3E,MAAM,WAAW,WAAW;IAC1B,OAAO,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IAC1D,KAAK,CAAC,CAAC,OAAO,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;IAC/E;;;;;OAKG;IACH,OAAO,CAAC,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;IACjE,OAAO,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3B;AAED;;;;GAIG;AACH,MAAM,MAAM,oBAAoB,GAAG,IAAI,CACrC,iBAAiB,EACf,cAAc,GACd,gBAAgB,GAChB,SAAS,GACT,OAAO,GACP,iBAAiB,GACjB,YAAY,GACZ,mBAAmB,GACnB,WAAW,GACX,OAAO,CACV,CAAC;AAEF,6EAA6E;AAC7E,MAAM,MAAM,cAAc,GACtB;IAAE,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAA;CAAE,GACzB;IAAE,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAExD;;;;;;GAMG;AACH,eAAO,MAAM,iCAAiC,EAAE,MAA4B,CAAC;AAE7E;;;GAGG;AACH,wBAAgB,mCAAmC,CAAC,IAAI,EAAE;IACxD,GAAG,EAAE,OAAO,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;CACzB,GAAG,MAAM,GAAG,SAAS,CAYrB;AAED,MAAM,WAAW,sBAAsB;IACrC,6EAA6E;IAC7E,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;OAIG;IACH,KAAK,CAAC,EAAE,eAAe,CAAC;IACxB;;;;;OAKG;IACH,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;IACxC,6DAA6D;IAC7D,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC;;;OAGG;IACH,uBAAuB,CAAC,EAAE,MAAM,CAAC;CAClC;AAwBD;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAKvE;AAqBD;;;;;GAKG;AACH,wBAAgB,kCAAkC,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAEvF;AAED,wBAAgB,gCAAgC,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAGxE;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,MAAM,GAAG,SAAS,EAC3B,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,GACxB,OAAO,CAQT;AAED,wEAAwE;AACxE,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAKhF;AAED,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAEhF;AAED,uFAAuF;AACvF,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,MAAM,GAAG,SAAS,EAC3B,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,GACxB,OAAO,CAET;AAED,wBAAgB,gCAAgC,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAGxE;AAyDD,qBAAa,eAAgB,YAAW,WAAW;IAMrC,OAAO,CAAC,QAAQ,CAAC,OAAO;IALpC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAwC;IAC/D,OAAO,CAAC,QAAQ,CAAC,UAAU,CAA0B;IACrD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA+C;IACtE,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAkC;IAElE,YAA6B,OAAO,GAAE,sBAA2B,EAOhE;IAEK,OAAO,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,WAAW,CAAC,CA6C9D;IAED;;;;;OAKG;YACW,yBAAyB;IAiCvC,OAAO,CAAC,gBAAgB;YAWV,cAAc;IAuHtB,KAAK,CAAC,OAAO,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,eAAe,CAAC,CAelF;IAED;;;;OAIG;IACG,OAAO,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,cAAc,CAAC,CAKpE;IAED;;;;;;;;;;OAUG;IACH,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAMpC;IAEK,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAU7B;IAED,OAAO,CAAC,QAAQ;IA0BhB;;;;OAIG;IACH,OAAO,CAAC,UAAU;IASlB,OAAO,CAAC,GAAG;IAIX;;;;OAIG;IACH,OAAO,CAAC,aAAa;IAUrB,OAAO,CAAC,kBAAkB;IAkB1B;;;OAGG;YACW,iBAAiB;YAgCjB,SAAS;YAOT,cAAc;YAsCd,cAAc;IA4C5B,OAAO,CAAC,YAAY;IAQpB;;;OAGG;YACW,mBAAmB;IAiBjC,OAAO,CAAC,QAAQ;CAajB;AAED,4EAA4E;AAC5E,wBAAgB,0BAA0B,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAE9D;AAED;;;;;GAKG;AACH,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAMlF;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,YAAY,GAAG,cAAc,CAQpE;AA2FD,wBAAgB,eAAe,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,GAAG,MAAM,CAExE"}
1
+ {"version":3,"file":"sdk-runner.d.ts","sourceRoot":"","sources":["../../src/internal/sdk-runner.ts"],"names":[],"mappings":"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"}
@@ -19,9 +19,8 @@ import { Agent, Cursor, createAgentPlatform, } from "@cursor/sdk";
19
19
  import { SqliteLocalAgentStore } from "@cursor/sdk/sqlite";
20
20
  import { DEFAULT_MODEL, } from "../types.js";
21
21
  import { mapSdkTokenUsage, usageTokenSum } from "./cloud-turn-cost.js";
22
- import { resolveApiKeySync } from "./cursor/credentials.js";
22
+ import { resolveApiKeySync, SIGN_IN_HINT } from "./cursor/credentials.js";
23
23
  import { describeError } from "./describe-error.js";
24
- import { CLI_COMMAND_NAME as CLI } from "./distribution.js";
25
24
  import { sleep } from "./sleep.js";
26
25
  /**
27
26
  * How long a non-`--dev` serve holds workspace scans (rules, skills,
@@ -190,11 +189,12 @@ export class CursorSdkRunner {
190
189
  this.activeRuns = new Map();
191
190
  this.stores = new Map();
192
191
  this.prewarmReleases = [];
192
+ this.pendingPersists = new Map();
193
193
  if (options.workspaceScanCacheTtlMs !== undefined) {
194
194
  Cursor.configure({
195
195
  local: { workspaceScanCacheTtlMs: options.workspaceScanCacheTtlMs },
196
196
  });
197
- this.log(`[agent-sdk] workspace scan cache ttl=${options.workspaceScanCacheTtlMs}ms`);
197
+ this.log(`[bdk] workspace scan cache ttl=${options.workspaceScanCacheTtlMs}ms`);
198
198
  }
199
199
  }
200
200
  runTurn(request) {
@@ -205,7 +205,7 @@ export class CursorSdkRunner {
205
205
  // the Grok Bot runner — running it on the local harness would silently
206
206
  // swap the box (and the SendToUser contract) out from under the agent.
207
207
  if (request.runtime === "grokbot") {
208
- throw new Error(`Session ${request.sessionId} is a grokbot turn, which the Cursor SDK runner cannot execute. Serve must route grokbot turns to the Grok Bot runner.`);
208
+ throw new Error(`Session ${request.sessionId} is a grokbot turn, which the local and cloud turn runner cannot execute. Serve must route grokbot turns to the Grok Bot runner.`);
209
209
  }
210
210
  const models = modelAttemptChain(request);
211
211
  let lastError;
@@ -266,7 +266,7 @@ export class CursorSdkRunner {
266
266
  }
267
267
  // Log the original error even when the retry succeeds so the expiry
268
268
  // still shows up in Datadog.
269
- this.log(`[agent-sdk] session ${request.sessionId}: ${reason}: ${outcome.errorMessage}; retrying the turn`);
269
+ this.log(`[bdk] session ${request.sessionId}: ${reason}: ${outcome.errorMessage}; retrying the turn`);
270
270
  try {
271
271
  return yield this.runTurnAttempt(tracked);
272
272
  }
@@ -276,7 +276,7 @@ export class CursorSdkRunner {
276
276
  });
277
277
  }
278
278
  logModelFallback(sessionId, from, to, message) {
279
- this.log(`[agent-sdk] session ${sessionId}: cannot use model ${modelSettingLabel(from)}; retrying on ${modelSettingLabel(to)}: ${message !== null && message !== void 0 ? message : "model unavailable"}`);
279
+ this.log(`[bdk] session ${sessionId}: cannot use model ${modelSettingLabel(from)}; retrying on ${modelSettingLabel(to)}: ${message !== null && message !== void 0 ? message : "model unavailable"}`);
280
280
  }
281
281
  runTurnAttempt(request) {
282
282
  return __awaiter(this, void 0, void 0, function* () {
@@ -363,17 +363,18 @@ export class CursorSdkRunner {
363
363
  this.activeRuns.delete(request.sessionId);
364
364
  }
365
365
  signal === null || signal === void 0 ? void 0 : signal.removeEventListener("abort", onAbort);
366
- // Mirror the conversation before replying: on hosted v2 the pod can
367
- // be parked as soon as the execution reply lands, so a
368
- // fire-and-forget write would race VM teardown. In the `finally` so
369
- // a `wait()` that THROWS (transport death mid-turn, an abort with
370
- // no follow-up) still persists the checkpoints the turn already
371
- // wrote — the store is local SQLite, safe to read on the throw
372
- // path, and persistConversation swallows its own errors. Guarded
373
- // here (not just inside the helper) so unmirrored turns keep their
374
- // exact post-wait sequencing.
366
+ // Mirror the conversation without holding the turn outcome: on
367
+ // hosted v2 the pod can be parked as soon as the execution reply
368
+ // lands, so the engine's durability drain awaits this write through
369
+ // drainConversation before that reply, not before turn.completed.
370
+ // In the `finally` so a `wait()` that THROWS (transport death
371
+ // mid-turn, an abort with no follow-up) still persists the
372
+ // checkpoints the turn already wrote — the store is local SQLite,
373
+ // safe to read on the throw path, and persistConversation swallows
374
+ // its own errors. Guarded here (not just inside the helper) so
375
+ // unmirrored turns keep their exact post-wait sequencing.
375
376
  if (request.runtime === "local" && this.options.conversationMirror !== undefined) {
376
- yield this.persistConversation(request, agent.agentId);
377
+ this.trackPersist(request.sessionId, this.persistConversation(request, agent.agentId));
377
378
  }
378
379
  }
379
380
  }
@@ -395,7 +396,7 @@ export class CursorSdkRunner {
395
396
  return yield run.steer(request.text);
396
397
  }
397
398
  catch (error) {
398
- this.log(`[agent-sdk] session ${request.sessionId}: steer failed: ${describeError(error)}`);
399
+ this.log(`[bdk] session ${request.sessionId}: steer failed: ${describeError(error)}`);
399
400
  return "revert_to_followup";
400
401
  }
401
402
  });
@@ -431,8 +432,22 @@ export class CursorSdkRunner {
431
432
  }
432
433
  this.evictAgent(sessionId, cached.agent);
433
434
  }
435
+ drainConversation(sessionId) {
436
+ return __awaiter(this, void 0, void 0, function* () {
437
+ yield this.pendingPersists.get(sessionId);
438
+ });
439
+ }
440
+ trackPersist(sessionId, persist) {
441
+ const tracked = Promise.all([this.pendingPersists.get(sessionId), persist]).then(() => {
442
+ if (this.pendingPersists.get(sessionId) === tracked) {
443
+ this.pendingPersists.delete(sessionId);
444
+ }
445
+ });
446
+ this.pendingPersists.set(sessionId, tracked);
447
+ }
434
448
  dispose() {
435
449
  return __awaiter(this, void 0, void 0, function* () {
450
+ yield Promise.allSettled([...this.pendingPersists.values()]);
436
451
  const releases = this.prewarmReleases.splice(0);
437
452
  yield Promise.allSettled(releases.map(release => release()));
438
453
  const agents = yield Promise.allSettled([...this.agents.values()].map(handle => handle.agent));
@@ -453,7 +468,7 @@ export class CursorSdkRunner {
453
468
  }
454
469
  // Past this age the handle's exchanged access token could expire
455
470
  // mid-turn. Retire it and reopen below on a fresh transport.
456
- this.log(`[agent-sdk] session ${request.sessionId}: recycling the SDK agent handle after ${Math.round(ageMs / 60000)} min so the turn runs on a fresh access token`);
471
+ this.log(`[bdk] session ${request.sessionId}: recycling the SDK agent handle after ${Math.round(ageMs / 60000)} min so the turn runs on a fresh access token`);
457
472
  this.evictAgent(request.sessionId, cached.agent);
458
473
  }
459
474
  const agentPromise = this.openAgent(request).catch(error => {
@@ -492,7 +507,7 @@ export class CursorSdkRunner {
492
507
  requireApiKey() {
493
508
  const resolved = resolveApiKeySync({ apiKey: this.options.apiKey });
494
509
  if (resolved === undefined) {
495
- throw new Error(`The Cursor SDK runner requires a Cursor credential: run \`${CLI} login\`, set CURSOR_API_KEY, CURSOR_SERVICE_ACCOUNT_KEY, or CURSOR_API_KEY_FILE, or pass serve({ apiKey }).`);
510
+ throw new Error(`BDK needs a Cursor credential to run turns. ${SIGN_IN_HINT}`);
496
511
  }
497
512
  return resolved.apiKey;
498
513
  }
@@ -562,7 +577,7 @@ export class CursorSdkRunner {
562
577
  // conversation under the same id beats failing this thread's turns
563
578
  // forever ("Agent … not found" on every follow-up). The channel's
564
579
  // warm-turn prompt context re-hydrates the thread history.
565
- this.log(`[agent-sdk] no stored conversation for ${agentId} on this host; starting a fresh one`);
580
+ this.log(`[bdk] no stored conversation for ${agentId} on this host; starting a fresh one`);
566
581
  return Agent.create(Object.assign(Object.assign({}, options), { agentId }));
567
582
  }
568
583
  });
@@ -599,7 +614,7 @@ export class CursorSdkRunner {
599
614
  // session would otherwise fail every future turn. Mirror the local
600
615
  // host-replacement path above: a fresh conversation beats failing this
601
616
  // thread forever, and the new id binds to the session for later resumes.
602
- this.log(`[agent-sdk] cloud session ${request.sessionId} has no bound cloud agent; creating a fresh one`);
617
+ this.log(`[bdk] cloud session ${request.sessionId} has no bound cloud agent; creating a fresh one`);
603
618
  return Agent.create(options);
604
619
  });
605
620
  }
@@ -623,7 +638,7 @@ export class CursorSdkRunner {
623
638
  yield mirror.persist(store, sdkAgentId);
624
639
  }
625
640
  catch (error) {
626
- this.log(`[agent-sdk] conversation mirror: persist for ${sdkAgentId} failed: ${error instanceof Error ? error.message : String(error)}`);
641
+ this.log(`[bdk] conversation mirror: persist for ${sdkAgentId} failed: ${error instanceof Error ? error.message : String(error)}`);
627
642
  }
628
643
  });
629
644
  }
@@ -4,6 +4,7 @@
4
4
  * routes, custom channel routes (under `/v1/channels/<id>`), and the
5
5
  * server-level health / info / dev-dispatch routes.
6
6
  */
7
+ import { type ServerResponse } from "node:http";
7
8
  import type { AgentProject, AgentServeHandle, ServeOptions } from "../types.js";
8
9
  import type { McpOauthSecretsTarget } from "./mcp-oauth-persist.js";
9
10
  import { type AgentRunner } from "./sdk-runner.js";
@@ -24,6 +25,12 @@ export interface StartServerInternalOptions {
24
25
  sessionRunLog?: ReturnType<typeof selectSessionRunLogStore>;
25
26
  /** Test seam: persist the engine start.log tee without a live store. */
26
27
  startLogStore?: ReturnType<typeof selectStartLogStore>;
28
+ /**
29
+ * `bdk eval` server. Cases drive seeded sessions, so live SCM and deployment
30
+ * ingest stay off, and a Cursor account GitHub credential that cannot be
31
+ * minted fails only the calls that need it.
32
+ */
33
+ evals?: boolean;
27
34
  }
28
35
  /**
29
36
  * Start an HTTP server hosting one or more agents. A single agent with an
@@ -31,4 +38,5 @@ export interface StartServerInternalOptions {
31
38
  * under `/<slug>/v1/*` and `/<slug>/playground`, with an index at `/`.
32
39
  */
33
40
  export declare function startServer(mounts: AgentMount[], options?: ServeOptions & StartServerInternalOptions): Promise<AgentServeHandle>;
41
+ export declare function writeFetchResponse(response: Response, res: ServerResponse, method?: string): Promise<void>;
34
42
  //# sourceMappingURL=server.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/internal/server.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAiDH,OAAO,KAAK,EACV,YAAY,EACZ,gBAAgB,EAQhB,YAAY,EACb,MAAM,aAAa,CAAC;AA2FrB,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAgDpE,OAAO,EAAE,KAAK,WAAW,EAAmB,MAAM,iBAAiB,CAAC;AAUpE,OAAO,EAEL,wBAAwB,EAEzB,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EAAsB,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAW/E,8EAA8E;AAC9E,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,YAAY,CAAC;CACvB;AAuCD,6EAA6E;AAC7E,MAAM,WAAW,0BAA0B;IACzC,oEAAoE;IACpE,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,4EAA4E;IAC5E,eAAe,CAAC,EAAE,qBAAqB,CAAC;IACxC,yEAAyE;IACzE,aAAa,CAAC,EAAE,UAAU,CAAC,OAAO,wBAAwB,CAAC,CAAC;IAC5D,wEAAwE;IACxE,aAAa,CAAC,EAAE,UAAU,CAAC,OAAO,mBAAmB,CAAC,CAAC;CACxD;AAED;;;;GAIG;AACH,wBAAsB,WAAW,CAC/B,MAAM,EAAE,UAAU,EAAE,EACpB,OAAO,GAAE,YAAY,GAAG,0BAA+B,GACtD,OAAO,CAAC,gBAAgB,CAAC,CAwlC3B"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/internal/server.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EAAsC,KAAK,cAAc,EAAE,MAAM,WAAW,CAAC;AA6CpF,OAAO,KAAK,EACV,YAAY,EACZ,gBAAgB,EAQhB,YAAY,EACb,MAAM,aAAa,CAAC;AA2FrB,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAgDpE,OAAO,EAAE,KAAK,WAAW,EAAmB,MAAM,iBAAiB,CAAC;AAUpE,OAAO,EAEL,wBAAwB,EAEzB,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EAAsB,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAW/E,8EAA8E;AAC9E,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,YAAY,CAAC;CACvB;AAuCD,6EAA6E;AAC7E,MAAM,WAAW,0BAA0B;IACzC,oEAAoE;IACpE,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,4EAA4E;IAC5E,eAAe,CAAC,EAAE,qBAAqB,CAAC;IACxC,yEAAyE;IACzE,aAAa,CAAC,EAAE,UAAU,CAAC,OAAO,wBAAwB,CAAC,CAAC;IAC5D,wEAAwE;IACxE,aAAa,CAAC,EAAE,UAAU,CAAC,OAAO,mBAAmB,CAAC,CAAC;IACvD;;;;OAIG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;;;GAIG;AACH,wBAAsB,WAAW,CAC/B,MAAM,EAAE,UAAU,EAAE,EACpB,OAAO,GAAE,YAAY,GAAG,0BAA+B,GACtD,OAAO,CAAC,gBAAgB,CAAC,CAwmC3B;AAilDD,wBAAsB,kBAAkB,CACtC,QAAQ,EAAE,QAAQ,EAClB,GAAG,EAAE,cAAc,EACnB,MAAM,SAAQ,GACb,OAAO,CAAC,IAAI,CAAC,CAkDf"}