@cursor/bdk 0.2.9 → 0.2.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (569) hide show
  1. package/dist/artifacts.js +3 -5
  2. package/dist/bin/agent-serve.js +803 -812
  3. package/dist/channels/bitbucket/api.js +305 -321
  4. package/dist/channels/bitbucket/binding.js +97 -61
  5. package/dist/channels/bitbucket/bitbucket-channel.d.ts +15 -1
  6. package/dist/channels/bitbucket/bitbucket-channel.d.ts.map +1 -1
  7. package/dist/channels/bitbucket/bitbucket-channel.js +95 -42
  8. package/dist/channels/bitbucket/bitbucket-webhook.d.ts +11 -0
  9. package/dist/channels/bitbucket/bitbucket-webhook.d.ts.map +1 -1
  10. package/dist/channels/bitbucket/bitbucket-webhook.js +214 -204
  11. package/dist/channels/bitbucket/checks.js +9 -21
  12. package/dist/channels/bitbucket/cursor-account.js +1 -1
  13. package/dist/channels/bitbucket/defaults.js +14 -4
  14. package/dist/channels/bitbucket/events.js +1 -2
  15. package/dist/channels/bitbucket/index.d.ts +6 -2
  16. package/dist/channels/bitbucket/index.d.ts.map +1 -1
  17. package/dist/channels/bitbucket/index.js +6 -2
  18. package/dist/channels/bitbucket/replay.js +80 -56
  19. package/dist/channels/bitbucket/state.js +16 -7
  20. package/dist/channels/bitbucket/types.d.ts +11 -2
  21. package/dist/channels/bitbucket/types.d.ts.map +1 -1
  22. package/dist/channels/checks.js +18 -28
  23. package/dist/channels/deployments/deployments-channel.js +26 -34
  24. package/dist/channels/github/api.js +216 -210
  25. package/dist/channels/github/auth.d.ts +5 -1
  26. package/dist/channels/github/auth.d.ts.map +1 -1
  27. package/dist/channels/github/auth.js +157 -174
  28. package/dist/channels/github/binding.js +48 -39
  29. package/dist/channels/github/checks.js +9 -14
  30. package/dist/channels/github/cursor-account.js +6 -11
  31. package/dist/channels/github/defaults.js +105 -130
  32. package/dist/channels/github/forward.js +13 -17
  33. package/dist/channels/github/github-channel.d.ts +43 -2
  34. package/dist/channels/github/github-channel.d.ts.map +1 -1
  35. package/dist/channels/github/github-channel.js +1228 -958
  36. package/dist/channels/github/progress.js +145 -146
  37. package/dist/channels/github/replay.js +30 -39
  38. package/dist/channels/github/state.js +40 -16
  39. package/dist/channels/github/types.d.ts +30 -6
  40. package/dist/channels/github/types.d.ts.map +1 -1
  41. package/dist/channels/gitlab/api.js +100 -114
  42. package/dist/channels/gitlab/binding.js +52 -33
  43. package/dist/channels/gitlab/checks.js +28 -29
  44. package/dist/channels/gitlab/cursor-account.js +1 -1
  45. package/dist/channels/gitlab/defaults.js +9 -3
  46. package/dist/channels/gitlab/gitlab-channel.d.ts +16 -1
  47. package/dist/channels/gitlab/gitlab-channel.d.ts.map +1 -1
  48. package/dist/channels/gitlab/gitlab-channel.js +95 -42
  49. package/dist/channels/gitlab/gitlab-webhook.d.ts +10 -1
  50. package/dist/channels/gitlab/gitlab-webhook.d.ts.map +1 -1
  51. package/dist/channels/gitlab/gitlab-webhook.js +282 -249
  52. package/dist/channels/gitlab/index.d.ts +6 -2
  53. package/dist/channels/gitlab/index.d.ts.map +1 -1
  54. package/dist/channels/gitlab/index.js +6 -2
  55. package/dist/channels/gitlab/replay.js +50 -27
  56. package/dist/channels/gitlab/state.js +14 -6
  57. package/dist/channels/gitlab/types.d.ts +13 -2
  58. package/dist/channels/gitlab/types.d.ts.map +1 -1
  59. package/dist/channels/origin/api.js +100 -116
  60. package/dist/channels/origin/binding.js +15 -16
  61. package/dist/channels/origin/checks.js +30 -28
  62. package/dist/channels/origin/defaults.js +50 -65
  63. package/dist/channels/origin/origin-channel.js +266 -272
  64. package/dist/channels/origin/origin-webhook.js +70 -88
  65. package/dist/channels/origin/reactions.js +9 -21
  66. package/dist/channels/origin/state.js +13 -5
  67. package/dist/channels/slack/agentic-delivery.js +426 -478
  68. package/dist/channels/slack/agentic-posted.js +9 -10
  69. package/dist/channels/slack/agentic-signals.js +2 -3
  70. package/dist/channels/slack/api.js +417 -427
  71. package/dist/channels/slack/approvals.js +1 -1
  72. package/dist/channels/slack/assistant.js +37 -47
  73. package/dist/channels/slack/attachments.js +188 -206
  74. package/dist/channels/slack/auth.js +8 -6
  75. package/dist/channels/slack/bot-mentions.js +31 -45
  76. package/dist/channels/slack/channel-watch.js +42 -48
  77. package/dist/channels/slack/cli-project.js +112 -137
  78. package/dist/channels/slack/code-fences.js +3 -5
  79. package/dist/channels/slack/constants.js +2 -2
  80. package/dist/channels/slack/credentials.js +23 -38
  81. package/dist/channels/slack/defaults.js +292 -331
  82. package/dist/channels/slack/dispatch.d.ts.map +1 -1
  83. package/dist/channels/slack/dispatch.js +533 -460
  84. package/dist/channels/slack/doctor.js +200 -214
  85. package/dist/channels/slack/eval-directive.js +79 -96
  86. package/dist/channels/slack/event-id-dedupe.js +1 -1
  87. package/dist/channels/slack/external-policy.js +26 -39
  88. package/dist/channels/slack/footer.js +28 -41
  89. package/dist/channels/slack/inbound.d.ts +1 -0
  90. package/dist/channels/slack/inbound.d.ts.map +1 -1
  91. package/dist/channels/slack/inbound.js +50 -31
  92. package/dist/channels/slack/init.d.ts +1 -5
  93. package/dist/channels/slack/init.d.ts.map +1 -1
  94. package/dist/channels/slack/init.js +42 -59
  95. package/dist/channels/slack/interactive.d.ts +9 -3
  96. package/dist/channels/slack/interactive.d.ts.map +1 -1
  97. package/dist/channels/slack/interactive.js +160 -162
  98. package/dist/channels/slack/links.js +1 -2
  99. package/dist/channels/slack/live-delivery.js +172 -190
  100. package/dist/channels/slack/manifest.d.ts.map +1 -1
  101. package/dist/channels/slack/manifest.js +44 -23
  102. package/dist/channels/slack/message-body.js +2 -2
  103. package/dist/channels/slack/nudge-carrier.js +30 -42
  104. package/dist/channels/slack/nudge-store.js +164 -191
  105. package/dist/channels/slack/paint-start.js +66 -81
  106. package/dist/channels/slack/placeholder.js +123 -152
  107. package/dist/channels/slack/pr-ref.js +1 -1
  108. package/dist/channels/slack/progress-delivery.js +65 -78
  109. package/dist/channels/slack/reasoning-card.js +36 -49
  110. package/dist/channels/slack/recording-sink.js +12 -24
  111. package/dist/channels/slack/reply-options.js +7 -12
  112. package/dist/channels/slack/self-identity.js +27 -35
  113. package/dist/channels/slack/sender-name.d.ts +12 -3
  114. package/dist/channels/slack/sender-name.d.ts.map +1 -1
  115. package/dist/channels/slack/sender-name.js +57 -61
  116. package/dist/channels/slack/setup.js +2 -4
  117. package/dist/channels/slack/slack-channel.d.ts +6 -4
  118. package/dist/channels/slack/slack-channel.d.ts.map +1 -1
  119. package/dist/channels/slack/slack-channel.js +441 -308
  120. package/dist/channels/slack/socket-mode.js +38 -52
  121. package/dist/channels/slack/thread-context.js +143 -160
  122. package/dist/channels/slack/tool-approval-events.js +149 -166
  123. package/dist/channels/slack/tool-cards.js +6 -11
  124. package/dist/channels/slack/tool-chip.js +1 -2
  125. package/dist/channels/slack/types.d.ts +15 -17
  126. package/dist/channels/slack/types.d.ts.map +1 -1
  127. package/dist/channels/slack/upload.js +84 -97
  128. package/dist/channels/slack/user-info.js +27 -41
  129. package/dist/channels.js +9 -20
  130. package/dist/dashboard-session-url.js +3 -4
  131. package/dist/docs/404.html +2 -2
  132. package/dist/docs/assets/{app.BNhEdGa8.js → app.DXI7bwox.js} +4 -4
  133. package/dist/docs/assets/{building-with-agents.md.BPjPFxFg.js → building-with-agents.md.Df87rAe1.js} +1 -1
  134. package/dist/docs/assets/chunks/@localSearchIndexroot.CtLtpWcx.js +1 -0
  135. package/dist/docs/assets/chunks/{VPLocalSearchBox.DIdUV1Ph.js → VPLocalSearchBox.BrbO5mEe.js} +1 -1
  136. package/dist/docs/assets/chunks/{arc.lELI4_SR.js → arc.BOG1yms8.js} +1 -1
  137. package/dist/docs/assets/chunks/{architectureDiagram-Q4EWVU46.iCMdvuoM.js → architectureDiagram-Q4EWVU46.C0hsMZnZ.js} +1 -1
  138. package/dist/docs/assets/chunks/{baseUniq.C1-nDJBf.js → baseUniq.H044KjKs.js} +1 -1
  139. package/dist/docs/assets/chunks/{blockDiagram-DXYQGD6D.ClemzBox.js → blockDiagram-DXYQGD6D.BsRW6GoB.js} +1 -1
  140. package/dist/docs/assets/chunks/{c4Diagram-AHTNJAMY.BqTak6cR.js → c4Diagram-AHTNJAMY.B9HV5PFR.js} +1 -1
  141. package/dist/docs/assets/chunks/channel.CBwrU9rP.js +1 -0
  142. package/dist/docs/assets/chunks/{chunk-4BX2VUAB.CUS3qs_R.js → chunk-4BX2VUAB.CPoT_ajl.js} +1 -1
  143. package/dist/docs/assets/chunks/{chunk-4TB4RGXK.dz5fdHcl.js → chunk-4TB4RGXK.DZBwWuCL.js} +1 -1
  144. package/dist/docs/assets/chunks/{chunk-55IACEB6.D6BEBmve.js → chunk-55IACEB6.CZ3yTiyq.js} +1 -1
  145. package/dist/docs/assets/chunks/{chunk-EDXVE4YY.B5uK4ID9.js → chunk-EDXVE4YY.6DfvHSd8.js} +1 -1
  146. package/dist/docs/assets/chunks/{chunk-FMBD7UC4.PgOJgNQs.js → chunk-FMBD7UC4.CpBj8HfK.js} +1 -1
  147. package/dist/docs/assets/chunks/{chunk-OYMX7WX6.CvkTrCii.js → chunk-OYMX7WX6.BdKo8YqS.js} +1 -1
  148. package/dist/docs/assets/chunks/{chunk-QZHKN3VN.BnSfKYsB.js → chunk-QZHKN3VN.BnXNyxJx.js} +1 -1
  149. package/dist/docs/assets/chunks/{chunk-YZCP3GAM.MZH6v5UC.js → chunk-YZCP3GAM.Cg1OcF8G.js} +1 -1
  150. package/dist/docs/assets/chunks/classDiagram-6PBFFD2Q.CbC_mrvB.js +1 -0
  151. package/dist/docs/assets/chunks/classDiagram-v2-HSJHXN6E.CbC_mrvB.js +1 -0
  152. package/dist/docs/assets/chunks/clone.BTvFyY1a.js +1 -0
  153. package/dist/docs/assets/chunks/{cose-bilkent-S5V4N54A.BBbw_YZi.js → cose-bilkent-S5V4N54A.1SP8al9c.js} +1 -1
  154. package/dist/docs/assets/chunks/{dagre-KV5264BT.CNJB2l7E.js → dagre-KV5264BT.DS1L6hJt.js} +1 -1
  155. package/dist/docs/assets/chunks/{diagram-5BDNPKRD.BQzlnFfq.js → diagram-5BDNPKRD.ChsausbG.js} +1 -1
  156. package/dist/docs/assets/chunks/{diagram-G4DWMVQ6.DkgqqZMz.js → diagram-G4DWMVQ6.3XsptNWj.js} +1 -1
  157. package/dist/docs/assets/chunks/{diagram-MMDJMWI5.DIT8L7H_.js → diagram-MMDJMWI5.DPA9Dk_P.js} +1 -1
  158. package/dist/docs/assets/chunks/{diagram-TYMM5635.3xLPZWGJ.js → diagram-TYMM5635.BVswXWrB.js} +1 -1
  159. package/dist/docs/assets/chunks/{erDiagram-SMLLAGMA.5_IHz8jF.js → erDiagram-SMLLAGMA.BSak5OSP.js} +1 -1
  160. package/dist/docs/assets/chunks/{flowDiagram-DWJPFMVM.BGUCXz8A.js → flowDiagram-DWJPFMVM.CQgN4TTz.js} +1 -1
  161. package/dist/docs/assets/chunks/{ganttDiagram-T4ZO3ILL.DbfFavS1.js → ganttDiagram-T4ZO3ILL.GrT0kA4a.js} +1 -1
  162. package/dist/docs/assets/chunks/{gitGraphDiagram-UUTBAWPF.D2yKdeNW.js → gitGraphDiagram-UUTBAWPF.CdS7Ucll.js} +1 -1
  163. package/dist/docs/assets/chunks/{graph.CSCxwHba.js → graph.BVqKRmRo.js} +1 -1
  164. package/dist/docs/assets/chunks/{infoDiagram-42DDH7IO.FDeb6xHY.js → infoDiagram-42DDH7IO.C3C9FRto.js} +1 -1
  165. package/dist/docs/assets/chunks/{ishikawaDiagram-UXIWVN3A.DbeYs9VL.js → ishikawaDiagram-UXIWVN3A.2FuAh_Zj.js} +1 -1
  166. package/dist/docs/assets/chunks/{journeyDiagram-VCZTEJTY.CWjKINpx.js → journeyDiagram-VCZTEJTY.CaHMfK4b.js} +1 -1
  167. package/dist/docs/assets/chunks/{kanban-definition-6JOO6SKY.B4FrAlwz.js → kanban-definition-6JOO6SKY.CjhIUwcA.js} +1 -1
  168. package/dist/docs/assets/chunks/{layout.DFGxQ9ab.js → layout.CGU3gfSf.js} +1 -1
  169. package/dist/docs/assets/chunks/{linear.BmjZ-G59.js → linear.DaihpW_n.js} +1 -1
  170. package/dist/docs/assets/chunks/{min.DZSxulMW.js → min.BS-j8kHQ.js} +1 -1
  171. package/dist/docs/assets/chunks/{mindmap-definition-QFDTVHPH.CHLi3-aN.js → mindmap-definition-QFDTVHPH.BVJ1Bbnk.js} +1 -1
  172. package/dist/docs/assets/chunks/{pieDiagram-DEJITSTG.DteG-CkU.js → pieDiagram-DEJITSTG.Cz1WIv9r.js} +1 -1
  173. package/dist/docs/assets/chunks/{quadrantDiagram-34T5L4WZ.D458ipN3.js → quadrantDiagram-34T5L4WZ.DKLFxcjy.js} +1 -1
  174. package/dist/docs/assets/chunks/{requirementDiagram-MS252O5E.DcFgUxst.js → requirementDiagram-MS252O5E.BHegiK7x.js} +1 -1
  175. package/dist/docs/assets/chunks/{sankeyDiagram-XADWPNL6.BwQAMmSA.js → sankeyDiagram-XADWPNL6.DYkY6yPc.js} +1 -1
  176. package/dist/docs/assets/chunks/{sequenceDiagram-FGHM5R23.B_Xdsrh9.js → sequenceDiagram-FGHM5R23.DYQ1QUrI.js} +1 -1
  177. package/dist/docs/assets/chunks/{stateDiagram-FHFEXIEX.CdfDW6-C.js → stateDiagram-FHFEXIEX.Iru8BsFo.js} +1 -1
  178. package/dist/docs/assets/chunks/stateDiagram-v2-QKLJ7IA2.BYXl4LW6.js +1 -0
  179. package/dist/docs/assets/chunks/{theme.sfdL3srp.js → theme.DaplWQhQ.js} +2 -2
  180. package/dist/docs/assets/chunks/{timeline-definition-GMOUNBTQ.56-4hXaC.js → timeline-definition-GMOUNBTQ.BwFA8hiX.js} +1 -1
  181. package/dist/docs/assets/chunks/{vennDiagram-DHZGUBPP.CvZSQBO7.js → vennDiagram-DHZGUBPP.CZ60W1C_.js} +1 -1
  182. package/dist/docs/assets/chunks/{wardley-RL74JXVD.C9qc8k39.js → wardley-RL74JXVD.iXazD3Z7.js} +1 -1
  183. package/dist/docs/assets/chunks/{wardleyDiagram-NUSXRM2D.D9s0nihi.js → wardleyDiagram-NUSXRM2D.B69D2r8-.js} +1 -1
  184. package/dist/docs/assets/chunks/{xychartDiagram-5P7HB3ND.BVJSpYrC.js → xychartDiagram-5P7HB3ND.CLPZEIU9.js} +1 -1
  185. package/dist/docs/assets/{deployment.md.BdqTiGdc.js → deployment.md.BYuEcDBv.js} +2 -2
  186. package/dist/docs/assets/{guides_bitbucket.md.BB6fqD-M.js → guides_bitbucket.md.CKUayYtD.js} +3 -3
  187. package/dist/docs/assets/{guides_bitbucket.md.BB6fqD-M.lean.js → guides_bitbucket.md.CKUayYtD.lean.js} +1 -1
  188. package/dist/docs/assets/{guides_github.md.Cr1Xlf-m.js → guides_github.md.TuNiZAOQ.js} +4 -4
  189. package/dist/docs/assets/{guides_github.md.Cr1Xlf-m.lean.js → guides_github.md.TuNiZAOQ.lean.js} +1 -1
  190. package/dist/docs/assets/{guides_gitlab.md.CMpmFi4M.js → guides_gitlab.md.CtNI4fSH.js} +4 -4
  191. package/dist/docs/assets/{guides_gitlab.md.CMpmFi4M.lean.js → guides_gitlab.md.CtNI4fSH.lean.js} +1 -1
  192. package/dist/docs/assets/guides_migrate.md.sCAvvlC6.js +7 -0
  193. package/dist/docs/assets/guides_migrate.md.sCAvvlC6.lean.js +1 -0
  194. package/dist/docs/assets/{reference_cli.md.GwugN3n-.js → reference_cli.md.dYCAL2lB.js} +4 -3
  195. package/dist/docs/assets/reference_cli.md.dYCAL2lB.lean.js +1 -0
  196. package/dist/docs/assets/troubleshooting.md.x-GBa7wN.js +1 -0
  197. package/dist/docs/assets/{troubleshooting.md.Bscj6ODe.lean.js → troubleshooting.md.x-GBa7wN.lean.js} +1 -1
  198. package/dist/docs/building-with-agents.html +37 -37
  199. package/dist/docs/building-with-agents.md +2 -0
  200. package/dist/docs/deployment.html +38 -38
  201. package/dist/docs/deployment.md +7 -0
  202. package/dist/docs/evals.html +36 -36
  203. package/dist/docs/guides/agent-to-agent.html +35 -35
  204. package/dist/docs/guides/bitbucket.html +38 -38
  205. package/dist/docs/guides/bitbucket.md +9 -1
  206. package/dist/docs/guides/cloud-agents.html +35 -35
  207. package/dist/docs/guides/convert-automation.html +35 -35
  208. package/dist/docs/guides/github.html +39 -39
  209. package/dist/docs/guides/github.md +20 -4
  210. package/dist/docs/guides/gitlab.html +38 -38
  211. package/dist/docs/guides/gitlab.md +9 -1
  212. package/dist/docs/guides/grokbot-agents.html +35 -35
  213. package/dist/docs/guides/hooks.html +35 -35
  214. package/dist/docs/guides/improve.html +35 -35
  215. package/dist/docs/guides/jev.html +35 -35
  216. package/dist/docs/guides/mcp-oauth.html +35 -35
  217. package/dist/docs/guides/migrate.html +66 -0
  218. package/dist/docs/guides/migrate.md +122 -0
  219. package/dist/docs/guides/opentelemetry.html +35 -35
  220. package/dist/docs/guides/slack.html +35 -35
  221. package/dist/docs/guides/webhooks.html +35 -35
  222. package/dist/docs/hashmap.json +1 -1
  223. package/dist/docs/hillclimbing.html +35 -35
  224. package/dist/docs/index.html +35 -35
  225. package/dist/docs/llms-full.txt +214 -6
  226. package/dist/docs/llms.txt +1 -0
  227. package/dist/docs/quickstart.html +35 -35
  228. package/dist/docs/reference/agent-config.html +35 -35
  229. package/dist/docs/reference/artifacts.html +35 -35
  230. package/dist/docs/reference/channels.html +35 -35
  231. package/dist/docs/reference/cli.html +39 -38
  232. package/dist/docs/reference/cli.md +39 -0
  233. package/dist/docs/reference/connections.html +35 -35
  234. package/dist/docs/reference/evals.html +35 -35
  235. package/dist/docs/reference/extensions.html +35 -35
  236. package/dist/docs/reference/hooks.html +35 -35
  237. package/dist/docs/reference/http-api.html +35 -35
  238. package/dist/docs/reference/instructions.html +35 -35
  239. package/dist/docs/reference/playground.html +35 -35
  240. package/dist/docs/reference/project-layout.html +35 -35
  241. package/dist/docs/reference/prompt.html +35 -35
  242. package/dist/docs/reference/schedules.html +35 -35
  243. package/dist/docs/reference/sessions.html +35 -35
  244. package/dist/docs/reference/skills.html +35 -35
  245. package/dist/docs/reference/subagents.html +35 -35
  246. package/dist/docs/reference/tools.html +35 -35
  247. package/dist/docs/templates/agentic-owners.html +35 -35
  248. package/dist/docs/templates/grokbot-agents.html +35 -35
  249. package/dist/docs/templates/security-reviewer.html +35 -35
  250. package/dist/docs/templates/thermo-quality-review.html +35 -35
  251. package/dist/docs/templates/thermo-review.html +35 -35
  252. package/dist/docs/templates/triage.html +35 -35
  253. package/dist/docs/troubleshooting.html +36 -36
  254. package/dist/docs/troubleshooting.md +1 -0
  255. package/dist/evals/assertions.js +20 -34
  256. package/dist/evals/expect.js +3 -6
  257. package/dist/evals/judge.js +5 -8
  258. package/dist/evals/loaders.js +45 -62
  259. package/dist/evals/matchers.js +2 -3
  260. package/dist/evals/reporters.js +43 -67
  261. package/dist/evals/results.js +1 -1
  262. package/dist/evals/run-facts.js +5 -6
  263. package/dist/evals.js +27 -15
  264. package/dist/extensions/cursor-cloud-agents/extension.js +4 -1
  265. package/dist/extensions/cursor-cloud-agents/lib/backend.js +100 -126
  266. package/dist/extensions/cursor-cloud-agents/lib/fleet.js +22 -38
  267. package/dist/extensions/cursor-cloud-agents/lib/repos.js +8 -10
  268. package/dist/extensions/cursor-cloud-agents/lib/transcript.js +2 -3
  269. package/dist/extensions/cursor-cloud-agents/lib/watch.js +52 -66
  270. package/dist/extensions/cursor-cloud-agents/reminders/cloud-agent-stop-watch.js +29 -40
  271. package/dist/extensions/cursor-cloud-agents/tools/cancel.js +6 -17
  272. package/dist/extensions/cursor-cloud-agents/tools/dump.js +25 -36
  273. package/dist/extensions/cursor-cloud-agents/tools/get.js +3 -14
  274. package/dist/extensions/cursor-cloud-agents/tools/launch.js +13 -21
  275. package/dist/extensions/cursor-cloud-agents/tools/list.js +8 -19
  276. package/dist/extensions/cursor-cloud-agents/tools/reply.js +5 -16
  277. package/dist/extensions/cursor-grokbot-agents/extension.js +4 -1
  278. package/dist/extensions/cursor-grokbot-agents/lib/agents.js +3 -3
  279. package/dist/extensions/cursor-grokbot-agents/lib/backend.js +53 -73
  280. package/dist/extensions/cursor-grokbot-agents/lib/contacts.js +10 -23
  281. package/dist/extensions/cursor-grokbot-agents/lib/conversation.js +112 -132
  282. package/dist/extensions/cursor-grokbot-agents/lib/lock.js +1 -2
  283. package/dist/extensions/cursor-grokbot-agents/tools/ask.js +5 -16
  284. package/dist/extensions/cursor-grokbot-agents/tools/check.js +4 -15
  285. package/dist/extensions/cursor-grokbot-agents/tools/interrupt.js +2 -13
  286. package/dist/extensions/cursor-grokbot-agents/tools/list.js +11 -23
  287. package/dist/extensions/jev/extension.js +3 -3
  288. package/dist/extensions/jev/lib/evaluate.js +43 -60
  289. package/dist/extensions/jev/tools/evaluate.js +6 -17
  290. package/dist/extensions/slack-communication/tools/post-file.js +1 -1
  291. package/dist/extensions.js +3 -5
  292. package/dist/files-backends/cursor-hosted.js +504 -523
  293. package/dist/files-backends/local-fs.js +72 -134
  294. package/dist/files.js +3 -3
  295. package/dist/filesystem.js +562 -861
  296. package/dist/index.js +16 -35
  297. package/dist/internal/advertise-tools.js +74 -86
  298. package/dist/internal/artifacts-store.js +298 -361
  299. package/dist/internal/as-of.js +2 -4
  300. package/dist/internal/authored-alias-hooks.js +6 -4
  301. package/dist/internal/authored-loaders.js +37 -52
  302. package/dist/internal/bounded-int.js +1 -2
  303. package/dist/internal/bounded.js +13 -24
  304. package/dist/internal/brand.js +1 -1
  305. package/dist/internal/browser-origin-guard.js +4 -4
  306. package/dist/internal/builtin-tools/artifacts.js +15 -27
  307. package/dist/internal/builtin-tools/index.js +2 -3
  308. package/dist/internal/builtin-tools/reminders.js +33 -52
  309. package/dist/internal/channel-architecture.d.ts +21 -0
  310. package/dist/internal/channel-architecture.d.ts.map +1 -0
  311. package/dist/internal/channel-architecture.js +41 -0
  312. package/dist/internal/channel-dispatch.js +3 -4
  313. package/dist/internal/channel-route-dispatch.js +40 -51
  314. package/dist/internal/channel-state.js +1 -1
  315. package/dist/internal/chat-client.js +319 -340
  316. package/dist/internal/cli-ax.js +1262 -1294
  317. package/dist/internal/cli-bitbucket.js +244 -272
  318. package/dist/internal/cli-convert-automation.js +137 -151
  319. package/dist/internal/cli-cursor.js +126 -147
  320. package/dist/internal/cli-deploy.d.ts.map +1 -1
  321. package/dist/internal/cli-deploy.js +1457 -1507
  322. package/dist/internal/cli-docs.js +130 -147
  323. package/dist/internal/cli-github.js +437 -476
  324. package/dist/internal/cli-gitlab.js +259 -288
  325. package/dist/internal/cli-images.js +266 -334
  326. package/dist/internal/cli-manifest.js +25 -37
  327. package/dist/internal/cli-mcp-oauth.js +228 -247
  328. package/dist/internal/cli-mcp.js +358 -383
  329. package/dist/internal/cli-migrate.js +73 -90
  330. package/dist/internal/cli-skills.js +35 -47
  331. package/dist/internal/cli-slack-manual.d.ts +0 -1
  332. package/dist/internal/cli-slack-manual.d.ts.map +1 -1
  333. package/dist/internal/cli-slack-manual.js +175 -204
  334. package/dist/internal/cli-slack.d.ts +1 -1
  335. package/dist/internal/cli-slack.d.ts.map +1 -1
  336. package/dist/internal/cli-slack.js +416 -456
  337. package/dist/internal/cloud-merge.js +7 -3
  338. package/dist/internal/cloud-turn-cost.js +8 -1
  339. package/dist/internal/connection-env.js +5 -6
  340. package/dist/internal/continuation-channel.js +10 -7
  341. package/dist/internal/continuation-identity.js +85 -67
  342. package/dist/internal/conversation-mirror.js +112 -131
  343. package/dist/internal/convert-automation/convert-workflow.js +21 -31
  344. package/dist/internal/cron.js +3 -3
  345. package/dist/internal/cursor/account-mcp.js +147 -146
  346. package/dist/internal/cursor/backend-client.js +290 -320
  347. package/dist/internal/cursor/bound-secret-file.js +3 -3
  348. package/dist/internal/cursor/credentials.js +127 -142
  349. package/dist/internal/cursor/cursor-api-transport.js +4 -8
  350. package/dist/internal/cursor/github-credentials.js +91 -108
  351. package/dist/internal/cursor/hosted-bound-secrets.js +3 -4
  352. package/dist/internal/cursor/hosted-deployment-secrets.js +1 -1
  353. package/dist/internal/cursor/hosted-store-secrets.js +5 -9
  354. package/dist/internal/cursor/session-token.js +36 -48
  355. package/dist/internal/cursor/store-api-client.js +77 -92
  356. package/dist/internal/cursor-account-mcp-auth.js +132 -149
  357. package/dist/internal/cursor-agent-template.js +1 -1
  358. package/dist/internal/cursor-deployment-relay.js +33 -54
  359. package/dist/internal/cursor-event-relay.js +65 -59
  360. package/dist/internal/cursor-relay-core.js +258 -286
  361. package/dist/internal/deferred-channel-session.js +3 -12
  362. package/dist/internal/deploy-client.d.ts.map +1 -1
  363. package/dist/internal/deploy-client.js +413 -475
  364. package/dist/internal/deploy-manifest.d.ts +17 -0
  365. package/dist/internal/deploy-manifest.d.ts.map +1 -1
  366. package/dist/internal/deploy-manifest.js +71 -21
  367. package/dist/internal/deploy-source.js +31 -43
  368. package/dist/internal/discovery/agent-config.js +45 -59
  369. package/dist/internal/discovery/agent.js +276 -280
  370. package/dist/internal/discovery/channels.js +67 -80
  371. package/dist/internal/discovery/connections.js +286 -296
  372. package/dist/internal/discovery/context.js +2 -13
  373. package/dist/internal/discovery/cursor-plugin.js +223 -259
  374. package/dist/internal/discovery/extension-overlay.js +104 -131
  375. package/dist/internal/discovery/extensions.js +276 -281
  376. package/dist/internal/discovery/fs.js +56 -79
  377. package/dist/internal/discovery/hooks.js +39 -50
  378. package/dist/internal/discovery/info.js +17 -19
  379. package/dist/internal/discovery/instructions.js +58 -71
  380. package/dist/internal/discovery/modules.js +45 -58
  381. package/dist/internal/discovery/project.d.ts.map +1 -1
  382. package/dist/internal/discovery/project.js +192 -215
  383. package/dist/internal/discovery/reminders.js +41 -52
  384. package/dist/internal/discovery/runtime.js +1 -1
  385. package/dist/internal/discovery/schedules.js +71 -82
  386. package/dist/internal/discovery/seed-files.js +21 -32
  387. package/dist/internal/discovery/services.js +74 -96
  388. package/dist/internal/discovery/skills.js +77 -94
  389. package/dist/internal/discovery/subagent.js +79 -95
  390. package/dist/internal/discovery/tools.js +12 -23
  391. package/dist/internal/distribution.js +2 -2
  392. package/dist/internal/docs-site.js +30 -45
  393. package/dist/internal/duration.js +1 -1
  394. package/dist/internal/env-file.js +48 -64
  395. package/dist/internal/eval-judge-model.js +17 -28
  396. package/dist/internal/eval-run-store.js +265 -254
  397. package/dist/internal/eval-runner.d.ts +8 -0
  398. package/dist/internal/eval-runner.d.ts.map +1 -1
  399. package/dist/internal/eval-runner.js +406 -408
  400. package/dist/internal/eval-transport.d.ts +24 -0
  401. package/dist/internal/eval-transport.d.ts.map +1 -0
  402. package/dist/internal/eval-transport.js +22 -0
  403. package/dist/internal/evals-client.js +242 -246
  404. package/dist/internal/event-log.js +72 -120
  405. package/dist/internal/event-mapper.js +30 -31
  406. package/dist/internal/factory-resource-channel.js +16 -30
  407. package/dist/internal/filesystem/errors.js +6 -6
  408. package/dist/internal/filesystem/format.js +10 -13
  409. package/dist/internal/filesystem/merge.js +52 -94
  410. package/dist/internal/filesystem/nearest.js +15 -27
  411. package/dist/internal/filesystem/scratch.js +65 -85
  412. package/dist/internal/filesystem/tools.js +221 -241
  413. package/dist/internal/filesystem/walk.js +76 -143
  414. package/dist/internal/framework-file-storage.js +118 -139
  415. package/dist/internal/framework-storage-selection.js +21 -13
  416. package/dist/internal/frontmatter.js +4 -6
  417. package/dist/internal/github-fanout.js +50 -64
  418. package/dist/internal/guest-network.js +96 -109
  419. package/dist/internal/handleAgentServeTrigger.js +121 -126
  420. package/dist/internal/host-files.js +73 -88
  421. package/dist/internal/host-kv.js +21 -36
  422. package/dist/internal/host-otel.js +22 -19
  423. package/dist/internal/host-platforms.js +49 -63
  424. package/dist/internal/hosted-catch-protocol.d.ts +1 -0
  425. package/dist/internal/hosted-catch-protocol.d.ts.map +1 -1
  426. package/dist/internal/hosted-catch-protocol.js +1 -0
  427. package/dist/internal/hosted-catch.d.ts +5 -3
  428. package/dist/internal/hosted-catch.d.ts.map +1 -1
  429. package/dist/internal/hosted-catch.js +84 -93
  430. package/dist/internal/hosted-delivery-protocol.js +32 -8
  431. package/dist/internal/hosted-delivery.d.ts +13 -1
  432. package/dist/internal/hosted-delivery.d.ts.map +1 -1
  433. package/dist/internal/hosted-delivery.js +614 -584
  434. package/dist/internal/hosted-eval-cases.d.ts +21 -0
  435. package/dist/internal/hosted-eval-cases.d.ts.map +1 -0
  436. package/dist/internal/hosted-eval-cases.js +162 -0
  437. package/dist/internal/hosted-execution-diag.js +38 -30
  438. package/dist/internal/hosted-execution-flush.js +75 -66
  439. package/dist/internal/hosted-execution-latency.js +16 -8
  440. package/dist/internal/hosted-managed-automation.js +2 -2
  441. package/dist/internal/hosting.js +2 -3
  442. package/dist/internal/http-channel-define.js +4 -1
  443. package/dist/internal/http-channel.js +101 -112
  444. package/dist/internal/http-control-plane-session.d.ts +18 -1
  445. package/dist/internal/http-control-plane-session.d.ts.map +1 -1
  446. package/dist/internal/http-control-plane-session.js +66 -32
  447. package/dist/internal/incoming-headers-to-fetch.js +1 -2
  448. package/dist/internal/init-interview.js +73 -93
  449. package/dist/internal/init-project.js +182 -214
  450. package/dist/internal/init-scaffold.js +10 -21
  451. package/dist/internal/inline-stdio-mcp.js +80 -86
  452. package/dist/internal/install-cursor-skills.js +231 -273
  453. package/dist/internal/legacy-command-guard.js +18 -31
  454. package/dist/internal/listen-port.js +34 -45
  455. package/dist/internal/local-control-plane.js +293 -307
  456. package/dist/internal/local-env.js +1 -1
  457. package/dist/internal/local-ingress.js +15 -9
  458. package/dist/internal/log-ring.js +1 -2
  459. package/dist/internal/logs-client.js +207 -227
  460. package/dist/internal/map-pool.js +24 -38
  461. package/dist/internal/mcp-endpoint.js +204 -180
  462. package/dist/internal/mcp-host.js +165 -168
  463. package/dist/internal/mcp-oauth-on-demand.js +170 -207
  464. package/dist/internal/mcp-oauth-persist.js +15 -29
  465. package/dist/internal/mcp-oauth.js +209 -266
  466. package/dist/internal/named-webhook-secret.d.ts +39 -0
  467. package/dist/internal/named-webhook-secret.d.ts.map +1 -0
  468. package/dist/internal/named-webhook-secret.js +47 -0
  469. package/dist/internal/open-browser.js +2 -3
  470. package/dist/internal/otel/collector.js +104 -68
  471. package/dist/internal/otel/config.js +24 -37
  472. package/dist/internal/otel/http.js +5 -7
  473. package/dist/internal/otel/mcp.js +3 -12
  474. package/dist/internal/otel/runtime.js +69 -83
  475. package/dist/internal/package-inline-stdio.js +57 -65
  476. package/dist/internal/peer-connections.js +9 -5
  477. package/dist/internal/platform-schedule-sync.js +39 -54
  478. package/dist/internal/platform-timers.js +176 -210
  479. package/dist/internal/playground/static.js +1 -2
  480. package/dist/internal/playground/toolchain.js +37 -53
  481. package/dist/internal/playground-proxy.js +230 -270
  482. package/dist/internal/process-memory-telemetry.js +33 -51
  483. package/dist/internal/prompt-context.js +3 -6
  484. package/dist/internal/reminder-control-plane-protocol.js +46 -13
  485. package/dist/internal/reminder-runner.js +770 -785
  486. package/dist/internal/reminder-schedule.js +1 -1
  487. package/dist/internal/reminder-store.js +57 -78
  488. package/dist/internal/request-error-status.js +1 -3
  489. package/dist/internal/request-headers.js +2 -2
  490. package/dist/internal/resolve-prod-target.js +119 -135
  491. package/dist/internal/resolved-connections.js +16 -6
  492. package/dist/internal/run-client.js +221 -229
  493. package/dist/internal/runtime-dispatch-runner.js +18 -43
  494. package/dist/internal/schedule-runner.js +49 -58
  495. package/dist/internal/scm/pr-url.js +7 -6
  496. package/dist/internal/sdk-runner.js +388 -363
  497. package/dist/internal/serve-restart.js +26 -39
  498. package/dist/internal/server.d.ts.map +1 -1
  499. package/dist/internal/server.js +1283 -1244
  500. package/dist/internal/session-cost.js +7 -9
  501. package/dist/internal/session-engine.d.ts +3 -1
  502. package/dist/internal/session-engine.d.ts.map +1 -1
  503. package/dist/internal/session-engine.js +2801 -2777
  504. package/dist/internal/session-links.js +12 -16
  505. package/dist/internal/session-run-log.js +134 -82
  506. package/dist/internal/session-store.js +133 -164
  507. package/dist/internal/sessions-client.js +97 -118
  508. package/dist/internal/skill-catalog.js +18 -23
  509. package/dist/internal/skills-sync.js +16 -30
  510. package/dist/internal/slack-provision-client.js +90 -116
  511. package/dist/internal/start-log-store.js +48 -67
  512. package/dist/internal/steering.js +1 -2
  513. package/dist/internal/storage-coordinator.js +160 -196
  514. package/dist/internal/store-mirror.js +16 -30
  515. package/dist/internal/stream-progress.js +6 -8
  516. package/dist/internal/terminal-style.js +3 -4
  517. package/dist/internal/testing/scm-continuation-fixtures.js +6 -2
  518. package/dist/internal/testing/slack-continuation-fixtures.d.ts +26 -0
  519. package/dist/internal/testing/slack-continuation-fixtures.d.ts.map +1 -0
  520. package/dist/internal/testing/slack-continuation-fixtures.js +136 -0
  521. package/dist/internal/tool-catalog.js +11 -5
  522. package/dist/internal/tool-result.js +1 -1
  523. package/dist/internal/trajectory.js +19 -22
  524. package/dist/internal/turn-cost.js +52 -62
  525. package/dist/internal/turn-governor.js +5 -8
  526. package/dist/internal/turn-lease-store.js +85 -105
  527. package/dist/internal/turn-outbox.js +28 -43
  528. package/dist/internal/update-check.js +231 -259
  529. package/dist/internal/v2-hosting.js +1 -2
  530. package/dist/internal/workspace-sync.js +25 -41
  531. package/dist/internal/workspace.js +111 -139
  532. package/dist/kv/memory-kv.js +27 -51
  533. package/dist/memory.js +106 -148
  534. package/dist/otel.js +5 -8
  535. package/dist/playground/assets/{index-Co4CUVTQ.js → index-Be0-1hw2.js} +45 -45
  536. package/dist/playground/assets/index-Clz6uHj9.css +1 -0
  537. package/dist/playground/index.html +2 -2
  538. package/dist/prompt.js +2 -4
  539. package/dist/storage-backends/cursor-hosted-v2.js +53 -83
  540. package/dist/storage-backends/cursor-hosted.js +105 -145
  541. package/dist/storage-backends/file-kv.js +100 -128
  542. package/dist/storage-protocol.js +3 -5
  543. package/dist/storage.js +17 -26
  544. package/dist/types.d.ts +68 -0
  545. package/dist/types.d.ts.map +1 -1
  546. package/dist/types.js +20 -18
  547. package/docs/building-with-agents.md +2 -0
  548. package/docs/deployment.md +7 -0
  549. package/docs/guides/bitbucket.md +9 -1
  550. package/docs/guides/github.md +20 -4
  551. package/docs/guides/gitlab.md +9 -1
  552. package/docs/guides/migrate.md +127 -0
  553. package/docs/reference/cli.md +39 -0
  554. package/docs/troubleshooting.md +1 -0
  555. package/package.json +1 -1
  556. package/skills/debug/SKILL.md +1 -0
  557. package/skills/github/SKILL.md +23 -0
  558. package/skills/migrate-v2/SKILL.md +51 -10
  559. package/dist/docs/assets/chunks/@localSearchIndexroot.BJ8UZggu.js +0 -1
  560. package/dist/docs/assets/chunks/channel.BTJ5J9FI.js +0 -1
  561. package/dist/docs/assets/chunks/classDiagram-6PBFFD2Q.D4BZ3cVV.js +0 -1
  562. package/dist/docs/assets/chunks/classDiagram-v2-HSJHXN6E.D4BZ3cVV.js +0 -1
  563. package/dist/docs/assets/chunks/clone.62tX-O-1.js +0 -1
  564. package/dist/docs/assets/chunks/stateDiagram-v2-QKLJ7IA2.DkTs1aEU.js +0 -1
  565. package/dist/docs/assets/reference_cli.md.GwugN3n-.lean.js +0 -1
  566. package/dist/docs/assets/troubleshooting.md.Bscj6ODe.js +0 -1
  567. package/dist/playground/assets/index-C1g_PTTZ.css +0 -1
  568. /package/dist/docs/assets/{building-with-agents.md.BPjPFxFg.lean.js → building-with-agents.md.Df87rAe1.lean.js} +0 -0
  569. /package/dist/docs/assets/{deployment.md.BdqTiGdc.lean.js → deployment.md.BYuEcDBv.lean.js} +0 -0
@@ -1,26 +1,6 @@
1
1
  /**
2
2
  * Default inbound handlers and stream-event sinks for the Slack channel.
3
3
  */
4
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
5
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
6
- return new (P || (P = Promise))(function (resolve, reject) {
7
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
8
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
9
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
10
- step((generator = generator.apply(thisArg, _arguments || [])).next());
11
- });
12
- };
13
- var __rest = (this && this.__rest) || function (s, e) {
14
- var t = {};
15
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
16
- t[p] = s[p];
17
- if (s != null && typeof Object.getOwnPropertySymbols === "function")
18
- for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
19
- if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
20
- t[p[i]] = s[p[i]];
21
- }
22
- return t;
23
- };
24
4
  import { markHostedFirstVisibleReply, noteHostedVisibleReplyError, } from "../../internal/hosted-execution-latency.js";
25
5
  import { buildAgenticEvents } from "./agentic-delivery.js";
26
6
  import { postMessage, setThreadStatus } from "./api.js";
@@ -40,16 +20,15 @@ import { rememberPendingToolCall, takeToolChipLine } from "./tool-chip.js";
40
20
  const SLACK_TURN_FAILURE_FALLBACK = "I hit an error while handling your request. Please try again or rephrase.";
41
21
  const SLACK_TURN_FAILURE_MAX_CHARS = 400;
42
22
  export function resolveSlackRespondTo(policy) {
43
- return (policy === null || policy === void 0 ? void 0 : policy.respondTo) === "author" ? "author" : "thread";
23
+ return policy?.respondTo === "author" ? "author" : "thread";
44
24
  }
45
25
  /** Defaults to true when omitted. */
46
26
  export function resolveSlackBlockExternals(policy) {
47
- return (policy === null || policy === void 0 ? void 0 : policy.blockExternals) !== false;
27
+ return policy?.blockExternals !== false;
48
28
  }
49
29
  /** Scrubbed turn.failed body for Slack (secrets / paths / URLs stripped). */
50
30
  export function formatSlackTurnFailureMessage(raw) {
51
- var _a;
52
- const scrubbed = scrubSlackErrorDetail((_a = raw === null || raw === void 0 ? void 0 : raw.trim()) !== null && _a !== void 0 ? _a : "");
31
+ const scrubbed = scrubSlackErrorDetail(raw?.trim() ?? "");
53
32
  if (scrubbed === "") {
54
33
  return SLACK_TURN_FAILURE_FALLBACK;
55
34
  }
@@ -88,11 +67,11 @@ function resolveLoadingMessages(loadingMessages) {
88
67
  export function createDefaultOnInbound(loadingMessages, policy) {
89
68
  const rotating = resolveLoadingMessages(loadingMessages);
90
69
  const respondTo = resolveSlackRespondTo(policy);
91
- return (ctx, message) => __awaiter(this, void 0, void 0, function* () {
92
- yield ctx.thread.startTyping("Thinking…", rotating);
70
+ return async (ctx, message) => {
71
+ await ctx.thread.startTyping("Thinking…", rotating);
93
72
  const auth = defaultSlackAuth(message, ctx, { respondTo });
94
73
  return auth === null ? null : { auth };
95
- });
74
+ };
96
75
  }
97
76
  /**
98
77
  * Default watched-channel-post handler (optional custom loading rotation).
@@ -102,14 +81,14 @@ export function createDefaultOnInbound(loadingMessages, policy) {
102
81
  export function createDefaultOnChannelPost(loadingMessages, policy) {
103
82
  const rotating = resolveLoadingMessages(loadingMessages);
104
83
  const respondTo = resolveSlackRespondTo(policy);
105
- return (ctx, message) => __awaiter(this, void 0, void 0, function* () {
106
- yield ctx.thread.startTyping("Thinking…", rotating);
84
+ return async (ctx, message) => {
85
+ await ctx.thread.startTyping("Thinking…", rotating);
107
86
  const auth = defaultSlackAuth(message, ctx, {
108
87
  engagement: "channel_post",
109
88
  respondTo,
110
89
  });
111
90
  return auth === null ? null : { auth };
112
- });
91
+ };
113
92
  }
114
93
  export const defaultOnAppMention = createDefaultOnInbound();
115
94
  export const defaultOnDirectMessage = createDefaultOnInbound();
@@ -124,7 +103,6 @@ export const defaultOnChannelPost = createDefaultOnChannelPost();
124
103
  * `buildToolApprovalEvents` or set `toolApprovals: true` on `slackChannel`.
125
104
  */
126
105
  export function buildDefaultEvents(options = {}) {
127
- var _a, _b;
128
106
  const credentials = options.credentials;
129
107
  const reply = resolveSlackReply({
130
108
  reply: options.reply,
@@ -144,23 +122,22 @@ export function buildDefaultEvents(options = {}) {
144
122
  });
145
123
  }
146
124
  const streaming = reply.mode === "stream";
147
- const suggestedPrompts = (_a = options.suggestedPrompts) !== null && _a !== void 0 ? _a : [];
125
+ const suggestedPrompts = options.suggestedPrompts ?? [];
148
126
  const suggestedPromptsTitle = options.suggestedPromptsTitle;
149
127
  const loadingMessages = reply.status.idle;
150
- const botToken = credentials === null || credentials === void 0 ? void 0 : credentials.botToken;
151
- const getLog = (_b = options.getLog) !== null && _b !== void 0 ? _b : (() => defaultSlackLog);
128
+ const botToken = credentials?.botToken;
129
+ const getLog = options.getLog ?? (() => defaultSlackLog);
152
130
  const strategy = createStreamDeliveryStrategy({ botToken, getLog });
153
131
  const progress = createProgressDelivery({ botToken, getLog });
154
132
  const streamLive = (state) => streaming && !state.streamingUnavailable;
155
133
  const streamTarget = (channel) => {
156
- var _a;
157
- const channelId = (_a = channel.state.streamChannelId) !== null && _a !== void 0 ? _a : channel.state.channelId;
134
+ const channelId = channel.state.streamChannelId ?? channel.state.channelId;
158
135
  if (channelId === null || channelId === "" || channel.state.threadTs === null) {
159
136
  return null;
160
137
  }
161
138
  return channelId;
162
139
  };
163
- const sendCards = (args) => __awaiter(this, void 0, void 0, function* () {
140
+ const sendCards = async (args) => {
164
141
  if (!streamLive(args.channel.state)) {
165
142
  return false;
166
143
  }
@@ -168,24 +145,21 @@ export function buildDefaultEvents(options = {}) {
168
145
  if (channelId === null) {
169
146
  return false;
170
147
  }
171
- return strategy.appendChunks(Object.assign(Object.assign({}, args), { channelId }));
172
- });
148
+ return strategy.appendChunks({ ...args, channelId });
149
+ };
173
150
  const reasoning = reply.reasoningCard === false
174
151
  ? null
175
- : createReasoningCard(reply.reasoningCard, (_a) => {
176
- var { chunk } = _a, rest = __rest(_a, ["chunk"]);
177
- return sendCards(Object.assign(Object.assign({}, rest), { chunks: [chunk] }));
178
- });
152
+ : createReasoningCard(reply.reasoningCard, ({ chunk, ...rest }) => sendCards({ ...rest, chunks: [chunk] }));
179
153
  const toolCards = reply.toolCards === false ? null : createToolCards(reply.toolCards, reply.toolLabel);
180
- const completeReasoning = (channel, sessionId) => __awaiter(this, void 0, void 0, function* () {
181
- if (reasoning === null || reasoning === void 0 ? void 0 : reasoning.inProgress(channel)) {
182
- yield reasoning.flush({ channel, sessionId, status: "complete" });
154
+ const completeReasoning = async (channel, sessionId) => {
155
+ if (reasoning?.inProgress(channel)) {
156
+ await reasoning.flush({ channel, sessionId, status: "complete" });
183
157
  }
184
- });
158
+ };
185
159
  /** Subagent events carry `parentCallId`; cards and the reply are the parent's. */
186
160
  const nested = (event) => event.data.parentCallId !== undefined;
187
- const clearWorkingStatus = (channelId, threadTs) => __awaiter(this, void 0, void 0, function* () {
188
- const result = yield setThreadStatus({
161
+ const clearWorkingStatus = async (channelId, threadTs) => {
162
+ const result = await setThreadStatus({
189
163
  botToken,
190
164
  channelId,
191
165
  threadTs,
@@ -198,14 +172,14 @@ export function buildDefaultEvents(options = {}) {
198
172
  thread_ts: threadTs,
199
173
  });
200
174
  }
201
- });
202
- const finishProgress = (args) => __awaiter(this, void 0, void 0, function* () {
175
+ };
176
+ const finishProgress = async (args) => {
203
177
  const log = getLog();
204
178
  const state = args.channel.state;
205
179
  if (state.channelId === null || state.threadTs === null || args.text === "") {
206
180
  return false;
207
181
  }
208
- if (yield progress.replace({ channel: args.channel, text: args.text })) {
182
+ if (await progress.replace({ channel: args.channel, text: args.text })) {
209
183
  log.info("reply delivered via progress update", {
210
184
  channel: state.channelId,
211
185
  thread_ts: state.threadTs,
@@ -218,9 +192,9 @@ export function buildDefaultEvents(options = {}) {
218
192
  });
219
193
  return true;
220
194
  }
221
- yield progress.clear({ channel: args.channel });
195
+ await progress.clear({ channel: args.channel });
222
196
  try {
223
- const posted = yield postMessage({
197
+ const posted = await postMessage({
224
198
  botToken,
225
199
  channel: state.channelId,
226
200
  text: args.text,
@@ -250,15 +224,14 @@ export function buildDefaultEvents(options = {}) {
250
224
  noteHostedVisibleReplyError({ deliverySurface: "slack" });
251
225
  return false;
252
226
  }
253
- });
227
+ };
254
228
  /**
255
229
  * Deliver assistant text to the bound Slack thread. Used by a stop-reason
256
230
  * `message.completed` and by `turn.completed` when the last assistant
257
231
  * block was `finishReason: "tool_call"` (answer then `tag_artifact`,
258
232
  * etc.) so the playground result still reaches Slack.
259
233
  */
260
- const deliverReplyText = (args) => __awaiter(this, void 0, void 0, function* () {
261
- var _a, _b;
234
+ const deliverReplyText = async (args) => {
262
235
  const state = args.channel.state;
263
236
  if (state.channelId === null || state.threadTs === null || args.text === "") {
264
237
  return false;
@@ -269,23 +242,23 @@ export function buildDefaultEvents(options = {}) {
269
242
  const streamTs = state.streamTs;
270
243
  if (streamTs !== null && streamTs !== "") {
271
244
  if (streamLive(state)) {
272
- yield strategy.finalize({
245
+ await strategy.finalize({
273
246
  channel: args.channel,
274
- channelId: (_a = state.streamChannelId) !== null && _a !== void 0 ? _a : state.channelId,
247
+ channelId: state.streamChannelId ?? state.channelId,
275
248
  text: args.text,
276
249
  sessionId: args.sessionId,
277
250
  });
278
251
  }
279
252
  else {
280
- yield strategy.cleanupOrphan({ channel: args.channel });
253
+ await strategy.cleanupOrphan({ channel: args.channel });
281
254
  }
282
255
  }
283
256
  return true;
284
257
  }
285
258
  if (streamLive(state)) {
286
- const { delivered } = yield strategy.finalize({
259
+ const { delivered } = await strategy.finalize({
287
260
  channel: args.channel,
288
- channelId: (_b = state.streamChannelId) !== null && _b !== void 0 ? _b : state.channelId,
261
+ channelId: state.streamChannelId ?? state.channelId,
289
262
  text: args.text,
290
263
  sessionId: args.sessionId,
291
264
  });
@@ -294,8 +267,8 @@ export function buildDefaultEvents(options = {}) {
294
267
  }
295
268
  }
296
269
  return finishProgress(args);
297
- });
298
- const paintReplyFooter = (args) => __awaiter(this, void 0, void 0, function* () {
270
+ };
271
+ const paintReplyFooter = async (args) => {
299
272
  const state = args.channel.state;
300
273
  const ts = state.lastBotMessageTs;
301
274
  const text = state.lastPostedText;
@@ -308,7 +281,7 @@ export function buildDefaultEvents(options = {}) {
308
281
  streamHasCards(state)) {
309
282
  return;
310
283
  }
311
- const result = yield paintSlackFooter({
284
+ const result = await paintSlackFooter({
312
285
  footer: reply.footer,
313
286
  ctx: {
314
287
  sessionId: args.sessionId,
@@ -328,303 +301,291 @@ export function buildDefaultEvents(options = {}) {
328
301
  ts,
329
302
  });
330
303
  }
331
- });
304
+ };
332
305
  return {
333
- "turn.started"(event, channel) {
334
- return __awaiter(this, void 0, void 0, function* () {
335
- const log = getLog();
336
- yield progress.clear({ channel });
337
- channel.state.pendingToolCallMessage = null;
338
- channel.state.lastReasoningTypingAtMs = null;
339
- channel.state.lastReasoningTypingStatus = null;
340
- channel.state.streamTs = null;
341
- channel.state.streamChannelId = null;
342
- channel.state.streamFull = false;
343
- // A stream failure downgrades the rest of its own turn, not the thread.
344
- channel.state.streamingUnavailable = false;
345
- channel.state.streamAppendedChunks = 0;
346
- channel.state.lastPostedText = null;
347
- channel.state.streamBlockText = null;
348
- channel.state.turnStartedAtMs = Date.now();
349
- channel.state.reasoningCard = undefined;
350
- channel.state.toolCardCounts = {};
351
- // Keep lastBotMessageTs across turns — warm delta watermark.
352
- channel.state.approvalMessageByCallId = {};
353
- const state = channel.state;
354
- if (state.channelId === null || state.threadTs === null) {
355
- return;
356
- }
357
- log.info("turn.started", {
358
- session: event.sessionId,
359
- turn: event.turnId,
360
- channel: state.channelId,
361
- thread_ts: state.threadTs,
362
- });
363
- yield setThreadStatus({
364
- botToken,
365
- channelId: state.channelId,
366
- threadTs: state.threadTs,
367
- status: "Working…",
368
- loadingMessages,
369
- });
306
+ async "turn.started"(event, channel) {
307
+ const log = getLog();
308
+ await progress.clear({ channel });
309
+ channel.state.pendingToolCallMessage = null;
310
+ channel.state.lastReasoningTypingAtMs = null;
311
+ channel.state.lastReasoningTypingStatus = null;
312
+ channel.state.streamTs = null;
313
+ channel.state.streamChannelId = null;
314
+ channel.state.streamFull = false;
315
+ // A stream failure downgrades the rest of its own turn, not the thread.
316
+ channel.state.streamingUnavailable = false;
317
+ channel.state.streamAppendedChunks = 0;
318
+ channel.state.lastPostedText = null;
319
+ channel.state.streamBlockText = null;
320
+ channel.state.turnStartedAtMs = Date.now();
321
+ channel.state.reasoningCard = undefined;
322
+ channel.state.toolCardCounts = {};
323
+ // Keep lastBotMessageTs across turns — warm delta watermark.
324
+ channel.state.approvalMessageByCallId = {};
325
+ const state = channel.state;
326
+ if (state.channelId === null || state.threadTs === null) {
327
+ return;
328
+ }
329
+ log.info("turn.started", {
330
+ session: event.sessionId,
331
+ turn: event.turnId,
332
+ channel: state.channelId,
333
+ thread_ts: state.threadTs,
334
+ });
335
+ await setThreadStatus({
336
+ botToken,
337
+ channelId: state.channelId,
338
+ threadTs: state.threadTs,
339
+ status: "Working…",
340
+ loadingMessages,
370
341
  });
371
342
  },
372
- "message.appended"(event, channel) {
373
- return __awaiter(this, void 0, void 0, function* () {
374
- // Nested (subagent) text is not the reply.
375
- if (nested(event) || !streamLive(channel.state)) {
376
- return;
377
- }
378
- const channelId = streamTarget(channel);
379
- if (channelId === null) {
380
- return;
381
- }
382
- yield completeReasoning(channel, event.sessionId);
383
- yield strategy.append({
343
+ async "message.appended"(event, channel) {
344
+ // Nested (subagent) text is not the reply.
345
+ if (nested(event) || !streamLive(channel.state)) {
346
+ return;
347
+ }
348
+ const channelId = streamTarget(channel);
349
+ if (channelId === null) {
350
+ return;
351
+ }
352
+ await completeReasoning(channel, event.sessionId);
353
+ await strategy.append({
354
+ channel,
355
+ channelId,
356
+ text: event.data.text,
357
+ sessionId: event.sessionId,
358
+ });
359
+ },
360
+ async "reasoning.appended"(event, channel) {
361
+ if (!nested(event)) {
362
+ await reasoning?.append({
384
363
  channel,
385
- channelId,
386
- text: event.data.text,
387
364
  sessionId: event.sessionId,
365
+ text: event.data.text,
388
366
  });
367
+ }
368
+ // The chip is hidden while a stream is open.
369
+ if (!reply.status.reasoning || channel.state.streamTs !== null) {
370
+ return;
371
+ }
372
+ const now = Date.now();
373
+ const status = nextReasoningChip(channel.state, event.data.text, now);
374
+ if (status === undefined) {
375
+ return;
376
+ }
377
+ if (channel.state.channelId === null || channel.state.threadTs === null) {
378
+ return;
379
+ }
380
+ // One entry: Slack cycles `loading_messages` every couple of seconds,
381
+ // so padding an informative line with the rotation makes the chip
382
+ // flip between the reasoning and filler until the next update.
383
+ const painted = await setThreadStatus({
384
+ botToken,
385
+ channelId: channel.state.channelId,
386
+ threadTs: channel.state.threadTs,
387
+ status,
388
+ loadingMessages: [status],
389
389
  });
390
+ if (painted.ok) {
391
+ commitReasoningChip(channel.state, status, now);
392
+ }
390
393
  },
391
- "reasoning.appended"(event, channel) {
392
- return __awaiter(this, void 0, void 0, function* () {
393
- if (!nested(event)) {
394
- yield reasoning === null || reasoning === void 0 ? void 0 : reasoning.append({
395
- channel,
396
- sessionId: event.sessionId,
397
- text: event.data.text,
398
- });
399
- }
400
- // The chip is hidden while a stream is open.
401
- if (!reply.status.reasoning || channel.state.streamTs !== null) {
402
- return;
403
- }
404
- const now = Date.now();
405
- const status = nextReasoningChip(channel.state, event.data.text, now);
406
- if (status === undefined) {
407
- return;
408
- }
409
- if (channel.state.channelId === null || channel.state.threadTs === null) {
410
- return;
411
- }
412
- // One entry: Slack cycles `loading_messages` every couple of seconds,
413
- // so padding an informative line with the rotation makes the chip
414
- // flip between the reasoning and filler until the next update.
415
- const painted = yield setThreadStatus({
416
- botToken,
417
- channelId: channel.state.channelId,
418
- threadTs: channel.state.threadTs,
419
- status,
420
- loadingMessages: [status],
421
- });
422
- if (painted.ok) {
423
- commitReasoningChip(channel.state, status, now);
424
- }
394
+ async "reasoning.completed"(event, channel) {
395
+ if (reasoning === null || nested(event)) {
396
+ return;
397
+ }
398
+ reasoning.endBlock(channel);
399
+ await reasoning.flush({
400
+ channel,
401
+ sessionId: event.sessionId,
402
+ status: "in_progress",
425
403
  });
426
404
  },
427
- "reasoning.completed"(event, channel) {
428
- return __awaiter(this, void 0, void 0, function* () {
429
- if (reasoning === null || nested(event)) {
430
- return;
431
- }
432
- reasoning.endBlock(channel);
433
- yield reasoning.flush({
405
+ async "actions.requested"(event, channel) {
406
+ const calls = event.data.calls;
407
+ const statusText = takeToolChipLine(channel.state, reply.status.tools, calls);
408
+ if (toolCards !== null && strategy.inlineToolSteps && !nested(event)) {
409
+ // Card order: the thinking that led to these tools goes first.
410
+ await reasoning?.flush({
434
411
  channel,
435
412
  sessionId: event.sessionId,
436
413
  status: "in_progress",
437
414
  });
438
- });
439
- },
440
- "actions.requested"(event, channel) {
441
- return __awaiter(this, void 0, void 0, function* () {
442
- const calls = event.data.calls;
443
- const statusText = takeToolChipLine(channel.state, reply.status.tools, calls);
444
- if (toolCards !== null && strategy.inlineToolSteps && !nested(event)) {
445
- // Card order: the thinking that led to these tools goes first.
446
- yield reasoning === null || reasoning === void 0 ? void 0 : reasoning.flush({
447
- channel,
448
- sessionId: event.sessionId,
449
- status: "in_progress",
450
- });
451
- const streamed = yield sendCards({
452
- channel,
453
- sessionId: event.sessionId,
454
- chunks: toolCards.forCalls(channel.state, calls),
455
- });
456
- // An open stream hides the chip; skip the status write.
457
- if (streamed) {
458
- return;
459
- }
460
- }
461
- if (statusText === undefined) {
462
- return;
463
- }
464
- if (channel.state.channelId === null || channel.state.threadTs === null) {
465
- return;
466
- }
467
- // Hold the tool line steady; see reasoning.appended.
468
- yield setThreadStatus({
469
- botToken,
470
- channelId: channel.state.channelId,
471
- threadTs: channel.state.threadTs,
472
- status: statusText,
473
- loadingMessages: [statusText],
415
+ const streamed = await sendCards({
416
+ channel,
417
+ sessionId: event.sessionId,
418
+ chunks: toolCards.forCalls(channel.state, calls),
474
419
  });
475
- if (toolCards !== null &&
476
- channel.state.streamingUnavailable === true &&
477
- (channel.state.streamTs === null || channel.state.streamTs === "")) {
478
- yield progress.upsert({ channel, text: statusText });
420
+ // An open stream hides the chip; skip the status write.
421
+ if (streamed) {
422
+ return;
479
423
  }
424
+ }
425
+ if (statusText === undefined) {
426
+ return;
427
+ }
428
+ if (channel.state.channelId === null || channel.state.threadTs === null) {
429
+ return;
430
+ }
431
+ // Hold the tool line steady; see reasoning.appended.
432
+ await setThreadStatus({
433
+ botToken,
434
+ channelId: channel.state.channelId,
435
+ threadTs: channel.state.threadTs,
436
+ status: statusText,
437
+ loadingMessages: [statusText],
480
438
  });
439
+ if (toolCards !== null &&
440
+ channel.state.streamingUnavailable === true &&
441
+ (channel.state.streamTs === null || channel.state.streamTs === "")) {
442
+ await progress.upsert({ channel, text: statusText });
443
+ }
481
444
  },
482
- "action.result"(event, channel) {
483
- return __awaiter(this, void 0, void 0, function* () {
484
- const streamTs = channel.state.streamTs;
485
- if (toolCards === null ||
486
- !strategy.inlineToolSteps ||
487
- nested(event) ||
488
- streamTs === null ||
489
- streamTs === "") {
490
- return;
491
- }
492
- yield sendCards({
493
- channel,
494
- sessionId: event.sessionId,
495
- chunks: [
496
- toolCards.forResult(channel.state, {
497
- callId: event.data.callId,
498
- toolName: event.data.toolName,
499
- output: event.data.output,
500
- isError: event.data.isError,
501
- }),
502
- ],
503
- });
445
+ async "action.result"(event, channel) {
446
+ const streamTs = channel.state.streamTs;
447
+ if (toolCards === null ||
448
+ !strategy.inlineToolSteps ||
449
+ nested(event) ||
450
+ streamTs === null ||
451
+ streamTs === "") {
452
+ return;
453
+ }
454
+ await sendCards({
455
+ channel,
456
+ sessionId: event.sessionId,
457
+ chunks: [
458
+ toolCards.forResult(channel.state, {
459
+ callId: event.data.callId,
460
+ toolName: event.data.toolName,
461
+ output: event.data.output,
462
+ isError: event.data.isError,
463
+ }),
464
+ ],
504
465
  });
505
466
  },
506
- "message.completed"(event, channel) {
507
- return __awaiter(this, void 0, void 0, function* () {
508
- if (nested(event)) {
509
- return;
510
- }
511
- rememberPendingToolCall(channel.state, event.data.finishReason, event.data.text);
512
- if (event.data.finishReason === "tool_call") {
513
- // The harness restarts its cumulative text after a tool call, so the
514
- // next block appends in full instead of diffing against this one.
515
- channel.state.streamBlockText = null;
516
- return;
517
- }
518
- const state = channel.state;
519
- if (state.channelId === null || state.threadTs === null) {
520
- return;
521
- }
522
- yield completeReasoning(channel, event.sessionId);
523
- // Empty final text: still close any open stream / clear the skeleton
524
- // and clear typing.
525
- if (event.data.text === "") {
526
- yield strategy.finalizeEmpty({ channel });
527
- yield progress.clear({ channel });
528
- yield clearWorkingStatus(state.channelId, state.threadTs);
529
- return;
530
- }
531
- yield deliverReplyText({
532
- channel,
533
- text: event.data.text,
534
- sessionId: event.sessionId,
535
- });
536
- yield clearWorkingStatus(state.channelId, state.threadTs);
467
+ async "message.completed"(event, channel) {
468
+ if (nested(event)) {
469
+ return;
470
+ }
471
+ rememberPendingToolCall(channel.state, event.data.finishReason, event.data.text);
472
+ if (event.data.finishReason === "tool_call") {
473
+ // The harness restarts its cumulative text after a tool call, so the
474
+ // next block appends in full instead of diffing against this one.
475
+ channel.state.streamBlockText = null;
476
+ return;
477
+ }
478
+ const state = channel.state;
479
+ if (state.channelId === null || state.threadTs === null) {
480
+ return;
481
+ }
482
+ await completeReasoning(channel, event.sessionId);
483
+ // Empty final text: still close any open stream / clear the skeleton
484
+ // and clear typing.
485
+ if (event.data.text === "") {
486
+ await strategy.finalizeEmpty({ channel });
487
+ await progress.clear({ channel });
488
+ await clearWorkingStatus(state.channelId, state.threadTs);
489
+ return;
490
+ }
491
+ await deliverReplyText({
492
+ channel,
493
+ text: event.data.text,
494
+ sessionId: event.sessionId,
537
495
  });
496
+ await clearWorkingStatus(state.channelId, state.threadTs);
538
497
  },
539
- "turn.completed"(event, channel, ctx) {
540
- return __awaiter(this, void 0, void 0, function* () {
541
- const log = getLog();
542
- log.info("turn.completed", {
543
- session: event.sessionId,
544
- turn: event.turnId,
545
- channel: channel.state.channelId,
546
- thread_ts: channel.state.threadTs,
547
- });
548
- // Mid-turn `tool_call` text is held as status, not posted. If the
549
- // turn ends without a later `finishReason: "stop"` block, the
550
- // playground still has `result` (last assistant text) and Slack
551
- // would otherwise stay silent.
552
- const result = event.data.result;
553
- const unpublished = typeof result === "string" && result !== "" && result !== channel.state.lastPostedText;
554
- yield completeReasoning(channel, event.sessionId);
555
- if (unpublished) {
556
- yield deliverReplyText({
557
- channel,
558
- text: result,
559
- sessionId: event.sessionId,
560
- });
561
- }
562
- // Always close leftovers. deliverReplyText may fall through to
563
- // postMessage when streaming is unavailable and leave streamTs open.
564
- yield strategy.cleanupOrphan({ channel });
565
- yield progress.clear({ channel });
566
- yield paintReplyFooter({
498
+ async "turn.completed"(event, channel, ctx) {
499
+ const log = getLog();
500
+ log.info("turn.completed", {
501
+ session: event.sessionId,
502
+ turn: event.turnId,
503
+ channel: channel.state.channelId,
504
+ thread_ts: channel.state.threadTs,
505
+ });
506
+ // Mid-turn `tool_call` text is held as status, not posted. If the
507
+ // turn ends without a later `finishReason: "stop"` block, the
508
+ // playground still has `result` (last assistant text) and Slack
509
+ // would otherwise stay silent.
510
+ const result = event.data.result;
511
+ const unpublished = typeof result === "string" && result !== "" && result !== channel.state.lastPostedText;
512
+ await completeReasoning(channel, event.sessionId);
513
+ if (unpublished) {
514
+ await deliverReplyText({
567
515
  channel,
516
+ text: result,
568
517
  sessionId: event.sessionId,
569
- status: "completed",
570
- host: ctx.host,
571
518
  });
572
- // Always drop the assistant chip. message.completed already clears
573
- // after a normal reply, but a tool-call-only finish (or a missed
574
- // final assistant message) never hits that path — leaving
575
- // "Working…" stuck until Slack expires it.
576
- if (channel.state.channelId !== null && channel.state.threadTs !== null) {
577
- yield clearWorkingStatus(channel.state.channelId, channel.state.threadTs);
578
- }
579
- if (suggestedPrompts.length === 0 ||
580
- channel.state.channelId === null ||
581
- channel.state.threadTs === null) {
582
- return;
583
- }
584
- yield maybeSetSuggestedPrompts(Object.assign(Object.assign({ botToken, channelId: channel.state.channelId, threadTs: channel.state.threadTs, prompts: suggestedPrompts }, (suggestedPromptsTitle === undefined ? {} : { title: suggestedPromptsTitle })), { log }));
519
+ }
520
+ // Always close leftovers. deliverReplyText may fall through to
521
+ // postMessage when streaming is unavailable and leave streamTs open.
522
+ await strategy.cleanupOrphan({ channel });
523
+ await progress.clear({ channel });
524
+ await paintReplyFooter({
525
+ channel,
526
+ sessionId: event.sessionId,
527
+ status: "completed",
528
+ host: ctx.host,
529
+ });
530
+ // Always drop the assistant chip. message.completed already clears
531
+ // after a normal reply, but a tool-call-only finish (or a missed
532
+ // final assistant message) never hits that path — leaving
533
+ // "Working…" stuck until Slack expires it.
534
+ if (channel.state.channelId !== null && channel.state.threadTs !== null) {
535
+ await clearWorkingStatus(channel.state.channelId, channel.state.threadTs);
536
+ }
537
+ if (suggestedPrompts.length === 0 ||
538
+ channel.state.channelId === null ||
539
+ channel.state.threadTs === null) {
540
+ return;
541
+ }
542
+ await maybeSetSuggestedPrompts({
543
+ botToken,
544
+ channelId: channel.state.channelId,
545
+ threadTs: channel.state.threadTs,
546
+ prompts: suggestedPrompts,
547
+ ...(suggestedPromptsTitle === undefined ? {} : { title: suggestedPromptsTitle }),
548
+ log,
585
549
  });
586
550
  },
587
- "turn.failed"(event, channel, ctx) {
588
- return __awaiter(this, void 0, void 0, function* () {
589
- var _a;
590
- const log = getLog();
591
- const state = channel.state;
592
- log.error("turn.failed", {
593
- session: event.sessionId,
594
- turn: event.turnId,
595
- error: event.data.message,
596
- channel: state.channelId,
597
- thread_ts: state.threadTs,
598
- });
599
- if (state.channelId === null || state.threadTs === null) {
600
- return;
601
- }
602
- const errorText = formatSlackTurnFailureMessage(event.data.message);
603
- let delivered = false;
604
- if (streamLive(state)) {
605
- yield completeReasoning(channel, event.sessionId);
606
- ({ delivered } = yield strategy.fail({
607
- channel,
608
- channelId: (_a = state.streamChannelId) !== null && _a !== void 0 ? _a : state.channelId,
609
- errorText,
610
- sessionId: event.sessionId,
611
- }));
612
- }
613
- if (!delivered) {
614
- yield finishProgress({
615
- channel,
616
- text: errorText,
617
- sessionId: event.sessionId,
618
- });
619
- }
620
- yield paintReplyFooter({
551
+ async "turn.failed"(event, channel, ctx) {
552
+ const log = getLog();
553
+ const state = channel.state;
554
+ log.error("turn.failed", {
555
+ session: event.sessionId,
556
+ turn: event.turnId,
557
+ error: event.data.message,
558
+ channel: state.channelId,
559
+ thread_ts: state.threadTs,
560
+ });
561
+ if (state.channelId === null || state.threadTs === null) {
562
+ return;
563
+ }
564
+ const errorText = formatSlackTurnFailureMessage(event.data.message);
565
+ let delivered = false;
566
+ if (streamLive(state)) {
567
+ await completeReasoning(channel, event.sessionId);
568
+ ({ delivered } = await strategy.fail({
621
569
  channel,
570
+ channelId: state.streamChannelId ?? state.channelId,
571
+ errorText,
572
+ sessionId: event.sessionId,
573
+ }));
574
+ }
575
+ if (!delivered) {
576
+ await finishProgress({
577
+ channel,
578
+ text: errorText,
622
579
  sessionId: event.sessionId,
623
- status: "failed",
624
- host: ctx.host,
625
580
  });
626
- yield clearWorkingStatus(state.channelId, state.threadTs);
581
+ }
582
+ await paintReplyFooter({
583
+ channel,
584
+ sessionId: event.sessionId,
585
+ status: "failed",
586
+ host: ctx.host,
627
587
  });
588
+ await clearWorkingStatus(state.channelId, state.threadTs);
628
589
  },
629
590
  };
630
591
  }