@cursor/bdk 0.2.3 → 0.2.4

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 (577) hide show
  1. package/dist/bin/agent-serve.js +9 -1
  2. package/dist/channels/slack/attachments.d.ts +2 -1
  3. package/dist/channels/slack/attachments.d.ts.map +1 -1
  4. package/dist/channels/slack/attachments.js +19 -9
  5. package/dist/channels/slack/dispatch.d.ts.map +1 -1
  6. package/dist/channels/slack/dispatch.js +26 -24
  7. package/dist/channels/slack/thread-context.d.ts +21 -11
  8. package/dist/channels/slack/thread-context.d.ts.map +1 -1
  9. package/dist/channels/slack/thread-context.js +75 -27
  10. package/dist/docs/404.html +2 -2
  11. package/dist/docs/assets/{app.BOIHhrKi.js → app.4kQ8Db_q.js} +4 -4
  12. package/dist/docs/assets/chunks/@localSearchIndexroot.CvuAJ0My.js +1 -0
  13. package/dist/docs/assets/chunks/{VPLocalSearchBox.D49zVZqM.js → VPLocalSearchBox.DY1RwB8Q.js} +1 -1
  14. package/dist/docs/assets/chunks/{arc.hmjb-sc4.js → arc.CxE_fSPK.js} +1 -1
  15. package/dist/docs/assets/chunks/{architectureDiagram-Q4EWVU46.CxEI1KqM.js → architectureDiagram-Q4EWVU46.CPX426ui.js} +1 -1
  16. package/dist/docs/assets/chunks/{baseUniq.DHHvBWoV.js → baseUniq.CB52JrKG.js} +1 -1
  17. package/dist/docs/assets/chunks/{blockDiagram-DXYQGD6D.DnXW-3bu.js → blockDiagram-DXYQGD6D.J0cNaQCL.js} +1 -1
  18. package/dist/docs/assets/chunks/{c4Diagram-AHTNJAMY.e-47O2jM.js → c4Diagram-AHTNJAMY.DJn3vEGT.js} +1 -1
  19. package/dist/docs/assets/chunks/channel.BoNycAoN.js +1 -0
  20. package/dist/docs/assets/chunks/{chunk-4BX2VUAB.3ry4pYXB.js → chunk-4BX2VUAB.Dao618F6.js} +1 -1
  21. package/dist/docs/assets/chunks/{chunk-4TB4RGXK.DGIZFRx6.js → chunk-4TB4RGXK.QW8Rhjai.js} +1 -1
  22. package/dist/docs/assets/chunks/{chunk-55IACEB6.DKBnqg9U.js → chunk-55IACEB6.DfRLLKF_.js} +1 -1
  23. package/dist/docs/assets/chunks/{chunk-EDXVE4YY.BIU8Ue5k.js → chunk-EDXVE4YY.CIV2ApKQ.js} +1 -1
  24. package/dist/docs/assets/chunks/{chunk-FMBD7UC4.DP-TFhjI.js → chunk-FMBD7UC4.BEheSuxp.js} +1 -1
  25. package/dist/docs/assets/chunks/{chunk-OYMX7WX6.Ux0OYj5v.js → chunk-OYMX7WX6.CUN88ENB.js} +1 -1
  26. package/dist/docs/assets/chunks/{chunk-QZHKN3VN.BzHMwYox.js → chunk-QZHKN3VN.CgqCs8b_.js} +1 -1
  27. package/dist/docs/assets/chunks/{chunk-YZCP3GAM.D4OGAsSP.js → chunk-YZCP3GAM.iCH0nnTJ.js} +1 -1
  28. package/dist/docs/assets/chunks/classDiagram-6PBFFD2Q.C4x07Gkj.js +1 -0
  29. package/dist/docs/assets/chunks/classDiagram-v2-HSJHXN6E.C4x07Gkj.js +1 -0
  30. package/dist/docs/assets/chunks/clone.Db22cH_-.js +1 -0
  31. package/dist/docs/assets/chunks/{cose-bilkent-S5V4N54A.Jq_7BUNx.js → cose-bilkent-S5V4N54A.BLcUxhWE.js} +1 -1
  32. package/dist/docs/assets/chunks/{dagre-KV5264BT.Di-skR2x.js → dagre-KV5264BT.Ep7LofOm.js} +1 -1
  33. package/dist/docs/assets/chunks/{diagram-5BDNPKRD.DeREHIdH.js → diagram-5BDNPKRD.Bzf4GSQ4.js} +1 -1
  34. package/dist/docs/assets/chunks/{diagram-G4DWMVQ6.C7Kcqxro.js → diagram-G4DWMVQ6.DD6Jh-eM.js} +1 -1
  35. package/dist/docs/assets/chunks/{diagram-MMDJMWI5.BK3eohyo.js → diagram-MMDJMWI5.oOIl8bWd.js} +1 -1
  36. package/dist/docs/assets/chunks/{diagram-TYMM5635.C6TyymXT.js → diagram-TYMM5635.DHs85Ade.js} +1 -1
  37. package/dist/docs/assets/chunks/{erDiagram-SMLLAGMA.DYGG-gGx.js → erDiagram-SMLLAGMA.BIb5ghCk.js} +1 -1
  38. package/dist/docs/assets/chunks/{flowDiagram-DWJPFMVM.C9nBcSV4.js → flowDiagram-DWJPFMVM.DV4paY9k.js} +1 -1
  39. package/dist/docs/assets/chunks/{ganttDiagram-T4ZO3ILL.wAg_ymsp.js → ganttDiagram-T4ZO3ILL.AyEKA6_v.js} +1 -1
  40. package/dist/docs/assets/chunks/{gitGraphDiagram-UUTBAWPF.B87j9Oeg.js → gitGraphDiagram-UUTBAWPF.BltiCDFo.js} +1 -1
  41. package/dist/docs/assets/chunks/{graph.CuFMj31w.js → graph.DzuEYGdC.js} +1 -1
  42. package/dist/docs/assets/chunks/{infoDiagram-42DDH7IO.P_mLGumP.js → infoDiagram-42DDH7IO.BV2l981J.js} +1 -1
  43. package/dist/docs/assets/chunks/{ishikawaDiagram-UXIWVN3A.DyuL_MsT.js → ishikawaDiagram-UXIWVN3A.BA4Izf-m.js} +1 -1
  44. package/dist/docs/assets/chunks/{journeyDiagram-VCZTEJTY.CtP09IoJ.js → journeyDiagram-VCZTEJTY.DjaFbFS3.js} +1 -1
  45. package/dist/docs/assets/chunks/{kanban-definition-6JOO6SKY.BoeSYPZo.js → kanban-definition-6JOO6SKY.CfTFieDs.js} +1 -1
  46. package/dist/docs/assets/chunks/{layout.B0lMMtNo.js → layout.DzfWqTBV.js} +1 -1
  47. package/dist/docs/assets/chunks/{linear.HxRBiAFX.js → linear.BO6mpulV.js} +1 -1
  48. package/dist/docs/assets/chunks/{min.BGlFFHwS.js → min.BGgTadgT.js} +1 -1
  49. package/dist/docs/assets/chunks/{mindmap-definition-QFDTVHPH.JyLBD9M8.js → mindmap-definition-QFDTVHPH.DPuIXVWY.js} +1 -1
  50. package/dist/docs/assets/chunks/{pieDiagram-DEJITSTG.DnSmNZF8.js → pieDiagram-DEJITSTG.BOnl3bBg.js} +1 -1
  51. package/dist/docs/assets/chunks/{quadrantDiagram-34T5L4WZ.CUCnbfCa.js → quadrantDiagram-34T5L4WZ.DNB6Ckdc.js} +1 -1
  52. package/dist/docs/assets/chunks/{requirementDiagram-MS252O5E.py0IVUn5.js → requirementDiagram-MS252O5E.D5-Qo7vb.js} +1 -1
  53. package/dist/docs/assets/chunks/{sankeyDiagram-XADWPNL6.Bkc-HWYp.js → sankeyDiagram-XADWPNL6.8t65cesf.js} +1 -1
  54. package/dist/docs/assets/chunks/{sequenceDiagram-FGHM5R23.Dqn8Mlv2.js → sequenceDiagram-FGHM5R23.CaG07BdS.js} +1 -1
  55. package/dist/docs/assets/chunks/{stateDiagram-FHFEXIEX.JikkoQUU.js → stateDiagram-FHFEXIEX.TKOweTB6.js} +1 -1
  56. package/dist/docs/assets/chunks/stateDiagram-v2-QKLJ7IA2.CuqmyQc4.js +1 -0
  57. package/dist/docs/assets/chunks/{theme.b6HQ6zG_.js → theme.Dx-JhpTB.js} +2 -2
  58. package/dist/docs/assets/chunks/{timeline-definition-GMOUNBTQ.BvpSXiBj.js → timeline-definition-GMOUNBTQ.fE53zQ2s.js} +1 -1
  59. package/dist/docs/assets/chunks/{vennDiagram-DHZGUBPP.CU7MVnZx.js → vennDiagram-DHZGUBPP.DJsZZaJg.js} +1 -1
  60. package/dist/docs/assets/chunks/{wardley-RL74JXVD.BKwC4ctG.js → wardley-RL74JXVD.844kyrjl.js} +1 -1
  61. package/dist/docs/assets/chunks/{wardleyDiagram-NUSXRM2D.BfaF6Uhe.js → wardleyDiagram-NUSXRM2D.CMZ-Ru_t.js} +1 -1
  62. package/dist/docs/assets/chunks/{xychartDiagram-5P7HB3ND.Bg5dcpj4.js → xychartDiagram-5P7HB3ND.XXrhBc7a.js} +1 -1
  63. package/dist/docs/assets/{deployment.md.BJ8i7Q6p.js → deployment.md.UhnJIMr-.js} +2 -2
  64. package/dist/docs/assets/{deployment.md.BJ8i7Q6p.lean.js → deployment.md.UhnJIMr-.lean.js} +1 -1
  65. package/dist/docs/assets/{guides_jev.md.BNDm14Gy.js → guides_jev.md.CRcgmjDb.js} +2 -2
  66. package/dist/docs/assets/{guides_jev.md.BNDm14Gy.lean.js → guides_jev.md.CRcgmjDb.lean.js} +1 -1
  67. package/dist/docs/assets/{reference_agent-config.md.DzGI777n.js → reference_agent-config.md.Cj5uBKp4.js} +1 -1
  68. package/dist/docs/assets/{reference_extensions.md.CPPrkWlJ.js → reference_extensions.md.pa2tN-e4.js} +4 -3
  69. package/dist/docs/assets/{reference_extensions.md.CPPrkWlJ.lean.js → reference_extensions.md.pa2tN-e4.lean.js} +1 -1
  70. package/dist/docs/building-with-agents.html +35 -35
  71. package/dist/docs/deployment.html +37 -37
  72. package/dist/docs/deployment.md +4 -1
  73. package/dist/docs/evals.html +35 -35
  74. package/dist/docs/guides/agent-to-agent.html +35 -35
  75. package/dist/docs/guides/bitbucket.html +35 -35
  76. package/dist/docs/guides/cloud-agents.html +35 -35
  77. package/dist/docs/guides/convert-automation.html +35 -35
  78. package/dist/docs/guides/github.html +35 -35
  79. package/dist/docs/guides/gitlab.html +35 -35
  80. package/dist/docs/guides/grokbot-agents.html +35 -35
  81. package/dist/docs/guides/hooks.html +35 -35
  82. package/dist/docs/guides/improve.html +35 -35
  83. package/dist/docs/guides/jev.html +37 -37
  84. package/dist/docs/guides/jev.md +7 -0
  85. package/dist/docs/guides/mcp-oauth.html +35 -35
  86. package/dist/docs/guides/opentelemetry.html +35 -35
  87. package/dist/docs/guides/slack.html +35 -35
  88. package/dist/docs/guides/webhooks.html +35 -35
  89. package/dist/docs/hashmap.json +1 -1
  90. package/dist/docs/hillclimbing.html +35 -35
  91. package/dist/docs/index.html +35 -35
  92. package/dist/docs/llms-full.txt +25 -2
  93. package/dist/docs/quickstart.html +35 -35
  94. package/dist/docs/reference/agent-config.html +37 -37
  95. package/dist/docs/reference/agent-config.md +1 -1
  96. package/dist/docs/reference/artifacts.html +35 -35
  97. package/dist/docs/reference/channels.html +35 -35
  98. package/dist/docs/reference/cli.html +35 -35
  99. package/dist/docs/reference/connections.html +35 -35
  100. package/dist/docs/reference/evals.html +35 -35
  101. package/dist/docs/reference/extensions.html +39 -38
  102. package/dist/docs/reference/extensions.md +13 -0
  103. package/dist/docs/reference/hooks.html +35 -35
  104. package/dist/docs/reference/http-api.html +35 -35
  105. package/dist/docs/reference/instructions.html +35 -35
  106. package/dist/docs/reference/playground.html +35 -35
  107. package/dist/docs/reference/project-layout.html +35 -35
  108. package/dist/docs/reference/prompt.html +35 -35
  109. package/dist/docs/reference/schedules.html +35 -35
  110. package/dist/docs/reference/sessions.html +35 -35
  111. package/dist/docs/reference/skills.html +35 -35
  112. package/dist/docs/reference/subagents.html +35 -35
  113. package/dist/docs/reference/tools.html +35 -35
  114. package/dist/docs/templates/agentic-owners.html +35 -35
  115. package/dist/docs/templates/security-reviewer.html +35 -35
  116. package/dist/docs/templates/thermo-quality-review.html +35 -35
  117. package/dist/docs/templates/thermo-review.html +35 -35
  118. package/dist/docs/templates/triage.html +35 -35
  119. package/dist/docs/troubleshooting.html +35 -35
  120. package/dist/extensions/jev/extension.d.ts +3 -0
  121. package/dist/extensions/jev/extension.d.ts.map +1 -1
  122. package/dist/extensions/jev/extension.js +10 -1
  123. package/dist/extensions/jev/lib/evaluate.d.ts +4 -0
  124. package/dist/extensions/jev/lib/evaluate.d.ts.map +1 -1
  125. package/dist/extensions/jev/lib/evaluate.js +6 -2
  126. package/dist/extensions.d.ts +4 -2
  127. package/dist/extensions.d.ts.map +1 -1
  128. package/dist/extensions.js +5 -2
  129. package/dist/internal/cli-deploy.d.ts.map +1 -1
  130. package/dist/internal/cli-deploy.js +19 -5
  131. package/dist/internal/discovery/agent-config.d.ts +6 -5
  132. package/dist/internal/discovery/agent-config.d.ts.map +1 -1
  133. package/dist/internal/discovery/agent-config.js +29 -28
  134. package/dist/internal/discovery/agent.js +1 -1
  135. package/dist/internal/discovery/extensions.d.ts.map +1 -1
  136. package/dist/internal/discovery/extensions.js +12 -0
  137. package/dist/internal/hosting.d.ts +8 -0
  138. package/dist/internal/hosting.d.ts.map +1 -1
  139. package/dist/internal/hosting.js +24 -0
  140. package/dist/types.d.ts +18 -2
  141. package/dist/types.d.ts.map +1 -1
  142. package/docs/deployment.md +4 -1
  143. package/docs/guides/jev.md +7 -0
  144. package/docs/reference/agent-config.md +1 -1
  145. package/docs/reference/extensions.md +13 -0
  146. package/package.json +1 -9
  147. package/dist/docs/assets/chunks/@localSearchIndexroot.D5L-b34G.js +0 -1
  148. package/dist/docs/assets/chunks/channel.BbOGaJQP.js +0 -1
  149. package/dist/docs/assets/chunks/classDiagram-6PBFFD2Q.Db58HCb1.js +0 -1
  150. package/dist/docs/assets/chunks/classDiagram-v2-HSJHXN6E.Db58HCb1.js +0 -1
  151. package/dist/docs/assets/chunks/clone.Co4MBflG.js +0 -1
  152. package/dist/docs/assets/chunks/stateDiagram-v2-QKLJ7IA2.CMsKhrW0.js +0 -1
  153. package/src/artifacts.ts +0 -68
  154. package/src/bin/agent-serve.ts +0 -1854
  155. package/src/channels/bitbucket/api.ts +0 -891
  156. package/src/channels/bitbucket/binding.ts +0 -417
  157. package/src/channels/bitbucket/bitbucket-channel.ts +0 -162
  158. package/src/channels/bitbucket/bitbucket-webhook.ts +0 -519
  159. package/src/channels/bitbucket/checks.ts +0 -146
  160. package/src/channels/bitbucket/cursor-account.ts +0 -106
  161. package/src/channels/bitbucket/defaults.ts +0 -100
  162. package/src/channels/bitbucket/events.ts +0 -74
  163. package/src/channels/bitbucket/index.ts +0 -51
  164. package/src/channels/bitbucket/replay.ts +0 -421
  165. package/src/channels/bitbucket/state.ts +0 -59
  166. package/src/channels/bitbucket/types.ts +0 -261
  167. package/src/channels/change-monitors/change-monitors-channel.ts +0 -63
  168. package/src/channels/change-monitors/index.ts +0 -8
  169. package/src/channels/change-monitors/types.ts +0 -42
  170. package/src/channels/checks.ts +0 -185
  171. package/src/channels/deployments/deployments-channel.ts +0 -224
  172. package/src/channels/deployments/index.ts +0 -25
  173. package/src/channels/deployments/types.ts +0 -92
  174. package/src/channels/github/api.ts +0 -526
  175. package/src/channels/github/auth.ts +0 -293
  176. package/src/channels/github/binding.ts +0 -233
  177. package/src/channels/github/checks.ts +0 -145
  178. package/src/channels/github/cursor-account.ts +0 -303
  179. package/src/channels/github/defaults.ts +0 -168
  180. package/src/channels/github/events.ts +0 -67
  181. package/src/channels/github/forward.ts +0 -359
  182. package/src/channels/github/github-channel.ts +0 -2334
  183. package/src/channels/github/index.ts +0 -54
  184. package/src/channels/github/progress.ts +0 -365
  185. package/src/channels/github/replay.ts +0 -372
  186. package/src/channels/github/state.ts +0 -124
  187. package/src/channels/github/types.ts +0 -590
  188. package/src/channels/gitlab/api.ts +0 -329
  189. package/src/channels/gitlab/binding.ts +0 -231
  190. package/src/channels/gitlab/checks.ts +0 -228
  191. package/src/channels/gitlab/cursor-account.ts +0 -105
  192. package/src/channels/gitlab/defaults.ts +0 -80
  193. package/src/channels/gitlab/events.ts +0 -37
  194. package/src/channels/gitlab/gitlab-channel.ts +0 -160
  195. package/src/channels/gitlab/gitlab-webhook.ts +0 -509
  196. package/src/channels/gitlab/index.ts +0 -44
  197. package/src/channels/gitlab/replay.ts +0 -328
  198. package/src/channels/gitlab/state.ts +0 -55
  199. package/src/channels/gitlab/types.ts +0 -247
  200. package/src/channels/issues/index.ts +0 -9
  201. package/src/channels/issues/issues-channel.ts +0 -45
  202. package/src/channels/issues/types.ts +0 -38
  203. package/src/channels/origin/api.ts +0 -507
  204. package/src/channels/origin/binding.ts +0 -114
  205. package/src/channels/origin/checks.ts +0 -250
  206. package/src/channels/origin/cursor-account.ts +0 -58
  207. package/src/channels/origin/defaults.ts +0 -140
  208. package/src/channels/origin/events.ts +0 -35
  209. package/src/channels/origin/index.ts +0 -35
  210. package/src/channels/origin/origin-channel.ts +0 -815
  211. package/src/channels/origin/origin-webhook.ts +0 -296
  212. package/src/channels/origin/reactions.ts +0 -72
  213. package/src/channels/origin/state.ts +0 -54
  214. package/src/channels/origin/types.ts +0 -295
  215. package/src/channels/slack/agentic-delivery.ts +0 -634
  216. package/src/channels/slack/agentic-posted.ts +0 -135
  217. package/src/channels/slack/agentic-signals.ts +0 -231
  218. package/src/channels/slack/api.ts +0 -761
  219. package/src/channels/slack/approvals.ts +0 -279
  220. package/src/channels/slack/assistant.ts +0 -76
  221. package/src/channels/slack/attachments.ts +0 -596
  222. package/src/channels/slack/auth.ts +0 -127
  223. package/src/channels/slack/blocks.ts +0 -131
  224. package/src/channels/slack/bot-mentions.ts +0 -318
  225. package/src/channels/slack/channel-watch.ts +0 -314
  226. package/src/channels/slack/cli-project.ts +0 -249
  227. package/src/channels/slack/code-fences.ts +0 -171
  228. package/src/channels/slack/constants.ts +0 -38
  229. package/src/channels/slack/credentials.ts +0 -88
  230. package/src/channels/slack/defaults.ts +0 -714
  231. package/src/channels/slack/dispatch.ts +0 -1060
  232. package/src/channels/slack/doctor.ts +0 -338
  233. package/src/channels/slack/eval-directive.ts +0 -306
  234. package/src/channels/slack/event-id-dedupe.ts +0 -30
  235. package/src/channels/slack/external-policy.ts +0 -75
  236. package/src/channels/slack/footer.ts +0 -106
  237. package/src/channels/slack/inbound.ts +0 -416
  238. package/src/channels/slack/index.ts +0 -53
  239. package/src/channels/slack/init.ts +0 -169
  240. package/src/channels/slack/interactive.ts +0 -406
  241. package/src/channels/slack/links.ts +0 -23
  242. package/src/channels/slack/live-delivery.ts +0 -489
  243. package/src/channels/slack/log.ts +0 -70
  244. package/src/channels/slack/manifest.ts +0 -240
  245. package/src/channels/slack/message-body.ts +0 -82
  246. package/src/channels/slack/nudge-carrier.ts +0 -224
  247. package/src/channels/slack/nudge-store.ts +0 -334
  248. package/src/channels/slack/paint-start.ts +0 -93
  249. package/src/channels/slack/placeholder.ts +0 -358
  250. package/src/channels/slack/pr-ref.ts +0 -74
  251. package/src/channels/slack/progress-delivery.ts +0 -138
  252. package/src/channels/slack/reasoning-card.ts +0 -125
  253. package/src/channels/slack/reasoning-chip.ts +0 -41
  254. package/src/channels/slack/recording-sink.ts +0 -167
  255. package/src/channels/slack/redact.ts +0 -6
  256. package/src/channels/slack/reply-options.ts +0 -279
  257. package/src/channels/slack/setup.ts +0 -125
  258. package/src/channels/slack/slack-channel.ts +0 -744
  259. package/src/channels/slack/socket-mode.ts +0 -140
  260. package/src/channels/slack/stop.ts +0 -25
  261. package/src/channels/slack/stream.ts +0 -66
  262. package/src/channels/slack/thread-context.ts +0 -485
  263. package/src/channels/slack/tool-approval-events.ts +0 -233
  264. package/src/channels/slack/tool-cards.ts +0 -198
  265. package/src/channels/slack/tool-chip.ts +0 -34
  266. package/src/channels/slack/types.ts +0 -787
  267. package/src/channels/slack/upload.ts +0 -137
  268. package/src/channels.ts +0 -543
  269. package/src/connections.ts +0 -153
  270. package/src/dashboard-session-url.ts +0 -30
  271. package/src/evals/assertions.ts +0 -688
  272. package/src/evals/expect.ts +0 -250
  273. package/src/evals/judge.ts +0 -329
  274. package/src/evals/loaders.ts +0 -111
  275. package/src/evals/matchers.ts +0 -223
  276. package/src/evals/reporters.ts +0 -257
  277. package/src/evals/results.ts +0 -130
  278. package/src/evals/run-facts.ts +0 -306
  279. package/src/evals.ts +0 -709
  280. package/src/extensions/cursor-cloud-agents/extension.ts +0 -131
  281. package/src/extensions/cursor-cloud-agents/lib/backend.ts +0 -386
  282. package/src/extensions/cursor-cloud-agents/lib/channels.ts +0 -11
  283. package/src/extensions/cursor-cloud-agents/lib/fleet.ts +0 -98
  284. package/src/extensions/cursor-cloud-agents/lib/inputs.ts +0 -5
  285. package/src/extensions/cursor-cloud-agents/lib/repos.ts +0 -80
  286. package/src/extensions/cursor-cloud-agents/lib/transcript.ts +0 -19
  287. package/src/extensions/cursor-cloud-agents/skills/handoff.md +0 -37
  288. package/src/extensions/cursor-cloud-agents/tools/cancel.ts +0 -21
  289. package/src/extensions/cursor-cloud-agents/tools/dump.ts +0 -47
  290. package/src/extensions/cursor-cloud-agents/tools/get.ts +0 -18
  291. package/src/extensions/cursor-cloud-agents/tools/launch.ts +0 -62
  292. package/src/extensions/cursor-cloud-agents/tools/list.ts +0 -31
  293. package/src/extensions/cursor-cloud-agents/tools/reply.ts +0 -36
  294. package/src/extensions/cursor-grokbot-agents/extension.ts +0 -132
  295. package/src/extensions/cursor-grokbot-agents/lib/agents.ts +0 -42
  296. package/src/extensions/cursor-grokbot-agents/lib/backend.ts +0 -208
  297. package/src/extensions/cursor-grokbot-agents/lib/contacts.ts +0 -74
  298. package/src/extensions/cursor-grokbot-agents/lib/conversation.ts +0 -260
  299. package/src/extensions/cursor-grokbot-agents/lib/inputs.ts +0 -21
  300. package/src/extensions/cursor-grokbot-agents/lib/lock.ts +0 -26
  301. package/src/extensions/cursor-grokbot-agents/skills/consult.md +0 -40
  302. package/src/extensions/cursor-grokbot-agents/tools/ask.ts +0 -32
  303. package/src/extensions/cursor-grokbot-agents/tools/check.ts +0 -25
  304. package/src/extensions/cursor-grokbot-agents/tools/interrupt.ts +0 -17
  305. package/src/extensions/cursor-grokbot-agents/tools/list.ts +0 -26
  306. package/src/extensions/improve/extension.ts +0 -69
  307. package/src/extensions/improve/skills/yourself.ts +0 -50
  308. package/src/extensions/jev/extension.ts +0 -95
  309. package/src/extensions/jev/lib/evaluate.ts +0 -266
  310. package/src/extensions/jev/skills/gated-write.md +0 -25
  311. package/src/extensions/jev/skills/questions.md +0 -33
  312. package/src/extensions/jev/tools/evaluate.ts +0 -82
  313. package/src/extensions/slack-communication/evals/harness.ts +0 -705
  314. package/src/extensions/slack-communication/evals/slack-communication.eval.ts +0 -830
  315. package/src/extensions/slack-communication/evals/slack-placeholder.eval.ts +0 -172
  316. package/src/extensions/slack-communication/extension.ts +0 -44
  317. package/src/extensions/slack-communication/skills/slack-voice.ts +0 -56
  318. package/src/extensions/slack-communication/tools/delete-message.ts +0 -33
  319. package/src/extensions/slack-communication/tools/edit-message.ts +0 -42
  320. package/src/extensions/slack-communication/tools/post-card.ts +0 -28
  321. package/src/extensions/slack-communication/tools/post-file.ts +0 -82
  322. package/src/extensions/slack-communication/tools/post-update.ts +0 -40
  323. package/src/extensions/slack-communication/tools/react.ts +0 -30
  324. package/src/extensions/slack-communication/tools/set-status.ts +0 -21
  325. package/src/extensions.ts +0 -179
  326. package/src/files-backends/agent-store-presigned-url.ts +0 -11
  327. package/src/files-backends/cursor-hosted.ts +0 -1212
  328. package/src/files-backends/local-fs.ts +0 -163
  329. package/src/files.ts +0 -293
  330. package/src/filesystem.ts +0 -2005
  331. package/src/hooks.ts +0 -30
  332. package/src/index.ts +0 -259
  333. package/src/internal/advertise-tools.ts +0 -370
  334. package/src/internal/approval-gate.ts +0 -103
  335. package/src/internal/artifacts-store.ts +0 -836
  336. package/src/internal/as-of.ts +0 -257
  337. package/src/internal/auth.ts +0 -46
  338. package/src/internal/authored-alias-hooks.ts +0 -138
  339. package/src/internal/authored-loaders.ts +0 -188
  340. package/src/internal/bounded-int.ts +0 -24
  341. package/src/internal/bounded.ts +0 -25
  342. package/src/internal/brand.ts +0 -28
  343. package/src/internal/browser-origin-guard.ts +0 -67
  344. package/src/internal/builtin-tools/artifacts.ts +0 -62
  345. package/src/internal/builtin-tools/index.ts +0 -53
  346. package/src/internal/builtin-tools/reminders.ts +0 -145
  347. package/src/internal/channel-dispatch.ts +0 -129
  348. package/src/internal/channel-route-dispatch.ts +0 -58
  349. package/src/internal/channel-state.ts +0 -83
  350. package/src/internal/chat-client.ts +0 -594
  351. package/src/internal/cli-ax.ts +0 -2318
  352. package/src/internal/cli-bitbucket.ts +0 -438
  353. package/src/internal/cli-convert-automation.ts +0 -335
  354. package/src/internal/cli-cursor.ts +0 -282
  355. package/src/internal/cli-deploy.ts +0 -2519
  356. package/src/internal/cli-docs.ts +0 -192
  357. package/src/internal/cli-github.ts +0 -806
  358. package/src/internal/cli-gitlab.ts +0 -452
  359. package/src/internal/cli-images.ts +0 -672
  360. package/src/internal/cli-manifest.ts +0 -56
  361. package/src/internal/cli-mcp-oauth.ts +0 -396
  362. package/src/internal/cli-mcp.ts +0 -808
  363. package/src/internal/cli-skills.ts +0 -98
  364. package/src/internal/cli-slack-manual.ts +0 -418
  365. package/src/internal/cli-slack.ts +0 -874
  366. package/src/internal/cloud-merge.ts +0 -51
  367. package/src/internal/cloud-turn-cost.ts +0 -159
  368. package/src/internal/connection-env.ts +0 -106
  369. package/src/internal/continuation-channel.ts +0 -233
  370. package/src/internal/continuation-identity.ts +0 -935
  371. package/src/internal/conversation-mirror.ts +0 -423
  372. package/src/internal/convert-automation/convert-workflow.ts +0 -1377
  373. package/src/internal/convert-automation/slug.ts +0 -29
  374. package/src/internal/convert-automation/types.ts +0 -212
  375. package/src/internal/cron.ts +0 -76
  376. package/src/internal/cursor/account-mcp.ts +0 -692
  377. package/src/internal/cursor/backend-client.ts +0 -984
  378. package/src/internal/cursor/bound-secret-file.ts +0 -101
  379. package/src/internal/cursor/credentials.ts +0 -560
  380. package/src/internal/cursor/cursor-api-transport.ts +0 -65
  381. package/src/internal/cursor/github-credentials.ts +0 -228
  382. package/src/internal/cursor/hosted-bound-secrets.ts +0 -71
  383. package/src/internal/cursor/hosted-deployment-secrets.ts +0 -100
  384. package/src/internal/cursor/hosted-store-secrets.ts +0 -152
  385. package/src/internal/cursor/session-token.ts +0 -111
  386. package/src/internal/cursor/store-api-client.ts +0 -323
  387. package/src/internal/cursor-account-mcp-auth.ts +0 -303
  388. package/src/internal/cursor-agent-template.ts +0 -50
  389. package/src/internal/cursor-deployment-relay.ts +0 -315
  390. package/src/internal/cursor-event-relay.ts +0 -675
  391. package/src/internal/cursor-relay-core.ts +0 -563
  392. package/src/internal/deferred-channel-session.ts +0 -61
  393. package/src/internal/deploy-client.ts +0 -1574
  394. package/src/internal/deploy-manifest.ts +0 -361
  395. package/src/internal/deploy-source.ts +0 -144
  396. package/src/internal/describe-error.ts +0 -32
  397. package/src/internal/dev-mode.ts +0 -20
  398. package/src/internal/discovery/agent-config.ts +0 -288
  399. package/src/internal/discovery/agent.ts +0 -381
  400. package/src/internal/discovery/channels.ts +0 -100
  401. package/src/internal/discovery/connections.ts +0 -516
  402. package/src/internal/discovery/context.ts +0 -38
  403. package/src/internal/discovery/cursor-plugin.ts +0 -628
  404. package/src/internal/discovery/extension-overlay.ts +0 -247
  405. package/src/internal/discovery/extensions.ts +0 -490
  406. package/src/internal/discovery/fs.ts +0 -103
  407. package/src/internal/discovery/hooks.ts +0 -63
  408. package/src/internal/discovery/info.ts +0 -174
  409. package/src/internal/discovery/instructions.ts +0 -98
  410. package/src/internal/discovery/modules.ts +0 -107
  411. package/src/internal/discovery/names.ts +0 -45
  412. package/src/internal/discovery/project.ts +0 -319
  413. package/src/internal/discovery/reminders.ts +0 -65
  414. package/src/internal/discovery/runtime.ts +0 -158
  415. package/src/internal/discovery/schedules.ts +0 -120
  416. package/src/internal/discovery/seed-files.ts +0 -34
  417. package/src/internal/discovery/services.ts +0 -151
  418. package/src/internal/discovery/skills.ts +0 -174
  419. package/src/internal/discovery/subagent.ts +0 -138
  420. package/src/internal/discovery/tools.ts +0 -170
  421. package/src/internal/discovery.ts +0 -27
  422. package/src/internal/distribution.ts +0 -126
  423. package/src/internal/docs-site.ts +0 -248
  424. package/src/internal/duration.ts +0 -37
  425. package/src/internal/env-file.ts +0 -83
  426. package/src/internal/eval-judge-model.ts +0 -142
  427. package/src/internal/eval-run-store.ts +0 -585
  428. package/src/internal/eval-runner.ts +0 -823
  429. package/src/internal/evals-client.ts +0 -475
  430. package/src/internal/event-log.ts +0 -342
  431. package/src/internal/event-mapper.ts +0 -811
  432. package/src/internal/expected-delivery-failure.ts +0 -34
  433. package/src/internal/factory-resource-channel.ts +0 -103
  434. package/src/internal/filesystem/errors.ts +0 -207
  435. package/src/internal/filesystem/format.ts +0 -253
  436. package/src/internal/filesystem/merge.ts +0 -192
  437. package/src/internal/filesystem/nearest.ts +0 -112
  438. package/src/internal/filesystem/scratch.ts +0 -239
  439. package/src/internal/filesystem/sdk-schemas.ts +0 -204
  440. package/src/internal/filesystem/tools.ts +0 -804
  441. package/src/internal/filesystem/walk.ts +0 -366
  442. package/src/internal/fixtures/units-server.ts +0 -52
  443. package/src/internal/framework-file-storage.ts +0 -357
  444. package/src/internal/framework-storage-selection.ts +0 -156
  445. package/src/internal/frontmatter.ts +0 -108
  446. package/src/internal/github-fanout.ts +0 -144
  447. package/src/internal/guest-network.ts +0 -391
  448. package/src/internal/handleAgentServeTrigger.ts +0 -286
  449. package/src/internal/host-files.ts +0 -341
  450. package/src/internal/host-kv.ts +0 -81
  451. package/src/internal/host-otel.ts +0 -231
  452. package/src/internal/host-platforms.ts +0 -170
  453. package/src/internal/hosted-admission-adapter.ts +0 -47
  454. package/src/internal/hosted-admission-context.ts +0 -37
  455. package/src/internal/hosted-catch-protocol.ts +0 -112
  456. package/src/internal/hosted-catch.ts +0 -179
  457. package/src/internal/hosted-delivery-protocol.ts +0 -824
  458. package/src/internal/hosted-delivery.ts +0 -1410
  459. package/src/internal/hosted-execution-diag.ts +0 -291
  460. package/src/internal/hosted-execution-flush.ts +0 -136
  461. package/src/internal/hosted-execution-latency.ts +0 -301
  462. package/src/internal/hosted-managed-automation.ts +0 -116
  463. package/src/internal/hosting.ts +0 -114
  464. package/src/internal/http-channel-define.ts +0 -25
  465. package/src/internal/http-channel.ts +0 -669
  466. package/src/internal/http-control-plane-session.ts +0 -110
  467. package/src/internal/ids.ts +0 -39
  468. package/src/internal/incoming-headers-to-fetch.ts +0 -45
  469. package/src/internal/init-interview.ts +0 -360
  470. package/src/internal/init-project.ts +0 -711
  471. package/src/internal/init-scaffold.ts +0 -182
  472. package/src/internal/inline-stdio-define-stub.ts +0 -4
  473. package/src/internal/inline-stdio-mcp.ts +0 -230
  474. package/src/internal/install-cursor-skills.ts +0 -604
  475. package/src/internal/is-record.ts +0 -3
  476. package/src/internal/json-schema.ts +0 -95
  477. package/src/internal/legacy-command-guard.ts +0 -66
  478. package/src/internal/listen-port.ts +0 -85
  479. package/src/internal/local-control-plane.ts +0 -442
  480. package/src/internal/local-env.ts +0 -59
  481. package/src/internal/local-ingress.ts +0 -90
  482. package/src/internal/log-ring.ts +0 -59
  483. package/src/internal/logs-client.ts +0 -477
  484. package/src/internal/map-pool.ts +0 -39
  485. package/src/internal/mcp-endpoint.ts +0 -747
  486. package/src/internal/mcp-host.ts +0 -509
  487. package/src/internal/mcp-oauth-on-demand.ts +0 -337
  488. package/src/internal/mcp-oauth-persist.ts +0 -118
  489. package/src/internal/mcp-oauth.ts +0 -549
  490. package/src/internal/net.ts +0 -29
  491. package/src/internal/open-browser.ts +0 -41
  492. package/src/internal/otel/attrs.ts +0 -16
  493. package/src/internal/otel/collector.ts +0 -937
  494. package/src/internal/otel/config.ts +0 -287
  495. package/src/internal/otel/http.ts +0 -122
  496. package/src/internal/otel/mcp.ts +0 -56
  497. package/src/internal/otel/propagation.ts +0 -17
  498. package/src/internal/otel/runtime.ts +0 -441
  499. package/src/internal/package-inline-stdio.ts +0 -114
  500. package/src/internal/peer-connections.ts +0 -96
  501. package/src/internal/platform-schedule-sync.ts +0 -75
  502. package/src/internal/platform-timers.ts +0 -365
  503. package/src/internal/playground/static.ts +0 -278
  504. package/src/internal/playground/toolchain.ts +0 -270
  505. package/src/internal/playground-proxy.ts +0 -564
  506. package/src/internal/process-memory-telemetry.ts +0 -334
  507. package/src/internal/project-layout.ts +0 -31
  508. package/src/internal/prompt-context.ts +0 -116
  509. package/src/internal/reminder-control-plane-protocol.ts +0 -482
  510. package/src/internal/reminder-runner.ts +0 -1559
  511. package/src/internal/reminder-schedule.ts +0 -104
  512. package/src/internal/reminder-store.ts +0 -176
  513. package/src/internal/request-error-status.ts +0 -95
  514. package/src/internal/request-headers.ts +0 -21
  515. package/src/internal/resolve-prod-target.ts +0 -334
  516. package/src/internal/resolved-connections.ts +0 -190
  517. package/src/internal/router.ts +0 -143
  518. package/src/internal/run-client.ts +0 -354
  519. package/src/internal/runtime-dispatch-runner.ts +0 -50
  520. package/src/internal/sanitize-mcp-tool-name.ts +0 -31
  521. package/src/internal/schedule-runner.ts +0 -154
  522. package/src/internal/scm/pr-url.ts +0 -245
  523. package/src/internal/sdk-runner.ts +0 -959
  524. package/src/internal/serve-restart.ts +0 -113
  525. package/src/internal/server.ts +0 -3147
  526. package/src/internal/session-cost.ts +0 -208
  527. package/src/internal/session-engine.ts +0 -5622
  528. package/src/internal/session-links.ts +0 -84
  529. package/src/internal/session-run-log.ts +0 -535
  530. package/src/internal/session-store.ts +0 -307
  531. package/src/internal/session-urls.ts +0 -32
  532. package/src/internal/sessions-client.ts +0 -239
  533. package/src/internal/skill-catalog.ts +0 -66
  534. package/src/internal/skills-sync.ts +0 -55
  535. package/src/internal/slack-provision-client.ts +0 -544
  536. package/src/internal/slack-thread-key.ts +0 -11
  537. package/src/internal/sleep.ts +0 -3
  538. package/src/internal/start-log-store.ts +0 -164
  539. package/src/internal/steering.ts +0 -17
  540. package/src/internal/storage-coordinator.ts +0 -800
  541. package/src/internal/storage-roles.ts +0 -86
  542. package/src/internal/storage.ts +0 -1
  543. package/src/internal/store-api-protocol.ts +0 -205
  544. package/src/internal/store-mirror.ts +0 -73
  545. package/src/internal/stream-progress.ts +0 -294
  546. package/src/internal/terminal-style.ts +0 -133
  547. package/src/internal/testing/factory-resource-fixtures.ts +0 -84
  548. package/src/internal/testing/scm-continuation-fixtures.ts +0 -285
  549. package/src/internal/tool-catalog.ts +0 -104
  550. package/src/internal/tool-policy.ts +0 -222
  551. package/src/internal/tool-result.ts +0 -50
  552. package/src/internal/trajectory.ts +0 -418
  553. package/src/internal/turn-cost.ts +0 -136
  554. package/src/internal/turn-governor.ts +0 -145
  555. package/src/internal/turn-lease-store.ts +0 -144
  556. package/src/internal/turn-outbox.ts +0 -77
  557. package/src/internal/update-check.ts +0 -517
  558. package/src/internal/v2-hosting.ts +0 -52
  559. package/src/internal/workspace-sync.ts +0 -114
  560. package/src/internal/workspace.ts +0 -505
  561. package/src/kv/memory-kv.ts +0 -94
  562. package/src/kv.ts +0 -18
  563. package/src/memory.ts +0 -487
  564. package/src/otel-public.ts +0 -24
  565. package/src/otel.ts +0 -320
  566. package/src/prompt.ts +0 -80
  567. package/src/reminders.ts +0 -65
  568. package/src/schedules.ts +0 -31
  569. package/src/skills.ts +0 -27
  570. package/src/storage-backends/cursor-hosted-v2.ts +0 -204
  571. package/src/storage-backends/cursor-hosted.ts +0 -388
  572. package/src/storage-backends/file-kv.ts +0 -276
  573. package/src/storage-protocol.ts +0 -261
  574. package/src/storage.ts +0 -408
  575. package/src/tools.ts +0 -166
  576. package/src/types.ts +0 -3776
  577. /package/dist/docs/assets/{reference_agent-config.md.DzGI777n.lean.js → reference_agent-config.md.Cj5uBKp4.lean.js} +0 -0
@@ -1,222 +0,0 @@
1
- /**
2
- * The one decision every tool call passes through.
3
- *
4
- * A tool body can be reached by more than one path — the model's own calls on
5
- * a local turn, a cloud turn's calls over the MCP endpoint, a direct
6
- * `callTool`, the host connection bridge. Each of those is a separate code
7
- * path, and a guarantee that holds on some of them is not a guarantee. So the
8
- * decision lives here, in one pure function, and every path asks it rather
9
- * than re-implementing it.
10
- */
11
-
12
- import type {
13
- DiscoveredTool,
14
- McpToolAnnotations,
15
- ToolEffect,
16
- ToolEffectDeclaration,
17
- ToolExecuteResult,
18
- } from "../types.js";
19
- import { forwardTimeArgument, missingTimeWindow, timeArgViolation } from "./as-of.js";
20
-
21
- /** What the host does with one tool call. */
22
- export type ToolDecision =
23
- /** Run the tool body. */
24
- | { kind: "run" }
25
- /** Do not run it; return this to the model instead. */
26
- | { kind: "answer"; result: ToolExecuteResult }
27
- /**
28
- * Do not run it; fail the call with this message. Only produced in a dry
29
- * run, for an MCP tool nothing classifies: stubbing it would let the run
30
- * reach a confident conclusion from no data, and running it could leak a
31
- * real write — refusing is the one failure that is loud.
32
- */
33
- | { kind: "refuse"; message: string }
34
- /**
35
- * Do not run it; the `asOf` session was asked to read without absolute
36
- * bounds, which would read the present.
37
- */
38
- | { kind: "unbounded"; message: string };
39
-
40
- /** What a policy decision needs to know about the call. */
41
- export interface ToolCallFacts {
42
- /** The session answers writes instead of running them. */
43
- dryRun: boolean;
44
- /** The tool's declaration, if it made one. */
45
- effect: ToolEffectDeclaration<never> | undefined;
46
- /**
47
- * Present when the call targets a tool nobody authored — an advertised MCP
48
- * passthrough or a bridged MCP call. Consulted only when {@link effect} is
49
- * undeclared: the server's own annotations classify the call, and a tool
50
- * they cannot classify refuses in a dry run instead of being stubbed as a
51
- * write the way an undeclared authored tool is.
52
- */
53
- mcpTool?: { name: string; annotations?: McpToolAnnotations };
54
- /** What a stubbed write should answer with, if the tool supplied one. */
55
- dryRunResult?: ToolExecuteResult | ((input: never) => ToolExecuteResult);
56
- /**
57
- * Validated input, as the tool body would receive it. Read by a per-call
58
- * `effect` predicate, a `dryRunResult` function, and the {@link timeArgs}
59
- * bound check, so a caller with none of those — a bridged MCP tool, which
60
- * carries no declaration at all — can omit it.
61
- */
62
- input?: unknown;
63
- /** The session's frozen instant, when it has one. */
64
- asOf?: string;
65
- /** The tool's declared time-bound argument names, if it made them. */
66
- timeArgs?: readonly string[];
67
- /**
68
- * String-typed time-window property names a vendor tool's own input schema
69
- * declares (`from`/`to`/`since`/...). In a frozen session a call that omits
70
- * one is refused: the vendor fills an omitted window with a live default
71
- * the argument walker can never see. Advertised/bridged MCP tools only —
72
- * authored tools declare {@link timeArgs} instead.
73
- */
74
- timeWindow?: readonly string[];
75
- }
76
-
77
- /**
78
- * What a stubbed write answers. Deliberately not self-describing: a model told
79
- * mid-turn that its writes are not real starts hedging its conclusions, and
80
- * the conclusion is the thing a dry run exists to read. Tell the agent once,
81
- * in its opening prompt, not in a tool result.
82
- */
83
- const ACKNOWLEDGED = "Operation acknowledged.";
84
-
85
- /**
86
- * The effect of one specific call.
87
- *
88
- * Undeclared resolves to `"write"`. A dry run promises that nothing outside
89
- * the session changed, and it cannot promise that about a tool it knows
90
- * nothing about — so the unknown case is the one that costs a stubbed read
91
- * rather than the one that leaks a real write.
92
- */
93
- export function resolveEffect(
94
- effect: ToolEffectDeclaration<never> | undefined,
95
- input: unknown,
96
- ): ToolEffect {
97
- const declared = typeof effect === "function" ? effect(input as never) : effect;
98
- return declared === "read" ? "read" : "write";
99
- }
100
-
101
- /**
102
- * The effect an MCP server's own annotations declare, fail-closed.
103
- *
104
- * `readOnlyHint: true` without `destructiveHint: true` is a read; either
105
- * negative signal is a write; anything else — absent annotations, or
106
- * annotations that carry no effect signal (a bare `title`) — is `undefined`,
107
- * unclassified. Mirrors `@anysphere/mcp-core/mcp-tool-annotations`
108
- * (`classifyMcpToolAnnotationRisk`), which this package cannot import (npm
109
- * publish, workspace-only dependency); keep the two in sync.
110
- */
111
- export function classifyAnnotationsEffect(
112
- annotations: McpToolAnnotations | undefined,
113
- ): ToolEffect | undefined {
114
- if (annotations === undefined) {
115
- return undefined;
116
- }
117
- if (annotations.destructiveHint !== true && annotations.readOnlyHint === true) {
118
- return "read";
119
- }
120
- if (annotations.readOnlyHint === false || annotations.destructiveHint === true) {
121
- return "write";
122
- }
123
- return undefined;
124
- }
125
-
126
- /**
127
- * The effect of one direct call on a discovered tool, the same way
128
- * {@link decideToolCall} reads it: the authored declaration when there is
129
- * one (possibly per input), else the MCP server's own annotations for an
130
- * advertised passthrough. `undefined` is an advertised tool nothing
131
- * classifies; callers gating on "read" treat it as a write.
132
- */
133
- export function directCallEffect(
134
- tool: Pick<DiscoveredTool, "advertised" | "annotations" | "definition">,
135
- input: unknown,
136
- ): ToolEffect | undefined {
137
- if (tool.definition.effect === undefined && tool.advertised === true) {
138
- return classifyAnnotationsEffect(tool.annotations);
139
- }
140
- return resolveEffect(tool.definition.effect, input);
141
- }
142
-
143
- /**
144
- * What a dry run answers when nothing classifies an MCP tool. Deliberately
145
- * reads as a strict API rather than disclosing the session's posture (see
146
- * {@link ACKNOWLEDGED}), and names what is missing so the fix — the server
147
- * annotating, or a server-side classification entry — is one step away.
148
- */
149
- function unclassifiedRefusal(toolName: string): string {
150
- return (
151
- `Tool "${toolName}" is not available in this session: its MCP server ` +
152
- `does not declare whether it reads or writes (readOnlyHint/` +
153
- `destructiveHint), and no server-side classification exists for it, so ` +
154
- `this session cannot tell whether calling it would change anything ` +
155
- `outside the session. Use a tool that declares its effect.`
156
- );
157
- }
158
-
159
- /** Decide what to do with one tool call. Pure; no I/O, no session state. */
160
- export function decideToolCall(facts: ToolCallFacts): ToolDecision {
161
- // Before the dry-run split: a frozen session bounds its reads whether or
162
- // not its writes are stubbed.
163
- if (facts.asOf !== undefined) {
164
- if (facts.timeArgs !== undefined && facts.timeArgs.length > 0) {
165
- const violation = timeArgViolation(facts.input, facts.timeArgs, facts.asOf);
166
- if (violation !== undefined) {
167
- return { kind: "unbounded", message: violation };
168
- }
169
- }
170
- const forward = forwardTimeArgument(facts.input, facts.asOf);
171
- if (forward !== undefined) {
172
- return { kind: "unbounded", message: forward };
173
- }
174
- // Present values are checked above; absent ones are the vendor's live
175
- // default window, which no walker can see. Require them explicitly.
176
- if (facts.timeWindow !== undefined) {
177
- const omitted = missingTimeWindow(facts.input, facts.timeWindow, facts.asOf);
178
- if (omitted !== undefined) {
179
- return { kind: "unbounded", message: omitted };
180
- }
181
- }
182
- }
183
- if (!facts.dryRun) {
184
- return { kind: "run" };
185
- }
186
- if (facts.effect === undefined && facts.mcpTool !== undefined) {
187
- const effect = classifyAnnotationsEffect(facts.mcpTool.annotations);
188
- if (effect === undefined) {
189
- return {
190
- kind: "refuse",
191
- message: unclassifiedRefusal(facts.mcpTool.name),
192
- };
193
- }
194
- if (effect === "read") {
195
- return { kind: "run" };
196
- }
197
- return {
198
- kind: "answer",
199
- result: dryRunAnswer(facts.dryRunResult, facts.input),
200
- };
201
- }
202
- if (resolveEffect(facts.effect, facts.input) === "read") {
203
- return { kind: "run" };
204
- }
205
- return {
206
- kind: "answer",
207
- result: dryRunAnswer(facts.dryRunResult, facts.input),
208
- };
209
- }
210
-
211
- function dryRunAnswer(
212
- dryRunResult: ToolCallFacts["dryRunResult"],
213
- input: unknown,
214
- ): ToolExecuteResult {
215
- if (dryRunResult === undefined) {
216
- return ACKNOWLEDGED;
217
- }
218
- if (typeof dryRunResult === "function") {
219
- return dryRunResult(input as never);
220
- }
221
- return dryRunResult;
222
- }
@@ -1,50 +0,0 @@
1
- import type { SDKCustomToolResult } from "@cursor/sdk";
2
- import type { ToolExecuteResult } from "../types.js";
3
-
4
- /**
5
- * Normalize a custom tool's return value for the SDK.
6
- *
7
- * Plain objects are round-tripped through JSON so fields whose value is
8
- * `undefined` are dropped (JSON semantics). Without this, a return like
9
- * `{ action: undefined }` reaches the SDK's protobuf `Struct.fromJson`,
10
- * which throws `cannot decode google.protobuf.Value from JSON undefined` —
11
- * the tool has already executed, but the model only sees an opaque encode
12
- * error and typically retries the call.
13
- */
14
- export function normalizeToolResult(result: ToolExecuteResult | undefined): SDKCustomToolResult {
15
- if (result === undefined) {
16
- return "";
17
- }
18
- if (typeof result === "string") {
19
- return result;
20
- }
21
- try {
22
- return JSON.parse(JSON.stringify(result)) as SDKCustomToolResult;
23
- } catch {
24
- return result as SDKCustomToolResult;
25
- }
26
- }
27
-
28
- /**
29
- * Pull a channel-friendly error string out of a normalized tool result
30
- * (error envelopes with `{ content: [{ type: "text", text }] }`, or a
31
- * bare string). Used for {@link import("../types.js").ToolCallOutcome.errorMessage}.
32
- */
33
- export function toolCallErrorMessage(result: unknown): string | undefined {
34
- if (typeof result === "string" && result.trim() !== "") {
35
- return result;
36
- }
37
- if (
38
- result === null ||
39
- typeof result !== "object" ||
40
- !("content" in result) ||
41
- !Array.isArray((result as { content: unknown }).content)
42
- ) {
43
- return undefined;
44
- }
45
- const texts = (result as { content: Array<{ type?: string; text?: string }> }).content
46
- .filter(part => part.type === "text" && typeof part.text === "string")
47
- .map(part => part.text!.trim())
48
- .filter(text => text !== "");
49
- return texts.length === 0 ? undefined : texts.join("\n");
50
- }
@@ -1,418 +0,0 @@
1
- /**
2
- * Compact, agent-friendly views of a session's NDJSON event stream.
3
- *
4
- * Coding agents (and eval harnesses) want a stable JSON shape: user
5
- * messages, assistant text, tool calls with args/results, and
6
- * success/failure — not a firehose of streaming deltas.
7
- */
8
-
9
- import { readFile } from "node:fs/promises";
10
- import type { SessionEvent, TurnCost, TurnUsage } from "../types.js";
11
-
12
- export interface TrajectoryToolCall {
13
- callId: string;
14
- toolName: string;
15
- args?: unknown;
16
- output?: unknown;
17
- isError: boolean;
18
- /** Present when the tool required human approval before execute. */
19
- approvalDecision?: "approve" | "deny";
20
- /** Parent task/subagent call id when this tool ran inside a subagent. */
21
- parentCallId?: string;
22
- }
23
-
24
- export interface TrajectorySubagent {
25
- callId: string;
26
- name?: string;
27
- description?: string;
28
- /** Nested tool calls streamed while this subagent was running. */
29
- toolCalls: TrajectoryToolCall[];
30
- }
31
-
32
- export interface TrajectoryTurn {
33
- turnId: string;
34
- userMessage?: string;
35
- assistantText: string;
36
- reasoningText?: string;
37
- toolCalls: TrajectoryToolCall[];
38
- subagents: TrajectorySubagent[];
39
- usage?: TurnUsage;
40
- /** Estimated dollar cost of this turn (from the `turn.completed` event). */
41
- cost?: TurnCost;
42
- result?: string;
43
- failed: boolean;
44
- error?: string;
45
- }
46
-
47
- export interface Trajectory {
48
- sessionId: string;
49
- sdkAgentId?: string;
50
- agentUrl?: string;
51
- channelId?: string;
52
- ok: boolean;
53
- finalText: string;
54
- turnsFailed: number;
55
- toolCallCount: number;
56
- /** Sum of per-turn estimated costs; present when any turn reported cost. */
57
- totalCostUsd?: number;
58
- turns: TrajectoryTurn[];
59
- }
60
-
61
- /**
62
- * Collapse a session event list into a trajectory. Streaming deltas are
63
- * folded into final assistant / reasoning text per turn.
64
- */
65
- export function buildTrajectory(events: SessionEvent[]): Trajectory {
66
- let sessionId = "";
67
- let sdkAgentId: string | undefined;
68
- let agentUrl: string | undefined;
69
- let channelId: string | undefined;
70
- const turnsById = new Map<string, TrajectoryTurn>();
71
- const turnOrder: string[] = [];
72
- const pendingCalls = new Map<string, TrajectoryToolCall>();
73
-
74
- const ensureTurn = (turnId: string): TrajectoryTurn => {
75
- const existing = turnsById.get(turnId);
76
- if (existing !== undefined) {
77
- return existing;
78
- }
79
- const turn: TrajectoryTurn = {
80
- turnId,
81
- assistantText: "",
82
- toolCalls: [],
83
- subagents: [],
84
- failed: false,
85
- };
86
- turnsById.set(turnId, turn);
87
- turnOrder.push(turnId);
88
- return turn;
89
- };
90
-
91
- for (const event of events) {
92
- if (sessionId === "" && typeof event.sessionId === "string") {
93
- sessionId = event.sessionId;
94
- }
95
- switch (event.type) {
96
- case "session.started": {
97
- channelId = event.data.channelId;
98
- break;
99
- }
100
- case "agent.bound": {
101
- sdkAgentId = event.data.sdkAgentId;
102
- agentUrl = event.data.url;
103
- break;
104
- }
105
- case "message.received": {
106
- if (event.turnId !== undefined) {
107
- ensureTurn(event.turnId).userMessage = event.data.text;
108
- }
109
- break;
110
- }
111
- case "message.completed": {
112
- // Nested subagent text must not overwrite the parent turn reply.
113
- if (event.data.parentCallId !== undefined) {
114
- break;
115
- }
116
- if (event.turnId !== undefined && event.data.text !== "") {
117
- ensureTurn(event.turnId).assistantText = event.data.text;
118
- }
119
- break;
120
- }
121
- case "reasoning.appended": {
122
- // Nested subagent thinking stays off the parent turn transcript.
123
- if (event.data.parentCallId !== undefined) {
124
- break;
125
- }
126
- if (event.turnId !== undefined) {
127
- ensureTurn(event.turnId).reasoningText = event.data.text;
128
- }
129
- break;
130
- }
131
- case "actions.requested": {
132
- if (event.turnId === undefined) {
133
- break;
134
- }
135
- const turn = ensureTurn(event.turnId);
136
- for (const call of event.data.calls) {
137
- const parentCallId = call.parentCallId ?? event.data.parentCallId;
138
- // Keep bare top-level `task` in toolCalls so evals like
139
- // `calledTool("task")` / `notCalledTool("task")` keep working.
140
- // Nested progress also appears under `subagents`.
141
- const entry: TrajectoryToolCall = {
142
- callId: call.callId,
143
- toolName: call.toolName,
144
- isError: false,
145
- args: call.args,
146
- parentCallId,
147
- };
148
- pendingCalls.set(call.callId, entry);
149
- if (parentCallId !== undefined) {
150
- let sub = turn.subagents.find(s => s.callId === parentCallId);
151
- if (sub === undefined) {
152
- sub = { callId: parentCallId, toolCalls: [] };
153
- turn.subagents.push(sub);
154
- }
155
- sub.toolCalls.push(entry);
156
- } else {
157
- turn.toolCalls.push(entry);
158
- }
159
- }
160
- break;
161
- }
162
- case "action.approval_requested": {
163
- // Traceability only — the call is already listed under actions.requested.
164
- break;
165
- }
166
- case "action.approval_resolved": {
167
- const pending = pendingCalls.get(event.data.callId);
168
- if (pending !== undefined) {
169
- pending.approvalDecision = event.data.decision;
170
- }
171
- break;
172
- }
173
- case "action.auth_requested": {
174
- break;
175
- }
176
- case "action.auth_resolved": {
177
- const pending = pendingCalls.get(event.data.callId);
178
- if (pending !== undefined) {
179
- pending.approvalDecision = event.data.decision;
180
- }
181
- break;
182
- }
183
- case "action.result": {
184
- const pending = pendingCalls.get(event.data.callId);
185
- if (pending !== undefined) {
186
- pending.output = event.data.output;
187
- pending.isError = event.data.isError;
188
- pending.toolName = event.data.toolName;
189
- } else if (event.turnId !== undefined) {
190
- const turn = ensureTurn(event.turnId);
191
- const entry: TrajectoryToolCall = {
192
- callId: event.data.callId,
193
- toolName: event.data.toolName,
194
- output: event.data.output,
195
- isError: event.data.isError,
196
- parentCallId: event.data.parentCallId,
197
- };
198
- if (event.data.parentCallId !== undefined) {
199
- let sub = turn.subagents.find(s => s.callId === event.data.parentCallId);
200
- if (sub === undefined) {
201
- sub = {
202
- callId: event.data.parentCallId,
203
- toolCalls: [],
204
- };
205
- turn.subagents.push(sub);
206
- }
207
- sub.toolCalls.push(entry);
208
- } else {
209
- turn.toolCalls.push(entry);
210
- }
211
- }
212
- break;
213
- }
214
- case "subagent.called": {
215
- if (event.turnId !== undefined) {
216
- const turn = ensureTurn(event.turnId);
217
- const existing = turn.subagents.find(s => s.callId === event.data.callId);
218
- if (existing !== undefined) {
219
- existing.name = event.data.name;
220
- existing.description = event.data.description;
221
- } else {
222
- turn.subagents.push({
223
- callId: event.data.callId,
224
- name: event.data.name,
225
- description: event.data.description,
226
- toolCalls: [],
227
- });
228
- }
229
- }
230
- break;
231
- }
232
- case "turn.completed": {
233
- if (event.turnId === undefined) {
234
- break;
235
- }
236
- const turn = ensureTurn(event.turnId);
237
- turn.failed = false;
238
- if (event.data.usage !== undefined) {
239
- turn.usage = event.data.usage;
240
- }
241
- if (event.data.cost !== undefined) {
242
- turn.cost = event.data.cost;
243
- }
244
- if (event.data.result !== undefined) {
245
- turn.result = event.data.result;
246
- if (turn.assistantText === "") {
247
- turn.assistantText = event.data.result;
248
- }
249
- }
250
- break;
251
- }
252
- case "turn.failed": {
253
- if (event.turnId !== undefined) {
254
- const turn = ensureTurn(event.turnId);
255
- turn.failed = true;
256
- turn.error = event.data.message;
257
- }
258
- break;
259
- }
260
- case "session.failed": {
261
- if (event.turnId !== undefined) {
262
- const turn = ensureTurn(event.turnId);
263
- turn.failed = true;
264
- turn.error = event.data.message;
265
- }
266
- break;
267
- }
268
- default:
269
- break;
270
- }
271
- }
272
-
273
- const turns = turnOrder.map(id => turnsById.get(id)!);
274
- const turnsFailed = turns.filter(t => t.failed).length;
275
- const toolCallCount = turns.reduce(
276
- (n, t) => n + t.toolCalls.length + t.subagents.reduce((m, s) => m + s.toolCalls.length, 0),
277
- 0,
278
- );
279
- const lastGood = [...turns].reverse().find(t => t.assistantText !== "");
280
- const costedTurns = turns.filter(t => t.cost !== undefined);
281
- const totalCostUsd =
282
- costedTurns.length === 0
283
- ? undefined
284
- : roundCostUsd(costedTurns.reduce((sum, t) => sum + (t.cost?.totalUsd ?? 0), 0));
285
- return {
286
- sessionId,
287
- ...(sdkAgentId === undefined ? {} : { sdkAgentId }),
288
- ...(agentUrl === undefined ? {} : { agentUrl }),
289
- ...(channelId === undefined ? {} : { channelId }),
290
- ok: turnsFailed === 0 && turns.length > 0,
291
- finalText: lastGood?.assistantText ?? "",
292
- turnsFailed,
293
- toolCallCount,
294
- ...(totalCostUsd === undefined ? {} : { totalCostUsd }),
295
- turns,
296
- };
297
- }
298
-
299
- /** Micro-dollar precision so summed floats stay readable in JSON. */
300
- export function roundCostUsd(usd: number): number {
301
- return Math.round(usd * 1e6) / 1e6;
302
- }
303
-
304
- /** Compact dollar display for estimated costs (`$0.0132`, `$1.25`). */
305
- export function formatCostUsd(usd: number): string {
306
- if (!Number.isFinite(usd)) {
307
- return "—";
308
- }
309
- if (usd === 0) {
310
- return "$0.00";
311
- }
312
- if (usd >= 0.1) {
313
- return `$${usd.toFixed(2)}`;
314
- }
315
- return `$${usd.toFixed(4)}`;
316
- }
317
-
318
- /** Parse an `events.ndjson` file (or any NDJSON blob of SessionEvents). */
319
- export function parseEventsNdjson(text: string): SessionEvent[] {
320
- const events: SessionEvent[] = [];
321
- for (const line of text.split("\n")) {
322
- const trimmed = line.trim();
323
- if (trimmed === "") {
324
- continue;
325
- }
326
- try {
327
- events.push(JSON.parse(trimmed) as SessionEvent);
328
- } catch {
329
- // skip malformed lines
330
- }
331
- }
332
- return events;
333
- }
334
-
335
- /** Load and summarize a durable session event log. */
336
- export async function loadTrajectoryFromEventsFile(path: string): Promise<Trajectory> {
337
- const text = await readFile(path, "utf8");
338
- return buildTrajectory(parseEventsNdjson(text));
339
- }
340
-
341
- /** Human-readable one-line-per-turn dump (for non-JSON CLI output). */
342
- export function formatTrajectoryText(trajectory: Trajectory): string {
343
- const lines: string[] = [];
344
- lines.push(`session ${trajectory.sessionId || "(unknown)"} ok=${trajectory.ok}`);
345
- if (trajectory.sdkAgentId !== undefined) {
346
- lines.push(`sdkAgentId: ${trajectory.sdkAgentId}`);
347
- }
348
- if (trajectory.agentUrl !== undefined) {
349
- lines.push(`url: ${trajectory.agentUrl}`);
350
- }
351
- lines.push(
352
- `turns: ${trajectory.turns.length} tools=${trajectory.toolCallCount} failed: ${trajectory.turnsFailed}${
353
- trajectory.totalCostUsd === undefined
354
- ? ""
355
- : ` cost: ${formatCostUsd(trajectory.totalCostUsd)}`
356
- }`,
357
- );
358
- for (const turn of trajectory.turns) {
359
- lines.push("");
360
- lines.push(`── ${turn.turnId}${turn.failed ? " FAILED" : ""} ──`);
361
- if (turn.userMessage !== undefined) {
362
- lines.push(` user: ${truncate(turn.userMessage, 200)}`);
363
- }
364
- for (const call of turn.toolCalls) {
365
- const mark = call.isError ? "✗" : "→";
366
- lines.push(` ${mark} ${call.toolName}${formatArgs(call.args)}`);
367
- if (call.output !== undefined) {
368
- lines.push(` ${truncate(stringify(call.output), 160)}`);
369
- }
370
- }
371
- for (const sub of turn.subagents) {
372
- const label = sub.name ?? "subagent";
373
- const detail = sub.description !== undefined ? ` — ${truncate(sub.description, 80)}` : "";
374
- lines.push(` task ${label}${detail}`);
375
- for (const call of sub.toolCalls) {
376
- const mark = call.isError ? "✗" : "→";
377
- lines.push(` ${mark} ${call.toolName}${formatArgs(call.args)}`);
378
- if (call.output !== undefined) {
379
- lines.push(` ${truncate(stringify(call.output), 160)}`);
380
- }
381
- }
382
- }
383
- if (turn.assistantText.length > 0) {
384
- lines.push(` agent: ${truncate(turn.assistantText, 400)}`);
385
- }
386
- if (turn.error !== undefined) {
387
- lines.push(` error: ${turn.error}`);
388
- }
389
- if (turn.usage !== undefined) {
390
- lines.push(
391
- ` usage: in ${turn.usage.inputTokens} out ${turn.usage.outputTokens}${
392
- turn.cost === undefined ? "" : ` cost: ${formatCostUsd(turn.cost.totalUsd)}`
393
- }`,
394
- );
395
- }
396
- }
397
- return `${lines.join("\n")}\n`;
398
- }
399
-
400
- function stringify(value: unknown): string {
401
- if (value === undefined || value === null) {
402
- return "(no output)";
403
- }
404
- return typeof value === "string" ? value : JSON.stringify(value);
405
- }
406
-
407
- function formatArgs(args: unknown): string {
408
- if (args === undefined || args === null) {
409
- return "";
410
- }
411
- const text = typeof args === "string" ? args : JSON.stringify(args);
412
- return text === "{}" ? "" : `(${truncate(text, 80)})`;
413
- }
414
-
415
- function truncate(text: string, max: number): string {
416
- const oneLine = text.replace(/\s+/g, " ").trim();
417
- return oneLine.length > max ? `${oneLine.slice(0, max - 1)}…` : oneLine;
418
- }