@cursor/july 0.1.109 → 0.1.111

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 (1076) hide show
  1. package/AGENTS.md +1 -1
  2. package/README.md +0 -15
  3. package/dist/bin/agent-serve.js +81 -66
  4. package/dist/channels/bitbucket/api.js +8 -8
  5. package/dist/channels/bitbucket/binding.js +4 -4
  6. package/dist/channels/bitbucket/bitbucket-channel.js +1 -1
  7. package/dist/channels/bitbucket/bitbucket-webhook.js +1 -1
  8. package/dist/channels/bitbucket/checks.d.ts.map +1 -1
  9. package/dist/channels/bitbucket/checks.js +1 -1
  10. package/dist/channels/bitbucket/cursor-account.js +1 -1
  11. package/dist/channels/bitbucket/events.js +1 -1
  12. package/dist/channels/change-monitors/change-monitors-channel.js +1 -1
  13. package/dist/channels/checks.d.ts.map +1 -1
  14. package/dist/channels/checks.js +2 -2
  15. package/dist/channels/deployments/deployments-channel.js +1 -1
  16. package/dist/channels/github/cursor-account.js +3 -3
  17. package/dist/channels/github/defaults.d.ts.map +1 -1
  18. package/dist/channels/github/defaults.js +5 -3
  19. package/dist/channels/github/events.js +1 -1
  20. package/dist/channels/github/forward.js +8 -8
  21. package/dist/channels/github/github-channel.d.ts.map +1 -1
  22. package/dist/channels/github/github-channel.js +17 -13
  23. package/dist/channels/github/progress.d.ts.map +1 -1
  24. package/dist/channels/github/progress.js +7 -2
  25. package/dist/channels/github/state.d.ts +6 -0
  26. package/dist/channels/github/state.d.ts.map +1 -1
  27. package/dist/channels/github/types.d.ts +6 -0
  28. package/dist/channels/github/types.d.ts.map +1 -1
  29. package/dist/channels/gitlab/binding.js +4 -4
  30. package/dist/channels/gitlab/checks.d.ts.map +1 -1
  31. package/dist/channels/gitlab/checks.js +1 -1
  32. package/dist/channels/gitlab/cursor-account.js +1 -1
  33. package/dist/channels/gitlab/events.js +1 -1
  34. package/dist/channels/gitlab/gitlab-channel.js +1 -1
  35. package/dist/channels/gitlab/gitlab-webhook.js +1 -1
  36. package/dist/channels/gitlab/replay.js +2 -2
  37. package/dist/channels/origin/binding.d.ts +2 -0
  38. package/dist/channels/origin/binding.d.ts.map +1 -1
  39. package/dist/channels/origin/binding.js +3 -3
  40. package/dist/channels/origin/checks.d.ts +19 -7
  41. package/dist/channels/origin/checks.d.ts.map +1 -1
  42. package/dist/channels/origin/checks.js +13 -9
  43. package/dist/channels/origin/cursor-account.js +1 -1
  44. package/dist/channels/origin/defaults.d.ts.map +1 -1
  45. package/dist/channels/origin/defaults.js +3 -1
  46. package/dist/channels/origin/events.js +1 -1
  47. package/dist/channels/origin/origin-channel.d.ts.map +1 -1
  48. package/dist/channels/origin/origin-channel.js +2 -1
  49. package/dist/channels/origin/origin-webhook.js +2 -2
  50. package/dist/channels/slack/agentic-delivery.d.ts +23 -0
  51. package/dist/channels/slack/agentic-delivery.d.ts.map +1 -0
  52. package/dist/channels/slack/agentic-delivery.js +558 -0
  53. package/dist/channels/slack/agentic-posted.d.ts +30 -0
  54. package/dist/channels/slack/agentic-posted.d.ts.map +1 -0
  55. package/dist/channels/slack/agentic-posted.js +102 -0
  56. package/dist/channels/slack/agentic-signals.d.ts +48 -0
  57. package/dist/channels/slack/agentic-signals.d.ts.map +1 -0
  58. package/dist/channels/slack/agentic-signals.js +204 -0
  59. package/dist/channels/slack/api.d.ts +20 -1
  60. package/dist/channels/slack/api.d.ts.map +1 -1
  61. package/dist/channels/slack/api.js +43 -11
  62. package/dist/channels/slack/approvals.js +1 -1
  63. package/dist/channels/slack/auth.d.ts.map +1 -1
  64. package/dist/channels/slack/auth.js +3 -1
  65. package/dist/channels/slack/blocks.js +3 -3
  66. package/dist/channels/slack/bot-mentions.d.ts.map +1 -1
  67. package/dist/channels/slack/bot-mentions.js +5 -5
  68. package/dist/channels/slack/channel-watch.js +1 -1
  69. package/dist/channels/slack/cli-project.js +3 -3
  70. package/dist/channels/slack/defaults.d.ts +3 -0
  71. package/dist/channels/slack/defaults.d.ts.map +1 -1
  72. package/dist/channels/slack/defaults.js +90 -29
  73. package/dist/channels/slack/dispatch.d.ts +34 -1
  74. package/dist/channels/slack/dispatch.d.ts.map +1 -1
  75. package/dist/channels/slack/dispatch.js +219 -106
  76. package/dist/channels/slack/doctor.js +1 -1
  77. package/dist/channels/slack/eval-directive.js +1 -1
  78. package/dist/channels/slack/external-policy.d.ts +2 -1
  79. package/dist/channels/slack/external-policy.d.ts.map +1 -1
  80. package/dist/channels/slack/external-policy.js +13 -2
  81. package/dist/channels/slack/footer.d.ts +30 -0
  82. package/dist/channels/slack/footer.d.ts.map +1 -0
  83. package/dist/channels/slack/footer.js +88 -0
  84. package/dist/channels/slack/index.d.ts +2 -0
  85. package/dist/channels/slack/index.d.ts.map +1 -1
  86. package/dist/channels/slack/index.js +2 -0
  87. package/dist/channels/slack/interactive.d.ts.map +1 -1
  88. package/dist/channels/slack/interactive.js +5 -3
  89. package/dist/channels/slack/live-delivery.d.ts +1 -1
  90. package/dist/channels/slack/live-delivery.d.ts.map +1 -1
  91. package/dist/channels/slack/live-delivery.js +20 -6
  92. package/dist/channels/slack/log.d.ts.map +1 -1
  93. package/dist/channels/slack/log.js +1 -1
  94. package/dist/channels/slack/manifest.js +1 -1
  95. package/dist/channels/slack/nudge-carrier.js +1 -1
  96. package/dist/channels/slack/nudge-store.js +2 -2
  97. package/dist/channels/slack/paint-start.d.ts +22 -0
  98. package/dist/channels/slack/paint-start.d.ts.map +1 -0
  99. package/dist/channels/slack/paint-start.js +91 -0
  100. package/dist/channels/slack/placeholder.d.ts +36 -0
  101. package/dist/channels/slack/placeholder.d.ts.map +1 -0
  102. package/dist/channels/slack/placeholder.js +240 -0
  103. package/dist/channels/slack/progress-delivery.d.ts.map +1 -1
  104. package/dist/channels/slack/progress-delivery.js +13 -4
  105. package/dist/channels/slack/reasoning-chip.d.ts +8 -0
  106. package/dist/channels/slack/reasoning-chip.d.ts.map +1 -0
  107. package/dist/channels/slack/reasoning-chip.js +30 -0
  108. package/dist/channels/slack/recording-sink.d.ts +29 -0
  109. package/dist/channels/slack/recording-sink.d.ts.map +1 -0
  110. package/dist/channels/slack/recording-sink.js +142 -0
  111. package/dist/channels/slack/reply-options.d.ts +8 -1
  112. package/dist/channels/slack/reply-options.d.ts.map +1 -1
  113. package/dist/channels/slack/reply-options.js +59 -14
  114. package/dist/channels/slack/setup.js +1 -1
  115. package/dist/channels/slack/slack-channel.d.ts +2 -2
  116. package/dist/channels/slack/slack-channel.d.ts.map +1 -1
  117. package/dist/channels/slack/slack-channel.js +55 -20
  118. package/dist/channels/slack/socket-mode.js +2 -2
  119. package/dist/channels/slack/thread-context.js +5 -5
  120. package/dist/channels/slack/tool-approval-events.d.ts +5 -0
  121. package/dist/channels/slack/tool-approval-events.d.ts.map +1 -1
  122. package/dist/channels/slack/tool-approval-events.js +50 -38
  123. package/dist/channels/slack/tool-cards.js +1 -1
  124. package/dist/channels/slack/tool-chip.d.ts +9 -0
  125. package/dist/channels/slack/tool-chip.d.ts.map +1 -0
  126. package/dist/channels/slack/tool-chip.js +25 -0
  127. package/dist/channels/slack/types.d.ts +49 -7
  128. package/dist/channels/slack/types.d.ts.map +1 -1
  129. package/dist/channels/slack/upload.d.ts +13 -0
  130. package/dist/channels/slack/upload.d.ts.map +1 -0
  131. package/dist/channels/slack/upload.js +135 -0
  132. package/dist/channels.d.ts +10 -14
  133. package/dist/channels.d.ts.map +1 -1
  134. package/dist/channels.js +9 -21
  135. package/dist/dashboard-session-url.d.ts +15 -0
  136. package/dist/dashboard-session-url.d.ts.map +1 -0
  137. package/dist/dashboard-session-url.js +25 -0
  138. package/dist/docs/404.html +3 -3
  139. package/dist/docs/architecture.svg +59 -0
  140. package/dist/docs/assets/app.Drol6mi6.js +309 -0
  141. package/dist/docs/assets/{building-with-agents.md.D0KbSkJn.js → building-with-agents.md.CEGVXkmO.js} +2 -2
  142. package/dist/docs/assets/{building-with-agents.md.D0KbSkJn.lean.js → building-with-agents.md.CEGVXkmO.lean.js} +1 -1
  143. package/dist/docs/assets/chunks/@localSearchIndexroot.DtXk1hy-.js +1 -0
  144. package/dist/docs/assets/chunks/{VPLocalSearchBox.CVQERt56.js → VPLocalSearchBox.CdqoBZJX.js} +2 -2
  145. package/dist/docs/assets/chunks/arc.BVX3ycTn.js +1 -0
  146. package/dist/docs/assets/chunks/architectureDiagram-Q4EWVU46.CcChnMxX.js +36 -0
  147. package/dist/docs/assets/chunks/baseUniq.xwtXO-yt.js +1 -0
  148. package/dist/docs/assets/chunks/blockDiagram-DXYQGD6D.CijZ_taK.js +132 -0
  149. package/dist/docs/assets/chunks/c4Diagram-AHTNJAMY.0FBvwBvK.js +10 -0
  150. package/dist/docs/assets/chunks/channel.Bkv1N-gK.js +1 -0
  151. package/dist/docs/assets/chunks/chunk-4BX2VUAB.CELMmMDA.js +1 -0
  152. package/dist/docs/assets/chunks/chunk-4TB4RGXK.C4bhFtSm.js +206 -0
  153. package/dist/docs/assets/chunks/chunk-55IACEB6.ZnQ9gRRQ.js +1 -0
  154. package/dist/docs/assets/chunks/chunk-EDXVE4YY.DPlmglG-.js +1 -0
  155. package/dist/docs/assets/chunks/chunk-FMBD7UC4.BrUk8pff.js +15 -0
  156. package/dist/docs/assets/chunks/chunk-OYMX7WX6.CcmWIncu.js +231 -0
  157. package/dist/docs/assets/chunks/chunk-QZHKN3VN.D65-cs8I.js +1 -0
  158. package/dist/docs/assets/chunks/chunk-YZCP3GAM.qoXZpG9F.js +1 -0
  159. package/dist/docs/assets/chunks/classDiagram-6PBFFD2Q.CZDco1o8.js +1 -0
  160. package/dist/docs/assets/chunks/classDiagram-v2-HSJHXN6E.CZDco1o8.js +1 -0
  161. package/dist/docs/assets/chunks/clone.YSt_40_s.js +1 -0
  162. package/dist/docs/assets/chunks/cose-bilkent-S5V4N54A.8rYtqudO.js +1 -0
  163. package/dist/docs/assets/chunks/cytoscape.esm.BQk4lpUV.js +331 -0
  164. package/dist/docs/assets/chunks/dagre-KV5264BT.DrRP1fOh.js +4 -0
  165. package/dist/docs/assets/chunks/defaultLocale.C4B-KCzX.js +1 -0
  166. package/dist/docs/assets/chunks/diagram-5BDNPKRD.DHj_xA2_.js +10 -0
  167. package/dist/docs/assets/chunks/diagram-G4DWMVQ6.Bz_6nAKj.js +24 -0
  168. package/dist/docs/assets/chunks/diagram-MMDJMWI5.BWA0xSW9.js +43 -0
  169. package/dist/docs/assets/chunks/diagram-TYMM5635.CpTJLNJI.js +24 -0
  170. package/dist/docs/assets/chunks/erDiagram-SMLLAGMA.-7AWWSrP.js +85 -0
  171. package/dist/docs/assets/chunks/flowDiagram-DWJPFMVM.BTnQ742_.js +162 -0
  172. package/dist/docs/assets/chunks/framework.dypDpWZ3.js +19 -0
  173. package/dist/docs/assets/chunks/ganttDiagram-T4ZO3ILL.B5_HiiQ5.js +292 -0
  174. package/dist/docs/assets/chunks/gitGraphDiagram-UUTBAWPF.CZcNTFZd.js +106 -0
  175. package/dist/docs/assets/chunks/graph.V2GLaab4.js +1 -0
  176. package/dist/docs/assets/chunks/infoDiagram-42DDH7IO.7pZOkCCU.js +2 -0
  177. package/dist/docs/assets/chunks/init.Gi6I4Gst.js +1 -0
  178. package/dist/docs/assets/chunks/ishikawaDiagram-UXIWVN3A.DSMo3Qa3.js +70 -0
  179. package/dist/docs/assets/chunks/journeyDiagram-VCZTEJTY.BNEgWN1S.js +139 -0
  180. package/dist/docs/assets/chunks/kanban-definition-6JOO6SKY.B-4d4tC7.js +89 -0
  181. package/dist/docs/assets/chunks/katex.DkKDou_j.js +257 -0
  182. package/dist/docs/assets/chunks/layout.Dvbn9nSb.js +1 -0
  183. package/dist/docs/assets/chunks/linear.D2GM4p4b.js +1 -0
  184. package/dist/docs/assets/chunks/min.DVBtLK-B.js +1 -0
  185. package/dist/docs/assets/chunks/mindmap-definition-QFDTVHPH.CnJRI55x.js +96 -0
  186. package/dist/docs/assets/chunks/ordinal.DBvzRdQf.js +1 -0
  187. package/dist/docs/assets/chunks/pieDiagram-DEJITSTG.CtoaTFlA.js +30 -0
  188. package/dist/docs/assets/chunks/quadrantDiagram-34T5L4WZ.DtT24_vN.js +7 -0
  189. package/dist/docs/assets/chunks/requirementDiagram-MS252O5E.CjSO4o8f.js +84 -0
  190. package/dist/docs/assets/chunks/sankeyDiagram-XADWPNL6.-wWiIVWa.js +10 -0
  191. package/dist/docs/assets/chunks/sequenceDiagram-FGHM5R23.DSk8s4gX.js +157 -0
  192. package/dist/docs/assets/chunks/stateDiagram-FHFEXIEX.BFKAsdkN.js +1 -0
  193. package/dist/docs/assets/chunks/stateDiagram-v2-QKLJ7IA2.C4CLm481.js +1 -0
  194. package/dist/docs/assets/chunks/{theme.Dnsd3XOn.js → theme.C0MctGaz.js} +2 -2
  195. package/dist/docs/assets/chunks/timeline-definition-GMOUNBTQ.TUNJbAFe.js +120 -0
  196. package/dist/docs/assets/chunks/vennDiagram-DHZGUBPP.C-RGNnk4.js +34 -0
  197. package/dist/docs/assets/chunks/virtual_mermaid-config.DDnGl6nM.js +1 -0
  198. package/dist/docs/assets/chunks/wardley-RL74JXVD.g5efOWmT.js +162 -0
  199. package/dist/docs/assets/chunks/wardleyDiagram-NUSXRM2D.DH4zt73Y.js +20 -0
  200. package/dist/docs/assets/chunks/xychartDiagram-5P7HB3ND.B-3k6bF6.js +7 -0
  201. package/dist/docs/assets/{deployment.md.JenwuCCB.js → deployment.md.Dm4Qo3hp.js} +5 -5
  202. package/dist/docs/assets/{deployment.md.JenwuCCB.lean.js → deployment.md.Dm4Qo3hp.lean.js} +1 -1
  203. package/dist/docs/assets/{evals.md.C7JLjoEP.js → evals.md.BLDRt5LH.js} +4 -4
  204. package/dist/docs/assets/{evals.md.C7JLjoEP.lean.js → evals.md.BLDRt5LH.lean.js} +1 -1
  205. package/dist/docs/assets/guides_agent-to-agent.md.BI0xclmy.js +14 -0
  206. package/dist/docs/assets/guides_agent-to-agent.md.BI0xclmy.lean.js +1 -0
  207. package/dist/docs/assets/{guides_bitbucket.md.DZPzmUjU.js → guides_bitbucket.md.CTpCl__f.js} +1 -1
  208. package/dist/docs/assets/{guides_bitbucket.md.DZPzmUjU.lean.js → guides_bitbucket.md.CTpCl__f.lean.js} +1 -1
  209. package/dist/docs/assets/{guides_cloud-agents.md.BsloyHdY.js → guides_cloud-agents.md.lSE_l7lH.js} +2 -2
  210. package/dist/docs/assets/{guides_cloud-agents.md.BsloyHdY.lean.js → guides_cloud-agents.md.lSE_l7lH.lean.js} +1 -1
  211. package/dist/docs/assets/{guides_convert-automation.md.B4sjlodG.js → guides_convert-automation.md.Ck6Cr68A.js} +1 -1
  212. package/dist/docs/assets/{guides_convert-automation.md.B4sjlodG.lean.js → guides_convert-automation.md.Ck6Cr68A.lean.js} +1 -1
  213. package/dist/docs/assets/{guides_github.md.TZaTZlfz.js → guides_github.md.D6ER29dG.js} +1 -1
  214. package/dist/docs/assets/{guides_github.md.TZaTZlfz.lean.js → guides_github.md.D6ER29dG.lean.js} +1 -1
  215. package/dist/docs/assets/{guides_gitlab.md.BmqwQfdG.js → guides_gitlab.md.P-TjBnS5.js} +1 -1
  216. package/dist/docs/assets/{guides_gitlab.md.BmqwQfdG.lean.js → guides_gitlab.md.P-TjBnS5.lean.js} +1 -1
  217. package/dist/docs/assets/guides_grokbot-agents.md.WBZIOvkz.js +9 -0
  218. package/dist/docs/assets/{guides_grokbot-agents.md.DyV-WArv.lean.js → guides_grokbot-agents.md.WBZIOvkz.lean.js} +1 -1
  219. package/dist/docs/assets/{guides_improve.md.BGVk32bK.js → guides_improve.md.BKaDuKKK.js} +1 -1
  220. package/dist/docs/assets/{guides_improve.md.BGVk32bK.lean.js → guides_improve.md.BKaDuKKK.lean.js} +1 -1
  221. package/dist/docs/assets/{guides_mcp-oauth.md.Dp6cDP7f.js → guides_mcp-oauth.md.DMNMpXtO.js} +1 -1
  222. package/dist/docs/assets/{guides_mcp-oauth.md.Dp6cDP7f.lean.js → guides_mcp-oauth.md.DMNMpXtO.lean.js} +1 -1
  223. package/dist/docs/assets/{guides_opentelemetry.md.SCRMskno.js → guides_opentelemetry.md._CRfDyzH.js} +14 -14
  224. package/dist/docs/assets/{guides_opentelemetry.md.SCRMskno.lean.js → guides_opentelemetry.md._CRfDyzH.lean.js} +1 -1
  225. package/dist/docs/assets/{guides_slack.md.D4RVMM4G.js → guides_slack.md.DdT8rmsj.js} +12 -4
  226. package/dist/docs/assets/{guides_slack.md.D4RVMM4G.lean.js → guides_slack.md.DdT8rmsj.lean.js} +1 -1
  227. package/dist/docs/assets/{guides_webhooks.md.CJK484ex.js → guides_webhooks.md.aQW10HRe.js} +2 -2
  228. package/dist/docs/assets/{guides_webhooks.md.CJK484ex.lean.js → guides_webhooks.md.aQW10HRe.lean.js} +1 -1
  229. package/dist/docs/assets/hillclimbing.md.Dq4kkVIL.js +1 -0
  230. package/dist/docs/assets/hillclimbing.md.Dq4kkVIL.lean.js +1 -0
  231. package/dist/docs/assets/index.md.BFVyY2KT.js +17 -0
  232. package/dist/docs/assets/index.md.BFVyY2KT.lean.js +1 -0
  233. package/dist/docs/assets/{quickstart.md.DdQOF7Y8.js → quickstart.md.D3MjSZN-.js} +30 -38
  234. package/dist/docs/assets/quickstart.md.D3MjSZN-.lean.js +1 -0
  235. package/dist/docs/assets/{reference_agent-config.md.CvoL6pof.js → reference_agent-config.md.CfVA-LZJ.js} +1 -1
  236. package/dist/docs/assets/{reference_agent-config.md.CvoL6pof.lean.js → reference_agent-config.md.CfVA-LZJ.lean.js} +1 -1
  237. package/dist/docs/assets/{reference_artifacts.md.Dior32Qw.js → reference_artifacts.md.Vf7qyIZ-.js} +1 -1
  238. package/dist/docs/assets/{reference_artifacts.md.Dior32Qw.lean.js → reference_artifacts.md.Vf7qyIZ-.lean.js} +1 -1
  239. package/dist/docs/assets/{reference_channels.md.CAo-iK4j.js → reference_channels.md.icqLKcTc.js} +2 -12
  240. package/dist/docs/assets/{reference_channels.md.CAo-iK4j.lean.js → reference_channels.md.icqLKcTc.lean.js} +1 -1
  241. package/dist/docs/assets/{reference_cli.md.Deg7849l.js → reference_cli.md.B2dBL6L8.js} +3 -3
  242. package/dist/docs/assets/{reference_cli.md.Deg7849l.lean.js → reference_cli.md.B2dBL6L8.lean.js} +1 -1
  243. package/dist/docs/assets/{reference_connections.md.BojkC6c5.js → reference_connections.md.Cb3U_c8n.js} +4 -4
  244. package/dist/docs/assets/{reference_connections.md.BojkC6c5.lean.js → reference_connections.md.Cb3U_c8n.lean.js} +1 -1
  245. package/dist/docs/assets/{reference_extensions.md.ZAVUyuEX.js → reference_extensions.md.wlFD3cUR.js} +2 -2
  246. package/dist/docs/assets/{reference_extensions.md.ZAVUyuEX.lean.js → reference_extensions.md.wlFD3cUR.lean.js} +1 -1
  247. package/dist/docs/assets/{reference_hooks.md.BlM_bOg6.js → reference_hooks.md.CZuynAxj.js} +3 -3
  248. package/dist/docs/assets/{reference_hooks.md.BlM_bOg6.lean.js → reference_hooks.md.CZuynAxj.lean.js} +1 -1
  249. package/dist/docs/assets/{reference_http-api.md.BwaCo-VO.js → reference_http-api.md.DTKcYE6L.js} +3 -3
  250. package/dist/docs/assets/{reference_http-api.md.BwaCo-VO.lean.js → reference_http-api.md.DTKcYE6L.lean.js} +1 -1
  251. package/dist/docs/assets/{reference_instructions.md.CR7XSsGk.js → reference_instructions.md.D7gkckK-.js} +1 -1
  252. package/dist/docs/assets/{reference_instructions.md.CR7XSsGk.lean.js → reference_instructions.md.D7gkckK-.lean.js} +1 -1
  253. package/dist/docs/assets/{reference_playground.md.DLnoaczX.js → reference_playground.md.D2YExv5K.js} +1 -1
  254. package/dist/docs/assets/{reference_playground.md.DLnoaczX.lean.js → reference_playground.md.D2YExv5K.lean.js} +1 -1
  255. package/dist/docs/assets/{reference_project-layout.md.BEU8MtQV.js → reference_project-layout.md.DPxbUJyt.js} +3 -3
  256. package/dist/docs/assets/{reference_project-layout.md.BEU8MtQV.lean.js → reference_project-layout.md.DPxbUJyt.lean.js} +1 -1
  257. package/dist/docs/assets/{reference_prompt.md.DnaD5dNK.js → reference_prompt.md.BQ5uAv1F.js} +1 -1
  258. package/dist/docs/assets/{reference_prompt.md.DnaD5dNK.lean.js → reference_prompt.md.BQ5uAv1F.lean.js} +1 -1
  259. package/dist/docs/assets/{reference_schedules.md.DI_JrHgq.js → reference_schedules.md.BasfZWO-.js} +1 -1
  260. package/dist/docs/assets/{reference_schedules.md.DI_JrHgq.lean.js → reference_schedules.md.BasfZWO-.lean.js} +1 -1
  261. package/dist/docs/assets/{reference_sessions.md.CyXV1MUw.js → reference_sessions.md.YKvIsWAx.js} +1 -1
  262. package/dist/docs/assets/{reference_sessions.md.CyXV1MUw.lean.js → reference_sessions.md.YKvIsWAx.lean.js} +1 -1
  263. package/dist/docs/assets/{reference_skills.md.l2ezAcaN.js → reference_skills.md.rNgpsGd0.js} +1 -1
  264. package/dist/docs/assets/{reference_skills.md.l2ezAcaN.lean.js → reference_skills.md.rNgpsGd0.lean.js} +1 -1
  265. package/dist/docs/assets/{reference_subagents.md.CfsIloPm.js → reference_subagents.md.e5qitjJt.js} +2 -2
  266. package/dist/docs/assets/{reference_subagents.md.CfsIloPm.lean.js → reference_subagents.md.e5qitjJt.lean.js} +1 -1
  267. package/dist/docs/assets/{reference_tools.md.aGrn99hP.js → reference_tools.md.BdCO2aHZ.js} +4 -4
  268. package/dist/docs/assets/{reference_tools.md.aGrn99hP.lean.js → reference_tools.md.BdCO2aHZ.lean.js} +1 -1
  269. package/dist/docs/assets/{style.DCD_zyg3.css → style.Cfo2vbik.css} +1 -1
  270. package/dist/docs/assets/{templates_agentic-owners.md.BZSH4N9z.js → templates_agentic-owners.md.Da_AGDlH.js} +1 -1
  271. package/dist/docs/assets/{templates_agentic-owners.md.BZSH4N9z.lean.js → templates_agentic-owners.md.Da_AGDlH.lean.js} +1 -1
  272. package/dist/docs/assets/{templates_pr-autofixer.md.Bds_XWcV.js → templates_pr-autofixer.md.DqxocIGh.js} +1 -1
  273. package/dist/docs/assets/{templates_pr-autofixer.md.Bds_XWcV.lean.js → templates_pr-autofixer.md.DqxocIGh.lean.js} +1 -1
  274. package/dist/docs/assets/{templates_security-reviewer.md.lshxbCLK.js → templates_security-reviewer.md.Bhnvd8VE.js} +1 -1
  275. package/dist/docs/assets/{templates_security-reviewer.md.lshxbCLK.lean.js → templates_security-reviewer.md.Bhnvd8VE.lean.js} +1 -1
  276. package/dist/docs/assets/{templates_triage.md.Co4UNzkZ.js → templates_triage.md.BdBWO9Ic.js} +1 -1
  277. package/dist/docs/assets/{templates_triage.md.Co4UNzkZ.lean.js → templates_triage.md.BdBWO9Ic.lean.js} +1 -1
  278. package/dist/docs/assets/{troubleshooting.md.CYEAO9bM.js → troubleshooting.md.BcgNoYtJ.js} +1 -1
  279. package/dist/docs/assets/{troubleshooting.md.CYEAO9bM.lean.js → troubleshooting.md.BcgNoYtJ.lean.js} +1 -1
  280. package/dist/docs/building-with-agents.html +41 -8
  281. package/dist/docs/building-with-agents.md +13 -15
  282. package/dist/docs/deployment.html +44 -11
  283. package/dist/docs/deployment.md +6 -7
  284. package/dist/docs/evals.html +44 -11
  285. package/dist/docs/evals.md +5 -5
  286. package/dist/docs/guides/agent-to-agent.html +48 -11
  287. package/dist/docs/guides/agent-to-agent.md +40 -83
  288. package/dist/docs/guides/bitbucket.html +41 -8
  289. package/dist/docs/guides/cloud-agents.html +41 -8
  290. package/dist/docs/guides/cloud-agents.md +24 -20
  291. package/dist/docs/guides/convert-automation.html +41 -8
  292. package/dist/docs/guides/github.html +41 -8
  293. package/dist/docs/guides/github.md +1 -1
  294. package/dist/docs/guides/gitlab.html +41 -8
  295. package/dist/docs/guides/grokbot-agents.html +41 -8
  296. package/dist/docs/guides/grokbot-agents.md +26 -19
  297. package/dist/docs/guides/improve.html +41 -8
  298. package/dist/docs/guides/mcp-oauth.html +41 -8
  299. package/dist/docs/guides/mcp-oauth.md +1 -1
  300. package/dist/docs/guides/opentelemetry.html +53 -20
  301. package/dist/docs/guides/opentelemetry.md +28 -41
  302. package/dist/docs/guides/slack.html +51 -10
  303. package/dist/docs/guides/slack.md +53 -4
  304. package/dist/docs/guides/webhooks.html +42 -9
  305. package/dist/docs/guides/webhooks.md +3 -4
  306. package/dist/docs/hashmap.json +1 -1
  307. package/dist/docs/hillclimbing.html +40 -10
  308. package/dist/docs/hillclimbing.md +5 -5
  309. package/dist/docs/index.html +57 -12
  310. package/dist/docs/index.md +81 -150
  311. package/dist/docs/llms-full.txt +5779 -10297
  312. package/dist/docs/llms.txt +3 -29
  313. package/dist/docs/quickstart.html +70 -45
  314. package/dist/docs/quickstart.md +44 -105
  315. package/dist/docs/reference/agent-config.html +41 -8
  316. package/dist/docs/reference/artifacts.html +41 -8
  317. package/dist/docs/reference/channels.html +41 -18
  318. package/dist/docs/reference/channels.md +0 -16
  319. package/dist/docs/reference/cli.html +42 -9
  320. package/dist/docs/reference/cli.md +0 -16
  321. package/dist/docs/reference/connections.html +43 -10
  322. package/dist/docs/reference/connections.md +3 -5
  323. package/dist/docs/reference/extensions.html +42 -9
  324. package/dist/docs/reference/extensions.md +2 -2
  325. package/dist/docs/reference/hooks.html +42 -9
  326. package/dist/docs/reference/hooks.md +2 -4
  327. package/dist/docs/reference/http-api.html +42 -9
  328. package/dist/docs/reference/http-api.md +5 -5
  329. package/dist/docs/reference/instructions.html +41 -8
  330. package/dist/docs/reference/playground.html +40 -7
  331. package/dist/docs/reference/playground.md +2 -2
  332. package/dist/docs/reference/project-layout.html +42 -9
  333. package/dist/docs/reference/project-layout.md +3 -4
  334. package/dist/docs/reference/prompt.html +41 -8
  335. package/dist/docs/reference/schedules.html +41 -8
  336. package/dist/docs/reference/sessions.html +40 -7
  337. package/dist/docs/reference/sessions.md +5 -4
  338. package/dist/docs/reference/skills.html +41 -8
  339. package/dist/docs/reference/subagents.html +41 -8
  340. package/dist/docs/reference/subagents.md +2 -4
  341. package/dist/docs/reference/tools.html +43 -10
  342. package/dist/docs/reference/tools.md +2 -5
  343. package/dist/docs/templates/agentic-owners.html +41 -8
  344. package/dist/docs/templates/pr-autofixer.html +41 -8
  345. package/dist/docs/templates/security-reviewer.html +41 -8
  346. package/dist/docs/templates/triage.html +41 -8
  347. package/dist/docs/troubleshooting.html +40 -7
  348. package/dist/docs/troubleshooting.md +1 -2
  349. package/dist/evals/assertions.js +19 -19
  350. package/dist/evals/expect.js +1 -1
  351. package/dist/evals/judge.js +1 -1
  352. package/dist/evals/reporters.d.ts.map +1 -1
  353. package/dist/evals/reporters.js +8 -8
  354. package/dist/evals/run-facts.js +2 -2
  355. package/dist/evals.d.ts +1 -1
  356. package/dist/evals.d.ts.map +1 -1
  357. package/dist/evals.js +7 -7
  358. package/dist/extensions/cursor-cloud-agents/extension.js +1 -1
  359. package/dist/extensions/cursor-cloud-agents/lib/backend.js +3 -3
  360. package/dist/extensions/cursor-cloud-agents/lib/fleet.js +1 -1
  361. package/dist/extensions/cursor-cloud-agents/lib/repos.js +6 -6
  362. package/dist/extensions/cursor-cloud-agents/lib/transcript.d.ts.map +1 -1
  363. package/dist/extensions/cursor-cloud-agents/lib/transcript.js +2 -2
  364. package/dist/extensions/cursor-cloud-agents/tools/list.js +1 -1
  365. package/dist/extensions/improve/skills/yourself.js +1 -1
  366. package/dist/extensions/slack-communication/extension.d.ts +28 -0
  367. package/dist/extensions/slack-communication/extension.d.ts.map +1 -0
  368. package/dist/extensions/slack-communication/extension.js +32 -0
  369. package/dist/extensions/slack-communication/skills/slack-voice.d.ts +5 -0
  370. package/dist/extensions/slack-communication/skills/slack-voice.d.ts.map +1 -0
  371. package/dist/extensions/slack-communication/skills/slack-voice.js +54 -0
  372. package/dist/extensions/slack-communication/tools/delete-message.d.ts +4 -0
  373. package/dist/extensions/slack-communication/tools/delete-message.d.ts.map +1 -0
  374. package/dist/extensions/slack-communication/tools/delete-message.js +29 -0
  375. package/dist/extensions/slack-communication/tools/edit-message.d.ts +4 -0
  376. package/dist/extensions/slack-communication/tools/edit-message.d.ts.map +1 -0
  377. package/dist/extensions/slack-communication/tools/edit-message.js +37 -0
  378. package/dist/extensions/slack-communication/tools/post-card.d.ts +4 -0
  379. package/dist/extensions/slack-communication/tools/post-card.d.ts.map +1 -0
  380. package/dist/extensions/slack-communication/tools/post-card.js +25 -0
  381. package/dist/extensions/slack-communication/tools/post-file.d.ts +4 -0
  382. package/dist/extensions/slack-communication/tools/post-file.d.ts.map +1 -0
  383. package/dist/extensions/slack-communication/tools/post-file.js +76 -0
  384. package/dist/extensions/slack-communication/tools/post-update.d.ts +4 -0
  385. package/dist/extensions/slack-communication/tools/post-update.d.ts.map +1 -0
  386. package/dist/extensions/slack-communication/tools/post-update.js +36 -0
  387. package/dist/extensions/slack-communication/tools/react.d.ts +4 -0
  388. package/dist/extensions/slack-communication/tools/react.d.ts.map +1 -0
  389. package/dist/extensions/slack-communication/tools/react.js +27 -0
  390. package/dist/extensions/slack-communication/tools/set-status.d.ts +4 -0
  391. package/dist/extensions/slack-communication/tools/set-status.d.ts.map +1 -0
  392. package/dist/extensions/slack-communication/tools/set-status.js +18 -0
  393. package/dist/files-backends/cursor-hosted.d.ts +18 -6
  394. package/dist/files-backends/cursor-hosted.d.ts.map +1 -1
  395. package/dist/files-backends/cursor-hosted.js +357 -74
  396. package/dist/files-backends/local-fs.js +1 -1
  397. package/dist/files.d.ts +15 -0
  398. package/dist/files.d.ts.map +1 -1
  399. package/dist/filesystem.d.ts.map +1 -1
  400. package/dist/filesystem.js +15 -15
  401. package/dist/index.d.ts +5 -8
  402. package/dist/index.d.ts.map +1 -1
  403. package/dist/index.js +4 -6
  404. package/dist/internal/advertise-tools.js +6 -6
  405. package/dist/internal/approval-gate.js +1 -1
  406. package/dist/internal/artifacts-store.js +3 -3
  407. package/dist/internal/as-of.js +2 -2
  408. package/dist/internal/authored-alias-hooks.js +1 -1
  409. package/dist/internal/builtin-tools/reminders.js +2 -2
  410. package/dist/internal/chat-client.js +5 -5
  411. package/dist/internal/cli-ax.d.ts +1 -0
  412. package/dist/internal/cli-ax.d.ts.map +1 -1
  413. package/dist/internal/cli-ax.js +68 -13
  414. package/dist/internal/cli-bitbucket.js +10 -10
  415. package/dist/internal/cli-convert-automation.js +2 -2
  416. package/dist/internal/cli-cursor.d.ts +3 -11
  417. package/dist/internal/cli-cursor.d.ts.map +1 -1
  418. package/dist/internal/cli-cursor.js +5 -10
  419. package/dist/internal/cli-deploy.d.ts +12 -2
  420. package/dist/internal/cli-deploy.d.ts.map +1 -1
  421. package/dist/internal/cli-deploy.js +328 -96
  422. package/dist/internal/cli-docs.js +5 -5
  423. package/dist/internal/cli-github.js +15 -16
  424. package/dist/internal/cli-gitlab.js +10 -10
  425. package/dist/internal/cli-manifest.js +1 -1
  426. package/dist/internal/cli-mcp-oauth.d.ts.map +1 -1
  427. package/dist/internal/cli-mcp-oauth.js +5 -5
  428. package/dist/internal/cli-mcp.js +3 -3
  429. package/dist/internal/cli-skills.js +2 -2
  430. package/dist/internal/cli-slack.js +5 -5
  431. package/dist/internal/cloud-turn-cost.js +1 -1
  432. package/dist/internal/continuation-identity.d.ts.map +1 -1
  433. package/dist/internal/continuation-identity.js +14 -9
  434. package/dist/internal/conversation-mirror.d.ts.map +1 -1
  435. package/dist/internal/conversation-mirror.js +33 -2
  436. package/dist/internal/convert-automation/convert-workflow.js +25 -24
  437. package/dist/internal/convert-automation/types.d.ts +8 -0
  438. package/dist/internal/convert-automation/types.d.ts.map +1 -1
  439. package/dist/internal/cursor/account-mcp.d.ts +2 -2
  440. package/dist/internal/cursor/account-mcp.d.ts.map +1 -1
  441. package/dist/internal/cursor/account-mcp.js +32 -27
  442. package/dist/internal/cursor/backend-client.d.ts +15 -10
  443. package/dist/internal/cursor/backend-client.d.ts.map +1 -1
  444. package/dist/internal/cursor/backend-client.js +17 -11
  445. package/dist/internal/cursor/credentials.js +1 -1
  446. package/dist/internal/cursor/hosted-store-secrets.d.ts +16 -0
  447. package/dist/internal/cursor/hosted-store-secrets.d.ts.map +1 -1
  448. package/dist/internal/cursor/hosted-store-secrets.js +25 -0
  449. package/dist/internal/cursor-account-mcp-auth.js +9 -9
  450. package/dist/internal/cursor-deployment-relay.js +9 -9
  451. package/dist/internal/cursor-event-relay.js +10 -10
  452. package/dist/internal/cursor-relay-core.js +2 -2
  453. package/dist/internal/deploy-client.d.ts +106 -9
  454. package/dist/internal/deploy-client.d.ts.map +1 -1
  455. package/dist/internal/deploy-client.js +171 -23
  456. package/dist/internal/deploy-manifest.d.ts +13 -0
  457. package/dist/internal/deploy-manifest.d.ts.map +1 -1
  458. package/dist/internal/deploy-manifest.js +32 -16
  459. package/dist/internal/discovery/agent-config.d.ts +5 -0
  460. package/dist/internal/discovery/agent-config.d.ts.map +1 -1
  461. package/dist/internal/discovery/agent-config.js +27 -0
  462. package/dist/internal/discovery/agent.d.ts.map +1 -1
  463. package/dist/internal/discovery/agent.js +10 -8
  464. package/dist/internal/discovery/channels.js +4 -4
  465. package/dist/internal/discovery/connections.js +4 -4
  466. package/dist/internal/discovery/cursor-plugin.js +12 -12
  467. package/dist/internal/discovery/extension-overlay.js +3 -3
  468. package/dist/internal/discovery/extensions.js +6 -6
  469. package/dist/internal/discovery/info.js +9 -9
  470. package/dist/internal/discovery/instructions.js +1 -1
  471. package/dist/internal/discovery/project.d.ts.map +1 -1
  472. package/dist/internal/discovery/project.js +4 -4
  473. package/dist/internal/discovery/services.js +1 -1
  474. package/dist/internal/discovery/tools.js +1 -1
  475. package/dist/internal/docs-site.js +2 -2
  476. package/dist/internal/env-file.js +1 -1
  477. package/dist/internal/eval-run-store.d.ts.map +1 -1
  478. package/dist/internal/eval-run-store.js +7 -7
  479. package/dist/internal/eval-runner.js +14 -14
  480. package/dist/internal/evals-client.js +4 -4
  481. package/dist/internal/event-log.js +8 -8
  482. package/dist/internal/event-mapper.d.ts +18 -0
  483. package/dist/internal/event-mapper.d.ts.map +1 -1
  484. package/dist/internal/event-mapper.js +34 -2
  485. package/dist/internal/filesystem/format.d.ts.map +1 -1
  486. package/dist/internal/filesystem/format.js +6 -3
  487. package/dist/internal/filesystem/scratch.js +3 -3
  488. package/dist/internal/filesystem/tools.d.ts.map +1 -1
  489. package/dist/internal/filesystem/tools.js +6 -6
  490. package/dist/internal/filesystem/walk.js +1 -1
  491. package/dist/internal/framework-file-storage.d.ts +6 -2
  492. package/dist/internal/framework-file-storage.d.ts.map +1 -1
  493. package/dist/internal/framework-file-storage.js +91 -2
  494. package/dist/internal/framework-storage-selection.d.ts +0 -6
  495. package/dist/internal/framework-storage-selection.d.ts.map +1 -1
  496. package/dist/internal/framework-storage-selection.js +2 -11
  497. package/dist/internal/github-fanout.js +3 -3
  498. package/dist/internal/guest-network.js +4 -4
  499. package/dist/internal/host-files.js +1 -1
  500. package/dist/internal/host-kv.js +2 -2
  501. package/dist/internal/hosted-admission-adapter.d.ts +2 -0
  502. package/dist/internal/hosted-admission-adapter.d.ts.map +1 -1
  503. package/dist/internal/hosted-catch-protocol.d.ts.map +1 -1
  504. package/dist/internal/hosted-catch-protocol.js +2 -4
  505. package/dist/internal/hosted-catch.js +1 -1
  506. package/dist/internal/hosted-delivery-protocol.d.ts +29 -0
  507. package/dist/internal/hosted-delivery-protocol.d.ts.map +1 -1
  508. package/dist/internal/hosted-delivery-protocol.js +76 -8
  509. package/dist/internal/hosted-delivery.d.ts.map +1 -1
  510. package/dist/internal/hosted-delivery.js +201 -64
  511. package/dist/internal/hosted-execution-diag.js +3 -3
  512. package/dist/internal/hosted-execution-latency.d.ts +80 -0
  513. package/dist/internal/hosted-execution-latency.d.ts.map +1 -0
  514. package/dist/internal/hosted-execution-latency.js +220 -0
  515. package/dist/internal/hosting.d.ts +5 -5
  516. package/dist/internal/hosting.d.ts.map +1 -1
  517. package/dist/internal/hosting.js +5 -6
  518. package/dist/internal/http-channel-define.d.ts +11 -0
  519. package/dist/internal/http-channel-define.d.ts.map +1 -0
  520. package/dist/internal/http-channel-define.js +18 -0
  521. package/dist/internal/http-channel.d.ts +2 -3
  522. package/dist/internal/http-channel.d.ts.map +1 -1
  523. package/dist/internal/http-channel.js +3 -4
  524. package/dist/internal/http-control-plane-session.d.ts +7 -3
  525. package/dist/internal/http-control-plane-session.d.ts.map +1 -1
  526. package/dist/internal/http-control-plane-session.js +22 -10
  527. package/dist/internal/incoming-headers-to-fetch.d.ts +10 -0
  528. package/dist/internal/incoming-headers-to-fetch.d.ts.map +1 -0
  529. package/dist/internal/incoming-headers-to-fetch.js +41 -0
  530. package/dist/internal/init-interview.js +7 -7
  531. package/dist/internal/init-project.d.ts.map +1 -1
  532. package/dist/internal/init-project.js +14 -14
  533. package/dist/internal/init-scaffold.js +1 -1
  534. package/dist/internal/inline-stdio-mcp.js +2 -2
  535. package/dist/internal/install-cursor-skills.js +10 -10
  536. package/dist/internal/json-schema.js +1 -1
  537. package/dist/internal/local-control-plane.d.ts.map +1 -1
  538. package/dist/internal/local-control-plane.js +3 -3
  539. package/dist/internal/local-env.js +3 -3
  540. package/dist/internal/log-ring.js +1 -1
  541. package/dist/internal/logs-client.js +1 -1
  542. package/dist/internal/mcp-endpoint.js +8 -8
  543. package/dist/internal/mcp-host.js +4 -4
  544. package/dist/internal/mcp-oauth-on-demand.js +3 -3
  545. package/dist/internal/mcp-oauth.js +5 -5
  546. package/dist/internal/net.js +2 -2
  547. package/dist/internal/otel/config.js +3 -3
  548. package/dist/internal/otel/runtime.js +13 -13
  549. package/dist/internal/peer-connections.js +2 -2
  550. package/dist/internal/platform-schedule-sync.js +1 -1
  551. package/dist/internal/platform-timers.js +1 -1
  552. package/dist/internal/playground/static.js +2 -2
  553. package/dist/internal/playground/toolchain.js +2 -2
  554. package/dist/internal/playground-proxy.js +3 -3
  555. package/dist/internal/process-memory-telemetry.js +1 -1
  556. package/dist/internal/reminder-runner.d.ts.map +1 -1
  557. package/dist/internal/reminder-runner.js +7 -7
  558. package/dist/internal/reminder-store.js +1 -1
  559. package/dist/internal/request-error-status.d.ts.map +1 -1
  560. package/dist/internal/request-error-status.js +9 -0
  561. package/dist/internal/resolved-connections.js +8 -8
  562. package/dist/internal/result-output.d.ts +14 -2
  563. package/dist/internal/result-output.d.ts.map +1 -1
  564. package/dist/internal/result-output.js +45 -2
  565. package/dist/internal/router.js +4 -4
  566. package/dist/internal/run-client.js +2 -2
  567. package/dist/internal/schedule-runner.js +6 -6
  568. package/dist/internal/scm/pr-url.d.ts +3 -1
  569. package/dist/internal/scm/pr-url.d.ts.map +1 -1
  570. package/dist/internal/scm/pr-url.js +10 -2
  571. package/dist/internal/sdk-runner.d.ts.map +1 -1
  572. package/dist/internal/sdk-runner.js +14 -15
  573. package/dist/internal/serve-restart.js +1 -1
  574. package/dist/internal/server.d.ts.map +1 -1
  575. package/dist/internal/server.js +81 -87
  576. package/dist/internal/session-cost.js +3 -3
  577. package/dist/internal/session-engine.d.ts +34 -0
  578. package/dist/internal/session-engine.d.ts.map +1 -1
  579. package/dist/internal/session-engine.js +380 -184
  580. package/dist/internal/session-run-log.d.ts.map +1 -1
  581. package/dist/internal/session-run-log.js +4 -4
  582. package/dist/internal/session-store.d.ts +47 -3
  583. package/dist/internal/session-store.d.ts.map +1 -1
  584. package/dist/internal/session-store.js +198 -33
  585. package/dist/internal/sessions-client.js +3 -3
  586. package/dist/internal/slack-thread-key.d.ts +7 -0
  587. package/dist/internal/slack-thread-key.d.ts.map +1 -0
  588. package/dist/internal/slack-thread-key.js +10 -0
  589. package/dist/internal/sleep.js +1 -1
  590. package/dist/internal/storage-coordinator.d.ts +17 -0
  591. package/dist/internal/storage-coordinator.d.ts.map +1 -1
  592. package/dist/internal/storage-coordinator.js +111 -11
  593. package/dist/internal/storage.d.ts +2 -0
  594. package/dist/internal/storage.d.ts.map +1 -0
  595. package/dist/internal/storage.js +1 -0
  596. package/dist/internal/store-mirror.js +4 -4
  597. package/dist/internal/terminal-style.js +2 -2
  598. package/dist/internal/tool-result.js +3 -3
  599. package/dist/internal/trajectory.js +7 -7
  600. package/dist/internal/turn-governor.js +2 -2
  601. package/dist/internal/turn-outbox.js +1 -1
  602. package/dist/internal/update-check.js +2 -2
  603. package/dist/internal/v2-hosting.d.ts +9 -0
  604. package/dist/internal/v2-hosting.d.ts.map +1 -1
  605. package/dist/internal/v2-hosting.js +10 -0
  606. package/dist/internal/workspace.d.ts +13 -10
  607. package/dist/internal/workspace.d.ts.map +1 -1
  608. package/dist/internal/workspace.js +17 -16
  609. package/dist/kv/memory-kv.d.ts +6 -4
  610. package/dist/kv/memory-kv.d.ts.map +1 -1
  611. package/dist/kv/memory-kv.js +9 -7
  612. package/dist/kv.d.ts +4 -7
  613. package/dist/kv.d.ts.map +1 -1
  614. package/dist/kv.js +4 -7
  615. package/dist/otel-public.d.ts +7 -0
  616. package/dist/otel-public.d.ts.map +1 -0
  617. package/dist/otel-public.js +5 -0
  618. package/dist/otel.d.ts +7 -2
  619. package/dist/otel.d.ts.map +1 -1
  620. package/dist/otel.js +7 -2
  621. package/dist/playground/assets/index-BLlKgZtI.css +1 -0
  622. package/dist/playground/assets/index-CDS5p9sR.js +67 -0
  623. package/dist/playground/index.html +2 -2
  624. package/dist/prompt.js +1 -1
  625. package/dist/result.d.ts +10 -4
  626. package/dist/result.d.ts.map +1 -1
  627. package/dist/result.js +9 -3
  628. package/dist/storage-backends/cursor-hosted-v2.js +2 -2
  629. package/dist/storage-backends/cursor-hosted.d.ts +5 -17
  630. package/dist/storage-backends/cursor-hosted.d.ts.map +1 -1
  631. package/dist/storage-backends/cursor-hosted.js +6 -20
  632. package/dist/storage-backends/file-kv.js +7 -7
  633. package/dist/storage.d.ts +20 -2
  634. package/dist/storage.d.ts.map +1 -1
  635. package/dist/storage.js +7 -6
  636. package/dist/types.d.ts +67 -11
  637. package/dist/types.d.ts.map +1 -1
  638. package/dist/types.js +12 -4
  639. package/docs/README.md +83 -152
  640. package/docs/building-with-agents.md +13 -15
  641. package/docs/deployment.md +6 -7
  642. package/docs/evals.md +5 -5
  643. package/docs/guides/agent-to-agent.md +41 -84
  644. package/docs/guides/cloud-agents.md +25 -20
  645. package/docs/guides/github.md +1 -1
  646. package/docs/guides/grokbot-agents.md +27 -19
  647. package/docs/guides/mcp-oauth.md +1 -1
  648. package/docs/guides/opentelemetry.md +28 -41
  649. package/docs/guides/slack.md +53 -4
  650. package/docs/guides/webhooks.md +3 -4
  651. package/docs/hillclimbing.md +5 -5
  652. package/docs/quickstart.md +45 -106
  653. package/docs/reference/channels.md +0 -16
  654. package/docs/reference/cli.md +0 -16
  655. package/docs/reference/connections.md +3 -5
  656. package/docs/reference/extensions.md +2 -2
  657. package/docs/reference/hooks.md +2 -4
  658. package/docs/reference/http-api.md +5 -5
  659. package/docs/reference/playground.md +2 -2
  660. package/docs/reference/project-layout.md +3 -4
  661. package/docs/reference/sessions.md +5 -4
  662. package/docs/reference/subagents.md +2 -4
  663. package/docs/reference/tools.md +2 -5
  664. package/docs/troubleshooting.md +1 -2
  665. package/package.json +55 -37
  666. package/skills/framework-map/SKILL.md +2 -2
  667. package/skills/otel/SKILL.md +8 -18
  668. package/src/bin/agent-serve.ts +93 -72
  669. package/src/channels/bitbucket/api.ts +8 -8
  670. package/src/channels/bitbucket/binding.ts +4 -4
  671. package/src/channels/bitbucket/bitbucket-channel.ts +1 -1
  672. package/src/channels/bitbucket/bitbucket-webhook.ts +1 -1
  673. package/src/channels/bitbucket/checks.ts +3 -4
  674. package/src/channels/bitbucket/cursor-account.ts +1 -1
  675. package/src/channels/bitbucket/events.ts +1 -1
  676. package/src/channels/change-monitors/change-monitors-channel.ts +2 -2
  677. package/src/channels/checks.ts +5 -4
  678. package/src/channels/deployments/deployments-channel.ts +1 -1
  679. package/src/channels/github/api.ts +1 -1
  680. package/src/channels/github/checks.ts +1 -1
  681. package/src/channels/github/cursor-account.ts +3 -3
  682. package/src/channels/github/defaults.ts +8 -4
  683. package/src/channels/github/events.ts +1 -1
  684. package/src/channels/github/forward.ts +8 -8
  685. package/src/channels/github/github-channel.ts +19 -2
  686. package/src/channels/github/progress.ts +7 -2
  687. package/src/channels/github/state.ts +6 -0
  688. package/src/channels/github/types.ts +6 -0
  689. package/src/channels/gitlab/binding.ts +4 -4
  690. package/src/channels/gitlab/checks.ts +3 -4
  691. package/src/channels/gitlab/cursor-account.ts +1 -1
  692. package/src/channels/gitlab/events.ts +1 -1
  693. package/src/channels/gitlab/gitlab-channel.ts +1 -1
  694. package/src/channels/gitlab/gitlab-webhook.ts +1 -1
  695. package/src/channels/gitlab/replay.ts +2 -2
  696. package/src/channels/origin/binding.ts +6 -3
  697. package/src/channels/origin/checks.ts +27 -17
  698. package/src/channels/origin/cursor-account.ts +1 -1
  699. package/src/channels/origin/defaults.ts +5 -1
  700. package/src/channels/origin/events.ts +1 -1
  701. package/src/channels/origin/origin-channel.ts +2 -1
  702. package/src/channels/origin/origin-webhook.ts +2 -2
  703. package/src/channels/slack/agentic-delivery.ts +659 -0
  704. package/src/channels/slack/agentic-posted.ts +148 -0
  705. package/src/channels/slack/agentic-signals.ts +248 -0
  706. package/src/channels/slack/api.ts +51 -11
  707. package/src/channels/slack/approvals.ts +1 -1
  708. package/src/channels/slack/attachments.ts +1 -1
  709. package/src/channels/slack/auth.ts +3 -1
  710. package/src/channels/slack/blocks.ts +3 -3
  711. package/src/channels/slack/bot-mentions.ts +5 -7
  712. package/src/channels/slack/channel-watch.ts +1 -1
  713. package/src/channels/slack/cli-project.ts +3 -3
  714. package/src/channels/slack/defaults.ts +109 -37
  715. package/src/channels/slack/dispatch.ts +299 -170
  716. package/src/channels/slack/doctor.ts +1 -1
  717. package/src/channels/slack/eval-directive.ts +1 -1
  718. package/src/channels/slack/external-policy.ts +15 -2
  719. package/src/channels/slack/footer.ts +108 -0
  720. package/src/channels/slack/index.ts +2 -0
  721. package/src/channels/slack/interactive.ts +4 -2
  722. package/src/channels/slack/live-delivery.ts +23 -7
  723. package/src/channels/slack/log.ts +1 -1
  724. package/src/channels/slack/manifest.ts +1 -1
  725. package/src/channels/slack/nudge-carrier.ts +1 -1
  726. package/src/channels/slack/nudge-store.ts +2 -2
  727. package/src/channels/slack/paint-start.ts +93 -0
  728. package/src/channels/slack/placeholder.ts +315 -0
  729. package/src/channels/slack/progress-delivery.ts +14 -1
  730. package/src/channels/slack/reasoning-chip.ts +48 -0
  731. package/src/channels/slack/recording-sink.ts +176 -0
  732. package/src/channels/slack/reply-options.ts +71 -15
  733. package/src/channels/slack/setup.ts +1 -1
  734. package/src/channels/slack/slack-channel.ts +73 -13
  735. package/src/channels/slack/socket-mode.ts +2 -2
  736. package/src/channels/slack/thread-context.ts +5 -5
  737. package/src/channels/slack/tool-approval-events.ts +54 -38
  738. package/src/channels/slack/tool-cards.ts +1 -1
  739. package/src/channels/slack/tool-chip.ts +36 -0
  740. package/src/channels/slack/types.ts +47 -7
  741. package/src/channels/slack/upload.ts +142 -0
  742. package/src/channels.ts +12 -30
  743. package/src/dashboard-session-url.ts +32 -0
  744. package/src/evals/assertions.ts +19 -19
  745. package/src/evals/expect.ts +1 -1
  746. package/src/evals/judge.ts +1 -1
  747. package/src/evals/reporters.ts +8 -9
  748. package/src/evals/run-facts.ts +2 -2
  749. package/src/evals.ts +7 -10
  750. package/src/extensions/cursor-cloud-agents/extension.ts +1 -1
  751. package/src/extensions/cursor-cloud-agents/lib/backend.ts +3 -3
  752. package/src/extensions/cursor-cloud-agents/lib/fleet.ts +1 -1
  753. package/src/extensions/cursor-cloud-agents/lib/repos.ts +3 -3
  754. package/src/extensions/cursor-cloud-agents/lib/transcript.ts +3 -4
  755. package/src/extensions/cursor-cloud-agents/tools/list.ts +1 -1
  756. package/src/extensions/improve/skills/yourself.ts +1 -1
  757. package/src/extensions/slack-communication/evals/harness.ts +728 -0
  758. package/src/extensions/slack-communication/evals/slack-communication.eval.ts +953 -0
  759. package/src/extensions/slack-communication/evals/slack-placeholder.eval.ts +194 -0
  760. package/src/extensions/slack-communication/extension.ts +45 -0
  761. package/src/extensions/slack-communication/skills/slack-voice.ts +59 -0
  762. package/src/extensions/slack-communication/tools/delete-message.ts +34 -0
  763. package/src/extensions/slack-communication/tools/edit-message.ts +42 -0
  764. package/src/extensions/slack-communication/tools/post-card.ts +28 -0
  765. package/src/extensions/slack-communication/tools/post-file.ts +85 -0
  766. package/src/extensions/slack-communication/tools/post-update.ts +41 -0
  767. package/src/extensions/slack-communication/tools/react.ts +33 -0
  768. package/src/extensions/slack-communication/tools/set-status.ts +21 -0
  769. package/src/files-backends/cursor-hosted.ts +502 -98
  770. package/src/files-backends/local-fs.ts +1 -1
  771. package/src/files.ts +15 -0
  772. package/src/filesystem.ts +16 -18
  773. package/src/index.ts +4 -36
  774. package/src/internal/advertise-tools.ts +6 -6
  775. package/src/internal/approval-gate.ts +1 -1
  776. package/src/internal/artifacts-store.ts +3 -3
  777. package/src/internal/as-of.ts +2 -2
  778. package/src/internal/authored-alias-hooks.ts +1 -1
  779. package/src/internal/authored-loaders.ts +2 -3
  780. package/src/internal/builtin-tools/reminders.ts +2 -2
  781. package/src/internal/chat-client.ts +5 -5
  782. package/src/internal/cli-ax.ts +84 -14
  783. package/src/internal/cli-bitbucket.ts +11 -11
  784. package/src/internal/cli-convert-automation.ts +2 -2
  785. package/src/internal/cli-cursor.ts +5 -16
  786. package/src/internal/cli-deploy.ts +389 -104
  787. package/src/internal/cli-docs.ts +5 -5
  788. package/src/internal/cli-github.ts +16 -19
  789. package/src/internal/cli-gitlab.ts +11 -11
  790. package/src/internal/cli-manifest.ts +1 -1
  791. package/src/internal/cli-mcp-oauth.ts +5 -7
  792. package/src/internal/cli-mcp.ts +3 -3
  793. package/src/internal/cli-skills.ts +2 -2
  794. package/src/internal/cli-slack.ts +5 -5
  795. package/src/internal/cloud-turn-cost.ts +1 -1
  796. package/src/internal/continuation-identity.ts +13 -9
  797. package/src/internal/conversation-mirror.ts +36 -3
  798. package/src/internal/convert-automation/convert-workflow.ts +27 -27
  799. package/src/internal/convert-automation/types.ts +9 -0
  800. package/src/internal/cursor/account-mcp.ts +48 -31
  801. package/src/internal/cursor/backend-client.ts +28 -17
  802. package/src/internal/cursor/credentials.ts +1 -1
  803. package/src/internal/cursor/hosted-store-secrets.ts +34 -0
  804. package/src/internal/cursor-account-mcp-auth.ts +9 -9
  805. package/src/internal/cursor-deployment-relay.ts +10 -10
  806. package/src/internal/cursor-event-relay.ts +10 -10
  807. package/src/internal/cursor-relay-core.ts +2 -2
  808. package/src/internal/deploy-client.ts +266 -24
  809. package/src/internal/deploy-manifest.ts +46 -8
  810. package/src/internal/discovery/agent-config.ts +34 -0
  811. package/src/internal/discovery/agent.ts +14 -6
  812. package/src/internal/discovery/channels.ts +4 -4
  813. package/src/internal/discovery/connections.ts +4 -4
  814. package/src/internal/discovery/cursor-plugin.ts +12 -12
  815. package/src/internal/discovery/extension-overlay.ts +3 -3
  816. package/src/internal/discovery/extensions.ts +6 -6
  817. package/src/internal/discovery/info.ts +9 -9
  818. package/src/internal/discovery/instructions.ts +1 -1
  819. package/src/internal/discovery/project.ts +4 -4
  820. package/src/internal/discovery/services.ts +1 -1
  821. package/src/internal/discovery/tools.ts +1 -1
  822. package/src/internal/docs-site.ts +2 -2
  823. package/src/internal/env-file.ts +2 -2
  824. package/src/internal/eval-run-store.ts +7 -9
  825. package/src/internal/eval-runner.ts +20 -20
  826. package/src/internal/evals-client.ts +6 -6
  827. package/src/internal/event-log.ts +10 -10
  828. package/src/internal/event-mapper.ts +37 -2
  829. package/src/internal/filesystem/format.ts +11 -12
  830. package/src/internal/filesystem/scratch.ts +3 -3
  831. package/src/internal/filesystem/tools.ts +6 -8
  832. package/src/internal/filesystem/walk.ts +1 -1
  833. package/src/internal/framework-file-storage.ts +104 -4
  834. package/src/internal/framework-storage-selection.ts +2 -12
  835. package/src/internal/github-fanout.ts +4 -4
  836. package/src/internal/guest-network.ts +4 -4
  837. package/src/internal/host-files.ts +1 -1
  838. package/src/internal/host-kv.ts +2 -2
  839. package/src/internal/hosted-admission-adapter.ts +2 -0
  840. package/src/internal/hosted-catch-protocol.ts +3 -5
  841. package/src/internal/hosted-catch.ts +1 -1
  842. package/src/internal/hosted-delivery-protocol.ts +111 -13
  843. package/src/internal/hosted-delivery.ts +286 -81
  844. package/src/internal/hosted-execution-diag.ts +3 -3
  845. package/src/internal/hosted-execution-latency.ts +334 -0
  846. package/src/internal/hosting.ts +5 -6
  847. package/src/internal/http-channel-define.ts +27 -0
  848. package/src/internal/http-channel.ts +3 -4
  849. package/src/internal/http-control-plane-session.ts +24 -11
  850. package/src/internal/incoming-headers-to-fetch.ts +54 -0
  851. package/src/internal/init-interview.ts +7 -7
  852. package/src/internal/init-project.ts +14 -16
  853. package/src/internal/init-scaffold.ts +1 -1
  854. package/src/internal/inline-stdio-mcp.ts +2 -2
  855. package/src/internal/install-cursor-skills.ts +11 -11
  856. package/src/internal/json-schema.ts +1 -1
  857. package/src/internal/local-control-plane.ts +4 -5
  858. package/src/internal/local-env.ts +3 -3
  859. package/src/internal/log-ring.ts +1 -1
  860. package/src/internal/logs-client.ts +1 -1
  861. package/src/internal/mcp-endpoint.ts +10 -10
  862. package/src/internal/mcp-host.ts +9 -9
  863. package/src/internal/mcp-oauth-on-demand.ts +3 -3
  864. package/src/internal/mcp-oauth.ts +5 -5
  865. package/src/internal/net.ts +2 -2
  866. package/src/internal/otel/config.ts +3 -3
  867. package/src/internal/otel/runtime.ts +14 -14
  868. package/src/internal/peer-connections.ts +2 -2
  869. package/src/internal/platform-schedule-sync.ts +1 -1
  870. package/src/internal/platform-timers.ts +1 -1
  871. package/src/internal/playground/static.ts +2 -2
  872. package/src/internal/playground/toolchain.ts +2 -2
  873. package/src/internal/playground-proxy.ts +3 -3
  874. package/src/internal/process-memory-telemetry.ts +1 -1
  875. package/src/internal/reminder-runner.ts +8 -10
  876. package/src/internal/reminder-store.ts +1 -1
  877. package/src/internal/request-error-status.ts +9 -0
  878. package/src/internal/resolved-connections.ts +8 -8
  879. package/src/internal/result-output.ts +62 -5
  880. package/src/internal/router.ts +4 -4
  881. package/src/internal/run-client.ts +2 -2
  882. package/src/internal/schedule-runner.ts +6 -6
  883. package/src/internal/scm/pr-url.ts +11 -2
  884. package/src/internal/sdk-runner.ts +14 -28
  885. package/src/internal/serve-restart.ts +1 -1
  886. package/src/internal/server.ts +97 -99
  887. package/src/internal/session-cost.ts +3 -3
  888. package/src/internal/session-engine.ts +504 -244
  889. package/src/internal/session-run-log.ts +4 -6
  890. package/src/internal/session-store.ts +213 -39
  891. package/src/internal/sessions-client.ts +3 -3
  892. package/src/internal/slack-thread-key.ts +11 -0
  893. package/src/internal/sleep.ts +1 -1
  894. package/src/internal/storage-coordinator.ts +118 -21
  895. package/src/internal/storage.ts +1 -0
  896. package/src/internal/store-mirror.ts +4 -4
  897. package/src/internal/terminal-style.ts +2 -2
  898. package/src/internal/tool-result.ts +3 -3
  899. package/src/internal/trajectory.ts +7 -7
  900. package/src/internal/turn-governor.ts +2 -2
  901. package/src/internal/turn-outbox.ts +1 -1
  902. package/src/internal/update-check.ts +2 -2
  903. package/src/internal/v2-hosting.ts +14 -0
  904. package/src/internal/workspace.ts +17 -17
  905. package/src/kv/memory-kv.ts +9 -7
  906. package/src/kv.ts +4 -7
  907. package/src/otel-public.ts +24 -0
  908. package/src/otel.ts +7 -2
  909. package/src/prompt.ts +1 -1
  910. package/src/result.ts +10 -8
  911. package/src/storage-backends/cursor-hosted-v2.ts +2 -2
  912. package/src/storage-backends/cursor-hosted.ts +6 -23
  913. package/src/storage-backends/file-kv.ts +7 -7
  914. package/src/storage.ts +22 -7
  915. package/src/types.ts +82 -17
  916. package/templates/agentic-owners/agent/channels/github.ts +3 -6
  917. package/templates/agentic-owners/agent/lib/github.ts +5 -5
  918. package/templates/agentic-owners/agent/lib/owners/decision.ts +13 -10
  919. package/templates/agentic-owners/agent/lib/owners/handles.ts +2 -2
  920. package/templates/agentic-owners/agent/lib/owners/match.ts +3 -3
  921. package/templates/agentic-owners/agent/lib/owners/matching.ts +1 -1
  922. package/templates/agentic-owners/agent/lib/owners/parse.ts +4 -9
  923. package/templates/agentic-owners/agent/lib/owners/prompt.ts +1 -1
  924. package/templates/agentic-owners/agent/lib/review.ts +37 -30
  925. package/templates/agentic-owners/evals/owners.eval.ts +2 -2
  926. package/templates/agentic-owners/package.json +1 -1
  927. package/templates/agents-md/agent/lib/collect.ts +16 -10
  928. package/templates/agents-md/agent/lib/config.ts +1 -1
  929. package/templates/agents-md/agent/tools/apply_agents.ts +10 -8
  930. package/templates/agents-md/package.json +1 -1
  931. package/templates/code-wiki/agent/channels/github.ts +4 -7
  932. package/templates/code-wiki/agent/lib/repos.ts +1 -1
  933. package/templates/code-wiki/agent/tools/apply_wiki.ts +3 -4
  934. package/templates/code-wiki/package.json +1 -1
  935. package/templates/demo/agent/lib/collect.ts +6 -2
  936. package/templates/demo/agent/lib/repos.ts +1 -1
  937. package/templates/demo/agent/tools/record_demo.ts +1 -1
  938. package/templates/demo/evals/demo.eval.ts +1 -5
  939. package/templates/demo/package.json +1 -1
  940. package/templates/grokbot-agents/package.json +1 -1
  941. package/templates/pr-autofixer/agent/channels/github.ts +16 -13
  942. package/templates/pr-autofixer/agent/lib/merge-watch.ts +2 -4
  943. package/templates/pr-autofixer/agent/lib/repos.ts +2 -2
  944. package/templates/pr-autofixer/agent/lib/webhook-routing.ts +1 -1
  945. package/templates/pr-autofixer/package.json +1 -1
  946. package/templates/security-help/agent/lib/repos.ts +1 -1
  947. package/templates/security-help/package.json +1 -1
  948. package/templates/security-reviewer/agent/lib/repos.ts +1 -1
  949. package/templates/security-reviewer/agent/tools/post_findings.ts +1 -3
  950. package/templates/security-reviewer/package.json +1 -1
  951. package/templates/triage/agent/lib/actuate.ts +26 -41
  952. package/templates/triage/agent/lib/parse-queue-event.ts +2 -1
  953. package/templates/triage/agent/lib/verify-webhook.ts +10 -5
  954. package/templates/triage/agent/tools/record_triage.ts +1 -4
  955. package/templates/triage/package.json +1 -1
  956. package/dist/client.d.ts +0 -14
  957. package/dist/client.d.ts.map +0 -1
  958. package/dist/client.js +0 -12
  959. package/dist/docs/assets/app.Cr-wVbnB.js +0 -1
  960. package/dist/docs/assets/chunks/@localSearchIndexroot.CFVQ4S17.js +0 -1
  961. package/dist/docs/assets/chunks/framework.BCISBCiQ.js +0 -19
  962. package/dist/docs/assets/concepts.md.B4o63Gul.js +0 -1
  963. package/dist/docs/assets/concepts.md.B4o63Gul.lean.js +0 -1
  964. package/dist/docs/assets/guides_agent-to-agent.md.BDb0t1QV.js +0 -10
  965. package/dist/docs/assets/guides_agent-to-agent.md.BDb0t1QV.lean.js +0 -1
  966. package/dist/docs/assets/guides_grokbot-agents.md.DyV-WArv.js +0 -9
  967. package/dist/docs/assets/guides_human-in-the-loop.md.By1G2T3_.js +0 -28
  968. package/dist/docs/assets/guides_human-in-the-loop.md.By1G2T3_.lean.js +0 -1
  969. package/dist/docs/assets/hillclimbing.md.BOiVo1tf.js +0 -4
  970. package/dist/docs/assets/hillclimbing.md.BOiVo1tf.lean.js +0 -1
  971. package/dist/docs/assets/index.md.DD9Q2XuJ.js +0 -5
  972. package/dist/docs/assets/index.md.DD9Q2XuJ.lean.js +0 -1
  973. package/dist/docs/assets/quickstart.md.DdQOF7Y8.lean.js +0 -1
  974. package/dist/docs/assets/reference_result.md.BK5SxDrf.js +0 -19
  975. package/dist/docs/assets/reference_result.md.BK5SxDrf.lean.js +0 -1
  976. package/dist/docs/assets/scaffolding-agents.md.Kctn3OVb.js +0 -1
  977. package/dist/docs/assets/scaffolding-agents.md.Kctn3OVb.lean.js +0 -1
  978. package/dist/docs/assets/skills_create-agent.md.Q3h6Je-e.js +0 -8
  979. package/dist/docs/assets/skills_create-agent.md.Q3h6Je-e.lean.js +0 -1
  980. package/dist/docs/assets/skills_debug.md.CVjCXMFF.js +0 -1
  981. package/dist/docs/assets/skills_debug.md.CVjCXMFF.lean.js +0 -1
  982. package/dist/docs/assets/skills_deploy.md.CWqi_ZxW.js +0 -35
  983. package/dist/docs/assets/skills_deploy.md.CWqi_ZxW.lean.js +0 -1
  984. package/dist/docs/assets/skills_evals.md.DFxYPErF.js +0 -25
  985. package/dist/docs/assets/skills_evals.md.DFxYPErF.lean.js +0 -1
  986. package/dist/docs/assets/skills_framework-map.md.BxLSOhSY.js +0 -1
  987. package/dist/docs/assets/skills_framework-map.md.BxLSOhSY.lean.js +0 -1
  988. package/dist/docs/assets/skills_github.md.hgFX_oKY.js +0 -16
  989. package/dist/docs/assets/skills_github.md.hgFX_oKY.lean.js +0 -1
  990. package/dist/docs/assets/skills_hillclimb.md.B_zJerxA.js +0 -7
  991. package/dist/docs/assets/skills_hillclimb.md.B_zJerxA.lean.js +0 -1
  992. package/dist/docs/assets/skills_index.md.DL7EHaQ-.js +0 -1
  993. package/dist/docs/assets/skills_index.md.DL7EHaQ-.lean.js +0 -1
  994. package/dist/docs/assets/skills_mcp-auth.md.DGvFP3HE.js +0 -18
  995. package/dist/docs/assets/skills_mcp-auth.md.DGvFP3HE.lean.js +0 -1
  996. package/dist/docs/assets/skills_otel.md.B5Ddv1xH.js +0 -8
  997. package/dist/docs/assets/skills_otel.md.B5Ddv1xH.lean.js +0 -1
  998. package/dist/docs/assets/skills_setup-slack.md.BBgx8lUz.js +0 -20
  999. package/dist/docs/assets/skills_setup-slack.md.BBgx8lUz.lean.js +0 -1
  1000. package/dist/docs/assets/storage.md.BUrhJ-Zz.js +0 -30
  1001. package/dist/docs/assets/storage.md.BUrhJ-Zz.lean.js +0 -1
  1002. package/dist/docs/assets/templates_agents-md.md.CXSMZljE.js +0 -2
  1003. package/dist/docs/assets/templates_agents-md.md.CXSMZljE.lean.js +0 -1
  1004. package/dist/docs/assets/templates_code-wiki.md.CDYZIBFN.js +0 -2
  1005. package/dist/docs/assets/templates_code-wiki.md.CDYZIBFN.lean.js +0 -1
  1006. package/dist/docs/assets/templates_demo.md.BeQX9V3H.js +0 -4
  1007. package/dist/docs/assets/templates_demo.md.BeQX9V3H.lean.js +0 -1
  1008. package/dist/docs/assets/templates_grokbot-agents.md.c1s6Flp9.js +0 -3
  1009. package/dist/docs/assets/templates_grokbot-agents.md.c1s6Flp9.lean.js +0 -1
  1010. package/dist/docs/assets/templates_security-help.md.C3Ny_Qr2.js +0 -4
  1011. package/dist/docs/assets/templates_security-help.md.C3Ny_Qr2.lean.js +0 -1
  1012. package/dist/docs/concepts.html +0 -27
  1013. package/dist/docs/concepts.md +0 -166
  1014. package/dist/docs/design/filesystem.md +0 -376
  1015. package/dist/docs/design/runtime-abstraction.md +0 -1756
  1016. package/dist/docs/guides/human-in-the-loop.html +0 -54
  1017. package/dist/docs/guides/human-in-the-loop.md +0 -126
  1018. package/dist/docs/reference/result.html +0 -45
  1019. package/dist/docs/reference/result.md +0 -89
  1020. package/dist/docs/scaffolding-agents.html +0 -27
  1021. package/dist/docs/scaffolding-agents.md +0 -130
  1022. package/dist/docs/skills/create-agent.html +0 -34
  1023. package/dist/docs/skills/create-agent.md +0 -160
  1024. package/dist/docs/skills/debug.html +0 -27
  1025. package/dist/docs/skills/debug.md +0 -36
  1026. package/dist/docs/skills/deploy.html +0 -61
  1027. package/dist/docs/skills/deploy.md +0 -161
  1028. package/dist/docs/skills/evals.html +0 -51
  1029. package/dist/docs/skills/evals.md +0 -137
  1030. package/dist/docs/skills/framework-map.html +0 -27
  1031. package/dist/docs/skills/framework-map.md +0 -99
  1032. package/dist/docs/skills/github.html +0 -42
  1033. package/dist/docs/skills/github.md +0 -93
  1034. package/dist/docs/skills/hillclimb.html +0 -33
  1035. package/dist/docs/skills/hillclimb.md +0 -55
  1036. package/dist/docs/skills/index.html +0 -27
  1037. package/dist/docs/skills/index.md +0 -21
  1038. package/dist/docs/skills/mcp-auth.html +0 -44
  1039. package/dist/docs/skills/mcp-auth.md +0 -76
  1040. package/dist/docs/skills/otel.html +0 -34
  1041. package/dist/docs/skills/otel.md +0 -53
  1042. package/dist/docs/skills/setup-slack.html +0 -46
  1043. package/dist/docs/skills/setup-slack.md +0 -141
  1044. package/dist/docs/storage.html +0 -56
  1045. package/dist/docs/storage.md +0 -167
  1046. package/dist/docs/templates/agents-md.html +0 -28
  1047. package/dist/docs/templates/agents-md.md +0 -105
  1048. package/dist/docs/templates/code-wiki.html +0 -28
  1049. package/dist/docs/templates/code-wiki.md +0 -91
  1050. package/dist/docs/templates/demo.html +0 -30
  1051. package/dist/docs/templates/demo.md +0 -80
  1052. package/dist/docs/templates/grokbot-agents.html +0 -29
  1053. package/dist/docs/templates/grokbot-agents.md +0 -48
  1054. package/dist/docs/templates/security-help.html +0 -30
  1055. package/dist/docs/templates/security-help.md +0 -65
  1056. package/dist/internal/tenant-slack/relay.d.ts +0 -75
  1057. package/dist/internal/tenant-slack/relay.d.ts.map +0 -1
  1058. package/dist/internal/tenant-slack/relay.js +0 -148
  1059. package/dist/playground/assets/index-Bhxzrcf6.css +0 -1
  1060. package/dist/playground/assets/index-CqLX5uF3.js +0 -67
  1061. package/docs/concepts.md +0 -171
  1062. package/docs/design/filesystem.md +0 -376
  1063. package/docs/design/runtime-abstraction.md +0 -1756
  1064. package/docs/guides/human-in-the-loop.md +0 -131
  1065. package/docs/reference/result.md +0 -94
  1066. package/docs/scaffolding-agents.md +0 -135
  1067. package/docs/skills/index.md +0 -26
  1068. package/docs/storage.md +0 -172
  1069. package/docs/templates/agents-md.md +0 -110
  1070. package/docs/templates/code-wiki.md +0 -96
  1071. package/docs/templates/demo.md +0 -85
  1072. package/docs/templates/grokbot-agents.md +0 -53
  1073. package/docs/templates/security-help.md +0 -70
  1074. package/src/client.ts +0 -23
  1075. package/src/internal/tenant-slack/relay.ts +0 -203
  1076. package/templates/pr-autofixer/agent/storage.ts +0 -7
@@ -8,7 +8,7 @@
8
8
  */
9
9
 
10
10
  import { AsyncLocalStorage } from "node:async_hooks";
11
- import { mkdir, rm, writeFile } from "node:fs/promises";
11
+ import { access, mkdir, rm, writeFile } from "node:fs/promises";
12
12
  import { dirname, join } from "node:path";
13
13
  import type { SDKCustomTool, SDKCustomToolResult } from "@cursor/sdk";
14
14
  import type { Meter } from "@opentelemetry/api";
@@ -176,7 +176,12 @@ import {
176
176
  SCHEDULE_CHANNEL_PREFIX,
177
177
  } from "./prompt-context.js";
178
178
  import { assertCloudCanHonorAccountServersFilters } from "./resolved-connections.js";
179
- import { applyAuthoredResult } from "./result-output.js";
179
+ import {
180
+ addTurnUsage,
181
+ applyAuthoredResult,
182
+ RESULT_REPAIR_BUDGET,
183
+ resultRepairPrompt,
184
+ } from "./result-output.js";
180
185
  import type { AgentRunner, SteerAckOutcome } from "./sdk-runner.js";
181
186
  import { sessionExternalLinks } from "./session-links.js";
182
187
  import { SessionStore } from "./session-store.js";
@@ -243,6 +248,21 @@ export class SessionBusyError extends Error {
243
248
  }
244
249
  }
245
250
 
251
+ /**
252
+ * Hosted enqueue-only admission could not coalesce into an active turn.
253
+ * Distinct from {@link SessionBusyError}: the caller asked not to start work.
254
+ */
255
+ export class HostedEnqueueNotActiveError extends Error {
256
+ constructor(sessionId?: string) {
257
+ super(
258
+ sessionId === undefined
259
+ ? "Hosted enqueue requires an active accepting session"
260
+ : `Hosted enqueue requires an active turn on session ${sessionId}`
261
+ );
262
+ this.name = "HostedEnqueueNotActiveError";
263
+ }
264
+ }
265
+
246
266
  // Defined in auth.js (HTTP/session-store callers import it without this
247
267
  // module); re-exported here because this is its historical public home.
248
268
  export { SessionAuthError } from "./auth.js";
@@ -414,6 +434,12 @@ export interface EngineSendOptions extends SendMessageOptions {
414
434
  * authors cannot choose a session id through the public SendMessageOptions.
415
435
  */
416
436
  hostedSessionId?: string;
437
+ /**
438
+ * Hosted active-guest enqueue: admit only by coalescing into an already
439
+ * running turn. Never creates a session or starts a turn. Private host
440
+ * plumbing — not part of public SendMessageOptions.
441
+ */
442
+ hostedEnqueueOnly?: boolean;
417
443
  }
418
444
 
419
445
  interface CoalescedQueuedTurn {
@@ -429,6 +455,39 @@ interface AdmitTurnOptions {
429
455
  * coalesce drain so asks that arrived during drain are not wiped.
430
456
  */
431
457
  retainCoalesced?: boolean;
458
+ /** See {@link EngineSendOptions.hostedEnqueueOnly}. */
459
+ hostedEnqueueOnly?: boolean;
460
+ }
461
+
462
+ /** Marker that we `git init`'d this shared harness so scaffold is ours to write. */
463
+ const OWNED_HARNESS = join(".agent-serve", "owned-harness");
464
+
465
+ function pathExists(path: string): Promise<boolean> {
466
+ return access(path).then(
467
+ () => true,
468
+ () => false
469
+ );
470
+ }
471
+
472
+ /**
473
+ * Nested dirs get their own git root so the harness does not ripwalk the
474
+ * enclosing checkout. A real `workspaceDir` checkout (already a git root)
475
+ * is left alone.
476
+ */
477
+ async function ownSharedHarness(dir: string): Promise<boolean> {
478
+ if (await pathExists(join(dir, OWNED_HARNESS))) {
479
+ return true;
480
+ }
481
+ if (!(await isNestedInGitRepo(dir))) {
482
+ return false;
483
+ }
484
+ await ensureOwnGitRoot(dir);
485
+ if (await isNestedInGitRepo(dir)) {
486
+ return false;
487
+ }
488
+ await mkdir(join(dir, ".agent-serve"), { recursive: true });
489
+ await writeFile(join(dir, OWNED_HARNESS), "");
490
+ return true;
432
491
  }
433
492
 
434
493
  export class SessionEngine {
@@ -493,6 +552,8 @@ export class SessionEngine {
493
552
  private readonly turnAborts = new Map<string, AbortController>();
494
553
  /** Serializes turn admission per session (latest follow-up wins). */
495
554
  private readonly admissionChains = new Map<string, Promise<unknown>>();
555
+ /** Live turn snapshot so a coalesced Slack wake can repaint on this process. */
556
+ private readonly liveTurns = new Map<string, EventDispatchContext>();
496
557
  /** FIFO turn slots under `concurrency.maxRunningTurns` (unlimited when unset). */
497
558
  private readonly turnGovernor: TurnGovernor;
498
559
  /**
@@ -547,6 +608,8 @@ export class SessionEngine {
547
608
  string,
548
609
  { root: FileSystem; cwd: string }
549
610
  >();
611
+ /** In-flight `prewarmSharedWorkspace`; first turn waits so it lands hot. */
612
+ private sharedWarm: Promise<void> | undefined;
550
613
 
551
614
  constructor(options: SessionEngineOptions) {
552
615
  this.project = options.project;
@@ -575,7 +638,7 @@ export class SessionEngine {
575
638
  );
576
639
  this.outbox = new TurnOutbox(join(options.stateRoot, "outbox"));
577
640
  this.logs = new EventLogStore(
578
- (sessionId) => this.sessions.eventFilePath(sessionId),
641
+ sessionId => this.sessions.eventFilePath(sessionId),
579
642
  (sessionId, error) =>
580
643
  this.logger(
581
644
  `[agent-sdk] failed to persist events for ${sessionId}: ${describeError(error)}`
@@ -635,7 +698,7 @@ export class SessionEngine {
635
698
  ...options.project.agent.connections,
636
699
  ...(options.project.agent.hostConnections ?? []),
637
700
  ].filter(
638
- (connection) => !isSymbolicConnectionTransport(connection.transport)
701
+ connection => !isSymbolicConnectionTransport(connection.transport)
639
702
  )
640
703
  );
641
704
  const basePlatforms = options.platforms ?? createHostPlatforms();
@@ -688,8 +751,8 @@ export class SessionEngine {
688
751
 
689
752
  private authoredConnection(name: string): DiscoveredConnection | undefined {
690
753
  return (
691
- this.project.agent.connections.find((item) => item.name === name) ??
692
- this.project.agent.hostConnections?.find((item) => item.name === name)
754
+ this.project.agent.connections.find(item => item.name === name) ??
755
+ this.project.agent.hostConnections?.find(item => item.name === name)
693
756
  );
694
757
  }
695
758
 
@@ -758,7 +821,7 @@ export class SessionEngine {
758
821
  */
759
822
  artifactsApi(binding?: { sessionId: string; turnId?: string }): ArtifactsApi {
760
823
  return {
761
- tag: async (input) => {
824
+ tag: async input => {
762
825
  if (binding === undefined) {
763
826
  return this.tagArtifact(input);
764
827
  }
@@ -776,7 +839,7 @@ export class SessionEngine {
776
839
  turnId: input.turnId ?? binding.turnId,
777
840
  });
778
841
  },
779
- list: (filter) => this.artifactsStore.list(filter),
842
+ list: filter => this.artifactsStore.list(filter),
780
843
  };
781
844
  }
782
845
 
@@ -925,11 +988,11 @@ export class SessionEngine {
925
988
 
926
989
  private slackNudgeHostApi(): SlackNudgeHostApi {
927
990
  return {
928
- append: (input) => this.nudgeStore.append(input),
929
- drainFormatted: (continuationKey) =>
991
+ append: input => this.nudgeStore.append(input),
992
+ drainFormatted: continuationKey =>
930
993
  this.nudgeStore.drainFormatted(continuationKey),
931
- clear: (continuationKey) => this.nudgeStore.clear(continuationKey),
932
- hasUndelivered: (continuationKey) =>
994
+ clear: continuationKey => this.nudgeStore.clear(continuationKey),
995
+ hasUndelivered: continuationKey =>
933
996
  this.nudgeStore.hasUndelivered(continuationKey),
934
997
  isDelivered: (continuationKey, sourceTs) =>
935
998
  this.nudgeStore.isDelivered(continuationKey, sourceTs),
@@ -1039,61 +1102,76 @@ export class SessionEngine {
1039
1102
  // Refresh harness cwd when the caller supplies a newer worktree (e.g. PR
1040
1103
  // synchronize). Leave the durable continuation key unchanged.
1041
1104
  let record = existing;
1042
- const refreshWorkspace =
1043
- sendOptions.workspaceDir !== undefined &&
1044
- sendOptions.workspaceDir !== existing.workspaceOverride;
1045
- if (
1046
- refreshWorkspace ||
1047
- sendOptions.workspaceFiles !== undefined ||
1048
- sendOptions.images !== undefined
1049
- ) {
1050
- record = await this.updateRecord(existing.sessionId, (current) => ({
1051
- ...current,
1052
- workspaceOverride: refreshWorkspace
1053
- ? sendOptions.workspaceDir
1054
- : current.workspaceOverride,
1055
- pendingWorkspaceFiles: mergePendingWorkspaceFiles(
1056
- current.pendingWorkspaceFiles,
1057
- sendOptions.workspaceFiles
1058
- ),
1059
- pendingImages: mergePendingImages(
1060
- current.pendingImages,
1061
- sendOptions.images
1062
- ),
1063
- }));
1064
- }
1065
- // Refresh the cloud attach the same way: a follow-up send carries the
1066
- // caller's CURRENT cloud options (e.g. a PR attach re-derived per wake),
1067
- // and the first send's snapshot must not pin this session's turns to a
1068
- // stale repo/prUrl for the session's lifetime.
1069
- if (
1070
- sendOptions.cloud !== undefined &&
1071
- JSON.stringify(sendOptions.cloud) !==
1072
- JSON.stringify(record.cloudOverride)
1073
- ) {
1074
- record = await this.updateRecord(record.sessionId, (current) => ({
1075
- ...current,
1076
- cloudOverride: sendOptions.cloud,
1077
- }));
1078
- }
1079
- // Refresh wake-derived channel state (GitHub headSha / refs) without
1080
- // wiping sticky fields. Null patch values are skipped.
1081
- if (sendOptions.refreshState !== undefined) {
1082
- record = await this.updateRecord(record.sessionId, (current) => ({
1083
- ...current,
1084
- channelState: mergeChannelStateSkipNull(
1085
- current.channelState,
1086
- sendOptions.refreshState
1087
- ),
1088
- }));
1105
+ const enqueueOnly = sendOptions.hostedEnqueueOnly === true;
1106
+ if (!enqueueOnly) {
1107
+ const refreshWorkspace =
1108
+ sendOptions.workspaceDir !== undefined &&
1109
+ sendOptions.workspaceDir !== existing.workspaceOverride;
1110
+ if (
1111
+ refreshWorkspace ||
1112
+ sendOptions.workspaceFiles !== undefined ||
1113
+ sendOptions.images !== undefined
1114
+ ) {
1115
+ record = await this.updateRecord(existing.sessionId, current => ({
1116
+ ...current,
1117
+ workspaceOverride: refreshWorkspace
1118
+ ? sendOptions.workspaceDir
1119
+ : current.workspaceOverride,
1120
+ pendingWorkspaceFiles: mergePendingWorkspaceFiles(
1121
+ current.pendingWorkspaceFiles,
1122
+ sendOptions.workspaceFiles
1123
+ ),
1124
+ pendingImages: mergePendingImages(
1125
+ current.pendingImages,
1126
+ sendOptions.images
1127
+ ),
1128
+ }));
1129
+ }
1130
+ // Refresh the cloud attach the same way: a follow-up send carries the
1131
+ // caller's CURRENT cloud options (e.g. a PR attach re-derived per wake),
1132
+ // and the first send's snapshot must not pin this session's turns to a
1133
+ // stale repo/prUrl for the session's lifetime.
1134
+ if (
1135
+ sendOptions.cloud !== undefined &&
1136
+ JSON.stringify(sendOptions.cloud) !==
1137
+ JSON.stringify(record.cloudOverride)
1138
+ ) {
1139
+ record = await this.updateRecord(record.sessionId, current => ({
1140
+ ...current,
1141
+ cloudOverride: sendOptions.cloud,
1142
+ }));
1143
+ }
1144
+ // Refresh wake-derived channel state (GitHub headSha / refs) without
1145
+ // wiping sticky fields. Null patch values are skipped.
1146
+ if (sendOptions.refreshState !== undefined) {
1147
+ record = await this.updateRecord(record.sessionId, current => ({
1148
+ ...current,
1149
+ channelState: mergeChannelStateSkipNull(
1150
+ current.channelState,
1151
+ sendOptions.refreshState
1152
+ ),
1153
+ }));
1154
+ }
1089
1155
  }
1090
1156
  const since = (await this.logs.get(record.sessionId)).count;
1091
1157
  const coalesced = await this.startTurn(record.sessionId, message, {
1092
- admission: sendOptions.admission ?? "preempt",
1158
+ admission: enqueueOnly
1159
+ ? "coalesce"
1160
+ : (sendOptions.admission ?? "preempt"),
1093
1161
  ...(sendOptions.coalesceSourceTs === undefined
1094
1162
  ? {}
1095
1163
  : { sourceTs: sendOptions.coalesceSourceTs }),
1164
+ ...(enqueueOnly ? { hostedEnqueueOnly: true } : {}),
1096
1165
  });
1166
+ if (enqueueOnly && !coalesced) {
1167
+ throw new HostedEnqueueNotActiveError(record.sessionId);
1168
+ }
1169
+ if (!enqueueOnly && coalesced && sendOptions.refreshState !== undefined) {
1170
+ await this.repaintOnCoalescedRefresh(
1171
+ record.sessionId,
1172
+ sendOptions.refreshState
1173
+ );
1174
+ }
1097
1175
  return this.channelSession(
1098
1176
  record.sessionId,
1099
1177
  record,
@@ -1103,6 +1181,10 @@ export class SessionEngine {
1103
1181
  );
1104
1182
  }
1105
1183
 
1184
+ if (sendOptions.hostedEnqueueOnly === true) {
1185
+ throw new HostedEnqueueNotActiveError(sendOptions.hostedSessionId);
1186
+ }
1187
+
1106
1188
  if (sendOptions.hostedSessionId !== undefined) {
1107
1189
  const collision = await this.getOrRestoreSession(
1108
1190
  sendOptions.hostedSessionId
@@ -1171,7 +1253,7 @@ export class SessionEngine {
1171
1253
  const stale = new Error("stale HTTP continuation");
1172
1254
  let previous: string | undefined;
1173
1255
  try {
1174
- await this.updateRecord(sessionId, (record) => {
1256
+ await this.updateRecord(sessionId, record => {
1175
1257
  const expectedChannel =
1176
1258
  record.httpContinuationKey === undefined
1177
1259
  ? record.channelId
@@ -1194,7 +1276,7 @@ export class SessionEngine {
1194
1276
  await this.startTurn(sessionId, message);
1195
1277
  return next;
1196
1278
  } catch (error) {
1197
- await this.updateRecord(sessionId, (record) =>
1279
+ await this.updateRecord(sessionId, record =>
1198
1280
  record.httpContinuationKey === next
1199
1281
  ? { ...record, httpContinuationKey: previous }
1200
1282
  : record
@@ -1285,6 +1367,53 @@ export class SessionEngine {
1285
1367
  // Turn execution
1286
1368
  // ==========================================================================
1287
1369
 
1370
+ /**
1371
+ * Repaint on the follow-up wake without retargeting the live turn.
1372
+ * Persist already took the refresh; in-flight writes stay on the carrier ts.
1373
+ */
1374
+ private async repaintOnCoalescedRefresh(
1375
+ sessionId: string,
1376
+ patch: JsonValue | undefined
1377
+ ): Promise<void> {
1378
+ const live = this.liveTurns.get(sessionId);
1379
+ if (live === undefined || patch === undefined) {
1380
+ return;
1381
+ }
1382
+ const repaintState =
1383
+ mergeChannelStateSkipNull(live.channelState, patch) ?? live.channelState;
1384
+ const record = await this.sessions.get(sessionId);
1385
+ if (record === undefined) {
1386
+ return;
1387
+ }
1388
+ const handler = this.channelEventHandlersFor(record.channelId)?.[
1389
+ "message.received"
1390
+ ];
1391
+ if (handler === undefined) {
1392
+ return;
1393
+ }
1394
+ await handler(
1395
+ {
1396
+ type: "message.received",
1397
+ data: { text: "" },
1398
+ index: 0,
1399
+ sessionId,
1400
+ at: new Date().toISOString(),
1401
+ },
1402
+ {
1403
+ channelId: record.channelId,
1404
+ state: repaintState,
1405
+ continuationToken: record.continuationKey,
1406
+ setContinuationToken: (token: string | null) =>
1407
+ this.setContinuationToken(sessionId, token),
1408
+ },
1409
+ {
1410
+ session: live.session,
1411
+ host: this.hostForSession(sessionId),
1412
+ artifacts: this.artifactsApi({ sessionId }),
1413
+ }
1414
+ );
1415
+ }
1416
+
1288
1417
  /**
1289
1418
  * Admit a turn for `sessionId`.
1290
1419
  *
@@ -1306,7 +1435,12 @@ export class SessionEngine {
1306
1435
  .catch(() => {})
1307
1436
  .then(async () => {
1308
1437
  // Another server holds the turn: hand the message to it and coalesce.
1438
+ // Enqueue-only must not report coalesced success without a local
1439
+ // enqueue — the outbox drain may never run on this process.
1309
1440
  if (await this.turnLeases.runningElsewhere(sessionId)) {
1441
+ if (options.hostedEnqueueOnly === true) {
1442
+ throw new HostedEnqueueNotActiveError(sessionId);
1443
+ }
1310
1444
  await this.outbox.post(sessionId, { message, options });
1311
1445
  return true;
1312
1446
  }
@@ -1323,7 +1457,7 @@ export class SessionEngine {
1323
1457
  private drainOutbox(sessionId: string): void {
1324
1458
  void this.outbox
1325
1459
  .takeAll(sessionId)
1326
- .then((items) => {
1460
+ .then(items => {
1327
1461
  for (const item of items) {
1328
1462
  void this.startTurn(sessionId, item.message, item.options).catch(
1329
1463
  () => {}
@@ -1337,7 +1471,7 @@ export class SessionEngine {
1337
1471
  const queue = this.coalesceQueues.get(sessionId) ?? [];
1338
1472
  if (
1339
1473
  item.sourceTs !== undefined &&
1340
- queue.some((entry) => entry.sourceTs === item.sourceTs)
1474
+ queue.some(entry => entry.sourceTs === item.sourceTs)
1341
1475
  ) {
1342
1476
  return;
1343
1477
  }
@@ -1418,7 +1552,7 @@ export class SessionEngine {
1418
1552
  }
1419
1553
  const parts = [
1420
1554
  "<slack_followups>",
1421
- `ANSWER-EACH: ${items.length} asks arrived while you were busy. Address each in order; keep replies compact.`,
1555
+ `${items.length} asks arrived while you were busy.`,
1422
1556
  "",
1423
1557
  ];
1424
1558
  for (let i = 0; i < items.length; i++) {
@@ -1512,11 +1646,21 @@ export class SessionEngine {
1512
1646
  // enqueue: `drainCoalescedFollowups` reads only this process's queue, so
1513
1647
  // the shared nudge store is the carrier. Not redundant with `acquire`
1514
1648
  // below — this returns before preempt's `clearCoalesced` drops the queue.
1649
+ // Enqueue-only cannot claim coalesced here: nothing joined a local turn.
1515
1650
  if (await this.turnLeases.runningElsewhere(sessionId)) {
1651
+ if (options.hostedEnqueueOnly === true) {
1652
+ throw new HostedEnqueueNotActiveError(sessionId);
1653
+ }
1516
1654
  this.logger(`[session] coalesce; another server owns ${sessionId}`);
1517
1655
  return true;
1518
1656
  }
1519
1657
 
1658
+ // Enqueue-only must never start a turn (or preempt/interrupt). Steer and
1659
+ // coalesce above already returned true when they absorbed the message.
1660
+ if (options.hostedEnqueueOnly === true) {
1661
+ throw new HostedEnqueueNotActiveError(sessionId);
1662
+ }
1663
+
1520
1664
  // Interrupt any turn in flight and wait for it to settle so the SDK run is
1521
1665
  // terminal before this turn's send (the follow-up also force-expires as a
1522
1666
  // belt-and-suspenders — see buildTurnRequest). Drain-resume skips interrupt:
@@ -1545,7 +1689,7 @@ export class SessionEngine {
1545
1689
 
1546
1690
  let lifecycleInstalled = false;
1547
1691
  try {
1548
- const record = await this.updateRecord(sessionId, (current) => ({
1692
+ const record = await this.updateRecord(sessionId, current => ({
1549
1693
  ...current,
1550
1694
  turnCount: current.turnCount + 1,
1551
1695
  }));
@@ -1591,6 +1735,7 @@ export class SessionEngine {
1591
1735
  };
1592
1736
  } finally {
1593
1737
  clearInterval(poll);
1738
+ this.liveTurns.delete(sessionId);
1594
1739
  }
1595
1740
  this.lastOutcomes.set(sessionId, outcome);
1596
1741
  const wasCurrent = this.activeTurns.get(sessionId) === lifecycle;
@@ -1600,14 +1745,19 @@ export class SessionEngine {
1600
1745
  if (this.turnAborts.get(sessionId) === abort) {
1601
1746
  this.turnAborts.delete(sessionId);
1602
1747
  }
1603
- if (wasCurrent && !abort.signal.aborted) {
1604
- const drain = this.drainCoalescedFollowups(sessionId).catch(
1605
- (error) => {
1606
- this.logger(
1607
- `[session] coalesce drain failed for ${sessionId}: ${describeError(error)}`
1608
- );
1609
- }
1610
- );
1748
+ // Failed/cancelled owners must not start a coalesced successor.
1749
+ // Hosted execute would then 503 and Temporal/FIFO would re-run the
1750
+ // same follow-ups as full deliveries.
1751
+ if (
1752
+ wasCurrent &&
1753
+ !abort.signal.aborted &&
1754
+ outcome.status === "finished"
1755
+ ) {
1756
+ const drain = this.drainCoalescedFollowups(sessionId).catch(error => {
1757
+ this.logger(
1758
+ `[session] coalesce drain failed for ${sessionId}: ${describeError(error)}`
1759
+ );
1760
+ });
1611
1761
  this.coalesceDrains.set(sessionId, drain);
1612
1762
  try {
1613
1763
  await drain;
@@ -1867,7 +2017,7 @@ export class SessionEngine {
1867
2017
  if (turn === undefined) {
1868
2018
  return tools;
1869
2019
  }
1870
- return tools.map((tool) => {
2020
+ return tools.map(tool => {
1871
2021
  const execute = tool.definition.execute;
1872
2022
  if (typeof execute !== "function") {
1873
2023
  return tool;
@@ -2044,6 +2194,13 @@ export class SessionEngine {
2044
2194
  * Best effort — warming is an optimization, and a turn rebuilds on its own.
2045
2195
  */
2046
2196
  async prewarmSharedWorkspace(): Promise<void> {
2197
+ if (this.sharedWarm === undefined) {
2198
+ this.sharedWarm = this.warmSharedWorkspace();
2199
+ }
2200
+ await this.sharedWarm;
2201
+ }
2202
+
2203
+ private async warmSharedWorkspace(): Promise<void> {
2047
2204
  const agent = this.project.agent;
2048
2205
  const workspaceDir = agent.local?.workspaceDir;
2049
2206
  if (
@@ -2056,6 +2213,15 @@ export class SessionEngine {
2056
2213
  }
2057
2214
  const startedAt = Date.now();
2058
2215
  try {
2216
+ await mkdir(workspaceDir, { recursive: true });
2217
+ if (await ownSharedHarness(workspaceDir)) {
2218
+ await materializeWorkspace({
2219
+ agent,
2220
+ workspaceDir,
2221
+ seed: true,
2222
+ stateRoot: this.stateRoot,
2223
+ });
2224
+ }
2059
2225
  const harness = resolveHostHarnessToolOptions(agent.allowedTools);
2060
2226
  const outcome = await this.runner.prewarm({
2061
2227
  workspaceDir,
@@ -2069,7 +2235,10 @@ export class SessionEngine {
2069
2235
  // warmed without an identity; the per-send flag still has to match
2070
2236
  // the turns' requests or the warmed executor is one no turn asks for.
2071
2237
  mcpServers: this.buildMcpServers("local"),
2072
- ...(this.hasAttachedAuthedConnections()
2238
+ ...(this.hasAttachedAuthedConnections() ||
2239
+ this.project.agent.connections.some(connection =>
2240
+ isCursorAccountTransport(connection.transport)
2241
+ )
2073
2242
  ? { perSendMcpServers: true }
2074
2243
  : {}),
2075
2244
  subagents: buildRunnerSubagents(agent),
@@ -2113,6 +2282,7 @@ export class SessionEngine {
2113
2282
  channelState: structuredClone(turnChannelState),
2114
2283
  session: this.sessionInfo(record),
2115
2284
  };
2285
+ this.liveTurns.set(sessionId, eventContext);
2116
2286
  // Hold the open log so tool events append synchronously. Fire-and-forget
2117
2287
  // `appendEvent` races parallel tool completions and delays the live stream
2118
2288
  // until the next await tick — often after *all* parallel tools finish.
@@ -2130,7 +2300,7 @@ export class SessionEngine {
2130
2300
  // Read by closure, so the mapper still sees it while draining after the
2131
2301
  // registry entry below is gone.
2132
2302
  const stubbed = new Set<string>();
2133
- const mapper = new TurnEventMapper(emit, (callId) => stubbed.has(callId));
2303
+ const mapper = new TurnEventMapper(emit, callId => stubbed.has(callId));
2134
2304
 
2135
2305
  // Take a turn slot before any work happens. When every slot is busy the
2136
2306
  // turn waits FIFO — durable `turn.queued` marks the wait — and a
@@ -2139,7 +2309,7 @@ export class SessionEngine {
2139
2309
  const permit = await this.turnGovernor.acquire({
2140
2310
  sessionId,
2141
2311
  signal,
2142
- onQueued: (position) => {
2312
+ onQueued: position => {
2143
2313
  const maxRunningTurns = this.turnGovernor.maxRunningTurns ?? 0;
2144
2314
  emit({ type: "turn.queued", data: { position, maxRunningTurns } });
2145
2315
  this.logger(
@@ -2155,6 +2325,12 @@ export class SessionEngine {
2155
2325
  } else {
2156
2326
  emit({ type: "turn.started", data: {} });
2157
2327
  try {
2328
+ if (
2329
+ record.workspaceOverride === undefined &&
2330
+ this.project.agent.local?.workspaceDir !== undefined
2331
+ ) {
2332
+ await this.prewarmSharedWorkspace();
2333
+ }
2158
2334
  // Scaffold agent files into the session workspace even when the harness
2159
2335
  // cwd is overridden (e.g. a PR worktree).
2160
2336
  if (!this.hasRootOverride()) {
@@ -2199,7 +2375,7 @@ export class SessionEngine {
2199
2375
  (hasPendingFiles && runtime !== "cloud") ||
2200
2376
  (pendingImages !== undefined && pendingImages.length > 0)
2201
2377
  ) {
2202
- await this.updateRecord(sessionId, (current) => ({
2378
+ await this.updateRecord(sessionId, current => ({
2203
2379
  ...current,
2204
2380
  pendingWorkspaceFiles:
2205
2381
  hasPendingFiles &&
@@ -2213,48 +2389,39 @@ export class SessionEngine {
2213
2389
  : current.pendingImages,
2214
2390
  }));
2215
2391
  }
2216
- // The harness only loads the scaffolded AGENTS.md when the session
2217
- // workspace is its own project root. When the harness cwd is borrowed
2218
- // (PR worktree, shared checkout) the scaffold lands elsewhere, and a
2219
- // workspace nested inside a git repo re-roots harness rules at that
2220
- // repo — in both cases deliver instructions inline on the first turn.
2221
- const instructionsInvisibleToHarness =
2222
- isFirstTurn &&
2223
- (this.hasBorrowedWorkspace(record) ||
2224
- (await isNestedInGitRepo(harnessCwd)));
2392
+ const onUpdate: RunnerTurnRequest["onUpdate"] = async update => {
2393
+ const turn = this.turnRoots.get(sessionId);
2394
+ if (turn !== undefined) {
2395
+ update = await applyWebScratchUpdate({
2396
+ cwd: turn.cwd,
2397
+ root: turn.root,
2398
+ update,
2399
+ });
2400
+ }
2401
+ mapper.handleUpdate(update);
2402
+ // Yield so the HTTP NDJSON writer can flush tool start/result
2403
+ // events while sibling parallel tools are still executing.
2404
+ if (
2405
+ update.type === "tool-call-started" ||
2406
+ update.type === "tool-call-completed" ||
2407
+ // Nested subagent progress (newer SDKs); string check keeps
2408
+ // typecheck green against older published `@cursor/sdk` pins.
2409
+ (update as { type: string }).type === "tool-call-delta"
2410
+ ) {
2411
+ // Same boundary the carrier hook runs on, so a drain is visible
2412
+ // by the time this fires.
2413
+ await this.emitDeliveredNudges(record, emit);
2414
+ await yieldEventLoop();
2415
+ }
2416
+ };
2225
2417
  const request = await this.buildTurnRequest(
2226
2418
  record,
2227
2419
  turnId,
2228
2420
  message,
2229
2421
  isFirstTurn,
2230
- instructionsInvisibleToHarness,
2231
2422
  emit,
2232
2423
  eventContext,
2233
- async (update) => {
2234
- const turn = this.turnRoots.get(sessionId);
2235
- if (turn !== undefined) {
2236
- update = await applyWebScratchUpdate({
2237
- cwd: turn.cwd,
2238
- root: turn.root,
2239
- update,
2240
- });
2241
- }
2242
- mapper.handleUpdate(update);
2243
- // Yield so the HTTP NDJSON writer can flush tool start/result
2244
- // events while sibling parallel tools are still executing.
2245
- if (
2246
- update.type === "tool-call-started" ||
2247
- update.type === "tool-call-completed" ||
2248
- // Nested subagent progress (newer SDKs); string check keeps
2249
- // typecheck green against older published `@cursor/sdk` pins.
2250
- (update as { type: string }).type === "tool-call-delta"
2251
- ) {
2252
- // Same boundary the carrier hook runs on, so a drain is visible
2253
- // by the time this fires.
2254
- await this.emitDeliveredNudges(record, emit);
2255
- await yieldEventLoop();
2256
- }
2257
- },
2424
+ onUpdate,
2258
2425
  signal,
2259
2426
  pendingImages
2260
2427
  );
@@ -2264,6 +2431,20 @@ export class SessionEngine {
2264
2431
  outcome = await this.runTurnExecute(record, turnId, () =>
2265
2432
  this.runner.runTurn(request)
2266
2433
  );
2434
+ // Commit before dropping the turn FS so `ctx.reject` can
2435
+ // re-run the model with tools still mounted.
2436
+ outcome = await this.settleAuthoredResult({
2437
+ record,
2438
+ turnId,
2439
+ emit,
2440
+ eventContext,
2441
+ turnChannelState,
2442
+ harnessCwd,
2443
+ signal,
2444
+ onUpdate,
2445
+ mapper,
2446
+ outcome,
2447
+ });
2267
2448
  } finally {
2268
2449
  this.activeToolContexts.delete(sessionId);
2269
2450
  this.stubbedCallIds.delete(sessionId);
@@ -2293,7 +2474,7 @@ export class SessionEngine {
2293
2474
 
2294
2475
  if (mapper.title !== undefined) {
2295
2476
  const title = mapper.title;
2296
- await this.updateRecord(sessionId, (current) => ({ ...current, title }));
2477
+ await this.updateRecord(sessionId, current => ({ ...current, title }));
2297
2478
  eventContext.session = { ...eventContext.session, title };
2298
2479
  }
2299
2480
 
@@ -2312,32 +2493,6 @@ export class SessionEngine {
2312
2493
  outcome = { ...outcome, cost: finalCost };
2313
2494
  }
2314
2495
 
2315
- const authored = this.project.result;
2316
- if (outcome.status === "finished" && authored !== undefined) {
2317
- const settled = await applyAuthoredResult({
2318
- definition: authored,
2319
- text: finalResult,
2320
- dryRun: record.dryRun === true,
2321
- ctx: {
2322
- session: eventContext.session,
2323
- channelState: turnChannelState,
2324
- host: this.hostForSession(sessionId),
2325
- artifacts: this.artifactsApi({ sessionId, turnId }),
2326
- stateRoot: this.stateRoot,
2327
- workspaceDir: harnessCwd,
2328
- },
2329
- });
2330
- if (!settled.ok) {
2331
- outcome = {
2332
- status: "error",
2333
- result: finalResult,
2334
- errorMessage: `turn output failed: ${settled.message}`,
2335
- usage: finalUsage,
2336
- cost: finalCost,
2337
- };
2338
- }
2339
- }
2340
-
2341
2496
  if (outcome.status === "finished") {
2342
2497
  await this.appendEvent(
2343
2498
  sessionId,
@@ -2407,6 +2562,89 @@ export class SessionEngine {
2407
2562
  };
2408
2563
  }
2409
2564
 
2565
+ /**
2566
+ * Run `defineResult` while the turn FS and tools are still up.
2567
+ * `ctx.reject` re-invokes `runTurn` on this turnId until commit
2568
+ * succeeds, throws, or the repair budget is gone.
2569
+ */
2570
+ private async settleAuthoredResult(args: {
2571
+ record: SessionRecord;
2572
+ turnId: string;
2573
+ emit: (payload: SessionEventPayload) => void;
2574
+ eventContext: EventDispatchContext;
2575
+ turnChannelState: JsonValue;
2576
+ harnessCwd: string;
2577
+ signal: AbortSignal;
2578
+ onUpdate: RunnerTurnRequest["onUpdate"];
2579
+ mapper: TurnEventMapper;
2580
+ outcome: TurnOutcome;
2581
+ }): Promise<TurnOutcome> {
2582
+ const authored = this.project.result;
2583
+ if (args.outcome.status !== "finished" || authored === undefined) {
2584
+ return args.outcome;
2585
+ }
2586
+
2587
+ let outcome = args.outcome;
2588
+ let usage = outcome.usage;
2589
+ let repairs = 0;
2590
+
2591
+ while (true) {
2592
+ const settled = await applyAuthoredResult({
2593
+ definition: authored,
2594
+ text: outcome.result ?? args.mapper.pendingText,
2595
+ dryRun: args.record.dryRun === true,
2596
+ ctx: {
2597
+ session: args.eventContext.session,
2598
+ channelState: args.turnChannelState,
2599
+ host: this.hostForSession(args.record.sessionId),
2600
+ artifacts: this.artifactsApi({
2601
+ sessionId: args.record.sessionId,
2602
+ turnId: args.turnId,
2603
+ }),
2604
+ stateRoot: this.stateRoot,
2605
+ workspaceDir: args.harnessCwd,
2606
+ },
2607
+ });
2608
+ if (settled.ok) {
2609
+ return { ...outcome, result: settled.text, usage };
2610
+ }
2611
+ if (settled.kind === "error" || repairs >= RESULT_REPAIR_BUDGET) {
2612
+ return {
2613
+ status: "error",
2614
+ result: outcome.result,
2615
+ errorMessage: `turn output failed: ${settled.message}`,
2616
+ usage,
2617
+ };
2618
+ }
2619
+ repairs += 1;
2620
+ // Close the rejected stream without posting it (empty `stop`)
2621
+ // so Slack does not append a repair onto that block, and so an
2622
+ // empty repair cannot recommit `lastAssistantText`.
2623
+ args.mapper.abandonPendingText();
2624
+ this.logger(
2625
+ `[session] ${args.record.sessionId} ${args.turnId} result rejected; repairing (${repairs}/${RESULT_REPAIR_BUDGET})`
2626
+ );
2627
+ const repairRequest = await this.buildTurnRequest(
2628
+ args.record,
2629
+ args.turnId,
2630
+ resultRepairPrompt(settled.message),
2631
+ false,
2632
+ args.emit,
2633
+ args.eventContext,
2634
+ args.onUpdate,
2635
+ args.signal
2636
+ );
2637
+ const repaired = await this.runTurnExecute(args.record, args.turnId, () =>
2638
+ this.runner.runTurn(repairRequest)
2639
+ );
2640
+ usage = addTurnUsage(usage, repaired.usage);
2641
+ if (repaired.status !== "finished") {
2642
+ return { ...repaired, usage };
2643
+ }
2644
+ outcome = { ...repaired, usage };
2645
+ }
2646
+ }
2647
+
2410
2648
  /**
2411
2649
  * Sync authored skills onto the Agent Store at `skills/<name>/…` (hosted)
2412
2650
  * or `agent-serve/<agent>/skills/<name>/…` (personal-key local+cloud)
@@ -2499,7 +2737,7 @@ export class SessionEngine {
2499
2737
  sessionId: string,
2500
2738
  pending: NonNullable<SessionRecord["pendingWorkspaceFiles"]>
2501
2739
  ): Promise<void> {
2502
- await this.updateRecord(sessionId, (current) => ({
2740
+ await this.updateRecord(sessionId, current => ({
2503
2741
  ...current,
2504
2742
  pendingWorkspaceFiles:
2505
2743
  current.pendingWorkspaceFiles === pending
@@ -2532,7 +2770,7 @@ export class SessionEngine {
2532
2770
  }
2533
2771
  let sync = run().then(
2534
2772
  () => true,
2535
- (error) => {
2773
+ error => {
2536
2774
  this.logger(
2537
2775
  `[${surface}] ${store.label} sync failed: ${error instanceof Error ? error.message : String(error)}`
2538
2776
  );
@@ -2551,11 +2789,17 @@ export class SessionEngine {
2551
2789
  /**
2552
2790
  * Hosted deployments own the deployment store. Local `serve`/`run` with
2553
2791
  * a personal API key writes into the USER store under `agent-serve/`.
2792
+ * A persistent deployment's version container has no cloud store at all:
2793
+ * its state directory is the durable copy, and its service-account key
2794
+ * must not be mistaken for a personal one.
2554
2795
  */
2555
2796
  private cloudStore(): CloudStoreTarget | undefined {
2556
2797
  const v2Hosting = resolveAgentV2Hosting({
2557
2798
  architecture: this.project.agent.architecture,
2558
2799
  });
2800
+ if (v2Hosting.kind === "cursor-managed-persistent") {
2801
+ return undefined;
2802
+ }
2559
2803
  const deployment = {
2560
2804
  mountPath: DEPLOYMENT_STORE_MOUNT_PATH,
2561
2805
  skillsPrefix: agentStoreKeys.skillsPrefix(),
@@ -2600,7 +2844,6 @@ export class SessionEngine {
2600
2844
  turnId: string,
2601
2845
  prompt: string,
2602
2846
  isFirstTurn: boolean,
2603
- instructionsInvisibleToHarness: boolean,
2604
2847
  emit: (payload: SessionEventPayload) => void,
2605
2848
  eventContext: EventDispatchContext,
2606
2849
  onUpdate: RunnerTurnRequest["onUpdate"],
@@ -2642,7 +2885,7 @@ export class SessionEngine {
2642
2885
  // agents already fail discovery; this guards hybrid agents' per-send
2643
2886
  // cloud sessions.
2644
2887
  const perSessionConnection = agent.connections.find(
2645
- (connection) =>
2888
+ connection =>
2646
2889
  connection.advertiseTools === true || connection.auth !== undefined
2647
2890
  );
2648
2891
  if (runtime !== "local" && perSessionConnection !== undefined) {
@@ -2696,7 +2939,7 @@ export class SessionEngine {
2696
2939
  : this.withTurnScratchTools(
2697
2940
  authoredRoot
2698
2941
  ? fileTools
2699
- : fileTools.filter((tool) => tool.name !== "SemanticSearch"),
2942
+ : fileTools.filter(tool => tool.name !== "SemanticSearch"),
2700
2943
  record.sessionId
2701
2944
  );
2702
2945
  let turnPrompt = prompt;
@@ -2772,6 +3015,9 @@ export class SessionEngine {
2772
3015
  }
2773
3016
  }
2774
3017
  } else if (pending !== undefined && Object.keys(pending).length > 0) {
3018
+ this.logger(
3019
+ `[workspace] no cloud store on this hosting; dropping workspaceFiles for session ${record.sessionId}: ${Object.keys(pending).join(", ")}`
3020
+ );
2775
3021
  await this.clearPendingWorkspaceFiles(record.sessionId, pending);
2776
3022
  }
2777
3023
  if (isFirstTurn && hosted) {
@@ -2779,36 +3025,26 @@ export class SessionEngine {
2779
3025
  }
2780
3026
  if (preamble !== "" || sections.length > 0) {
2781
3027
  turnPrompt = [preamble, ...sections, turnPrompt]
2782
- .filter((part) => part !== "")
3028
+ .filter(part => part !== "")
2783
3029
  .join("\n\n");
2784
3030
  }
2785
3031
  } else if (isFirstTurn && runtime === "local" && authoredRoot) {
2786
- // Virtual roots skip materialize, so AGENTS.md never lands on disk.
2787
- // Ship the same preamble the borrowed-cwd local path uses.
2788
- const preamble = buildAgentsMdContent(
2789
- { ...agent, tools: [...agent.tools, ...synthesized] },
2790
- { includeScripts: true }
2791
- );
2792
- const workspaceInfo = `<user_info>\nWorkspace Path: /\n</user_info>`;
2793
- turnPrompt =
2794
- preamble === ""
2795
- ? `${workspaceInfo}\n\n${turnPrompt}`
2796
- : `${workspaceInfo}\n\n${preamble}\n\n${turnPrompt}`;
2797
- } else if (
2798
- isFirstTurn &&
2799
- runtime === "local" &&
2800
- instructionsInvisibleToHarness
2801
- ) {
2802
- // Local workspace whose AGENTS.md the harness will not load. With a
2803
- // borrowed harness cwd, agent tool scripts live only in the durable
2804
- // scaffold dir — embed bodies like cloud. Otherwise the catalog can
2805
- // reference on-disk paths under the harness cwd. Grokbot turns are
2806
- // excluded: their instructions ride the request's `instructions`
2807
- // field into the Sand system prompt instead.
2808
- const includeScripts = this.hasBorrowedWorkspace(record);
2809
- const preamble = buildAgentsMdContent(agent, { includeScripts });
2810
- turnPrompt = `${preamble}\n\n${turnPrompt}`;
3032
+ // The harness reports no path for a root it never mounted.
3033
+ turnPrompt = `<user_info>\nWorkspace Path: /\n</user_info>\n\n${turnPrompt}`;
2811
3034
  }
3035
+ // A virtual root has no scaffold dir either, so its catalog carries the
3036
+ // synthesized file tools and embedded script bodies.
3037
+ const localInstructions =
3038
+ runtime === "local"
3039
+ ? authoredRoot
3040
+ ? buildAgentsMdContent(
3041
+ { ...agent, tools: [...agent.tools, ...synthesized] },
3042
+ { includeScripts: true }
3043
+ )
3044
+ : buildAgentsMdContent(agent, {
3045
+ includeScripts: this.hasBorrowedWorkspace(record),
3046
+ })
3047
+ : undefined;
2812
3048
  return {
2813
3049
  sessionId: record.sessionId,
2814
3050
  ...(record.sdkAgentId === undefined
@@ -2834,15 +3070,18 @@ export class SessionEngine {
2834
3070
  runtime,
2835
3071
  agentName: agent.name,
2836
3072
  ...(mergedCloud === undefined ? {} : { cloud: mergedCloud }),
2837
- // The hosted Grok Bot harness reads no workspace AGENTS.md: grokbot
2838
- // turns carry the composed instructions into the hosted session,
2839
- // which surfaces them in the Sand system prompt. The box never sees
2840
- // the local session workspace, so agent-tool script bodies are
2841
- // always embedded same rule as the cloud first-prompt preamble.
3073
+ // Local turns send the composed instructions as the harness system
3074
+ // prompt; grokbot turns carry them into the hosted session, which
3075
+ // surfaces them in the Sand system prompt. Cloud turns inline them into
3076
+ // the first prompt above instead. Script bodies are embedded whenever
3077
+ // the harness cannot reach the scaffold dir: always for grokbot (the
3078
+ // box never sees the session workspace) and for a borrowed local cwd
3079
+ // (PR worktree, shared checkout); otherwise the catalog references the
3080
+ // on-disk paths under the harness cwd.
2842
3081
  instructions:
2843
3082
  runtime === "grokbot"
2844
3083
  ? buildAgentsMdContent(agent, { includeScripts: true })
2845
- : undefined,
3084
+ : localInstructions,
2846
3085
  ...(runtime === "cloud" && !isCursorHostedFilesAvailable()
2847
3086
  ? { agentServeAgent: this.project.name }
2848
3087
  : {}),
@@ -2855,7 +3094,11 @@ export class SessionEngine {
2855
3094
  record.sessionId,
2856
3095
  await this.evaluateConnectionAuth(record)
2857
3096
  ),
2858
- ...(runtime === "local" && this.hasAttachedAuthedConnections()
3097
+ ...(runtime === "local" &&
3098
+ (this.hasAttachedAuthedConnections() ||
3099
+ this.project.agent.connections.some(connection =>
3100
+ isCursorAccountTransport(connection.transport)
3101
+ ))
2859
3102
  ? { perSendMcpServers: true }
2860
3103
  : {}),
2861
3104
  subagents: buildRunnerSubagents(agent),
@@ -2864,14 +3107,14 @@ export class SessionEngine {
2864
3107
  // Local follow-ups expire any lingering active run so a preempted turn
2865
3108
  // (or one orphaned by a crashed process) never blocks this send.
2866
3109
  forceExpireActiveRun: runtime === "local" && !isFirstTurn,
2867
- onRequestId: (requestId) => {
3110
+ onRequestId: requestId => {
2868
3111
  emit({ type: "turn.bound", data: { requestId } });
2869
3112
  },
2870
- onSdkAgentId: async (sdkAgentId) => {
3113
+ onSdkAgentId: async sdkAgentId => {
2871
3114
  if (record.sdkAgentId === sdkAgentId) {
2872
3115
  return;
2873
3116
  }
2874
- await this.updateRecord(record.sessionId, (current) => ({
3117
+ await this.updateRecord(record.sessionId, current => ({
2875
3118
  ...current,
2876
3119
  sdkAgentId,
2877
3120
  }));
@@ -2973,12 +3216,12 @@ export class SessionEngine {
2973
3216
  // attached MCP server (each tool appears exactly once).
2974
3217
  const advertisedNames = new Set(
2975
3218
  this.project.agent.connections
2976
- .filter((connection) => connection.advertiseTools === true)
2977
- .map((connection) => connection.name)
3219
+ .filter(connection => connection.advertiseTools === true)
3220
+ .map(connection => connection.name)
2978
3221
  );
2979
3222
  const hostConnectionNames = new Set(
2980
3223
  (this.project.agent.hostConnections ?? []).map(
2981
- (connection) => connection.name
3224
+ connection => connection.name
2982
3225
  )
2983
3226
  );
2984
3227
  const bridgedNames = new Set(
@@ -2992,7 +3235,7 @@ export class SessionEngine {
2992
3235
  assertCloudCanHonorAccountServersFilters({
2993
3236
  runtime,
2994
3237
  resolvedConnections: this.resolvedConnections.filter(
2995
- (resolved) =>
3238
+ resolved =>
2996
3239
  !advertisedNames.has(resolved.name) &&
2997
3240
  !hostConnectionNames.has(resolved.name)
2998
3241
  ),
@@ -3065,6 +3308,20 @@ export class SessionEngine {
3065
3308
  }
3066
3309
  continue;
3067
3310
  }
3311
+ const authored = this.authoredConnection(resolved.name);
3312
+ if (
3313
+ sessionId !== undefined &&
3314
+ authored !== undefined &&
3315
+ isCursorAccountTransport(authored.transport)
3316
+ ) {
3317
+ const bound = new URL(url);
3318
+ bound.searchParams.set("agentkitSessionId", sessionId);
3319
+ servers[resolved.name] = {
3320
+ url: bound.toString(),
3321
+ headers: resolved.headers,
3322
+ };
3323
+ continue;
3324
+ }
3068
3325
  servers[resolved.name] = {
3069
3326
  url,
3070
3327
  headers: resolved.headers,
@@ -3074,7 +3331,7 @@ export class SessionEngine {
3074
3331
  runtime === "cloud" &&
3075
3332
  sessionId !== undefined &&
3076
3333
  this.cloudServerToolsConnection !== undefined &&
3077
- this.project.agent.tools.some((tool) => tool.execution === "server")
3334
+ this.project.agent.tools.some(tool => tool.execution === "server")
3078
3335
  ) {
3079
3336
  if (servers[SERVER_TOOLS_MCP_SERVER_NAME] !== undefined) {
3080
3337
  throw new Error(
@@ -3102,7 +3359,7 @@ export class SessionEngine {
3102
3359
  */
3103
3360
  private hasAttachedAuthedConnections(): boolean {
3104
3361
  return this.project.agent.connections.some(
3105
- (connection) =>
3362
+ connection =>
3106
3363
  connection.auth !== undefined && connection.advertiseTools !== true
3107
3364
  );
3108
3365
  }
@@ -3118,7 +3375,7 @@ export class SessionEngine {
3118
3375
  record: SessionRecord
3119
3376
  ): Promise<ReadonlyMap<string, Record<string, string>> | undefined> {
3120
3377
  const authed = this.project.agent.connections.filter(
3121
- (connection) =>
3378
+ connection =>
3122
3379
  connection.auth !== undefined && connection.advertiseTools !== true
3123
3380
  );
3124
3381
  if (authed.length === 0) {
@@ -3234,7 +3491,7 @@ export class SessionEngine {
3234
3491
  );
3235
3492
  }
3236
3493
  const tool = this.project.agent.tools.find(
3237
- (candidate) =>
3494
+ candidate =>
3238
3495
  candidate.name === toolName && candidate.execution === "server"
3239
3496
  );
3240
3497
  if (tool === undefined) {
@@ -3481,11 +3738,11 @@ export class SessionEngine {
3481
3738
  args.sessionId,
3482
3739
  pendingRecord
3483
3740
  );
3484
- await this.updateRecord(args.sessionId, (current) => ({
3741
+ await this.updateRecord(args.sessionId, current => ({
3485
3742
  ...current,
3486
3743
  pendingApprovals: [
3487
3744
  ...(current.pendingApprovals ?? []).filter(
3488
- (item) => item.callId !== args.callId
3745
+ item => item.callId !== args.callId
3489
3746
  ),
3490
3747
  pendingRecord,
3491
3748
  ],
@@ -3502,10 +3759,10 @@ export class SessionEngine {
3502
3759
  `[session] tool ${args.toolName} awaiting approval (${args.callId})`
3503
3760
  );
3504
3761
  const { decision, by } = await resolutionPromise;
3505
- await this.updateRecord(args.sessionId, (current) => ({
3762
+ await this.updateRecord(args.sessionId, current => ({
3506
3763
  ...current,
3507
3764
  pendingApprovals: (current.pendingApprovals ?? []).filter(
3508
- (item) => item.callId !== args.callId
3765
+ item => item.callId !== args.callId
3509
3766
  ),
3510
3767
  }));
3511
3768
  args.emit({
@@ -3532,7 +3789,7 @@ export class SessionEngine {
3532
3789
  ) {
3533
3790
  return;
3534
3791
  }
3535
- await this.updateRecord(sessionId, (record) => ({
3792
+ await this.updateRecord(sessionId, record => ({
3536
3793
  ...record,
3537
3794
  pendingApprovals: [],
3538
3795
  }));
@@ -3575,8 +3832,8 @@ export class SessionEngine {
3575
3832
  throw new SessionAuthError(sessionId);
3576
3833
  }
3577
3834
  const pending =
3578
- (record.pendingApprovals ?? []).find((item) => item.callId === callId) ??
3579
- this.approvals.list(sessionId).find((item) => item.callId === callId);
3835
+ (record.pendingApprovals ?? []).find(item => item.callId === callId) ??
3836
+ this.approvals.list(sessionId).find(item => item.callId === callId);
3580
3837
  if (pending === undefined) {
3581
3838
  throw new ApprovalNotFoundError(sessionId, callId);
3582
3839
  }
@@ -3592,10 +3849,10 @@ export class SessionEngine {
3592
3849
  sessionId: string,
3593
3850
  callId: string
3594
3851
  ): Promise<void> {
3595
- await this.updateRecord(sessionId, (current) => ({
3852
+ await this.updateRecord(sessionId, current => ({
3596
3853
  ...current,
3597
3854
  pendingApprovals: (current.pendingApprovals ?? []).filter(
3598
- (item) => item.callId !== callId
3855
+ item => item.callId !== callId
3599
3856
  ),
3600
3857
  }));
3601
3858
  }
@@ -3603,7 +3860,7 @@ export class SessionEngine {
3603
3860
  private wrapMcp(inner: McpHost): HostMcpRegistry {
3604
3861
  return {
3605
3862
  names: () => inner.names(),
3606
- listTools: (name) => this.withMcpAuth(name, () => inner.listTools(name)),
3863
+ listTools: name => this.withMcpAuth(name, () => inner.listTools(name)),
3607
3864
  callTool: (name, tool, args) =>
3608
3865
  this.withMcpAuth(name, () => inner.callTool(name, tool, args)),
3609
3866
  };
@@ -3611,11 +3868,11 @@ export class SessionEngine {
3611
3868
 
3612
3869
  private advertiseMcp(): AdvertiseHostMcp {
3613
3870
  return {
3614
- listTools: (name) =>
3871
+ listTools: name =>
3615
3872
  this.withMcpListAuth(name, () => this.mcpHost.listTools(name)),
3616
3873
  callTool: (name, tool, args) =>
3617
3874
  this.withMcpAuth(name, () => this.mcpHost.callTool(name, tool, args)),
3618
- oneOff: (connection) => {
3875
+ oneOff: connection => {
3619
3876
  const inner = this.mcpHost.oneOff(connection);
3620
3877
  return {
3621
3878
  listTools: () =>
@@ -3768,11 +4025,11 @@ export class SessionEngine {
3768
4025
  requestedAt,
3769
4026
  };
3770
4027
  const resolutionPromise = this.auths.wait(args.sessionId, pendingRecord);
3771
- await this.updateRecord(args.sessionId, (current) => ({
4028
+ await this.updateRecord(args.sessionId, current => ({
3772
4029
  ...current,
3773
4030
  pendingAuths: [
3774
4031
  ...(current.pendingAuths ?? []).filter(
3775
- (item) => item.callId !== args.callId
4032
+ item => item.callId !== args.callId
3776
4033
  ),
3777
4034
  pendingRecord,
3778
4035
  ],
@@ -3790,10 +4047,10 @@ export class SessionEngine {
3790
4047
  `[session] tool ${args.toolName} awaiting MCP auth ${args.connection} (${args.callId})`
3791
4048
  );
3792
4049
  const { decision, by } = await resolutionPromise;
3793
- await this.updateRecord(args.sessionId, (current) => ({
4050
+ await this.updateRecord(args.sessionId, current => ({
3794
4051
  ...current,
3795
4052
  pendingAuths: (current.pendingAuths ?? []).filter(
3796
- (item) => item.callId !== args.callId
4053
+ item => item.callId !== args.callId
3797
4054
  ),
3798
4055
  }));
3799
4056
  args.emit({
@@ -3822,7 +4079,7 @@ export class SessionEngine {
3822
4079
  ) {
3823
4080
  return;
3824
4081
  }
3825
- await this.updateRecord(sessionId, (record) => ({
4082
+ await this.updateRecord(sessionId, record => ({
3826
4083
  ...record,
3827
4084
  pendingAuths: [],
3828
4085
  }));
@@ -3856,8 +4113,8 @@ export class SessionEngine {
3856
4113
  throw new SessionAuthError(sessionId);
3857
4114
  }
3858
4115
  const pending =
3859
- (record.pendingAuths ?? []).find((item) => item.callId === callId) ??
3860
- this.auths.list(sessionId).find((item) => item.callId === callId);
4116
+ (record.pendingAuths ?? []).find(item => item.callId === callId) ??
4117
+ this.auths.list(sessionId).find(item => item.callId === callId);
3861
4118
  if (pending === undefined) {
3862
4119
  throw new AuthNotFoundError(sessionId, callId);
3863
4120
  }
@@ -3876,10 +4133,10 @@ export class SessionEngine {
3876
4133
  sessionId: string,
3877
4134
  callId: string
3878
4135
  ): Promise<void> {
3879
- await this.updateRecord(sessionId, (current) => ({
4136
+ await this.updateRecord(sessionId, current => ({
3880
4137
  ...current,
3881
4138
  pendingAuths: (current.pendingAuths ?? []).filter(
3882
- (item) => item.callId !== callId
4139
+ item => item.callId !== callId
3883
4140
  ),
3884
4141
  }));
3885
4142
  }
@@ -4087,17 +4344,17 @@ export class SessionEngine {
4087
4344
  }
4088
4345
  > {
4089
4346
  const authored = this.project.agent.tools.find(
4090
- (tool) => tool.name === toolName
4347
+ tool => tool.name === toolName
4091
4348
  );
4092
4349
  if (authored !== undefined) {
4093
4350
  return { tool: authored };
4094
4351
  }
4095
4352
  const catalog = await this.listCatalogTools(options);
4096
- const tool = catalog.tools.find((entry) => entry.name === toolName);
4353
+ const tool = catalog.tools.find(entry => entry.name === toolName);
4097
4354
  if (tool === undefined) {
4098
4355
  return {
4099
4356
  tool: undefined,
4100
- availableTools: catalog.tools.map((entry) => entry.name),
4357
+ availableTools: catalog.tools.map(entry => entry.name),
4101
4358
  connectionErrors: catalog.connectionErrors,
4102
4359
  };
4103
4360
  }
@@ -4139,10 +4396,10 @@ export class SessionEngine {
4139
4396
  if (native !== undefined) {
4140
4397
  return native;
4141
4398
  }
4142
- let tool = this.project.agent.tools.find((t) => t.name === toolName);
4399
+ let tool = this.project.agent.tools.find(t => t.name === toolName);
4143
4400
  if (
4144
4401
  tool === undefined &&
4145
- this.project.agent.connections.some((c) => c.advertiseTools === true)
4402
+ this.project.agent.connections.some(c => c.advertiseTools === true)
4146
4403
  ) {
4147
4404
  // Advertised passthroughs are ordinary server tools in the session's
4148
4405
  // namespace; resolve the live listing so direct calls address them by
@@ -4153,14 +4410,14 @@ export class SessionEngine {
4153
4410
  session,
4154
4411
  hostMcp: this.advertiseMcp(),
4155
4412
  });
4156
- tool = advertised.find((t) => t.name === toolName);
4413
+ tool = advertised.find(t => t.name === toolName);
4157
4414
  }
4158
4415
  if (tool === undefined) {
4159
4416
  throw new UnknownToolError(
4160
4417
  toolName,
4161
4418
  this.project.agent.tools
4162
- .filter((t) => t.execution === "server")
4163
- .map((t) => t.name)
4419
+ .filter(t => t.execution === "server")
4420
+ .map(t => t.name)
4164
4421
  );
4165
4422
  }
4166
4423
  const execute = tool.definition.execute;
@@ -4531,7 +4788,7 @@ export class SessionEngine {
4531
4788
  ): Promise<HostMcpToolInfo | undefined> {
4532
4789
  try {
4533
4790
  const listed = await this.host.mcp.listTools(connectionName);
4534
- return listed.find((tool) => tool.name === toolName);
4791
+ return listed.find(tool => tool.name === toolName);
4535
4792
  } catch {
4536
4793
  return undefined;
4537
4794
  }
@@ -4563,7 +4820,7 @@ export class SessionEngine {
4563
4820
  const chain = this.dispatchChains.get(sessionId) ?? Promise.resolve();
4564
4821
  const next = chain
4565
4822
  .then(() => this.dispatchEvent(sessionId, event, context))
4566
- .catch((error) => {
4823
+ .catch(error => {
4567
4824
  this.logger(
4568
4825
  `[agent-sdk] event dispatch failed for ${sessionId}: ${describeError(error)}`
4569
4826
  );
@@ -4630,11 +4887,11 @@ export class SessionEngine {
4630
4887
  }
4631
4888
  if (context === undefined || channelStateBefore === undefined) {
4632
4889
  // Handlers mutate live channel state in place; save the current record.
4633
- await this.updateRecord(sessionId, (current) => ({ ...current }));
4890
+ await this.updateRecord(sessionId, current => ({ ...current }));
4634
4891
  } else {
4635
4892
  const updatedState = channelCtx.state as JsonValue;
4636
4893
  context.channelState = updatedState;
4637
- await this.updateRecord(sessionId, (current) => ({
4894
+ await this.updateRecord(sessionId, current => ({
4638
4895
  ...current,
4639
4896
  channelState: mergeChannelStateMutation({
4640
4897
  current: current.channelState,
@@ -4718,8 +4975,10 @@ export class SessionEngine {
4718
4975
  async waitForCompletion(sessionId: string): Promise<TurnOutcome> {
4719
4976
  // Drain admission first so pendingTurns → activeTurns is visible before we
4720
4977
  // decide the session is idle (reminders use this for queueBehindTurn).
4721
- // The active lifecycle promise also awaits coalesce drain + the drained
4722
- // follow-up's admission, so Slack coalesced waiters see the resume turn.
4978
+ // Wait for coalesce drain and any successor turn so hosted execute does
4979
+ // not park mid-follow-up, but report the root turn's outcome: a drained
4980
+ // successor failure must not un-ACK an already-finished owner.
4981
+ let root: TurnOutcome | undefined;
4723
4982
  for (;;) {
4724
4983
  const chain = this.admissionChains.get(sessionId);
4725
4984
  if (chain !== undefined) {
@@ -4727,14 +4986,15 @@ export class SessionEngine {
4727
4986
  }
4728
4987
  const active = this.activeTurns.get(sessionId);
4729
4988
  if (active !== undefined) {
4730
- await active;
4989
+ const outcome = await active;
4990
+ root ??= outcome;
4731
4991
  continue;
4732
4992
  }
4733
4993
  const dispatch = this.dispatchChains.get(sessionId);
4734
4994
  if (dispatch !== undefined) {
4735
4995
  await dispatch.catch(() => {});
4736
4996
  }
4737
- return this.lastOutcomes.get(sessionId) ?? { status: "finished" };
4997
+ return root ?? this.lastOutcomes.get(sessionId) ?? { status: "finished" };
4738
4998
  }
4739
4999
  }
4740
5000
 
@@ -4773,7 +5033,7 @@ export class SessionEngine {
4773
5033
  }
4774
5034
  const owned = await this.ownedSessionIds(caller);
4775
5035
  return records.filter(
4776
- (record) => record.sessionId !== undefined && owned.has(record.sessionId)
5036
+ record => record.sessionId !== undefined && owned.has(record.sessionId)
4777
5037
  );
4778
5038
  }
4779
5039
 
@@ -4810,8 +5070,8 @@ export class SessionEngine {
4810
5070
  const sessions = await this.sessions.list();
4811
5071
  return new Set(
4812
5072
  sessions
4813
- .filter((record) => samePrincipal(record.auth, caller))
4814
- .map((record) => record.sessionId)
5073
+ .filter(record => samePrincipal(record.auth, caller))
5074
+ .map(record => record.sessionId)
4815
5075
  );
4816
5076
  }
4817
5077
 
@@ -4955,8 +5215,8 @@ export class SessionEngine {
4955
5215
  includeAll: boolean
4956
5216
  ): SessionSummary[] {
4957
5217
  return records
4958
- .filter((record) => includeAll || samePrincipal(record.auth, caller))
4959
- .map((record) => {
5218
+ .filter(record => includeAll || samePrincipal(record.auth, caller))
5219
+ .map(record => {
4960
5220
  const links = sessionExternalLinks(record);
4961
5221
  return {
4962
5222
  sessionId: record.sessionId,
@@ -5015,7 +5275,7 @@ export class SessionEngine {
5015
5275
  if (existing === undefined) {
5016
5276
  throw new Error(`Unknown session: ${sessionId}`);
5017
5277
  }
5018
- const record = await this.updateRecord(sessionId, (current) => ({
5278
+ const record = await this.updateRecord(sessionId, current => ({
5019
5279
  ...current,
5020
5280
  turnCount: current.turnCount + 1,
5021
5281
  }));
@@ -5150,7 +5410,7 @@ export class SessionEngine {
5150
5410
  return pending;
5151
5411
  }
5152
5412
  const work = this.runCloudTurnCostBackfill(sessionId)
5153
- .catch((error) => {
5413
+ .catch(error => {
5154
5414
  this.logger(
5155
5415
  `[agent-sdk] cloud cost backfill failed for ${sessionId}: ${describeError(error)}`
5156
5416
  );
@@ -5165,10 +5425,10 @@ export class SessionEngine {
5165
5425
  private async runCloudTurnCostBackfill(sessionId: string): Promise<void> {
5166
5426
  const log = await this.logs.get(sessionId);
5167
5427
  const events = await log.snapshot(0);
5168
- if (!events.some((event) => isUnpricedCompletedTurn(event))) {
5428
+ if (!events.some(event => isUnpricedCompletedTurn(event))) {
5169
5429
  if (
5170
5430
  !this.isTurnRunning(sessionId) &&
5171
- events.some((event) => event.type === "turn.completed")
5431
+ events.some(event => event.type === "turn.completed")
5172
5432
  ) {
5173
5433
  this.cloudCostBackfillDone.add(sessionId);
5174
5434
  }
@@ -5199,7 +5459,7 @@ export class SessionEngine {
5199
5459
  log.replace(i, next);
5200
5460
  }
5201
5461
  if (
5202
- !(await log.snapshot(0)).some((event) => isUnpricedCompletedTurn(event))
5462
+ !(await log.snapshot(0)).some(event => isUnpricedCompletedTurn(event))
5203
5463
  ) {
5204
5464
  this.cloudCostBackfillDone.add(sessionId);
5205
5465
  }
@@ -5210,7 +5470,7 @@ export class SessionEngine {
5210
5470
  token: string | null
5211
5471
  ): Promise<void> {
5212
5472
  const previous = await this.sessions.get(sessionId);
5213
- await this.updateRecord(sessionId, (current) => ({
5473
+ await this.updateRecord(sessionId, current => ({
5214
5474
  ...current,
5215
5475
  continuationKey: token,
5216
5476
  }));
@@ -5387,7 +5647,7 @@ export class SessionEngine {
5387
5647
  // the lazy continuation-lookup path.
5388
5648
  const cutoff = Date.now() - policy.maxAgeMs;
5389
5649
  const candidates = loaded
5390
- .map((record) => ({
5650
+ .map(record => ({
5391
5651
  record,
5392
5652
  // Numeric timestamp for both the age filter and the sort; a
5393
5653
  // non-string updatedAt (e.g. a raw DB Date from an untyped sink)
@@ -5419,7 +5679,7 @@ export class SessionEngine {
5419
5679
  ) {
5420
5680
  const chunk = candidates.slice(i, i + RESTORE_FETCH_CONCURRENCY);
5421
5681
  const fetched = await Promise.all(
5422
- chunk.map(async (record) => {
5682
+ chunk.map(async record => {
5423
5683
  try {
5424
5684
  // Local state always wins over the sink.
5425
5685
  if ((await this.sessions.get(record.sessionId)) !== undefined) {
@@ -5676,7 +5936,7 @@ function eventsNdjson(events: SessionEvent[]): string | undefined {
5676
5936
  if (events.length === 0) {
5677
5937
  return undefined;
5678
5938
  }
5679
- return `${events.map((event) => JSON.stringify(event)).join("\n")}\n`;
5939
+ return `${events.map(event => JSON.stringify(event)).join("\n")}\n`;
5680
5940
  }
5681
5941
 
5682
5942
  function subagentPrompt(subagent: ResolvedAgent): string {
@@ -5692,7 +5952,7 @@ function subagentPrompt(subagent: ResolvedAgent): string {
5692
5952
  * executor that turn will run on.
5693
5953
  */
5694
5954
  function buildRunnerSubagents(agent: ResolvedAgent): RunnerSubagent[] {
5695
- return agent.subagents.map((subagent) => ({
5955
+ return agent.subagents.map(subagent => ({
5696
5956
  name: subagent.name,
5697
5957
  description: subagent.description ?? subagent.name,
5698
5958
  prompt: subagentPrompt(subagent),
@@ -5716,7 +5976,7 @@ async function defaultGetCloudUsage(
5716
5976
  return {
5717
5977
  usage: mapSdkTokenUsage(billed.usage),
5718
5978
  cost: billed.cost,
5719
- runs: billed.runs.map((run) => ({
5979
+ runs: billed.runs.map(run => ({
5720
5980
  runId: run.runId,
5721
5981
  usage: mapSdkTokenUsage(run.usage),
5722
5982
  cost: run.cost,
@@ -5768,7 +6028,7 @@ function approvalResolverLabel(auth: AuthContext | null): string | undefined {
5768
6028
 
5769
6029
  /** Let the HTTP NDJSON writer flush before the next SDK update. */
5770
6030
  function yieldEventLoop(): Promise<void> {
5771
- return new Promise((resolve) => {
6031
+ return new Promise(resolve => {
5772
6032
  setImmediate(resolve);
5773
6033
  });
5774
6034
  }