@cursor/july 0.1.109 → 0.1.112

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 (1166) hide show
  1. package/AGENTS.md +1 -1
  2. package/README.md +0 -15
  3. package/dist/bin/agent-serve.js +99 -67
  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 +29 -19
  22. package/dist/channels/github/github-channel.d.ts.map +1 -1
  23. package/dist/channels/github/github-channel.js +46 -32
  24. package/dist/channels/github/progress.d.ts.map +1 -1
  25. package/dist/channels/github/progress.js +7 -2
  26. package/dist/channels/github/state.d.ts +6 -0
  27. package/dist/channels/github/state.d.ts.map +1 -1
  28. package/dist/channels/github/types.d.ts +6 -0
  29. package/dist/channels/github/types.d.ts.map +1 -1
  30. package/dist/channels/gitlab/binding.js +4 -4
  31. package/dist/channels/gitlab/checks.d.ts.map +1 -1
  32. package/dist/channels/gitlab/checks.js +1 -1
  33. package/dist/channels/gitlab/cursor-account.js +1 -1
  34. package/dist/channels/gitlab/events.js +1 -1
  35. package/dist/channels/gitlab/gitlab-channel.js +1 -1
  36. package/dist/channels/gitlab/gitlab-webhook.js +1 -1
  37. package/dist/channels/gitlab/replay.js +2 -2
  38. package/dist/channels/origin/binding.d.ts +2 -0
  39. package/dist/channels/origin/binding.d.ts.map +1 -1
  40. package/dist/channels/origin/binding.js +3 -3
  41. package/dist/channels/origin/checks.d.ts +19 -7
  42. package/dist/channels/origin/checks.d.ts.map +1 -1
  43. package/dist/channels/origin/checks.js +13 -9
  44. package/dist/channels/origin/cursor-account.js +1 -1
  45. package/dist/channels/origin/defaults.d.ts.map +1 -1
  46. package/dist/channels/origin/defaults.js +3 -1
  47. package/dist/channels/origin/events.js +1 -1
  48. package/dist/channels/origin/origin-channel.d.ts.map +1 -1
  49. package/dist/channels/origin/origin-channel.js +2 -1
  50. package/dist/channels/origin/origin-webhook.js +2 -2
  51. package/dist/channels/slack/agentic-delivery.d.ts +23 -0
  52. package/dist/channels/slack/agentic-delivery.d.ts.map +1 -0
  53. package/dist/channels/slack/agentic-delivery.js +560 -0
  54. package/dist/channels/slack/agentic-posted.d.ts +30 -0
  55. package/dist/channels/slack/agentic-posted.d.ts.map +1 -0
  56. package/dist/channels/slack/agentic-posted.js +102 -0
  57. package/dist/channels/slack/agentic-signals.d.ts +48 -0
  58. package/dist/channels/slack/agentic-signals.d.ts.map +1 -0
  59. package/dist/channels/slack/agentic-signals.js +204 -0
  60. package/dist/channels/slack/api.d.ts +20 -1
  61. package/dist/channels/slack/api.d.ts.map +1 -1
  62. package/dist/channels/slack/api.js +43 -11
  63. package/dist/channels/slack/approvals.js +1 -1
  64. package/dist/channels/slack/auth.d.ts.map +1 -1
  65. package/dist/channels/slack/auth.js +3 -1
  66. package/dist/channels/slack/blocks.js +3 -3
  67. package/dist/channels/slack/bot-mentions.d.ts.map +1 -1
  68. package/dist/channels/slack/bot-mentions.js +5 -5
  69. package/dist/channels/slack/channel-watch.js +1 -1
  70. package/dist/channels/slack/cli-project.js +3 -3
  71. package/dist/channels/slack/defaults.d.ts +3 -0
  72. package/dist/channels/slack/defaults.d.ts.map +1 -1
  73. package/dist/channels/slack/defaults.js +90 -29
  74. package/dist/channels/slack/dispatch.d.ts +44 -1
  75. package/dist/channels/slack/dispatch.d.ts.map +1 -1
  76. package/dist/channels/slack/dispatch.js +323 -107
  77. package/dist/channels/slack/doctor.js +1 -1
  78. package/dist/channels/slack/eval-directive.js +1 -1
  79. package/dist/channels/slack/external-policy.d.ts +2 -1
  80. package/dist/channels/slack/external-policy.d.ts.map +1 -1
  81. package/dist/channels/slack/external-policy.js +13 -2
  82. package/dist/channels/slack/footer.d.ts +30 -0
  83. package/dist/channels/slack/footer.d.ts.map +1 -0
  84. package/dist/channels/slack/footer.js +88 -0
  85. package/dist/channels/slack/index.d.ts +2 -0
  86. package/dist/channels/slack/index.d.ts.map +1 -1
  87. package/dist/channels/slack/index.js +2 -0
  88. package/dist/channels/slack/interactive.d.ts.map +1 -1
  89. package/dist/channels/slack/interactive.js +5 -3
  90. package/dist/channels/slack/live-delivery.d.ts +1 -1
  91. package/dist/channels/slack/live-delivery.d.ts.map +1 -1
  92. package/dist/channels/slack/live-delivery.js +20 -6
  93. package/dist/channels/slack/log.d.ts.map +1 -1
  94. package/dist/channels/slack/log.js +1 -1
  95. package/dist/channels/slack/manifest.js +1 -1
  96. package/dist/channels/slack/nudge-carrier.js +1 -1
  97. package/dist/channels/slack/nudge-store.js +2 -2
  98. package/dist/channels/slack/paint-start.d.ts +22 -0
  99. package/dist/channels/slack/paint-start.d.ts.map +1 -0
  100. package/dist/channels/slack/paint-start.js +91 -0
  101. package/dist/channels/slack/placeholder.d.ts +62 -0
  102. package/dist/channels/slack/placeholder.d.ts.map +1 -0
  103. package/dist/channels/slack/placeholder.js +268 -0
  104. package/dist/channels/slack/progress-delivery.d.ts.map +1 -1
  105. package/dist/channels/slack/progress-delivery.js +13 -4
  106. package/dist/channels/slack/reasoning-chip.d.ts +8 -0
  107. package/dist/channels/slack/reasoning-chip.d.ts.map +1 -0
  108. package/dist/channels/slack/reasoning-chip.js +30 -0
  109. package/dist/channels/slack/recording-sink.d.ts +29 -0
  110. package/dist/channels/slack/recording-sink.d.ts.map +1 -0
  111. package/dist/channels/slack/recording-sink.js +142 -0
  112. package/dist/channels/slack/reply-options.d.ts +8 -1
  113. package/dist/channels/slack/reply-options.d.ts.map +1 -1
  114. package/dist/channels/slack/reply-options.js +59 -14
  115. package/dist/channels/slack/setup.js +1 -1
  116. package/dist/channels/slack/slack-channel.d.ts +2 -2
  117. package/dist/channels/slack/slack-channel.d.ts.map +1 -1
  118. package/dist/channels/slack/slack-channel.js +58 -30
  119. package/dist/channels/slack/socket-mode.js +2 -2
  120. package/dist/channels/slack/thread-context.js +5 -5
  121. package/dist/channels/slack/tool-approval-events.d.ts +5 -0
  122. package/dist/channels/slack/tool-approval-events.d.ts.map +1 -1
  123. package/dist/channels/slack/tool-approval-events.js +50 -38
  124. package/dist/channels/slack/tool-cards.js +1 -1
  125. package/dist/channels/slack/tool-chip.d.ts +9 -0
  126. package/dist/channels/slack/tool-chip.d.ts.map +1 -0
  127. package/dist/channels/slack/tool-chip.js +25 -0
  128. package/dist/channels/slack/types.d.ts +49 -7
  129. package/dist/channels/slack/types.d.ts.map +1 -1
  130. package/dist/channels/slack/upload.d.ts +13 -0
  131. package/dist/channels/slack/upload.d.ts.map +1 -0
  132. package/dist/channels/slack/upload.js +135 -0
  133. package/dist/channels.d.ts +10 -14
  134. package/dist/channels.d.ts.map +1 -1
  135. package/dist/channels.js +9 -21
  136. package/dist/dashboard-session-url.d.ts +15 -0
  137. package/dist/dashboard-session-url.d.ts.map +1 -0
  138. package/dist/dashboard-session-url.js +25 -0
  139. package/dist/docs/404.html +3 -3
  140. package/dist/docs/architecture.svg +59 -0
  141. package/dist/docs/assets/app.DxTdhphC.js +309 -0
  142. package/dist/docs/assets/building-with-agents.md.BBCx0AUo.js +9 -0
  143. package/dist/docs/assets/building-with-agents.md.BBCx0AUo.lean.js +1 -0
  144. package/dist/docs/assets/chunks/@localSearchIndexroot.QmjDU6Jh.js +1 -0
  145. package/dist/docs/assets/chunks/{VPLocalSearchBox.CVQERt56.js → VPLocalSearchBox.CR3KTF0X.js} +2 -2
  146. package/dist/docs/assets/chunks/arc.CVVqBOdS.js +1 -0
  147. package/dist/docs/assets/chunks/architectureDiagram-Q4EWVU46.CJHGP4ki.js +36 -0
  148. package/dist/docs/assets/chunks/baseUniq.r7UVVRBP.js +1 -0
  149. package/dist/docs/assets/chunks/blockDiagram-DXYQGD6D.DKmMaTre.js +132 -0
  150. package/dist/docs/assets/chunks/c4Diagram-AHTNJAMY.DDJsntUO.js +10 -0
  151. package/dist/docs/assets/chunks/channel.BjpoSbz_.js +1 -0
  152. package/dist/docs/assets/chunks/chunk-4BX2VUAB.BK2rKt6W.js +1 -0
  153. package/dist/docs/assets/chunks/chunk-4TB4RGXK.DRLV8RnF.js +206 -0
  154. package/dist/docs/assets/chunks/chunk-55IACEB6.DaKjxtb7.js +1 -0
  155. package/dist/docs/assets/chunks/chunk-EDXVE4YY.C5sPCIT1.js +1 -0
  156. package/dist/docs/assets/chunks/chunk-FMBD7UC4.CSGWyNTB.js +15 -0
  157. package/dist/docs/assets/chunks/chunk-OYMX7WX6.D5tK9XEr.js +231 -0
  158. package/dist/docs/assets/chunks/chunk-QZHKN3VN.BeZGd1UZ.js +1 -0
  159. package/dist/docs/assets/chunks/chunk-YZCP3GAM.U_tfWwQR.js +1 -0
  160. package/dist/docs/assets/chunks/classDiagram-6PBFFD2Q.BgxOlMHw.js +1 -0
  161. package/dist/docs/assets/chunks/classDiagram-v2-HSJHXN6E.BgxOlMHw.js +1 -0
  162. package/dist/docs/assets/chunks/clone.DRuGBKZC.js +1 -0
  163. package/dist/docs/assets/chunks/cose-bilkent-S5V4N54A.DVeRXIb6.js +1 -0
  164. package/dist/docs/assets/chunks/cytoscape.esm.BQk4lpUV.js +331 -0
  165. package/dist/docs/assets/chunks/dagre-KV5264BT.BpKJAeRZ.js +4 -0
  166. package/dist/docs/assets/chunks/defaultLocale.C4B-KCzX.js +1 -0
  167. package/dist/docs/assets/chunks/diagram-5BDNPKRD.BQOtrd1Z.js +10 -0
  168. package/dist/docs/assets/chunks/diagram-G4DWMVQ6.CSDAhjPI.js +24 -0
  169. package/dist/docs/assets/chunks/diagram-MMDJMWI5.Dpztst2S.js +43 -0
  170. package/dist/docs/assets/chunks/diagram-TYMM5635.qJHRizHR.js +24 -0
  171. package/dist/docs/assets/chunks/erDiagram-SMLLAGMA.vbDotH3l.js +85 -0
  172. package/dist/docs/assets/chunks/flowDiagram-DWJPFMVM.CqS_ZQr4.js +162 -0
  173. package/dist/docs/assets/chunks/{framework.BCISBCiQ.js → framework.BNw1pucY.js} +6 -6
  174. package/dist/docs/assets/chunks/ganttDiagram-T4ZO3ILL.DTLdR4pN.js +292 -0
  175. package/dist/docs/assets/chunks/gitGraphDiagram-UUTBAWPF.D04lnbnr.js +106 -0
  176. package/dist/docs/assets/chunks/graph.BlfqLJsM.js +1 -0
  177. package/dist/docs/assets/chunks/infoDiagram-42DDH7IO.tAooImWA.js +2 -0
  178. package/dist/docs/assets/chunks/init.Gi6I4Gst.js +1 -0
  179. package/dist/docs/assets/chunks/ishikawaDiagram-UXIWVN3A.ClUsVqnJ.js +70 -0
  180. package/dist/docs/assets/chunks/journeyDiagram-VCZTEJTY.C3tUgyCg.js +139 -0
  181. package/dist/docs/assets/chunks/kanban-definition-6JOO6SKY.CtD9-QCe.js +89 -0
  182. package/dist/docs/assets/chunks/katex.DkKDou_j.js +257 -0
  183. package/dist/docs/assets/chunks/layout.D38U-LnT.js +1 -0
  184. package/dist/docs/assets/chunks/linear.BJmssyhN.js +1 -0
  185. package/dist/docs/assets/chunks/min.DNgXoouU.js +1 -0
  186. package/dist/docs/assets/chunks/mindmap-definition-QFDTVHPH.Dcp6cxeu.js +96 -0
  187. package/dist/docs/assets/chunks/ordinal.DBvzRdQf.js +1 -0
  188. package/dist/docs/assets/chunks/pieDiagram-DEJITSTG.CLDw6zIs.js +30 -0
  189. package/dist/docs/assets/chunks/quadrantDiagram-34T5L4WZ.CYaeeY4c.js +7 -0
  190. package/dist/docs/assets/chunks/requirementDiagram-MS252O5E.gMYuRpq2.js +84 -0
  191. package/dist/docs/assets/chunks/sankeyDiagram-XADWPNL6.CZqyHFbc.js +10 -0
  192. package/dist/docs/assets/chunks/sequenceDiagram-FGHM5R23.BTsCjUDN.js +157 -0
  193. package/dist/docs/assets/chunks/stateDiagram-FHFEXIEX.CftT9mLJ.js +1 -0
  194. package/dist/docs/assets/chunks/stateDiagram-v2-QKLJ7IA2.-43J68xB.js +1 -0
  195. package/dist/docs/assets/chunks/{theme.Dnsd3XOn.js → theme.B_7J9ZsV.js} +2 -2
  196. package/dist/docs/assets/chunks/timeline-definition-GMOUNBTQ.DbU3WUNw.js +120 -0
  197. package/dist/docs/assets/chunks/vennDiagram-DHZGUBPP.ixsq-q2u.js +34 -0
  198. package/dist/docs/assets/chunks/virtual_mermaid-config.DDnGl6nM.js +1 -0
  199. package/dist/docs/assets/chunks/wardley-RL74JXVD.WRXz-Dux.js +162 -0
  200. package/dist/docs/assets/chunks/wardleyDiagram-NUSXRM2D.C0ewvgbp.js +20 -0
  201. package/dist/docs/assets/chunks/xychartDiagram-5P7HB3ND.nAEhF4bO.js +7 -0
  202. package/dist/docs/assets/deployment.md.D2jQZuFx.js +32 -0
  203. package/dist/docs/assets/deployment.md.D2jQZuFx.lean.js +1 -0
  204. package/dist/docs/assets/evals.md.BYvfZ-PO.js +72 -0
  205. package/dist/docs/assets/evals.md.BYvfZ-PO.lean.js +1 -0
  206. package/dist/docs/assets/guides_agent-to-agent.md.8oDTfu-E.js +30 -0
  207. package/dist/docs/assets/guides_agent-to-agent.md.8oDTfu-E.lean.js +1 -0
  208. package/dist/docs/assets/guides_bitbucket.md.mpevW-VP.js +145 -0
  209. package/dist/docs/assets/guides_bitbucket.md.mpevW-VP.lean.js +1 -0
  210. package/dist/docs/assets/guides_cloud-agents.md.Cp1O3u-X.js +15 -0
  211. package/dist/docs/assets/guides_cloud-agents.md.Cp1O3u-X.lean.js +1 -0
  212. package/dist/docs/assets/guides_convert-automation.md.CqEyfP6Y.js +43 -0
  213. package/dist/docs/assets/guides_convert-automation.md.CqEyfP6Y.lean.js +1 -0
  214. package/dist/docs/assets/guides_github.md.BwpBp3ed.js +156 -0
  215. package/dist/docs/assets/guides_github.md.BwpBp3ed.lean.js +1 -0
  216. package/dist/docs/assets/guides_gitlab.md.DaEC3nMk.js +153 -0
  217. package/dist/docs/assets/guides_gitlab.md.DaEC3nMk.lean.js +1 -0
  218. package/dist/docs/assets/guides_grokbot-agents.md.CMhZNdEU.js +16 -0
  219. package/dist/docs/assets/guides_grokbot-agents.md.CMhZNdEU.lean.js +1 -0
  220. package/dist/docs/assets/guides_improve.md.Bnp4F99w.js +22 -0
  221. package/dist/docs/assets/guides_improve.md.Bnp4F99w.lean.js +1 -0
  222. package/dist/docs/assets/guides_mcp-oauth.md.bSFakfCY.js +50 -0
  223. package/dist/docs/assets/guides_mcp-oauth.md.bSFakfCY.lean.js +1 -0
  224. package/dist/docs/assets/guides_opentelemetry.md.BKDxQmmd.js +35 -0
  225. package/dist/docs/assets/guides_opentelemetry.md.BKDxQmmd.lean.js +1 -0
  226. package/dist/docs/assets/guides_slack.md.Bo96y42E.js +70 -0
  227. package/dist/docs/assets/guides_slack.md.Bo96y42E.lean.js +1 -0
  228. package/dist/docs/assets/guides_webhooks.md.1A72_VEE.js +92 -0
  229. package/dist/docs/assets/guides_webhooks.md.1A72_VEE.lean.js +1 -0
  230. package/dist/docs/assets/hillclimbing.md.D4E1o5Sa.js +7 -0
  231. package/dist/docs/assets/hillclimbing.md.D4E1o5Sa.lean.js +1 -0
  232. package/dist/docs/assets/index.md.C-t81M5J.js +17 -0
  233. package/dist/docs/assets/index.md.C-t81M5J.lean.js +1 -0
  234. package/dist/docs/assets/{quickstart.md.DdQOF7Y8.js → quickstart.md.DAvVhuuU.js} +30 -38
  235. package/dist/docs/assets/quickstart.md.DAvVhuuU.lean.js +1 -0
  236. package/dist/docs/assets/{reference_agent-config.md.CvoL6pof.js → reference_agent-config.md.DGPyw7ms.js} +1 -1
  237. package/dist/docs/assets/{reference_agent-config.md.CvoL6pof.lean.js → reference_agent-config.md.DGPyw7ms.lean.js} +1 -1
  238. package/dist/docs/assets/{reference_artifacts.md.Dior32Qw.js → reference_artifacts.md.Bu_4HmsD.js} +1 -1
  239. package/dist/docs/assets/{reference_artifacts.md.Dior32Qw.lean.js → reference_artifacts.md.Bu_4HmsD.lean.js} +1 -1
  240. package/dist/docs/assets/{reference_channels.md.CAo-iK4j.js → reference_channels.md.nFWbzAic.js} +2 -12
  241. package/dist/docs/assets/{reference_channels.md.CAo-iK4j.lean.js → reference_channels.md.nFWbzAic.lean.js} +1 -1
  242. package/dist/docs/assets/{reference_cli.md.Deg7849l.js → reference_cli.md.DLWDz9ij.js} +5 -3
  243. package/dist/docs/assets/{reference_cli.md.Deg7849l.lean.js → reference_cli.md.DLWDz9ij.lean.js} +1 -1
  244. package/dist/docs/assets/{reference_connections.md.BojkC6c5.js → reference_connections.md.CmyrlXfY.js} +4 -4
  245. package/dist/docs/assets/{reference_connections.md.BojkC6c5.lean.js → reference_connections.md.CmyrlXfY.lean.js} +1 -1
  246. package/dist/docs/assets/reference_evals.md.DNJzM_yf.js +57 -0
  247. package/dist/docs/assets/reference_evals.md.DNJzM_yf.lean.js +1 -0
  248. package/dist/docs/assets/reference_extensions.md.Ceq-qT8d.js +58 -0
  249. package/dist/docs/assets/reference_extensions.md.Ceq-qT8d.lean.js +1 -0
  250. package/dist/docs/assets/{reference_hooks.md.BlM_bOg6.js → reference_hooks.md.B7uzNENk.js} +3 -3
  251. package/dist/docs/assets/{reference_hooks.md.BlM_bOg6.lean.js → reference_hooks.md.B7uzNENk.lean.js} +1 -1
  252. package/dist/docs/assets/{reference_http-api.md.BwaCo-VO.js → reference_http-api.md.CduHavZ2.js} +3 -3
  253. package/dist/docs/assets/{reference_http-api.md.BwaCo-VO.lean.js → reference_http-api.md.CduHavZ2.lean.js} +1 -1
  254. package/dist/docs/assets/{reference_instructions.md.CR7XSsGk.js → reference_instructions.md.CU1My5My.js} +1 -1
  255. package/dist/docs/assets/{reference_instructions.md.CR7XSsGk.lean.js → reference_instructions.md.CU1My5My.lean.js} +1 -1
  256. package/dist/docs/assets/{reference_playground.md.DLnoaczX.js → reference_playground.md.Ch2d0Iqi.js} +1 -1
  257. package/dist/docs/assets/{reference_playground.md.DLnoaczX.lean.js → reference_playground.md.Ch2d0Iqi.lean.js} +1 -1
  258. package/dist/docs/assets/{reference_project-layout.md.BEU8MtQV.js → reference_project-layout.md.BGhgpy9V.js} +3 -3
  259. package/dist/docs/assets/{reference_project-layout.md.BEU8MtQV.lean.js → reference_project-layout.md.BGhgpy9V.lean.js} +1 -1
  260. package/dist/docs/assets/{reference_prompt.md.DnaD5dNK.js → reference_prompt.md.Ccp0R53H.js} +1 -1
  261. package/dist/docs/assets/{reference_prompt.md.DnaD5dNK.lean.js → reference_prompt.md.Ccp0R53H.lean.js} +1 -1
  262. package/dist/docs/assets/{reference_schedules.md.DI_JrHgq.js → reference_schedules.md.B2Nm6FaD.js} +1 -1
  263. package/dist/docs/assets/{reference_schedules.md.DI_JrHgq.lean.js → reference_schedules.md.B2Nm6FaD.lean.js} +1 -1
  264. package/dist/docs/assets/{reference_sessions.md.CyXV1MUw.js → reference_sessions.md.1_6Vyv7x.js} +1 -1
  265. package/dist/docs/assets/{reference_sessions.md.CyXV1MUw.lean.js → reference_sessions.md.1_6Vyv7x.lean.js} +1 -1
  266. package/dist/docs/assets/{reference_skills.md.l2ezAcaN.js → reference_skills.md.DjQkRefx.js} +1 -1
  267. package/dist/docs/assets/{reference_skills.md.l2ezAcaN.lean.js → reference_skills.md.DjQkRefx.lean.js} +1 -1
  268. package/dist/docs/assets/{reference_subagents.md.CfsIloPm.js → reference_subagents.md.BHsSMMyO.js} +2 -2
  269. package/dist/docs/assets/{reference_subagents.md.CfsIloPm.lean.js → reference_subagents.md.BHsSMMyO.lean.js} +1 -1
  270. package/dist/docs/assets/{reference_tools.md.aGrn99hP.js → reference_tools.md.BYzUTeVA.js} +4 -4
  271. package/dist/docs/assets/{reference_tools.md.aGrn99hP.lean.js → reference_tools.md.BYzUTeVA.lean.js} +1 -1
  272. package/dist/docs/assets/{style.DCD_zyg3.css → style.Cfo2vbik.css} +1 -1
  273. package/dist/docs/assets/{templates_agentic-owners.md.BZSH4N9z.js → templates_agentic-owners.md.9M575F5C.js} +1 -1
  274. package/dist/docs/assets/{templates_agentic-owners.md.BZSH4N9z.lean.js → templates_agentic-owners.md.9M575F5C.lean.js} +1 -1
  275. package/dist/docs/assets/{templates_pr-autofixer.md.Bds_XWcV.js → templates_pr-autofixer.md.ws0DDXDy.js} +1 -1
  276. package/dist/docs/assets/{templates_pr-autofixer.md.Bds_XWcV.lean.js → templates_pr-autofixer.md.ws0DDXDy.lean.js} +1 -1
  277. package/dist/docs/assets/{templates_security-reviewer.md.lshxbCLK.js → templates_security-reviewer.md.KEFYXzfK.js} +1 -1
  278. package/dist/docs/assets/{templates_security-reviewer.md.lshxbCLK.lean.js → templates_security-reviewer.md.KEFYXzfK.lean.js} +1 -1
  279. package/dist/docs/assets/templates_thermo-quality-review.md.VNJ_mohX.js +3 -0
  280. package/dist/docs/assets/templates_thermo-quality-review.md.VNJ_mohX.lean.js +1 -0
  281. package/dist/docs/assets/templates_thermo-review.md.Hi3zWOkP.js +3 -0
  282. package/dist/docs/assets/templates_thermo-review.md.Hi3zWOkP.lean.js +1 -0
  283. package/dist/docs/assets/{templates_triage.md.Co4UNzkZ.js → templates_triage.md.CVGe_FG6.js} +1 -1
  284. package/dist/docs/assets/{templates_triage.md.Co4UNzkZ.lean.js → templates_triage.md.CVGe_FG6.lean.js} +1 -1
  285. package/dist/docs/assets/troubleshooting.md.mnfFG2Em.js +1 -0
  286. package/dist/docs/assets/troubleshooting.md.mnfFG2Em.lean.js +1 -0
  287. package/dist/docs/building-with-agents.html +47 -18
  288. package/dist/docs/building-with-agents.md +94 -84
  289. package/dist/docs/deployment.html +62 -48
  290. package/dist/docs/deployment.md +117 -364
  291. package/dist/docs/evals.html +88 -194
  292. package/dist/docs/evals.md +146 -673
  293. package/dist/docs/guides/agent-to-agent.html +65 -12
  294. package/dist/docs/guides/agent-to-agent.md +125 -91
  295. package/dist/docs/guides/bitbucket.html +182 -14
  296. package/dist/docs/guides/bitbucket.md +249 -48
  297. package/dist/docs/guides/cloud-agents.html +49 -10
  298. package/dist/docs/guides/cloud-agents.md +123 -66
  299. package/dist/docs/guides/convert-automation.html +83 -19
  300. package/dist/docs/guides/convert-automation.md +156 -147
  301. package/dist/docs/guides/github.html +187 -62
  302. package/dist/docs/guides/github.md +260 -245
  303. package/dist/docs/guides/gitlab.html +187 -15
  304. package/dist/docs/guides/gitlab.md +249 -50
  305. package/dist/docs/guides/grokbot-agents.html +51 -11
  306. package/dist/docs/guides/grokbot-agents.md +116 -63
  307. package/dist/docs/guides/improve.html +51 -10
  308. package/dist/docs/guides/improve.md +111 -58
  309. package/dist/docs/guides/mcp-oauth.html +77 -22
  310. package/dist/docs/guides/mcp-oauth.md +111 -121
  311. package/dist/docs/guides/opentelemetry.html +72 -30
  312. package/dist/docs/guides/opentelemetry.md +105 -187
  313. package/dist/docs/guides/slack.html +89 -24
  314. package/dist/docs/guides/slack.md +170 -191
  315. package/dist/docs/guides/webhooks.html +100 -200
  316. package/dist/docs/guides/webhooks.md +154 -386
  317. package/dist/docs/hashmap.json +1 -1
  318. package/dist/docs/hillclimbing.html +47 -11
  319. package/dist/docs/hillclimbing.md +101 -55
  320. package/dist/docs/index.html +57 -12
  321. package/dist/docs/index.md +83 -150
  322. package/dist/docs/llms-full.txt +6244 -10784
  323. package/dist/docs/llms.txt +23 -46
  324. package/dist/docs/quickstart.html +70 -45
  325. package/dist/docs/quickstart.md +44 -105
  326. package/dist/docs/reference/agent-config.html +41 -8
  327. package/dist/docs/reference/artifacts.html +41 -8
  328. package/dist/docs/reference/channels.html +41 -18
  329. package/dist/docs/reference/channels.md +0 -16
  330. package/dist/docs/reference/cli.html +44 -9
  331. package/dist/docs/reference/cli.md +2 -16
  332. package/dist/docs/reference/connections.html +43 -10
  333. package/dist/docs/reference/connections.md +3 -5
  334. package/dist/docs/reference/evals.html +116 -0
  335. package/dist/docs/reference/evals.md +293 -0
  336. package/dist/docs/reference/extensions.html +83 -54
  337. package/dist/docs/reference/extensions.md +127 -199
  338. package/dist/docs/reference/hooks.html +42 -9
  339. package/dist/docs/reference/hooks.md +34 -36
  340. package/dist/docs/reference/http-api.html +42 -9
  341. package/dist/docs/reference/http-api.md +5 -5
  342. package/dist/docs/reference/instructions.html +41 -8
  343. package/dist/docs/reference/playground.html +40 -7
  344. package/dist/docs/reference/playground.md +2 -2
  345. package/dist/docs/reference/project-layout.html +42 -9
  346. package/dist/docs/reference/project-layout.md +3 -4
  347. package/dist/docs/reference/prompt.html +41 -8
  348. package/dist/docs/reference/schedules.html +41 -8
  349. package/dist/docs/reference/sessions.html +40 -7
  350. package/dist/docs/reference/sessions.md +5 -4
  351. package/dist/docs/reference/skills.html +41 -8
  352. package/dist/docs/reference/subagents.html +41 -8
  353. package/dist/docs/reference/subagents.md +2 -4
  354. package/dist/docs/reference/tools.html +43 -10
  355. package/dist/docs/reference/tools.md +2 -5
  356. package/dist/docs/templates/agentic-owners.html +41 -8
  357. package/dist/docs/templates/pr-autofixer.html +41 -8
  358. package/dist/docs/templates/security-reviewer.html +41 -8
  359. package/dist/docs/templates/thermo-quality-review.html +62 -0
  360. package/dist/docs/templates/thermo-quality-review.md +75 -0
  361. package/dist/docs/templates/thermo-review.html +62 -0
  362. package/dist/docs/templates/thermo-review.md +74 -0
  363. package/dist/docs/templates/triage.html +41 -8
  364. package/dist/docs/troubleshooting.html +41 -8
  365. package/dist/docs/troubleshooting.md +97 -67
  366. package/dist/evals/assertions.js +19 -19
  367. package/dist/evals/expect.js +1 -1
  368. package/dist/evals/judge.js +1 -1
  369. package/dist/evals/reporters.d.ts.map +1 -1
  370. package/dist/evals/reporters.js +8 -8
  371. package/dist/evals/run-facts.js +2 -2
  372. package/dist/evals.d.ts +1 -1
  373. package/dist/evals.d.ts.map +1 -1
  374. package/dist/evals.js +7 -7
  375. package/dist/extensions/cursor-cloud-agents/extension.js +1 -1
  376. package/dist/extensions/cursor-cloud-agents/lib/backend.js +3 -3
  377. package/dist/extensions/cursor-cloud-agents/lib/fleet.js +1 -1
  378. package/dist/extensions/cursor-cloud-agents/lib/repos.js +6 -6
  379. package/dist/extensions/cursor-cloud-agents/lib/transcript.d.ts.map +1 -1
  380. package/dist/extensions/cursor-cloud-agents/lib/transcript.js +2 -2
  381. package/dist/extensions/cursor-cloud-agents/skills/handoff.md +3 -7
  382. package/dist/extensions/cursor-cloud-agents/tools/list.js +1 -1
  383. package/dist/extensions/improve/extension.d.ts +3 -1
  384. package/dist/extensions/improve/extension.d.ts.map +1 -1
  385. package/dist/extensions/improve/extension.js +4 -2
  386. package/dist/extensions/improve/skills/yourself.js +2 -2
  387. package/dist/extensions/slack-communication/extension.d.ts +28 -0
  388. package/dist/extensions/slack-communication/extension.d.ts.map +1 -0
  389. package/dist/extensions/slack-communication/extension.js +32 -0
  390. package/dist/extensions/slack-communication/skills/slack-voice.d.ts +5 -0
  391. package/dist/extensions/slack-communication/skills/slack-voice.d.ts.map +1 -0
  392. package/dist/extensions/slack-communication/skills/slack-voice.js +54 -0
  393. package/dist/extensions/slack-communication/tools/delete-message.d.ts +4 -0
  394. package/dist/extensions/slack-communication/tools/delete-message.d.ts.map +1 -0
  395. package/dist/extensions/slack-communication/tools/delete-message.js +29 -0
  396. package/dist/extensions/slack-communication/tools/edit-message.d.ts +4 -0
  397. package/dist/extensions/slack-communication/tools/edit-message.d.ts.map +1 -0
  398. package/dist/extensions/slack-communication/tools/edit-message.js +37 -0
  399. package/dist/extensions/slack-communication/tools/post-card.d.ts +4 -0
  400. package/dist/extensions/slack-communication/tools/post-card.d.ts.map +1 -0
  401. package/dist/extensions/slack-communication/tools/post-card.js +25 -0
  402. package/dist/extensions/slack-communication/tools/post-file.d.ts +4 -0
  403. package/dist/extensions/slack-communication/tools/post-file.d.ts.map +1 -0
  404. package/dist/extensions/slack-communication/tools/post-file.js +76 -0
  405. package/dist/extensions/slack-communication/tools/post-update.d.ts +4 -0
  406. package/dist/extensions/slack-communication/tools/post-update.d.ts.map +1 -0
  407. package/dist/extensions/slack-communication/tools/post-update.js +36 -0
  408. package/dist/extensions/slack-communication/tools/react.d.ts +4 -0
  409. package/dist/extensions/slack-communication/tools/react.d.ts.map +1 -0
  410. package/dist/extensions/slack-communication/tools/react.js +27 -0
  411. package/dist/extensions/slack-communication/tools/set-status.d.ts +4 -0
  412. package/dist/extensions/slack-communication/tools/set-status.d.ts.map +1 -0
  413. package/dist/extensions/slack-communication/tools/set-status.js +18 -0
  414. package/dist/files-backends/cursor-hosted.d.ts +18 -6
  415. package/dist/files-backends/cursor-hosted.d.ts.map +1 -1
  416. package/dist/files-backends/cursor-hosted.js +357 -74
  417. package/dist/files-backends/local-fs.js +1 -1
  418. package/dist/files.d.ts +15 -0
  419. package/dist/files.d.ts.map +1 -1
  420. package/dist/filesystem.d.ts +46 -2
  421. package/dist/filesystem.d.ts.map +1 -1
  422. package/dist/filesystem.js +160 -113
  423. package/dist/index.d.ts +7 -10
  424. package/dist/index.d.ts.map +1 -1
  425. package/dist/index.js +5 -7
  426. package/dist/internal/advertise-tools.js +6 -6
  427. package/dist/internal/approval-gate.js +1 -1
  428. package/dist/internal/artifacts-store.js +3 -3
  429. package/dist/internal/as-of.js +2 -2
  430. package/dist/internal/authored-alias-hooks.js +1 -1
  431. package/dist/internal/builtin-tools/reminders.js +2 -2
  432. package/dist/internal/chat-client.js +5 -5
  433. package/dist/internal/cli-ax.d.ts +7 -0
  434. package/dist/internal/cli-ax.d.ts.map +1 -1
  435. package/dist/internal/cli-ax.js +140 -27
  436. package/dist/internal/cli-bitbucket.js +10 -10
  437. package/dist/internal/cli-convert-automation.js +2 -2
  438. package/dist/internal/cli-cursor.d.ts +3 -11
  439. package/dist/internal/cli-cursor.d.ts.map +1 -1
  440. package/dist/internal/cli-cursor.js +5 -10
  441. package/dist/internal/cli-deploy.d.ts +12 -2
  442. package/dist/internal/cli-deploy.d.ts.map +1 -1
  443. package/dist/internal/cli-deploy.js +328 -96
  444. package/dist/internal/cli-docs.js +5 -5
  445. package/dist/internal/cli-github.js +15 -16
  446. package/dist/internal/cli-gitlab.js +10 -10
  447. package/dist/internal/cli-manifest.js +1 -1
  448. package/dist/internal/cli-mcp-oauth.d.ts.map +1 -1
  449. package/dist/internal/cli-mcp-oauth.js +5 -5
  450. package/dist/internal/cli-mcp.js +3 -3
  451. package/dist/internal/cli-skills.js +2 -2
  452. package/dist/internal/cli-slack.js +5 -5
  453. package/dist/internal/cloud-turn-cost.js +1 -1
  454. package/dist/internal/continuation-identity.d.ts.map +1 -1
  455. package/dist/internal/continuation-identity.js +15 -9
  456. package/dist/internal/conversation-mirror.d.ts.map +1 -1
  457. package/dist/internal/conversation-mirror.js +33 -2
  458. package/dist/internal/convert-automation/convert-workflow.js +25 -24
  459. package/dist/internal/convert-automation/types.d.ts +8 -0
  460. package/dist/internal/convert-automation/types.d.ts.map +1 -1
  461. package/dist/internal/cursor/account-mcp.d.ts +2 -2
  462. package/dist/internal/cursor/account-mcp.d.ts.map +1 -1
  463. package/dist/internal/cursor/account-mcp.js +32 -27
  464. package/dist/internal/cursor/backend-client.d.ts +15 -10
  465. package/dist/internal/cursor/backend-client.d.ts.map +1 -1
  466. package/dist/internal/cursor/backend-client.js +17 -11
  467. package/dist/internal/cursor/credentials.js +1 -1
  468. package/dist/internal/cursor/hosted-store-secrets.d.ts +16 -0
  469. package/dist/internal/cursor/hosted-store-secrets.d.ts.map +1 -1
  470. package/dist/internal/cursor/hosted-store-secrets.js +25 -0
  471. package/dist/internal/cursor-account-mcp-auth.js +9 -9
  472. package/dist/internal/cursor-agent-template.d.ts +1 -1
  473. package/dist/internal/cursor-agent-template.d.ts.map +1 -1
  474. package/dist/internal/cursor-agent-template.js +2 -0
  475. package/dist/internal/cursor-deployment-relay.js +9 -9
  476. package/dist/internal/cursor-event-relay.js +10 -10
  477. package/dist/internal/cursor-relay-core.js +2 -2
  478. package/dist/internal/deploy-client.d.ts +106 -9
  479. package/dist/internal/deploy-client.d.ts.map +1 -1
  480. package/dist/internal/deploy-client.js +171 -23
  481. package/dist/internal/deploy-manifest.d.ts +13 -0
  482. package/dist/internal/deploy-manifest.d.ts.map +1 -1
  483. package/dist/internal/deploy-manifest.js +32 -16
  484. package/dist/internal/discovery/agent-config.d.ts +5 -0
  485. package/dist/internal/discovery/agent-config.d.ts.map +1 -1
  486. package/dist/internal/discovery/agent-config.js +27 -0
  487. package/dist/internal/discovery/agent.d.ts.map +1 -1
  488. package/dist/internal/discovery/agent.js +10 -8
  489. package/dist/internal/discovery/channels.js +4 -4
  490. package/dist/internal/discovery/connections.js +4 -4
  491. package/dist/internal/discovery/cursor-plugin.js +12 -12
  492. package/dist/internal/discovery/extension-overlay.js +3 -3
  493. package/dist/internal/discovery/extensions.js +6 -6
  494. package/dist/internal/discovery/info.js +9 -9
  495. package/dist/internal/discovery/instructions.js +1 -1
  496. package/dist/internal/discovery/project.d.ts.map +1 -1
  497. package/dist/internal/discovery/project.js +4 -4
  498. package/dist/internal/discovery/services.js +1 -1
  499. package/dist/internal/discovery/tools.js +1 -1
  500. package/dist/internal/docs-site.js +2 -2
  501. package/dist/internal/env-file.js +1 -1
  502. package/dist/internal/eval-run-store.d.ts.map +1 -1
  503. package/dist/internal/eval-run-store.js +7 -7
  504. package/dist/internal/eval-runner.js +14 -14
  505. package/dist/internal/evals-client.js +4 -4
  506. package/dist/internal/event-log.js +8 -8
  507. package/dist/internal/event-mapper.d.ts +18 -0
  508. package/dist/internal/event-mapper.d.ts.map +1 -1
  509. package/dist/internal/event-mapper.js +34 -2
  510. package/dist/internal/filesystem/format.d.ts.map +1 -1
  511. package/dist/internal/filesystem/format.js +6 -3
  512. package/dist/internal/filesystem/scratch.js +3 -3
  513. package/dist/internal/filesystem/tools.d.ts.map +1 -1
  514. package/dist/internal/filesystem/tools.js +7 -7
  515. package/dist/internal/filesystem/walk.d.ts +7 -4
  516. package/dist/internal/filesystem/walk.d.ts.map +1 -1
  517. package/dist/internal/filesystem/walk.js +35 -12
  518. package/dist/internal/framework-file-storage.d.ts +6 -2
  519. package/dist/internal/framework-file-storage.d.ts.map +1 -1
  520. package/dist/internal/framework-file-storage.js +91 -2
  521. package/dist/internal/framework-storage-selection.d.ts +0 -6
  522. package/dist/internal/framework-storage-selection.d.ts.map +1 -1
  523. package/dist/internal/framework-storage-selection.js +2 -11
  524. package/dist/internal/github-fanout.js +3 -3
  525. package/dist/internal/guest-network.js +4 -4
  526. package/dist/internal/host-files.js +1 -1
  527. package/dist/internal/host-kv.js +2 -2
  528. package/dist/internal/hosted-admission-adapter.d.ts +5 -0
  529. package/dist/internal/hosted-admission-adapter.d.ts.map +1 -1
  530. package/dist/internal/hosted-catch-protocol.d.ts.map +1 -1
  531. package/dist/internal/hosted-catch-protocol.js +2 -4
  532. package/dist/internal/hosted-catch.js +1 -1
  533. package/dist/internal/hosted-delivery-protocol.d.ts +46 -0
  534. package/dist/internal/hosted-delivery-protocol.d.ts.map +1 -1
  535. package/dist/internal/hosted-delivery-protocol.js +126 -9
  536. package/dist/internal/hosted-delivery.d.ts.map +1 -1
  537. package/dist/internal/hosted-delivery.js +209 -64
  538. package/dist/internal/hosted-execution-diag.js +3 -3
  539. package/dist/internal/hosted-execution-latency.d.ts +80 -0
  540. package/dist/internal/hosted-execution-latency.d.ts.map +1 -0
  541. package/dist/internal/hosted-execution-latency.js +220 -0
  542. package/dist/internal/hosting.d.ts +5 -5
  543. package/dist/internal/hosting.d.ts.map +1 -1
  544. package/dist/internal/hosting.js +5 -6
  545. package/dist/internal/http-channel-define.d.ts +11 -0
  546. package/dist/internal/http-channel-define.d.ts.map +1 -0
  547. package/dist/internal/http-channel-define.js +18 -0
  548. package/dist/internal/http-channel.d.ts +2 -3
  549. package/dist/internal/http-channel.d.ts.map +1 -1
  550. package/dist/internal/http-channel.js +3 -4
  551. package/dist/internal/http-control-plane-session.d.ts +7 -3
  552. package/dist/internal/http-control-plane-session.d.ts.map +1 -1
  553. package/dist/internal/http-control-plane-session.js +22 -10
  554. package/dist/internal/incoming-headers-to-fetch.d.ts +10 -0
  555. package/dist/internal/incoming-headers-to-fetch.d.ts.map +1 -0
  556. package/dist/internal/incoming-headers-to-fetch.js +41 -0
  557. package/dist/internal/init-interview.js +7 -7
  558. package/dist/internal/init-project.d.ts.map +1 -1
  559. package/dist/internal/init-project.js +18 -14
  560. package/dist/internal/init-scaffold.js +1 -1
  561. package/dist/internal/inline-stdio-mcp.js +2 -2
  562. package/dist/internal/install-cursor-skills.js +10 -10
  563. package/dist/internal/json-schema.js +1 -1
  564. package/dist/internal/local-control-plane.d.ts.map +1 -1
  565. package/dist/internal/local-control-plane.js +3 -3
  566. package/dist/internal/local-env.js +3 -3
  567. package/dist/internal/log-ring.js +1 -1
  568. package/dist/internal/logs-client.js +1 -1
  569. package/dist/internal/mcp-endpoint.js +8 -8
  570. package/dist/internal/mcp-host.js +4 -4
  571. package/dist/internal/mcp-oauth-on-demand.js +3 -3
  572. package/dist/internal/mcp-oauth.js +5 -5
  573. package/dist/internal/net.js +2 -2
  574. package/dist/internal/otel/config.js +3 -3
  575. package/dist/internal/otel/runtime.js +13 -13
  576. package/dist/internal/peer-connections.js +2 -2
  577. package/dist/internal/platform-schedule-sync.js +1 -1
  578. package/dist/internal/platform-timers.js +1 -1
  579. package/dist/internal/playground/static.js +2 -2
  580. package/dist/internal/playground/toolchain.js +2 -2
  581. package/dist/internal/playground-proxy.js +3 -3
  582. package/dist/internal/process-memory-telemetry.js +1 -1
  583. package/dist/internal/reminder-runner.d.ts.map +1 -1
  584. package/dist/internal/reminder-runner.js +7 -7
  585. package/dist/internal/reminder-store.js +1 -1
  586. package/dist/internal/request-error-status.d.ts.map +1 -1
  587. package/dist/internal/request-error-status.js +9 -0
  588. package/dist/internal/resolved-connections.js +8 -8
  589. package/dist/internal/result-output.d.ts +14 -2
  590. package/dist/internal/result-output.d.ts.map +1 -1
  591. package/dist/internal/result-output.js +45 -2
  592. package/dist/internal/router.js +4 -4
  593. package/dist/internal/run-client.js +2 -2
  594. package/dist/internal/schedule-runner.js +6 -6
  595. package/dist/internal/scm/pr-url.d.ts +3 -1
  596. package/dist/internal/scm/pr-url.d.ts.map +1 -1
  597. package/dist/internal/scm/pr-url.js +10 -2
  598. package/dist/internal/sdk-runner.d.ts.map +1 -1
  599. package/dist/internal/sdk-runner.js +14 -15
  600. package/dist/internal/serve-restart.js +1 -1
  601. package/dist/internal/server.d.ts.map +1 -1
  602. package/dist/internal/server.js +175 -126
  603. package/dist/internal/session-cost.js +3 -3
  604. package/dist/internal/session-engine.d.ts +34 -0
  605. package/dist/internal/session-engine.d.ts.map +1 -1
  606. package/dist/internal/session-engine.js +386 -184
  607. package/dist/internal/session-run-log.d.ts.map +1 -1
  608. package/dist/internal/session-run-log.js +4 -4
  609. package/dist/internal/session-store.d.ts +47 -3
  610. package/dist/internal/session-store.d.ts.map +1 -1
  611. package/dist/internal/session-store.js +198 -33
  612. package/dist/internal/sessions-client.js +3 -3
  613. package/dist/internal/skill-catalog.d.ts +28 -0
  614. package/dist/internal/skill-catalog.d.ts.map +1 -0
  615. package/dist/internal/skill-catalog.js +44 -0
  616. package/dist/internal/slack-thread-key.d.ts +7 -0
  617. package/dist/internal/slack-thread-key.d.ts.map +1 -0
  618. package/dist/internal/slack-thread-key.js +10 -0
  619. package/dist/internal/sleep.js +1 -1
  620. package/dist/internal/storage-coordinator.d.ts +17 -0
  621. package/dist/internal/storage-coordinator.d.ts.map +1 -1
  622. package/dist/internal/storage-coordinator.js +111 -11
  623. package/dist/internal/storage.d.ts +2 -0
  624. package/dist/internal/storage.d.ts.map +1 -0
  625. package/dist/internal/storage.js +1 -0
  626. package/dist/internal/store-mirror.js +4 -4
  627. package/dist/internal/terminal-style.js +2 -2
  628. package/dist/internal/tool-result.js +3 -3
  629. package/dist/internal/trajectory.js +7 -7
  630. package/dist/internal/turn-governor.js +2 -2
  631. package/dist/internal/turn-outbox.js +1 -1
  632. package/dist/internal/update-check.js +2 -2
  633. package/dist/internal/v2-hosting.d.ts +9 -0
  634. package/dist/internal/v2-hosting.d.ts.map +1 -1
  635. package/dist/internal/v2-hosting.js +10 -0
  636. package/dist/internal/workspace.d.ts +13 -10
  637. package/dist/internal/workspace.d.ts.map +1 -1
  638. package/dist/internal/workspace.js +17 -16
  639. package/dist/kv/memory-kv.d.ts +6 -4
  640. package/dist/kv/memory-kv.d.ts.map +1 -1
  641. package/dist/kv/memory-kv.js +9 -7
  642. package/dist/kv.d.ts +4 -7
  643. package/dist/kv.d.ts.map +1 -1
  644. package/dist/kv.js +4 -7
  645. package/dist/otel-public.d.ts +7 -0
  646. package/dist/otel-public.d.ts.map +1 -0
  647. package/dist/otel-public.js +5 -0
  648. package/dist/otel.d.ts +7 -2
  649. package/dist/otel.d.ts.map +1 -1
  650. package/dist/otel.js +7 -2
  651. package/dist/playground/assets/index-B1c1LeIf.js +67 -0
  652. package/dist/playground/assets/index-CK2LX3iD.css +1 -0
  653. package/dist/playground/index.html +2 -2
  654. package/dist/prompt.js +1 -1
  655. package/dist/result.d.ts +10 -4
  656. package/dist/result.d.ts.map +1 -1
  657. package/dist/result.js +9 -3
  658. package/dist/storage-backends/cursor-hosted-v2.js +2 -2
  659. package/dist/storage-backends/cursor-hosted.d.ts +5 -17
  660. package/dist/storage-backends/cursor-hosted.d.ts.map +1 -1
  661. package/dist/storage-backends/cursor-hosted.js +6 -20
  662. package/dist/storage-backends/file-kv.js +7 -7
  663. package/dist/storage.d.ts +20 -2
  664. package/dist/storage.d.ts.map +1 -1
  665. package/dist/storage.js +7 -6
  666. package/dist/types.d.ts +76 -11
  667. package/dist/types.d.ts.map +1 -1
  668. package/dist/types.js +12 -4
  669. package/docs/README.md +85 -152
  670. package/docs/building-with-agents.md +96 -86
  671. package/docs/deployment.md +118 -365
  672. package/docs/evals.md +147 -674
  673. package/docs/guides/agent-to-agent.md +126 -92
  674. package/docs/guides/bitbucket.md +250 -49
  675. package/docs/guides/cloud-agents.md +124 -67
  676. package/docs/guides/convert-automation.md +157 -148
  677. package/docs/guides/github.md +261 -246
  678. package/docs/guides/gitlab.md +250 -51
  679. package/docs/guides/grokbot-agents.md +117 -64
  680. package/docs/guides/improve.md +112 -59
  681. package/docs/guides/mcp-oauth.md +112 -122
  682. package/docs/guides/opentelemetry.md +106 -188
  683. package/docs/guides/slack.md +171 -192
  684. package/docs/guides/webhooks.md +155 -387
  685. package/docs/hillclimbing.md +102 -56
  686. package/docs/quickstart.md +45 -106
  687. package/docs/reference/channels.md +0 -16
  688. package/docs/reference/cli.md +2 -16
  689. package/docs/reference/connections.md +3 -5
  690. package/docs/reference/evals.md +298 -0
  691. package/docs/reference/extensions.md +128 -200
  692. package/docs/reference/hooks.md +34 -36
  693. package/docs/reference/http-api.md +5 -5
  694. package/docs/reference/playground.md +2 -2
  695. package/docs/reference/project-layout.md +3 -4
  696. package/docs/reference/sessions.md +5 -4
  697. package/docs/reference/subagents.md +2 -4
  698. package/docs/reference/tools.md +2 -5
  699. package/docs/templates/thermo-quality-review.md +80 -0
  700. package/docs/templates/thermo-review.md +79 -0
  701. package/docs/troubleshooting.md +98 -68
  702. package/package.json +55 -37
  703. package/skills/framework-map/SKILL.md +2 -2
  704. package/skills/github/SKILL.md +21 -13
  705. package/skills/otel/SKILL.md +8 -18
  706. package/src/bin/agent-serve.ts +115 -72
  707. package/src/channels/bitbucket/api.ts +8 -8
  708. package/src/channels/bitbucket/binding.ts +4 -4
  709. package/src/channels/bitbucket/bitbucket-channel.ts +1 -1
  710. package/src/channels/bitbucket/bitbucket-webhook.ts +1 -1
  711. package/src/channels/bitbucket/checks.ts +3 -4
  712. package/src/channels/bitbucket/cursor-account.ts +1 -1
  713. package/src/channels/bitbucket/events.ts +1 -1
  714. package/src/channels/change-monitors/change-monitors-channel.ts +2 -2
  715. package/src/channels/checks.ts +5 -4
  716. package/src/channels/deployments/deployments-channel.ts +1 -1
  717. package/src/channels/github/api.ts +1 -1
  718. package/src/channels/github/checks.ts +1 -1
  719. package/src/channels/github/cursor-account.ts +3 -3
  720. package/src/channels/github/defaults.ts +8 -4
  721. package/src/channels/github/events.ts +1 -1
  722. package/src/channels/github/forward.ts +8 -8
  723. package/src/channels/github/github-channel.ts +48 -21
  724. package/src/channels/github/progress.ts +7 -2
  725. package/src/channels/github/state.ts +6 -0
  726. package/src/channels/github/types.ts +6 -0
  727. package/src/channels/gitlab/binding.ts +4 -4
  728. package/src/channels/gitlab/checks.ts +3 -4
  729. package/src/channels/gitlab/cursor-account.ts +1 -1
  730. package/src/channels/gitlab/events.ts +1 -1
  731. package/src/channels/gitlab/gitlab-channel.ts +1 -1
  732. package/src/channels/gitlab/gitlab-webhook.ts +1 -1
  733. package/src/channels/gitlab/replay.ts +2 -2
  734. package/src/channels/origin/binding.ts +6 -3
  735. package/src/channels/origin/checks.ts +27 -17
  736. package/src/channels/origin/cursor-account.ts +1 -1
  737. package/src/channels/origin/defaults.ts +5 -1
  738. package/src/channels/origin/events.ts +1 -1
  739. package/src/channels/origin/origin-channel.ts +2 -1
  740. package/src/channels/origin/origin-webhook.ts +2 -2
  741. package/src/channels/slack/agentic-delivery.ts +661 -0
  742. package/src/channels/slack/agentic-posted.ts +148 -0
  743. package/src/channels/slack/agentic-signals.ts +248 -0
  744. package/src/channels/slack/api.ts +51 -11
  745. package/src/channels/slack/approvals.ts +1 -1
  746. package/src/channels/slack/attachments.ts +1 -1
  747. package/src/channels/slack/auth.ts +3 -1
  748. package/src/channels/slack/blocks.ts +3 -3
  749. package/src/channels/slack/bot-mentions.ts +5 -7
  750. package/src/channels/slack/channel-watch.ts +1 -1
  751. package/src/channels/slack/cli-project.ts +3 -3
  752. package/src/channels/slack/defaults.ts +109 -37
  753. package/src/channels/slack/dispatch.ts +419 -168
  754. package/src/channels/slack/doctor.ts +1 -1
  755. package/src/channels/slack/eval-directive.ts +1 -1
  756. package/src/channels/slack/external-policy.ts +15 -2
  757. package/src/channels/slack/footer.ts +108 -0
  758. package/src/channels/slack/index.ts +2 -0
  759. package/src/channels/slack/interactive.ts +4 -2
  760. package/src/channels/slack/live-delivery.ts +23 -7
  761. package/src/channels/slack/log.ts +1 -1
  762. package/src/channels/slack/manifest.ts +1 -1
  763. package/src/channels/slack/nudge-carrier.ts +1 -1
  764. package/src/channels/slack/nudge-store.ts +2 -2
  765. package/src/channels/slack/paint-start.ts +93 -0
  766. package/src/channels/slack/placeholder.ts +366 -0
  767. package/src/channels/slack/progress-delivery.ts +14 -1
  768. package/src/channels/slack/reasoning-chip.ts +48 -0
  769. package/src/channels/slack/recording-sink.ts +176 -0
  770. package/src/channels/slack/reply-options.ts +71 -15
  771. package/src/channels/slack/setup.ts +1 -1
  772. package/src/channels/slack/slack-channel.ts +81 -14
  773. package/src/channels/slack/socket-mode.ts +2 -2
  774. package/src/channels/slack/thread-context.ts +5 -5
  775. package/src/channels/slack/tool-approval-events.ts +54 -38
  776. package/src/channels/slack/tool-cards.ts +1 -1
  777. package/src/channels/slack/tool-chip.ts +36 -0
  778. package/src/channels/slack/types.ts +47 -7
  779. package/src/channels/slack/upload.ts +142 -0
  780. package/src/channels.ts +12 -30
  781. package/src/dashboard-session-url.ts +32 -0
  782. package/src/evals/assertions.ts +19 -19
  783. package/src/evals/expect.ts +1 -1
  784. package/src/evals/judge.ts +1 -1
  785. package/src/evals/reporters.ts +8 -9
  786. package/src/evals/run-facts.ts +2 -2
  787. package/src/evals.ts +7 -10
  788. package/src/extensions/cursor-cloud-agents/extension.ts +1 -1
  789. package/src/extensions/cursor-cloud-agents/lib/backend.ts +3 -3
  790. package/src/extensions/cursor-cloud-agents/lib/fleet.ts +1 -1
  791. package/src/extensions/cursor-cloud-agents/lib/repos.ts +3 -3
  792. package/src/extensions/cursor-cloud-agents/lib/transcript.ts +3 -4
  793. package/src/extensions/cursor-cloud-agents/skills/handoff.md +3 -7
  794. package/src/extensions/cursor-cloud-agents/tools/list.ts +1 -1
  795. package/src/extensions/improve/extension.ts +4 -2
  796. package/src/extensions/improve/skills/yourself.ts +2 -2
  797. package/src/extensions/slack-communication/evals/harness.ts +728 -0
  798. package/src/extensions/slack-communication/evals/slack-communication.eval.ts +953 -0
  799. package/src/extensions/slack-communication/evals/slack-placeholder.eval.ts +194 -0
  800. package/src/extensions/slack-communication/extension.ts +45 -0
  801. package/src/extensions/slack-communication/skills/slack-voice.ts +59 -0
  802. package/src/extensions/slack-communication/tools/delete-message.ts +34 -0
  803. package/src/extensions/slack-communication/tools/edit-message.ts +42 -0
  804. package/src/extensions/slack-communication/tools/post-card.ts +28 -0
  805. package/src/extensions/slack-communication/tools/post-file.ts +85 -0
  806. package/src/extensions/slack-communication/tools/post-update.ts +41 -0
  807. package/src/extensions/slack-communication/tools/react.ts +33 -0
  808. package/src/extensions/slack-communication/tools/set-status.ts +21 -0
  809. package/src/files-backends/cursor-hosted.ts +502 -98
  810. package/src/files-backends/local-fs.ts +1 -1
  811. package/src/files.ts +15 -0
  812. package/src/filesystem.ts +182 -81
  813. package/src/index.ts +7 -36
  814. package/src/internal/advertise-tools.ts +6 -6
  815. package/src/internal/approval-gate.ts +1 -1
  816. package/src/internal/artifacts-store.ts +3 -3
  817. package/src/internal/as-of.ts +2 -2
  818. package/src/internal/authored-alias-hooks.ts +1 -1
  819. package/src/internal/authored-loaders.ts +2 -3
  820. package/src/internal/builtin-tools/reminders.ts +2 -2
  821. package/src/internal/chat-client.ts +5 -5
  822. package/src/internal/cli-ax.ts +172 -29
  823. package/src/internal/cli-bitbucket.ts +11 -11
  824. package/src/internal/cli-convert-automation.ts +2 -2
  825. package/src/internal/cli-cursor.ts +5 -16
  826. package/src/internal/cli-deploy.ts +389 -104
  827. package/src/internal/cli-docs.ts +5 -5
  828. package/src/internal/cli-github.ts +16 -19
  829. package/src/internal/cli-gitlab.ts +11 -11
  830. package/src/internal/cli-manifest.ts +1 -1
  831. package/src/internal/cli-mcp-oauth.ts +5 -7
  832. package/src/internal/cli-mcp.ts +3 -3
  833. package/src/internal/cli-skills.ts +2 -2
  834. package/src/internal/cli-slack.ts +5 -5
  835. package/src/internal/cloud-turn-cost.ts +1 -1
  836. package/src/internal/continuation-identity.ts +14 -9
  837. package/src/internal/conversation-mirror.ts +36 -3
  838. package/src/internal/convert-automation/convert-workflow.ts +27 -27
  839. package/src/internal/convert-automation/types.ts +9 -0
  840. package/src/internal/cursor/account-mcp.ts +48 -31
  841. package/src/internal/cursor/backend-client.ts +28 -17
  842. package/src/internal/cursor/credentials.ts +1 -1
  843. package/src/internal/cursor/hosted-store-secrets.ts +34 -0
  844. package/src/internal/cursor-account-mcp-auth.ts +9 -9
  845. package/src/internal/cursor-agent-template.ts +2 -0
  846. package/src/internal/cursor-deployment-relay.ts +10 -10
  847. package/src/internal/cursor-event-relay.ts +10 -10
  848. package/src/internal/cursor-relay-core.ts +2 -2
  849. package/src/internal/deploy-client.ts +266 -24
  850. package/src/internal/deploy-manifest.ts +46 -8
  851. package/src/internal/discovery/agent-config.ts +34 -0
  852. package/src/internal/discovery/agent.ts +14 -6
  853. package/src/internal/discovery/channels.ts +4 -4
  854. package/src/internal/discovery/connections.ts +4 -4
  855. package/src/internal/discovery/cursor-plugin.ts +12 -12
  856. package/src/internal/discovery/extension-overlay.ts +3 -3
  857. package/src/internal/discovery/extensions.ts +6 -6
  858. package/src/internal/discovery/info.ts +9 -9
  859. package/src/internal/discovery/instructions.ts +1 -1
  860. package/src/internal/discovery/project.ts +4 -4
  861. package/src/internal/discovery/services.ts +1 -1
  862. package/src/internal/discovery/tools.ts +1 -1
  863. package/src/internal/docs-site.ts +2 -2
  864. package/src/internal/env-file.ts +2 -2
  865. package/src/internal/eval-run-store.ts +7 -9
  866. package/src/internal/eval-runner.ts +20 -20
  867. package/src/internal/evals-client.ts +6 -6
  868. package/src/internal/event-log.ts +10 -10
  869. package/src/internal/event-mapper.ts +37 -2
  870. package/src/internal/filesystem/format.ts +11 -12
  871. package/src/internal/filesystem/scratch.ts +3 -3
  872. package/src/internal/filesystem/tools.ts +8 -8
  873. package/src/internal/filesystem/walk.ts +61 -16
  874. package/src/internal/framework-file-storage.ts +104 -4
  875. package/src/internal/framework-storage-selection.ts +2 -12
  876. package/src/internal/github-fanout.ts +4 -4
  877. package/src/internal/guest-network.ts +4 -4
  878. package/src/internal/host-files.ts +1 -1
  879. package/src/internal/host-kv.ts +2 -2
  880. package/src/internal/hosted-admission-adapter.ts +5 -0
  881. package/src/internal/hosted-catch-protocol.ts +3 -5
  882. package/src/internal/hosted-catch.ts +1 -1
  883. package/src/internal/hosted-delivery-protocol.ts +189 -14
  884. package/src/internal/hosted-delivery.ts +294 -81
  885. package/src/internal/hosted-execution-diag.ts +3 -3
  886. package/src/internal/hosted-execution-latency.ts +334 -0
  887. package/src/internal/hosting.ts +5 -6
  888. package/src/internal/http-channel-define.ts +27 -0
  889. package/src/internal/http-channel.ts +3 -4
  890. package/src/internal/http-control-plane-session.ts +24 -11
  891. package/src/internal/incoming-headers-to-fetch.ts +54 -0
  892. package/src/internal/init-interview.ts +7 -7
  893. package/src/internal/init-project.ts +18 -16
  894. package/src/internal/init-scaffold.ts +1 -1
  895. package/src/internal/inline-stdio-mcp.ts +2 -2
  896. package/src/internal/install-cursor-skills.ts +11 -11
  897. package/src/internal/json-schema.ts +1 -1
  898. package/src/internal/local-control-plane.ts +4 -5
  899. package/src/internal/local-env.ts +3 -3
  900. package/src/internal/log-ring.ts +1 -1
  901. package/src/internal/logs-client.ts +1 -1
  902. package/src/internal/mcp-endpoint.ts +10 -10
  903. package/src/internal/mcp-host.ts +9 -9
  904. package/src/internal/mcp-oauth-on-demand.ts +3 -3
  905. package/src/internal/mcp-oauth.ts +5 -5
  906. package/src/internal/net.ts +2 -2
  907. package/src/internal/otel/config.ts +3 -3
  908. package/src/internal/otel/runtime.ts +14 -14
  909. package/src/internal/peer-connections.ts +2 -2
  910. package/src/internal/platform-schedule-sync.ts +1 -1
  911. package/src/internal/platform-timers.ts +1 -1
  912. package/src/internal/playground/static.ts +2 -2
  913. package/src/internal/playground/toolchain.ts +2 -2
  914. package/src/internal/playground-proxy.ts +3 -3
  915. package/src/internal/process-memory-telemetry.ts +1 -1
  916. package/src/internal/reminder-runner.ts +8 -10
  917. package/src/internal/reminder-store.ts +1 -1
  918. package/src/internal/request-error-status.ts +9 -0
  919. package/src/internal/resolved-connections.ts +8 -8
  920. package/src/internal/result-output.ts +62 -5
  921. package/src/internal/router.ts +4 -4
  922. package/src/internal/run-client.ts +2 -2
  923. package/src/internal/schedule-runner.ts +6 -6
  924. package/src/internal/scm/pr-url.ts +11 -2
  925. package/src/internal/sdk-runner.ts +14 -28
  926. package/src/internal/serve-restart.ts +1 -1
  927. package/src/internal/server.ts +201 -140
  928. package/src/internal/session-cost.ts +3 -3
  929. package/src/internal/session-engine.ts +516 -244
  930. package/src/internal/session-run-log.ts +4 -6
  931. package/src/internal/session-store.ts +213 -39
  932. package/src/internal/sessions-client.ts +3 -3
  933. package/src/internal/skill-catalog.ts +69 -0
  934. package/src/internal/slack-thread-key.ts +11 -0
  935. package/src/internal/sleep.ts +1 -1
  936. package/src/internal/storage-coordinator.ts +118 -21
  937. package/src/internal/storage.ts +1 -0
  938. package/src/internal/store-mirror.ts +4 -4
  939. package/src/internal/terminal-style.ts +2 -2
  940. package/src/internal/tool-result.ts +3 -3
  941. package/src/internal/trajectory.ts +7 -7
  942. package/src/internal/turn-governor.ts +2 -2
  943. package/src/internal/turn-outbox.ts +1 -1
  944. package/src/internal/update-check.ts +2 -2
  945. package/src/internal/v2-hosting.ts +14 -0
  946. package/src/internal/workspace.ts +17 -17
  947. package/src/kv/memory-kv.ts +9 -7
  948. package/src/kv.ts +4 -7
  949. package/src/otel-public.ts +24 -0
  950. package/src/otel.ts +7 -2
  951. package/src/prompt.ts +1 -1
  952. package/src/result.ts +10 -8
  953. package/src/storage-backends/cursor-hosted-v2.ts +2 -2
  954. package/src/storage-backends/cursor-hosted.ts +6 -23
  955. package/src/storage-backends/file-kv.ts +7 -7
  956. package/src/storage.ts +22 -7
  957. package/src/types.ts +91 -17
  958. package/templates/agentic-owners/agent/channels/github.ts +3 -6
  959. package/templates/agentic-owners/agent/lib/github.ts +5 -5
  960. package/templates/agentic-owners/agent/lib/owners/decision.ts +13 -10
  961. package/templates/agentic-owners/agent/lib/owners/handles.ts +2 -2
  962. package/templates/agentic-owners/agent/lib/owners/match.ts +3 -3
  963. package/templates/agentic-owners/agent/lib/owners/matching.ts +1 -1
  964. package/templates/agentic-owners/agent/lib/owners/parse.ts +4 -9
  965. package/templates/agentic-owners/agent/lib/owners/prompt.ts +1 -1
  966. package/templates/agentic-owners/agent/lib/review.ts +37 -30
  967. package/templates/agentic-owners/evals/owners.eval.ts +2 -2
  968. package/templates/agentic-owners/package.json +1 -1
  969. package/templates/agents-md/agent/lib/collect.ts +16 -10
  970. package/templates/agents-md/agent/lib/config.ts +1 -1
  971. package/templates/agents-md/agent/tools/apply_agents.ts +10 -8
  972. package/templates/agents-md/package.json +1 -1
  973. package/templates/code-wiki/agent/channels/github.ts +4 -7
  974. package/templates/code-wiki/agent/lib/repos.ts +1 -1
  975. package/templates/code-wiki/agent/tools/apply_wiki.ts +3 -4
  976. package/templates/code-wiki/package.json +1 -1
  977. package/templates/demo/agent/lib/collect.ts +6 -2
  978. package/templates/demo/agent/lib/repos.ts +1 -1
  979. package/templates/demo/agent/tools/record_demo.ts +1 -1
  980. package/templates/demo/evals/demo.eval.ts +1 -5
  981. package/templates/demo/package.json +1 -1
  982. package/templates/grokbot-agents/package.json +1 -1
  983. package/templates/pr-autofixer/agent/channels/github.ts +16 -13
  984. package/templates/pr-autofixer/agent/lib/merge-watch.ts +2 -4
  985. package/templates/pr-autofixer/agent/lib/repos.ts +2 -2
  986. package/templates/pr-autofixer/agent/lib/webhook-routing.ts +1 -1
  987. package/templates/pr-autofixer/package.json +1 -1
  988. package/templates/security-help/agent/lib/repos.ts +1 -1
  989. package/templates/security-help/package.json +1 -1
  990. package/templates/security-reviewer/agent/lib/repos.ts +1 -1
  991. package/templates/security-reviewer/agent/tools/post_findings.ts +1 -3
  992. package/templates/security-reviewer/package.json +1 -1
  993. package/templates/thermo-quality-review/README.md +35 -0
  994. package/templates/thermo-quality-review/agent/agent.ts +8 -0
  995. package/templates/thermo-quality-review/agent/channels/github.ts +42 -0
  996. package/templates/thermo-quality-review/agent/instructions.md +43 -0
  997. package/templates/thermo-quality-review/agent/tools/post_findings.ts +70 -0
  998. package/templates/thermo-quality-review/evals/evals.config.ts +5 -0
  999. package/templates/thermo-quality-review/evals/review.eval.ts +62 -0
  1000. package/templates/thermo-quality-review/package.json +18 -0
  1001. package/templates/thermo-quality-review/tsconfig.json +12 -0
  1002. package/templates/thermo-review/README.md +35 -0
  1003. package/templates/thermo-review/agent/agent.ts +8 -0
  1004. package/templates/thermo-review/agent/channels/github.ts +42 -0
  1005. package/templates/thermo-review/agent/instructions.md +40 -0
  1006. package/templates/thermo-review/agent/tools/post_findings.ts +70 -0
  1007. package/templates/thermo-review/evals/evals.config.ts +5 -0
  1008. package/templates/thermo-review/evals/review.eval.ts +53 -0
  1009. package/templates/thermo-review/package.json +18 -0
  1010. package/templates/thermo-review/tsconfig.json +12 -0
  1011. package/templates/triage/agent/lib/actuate.ts +26 -41
  1012. package/templates/triage/agent/lib/parse-queue-event.ts +2 -1
  1013. package/templates/triage/agent/lib/verify-webhook.ts +10 -5
  1014. package/templates/triage/agent/tools/record_triage.ts +1 -4
  1015. package/templates/triage/package.json +1 -1
  1016. package/dist/client.d.ts +0 -14
  1017. package/dist/client.d.ts.map +0 -1
  1018. package/dist/client.js +0 -12
  1019. package/dist/docs/assets/app.Cr-wVbnB.js +0 -1
  1020. package/dist/docs/assets/building-with-agents.md.D0KbSkJn.js +0 -13
  1021. package/dist/docs/assets/building-with-agents.md.D0KbSkJn.lean.js +0 -1
  1022. package/dist/docs/assets/chunks/@localSearchIndexroot.CFVQ4S17.js +0 -1
  1023. package/dist/docs/assets/concepts.md.B4o63Gul.js +0 -1
  1024. package/dist/docs/assets/concepts.md.B4o63Gul.lean.js +0 -1
  1025. package/dist/docs/assets/deployment.md.JenwuCCB.js +0 -51
  1026. package/dist/docs/assets/deployment.md.JenwuCCB.lean.js +0 -1
  1027. package/dist/docs/assets/evals.md.C7JLjoEP.js +0 -211
  1028. package/dist/docs/assets/evals.md.C7JLjoEP.lean.js +0 -1
  1029. package/dist/docs/assets/guides_agent-to-agent.md.BDb0t1QV.js +0 -10
  1030. package/dist/docs/assets/guides_agent-to-agent.md.BDb0t1QV.lean.js +0 -1
  1031. package/dist/docs/assets/guides_bitbucket.md.DZPzmUjU.js +0 -10
  1032. package/dist/docs/assets/guides_bitbucket.md.DZPzmUjU.lean.js +0 -1
  1033. package/dist/docs/assets/guides_cloud-agents.md.BsloyHdY.js +0 -9
  1034. package/dist/docs/assets/guides_cloud-agents.md.BsloyHdY.lean.js +0 -1
  1035. package/dist/docs/assets/guides_convert-automation.md.B4sjlodG.js +0 -12
  1036. package/dist/docs/assets/guides_convert-automation.md.B4sjlodG.lean.js +0 -1
  1037. package/dist/docs/assets/guides_github.md.TZaTZlfz.js +0 -64
  1038. package/dist/docs/assets/guides_github.md.TZaTZlfz.lean.js +0 -1
  1039. package/dist/docs/assets/guides_gitlab.md.BmqwQfdG.js +0 -14
  1040. package/dist/docs/assets/guides_gitlab.md.BmqwQfdG.lean.js +0 -1
  1041. package/dist/docs/assets/guides_grokbot-agents.md.DyV-WArv.js +0 -9
  1042. package/dist/docs/assets/guides_grokbot-agents.md.DyV-WArv.lean.js +0 -1
  1043. package/dist/docs/assets/guides_human-in-the-loop.md.By1G2T3_.js +0 -28
  1044. package/dist/docs/assets/guides_human-in-the-loop.md.By1G2T3_.lean.js +0 -1
  1045. package/dist/docs/assets/guides_improve.md.BGVk32bK.js +0 -14
  1046. package/dist/docs/assets/guides_improve.md.BGVk32bK.lean.js +0 -1
  1047. package/dist/docs/assets/guides_mcp-oauth.md.Dp6cDP7f.js +0 -28
  1048. package/dist/docs/assets/guides_mcp-oauth.md.Dp6cDP7f.lean.js +0 -1
  1049. package/dist/docs/assets/guides_opentelemetry.md.SCRMskno.js +0 -26
  1050. package/dist/docs/assets/guides_opentelemetry.md.SCRMskno.lean.js +0 -1
  1051. package/dist/docs/assets/guides_slack.md.D4RVMM4G.js +0 -38
  1052. package/dist/docs/assets/guides_slack.md.D4RVMM4G.lean.js +0 -1
  1053. package/dist/docs/assets/guides_webhooks.md.CJK484ex.js +0 -225
  1054. package/dist/docs/assets/guides_webhooks.md.CJK484ex.lean.js +0 -1
  1055. package/dist/docs/assets/hillclimbing.md.BOiVo1tf.js +0 -4
  1056. package/dist/docs/assets/hillclimbing.md.BOiVo1tf.lean.js +0 -1
  1057. package/dist/docs/assets/index.md.DD9Q2XuJ.js +0 -5
  1058. package/dist/docs/assets/index.md.DD9Q2XuJ.lean.js +0 -1
  1059. package/dist/docs/assets/quickstart.md.DdQOF7Y8.lean.js +0 -1
  1060. package/dist/docs/assets/reference_extensions.md.ZAVUyuEX.js +0 -62
  1061. package/dist/docs/assets/reference_extensions.md.ZAVUyuEX.lean.js +0 -1
  1062. package/dist/docs/assets/reference_result.md.BK5SxDrf.js +0 -19
  1063. package/dist/docs/assets/reference_result.md.BK5SxDrf.lean.js +0 -1
  1064. package/dist/docs/assets/scaffolding-agents.md.Kctn3OVb.js +0 -1
  1065. package/dist/docs/assets/scaffolding-agents.md.Kctn3OVb.lean.js +0 -1
  1066. package/dist/docs/assets/skills_create-agent.md.Q3h6Je-e.js +0 -8
  1067. package/dist/docs/assets/skills_create-agent.md.Q3h6Je-e.lean.js +0 -1
  1068. package/dist/docs/assets/skills_debug.md.CVjCXMFF.js +0 -1
  1069. package/dist/docs/assets/skills_debug.md.CVjCXMFF.lean.js +0 -1
  1070. package/dist/docs/assets/skills_deploy.md.CWqi_ZxW.js +0 -35
  1071. package/dist/docs/assets/skills_deploy.md.CWqi_ZxW.lean.js +0 -1
  1072. package/dist/docs/assets/skills_evals.md.DFxYPErF.js +0 -25
  1073. package/dist/docs/assets/skills_evals.md.DFxYPErF.lean.js +0 -1
  1074. package/dist/docs/assets/skills_framework-map.md.BxLSOhSY.js +0 -1
  1075. package/dist/docs/assets/skills_framework-map.md.BxLSOhSY.lean.js +0 -1
  1076. package/dist/docs/assets/skills_github.md.hgFX_oKY.js +0 -16
  1077. package/dist/docs/assets/skills_github.md.hgFX_oKY.lean.js +0 -1
  1078. package/dist/docs/assets/skills_hillclimb.md.B_zJerxA.js +0 -7
  1079. package/dist/docs/assets/skills_hillclimb.md.B_zJerxA.lean.js +0 -1
  1080. package/dist/docs/assets/skills_index.md.DL7EHaQ-.js +0 -1
  1081. package/dist/docs/assets/skills_index.md.DL7EHaQ-.lean.js +0 -1
  1082. package/dist/docs/assets/skills_mcp-auth.md.DGvFP3HE.js +0 -18
  1083. package/dist/docs/assets/skills_mcp-auth.md.DGvFP3HE.lean.js +0 -1
  1084. package/dist/docs/assets/skills_otel.md.B5Ddv1xH.js +0 -8
  1085. package/dist/docs/assets/skills_otel.md.B5Ddv1xH.lean.js +0 -1
  1086. package/dist/docs/assets/skills_setup-slack.md.BBgx8lUz.js +0 -20
  1087. package/dist/docs/assets/skills_setup-slack.md.BBgx8lUz.lean.js +0 -1
  1088. package/dist/docs/assets/storage.md.BUrhJ-Zz.js +0 -30
  1089. package/dist/docs/assets/storage.md.BUrhJ-Zz.lean.js +0 -1
  1090. package/dist/docs/assets/templates_agents-md.md.CXSMZljE.js +0 -2
  1091. package/dist/docs/assets/templates_agents-md.md.CXSMZljE.lean.js +0 -1
  1092. package/dist/docs/assets/templates_code-wiki.md.CDYZIBFN.js +0 -2
  1093. package/dist/docs/assets/templates_code-wiki.md.CDYZIBFN.lean.js +0 -1
  1094. package/dist/docs/assets/templates_demo.md.BeQX9V3H.js +0 -4
  1095. package/dist/docs/assets/templates_demo.md.BeQX9V3H.lean.js +0 -1
  1096. package/dist/docs/assets/templates_grokbot-agents.md.c1s6Flp9.js +0 -3
  1097. package/dist/docs/assets/templates_grokbot-agents.md.c1s6Flp9.lean.js +0 -1
  1098. package/dist/docs/assets/templates_security-help.md.C3Ny_Qr2.js +0 -4
  1099. package/dist/docs/assets/templates_security-help.md.C3Ny_Qr2.lean.js +0 -1
  1100. package/dist/docs/assets/troubleshooting.md.CYEAO9bM.js +0 -1
  1101. package/dist/docs/assets/troubleshooting.md.CYEAO9bM.lean.js +0 -1
  1102. package/dist/docs/concepts.html +0 -27
  1103. package/dist/docs/concepts.md +0 -166
  1104. package/dist/docs/design/filesystem.md +0 -376
  1105. package/dist/docs/design/runtime-abstraction.md +0 -1756
  1106. package/dist/docs/guides/human-in-the-loop.html +0 -54
  1107. package/dist/docs/guides/human-in-the-loop.md +0 -126
  1108. package/dist/docs/reference/result.html +0 -45
  1109. package/dist/docs/reference/result.md +0 -89
  1110. package/dist/docs/scaffolding-agents.html +0 -27
  1111. package/dist/docs/scaffolding-agents.md +0 -130
  1112. package/dist/docs/skills/create-agent.html +0 -34
  1113. package/dist/docs/skills/create-agent.md +0 -160
  1114. package/dist/docs/skills/debug.html +0 -27
  1115. package/dist/docs/skills/debug.md +0 -36
  1116. package/dist/docs/skills/deploy.html +0 -61
  1117. package/dist/docs/skills/deploy.md +0 -161
  1118. package/dist/docs/skills/evals.html +0 -51
  1119. package/dist/docs/skills/evals.md +0 -137
  1120. package/dist/docs/skills/framework-map.html +0 -27
  1121. package/dist/docs/skills/framework-map.md +0 -99
  1122. package/dist/docs/skills/github.html +0 -42
  1123. package/dist/docs/skills/github.md +0 -93
  1124. package/dist/docs/skills/hillclimb.html +0 -33
  1125. package/dist/docs/skills/hillclimb.md +0 -55
  1126. package/dist/docs/skills/index.html +0 -27
  1127. package/dist/docs/skills/index.md +0 -21
  1128. package/dist/docs/skills/mcp-auth.html +0 -44
  1129. package/dist/docs/skills/mcp-auth.md +0 -76
  1130. package/dist/docs/skills/otel.html +0 -34
  1131. package/dist/docs/skills/otel.md +0 -53
  1132. package/dist/docs/skills/setup-slack.html +0 -46
  1133. package/dist/docs/skills/setup-slack.md +0 -141
  1134. package/dist/docs/storage.html +0 -56
  1135. package/dist/docs/storage.md +0 -167
  1136. package/dist/docs/templates/agents-md.html +0 -28
  1137. package/dist/docs/templates/agents-md.md +0 -105
  1138. package/dist/docs/templates/code-wiki.html +0 -28
  1139. package/dist/docs/templates/code-wiki.md +0 -91
  1140. package/dist/docs/templates/demo.html +0 -30
  1141. package/dist/docs/templates/demo.md +0 -80
  1142. package/dist/docs/templates/grokbot-agents.html +0 -29
  1143. package/dist/docs/templates/grokbot-agents.md +0 -48
  1144. package/dist/docs/templates/security-help.html +0 -30
  1145. package/dist/docs/templates/security-help.md +0 -65
  1146. package/dist/internal/tenant-slack/relay.d.ts +0 -75
  1147. package/dist/internal/tenant-slack/relay.d.ts.map +0 -1
  1148. package/dist/internal/tenant-slack/relay.js +0 -148
  1149. package/dist/playground/assets/index-Bhxzrcf6.css +0 -1
  1150. package/dist/playground/assets/index-CqLX5uF3.js +0 -67
  1151. package/docs/concepts.md +0 -171
  1152. package/docs/design/filesystem.md +0 -376
  1153. package/docs/design/runtime-abstraction.md +0 -1756
  1154. package/docs/guides/human-in-the-loop.md +0 -131
  1155. package/docs/reference/result.md +0 -94
  1156. package/docs/scaffolding-agents.md +0 -135
  1157. package/docs/skills/index.md +0 -26
  1158. package/docs/storage.md +0 -172
  1159. package/docs/templates/agents-md.md +0 -110
  1160. package/docs/templates/code-wiki.md +0 -96
  1161. package/docs/templates/demo.md +0 -85
  1162. package/docs/templates/grokbot-agents.md +0 -53
  1163. package/docs/templates/security-help.md +0 -70
  1164. package/src/client.ts +0 -23
  1165. package/src/internal/tenant-slack/relay.ts +0 -203
  1166. package/templates/pr-autofixer/agent/storage.ts +0 -7
@@ -16,7 +16,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
16
16
  });
17
17
  };
18
18
  import { AsyncLocalStorage } from "node:async_hooks";
19
- import { mkdir, rm, writeFile } from "node:fs/promises";
19
+ import { access, mkdir, rm, writeFile } from "node:fs/promises";
20
20
  import { dirname, join } from "node:path";
21
21
  import { SLACK_CHANNEL_ID } from "../channels/slack/constants.js";
22
22
  import { materializeSlackNudgeCarrier } from "../channels/slack/nudge-carrier.js";
@@ -57,7 +57,7 @@ import { McpOauthOnDemandHub } from "./mcp-oauth-on-demand.js";
57
57
  import { shouldStartProcessMemoryTelemetry, startProcessMemoryTelemetry, } from "./process-memory-telemetry.js";
58
58
  import { buildSessionContextBlock, SCHEDULE_CHANNEL_PREFIX, } from "./prompt-context.js";
59
59
  import { assertCloudCanHonorAccountServersFilters } from "./resolved-connections.js";
60
- import { applyAuthoredResult } from "./result-output.js";
60
+ import { addTurnUsage, applyAuthoredResult, RESULT_REPAIR_BUDGET, resultRepairPrompt, } from "./result-output.js";
61
61
  import { sessionExternalLinks } from "./session-links.js";
62
62
  import { SessionStore } from "./session-store.js";
63
63
  import { syncSkillsToStore } from "./skills-sync.js";
@@ -81,6 +81,18 @@ export class SessionBusyError extends Error {
81
81
  this.name = "SessionBusyError";
82
82
  }
83
83
  }
84
+ /**
85
+ * Hosted enqueue-only admission could not coalesce into an active turn.
86
+ * Distinct from {@link SessionBusyError}: the caller asked not to start work.
87
+ */
88
+ export class HostedEnqueueNotActiveError extends Error {
89
+ constructor(sessionId) {
90
+ super(sessionId === undefined
91
+ ? "Hosted enqueue requires an active accepting session"
92
+ : `Hosted enqueue requires an active turn on session ${sessionId}`);
93
+ this.name = "HostedEnqueueNotActiveError";
94
+ }
95
+ }
84
96
  // Defined in auth.js (HTTP/session-store callers import it without this
85
97
  // module); re-exported here because this is its historical public home.
86
98
  export { SessionAuthError } from "./auth.js";
@@ -158,6 +170,33 @@ export class AuthInterruptedError extends Error {
158
170
  }
159
171
  }
160
172
  const mcpAuthAls = new AsyncLocalStorage();
173
+ /** Marker that we `git init`'d this shared harness so scaffold is ours to write. */
174
+ const OWNED_HARNESS = join(".agent-serve", "owned-harness");
175
+ function pathExists(path) {
176
+ return access(path).then(() => true, () => false);
177
+ }
178
+ /**
179
+ * Nested dirs get their own git root so the harness does not ripwalk the
180
+ * enclosing checkout. A real `workspaceDir` checkout (already a git root)
181
+ * is left alone.
182
+ */
183
+ function ownSharedHarness(dir) {
184
+ return __awaiter(this, void 0, void 0, function* () {
185
+ if (yield pathExists(join(dir, OWNED_HARNESS))) {
186
+ return true;
187
+ }
188
+ if (!(yield isNestedInGitRepo(dir))) {
189
+ return false;
190
+ }
191
+ yield ensureOwnGitRoot(dir);
192
+ if (yield isNestedInGitRepo(dir)) {
193
+ return false;
194
+ }
195
+ yield mkdir(join(dir, ".agent-serve"), { recursive: true });
196
+ yield writeFile(join(dir, OWNED_HARNESS), "");
197
+ return true;
198
+ });
199
+ }
161
200
  export class SessionEngine {
162
201
  constructor(options) {
163
202
  var _a, _b, _c, _d, _e;
@@ -197,6 +236,8 @@ export class SessionEngine {
197
236
  this.turnAborts = new Map();
198
237
  /** Serializes turn admission per session (latest follow-up wins). */
199
238
  this.admissionChains = new Map();
239
+ /** Live turn snapshot so a coalesced Slack wake can repaint on this process. */
240
+ this.liveTurns = new Map();
200
241
  /**
201
242
  * Per-session coalesce queue for `admission: "coalesce"` (Slack). Drained
202
243
  * into one follow-up turn when the active turn finishes without interrupt.
@@ -245,7 +286,7 @@ export class SessionEngine {
245
286
  this.askDedupe = new SlackAskDedupeStore(join(options.stateRoot, "slack-asks"));
246
287
  this.turnLeases = new TurnLeaseStore(join(options.stateRoot, "turn-leases"));
247
288
  this.outbox = new TurnOutbox(join(options.stateRoot, "outbox"));
248
- this.logs = new EventLogStore((sessionId) => this.sessions.eventFilePath(sessionId), (sessionId, error) => this.logger(`[agent-sdk] failed to persist events for ${sessionId}: ${describeError(error)}`));
289
+ this.logs = new EventLogStore(sessionId => this.sessions.eventFilePath(sessionId), (sessionId, error) => this.logger(`[agent-sdk] failed to persist events for ${sessionId}: ${describeError(error)}`));
249
290
  // Framework session state (records, event chunks, continuations) is
250
291
  // mirrored to whatever this selects; see framework-storage-selection.ts
251
292
  // for why the choice does not belong to the agent author.
@@ -289,7 +330,7 @@ export class SessionEngine {
289
330
  this.mcpHost = new McpHost([
290
331
  ...options.project.agent.connections,
291
332
  ...((_d = options.project.agent.hostConnections) !== null && _d !== void 0 ? _d : []),
292
- ].filter((connection) => !isSymbolicConnectionTransport(connection.transport)));
333
+ ].filter(connection => !isSymbolicConnectionTransport(connection.transport)));
293
334
  const basePlatforms = (_e = options.platforms) !== null && _e !== void 0 ? _e : createHostPlatforms();
294
335
  const slackBinding = resolveDedicatedSlackHostBinding(options.project.channels);
295
336
  this.platforms =
@@ -333,7 +374,7 @@ export class SessionEngine {
333
374
  authoredConnection(name) {
334
375
  var _a;
335
376
  var _b;
336
- return ((_b = this.project.agent.connections.find((item) => item.name === name)) !== null && _b !== void 0 ? _b : (_a = this.project.agent.hostConnections) === null || _a === void 0 ? void 0 : _a.find((item) => item.name === name));
377
+ return ((_b = this.project.agent.connections.find(item => item.name === name)) !== null && _b !== void 0 ? _b : (_a = this.project.agent.hostConnections) === null || _a === void 0 ? void 0 : _a.find(item => item.name === name));
337
378
  }
338
379
  setCloudServerToolsConnection(connection) {
339
380
  this.cloudServerToolsConnection = connection;
@@ -398,7 +439,7 @@ export class SessionEngine {
398
439
  }
399
440
  return this.tagArtifact(Object.assign(Object.assign({}, input), { sessionId: binding.sessionId, turnId: (_a = input.turnId) !== null && _a !== void 0 ? _a : binding.turnId }));
400
441
  }),
401
- list: (filter) => this.artifactsStore.list(filter),
442
+ list: filter => this.artifactsStore.list(filter),
402
443
  };
403
444
  }
404
445
  /**
@@ -536,10 +577,10 @@ export class SessionEngine {
536
577
  }
537
578
  slackNudgeHostApi() {
538
579
  return {
539
- append: (input) => this.nudgeStore.append(input),
540
- drainFormatted: (continuationKey) => this.nudgeStore.drainFormatted(continuationKey),
541
- clear: (continuationKey) => this.nudgeStore.clear(continuationKey),
542
- hasUndelivered: (continuationKey) => this.nudgeStore.hasUndelivered(continuationKey),
580
+ append: input => this.nudgeStore.append(input),
581
+ drainFormatted: continuationKey => this.nudgeStore.drainFormatted(continuationKey),
582
+ clear: continuationKey => this.nudgeStore.clear(continuationKey),
583
+ hasUndelivered: continuationKey => this.nudgeStore.hasUndelivered(continuationKey),
543
584
  isDelivered: (continuationKey, sourceTs) => this.nudgeStore.isDelivered(continuationKey, sourceTs),
544
585
  tryClaimAsk: (channelId, messageTs) => this.askDedupe.tryClaim(channelId, messageTs),
545
586
  releaseAsk: (channelId, messageTs) => this.askDedupe.release(channelId, messageTs),
@@ -575,6 +616,9 @@ export class SessionEngine {
575
616
  // on a sessionless pod.
576
617
  throw new HostedAdmissionLocalSendError();
577
618
  }
619
+ if (options.clearCloudOverride === true && options.cloud !== undefined) {
620
+ throw new Error("send options cloud and clearCloudOverride cannot be combined");
621
+ }
578
622
  const identity = channelId === HTTP_CHANNEL_ID
579
623
  ? httpContinuationIdentity(this.project.httpChannel)
580
624
  : channelContinuationIdentity(this.channelsById.get(channelId));
@@ -620,35 +664,52 @@ export class SessionEngine {
620
664
  // Refresh harness cwd when the caller supplies a newer worktree (e.g. PR
621
665
  // synchronize). Leave the durable continuation key unchanged.
622
666
  let record = existing;
623
- const refreshWorkspace = sendOptions.workspaceDir !== undefined &&
624
- sendOptions.workspaceDir !== existing.workspaceOverride;
625
- if (refreshWorkspace ||
626
- sendOptions.workspaceFiles !== undefined ||
627
- sendOptions.images !== undefined) {
628
- record = yield this.updateRecord(existing.sessionId, (current) => (Object.assign(Object.assign({}, current), { workspaceOverride: refreshWorkspace
629
- ? sendOptions.workspaceDir
630
- : current.workspaceOverride, pendingWorkspaceFiles: mergePendingWorkspaceFiles(current.pendingWorkspaceFiles, sendOptions.workspaceFiles), pendingImages: mergePendingImages(current.pendingImages, sendOptions.images) })));
631
- }
632
- // Refresh the cloud attach the same way: a follow-up send carries the
633
- // caller's CURRENT cloud options (e.g. a PR attach re-derived per wake),
634
- // and the first send's snapshot must not pin this session's turns to a
635
- // stale repo/prUrl for the session's lifetime.
636
- if (sendOptions.cloud !== undefined &&
637
- JSON.stringify(sendOptions.cloud) !==
638
- JSON.stringify(record.cloudOverride)) {
639
- record = yield this.updateRecord(record.sessionId, (current) => (Object.assign(Object.assign({}, current), { cloudOverride: sendOptions.cloud })));
640
- }
641
- // Refresh wake-derived channel state (GitHub headSha / refs) without
642
- // wiping sticky fields. Null patch values are skipped.
643
- if (sendOptions.refreshState !== undefined) {
644
- record = yield this.updateRecord(record.sessionId, (current) => (Object.assign(Object.assign({}, current), { channelState: mergeChannelStateSkipNull(current.channelState, sendOptions.refreshState) })));
667
+ const enqueueOnly = sendOptions.hostedEnqueueOnly === true;
668
+ if (!enqueueOnly) {
669
+ const refreshWorkspace = sendOptions.workspaceDir !== undefined &&
670
+ sendOptions.workspaceDir !== existing.workspaceOverride;
671
+ if (refreshWorkspace ||
672
+ sendOptions.workspaceFiles !== undefined ||
673
+ sendOptions.images !== undefined) {
674
+ record = yield this.updateRecord(existing.sessionId, current => (Object.assign(Object.assign({}, current), { workspaceOverride: refreshWorkspace
675
+ ? sendOptions.workspaceDir
676
+ : current.workspaceOverride, pendingWorkspaceFiles: mergePendingWorkspaceFiles(current.pendingWorkspaceFiles, sendOptions.workspaceFiles), pendingImages: mergePendingImages(current.pendingImages, sendOptions.images) })));
677
+ }
678
+ // A caller can explicitly return a continuation to the agent's
679
+ // configured runtime. Omission remains sticky for compatibility:
680
+ // follow-ups that do not know the original attach keep it.
681
+ if (sendOptions.clearCloudOverride === true &&
682
+ record.cloudOverride !== undefined) {
683
+ record = yield this.updateRecord(record.sessionId, current => (Object.assign(Object.assign({}, current), { cloudOverride: undefined })));
684
+ }
685
+ else if (sendOptions.cloud !== undefined &&
686
+ JSON.stringify(sendOptions.cloud) !==
687
+ JSON.stringify(record.cloudOverride)) {
688
+ record = yield this.updateRecord(record.sessionId, current => (Object.assign(Object.assign({}, current), { cloudOverride: sendOptions.cloud })));
689
+ }
690
+ // Refresh wake-derived channel state (GitHub headSha / refs) without
691
+ // wiping sticky fields. Null patch values are skipped.
692
+ if (sendOptions.refreshState !== undefined) {
693
+ record = yield this.updateRecord(record.sessionId, current => (Object.assign(Object.assign({}, current), { channelState: mergeChannelStateSkipNull(current.channelState, sendOptions.refreshState) })));
694
+ }
645
695
  }
646
696
  const since = (yield this.logs.get(record.sessionId)).count;
647
- const coalesced = yield this.startTurn(record.sessionId, message, Object.assign({ admission: (_d = sendOptions.admission) !== null && _d !== void 0 ? _d : "preempt" }, (sendOptions.coalesceSourceTs === undefined
697
+ const coalesced = yield this.startTurn(record.sessionId, message, Object.assign(Object.assign({ admission: enqueueOnly
698
+ ? "coalesce"
699
+ : ((_d = sendOptions.admission) !== null && _d !== void 0 ? _d : "preempt") }, (sendOptions.coalesceSourceTs === undefined
648
700
  ? {}
649
- : { sourceTs: sendOptions.coalesceSourceTs })));
701
+ : { sourceTs: sendOptions.coalesceSourceTs })), (enqueueOnly ? { hostedEnqueueOnly: true } : {})));
702
+ if (enqueueOnly && !coalesced) {
703
+ throw new HostedEnqueueNotActiveError(record.sessionId);
704
+ }
705
+ if (!enqueueOnly && coalesced && sendOptions.refreshState !== undefined) {
706
+ yield this.repaintOnCoalescedRefresh(record.sessionId, sendOptions.refreshState);
707
+ }
650
708
  return this.channelSession(record.sessionId, record, false, coalesced, since);
651
709
  }
710
+ if (sendOptions.hostedEnqueueOnly === true) {
711
+ throw new HostedEnqueueNotActiveError(sendOptions.hostedSessionId);
712
+ }
652
713
  if (sendOptions.hostedSessionId !== undefined) {
653
714
  const collision = yield this.getOrRestoreSession(sendOptions.hostedSessionId);
654
715
  if (collision !== undefined) {
@@ -706,7 +767,7 @@ export class SessionEngine {
706
767
  const stale = new Error("stale HTTP continuation");
707
768
  let previous;
708
769
  try {
709
- yield this.updateRecord(sessionId, (record) => {
770
+ yield this.updateRecord(sessionId, record => {
710
771
  var _a;
711
772
  const expectedChannel = record.httpContinuationKey === undefined
712
773
  ? record.channelId
@@ -730,7 +791,7 @@ export class SessionEngine {
730
791
  return next;
731
792
  }
732
793
  catch (error) {
733
- yield this.updateRecord(sessionId, (record) => record.httpContinuationKey === next
794
+ yield this.updateRecord(sessionId, record => record.httpContinuationKey === next
734
795
  ? Object.assign(Object.assign({}, record), { httpContinuationKey: previous }) : record);
735
796
  throw error;
736
797
  }
@@ -793,6 +854,45 @@ export class SessionEngine {
793
854
  // ==========================================================================
794
855
  // Turn execution
795
856
  // ==========================================================================
857
+ /**
858
+ * Repaint on the follow-up wake without retargeting the live turn.
859
+ * Persist already took the refresh; in-flight writes stay on the carrier ts.
860
+ */
861
+ repaintOnCoalescedRefresh(sessionId, patch) {
862
+ return __awaiter(this, void 0, void 0, function* () {
863
+ var _a;
864
+ var _b;
865
+ const live = this.liveTurns.get(sessionId);
866
+ if (live === undefined || patch === undefined) {
867
+ return;
868
+ }
869
+ const repaintState = (_b = mergeChannelStateSkipNull(live.channelState, patch)) !== null && _b !== void 0 ? _b : live.channelState;
870
+ const record = yield this.sessions.get(sessionId);
871
+ if (record === undefined) {
872
+ return;
873
+ }
874
+ const handler = (_a = this.channelEventHandlersFor(record.channelId)) === null || _a === void 0 ? void 0 : _a["message.received"];
875
+ if (handler === undefined) {
876
+ return;
877
+ }
878
+ yield handler({
879
+ type: "message.received",
880
+ data: { text: "" },
881
+ index: 0,
882
+ sessionId,
883
+ at: new Date().toISOString(),
884
+ }, {
885
+ channelId: record.channelId,
886
+ state: repaintState,
887
+ continuationToken: record.continuationKey,
888
+ setContinuationToken: (token) => this.setContinuationToken(sessionId, token),
889
+ }, {
890
+ session: live.session,
891
+ host: this.hostForSession(sessionId),
892
+ artifacts: this.artifactsApi({ sessionId }),
893
+ });
894
+ });
895
+ }
796
896
  /**
797
897
  * Admit a turn for `sessionId`.
798
898
  *
@@ -811,7 +911,12 @@ export class SessionEngine {
811
911
  .catch(() => { })
812
912
  .then(() => __awaiter(this, void 0, void 0, function* () {
813
913
  // Another server holds the turn: hand the message to it and coalesce.
914
+ // Enqueue-only must not report coalesced success without a local
915
+ // enqueue — the outbox drain may never run on this process.
814
916
  if (yield this.turnLeases.runningElsewhere(sessionId)) {
917
+ if (options.hostedEnqueueOnly === true) {
918
+ throw new HostedEnqueueNotActiveError(sessionId);
919
+ }
815
920
  yield this.outbox.post(sessionId, { message, options });
816
921
  return true;
817
922
  }
@@ -824,7 +929,7 @@ export class SessionEngine {
824
929
  drainOutbox(sessionId) {
825
930
  void this.outbox
826
931
  .takeAll(sessionId)
827
- .then((items) => {
932
+ .then(items => {
828
933
  for (const item of items) {
829
934
  void this.startTurn(sessionId, item.message, item.options).catch(() => { });
830
935
  }
@@ -835,7 +940,7 @@ export class SessionEngine {
835
940
  var _a;
836
941
  const queue = (_a = this.coalesceQueues.get(sessionId)) !== null && _a !== void 0 ? _a : [];
837
942
  if (item.sourceTs !== undefined &&
838
- queue.some((entry) => entry.sourceTs === item.sourceTs)) {
943
+ queue.some(entry => entry.sourceTs === item.sourceTs)) {
839
944
  return;
840
945
  }
841
946
  queue.push(item);
@@ -905,7 +1010,7 @@ export class SessionEngine {
905
1010
  }
906
1011
  const parts = [
907
1012
  "<slack_followups>",
908
- `ANSWER-EACH: ${items.length} asks arrived while you were busy. Address each in order; keep replies compact.`,
1013
+ `${items.length} asks arrived while you were busy.`,
909
1014
  "",
910
1015
  ];
911
1016
  for (let i = 0; i < items.length; i++) {
@@ -988,10 +1093,19 @@ export class SessionEngine {
988
1093
  // enqueue: `drainCoalescedFollowups` reads only this process's queue, so
989
1094
  // the shared nudge store is the carrier. Not redundant with `acquire`
990
1095
  // below — this returns before preempt's `clearCoalesced` drops the queue.
1096
+ // Enqueue-only cannot claim coalesced here: nothing joined a local turn.
991
1097
  if (yield this.turnLeases.runningElsewhere(sessionId)) {
1098
+ if (options.hostedEnqueueOnly === true) {
1099
+ throw new HostedEnqueueNotActiveError(sessionId);
1100
+ }
992
1101
  this.logger(`[session] coalesce; another server owns ${sessionId}`);
993
1102
  return true;
994
1103
  }
1104
+ // Enqueue-only must never start a turn (or preempt/interrupt). Steer and
1105
+ // coalesce above already returned true when they absorbed the message.
1106
+ if (options.hostedEnqueueOnly === true) {
1107
+ throw new HostedEnqueueNotActiveError(sessionId);
1108
+ }
995
1109
  // Interrupt any turn in flight and wait for it to settle so the SDK run is
996
1110
  // terminal before this turn's send (the follow-up also force-expires as a
997
1111
  // belt-and-suspenders — see buildTurnRequest). Drain-resume skips interrupt:
@@ -1020,7 +1134,7 @@ export class SessionEngine {
1020
1134
  this.pendingTurns.add(sessionId);
1021
1135
  let lifecycleInstalled = false;
1022
1136
  try {
1023
- const record = yield this.updateRecord(sessionId, (current) => (Object.assign(Object.assign({}, current), { turnCount: current.turnCount + 1 })));
1137
+ const record = yield this.updateRecord(sessionId, current => (Object.assign(Object.assign({}, current), { turnCount: current.turnCount + 1 })));
1024
1138
  const turnId = `turn_${record.turnCount}`;
1025
1139
  const isFirstTurn = record.turnCount === 1;
1026
1140
  yield this.appendEvent(sessionId, {
@@ -1057,6 +1171,7 @@ export class SessionEngine {
1057
1171
  }
1058
1172
  finally {
1059
1173
  clearInterval(poll);
1174
+ this.liveTurns.delete(sessionId);
1060
1175
  }
1061
1176
  this.lastOutcomes.set(sessionId, outcome);
1062
1177
  const wasCurrent = this.activeTurns.get(sessionId) === lifecycle;
@@ -1066,8 +1181,13 @@ export class SessionEngine {
1066
1181
  if (this.turnAborts.get(sessionId) === abort) {
1067
1182
  this.turnAborts.delete(sessionId);
1068
1183
  }
1069
- if (wasCurrent && !abort.signal.aborted) {
1070
- const drain = this.drainCoalescedFollowups(sessionId).catch((error) => {
1184
+ // Failed/cancelled owners must not start a coalesced successor.
1185
+ // Hosted execute would then 503 and Temporal/FIFO would re-run the
1186
+ // same follow-ups as full deliveries.
1187
+ if (wasCurrent &&
1188
+ !abort.signal.aborted &&
1189
+ outcome.status === "finished") {
1190
+ const drain = this.drainCoalescedFollowups(sessionId).catch(error => {
1071
1191
  this.logger(`[session] coalesce drain failed for ${sessionId}: ${describeError(error)}`);
1072
1192
  });
1073
1193
  this.coalesceDrains.set(sessionId, drain);
@@ -1291,7 +1411,7 @@ export class SessionEngine {
1291
1411
  if (turn === undefined) {
1292
1412
  return tools;
1293
1413
  }
1294
- return tools.map((tool) => {
1414
+ return tools.map(tool => {
1295
1415
  const execute = tool.definition.execute;
1296
1416
  if (typeof execute !== "function") {
1297
1417
  return tool;
@@ -1449,6 +1569,14 @@ export class SessionEngine {
1449
1569
  * Best effort — warming is an optimization, and a turn rebuilds on its own.
1450
1570
  */
1451
1571
  prewarmSharedWorkspace() {
1572
+ return __awaiter(this, void 0, void 0, function* () {
1573
+ if (this.sharedWarm === undefined) {
1574
+ this.sharedWarm = this.warmSharedWorkspace();
1575
+ }
1576
+ yield this.sharedWarm;
1577
+ });
1578
+ }
1579
+ warmSharedWorkspace() {
1452
1580
  return __awaiter(this, void 0, void 0, function* () {
1453
1581
  var _a, _b;
1454
1582
  const agent = this.project.agent;
@@ -1461,6 +1589,15 @@ export class SessionEngine {
1461
1589
  }
1462
1590
  const startedAt = Date.now();
1463
1591
  try {
1592
+ yield mkdir(workspaceDir, { recursive: true });
1593
+ if (yield ownSharedHarness(workspaceDir)) {
1594
+ yield materializeWorkspace({
1595
+ agent,
1596
+ workspaceDir,
1597
+ seed: true,
1598
+ stateRoot: this.stateRoot,
1599
+ });
1600
+ }
1464
1601
  const harness = resolveHostHarnessToolOptions(agent.allowedTools);
1465
1602
  const outcome = yield this.runner.prewarm(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({ workspaceDir, runnerStateDir: join(this.stateRoot, "runner"), sandbox: ((_b = agent.local) === null || _b === void 0 ? void 0 : _b.sandbox) === true }, (harness.tools === undefined ? {} : { tools: harness.tools })), (harness.disallowedTools === undefined
1466
1603
  ? {}
@@ -1468,7 +1605,8 @@ export class SessionEngine {
1468
1605
  // No session yet, so auth'd connections are omitted rather than
1469
1606
  // warmed without an identity; the per-send flag still has to match
1470
1607
  // the turns' requests or the warmed executor is one no turn asks for.
1471
- mcpServers: this.buildMcpServers("local") }), (this.hasAttachedAuthedConnections()
1608
+ mcpServers: this.buildMcpServers("local") }), (this.hasAttachedAuthedConnections() ||
1609
+ this.project.agent.connections.some(connection => isCursorAccountTransport(connection.transport))
1472
1610
  ? { perSendMcpServers: true }
1473
1611
  : {})), { subagents: buildRunnerSubagents(agent) }), (agent.model === undefined ? {} : { model: agent.model })));
1474
1612
  // Report what happened rather than that the call returned: a runner
@@ -1492,15 +1630,17 @@ export class SessionEngine {
1492
1630
  }
1493
1631
  executeTurn(record, turnId, message, isFirstTurn, signal) {
1494
1632
  return __awaiter(this, void 0, void 0, function* () {
1495
- var _a, _b, _c, _d, _e, _f, _g, _h, _j;
1633
+ var _a;
1634
+ var _b, _c, _d, _e, _f, _g, _h, _j, _k;
1496
1635
  const sessionId = record.sessionId;
1497
1636
  const workspaceDir = this.scaffoldDir(record);
1498
1637
  const harnessCwd = this.harnessCwd(record);
1499
- const turnChannelState = structuredClone((_a = record.channelState) !== null && _a !== void 0 ? _a : null);
1638
+ const turnChannelState = structuredClone((_b = record.channelState) !== null && _b !== void 0 ? _b : null);
1500
1639
  const eventContext = {
1501
1640
  channelState: structuredClone(turnChannelState),
1502
1641
  session: this.sessionInfo(record),
1503
1642
  };
1643
+ this.liveTurns.set(sessionId, eventContext);
1504
1644
  // Hold the open log so tool events append synchronously. Fire-and-forget
1505
1645
  // `appendEvent` races parallel tool completions and delays the live stream
1506
1646
  // until the next await tick — often after *all* parallel tools finish.
@@ -1517,7 +1657,7 @@ export class SessionEngine {
1517
1657
  // Read by closure, so the mapper still sees it while draining after the
1518
1658
  // registry entry below is gone.
1519
1659
  const stubbed = new Set();
1520
- const mapper = new TurnEventMapper(emit, (callId) => stubbed.has(callId));
1660
+ const mapper = new TurnEventMapper(emit, callId => stubbed.has(callId));
1521
1661
  // Take a turn slot before any work happens. When every slot is busy the
1522
1662
  // turn waits FIFO — durable `turn.queued` marks the wait — and a
1523
1663
  // preempting follow-up (or interrupt) resolves the wait as cancelled
@@ -1525,7 +1665,7 @@ export class SessionEngine {
1525
1665
  const permit = yield this.turnGovernor.acquire({
1526
1666
  sessionId,
1527
1667
  signal,
1528
- onQueued: (position) => {
1668
+ onQueued: position => {
1529
1669
  var _a;
1530
1670
  const maxRunningTurns = (_a = this.turnGovernor.maxRunningTurns) !== null && _a !== void 0 ? _a : 0;
1531
1671
  emit({ type: "turn.queued", data: { position, maxRunningTurns } });
@@ -1540,6 +1680,10 @@ export class SessionEngine {
1540
1680
  else {
1541
1681
  emit({ type: "turn.started", data: {} });
1542
1682
  try {
1683
+ if (record.workspaceOverride === undefined &&
1684
+ ((_a = this.project.agent.local) === null || _a === void 0 ? void 0 : _a.workspaceDir) !== undefined) {
1685
+ yield this.prewarmSharedWorkspace();
1686
+ }
1543
1687
  // Scaffold agent files into the session workspace even when the harness
1544
1688
  // cwd is overridden (e.g. a PR worktree).
1545
1689
  if (!this.hasRootOverride()) {
@@ -1573,7 +1717,7 @@ export class SessionEngine {
1573
1717
  if (hasPendingFiles && runtime !== "cloud") {
1574
1718
  const root = yield this.resolveFileSystem({
1575
1719
  sessionId,
1576
- continuationKey: (_b = record.continuationKey) !== null && _b !== void 0 ? _b : undefined,
1720
+ continuationKey: (_c = record.continuationKey) !== null && _c !== void 0 ? _c : undefined,
1577
1721
  cache: true,
1578
1722
  cwd: harnessCwd,
1579
1723
  });
@@ -1581,7 +1725,7 @@ export class SessionEngine {
1581
1725
  }
1582
1726
  if ((hasPendingFiles && runtime !== "cloud") ||
1583
1727
  (pendingImages !== undefined && pendingImages.length > 0)) {
1584
- yield this.updateRecord(sessionId, (current) => (Object.assign(Object.assign({}, current), { pendingWorkspaceFiles: hasPendingFiles &&
1728
+ yield this.updateRecord(sessionId, current => (Object.assign(Object.assign({}, current), { pendingWorkspaceFiles: hasPendingFiles &&
1585
1729
  runtime !== "cloud" &&
1586
1730
  current.pendingWorkspaceFiles === pendingFiles
1587
1731
  ? undefined
@@ -1589,15 +1733,7 @@ export class SessionEngine {
1589
1733
  ? undefined
1590
1734
  : current.pendingImages })));
1591
1735
  }
1592
- // The harness only loads the scaffolded AGENTS.md when the session
1593
- // workspace is its own project root. When the harness cwd is borrowed
1594
- // (PR worktree, shared checkout) the scaffold lands elsewhere, and a
1595
- // workspace nested inside a git repo re-roots harness rules at that
1596
- // repo — in both cases deliver instructions inline on the first turn.
1597
- const instructionsInvisibleToHarness = isFirstTurn &&
1598
- (this.hasBorrowedWorkspace(record) ||
1599
- (yield isNestedInGitRepo(harnessCwd)));
1600
- const request = yield this.buildTurnRequest(record, turnId, message, isFirstTurn, instructionsInvisibleToHarness, emit, eventContext, (update) => __awaiter(this, void 0, void 0, function* () {
1736
+ const onUpdate = (update) => __awaiter(this, void 0, void 0, function* () {
1601
1737
  const turn = this.turnRoots.get(sessionId);
1602
1738
  if (turn !== undefined) {
1603
1739
  update = yield applyWebScratchUpdate({
@@ -1619,11 +1755,26 @@ export class SessionEngine {
1619
1755
  yield this.emitDeliveredNudges(record, emit);
1620
1756
  yield yieldEventLoop();
1621
1757
  }
1622
- }), signal, pendingImages);
1758
+ });
1759
+ const request = yield this.buildTurnRequest(record, turnId, message, isFirstTurn, emit, eventContext, onUpdate, signal, pendingImages);
1623
1760
  this.activeToolContexts.set(sessionId, { record, turnId, emit });
1624
1761
  this.stubbedCallIds.set(sessionId, stubbed);
1625
1762
  try {
1626
1763
  outcome = yield this.runTurnExecute(record, turnId, () => this.runner.runTurn(request));
1764
+ // Commit before dropping the turn FS so `ctx.reject` can
1765
+ // re-run the model with tools still mounted.
1766
+ outcome = yield this.settleAuthoredResult({
1767
+ record,
1768
+ turnId,
1769
+ emit,
1770
+ eventContext,
1771
+ turnChannelState,
1772
+ harnessCwd,
1773
+ signal,
1774
+ onUpdate,
1775
+ mapper,
1776
+ outcome,
1777
+ });
1627
1778
  }
1628
1779
  finally {
1629
1780
  this.activeToolContexts.delete(sessionId);
@@ -1654,47 +1805,22 @@ export class SessionEngine {
1654
1805
  mapper.finish();
1655
1806
  if (mapper.title !== undefined) {
1656
1807
  const title = mapper.title;
1657
- yield this.updateRecord(sessionId, (current) => (Object.assign(Object.assign({}, current), { title })));
1808
+ yield this.updateRecord(sessionId, current => (Object.assign(Object.assign({}, current), { title })));
1658
1809
  eventContext.session = Object.assign(Object.assign({}, eventContext.session), { title });
1659
1810
  }
1660
- const finalResult = (_c = outcome.result) !== null && _c !== void 0 ? _c : mapper.finalText;
1661
- const finalUsage = (_d = outcome.usage) !== null && _d !== void 0 ? _d : mapper.usage;
1811
+ const finalResult = (_d = outcome.result) !== null && _d !== void 0 ? _d : mapper.finalText;
1812
+ const finalUsage = (_e = outcome.usage) !== null && _e !== void 0 ? _e : mapper.usage;
1662
1813
  const finalCost = finalUsage === undefined
1663
1814
  ? undefined
1664
1815
  : yield this.estimateTurnCost({
1665
- model: (_e = this.project.agent.model) !== null && _e !== void 0 ? _e : DEFAULT_MODEL,
1816
+ model: (_f = this.project.agent.model) !== null && _f !== void 0 ? _f : DEFAULT_MODEL,
1666
1817
  usage: finalUsage,
1667
1818
  agentId: record.sdkAgentId,
1668
- conversationId: (_f = record.sdkAgentId) !== null && _f !== void 0 ? _f : sessionId,
1819
+ conversationId: (_g = record.sdkAgentId) !== null && _g !== void 0 ? _g : sessionId,
1669
1820
  });
1670
1821
  if (finalCost !== undefined) {
1671
1822
  outcome = Object.assign(Object.assign({}, outcome), { cost: finalCost });
1672
1823
  }
1673
- const authored = this.project.result;
1674
- if (outcome.status === "finished" && authored !== undefined) {
1675
- const settled = yield applyAuthoredResult({
1676
- definition: authored,
1677
- text: finalResult,
1678
- dryRun: record.dryRun === true,
1679
- ctx: {
1680
- session: eventContext.session,
1681
- channelState: turnChannelState,
1682
- host: this.hostForSession(sessionId),
1683
- artifacts: this.artifactsApi({ sessionId, turnId }),
1684
- stateRoot: this.stateRoot,
1685
- workspaceDir: harnessCwd,
1686
- },
1687
- });
1688
- if (!settled.ok) {
1689
- outcome = {
1690
- status: "error",
1691
- result: finalResult,
1692
- errorMessage: `turn output failed: ${settled.message}`,
1693
- usage: finalUsage,
1694
- cost: finalCost,
1695
- };
1696
- }
1697
- }
1698
1824
  if (outcome.status === "finished") {
1699
1825
  yield this.appendEvent(sessionId, {
1700
1826
  type: "turn.completed",
@@ -1715,21 +1841,21 @@ export class SessionEngine {
1715
1841
  status: outcome.status,
1716
1842
  message: interrupted
1717
1843
  ? "turn interrupted"
1718
- : ((_g = outcome.errorMessage) !== null && _g !== void 0 ? _g : (outcome.status === "cancelled"
1844
+ : ((_h = outcome.errorMessage) !== null && _h !== void 0 ? _h : (outcome.status === "cancelled"
1719
1845
  ? "turn cancelled"
1720
1846
  : "turn failed")),
1721
1847
  },
1722
1848
  }, eventContext);
1723
1849
  }
1724
1850
  const current = yield this.sessions.get(sessionId);
1725
- const mode = (_h = current === null || current === void 0 ? void 0 : current.mode) !== null && _h !== void 0 ? _h : record.mode;
1851
+ const mode = (_j = current === null || current === void 0 ? void 0 : current.mode) !== null && _j !== void 0 ? _j : record.mode;
1726
1852
  if (mode === "task") {
1727
1853
  yield this.appendEvent(sessionId, outcome.status === "finished"
1728
1854
  ? { type: "session.completed", turnId, data: {} }
1729
1855
  : {
1730
1856
  type: "session.failed",
1731
1857
  turnId,
1732
- data: { message: (_j = outcome.errorMessage) !== null && _j !== void 0 ? _j : "task failed" },
1858
+ data: { message: (_k = outcome.errorMessage) !== null && _k !== void 0 ? _k : "task failed" },
1733
1859
  }, eventContext);
1734
1860
  yield this.wipeCloudSessionWorkspace(sessionId);
1735
1861
  }
@@ -1743,6 +1869,65 @@ export class SessionEngine {
1743
1869
  return Object.assign(Object.assign({}, outcome), { result: finalResult, usage: finalUsage });
1744
1870
  });
1745
1871
  }
1872
+ /**
1873
+ * Run `defineResult` while the turn FS and tools are still up.
1874
+ * `ctx.reject` re-invokes `runTurn` on this turnId until commit
1875
+ * succeeds, throws, or the repair budget is gone.
1876
+ */
1877
+ settleAuthoredResult(args) {
1878
+ return __awaiter(this, void 0, void 0, function* () {
1879
+ var _a;
1880
+ const authored = this.project.result;
1881
+ if (args.outcome.status !== "finished" || authored === undefined) {
1882
+ return args.outcome;
1883
+ }
1884
+ let outcome = args.outcome;
1885
+ let usage = outcome.usage;
1886
+ let repairs = 0;
1887
+ while (true) {
1888
+ const settled = yield applyAuthoredResult({
1889
+ definition: authored,
1890
+ text: (_a = outcome.result) !== null && _a !== void 0 ? _a : args.mapper.pendingText,
1891
+ dryRun: args.record.dryRun === true,
1892
+ ctx: {
1893
+ session: args.eventContext.session,
1894
+ channelState: args.turnChannelState,
1895
+ host: this.hostForSession(args.record.sessionId),
1896
+ artifacts: this.artifactsApi({
1897
+ sessionId: args.record.sessionId,
1898
+ turnId: args.turnId,
1899
+ }),
1900
+ stateRoot: this.stateRoot,
1901
+ workspaceDir: args.harnessCwd,
1902
+ },
1903
+ });
1904
+ if (settled.ok) {
1905
+ return Object.assign(Object.assign({}, outcome), { result: settled.text, usage });
1906
+ }
1907
+ if (settled.kind === "error" || repairs >= RESULT_REPAIR_BUDGET) {
1908
+ return {
1909
+ status: "error",
1910
+ result: outcome.result,
1911
+ errorMessage: `turn output failed: ${settled.message}`,
1912
+ usage,
1913
+ };
1914
+ }
1915
+ repairs += 1;
1916
+ // Close the rejected stream without posting it (empty `stop`)
1917
+ // so Slack does not append a repair onto that block, and so an
1918
+ // empty repair cannot recommit `lastAssistantText`.
1919
+ args.mapper.abandonPendingText();
1920
+ this.logger(`[session] ${args.record.sessionId} ${args.turnId} result rejected; repairing (${repairs}/${RESULT_REPAIR_BUDGET})`);
1921
+ const repairRequest = yield this.buildTurnRequest(args.record, args.turnId, resultRepairPrompt(settled.message), false, args.emit, args.eventContext, args.onUpdate, args.signal);
1922
+ const repaired = yield this.runTurnExecute(args.record, args.turnId, () => this.runner.runTurn(repairRequest));
1923
+ usage = addTurnUsage(usage, repaired.usage);
1924
+ if (repaired.status !== "finished") {
1925
+ return Object.assign(Object.assign({}, repaired), { usage });
1926
+ }
1927
+ outcome = Object.assign(Object.assign({}, repaired), { usage });
1928
+ }
1929
+ });
1930
+ }
1746
1931
  /**
1747
1932
  * Sync authored skills onto the Agent Store at `skills/<name>/…` (hosted)
1748
1933
  * or `agent-serve/<agent>/skills/<name>/…` (personal-key local+cloud)
@@ -1821,7 +2006,7 @@ export class SessionEngine {
1821
2006
  }
1822
2007
  clearPendingWorkspaceFiles(sessionId, pending) {
1823
2008
  return __awaiter(this, void 0, void 0, function* () {
1824
- yield this.updateRecord(sessionId, (current) => (Object.assign(Object.assign({}, current), { pendingWorkspaceFiles: current.pendingWorkspaceFiles === pending
2009
+ yield this.updateRecord(sessionId, current => (Object.assign(Object.assign({}, current), { pendingWorkspaceFiles: current.pendingWorkspaceFiles === pending
1825
2010
  ? undefined
1826
2011
  : current.pendingWorkspaceFiles })));
1827
2012
  });
@@ -1843,7 +2028,7 @@ export class SessionEngine {
1843
2028
  if (inFlight !== undefined) {
1844
2029
  return inFlight;
1845
2030
  }
1846
- let sync = run().then(() => true, (error) => {
2031
+ let sync = run().then(() => true, error => {
1847
2032
  this.logger(`[${surface}] ${store.label} sync failed: ${error instanceof Error ? error.message : String(error)}`);
1848
2033
  return false;
1849
2034
  });
@@ -1858,11 +2043,17 @@ export class SessionEngine {
1858
2043
  /**
1859
2044
  * Hosted deployments own the deployment store. Local `serve`/`run` with
1860
2045
  * a personal API key writes into the USER store under `agent-serve/`.
2046
+ * A persistent deployment's version container has no cloud store at all:
2047
+ * its state directory is the durable copy, and its service-account key
2048
+ * must not be mistaken for a personal one.
1861
2049
  */
1862
2050
  cloudStore() {
1863
2051
  const v2Hosting = resolveAgentV2Hosting({
1864
2052
  architecture: this.project.agent.architecture,
1865
2053
  });
2054
+ if (v2Hosting.kind === "cursor-managed-persistent") {
2055
+ return undefined;
2056
+ }
1866
2057
  const deployment = {
1867
2058
  mountPath: DEPLOYMENT_STORE_MOUNT_PATH,
1868
2059
  skillsPrefix: agentStoreKeys.skillsPrefix(),
@@ -1892,7 +2083,7 @@ export class SessionEngine {
1892
2083
  }
1893
2084
  return undefined;
1894
2085
  }
1895
- buildTurnRequest(record, turnId, prompt, isFirstTurn, instructionsInvisibleToHarness, emit, eventContext, onUpdate, signal, images) {
2086
+ buildTurnRequest(record, turnId, prompt, isFirstTurn, emit, eventContext, onUpdate, signal, images) {
1896
2087
  return __awaiter(this, void 0, void 0, function* () {
1897
2088
  var _a, _b, _c;
1898
2089
  var _d;
@@ -1926,7 +2117,7 @@ export class SessionEngine {
1926
2117
  // per-session tools or identity is worse than a refused one. Non-local
1927
2118
  // agents already fail discovery; this guards hybrid agents' per-send
1928
2119
  // cloud sessions.
1929
- const perSessionConnection = agent.connections.find((connection) => connection.advertiseTools === true || connection.auth !== undefined);
2120
+ const perSessionConnection = agent.connections.find(connection => connection.advertiseTools === true || connection.auth !== undefined);
1930
2121
  if (runtime !== "local" && perSessionConnection !== undefined) {
1931
2122
  throw new Error(`Agent "${agent.name}" connection "${perSessionConnection.name}" uses advertiseTools/auth, which only run on local turns. Refusing the session rather than running it without the connection's tools or identity.`);
1932
2123
  }
@@ -1967,7 +2158,7 @@ export class SessionEngine {
1967
2158
  ? []
1968
2159
  : this.withTurnScratchTools(authoredRoot
1969
2160
  ? fileTools
1970
- : fileTools.filter((tool) => tool.name !== "SemanticSearch"), record.sessionId);
2161
+ : fileTools.filter(tool => tool.name !== "SemanticSearch"), record.sessionId);
1971
2162
  let turnPrompt = prompt;
1972
2163
  if (isFirstTurn) {
1973
2164
  const contextBlock = buildSessionContextBlock({
@@ -2029,6 +2220,7 @@ export class SessionEngine {
2029
2220
  }
2030
2221
  }
2031
2222
  else if (pending !== undefined && Object.keys(pending).length > 0) {
2223
+ this.logger(`[workspace] no cloud store on this hosting; dropping workspaceFiles for session ${record.sessionId}: ${Object.keys(pending).join(", ")}`);
2032
2224
  yield this.clearPendingWorkspaceFiles(record.sessionId, pending);
2033
2225
  }
2034
2226
  if (isFirstTurn && hosted) {
@@ -2036,33 +2228,23 @@ export class SessionEngine {
2036
2228
  }
2037
2229
  if (preamble !== "" || sections.length > 0) {
2038
2230
  turnPrompt = [preamble, ...sections, turnPrompt]
2039
- .filter((part) => part !== "")
2231
+ .filter(part => part !== "")
2040
2232
  .join("\n\n");
2041
2233
  }
2042
2234
  }
2043
2235
  else if (isFirstTurn && runtime === "local" && authoredRoot) {
2044
- // Virtual roots skip materialize, so AGENTS.md never lands on disk.
2045
- // Ship the same preamble the borrowed-cwd local path uses.
2046
- const preamble = buildAgentsMdContent(Object.assign(Object.assign({}, agent), { tools: [...agent.tools, ...synthesized] }), { includeScripts: true });
2047
- const workspaceInfo = `<user_info>\nWorkspace Path: /\n</user_info>`;
2048
- turnPrompt =
2049
- preamble === ""
2050
- ? `${workspaceInfo}\n\n${turnPrompt}`
2051
- : `${workspaceInfo}\n\n${preamble}\n\n${turnPrompt}`;
2052
- }
2053
- else if (isFirstTurn &&
2054
- runtime === "local" &&
2055
- instructionsInvisibleToHarness) {
2056
- // Local workspace whose AGENTS.md the harness will not load. With a
2057
- // borrowed harness cwd, agent tool scripts live only in the durable
2058
- // scaffold dir — embed bodies like cloud. Otherwise the catalog can
2059
- // reference on-disk paths under the harness cwd. Grokbot turns are
2060
- // excluded: their instructions ride the request's `instructions`
2061
- // field into the Sand system prompt instead.
2062
- const includeScripts = this.hasBorrowedWorkspace(record);
2063
- const preamble = buildAgentsMdContent(agent, { includeScripts });
2064
- turnPrompt = `${preamble}\n\n${turnPrompt}`;
2236
+ // The harness reports no path for a root it never mounted.
2237
+ turnPrompt = `<user_info>\nWorkspace Path: /\n</user_info>\n\n${turnPrompt}`;
2065
2238
  }
2239
+ // A virtual root has no scaffold dir either, so its catalog carries the
2240
+ // synthesized file tools and embedded script bodies.
2241
+ const localInstructions = runtime === "local"
2242
+ ? authoredRoot
2243
+ ? buildAgentsMdContent(Object.assign(Object.assign({}, agent), { tools: [...agent.tools, ...synthesized] }), { includeScripts: true })
2244
+ : buildAgentsMdContent(agent, {
2245
+ includeScripts: this.hasBorrowedWorkspace(record),
2246
+ })
2247
+ : undefined;
2066
2248
  return Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({ sessionId: record.sessionId }, (record.sdkAgentId === undefined
2067
2249
  ? {}
2068
2250
  : { sdkAgentId: record.sdkAgentId })), { workspaceDir: this.harnessCwd(record), sandbox: authoredRoot ? false : ((_c = agent.local) === null || _c === void 0 ? void 0 : _c.sandbox) === true }), (runtime === "local" && harnessTools !== undefined
@@ -2071,30 +2253,35 @@ export class SessionEngine {
2071
2253
  : { tools: harnessTools.tools })), (harnessTools.disallowedTools === undefined
2072
2254
  ? {}
2073
2255
  : { disallowedTools: harnessTools.disallowedTools })) : {})), { runnerStateDir: join(this.stateRoot, "runner"), prompt: turnPrompt, isFirstTurn }), (images !== undefined && images.length > 0 ? { images } : {})), (agent.model === undefined ? {} : { model: agent.model })), { runtime, agentName: agent.name }), (mergedCloud === undefined ? {} : { cloud: mergedCloud })), {
2074
- // The hosted Grok Bot harness reads no workspace AGENTS.md: grokbot
2075
- // turns carry the composed instructions into the hosted session,
2076
- // which surfaces them in the Sand system prompt. The box never sees
2077
- // the local session workspace, so agent-tool script bodies are
2078
- // always embedded same rule as the cloud first-prompt preamble.
2256
+ // Local turns send the composed instructions as the harness system
2257
+ // prompt; grokbot turns carry them into the hosted session, which
2258
+ // surfaces them in the Sand system prompt. Cloud turns inline them into
2259
+ // the first prompt above instead. Script bodies are embedded whenever
2260
+ // the harness cannot reach the scaffold dir: always for grokbot (the
2261
+ // box never sees the session workspace) and for a borrowed local cwd
2262
+ // (PR worktree, shared checkout); otherwise the catalog references the
2263
+ // on-disk paths under the harness cwd.
2079
2264
  instructions: runtime === "grokbot"
2080
2265
  ? buildAgentsMdContent(agent, { includeScripts: true })
2081
- : undefined }), (runtime === "cloud" && !isCursorHostedFilesAvailable()
2266
+ : localInstructions }), (runtime === "cloud" && !isCursorHostedFilesAvailable()
2082
2267
  ? { agentServeAgent: this.project.name }
2083
2268
  : {})), { customTools: runtime === "local"
2084
2269
  ? yield this.buildCustomTools(record, turnId, emit, synthesized)
2085
- : {}, mcpServers: this.buildMcpServers(runtime, record.sessionId, yield this.evaluateConnectionAuth(record)) }), (runtime === "local" && this.hasAttachedAuthedConnections()
2270
+ : {}, mcpServers: this.buildMcpServers(runtime, record.sessionId, yield this.evaluateConnectionAuth(record)) }), (runtime === "local" &&
2271
+ (this.hasAttachedAuthedConnections() ||
2272
+ this.project.agent.connections.some(connection => isCursorAccountTransport(connection.transport)))
2086
2273
  ? { perSendMcpServers: true }
2087
2274
  : {})), { subagents: buildRunnerSubagents(agent), onUpdate,
2088
2275
  signal,
2089
2276
  // Local follow-ups expire any lingering active run so a preempted turn
2090
2277
  // (or one orphaned by a crashed process) never blocks this send.
2091
- forceExpireActiveRun: runtime === "local" && !isFirstTurn, onRequestId: (requestId) => {
2278
+ forceExpireActiveRun: runtime === "local" && !isFirstTurn, onRequestId: requestId => {
2092
2279
  emit({ type: "turn.bound", data: { requestId } });
2093
2280
  }, onSdkAgentId: (sdkAgentId) => __awaiter(this, void 0, void 0, function* () {
2094
2281
  if (record.sdkAgentId === sdkAgentId) {
2095
2282
  return;
2096
2283
  }
2097
- yield this.updateRecord(record.sessionId, (current) => (Object.assign(Object.assign({}, current), { sdkAgentId })));
2284
+ yield this.updateRecord(record.sessionId, current => (Object.assign(Object.assign({}, current), { sdkAgentId })));
2098
2285
  record.sdkAgentId = sdkAgentId;
2099
2286
  eventContext.session = Object.assign(Object.assign({}, eventContext.session), { sdkAgentId });
2100
2287
  yield this.appendEvent(record.sessionId, {
@@ -2173,9 +2360,9 @@ export class SessionEngine {
2173
2360
  // Advertised connections surface as named server tools instead of an
2174
2361
  // attached MCP server (each tool appears exactly once).
2175
2362
  const advertisedNames = new Set(this.project.agent.connections
2176
- .filter((connection) => connection.advertiseTools === true)
2177
- .map((connection) => connection.name));
2178
- const hostConnectionNames = new Set(((_a = this.project.agent.hostConnections) !== null && _a !== void 0 ? _a : []).map((connection) => connection.name));
2363
+ .filter(connection => connection.advertiseTools === true)
2364
+ .map(connection => connection.name));
2365
+ const hostConnectionNames = new Set(((_a = this.project.agent.hostConnections) !== null && _a !== void 0 ? _a : []).map(connection => connection.name));
2179
2366
  const bridgedNames = new Set(runtime === "cloud" &&
2180
2367
  sessionId !== undefined &&
2181
2368
  this.cloudServerToolsConnection !== undefined &&
@@ -2184,7 +2371,7 @@ export class SessionEngine {
2184
2371
  : []);
2185
2372
  assertCloudCanHonorAccountServersFilters({
2186
2373
  runtime,
2187
- resolvedConnections: this.resolvedConnections.filter((resolved) => !advertisedNames.has(resolved.name) &&
2374
+ resolvedConnections: this.resolvedConnections.filter(resolved => !advertisedNames.has(resolved.name) &&
2188
2375
  !hostConnectionNames.has(resolved.name)),
2189
2376
  bridgedNames,
2190
2377
  });
@@ -2245,6 +2432,18 @@ export class SessionEngine {
2245
2432
  }
2246
2433
  continue;
2247
2434
  }
2435
+ const authored = this.authoredConnection(resolved.name);
2436
+ if (sessionId !== undefined &&
2437
+ authored !== undefined &&
2438
+ isCursorAccountTransport(authored.transport)) {
2439
+ const bound = new URL(url);
2440
+ bound.searchParams.set("agentkitSessionId", sessionId);
2441
+ servers[resolved.name] = {
2442
+ url: bound.toString(),
2443
+ headers: resolved.headers,
2444
+ };
2445
+ continue;
2446
+ }
2248
2447
  servers[resolved.name] = {
2249
2448
  url,
2250
2449
  headers: resolved.headers,
@@ -2253,7 +2452,7 @@ export class SessionEngine {
2253
2452
  if (runtime === "cloud" &&
2254
2453
  sessionId !== undefined &&
2255
2454
  this.cloudServerToolsConnection !== undefined &&
2256
- this.project.agent.tools.some((tool) => tool.execution === "server")) {
2455
+ this.project.agent.tools.some(tool => tool.execution === "server")) {
2257
2456
  if (servers[SERVER_TOOLS_MCP_SERVER_NAME] !== undefined) {
2258
2457
  throw new Error(`MCP connection name "${SERVER_TOOLS_MCP_SERVER_NAME}" is reserved for authored server tools on cloud turns.`);
2259
2458
  }
@@ -2273,7 +2472,7 @@ export class SessionEngine {
2273
2472
  * ride every send instead of being pinned on the cached agent handle.
2274
2473
  */
2275
2474
  hasAttachedAuthedConnections() {
2276
- return this.project.agent.connections.some((connection) => connection.auth !== undefined && connection.advertiseTools !== true);
2475
+ return this.project.agent.connections.some(connection => connection.auth !== undefined && connection.advertiseTools !== true);
2277
2476
  }
2278
2477
  /**
2279
2478
  * Evaluate per-session connection auth (`defineConnection({ auth })`)
@@ -2284,7 +2483,7 @@ export class SessionEngine {
2284
2483
  */
2285
2484
  evaluateConnectionAuth(record) {
2286
2485
  return __awaiter(this, void 0, void 0, function* () {
2287
- const authed = this.project.agent.connections.filter((connection) => connection.auth !== undefined && connection.advertiseTools !== true);
2486
+ const authed = this.project.agent.connections.filter(connection => connection.auth !== undefined && connection.advertiseTools !== true);
2288
2487
  if (authed.length === 0) {
2289
2488
  return undefined;
2290
2489
  }
@@ -2372,7 +2571,7 @@ export class SessionEngine {
2372
2571
  if (active === undefined) {
2373
2572
  return toolErrorResult(`Session ${sessionId} has no active turn for tool "${toolName}".`);
2374
2573
  }
2375
- const tool = this.project.agent.tools.find((candidate) => candidate.name === toolName && candidate.execution === "server");
2574
+ const tool = this.project.agent.tools.find(candidate => candidate.name === toolName && candidate.execution === "server");
2376
2575
  if (tool === undefined) {
2377
2576
  return toolErrorResult(`Unknown server tool "${toolName}".`);
2378
2577
  }
@@ -2526,8 +2725,8 @@ export class SessionEngine {
2526
2725
  requestedAt,
2527
2726
  };
2528
2727
  const resolutionPromise = this.approvals.wait(args.sessionId, pendingRecord);
2529
- yield this.updateRecord(args.sessionId, (current) => { var _a; return (Object.assign(Object.assign({}, current), { pendingApprovals: [
2530
- ...((_a = current.pendingApprovals) !== null && _a !== void 0 ? _a : []).filter((item) => item.callId !== args.callId),
2728
+ yield this.updateRecord(args.sessionId, current => { var _a; return (Object.assign(Object.assign({}, current), { pendingApprovals: [
2729
+ ...((_a = current.pendingApprovals) !== null && _a !== void 0 ? _a : []).filter(item => item.callId !== args.callId),
2531
2730
  pendingRecord,
2532
2731
  ] })); });
2533
2732
  args.emit({
@@ -2540,7 +2739,7 @@ export class SessionEngine {
2540
2739
  });
2541
2740
  this.logger(`[session] tool ${args.toolName} awaiting approval (${args.callId})`);
2542
2741
  const { decision, by } = yield resolutionPromise;
2543
- yield this.updateRecord(args.sessionId, (current) => { var _a; return (Object.assign(Object.assign({}, current), { pendingApprovals: ((_a = current.pendingApprovals) !== null && _a !== void 0 ? _a : []).filter((item) => item.callId !== args.callId) })); });
2742
+ yield this.updateRecord(args.sessionId, current => { var _a; return (Object.assign(Object.assign({}, current), { pendingApprovals: ((_a = current.pendingApprovals) !== null && _a !== void 0 ? _a : []).filter(item => item.callId !== args.callId) })); });
2544
2743
  args.emit({
2545
2744
  type: "action.approval_resolved",
2546
2745
  data: Object.assign({ callId: args.callId, toolName: args.toolName, decision }, (by === undefined ? {} : { by })),
@@ -2557,7 +2756,7 @@ export class SessionEngine {
2557
2756
  current.pendingApprovals.length === 0) {
2558
2757
  return;
2559
2758
  }
2560
- yield this.updateRecord(sessionId, (record) => (Object.assign(Object.assign({}, record), { pendingApprovals: [] })));
2759
+ yield this.updateRecord(sessionId, record => (Object.assign(Object.assign({}, record), { pendingApprovals: [] })));
2561
2760
  });
2562
2761
  }
2563
2762
  /** Pending tool approvals for a session (live waiters ∪ persisted). */
@@ -2594,7 +2793,7 @@ export class SessionEngine {
2594
2793
  if (!samePrincipal(record.auth, ownershipAuth)) {
2595
2794
  throw new SessionAuthError(sessionId);
2596
2795
  }
2597
- const pending = (_b = ((_a = record.pendingApprovals) !== null && _a !== void 0 ? _a : []).find((item) => item.callId === callId)) !== null && _b !== void 0 ? _b : this.approvals.list(sessionId).find((item) => item.callId === callId);
2796
+ const pending = (_b = ((_a = record.pendingApprovals) !== null && _a !== void 0 ? _a : []).find(item => item.callId === callId)) !== null && _b !== void 0 ? _b : this.approvals.list(sessionId).find(item => item.callId === callId);
2598
2797
  if (pending === undefined) {
2599
2798
  throw new ApprovalNotFoundError(sessionId, callId);
2600
2799
  }
@@ -2608,21 +2807,21 @@ export class SessionEngine {
2608
2807
  }
2609
2808
  removePendingApproval(sessionId, callId) {
2610
2809
  return __awaiter(this, void 0, void 0, function* () {
2611
- yield this.updateRecord(sessionId, (current) => { var _a; return (Object.assign(Object.assign({}, current), { pendingApprovals: ((_a = current.pendingApprovals) !== null && _a !== void 0 ? _a : []).filter((item) => item.callId !== callId) })); });
2810
+ yield this.updateRecord(sessionId, current => { var _a; return (Object.assign(Object.assign({}, current), { pendingApprovals: ((_a = current.pendingApprovals) !== null && _a !== void 0 ? _a : []).filter(item => item.callId !== callId) })); });
2612
2811
  });
2613
2812
  }
2614
2813
  wrapMcp(inner) {
2615
2814
  return {
2616
2815
  names: () => inner.names(),
2617
- listTools: (name) => this.withMcpAuth(name, () => inner.listTools(name)),
2816
+ listTools: name => this.withMcpAuth(name, () => inner.listTools(name)),
2618
2817
  callTool: (name, tool, args) => this.withMcpAuth(name, () => inner.callTool(name, tool, args)),
2619
2818
  };
2620
2819
  }
2621
2820
  advertiseMcp() {
2622
2821
  return {
2623
- listTools: (name) => this.withMcpListAuth(name, () => this.mcpHost.listTools(name)),
2822
+ listTools: name => this.withMcpListAuth(name, () => this.mcpHost.listTools(name)),
2624
2823
  callTool: (name, tool, args) => this.withMcpAuth(name, () => this.mcpHost.callTool(name, tool, args)),
2625
- oneOff: (connection) => {
2824
+ oneOff: connection => {
2626
2825
  const inner = this.mcpHost.oneOff(connection);
2627
2826
  return {
2628
2827
  listTools: () => this.withMcpListAuth(connection.name, () => inner.listTools()),
@@ -2743,8 +2942,8 @@ export class SessionEngine {
2743
2942
  requestedAt,
2744
2943
  };
2745
2944
  const resolutionPromise = this.auths.wait(args.sessionId, pendingRecord);
2746
- yield this.updateRecord(args.sessionId, (current) => { var _a; return (Object.assign(Object.assign({}, current), { pendingAuths: [
2747
- ...((_a = current.pendingAuths) !== null && _a !== void 0 ? _a : []).filter((item) => item.callId !== args.callId),
2945
+ yield this.updateRecord(args.sessionId, current => { var _a; return (Object.assign(Object.assign({}, current), { pendingAuths: [
2946
+ ...((_a = current.pendingAuths) !== null && _a !== void 0 ? _a : []).filter(item => item.callId !== args.callId),
2748
2947
  pendingRecord,
2749
2948
  ] })); });
2750
2949
  args.emit({
@@ -2758,7 +2957,7 @@ export class SessionEngine {
2758
2957
  });
2759
2958
  this.logger(`[session] tool ${args.toolName} awaiting MCP auth ${args.connection} (${args.callId})`);
2760
2959
  const { decision, by } = yield resolutionPromise;
2761
- yield this.updateRecord(args.sessionId, (current) => { var _a; return (Object.assign(Object.assign({}, current), { pendingAuths: ((_a = current.pendingAuths) !== null && _a !== void 0 ? _a : []).filter((item) => item.callId !== args.callId) })); });
2960
+ yield this.updateRecord(args.sessionId, current => { var _a; return (Object.assign(Object.assign({}, current), { pendingAuths: ((_a = current.pendingAuths) !== null && _a !== void 0 ? _a : []).filter(item => item.callId !== args.callId) })); });
2762
2961
  args.emit({
2763
2962
  type: "action.auth_resolved",
2764
2963
  data: {
@@ -2782,7 +2981,7 @@ export class SessionEngine {
2782
2981
  current.pendingAuths.length === 0) {
2783
2982
  return;
2784
2983
  }
2785
- yield this.updateRecord(sessionId, (record) => (Object.assign(Object.assign({}, record), { pendingAuths: [] })));
2984
+ yield this.updateRecord(sessionId, record => (Object.assign(Object.assign({}, record), { pendingAuths: [] })));
2786
2985
  });
2787
2986
  }
2788
2987
  listPendingAuths(sessionId) {
@@ -2810,7 +3009,7 @@ export class SessionEngine {
2810
3009
  if (!samePrincipal(record.auth, ownershipAuth)) {
2811
3010
  throw new SessionAuthError(sessionId);
2812
3011
  }
2813
- const pending = (_b = ((_a = record.pendingAuths) !== null && _a !== void 0 ? _a : []).find((item) => item.callId === callId)) !== null && _b !== void 0 ? _b : this.auths.list(sessionId).find((item) => item.callId === callId);
3012
+ const pending = (_b = ((_a = record.pendingAuths) !== null && _a !== void 0 ? _a : []).find(item => item.callId === callId)) !== null && _b !== void 0 ? _b : this.auths.list(sessionId).find(item => item.callId === callId);
2814
3013
  if (pending === undefined) {
2815
3014
  throw new AuthNotFoundError(sessionId, callId);
2816
3015
  }
@@ -2827,7 +3026,7 @@ export class SessionEngine {
2827
3026
  }
2828
3027
  removePendingAuth(sessionId, callId) {
2829
3028
  return __awaiter(this, void 0, void 0, function* () {
2830
- yield this.updateRecord(sessionId, (current) => { var _a; return (Object.assign(Object.assign({}, current), { pendingAuths: ((_a = current.pendingAuths) !== null && _a !== void 0 ? _a : []).filter((item) => item.callId !== callId) })); });
3029
+ yield this.updateRecord(sessionId, current => { var _a; return (Object.assign(Object.assign({}, current), { pendingAuths: ((_a = current.pendingAuths) !== null && _a !== void 0 ? _a : []).filter(item => item.callId !== callId) })); });
2831
3030
  });
2832
3031
  }
2833
3032
  runWithMcpPark(sessionId, toolName, fn) {
@@ -2977,16 +3176,16 @@ export class SessionEngine {
2977
3176
  */
2978
3177
  describeCatalogTool(toolName_1) {
2979
3178
  return __awaiter(this, arguments, void 0, function* (toolName, options = {}) {
2980
- const authored = this.project.agent.tools.find((tool) => tool.name === toolName);
3179
+ const authored = this.project.agent.tools.find(tool => tool.name === toolName);
2981
3180
  if (authored !== undefined) {
2982
3181
  return { tool: authored };
2983
3182
  }
2984
3183
  const catalog = yield this.listCatalogTools(options);
2985
- const tool = catalog.tools.find((entry) => entry.name === toolName);
3184
+ const tool = catalog.tools.find(entry => entry.name === toolName);
2986
3185
  if (tool === undefined) {
2987
3186
  return {
2988
3187
  tool: undefined,
2989
- availableTools: catalog.tools.map((entry) => entry.name),
3188
+ availableTools: catalog.tools.map(entry => entry.name),
2990
3189
  connectionErrors: catalog.connectionErrors,
2991
3190
  };
2992
3191
  }
@@ -3024,9 +3223,9 @@ export class SessionEngine {
3024
3223
  if (native !== undefined) {
3025
3224
  return native;
3026
3225
  }
3027
- let tool = this.project.agent.tools.find((t) => t.name === toolName);
3226
+ let tool = this.project.agent.tools.find(t => t.name === toolName);
3028
3227
  if (tool === undefined &&
3029
- this.project.agent.connections.some((c) => c.advertiseTools === true)) {
3228
+ this.project.agent.connections.some(c => c.advertiseTools === true)) {
3030
3229
  // Advertised passthroughs are ordinary server tools in the session's
3031
3230
  // namespace; resolve the live listing so direct calls address them by
3032
3231
  // the same model-facing name a turn would. A listing failure fails
@@ -3036,12 +3235,12 @@ export class SessionEngine {
3036
3235
  session,
3037
3236
  hostMcp: this.advertiseMcp(),
3038
3237
  });
3039
- tool = advertised.find((t) => t.name === toolName);
3238
+ tool = advertised.find(t => t.name === toolName);
3040
3239
  }
3041
3240
  if (tool === undefined) {
3042
3241
  throw new UnknownToolError(toolName, this.project.agent.tools
3043
- .filter((t) => t.execution === "server")
3044
- .map((t) => t.name));
3242
+ .filter(t => t.execution === "server")
3243
+ .map(t => t.name));
3045
3244
  }
3046
3245
  const execute = tool.definition.execute;
3047
3246
  if (tool.execution !== "server" || typeof execute !== "function") {
@@ -3320,7 +3519,7 @@ export class SessionEngine {
3320
3519
  return __awaiter(this, void 0, void 0, function* () {
3321
3520
  try {
3322
3521
  const listed = yield this.host.mcp.listTools(connectionName);
3323
- return listed.find((tool) => tool.name === toolName);
3522
+ return listed.find(tool => tool.name === toolName);
3324
3523
  }
3325
3524
  catch (_a) {
3326
3525
  return undefined;
@@ -3347,7 +3546,7 @@ export class SessionEngine {
3347
3546
  const chain = (_b = this.dispatchChains.get(sessionId)) !== null && _b !== void 0 ? _b : Promise.resolve();
3348
3547
  const next = chain
3349
3548
  .then(() => this.dispatchEvent(sessionId, event, context))
3350
- .catch((error) => {
3549
+ .catch(error => {
3351
3550
  this.logger(`[agent-sdk] event dispatch failed for ${sessionId}: ${describeError(error)}`);
3352
3551
  })
3353
3552
  .then(() => {
@@ -3406,12 +3605,12 @@ export class SessionEngine {
3406
3605
  }
3407
3606
  if (context === undefined || channelStateBefore === undefined) {
3408
3607
  // Handlers mutate live channel state in place; save the current record.
3409
- yield this.updateRecord(sessionId, (current) => (Object.assign({}, current)));
3608
+ yield this.updateRecord(sessionId, current => (Object.assign({}, current)));
3410
3609
  }
3411
3610
  else {
3412
3611
  const updatedState = channelCtx.state;
3413
3612
  context.channelState = updatedState;
3414
- yield this.updateRecord(sessionId, (current) => (Object.assign(Object.assign({}, current), { channelState: mergeChannelStateMutation({
3613
+ yield this.updateRecord(sessionId, current => (Object.assign(Object.assign({}, current), { channelState: mergeChannelStateMutation({
3415
3614
  current: current.channelState,
3416
3615
  before: channelStateBefore,
3417
3616
  after: updatedState,
@@ -3484,8 +3683,10 @@ export class SessionEngine {
3484
3683
  var _a;
3485
3684
  // Drain admission first so pendingTurns → activeTurns is visible before we
3486
3685
  // decide the session is idle (reminders use this for queueBehindTurn).
3487
- // The active lifecycle promise also awaits coalesce drain + the drained
3488
- // follow-up's admission, so Slack coalesced waiters see the resume turn.
3686
+ // Wait for coalesce drain and any successor turn so hosted execute does
3687
+ // not park mid-follow-up, but report the root turn's outcome: a drained
3688
+ // successor failure must not un-ACK an already-finished owner.
3689
+ let root;
3489
3690
  for (;;) {
3490
3691
  const chain = this.admissionChains.get(sessionId);
3491
3692
  if (chain !== undefined) {
@@ -3493,14 +3694,15 @@ export class SessionEngine {
3493
3694
  }
3494
3695
  const active = this.activeTurns.get(sessionId);
3495
3696
  if (active !== undefined) {
3496
- yield active;
3697
+ const outcome = yield active;
3698
+ root !== null && root !== void 0 ? root : (root = outcome);
3497
3699
  continue;
3498
3700
  }
3499
3701
  const dispatch = this.dispatchChains.get(sessionId);
3500
3702
  if (dispatch !== undefined) {
3501
3703
  yield dispatch.catch(() => { });
3502
3704
  }
3503
- return (_a = this.lastOutcomes.get(sessionId)) !== null && _a !== void 0 ? _a : { status: "finished" };
3705
+ return (_a = root !== null && root !== void 0 ? root : this.lastOutcomes.get(sessionId)) !== null && _a !== void 0 ? _a : { status: "finished" };
3504
3706
  }
3505
3707
  });
3506
3708
  }
@@ -3534,7 +3736,7 @@ export class SessionEngine {
3534
3736
  return records;
3535
3737
  }
3536
3738
  const owned = yield this.ownedSessionIds(caller);
3537
- return records.filter((record) => record.sessionId !== undefined && owned.has(record.sessionId));
3739
+ return records.filter(record => record.sessionId !== undefined && owned.has(record.sessionId));
3538
3740
  });
3539
3741
  }
3540
3742
  /**
@@ -3565,8 +3767,8 @@ export class SessionEngine {
3565
3767
  return __awaiter(this, void 0, void 0, function* () {
3566
3768
  const sessions = yield this.sessions.list();
3567
3769
  return new Set(sessions
3568
- .filter((record) => samePrincipal(record.auth, caller))
3569
- .map((record) => record.sessionId));
3770
+ .filter(record => samePrincipal(record.auth, caller))
3771
+ .map(record => record.sessionId));
3570
3772
  });
3571
3773
  }
3572
3774
  /**
@@ -3686,8 +3888,8 @@ export class SessionEngine {
3686
3888
  }
3687
3889
  summarizeSessionRecords(records, caller, includeAll) {
3688
3890
  return records
3689
- .filter((record) => includeAll || samePrincipal(record.auth, caller))
3690
- .map((record) => {
3891
+ .filter(record => includeAll || samePrincipal(record.auth, caller))
3892
+ .map(record => {
3691
3893
  var _a;
3692
3894
  const links = sessionExternalLinks(record);
3693
3895
  return {
@@ -3737,7 +3939,7 @@ export class SessionEngine {
3737
3939
  if (existing === undefined) {
3738
3940
  throw new Error(`Unknown session: ${sessionId}`);
3739
3941
  }
3740
- const record = yield this.updateRecord(sessionId, (current) => (Object.assign(Object.assign({}, current), { turnCount: current.turnCount + 1 })));
3942
+ const record = yield this.updateRecord(sessionId, current => (Object.assign(Object.assign({}, current), { turnCount: current.turnCount + 1 })));
3741
3943
  const turnId = `turn_${record.turnCount}`;
3742
3944
  yield this.appendEvent(sessionId, {
3743
3945
  type: "turn.started",
@@ -3852,7 +4054,7 @@ export class SessionEngine {
3852
4054
  return pending;
3853
4055
  }
3854
4056
  const work = this.runCloudTurnCostBackfill(sessionId)
3855
- .catch((error) => {
4057
+ .catch(error => {
3856
4058
  this.logger(`[agent-sdk] cloud cost backfill failed for ${sessionId}: ${describeError(error)}`);
3857
4059
  })
3858
4060
  .finally(() => {
@@ -3867,9 +4069,9 @@ export class SessionEngine {
3867
4069
  var _b, _c;
3868
4070
  const log = yield this.logs.get(sessionId);
3869
4071
  const events = yield log.snapshot(0);
3870
- if (!events.some((event) => isUnpricedCompletedTurn(event))) {
4072
+ if (!events.some(event => isUnpricedCompletedTurn(event))) {
3871
4073
  if (!this.isTurnRunning(sessionId) &&
3872
- events.some((event) => event.type === "turn.completed")) {
4074
+ events.some(event => event.type === "turn.completed")) {
3873
4075
  this.cloudCostBackfillDone.add(sessionId);
3874
4076
  }
3875
4077
  return;
@@ -3896,7 +4098,7 @@ export class SessionEngine {
3896
4098
  }
3897
4099
  log.replace(i, next);
3898
4100
  }
3899
- if (!(yield log.snapshot(0)).some((event) => isUnpricedCompletedTurn(event))) {
4101
+ if (!(yield log.snapshot(0)).some(event => isUnpricedCompletedTurn(event))) {
3900
4102
  this.cloudCostBackfillDone.add(sessionId);
3901
4103
  }
3902
4104
  });
@@ -3905,7 +4107,7 @@ export class SessionEngine {
3905
4107
  return __awaiter(this, void 0, void 0, function* () {
3906
4108
  var _a;
3907
4109
  const previous = yield this.sessions.get(sessionId);
3908
- yield this.updateRecord(sessionId, (current) => (Object.assign(Object.assign({}, current), { continuationKey: token })));
4110
+ yield this.updateRecord(sessionId, current => (Object.assign(Object.assign({}, current), { continuationKey: token })));
3909
4111
  // Keep armed reminders addressed at the conversation across channel
3910
4112
  // continuation rotation.
3911
4113
  if ((previous === null || previous === void 0 ? void 0 : previous.continuationKey) != null &&
@@ -4020,7 +4222,7 @@ export class SessionEngine {
4020
4222
  // the lazy continuation-lookup path.
4021
4223
  const cutoff = Date.now() - policy.maxAgeMs;
4022
4224
  const candidates = loaded
4023
- .map((record) => ({
4225
+ .map(record => ({
4024
4226
  record,
4025
4227
  // Numeric timestamp for both the age filter and the sort; a
4026
4228
  // non-string updatedAt (e.g. a raw DB Date from an untyped sink)
@@ -4256,7 +4458,7 @@ function eventsNdjson(events) {
4256
4458
  if (events.length === 0) {
4257
4459
  return undefined;
4258
4460
  }
4259
- return `${events.map((event) => JSON.stringify(event)).join("\n")}\n`;
4461
+ return `${events.map(event => JSON.stringify(event)).join("\n")}\n`;
4260
4462
  }
4261
4463
  function subagentPrompt(subagent) {
4262
4464
  var _a;
@@ -4271,7 +4473,7 @@ function subagentPrompt(subagent) {
4271
4473
  * executor that turn will run on.
4272
4474
  */
4273
4475
  function buildRunnerSubagents(agent) {
4274
- return agent.subagents.map((subagent) => { var _a; return (Object.assign({ name: subagent.name, description: (_a = subagent.description) !== null && _a !== void 0 ? _a : subagent.name, prompt: subagentPrompt(subagent) }, (subagent.model === undefined ? {} : { model: subagent.model }))); });
4476
+ return agent.subagents.map(subagent => { var _a; return (Object.assign({ name: subagent.name, description: (_a = subagent.description) !== null && _a !== void 0 ? _a : subagent.name, prompt: subagentPrompt(subagent) }, (subagent.model === undefined ? {} : { model: subagent.model }))); });
4275
4477
  }
4276
4478
  function toolErrorResult(message) {
4277
4479
  return {
@@ -4287,7 +4489,7 @@ function defaultGetCloudUsage(sdkAgentId) {
4287
4489
  return {
4288
4490
  usage: mapSdkTokenUsage(billed.usage),
4289
4491
  cost: billed.cost,
4290
- runs: billed.runs.map((run) => ({
4492
+ runs: billed.runs.map(run => ({
4291
4493
  runId: run.runId,
4292
4494
  usage: mapSdkTokenUsage(run.usage),
4293
4495
  cost: run.cost,
@@ -4333,7 +4535,7 @@ function approvalResolverLabel(auth) {
4333
4535
  }
4334
4536
  /** Let the HTTP NDJSON writer flush before the next SDK update. */
4335
4537
  function yieldEventLoop() {
4336
- return new Promise((resolve) => {
4538
+ return new Promise(resolve => {
4337
4539
  setImmediate(resolve);
4338
4540
  });
4339
4541
  }