@cursor/bdk 0.2.6 → 0.2.8

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 (333) hide show
  1. package/dist/bin/agent-serve.js +52 -57
  2. package/dist/channels/github/github-channel.d.ts.map +1 -1
  3. package/dist/channels/github/github-channel.js +32 -8
  4. package/dist/channels/slack/dispatch.d.ts.map +1 -1
  5. package/dist/channels/slack/dispatch.js +37 -29
  6. package/dist/channels/slack/external-policy.d.ts.map +1 -1
  7. package/dist/channels/slack/external-policy.js +6 -6
  8. package/dist/channels/slack/inbound.d.ts +5 -0
  9. package/dist/channels/slack/inbound.d.ts.map +1 -1
  10. package/dist/channels/slack/inbound.js +13 -0
  11. package/dist/channels/slack/index.d.ts +3 -0
  12. package/dist/channels/slack/index.d.ts.map +1 -1
  13. package/dist/channels/slack/index.js +3 -0
  14. package/dist/channels/slack/log.d.ts +1 -1
  15. package/dist/channels/slack/log.js +1 -1
  16. package/dist/channels/slack/self-identity.d.ts +15 -0
  17. package/dist/channels/slack/self-identity.d.ts.map +1 -0
  18. package/dist/channels/slack/self-identity.js +48 -0
  19. package/dist/channels/slack/sender-name.d.ts +17 -0
  20. package/dist/channels/slack/sender-name.d.ts.map +1 -0
  21. package/dist/channels/slack/sender-name.js +87 -0
  22. package/dist/channels/slack/setup.js +1 -1
  23. package/dist/channels/slack/user-info.d.ts +15 -0
  24. package/dist/channels/slack/user-info.d.ts.map +1 -0
  25. package/dist/channels/slack/user-info.js +57 -0
  26. package/dist/docs/404.html +2 -2
  27. package/dist/docs/assets/{app.CJLKDVza.js → app.oyjtOr3W.js} +4 -4
  28. package/dist/docs/assets/chunks/@localSearchIndexroot.C25zYVuc.js +1 -0
  29. package/dist/docs/assets/chunks/{VPLocalSearchBox.BW9mrQmq.js → VPLocalSearchBox.D0P6J_UJ.js} +1 -1
  30. package/dist/docs/assets/chunks/{arc.D8ZOvM1m.js → arc.B0LY1J1h.js} +1 -1
  31. package/dist/docs/assets/chunks/{architectureDiagram-Q4EWVU46.CXEKhLW-.js → architectureDiagram-Q4EWVU46.dPduLUxY.js} +1 -1
  32. package/dist/docs/assets/chunks/{baseUniq.BJkVKblr.js → baseUniq.B_Ohm21h.js} +1 -1
  33. package/dist/docs/assets/chunks/{blockDiagram-DXYQGD6D.DQDbHxor.js → blockDiagram-DXYQGD6D.B4zcanaJ.js} +1 -1
  34. package/dist/docs/assets/chunks/{c4Diagram-AHTNJAMY.ByMD6LYM.js → c4Diagram-AHTNJAMY.D9Iw21nx.js} +1 -1
  35. package/dist/docs/assets/chunks/channel.CRUyWDV-.js +1 -0
  36. package/dist/docs/assets/chunks/{chunk-4BX2VUAB.Dtq1aVI9.js → chunk-4BX2VUAB.DDVwRShI.js} +1 -1
  37. package/dist/docs/assets/chunks/{chunk-4TB4RGXK.BL_XrkoQ.js → chunk-4TB4RGXK.DsYcdn1i.js} +1 -1
  38. package/dist/docs/assets/chunks/{chunk-55IACEB6.BDPXu94_.js → chunk-55IACEB6.BzzQvcYp.js} +1 -1
  39. package/dist/docs/assets/chunks/{chunk-EDXVE4YY.DhGOQj4k.js → chunk-EDXVE4YY.BMiXZ7FX.js} +1 -1
  40. package/dist/docs/assets/chunks/{chunk-FMBD7UC4.DSF5nr8v.js → chunk-FMBD7UC4.D_mBcLoc.js} +1 -1
  41. package/dist/docs/assets/chunks/{chunk-OYMX7WX6.Day7wayw.js → chunk-OYMX7WX6.CMVjWVMx.js} +1 -1
  42. package/dist/docs/assets/chunks/{chunk-QZHKN3VN.CpBEC0zA.js → chunk-QZHKN3VN.BG-FrPv9.js} +1 -1
  43. package/dist/docs/assets/chunks/{chunk-YZCP3GAM.X_7rY1rx.js → chunk-YZCP3GAM.CkFE1ap3.js} +1 -1
  44. package/dist/docs/assets/chunks/classDiagram-6PBFFD2Q.CG_UObcQ.js +1 -0
  45. package/dist/docs/assets/chunks/classDiagram-v2-HSJHXN6E.CG_UObcQ.js +1 -0
  46. package/dist/docs/assets/chunks/clone.NYSZ9qZN.js +1 -0
  47. package/dist/docs/assets/chunks/{cose-bilkent-S5V4N54A.BVRmi2ko.js → cose-bilkent-S5V4N54A.BVNnCTvY.js} +1 -1
  48. package/dist/docs/assets/chunks/{dagre-KV5264BT.Dei9oslB.js → dagre-KV5264BT.CDN5PR9l.js} +1 -1
  49. package/dist/docs/assets/chunks/{diagram-5BDNPKRD._M-efGt7.js → diagram-5BDNPKRD.DQRUlT-i.js} +1 -1
  50. package/dist/docs/assets/chunks/{diagram-G4DWMVQ6.D1Vmhfsj.js → diagram-G4DWMVQ6.CoeblYQT.js} +1 -1
  51. package/dist/docs/assets/chunks/{diagram-MMDJMWI5.cE1bmvAC.js → diagram-MMDJMWI5.DW3ymjl0.js} +1 -1
  52. package/dist/docs/assets/chunks/{diagram-TYMM5635.DkXAfznP.js → diagram-TYMM5635.BP0uN4Jw.js} +1 -1
  53. package/dist/docs/assets/chunks/{erDiagram-SMLLAGMA.DH_pSwPg.js → erDiagram-SMLLAGMA.DVFUWEn4.js} +1 -1
  54. package/dist/docs/assets/chunks/{flowDiagram-DWJPFMVM.kAWVN9j1.js → flowDiagram-DWJPFMVM.HU-eHspv.js} +1 -1
  55. package/dist/docs/assets/chunks/{ganttDiagram-T4ZO3ILL.8r0w49-p.js → ganttDiagram-T4ZO3ILL.DHNhXijY.js} +1 -1
  56. package/dist/docs/assets/chunks/{gitGraphDiagram-UUTBAWPF.BDa7Bi1i.js → gitGraphDiagram-UUTBAWPF.DkISXcO3.js} +1 -1
  57. package/dist/docs/assets/chunks/{graph.BMPXHz_B.js → graph.CCV0fuRR.js} +1 -1
  58. package/dist/docs/assets/chunks/{infoDiagram-42DDH7IO.BmlcqewS.js → infoDiagram-42DDH7IO.bgILzOoc.js} +1 -1
  59. package/dist/docs/assets/chunks/{ishikawaDiagram-UXIWVN3A.CVSEQSul.js → ishikawaDiagram-UXIWVN3A.CuryXC0F.js} +1 -1
  60. package/dist/docs/assets/chunks/{journeyDiagram-VCZTEJTY.BpeWJ5n-.js → journeyDiagram-VCZTEJTY.BL1Pr-wu.js} +1 -1
  61. package/dist/docs/assets/chunks/{kanban-definition-6JOO6SKY.DHbDXuxB.js → kanban-definition-6JOO6SKY.BbGjvk4l.js} +1 -1
  62. package/dist/docs/assets/chunks/{layout.CzrCDgkP.js → layout.C4PfdldS.js} +1 -1
  63. package/dist/docs/assets/chunks/{linear.HwBsflwN.js → linear.C3xD1T6X.js} +1 -1
  64. package/dist/docs/assets/chunks/{min.DqGHolT3.js → min.CzgRAQ9c.js} +1 -1
  65. package/dist/docs/assets/chunks/{mindmap-definition-QFDTVHPH.ZYGlOawh.js → mindmap-definition-QFDTVHPH.CA9rSWum.js} +1 -1
  66. package/dist/docs/assets/chunks/{pieDiagram-DEJITSTG.C2KRXlNR.js → pieDiagram-DEJITSTG.B8MprgJu.js} +1 -1
  67. package/dist/docs/assets/chunks/{quadrantDiagram-34T5L4WZ.CHj3Qefp.js → quadrantDiagram-34T5L4WZ.DndDwbKT.js} +1 -1
  68. package/dist/docs/assets/chunks/{requirementDiagram-MS252O5E.B1L4Tf7k.js → requirementDiagram-MS252O5E.Zhfgwlnn.js} +1 -1
  69. package/dist/docs/assets/chunks/{sankeyDiagram-XADWPNL6.dNR2yi1B.js → sankeyDiagram-XADWPNL6.B6RRm6N5.js} +1 -1
  70. package/dist/docs/assets/chunks/{sequenceDiagram-FGHM5R23.BrvQ3C6m.js → sequenceDiagram-FGHM5R23.Bfmz-1PN.js} +1 -1
  71. package/dist/docs/assets/chunks/{stateDiagram-FHFEXIEX.BtehEykA.js → stateDiagram-FHFEXIEX.gbrdNqgj.js} +1 -1
  72. package/dist/docs/assets/chunks/stateDiagram-v2-QKLJ7IA2.DOOmulfQ.js +1 -0
  73. package/dist/docs/assets/chunks/{theme.BDHBZUkP.js → theme.gpWjytMh.js} +2 -2
  74. package/dist/docs/assets/chunks/{timeline-definition-GMOUNBTQ.Bn7nhqEN.js → timeline-definition-GMOUNBTQ.Bl1l7M1f.js} +1 -1
  75. package/dist/docs/assets/chunks/{vennDiagram-DHZGUBPP.DKhc38sz.js → vennDiagram-DHZGUBPP.Dfle4U0d.js} +1 -1
  76. package/dist/docs/assets/chunks/{wardley-RL74JXVD.DOXQ0w8J.js → wardley-RL74JXVD.BJrCW6xc.js} +1 -1
  77. package/dist/docs/assets/chunks/{wardleyDiagram-NUSXRM2D.Bbq5B2Ic.js → wardleyDiagram-NUSXRM2D.CM_4lmvZ.js} +1 -1
  78. package/dist/docs/assets/chunks/{xychartDiagram-5P7HB3ND.B77HE1K8.js → xychartDiagram-5P7HB3ND.CHT5X28R.js} +1 -1
  79. package/dist/docs/assets/{reference_cli.md.BsgDqYPh.js → reference_cli.md.GwugN3n-.js} +5 -5
  80. package/dist/docs/assets/reference_cli.md.GwugN3n-.lean.js +1 -0
  81. package/dist/docs/building-with-agents.html +35 -35
  82. package/dist/docs/deployment.html +35 -35
  83. package/dist/docs/evals.html +35 -35
  84. package/dist/docs/guides/agent-to-agent.html +35 -35
  85. package/dist/docs/guides/bitbucket.html +35 -35
  86. package/dist/docs/guides/cloud-agents.html +35 -35
  87. package/dist/docs/guides/convert-automation.html +35 -35
  88. package/dist/docs/guides/github.html +35 -35
  89. package/dist/docs/guides/gitlab.html +35 -35
  90. package/dist/docs/guides/grokbot-agents.html +35 -35
  91. package/dist/docs/guides/hooks.html +35 -35
  92. package/dist/docs/guides/improve.html +35 -35
  93. package/dist/docs/guides/jev.html +35 -35
  94. package/dist/docs/guides/mcp-oauth.html +35 -35
  95. package/dist/docs/guides/opentelemetry.html +35 -35
  96. package/dist/docs/guides/slack.html +35 -35
  97. package/dist/docs/guides/webhooks.html +35 -35
  98. package/dist/docs/hashmap.json +1 -1
  99. package/dist/docs/hillclimbing.html +35 -35
  100. package/dist/docs/index.html +35 -35
  101. package/dist/docs/llms-full.txt +20 -9
  102. package/dist/docs/quickstart.html +35 -35
  103. package/dist/docs/reference/agent-config.html +35 -35
  104. package/dist/docs/reference/artifacts.html +35 -35
  105. package/dist/docs/reference/channels.html +35 -35
  106. package/dist/docs/reference/cli.html +39 -39
  107. package/dist/docs/reference/cli.md +20 -9
  108. package/dist/docs/reference/connections.html +35 -35
  109. package/dist/docs/reference/evals.html +35 -35
  110. package/dist/docs/reference/extensions.html +35 -35
  111. package/dist/docs/reference/hooks.html +35 -35
  112. package/dist/docs/reference/http-api.html +35 -35
  113. package/dist/docs/reference/instructions.html +35 -35
  114. package/dist/docs/reference/playground.html +35 -35
  115. package/dist/docs/reference/project-layout.html +35 -35
  116. package/dist/docs/reference/prompt.html +35 -35
  117. package/dist/docs/reference/schedules.html +35 -35
  118. package/dist/docs/reference/sessions.html +35 -35
  119. package/dist/docs/reference/skills.html +35 -35
  120. package/dist/docs/reference/subagents.html +35 -35
  121. package/dist/docs/reference/tools.html +35 -35
  122. package/dist/docs/templates/agentic-owners.html +35 -35
  123. package/dist/docs/templates/grokbot-agents.html +35 -35
  124. package/dist/docs/templates/security-reviewer.html +35 -35
  125. package/dist/docs/templates/thermo-quality-review.html +35 -35
  126. package/dist/docs/templates/thermo-review.html +35 -35
  127. package/dist/docs/templates/triage.html +35 -35
  128. package/dist/docs/troubleshooting.html +35 -35
  129. package/dist/extensions/cursor-cloud-agents/extension.d.ts +14 -0
  130. package/dist/extensions/cursor-cloud-agents/extension.d.ts.map +1 -1
  131. package/dist/extensions/cursor-cloud-agents/extension.js +5 -0
  132. package/dist/extensions/cursor-cloud-agents/lib/watch.d.ts +17 -0
  133. package/dist/extensions/cursor-cloud-agents/lib/watch.d.ts.map +1 -0
  134. package/dist/extensions/cursor-cloud-agents/lib/watch.js +99 -0
  135. package/dist/extensions/cursor-cloud-agents/reminders/cloud-agent-stop-watch.d.ts +19 -0
  136. package/dist/extensions/cursor-cloud-agents/reminders/cloud-agent-stop-watch.d.ts.map +1 -0
  137. package/dist/extensions/cursor-cloud-agents/reminders/cloud-agent-stop-watch.js +71 -0
  138. package/dist/extensions/cursor-cloud-agents/skills/handoff.md +9 -5
  139. package/dist/extensions/cursor-cloud-agents/tools/cancel.d.ts.map +1 -1
  140. package/dist/extensions/cursor-cloud-agents/tools/cancel.js +3 -1
  141. package/dist/extensions/cursor-cloud-agents/tools/launch.d.ts.map +1 -1
  142. package/dist/extensions/cursor-cloud-agents/tools/launch.js +3 -2
  143. package/dist/extensions.d.ts +1 -1
  144. package/dist/extensions.js +1 -1
  145. package/dist/files-backends/cursor-hosted.d.ts +22 -83
  146. package/dist/files-backends/cursor-hosted.d.ts.map +1 -1
  147. package/dist/files-backends/cursor-hosted.js +46 -160
  148. package/dist/files.d.ts +9 -32
  149. package/dist/files.d.ts.map +1 -1
  150. package/dist/files.js +7 -32
  151. package/dist/internal/artifacts-store.d.ts +13 -25
  152. package/dist/internal/artifacts-store.d.ts.map +1 -1
  153. package/dist/internal/artifacts-store.js +25 -46
  154. package/dist/internal/cli-ax.d.ts +10 -17
  155. package/dist/internal/cli-ax.d.ts.map +1 -1
  156. package/dist/internal/cli-ax.js +87 -155
  157. package/dist/internal/cli-bitbucket.js +5 -5
  158. package/dist/internal/cli-deploy.d.ts +4 -1
  159. package/dist/internal/cli-deploy.d.ts.map +1 -1
  160. package/dist/internal/cli-deploy.js +117 -20
  161. package/dist/internal/cli-github.js +13 -13
  162. package/dist/internal/cli-gitlab.js +5 -5
  163. package/dist/internal/continuation-identity.d.ts +2 -0
  164. package/dist/internal/continuation-identity.d.ts.map +1 -1
  165. package/dist/internal/continuation-identity.js +4 -0
  166. package/dist/internal/conversation-mirror.d.ts +9 -38
  167. package/dist/internal/conversation-mirror.d.ts.map +1 -1
  168. package/dist/internal/conversation-mirror.js +62 -68
  169. package/dist/internal/cursor/account-mcp.d.ts +1 -1
  170. package/dist/internal/cursor/account-mcp.js +1 -1
  171. package/dist/internal/cursor/backend-client.js +1 -1
  172. package/dist/internal/cursor/github-credentials.js +3 -3
  173. package/dist/internal/cursor/hosted-bound-secrets.d.ts +6 -2
  174. package/dist/internal/cursor/hosted-bound-secrets.d.ts.map +1 -1
  175. package/dist/internal/cursor/hosted-bound-secrets.js +13 -2
  176. package/dist/internal/cursor/hosted-store-secrets.d.ts +13 -37
  177. package/dist/internal/cursor/hosted-store-secrets.d.ts.map +1 -1
  178. package/dist/internal/cursor/hosted-store-secrets.js +13 -37
  179. package/dist/internal/cursor/store-api-client.d.ts +17 -39
  180. package/dist/internal/cursor/store-api-client.d.ts.map +1 -1
  181. package/dist/internal/cursor/store-api-client.js +15 -37
  182. package/dist/internal/cursor-deployment-relay.js +3 -3
  183. package/dist/internal/cursor-event-relay.js +1 -1
  184. package/dist/internal/cursor-relay-core.d.ts +1 -1
  185. package/dist/internal/cursor-relay-core.d.ts.map +1 -1
  186. package/dist/internal/deploy-client.d.ts +55 -63
  187. package/dist/internal/deploy-client.d.ts.map +1 -1
  188. package/dist/internal/deploy-client.js +48 -28
  189. package/dist/internal/discovery/agent.d.ts +1 -1
  190. package/dist/internal/discovery/agent.d.ts.map +1 -1
  191. package/dist/internal/discovery/agent.js +4 -0
  192. package/dist/internal/discovery/extensions.d.ts +2 -1
  193. package/dist/internal/discovery/extensions.d.ts.map +1 -1
  194. package/dist/internal/discovery/extensions.js +11 -1
  195. package/dist/internal/discovery/project.d.ts.map +1 -1
  196. package/dist/internal/discovery/project.js +1 -0
  197. package/dist/internal/distribution.d.ts +2 -2
  198. package/dist/internal/distribution.d.ts.map +1 -1
  199. package/dist/internal/distribution.js +2 -2
  200. package/dist/internal/docs-site.js +3 -3
  201. package/dist/internal/eval-run-store.js +8 -8
  202. package/dist/internal/framework-file-storage.d.ts +10 -34
  203. package/dist/internal/framework-file-storage.d.ts.map +1 -1
  204. package/dist/internal/framework-file-storage.js +12 -39
  205. package/dist/internal/framework-storage-selection.d.ts +10 -46
  206. package/dist/internal/framework-storage-selection.d.ts.map +1 -1
  207. package/dist/internal/framework-storage-selection.js +15 -64
  208. package/dist/internal/github-fanout.js +2 -2
  209. package/dist/internal/handleAgentServeTrigger.d.ts +5 -8
  210. package/dist/internal/handleAgentServeTrigger.d.ts.map +1 -1
  211. package/dist/internal/handleAgentServeTrigger.js +5 -8
  212. package/dist/internal/host-files.js +6 -9
  213. package/dist/internal/host-platforms.js +5 -5
  214. package/dist/internal/hosted-catch.d.ts +3 -2
  215. package/dist/internal/hosted-catch.d.ts.map +1 -1
  216. package/dist/internal/hosted-catch.js +27 -9
  217. package/dist/internal/hosted-delivery-protocol.d.ts +31 -8
  218. package/dist/internal/hosted-delivery-protocol.d.ts.map +1 -1
  219. package/dist/internal/hosted-delivery-protocol.js +102 -1
  220. package/dist/internal/hosted-delivery.d.ts.map +1 -1
  221. package/dist/internal/hosted-delivery.js +32 -12
  222. package/dist/internal/hosted-execution-diag.d.ts +13 -24
  223. package/dist/internal/hosted-execution-diag.d.ts.map +1 -1
  224. package/dist/internal/hosted-execution-diag.js +11 -20
  225. package/dist/internal/hosted-execution-flush.d.ts +22 -10
  226. package/dist/internal/hosted-execution-flush.d.ts.map +1 -1
  227. package/dist/internal/hosted-execution-flush.js +45 -9
  228. package/dist/internal/hosted-managed-automation.js +5 -5
  229. package/dist/internal/hosting.d.ts +5 -10
  230. package/dist/internal/hosting.d.ts.map +1 -1
  231. package/dist/internal/hosting.js +5 -10
  232. package/dist/internal/legacy-command-guard.d.ts +1 -4
  233. package/dist/internal/legacy-command-guard.d.ts.map +1 -1
  234. package/dist/internal/legacy-command-guard.js +2 -11
  235. package/dist/internal/listen-port.js +1 -1
  236. package/dist/internal/local-control-plane.js +6 -6
  237. package/dist/internal/logs-client.d.ts +20 -1
  238. package/dist/internal/logs-client.d.ts.map +1 -1
  239. package/dist/internal/logs-client.js +89 -1
  240. package/dist/internal/mcp-endpoint.js +1 -1
  241. package/dist/internal/otel/collector.js +1 -1
  242. package/dist/internal/otel/runtime.js +13 -13
  243. package/dist/internal/platform-schedule-sync.js +2 -2
  244. package/dist/internal/playground/toolchain.js +6 -6
  245. package/dist/internal/process-memory-telemetry.js +2 -2
  246. package/dist/internal/reminder-runner.d.ts +8 -3
  247. package/dist/internal/reminder-runner.d.ts.map +1 -1
  248. package/dist/internal/reminder-runner.js +51 -52
  249. package/dist/internal/resolve-prod-target.d.ts +1 -12
  250. package/dist/internal/resolve-prod-target.d.ts.map +1 -1
  251. package/dist/internal/resolve-prod-target.js +2 -32
  252. package/dist/internal/resolved-connections.js +8 -8
  253. package/dist/internal/run-client.d.ts +4 -3
  254. package/dist/internal/run-client.d.ts.map +1 -1
  255. package/dist/internal/run-client.js +98 -61
  256. package/dist/internal/runtime-dispatch-runner.d.ts +1 -0
  257. package/dist/internal/runtime-dispatch-runner.d.ts.map +1 -1
  258. package/dist/internal/runtime-dispatch-runner.js +7 -1
  259. package/dist/internal/schedule-runner.js +1 -1
  260. package/dist/internal/sdk-runner.d.ts +4 -0
  261. package/dist/internal/sdk-runner.d.ts.map +1 -1
  262. package/dist/internal/sdk-runner.js +37 -22
  263. package/dist/internal/server.d.ts +2 -0
  264. package/dist/internal/server.d.ts.map +1 -1
  265. package/dist/internal/server.js +39 -38
  266. package/dist/internal/session-engine.d.ts +40 -44
  267. package/dist/internal/session-engine.d.ts.map +1 -1
  268. package/dist/internal/session-engine.js +108 -97
  269. package/dist/internal/session-run-log.d.ts +10 -24
  270. package/dist/internal/session-run-log.d.ts.map +1 -1
  271. package/dist/internal/session-run-log.js +13 -27
  272. package/dist/internal/sessions-client.d.ts.map +1 -1
  273. package/dist/internal/sessions-client.js +6 -3
  274. package/dist/internal/skills-sync.d.ts +3 -5
  275. package/dist/internal/skills-sync.d.ts.map +1 -1
  276. package/dist/internal/skills-sync.js +3 -5
  277. package/dist/internal/start-log-store.d.ts +7 -18
  278. package/dist/internal/start-log-store.d.ts.map +1 -1
  279. package/dist/internal/start-log-store.js +47 -24
  280. package/dist/internal/storage-coordinator.d.ts +7 -10
  281. package/dist/internal/storage-coordinator.d.ts.map +1 -1
  282. package/dist/internal/storage-coordinator.js +18 -20
  283. package/dist/internal/storage-roles.d.ts +5 -0
  284. package/dist/internal/storage-roles.d.ts.map +1 -1
  285. package/dist/internal/store-api-protocol.d.ts +12 -33
  286. package/dist/internal/store-api-protocol.d.ts.map +1 -1
  287. package/dist/internal/store-api-protocol.js +6 -22
  288. package/dist/internal/store-mirror.d.ts +4 -5
  289. package/dist/internal/store-mirror.d.ts.map +1 -1
  290. package/dist/internal/store-mirror.js +6 -8
  291. package/dist/internal/turn-cost.d.ts.map +1 -1
  292. package/dist/internal/turn-cost.js +31 -18
  293. package/dist/internal/turn-lease-store.d.ts +12 -5
  294. package/dist/internal/turn-lease-store.d.ts.map +1 -1
  295. package/dist/internal/turn-lease-store.js +61 -8
  296. package/dist/internal/v2-hosting.d.ts +4 -7
  297. package/dist/internal/v2-hosting.d.ts.map +1 -1
  298. package/dist/internal/v2-hosting.js +4 -7
  299. package/dist/internal/workspace-sync.d.ts +3 -6
  300. package/dist/internal/workspace-sync.d.ts.map +1 -1
  301. package/dist/internal/workspace-sync.js +3 -6
  302. package/dist/internal/workspace.d.ts +10 -16
  303. package/dist/internal/workspace.d.ts.map +1 -1
  304. package/dist/internal/workspace.js +9 -14
  305. package/dist/memory.d.ts +17 -43
  306. package/dist/memory.d.ts.map +1 -1
  307. package/dist/memory.js +34 -80
  308. package/dist/playground/assets/index-DPKLl4C_.css +1 -0
  309. package/dist/playground/assets/index-MijLHTbB.js +71 -0
  310. package/dist/playground/index.html +2 -2
  311. package/dist/storage-backends/cursor-hosted-v2.d.ts +8 -36
  312. package/dist/storage-backends/cursor-hosted-v2.d.ts.map +1 -1
  313. package/dist/storage-backends/cursor-hosted-v2.js +9 -37
  314. package/dist/storage-backends/cursor-hosted.d.ts +17 -30
  315. package/dist/storage-backends/cursor-hosted.d.ts.map +1 -1
  316. package/dist/storage-backends/cursor-hosted.js +14 -27
  317. package/dist/storage-protocol.d.ts +13 -38
  318. package/dist/storage-protocol.d.ts.map +1 -1
  319. package/dist/storage-protocol.js +14 -39
  320. package/dist/types.d.ts +29 -30
  321. package/dist/types.d.ts.map +1 -1
  322. package/docs/reference/cli.md +20 -9
  323. package/package.json +1 -1
  324. package/templates/pr-autofixer/bot/instructions.md +3 -3
  325. package/dist/docs/assets/chunks/@localSearchIndexroot.Bq-pxRXm.js +0 -1
  326. package/dist/docs/assets/chunks/channel.DCU8W1RP.js +0 -1
  327. package/dist/docs/assets/chunks/classDiagram-6PBFFD2Q.DwpXsM06.js +0 -1
  328. package/dist/docs/assets/chunks/classDiagram-v2-HSJHXN6E.DwpXsM06.js +0 -1
  329. package/dist/docs/assets/chunks/clone.DH6Mx2zB.js +0 -1
  330. package/dist/docs/assets/chunks/stateDiagram-v2-QKLJ7IA2.kzD0-U89.js +0 -1
  331. package/dist/docs/assets/reference_cli.md.BsgDqYPh.lean.js +0 -1
  332. package/dist/playground/assets/index-6BbTPnaT.css +0 -1
  333. package/dist/playground/assets/index-CI7FAmOP.js +0 -71
@@ -1,39 +1,13 @@
1
1
  /**
2
2
  * Durable mirror for the SDK runner's conversation store.
3
3
  *
4
- * The Cursor SDK keeps each local conversation in SQLite under the engine's
5
- * state root (`runner/index.db` + `runner/agents/agent-<hash>/store.db`).
6
- * That disk dies with the pod: on architecture v2, session **records** and
7
- * event chunks survive replacement through the control-plane storage mirror
8
- * (framework-storage-selection.ts), but the conversation itself was never
9
- * hydrated anywhere — a replacement pod resumed every thread as a fresh
10
- * conversation.
4
+ * The mirror restores checkpoint state before a conversation resumes and
5
+ * persists it after each local turn. Conversation data uses framework-owned
6
+ * storage, isolated from author-facing files and KV.
11
7
  *
12
- * This module mirrors the conversation through the SDK's own store APIs —
13
- * the agent document (which carries `sdkMetadata.blobEncryptionKey`, without
14
- * which the checkpoint blobs cannot be decrypted) plus its content-addressed
15
- * checkpoint blobs — into the deployment's **framework-level** file store
16
- * (`AGENT_SERVE_FRAMEWORK_STORE_SOURCE_ID`), alongside session records and
17
- * transcripts and apart from the author-facing user store. The store is an
18
- * Agent Store reached over `/v0/agent-serve-files` presigned URLs — **not
19
- * mounted** as a filesystem in the engine VM (the FUSE mount at
20
- * {@link DEPLOYMENT_STORE_MOUNT_PATH} exists only on cloud-runtime VMs) —
21
- * so the mirror moves bytes through the {@link FileSink} contract instead.
22
- *
23
- * Going through the store APIs rather than copying `store.db` files sidesteps
24
- * WAL consistency and the shared `index.db` (per-session raw copies would
25
- * clobber other sessions' rows); checkpoint blobs are content-addressed, so
26
- * repeat persists upload only what is new.
27
- *
28
- * Timing: the runner hydrates before `Agent.resume` (so a follow-up landing
29
- * on a fresh pod — including a v2 hosted-execution delivery — finds the
30
- * conversation before the turn runs) and persists after each local turn
31
- * settles, **awaited**, because a hosted pod can be parked immediately after
32
- * the execution reply.
33
- *
34
- * Run rows and run events are deliberately not mirrored: they are per-pod
35
- * bookkeeping (turn numbers, stream offsets), and the durable session event
36
- * stream already lives in the control-plane storage mirror.
8
+ * Restore failures propagate so a temporary storage outage cannot fork an
9
+ * existing thread into a fresh conversation. Run bookkeeping remains local;
10
+ * the durable session event stream already records user-visible history.
37
11
  */
38
12
  var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
39
13
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
@@ -117,7 +91,7 @@ export function createConversationMirror(options) {
117
91
  if (cached !== undefined) {
118
92
  return cached;
119
93
  }
120
- // Seed from the previous manifest so a fresh pod does not re-upload the
94
+ // Seed from the previous manifest so a new process does not re-upload the
121
95
  // whole history on its first persist. A miss, an unusable manifest, or
122
96
  // a failed read seeds empty — re-uploading is wasteful, never wrong.
123
97
  const seeded = new Set();
@@ -130,12 +104,52 @@ export function createConversationMirror(options) {
130
104
  }
131
105
  }
132
106
  catch (error) {
133
- logger(`[agent-sdk] conversation mirror: could not read the prior manifest for ${sdkAgentId} (${describeError(error)}); re-uploading blobs`);
107
+ logger(`[bdk] conversation mirror: could not read the prior manifest for ${sdkAgentId} (${describeError(error)}); re-uploading blobs`);
134
108
  }
135
109
  rememberMirrored(sdkAgentId, seeded);
136
110
  return seeded;
137
111
  });
138
112
  }
113
+ function uploadBlobs(store, sdkAgentId, blobIds, uploaded) {
114
+ return __awaiter(this, void 0, void 0, function* () {
115
+ var _a;
116
+ const entries = [];
117
+ for (const blobId of blobIds) {
118
+ const body = yield store.checkpoints.get({ agentId: sdkAgentId, blobId });
119
+ if (body !== null) {
120
+ entries.push({
121
+ blobId,
122
+ key: agentSdkAgentStoreKeys.conversationBlob(agentName, sdkAgentId, blobId),
123
+ body,
124
+ });
125
+ }
126
+ }
127
+ if (entries.length === 0) {
128
+ return;
129
+ }
130
+ if (sink.putMany === undefined) {
131
+ for (const entry of entries) {
132
+ yield sink.put(entry.key, entry.body);
133
+ uploaded.add(entry.blobId);
134
+ }
135
+ return;
136
+ }
137
+ const settled = yield sink.putMany(entries.map(({ key, body }) => ({ key, body })));
138
+ let failure;
139
+ for (const [index, entry] of entries.entries()) {
140
+ const outcome = settled[index];
141
+ if ((outcome === null || outcome === void 0 ? void 0 : outcome.status) === "fulfilled") {
142
+ uploaded.add(entry.blobId);
143
+ }
144
+ else if (failure === undefined) {
145
+ failure = (_a = outcome === null || outcome === void 0 ? void 0 : outcome.reason) !== null && _a !== void 0 ? _a : new Error(`conversation mirror: batched upload of "${entry.key}" returned no outcome`);
146
+ }
147
+ }
148
+ if (failure !== undefined) {
149
+ throw failure;
150
+ }
151
+ });
152
+ }
139
153
  return {
140
154
  persist(store, sdkAgentId) {
141
155
  return serialize(sdkAgentId, () => __awaiter(this, void 0, void 0, function* () {
@@ -146,24 +160,13 @@ export function createConversationMirror(options) {
146
160
  }
147
161
  const uploaded = yield mirroredBlobIds(sdkAgentId);
148
162
  const blobIds = yield listCheckpointBlobIds(store, sdkAgentId);
149
- for (const blobId of blobIds) {
150
- if (uploaded.has(blobId)) {
151
- continue;
152
- }
153
- const bytes = yield store.checkpoints.get({
154
- agentId: sdkAgentId,
155
- blobId,
156
- });
157
- if (bytes === null) {
158
- continue;
159
- }
160
- yield sink.put(agentSdkAgentStoreKeys.conversationBlob(agentName, sdkAgentId, blobId), bytes);
161
- // Content-addressed: once in the sink, never re-uploaded.
162
- uploaded.add(blobId);
163
+ const pending = blobIds.filter(blobId => !uploaded.has(blobId));
164
+ for (let start = 0; start < pending.length; start += PERSIST_UPLOAD_BATCH_SIZE) {
165
+ yield uploadBlobs(store, sdkAgentId, pending.slice(start, start + PERSIST_UPLOAD_BATCH_SIZE), uploaded);
163
166
  }
164
167
  const manifest = {
165
168
  v: 1,
166
- // The referenced run is pod-local bookkeeping and is not mirrored;
169
+ // The referenced run is process-local bookkeeping and is not mirrored;
167
170
  // a hydrated store must not point at a run row it does not hold.
168
171
  agent: Object.assign(Object.assign({}, document), { activeRunId: null }),
169
172
  blobIds: blobIds.filter(blobId => uploaded.has(blobId)),
@@ -201,20 +204,17 @@ export function createConversationMirror(options) {
201
204
  // during a rolling redeploy, or corruption): retrying would fail
202
205
  // identically forever, so fall through to the caller's
203
206
  // fresh-conversation path instead of wedging the session.
204
- logger(`[agent-sdk] conversation mirror: the manifest for ${sdkAgentId} is unusable (${read.reason}); treating the conversation as unrestorable`);
207
+ logger(`[bdk] conversation mirror: the manifest for ${sdkAgentId} is unusable (${read.reason}); treating the conversation as unrestorable`);
205
208
  return false;
206
209
  }
207
210
  const manifest = read.manifest;
208
211
  const rootBlobId = (_a = manifest.agent.latestCheckpoint) === null || _a === void 0 ? void 0 : _a.rootBlobId;
209
212
  if (rootBlobId === undefined || !manifest.blobIds.includes(rootBlobId)) {
210
- logger(`[agent-sdk] conversation mirror: the manifest for ${sdkAgentId} does not list its root checkpoint blob; treating the conversation as unrestorable`);
213
+ logger(`[bdk] conversation mirror: the manifest for ${sdkAgentId} does not list its root checkpoint blob; treating the conversation as unrestorable`);
211
214
  return false;
212
215
  }
213
- // This sits on the resume critical path. Prefer the sink's batched
214
- // read — on the hosted sink that is one presign call per 100 blobs
215
- // instead of one per blob, keeping a checkpoint-heavy restore under
216
- // the store's per-deployment rate budget — and fall back to
217
- // bounded-parallel per-blob gets elsewhere.
216
+ // This sits on the resume critical path. Prefer a batched read and
217
+ // fall back to bounded parallel reads when the sink has no batch API.
218
218
  const blobKeys = manifest.blobIds.map(blobId => agentSdkAgentStoreKeys.conversationBlob(agentName, sdkAgentId, blobId));
219
219
  const blobBodies = sink.getMany !== undefined
220
220
  ? yield sink.getMany(blobKeys)
@@ -230,7 +230,7 @@ export function createConversationMirror(options) {
230
230
  // may reach any listed blob, not just the root. Restoring a
231
231
  // partial graph would create an agent row whose resume succeeds
232
232
  // and whose checkpoint walk then fails unrecoverably.
233
- logger(`[agent-sdk] conversation mirror: ${missing.length} checkpoint blob(s) for ${sdkAgentId} are missing from the sink; treating the conversation as unrestorable`);
233
+ logger(`[bdk] conversation mirror: ${missing.length} checkpoint blob(s) for ${sdkAgentId} are missing from the sink; treating the conversation as unrestorable`);
234
234
  return false;
235
235
  }
236
236
  const restored = new Set();
@@ -253,7 +253,7 @@ export function createConversationMirror(options) {
253
253
  agent: Object.assign(Object.assign({}, manifest.agent), { activeRunId: null }),
254
254
  });
255
255
  rememberMirrored(sdkAgentId, restored);
256
- logger(`[agent-sdk] conversation mirror: restored the conversation for ${sdkAgentId} (${restored.size} checkpoint blob(s))`);
256
+ logger(`[bdk] conversation mirror: restored the conversation for ${sdkAgentId} (${restored.size} checkpoint blob(s))`);
257
257
  return true;
258
258
  }));
259
259
  },
@@ -263,6 +263,7 @@ export function createConversationMirror(options) {
263
263
  const MAX_TRACKED_CONVERSATIONS = 1000;
264
264
  /** Parallel blob downloads during hydrate (resume critical path). */
265
265
  const HYDRATE_DOWNLOAD_CONCURRENCY = 8;
266
+ const PERSIST_UPLOAD_BATCH_SIZE = 50;
266
267
  /**
267
268
  * Read the persisted manifest. Sink transport failures propagate (an
268
269
  * outage must fail the follow-up, not fork the thread); everything the
@@ -312,12 +313,9 @@ function listCheckpointBlobIds(store, sdkAgentId) {
312
313
  /**
313
314
  * Whether (and over which sink) this serve process mirrors conversations.
314
315
  *
315
- * Selected for architecture-v2 agents on Cursor-managed hosting — the same
316
- * generation signal as framework-storage-selection.ts, plus a provisioned
317
- * **framework-level** file store: conversation state is engine-owned, so it
318
- * lives with session records and transcripts, never on the author-facing
319
- * user store. Self-hosted v2 keeps everything on the state root (the
320
- * operator owns the disk), and v1 keeps today's behavior while it runs.
316
+ * Enabled for architecture-v2 agents on Cursor-managed hosting.
317
+ * Conversation state is framework-owned and never uses author-facing
318
+ * storage. Self-hosted and architecture-v1 agents keep local behavior.
321
319
  */
322
320
  export function selectConversationMirror(input) {
323
321
  const hosting = resolveAgentV2Hosting({
@@ -330,10 +328,6 @@ export function selectConversationMirror(input) {
330
328
  return createConversationMirror({
331
329
  sink: cursorHostedFiles({
332
330
  resolveStoreSourceId: () => hosting.resolveStoreIds().frameworkStoreSourceId,
333
- // Full chain (env → key file → stored login), resolved lazily: frozen
334
- // engines listen unsigned and only gain a credential at task time,
335
- // after this sink is constructed. Hosted deliveries have consumed the
336
- // bind file into CURSOR_API_KEY by then, so this resolves from env.
337
331
  resolveApiKey: () => { var _a; return (_a = resolveApiKeySync()) === null || _a === void 0 ? void 0 : _a.apiKey; },
338
332
  }),
339
333
  agentName: input.project.name,
@@ -116,7 +116,7 @@ export interface CursorAccountMcpWarningServer {
116
116
  }
117
117
  /**
118
118
  * Yellow warning panel for unhealthy / missing Cursor-account connectors.
119
- * One box replaces the old stacked `[agent-sdk]` log lines.
119
+ * One box replaces the old stacked `[bdk]` log lines.
120
120
  */
121
121
  export declare function formatCursorAccountMcpWarningBox(args: {
122
122
  connectionName: string;
@@ -413,7 +413,7 @@ function connectUrl(authUrl) {
413
413
  }
414
414
  /**
415
415
  * Yellow warning panel for unhealthy / missing Cursor-account connectors.
416
- * One box replaces the old stacked `[agent-sdk]` log lines.
416
+ * One box replaces the old stacked `[bdk]` log lines.
417
417
  */
418
418
  export function formatCursorAccountMcpWarningBox(args) {
419
419
  var _a, _b;
@@ -481,7 +481,7 @@ export class CursorBackendClient {
481
481
  }
482
482
  this.token = { value: session.token, expiresAtMs: session.expiresAtMs };
483
483
  this.lastExchangedApiKey = apiKey;
484
- this.logger("[agent-sdk] cursor account: minted a fresh access token");
484
+ this.logger("[bdk] cursor account: minted a fresh access token");
485
485
  return session.token;
486
486
  });
487
487
  }
@@ -112,13 +112,13 @@ export class CursorGithubCredentialProvider {
112
112
  this.installGhToken(result.token);
113
113
  this.scheduleRefresh();
114
114
  }
115
- this.logger(`[agent-sdk] GitHub auth: refreshed Cursor account credential for ${this.repos.length} repo(s)`);
115
+ this.logger(`[bdk] GitHub auth: refreshed Cursor account credential for ${this.repos.length} repo(s)`);
116
116
  return result.token;
117
117
  }
118
118
  catch (error) {
119
119
  const message = error instanceof Error ? error.message : String(error);
120
120
  if (this.cached !== undefined && this.now() < this.cached.expiresAtMs) {
121
- this.logger(`[agent-sdk] GitHub auth: Cursor account credential refresh failed; using the current lease: ${message}`);
121
+ this.logger(`[bdk] GitHub auth: Cursor account credential refresh failed; using the current lease: ${message}`);
122
122
  this.cached.refreshAtMs = Math.min(this.cached.expiresAtMs, this.now() + REFRESH_RETRY_MS);
123
123
  if (this.started) {
124
124
  this.scheduleRetry();
@@ -161,7 +161,7 @@ export class CursorGithubCredentialProvider {
161
161
  }
162
162
  this.refreshTimer = setTimeout(() => {
163
163
  void this.getToken().catch((error) => {
164
- this.logger(`[agent-sdk] GitHub auth: Cursor account credential refresh failed: ${error instanceof Error ? error.message : String(error)}`);
164
+ this.logger(`[bdk] GitHub auth: Cursor account credential refresh failed: ${error instanceof Error ? error.message : String(error)}`);
165
165
  this.scheduleRetry();
166
166
  });
167
167
  }, delayMs);
@@ -12,15 +12,19 @@
12
12
  * It fails closed. A secret that survives the consume would sit world-readable
13
13
  * next to authored agent code for the length of a turn, so the caller returns
14
14
  * a retryable error instead of dispatching. The next request re-binds and
15
- * consumes again.
15
+ * consumes again. So does a request that ends up with no Cursor API key at
16
+ * all: the control plane skips the bind while it believes this process holds
17
+ * one, and a process that restarted in place lost it.
16
18
  */
17
19
  /** Wire error code for a bind file that outlived its consume. */
18
20
  export declare const BOUND_SECRETS_NOT_CONSUMED = "bound_secrets_not_consumed";
21
+ /** Wire error code for a request that reached authored code with no API key bound. */
22
+ export declare const BOUND_SECRETS_MISSING = "bound_secrets_missing";
19
23
  export type HostedBoundSecretsResult = {
20
24
  ok: true;
21
25
  } | {
22
26
  ok: false;
23
- code: typeof BOUND_SECRETS_NOT_CONSUMED;
27
+ code: typeof BOUND_SECRETS_NOT_CONSUMED | typeof BOUND_SECRETS_MISSING;
24
28
  message: string;
25
29
  };
26
30
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"hosted-bound-secrets.d.ts","sourceRoot":"","sources":["../../../src/internal/cursor/hosted-bound-secrets.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAQH,iEAAiE;AACjE,eAAO,MAAM,0BAA0B,+BAA+B,CAAC;AAEvE,MAAM,MAAM,wBAAwB,GAChC;IAAE,EAAE,EAAE,IAAI,CAAA;CAAE,GACZ;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,OAAO,0BAA0B,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAE5E;;;;;;;;;;GAUG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,CAAC,EAAE;IAClD,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,yBAAyB,CAAC,EAAE,MAAM,CAAC;CACpC,GAAG,wBAAwB,CA0B3B"}
1
+ {"version":3,"file":"hosted-bound-secrets.d.ts","sourceRoot":"","sources":["../../../src/internal/cursor/hosted-bound-secrets.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAQH,iEAAiE;AACjE,eAAO,MAAM,0BAA0B,+BAA+B,CAAC;AAEvE,sFAAsF;AACtF,eAAO,MAAM,qBAAqB,0BAA0B,CAAC;AAE7D,MAAM,MAAM,wBAAwB,GAChC;IAAE,EAAE,EAAE,IAAI,CAAA;CAAE,GACZ;IACE,EAAE,EAAE,KAAK,CAAC;IACV,IAAI,EAAE,OAAO,0BAA0B,GAAG,OAAO,qBAAqB,CAAC;IACvE,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEN;;;;;;;;;;GAUG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,CAAC,EAAE;IAClD,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,yBAAyB,CAAC,EAAE,MAAM,CAAC;CACpC,GAAG,wBAAwB,CAiC3B"}
@@ -12,12 +12,16 @@
12
12
  * It fails closed. A secret that survives the consume would sit world-readable
13
13
  * next to authored agent code for the length of a turn, so the caller returns
14
14
  * a retryable error instead of dispatching. The next request re-binds and
15
- * consumes again.
15
+ * consumes again. So does a request that ends up with no Cursor API key at
16
+ * all: the control plane skips the bind while it believes this process holds
17
+ * one, and a process that restarted in place lost it.
16
18
  */
17
19
  import { consumeBoundCursorApiKey, DEFAULT_CURSOR_API_KEY_FILE } from "./credentials.js";
18
20
  import { consumeBoundDeploymentSecrets, DEFAULT_AGENT_SERVE_DEPLOYMENT_SECRETS_FILE, } from "./hosted-deployment-secrets.js";
19
21
  /** Wire error code for a bind file that outlived its consume. */
20
22
  export const BOUND_SECRETS_NOT_CONSUMED = "bound_secrets_not_consumed";
23
+ /** Wire error code for a request that reached authored code with no API key bound. */
24
+ export const BOUND_SECRETS_MISSING = "bound_secrets_missing";
21
25
  /**
22
26
  * Hydrate `process.env` from both bind files and remove them from disk.
23
27
  * Returns a failure when either secret is still readable afterwards.
@@ -30,7 +34,7 @@ export const BOUND_SECRETS_NOT_CONSUMED = "bound_secrets_not_consumed";
30
34
  * file on a surface that points the variable at one.
31
35
  */
32
36
  export function consumeHostedBoundSecrets(options) {
33
- var _a, _b;
37
+ var _a, _b, _c;
34
38
  const survivors = [];
35
39
  const secretsPath = (_a = options === null || options === void 0 ? void 0 : options.deploymentSecretsFilePath) !== null && _a !== void 0 ? _a : DEFAULT_AGENT_SERVE_DEPLOYMENT_SECRETS_FILE;
36
40
  const secrets = consumeBoundDeploymentSecrets(secretsPath);
@@ -43,6 +47,13 @@ export function consumeHostedBoundSecrets(options) {
43
47
  survivors.push(`${apiKeyPath} (${apiKey.disposal.reason})`);
44
48
  }
45
49
  if (survivors.length === 0) {
50
+ if (((_c = process.env.CURSOR_API_KEY) !== null && _c !== void 0 ? _c : "").trim() === "") {
51
+ return {
52
+ ok: false,
53
+ code: BOUND_SECRETS_MISSING,
54
+ message: "No Cursor API key is bound to this process, so authored work did not run.",
55
+ };
56
+ }
46
57
  return { ok: true };
47
58
  }
48
59
  return {
@@ -1,52 +1,30 @@
1
1
  /**
2
- * Task-time bind paths for hosted deployment file-store source ids.
3
- *
4
- * Freeze v2 snapshots start `agent-sdk serve` at bake time without a service
5
- * account, so neither store id is in process env. Execute-from-freeze binds
6
- * the deployment credential and store ids into `/run/cursor/secrets/` without
7
- * restarting July — the same pattern as {@link DEFAULT_CURSOR_API_KEY_FILE}.
2
+ * Resolves platform-managed storage bindings for hosted deployments.
8
3
  */
9
4
  export declare const DEFAULT_AGENT_SERVE_STORE_SOURCE_ID_FILE = "/run/cursor/secrets/AGENT_SERVE_STORE_SOURCE_ID";
10
5
  export declare const DEFAULT_AGENT_SERVE_FRAMEWORK_STORE_SOURCE_ID_FILE = "/run/cursor/secrets/AGENT_SERVE_FRAMEWORK_STORE_SOURCE_ID";
11
6
  export declare const DEFAULT_AGENT_SERVE_STORE_PROTOCOL_FILE = "/run/cursor/secrets/AGENT_SERVE_STORE_PROTOCOL";
12
7
  /**
13
- * Pin value selecting the factory store API (`/internal/agentsdk/store`)
14
- * over `/v0/agent-serve-files`. Any other value — including a newer pin this
15
- * runtime does not know — falls back to `/v0`, so the pin fails safe in both
16
- * directions.
8
+ * Transport mode that enables batched file operations. Unknown values use
9
+ * the compatibility transport.
17
10
  */
18
11
  export declare const AGENT_SERVE_FACTORY_FLUSH_PROTOCOL = "factory-flush-v1";
19
12
  /**
20
- * Pin value additionally enabling the domain-call lane
21
- * (`POST /internal/agentsdk/store/api/<call>`), where the server owns the
22
- * storage pattern for framework state — starting with `memory.append`. A
23
- * strict superset of {@link AGENT_SERVE_FACTORY_FLUSH_PROTOCOL}: verbs keep
24
- * riding the factory flush wire under this pin too. The same fail-safe
25
- * applies in both directions — an unknown value keeps today's behavior, and
26
- * re-pinning to `factory-flush-v1` turns the domain lane back off without a
27
- * client change.
13
+ * Transport mode that adds managed domain operations to
14
+ * {@link AGENT_SERVE_FACTORY_FLUSH_PROTOCOL}.
28
15
  */
29
16
  export declare const AGENT_SERVE_FACTORY_API_PROTOCOL = "factory-api-v1";
30
- /**
31
- * Does this pin select the factory flush wire for the store verbs? True for
32
- * the flush pin and for the domain-API superset pin.
33
- */
17
+ /** True when the transport supports batched file operations. */
34
18
  export declare function storeProtocolEnablesFactoryFlush(protocol: string | undefined): boolean;
35
- /**
36
- * Does this pin enable the domain-call lane (server-owned storage patterns)?
37
- * Only its exact value does; everything else keeps the client-side patterns.
38
- */
19
+ /** True when the transport supports managed domain operations. */
39
20
  export declare function storeProtocolEnablesStoreApi(protocol: string | undefined): boolean;
40
- /** Deployment user-land store: env, then task-bind file. */
21
+ /** Resolve the author-facing managed file store. */
41
22
  export declare function resolveDeploymentStoreSourceIdSync(env?: NodeJS.ProcessEnv): string | undefined;
42
- /** Engine framework store: env, then task-bind file. */
23
+ /** Resolve the framework-only managed file store. */
43
24
  export declare function resolveFrameworkStoreSourceIdSync(env?: NodeJS.ProcessEnv): string | undefined;
44
25
  /**
45
- * Store protocol pin: env, then task-bind file. The control plane binds
46
- * `factory-flush-v1` on every hosted v2 pod. Absence or an unknown value
47
- * still means `/v0/agent-serve-files`. Resolved lazily per operation like
48
- * the store ids, so a pod bound after serve start takes effect without a
49
- * restart.
26
+ * Resolve the managed-storage transport mode. Callers resolve it lazily so
27
+ * platform updates take effect without recreating the storage client.
50
28
  */
51
29
  export declare function resolveStoreProtocolSync(env?: NodeJS.ProcessEnv): string | undefined;
52
30
  export type CursorManagedV2StoreIds = {
@@ -54,10 +32,8 @@ export type CursorManagedV2StoreIds = {
54
32
  frameworkStoreSourceId: string;
55
33
  };
56
34
  /**
57
- * Resolve the complete managed-v2 store identity at the process boundary.
58
- *
59
- * Freeze snapshots construct storage before task bind, so callers keep this
60
- * resolver lazy. Once an operation needs storage, both ids are mandatory.
35
+ * Resolve both managed architecture-v2 storage identities. Callers keep this
36
+ * resolver lazy, and both identities are mandatory once storage is used.
61
37
  */
62
38
  export declare function requireCursorManagedV2StoreIdsSync(env?: NodeJS.ProcessEnv): CursorManagedV2StoreIds;
63
39
  //# sourceMappingURL=hosted-store-secrets.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"hosted-store-secrets.d.ts","sourceRoot":"","sources":["../../../src/internal/cursor/hosted-store-secrets.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,eAAO,MAAM,wCAAwC,oDACF,CAAC;AAEpD,eAAO,MAAM,kDAAkD,8DACF,CAAC;AAE9D,eAAO,MAAM,uCAAuC,mDACF,CAAC;AAEnD;;;;;GAKG;AACH,eAAO,MAAM,kCAAkC,qBAAqB,CAAC;AAErE;;;;;;;;;GASG;AACH,eAAO,MAAM,gCAAgC,mBAAmB,CAAC;AAEjE;;;GAGG;AACH,wBAAgB,gCAAgC,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAItF;AAED;;;GAGG;AACH,wBAAgB,4BAA4B,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAElF;AA4BD,4DAA4D;AAC5D,wBAAgB,kCAAkC,CAChD,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,MAAM,GAAG,SAAS,CAUpB;AAED,wDAAwD;AACxD,wBAAgB,iCAAiC,CAC/C,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,MAAM,GAAG,SAAS,CAUpB;AAED;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,GAAG,SAAS,CAMjG;AAED,MAAM,MAAM,uBAAuB,GAAG;IACpC,uBAAuB,EAAE,MAAM,CAAC;IAChC,sBAAsB,EAAE,MAAM,CAAC;CAChC,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,kCAAkC,CAChD,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,uBAAuB,CASzB"}
1
+ {"version":3,"file":"hosted-store-secrets.d.ts","sourceRoot":"","sources":["../../../src/internal/cursor/hosted-store-secrets.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,eAAO,MAAM,wCAAwC,oDACF,CAAC;AAEpD,eAAO,MAAM,kDAAkD,8DACF,CAAC;AAE9D,eAAO,MAAM,uCAAuC,mDACF,CAAC;AAEnD;;;GAGG;AACH,eAAO,MAAM,kCAAkC,qBAAqB,CAAC;AAErE;;;GAGG;AACH,eAAO,MAAM,gCAAgC,mBAAmB,CAAC;AAEjE,gEAAgE;AAChE,wBAAgB,gCAAgC,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAItF;AAED,kEAAkE;AAClE,wBAAgB,4BAA4B,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAElF;AA4BD,oDAAoD;AACpD,wBAAgB,kCAAkC,CAChD,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,MAAM,GAAG,SAAS,CAUpB;AAED,qDAAqD;AACrD,wBAAgB,iCAAiC,CAC/C,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,MAAM,GAAG,SAAS,CAUpB;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,GAAG,SAAS,CAMjG;AAED,MAAM,MAAM,uBAAuB,GAAG;IACpC,uBAAuB,EAAE,MAAM,CAAC;IAChC,sBAAsB,EAAE,MAAM,CAAC;CAChC,CAAC;AAEF;;;GAGG;AACH,wBAAgB,kCAAkC,CAChD,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,uBAAuB,CASzB"}
@@ -1,44 +1,25 @@
1
1
  /**
2
- * Task-time bind paths for hosted deployment file-store source ids.
3
- *
4
- * Freeze v2 snapshots start `agent-sdk serve` at bake time without a service
5
- * account, so neither store id is in process env. Execute-from-freeze binds
6
- * the deployment credential and store ids into `/run/cursor/secrets/` without
7
- * restarting July — the same pattern as {@link DEFAULT_CURSOR_API_KEY_FILE}.
2
+ * Resolves platform-managed storage bindings for hosted deployments.
8
3
  */
9
4
  import { readFileSync } from "node:fs";
10
5
  export const DEFAULT_AGENT_SERVE_STORE_SOURCE_ID_FILE = "/run/cursor/secrets/AGENT_SERVE_STORE_SOURCE_ID";
11
6
  export const DEFAULT_AGENT_SERVE_FRAMEWORK_STORE_SOURCE_ID_FILE = "/run/cursor/secrets/AGENT_SERVE_FRAMEWORK_STORE_SOURCE_ID";
12
7
  export const DEFAULT_AGENT_SERVE_STORE_PROTOCOL_FILE = "/run/cursor/secrets/AGENT_SERVE_STORE_PROTOCOL";
13
8
  /**
14
- * Pin value selecting the factory store API (`/internal/agentsdk/store`)
15
- * over `/v0/agent-serve-files`. Any other value — including a newer pin this
16
- * runtime does not know — falls back to `/v0`, so the pin fails safe in both
17
- * directions.
9
+ * Transport mode that enables batched file operations. Unknown values use
10
+ * the compatibility transport.
18
11
  */
19
12
  export const AGENT_SERVE_FACTORY_FLUSH_PROTOCOL = "factory-flush-v1";
20
13
  /**
21
- * Pin value additionally enabling the domain-call lane
22
- * (`POST /internal/agentsdk/store/api/<call>`), where the server owns the
23
- * storage pattern for framework state — starting with `memory.append`. A
24
- * strict superset of {@link AGENT_SERVE_FACTORY_FLUSH_PROTOCOL}: verbs keep
25
- * riding the factory flush wire under this pin too. The same fail-safe
26
- * applies in both directions — an unknown value keeps today's behavior, and
27
- * re-pinning to `factory-flush-v1` turns the domain lane back off without a
28
- * client change.
14
+ * Transport mode that adds managed domain operations to
15
+ * {@link AGENT_SERVE_FACTORY_FLUSH_PROTOCOL}.
29
16
  */
30
17
  export const AGENT_SERVE_FACTORY_API_PROTOCOL = "factory-api-v1";
31
- /**
32
- * Does this pin select the factory flush wire for the store verbs? True for
33
- * the flush pin and for the domain-API superset pin.
34
- */
18
+ /** True when the transport supports batched file operations. */
35
19
  export function storeProtocolEnablesFactoryFlush(protocol) {
36
20
  return (protocol === AGENT_SERVE_FACTORY_FLUSH_PROTOCOL || protocol === AGENT_SERVE_FACTORY_API_PROTOCOL);
37
21
  }
38
- /**
39
- * Does this pin enable the domain-call lane (server-owned storage patterns)?
40
- * Only its exact value does; everything else keeps the client-side patterns.
41
- */
22
+ /** True when the transport supports managed domain operations. */
42
23
  export function storeProtocolEnablesStoreApi(protocol) {
43
24
  return protocol === AGENT_SERVE_FACTORY_API_PROTOCOL;
44
25
  }
@@ -63,7 +44,7 @@ function readBoundSecretFile(fileEnvVar, defaultPath, env) {
63
44
  const path = configured !== undefined && configured !== "" ? configured : defaultPath;
64
45
  return readTrimmedFile(path);
65
46
  }
66
- /** Deployment user-land store: env, then task-bind file. */
47
+ /** Resolve the author-facing managed file store. */
67
48
  export function resolveDeploymentStoreSourceIdSync(env = process.env) {
68
49
  var _a;
69
50
  const fromEnv = (_a = env[STORE_SOURCE_ID_ENV]) === null || _a === void 0 ? void 0 : _a.trim();
@@ -72,7 +53,7 @@ export function resolveDeploymentStoreSourceIdSync(env = process.env) {
72
53
  }
73
54
  return readBoundSecretFile(STORE_SOURCE_ID_FILE_ENV, DEFAULT_AGENT_SERVE_STORE_SOURCE_ID_FILE, env);
74
55
  }
75
- /** Engine framework store: env, then task-bind file. */
56
+ /** Resolve the framework-only managed file store. */
76
57
  export function resolveFrameworkStoreSourceIdSync(env = process.env) {
77
58
  var _a;
78
59
  const fromEnv = (_a = env[FRAMEWORK_STORE_SOURCE_ID_ENV]) === null || _a === void 0 ? void 0 : _a.trim();
@@ -82,11 +63,8 @@ export function resolveFrameworkStoreSourceIdSync(env = process.env) {
82
63
  return readBoundSecretFile(FRAMEWORK_STORE_SOURCE_ID_FILE_ENV, DEFAULT_AGENT_SERVE_FRAMEWORK_STORE_SOURCE_ID_FILE, env);
83
64
  }
84
65
  /**
85
- * Store protocol pin: env, then task-bind file. The control plane binds
86
- * `factory-flush-v1` on every hosted v2 pod. Absence or an unknown value
87
- * still means `/v0/agent-serve-files`. Resolved lazily per operation like
88
- * the store ids, so a pod bound after serve start takes effect without a
89
- * restart.
66
+ * Resolve the managed-storage transport mode. Callers resolve it lazily so
67
+ * platform updates take effect without recreating the storage client.
90
68
  */
91
69
  export function resolveStoreProtocolSync(env = process.env) {
92
70
  var _a;
@@ -97,10 +75,8 @@ export function resolveStoreProtocolSync(env = process.env) {
97
75
  return readBoundSecretFile(STORE_PROTOCOL_FILE_ENV, DEFAULT_AGENT_SERVE_STORE_PROTOCOL_FILE, env);
98
76
  }
99
77
  /**
100
- * Resolve the complete managed-v2 store identity at the process boundary.
101
- *
102
- * Freeze snapshots construct storage before task bind, so callers keep this
103
- * resolver lazy. Once an operation needs storage, both ids are mandatory.
78
+ * Resolve both managed architecture-v2 storage identities. Callers keep this
79
+ * resolver lazy, and both identities are mandatory once storage is used.
104
80
  */
105
81
  export function requireCursorManagedV2StoreIdsSync(env = process.env) {
106
82
  const deploymentStoreSourceId = resolveDeploymentStoreSourceIdSync(env);
@@ -1,29 +1,17 @@
1
1
  /**
2
- * The store API client: July's one gateway to the factory domain-call lane,
3
- * `POST /internal/agentsdk/store/api/<call>`. This module owns the whole
4
- * transport — base URL and deployment credential (the same resolution the
5
- * files sink uses, via `cursor-api-transport.ts`), envelope encoding,
6
- * response validation, typed error mapping, and the bounded backoff policy.
7
- * Feature modules (`memory.ts`, later `session-run-log.ts`, …) call typed
8
- * methods like {@link StoreApiClient.memoryAppend} and never hand-roll
9
- * fetch; future domain calls (`sessionRun.report`, `startLog.flush`, …) are
10
- * added here as new methods on this one client.
2
+ * Client for versioned Cursor-managed store operations.
11
3
  *
12
- * The lane is selected per pod by the task-bound store protocol pin:
13
- * {@link isStoreApiLaneEnabled} is true only under the exact
14
- * `factory-api-v1` pin AND with a provisioned deployment store. The
15
- * availability check is not redundant: the pin file is written by the hosted
16
- * task bind, but a local-dev env var could name the pin without any store to
17
- * serve reads — appending into the void. Both resolve lazily per call, so a
18
- * pin bound after serve start takes effect without a restart.
4
+ * This module owns transport, envelope encoding, response validation, typed
5
+ * errors, and bounded retries. Availability requires both a compatible
6
+ * transport and a managed store, resolved lazily for each call.
19
7
  */
20
8
  import { type CursorApiTransportOptions } from "./cursor-api-transport.js";
21
9
  export interface StoreApiClientOptions extends CursorApiTransportOptions {
22
- /** Deployment store source id override (lane availability check). */
10
+ /** Managed store binding override. */
23
11
  storeSourceId?: string;
24
12
  /** Lazy store source id, preferred over {@link storeSourceId}. */
25
13
  resolveStoreSourceId?: () => string | undefined;
26
- /** Lazy store protocol pin (default: env, then the task-bound file). */
14
+ /** Lazy transport selection override. */
27
15
  resolveStoreProtocol?: () => string | undefined;
28
16
  /** Backoff sleep override (tests). */
29
17
  sleep?: (ms: number) => Promise<void>;
@@ -33,14 +21,13 @@ export interface StoreApiClientOptions extends CursorApiTransportOptions {
33
21
  /**
34
22
  * How one domain call failed, after the client's bounded retries:
35
23
  *
36
- * - `rejected` — the server (or the client's own pre-check) refused the
24
+ * - `rejected`: the server (or the client's own pre-check) refused the
37
25
  * payload with a typed 4xx. Deterministic; never retried.
38
- * - `shed` — 429 from the per-deployment limiter or kill switch. Retried
39
- * only within the small Retry-After bound below; retrying harder against
40
- * a shed is exactly the stampede the domain lane exists to prevent.
41
- * - `unavailable` — 5xx or a network failure, retried up to the attempt
26
+ * - `shed`: a rate-limited request. Retried only within the small
27
+ * Retry-After bound below.
28
+ * - `unavailable`: 5xx or a network failure, retried up to the attempt
42
29
  * bound.
43
- * - `bad_response` — a 2xx whose body failed the response schema; a
30
+ * - `bad_response`: a 2xx whose body failed the response schema; a
44
31
  * contract break, not a transient, so never retried.
45
32
  */
46
33
  export type StoreApiFailureKind = "rejected" | "shed" | "unavailable" | "bad_response";
@@ -49,30 +36,21 @@ export declare class StoreApiCallError extends Error {
49
36
  readonly status?: number | undefined;
50
37
  constructor(kind: StoreApiFailureKind, message: string, status?: number | undefined);
51
38
  }
52
- /**
53
- * Is the domain-call lane on for this pod? Exact pin match plus a
54
- * provisioned deployment store; anything else keeps the client-side
55
- * patterns, fail-safe in both directions like the flush pin itself.
56
- */
39
+ /** True when managed store operations are available. */
57
40
  export declare function isStoreApiLaneEnabled(options?: StoreApiClientOptions): boolean;
58
41
  export type StoreApiClient = {
59
42
  /**
60
- * One `memory.append` domain call: the server appends the record to a
61
- * server-owned journal shard. Resolves on success; throws
62
- * {@link StoreApiCallError} after the bounded retries. The caller owns the
63
- * failure policy (memory drops the record — appending is advisory).
43
+ * Append one advisory memory record. Resolves when managed storage accepts
44
+ * it; throws {@link StoreApiCallError} after bounded retries.
64
45
  */
65
46
  memoryAppend(payload: {
66
47
  agent: string;
67
48
  record: Record<string, unknown>;
68
49
  }): Promise<void>;
69
50
  /**
70
- * One `memory.read` domain call plus the presigned byte fetch: the server
71
- * flushes the agent's pending append buffer (best-effort) and presigns
72
- * the canonical journal; this method then downloads it. Undefined while
73
- * the agent has no journal. Throws {@link StoreApiCallError} after the
74
- * bounded retries — the caller owns the failure policy (hydration keeps
75
- * the existing mirror).
51
+ * Read a best-effort memory snapshot. It may lag accepted appends, so the
52
+ * caller retains a longer local view. Returns `undefined` when no journal
53
+ * exists and throws {@link StoreApiCallError} after bounded retries.
76
54
  */
77
55
  memoryReadContent(payload: {
78
56
  agent: string;
@@ -1 +1 @@
1
- {"version":3,"file":"store-api-client.d.ts","sourceRoot":"","sources":["../../../src/internal/cursor/store-api-client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAYH,OAAO,EACL,KAAK,yBAAyB,EAI/B,MAAM,2BAA2B,CAAC;AAOnC,MAAM,WAAW,qBAAsB,SAAQ,yBAAyB;IACtE,qEAAqE;IACrE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,kEAAkE;IAClE,oBAAoB,CAAC,EAAE,MAAM,MAAM,GAAG,SAAS,CAAC;IAChD,wEAAwE;IACxE,oBAAoB,CAAC,EAAE,MAAM,MAAM,GAAG,SAAS,CAAC;IAChD,sCAAsC;IACtC,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACtC,sDAAsD;IACtD,MAAM,CAAC,EAAE,MAAM,MAAM,CAAC;CACvB;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,MAAM,mBAAmB,GAAG,UAAU,GAAG,MAAM,GAAG,aAAa,GAAG,cAAc,CAAC;AAEvF,qBAAa,iBAAkB,SAAQ,KAAK;IAExC,QAAQ,CAAC,IAAI,EAAE,mBAAmB;IAElC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM;IAH1B,YACW,IAAI,EAAE,mBAAmB,EAClC,OAAO,EAAE,MAAM,EACN,MAAM,CAAC,EAAE,MAAM,YAAA,EAIzB;CACF;AA0BD;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,GAAE,qBAA0B,GAAG,OAAO,CAWlF;AAED,MAAM,MAAM,cAAc,GAAG;IAC3B;;;;;OAKG;IACH,YAAY,CAAC,OAAO,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACzF;;;;;;;OAOG;IACH,iBAAiB,CAAC,OAAO,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC,CAAC;CAChF,CAAC;AAEF,wBAAgB,oBAAoB,CAAC,OAAO,GAAE,qBAA0B,GAAG,cAAc,CAoLxF"}
1
+ {"version":3,"file":"store-api-client.d.ts","sourceRoot":"","sources":["../../../src/internal/cursor/store-api-client.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAYH,OAAO,EACL,KAAK,yBAAyB,EAI/B,MAAM,2BAA2B,CAAC;AAOnC,MAAM,WAAW,qBAAsB,SAAQ,yBAAyB;IACtE,sCAAsC;IACtC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,kEAAkE;IAClE,oBAAoB,CAAC,EAAE,MAAM,MAAM,GAAG,SAAS,CAAC;IAChD,yCAAyC;IACzC,oBAAoB,CAAC,EAAE,MAAM,MAAM,GAAG,SAAS,CAAC;IAChD,sCAAsC;IACtC,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACtC,sDAAsD;IACtD,MAAM,CAAC,EAAE,MAAM,MAAM,CAAC;CACvB;AAED;;;;;;;;;;;GAWG;AACH,MAAM,MAAM,mBAAmB,GAAG,UAAU,GAAG,MAAM,GAAG,aAAa,GAAG,cAAc,CAAC;AAEvF,qBAAa,iBAAkB,SAAQ,KAAK;IAExC,QAAQ,CAAC,IAAI,EAAE,mBAAmB;IAElC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM;IAH1B,YACW,IAAI,EAAE,mBAAmB,EAClC,OAAO,EAAE,MAAM,EACN,MAAM,CAAC,EAAE,MAAM,YAAA,EAIzB;CACF;AAsBD,wDAAwD;AACxD,wBAAgB,qBAAqB,CAAC,OAAO,GAAE,qBAA0B,GAAG,OAAO,CAWlF;AAED,MAAM,MAAM,cAAc,GAAG;IAC3B;;;OAGG;IACH,YAAY,CAAC,OAAO,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACzF;;;;OAIG;IACH,iBAAiB,CAAC,OAAO,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC,CAAC;CAChF,CAAC;AAEF,wBAAgB,oBAAoB,CAAC,OAAO,GAAE,qBAA0B,GAAG,cAAc,CAkLxF"}