@cursor/bdk 0.2.9 → 0.2.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (569) hide show
  1. package/dist/artifacts.js +3 -5
  2. package/dist/bin/agent-serve.js +803 -812
  3. package/dist/channels/bitbucket/api.js +305 -321
  4. package/dist/channels/bitbucket/binding.js +97 -61
  5. package/dist/channels/bitbucket/bitbucket-channel.d.ts +15 -1
  6. package/dist/channels/bitbucket/bitbucket-channel.d.ts.map +1 -1
  7. package/dist/channels/bitbucket/bitbucket-channel.js +95 -42
  8. package/dist/channels/bitbucket/bitbucket-webhook.d.ts +11 -0
  9. package/dist/channels/bitbucket/bitbucket-webhook.d.ts.map +1 -1
  10. package/dist/channels/bitbucket/bitbucket-webhook.js +214 -204
  11. package/dist/channels/bitbucket/checks.js +9 -21
  12. package/dist/channels/bitbucket/cursor-account.js +1 -1
  13. package/dist/channels/bitbucket/defaults.js +14 -4
  14. package/dist/channels/bitbucket/events.js +1 -2
  15. package/dist/channels/bitbucket/index.d.ts +6 -2
  16. package/dist/channels/bitbucket/index.d.ts.map +1 -1
  17. package/dist/channels/bitbucket/index.js +6 -2
  18. package/dist/channels/bitbucket/replay.js +80 -56
  19. package/dist/channels/bitbucket/state.js +16 -7
  20. package/dist/channels/bitbucket/types.d.ts +11 -2
  21. package/dist/channels/bitbucket/types.d.ts.map +1 -1
  22. package/dist/channels/checks.js +18 -28
  23. package/dist/channels/deployments/deployments-channel.js +26 -34
  24. package/dist/channels/github/api.js +216 -210
  25. package/dist/channels/github/auth.d.ts +5 -1
  26. package/dist/channels/github/auth.d.ts.map +1 -1
  27. package/dist/channels/github/auth.js +157 -174
  28. package/dist/channels/github/binding.js +48 -39
  29. package/dist/channels/github/checks.js +9 -14
  30. package/dist/channels/github/cursor-account.js +6 -11
  31. package/dist/channels/github/defaults.js +105 -130
  32. package/dist/channels/github/forward.js +13 -17
  33. package/dist/channels/github/github-channel.d.ts +43 -2
  34. package/dist/channels/github/github-channel.d.ts.map +1 -1
  35. package/dist/channels/github/github-channel.js +1228 -958
  36. package/dist/channels/github/progress.js +145 -146
  37. package/dist/channels/github/replay.js +30 -39
  38. package/dist/channels/github/state.js +40 -16
  39. package/dist/channels/github/types.d.ts +30 -6
  40. package/dist/channels/github/types.d.ts.map +1 -1
  41. package/dist/channels/gitlab/api.js +100 -114
  42. package/dist/channels/gitlab/binding.js +52 -33
  43. package/dist/channels/gitlab/checks.js +28 -29
  44. package/dist/channels/gitlab/cursor-account.js +1 -1
  45. package/dist/channels/gitlab/defaults.js +9 -3
  46. package/dist/channels/gitlab/gitlab-channel.d.ts +16 -1
  47. package/dist/channels/gitlab/gitlab-channel.d.ts.map +1 -1
  48. package/dist/channels/gitlab/gitlab-channel.js +95 -42
  49. package/dist/channels/gitlab/gitlab-webhook.d.ts +10 -1
  50. package/dist/channels/gitlab/gitlab-webhook.d.ts.map +1 -1
  51. package/dist/channels/gitlab/gitlab-webhook.js +282 -249
  52. package/dist/channels/gitlab/index.d.ts +6 -2
  53. package/dist/channels/gitlab/index.d.ts.map +1 -1
  54. package/dist/channels/gitlab/index.js +6 -2
  55. package/dist/channels/gitlab/replay.js +50 -27
  56. package/dist/channels/gitlab/state.js +14 -6
  57. package/dist/channels/gitlab/types.d.ts +13 -2
  58. package/dist/channels/gitlab/types.d.ts.map +1 -1
  59. package/dist/channels/origin/api.js +100 -116
  60. package/dist/channels/origin/binding.js +15 -16
  61. package/dist/channels/origin/checks.js +30 -28
  62. package/dist/channels/origin/defaults.js +50 -65
  63. package/dist/channels/origin/origin-channel.js +266 -272
  64. package/dist/channels/origin/origin-webhook.js +70 -88
  65. package/dist/channels/origin/reactions.js +9 -21
  66. package/dist/channels/origin/state.js +13 -5
  67. package/dist/channels/slack/agentic-delivery.js +426 -478
  68. package/dist/channels/slack/agentic-posted.js +9 -10
  69. package/dist/channels/slack/agentic-signals.js +2 -3
  70. package/dist/channels/slack/api.js +417 -427
  71. package/dist/channels/slack/approvals.js +1 -1
  72. package/dist/channels/slack/assistant.js +37 -47
  73. package/dist/channels/slack/attachments.js +188 -206
  74. package/dist/channels/slack/auth.js +8 -6
  75. package/dist/channels/slack/bot-mentions.js +31 -45
  76. package/dist/channels/slack/channel-watch.js +42 -48
  77. package/dist/channels/slack/cli-project.js +112 -137
  78. package/dist/channels/slack/code-fences.js +3 -5
  79. package/dist/channels/slack/constants.js +2 -2
  80. package/dist/channels/slack/credentials.js +23 -38
  81. package/dist/channels/slack/defaults.js +292 -331
  82. package/dist/channels/slack/dispatch.d.ts.map +1 -1
  83. package/dist/channels/slack/dispatch.js +533 -460
  84. package/dist/channels/slack/doctor.js +200 -214
  85. package/dist/channels/slack/eval-directive.js +79 -96
  86. package/dist/channels/slack/event-id-dedupe.js +1 -1
  87. package/dist/channels/slack/external-policy.js +26 -39
  88. package/dist/channels/slack/footer.js +28 -41
  89. package/dist/channels/slack/inbound.d.ts +1 -0
  90. package/dist/channels/slack/inbound.d.ts.map +1 -1
  91. package/dist/channels/slack/inbound.js +50 -31
  92. package/dist/channels/slack/init.d.ts +1 -5
  93. package/dist/channels/slack/init.d.ts.map +1 -1
  94. package/dist/channels/slack/init.js +42 -59
  95. package/dist/channels/slack/interactive.d.ts +9 -3
  96. package/dist/channels/slack/interactive.d.ts.map +1 -1
  97. package/dist/channels/slack/interactive.js +160 -162
  98. package/dist/channels/slack/links.js +1 -2
  99. package/dist/channels/slack/live-delivery.js +172 -190
  100. package/dist/channels/slack/manifest.d.ts.map +1 -1
  101. package/dist/channels/slack/manifest.js +44 -23
  102. package/dist/channels/slack/message-body.js +2 -2
  103. package/dist/channels/slack/nudge-carrier.js +30 -42
  104. package/dist/channels/slack/nudge-store.js +164 -191
  105. package/dist/channels/slack/paint-start.js +66 -81
  106. package/dist/channels/slack/placeholder.js +123 -152
  107. package/dist/channels/slack/pr-ref.js +1 -1
  108. package/dist/channels/slack/progress-delivery.js +65 -78
  109. package/dist/channels/slack/reasoning-card.js +36 -49
  110. package/dist/channels/slack/recording-sink.js +12 -24
  111. package/dist/channels/slack/reply-options.js +7 -12
  112. package/dist/channels/slack/self-identity.js +27 -35
  113. package/dist/channels/slack/sender-name.d.ts +12 -3
  114. package/dist/channels/slack/sender-name.d.ts.map +1 -1
  115. package/dist/channels/slack/sender-name.js +57 -61
  116. package/dist/channels/slack/setup.js +2 -4
  117. package/dist/channels/slack/slack-channel.d.ts +6 -4
  118. package/dist/channels/slack/slack-channel.d.ts.map +1 -1
  119. package/dist/channels/slack/slack-channel.js +441 -308
  120. package/dist/channels/slack/socket-mode.js +38 -52
  121. package/dist/channels/slack/thread-context.js +143 -160
  122. package/dist/channels/slack/tool-approval-events.js +149 -166
  123. package/dist/channels/slack/tool-cards.js +6 -11
  124. package/dist/channels/slack/tool-chip.js +1 -2
  125. package/dist/channels/slack/types.d.ts +15 -17
  126. package/dist/channels/slack/types.d.ts.map +1 -1
  127. package/dist/channels/slack/upload.js +84 -97
  128. package/dist/channels/slack/user-info.js +27 -41
  129. package/dist/channels.js +9 -20
  130. package/dist/dashboard-session-url.js +3 -4
  131. package/dist/docs/404.html +2 -2
  132. package/dist/docs/assets/{app.BNhEdGa8.js → app.DXI7bwox.js} +4 -4
  133. package/dist/docs/assets/{building-with-agents.md.BPjPFxFg.js → building-with-agents.md.Df87rAe1.js} +1 -1
  134. package/dist/docs/assets/chunks/@localSearchIndexroot.CtLtpWcx.js +1 -0
  135. package/dist/docs/assets/chunks/{VPLocalSearchBox.DIdUV1Ph.js → VPLocalSearchBox.BrbO5mEe.js} +1 -1
  136. package/dist/docs/assets/chunks/{arc.lELI4_SR.js → arc.BOG1yms8.js} +1 -1
  137. package/dist/docs/assets/chunks/{architectureDiagram-Q4EWVU46.iCMdvuoM.js → architectureDiagram-Q4EWVU46.C0hsMZnZ.js} +1 -1
  138. package/dist/docs/assets/chunks/{baseUniq.C1-nDJBf.js → baseUniq.H044KjKs.js} +1 -1
  139. package/dist/docs/assets/chunks/{blockDiagram-DXYQGD6D.ClemzBox.js → blockDiagram-DXYQGD6D.BsRW6GoB.js} +1 -1
  140. package/dist/docs/assets/chunks/{c4Diagram-AHTNJAMY.BqTak6cR.js → c4Diagram-AHTNJAMY.B9HV5PFR.js} +1 -1
  141. package/dist/docs/assets/chunks/channel.CBwrU9rP.js +1 -0
  142. package/dist/docs/assets/chunks/{chunk-4BX2VUAB.CUS3qs_R.js → chunk-4BX2VUAB.CPoT_ajl.js} +1 -1
  143. package/dist/docs/assets/chunks/{chunk-4TB4RGXK.dz5fdHcl.js → chunk-4TB4RGXK.DZBwWuCL.js} +1 -1
  144. package/dist/docs/assets/chunks/{chunk-55IACEB6.D6BEBmve.js → chunk-55IACEB6.CZ3yTiyq.js} +1 -1
  145. package/dist/docs/assets/chunks/{chunk-EDXVE4YY.B5uK4ID9.js → chunk-EDXVE4YY.6DfvHSd8.js} +1 -1
  146. package/dist/docs/assets/chunks/{chunk-FMBD7UC4.PgOJgNQs.js → chunk-FMBD7UC4.CpBj8HfK.js} +1 -1
  147. package/dist/docs/assets/chunks/{chunk-OYMX7WX6.CvkTrCii.js → chunk-OYMX7WX6.BdKo8YqS.js} +1 -1
  148. package/dist/docs/assets/chunks/{chunk-QZHKN3VN.BnSfKYsB.js → chunk-QZHKN3VN.BnXNyxJx.js} +1 -1
  149. package/dist/docs/assets/chunks/{chunk-YZCP3GAM.MZH6v5UC.js → chunk-YZCP3GAM.Cg1OcF8G.js} +1 -1
  150. package/dist/docs/assets/chunks/classDiagram-6PBFFD2Q.CbC_mrvB.js +1 -0
  151. package/dist/docs/assets/chunks/classDiagram-v2-HSJHXN6E.CbC_mrvB.js +1 -0
  152. package/dist/docs/assets/chunks/clone.BTvFyY1a.js +1 -0
  153. package/dist/docs/assets/chunks/{cose-bilkent-S5V4N54A.BBbw_YZi.js → cose-bilkent-S5V4N54A.1SP8al9c.js} +1 -1
  154. package/dist/docs/assets/chunks/{dagre-KV5264BT.CNJB2l7E.js → dagre-KV5264BT.DS1L6hJt.js} +1 -1
  155. package/dist/docs/assets/chunks/{diagram-5BDNPKRD.BQzlnFfq.js → diagram-5BDNPKRD.ChsausbG.js} +1 -1
  156. package/dist/docs/assets/chunks/{diagram-G4DWMVQ6.DkgqqZMz.js → diagram-G4DWMVQ6.3XsptNWj.js} +1 -1
  157. package/dist/docs/assets/chunks/{diagram-MMDJMWI5.DIT8L7H_.js → diagram-MMDJMWI5.DPA9Dk_P.js} +1 -1
  158. package/dist/docs/assets/chunks/{diagram-TYMM5635.3xLPZWGJ.js → diagram-TYMM5635.BVswXWrB.js} +1 -1
  159. package/dist/docs/assets/chunks/{erDiagram-SMLLAGMA.5_IHz8jF.js → erDiagram-SMLLAGMA.BSak5OSP.js} +1 -1
  160. package/dist/docs/assets/chunks/{flowDiagram-DWJPFMVM.BGUCXz8A.js → flowDiagram-DWJPFMVM.CQgN4TTz.js} +1 -1
  161. package/dist/docs/assets/chunks/{ganttDiagram-T4ZO3ILL.DbfFavS1.js → ganttDiagram-T4ZO3ILL.GrT0kA4a.js} +1 -1
  162. package/dist/docs/assets/chunks/{gitGraphDiagram-UUTBAWPF.D2yKdeNW.js → gitGraphDiagram-UUTBAWPF.CdS7Ucll.js} +1 -1
  163. package/dist/docs/assets/chunks/{graph.CSCxwHba.js → graph.BVqKRmRo.js} +1 -1
  164. package/dist/docs/assets/chunks/{infoDiagram-42DDH7IO.FDeb6xHY.js → infoDiagram-42DDH7IO.C3C9FRto.js} +1 -1
  165. package/dist/docs/assets/chunks/{ishikawaDiagram-UXIWVN3A.DbeYs9VL.js → ishikawaDiagram-UXIWVN3A.2FuAh_Zj.js} +1 -1
  166. package/dist/docs/assets/chunks/{journeyDiagram-VCZTEJTY.CWjKINpx.js → journeyDiagram-VCZTEJTY.CaHMfK4b.js} +1 -1
  167. package/dist/docs/assets/chunks/{kanban-definition-6JOO6SKY.B4FrAlwz.js → kanban-definition-6JOO6SKY.CjhIUwcA.js} +1 -1
  168. package/dist/docs/assets/chunks/{layout.DFGxQ9ab.js → layout.CGU3gfSf.js} +1 -1
  169. package/dist/docs/assets/chunks/{linear.BmjZ-G59.js → linear.DaihpW_n.js} +1 -1
  170. package/dist/docs/assets/chunks/{min.DZSxulMW.js → min.BS-j8kHQ.js} +1 -1
  171. package/dist/docs/assets/chunks/{mindmap-definition-QFDTVHPH.CHLi3-aN.js → mindmap-definition-QFDTVHPH.BVJ1Bbnk.js} +1 -1
  172. package/dist/docs/assets/chunks/{pieDiagram-DEJITSTG.DteG-CkU.js → pieDiagram-DEJITSTG.Cz1WIv9r.js} +1 -1
  173. package/dist/docs/assets/chunks/{quadrantDiagram-34T5L4WZ.D458ipN3.js → quadrantDiagram-34T5L4WZ.DKLFxcjy.js} +1 -1
  174. package/dist/docs/assets/chunks/{requirementDiagram-MS252O5E.DcFgUxst.js → requirementDiagram-MS252O5E.BHegiK7x.js} +1 -1
  175. package/dist/docs/assets/chunks/{sankeyDiagram-XADWPNL6.BwQAMmSA.js → sankeyDiagram-XADWPNL6.DYkY6yPc.js} +1 -1
  176. package/dist/docs/assets/chunks/{sequenceDiagram-FGHM5R23.B_Xdsrh9.js → sequenceDiagram-FGHM5R23.DYQ1QUrI.js} +1 -1
  177. package/dist/docs/assets/chunks/{stateDiagram-FHFEXIEX.CdfDW6-C.js → stateDiagram-FHFEXIEX.Iru8BsFo.js} +1 -1
  178. package/dist/docs/assets/chunks/stateDiagram-v2-QKLJ7IA2.BYXl4LW6.js +1 -0
  179. package/dist/docs/assets/chunks/{theme.sfdL3srp.js → theme.DaplWQhQ.js} +2 -2
  180. package/dist/docs/assets/chunks/{timeline-definition-GMOUNBTQ.56-4hXaC.js → timeline-definition-GMOUNBTQ.BwFA8hiX.js} +1 -1
  181. package/dist/docs/assets/chunks/{vennDiagram-DHZGUBPP.CvZSQBO7.js → vennDiagram-DHZGUBPP.CZ60W1C_.js} +1 -1
  182. package/dist/docs/assets/chunks/{wardley-RL74JXVD.C9qc8k39.js → wardley-RL74JXVD.iXazD3Z7.js} +1 -1
  183. package/dist/docs/assets/chunks/{wardleyDiagram-NUSXRM2D.D9s0nihi.js → wardleyDiagram-NUSXRM2D.B69D2r8-.js} +1 -1
  184. package/dist/docs/assets/chunks/{xychartDiagram-5P7HB3ND.BVJSpYrC.js → xychartDiagram-5P7HB3ND.CLPZEIU9.js} +1 -1
  185. package/dist/docs/assets/{deployment.md.BdqTiGdc.js → deployment.md.BYuEcDBv.js} +2 -2
  186. package/dist/docs/assets/{guides_bitbucket.md.BB6fqD-M.js → guides_bitbucket.md.CKUayYtD.js} +3 -3
  187. package/dist/docs/assets/{guides_bitbucket.md.BB6fqD-M.lean.js → guides_bitbucket.md.CKUayYtD.lean.js} +1 -1
  188. package/dist/docs/assets/{guides_github.md.Cr1Xlf-m.js → guides_github.md.TuNiZAOQ.js} +4 -4
  189. package/dist/docs/assets/{guides_github.md.Cr1Xlf-m.lean.js → guides_github.md.TuNiZAOQ.lean.js} +1 -1
  190. package/dist/docs/assets/{guides_gitlab.md.CMpmFi4M.js → guides_gitlab.md.CtNI4fSH.js} +4 -4
  191. package/dist/docs/assets/{guides_gitlab.md.CMpmFi4M.lean.js → guides_gitlab.md.CtNI4fSH.lean.js} +1 -1
  192. package/dist/docs/assets/guides_migrate.md.sCAvvlC6.js +7 -0
  193. package/dist/docs/assets/guides_migrate.md.sCAvvlC6.lean.js +1 -0
  194. package/dist/docs/assets/{reference_cli.md.GwugN3n-.js → reference_cli.md.dYCAL2lB.js} +4 -3
  195. package/dist/docs/assets/reference_cli.md.dYCAL2lB.lean.js +1 -0
  196. package/dist/docs/assets/troubleshooting.md.x-GBa7wN.js +1 -0
  197. package/dist/docs/assets/{troubleshooting.md.Bscj6ODe.lean.js → troubleshooting.md.x-GBa7wN.lean.js} +1 -1
  198. package/dist/docs/building-with-agents.html +37 -37
  199. package/dist/docs/building-with-agents.md +2 -0
  200. package/dist/docs/deployment.html +38 -38
  201. package/dist/docs/deployment.md +7 -0
  202. package/dist/docs/evals.html +36 -36
  203. package/dist/docs/guides/agent-to-agent.html +35 -35
  204. package/dist/docs/guides/bitbucket.html +38 -38
  205. package/dist/docs/guides/bitbucket.md +9 -1
  206. package/dist/docs/guides/cloud-agents.html +35 -35
  207. package/dist/docs/guides/convert-automation.html +35 -35
  208. package/dist/docs/guides/github.html +39 -39
  209. package/dist/docs/guides/github.md +20 -4
  210. package/dist/docs/guides/gitlab.html +38 -38
  211. package/dist/docs/guides/gitlab.md +9 -1
  212. package/dist/docs/guides/grokbot-agents.html +35 -35
  213. package/dist/docs/guides/hooks.html +35 -35
  214. package/dist/docs/guides/improve.html +35 -35
  215. package/dist/docs/guides/jev.html +35 -35
  216. package/dist/docs/guides/mcp-oauth.html +35 -35
  217. package/dist/docs/guides/migrate.html +66 -0
  218. package/dist/docs/guides/migrate.md +122 -0
  219. package/dist/docs/guides/opentelemetry.html +35 -35
  220. package/dist/docs/guides/slack.html +35 -35
  221. package/dist/docs/guides/webhooks.html +35 -35
  222. package/dist/docs/hashmap.json +1 -1
  223. package/dist/docs/hillclimbing.html +35 -35
  224. package/dist/docs/index.html +35 -35
  225. package/dist/docs/llms-full.txt +214 -6
  226. package/dist/docs/llms.txt +1 -0
  227. package/dist/docs/quickstart.html +35 -35
  228. package/dist/docs/reference/agent-config.html +35 -35
  229. package/dist/docs/reference/artifacts.html +35 -35
  230. package/dist/docs/reference/channels.html +35 -35
  231. package/dist/docs/reference/cli.html +39 -38
  232. package/dist/docs/reference/cli.md +39 -0
  233. package/dist/docs/reference/connections.html +35 -35
  234. package/dist/docs/reference/evals.html +35 -35
  235. package/dist/docs/reference/extensions.html +35 -35
  236. package/dist/docs/reference/hooks.html +35 -35
  237. package/dist/docs/reference/http-api.html +35 -35
  238. package/dist/docs/reference/instructions.html +35 -35
  239. package/dist/docs/reference/playground.html +35 -35
  240. package/dist/docs/reference/project-layout.html +35 -35
  241. package/dist/docs/reference/prompt.html +35 -35
  242. package/dist/docs/reference/schedules.html +35 -35
  243. package/dist/docs/reference/sessions.html +35 -35
  244. package/dist/docs/reference/skills.html +35 -35
  245. package/dist/docs/reference/subagents.html +35 -35
  246. package/dist/docs/reference/tools.html +35 -35
  247. package/dist/docs/templates/agentic-owners.html +35 -35
  248. package/dist/docs/templates/grokbot-agents.html +35 -35
  249. package/dist/docs/templates/security-reviewer.html +35 -35
  250. package/dist/docs/templates/thermo-quality-review.html +35 -35
  251. package/dist/docs/templates/thermo-review.html +35 -35
  252. package/dist/docs/templates/triage.html +35 -35
  253. package/dist/docs/troubleshooting.html +36 -36
  254. package/dist/docs/troubleshooting.md +1 -0
  255. package/dist/evals/assertions.js +20 -34
  256. package/dist/evals/expect.js +3 -6
  257. package/dist/evals/judge.js +5 -8
  258. package/dist/evals/loaders.js +45 -62
  259. package/dist/evals/matchers.js +2 -3
  260. package/dist/evals/reporters.js +43 -67
  261. package/dist/evals/results.js +1 -1
  262. package/dist/evals/run-facts.js +5 -6
  263. package/dist/evals.js +27 -15
  264. package/dist/extensions/cursor-cloud-agents/extension.js +4 -1
  265. package/dist/extensions/cursor-cloud-agents/lib/backend.js +100 -126
  266. package/dist/extensions/cursor-cloud-agents/lib/fleet.js +22 -38
  267. package/dist/extensions/cursor-cloud-agents/lib/repos.js +8 -10
  268. package/dist/extensions/cursor-cloud-agents/lib/transcript.js +2 -3
  269. package/dist/extensions/cursor-cloud-agents/lib/watch.js +52 -66
  270. package/dist/extensions/cursor-cloud-agents/reminders/cloud-agent-stop-watch.js +29 -40
  271. package/dist/extensions/cursor-cloud-agents/tools/cancel.js +6 -17
  272. package/dist/extensions/cursor-cloud-agents/tools/dump.js +25 -36
  273. package/dist/extensions/cursor-cloud-agents/tools/get.js +3 -14
  274. package/dist/extensions/cursor-cloud-agents/tools/launch.js +13 -21
  275. package/dist/extensions/cursor-cloud-agents/tools/list.js +8 -19
  276. package/dist/extensions/cursor-cloud-agents/tools/reply.js +5 -16
  277. package/dist/extensions/cursor-grokbot-agents/extension.js +4 -1
  278. package/dist/extensions/cursor-grokbot-agents/lib/agents.js +3 -3
  279. package/dist/extensions/cursor-grokbot-agents/lib/backend.js +53 -73
  280. package/dist/extensions/cursor-grokbot-agents/lib/contacts.js +10 -23
  281. package/dist/extensions/cursor-grokbot-agents/lib/conversation.js +112 -132
  282. package/dist/extensions/cursor-grokbot-agents/lib/lock.js +1 -2
  283. package/dist/extensions/cursor-grokbot-agents/tools/ask.js +5 -16
  284. package/dist/extensions/cursor-grokbot-agents/tools/check.js +4 -15
  285. package/dist/extensions/cursor-grokbot-agents/tools/interrupt.js +2 -13
  286. package/dist/extensions/cursor-grokbot-agents/tools/list.js +11 -23
  287. package/dist/extensions/jev/extension.js +3 -3
  288. package/dist/extensions/jev/lib/evaluate.js +43 -60
  289. package/dist/extensions/jev/tools/evaluate.js +6 -17
  290. package/dist/extensions/slack-communication/tools/post-file.js +1 -1
  291. package/dist/extensions.js +3 -5
  292. package/dist/files-backends/cursor-hosted.js +504 -523
  293. package/dist/files-backends/local-fs.js +72 -134
  294. package/dist/files.js +3 -3
  295. package/dist/filesystem.js +562 -861
  296. package/dist/index.js +16 -35
  297. package/dist/internal/advertise-tools.js +74 -86
  298. package/dist/internal/artifacts-store.js +298 -361
  299. package/dist/internal/as-of.js +2 -4
  300. package/dist/internal/authored-alias-hooks.js +6 -4
  301. package/dist/internal/authored-loaders.js +37 -52
  302. package/dist/internal/bounded-int.js +1 -2
  303. package/dist/internal/bounded.js +13 -24
  304. package/dist/internal/brand.js +1 -1
  305. package/dist/internal/browser-origin-guard.js +4 -4
  306. package/dist/internal/builtin-tools/artifacts.js +15 -27
  307. package/dist/internal/builtin-tools/index.js +2 -3
  308. package/dist/internal/builtin-tools/reminders.js +33 -52
  309. package/dist/internal/channel-architecture.d.ts +21 -0
  310. package/dist/internal/channel-architecture.d.ts.map +1 -0
  311. package/dist/internal/channel-architecture.js +41 -0
  312. package/dist/internal/channel-dispatch.js +3 -4
  313. package/dist/internal/channel-route-dispatch.js +40 -51
  314. package/dist/internal/channel-state.js +1 -1
  315. package/dist/internal/chat-client.js +319 -340
  316. package/dist/internal/cli-ax.js +1262 -1294
  317. package/dist/internal/cli-bitbucket.js +244 -272
  318. package/dist/internal/cli-convert-automation.js +137 -151
  319. package/dist/internal/cli-cursor.js +126 -147
  320. package/dist/internal/cli-deploy.d.ts.map +1 -1
  321. package/dist/internal/cli-deploy.js +1457 -1507
  322. package/dist/internal/cli-docs.js +130 -147
  323. package/dist/internal/cli-github.js +437 -476
  324. package/dist/internal/cli-gitlab.js +259 -288
  325. package/dist/internal/cli-images.js +266 -334
  326. package/dist/internal/cli-manifest.js +25 -37
  327. package/dist/internal/cli-mcp-oauth.js +228 -247
  328. package/dist/internal/cli-mcp.js +358 -383
  329. package/dist/internal/cli-migrate.js +73 -90
  330. package/dist/internal/cli-skills.js +35 -47
  331. package/dist/internal/cli-slack-manual.d.ts +0 -1
  332. package/dist/internal/cli-slack-manual.d.ts.map +1 -1
  333. package/dist/internal/cli-slack-manual.js +175 -204
  334. package/dist/internal/cli-slack.d.ts +1 -1
  335. package/dist/internal/cli-slack.d.ts.map +1 -1
  336. package/dist/internal/cli-slack.js +416 -456
  337. package/dist/internal/cloud-merge.js +7 -3
  338. package/dist/internal/cloud-turn-cost.js +8 -1
  339. package/dist/internal/connection-env.js +5 -6
  340. package/dist/internal/continuation-channel.js +10 -7
  341. package/dist/internal/continuation-identity.js +85 -67
  342. package/dist/internal/conversation-mirror.js +112 -131
  343. package/dist/internal/convert-automation/convert-workflow.js +21 -31
  344. package/dist/internal/cron.js +3 -3
  345. package/dist/internal/cursor/account-mcp.js +147 -146
  346. package/dist/internal/cursor/backend-client.js +290 -320
  347. package/dist/internal/cursor/bound-secret-file.js +3 -3
  348. package/dist/internal/cursor/credentials.js +127 -142
  349. package/dist/internal/cursor/cursor-api-transport.js +4 -8
  350. package/dist/internal/cursor/github-credentials.js +91 -108
  351. package/dist/internal/cursor/hosted-bound-secrets.js +3 -4
  352. package/dist/internal/cursor/hosted-deployment-secrets.js +1 -1
  353. package/dist/internal/cursor/hosted-store-secrets.js +5 -9
  354. package/dist/internal/cursor/session-token.js +36 -48
  355. package/dist/internal/cursor/store-api-client.js +77 -92
  356. package/dist/internal/cursor-account-mcp-auth.js +132 -149
  357. package/dist/internal/cursor-agent-template.js +1 -1
  358. package/dist/internal/cursor-deployment-relay.js +33 -54
  359. package/dist/internal/cursor-event-relay.js +65 -59
  360. package/dist/internal/cursor-relay-core.js +258 -286
  361. package/dist/internal/deferred-channel-session.js +3 -12
  362. package/dist/internal/deploy-client.d.ts.map +1 -1
  363. package/dist/internal/deploy-client.js +413 -475
  364. package/dist/internal/deploy-manifest.d.ts +17 -0
  365. package/dist/internal/deploy-manifest.d.ts.map +1 -1
  366. package/dist/internal/deploy-manifest.js +71 -21
  367. package/dist/internal/deploy-source.js +31 -43
  368. package/dist/internal/discovery/agent-config.js +45 -59
  369. package/dist/internal/discovery/agent.js +276 -280
  370. package/dist/internal/discovery/channels.js +67 -80
  371. package/dist/internal/discovery/connections.js +286 -296
  372. package/dist/internal/discovery/context.js +2 -13
  373. package/dist/internal/discovery/cursor-plugin.js +223 -259
  374. package/dist/internal/discovery/extension-overlay.js +104 -131
  375. package/dist/internal/discovery/extensions.js +276 -281
  376. package/dist/internal/discovery/fs.js +56 -79
  377. package/dist/internal/discovery/hooks.js +39 -50
  378. package/dist/internal/discovery/info.js +17 -19
  379. package/dist/internal/discovery/instructions.js +58 -71
  380. package/dist/internal/discovery/modules.js +45 -58
  381. package/dist/internal/discovery/project.d.ts.map +1 -1
  382. package/dist/internal/discovery/project.js +192 -215
  383. package/dist/internal/discovery/reminders.js +41 -52
  384. package/dist/internal/discovery/runtime.js +1 -1
  385. package/dist/internal/discovery/schedules.js +71 -82
  386. package/dist/internal/discovery/seed-files.js +21 -32
  387. package/dist/internal/discovery/services.js +74 -96
  388. package/dist/internal/discovery/skills.js +77 -94
  389. package/dist/internal/discovery/subagent.js +79 -95
  390. package/dist/internal/discovery/tools.js +12 -23
  391. package/dist/internal/distribution.js +2 -2
  392. package/dist/internal/docs-site.js +30 -45
  393. package/dist/internal/duration.js +1 -1
  394. package/dist/internal/env-file.js +48 -64
  395. package/dist/internal/eval-judge-model.js +17 -28
  396. package/dist/internal/eval-run-store.js +265 -254
  397. package/dist/internal/eval-runner.d.ts +8 -0
  398. package/dist/internal/eval-runner.d.ts.map +1 -1
  399. package/dist/internal/eval-runner.js +406 -408
  400. package/dist/internal/eval-transport.d.ts +24 -0
  401. package/dist/internal/eval-transport.d.ts.map +1 -0
  402. package/dist/internal/eval-transport.js +22 -0
  403. package/dist/internal/evals-client.js +242 -246
  404. package/dist/internal/event-log.js +72 -120
  405. package/dist/internal/event-mapper.js +30 -31
  406. package/dist/internal/factory-resource-channel.js +16 -30
  407. package/dist/internal/filesystem/errors.js +6 -6
  408. package/dist/internal/filesystem/format.js +10 -13
  409. package/dist/internal/filesystem/merge.js +52 -94
  410. package/dist/internal/filesystem/nearest.js +15 -27
  411. package/dist/internal/filesystem/scratch.js +65 -85
  412. package/dist/internal/filesystem/tools.js +221 -241
  413. package/dist/internal/filesystem/walk.js +76 -143
  414. package/dist/internal/framework-file-storage.js +118 -139
  415. package/dist/internal/framework-storage-selection.js +21 -13
  416. package/dist/internal/frontmatter.js +4 -6
  417. package/dist/internal/github-fanout.js +50 -64
  418. package/dist/internal/guest-network.js +96 -109
  419. package/dist/internal/handleAgentServeTrigger.js +121 -126
  420. package/dist/internal/host-files.js +73 -88
  421. package/dist/internal/host-kv.js +21 -36
  422. package/dist/internal/host-otel.js +22 -19
  423. package/dist/internal/host-platforms.js +49 -63
  424. package/dist/internal/hosted-catch-protocol.d.ts +1 -0
  425. package/dist/internal/hosted-catch-protocol.d.ts.map +1 -1
  426. package/dist/internal/hosted-catch-protocol.js +1 -0
  427. package/dist/internal/hosted-catch.d.ts +5 -3
  428. package/dist/internal/hosted-catch.d.ts.map +1 -1
  429. package/dist/internal/hosted-catch.js +84 -93
  430. package/dist/internal/hosted-delivery-protocol.js +32 -8
  431. package/dist/internal/hosted-delivery.d.ts +13 -1
  432. package/dist/internal/hosted-delivery.d.ts.map +1 -1
  433. package/dist/internal/hosted-delivery.js +614 -584
  434. package/dist/internal/hosted-eval-cases.d.ts +21 -0
  435. package/dist/internal/hosted-eval-cases.d.ts.map +1 -0
  436. package/dist/internal/hosted-eval-cases.js +162 -0
  437. package/dist/internal/hosted-execution-diag.js +38 -30
  438. package/dist/internal/hosted-execution-flush.js +75 -66
  439. package/dist/internal/hosted-execution-latency.js +16 -8
  440. package/dist/internal/hosted-managed-automation.js +2 -2
  441. package/dist/internal/hosting.js +2 -3
  442. package/dist/internal/http-channel-define.js +4 -1
  443. package/dist/internal/http-channel.js +101 -112
  444. package/dist/internal/http-control-plane-session.d.ts +18 -1
  445. package/dist/internal/http-control-plane-session.d.ts.map +1 -1
  446. package/dist/internal/http-control-plane-session.js +66 -32
  447. package/dist/internal/incoming-headers-to-fetch.js +1 -2
  448. package/dist/internal/init-interview.js +73 -93
  449. package/dist/internal/init-project.js +182 -214
  450. package/dist/internal/init-scaffold.js +10 -21
  451. package/dist/internal/inline-stdio-mcp.js +80 -86
  452. package/dist/internal/install-cursor-skills.js +231 -273
  453. package/dist/internal/legacy-command-guard.js +18 -31
  454. package/dist/internal/listen-port.js +34 -45
  455. package/dist/internal/local-control-plane.js +293 -307
  456. package/dist/internal/local-env.js +1 -1
  457. package/dist/internal/local-ingress.js +15 -9
  458. package/dist/internal/log-ring.js +1 -2
  459. package/dist/internal/logs-client.js +207 -227
  460. package/dist/internal/map-pool.js +24 -38
  461. package/dist/internal/mcp-endpoint.js +204 -180
  462. package/dist/internal/mcp-host.js +165 -168
  463. package/dist/internal/mcp-oauth-on-demand.js +170 -207
  464. package/dist/internal/mcp-oauth-persist.js +15 -29
  465. package/dist/internal/mcp-oauth.js +209 -266
  466. package/dist/internal/named-webhook-secret.d.ts +39 -0
  467. package/dist/internal/named-webhook-secret.d.ts.map +1 -0
  468. package/dist/internal/named-webhook-secret.js +47 -0
  469. package/dist/internal/open-browser.js +2 -3
  470. package/dist/internal/otel/collector.js +104 -68
  471. package/dist/internal/otel/config.js +24 -37
  472. package/dist/internal/otel/http.js +5 -7
  473. package/dist/internal/otel/mcp.js +3 -12
  474. package/dist/internal/otel/runtime.js +69 -83
  475. package/dist/internal/package-inline-stdio.js +57 -65
  476. package/dist/internal/peer-connections.js +9 -5
  477. package/dist/internal/platform-schedule-sync.js +39 -54
  478. package/dist/internal/platform-timers.js +176 -210
  479. package/dist/internal/playground/static.js +1 -2
  480. package/dist/internal/playground/toolchain.js +37 -53
  481. package/dist/internal/playground-proxy.js +230 -270
  482. package/dist/internal/process-memory-telemetry.js +33 -51
  483. package/dist/internal/prompt-context.js +3 -6
  484. package/dist/internal/reminder-control-plane-protocol.js +46 -13
  485. package/dist/internal/reminder-runner.js +770 -785
  486. package/dist/internal/reminder-schedule.js +1 -1
  487. package/dist/internal/reminder-store.js +57 -78
  488. package/dist/internal/request-error-status.js +1 -3
  489. package/dist/internal/request-headers.js +2 -2
  490. package/dist/internal/resolve-prod-target.js +119 -135
  491. package/dist/internal/resolved-connections.js +16 -6
  492. package/dist/internal/run-client.js +221 -229
  493. package/dist/internal/runtime-dispatch-runner.js +18 -43
  494. package/dist/internal/schedule-runner.js +49 -58
  495. package/dist/internal/scm/pr-url.js +7 -6
  496. package/dist/internal/sdk-runner.js +388 -363
  497. package/dist/internal/serve-restart.js +26 -39
  498. package/dist/internal/server.d.ts.map +1 -1
  499. package/dist/internal/server.js +1283 -1244
  500. package/dist/internal/session-cost.js +7 -9
  501. package/dist/internal/session-engine.d.ts +3 -1
  502. package/dist/internal/session-engine.d.ts.map +1 -1
  503. package/dist/internal/session-engine.js +2801 -2777
  504. package/dist/internal/session-links.js +12 -16
  505. package/dist/internal/session-run-log.js +134 -82
  506. package/dist/internal/session-store.js +133 -164
  507. package/dist/internal/sessions-client.js +97 -118
  508. package/dist/internal/skill-catalog.js +18 -23
  509. package/dist/internal/skills-sync.js +16 -30
  510. package/dist/internal/slack-provision-client.js +90 -116
  511. package/dist/internal/start-log-store.js +48 -67
  512. package/dist/internal/steering.js +1 -2
  513. package/dist/internal/storage-coordinator.js +160 -196
  514. package/dist/internal/store-mirror.js +16 -30
  515. package/dist/internal/stream-progress.js +6 -8
  516. package/dist/internal/terminal-style.js +3 -4
  517. package/dist/internal/testing/scm-continuation-fixtures.js +6 -2
  518. package/dist/internal/testing/slack-continuation-fixtures.d.ts +26 -0
  519. package/dist/internal/testing/slack-continuation-fixtures.d.ts.map +1 -0
  520. package/dist/internal/testing/slack-continuation-fixtures.js +136 -0
  521. package/dist/internal/tool-catalog.js +11 -5
  522. package/dist/internal/tool-result.js +1 -1
  523. package/dist/internal/trajectory.js +19 -22
  524. package/dist/internal/turn-cost.js +52 -62
  525. package/dist/internal/turn-governor.js +5 -8
  526. package/dist/internal/turn-lease-store.js +85 -105
  527. package/dist/internal/turn-outbox.js +28 -43
  528. package/dist/internal/update-check.js +231 -259
  529. package/dist/internal/v2-hosting.js +1 -2
  530. package/dist/internal/workspace-sync.js +25 -41
  531. package/dist/internal/workspace.js +111 -139
  532. package/dist/kv/memory-kv.js +27 -51
  533. package/dist/memory.js +106 -148
  534. package/dist/otel.js +5 -8
  535. package/dist/playground/assets/{index-Co4CUVTQ.js → index-Be0-1hw2.js} +45 -45
  536. package/dist/playground/assets/index-Clz6uHj9.css +1 -0
  537. package/dist/playground/index.html +2 -2
  538. package/dist/prompt.js +2 -4
  539. package/dist/storage-backends/cursor-hosted-v2.js +53 -83
  540. package/dist/storage-backends/cursor-hosted.js +105 -145
  541. package/dist/storage-backends/file-kv.js +100 -128
  542. package/dist/storage-protocol.js +3 -5
  543. package/dist/storage.js +17 -26
  544. package/dist/types.d.ts +68 -0
  545. package/dist/types.d.ts.map +1 -1
  546. package/dist/types.js +20 -18
  547. package/docs/building-with-agents.md +2 -0
  548. package/docs/deployment.md +7 -0
  549. package/docs/guides/bitbucket.md +9 -1
  550. package/docs/guides/github.md +20 -4
  551. package/docs/guides/gitlab.md +9 -1
  552. package/docs/guides/migrate.md +127 -0
  553. package/docs/reference/cli.md +39 -0
  554. package/docs/troubleshooting.md +1 -0
  555. package/package.json +1 -1
  556. package/skills/debug/SKILL.md +1 -0
  557. package/skills/github/SKILL.md +23 -0
  558. package/skills/migrate-v2/SKILL.md +51 -10
  559. package/dist/docs/assets/chunks/@localSearchIndexroot.BJ8UZggu.js +0 -1
  560. package/dist/docs/assets/chunks/channel.BTJ5J9FI.js +0 -1
  561. package/dist/docs/assets/chunks/classDiagram-6PBFFD2Q.D4BZ3cVV.js +0 -1
  562. package/dist/docs/assets/chunks/classDiagram-v2-HSJHXN6E.D4BZ3cVV.js +0 -1
  563. package/dist/docs/assets/chunks/clone.62tX-O-1.js +0 -1
  564. package/dist/docs/assets/chunks/stateDiagram-v2-QKLJ7IA2.DkTs1aEU.js +0 -1
  565. package/dist/docs/assets/reference_cli.md.GwugN3n-.lean.js +0 -1
  566. package/dist/docs/assets/troubleshooting.md.Bscj6ODe.js +0 -1
  567. package/dist/playground/assets/index-C1g_PTTZ.css +0 -1
  568. /package/dist/docs/assets/{building-with-agents.md.BPjPFxFg.lean.js → building-with-agents.md.Df87rAe1.lean.js} +0 -0
  569. /package/dist/docs/assets/{deployment.md.BdqTiGdc.lean.js → deployment.md.BYuEcDBv.lean.js} +0 -0
@@ -10,15 +10,6 @@
10
10
  * a send waits for an in-flight turn to settle first, so a reply always
11
11
  * attributes to the message that prompted it.
12
12
  */
13
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
14
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
15
- return new (P || (P = Promise))(function (resolve, reject) {
16
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
17
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
18
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
19
- step((generator = generator.apply(thisArg, _arguments || [])).next());
20
- });
21
- };
22
13
  import extension from "../extension.js";
23
14
  import { resolveAgentName } from "./agents.js";
24
15
  import { grokBotAgentsBackend, } from "./backend.js";
@@ -38,116 +29,107 @@ const MIN_IDLE_POLLS_WITHOUT_BUSY = 4;
38
29
  * was created by the call that fetched it; the allowance covers clock skew
39
30
  * between this host and the backend.
40
31
  */
41
- const CREATED_WINDOW_MS = 60000;
32
+ const CREATED_WINDOW_MS = 60_000;
42
33
  /** The transcript tail of an agent nobody has spoken to. */
43
34
  const EMPTY_TRANSCRIPT_TAIL = "-1";
44
35
  const agentLocks = new KeyedLock();
45
- export function ask(ctx, input) {
46
- return __awaiter(this, void 0, void 0, function* () {
47
- const name = resolveAgentName(input.agent, extension.config.agents);
48
- const backend = grokBotAgentsBackend();
49
- const startedAt = Date.now();
50
- const session = yield backend.session(name);
51
- return agentLocks.run(session.sessionId, () => __awaiter(this, void 0, void 0, function* () {
52
- var _a, _b;
53
- const contact = (yield listContacts(ctx)).find(candidate => candidate.sessionId === session.sessionId);
54
- const created = contact === undefined &&
55
- session.latestUpdatedSeq === EMPTY_TRANSCRIPT_TAIL &&
56
- session.createdAtMs >= startedAt - CREATED_WINDOW_MS;
57
- const deadline = Date.now() + input.waitSeconds * 1000;
58
- // A turn already in flight, from an earlier message or from the person
59
- // in the app, must settle first; otherwise its deliveries would read as
60
- // the reply to this message. Nothing is persisted on the way out, so
61
- // `check` still returns whatever landed meanwhile.
62
- const before = yield collectReplies(backend, session.sessionId, {
63
- cursor: (_a = contact === null || contact === void 0 ? void 0 : contact.cursor) !== null && _a !== void 0 ? _a : session.latestUpdatedSeq,
64
- deadline,
65
- confirmIdle: false,
66
- });
67
- if (before.status === "running") {
68
- throw new Error(`"${session.name}" is still working on an earlier message; nothing was sent. Call check to read that reply, wait, or interrupt it.`);
69
- }
70
- yield backend.send(session.sessionId, input.message);
71
- const replies = yield collectReplies(backend, session.sessionId, {
72
- cursor: before.cursor,
73
- deadline,
74
- confirmIdle: true,
75
- });
76
- const now = ctx.now().toISOString();
77
- yield saveContact(ctx, {
78
- name: session.name,
79
- sessionId: session.sessionId,
80
- cursor: replies.cursor,
81
- firstContactAt: (_b = contact === null || contact === void 0 ? void 0 : contact.firstContactAt) !== null && _b !== void 0 ? _b : now,
82
- lastContactAt: now,
83
- });
84
- const notes = [
85
- created
86
- ? `No Grok Bot agent named "${session.name}" existed on this account, so an empty one was created. Check the name if that is unexpected.`
87
- : undefined,
88
- runningNote(session.name, replies.status),
89
- ].filter(note => note !== undefined);
90
- return {
91
- agent: session.name,
92
- sessionId: session.sessionId,
93
- status: replies.status,
94
- reply: joinReplies(replies.deliveries),
95
- earlierReplies: before.deliveries.length === 0 ? undefined : before.deliveries,
96
- created: created ? true : undefined,
97
- note: notes.length === 0 ? undefined : notes.join(" "),
98
- };
99
- }));
100
- });
101
- }
102
- export function check(ctx, input) {
103
- return __awaiter(this, void 0, void 0, function* () {
104
- const contact = yield knownContact(ctx, input.agent);
105
- const backend = grokBotAgentsBackend();
106
- return agentLocks.run(contact.sessionId, () => __awaiter(this, void 0, void 0, function* () {
107
- var _a;
108
- // Re-read under the lock: a parallel call may have moved the cursor.
109
- const current = (_a = (yield listContacts(ctx)).find(candidate => candidate.sessionId === contact.sessionId)) !== null && _a !== void 0 ? _a : contact;
110
- const replies = yield collectReplies(backend, current.sessionId, {
111
- cursor: current.cursor,
112
- deadline: Date.now() + input.waitSeconds * 1000,
113
- confirmIdle: true,
114
- });
115
- yield saveContact(ctx, Object.assign(Object.assign({}, current), { cursor: replies.cursor }));
116
- return {
117
- agent: current.name,
118
- sessionId: current.sessionId,
119
- status: replies.status,
120
- reply: joinReplies(replies.deliveries),
121
- note: runningNote(current.name, replies.status),
122
- };
123
- }));
36
+ export async function ask(ctx, input) {
37
+ const name = resolveAgentName(input.agent, extension.config.agents);
38
+ const backend = grokBotAgentsBackend();
39
+ const startedAt = Date.now();
40
+ const session = await backend.session(name);
41
+ return agentLocks.run(session.sessionId, async () => {
42
+ const contact = (await listContacts(ctx)).find(candidate => candidate.sessionId === session.sessionId);
43
+ const created = contact === undefined &&
44
+ session.latestUpdatedSeq === EMPTY_TRANSCRIPT_TAIL &&
45
+ session.createdAtMs >= startedAt - CREATED_WINDOW_MS;
46
+ const deadline = Date.now() + input.waitSeconds * 1000;
47
+ // A turn already in flight, from an earlier message or from the person
48
+ // in the app, must settle first; otherwise its deliveries would read as
49
+ // the reply to this message. Nothing is persisted on the way out, so
50
+ // `check` still returns whatever landed meanwhile.
51
+ const before = await collectReplies(backend, session.sessionId, {
52
+ cursor: contact?.cursor ?? session.latestUpdatedSeq,
53
+ deadline,
54
+ confirmIdle: false,
55
+ });
56
+ if (before.status === "running") {
57
+ throw new Error(`"${session.name}" is still working on an earlier message; nothing was sent. Call check to read that reply, wait, or interrupt it.`);
58
+ }
59
+ await backend.send(session.sessionId, input.message);
60
+ const replies = await collectReplies(backend, session.sessionId, {
61
+ cursor: before.cursor,
62
+ deadline,
63
+ confirmIdle: true,
64
+ });
65
+ const now = ctx.now().toISOString();
66
+ await saveContact(ctx, {
67
+ name: session.name,
68
+ sessionId: session.sessionId,
69
+ cursor: replies.cursor,
70
+ firstContactAt: contact?.firstContactAt ?? now,
71
+ lastContactAt: now,
72
+ });
73
+ const notes = [
74
+ created
75
+ ? `No Grok Bot agent named "${session.name}" existed on this account, so an empty one was created. Check the name if that is unexpected.`
76
+ : undefined,
77
+ runningNote(session.name, replies.status),
78
+ ].filter(note => note !== undefined);
79
+ return {
80
+ agent: session.name,
81
+ sessionId: session.sessionId,
82
+ status: replies.status,
83
+ reply: joinReplies(replies.deliveries),
84
+ earlierReplies: before.deliveries.length === 0 ? undefined : before.deliveries,
85
+ created: created ? true : undefined,
86
+ note: notes.length === 0 ? undefined : notes.join(" "),
87
+ };
124
88
  });
125
89
  }
126
- export function interrupt(ctx, input) {
127
- return __awaiter(this, void 0, void 0, function* () {
128
- const contact = yield knownContact(ctx, input.agent);
129
- yield grokBotAgentsBackend().interrupt(contact.sessionId, "Interrupted from the Agent SDK.");
90
+ export async function check(ctx, input) {
91
+ const contact = await knownContact(ctx, input.agent);
92
+ const backend = grokBotAgentsBackend();
93
+ return agentLocks.run(contact.sessionId, async () => {
94
+ // Re-read under the lock: a parallel call may have moved the cursor.
95
+ const current = (await listContacts(ctx)).find(candidate => candidate.sessionId === contact.sessionId) ??
96
+ contact;
97
+ const replies = await collectReplies(backend, current.sessionId, {
98
+ cursor: current.cursor,
99
+ deadline: Date.now() + input.waitSeconds * 1000,
100
+ confirmIdle: true,
101
+ });
102
+ await saveContact(ctx, { ...current, cursor: replies.cursor });
130
103
  return {
131
- agent: contact.name,
132
- sessionId: contact.sessionId,
133
- interrupted: true,
104
+ agent: current.name,
105
+ sessionId: current.sessionId,
106
+ status: replies.status,
107
+ reply: joinReplies(replies.deliveries),
108
+ note: runningNote(current.name, replies.status),
134
109
  };
135
110
  });
136
111
  }
112
+ export async function interrupt(ctx, input) {
113
+ const contact = await knownContact(ctx, input.agent);
114
+ await grokBotAgentsBackend().interrupt(contact.sessionId, "Interrupted from the Agent SDK.");
115
+ return {
116
+ agent: contact.name,
117
+ sessionId: contact.sessionId,
118
+ interrupted: true,
119
+ };
120
+ }
137
121
  /**
138
122
  * The caller's record of the named agent. Only `ask` resolves a name on the
139
123
  * backend, because that creates an agent when none matches; the other tools
140
124
  * reach agents the caller has already spoken to.
141
125
  */
142
- function knownContact(ctx, requested) {
143
- return __awaiter(this, void 0, void 0, function* () {
144
- const name = resolveAgentName(requested, extension.config.agents);
145
- const contact = findContact(yield listContacts(ctx), name);
146
- if (contact === undefined) {
147
- throw new Error(`You have not asked "${name}" anything yet; call ask first.`);
148
- }
149
- return contact;
150
- });
126
+ async function knownContact(ctx, requested) {
127
+ const name = resolveAgentName(requested, extension.config.agents);
128
+ const contact = findContact(await listContacts(ctx), name);
129
+ if (contact === undefined) {
130
+ throw new Error(`You have not asked "${name}" anything yet; call ask first.`);
131
+ }
132
+ return contact;
151
133
  }
152
134
  /**
153
135
  * Read the transcript after `cursor` until the agent's turn settles or the
@@ -157,36 +139,34 @@ function knownContact(ctx, requested) {
157
139
  * {@link MIN_IDLE_POLLS_WITHOUT_BUSY} idle polls unless the turn was seen
158
140
  * busy; without it, the first idle report settles.
159
141
  */
160
- function collectReplies(backend, sessionId, options) {
161
- return __awaiter(this, void 0, void 0, function* () {
162
- const deliveries = [];
163
- let cursor = options.cursor;
164
- let sawBusy = false;
165
- let idlePolls = 0;
166
- while (true) {
167
- const page = yield backend.entries(sessionId, cursor);
168
- cursor = page.latestUpdatedSeq;
169
- for (const entry of page.entries) {
170
- if (entry.kind === "send-message" && entry.text !== undefined) {
171
- deliveries.push(entry.text);
172
- }
173
- }
174
- const busy = isBusy(page.turn);
175
- if (busy) {
176
- sawBusy = true;
177
- }
178
- if (page.entries.length === 0 && !busy && page.turn.idle) {
179
- idlePolls += 1;
180
- if (sawBusy || !options.confirmIdle || idlePolls >= MIN_IDLE_POLLS_WITHOUT_BUSY) {
181
- return { status: "finished", deliveries, cursor };
182
- }
142
+ async function collectReplies(backend, sessionId, options) {
143
+ const deliveries = [];
144
+ let cursor = options.cursor;
145
+ let sawBusy = false;
146
+ let idlePolls = 0;
147
+ while (true) {
148
+ const page = await backend.entries(sessionId, cursor);
149
+ cursor = page.latestUpdatedSeq;
150
+ for (const entry of page.entries) {
151
+ if (entry.kind === "send-message" && entry.text !== undefined) {
152
+ deliveries.push(entry.text);
183
153
  }
184
- if (Date.now() >= options.deadline) {
185
- return { status: "running", deliveries, cursor };
154
+ }
155
+ const busy = isBusy(page.turn);
156
+ if (busy) {
157
+ sawBusy = true;
158
+ }
159
+ if (page.entries.length === 0 && !busy && page.turn.idle) {
160
+ idlePolls += 1;
161
+ if (sawBusy || !options.confirmIdle || idlePolls >= MIN_IDLE_POLLS_WITHOUT_BUSY) {
162
+ return { status: "finished", deliveries, cursor };
186
163
  }
187
- yield sleep(extension.config.pollIntervalMs);
188
164
  }
189
- });
165
+ if (Date.now() >= options.deadline) {
166
+ return { status: "running", deliveries, cursor };
167
+ }
168
+ await sleep(extension.config.pollIntervalMs);
169
+ }
190
170
  }
191
171
  function isBusy(turn) {
192
172
  return turn.inFlight || turn.queued > 0;
@@ -10,8 +10,7 @@ export class KeyedLock {
10
10
  this.chains = new Map();
11
11
  }
12
12
  run(key, task) {
13
- var _a;
14
- const previous = (_a = this.chains.get(key)) !== null && _a !== void 0 ? _a : Promise.resolve();
13
+ const previous = this.chains.get(key) ?? Promise.resolve();
15
14
  const run = previous.then(task, task);
16
15
  const settled = run.then(() => undefined, () => undefined);
17
16
  this.chains.set(key, settled);
@@ -1,12 +1,3 @@
1
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
- return new (P || (P = Promise))(function (resolve, reject) {
4
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
- step((generator = generator.apply(thisArg, _arguments || [])).next());
8
- });
9
- };
10
1
  import { z } from "zod";
11
2
  import { defineTool } from "../../../tools.js";
12
3
  import extension from "../extension.js";
@@ -24,13 +15,11 @@ const ask = defineTool({
24
15
  .describe("What to tell or ask the agent. Self-contained: who is asking, the facts it needs, and what you want back."),
25
16
  wait_seconds: waitSeconds,
26
17
  }),
27
- execute(input, ctx) {
28
- return __awaiter(this, void 0, void 0, function* () {
29
- return askAgent(ctx, {
30
- agent: input.agent,
31
- message: input.message,
32
- waitSeconds: input.wait_seconds,
33
- });
18
+ async execute(input, ctx) {
19
+ return askAgent(ctx, {
20
+ agent: input.agent,
21
+ message: input.message,
22
+ waitSeconds: input.wait_seconds,
34
23
  });
35
24
  },
36
25
  });
@@ -1,12 +1,3 @@
1
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
- return new (P || (P = Promise))(function (resolve, reject) {
4
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
- step((generator = generator.apply(thisArg, _arguments || [])).next());
8
- });
9
- };
10
1
  import { z } from "zod";
11
2
  import { defineTool } from "../../../tools.js";
12
3
  import { check as checkAgent } from "../lib/conversation.js";
@@ -20,12 +11,10 @@ const check = defineTool({
20
11
  agent: agentName,
21
12
  wait_seconds: waitSeconds,
22
13
  }),
23
- execute(input, ctx) {
24
- return __awaiter(this, void 0, void 0, function* () {
25
- return checkAgent(ctx, {
26
- agent: input.agent,
27
- waitSeconds: input.wait_seconds,
28
- });
14
+ async execute(input, ctx) {
15
+ return checkAgent(ctx, {
16
+ agent: input.agent,
17
+ waitSeconds: input.wait_seconds,
29
18
  });
30
19
  },
31
20
  });
@@ -1,12 +1,3 @@
1
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
- return new (P || (P = Promise))(function (resolve, reject) {
4
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
- step((generator = generator.apply(thisArg, _arguments || [])).next());
8
- });
9
- };
10
1
  import { z } from "zod";
11
2
  import { defineTool } from "../../../tools.js";
12
3
  import { interrupt as interruptAgent } from "../lib/conversation.js";
@@ -15,10 +6,8 @@ const interrupt = defineTool({
15
6
  description: "Stop what a Grok Bot agent you asked is doing right now. It keeps its conversation; ask it again to continue.",
16
7
  effect: "write",
17
8
  inputSchema: z.object({ agent: agentName }),
18
- execute(input, ctx) {
19
- return __awaiter(this, void 0, void 0, function* () {
20
- return interruptAgent(ctx, { agent: input.agent });
21
- });
9
+ async execute(input, ctx) {
10
+ return interruptAgent(ctx, { agent: input.agent });
22
11
  },
23
12
  });
24
13
  export default interrupt;
@@ -1,12 +1,3 @@
1
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
- return new (P || (P = Promise))(function (resolve, reject) {
4
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
- step((generator = generator.apply(thisArg, _arguments || [])).next());
8
- });
9
- };
10
1
  import { z } from "zod";
11
2
  import { defineTool } from "../../../tools.js";
12
3
  import extension from "../extension.js";
@@ -15,20 +6,17 @@ const list = defineTool({
15
6
  description: "List the Grok Bot agents you can talk to: the ones configured for this agent, with what each is for, and the ones you have already asked, most recent first.",
16
7
  effect: "read",
17
8
  inputSchema: z.object({}),
18
- execute(_input, ctx) {
19
- return __awaiter(this, void 0, void 0, function* () {
20
- var _a;
21
- const contacts = yield listContacts(ctx);
22
- return {
23
- configured: (_a = extension.config.agents) !== null && _a !== void 0 ? _a : [],
24
- contacted: contacts.map(contact => ({
25
- name: contact.name,
26
- sessionId: contact.sessionId,
27
- firstContactAt: contact.firstContactAt,
28
- lastContactAt: contact.lastContactAt,
29
- })),
30
- };
31
- });
9
+ async execute(_input, ctx) {
10
+ const contacts = await listContacts(ctx);
11
+ return {
12
+ configured: extension.config.agents ?? [],
13
+ contacted: contacts.map(contact => ({
14
+ name: contact.name,
15
+ sessionId: contact.sessionId,
16
+ firstContactAt: contact.firstContactAt,
17
+ lastContactAt: contact.lastContactAt,
18
+ })),
19
+ };
32
20
  },
33
21
  });
34
22
  export default list;
@@ -31,12 +31,12 @@ const config = z
31
31
  skills: z.boolean().default(true),
32
32
  })
33
33
  .default({})
34
- .transform(options => { var _a; return ({
34
+ .transform(options => ({
35
35
  apiKey: options.apiKey,
36
- model: (_a = options.model) !== null && _a !== void 0 ? _a : DEFAULT_EVALUATION_MODEL,
36
+ model: options.model ?? DEFAULT_EVALUATION_MODEL,
37
37
  harnessTools: options.harnessTools,
38
38
  skills: options.skills,
39
- }); });
39
+ }));
40
40
  const jev = defineExtension({
41
41
  root: import.meta.dirname,
42
42
  description: "Ask Jev for typed choice, score, and boolean answers.",
@@ -36,15 +36,6 @@
36
36
  * Auth is `TYPESAFE_API_KEY`. `model` is a TypeSafe id (`jev-latest` by
37
37
  * default).
38
38
  */
39
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
40
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
41
- return new (P || (P = Promise))(function (resolve, reject) {
42
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
43
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
44
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
45
- step((generator = generator.apply(thisArg, _arguments || [])).next());
46
- });
47
- };
48
39
  /** TypeSafe model used when {@link EvaluateArgs.model} is omitted. */
49
40
  export const DEFAULT_EVALUATION_MODEL = "jev-latest";
50
41
  /** Default bar for {@link needsHuman} when the caller does not pass one. */
@@ -55,8 +46,7 @@ export const DEFAULT_TYPESAFE_HOST = new URL(DEFAULT_BASE_URL).hostname;
55
46
  /** Environment variable holding the TypeSafe key when a call passes no `apiKey`. */
56
47
  export const TYPESAFE_API_KEY_ENV = "TYPESAFE_API_KEY";
57
48
  function resolveApiKey(explicit) {
58
- var _a;
59
- const key = (_a = (explicit !== null && explicit !== void 0 ? explicit : process.env[TYPESAFE_API_KEY_ENV])) === null || _a === void 0 ? void 0 : _a.trim();
49
+ const key = (explicit ?? process.env[TYPESAFE_API_KEY_ENV])?.trim();
60
50
  if (key === undefined || key === "") {
61
51
  throw new Error(`evaluate requires ${TYPESAFE_API_KEY_ENV}`);
62
52
  }
@@ -101,61 +91,54 @@ function decodeAnswer(question, raw) {
101
91
  probabilities: asRecord(value.probabilities, "score probabilities are missing"),
102
92
  };
103
93
  }
104
- function postSystemOne(args) {
105
- return __awaiter(this, void 0, void 0, function* () {
106
- const response = yield args.fetch(args.url, {
107
- method: "POST",
108
- headers: {
109
- Authorization: `Bearer ${args.apiKey}`,
110
- "Content-Type": "application/json",
111
- },
112
- body: JSON.stringify(args.body),
113
- });
114
- const text = yield response.text();
115
- let parsed;
116
- try {
117
- parsed = text.length === 0 ? {} : JSON.parse(text);
118
- }
119
- catch (_a) {
120
- throw new Error(`evaluate returned non-JSON (${response.status})`);
121
- }
122
- if (!response.ok) {
123
- throw new Error(`evaluate failed (${response.status}): ${text.slice(0, 240)}`);
124
- }
125
- return asRecord(asRecord(parsed, "response is not an object").answers, "response is missing answers");
94
+ async function postSystemOne(args) {
95
+ const response = await args.fetch(args.url, {
96
+ method: "POST",
97
+ headers: {
98
+ Authorization: `Bearer ${args.apiKey}`,
99
+ "Content-Type": "application/json",
100
+ },
101
+ body: JSON.stringify(args.body),
126
102
  });
103
+ const text = await response.text();
104
+ let parsed;
105
+ try {
106
+ parsed = text.length === 0 ? {} : JSON.parse(text);
107
+ }
108
+ catch {
109
+ throw new Error(`evaluate returned non-JSON (${response.status})`);
110
+ }
111
+ if (!response.ok) {
112
+ throw new Error(`evaluate failed (${response.status}): ${text.slice(0, 240)}`);
113
+ }
114
+ return asRecord(asRecord(parsed, "response is not an object").answers, "response is missing answers");
127
115
  }
128
116
  /** Ask Jev for typed answers over one state. */
129
- export function evaluate(args) {
130
- return __awaiter(this, void 0, void 0, function* () {
131
- var _a, _b, _c;
132
- const questions = {};
133
- for (const [id, question] of Object.entries(args.questions)) {
134
- questions[id] = toWireQuestion(question);
135
- }
136
- const raw = yield postSystemOne({
137
- url: `${((_a = args.baseUrl) !== null && _a !== void 0 ? _a : DEFAULT_BASE_URL).replace(/\/$/u, "")}/systemone`,
138
- apiKey: resolveApiKey(args.apiKey),
139
- fetch: (_b = args.fetch) !== null && _b !== void 0 ? _b : globalThis.fetch,
140
- body: {
141
- model: (_c = args.model) !== null && _c !== void 0 ? _c : DEFAULT_EVALUATION_MODEL,
142
- state: args.state,
143
- questions,
144
- },
145
- });
146
- const answers = {};
147
- for (const id of Object.keys(args.questions)) {
148
- answers[id] = decodeAnswer(args.questions[id], raw[id]);
149
- }
150
- return { answers };
117
+ export async function evaluate(args) {
118
+ const questions = {};
119
+ for (const [id, question] of Object.entries(args.questions)) {
120
+ questions[id] = toWireQuestion(question);
121
+ }
122
+ const raw = await postSystemOne({
123
+ url: `${(args.baseUrl ?? DEFAULT_BASE_URL).replace(/\/$/u, "")}/systemone`,
124
+ apiKey: resolveApiKey(args.apiKey),
125
+ fetch: args.fetch ?? globalThis.fetch,
126
+ body: {
127
+ model: args.model ?? DEFAULT_EVALUATION_MODEL,
128
+ state: args.state,
129
+ questions,
130
+ },
151
131
  });
132
+ const answers = {};
133
+ for (const id of Object.keys(args.questions)) {
134
+ answers[id] = decodeAnswer(args.questions[id], raw[id]);
135
+ }
136
+ return { answers };
152
137
  }
153
138
  /** Same as {@link evaluate}, returning only `answers`. */
154
- export function decide(args) {
155
- return __awaiter(this, void 0, void 0, function* () {
156
- const result = yield evaluate(args);
157
- return result.answers;
158
- });
139
+ export async function decide(args) {
140
+ const result = await evaluate(args);
141
+ return result.answers;
159
142
  }
160
143
  export function above(answer, threshold) {
161
144
  if (answer.type === "boolean") {
@@ -1,12 +1,3 @@
1
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
- return new (P || (P = Promise))(function (resolve, reject) {
4
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
- step((generator = generator.apply(thisArg, _arguments || [])).next());
8
- });
9
- };
10
1
  import { z } from "zod";
11
2
  import { defineTool } from "../../../tools.js";
12
3
  import extension from "../extension.js";
@@ -69,14 +60,12 @@ const evaluateTool = defineTool({
69
60
  .describe("One or more typed questions over the same state."),
70
61
  })
71
62
  .refine(input => new Set(input.questions.map(item => item.id)).size === input.questions.length, "questions must not repeat an id"),
72
- execute(input) {
73
- return __awaiter(this, void 0, void 0, function* () {
74
- return evaluate({
75
- state: input.state,
76
- questions: toQuestionMap(input.questions),
77
- apiKey: extension.config.apiKey,
78
- model: extension.config.model,
79
- });
63
+ async execute(input) {
64
+ return evaluate({
65
+ state: input.state,
66
+ questions: toQuestionMap(input.questions),
67
+ apiKey: extension.config.apiKey,
68
+ model: extension.config.model,
80
69
  });
81
70
  },
82
71
  });
@@ -47,7 +47,7 @@ const postFile = defineTool({
47
47
  try {
48
48
  realPath = realpathSync(path);
49
49
  }
50
- catch (_a) {
50
+ catch {
51
51
  return `No such file: ${path}`;
52
52
  }
53
53
  const workspaceRoot = realpathSync(ctx.workspaceDir);