@cursor/bdk 0.2.8 → 0.2.10

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 (581) hide show
  1. package/dist/artifacts.js +3 -5
  2. package/dist/bin/agent-serve.d.ts +1 -0
  3. package/dist/bin/agent-serve.d.ts.map +1 -1
  4. package/dist/bin/agent-serve.js +820 -807
  5. package/dist/channels/bitbucket/api.js +305 -321
  6. package/dist/channels/bitbucket/binding.js +97 -61
  7. package/dist/channels/bitbucket/bitbucket-channel.d.ts +15 -1
  8. package/dist/channels/bitbucket/bitbucket-channel.d.ts.map +1 -1
  9. package/dist/channels/bitbucket/bitbucket-channel.js +95 -42
  10. package/dist/channels/bitbucket/bitbucket-webhook.d.ts +11 -0
  11. package/dist/channels/bitbucket/bitbucket-webhook.d.ts.map +1 -1
  12. package/dist/channels/bitbucket/bitbucket-webhook.js +214 -204
  13. package/dist/channels/bitbucket/checks.js +9 -21
  14. package/dist/channels/bitbucket/cursor-account.js +1 -1
  15. package/dist/channels/bitbucket/defaults.js +14 -4
  16. package/dist/channels/bitbucket/events.js +1 -2
  17. package/dist/channels/bitbucket/index.d.ts +6 -2
  18. package/dist/channels/bitbucket/index.d.ts.map +1 -1
  19. package/dist/channels/bitbucket/index.js +6 -2
  20. package/dist/channels/bitbucket/replay.js +80 -56
  21. package/dist/channels/bitbucket/state.js +16 -7
  22. package/dist/channels/bitbucket/types.d.ts +11 -2
  23. package/dist/channels/bitbucket/types.d.ts.map +1 -1
  24. package/dist/channels/checks.js +18 -28
  25. package/dist/channels/deployments/deployments-channel.js +26 -34
  26. package/dist/channels/github/api.js +216 -210
  27. package/dist/channels/github/auth.d.ts +5 -1
  28. package/dist/channels/github/auth.d.ts.map +1 -1
  29. package/dist/channels/github/auth.js +157 -174
  30. package/dist/channels/github/binding.js +48 -39
  31. package/dist/channels/github/checks.js +9 -14
  32. package/dist/channels/github/cursor-account.js +6 -11
  33. package/dist/channels/github/defaults.js +105 -130
  34. package/dist/channels/github/forward.js +13 -17
  35. package/dist/channels/github/github-channel.d.ts +43 -2
  36. package/dist/channels/github/github-channel.d.ts.map +1 -1
  37. package/dist/channels/github/github-channel.js +1228 -958
  38. package/dist/channels/github/progress.js +145 -146
  39. package/dist/channels/github/replay.js +30 -39
  40. package/dist/channels/github/state.js +40 -16
  41. package/dist/channels/github/types.d.ts +30 -6
  42. package/dist/channels/github/types.d.ts.map +1 -1
  43. package/dist/channels/gitlab/api.js +100 -114
  44. package/dist/channels/gitlab/binding.js +52 -33
  45. package/dist/channels/gitlab/checks.js +28 -29
  46. package/dist/channels/gitlab/cursor-account.js +1 -1
  47. package/dist/channels/gitlab/defaults.js +9 -3
  48. package/dist/channels/gitlab/gitlab-channel.d.ts +16 -1
  49. package/dist/channels/gitlab/gitlab-channel.d.ts.map +1 -1
  50. package/dist/channels/gitlab/gitlab-channel.js +95 -42
  51. package/dist/channels/gitlab/gitlab-webhook.d.ts +10 -1
  52. package/dist/channels/gitlab/gitlab-webhook.d.ts.map +1 -1
  53. package/dist/channels/gitlab/gitlab-webhook.js +282 -249
  54. package/dist/channels/gitlab/index.d.ts +6 -2
  55. package/dist/channels/gitlab/index.d.ts.map +1 -1
  56. package/dist/channels/gitlab/index.js +6 -2
  57. package/dist/channels/gitlab/replay.js +50 -27
  58. package/dist/channels/gitlab/state.js +14 -6
  59. package/dist/channels/gitlab/types.d.ts +13 -2
  60. package/dist/channels/gitlab/types.d.ts.map +1 -1
  61. package/dist/channels/origin/api.js +100 -116
  62. package/dist/channels/origin/binding.js +15 -16
  63. package/dist/channels/origin/checks.js +30 -28
  64. package/dist/channels/origin/defaults.js +50 -65
  65. package/dist/channels/origin/origin-channel.js +266 -272
  66. package/dist/channels/origin/origin-webhook.js +70 -88
  67. package/dist/channels/origin/reactions.js +9 -21
  68. package/dist/channels/origin/state.js +13 -5
  69. package/dist/channels/slack/agentic-delivery.js +426 -478
  70. package/dist/channels/slack/agentic-posted.js +9 -10
  71. package/dist/channels/slack/agentic-signals.js +2 -3
  72. package/dist/channels/slack/api.js +417 -427
  73. package/dist/channels/slack/approvals.js +1 -1
  74. package/dist/channels/slack/assistant.js +37 -47
  75. package/dist/channels/slack/attachments.js +188 -206
  76. package/dist/channels/slack/auth.js +8 -6
  77. package/dist/channels/slack/bot-mentions.js +31 -45
  78. package/dist/channels/slack/channel-watch.js +42 -48
  79. package/dist/channels/slack/cli-project.js +112 -137
  80. package/dist/channels/slack/code-fences.js +3 -5
  81. package/dist/channels/slack/constants.js +2 -2
  82. package/dist/channels/slack/credentials.js +23 -38
  83. package/dist/channels/slack/defaults.js +292 -331
  84. package/dist/channels/slack/dispatch.d.ts.map +1 -1
  85. package/dist/channels/slack/dispatch.js +533 -460
  86. package/dist/channels/slack/doctor.js +200 -214
  87. package/dist/channels/slack/eval-directive.js +79 -96
  88. package/dist/channels/slack/event-id-dedupe.js +1 -1
  89. package/dist/channels/slack/external-policy.js +26 -39
  90. package/dist/channels/slack/footer.js +28 -41
  91. package/dist/channels/slack/inbound.d.ts +1 -0
  92. package/dist/channels/slack/inbound.d.ts.map +1 -1
  93. package/dist/channels/slack/inbound.js +50 -31
  94. package/dist/channels/slack/init.d.ts +1 -5
  95. package/dist/channels/slack/init.d.ts.map +1 -1
  96. package/dist/channels/slack/init.js +42 -59
  97. package/dist/channels/slack/interactive.d.ts +9 -3
  98. package/dist/channels/slack/interactive.d.ts.map +1 -1
  99. package/dist/channels/slack/interactive.js +160 -162
  100. package/dist/channels/slack/links.js +1 -2
  101. package/dist/channels/slack/live-delivery.js +172 -190
  102. package/dist/channels/slack/manifest.d.ts.map +1 -1
  103. package/dist/channels/slack/manifest.js +44 -23
  104. package/dist/channels/slack/message-body.js +2 -2
  105. package/dist/channels/slack/nudge-carrier.js +30 -42
  106. package/dist/channels/slack/nudge-store.js +164 -191
  107. package/dist/channels/slack/paint-start.js +66 -81
  108. package/dist/channels/slack/placeholder.js +123 -152
  109. package/dist/channels/slack/pr-ref.js +1 -1
  110. package/dist/channels/slack/progress-delivery.js +65 -78
  111. package/dist/channels/slack/reasoning-card.js +36 -49
  112. package/dist/channels/slack/recording-sink.js +12 -24
  113. package/dist/channels/slack/reply-options.js +7 -12
  114. package/dist/channels/slack/self-identity.js +27 -35
  115. package/dist/channels/slack/sender-name.d.ts +12 -3
  116. package/dist/channels/slack/sender-name.d.ts.map +1 -1
  117. package/dist/channels/slack/sender-name.js +57 -61
  118. package/dist/channels/slack/setup.js +2 -4
  119. package/dist/channels/slack/slack-channel.d.ts +6 -4
  120. package/dist/channels/slack/slack-channel.d.ts.map +1 -1
  121. package/dist/channels/slack/slack-channel.js +441 -308
  122. package/dist/channels/slack/socket-mode.js +38 -52
  123. package/dist/channels/slack/thread-context.js +143 -160
  124. package/dist/channels/slack/tool-approval-events.js +149 -166
  125. package/dist/channels/slack/tool-cards.js +6 -11
  126. package/dist/channels/slack/tool-chip.js +1 -2
  127. package/dist/channels/slack/types.d.ts +15 -17
  128. package/dist/channels/slack/types.d.ts.map +1 -1
  129. package/dist/channels/slack/upload.js +84 -97
  130. package/dist/channels/slack/user-info.js +27 -41
  131. package/dist/channels.js +9 -20
  132. package/dist/dashboard-session-url.js +3 -4
  133. package/dist/docs/404.html +2 -2
  134. package/dist/docs/assets/{app.oyjtOr3W.js → app.DXI7bwox.js} +4 -4
  135. package/dist/docs/assets/{building-with-agents.md.BPjPFxFg.js → building-with-agents.md.Df87rAe1.js} +1 -1
  136. package/dist/docs/assets/chunks/@localSearchIndexroot.CtLtpWcx.js +1 -0
  137. package/dist/docs/assets/chunks/{VPLocalSearchBox.D0P6J_UJ.js → VPLocalSearchBox.BrbO5mEe.js} +1 -1
  138. package/dist/docs/assets/chunks/{arc.B0LY1J1h.js → arc.BOG1yms8.js} +1 -1
  139. package/dist/docs/assets/chunks/{architectureDiagram-Q4EWVU46.dPduLUxY.js → architectureDiagram-Q4EWVU46.C0hsMZnZ.js} +1 -1
  140. package/dist/docs/assets/chunks/{baseUniq.B_Ohm21h.js → baseUniq.H044KjKs.js} +1 -1
  141. package/dist/docs/assets/chunks/{blockDiagram-DXYQGD6D.B4zcanaJ.js → blockDiagram-DXYQGD6D.BsRW6GoB.js} +1 -1
  142. package/dist/docs/assets/chunks/{c4Diagram-AHTNJAMY.D9Iw21nx.js → c4Diagram-AHTNJAMY.B9HV5PFR.js} +1 -1
  143. package/dist/docs/assets/chunks/channel.CBwrU9rP.js +1 -0
  144. package/dist/docs/assets/chunks/{chunk-4BX2VUAB.DDVwRShI.js → chunk-4BX2VUAB.CPoT_ajl.js} +1 -1
  145. package/dist/docs/assets/chunks/{chunk-4TB4RGXK.DsYcdn1i.js → chunk-4TB4RGXK.DZBwWuCL.js} +1 -1
  146. package/dist/docs/assets/chunks/{chunk-55IACEB6.BzzQvcYp.js → chunk-55IACEB6.CZ3yTiyq.js} +1 -1
  147. package/dist/docs/assets/chunks/{chunk-EDXVE4YY.BMiXZ7FX.js → chunk-EDXVE4YY.6DfvHSd8.js} +1 -1
  148. package/dist/docs/assets/chunks/{chunk-FMBD7UC4.D_mBcLoc.js → chunk-FMBD7UC4.CpBj8HfK.js} +1 -1
  149. package/dist/docs/assets/chunks/{chunk-OYMX7WX6.CMVjWVMx.js → chunk-OYMX7WX6.BdKo8YqS.js} +1 -1
  150. package/dist/docs/assets/chunks/{chunk-QZHKN3VN.BG-FrPv9.js → chunk-QZHKN3VN.BnXNyxJx.js} +1 -1
  151. package/dist/docs/assets/chunks/{chunk-YZCP3GAM.CkFE1ap3.js → chunk-YZCP3GAM.Cg1OcF8G.js} +1 -1
  152. package/dist/docs/assets/chunks/classDiagram-6PBFFD2Q.CbC_mrvB.js +1 -0
  153. package/dist/docs/assets/chunks/classDiagram-v2-HSJHXN6E.CbC_mrvB.js +1 -0
  154. package/dist/docs/assets/chunks/clone.BTvFyY1a.js +1 -0
  155. package/dist/docs/assets/chunks/{cose-bilkent-S5V4N54A.BVNnCTvY.js → cose-bilkent-S5V4N54A.1SP8al9c.js} +1 -1
  156. package/dist/docs/assets/chunks/{dagre-KV5264BT.CDN5PR9l.js → dagre-KV5264BT.DS1L6hJt.js} +1 -1
  157. package/dist/docs/assets/chunks/{diagram-5BDNPKRD.DQRUlT-i.js → diagram-5BDNPKRD.ChsausbG.js} +1 -1
  158. package/dist/docs/assets/chunks/{diagram-G4DWMVQ6.CoeblYQT.js → diagram-G4DWMVQ6.3XsptNWj.js} +1 -1
  159. package/dist/docs/assets/chunks/{diagram-MMDJMWI5.DW3ymjl0.js → diagram-MMDJMWI5.DPA9Dk_P.js} +1 -1
  160. package/dist/docs/assets/chunks/{diagram-TYMM5635.BP0uN4Jw.js → diagram-TYMM5635.BVswXWrB.js} +1 -1
  161. package/dist/docs/assets/chunks/{erDiagram-SMLLAGMA.DVFUWEn4.js → erDiagram-SMLLAGMA.BSak5OSP.js} +1 -1
  162. package/dist/docs/assets/chunks/{flowDiagram-DWJPFMVM.HU-eHspv.js → flowDiagram-DWJPFMVM.CQgN4TTz.js} +1 -1
  163. package/dist/docs/assets/chunks/{ganttDiagram-T4ZO3ILL.DHNhXijY.js → ganttDiagram-T4ZO3ILL.GrT0kA4a.js} +1 -1
  164. package/dist/docs/assets/chunks/{gitGraphDiagram-UUTBAWPF.DkISXcO3.js → gitGraphDiagram-UUTBAWPF.CdS7Ucll.js} +1 -1
  165. package/dist/docs/assets/chunks/{graph.CCV0fuRR.js → graph.BVqKRmRo.js} +1 -1
  166. package/dist/docs/assets/chunks/{infoDiagram-42DDH7IO.bgILzOoc.js → infoDiagram-42DDH7IO.C3C9FRto.js} +1 -1
  167. package/dist/docs/assets/chunks/{ishikawaDiagram-UXIWVN3A.CuryXC0F.js → ishikawaDiagram-UXIWVN3A.2FuAh_Zj.js} +1 -1
  168. package/dist/docs/assets/chunks/{journeyDiagram-VCZTEJTY.BL1Pr-wu.js → journeyDiagram-VCZTEJTY.CaHMfK4b.js} +1 -1
  169. package/dist/docs/assets/chunks/{kanban-definition-6JOO6SKY.BbGjvk4l.js → kanban-definition-6JOO6SKY.CjhIUwcA.js} +1 -1
  170. package/dist/docs/assets/chunks/{layout.C4PfdldS.js → layout.CGU3gfSf.js} +1 -1
  171. package/dist/docs/assets/chunks/{linear.C3xD1T6X.js → linear.DaihpW_n.js} +1 -1
  172. package/dist/docs/assets/chunks/{min.CzgRAQ9c.js → min.BS-j8kHQ.js} +1 -1
  173. package/dist/docs/assets/chunks/{mindmap-definition-QFDTVHPH.CA9rSWum.js → mindmap-definition-QFDTVHPH.BVJ1Bbnk.js} +1 -1
  174. package/dist/docs/assets/chunks/{pieDiagram-DEJITSTG.B8MprgJu.js → pieDiagram-DEJITSTG.Cz1WIv9r.js} +1 -1
  175. package/dist/docs/assets/chunks/{quadrantDiagram-34T5L4WZ.DndDwbKT.js → quadrantDiagram-34T5L4WZ.DKLFxcjy.js} +1 -1
  176. package/dist/docs/assets/chunks/{requirementDiagram-MS252O5E.Zhfgwlnn.js → requirementDiagram-MS252O5E.BHegiK7x.js} +1 -1
  177. package/dist/docs/assets/chunks/{sankeyDiagram-XADWPNL6.B6RRm6N5.js → sankeyDiagram-XADWPNL6.DYkY6yPc.js} +1 -1
  178. package/dist/docs/assets/chunks/{sequenceDiagram-FGHM5R23.Bfmz-1PN.js → sequenceDiagram-FGHM5R23.DYQ1QUrI.js} +1 -1
  179. package/dist/docs/assets/chunks/{stateDiagram-FHFEXIEX.gbrdNqgj.js → stateDiagram-FHFEXIEX.Iru8BsFo.js} +1 -1
  180. package/dist/docs/assets/chunks/stateDiagram-v2-QKLJ7IA2.BYXl4LW6.js +1 -0
  181. package/dist/docs/assets/chunks/{theme.gpWjytMh.js → theme.DaplWQhQ.js} +2 -2
  182. package/dist/docs/assets/chunks/{timeline-definition-GMOUNBTQ.Bl1l7M1f.js → timeline-definition-GMOUNBTQ.BwFA8hiX.js} +1 -1
  183. package/dist/docs/assets/chunks/{vennDiagram-DHZGUBPP.Dfle4U0d.js → vennDiagram-DHZGUBPP.CZ60W1C_.js} +1 -1
  184. package/dist/docs/assets/chunks/wardley-RL74JXVD.iXazD3Z7.js +162 -0
  185. package/dist/docs/assets/chunks/{wardleyDiagram-NUSXRM2D.CM_4lmvZ.js → wardleyDiagram-NUSXRM2D.B69D2r8-.js} +1 -1
  186. package/dist/docs/assets/chunks/{xychartDiagram-5P7HB3ND.CHT5X28R.js → xychartDiagram-5P7HB3ND.CLPZEIU9.js} +1 -1
  187. package/dist/docs/assets/{deployment.md.BdqTiGdc.js → deployment.md.BYuEcDBv.js} +2 -2
  188. package/dist/docs/assets/{guides_bitbucket.md.BB6fqD-M.js → guides_bitbucket.md.CKUayYtD.js} +3 -3
  189. package/dist/docs/assets/{guides_bitbucket.md.BB6fqD-M.lean.js → guides_bitbucket.md.CKUayYtD.lean.js} +1 -1
  190. package/dist/docs/assets/{guides_github.md.Cr1Xlf-m.js → guides_github.md.TuNiZAOQ.js} +4 -4
  191. package/dist/docs/assets/{guides_github.md.Cr1Xlf-m.lean.js → guides_github.md.TuNiZAOQ.lean.js} +1 -1
  192. package/dist/docs/assets/{guides_gitlab.md.CMpmFi4M.js → guides_gitlab.md.CtNI4fSH.js} +4 -4
  193. package/dist/docs/assets/{guides_gitlab.md.CMpmFi4M.lean.js → guides_gitlab.md.CtNI4fSH.lean.js} +1 -1
  194. package/dist/docs/assets/guides_migrate.md.sCAvvlC6.js +7 -0
  195. package/dist/docs/assets/guides_migrate.md.sCAvvlC6.lean.js +1 -0
  196. package/dist/docs/assets/{reference_cli.md.GwugN3n-.js → reference_cli.md.dYCAL2lB.js} +4 -3
  197. package/dist/docs/assets/reference_cli.md.dYCAL2lB.lean.js +1 -0
  198. package/dist/docs/assets/{reference_skills.md.ClkMoQsV.js → reference_skills.md.C0guGcH0.js} +3 -3
  199. package/dist/docs/assets/troubleshooting.md.x-GBa7wN.js +1 -0
  200. package/dist/docs/assets/{troubleshooting.md.Bscj6ODe.lean.js → troubleshooting.md.x-GBa7wN.lean.js} +1 -1
  201. package/dist/docs/building-with-agents.html +37 -37
  202. package/dist/docs/building-with-agents.md +2 -0
  203. package/dist/docs/deployment.html +38 -38
  204. package/dist/docs/deployment.md +7 -0
  205. package/dist/docs/evals.html +36 -36
  206. package/dist/docs/guides/agent-to-agent.html +35 -35
  207. package/dist/docs/guides/bitbucket.html +38 -38
  208. package/dist/docs/guides/bitbucket.md +9 -1
  209. package/dist/docs/guides/cloud-agents.html +35 -35
  210. package/dist/docs/guides/convert-automation.html +35 -35
  211. package/dist/docs/guides/github.html +39 -39
  212. package/dist/docs/guides/github.md +20 -4
  213. package/dist/docs/guides/gitlab.html +38 -38
  214. package/dist/docs/guides/gitlab.md +9 -1
  215. package/dist/docs/guides/grokbot-agents.html +35 -35
  216. package/dist/docs/guides/hooks.html +35 -35
  217. package/dist/docs/guides/improve.html +35 -35
  218. package/dist/docs/guides/jev.html +35 -35
  219. package/dist/docs/guides/mcp-oauth.html +35 -35
  220. package/dist/docs/guides/migrate.html +66 -0
  221. package/dist/docs/guides/migrate.md +122 -0
  222. package/dist/docs/guides/opentelemetry.html +35 -35
  223. package/dist/docs/guides/slack.html +35 -35
  224. package/dist/docs/guides/webhooks.html +35 -35
  225. package/dist/docs/hashmap.json +1 -1
  226. package/dist/docs/hillclimbing.html +35 -35
  227. package/dist/docs/index.html +35 -35
  228. package/dist/docs/llms-full.txt +214 -6
  229. package/dist/docs/llms.txt +1 -0
  230. package/dist/docs/quickstart.html +35 -35
  231. package/dist/docs/reference/agent-config.html +35 -35
  232. package/dist/docs/reference/artifacts.html +35 -35
  233. package/dist/docs/reference/channels.html +35 -35
  234. package/dist/docs/reference/cli.html +39 -38
  235. package/dist/docs/reference/cli.md +39 -0
  236. package/dist/docs/reference/connections.html +35 -35
  237. package/dist/docs/reference/evals.html +35 -35
  238. package/dist/docs/reference/extensions.html +35 -35
  239. package/dist/docs/reference/hooks.html +35 -35
  240. package/dist/docs/reference/http-api.html +35 -35
  241. package/dist/docs/reference/instructions.html +35 -35
  242. package/dist/docs/reference/playground.html +35 -35
  243. package/dist/docs/reference/project-layout.html +35 -35
  244. package/dist/docs/reference/prompt.html +35 -35
  245. package/dist/docs/reference/schedules.html +35 -35
  246. package/dist/docs/reference/sessions.html +35 -35
  247. package/dist/docs/reference/skills.html +38 -38
  248. package/dist/docs/reference/subagents.html +35 -35
  249. package/dist/docs/reference/tools.html +35 -35
  250. package/dist/docs/templates/agentic-owners.html +35 -35
  251. package/dist/docs/templates/grokbot-agents.html +35 -35
  252. package/dist/docs/templates/security-reviewer.html +35 -35
  253. package/dist/docs/templates/thermo-quality-review.html +35 -35
  254. package/dist/docs/templates/thermo-review.html +35 -35
  255. package/dist/docs/templates/triage.html +35 -35
  256. package/dist/docs/troubleshooting.html +36 -36
  257. package/dist/docs/troubleshooting.md +1 -0
  258. package/dist/evals/assertions.js +20 -34
  259. package/dist/evals/expect.js +3 -6
  260. package/dist/evals/judge.js +5 -8
  261. package/dist/evals/loaders.js +45 -62
  262. package/dist/evals/matchers.js +2 -3
  263. package/dist/evals/reporters.js +43 -67
  264. package/dist/evals/results.js +1 -1
  265. package/dist/evals/run-facts.js +5 -6
  266. package/dist/evals.js +27 -15
  267. package/dist/extensions/cursor-cloud-agents/extension.js +4 -1
  268. package/dist/extensions/cursor-cloud-agents/lib/backend.d.ts +0 -1
  269. package/dist/extensions/cursor-cloud-agents/lib/backend.d.ts.map +1 -1
  270. package/dist/extensions/cursor-cloud-agents/lib/backend.js +101 -130
  271. package/dist/extensions/cursor-cloud-agents/lib/fleet.js +22 -38
  272. package/dist/extensions/cursor-cloud-agents/lib/repos.js +8 -10
  273. package/dist/extensions/cursor-cloud-agents/lib/transcript.js +2 -3
  274. package/dist/extensions/cursor-cloud-agents/lib/watch.js +52 -66
  275. package/dist/extensions/cursor-cloud-agents/reminders/cloud-agent-stop-watch.js +29 -40
  276. package/dist/extensions/cursor-cloud-agents/tools/cancel.js +6 -17
  277. package/dist/extensions/cursor-cloud-agents/tools/dump.js +25 -36
  278. package/dist/extensions/cursor-cloud-agents/tools/get.js +3 -14
  279. package/dist/extensions/cursor-cloud-agents/tools/launch.js +13 -21
  280. package/dist/extensions/cursor-cloud-agents/tools/list.d.ts.map +1 -1
  281. package/dist/extensions/cursor-cloud-agents/tools/list.js +9 -20
  282. package/dist/extensions/cursor-cloud-agents/tools/reply.js +5 -16
  283. package/dist/extensions/cursor-grokbot-agents/extension.js +4 -1
  284. package/dist/extensions/cursor-grokbot-agents/lib/agents.js +3 -3
  285. package/dist/extensions/cursor-grokbot-agents/lib/backend.js +53 -73
  286. package/dist/extensions/cursor-grokbot-agents/lib/contacts.js +10 -23
  287. package/dist/extensions/cursor-grokbot-agents/lib/conversation.js +112 -132
  288. package/dist/extensions/cursor-grokbot-agents/lib/lock.js +1 -2
  289. package/dist/extensions/cursor-grokbot-agents/tools/ask.js +5 -16
  290. package/dist/extensions/cursor-grokbot-agents/tools/check.js +4 -15
  291. package/dist/extensions/cursor-grokbot-agents/tools/interrupt.js +2 -13
  292. package/dist/extensions/cursor-grokbot-agents/tools/list.js +11 -23
  293. package/dist/extensions/jev/extension.js +3 -3
  294. package/dist/extensions/jev/lib/evaluate.js +43 -60
  295. package/dist/extensions/jev/tools/evaluate.js +6 -17
  296. package/dist/extensions/slack-communication/tools/post-file.js +1 -1
  297. package/dist/extensions.js +3 -5
  298. package/dist/files-backends/cursor-hosted.js +504 -523
  299. package/dist/files-backends/local-fs.js +72 -134
  300. package/dist/files.js +3 -3
  301. package/dist/filesystem.js +562 -861
  302. package/dist/index.js +16 -35
  303. package/dist/internal/advertise-tools.js +74 -86
  304. package/dist/internal/artifacts-store.js +298 -361
  305. package/dist/internal/as-of.js +2 -4
  306. package/dist/internal/authored-alias-hooks.js +6 -4
  307. package/dist/internal/authored-loaders.js +37 -52
  308. package/dist/internal/bounded-int.js +1 -2
  309. package/dist/internal/bounded.js +13 -24
  310. package/dist/internal/brand.js +1 -1
  311. package/dist/internal/browser-origin-guard.js +4 -4
  312. package/dist/internal/builtin-tools/artifacts.js +15 -27
  313. package/dist/internal/builtin-tools/index.js +2 -3
  314. package/dist/internal/builtin-tools/reminders.js +33 -52
  315. package/dist/internal/channel-architecture.d.ts +21 -0
  316. package/dist/internal/channel-architecture.d.ts.map +1 -0
  317. package/dist/internal/channel-architecture.js +41 -0
  318. package/dist/internal/channel-dispatch.js +3 -4
  319. package/dist/internal/channel-route-dispatch.js +40 -51
  320. package/dist/internal/channel-state.js +1 -1
  321. package/dist/internal/chat-client.js +319 -340
  322. package/dist/internal/cli-ax.js +1262 -1294
  323. package/dist/internal/cli-bitbucket.js +244 -272
  324. package/dist/internal/cli-convert-automation.js +137 -151
  325. package/dist/internal/cli-cursor.js +126 -147
  326. package/dist/internal/cli-deploy.d.ts.map +1 -1
  327. package/dist/internal/cli-deploy.js +1457 -1507
  328. package/dist/internal/cli-docs.js +130 -147
  329. package/dist/internal/cli-github.js +437 -476
  330. package/dist/internal/cli-gitlab.js +259 -288
  331. package/dist/internal/cli-images.js +266 -334
  332. package/dist/internal/cli-manifest.js +25 -37
  333. package/dist/internal/cli-mcp-oauth.js +228 -247
  334. package/dist/internal/cli-mcp.js +358 -383
  335. package/dist/internal/cli-migrate.d.ts +18 -0
  336. package/dist/internal/cli-migrate.d.ts.map +1 -0
  337. package/dist/internal/cli-migrate.js +136 -0
  338. package/dist/internal/cli-skills.js +35 -47
  339. package/dist/internal/cli-slack-manual.d.ts +0 -1
  340. package/dist/internal/cli-slack-manual.d.ts.map +1 -1
  341. package/dist/internal/cli-slack-manual.js +175 -204
  342. package/dist/internal/cli-slack.d.ts +1 -1
  343. package/dist/internal/cli-slack.d.ts.map +1 -1
  344. package/dist/internal/cli-slack.js +416 -456
  345. package/dist/internal/cloud-merge.js +7 -3
  346. package/dist/internal/cloud-turn-cost.js +8 -1
  347. package/dist/internal/connection-env.js +5 -6
  348. package/dist/internal/continuation-channel.js +10 -7
  349. package/dist/internal/continuation-identity.js +85 -67
  350. package/dist/internal/conversation-mirror.js +112 -131
  351. package/dist/internal/convert-automation/convert-workflow.js +21 -31
  352. package/dist/internal/cron.js +3 -3
  353. package/dist/internal/cursor/account-mcp.js +147 -146
  354. package/dist/internal/cursor/backend-client.js +290 -320
  355. package/dist/internal/cursor/bound-secret-file.js +3 -3
  356. package/dist/internal/cursor/credentials.d.ts +1 -0
  357. package/dist/internal/cursor/credentials.d.ts.map +1 -1
  358. package/dist/internal/cursor/credentials.js +130 -142
  359. package/dist/internal/cursor/cursor-api-transport.js +4 -8
  360. package/dist/internal/cursor/github-credentials.js +91 -108
  361. package/dist/internal/cursor/hosted-bound-secrets.js +3 -4
  362. package/dist/internal/cursor/hosted-deployment-secrets.js +1 -1
  363. package/dist/internal/cursor/hosted-store-secrets.js +5 -9
  364. package/dist/internal/cursor/session-token.js +36 -48
  365. package/dist/internal/cursor/store-api-client.js +77 -92
  366. package/dist/internal/cursor-account-mcp-auth.js +132 -149
  367. package/dist/internal/cursor-agent-template.js +1 -1
  368. package/dist/internal/cursor-deployment-relay.js +33 -54
  369. package/dist/internal/cursor-event-relay.js +65 -59
  370. package/dist/internal/cursor-relay-core.js +258 -286
  371. package/dist/internal/deferred-channel-session.js +3 -12
  372. package/dist/internal/deploy-client.js +410 -475
  373. package/dist/internal/deploy-manifest.d.ts +17 -0
  374. package/dist/internal/deploy-manifest.d.ts.map +1 -1
  375. package/dist/internal/deploy-manifest.js +71 -21
  376. package/dist/internal/deploy-source.js +31 -43
  377. package/dist/internal/discovery/agent-config.js +45 -59
  378. package/dist/internal/discovery/agent.js +276 -280
  379. package/dist/internal/discovery/channels.js +67 -80
  380. package/dist/internal/discovery/connections.js +286 -296
  381. package/dist/internal/discovery/context.js +2 -13
  382. package/dist/internal/discovery/cursor-plugin.js +223 -259
  383. package/dist/internal/discovery/extension-overlay.js +104 -131
  384. package/dist/internal/discovery/extensions.js +276 -281
  385. package/dist/internal/discovery/fs.js +56 -79
  386. package/dist/internal/discovery/hooks.js +39 -50
  387. package/dist/internal/discovery/info.js +17 -19
  388. package/dist/internal/discovery/instructions.js +58 -71
  389. package/dist/internal/discovery/modules.js +45 -58
  390. package/dist/internal/discovery/project.d.ts.map +1 -1
  391. package/dist/internal/discovery/project.js +192 -215
  392. package/dist/internal/discovery/reminders.js +41 -52
  393. package/dist/internal/discovery/runtime.js +1 -1
  394. package/dist/internal/discovery/schedules.js +71 -82
  395. package/dist/internal/discovery/seed-files.js +21 -32
  396. package/dist/internal/discovery/services.js +74 -96
  397. package/dist/internal/discovery/skills.js +77 -94
  398. package/dist/internal/discovery/subagent.js +79 -95
  399. package/dist/internal/discovery/tools.js +12 -23
  400. package/dist/internal/distribution.js +2 -2
  401. package/dist/internal/docs-site.js +30 -45
  402. package/dist/internal/duration.js +1 -1
  403. package/dist/internal/env-file.js +48 -64
  404. package/dist/internal/eval-judge-model.js +17 -28
  405. package/dist/internal/eval-run-store.js +265 -254
  406. package/dist/internal/eval-runner.d.ts +8 -0
  407. package/dist/internal/eval-runner.d.ts.map +1 -1
  408. package/dist/internal/eval-runner.js +406 -408
  409. package/dist/internal/eval-transport.d.ts +24 -0
  410. package/dist/internal/eval-transport.d.ts.map +1 -0
  411. package/dist/internal/eval-transport.js +22 -0
  412. package/dist/internal/evals-client.js +242 -246
  413. package/dist/internal/event-log.js +72 -120
  414. package/dist/internal/event-mapper.js +30 -31
  415. package/dist/internal/factory-resource-channel.js +16 -30
  416. package/dist/internal/filesystem/errors.js +6 -6
  417. package/dist/internal/filesystem/format.js +10 -13
  418. package/dist/internal/filesystem/merge.js +52 -94
  419. package/dist/internal/filesystem/nearest.js +15 -27
  420. package/dist/internal/filesystem/scratch.js +65 -85
  421. package/dist/internal/filesystem/tools.js +221 -241
  422. package/dist/internal/filesystem/walk.js +76 -143
  423. package/dist/internal/framework-file-storage.js +118 -139
  424. package/dist/internal/framework-storage-selection.js +21 -13
  425. package/dist/internal/frontmatter.js +4 -6
  426. package/dist/internal/github-fanout.js +50 -64
  427. package/dist/internal/guest-network.js +96 -109
  428. package/dist/internal/handleAgentServeTrigger.js +121 -126
  429. package/dist/internal/host-files.js +73 -88
  430. package/dist/internal/host-kv.js +21 -36
  431. package/dist/internal/host-otel.js +22 -19
  432. package/dist/internal/host-platforms.js +49 -63
  433. package/dist/internal/hosted-catch-protocol.d.ts +1 -0
  434. package/dist/internal/hosted-catch-protocol.d.ts.map +1 -1
  435. package/dist/internal/hosted-catch-protocol.js +1 -0
  436. package/dist/internal/hosted-catch.d.ts +5 -3
  437. package/dist/internal/hosted-catch.d.ts.map +1 -1
  438. package/dist/internal/hosted-catch.js +84 -93
  439. package/dist/internal/hosted-delivery-protocol.js +32 -8
  440. package/dist/internal/hosted-delivery.d.ts +13 -1
  441. package/dist/internal/hosted-delivery.d.ts.map +1 -1
  442. package/dist/internal/hosted-delivery.js +614 -584
  443. package/dist/internal/hosted-eval-cases.d.ts +21 -0
  444. package/dist/internal/hosted-eval-cases.d.ts.map +1 -0
  445. package/dist/internal/hosted-eval-cases.js +162 -0
  446. package/dist/internal/hosted-execution-diag.js +38 -30
  447. package/dist/internal/hosted-execution-flush.js +75 -66
  448. package/dist/internal/hosted-execution-latency.js +16 -8
  449. package/dist/internal/hosted-managed-automation.js +2 -2
  450. package/dist/internal/hosting.js +2 -3
  451. package/dist/internal/http-channel-define.js +4 -1
  452. package/dist/internal/http-channel.js +101 -112
  453. package/dist/internal/http-control-plane-session.d.ts +18 -1
  454. package/dist/internal/http-control-plane-session.d.ts.map +1 -1
  455. package/dist/internal/http-control-plane-session.js +66 -32
  456. package/dist/internal/incoming-headers-to-fetch.js +1 -2
  457. package/dist/internal/init-interview.js +73 -93
  458. package/dist/internal/init-project.js +182 -214
  459. package/dist/internal/init-scaffold.js +10 -21
  460. package/dist/internal/inline-stdio-mcp.js +80 -86
  461. package/dist/internal/install-cursor-skills.d.ts.map +1 -1
  462. package/dist/internal/install-cursor-skills.js +238 -274
  463. package/dist/internal/legacy-command-guard.js +18 -31
  464. package/dist/internal/listen-port.js +34 -45
  465. package/dist/internal/local-control-plane.js +293 -307
  466. package/dist/internal/local-env.js +1 -1
  467. package/dist/internal/local-ingress.js +15 -9
  468. package/dist/internal/log-ring.js +1 -2
  469. package/dist/internal/logs-client.js +207 -227
  470. package/dist/internal/map-pool.js +24 -38
  471. package/dist/internal/mcp-endpoint.js +204 -180
  472. package/dist/internal/mcp-host.js +165 -168
  473. package/dist/internal/mcp-oauth-on-demand.js +170 -207
  474. package/dist/internal/mcp-oauth-persist.js +15 -29
  475. package/dist/internal/mcp-oauth.js +209 -266
  476. package/dist/internal/named-webhook-secret.d.ts +39 -0
  477. package/dist/internal/named-webhook-secret.d.ts.map +1 -0
  478. package/dist/internal/named-webhook-secret.js +47 -0
  479. package/dist/internal/open-browser.js +2 -3
  480. package/dist/internal/otel/collector.js +104 -68
  481. package/dist/internal/otel/config.js +24 -37
  482. package/dist/internal/otel/http.js +5 -7
  483. package/dist/internal/otel/mcp.js +3 -12
  484. package/dist/internal/otel/runtime.js +69 -83
  485. package/dist/internal/package-inline-stdio.js +57 -65
  486. package/dist/internal/peer-connections.js +9 -5
  487. package/dist/internal/platform-schedule-sync.js +39 -54
  488. package/dist/internal/platform-timers.js +176 -210
  489. package/dist/internal/playground/static.js +1 -2
  490. package/dist/internal/playground/toolchain.js +37 -53
  491. package/dist/internal/playground-proxy.js +230 -270
  492. package/dist/internal/process-memory-telemetry.js +33 -51
  493. package/dist/internal/prompt-context.js +3 -6
  494. package/dist/internal/reminder-control-plane-protocol.js +46 -13
  495. package/dist/internal/reminder-runner.js +770 -785
  496. package/dist/internal/reminder-schedule.js +1 -1
  497. package/dist/internal/reminder-store.js +57 -78
  498. package/dist/internal/request-error-status.js +1 -3
  499. package/dist/internal/request-headers.js +2 -2
  500. package/dist/internal/resolve-prod-target.js +119 -135
  501. package/dist/internal/resolved-connections.js +16 -6
  502. package/dist/internal/run-client.js +221 -229
  503. package/dist/internal/runtime-dispatch-runner.js +18 -43
  504. package/dist/internal/schedule-runner.js +49 -58
  505. package/dist/internal/scm/pr-url.js +7 -6
  506. package/dist/internal/sdk-runner.js +388 -363
  507. package/dist/internal/serve-restart.js +26 -39
  508. package/dist/internal/server.d.ts.map +1 -1
  509. package/dist/internal/server.js +1283 -1244
  510. package/dist/internal/session-cost.js +7 -9
  511. package/dist/internal/session-engine.d.ts +3 -1
  512. package/dist/internal/session-engine.d.ts.map +1 -1
  513. package/dist/internal/session-engine.js +2801 -2777
  514. package/dist/internal/session-links.js +12 -16
  515. package/dist/internal/session-run-log.js +134 -82
  516. package/dist/internal/session-store.js +133 -164
  517. package/dist/internal/sessions-client.js +97 -118
  518. package/dist/internal/skill-catalog.js +18 -23
  519. package/dist/internal/skills-sync.js +16 -30
  520. package/dist/internal/slack-provision-client.js +90 -116
  521. package/dist/internal/start-log-store.js +48 -67
  522. package/dist/internal/steering.js +1 -2
  523. package/dist/internal/storage-coordinator.js +160 -196
  524. package/dist/internal/store-mirror.js +16 -30
  525. package/dist/internal/stream-progress.js +6 -8
  526. package/dist/internal/terminal-style.js +3 -4
  527. package/dist/internal/testing/scm-continuation-fixtures.js +6 -2
  528. package/dist/internal/testing/slack-continuation-fixtures.d.ts +26 -0
  529. package/dist/internal/testing/slack-continuation-fixtures.d.ts.map +1 -0
  530. package/dist/internal/testing/slack-continuation-fixtures.js +136 -0
  531. package/dist/internal/tool-catalog.js +11 -5
  532. package/dist/internal/tool-result.js +1 -1
  533. package/dist/internal/trajectory.js +19 -22
  534. package/dist/internal/turn-cost.js +52 -62
  535. package/dist/internal/turn-governor.js +5 -8
  536. package/dist/internal/turn-lease-store.js +85 -105
  537. package/dist/internal/turn-outbox.js +28 -43
  538. package/dist/internal/update-check.js +231 -259
  539. package/dist/internal/v2-hosting.js +1 -2
  540. package/dist/internal/workspace-sync.js +25 -41
  541. package/dist/internal/workspace.js +111 -139
  542. package/dist/kv/memory-kv.js +27 -51
  543. package/dist/memory.js +106 -148
  544. package/dist/otel.js +5 -8
  545. package/dist/playground/assets/index-DXm_VXAQ.css +1 -0
  546. package/dist/playground/assets/{index-MijLHTbB.js → index-JekUQERK.js} +45 -45
  547. package/dist/playground/index.html +2 -2
  548. package/dist/prompt.js +2 -4
  549. package/dist/storage-backends/cursor-hosted-v2.js +53 -83
  550. package/dist/storage-backends/cursor-hosted.js +105 -145
  551. package/dist/storage-backends/file-kv.js +100 -128
  552. package/dist/storage-protocol.js +3 -5
  553. package/dist/storage.js +17 -26
  554. package/dist/types.d.ts +68 -0
  555. package/dist/types.d.ts.map +1 -1
  556. package/dist/types.js +20 -18
  557. package/docs/building-with-agents.md +2 -0
  558. package/docs/deployment.md +7 -0
  559. package/docs/guides/bitbucket.md +9 -1
  560. package/docs/guides/github.md +20 -4
  561. package/docs/guides/gitlab.md +9 -1
  562. package/docs/guides/migrate.md +127 -0
  563. package/docs/reference/cli.md +39 -0
  564. package/docs/troubleshooting.md +1 -0
  565. package/package.json +1 -1
  566. package/skills/debug/SKILL.md +1 -0
  567. package/skills/github/SKILL.md +23 -0
  568. package/skills/migrate-v2/SKILL.md +264 -0
  569. package/dist/docs/assets/chunks/@localSearchIndexroot.C25zYVuc.js +0 -1
  570. package/dist/docs/assets/chunks/channel.CRUyWDV-.js +0 -1
  571. package/dist/docs/assets/chunks/classDiagram-6PBFFD2Q.CG_UObcQ.js +0 -1
  572. package/dist/docs/assets/chunks/classDiagram-v2-HSJHXN6E.CG_UObcQ.js +0 -1
  573. package/dist/docs/assets/chunks/clone.NYSZ9qZN.js +0 -1
  574. package/dist/docs/assets/chunks/stateDiagram-v2-QKLJ7IA2.DOOmulfQ.js +0 -1
  575. package/dist/docs/assets/chunks/wardley-RL74JXVD.BJrCW6xc.js +0 -162
  576. package/dist/docs/assets/reference_cli.md.GwugN3n-.lean.js +0 -1
  577. package/dist/docs/assets/troubleshooting.md.Bscj6ODe.js +0 -1
  578. package/dist/playground/assets/index-DPKLl4C_.css +0 -1
  579. /package/dist/docs/assets/{building-with-agents.md.BPjPFxFg.lean.js → building-with-agents.md.Df87rAe1.lean.js} +0 -0
  580. /package/dist/docs/assets/{deployment.md.BdqTiGdc.lean.js → deployment.md.BYuEcDBv.lean.js} +0 -0
  581. /package/dist/docs/assets/{reference_skills.md.ClkMoQsV.lean.js → reference_skills.md.C0guGcH0.lean.js} +0 -0
@@ -5,15 +5,6 @@
5
5
  * Cursor-managed hosting preserves artifacts across deployment replacement.
6
6
  * Self-hosted agents store them under `--state-root/artifacts`.
7
7
  */
8
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
9
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
10
- return new (P || (P = Promise))(function (resolve, reject) {
11
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
12
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
13
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
14
- step((generator = generator.apply(thisArg, _arguments || [])).next());
15
- });
16
- };
17
8
  import { createHash, randomUUID } from "node:crypto";
18
9
  import { mkdir, readdir, readFile, rename, rm, writeFile } from "node:fs/promises";
19
10
  import { join } from "node:path";
@@ -24,7 +15,7 @@ import { mapBounded } from "./bounded.js";
24
15
  /** Default {@link ArtifactPageOptions.limit}; also `GET /v1/artifacts`. */
25
16
  export const ARTIFACTS_PAGE_DEFAULT_LIMIT = 200;
26
17
  /** Ceiling for {@link ArtifactPageOptions.limit}; larger asks clamp. */
27
- export const ARTIFACTS_PAGE_MAX_LIMIT = 1000;
18
+ export const ARTIFACTS_PAGE_MAX_LIMIT = 1_000;
28
19
  /**
29
20
  * Rows examined per `page()` call, floor. Filters live in row bodies, so a
30
21
  * sparse filter must hydrate rows just to reject them; this stops one call
@@ -62,10 +53,9 @@ export const ARTIFACT_DEFAULT_KIND = "artifact";
62
53
  */
63
54
  export class ArtifactsStore {
64
55
  constructor(options) {
65
- var _a, _b;
66
56
  /** Serializes tags so read-modify-write upserts and eviction don't race. */
67
57
  this.tagChain = Promise.resolve();
68
- const sink = (_a = options.sink) !== null && _a !== void 0 ? _a : (isCursorHostedFilesAvailable() ? cursorHostedFiles() : undefined);
58
+ const sink = options.sink ?? (isCursorHostedFilesAvailable() ? cursorHostedFiles() : undefined);
69
59
  if (sink === undefined) {
70
60
  this.rows = createFilesystemRowStore(options.stateRoot);
71
61
  this.content = createFilesystemContentStore(options.stateRoot);
@@ -76,57 +66,54 @@ export class ArtifactsStore {
76
66
  }
77
67
  this.config = options.config;
78
68
  this.max = resolveArtifactsMax(options.config);
79
- this.enforceCap = (_b = options.enforceCap) !== null && _b !== void 0 ? _b : (() => true);
69
+ this.enforceCap = options.enforceCap ?? (() => true);
80
70
  }
81
71
  tag(input) {
82
72
  const result = this.tagChain.then(() => this.tagSerialized(input));
83
73
  this.tagChain = result.catch(() => { });
84
74
  return result;
85
75
  }
86
- tagSerialized(input) {
87
- return __awaiter(this, void 0, void 0, function* () {
88
- var _a, _b;
89
- const { kind, data } = this.resolveKindAndData(input);
90
- const id = input.key === undefined ? `art_${randomUUID()}` : artifactIdForKey(input.key);
91
- // Fresh random ids can't collide; only keyed tags upsert.
92
- const existing = input.key === undefined ? undefined : yield this.rows.get(id);
93
- const now = new Date().toISOString();
94
- const record = {
95
- id,
96
- kind,
97
- key: input.key,
98
- title: input.title,
99
- data,
100
- sessionId: input.sessionId,
101
- turnId: input.turnId,
102
- source: (_a = input.source) !== null && _a !== void 0 ? _a : "host",
103
- createdAt: (_b = existing === null || existing === void 0 ? void 0 : existing.createdAt) !== null && _b !== void 0 ? _b : now,
104
- updatedAt: now,
76
+ async tagSerialized(input) {
77
+ const { kind, data } = this.resolveKindAndData(input);
78
+ const id = input.key === undefined ? `art_${randomUUID()}` : artifactIdForKey(input.key);
79
+ // Fresh random ids can't collide; only keyed tags upsert.
80
+ const existing = input.key === undefined ? undefined : await this.rows.get(id);
81
+ const now = new Date().toISOString();
82
+ const record = {
83
+ id,
84
+ kind,
85
+ key: input.key,
86
+ title: input.title,
87
+ data,
88
+ sessionId: input.sessionId,
89
+ turnId: input.turnId,
90
+ source: input.source ?? "host",
91
+ createdAt: existing?.createdAt ?? now,
92
+ updatedAt: now,
93
+ };
94
+ if (input.contents !== undefined) {
95
+ const body = typeof input.contents === "string" ? Buffer.from(input.contents, "utf8") : input.contents;
96
+ await this.content.put(id, body);
97
+ record.content = {
98
+ size: body.byteLength,
99
+ contentType: input.contentType,
105
100
  };
106
- if (input.contents !== undefined) {
107
- const body = typeof input.contents === "string" ? Buffer.from(input.contents, "utf8") : input.contents;
108
- yield this.content.put(id, body);
109
- record.content = {
110
- size: body.byteLength,
111
- contentType: input.contentType,
112
- };
113
- }
114
- else if ((existing === null || existing === void 0 ? void 0 : existing.content) !== undefined) {
115
- if (existing.sessionId === record.sessionId) {
116
- record.content = existing.content;
117
- }
118
- else {
119
- // Keys are deployment-global: rebinding a keyed row to another
120
- // session must not carry the prior session's payload with it.
121
- yield this.content.delete(id);
122
- }
101
+ }
102
+ else if (existing?.content !== undefined) {
103
+ if (existing.sessionId === record.sessionId) {
104
+ record.content = existing.content;
123
105
  }
124
- yield this.rows.put(record);
125
- if (existing === undefined && this.enforceCap()) {
126
- yield this.evictPastCap();
106
+ else {
107
+ // Keys are deployment-global: rebinding a keyed row to another
108
+ // session must not carry the prior session's payload with it.
109
+ await this.content.delete(id);
127
110
  }
128
- return record;
129
- });
111
+ }
112
+ await this.rows.put(record);
113
+ if (existing === undefined && this.enforceCap()) {
114
+ await this.evictPastCap();
115
+ }
116
+ return record;
130
117
  }
131
118
  get(id) {
132
119
  return this.rows.get(id);
@@ -140,11 +127,9 @@ export class ArtifactsStore {
140
127
  * {@link ArtifactsApi.list} contract. Walk the full set via
141
128
  * {@link ArtifactsStore.page}.
142
129
  */
143
- list(filter) {
144
- return __awaiter(this, void 0, void 0, function* () {
145
- const page = yield this.page(filter);
146
- return page.records;
147
- });
130
+ async list(filter) {
131
+ const page = await this.page(filter);
132
+ return page.records;
148
133
  }
149
134
  /**
150
135
  * Bounded cursor pagination, newest-updated first. On a store whose
@@ -166,22 +151,19 @@ export class ArtifactsStore {
166
151
  * the caller received, and continues only while more *visible* records
167
152
  * remain, at the bounded cost of hydrating the full set.
168
153
  */
169
- page(options) {
170
- return __awaiter(this, void 0, void 0, function* () {
171
- var _a;
172
- const limit = Math.min(Math.max((_a = options === null || options === void 0 ? void 0 : options.limit) !== null && _a !== void 0 ? _a : ARTIFACTS_PAGE_DEFAULT_LIMIT, 1), ARTIFACTS_PAGE_MAX_LIMIT);
173
- const cursor = (options === null || options === void 0 ? void 0 : options.cursor) === undefined ? undefined : decodeArtifactPageCursor(options.cursor);
174
- const matches = (record) => ((options === null || options === void 0 ? void 0 : options.kind) === undefined || record.kind === options.kind) &&
175
- ((options === null || options === void 0 ? void 0 : options.sessionId) === undefined || record.sessionId === options.sessionId) &&
176
- ((options === null || options === void 0 ? void 0 : options.matches) === undefined || options.matches(record));
177
- if ((options === null || options === void 0 ? void 0 : options.matches) === undefined) {
178
- const metas = yield this.rows.listMeta();
179
- if (metas.some(meta => meta.mtimeMs !== undefined)) {
180
- return this.pageFromMetadata(metas, limit, cursor, matches, (options === null || options === void 0 ? void 0 : options.kind) !== undefined || (options === null || options === void 0 ? void 0 : options.sessionId) !== undefined);
181
- }
154
+ async page(options) {
155
+ const limit = Math.min(Math.max(options?.limit ?? ARTIFACTS_PAGE_DEFAULT_LIMIT, 1), ARTIFACTS_PAGE_MAX_LIMIT);
156
+ const cursor = options?.cursor === undefined ? undefined : decodeArtifactPageCursor(options.cursor);
157
+ const matches = (record) => (options?.kind === undefined || record.kind === options.kind) &&
158
+ (options?.sessionId === undefined || record.sessionId === options.sessionId) &&
159
+ (options?.matches === undefined || options.matches(record));
160
+ if (options?.matches === undefined) {
161
+ const metas = await this.rows.listMeta();
162
+ if (metas.some(meta => meta.mtimeMs !== undefined)) {
163
+ return this.pageFromMetadata(metas, limit, cursor, matches, options?.kind !== undefined || options?.sessionId !== undefined);
182
164
  }
183
- return this.pageFromRecords(limit, cursor, matches);
184
- });
165
+ }
166
+ return this.pageFromRecords(limit, cursor, matches);
185
167
  }
186
168
  /**
187
169
  * Metadata-ordered page: sort metas newest first, resume after the
@@ -189,85 +171,81 @@ export class ArtifactsStore {
189
171
  * budget runs out, or the metas do. The cursor marks the last *examined*
190
172
  * meta, so a budget-limited call still makes progress.
191
173
  */
192
- pageFromMetadata(metas, limit, cursor, matches, filtered) {
193
- return __awaiter(this, void 0, void 0, function* () {
194
- var _a, _b;
195
- var _c, _d, _e;
196
- const newestFirst = metas.sort((a, b) => byOldestModified(b, a));
197
- let start = 0;
198
- if (cursor !== undefined && cursor.kind === "mtime") {
199
- // Resume after (boundary stamp, rows of that cohort already
200
- // examined). Same-stamp rows sit contiguously in the sort, so the
201
- // pair names an exact position without identifying any row.
202
- start = newestFirst.findIndex(meta => { var _a; return ((_a = meta.mtimeMs) !== null && _a !== void 0 ? _a : 0) <= cursor.m; });
203
- if (start === -1) {
204
- return { records: [] };
205
- }
206
- let skipped = 0;
207
- while (start < newestFirst.length &&
208
- ((_c = (_a = newestFirst[start]) === null || _a === void 0 ? void 0 : _a.mtimeMs) !== null && _c !== void 0 ? _c : 0) === cursor.m &&
209
- skipped < cursor.s) {
210
- start += 1;
211
- skipped += 1;
212
- }
213
- if (start >= newestFirst.length) {
214
- return { records: [] };
215
- }
174
+ async pageFromMetadata(metas, limit, cursor, matches, filtered) {
175
+ const newestFirst = metas.sort((a, b) => byOldestModified(b, a));
176
+ let start = 0;
177
+ if (cursor !== undefined && cursor.kind === "mtime") {
178
+ // Resume after (boundary stamp, rows of that cohort already
179
+ // examined). Same-stamp rows sit contiguously in the sort, so the
180
+ // pair names an exact position without identifying any row.
181
+ start = newestFirst.findIndex(meta => (meta.mtimeMs ?? 0) <= cursor.m);
182
+ if (start === -1) {
183
+ return { records: [] };
216
184
  }
217
- // A cursor of the other kind means the store's listing gained mtimes
218
- // between pages (a mode flip, not caller error): restart from the top
219
- // rather than fail the walk.
220
- const budget = Math.max(limit, ARTIFACTS_PAGE_SCAN_MIN);
221
- const records = [];
222
- let examined = 0;
223
- let lastExamined = start - 1;
224
- // A batched row store hydrates a bigger slice per round trip. Without
225
- // one, keep the slice at the per-row fan-out bound. An unfiltered
226
- // page needs exactly the rows it returns — every hydrated row matches —
227
- // so cap its slice at the remaining page instead of over-hydrating a
228
- // full batch for a small `limit`.
229
- const scanBatchSize = this.rows.getMany !== undefined ? ARTIFACTS_SCAN_BATCH_ROWS : ROW_HYDRATION_CONCURRENCY;
230
- scan: while (lastExamined + 1 < newestFirst.length &&
231
- records.length < limit &&
232
- examined < budget) {
233
- const from = lastExamined + 1;
234
- const sliceCap = filtered ? scanBatchSize : Math.min(scanBatchSize, limit - records.length);
235
- const batch = newestFirst.slice(from, from + Math.min(sliceCap, budget - examined));
236
- const bodies = this.rows.getMany !== undefined
237
- ? yield this.rows.getMany(batch.map(meta => meta.id))
238
- : yield mapBounded(batch, ROW_HYDRATION_CONCURRENCY, meta => this.rows.get(meta.id));
239
- for (let i = 0; i < batch.length; i += 1) {
240
- lastExamined = from + i;
241
- examined += 1;
242
- const record = bodies[i];
243
- if (record !== undefined && matches(record)) {
244
- records.push(record);
245
- if (records.length === limit) {
246
- break scan;
247
- }
248
- }
249
- }
185
+ let skipped = 0;
186
+ while (start < newestFirst.length &&
187
+ (newestFirst[start]?.mtimeMs ?? 0) === cursor.m &&
188
+ skipped < cursor.s) {
189
+ start += 1;
190
+ skipped += 1;
250
191
  }
251
- if (lastExamined >= newestFirst.length - 1) {
252
- return { records };
192
+ if (start >= newestFirst.length) {
193
+ return { records: [] };
253
194
  }
254
- const boundary = (_d = newestFirst[lastExamined].mtimeMs) !== null && _d !== void 0 ? _d : 0;
255
- // How deep into the boundary's same-stamp cohort the scan got —
256
- // cohorts are contiguous, so count back from the last examined row.
257
- let cohortExamined = 0;
258
- for (let i = lastExamined; i >= 0 && ((_e = (_b = newestFirst[i]) === null || _b === void 0 ? void 0 : _b.mtimeMs) !== null && _e !== void 0 ? _e : 0) === boundary; i -= 1) {
259
- cohortExamined += 1;
195
+ }
196
+ // A cursor of the other kind means the store's listing gained mtimes
197
+ // between pages (a mode flip, not caller error): restart from the top
198
+ // rather than fail the walk.
199
+ const budget = Math.max(limit, ARTIFACTS_PAGE_SCAN_MIN);
200
+ const records = [];
201
+ let examined = 0;
202
+ let lastExamined = start - 1;
203
+ // A batched row store hydrates a bigger slice per round trip. Without
204
+ // one, keep the slice at the per-row fan-out bound. An unfiltered
205
+ // page needs exactly the rows it returns — every hydrated row matches —
206
+ // so cap its slice at the remaining page instead of over-hydrating a
207
+ // full batch for a small `limit`.
208
+ const scanBatchSize = this.rows.getMany !== undefined ? ARTIFACTS_SCAN_BATCH_ROWS : ROW_HYDRATION_CONCURRENCY;
209
+ scan: while (lastExamined + 1 < newestFirst.length &&
210
+ records.length < limit &&
211
+ examined < budget) {
212
+ const from = lastExamined + 1;
213
+ const sliceCap = filtered ? scanBatchSize : Math.min(scanBatchSize, limit - records.length);
214
+ const batch = newestFirst.slice(from, from + Math.min(sliceCap, budget - examined));
215
+ const bodies = this.rows.getMany !== undefined
216
+ ? await this.rows.getMany(batch.map(meta => meta.id))
217
+ : await mapBounded(batch, ROW_HYDRATION_CONCURRENCY, meta => this.rows.get(meta.id));
218
+ for (let i = 0; i < batch.length; i += 1) {
219
+ lastExamined = from + i;
220
+ examined += 1;
221
+ const record = bodies[i];
222
+ if (record !== undefined && matches(record)) {
223
+ records.push(record);
224
+ if (records.length === limit) {
225
+ break scan;
226
+ }
227
+ }
260
228
  }
261
- return {
262
- records,
263
- nextCursor: encodeArtifactPageCursor({
264
- v: 1,
265
- kind: "mtime",
266
- m: boundary,
267
- s: cohortExamined,
268
- }),
269
- };
270
- });
229
+ }
230
+ if (lastExamined >= newestFirst.length - 1) {
231
+ return { records };
232
+ }
233
+ const boundary = newestFirst[lastExamined].mtimeMs ?? 0;
234
+ // How deep into the boundary's same-stamp cohort the scan got —
235
+ // cohorts are contiguous, so count back from the last examined row.
236
+ let cohortExamined = 0;
237
+ for (let i = lastExamined; i >= 0 && (newestFirst[i]?.mtimeMs ?? 0) === boundary; i -= 1) {
238
+ cohortExamined += 1;
239
+ }
240
+ return {
241
+ records,
242
+ nextCursor: encodeArtifactPageCursor({
243
+ v: 1,
244
+ kind: "mtime",
245
+ m: boundary,
246
+ s: cohortExamined,
247
+ }),
248
+ };
271
249
  }
272
250
  /**
273
251
  * Hydrate-everything page: exact `updatedAt` order, cursor = the last
@@ -276,37 +254,35 @@ export class ArtifactsStore {
276
254
  * {@link ArtifactsStore.page} for why filtered callers must not receive
277
255
  * metadata-lane cursors.
278
256
  */
279
- pageFromRecords(limit, cursor, matches) {
280
- return __awaiter(this, void 0, void 0, function* () {
281
- const records = (yield this.rows.list()).filter(matches).sort(byNewestUpdated);
282
- let start = 0;
283
- if (cursor !== undefined && cursor.kind === "updated") {
284
- const position = {
285
- updatedAt: cursor.u,
286
- createdAt: cursor.c,
287
- id: cursor.id,
288
- };
289
- start = records.findIndex(record => byNewestUpdated(record, position) > 0);
290
- if (start === -1) {
291
- return { records: [] };
292
- }
293
- }
294
- const page = records.slice(start, start + limit);
295
- const last = page[page.length - 1];
296
- if (last === undefined || start + page.length >= records.length) {
297
- return { records: page };
298
- }
299
- return {
300
- records: page,
301
- nextCursor: encodeArtifactPageCursor({
302
- v: 1,
303
- kind: "updated",
304
- u: last.updatedAt,
305
- c: last.createdAt,
306
- id: last.id,
307
- }),
257
+ async pageFromRecords(limit, cursor, matches) {
258
+ const records = (await this.rows.list()).filter(matches).sort(byNewestUpdated);
259
+ let start = 0;
260
+ if (cursor !== undefined && cursor.kind === "updated") {
261
+ const position = {
262
+ updatedAt: cursor.u,
263
+ createdAt: cursor.c,
264
+ id: cursor.id,
308
265
  };
309
- });
266
+ start = records.findIndex(record => byNewestUpdated(record, position) > 0);
267
+ if (start === -1) {
268
+ return { records: [] };
269
+ }
270
+ }
271
+ const page = records.slice(start, start + limit);
272
+ const last = page[page.length - 1];
273
+ if (last === undefined || start + page.length >= records.length) {
274
+ return { records: page };
275
+ }
276
+ return {
277
+ records: page,
278
+ nextCursor: encodeArtifactPageCursor({
279
+ v: 1,
280
+ kind: "updated",
281
+ u: last.updatedAt,
282
+ c: last.createdAt,
283
+ id: last.id,
284
+ }),
285
+ };
310
286
  }
311
287
  /**
312
288
  * Resolve the effective kind (freeform when no kinds are declared) and
@@ -315,13 +291,11 @@ export class ArtifactsStore {
315
291
  * parsed output — defaults and coercions applied — is what gets stored.
316
292
  */
317
293
  resolveKindAndData(input) {
318
- var _a;
319
- var _b;
320
- const kind = (_b = input.kind) !== null && _b !== void 0 ? _b : ARTIFACT_DEFAULT_KIND;
294
+ const kind = input.kind ?? ARTIFACT_DEFAULT_KIND;
321
295
  if (kind.trim() === "") {
322
296
  throw new Error("artifacts.tag: kind must be a non-empty string");
323
297
  }
324
- const kinds = (_a = this.config) === null || _a === void 0 ? void 0 : _a.kinds;
298
+ const kinds = this.config?.kinds;
325
299
  if (kinds === undefined || Object.keys(kinds).length === 0) {
326
300
  return { kind, data: input.data };
327
301
  }
@@ -347,44 +321,40 @@ export class ArtifactsStore {
347
321
  * Deletes are capped per pass so a store far past the cap drains across
348
322
  * inserts instead of delaying one insert for the entire backlog.
349
323
  */
350
- evictPastCap() {
351
- return __awaiter(this, void 0, void 0, function* () {
352
- const metas = yield this.rows.listMeta();
353
- const excess = Math.min(metas.length - this.max, ARTIFACTS_EVICT_MAX_PER_PASS);
354
- if (excess <= 0) {
355
- return;
356
- }
357
- yield mapBounded(yield this.oldestRowIds(metas, excess), ROW_HYDRATION_CONCURRENCY, (id) => __awaiter(this, void 0, void 0, function* () {
358
- yield this.rows.delete(id);
359
- // Without the row body there is no `content` flag to consult;
360
- // delete the payload unconditionally — absent ones are a no-op.
361
- yield this.content.delete(id);
362
- }));
324
+ async evictPastCap() {
325
+ const metas = await this.rows.listMeta();
326
+ const excess = Math.min(metas.length - this.max, ARTIFACTS_EVICT_MAX_PER_PASS);
327
+ if (excess <= 0) {
328
+ return;
329
+ }
330
+ await mapBounded(await this.oldestRowIds(metas, excess), ROW_HYDRATION_CONCURRENCY, async (id) => {
331
+ await this.rows.delete(id);
332
+ // Without the row body there is no `content` flag to consult;
333
+ // delete the payload unconditionally — absent ones are a no-op.
334
+ await this.content.delete(id);
363
335
  });
364
336
  }
365
337
  /** The `excess` oldest row ids, cheapest available ordering first. */
366
- oldestRowIds(metas, excess) {
367
- return __awaiter(this, void 0, void 0, function* () {
368
- if (metas.some(meta => meta.mtimeMs !== undefined)) {
369
- // A store that tracks mtimes must never regress to per-insert
370
- // hydration. An entry missing one sorts oldest via the comparator's
371
- // `?? 0` and is evicted first, avoiding a full hydration on each insert.
372
- return metas
373
- .sort(byOldestModified)
374
- .slice(0, excess)
375
- .map(meta => meta.id);
376
- }
377
- // A store that tracks no modification times at all (the local
378
- // filesystem store, deliberately) leaves only the rows' own
379
- // `updatedAt`: hydrate — bounded — and order exactly. Corrupt rows
380
- // drop out of `list()`, so recompute the excess against the rows that
381
- // actually parsed.
382
- const records = yield this.rows.list();
383
- return records
384
- .sort((a, b) => byNewestUpdated(b, a))
385
- .slice(0, Math.min(excess, Math.max(0, records.length - this.max)))
386
- .map(record => record.id);
387
- });
338
+ async oldestRowIds(metas, excess) {
339
+ if (metas.some(meta => meta.mtimeMs !== undefined)) {
340
+ // A store that tracks mtimes must never regress to per-insert
341
+ // hydration. An entry missing one sorts oldest via the comparator's
342
+ // `?? 0` and is evicted first, avoiding a full hydration on each insert.
343
+ return metas
344
+ .sort(byOldestModified)
345
+ .slice(0, excess)
346
+ .map(meta => meta.id);
347
+ }
348
+ // A store that tracks no modification times at all (the local
349
+ // filesystem store, deliberately) leaves only the rows' own
350
+ // `updatedAt`: hydrate — bounded — and order exactly. Corrupt rows
351
+ // drop out of `list()`, so recompute the excess against the rows that
352
+ // actually parsed.
353
+ const records = await this.rows.list();
354
+ return records
355
+ .sort((a, b) => byNewestUpdated(b, a))
356
+ .slice(0, Math.min(excess, Math.max(0, records.length - this.max)))
357
+ .map(record => record.id);
388
358
  }
389
359
  }
390
360
  /** A syntactically invalid {@link ArtifactPageOptions.cursor}. */
@@ -403,7 +373,7 @@ function decodeArtifactPageCursor(raw) {
403
373
  try {
404
374
  value = JSON.parse(Buffer.from(raw, "base64url").toString("utf8"));
405
375
  }
406
- catch (_a) {
376
+ catch {
407
377
  throw new InvalidArtifactCursorError();
408
378
  }
409
379
  if (typeof value !== "object" || value === null) {
@@ -441,9 +411,8 @@ export function artifactIdForKey(key) {
441
411
  * the retention cap.
442
412
  */
443
413
  function byOldestModified(a, b) {
444
- var _a, _b;
445
414
  if (a.mtimeMs !== b.mtimeMs) {
446
- return ((_a = a.mtimeMs) !== null && _a !== void 0 ? _a : 0) - ((_b = b.mtimeMs) !== null && _b !== void 0 ? _b : 0);
415
+ return (a.mtimeMs ?? 0) - (b.mtimeMs ?? 0);
447
416
  }
448
417
  return a.id < b.id ? -1 : a.id > b.id ? 1 : 0;
449
418
  }
@@ -484,7 +453,7 @@ function parseRecordBytes(bytes) {
484
453
  try {
485
454
  value = JSON.parse(Buffer.from(bytes).toString("utf8"));
486
455
  }
487
- catch (_a) {
456
+ catch {
488
457
  // A corrupt row must not poison list().
489
458
  return undefined;
490
459
  }
@@ -500,58 +469,46 @@ function sinkBody(found) {
500
469
  function createSinkRowStore(sink, agentName) {
501
470
  const key = (id) => agentStoreKeys.artifactRow(agentName, id);
502
471
  return {
503
- get(id) {
504
- return __awaiter(this, void 0, void 0, function* () {
505
- return parseRecordBytes(sinkBody(yield sink.get(key(id))));
506
- });
472
+ async get(id) {
473
+ return parseRecordBytes(sinkBody(await sink.get(key(id))));
507
474
  },
508
- put(record) {
509
- return __awaiter(this, void 0, void 0, function* () {
510
- yield sink.put(key(record.id), Buffer.from(JSON.stringify(record), "utf8"));
511
- });
475
+ async put(record) {
476
+ await sink.put(key(record.id), Buffer.from(JSON.stringify(record), "utf8"));
512
477
  },
513
- delete(id) {
514
- return __awaiter(this, void 0, void 0, function* () {
515
- yield sink.delete(key(id));
516
- });
478
+ async delete(id) {
479
+ await sink.delete(key(id));
517
480
  },
518
- getMany(ids) {
519
- return __awaiter(this, void 0, void 0, function* () {
520
- const keys = ids.map(id => key(id));
521
- const bodies = sink.getMany !== undefined
522
- ? yield sink.getMany(keys)
523
- : yield mapBounded(keys, ROW_HYDRATION_CONCURRENCY, rowKey => sink.get(rowKey));
524
- return bodies.map(body => parseRecordBytes(sinkBody(body)));
525
- });
481
+ async getMany(ids) {
482
+ const keys = ids.map(id => key(id));
483
+ const bodies = sink.getMany !== undefined
484
+ ? await sink.getMany(keys)
485
+ : await mapBounded(keys, ROW_HYDRATION_CONCURRENCY, rowKey => sink.get(rowKey));
486
+ return bodies.map(body => parseRecordBytes(sinkBody(body)));
526
487
  },
527
- list() {
528
- return __awaiter(this, void 0, void 0, function* () {
529
- const entries = yield sink.list(agentStoreKeys.artifactRowPrefix(agentName));
530
- const bodies = sink.getMany !== undefined
531
- ? yield sink.getMany(entries.map(entry => entry.key))
532
- : yield mapBounded(entries, ROW_HYDRATION_CONCURRENCY, entry => sink.get(entry.key));
533
- const records = [];
534
- for (const body of bodies) {
535
- const record = parseRecordBytes(sinkBody(body));
536
- if (record !== undefined) {
537
- records.push(record);
538
- }
488
+ async list() {
489
+ const entries = await sink.list(agentStoreKeys.artifactRowPrefix(agentName));
490
+ const bodies = sink.getMany !== undefined
491
+ ? await sink.getMany(entries.map(entry => entry.key))
492
+ : await mapBounded(entries, ROW_HYDRATION_CONCURRENCY, entry => sink.get(entry.key));
493
+ const records = [];
494
+ for (const body of bodies) {
495
+ const record = parseRecordBytes(sinkBody(body));
496
+ if (record !== undefined) {
497
+ records.push(record);
539
498
  }
540
- return records;
541
- });
499
+ }
500
+ return records;
542
501
  },
543
- listMeta() {
544
- return __awaiter(this, void 0, void 0, function* () {
545
- const prefix = agentStoreKeys.artifactRowPrefix(agentName);
546
- const metas = [];
547
- for (const entry of yield sink.list(prefix)) {
548
- const id = rowIdFromName(entry.key.slice(prefix.length));
549
- if (id !== undefined) {
550
- metas.push({ id, mtimeMs: entry.mtimeMs });
551
- }
502
+ async listMeta() {
503
+ const prefix = agentStoreKeys.artifactRowPrefix(agentName);
504
+ const metas = [];
505
+ for (const entry of await sink.list(prefix)) {
506
+ const id = rowIdFromName(entry.key.slice(prefix.length));
507
+ if (id !== undefined) {
508
+ metas.push({ id, mtimeMs: entry.mtimeMs });
552
509
  }
553
- return metas;
554
- });
510
+ }
511
+ return metas;
555
512
  },
556
513
  };
557
514
  }
@@ -573,27 +530,21 @@ function rowIdFromName(name) {
573
530
  const id = decodeURIComponent(encoded);
574
531
  return encodeURIComponent(id) === encoded ? id : undefined;
575
532
  }
576
- catch (_a) {
533
+ catch {
577
534
  return undefined;
578
535
  }
579
536
  }
580
537
  function createSinkContentStore(sink, agentName) {
581
538
  const key = (id) => agentStoreKeys.artifactContent(agentName, id);
582
539
  return {
583
- get(id) {
584
- return __awaiter(this, void 0, void 0, function* () {
585
- return sinkBody(yield sink.get(key(id)));
586
- });
540
+ async get(id) {
541
+ return sinkBody(await sink.get(key(id)));
587
542
  },
588
- put(id, body) {
589
- return __awaiter(this, void 0, void 0, function* () {
590
- yield sink.put(key(id), body);
591
- });
543
+ async put(id, body) {
544
+ await sink.put(key(id), body);
592
545
  },
593
- delete(id) {
594
- return __awaiter(this, void 0, void 0, function* () {
595
- yield sink.delete(key(id));
596
- });
546
+ async delete(id) {
547
+ await sink.delete(key(id));
597
548
  },
598
549
  };
599
550
  }
@@ -602,9 +553,9 @@ function createFilesystemRowStore(stateRoot) {
602
553
  const filePath = (id) => join(dir, `${encodeURIComponent(id)}.json`);
603
554
  // Missing and corrupt rows both read as absent — a truncated/garbled
604
555
  // file must not poison list() (and with it every insert's eviction).
605
- const readRecord = (path) => __awaiter(this, void 0, void 0, function* () {
556
+ const readRecord = async (path) => {
606
557
  try {
607
- const value = JSON.parse(yield readFile(path, "utf8"));
558
+ const value = JSON.parse(await readFile(path, "utf8"));
608
559
  return isArtifactRecord(value) ? value : undefined;
609
560
  }
610
561
  catch (error) {
@@ -613,76 +564,68 @@ function createFilesystemRowStore(stateRoot) {
613
564
  }
614
565
  throw error;
615
566
  }
616
- });
567
+ };
617
568
  return {
618
569
  get(id) {
619
570
  return readRecord(filePath(id));
620
571
  },
621
- put(record) {
622
- return __awaiter(this, void 0, void 0, function* () {
623
- yield mkdir(dir, { recursive: true });
624
- const tmp = join(dir, `.tmp-${randomUUID()}`);
625
- yield writeFile(tmp, JSON.stringify(record), "utf8");
626
- yield rename(tmp, filePath(record.id));
627
- });
572
+ async put(record) {
573
+ await mkdir(dir, { recursive: true });
574
+ const tmp = join(dir, `.tmp-${randomUUID()}`);
575
+ await writeFile(tmp, JSON.stringify(record), "utf8");
576
+ await rename(tmp, filePath(record.id));
628
577
  },
629
- delete(id) {
630
- return __awaiter(this, void 0, void 0, function* () {
631
- yield rm(filePath(id), { force: true });
632
- });
578
+ async delete(id) {
579
+ await rm(filePath(id), { force: true });
633
580
  },
634
- list() {
635
- return __awaiter(this, void 0, void 0, function* () {
636
- let names;
637
- try {
638
- names = yield readdir(dir);
581
+ async list() {
582
+ let names;
583
+ try {
584
+ names = await readdir(dir);
585
+ }
586
+ catch (error) {
587
+ if (error.code === "ENOENT") {
588
+ return [];
639
589
  }
640
- catch (error) {
641
- if (error.code === "ENOENT") {
642
- return [];
643
- }
644
- throw error;
590
+ throw error;
591
+ }
592
+ const records = [];
593
+ for (const name of names.sort()) {
594
+ if (name.startsWith(".") || !name.endsWith(".json")) {
595
+ continue;
645
596
  }
646
- const records = [];
647
- for (const name of names.sort()) {
648
- if (name.startsWith(".") || !name.endsWith(".json")) {
649
- continue;
650
- }
651
- const record = yield readRecord(join(dir, name));
652
- if (record !== undefined) {
653
- records.push(record);
654
- }
597
+ const record = await readRecord(join(dir, name));
598
+ if (record !== undefined) {
599
+ records.push(record);
655
600
  }
656
- return records;
657
- });
601
+ }
602
+ return records;
658
603
  },
659
- listMeta() {
660
- return __awaiter(this, void 0, void 0, function* () {
661
- // No mtimes on purpose: local rows are cheap to hydrate, and the
662
- // rows' own `updatedAt` orders eviction exactly, immune to coarse
663
- // filesystem timestamp granularity.
664
- let names;
665
- try {
666
- names = yield readdir(dir);
604
+ async listMeta() {
605
+ // No mtimes on purpose: local rows are cheap to hydrate, and the
606
+ // rows' own `updatedAt` orders eviction exactly, immune to coarse
607
+ // filesystem timestamp granularity.
608
+ let names;
609
+ try {
610
+ names = await readdir(dir);
611
+ }
612
+ catch (error) {
613
+ if (error.code === "ENOENT") {
614
+ return [];
667
615
  }
668
- catch (error) {
669
- if (error.code === "ENOENT") {
670
- return [];
671
- }
672
- throw error;
616
+ throw error;
617
+ }
618
+ const metas = [];
619
+ for (const name of names) {
620
+ if (name.startsWith(".")) {
621
+ continue;
673
622
  }
674
- const metas = [];
675
- for (const name of names) {
676
- if (name.startsWith(".")) {
677
- continue;
678
- }
679
- const id = rowIdFromName(name);
680
- if (id !== undefined) {
681
- metas.push({ id });
682
- }
623
+ const id = rowIdFromName(name);
624
+ if (id !== undefined) {
625
+ metas.push({ id });
683
626
  }
684
- return metas;
685
- });
627
+ }
628
+ return metas;
686
629
  },
687
630
  };
688
631
  }
@@ -690,31 +633,25 @@ function createFilesystemContentStore(stateRoot) {
690
633
  const dir = join(stateRoot, "artifacts", "content");
691
634
  const filePath = (id) => join(dir, encodeURIComponent(id));
692
635
  return {
693
- get(id) {
694
- return __awaiter(this, void 0, void 0, function* () {
695
- try {
696
- return new Uint8Array(yield readFile(filePath(id)));
697
- }
698
- catch (error) {
699
- if (error.code === "ENOENT") {
700
- return undefined;
701
- }
702
- throw error;
636
+ async get(id) {
637
+ try {
638
+ return new Uint8Array(await readFile(filePath(id)));
639
+ }
640
+ catch (error) {
641
+ if (error.code === "ENOENT") {
642
+ return undefined;
703
643
  }
704
- });
644
+ throw error;
645
+ }
705
646
  },
706
- put(id, body) {
707
- return __awaiter(this, void 0, void 0, function* () {
708
- yield mkdir(dir, { recursive: true });
709
- const tmp = join(dir, `.tmp-${randomUUID()}`);
710
- yield writeFile(tmp, body);
711
- yield rename(tmp, filePath(id));
712
- });
647
+ async put(id, body) {
648
+ await mkdir(dir, { recursive: true });
649
+ const tmp = join(dir, `.tmp-${randomUUID()}`);
650
+ await writeFile(tmp, body);
651
+ await rename(tmp, filePath(id));
713
652
  },
714
- delete(id) {
715
- return __awaiter(this, void 0, void 0, function* () {
716
- yield rm(filePath(id), { force: true });
717
- });
653
+ async delete(id) {
654
+ await rm(filePath(id), { force: true });
718
655
  },
719
656
  };
720
657
  }